From 0267fe2103e1fef6c5520dba13b5eac66228be18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Wed, 10 Jun 2026 19:41:55 +0200 Subject: [PATCH 1/3] feat: support Android emulator camera video files --- src/client-types.ts | 4 ++ src/commands/cli-grammar/apps.ts | 2 + src/commands/client-command-metadata.ts | 2 + src/daemon/handlers/__tests__/session.test.ts | 55 +++++++++++++++++++ src/daemon/handlers/session-state.ts | 33 +++++++++-- .../android/__tests__/devices.test.ts | 45 +++++++++++++++ src/platforms/android/devices.ts | 51 +++++++++++++++++ src/utils/__tests__/args.test.ts | 15 ++++- src/utils/cli-command-overrides.ts | 2 +- src/utils/cli-flags.ts | 18 ++++++ 10 files changed, 219 insertions(+), 8 deletions(-) diff --git a/src/client-types.ts b/src/client-types.ts index ed9ea1bd1..f4483b046 100644 --- a/src/client-types.ts +++ b/src/client-types.ts @@ -555,6 +555,8 @@ type RepeatedPressOptions = { export type DeviceBootOptions = DeviceCommandBaseOptions & { headless?: boolean; + cameraFront?: string; + cameraBack?: string; }; export type DeviceShutdownOptions = DeviceCommandBaseOptions; @@ -850,6 +852,8 @@ type CommandExecutionOptions = Partial & { pauseMs?: number; pattern?: SwipePattern; headless?: boolean; + cameraFront?: string; + cameraBack?: string; restart?: boolean; replayUpdate?: boolean; replayBackend?: string; diff --git a/src/commands/cli-grammar/apps.ts b/src/commands/cli-grammar/apps.ts index 7aa390e85..05630c9da 100644 --- a/src/commands/cli-grammar/apps.ts +++ b/src/commands/cli-grammar/apps.ts @@ -28,6 +28,8 @@ export const appCliReaders = { boot: (_positionals, flags) => ({ ...commonInputFromFlags(flags), headless: flags.headless, + cameraFront: flags.cameraFront, + cameraBack: flags.cameraBack, }), shutdown: (_positionals, flags) => commonInputFromFlags(flags), prepare: (positionals, flags) => ({ diff --git a/src/commands/client-command-metadata.ts b/src/commands/client-command-metadata.ts index 718a232d8..08442e7bc 100644 --- a/src/commands/client-command-metadata.ts +++ b/src/commands/client-command-metadata.ts @@ -37,6 +37,8 @@ export const clientCommandMetadata = [ defineClientCommandMetadata('devices', {}), defineClientCommandMetadata('boot', { headless: booleanField('Boot without showing simulator UI when supported.'), + cameraFront: stringField('Android emulator front camera mode or video file path used at boot.'), + cameraBack: stringField('Android emulator back camera mode or video file path used at boot.'), }), defineClientCommandMetadata('shutdown', {}), defineClientCommandMetadata('prepare', { diff --git a/src/daemon/handlers/__tests__/session.test.ts b/src/daemon/handlers/__tests__/session.test.ts index bd611040b..0742e4d83 100644 --- a/src/daemon/handlers/__tests__/session.test.ts +++ b/src/daemon/handlers/__tests__/session.test.ts @@ -937,6 +937,61 @@ test('boot launches Android emulator with GUI when no running device matches', a } }); +test('boot launches Android emulator with camera video files', async () => { + const sessionStore = makeSessionStore(); + mockResolveTargetDevice.mockRejectedValue(new AppError('DEVICE_NOT_FOUND', 'No device found')); + const launchCalls: Array<{ + avdName: string; + serial?: string; + headless?: boolean; + cameraFront?: string; + cameraBack?: string; + }> = []; + mockEnsureAndroidEmulatorBooted.mockImplementation( + async ({ avdName, serial, headless, cameraFront, cameraBack }) => { + launchCalls.push({ avdName, serial, headless, cameraFront, cameraBack }); + return { + platform: 'android', + id: 'emulator-5554', + name: 'Pixel_9_Pro_XL', + kind: 'emulator', + target: 'mobile', + booted: true, + }; + }, + ); + const response = await handleSessionCommands({ + req: { + token: 't', + session: 'default', + command: 'boot', + positionals: [], + flags: { + platform: 'android', + device: 'Pixel_9_Pro_XL', + cameraFront: '/tmp/front.mp4', + cameraBack: '/tmp/back.mp4', + }, + }, + sessionName: 'default', + logPath: path.join(os.tmpdir(), 'daemon.log'), + sessionStore, + invoke: noopInvoke, + }); + + expect(response).toBeTruthy(); + expect(response?.ok).toBe(true); + expect(launchCalls).toEqual([ + { + avdName: 'Pixel_9_Pro_XL', + serial: undefined, + headless: false, + cameraFront: '/tmp/front.mp4', + cameraBack: '/tmp/back.mp4', + }, + ]); +}); + test('boot --headless requires avd selector when device cannot be resolved', async () => { const sessionStore = makeSessionStore(); mockResolveTargetDevice.mockRejectedValue(new AppError('DEVICE_NOT_FOUND', 'No device found')); diff --git a/src/daemon/handlers/session-state.ts b/src/daemon/handlers/session-state.ts index 78c465bda..af92b436f 100644 --- a/src/daemon/handlers/session-state.ts +++ b/src/daemon/handlers/session-state.ts @@ -18,6 +18,8 @@ async function ensureAndroidEmulatorBoot(params: { avdName: string; serial?: string; headless?: boolean; + cameraFront?: string; + cameraBack?: string; }): Promise { const { ensureAndroidEmulatorBooted } = await import('../../platforms/android/devices.ts'); return await ensureAndroidEmulatorBooted(params); @@ -148,12 +150,19 @@ export async function handleSessionStateCommands(params: { normalizePlatformSelector(flags.platform) ?? session?.device.platform; const targetsAndroid = normalizedPlatform === 'android'; const wantsAndroidHeadless = flags.headless === true; + const wantsAndroidCamera = Boolean(flags.cameraFront || flags.cameraBack); if (wantsAndroidHeadless && !targetsAndroid) { return errorResponse( 'INVALID_ARGS', 'boot --headless is supported only for Android emulators.', ); } + if (wantsAndroidCamera && !targetsAndroid) { + return errorResponse( + 'INVALID_ARGS', + 'boot --camera-front/--camera-back is supported only for Android emulators.', + ); + } const fallbackAvdName = resolveAndroidEmulatorAvdName({ flags, @@ -173,13 +182,13 @@ export async function handleSessionStateCommands(params: { const appErr = asAppError(error); if ( targetsAndroid && - wantsAndroidHeadless && + (wantsAndroidHeadless || wantsAndroidCamera) && !fallbackAvdName && appErr.code === 'DEVICE_NOT_FOUND' ) { return errorResponse( 'INVALID_ARGS', - 'boot --headless requires --device (or an Android emulator session target).', + androidBootOptionsRequireDeviceMessage(wantsAndroidCamera), ); } if ( @@ -193,6 +202,8 @@ export async function handleSessionStateCommands(params: { avdName: fallbackAvdName, serial: flags.serial, headless: wantsAndroidHeadless, + cameraFront: typeof flags.cameraFront === 'string' ? flags.cameraFront : undefined, + cameraBack: typeof flags.cameraBack === 'string' ? flags.cameraBack : undefined, }); launchedAndroidEmulator = true; } @@ -204,11 +215,13 @@ export async function handleSessionStateCommands(params: { ); } - if (targetsAndroid && wantsAndroidHeadless) { + if (targetsAndroid && (wantsAndroidHeadless || wantsAndroidCamera)) { if (device.platform !== 'android' || device.kind !== 'emulator') { return errorResponse( 'INVALID_ARGS', - 'boot --headless is supported only for Android emulators.', + wantsAndroidCamera + ? 'boot --camera-front/--camera-back is supported only for Android emulators.' + : 'boot --headless is supported only for Android emulators.', ); } if (!launchedAndroidEmulator) { @@ -220,13 +233,15 @@ export async function handleSessionStateCommands(params: { if (!avdName) { return errorResponse( 'INVALID_ARGS', - 'boot --headless requires --device (or an Android emulator session target).', + androidBootOptionsRequireDeviceMessage(wantsAndroidCamera), ); } device = await ensureAndroidEmulatorBoot({ avdName, serial: flags.serial, - headless: true, + headless: wantsAndroidHeadless, + cameraFront: typeof flags.cameraFront === 'string' ? flags.cameraFront : undefined, + cameraBack: typeof flags.cameraBack === 'string' ? flags.cameraBack : undefined, }); } await ensureDeviceReady(device); @@ -332,6 +347,12 @@ export async function handleSessionStateCommands(params: { return null; } +function androidBootOptionsRequireDeviceMessage(wantsAndroidCamera: boolean): string { + return wantsAndroidCamera + ? 'boot --camera-front/--camera-back requires --device (or an Android emulator session target).' + : 'boot --headless requires --device (or an Android emulator session target).'; +} + function shutdownFailureMessage( shutdown: Awaited>, ): string { diff --git a/src/platforms/android/__tests__/devices.test.ts b/src/platforms/android/__tests__/devices.test.ts index 1c2d58825..53b6587f6 100644 --- a/src/platforms/android/__tests__/devices.test.ts +++ b/src/platforms/android/__tests__/devices.test.ts @@ -355,6 +355,47 @@ test('ensureAndroidEmulatorBooted launches emulator with GUI by default', async }); }, 10_000); +test('ensureAndroidEmulatorBooted launches emulator with camera video files', async () => { + await withMockedAndroidTools(async ({ emulatorLogPath }) => { + const frontVideo = path.join(os.tmpdir(), 'front-camera.mp4'); + const backVideo = path.join(os.tmpdir(), 'back-camera.mp4'); + await fs.writeFile(frontVideo, 'front', 'utf8'); + await fs.writeFile(backVideo, 'back', 'utf8'); + + const device = await ensureAndroidEmulatorBooted({ + avdName: 'Pixel_9_Pro_XL', + timeoutMs: 5_000, + cameraFront: frontVideo, + cameraBack: backVideo, + }); + assert.equal(device.id, 'emulator-5554'); + const log = await fs.readFile(emulatorLogPath, 'utf8'); + assert.match( + log, + new RegExp(`-camera-front videofile:${escapeRegExp(path.resolve(frontVideo))}`), + ); + assert.match( + log, + new RegExp(`-camera-back videofile:${escapeRegExp(path.resolve(backVideo))}`), + ); + }); +}, 10_000); + +test('ensureAndroidEmulatorBooted rejects camera inputs for a running emulator', async () => { + await withMockedAndroidTools(async ({ emulatorBootedPath }) => { + await fs.writeFile(emulatorBootedPath, 'ready', 'utf8'); + await assert.rejects( + async () => + await ensureAndroidEmulatorBooted({ + avdName: 'Pixel_9_Pro_XL', + timeoutMs: 5_000, + cameraBack: '/tmp/back-camera.mp4', + }), + /camera inputs can only be applied when starting an emulator/, + ); + }); +}, 10_000); + test('ensureAndroidEmulatorBooted falls back to ANDROID_SDK_ROOT when PATH is incomplete', async () => { await withMockedAndroidSdkRoot(async ({ emulatorLogPath, sdkRoot }) => { const device = await ensureAndroidEmulatorBooted({ @@ -370,3 +411,7 @@ test('ensureAndroidEmulatorBooted falls back to ANDROID_SDK_ROOT when PATH is in assert.equal(process.env.ANDROID_HOME, sdkRoot); }); }, 10_000); + +function escapeRegExp(value: string): string { + return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} diff --git a/src/platforms/android/devices.ts b/src/platforms/android/devices.ts index 22d396460..e130d5d48 100644 --- a/src/platforms/android/devices.ts +++ b/src/platforms/android/devices.ts @@ -1,3 +1,5 @@ +import { existsSync } from 'node:fs'; +import path from 'node:path'; import { runCmd, runCmdDetached, whichCmd } from '../../utils/exec.ts'; import type { ExecResult } from '../../utils/exec.ts'; import { sleep } from '../../utils/timeouts.ts'; @@ -403,6 +405,8 @@ export async function ensureAndroidEmulatorBooted(params: { serial?: string; timeoutMs?: number; headless?: boolean; + cameraFront?: string; + cameraBack?: string; }): Promise { await ensureAndroidSdkPathConfigured(); const requestedAvdName = params.avdName.trim(); @@ -434,11 +438,26 @@ export async function ensureAndroidEmulatorBooted(params: { resolvedAvdName, params.serial, ); + if (existing && (params.cameraFront || params.cameraBack)) { + throw new AppError( + 'INVALID_STATE', + 'Android emulator camera inputs can only be applied when starting an emulator.', + { + avdName: resolvedAvdName, + serial: existing.id, + hint: 'Shut down the emulator first, then run boot again with --camera-front or --camera-back.', + }, + ); + } if (!existing) { const launchArgs = ['-avd', resolvedAvdName]; if (params.headless) { launchArgs.push('-no-window', '-no-audio'); } + const cameraFront = resolveAndroidEmulatorCameraMode(params.cameraFront, 'front'); + if (cameraFront) launchArgs.push('-camera-front', cameraFront); + const cameraBack = resolveAndroidEmulatorCameraMode(params.cameraBack, 'back'); + if (cameraBack) launchArgs.push('-camera-back', cameraBack); runCmdDetached('emulator', launchArgs); } @@ -468,6 +487,38 @@ export async function ensureAndroidEmulatorBooted(params: { }; } +function resolveAndroidEmulatorCameraMode( + value: string | undefined, + camera: 'front' | 'back', +): string | undefined { + const trimmed = value?.trim(); + if (!trimmed) return undefined; + if (trimmed.startsWith('videofile:')) { + const videoPath = trimmed.slice('videofile:'.length); + const resolvedPath = path.resolve(videoPath); + if (videoPath && existsSync(resolvedPath)) return `videofile:${resolvedPath}`; + } + if (isAndroidEmulatorCameraMode(trimmed, camera)) return trimmed; + const resolvedPath = path.resolve(trimmed); + if (existsSync(resolvedPath)) return `videofile:${resolvedPath}`; + throw new AppError( + 'INVALID_ARGS', + `Android emulator ${camera} camera input is not valid: ${trimmed}`, + { + hint: + camera === 'back' + ? 'Use a video file path, videofile:, emulated, virtualscene, webcam, or none.' + : 'Use a video file path, videofile:, emulated, webcam, or none.', + }, + ); +} + +function isAndroidEmulatorCameraMode(value: string, camera: 'front' | 'back'): boolean { + if (value === 'emulated' || value === 'none') return true; + if (/^webcam\d+$/.test(value)) return true; + return camera === 'back' && value === 'virtualscene'; +} + export async function waitForAndroidBoot(serial: string, timeoutMs = 60000): Promise { const timeoutBudget = timeoutMs; const deadline = Deadline.fromTimeoutMs(timeoutBudget); diff --git a/src/utils/__tests__/args.test.ts b/src/utils/__tests__/args.test.ts index 6f12b100f..d3ebc8cb6 100644 --- a/src/utils/__tests__/args.test.ts +++ b/src/utils/__tests__/args.test.ts @@ -34,13 +34,26 @@ test('parseArgs recognizes command-specific flag combinations', async () => { }, { label: 'boot --headless on android', - argv: ['boot', '--platform', 'android', '--device', 'Pixel_9_Pro_XL', '--headless'], + argv: [ + 'boot', + '--platform', + 'android', + '--device', + 'Pixel_9_Pro_XL', + '--headless', + '--camera-front', + '/tmp/front.mp4', + '--camera-back', + '/tmp/back.mp4', + ], strictFlags: true, assertParsed: (parsed) => { assert.equal(parsed.command, 'boot'); assert.equal(parsed.flags.platform, 'android'); assert.equal(parsed.flags.device, 'Pixel_9_Pro_XL'); assert.equal(parsed.flags.headless, true); + assert.equal(parsed.flags.cameraFront, '/tmp/front.mp4'); + assert.equal(parsed.flags.cameraBack, '/tmp/back.mp4'); }, }, { diff --git a/src/utils/cli-command-overrides.ts b/src/utils/cli-command-overrides.ts index 0b1769526..bd1142d30 100644 --- a/src/utils/cli-command-overrides.ts +++ b/src/utils/cli-command-overrides.ts @@ -63,7 +63,7 @@ const SCHEMA_ONLY_CLI_COMMAND_SCHEMAS = { const CLI_COMMAND_OVERRIDES = { boot: { summary: 'Boot target device/simulator', - allowedFlags: ['headless'], + allowedFlags: ['headless', 'cameraFront', 'cameraBack'], }, shutdown: { summary: 'Shutdown target simulator/emulator', diff --git a/src/utils/cli-flags.ts b/src/utils/cli-flags.ts index 4a9ce9a37..e4d38c022 100644 --- a/src/utils/cli-flags.ts +++ b/src/utils/cli-flags.ts @@ -90,6 +90,8 @@ export type CliFlags = RemoteConfigMetroOptions & relaunch?: boolean; surface?: SessionSurface; headless?: boolean; + cameraFront?: string; + cameraBack?: string; restart?: boolean; noRecord?: boolean; retainPaths?: boolean; @@ -359,6 +361,22 @@ const FLAG_DEFINITIONS: readonly FlagDefinition[] = [ usageLabel: '--headless', usageDescription: 'Boot: launch Android emulator without a GUI window', }, + { + key: 'cameraFront', + names: ['--camera-front'], + type: 'string', + usageLabel: '--camera-front ', + usageDescription: + 'Boot: Android emulator front camera mode or video file path (for example emulated, none, webcam0, or ./front.mp4)', + }, + { + key: 'cameraBack', + names: ['--camera-back'], + type: 'string', + usageLabel: '--camera-back ', + usageDescription: + 'Boot: Android emulator back camera mode or video file path (for example virtualscene, emulated, none, webcam0, or ./back.mp4)', + }, { key: 'metroHost', names: ['--metro-host'], From af5eeb6835cccbd36df7c4b61273af664c7c2bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Wed, 10 Jun 2026 20:05:17 +0200 Subject: [PATCH 2/3] fix: address camera video PR feedback --- src/__tests__/client.test.ts | 29 +++++++++++++++ src/client-normalizers.ts | 2 ++ src/platforms/android/devices.ts | 61 +++++++++++++++++++++----------- website/docs/docs/client-api.md | 13 +++++++ website/docs/docs/commands.md | 3 ++ 5 files changed, 88 insertions(+), 20 deletions(-) diff --git a/src/__tests__/client.test.ts b/src/__tests__/client.test.ts index ea5e249d5..40034481e 100644 --- a/src/__tests__/client.test.ts +++ b/src/__tests__/client.test.ts @@ -80,6 +80,35 @@ test('apps.open resolves session device identifiers from open response', async ( assert.equal(result.device?.ios?.simulatorSetPath, '/tmp/sim-set'); }); +test('devices.boot forwards Android emulator camera options', async () => { + const setup = createTransport(async () => ({ + ok: true, + data: { + platform: 'android', + target: 'mobile', + device: 'Pixel_9_Pro_XL', + id: 'emulator-5554', + kind: 'emulator', + booted: true, + }, + })); + const client = createAgentDeviceClient(setup.config, { transport: setup.transport }); + + await client.devices.boot({ + platform: 'android', + device: 'Pixel_9_Pro_XL', + cameraFront: '/tmp/front.mp4', + cameraBack: 'virtualscene', + }); + + assert.equal(setup.calls.length, 1); + assert.equal(setup.calls[0]?.command, 'boot'); + assert.equal(setup.calls[0]?.flags?.platform, 'android'); + assert.equal(setup.calls[0]?.flags?.device, 'Pixel_9_Pro_XL'); + assert.equal(setup.calls[0]?.flags?.cameraFront, '/tmp/front.mp4'); + assert.equal(setup.calls[0]?.flags?.cameraBack, 'virtualscene'); +}); + test('apps.open forwards explicit runtime hints through the daemon request', async () => { const setup = createTransport(async () => ({ ok: true, diff --git a/src/client-normalizers.ts b/src/client-normalizers.ts index 25cd3d796..b306bca57 100644 --- a/src/client-normalizers.ts +++ b/src/client-normalizers.ts @@ -311,6 +311,8 @@ export function buildFlags(options: InternalRequestOptions): CommandFlags { pauseMs: options.pauseMs, pattern: options.pattern, headless: options.headless, + cameraFront: options.cameraFront, + cameraBack: options.cameraBack, restart: options.restart, replayUpdate: options.replayUpdate, replayBackend: options.replayBackend, diff --git a/src/platforms/android/devices.ts b/src/platforms/android/devices.ts index e130d5d48..36ebfea31 100644 --- a/src/platforms/android/devices.ts +++ b/src/platforms/android/devices.ts @@ -438,27 +438,9 @@ export async function ensureAndroidEmulatorBooted(params: { resolvedAvdName, params.serial, ); - if (existing && (params.cameraFront || params.cameraBack)) { - throw new AppError( - 'INVALID_STATE', - 'Android emulator camera inputs can only be applied when starting an emulator.', - { - avdName: resolvedAvdName, - serial: existing.id, - hint: 'Shut down the emulator first, then run boot again with --camera-front or --camera-back.', - }, - ); - } + assertCameraInputsCanApplyToEmulator(existing, resolvedAvdName, params); if (!existing) { - const launchArgs = ['-avd', resolvedAvdName]; - if (params.headless) { - launchArgs.push('-no-window', '-no-audio'); - } - const cameraFront = resolveAndroidEmulatorCameraMode(params.cameraFront, 'front'); - if (cameraFront) launchArgs.push('-camera-front', cameraFront); - const cameraBack = resolveAndroidEmulatorCameraMode(params.cameraBack, 'back'); - if (cameraBack) launchArgs.push('-camera-back', cameraBack); - runCmdDetached('emulator', launchArgs); + runCmdDetached('emulator', buildEmulatorLaunchArgs(resolvedAvdName, params)); } const discovered = @@ -487,6 +469,45 @@ export async function ensureAndroidEmulatorBooted(params: { }; } +function assertCameraInputsCanApplyToEmulator( + existing: DeviceInfo | undefined, + resolvedAvdName: string, + params: { + cameraFront?: string; + cameraBack?: string; + }, +): void { + if (!existing || (!params.cameraFront && !params.cameraBack)) return; + throw new AppError( + 'INVALID_STATE', + 'Android emulator camera inputs can only be applied when starting an emulator.', + { + avdName: resolvedAvdName, + serial: existing.id, + hint: 'Shut down the emulator first, then run boot again with --camera-front or --camera-back.', + }, + ); +} + +function buildEmulatorLaunchArgs( + resolvedAvdName: string, + params: { + headless?: boolean; + cameraFront?: string; + cameraBack?: string; + }, +): string[] { + const launchArgs = ['-avd', resolvedAvdName]; + if (params.headless) { + launchArgs.push('-no-window', '-no-audio'); + } + const cameraFront = resolveAndroidEmulatorCameraMode(params.cameraFront, 'front'); + if (cameraFront) launchArgs.push('-camera-front', cameraFront); + const cameraBack = resolveAndroidEmulatorCameraMode(params.cameraBack, 'back'); + if (cameraBack) launchArgs.push('-camera-back', cameraBack); + return launchArgs; +} + function resolveAndroidEmulatorCameraMode( value: string | undefined, camera: 'front' | 'back', diff --git a/website/docs/docs/client-api.md b/website/docs/docs/client-api.md index efa594947..36cf4a119 100644 --- a/website/docs/docs/client-api.md +++ b/website/docs/docs/client-api.md @@ -257,6 +257,19 @@ Additional CLI-backed methods are exposed on their domain groups with typed opti - `client.recording.record()` and `client.recording.trace()` - `client.settings.update()` +`client.devices.boot({ platform: 'android', device: 'Pixel_9_Pro_XL', headless: true })` starts an Android emulator without a GUI when it is not already running. To launch with emulator camera inputs, pass `cameraFront` and/or `cameraBack` with `emulated`, `none`, `webcam`, `virtualscene` for the back camera, or a video file path: + +```ts +await client.devices.boot({ + platform: 'android', + device: 'Pixel_9_Pro_XL', + cameraFront: './front.mp4', + cameraBack: 'virtualscene', +}); +``` + +Camera inputs are Android-emulator-only and apply only when starting the emulator; shut down a running emulator before changing them. + `client.observability.perf()` returns daemon-shaped JSON so local and remote transports expose the same metrics payload. Pass `{ area: 'metrics' }` for the broad startup/CPU/memory/frame first pass, or `{ area: 'frames' }` for a focused frame/jank-health payload. On Android and supported Apple targets, `data.metrics.fps.droppedFramePercent` is the primary frame-smoothness value. Android derives it from the current `adb shell dumpsys gfxinfo framestats` window; connected iOS devices derive it from `xcrun xctrace` Animation Hitches for the active app process. Frame samples include `windowStartedAt`, `windowEndedAt`, and `worstWindows` so agents can correlate dropped-frame clusters with logs, network entries, and their own session actions. A successful Android read resets Android frame stats; `open ` resets the Android frame window too, so agents can call `perf({ area: 'frames' })`, perform a transition or gesture, then call it again to inspect that focused window. iOS simulator and macOS app sessions report frame health as unavailable rather than inventing FPS or dropped-frame values. `client.recording.record({ action: 'start', path, quality: 5 })` starts a smaller 50% resolution video; omit `quality` to keep native/current resolution. diff --git a/website/docs/docs/commands.md b/website/docs/docs/commands.md index 1e59dafa6..5d8dcb26d 100644 --- a/website/docs/docs/commands.md +++ b/website/docs/docs/commands.md @@ -38,6 +38,7 @@ agent-device boot agent-device boot --platform ios agent-device boot --platform android agent-device boot --platform android --device Pixel_9_Pro_XL --headless +agent-device boot --platform android --device Pixel_9_Pro_XL --camera-back ./back.mp4 --camera-front none agent-device shutdown --platform ios agent-device shutdown --platform android --device Pixel_9_Pro_XL agent-device open [app|url] [url] @@ -62,6 +63,8 @@ agent-device app-switcher - `boot` is mainly needed when starting a new session and `open` fails because no booted simulator/emulator is available. - Android: `boot --platform android --device ` launches that emulator in GUI mode when needed. - Android: add `--headless` to launch without opening a GUI window. +- Android: add `--camera-front ` and/or `--camera-back ` when launching an emulator with camera inputs. Supported modes are `emulated`, `none`, `webcam`, and `virtualscene` for the back camera only. File paths are converted to `videofile:` for the emulator. +- Android camera inputs apply only when starting an emulator. Shut down an already-running emulator first, then run `boot` again with the camera flags. - Android: `shutdown --platform android --device ` stops a running emulator. - `open [app|url] [url]` already boots/activates the selected target when needed. - `open ` deep links are supported on Android and iOS. From 79c8bc75426ed45a548634f94f924b25598bb0a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Wed, 10 Jun 2026 21:53:22 +0200 Subject: [PATCH 3/3] feat: support iOS simulator camera videos --- package.json | 1 + src/__tests__/client.test.ts | 2 + src/backend.ts | 1 + src/client-normalizers.ts | 1 + src/client-types.ts | 3 + src/commands/apps.ts | 2 + src/commands/cli-grammar/apps.ts | 1 + src/commands/client-command-metadata.ts | 1 + src/core/__tests__/dispatch-open.test.ts | 46 ++++ src/core/dispatch-context.ts | 1 + src/core/dispatch.ts | 15 ++ src/core/interactor-types.ts | 1 + src/core/interactors/apple.ts | 1 + src/daemon-client.ts | 3 + src/daemon/__tests__/context.test.ts | 6 + src/daemon/context.ts | 1 + src/daemon/handlers/session-open.ts | 17 +- .../ios/__tests__/simulator-camera.test.ts | 84 ++++++++ src/platforms/ios/apps.ts | 71 ++++-- src/platforms/ios/simulator-camera.ts | 191 +++++++++++++++++ src/utils/__tests__/args.test.ts | 18 ++ src/utils/cli-command-overrides.ts | 10 +- src/utils/cli-flags.ts | 8 + third_party/serve-sim-camera/LICENSE | 202 ++++++++++++++++++ third_party/serve-sim-camera/README.md | 20 ++ .../serve-sim-camera/bin/camera-helper | Bin 0 -> 198928 bytes .../bin/camera-injector.dylib | Bin 0 -> 393864 bytes website/docs/docs/client-api.md | 3 + website/docs/docs/commands.md | 2 + 29 files changed, 693 insertions(+), 19 deletions(-) create mode 100644 src/platforms/ios/__tests__/simulator-camera.test.ts create mode 100644 src/platforms/ios/simulator-camera.ts create mode 100644 third_party/serve-sim-camera/LICENSE create mode 100644 third_party/serve-sim-camera/README.md create mode 100755 third_party/serve-sim-camera/bin/camera-helper create mode 100755 third_party/serve-sim-camera/bin/camera-injector.dylib diff --git a/package.json b/package.json index 5572f94b1..c1d92d990 100644 --- a/package.json +++ b/package.json @@ -159,6 +159,7 @@ "!android-snapshot-helper/dist/*.idsig", "android-multitouch-helper/dist", "!android-multitouch-helper/dist/*.idsig", + "third_party/serve-sim-camera", "src/platforms/linux/atspi-dump.py", "skills", "server.json", diff --git a/src/__tests__/client.test.ts b/src/__tests__/client.test.ts index 40034481e..efa5d20f6 100644 --- a/src/__tests__/client.test.ts +++ b/src/__tests__/client.test.ts @@ -66,12 +66,14 @@ test('apps.open resolves session device identifiers from open response', async ( const result = await client.apps.open({ app: 'Settings', platform: 'ios', + cameraVideo: './fixtures/back.mp4', relaunch: true, }); assert.equal(setup.calls.length, 1); assert.equal(setup.calls[0]?.command, 'open'); assert.deepEqual(setup.calls[0]?.positionals, ['Settings']); + assert.equal(setup.calls[0]?.flags?.cameraVideo, './fixtures/back.mp4'); assert.equal(result.identifiers.session, 'qa'); assert.equal(result.identifiers.deviceId, 'SIM-001'); assert.equal(result.identifiers.udid, 'SIM-001'); diff --git a/src/backend.ts b/src/backend.ts index 3f98026de..88e85806e 100644 --- a/src/backend.ts +++ b/src/backend.ts @@ -194,6 +194,7 @@ export type BackendOpenTarget = { }; export type BackendOpenOptions = { + cameraVideo?: string; launchArgs?: string[]; relaunch?: boolean; }; diff --git a/src/client-normalizers.ts b/src/client-normalizers.ts index b306bca57..d3c88661a 100644 --- a/src/client-normalizers.ts +++ b/src/client-normalizers.ts @@ -277,6 +277,7 @@ export function buildFlags(options: InternalRequestOptions): CommandFlags { androidDeviceAllowlist: options.androidDeviceAllowlist, surface: options.surface, activity: options.activity, + cameraVideo: options.cameraVideo, launchConsole: options.launchConsole, launchArgs: options.launchArgs, relaunch: options.relaunch, diff --git a/src/client-types.ts b/src/client-types.ts index f4483b046..0f93b6f29 100644 --- a/src/client-types.ts +++ b/src/client-types.ts @@ -189,6 +189,7 @@ export type AppOpenOptions = AgentDeviceRequestOverrides & url?: string; surface?: SessionSurface; activity?: string; + cameraVideo?: string; launchConsole?: string; launchArgs?: string[]; relaunch?: boolean; @@ -555,6 +556,7 @@ type RepeatedPressOptions = { export type DeviceBootOptions = DeviceCommandBaseOptions & { headless?: boolean; + cameraVideo?: string; cameraFront?: string; cameraBack?: string; }; @@ -882,6 +884,7 @@ export type InternalRequestOptions = AgentDeviceClientConfig & overlayRefs?: boolean; surface?: SessionSurface; activity?: string; + cameraVideo?: string; launchConsole?: string; launchArgs?: string[]; relaunch?: boolean; diff --git a/src/commands/apps.ts b/src/commands/apps.ts index 25833982d..bf3c54696 100644 --- a/src/commands/apps.ts +++ b/src/commands/apps.ts @@ -25,6 +25,7 @@ const MAX_APP_PUSH_PAYLOAD_BYTES = 8 * 1024; export type OpenAppCommandOptions = CommandContext & BackendOpenTarget & { + cameraVideo?: string; launchArgs?: string[]; relaunch?: boolean; }; @@ -105,6 +106,7 @@ export const openAppCommand: RuntimeCommand ); }); +test('dispatch open rejects camera video without an app target', async () => { + await assert.rejects( + () => dispatchCommand(IOS_SIMULATOR, 'open', [], undefined, { cameraVideo: './back.mp4' }), + (error: unknown) => { + assert.equal(error instanceof AppError, true); + assert.equal((error as AppError).code, 'INVALID_ARGS'); + assert.match((error as AppError).message, /requires an app target/i); + return true; + }, + ); +}); + +test('dispatch open forwards iOS simulator camera video to openIosApp', async () => { + await dispatchCommand(IOS_SIMULATOR, 'open', ['com.example.app'], undefined, { + cameraVideo: '/tmp/back.mp4', + }); + + assert.equal(mockOpenIosApp.mock.calls.length, 1); + assert.equal(mockOpenIosApp.mock.calls[0]?.[0], IOS_SIMULATOR); + assert.equal(mockOpenIosApp.mock.calls[0]?.[1], 'com.example.app'); + assert.equal(mockOpenIosApp.mock.calls[0]?.[2]?.cameraVideo, '/tmp/back.mp4'); +}); + +test('dispatch open rejects camera video outside iOS simulator', async () => { + const device: DeviceInfo = { + platform: 'android', + id: 'emulator-5554', + name: 'Pixel', + kind: 'emulator', + booted: true, + }; + + await assert.rejects( + () => + dispatchCommand(device, 'open', ['com.example.app'], undefined, { + cameraVideo: './back.mp4', + }), + (error: unknown) => { + assert.equal(error instanceof AppError, true); + assert.equal((error as AppError).code, 'UNSUPPORTED_OPERATION'); + assert.match((error as AppError).message, /iOS simulators/i); + return true; + }, + ); +}); + test('dispatch open forwards Android launch arguments to openAndroidApp', async () => { const device: DeviceInfo = { platform: 'android', diff --git a/src/core/dispatch-context.ts b/src/core/dispatch-context.ts index 6ff1d58b5..d71e6e95f 100644 --- a/src/core/dispatch-context.ts +++ b/src/core/dispatch-context.ts @@ -33,6 +33,7 @@ export type DispatchContext = ScreenshotDispatchFlags & { requestId?: string; appBundleId?: string; activity?: string; + cameraVideo?: string; launchConsole?: string; launchArgs?: string[]; clearAppState?: boolean; diff --git a/src/core/dispatch.ts b/src/core/dispatch.ts index 6143967d9..943929d9d 100644 --- a/src/core/dispatch.ts +++ b/src/core/dispatch.ts @@ -175,6 +175,7 @@ async function handleOpenCommand( ): Promise> { const app = positionals[0]; const url = positionals[1]; + const cameraVideo = context?.cameraVideo; const launchConsole = context?.launchConsole; const launchArgs = context?.launchArgs; if (positionals.length > 2) { @@ -187,9 +188,18 @@ async function handleOpenCommand( if (launchArgs && launchArgs.length > 0) { throw new AppError('INVALID_ARGS', '--launch-args requires an app target'); } + if (cameraVideo) { + throw new AppError('INVALID_ARGS', '--camera-video requires an app target'); + } await interactor.openDevice(); return { app: null, ...successText('Opened device') }; } + if (cameraVideo && (device.platform !== 'ios' || device.kind !== 'simulator')) { + throw new AppError( + 'UNSUPPORTED_OPERATION', + '--camera-video is supported only for iOS simulators.', + ); + } if (launchConsole && (device.platform !== 'ios' || device.kind !== 'simulator')) { throw new AppError('UNSUPPORTED_OPERATION', LAUNCH_CONSOLE_IOS_SIMULATOR_ONLY_MESSAGE); } @@ -212,6 +222,7 @@ async function handleOpenCommand( await interactor.open(app, { activity: context?.activity, appBundleId: context?.appBundleId, + cameraVideo, launchArgs, url, }); @@ -220,6 +231,9 @@ async function handleOpenCommand( if (launchConsole && isDeepLinkTarget(app)) { throw new AppError('INVALID_ARGS', LAUNCH_CONSOLE_DIRECT_APP_ONLY_MESSAGE); } + if (cameraVideo && isDeepLinkTarget(app)) { + throw new AppError('INVALID_ARGS', '--camera-video requires an app target'); + } if (context?.clearAppState) { if (isDeepLinkTarget(app)) { throw new AppError( @@ -232,6 +246,7 @@ async function handleOpenCommand( await interactor.open(app, { activity: context?.activity, appBundleId: context?.appBundleId, + cameraVideo, launchConsole, launchArgs, }); diff --git a/src/core/interactor-types.ts b/src/core/interactor-types.ts index 9966d2cca..a84a2edf6 100644 --- a/src/core/interactor-types.ts +++ b/src/core/interactor-types.ts @@ -57,6 +57,7 @@ export type Interactor = { options?: { activity?: string; appBundleId?: string; + cameraVideo?: string; launchConsole?: string; launchArgs?: string[]; url?: string; diff --git a/src/core/interactors/apple.ts b/src/core/interactors/apple.ts index 744adcb01..82cb79b56 100644 --- a/src/core/interactors/apple.ts +++ b/src/core/interactors/apple.ts @@ -29,6 +29,7 @@ export function createAppleInteractor( open: (app, options) => openIosApp(device, app, { appBundleId: options?.appBundleId, + cameraVideo: options?.cameraVideo, launchConsole: options?.launchConsole, launchArgs: options?.launchArgs, url: options?.url, diff --git a/src/daemon-client.ts b/src/daemon-client.ts index 981b8b815..20cad81d8 100644 --- a/src/daemon-client.ts +++ b/src/daemon-client.ts @@ -54,6 +54,7 @@ export type OpenAppOptions = { udid?: NonNullable['udid']; serial?: NonNullable['serial']; activity?: NonNullable['activity']; + cameraVideo?: NonNullable['cameraVideo']; launchConsole?: NonNullable['launchConsole']; launchArgs?: NonNullable['launchArgs']; out?: NonNullable['out']; @@ -226,6 +227,7 @@ export async function openApp(options: OpenAppOptions = {}): Promise { assert.equal(context.clearAppState, true); }); +test('contextFromFlags forwards iOS simulator camera video path', () => { + const flags: CommandFlags = { cameraVideo: './fixtures/camera-feed.mp4' }; + const context = contextFromFlags('/tmp/agent-device.log', flags); + assert.equal(context.cameraVideo, './fixtures/camera-feed.mp4'); +}); + test('contextFromFlags forwards screenshot flags from CLI flags', () => { const flags: CommandFlags = { screenshotFullscreen: true, diff --git a/src/daemon/context.ts b/src/daemon/context.ts index ff35ded64..d490ea474 100644 --- a/src/daemon/context.ts +++ b/src/daemon/context.ts @@ -23,6 +23,7 @@ export function contextFromFlags( requestId: effectiveRequestId, appBundleId, activity: flags?.activity, + cameraVideo: flags?.cameraVideo, launchConsole: flags?.launchConsole, launchArgs: flags?.launchArgs, clearAppState: flags?.clearAppState, diff --git a/src/daemon/handlers/session-open.ts b/src/daemon/handlers/session-open.ts index 22d298e28..d9ccbb380 100644 --- a/src/daemon/handlers/session-open.ts +++ b/src/daemon/handlers/session-open.ts @@ -101,11 +101,26 @@ function contextForRuntimeLaunchUrl( traceLogPath?: string, ): ReturnType { const context = contextFromFlags(logPath, flags, appBundleId, traceLogPath); + delete context.cameraVideo; delete context.launchConsole; delete context.launchArgs; return context; } +function contextForOpenDispatch( + logPath: string, + flags: DaemonRequest['flags'], + appBundleId: string | undefined, + traceLogPath: string | undefined, + cwd: string | undefined, +): ReturnType { + const context = contextFromFlags(logPath, flags, appBundleId, traceLogPath); + if (context.cameraVideo) { + context.cameraVideo = SessionStore.expandHome(context.cameraVideo, cwd); + } + return context; +} + function buildStartupPerfSample( startedAtMs: number, appTarget: string | undefined, @@ -218,7 +233,7 @@ async function completeOpenCommand(params: { } const openDispatchSession = provisionalSession.session ?? existingSession; await dispatchCommand(device, 'open', openPositionals, req.flags?.out, { - ...contextFromFlags(logPath, req.flags, sessionAppBundleId), + ...contextForOpenDispatch(logPath, req.flags, sessionAppBundleId, traceLogPath, req.meta?.cwd), }); timing.openDispatchDurationMs = Math.max(0, Date.now() - openStartedAtMs); const launchUrlStartedAtMs = Date.now(); diff --git a/src/platforms/ios/__tests__/simulator-camera.test.ts b/src/platforms/ios/__tests__/simulator-camera.test.ts new file mode 100644 index 000000000..53882ec41 --- /dev/null +++ b/src/platforms/ios/__tests__/simulator-camera.test.ts @@ -0,0 +1,84 @@ +import assert from 'node:assert/strict'; +import fsp from 'node:fs/promises'; +import os from 'node:os'; +import path from 'node:path'; +import { afterEach, test, vi } from 'vitest'; +import { IOS_DEVICE, IOS_SIMULATOR } from '../../../__tests__/test-utils/device-fixtures.ts'; +import { AppError } from '../../../utils/errors.ts'; +import { runCmdDetached } from '../../../utils/exec.ts'; +import { + prepareIosSimulatorCameraVideo, + stopIosSimulatorCameraVideo, +} from '../simulator-camera.ts'; + +vi.mock('../../../utils/exec.ts', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + runCmdDetached: vi.fn(() => 987_654), + }; +}); + +const mockRunCmdDetached = vi.mocked(runCmdDetached); + +afterEach(() => { + mockRunCmdDetached.mockClear(); +}); + +test('prepareIosSimulatorCameraVideo starts vendored helper and returns simctl child env', async () => { + const tempDir = await fsp.mkdtemp(path.join(os.tmpdir(), 'agent-device-ios-camera-test-')); + const videoPath = path.join(tempDir, 'sample.mp4'); + await fsp.writeFile(videoPath, 'fixture'); + try { + const launch = await prepareIosSimulatorCameraVideo({ + device: IOS_SIMULATOR, + bundleId: 'com.example.camera', + videoPath, + }); + + assert.equal(mockRunCmdDetached.mock.calls.length, 1); + const [helperPath, helperArgs, helperOptions] = mockRunCmdDetached.mock.calls[0] ?? []; + assert.match(helperPath ?? '', /third_party\/serve-sim-camera\/bin\/camera-helper$/); + assert.deepEqual(helperArgs, [ + '--shm', + launch.shmName, + '--source', + 'video', + '--arg', + videoPath, + ]); + assert.equal(launch.helperPid, 987_654); + assert.equal(launch.videoPath, videoPath); + assert.match(launch.shmName, /^\/ad-camera-[a-f0-9]{12}$/); + assert.deepEqual(helperOptions?.stdio?.[0], 'ignore'); + assert.equal(typeof helperOptions?.stdio?.[1], 'number'); + assert.equal(helperOptions?.stdio?.[2], helperOptions?.stdio?.[1]); + assert.match( + launch.env.SIMCTL_CHILD_DYLD_INSERT_LIBRARIES ?? '', + /camera-injector\.dylib$/, + ); + const shmEnvKey = Object.keys(launch.env).find((key) => key.endsWith('_SHM_NAME')); + const mirrorEnvKey = Object.keys(launch.env).find((key) => key.endsWith('_MIRROR_MODE')); + assert.equal(launch.env[shmEnvKey ?? ''], launch.shmName); + assert.equal(launch.env[mirrorEnvKey ?? ''], 'auto'); + } finally { + await stopIosSimulatorCameraVideo(IOS_SIMULATOR, 'com.example.camera'); + await fsp.rm(tempDir, { force: true, recursive: true }); + } +}); + +test('prepareIosSimulatorCameraVideo rejects non-simulator devices', async () => { + await assert.rejects( + () => + prepareIosSimulatorCameraVideo({ + device: IOS_DEVICE, + bundleId: 'com.example.camera', + videoPath: '/tmp/sample.mp4', + }), + (error: unknown) => { + assert.equal(error instanceof AppError, true); + assert.equal((error as AppError).code, 'UNSUPPORTED_OPERATION'); + return true; + }, + ); +}); diff --git a/src/platforms/ios/apps.ts b/src/platforms/ios/apps.ts index d0d456cbf..b171b7aa3 100644 --- a/src/platforms/ios/apps.ts +++ b/src/platforms/ios/apps.ts @@ -51,6 +51,7 @@ import { buildSimctlArgsForDevice } from './simctl.ts'; import { runAppleToolCommand, runXcrun } from './tool-provider.ts'; import { prepareIosInstallArtifact } from './install-artifact.ts'; import { filterAppleAppsByBundlePrefix } from './app-filter.ts'; +import { prepareIosSimulatorCameraVideo, stopIosSimulatorCameraVideo } from './simulator-camera.ts'; import { closeMacOsApp, listMacApps, @@ -174,13 +175,26 @@ function parseUrlScheme(url: string): string | undefined { export async function openIosApp( device: DeviceInfo, app: string, - options?: { appBundleId?: string; launchConsole?: string; launchArgs?: string[]; url?: string }, + options?: { + appBundleId?: string; + launchConsole?: string; + launchArgs?: string[]; + cameraVideo?: string; + url?: string; + }, ): Promise { const launchConsole = options?.launchConsole?.trim(); const launchArgs = options?.launchArgs; + const cameraVideo = options?.cameraVideo?.trim(); if (launchConsole && (device.platform !== 'ios' || device.kind !== 'simulator')) { throw new AppError('UNSUPPORTED_OPERATION', LAUNCH_CONSOLE_IOS_SIMULATOR_ONLY_MESSAGE); } + if (cameraVideo && (device.platform !== 'ios' || device.kind !== 'simulator')) { + throw new AppError( + 'UNSUPPORTED_OPERATION', + '--camera-video is supported only for iOS simulators.', + ); + } if (device.platform === 'macos') { if (launchArgs && launchArgs.length > 0) { throw new AppError( @@ -203,6 +217,7 @@ export async function openIosApp( const bundleId = options?.appBundleId ?? (await resolveIosApp(device, app)); await launchIosSimulatorApp(device, bundleId, { ...(launchArgs ? { launchArgs } : {}), + ...(cameraVideo ? { cameraVideo } : {}), }); await openIosSimulatorUrl(device, explicitUrl, undefined); return; @@ -224,6 +239,9 @@ export async function openIosApp( if (launchConsole) { throw new AppError('INVALID_ARGS', LAUNCH_CONSOLE_DIRECT_APP_ONLY_MESSAGE); } + if (cameraVideo) { + throw new AppError('INVALID_ARGS', '--camera-video requires an app target.'); + } if (device.kind === 'simulator') { await openIosSimulatorUrl(device, deepLinkTarget, launchArgs); return; @@ -244,6 +262,7 @@ export async function openIosApp( await launchIosSimulatorApp(device, bundleId, { ...(launchConsole ? { launchConsole } : {}), ...(launchArgs ? { launchArgs } : {}), + ...(cameraVideo ? { cameraVideo } : {}), }); return; } @@ -283,20 +302,24 @@ export async function closeIosApp(device: DeviceInfo, app: string): Promise { await ensureBootedSimulator(device); + const cameraLaunch = options?.cameraVideo + ? await prepareIosSimulatorCameraVideo({ + device, + bundleId, + videoPath: options.cameraVideo, + }) + : undefined; let consecutiveFBSFailures = 0; const MAX_CONSECUTIVE_FBS_FAILURES = 3; @@ -1111,9 +1141,10 @@ async function launchIosSimulatorApp( buildIosSimulatorLaunchArgs(device.id, bundleId, options), ); const result = options?.launchConsole - ? await runIosSimulatorConsoleLaunch(launchArgs, options.launchConsole) + ? await runIosSimulatorConsoleLaunch(launchArgs, options.launchConsole, cameraLaunch?.env) : await runXcrun(launchArgs, { allowFailure: true, + ...(cameraLaunch?.env ? { env: { ...process.env, ...cameraLaunch.env } } : {}), }); if (result.exitCode === 0) return; @@ -1139,6 +1170,9 @@ async function launchIosSimulatorApp( { deadline: launchDeadline }, ); } catch (error) { + if (cameraLaunch) { + await stopIosSimulatorCameraVideo(device, bundleId).catch(() => {}); + } if (isSimulatorLaunchFBSError(error)) { const appError = error as AppError; const probe = await probeSimulatorLaunchContext(device, bundleId); @@ -1152,10 +1186,11 @@ async function launchIosSimulatorApp( function buildIosSimulatorLaunchArgs( deviceId: string, bundleId: string, - options?: { launchConsole?: string; launchArgs?: string[] }, + options?: { launchConsole?: string; launchArgs?: string[]; cameraVideo?: string }, ): string[] { const args = ['launch']; if (options?.launchConsole) args.push('--console-pty'); + if (options?.cameraVideo) args.push('--terminate-running-process'); args.push(deviceId, bundleId); if (options?.launchArgs && options.launchArgs.length > 0) { args.push(...options.launchArgs); @@ -1166,12 +1201,14 @@ function buildIosSimulatorLaunchArgs( async function runIosSimulatorConsoleLaunch( launchArgs: string[], logPath: string, + env?: NodeJS.ProcessEnv, ): Promise>> { await fs.mkdir(path.dirname(logPath), { recursive: true }); try { const result = await runXcrun(launchArgs, { allowFailure: true, timeoutMs: IOS_SIMULATOR_CONSOLE_CAPTURE_MS, + ...(env ? { env: { ...process.env, ...env } } : {}), }); await writeIosSimulatorConsoleLog(logPath, result.stdout, result.stderr); return result; diff --git a/src/platforms/ios/simulator-camera.ts b/src/platforms/ios/simulator-camera.ts new file mode 100644 index 000000000..c8239f7b9 --- /dev/null +++ b/src/platforms/ios/simulator-camera.ts @@ -0,0 +1,191 @@ +import fs from 'node:fs'; +import fsp from 'node:fs/promises'; +import { createHash } from 'node:crypto'; +import os from 'node:os'; +import path from 'node:path'; +import { findProjectRoot } from '../../utils/version.ts'; +import { runCmdDetached } from '../../utils/exec.ts'; +import { AppError } from '../../utils/errors.ts'; +import type { DeviceInfo } from '../../utils/device.ts'; + +type IosSimulatorCameraHelperState = { + pid: number; + shmName: string; + videoPath: string; + logPath: string; + startedAt: string; +}; + +export type IosSimulatorCameraLaunch = { + env: NodeJS.ProcessEnv; + videoPath: string; + shmName: string; + helperPid: number; +}; + +const CAMERA_VENDOR_ROOT = path.join('third_party', 'serve-sim-camera'); +const CAMERA_HELPER_RELATIVE_PATH = path.join( + CAMERA_VENDOR_ROOT, + 'bin', + 'camera-helper', +); +const CAMERA_INJECTOR_RELATIVE_PATH = path.join( + CAMERA_VENDOR_ROOT, + 'bin', + 'camera-injector.dylib', +); + +export async function prepareIosSimulatorCameraVideo(params: { + device: DeviceInfo; + bundleId: string; + videoPath: string; +}): Promise { + assertIosSimulatorCameraSupported(params.device); + const videoPath = await resolveReadableVideoPath(params.videoPath); + const helperPath = resolveVendorExecutable(CAMERA_HELPER_RELATIVE_PATH); + const injectorPath = resolveVendorExecutable(CAMERA_INJECTOR_RELATIVE_PATH); + await stopIosSimulatorCameraVideo(params.device, params.bundleId); + + const shmName = buildShmName(params.device.id, params.bundleId); + const logPath = helperLogPath(params.device, params.bundleId); + await fsp.mkdir(path.dirname(logPath), { recursive: true }); + const logFd = fs.openSync(logPath, 'w'); + let helperPid = 0; + try { + helperPid = runCmdDetached( + helperPath, + ['--shm', shmName, '--source', 'video', '--arg', videoPath], + { + stdio: ['ignore', logFd, logFd], + }, + ); + } finally { + fs.closeSync(logFd); + } + await writeHelperState(params.device, params.bundleId, { + pid: helperPid, + shmName, + videoPath, + logPath, + startedAt: new Date().toISOString(), + }); + + return { + videoPath, + shmName, + helperPid, + env: { + SIMCTL_CHILD_DYLD_INSERT_LIBRARIES: injectorPath, + // Upstream serve-sim injector ABI. simctl strips the SIMCTL_CHILD_ prefix. + SIMCTL_CHILD_SIMCAM_SHM_NAME: shmName, + SIMCTL_CHILD_SIMCAM_MIRROR_MODE: 'auto', + }, + }; +} + +export async function stopIosSimulatorCameraVideo( + device: DeviceInfo, + bundleId: string | undefined, +): Promise { + if (device.platform !== 'ios' || device.kind !== 'simulator' || !bundleId) return; + const statePath = helperStatePath(device, bundleId); + const state = await readHelperState(statePath); + if (!state) return; + try { + if (state.pid > 0) { + process.kill(state.pid, 'SIGTERM'); + } + } catch (error) { + if (!isMissingProcessError(error)) throw error; + } finally { + await fsp.rm(statePath, { force: true }); + } +} + +function assertIosSimulatorCameraSupported(device: DeviceInfo): void { + if (device.platform === 'ios' && device.kind === 'simulator') return; + throw new AppError( + 'UNSUPPORTED_OPERATION', + '--camera-video is supported only for iOS simulators.', + { + platform: device.platform, + kind: device.kind, + }, + ); +} + +async function resolveReadableVideoPath(value: string): Promise { + const resolvedPath = path.resolve(value); + try { + const stat = await fsp.stat(resolvedPath); + if (stat.isFile()) return resolvedPath; + } catch {} + throw new AppError('INVALID_ARGS', `Camera video file does not exist: ${resolvedPath}`, { + hint: 'Pass a readable sample video path to --camera-video.', + }); +} + +function resolveVendorExecutable(relativePath: string): string { + const executablePath = path.join(findProjectRoot(), relativePath); + if (fs.existsSync(executablePath)) return executablePath; + throw new AppError('COMMAND_FAILED', 'Bundled iOS simulator camera helper is missing.', { + expectedPath: executablePath, + }); +} + +function buildShmName(deviceId: string, bundleId: string): string { + const hash = createHash('sha1') + .update(`${deviceId}:${bundleId}:${Date.now()}`) + .digest('hex') + .slice(0, 12); + return `/ad-camera-${hash}`; +} + +function helperStatePath(device: DeviceInfo, bundleId: string): string { + const key = `${device.id}-${bundleId}`.replaceAll(/[^A-Za-z0-9._-]/g, '-'); + return path.join(os.tmpdir(), 'agent-device-ios-camera', `${key}.json`); +} + +function helperLogPath(device: DeviceInfo, bundleId: string): string { + const key = `${device.id}-${bundleId}`.replaceAll(/[^A-Za-z0-9._-]/g, '-'); + return path.join(os.tmpdir(), 'agent-device-ios-camera', `${key}.log`); +} + +async function writeHelperState( + device: DeviceInfo, + bundleId: string, + state: IosSimulatorCameraHelperState, +): Promise { + const statePath = helperStatePath(device, bundleId); + await fsp.mkdir(path.dirname(statePath), { recursive: true }); + await fsp.writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, 'utf8'); +} + +async function readHelperState( + statePath: string, +): Promise { + try { + const state = JSON.parse( + await fsp.readFile(statePath, 'utf8'), + ) as Partial; + if ( + typeof state.pid === 'number' && + typeof state.shmName === 'string' && + typeof state.videoPath === 'string' && + typeof state.logPath === 'string' && + typeof state.startedAt === 'string' + ) { + return state as IosSimulatorCameraHelperState; + } + } catch {} + return undefined; +} + +function isMissingProcessError(error: unknown): boolean { + return ( + typeof error === 'object' && + error !== null && + 'code' in error && + (error as { code?: unknown }).code === 'ESRCH' + ); +} diff --git a/src/utils/__tests__/args.test.ts b/src/utils/__tests__/args.test.ts index d3ebc8cb6..ad55a215b 100644 --- a/src/utils/__tests__/args.test.ts +++ b/src/utils/__tests__/args.test.ts @@ -22,6 +22,24 @@ test('parseArgs recognizes command-specific flag combinations', async () => { assert.equal(parsed.flags.relaunch, true); }, }, + { + label: 'open --camera-video', + argv: [ + 'open', + 'com.example.app', + '--platform', + 'ios', + '--camera-video', + './fixtures/back.mp4', + ], + strictFlags: true, + assertParsed: (parsed) => { + assert.equal(parsed.command, 'open'); + assert.deepEqual(parsed.positionals, ['com.example.app']); + assert.equal(parsed.flags.platform, 'ios'); + assert.equal(parsed.flags.cameraVideo, './fixtures/back.mp4'); + }, + }, { label: 'open --platform ios --target tv', argv: ['open', 'Settings', '--platform', 'ios', '--target', 'tv'], diff --git a/src/utils/cli-command-overrides.ts b/src/utils/cli-command-overrides.ts index bd1142d30..9f456f557 100644 --- a/src/utils/cli-command-overrides.ts +++ b/src/utils/cli-command-overrides.ts @@ -82,7 +82,15 @@ const CLI_COMMAND_OVERRIDES = { 'Boot device/simulator; optionally launch app or deep link URL (macOS also supports --surface app|frontmost-app|desktop|menubar)', summary: 'Open an app, deep link or URL, save replays', positionalArgs: ['appOrUrl?', 'url?'], - allowedFlags: ['activity', 'launchConsole', 'launchArgs', 'saveScript', 'relaunch', 'surface'], + allowedFlags: [ + 'activity', + 'cameraVideo', + 'launchConsole', + 'launchArgs', + 'saveScript', + 'relaunch', + 'surface', + ], }, close: { positionalArgs: ['app?'], diff --git a/src/utils/cli-flags.ts b/src/utils/cli-flags.ts index e4d38c022..ec07471d9 100644 --- a/src/utils/cli-flags.ts +++ b/src/utils/cli-flags.ts @@ -80,6 +80,7 @@ export type CliFlags = RemoteConfigMetroOptions & pauseMs?: number; pattern?: SwipePattern; activity?: string; + cameraVideo?: string; launchConsole?: string; launchArgs?: string[]; header?: string[]; @@ -532,6 +533,13 @@ const FLAG_DEFINITIONS: readonly FlagDefinition[] = [ usageLabel: '--launch-console ', usageDescription: 'open: capture the initial iOS simulator launch console window to a file', }, + { + key: 'cameraVideo', + names: ['--camera-video'], + type: 'string', + usageLabel: '--camera-video ', + usageDescription: 'open: iOS simulator video file injected as the app camera stream', + }, { key: 'launchArgs', names: ['--launch-args'], diff --git a/third_party/serve-sim-camera/LICENSE b/third_party/serve-sim-camera/LICENSE new file mode 100644 index 000000000..1d3e4e425 --- /dev/null +++ b/third_party/serve-sim-camera/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 Evan Bacon + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/third_party/serve-sim-camera/README.md b/third_party/serve-sim-camera/README.md new file mode 100644 index 000000000..072bc3192 --- /dev/null +++ b/third_party/serve-sim-camera/README.md @@ -0,0 +1,20 @@ +# serve-sim camera vendor + +This directory vendors the iOS simulator camera helper and injector from +`serve-sim`. + +- Upstream: https://github.com/EvanBacon/serve-sim +- Imported package: `serve-sim@0.1.34` +- License: Apache-2.0, copied in `LICENSE` +- Imported paths: + - `bin/camera-injector.dylib` + - `bin/camera-helper` + +The imported binaries were renamed locally to avoid exposing upstream internal +artifact names in this codebase. + +Local integration code lives outside this directory. Keep local modifications +to vendored artifacts minimal; when changing copied upstream artifacts, +document the change here and preserve Apache-2.0 attribution. + +Current local modifications: none. diff --git a/third_party/serve-sim-camera/bin/camera-helper b/third_party/serve-sim-camera/bin/camera-helper new file mode 100755 index 0000000000000000000000000000000000000000..dd373a71a4b8649c3734d1d7f78a8d3f13ca3392 GIT binary patch literal 198928 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 V3s@GgEMQr{vVdiQ{~s;ze*hH6hh6{x literal 0 HcmV?d00001 diff --git a/third_party/serve-sim-camera/bin/camera-injector.dylib b/third_party/serve-sim-camera/bin/camera-injector.dylib new file mode 100755 index 0000000000000000000000000000000000000000..000a4b6ae6d420bd5cbe4e736212e3c52fa51844 GIT binary patch literal 393864 zcmeFa33!x6@;^QSUJVLP*mYdIqoM}S;5sWFqfr?dlqia=2qJdvD@c%Cjy!8F&8!++D!^GdW8UD7% zU#;KgtL8cY{@WIR`Tcypi4#u_k3U(mGXJT>Dna^xHtisff4YFc@?}%!m8B4~=@lwF z-^~6>k7=+?{nyV|nM#n}+_Lg1bCX%w^sd=f>5T59C`_kIiaH5B)|vlJoH%{v^sAkbPmiA;~+LD&?+sMDEeq(7~EXI(IP?pz9(O|NaL5<1Az^U@xTP1LvS zlG#1$>pw>c&9g#z>5bDn=d80PPMvqw)Y)Yd%O+3Bmapb~r8nHl$8@$#9&J7+PAuPK z`^GO&LLYLK4*xN2Noz*dzo0ks;^{NbhFMRW1z5Ixe=XC}wYD77o05-yU@#1H;=~b0 zo_yrQqfa<~ta<~l{})<9S!vod|N7&Prap1vIkQq$vT=GPo^gO)dcRdxGAy^oGc;@9?P7n`HYL)0?Izen9M)jv$-f;zdetwiSTs zEPB>MD1z57CYOm@>CqnfH)hgf`e)FaK4bDZQ)w#M^3AjK@~wPKZ^}-reA8!^q24Hy zO|R0@i&%P0XUS(F`mppS&zUp%lCvk5P0ps*k|iJ0KbIaQ%%<0B=?%70Fuf^y>=!Li zh|)pYK&9l{JI-MRk=b|^aeD>5ix#+bmS3-qWWTt-xz3CTC zo+Bl)U#rDz7qn!${w+-tnoesV(k1v~ z|4Gj;nKOHG*}3~)Fn!9{=`)VTfIesPsF~+YJ*#Zioc+$e1lhpne+T+}m0~F1n~$LC zw>F*sX`XL9jFP^Gv}-=k^G!m9iudf}n^)!YZHc@w_~U<5fyBSzc)tzLrzAJ`KQ+7c z@%=joh;cCa9DnCFBi?=Lz&G!@e&ERk?utteKwcsKbQngU?EFgVDY|v8?Y9?T>4wf> zVm$sxi?aKC4?sox|1ki)YO_fA0Rr%qpJ=W0^i{ z=6=(>+_X#~B5^hA>(QN>cgQZ(_$KI%8+F|DvNV#CR%#ljXUa)wH%afv-{+JxJv$d& zj^LZ5d-SY1Q%7+;N|QC2w=sG1Hopm~?v-xo)U&5g&Y~-M8>8FLcLPkTce=B(+KU30 zN~TioVFwO+2X`&^z#t5z~H0X1E2h_snu5;SDm& zX_wmXsPvN5`=kth?0+}*rk|Xa&8npUAd3G;KfNDPre5qtYVI>y&LQ&x^eG#{!+uTQDRjUdnJSFt!ujvA$rusLDL?ROH zibOY*ENo(;WI>{AsDEhn7`*$3#wN*Q(QJ84sPqq=TI(M=qs~9Hyum-TB0f4AivTn_ zT3v!iBpMqok444us4n8eb+(%W-mcUo(j0CBV@O!hW^ScSv2c4N7Auqjk%CC9v>+0V z_q^H))|6P_}+p(y?neY?)S59J}#zq6*J72Odx+#QKJ z0m+{>Z9o6c3yAK)yCPMg?gugDEZ=N(IFZ-6Bhm)xK9crz4vbV)boKGy5Fe6P6HY7) zCx+yae2JEa{h$t`w}aNMWDQ_O!0+~zI~~+NO#-z(g7E!NkE(88*)f(Ygy$>N9B!lPEnTo}7t^_mq#%PNZe)VCP_?Rf!c)^~ZU2Y7?3ScS@vPY0<{UvU z2i@{6H6e)PhPJwwRK_7Icvl@o`eX(&AokvZ4_RU7(QyW~`p1$y-!d*gnt;MgBJeG- zV-?*ZQ9ovjG@d=V&ZQ_64gXkG@uScG7uXzaEoHCG;UB3uH~eGN83RnzBU}H4Qk|Oc z+Kk%Vv{{~SVR$WV_**s5{%9jiQBa4Z#Cv;L^U0IRYf5gIW?0&xnre5RD{F;Cdva2U{EXS@wG-DTw`AzG}O3 zVH7YNF^cHlV85FYkH!iI=EHkRP%UtjR4Nv{^?o2P?FVF7%{TgtL@U}*%Li{~Ew9Id z8gSdBK8e68BvXd1w)`xLrB%eg^9bwD=C5ghCXy!I2vdw_7(y)>y5)_?OtsBrnn}!5 z+f0+p3Im%MHl2mo4l8b>gkQ2 zEz$dRw?q0;8Y1iGFJkO*nV7t|*QKHZ#|mJ2_v zKIl~Lz~En5>%;PW<@-fk=M-tP;iC}+jqW>eTfmkddD6(E9^;PGvQ~_U!{SFq<7Ti@ zX8CXKLV34ezNi}-$sRApfa(WgqG%L$WAylFdAroZ9k_y}$=zRlHyw)`3fu|zwH;y- zG@*Fdy~vBBCkElw;g_`YAIcPR(dwbjJ19Z$zMJrfjq6&*x+ennPZJX6D=prNqI3vx z^jy~&b1s2MpkR3%7GNTML%)SArWNSxfoe^)H4*qL33G=8W>o=;@Ag2+(cROY(Qd-A|rN~Ms9$72S498REkpKS3Xr#y7Bb!fn)M?`b2h?v>*n->Urp*W{D~RL(T9+nO_DE zx4g^T3E4V@Fy!bmQNaogCLtMzrXeGTeI~~j%v0RZFvJaJCl zL345LMpeTlrpL9{pookpt~32i%2EIozyBwycv}cn6aFlz%CmsFF#Oq&JgZ9@NM`+| zKaN8KkRKj7`0Ye~UgHcxg3b~IF>C5c&(o*t+&zJ^VZ3=BbJFB^Q?+Ic8fzHj^cH%e zoN<)5nRkCg#0L|)3+SkGE9?SeYIABhZWT?qp)+n~;oy#_aoTXa(?ldu{A?}Wf}$Lb z8)Z0NNq$VAU`1mhaIheU&3Yi&fw(0R*q*uG5>656Fcv~sA90;42y^j&YItdY4lw%u z@mqMJx7KI+*Z+y}#L~!YFRNduzK8!YxBS3JoJ)7<{-!Wz{3ibMo^Na&dyn@7|DvAw zRvyNq14=eEz6}bSP1wsiKj2^a2bF%DxnAJ;?qq!}zuv|t%5(V5Px$XPE>n}EDFEwzQI$CovW-T?E)1Pdt zyjMCq{_IWvz0v#ss(lw9s_k2{A(2S6#irX=ZQy^mz5J&jpy%khk@jHxyftJ8QqJ}w zy!((G@QuaS;=dnR+r!^m>ma@Ra?wkJU)~FRQZD$$j?cP|Vz- z4WB(Hy5@7vi7=L6kIHV6Tu4kzKCsA+sBK%Ni3tZ1{cHjuAci4?uN?;fIjesq<9(Sg z^{)lUMzT{JOV2a-Rr)?n=I~zmR}1} zccqbfSV>)^q-F`Jo0QZPC3T#Vx;jaU_4NY0c+K*6Txd?zkKO?63=J#r-kFzTFgCx zsajwF(Su)a@dNCl33{5)aYSx;QSTkcpx&IX?I0*g`zlDa~wnxa+zx^hj;YwC%X_c=}$U1=adBuDC||6NcocwQ9i4G+4}b0K2o=#QnwuX zV7!I>68s5X9`VqhHX6?{)-jf8`u;20vJ10q(t$n)F1wn##M*iST_4LZRi^L7#{t%k z1=?{`?^*rkNAg+{jCP%~56F`kxw|vSWN9+F2cj8?e>-;|V4oylAd~xgNhG*zT>DRK z={$wMSMc`^{<7plq+HGr4AFJOzfagKgZuMEZi;;ST_oBXahOWavQvt3Y@>>5K6Ozg z_!ge}>pYXwjnk5_XDy6=r?Vt7zoPx0cuRu+VZr?f-kIR7fLZ=)OZjRG=C(c05Ogv+ z+erMj(e_sROmBk_$gYRyE8E^S$`0hi4z~S!2^`kIp^Z+8!1me}An_O8NevVm`Cy{L(bUnlNm;Y)!C2JkJuLT}|I*yzNMWVlnxF_aEqNiX08U=rL0@q|MKbjl< z#!n7owUT?Cdx$KWLkR1MYqxH`ikI?pgLsLP+-0%^H2`;^5=`+W9q8A01XGXThx-OO( zljn >hC_6CNp=3D;~+ASxC$uazeqbVa+b`~nO<7gs}aT_uGxVW5OffkWQrrg=rH z9DIwe#3Je73Pz}XjwN!liI9w(@Cdgj0{bvGc}5BL4_6usu7``!z_k$AvS13_e4)_u zfKngeNZ7?aiElm>@?112p3pH1sh;y&(FY{vd8Kx*`Uu#%&7)GfoSCVE9d|NQ&ZFVD zj~+ug8Z|(?A3Pp{M%=&#NT%}6R@^S#cYu#UpN<8KlJyw_IEYZ+Hd5rCLzg*R88gvs zh6xdFJovYy^x6GG{CDR0unixGjHxp~na5@BS%`+bia2P2)%wIR+>X|{@-nv0*%4Nx zqTL>sS%hTvahY3C%sVcV;qU2>v(Kx|Ov)qY)mUFoce{ZPmGW!Kw60xcIzVJfwr#RG z_h7!9UEo})4%j*MQLOQy%$GW@1l{FImvqdF?~_L8-Y5;wxf72>;GZK|UuTizg1=08-QHBiUEcaEY8`$Kgg2M-X%@pLTh za4LndO27)V=iP!$7gJ8J9ez{Wiaghr6z5;EadXH`Xm&%a=XfGS$d`EN3xYcUOA z@!%i8Li|r?8d?|{Q?V%Ui}QphI)>#$QvQHN&;^s&^)6KE@G>x$Y$pr5|An6Yg>9BsZ86>Bj^ z%6lF7{DeUqd|sc+$GBS)fg3FKw=z_BO$PM_;>0TIWsqzlqFd3B2;3n>;qGG<4FbAT zK*)&VP^asBM>rH=ccBNNRE=l69UCB$IT8P)_cw2B(y7>YqLah&Cv+SH!ZMuaidV?j^c!9ZuX7F6{_X6o+(3LP*FvLnF9dMmoA3zb)dq-+O4#8Ah0s^ zq8|=l5PXd^9NOD;hI)e6L+}|}} zu=?EgQuY_x`^eXOX&>hsY+vd6Cs2E?SB5GMr~ghsrkwpNG(q6+XTj6`yPDmMOTdRG zQj_P;PG=4me7gT76{b4cVU=&sL%#UDV96}J^8DF2>Lg7c8T8p%<)rB@peWsMil|WX z953(qR9*)-2;Lz{vRVGX+HY_BmH%}(MAq?@Q~GCilqJT^bwP1tzI_(h=V0R8tvDkK zZDx^u7Tf1=B2`+X5{&5?@vrI&&LY$1)<0GVFJZ2e24HN>z5N2`U`uB3M#o>Fhl#WJ zOZp(v&G47zJrecKPrb}UTKiEBt-p%DIobBHY?Jj*t&eB4cj%6CT262ZhU-LN2O2O& zwJBtQjSHP)9xpJT7bu*Z{DSriIlf5yue^RKGM*QN2 z2B|!+TtIoQK3L^>g$0xHEEm{p!Z0kzIxogOB>z)+K6$x!dFFHQcY{X>&mV`YJV#~7 zv!B4)2}{W{XcO`jc=a_~a$xCk-l~A-4=*Jvj529!8JKqe8)`Q%soYp4$vEHnB*v+< z^PTq!R;Y%A$fDyaWaOBC=d_OWcble2vnL4b|4Z%+KF8^`BhoLxrx*Dxug z{i}K8U@ZP~HjNdHY=4W+pwW2t{4LA==djs=Q_d6nKZr_){gX-3-i{ZTkFZqx4nuNd z_Ga5x)-(8BkNM&yp(lQF!;4f>=u7d;&cE@%{_pQ>8|i_L%=J{R7s4I{zlS}1534gP zNS;GOrae3aPHFaVlVF8vNJ#AAB4p&ShvfRC$bTI^zcKrz$$z-Yf27Fc9D+w8Fr;_+ zhYEfV`A-`T@(Cf?L;iIyWXS)fGH$!rlm8K9^eX?Gv%z2{i`uo6KY%Lqe;vt0orQQ{ z{Vdq4{x1>y9`ZkS5Xc{qTmAzw<=^yC}*!7jP$G3R$+^Qfq%M?L-yj%oF{P8Hb7frg%=V48t@c+knp}BqDo? zD$&(S8Ophe+$n0p^aI}!`WGxF0XK9Yg}Gm_u{00b?!0_{!k!4+i7iqfY!3u@v-?0f z5jdWC@Mbq;6hP%71&P3g1ja(2zpG2x#(kDDcvK64RG0{iR;n)`05HGHpi%^cqC{YC zL8$0X1cnMTelTml?A=Q%z%OX96rQHv`D;orJC8&cor@E767?+Ax7ciC;QRi0%y$Q# zAhf;3h&Ytih{3QybcxBWd4>|ZOIZl{^)|oWJgE6Xr8!(@^Xtq_%;(xf+2(lE`^pD2 zhi~N~U&nj+E(yx}0^_(jLG%!=#YCLz4|oQr;hTy?z&DJlr}>YOv3{Z%Nur=ps(DNia@QmRe-_!AM22X%5;8A63x#5f_$ejqSHMyq z%wI8ic7wM8o(TLV36MIBA;Fjvg`-9jw4inkc(xh2!;X1rd!t3hl6Iku!=bp?1s2GpVp-|;?a5wL?P#w+YEqTfX5n2xC@dcG1dWg^oA);I({K{iI7{Wq!uZe7)gw9r6|6Tl`^r=L2&K% zQ`oX65(%>ehZ4YUII0n;YT^Tq(heATQ<~W zo7%y1IlGU}v~MFqOmgvs>)_NBd;tNjGio2I0i7aNKmlZdHa1vZOK2u?D@Rq62vSyx z0<$yZK(z>Zj11-b&e5?&lmNz0nMOxfj^@&Bbi|N+vzc%dQs$af;9k`va{CwjS=S`d ze=gluTC7df8)h?fW6NfBbu%(j#>qT@y6_O=d>*CD5vxHG#uSogbqh*pIT|NXVJmzj z0s&>x3XJta*)t`UNd&$Sm0$@f*3^g$^LLTEn&_a^CX}3Altv{oo2zT^FBAaZakaid z<<2Rvap2doSj<^QwMDBJOR9;*&>V0KO@{PhONG;}(pc3BjTZvHUFD`e5`hUKSd&N) zt*#>tS1(wJRyPRYr7UWWqjKFQmX*-y=gd2B_8rC7THTbDa0#kgwj$?)Jmcr3AlLLE7Ota(pJ$yMV*NW z5iebDDl*ayW`?Al=Y==eV?7)fu55|5I*wi3*)@AXP#d3&i9{iAbR0T%X(QegBMId9b*=YnZH~8uqtm(9&)Q7V(24TQJ83!ZE`a{)SW>FmY zaws#{Cb)+PE|6F|FI2gLRFmrxJ?D$XqJLSKL32THtT4%Y_itFUKBbK|HAl! zFPug*n7AkO;f9J4#F!`%B;Y0z;}|aJJFgN2TU5>AMsRzwIs613P?ZB4Bp{C0h;%;$ zIx!5?YOM9Fdm?a*mPUvx5IEIv9U$#E2P3R279)rDPzrevf?$|=ZV$?219hH`af8D} z*oRU8*5FXdyiGDI>ZC>g%|^rqm?YlS7S*f?(n5bGcJAHj-43rk%s6V<+2yfCK zy)&K_2rNRZkqB%~sbH6-ESJk4?IB`s+#mh!RFaABPMWr#4^*jh`lIB24%7+fSdK>y z6L@Yp>y1x@8ODE{hxY5hF&$6Y)aj$BL?SSXY_$antbbfCfZ`N@*vlkyd&$IQItM(W zo$)OkHRaCdM`jGEvweA7y?h9+$hz$uWR-1)w_EsD4*H>mcr%y4tke`jH-n%VNLiu5 zE#)cOaL1An>_;aqu*CbUB~Dj14Y0(W#Gzo;6ARZ_ORQB(d}0VIg^fFy?85Lz6tESQ zY(pA$TV7`#qy#bxhze@C5j6iJK!azB4P3?*u9))xA61BW{EX~FuTIPJjgC3DD)2fB z9PMYv2yKo?1lOt*J;ZQ8-0y9tP{W_?Cc@~LdtejC+>coq8ZNz%DMX&P%Oz)`vi(J& zxvM`=prH=coH`FT`1S9};3{F@jD&EgV1|G9KaO%LOt;{kCb(Jt{V$@8H z=vmYMG0Imhl--iT2*Nrti8Xb}W9e*!Jdag^h8Zh0k(dbF#)6x_KyTQIwxd`(@cn~I zW+QV9%HVYpUU?H9UdP~-(J@|2@JibLf|!pv1&a#gaU0`n|Df^3{y}33{evO}{y`AT z*&FrYcB@KQHLu85wvU%`$Dm)#W8GgE$7V?ELVeh}%qudnWvCnOx`FaC=J(0U_Ui{vrtC+H?Ba*f zpuv7pq5YT%qbrj};tEq3UVeNEmF4e{@_i*!hVL55SXYR$Sei+BpQ~vJIHv|ovjZuD z@^g|a$x7`4iBV-Nd}_n`<)KH8+~ydeZBNH;QRp?Jv3 zgd2MMbjlHYek_&x#m-EGnl&$uyvJY*0K7&(tcfN!Z2e;;$TOFUyq3ikg^9p-#NiTq zQ@*eb)}TBVCs-&Fi_OF1$i@O8ca@;(JXu!5y4hb{&9L`5R;`55#B>%TGetSZ65~{4 z*fW60yi6x~5m&N7K+zZJoNcL2_H<4VU8K`5U*zEYvH=lSgfu@rO1?1#*&8SOwV-!S zqR?&=AEtW=71nI(9*~ivdS_&=mw)rhc7awFqq=kzlk(J6491hL;=QF5YmPNDU!#c;qtgGBJgYn@^45f4n(F_RyS3+JMZ9?nOgT>xc~&LCQ-ecPTW{? z{~09FW@zaw3e`uYC?o<6K!f#-LT~|cCxKidaE9bLft{F#|8?5NdopR_xF@q5O3sc~ z^?p*g5I6vYxx6|rsOuCc@CG%}&qVacmgqFes zBfMY85wVixj~CPiDbIObFen*+VTN@n&$ATWBEO%*PK)xwtL&jFj73cvi%5x7A_NsX}>(gAgY% zjNMGc$|nk{biDFqVDiG5%z}H!+?#w6{nY%HXmr1sdr^DfGnq~Wcrjpq!F1*cvFeC) zAz2&a00$Bc=vd?V3Z3u{%%zfW16M$D#1*yXPo!DES9qC1>S$}^MBGJ6ph-yvPZ4~s z=;lYF18}^LX9Gv`cpvV7#S1i4GMFnzgK>Yy_ENJrEFkVH$ANKah|bON!bY$mO@k=~ zBRBkfb=+T#*a9_U-9q=Hv?-(v(AQ4#)a5qUIZX&lA8wXqUX;Qz&IPC+2}7xqsDE$K z*SV7>oLt`(|56n%L{5n)rvg^>=ypJHWg!oZQ3;L3@vMPU5I^+5L)3+U6M-tlWnmd7 zVlW0_<+=&<)$1Q!2+!p2YoM+foqR|0VSe4JEm#vnw7r zKR}p<4XO2n`D=*w=^BBHX!nm(F~PpJ&u~}!wR?>y}B_*qmiVSPZP|4 z5qK78;H&Z?=p4L+dUJj&;@~ai;n}G0@Ye$& zdp*J0593jpx0FJvVXq_t`;xerN4kB_UlT`<#AitEz~_a#w*`giRe3AtS}(!7)}IP~ zWn18FHQ&%dbjCpF;l(C^ibJp zn_B=oW7rAAF?e+1dPMIsQl^oThux)fb+ZnRH?@)H%9h@t;l{b6z`a(JP%NBs9xnvv zd|5M*_s?iNlD8T|ZDpi+CFm#2D_8?ia8*1nDzrN9OIC0WpiuZQ&`{Hn!BH%QpGn3e zhe`(4BdCSLiJhshPBo~gvy+g(tON^WR+ktA>SPco6E$L$5u2A%X{W`ux9w`wl0Xns zp%KvIb^)vO{*$quEdA|Ww3MA1Joal^0!&AiZuDYqH@FH2iNNh1EV&db>+9Md;r=01 zc^i*=wW5mc(B~p4c8(Tn0ZDr{-9Rv3M~9e4sF=gQo-z*#{y~D@Y$~WCETHJuLtoyR zNZ`8SKAo8V%I*Wd_jwH61A;lW#BtIDTv`jq6M_Ai8*>Z?q@DxeAlSFrLkjc=hPM4j zk6`FWWJO%(dLgE!CF8kTpuUQ6dclw++yKAdLE|kp)uhQ_Xt5UzZ7w9`K7F{;bEP$d z#|l0dLwgT~w)&OSjFD!G`TSl8NLM0Pn2Uy+!#A)Wc3y zE|54AT%EQi*>MmuQsaGcJwoD#p(1GTfUp-o6j?!M3YE|xOz#mtY=H;PKM>Y4ewZzm z%H~7racx1WH z>H_3JW6z1^(A8b%Bo=gsqd*~MdJ#9U3m$NxanFUenBD5>LZ9FuATAW0Bh7_2vgtZL z?JKI2^XjG_3P@Y8{Tp87(mFJ}(L}vDU0>>e(g42oCko$t@c`d?T*q67nP#(ZvqF4b zpAX_@CoKS5gS|y%qZIXQU`XHwJ6KQG`8(ASt&St0z%&wd{ER}#x(PM=YDbnjRt@(pwCW5s5DhKm9xtQkPZ{YmE|>QVRe(~ARjlgxXynDs22=$*Yc9LQ`rCmmuL~&0BPzwLjr1`2Tm6BGojJ~IYxo!ZR7|G%E!ZC zc!2F--^dM~$YCmG1Kr+yvw8b2EoeU0mpb#5zGzQA=C1@}Nnb{I>FRKu>Mj3tx4_zA zh7D)|^qEfwuq)z!4W1XspUWM1BlG!2;7B&V+;2B>FjjkeuD?`@8k{q&95NBJ{xsz{BU`AH8h0KtkbXnr z&Nn!uxxw1Q@yK$Vqqihhv-uPCfk7LU-IfK#aegKaH(>C{be#Xbvvv`bkuZn2~94XwUe@SUQ?npt&#XzpL$hAN|8pv}` z6nEy9)8R-%EdD$6#vNQUknGq2qtOSqRPFzJK!f3j#V+u_Y^2=ztg;XZD z?fhPhjM1TNV%=|>#2O9`Ng;dws!CJ-w|l5b9M`w95S|0=q?E<>|08T+D@^-MJ8^+S%Vc`#!3YEH)()bH=cld&Xzi!4Aw- zTG#Bws!Q(Z5ucqQm?FbSk>Shybon@2GN_fW<2BYTWwn176%EHWW-E-d#njZX>J^pC zIsEF$sk4}6ry7jPN*C)A6@T8K1Ui!KgDp0v*%Atqk&jy&Ei{hfTl3I>pa%@+;1oj) z$t@Cg+XGXWX~YCI&rvmBXdF=sGMjs74nc1py_9{%R9g0N`Z^mu>%8s;Ga zvO&Gmu?UsJNdJfo@p2^P@k80BO{@gEV_)bO^=e1!JbP@;*7?@}w2lE?aLsO=w;`7p za5ogGM+ue-rcSwf^X3{FV6)koBB?7tiv{;OgbH|qSgupfDYCZf9DS_=OJhE} zjb)tQGf#GNow4#N@z!9Wa49M9^s2O0z4`s^C{k5Xr|CM=O%mRxpMPV0yb~ffGm)$P zlJhmj$AOn4U=VXIWn2~;IF^s9@3}vW^?Xj-LQ8<)E5moA&OJnRO9}yK@5~<-mnU+{ zVJkT55DR^?mFyU=zaA=)!y$$w(nA?J#Hs&Wk5H2h*2DUpFs^F1_>2gCo(%V2FGf3Nt)hDro4lDYlZ_OPn?aB@o4`$Q!qq^aAM4~T8+(j~=uk7e+rb!`uiUpNp zQIK(id0q0B@*Q3wj*3IAT&UGaH1_>;f1$8B{AwYA-j9}fgGMY|2V}-pP;b4Se+KeD ziM%@8NXHH>i11^Ggzw<{L4g`VHj94+CYGAZ0L2>{7ppPEpw~d^4fSM|5F25-EEtd(5^Kg>7o~5x4v0Nq(58ooGxTfybRJ)l;ByU~Xmc(HxTeC^!{}FlMdZ|ME<@+BQHTd8b z{{nn80u5DjFK%Isc+%sr@>dfXY>R~0uKooWp?v0hs1)L;DR>K3krer=ZeDBIEY?T) zI`^(J9FbF3UO zq#zOaJs3d;(l71N-;5@iwVBW)+_W#oyLb9H^e>E9zH%<=zRWk?r)F8}zBIlQg9M4d z*FJD)meqTz2ldf)bNMphhy#i8GEtKGsAF({DY{JZ?au)U1^j+m1}?kK-a;dW{MGWi ziKw+qc)jiPy;UvrVu`>5EG|>#!4l91Lns}IEs_~>=2rTlf~u#=WglXAUlG5M1!FNO zp4p@3RAv6i3R!y=E)ZGX2s-8 z6PWr4z5$x}e$}E}tSCAa^4PvJOxV7Lcm?O*EM}=<){|IO6ASptx6$Uw(+&?^`Z{E1 zr>cq4B|U)vwC~GNbo0|9R$mTdqh;%WYwr8Aw1kk4R_k`Uvzzd)J{Jh^NRvnql_Tfu zuWT0YSh;+!V@hunJf4P-iNnEC0pVnt39}V@9Pg?h_7$SyBsPyD0D-kNJ}KyBQL*N8 zq3va{;mlhZSyZoZamCeE$IJS`xAfs?QY~g@Z7aD+m5&0bKmi{9D@Tw!ev^}VZg4AU z?Ofeuz)uj^JBpA_p}J3sLL#s`(AG;o#fh*^aq;O6VZUOUQT#`$D|Fp(M7IBC^JCBu z{uUK}5bIz<*4YOHks1zovwYE`%{~HY>M#;>9+DwSKQM|pA8WTBLwYg&N~kJc2nvlV zCK=%zok*Z3M7-~Ef_LmMzJjdq{kLMMT*2D`!o6+G6JPNrS!cMk%LPMzr6&1Zj`f7_ zc#ABZV+1Sy14}pAyrU%VKITQM>rzspIrbFLbppcgr8=_^vmq3X@KNk`6Rmssdkgi08##zkod=}q|1}w|!QIeR0q?9vTh@-r&y71cq#vMGRWnKia zzXR*=)EfY#e5gq16}p&` zb8@y5Sa9+-*qkcVQAzvhm)S=JAQbfqo-U=ESh~l4dvgA1_vcklMWXUgl&&aFGG0w( z$Tw!@sZ>URU_6w{z?>8p2;RXA(VO1?QWaW*i6qUyyMQ#a{p|VkSjfSup;>Y*N^|)L zRb3ta43uyh2|q&^@-Z~wWqNLKg4FK)^~A*YALJJe8(?#}ZLysiFXq@(u^8uQ1uxvS z9&r21LFlI+Fqc;=y1{LPTrD%`cdOr^-;IU-1}8r(Zt54%S%vuht~pGFtHm<;iEsLR zT<;%*@x@y%FGXI@or8hvF)z!p?r(0Fk*lH>OSa(_{8P$qblqNh&jB(DN^$DwyKkg+ zZIBgz!J7d_Py7g82EYF)F#P@}#d1SuLX=37N#<@0RuZU zk<4(-1r)*6BHrm=o%_1MtBTlS&f2fg=B*ftWmF5fgbpwUWY_@; zFwOEhz-Z*<=m6hfew3>N+%Fx#P6C#aF0^a+xdzET7ph&dj^>`m8#It}GDRY4(2 z1HBe}$0ZBXXeVl69||V|r`bYvT8QBY3M~d&0|ssIn7%t6F|2XMN-K|)-#kJ5Y73pu zLf%i+%f1}GpCL?F!V-bQkU(7rUhpa!5__MQ!(yl+MnHJlQ)`QcldBuNXb-85g%&6@ z7D^!SNdzAJ5_Ds-@*`gQ2kJ$QPtu*Lr(=aZB+w{{M|o+@*k1U1RL3iJfd8;R#Kq7< zOR#ooUIH0t2qPDMvYv~o;qJ=e{O$T%#Tamz!7I_%;az4xo@n^%s*10D6$cUv#?GcT z+kk*O+)NaCmokf&9mYcQP)(Hk?hlDX2lilnZpGJFG?TtE4n^P_F6Y6fcuB?fz&=m0 zp93}!O=k_9*mfd8d3=N${+dhpE0-a|H#+)K^jY&e5nH+&@gE0%q&W`eiO9i{TfVEg z9GQ^pX+h=U%2UThKJ z%NEIyDD34ZS=9N5(^F=CN8)=X;^KLy{)6i~myJ2jgUne9VSNX&l!IVyS~6Ax0?g zlNEj`wf>Kkvm9GG;dYjfAiOpoXl6@tX_&uF^1Ng+o-c1V)${Gyr5%~XV2UFOp~VPY zP3M&y6JMp>bmHVQSW0wT+75kk_~!Ra=>Mn^u*gxypeQ{sn4F`WnP@ksr4q)JG9l3~ zzbVPqUkPG+R1mSuCVmfQ3#HeZQP*#-q5^ES9;nQy7Jgr|TLgU4Y%SG#N2*nrUM*Cq zSgLf==d98@X;p&xpcXd>18A7){v#9ofnUtIQv2KdeaUqBbF|a(Nil=Z>_QEGv<8%5 z6hjG+k3d<6;6DYp+5!h?sW!dprPaK61-ny4E50s7{6{3jREfYFc*ECvGAlVxl@UB& z2vt}@PgM(-xCI`MbN7kBBn!NUK-v(zP!wi|_y}RQ`2flUeq$nVv2u!I{)0FB@nq)? z09xw^I>ODb(4-2fv2i4B+dXxE+axfm*Y?Jvv;p=FJ4g3H6r9n#+o)^}8K#_vOqgRM zN+IB6RO!6h!8#N`gU8}Lc_Of&Q)a95m-zN_42-x{hAwf4sYL&01I ze2LV&#k{x(FKDC%nCw8bZW}Ci7K3XSXtraNX@exK;JZa3`3?YImN+T1gzY4C(n*dY z40nZ!c?Bf_Me=*AjwMyP1D@SKs4pl8Jj)v+?!al}l78zhB=B~SV>ngN4l)oCm2)09 zd@X>0!*-;A=l|PI<1f`yjGZ@V74KjX?mnUgRr{WUu7u!E&PS|~{e3vj!P-(1#d5z5KXt3;2PTRTCt4x? z3>pyM-Vy&Cw<00he9cYM&x00njzT>B956)m^A%Qg)AaK-n*n4FAu^8Jf4_Jp&6Es%;MRVTkGJA-v#f<%Bg4(bTjOT+%ja%e;CfwDNMynivn z`-R!nOt{YO!VYgK4K9WTXHV$Z7YL@Zl2P!^BkXwO?bnZ6tR{#@DQ~((EpoWJvxEiA zJAFtx9+~JU^(aNHcV~?%pYK51eCaca-fRM-pnba?!ghZ`nQ6i^5#ZqaMWDggZHd0! zj>&E$kKoX;7;nu}5F902q}$7_O>KS34}%I@kXxe`|D9}jHJc^G<-UECZm$;P-w^Vn zC2+hQ>WvW?2L<&7wywq{#WTmCVNG@E`Z2F4#LDlNj; zq`Lxe_9p4NbC9y}W3eib=PIx|F!EOQVNFEm;-dTj3x1!7H&NUvJUF(!L$M_2gCxN@ zBEex+f-AMChn1AzqLc*q`IRnA?{a>RRhS{qp3t5IEBKj-(9KW__7SWUod`%}N$Uqu zXVXWjfWDT!tt_tKs|Kr7JW&GsK^KSIj30A2r5AyY!p8jLX5sC0JS(PvoJ-I_L@VN! z(71!k(QZ%SA97nxrI^=j$~@0fXpuRjr@jofDC@r`io{z&V$_Y_DR_X&ZP=FUKBNRZ z<>Ktmpg%S+Ut)i6e*(s&3uLDX`cs0gL0K%+gm@dXnD=HUgL9aV`~Zjf`Z6?HdMx(x zZ^*6+<#=KK-{Vl2?Ttr{xbZz8L;iO2_+o2o16PL=d7hE)0+{V? z!FxsDV?Xfu_@x#mKhh5%O}li@8$ikX8JuD{jGDuLmGowR$E!TX?5*;o+23~;X4&83 zIk3N@=ce1=IGZw~HxRkmth3Z2vbvf8tob_9DwNJB|s zx?8a*`)}usw*M|52o`D%=1v||^8P$z(7TC0mM;08)O_Cif(bzIr(dyd=P(1o6+#FQ z7`EQ5XA`I!e_JrZ#E|1DPa)Js&Ci~}nrB+ZrC^v*^NWRDf0P9(MYnF!m=h?QY-#C@ z3fb{J?I+EibJU*%y_D5S0NBz+&9Pj^bCHuEL)BVv= z7`M#h%w`uCfAr|Pwy^#>*L5JE{^%hO&2?@8P7Z%`qhMHn6jgNVkNP6z`6I{+&o2H5 zj~wIA@hs|9_(&x9V~yh1a^A02(wjYOC})*;$k5uu!!S_PSnS~xbW_tu4W!%LYhA_) z7Rj`S+od7L!&dE()o$(K1wZZK2mnCSm`PF;zg<#B61e|FNqP40H^Cl6Y|kEsh&XBX zzb$oF(-_xQ z=B&BMK&AeoCE!lQ$Y0rt*oO%=W{Od+&~BrZIAyx(8uuO&>{a4C67VW9feGEj&M{sT zsF860lBYjI?_y>E?QA#~gza`G{abQ;E=l3bnEV0<-FvLypXw7RamJw{_ky>;p3$nz zGar$ZOoA8@a#X*X6wbC3{+guF3JPrlS@WZm0=!ZfOH5@-0eYZHx#CK{fxZ4%=t!0Q zD3u+-MUMIw_SQf4qXeGrc0pp({i9cU@6BQTt(=ITFrk5dZ$Ah6^|(Av6x|)qT92H+ zW)h;li0f>4lMf#%-5s%eT2Wb$kJ!&6W5J_$fF5@sDVWe1^3>(*^xBI7cX) zWa`#jJsJ!c!FB}u0N0+#b%Wn*Nrn?WhI^$%d0a#Z=cMtaXvGuyCNY!k6|;mDi8XaY zLhr=kve`+F=tqLa%X`{b2{-s0B#6ZH8iLFdhtIqrwQ46GwBcVcT-eHmR*_hYEO77> zJt)>Fq++M~gB#IjV;o(bp3^Wsb*%s6|_cJjWcdLc1tF)6R&eEjDi8HB{ zr>fro*X6e{?dNHdXn`bAC3QqYQ&Tt?=_vw#qjdyFMr zqiI^Lq~|f6{N}w*bm%-IoRF_;OIw4hK<2MvubR;D+)PZUcEUf&^GeD7c8x8%iT?H~ zW?AMwlxBZhBhRe<)?aM9>NQ1qMo}{R+j=?kIf*F$Nq<|b`ZA~|8`1W+$--&V{jFLU zu6@-qOzUsQ^`~9DMo4x`bY%9oq0(mmP|O_tZPX0V@GhNxUeMC|+v$)Xw*j516x-Q) z|EK+}^#WGl=k~V`MWwg?Ya{(_%gw3R3V{Dh{cRr<&#kV#K=Nnwx1)iU>Tgp;nzgUw zXyx?&RzwY?^|!&APWHEa(U6!Lti|@XQ-u?lZKS`Qem?r!1LtM*H~C({b#}5vwZGA> zanM!_L5&-6!r7S3nZrPW{q1sj+B;qJ_CwrvCw2R^)UDZ^swnDtJ@0ju!^Y@(8C1Of zrtUX+uAH|{X##iNuzzuUyMp4`G?hs}BJd^2;NEN`nya73zcRjk(-*m}GXjGWfIeiS z0Npson$3m%g<4L}o!hU!gKKb}6X*X4au->U6wbp>1_ocmS3-%va4Fbq{s0|i)ed8mVTPu+X1La~4l>3XAesFMt!O1=zr zZ47JOSdCERP}hzO8S3QhvUiQRz0b}b&t9bGnwNG-Osr?4ql@I2HiDY;d+NqX1!4-) zTfSWx>KcWi-ZoxW4H;ks7ZDlGN~CMzL%(|v#kh+k-wiJ8OWpnW5^!-y14uGr93zaX zTeLdDFFE|B)x>{gG1LT=S{2>~V!2g#3m7E3V>*TEFI03=!0-R697UAFUNE@rxzcE@ z0>71T`67a6chU5FD@PWvL5J69Lj_e2UZ?xZI19$~OC60*7HchslLmL|VmwtWjaE;H zcL-UsVg8D4&m1pp5R|1g@>o>MN2<{%q^UcH6^JRw{>Xte+PT6|4(G$FH5GhF+T(&3 zlm5~+mj%C_$L1;pSp221wX~BBlqPjDKC$Zh5yjC!In?$23uz6MPQi;$NFfpUH8`Wa zRj6Q4&grf|QD~_P)k*bqSQC-Nn!2X}AtrrU(niy59=wg|WZYaSI&_8#C*-I6r9kHE zY3h!>QONvZYKFh8MF^cW1sjdoWW)`81!}sOFqP%5p2&8R8P-rBm_C#MedZ{A!YQ!- z!@lPFsPA{5r+{|bC|rsC16J7$S7OTH&D1``?AkmAc}VAbeL|KR5ZOcA z>RCzQ)R)fGKm{ukvC!L?%3ua`>uKa33NRXQgX^Wy$Fl@z-=3ts7_fB-uFD^$v~dWP zzwIM6bA!#&*nxVGOa!(|d&AetClhgN~6Vd9xq?LyO&BteH2ELzFP`#MPGiM{)TQ`4#iTSJ8 zvY4`F?H3n9!R^}MTqh2dG8}M&?}@&PNE7;+NebL|!<0D6(;EZ#dj>f!zI2Tg0=rSL zzsE)c^o9ew#Vn^2&g}KSG0MxHXO0Eeau{<1*FY_5T=^n;XdI?dXvNnN5!kkn@3Ufo z9RNrKu2Ei?od@>@a~!knC;1oIeE31WiEV|3K^*f}Y6^9^Q=Zs2be#_rC9VewaPKUH z08-4E#D}QZ`9yjqmY(=!YE`@t*^OGsvC66eIqhhRxEVhMrQ{4iv4ZsOzz`XFQ}JRZ zjM6t($y53x8aa66k5u(;AXXFpELnvaKw237%v;pUvZs=a^*n4}=2|1%i+o(H zHKlKy2P6~1c?&LX@Z1d);La8_-;Vgc6I(I(RwEK|Lq{;s!2Lb~zY=h2sb#V}!LbE2 zK&RATBfcGYMS^!4@nnUz7H^$nK<8VIeOL$jiF^*RbSjf{;z}pjCGhREd>p?YA#bvt z^#bNZu+#m15AnR^vExX@S1p{_`@9QFdiMUv1^jA>>YmAjqG_62yCZO|>et+(Xv=lvqwiq$F{dme~D zDriFX!u~js!_$c5`rst!E3WI$c*weU<~gbtQ2@o^%P<`Xe)D`7H>pR{d5Ia zx;V`$eDeF1BdieXfn>j5LA&r*Zfy0SXFUtCC&_tdm9}F-_c&@n^+Hl{@xR7xJoQzJ z-heYpmz)9RJbyYGM)zapuPN-qW6$#Qa0t64#Et65h1{cAI!OZL(gMI_j^z&AT8JY? zFYU(f$-&B@99j25{3$22@l_=-=3<^-%46OX1Cu%L+X8U;Be_gC)O6 z$T`DSkSbjPMhR#8WQv{c^B)KcKJXPDsY8}a;z&Y^-$(_kyE8=HRYbj-C{TSlz9N#< z_(Wi(l#*|5nybG?8S&V^M-Ks`t$&1(#FU;PJ^cjRn-R9JY|oLQ7oK;n}cN} zwx~|Z#m+_Lyg9O?JcknkY5WTg0aIG2qDl#!BNqrMyXeO`@?d1h9J!DXT*{yb%mx8P zUnDShslcN8({@pNl|XV~gF>3ir2?^hEnP1UnIpH$t8Hg{t#R-g(P0ElA>%Sv@r~el z2us(|9`*!+*o;qrNA6_5R(8NXI+q&x-b&XXaKuD{DCPgt^GceTIIhc>0pgRwsY zV;}8(U(#;~zJG6`+|6b)64j5!GPtswaQ*W4!j+y?(jRD=TqOOnrjy$mE19-mZ+k0e z&aYT!bjP%1fi5l>%wNU9WJ1T*C}hqVrw80J<5k=b&fXN&r7sy_W{XyJbm82PA)t3r z4 ztzI|yNEgksMu0jYGq;qoc`>o$@0gb7gINP)1tt7^=9}YyMYmA_0Nv4o z$B0t^nuiF(11-Z#m0=yo;RY$3hsDWj+#$KC&;Si_vG+b~4Yrdcm`sL)0B>QWdg6A!S2Fzv1#Nyo~8VL4@ z^i8^W^jrD`kZFF5_9-{F;{L4WenU2ccDx6;)8k6;4wMI&i6n*-Svxc`DuuodKLw#8K|ooQ?5Y*>qn$$r7gNzT7-Ln1!_j0t)c!W z3)tH#QNqCmQt}uD6+%Aj%HZE<^#CdA#YGbYZD*jl@+&y*A{9U`_rdSV3by`w!3a0D z1M3+J4aeLBCbsP{v<#62=YGjaR>!teo(05poqk{d4drWU!{?InX{uXOGH|)hI!$$n ze9jt8>8Kq#9yHBLX}D&yLY}g_1O`7mDkLjWY$LytdZGAq?^jYE76)j5B{ltbP=^a+ z&e_H*$vVkU(Y@UwuRsx7UEucD3WjKzdgjGEtYTmlDHfY05!mpE2-~2PMGfBV$QlLO zqYg<5!$Co!2!tL&;R#Z(_t)T(7bPS*vp+C~OK_N}zZ({b>Cd&^dVI1Je*arZkgWKS z%T5p=1(o#qnr8JReY&QpA4wm_bWG|k=|eTm8cKR^O;cV;Z!c*(G299XyAnwtwkc(B z=8*Z72lEgG81h1HJSbAsm|C z&7{NeHxamiFz*VC5qACMfBJq~x!;0oUhVkPwJ+Skfy+Kh@ExTcV|mSCJFn(ow*LM` zq!_ zlH*OpE153e_!PS}4`;|X$^6DEuyY!nNnQcV>JgM$7+y3ak4|p+tzqS~^Ut5gv&u8ZJfDZ?JIN-wteiGp- zXWDsD*dLekq6ji%{TyQQ6&?cfL3xE6fM%Pa*1B8n`l%6<_BHQz`>on0NXrC}4 z%u?%v$?vynb%_v<(#7}^t4?|V`K7No-zDUL;1U7fH|kmyR2aO`un!bH#D-s?u^xU& zg3ErvDgg}yh+StaX&^2I8kdD??2RThoHg;6=Jyr6aLanY?TS!55%4n?D|O~Z1Qv)S zoeo^=gq+Z{&-n_hn7I{$e_tyN`@KVTc0sc)Q)vqNV=O2Wl zejSCqaH4T}QnvkJx@DL;Vhju%!Q!&-mk11IQ4x!4v&j!i`5hYWFKI}AmvA4$E&j69 zeKad^gSfZVd^HNAaQMFJc=^8it5V)7Z<12tQ&PGxi&Df}{(J}okZ2eCxf==n++qHz zI12gpNH@S zXT0KUD>&y9C;a}x@cW#8;7q>=maP6gB<}_HHzASs=||dmwMrkQ_<5f&k0nVL-#Fuo z<@Ek!IGl@><0vjLLY4pKBRE;~_tXRA&}{m%v}{b&0k%7AkXG*eiCX)M#rb3;3u1O9 zhkc)6uA1hC4~aI98Diy&D7LEqBLPhi3cSfiO!-C0jA$k%Q=-0QBF}Fnv)NoCyvk7m zpG?Za`(l`N6QU!S_2Gv}uUMQ2j3BxY&9LbTq4nAQNt<3pv!G3{!qcIvk#zjlJ zf;AiHTwrPgH3GKaBW<9wYpMAS=&8gRK^%UtD`%;TSW>_Bn(zV9-XNMZP!&W4qy2=@ zxHb?R3xbKjQcLKEFyQpZTp}nt*i!k8P`OTUcx%TAnBk%|8V-@xKxDdHK-~Cv9yJkt zKaZ!U?^d$}bmiCS%D1EsNsqL+T2Y$>@000bf=`Gpwz1-!q2hUbtcz+lW0x%79G#whQEI-I~4*VQNWdg0oR-rJtp0~;xgP2hK!7|D9KD4&gY$Yg(==};L* z{IMfJE^?OqPE*9a{OMZ6*(E?U=b=JqfBra_td#LKnLOeqe?dwotg_CHLwSG4&WPC^ zY80!f#=%gadca!<%ufPQ;WXei1a^X*mTb)cUP0iCNg#r*w32fPd@u>TF#~uGfj3wn z7m+++CJ=C$2RJ(g7*D_y4{%%xa3TStJiq}dz_A1rdjQ=ypC5h zBrGJ-x}&t><@n0fE4>u~Z(4wVK}|-f?lS;~eg^?}d4M$W-y&e42S^kD1p+Sg z0BPdK2^enyW&N%AorBravVPpF<9?au!^Z96fval>QRm}M^r=V0POIASQ(*hRtX%mw z>XcwyStuY5dDkusU+e7{IXm9VCdU7|r#5JzZ1La_!~9k4Py{YbDlh4|-)YZE@DmLU z53=^}|F_}U_y5I$uc3Ggg3o=w-cAY$9dJjc((>?cR?8TR~5 z3VuF9*iFH=eq3&I0HKna5u z`iMhhEHL^XP{igwy#GJ;{sla$>gof=cL)JgkkN{wqK*g}6m7J`#z-_F2_#A&B?0jo zhRlQvOlF3e2_$%FP*5;N(<+KeHC0+uYg?*P(br2sJgtgFZU>kcu4?a><9u1A5nb*zeAcT(3^O}q@$RGj|>6dTXFoaDh}vH(jH`sMF~H>@1pS0 z15xDDe_iqEN651aGd7;(|8+X)K%6)n^O{DYPYD2f(?O{Dy>j%dgUg^tC9ai7A4_SK zi2M%SClOgi)JbHJ+2&D%9@Iap&*ydTB^FP+J{1p1I`%V?M71|>OsJ&4liKu31M1e< zTh4in+^Owe+B4$c?7oZkLIv)JE4})ABG!W_H9&r*Tk4$nvsZ~;3OedpK6%id^MbH< z$yY6LC=N3f26E2T0%K*avDSiUKL$@({Fn;{!D~J6;#Zsl=G0iHVUDOZSt2w=8^-SyAXLF51vRr`f@;X^z`S}KaZje zRpXq2Zl63vDcC*Z?~`y?Wv^(Tg>);Owsh%!pNX==cli7u?>9w}C*mkZn*F93qGCUI zU`Bn5FZE&3_po6k9a+NsIQD+I*!jf2{2AO1vc2p@Cf6VI8Ib;u9y`Xny`5)~b(*1; zib6||UPee%?_C^{PIRCU`*Ao)_aJGcJss@(jC2XBh|{uPSR&Ha8z>@sUGe>=l% z;YwS7axiO?2W`^yC+mMhW%(MZ$~}5=fAZXKiT?3j3H`|x!oJu3q;oTiOw*ry2w}*q zC$&F$g(zwJlZXBU3iT(i4#Ila6XWLci*FLYek1co6tVh~O^9UZPgZjxtAB|`ms9*J z^e0C&N`G=H%h^|d@+~gx-un{|cd+UDlV`sN-KZg^^d~KRkwc*eAceDP#MZ%?y`; zLEF~`%4S3ykQzE*SM zn?bjY*Au8@>&y4rzVc|?po8lvK5%6l!0s|FE^M1=EOM+gBw; ztoAh>kqqtYcuo{=Ux!fqE3~hb9%)}MeuFdL$9VnG9pKu>c%6f>JN*;(ux9LY;rgrdS68UAG@5qcKY5u(P zbW$j(Jw8atg!VXxvnobbX~w(TUm!hBAU)EKcL#9dY|w4(@djbvYkTaHt~yP7{Ngsw ztS7ZSzD1O@?eTwK1BKe-yC2!w$a)0~7$q}p`UixJ}O!v`gtTWcF@~{D`gIm~1 zufhWlRIn^ie@R@{W3DGDlKJ;1$>VR!E;QS&JsJ9k)gNr3sW|rSe+9O0kZ9}I8twUq zLX(R2aqm9|(q%aWb8F5P^ln1Wilg^nJqhj?37yC2qCfQke*IJy3Ip*o%HImxFNo~` zVSDpsz>f$Ubs4zwe<5sl6WhcQoHwEG6Lcq`4~nBV3VJo6_lVHHkkG{!ro<+lpk zQet~iG$-^@L0?ShU&PTD3;GfS(Yxd5T0zez^tw2@O3-r%y*!SdDd<^*z9^19SJ1_T zE{&rL1pQGj&{N~+DT02F(BtChqXhj2LVq!wZA8U6NYJ+s`kgrX^XIvK{*55o7f1g? z&?|`h(Kz}g#8I1X5cfTC^zVgx7opqZ=srRJiqMfb`Z+;APv}eI=w}4|ETLyIy6C=_ z06%;R^5i8l{gf&H$HG>&6QtuLHK8YnX8D936-TcX?lTGfQ8om16ivh|X^V;0;}{q` zybM_&`ES86H10S&g`|a}hqI&uW^_`nqCMxFPU3QaaXJL*$7II@F$Um6vP0wE`HrM3 zr*!fXoS|`tlCbuof1z874xCI3v^~Z@kr{$d!HhxD>SEHWy=XVFJtu6vV8fN)2|CzX ziESFQG5Rb?{m&ghA0w%MNU7T;bq`YG%D+e0PN3AE4C73$BR03NVN@!*0JETI?iA2y z!>2uGBxT6IRKlaZcDw?;eSUY8&Ysdf`+e6}-G_1i8k#wEpiWU~&6ZbUYn(T|1JrigXXHyI(jN7r20W+Er! zK~f9q!bF^40^?SSMW<3G9YtT4>^qOe5pX<+Xa;=)(LtIfq-Ky{W%~VTw4OE79Wv{S z9#@F};3L2$+M5Nb?L}Tq^lzxm=&BLGuHH^Pu(cm>%?FDrtl!_!d)c_pY>r0%=OmI! zyGPWCV(0UILD1vWU8b4demfAYW!%naC#!&;8`CyOxgswoB)?;n-Wl8jgZ&v3I#gxZ zF;rlB&FgtL5exm?tQZg-Xn6M)=!PutRq87^i;qquJ$6P8ZW(&BymESY+Q=Dz4; zlm@6Q>ukd!oRdp@Uv_%?t!8a(_6rIk!G4FS%GF|9v0siN&n9G|{jj=+{f0{!V7~)J zbJ)+Q<|+33`DC%*UnP67-#v=lB}lPfha#UPB!3}{cKT!Xlf2g*ZQ1X}4$FRP1cLom z0ZOvpUm$hg_QSFZBfb5QOeJf<8>>-N27EAo`%~1B{_X}T&;-_< z6?1J-u1}~?a+;ujXxwXr6=5r%CSmK9?PV!Dg!M%4Ry(YmBpE%#adz&0$Ul+gS93z{ zbqRSqBhOZ8t0l!QdTz|WIoySo)Qy*tcjWZkOhOTX9(esOUbTQJa%~2Gg*W#z{cfcq`S-oieJGemDa-)y2;HkNr zdv2a#d8NBpiXb{!_Rt4Wti^(^C-lK_^u>a{gwUVTMvF|-Y6U%?(EV|Am7sUP;L+#e z=yL@9GNB)gqrWcbK0@CaM>_@mD?+b{qYn}Ep$MW)arA+LK8Vl@;^=Ha4=41warEcU z!glTB{*54-8%O^`(8p4ihs4ou3;G@6{^!49g?~fP{e=E=9KB1>pY;I!LLB{^pr0r1 zt#R}-f_|3Jcg4~FBj^`M$aQh_1A_huaR=k*9|-z~guXD2zDv+|laLv4^i6{9B<@q< z=yif_CGNxG=vG0mBJO|F&a%{eNYG(IzfI_lqLtXufIlxh0x{Vqu%0*KX+lox3otp& z`)y4g6M$zh3Pk5lr0O6yP542{jN`Gs5`yLQlZjIwF_gug$L3+QL4!k&fgcrHYa{#n zaX*A4RXhuoi}ydT)4hoUtnYPPr1W=De*WbK&Od?)<@z=zW++$N;jzNM2p+uulgJpS z){<~OgVqNg<|f{5z*3WUrl{1aJ zPL348STC(XjE#kX8@jK@!x_v6W7vMU-9574hieoKK`m&v?NJ2y)hHgW?Xo`D6}gt= z?ulWc++WPXYp>fTWT&m)F=9~lsAC1H7l0l)F z3H`b&XEf_J3KEwx-{)(IoHLm;li!1Y5zP7bK1Lb-5oFpWqI0qc`IIa@2i5pm2W!U( zLY&|MPT<%;1WLF_6Vgl*3BSiP&W)-^N(U#{sR`(87+Ix46G(W7{_vL@#^+B`4!0tK{t#$5c-bQ#I7SMv zW`cx0h*PfgqYs4q9?kZx%+AFdMF~5KKE{>_zEBuBlnqBneE)|ll{}w^cGPozg!4U? z2-XkymLUT@I0&32@Lgrhp_2rlJFvU(Ekw`KCo6y zh>jQip9~z-|ACs){}E?O|98y?#Yj6)LGJ_M^#~S$v{l6`+?-bON_nPz8M1}B`l5eE z(bqk_qkJdcgUhFxcQogrcu1B%gH_vnwW#(U7@;D>_ktV0#lWg&J0&jPaees?KH~fd z@Os7`6R#g5p*8O>zVz9+eeL>jMz3;%J6kha9m}YXGpVCEdIX%M#{2VF=o@VB<5bT( zIQi$RMb8l3qAFI=V)t|z9;KL>fhUcJ$W zAcAV@4;)%&aOevcn05BB4s`leP8-ir4F|cgU8EXzi3nH{b8lKS=JzwbQ0Z+%ms$7V z&^R}+DoW}0GTR|hWdB65pR6FOxgd3-;i%p zx`QZ_r2YR?`QxJ-?D7|WS^49mKc;j^@_E8R&mzkQuP+|OhyLvA#dUo!+914pfc))m z*H`_GINSb|wXR|m=I-f!f914NaJlFQ()bK;^x5%jVv0DTzo3YmBuIVV3Z;*?Cp^2z zY92u=viIrrDNvN_FLxU?;#J?)!{(OPJJYNuis4s>v{CM;6ncPzev=`$1k(rf15^9X74!BxU?hO)p? z=o4rmmh&A-jr?uzH|d1|iZ6Zl_9HOe_~7uEKUwubo8uitN22$-^xZ#z$2z}aqw5*X z#OK8}`sqDfor!e#Us9b?HR1duiu~ta$WVh0&`D*HKKHl4;`cj*xMnabGVJ}i=p+WA zT-no5{Q~Hwj1M#8+gAbsLrorlaTpB;|2qJaLI9$b5VC2f-1P zkmi#Yvl3)(OuYG>l-#+}r@5X(o*|VS05;J8_N#w{VmWVJ zA>3ywH-*f-gU!JDg1bn#e*x~(e@$P9s=%>zQUX&%Qi&Gh_^9z#S>la5oY*_~$I;Or zqFgvaOus9yKnm-3G8`^Rth>35WP+eG+vQg z2|)GGJ`FxEb^d{BOh&iooX-WLv&%R)Id%&F+7$u)Y7~J(0z=uxOwtISfJuIJIhh36 zJFM&ph>nu%M_EV$V3~F@KIRWdRMD}41tz>(l>`}0!vG(6UqcHY*pMg{9sFx$eV2GY zkLw+zpuDRy3IxB0WPm96y|pk98UloU1Jm#mXlB{k$H9hO%);*>aiEl>aCFbtxHgb? zhmhBf;+%%#sh7TUMgsg|n3ETsfx3*ogJfXn1&Zo^D*+HmEYV+qwr=fHOuC*!9)B+e zy_jX^fBG=nsAZM-+LOvkAz07gHlVDp2x}EsWo<~l)=^ZB%^6g31LlELrR;xPN-ak0 zr6)EcjlKG}QoUMJfBFe)!C$P&R8w16HQ1Ga*y~*FLiIIBY)xuEtyHGCoAqNS2maM3 zL5~DmczefcO9x01mvTxNwOjLif`I7v4`oYtSx5rlX1gC^<@2pX8!b8kQJ*C0w2+c0 zXO=35njjLy{P6)6^I;2ujt#6=2hYIug*oJ{>r@H@;;p-eQ!+txbZ|0xYfdAJ?Vxgs zw+4Y=Z*3vU`n7GsKxhaM_6!~lx8+%Bx69mc-gf0rShdX>MHJVw-?|u9xg2L{sv1?bM zS76`PLKWEc;Yj>MbC@tLvgE6J0YBwSc`z81z#?SiFMd{cA*?;m*1&& zJdsC2|AEw6NQzrRLn@SnLHL-HFQQB?>?j5g&ZR#+_Ubc+u`N}1r#%~vw2%8@3+wKn zY;KHaLvbscgRE?TBi$Vdx{tRDPZ&d5oE;`fC&Li}#q(gK9UgJeM7JW>mYtMh>e$Fx9%5eZPSR(?W zK2bAjAql{xh;&uRN$5EzsY;r6G)u(vTVe=^zAzd&BqFT!sOGs@z%vVtsjwP3YRih=@8+gsPyEbICbaRc&Wg z*Y-q)qd^R#ULHI;>stCl%6r`VyvvfaDJ)~#PR{iDwG_sNLGE4J^9N)ATCS`+l$FBR zFsQ6A3hPX;+K0irkQppnmqnJfEAz)6urfr4rN?Rx|0_9kP`G35?_qVMre*xv?Z99y z{!P@@$(Z#-|8@`(;(Z*P0QErtRXUPLLi}I}KTqEPcc!G*^L^dgM*x4qf@x(>U)Z1& z(BQ?8H7s7wOekN@yCZlMv4+9Ihmr3x$+uhceS(1KU4raVMhh}MdvPD>I2VA?{Gu6cq4;->?x)bw$_U@OgY4rDv5(*zp`K&d3_ z{D6#}Tb9QflF)Nrk7JZ|w6wXkAjBrjobB0MjI&7|rMXDm=1W-?x6Po7nL>O9bQ=b9sL?4b8FMuP?5cx!PhaS5}Qt_ zjXPqJWqF3_v?#!J^TSbK!jeywdxC)I@{x=zu#f~qyM!}OksAoWsKCNHiY6d4RMDmX z)+!Qe&ZU~U>;Z9^qxBF(y@cXejk%0dOfL!;EmE%cm%&z4Y0*bnEBcJ@Se6R4ySN&* za)ADQHS6%|=cI$mB2x4tq?;Y5z~z0{fzeKuWNk=;xpGi~MG{mafF{}x z{o*KAEjGy| zg`=(!QcsW|Va`AZj@9ep}4;2(64k>Zu*n@y+6yq{xq>_N9IAVPiVEsiUii;eLA`>M#4INCh1h=ur zwV|h#{d+kdS-ftL_6OfV*K_NAlsbPU9A;?TtIH6XBRgZTn;fNl-hGh0s3^jc@vH#n6j{RMD*b8b1Sx%=l)oeI3dA;c z{*7SKcLmlc-|fUlPrAU1?*|dKBj?tia^mDiyF1ZA>q)(oN4rb1sXAyQw8DC{dmf9< zDPduHo(iWetoIZUh-Xu@mcmcg=upkUeJ0Yg!D##%2jaXMm$Fp*-@1Ny*H9$M)frg@`J^*DJ`8-)x%rwK8PMF@%P8H zm0R>9&OHA?WDFsAKUcSxGR6D?ryan^|}cHTcOF=o<0K<7bB^PiRD`CSL}74ozOf_f<;>zJl*p z@x6`jSMz-h->>ESI=)}e_Z#?rBi}pu{$0M`!uMPG-o^KO8c66^&JMmG%J;+gemL&NI331}Hl_{D)U@4c%&T*Ny9#r0{1HAI zVFmC{1HW+9&`=rRcV`=O#pOdo#ehFP5AJzIoIeNrz36eO&o`#=?V+LVfTzzj<^jOb zE@SclSHCkf^a0?h;Bf;U0PFw>(a!Mg?W zHUaJde9JXMLmL5S10KId@Sj%V3^Tri)wu~>BjDm|hlXwe+zFmN*P+~ie*=8MI+Ppm zPQcUGquhXZ05;bT4ebH^7~n~OM?s%jq}>IW_-_M#Li^BA0rI^Da1iixz$*d2a--mv z0WSFN(9l%yhX7x4+t5%R;0C~3ZXX(&2KZsXlkSX{o8zSb; zA9xl6zTsKH*MMgL@NDp$2mIz8Lqm(ea}MBMz=Z!gc&6?g8mb0-BJlms4Gq0lxS}@FVSev!D;)(eN|!!_M1{*$UpaEki>$0R9o+?GFi^ z{CeAM#`sY04!n5iVZi5tz6Wp*;F}?bV75Ju4B&PhH#FpijF$k9#<>=YJ__`Sz_lDb zG;|5lHvxVCFwsfRZs`BZnV_E**N5^gzQve}QTJ^pp&diUcJOQlOzB2|J^ySY>K4& z4d6z=4})hX;2QvM0sI``Er7QJo<#Bh7XTg)cn~nea(|VFu)EWkKbNDAgY7m0{ypGY zz+HfU3AhpPCcsYtCi`v#?1Y>k;9CIy2Jjldoq$IH?go4V;G4kzIN*gHX#arw0AB(8 zO2BUcZUMXu@Tjq+C@1D*zWA>dr_Q~<68{4(I(fQxTM+Xmc;Gcsj>YXNTtTmYVtNIM9467bW3pNg|X zxxoJoa53OXfF}XI1+WwFc);C&Cjj1FhVlX)4|p5ke!zzT{s26~zcw`F0Nf9F6yVW- zcY|j%;8B484A=>HIN)ONOag2G{}T8Dz@Og)-vm4z@F3tWz}0~F047_x0S^FP2Yd_Q z4**{Q_y)jHz+VSX7vQ%5yMccga6jNtfO`S&2K;#`bOO8!@V&qf0DcAVEWpDL8ye~Z zoC|n7;MwiQJOlozfXPoWteNO{Fzyf?8w;O#V ze(}Z72Y|;T?R3CVz@q_o0e%bcEaC^;5BO}rgMfDf-URps>@)2G+zGfJ@GF4-0C*4J zKETHU9%Y7xUI08agM5Bys2A{f;GKZC10D^y3~&$NLGUyJejM=Kz+VA)8{oSDcLIJG z@blo=40sD*lG6?N0l@Tbt;Yd(1Kt9-5AbHdn*qNCxC`**fCm9@0vrH5It%Rya35eN z;9CH12RsdMC*W;>D*)dB_yNF|0A2^U3vdwd8o>7fUIVxd@Nnp}4)7I#*8sl>a0}p1 z0dD~u0lX6MD}aN5UjZBi>;qg2_;bLGfPV+rfz5X};6DP60A2(*7w|g3mjIpscoX1- zfE|Fh0Imi6Ea2^cs{s#|p#KFt8}Ja|4**vHz63l2fXe{C0{rl7v`fH$06ZS>bif7R znF_c7@HXI!0Z#*52z)KzJisM@*8!di_y+K70-OuD4e%DglK|fYcspPx;A;Ty0z3im zO28ig9uIgFV1omMhXJkwJPEL4J=zxF0>GmI&jLIf@Zj~3QH(wW@E*V~0A2%_e&cX7 zc)9_90JsJ4foN1Y7{P53n2XRKR-xF9Q6pbD+_OJx74=}ZdZ-6HVnA*ch zfFppZJsb^~<}=hD#sayVruHx#FwK9cJro1(13V3V z{>~!k54d-oG5-U2)C7!2@TZ>vo&cEI!@Yp>0PjZH`vI2$&RvUs6YxgB27i{{4crL- z0)7j|#~aYDNd7B;*8wK^QNU{elYAN<+W?b%8XvC!d>i0tfHy+^j{#Qz_5ptb;7b5E z0&W8w1ndSJ0lWtABEXG+Hv+x{@FjpB0K5=zHQ*k=wSdb2zXG@#Z~@>b;Mstu0{$Fu z1z;y&2gbfKz=r{z1h^RRozsy9@N~eZ!iKW}7Xa=CegN<^z$*bChO_f|fR_Ot57@HL zFaS~D$xpW&BX)3u=M}(YKce@6{s+*V$4dFiKraJKbO-3&sE@A!7o3Ft41V4R-Zhia zp8?JWe&g2#|LNJV+37NFd;)k&zKkb72mf1VNx%Lv%C_xX@eji9226hQ2P%Il@`p^q z*8(=cKMVY>a`CfA08hZjSjhi2g2&+VEk5XWJ@VR9E#vm3doA65Ss#QKu7|3wM<@0&m=HeP} zQ>m-zQs?CGfwoAosi~|gEvc%js+>1(?!3CHxn<=h;5Vn6NT}Ikn!KS zK&T%1%$;Kb4GkvGG`M`>^c*v18dq~9U}`QXnLT^%1B+?m&~v>nD`k6RxMQ+3)s*e63#p62#1O zzt?w;x%}KBulGu`qM-QPJQMadom%f|I<>*I%ya5uSN*b6lW+~8fIkAHSYsyGU=&Zt zMTlmfD}n+F!Z`z}ow;F8Xocrgh@FzkF_UB^u*A6W4ASjcaT>>w_%vKl>$G5VQ_uvO zBWA@n&Vahb6X(>FdFvxEi7V7PvEW;$pLyAgGo~S_&n$2D!2T|`dv0?i*c^cge4ZuH zuV`}62?-Q13jx7ExM;H5nd|XKLS7GGU-MLF$P@IrP+=6CLV~J8o)uot%Gs_~PsoW> zxl*}EIn@~qp+3MGp6U!YHX)p1T0LRo58yvazr^qIIZ@v}GHIc(6gwM2FkOvjIdbqd zJL_Hbjh-S;Q!vtMT#*RH+@{$d16vJLGjPWc8JW{M$sW#P=j7A!8k`Nmu;q)DRVA~^ z>#9p?E6j@1&tyZ*ubdTf1slEf;mRi063;vjd4eZYiW=~=L?#xPnCYPiS7?LF3%_@w zQBVVMdMTOH6@jlAZ870MGdx-;@UC3aqlIp$Y-trW6;*X}N~+2YtWp;Udi=RC4J<*T z3(=Ga?`%M!B8qgPwL}5|XSfO0Vro;9E0~-Dx_IlIOKhB4c`cJ$n0eyl@I)vn z)`LRLEt64|Y~RJL5f7>bbsd=#hk^)7OpIVf$RG@im{7@^YN5GdR$R|>I^eAQcz z+NlpTquu!f5och9ClvCc)w{jndWy6@vi)#da!v79c1rQ?3%rrWIRR9rAAJA{75-{+7JHU>{Yc&5UD6z4t59!fsX#51 zyB#!@DJWu7lQ;6En5UxJmU$}uXnxwJC@vZ^f=dwBI#Z@oQFcH2G33tfkM7TpE-aCq zL<3{xMQz-Ir0grSo_IVbd%3w#gr@po|$o;>~3{r8_kD@Dw=Me-i z4Xl(dqF(yw>c&7MPzWb*YWv`(ihiNhA8GW2y{ky|(_2n=E=KpV%-B;UmPl%OD%_m< zdG2PG20iGx(OIxFPla^W$*NP8$9)`^*#?w*A(=5A|7WhdO$B65v~*@ z6_IX=nNwqL3#I4)Jt1f6=;zGc+Yn?I;iNtmf~|fhF$457WtAnfoTv{Pz)nRQL3@uY zmP@VE%HLU4SyNM9HYM%QCIgy*$67-pcSc-)Gr4w5eC(cCQaQW4EMqN$zlKwnamy@} zdJ`#y;zwoB)=xukxUd0z7dc1aibP*2Ay1g?4M)&>G%xmf>rdk@6Kcd=DBRc_K@2V* z2?cz$f#&+g5+Km$d)yZ^LU5TkOm65-Nab$zyPCZ9H3^B!yzZLDKq!JyDI7LmmqGXI z=Cq~3C3N#FF-tst49pP^J7heD@e(tMSe%Cg!$VzTz=uIW*lh^mzz9s^dqC;cB8E(7 z5e%nHz;Mz8OjDqKndCqXRv^(G4s4%D1VS_!kt|I$jl`m!UDa42r~^)!EHt5)$4pGU z*(pv?=se|OG~3C=mpXF;A@34rlPA&`kUqNsJuF-|a{`?bz!hj1E0QyVc=PQ+roEuLc1 z;OAG)b}jb!oHnO2A&fa;v;}lWNm9_+N65lHnP?U3aA&|)<97wa=)715&B%_U*$O&6 zSID^}jm20UC#FL9pvr^jW z@%fT)T859=oy3^=mE0!C$gzIFm$uI}rL#%{J~RUgVUd=IsjQi6YKtdkkTG%U1ykot zT~H_WZt5D`*d}C5qbpoyb^azsrzHkPG0cN}zSa`=(&lg^%>8E-4><4vQ-|5+5>Ld` zdHm8XE#}Ecq{b78fF3q=38Jayu;K{UU>faTQfTUYXzkQCd2&>T_J(@p`GrCKtngx{ zTPOYNJWqr1hGz!qo5R%s^q6xSDyiG_gd;W0LGo>MiFFtpyxgR{c0GwggGmU}(v_IA zxWXRE-_&srEu{gM&IpXFz8)1X^BfZlc^WVZdE8v`nuu$$*XLcuI#yvCU@-^KO?X1{ zgKl^UYqr9L*(ond>QHK(c2RTTcEjTX(nc`gR=HZrTcA2R-7=kBSt-5Y646D(msqn9 zO(~V(YMDvvgygh56OsW-`UFufY)_k7995a-K?zyM61&}%SQ)ewny}bCoILQ;c;mqs zhXoPO>{6$mhRuFaAkZ`u7JviOB5X0QFG3g#>=SNYfnnMWZ<#^9QfOLTE6r*3EiH9e zvSI~YAA$SJ0HonO52`F2^P}2g^?LQxSe!a{FP2?!eD3w&jMSfm&HUP#1(t(^T>d2< zcyav_$%C2%J7G;L`lcrGdtMP@)+?Spmsi>FY#L$9ToD(%o2G#ErVbwBf_u1315ZC7 zHARI+kIT)?Do7JB%qhZf`dO`^K)mMbP`H3^g~uIhV&v?hNHdj$+L1c@w|IF=`wG6w zGWGPiw)SP^ptF`lKW4?@RKeN+`&hiL3Rl8~=fTNQ!R)=LF!T|Y!!CiYoLF7k>(A`k zGOCNxvGQ4B#kIZu%&uMKTH^PhgNnC1xVGDku235rTohhR)=O|+O!^DO11rkrm20=f z9!UEmN{SbFelU#w&r{n7yVC@NofSPl_WX#&eR}}2|3R=TJq4+VUWu`QZ0s?dZ zD2&xvmNzZ-xUqp(+t}Q+*pGD_ zPb%YUxHxC5YbI$jq{cDyE1*t1o(MA!ltec1zK9k1!iJxI3FMM zw9E}42vITs@vz|L(Se-+L_*25AR&@8fe}7ZK)J$6#&^dyS6TB|3_D&im?&09(+~)q z?`e&h6l)6VWtMo@>rw3>Qc`Ozoivumw#syyJJDLCsfprC59fn$Syz3L!XMV&Z~0 z+6W-)Rq1T2Fcin7@4BTD_Rbe?+jhP(tBpY?TA8q+7)rJh{2mouhE1uEmwO?a1g><2 zXvh}JL5mv9L}@+@X*8iXvB?wxNi8#BS%t_W@~d*FKy&wJ`oJ^gCN_avCuFrd2L#_kF5btMAcKGd(R?H^MiPAw6gzZypMXuv*XXQ}p$a6sO4O%X`C+ zfeB(Y7L=HJ^JX!Ehz!cft1+JcVuGHqP>N4eh(PN*;^4(I>bhLpm>tLK2|EHCeG$(L zmyd>K!eate7VDyBVlfo(Tk}?-vV`QxS$thAObLsGWGT}9B~2^JWJ>^pqi#8dg-y&G zD=6%!1T1{9t`B?bt6TtDGNsSJW>*+91DXraK4%y()qDw>3vGX*fspHBuPX$O1Y5+~ zV`|Q#vy6DLYDqv^Q#|CD+1hbalrKk>)COdsNG7nVmO6o0QS5}IJ|V_~wB*t>dIO?% z95ZbS0zPc70}{_E;(DVd!tk$%C$*Ak_KHRp8@o|NOxU@2 z1bW=%tysRev1yRtHu}H^EHzDm0J12F&((V*^%i#tyE}Q%Wm9JT&tdzh|Xw!a@5c zJReGfuW4*bk3~W2Ju_*4s4$6PPJpf9BeZ?_ToS3p8VB6ik?@3Qazd56geJFf)O?Jj za1rdHVpl4_`-&PMLoAfAD}ZM_JfQ?Vc{fuLw4&A3lJ0MtApF||X@jwpm%t3h3SLMX zm)25Mo-E@ehVaLC1a#+xyH;q!GfLZ@WD37LInq?=66jowb%|%A51c{)oSmR$4CiOf z>+HNMF^`?WhZJN{lP-&dGEjmqR|qVzHFv5ro@MEiGXz*I;vQf4)02q!2&UsyY&naA zAvCYF*75`-95wlh$4cxQ<+hV4atbN^ZaB8a>4=hTwyzjl8^9wEE-^jV!;|W8BXv=LvO(q=v!gtCZsu#1XD*gZJYQ?VlQ`a+DAb6oUK3;C zk_bP1phdeRQCC4MX;T~sbl`4`tnpP9o~ZjwNCzaDqQ;`!frLHSr^TdO+6A6s#AX7? zlWXiP3l*!n)aPUI-Os)A#h#<3vdKJQFT0?eMCO7S=F>XW5Jp`+B}8!GiypBtPR|w4 z9E7*XP&|8jRVQ`OP1t*2NmjQ_BWnU8Y5vQ!*laZ(OUG7Wdp^mWGKFPO9i<_)Ped6o zHA#5L!zpC_D&XFq?lF(O+$mI{Ca7~<)7ovqyRzc7ilO%uRTB=GK(c|37Gd(+nrg+rdBV(3go7%;Z z33IwQx`v*Ul=$7Hp+Hb}&EmB9q=a$FGcZQ-17lvk$2v^l8?oxcdE11eEqgf^gB0@6 zRUhKoW>gj-ac?}1)$S(=K?)_FoQvfU-$jq7kq&7uiL7b;UY}i9@+{`qrcUyMiDX8u zwD_Y941=;fktyqce{f0jOY?9;DX9-15(tSlPJ9#*W8CMH1dB8Eq@h(eco3k^5^#c4 z9OA3)v&WM0?s-B?H_j7qwtOf-@A!sbGfHVL%Uq}HN8 zmPOiiyi)CpFMFs3Ogf%(bIk2f&n8L8iW5TxMvj;;f zgEt%mVFSaoW-Z6FrVvi?NM9nyztcPFSM$&et|=L$F?{+u&mbk8<7Jebjyb)TQf@Xk z6p1!OW*yV|1c^&S$SkEAKQ_T4y|Q7B$3y#?+`eP}l<7oSMo&h9G}%LHAgDPp9M6C@ zCux+6AK-$+;-s}4>jFg1jB(mJFvv$SYH%n9C%j_F*fRtSP*~jAD40+Xu=9w9VD*=)qfxs7ry6||4%Xc@}dKOe{b-wF*%fr=fxMHC;j!8TJmc6 zN0S$zmgt0UmhESQiC$nQ$f1ctY$)lFZ3wh0o&VdA)-ENt;u`COvS=_f_G5#rLp6!D zX>3L9CvkZaC@HCfwMFe+mJMwmGF0F^KHwf|H93mVfOJ<-f6-x0)Gm-i=jKpTj9=~L z6&9EkXH26IQT{;a&P7GD>ZuA<$<6J-B4+jbZxe$7DX0MWjrZ<^Qn;; zRw$V*M`pM<{{{{BD%;S{F!?m%M1x;nS_&(887nVnXpSNk5C^~p{8Cd3NO{f>04SrdFd?PDk^fjEk)@^pGcZWfrvc9q7U z6BF$TxRPwYm9>{OZNr&J#dKSLw(=1wF=~rRnk!?zwL)wxWkO9@6`rhkQb|&(l*Ck=s6kbXk5)6CC|o_ zzlr=aWYmKc4;9D`C9&mHxiQy+OHVV!`RoQlho#U2xnfcAW=1USw@~?HDRt)Jb5V5l zd`fw4yw%|6&PELkkoeC`h|{ymKsGF7(FO9U};Rc+MwB=Dcz^;nyDF0DRXGMSwp$;sC&F#ybFS9=|>dkzX81 zOusyG9N;&PB*M!_6#{NQn($kXrUX4l6aJl}7X$wF1j4^FVFKW_$5a4*@tCQ`e0I#i z_Z(~1A4`n4A3G1P-aGbxvjK0J*veM9GV4l&vr(KT<251t3*d4h7BFt(0rcJDon|s% zr^z)9Om6}l#(RsJ%oL;znr1*jQwVGj^k(BnI^v&fe26(&4t`~zkPlQG2{$-Y2n-%? z0t$h*7_nSU^WEbmEy=Gjm8Qy+VggZR>KHCDvrIYQYT#;31=9JUZ3H1s_HlTa(}_Gt zwg<8)FE8LF;8?Je{*6d!9FLcUb`22h%Ti{On-9oTL(@^=y zYNR(wk=m(8K4krfDN;L5F;l@E29FoggDj1#;73Z*YX#CeRfAMbta9RQ53oO#f$Uk& zDJd5I|D&!UXhJ?pCHOM7Ba4Y`zKqrIb`YEVxm+*t+L8MGsuIOFYhZ0^Ez}BTKyCy6 zk&luuCAJJ4e*#A8+O7@NHPv%O{e{|D5Pn3ppIk#$4OT%q`MeA5#qv`rh20lL68Wa| z0m32D=b#S2B zA8^uos86IiCCzfpQq%?YZ}HwQUQ#L{)_X{~3je6Ko#s??F?z8DXkRX*B#Tj=_MT-X z*9PTJJsf^x2|OPkqD+T;!21)E(&_ z&x!g5%CkP^U14*g)5?>2F!Bc%Qc*hh|4%iT3F}tEJIi5Hsvq)fvLN-4L13)Exk;TRrXg#Jcb!J> z-!UyHhd@+1Y30)YyLqIDu(nd~JjF2+kSiuZW)iL}T)7(8=(l=TXYu=vsh(!zy75Tj zqVX{Cuk#AL`)FB~aok}{7s9ULS*8~uy|ZYv8Od@fMbKxm909!FXuZj*z5!bWdrVf| z2$7j6aer*T1@>EDzXkSNV7~?STVTHh_FG`T1^(Y=0Y{t6Y#nVh$HrSr+h{&a;cyLe zG#sHJ9+%G9A57uz3hV(90l5>cLhidpW4G+^0Tb%fFv>mP? zy_=ch_^djIM{0PKhDU2i>jvUGM#Ez@JWfNWhR16-QNt57r1b`+pRD1D8lI#ftwV@T zYcL8=*626vW;sr;m?b`Wpy+5T)_94AGc+vKuuMaF!0Bk4sqtAFVmBIpjl+F2%zdMl@{JaD|2|HEhw4R^^m#m4=sVh~+N+9Bs5;PT^G=ep|yf4OeS; zwT9PdxJJXZ8eXg6bsXlkae$jsfvZo=vc<60X1ucv0ataglMoJ5yoUH3DfA#Wl+5%l zcJR#fAUj@WdLBDuX8OQB=v&y4Gp7%-gJ-7GHYI z81=6}LkBy&!vr-H`xl!mN@n|${ssFQiwNm3TQs!zc~gZ*`X~KbCVr=E!hkoqetWn< zSmn1$6)#`<{4>kLb71^g@>2c9$qsJO-pzZb_rGAL$IH*v08-COLSOWW6e#hH;rw8A)(=9FH7XQ^Z_HO^;e@OZ* z>%{&Gzni`u+Qth$Q$6%0(b+wWv#oa|$;USYrivbiO4KCNZ`ud_XG%XPL;77xAD4mt zPo>NJ$fV?dxc193{-x5Jm7bG9{yL?9Edza%(hti(|GCl~8R*X_{rC*@x0F6H1AQd- zlTLF$2KrQ`XJ??#*#~`|(lgm-q0%cd$p605t$sM!KVDP%v<&ITYCkh71AV;GW&Rzn z-#+!v9-sK9%!^a$gG&E;2Kgtbe3C+c$@))LdM5i$QM$~-u>3IM4srMsePQH^zj+=D^vR94D_Y@ zpm!>LLWcA|QTicCbj$vIYX5H}(XH}5rRmk3QtZ1^=~I)^Tk;G1VxO`kx+Q;)rq^L9 zMgC_>Pi}vf{AX0YtP|q(XVLuu$v=~S52<`vU&Yf~`ki^Yq@R_fza{@Am2b^ElH12s zn*Nle^p^bll`iX~)cgmPo=N}QGeo~k`qwEvvHnbK{92;)WdFCy=M1K|pG9v|`e_-; z_idG*ss6VsJwHSGe=0pw|5~c^faLzu((iTE?~Ek*7QJk_lrP!;E&2mWpPrQ7s=pS^ zpQr8MNv{9*l%A=63#Li_nfm7wLqadfkbkYFKOh7BGNq5mK=&xUF^O)K|9;KCI0JoZ zSoF(OzL!+~=%n2SiXG;Fo3^ciZ zZ%}%&|5)jJ_L2UheWaiK&GhBB>Ze!jpQ-)VYI>uKLR8LWP9md%sVTFc08b&oNcv|S|G&IjhyjsI94F@zVepcv> z8gA2Y@JE6#xL?8+4Yz4HsA0j6m9F774F@$WctGhIZqsm3!^WQy-N{xg#{GJRu>Y&` zUtLC~;3*aTCG!gw-{rbh@@;2?v(4h~WxU0;KiqGD{TA47f&CWPZ-M<5*l&UT7Fdgk zQZCFum;G;-hh|VgJ8G}66I4nu_$1vO=C-pWJb4L)d3?T>=GL@-N0@sT3;nF=6c*## z-1H4{p(BX>i5?D9J(c*JF?>ZA#U18t))UXaI9_a41DmcqQReH6rQa9O1_siVF8iOz zahQT!%D>G{N(*PQZ&m}P52j6%4(SAv=f=7&s8Rdg&GvQ1>^n;7E7-0M^90k2V|21J zm5Joh-=VCB!-zf(GyWvf%Sj~u>;68)7fHl+Ukx~&oeyJqoi@(BgKZ#_K6KgtM2^EW zoGL)HothrP3`xvYdRWsZ(+iY-cLKedl5={io~`{xCg5h-!+E@v$HF`Am2yaX z5;;U$jVoO}7ph&yJ1N~FTzmg>f=ryns`rQLpS@h}YW8hv|82O)7p!$UK>oAx>zqPT zoPxx?adZ0oGx@_ss`ub=>C?poE8s*p99OmKy+!q&?G-)fc?aoTq4cYiz95OdQ0dPo zeQ^?fk$MGmTEby@&t25AEClRKS*D`)nG_hpG_>U(@MV2unink zPjuP;L=O66_KP+O0BXS(3@4wXNvHv4|M2^Gse98LC)XraIeK1b5oJDq%riGor(%x^Qw!_=BomMTS zdW!e^L8aF#y)KE~qV#jLU-u``+mwEaw(}d4=HEK8`kOetqix-U|4jc*O+WA-rvHwn?>pu{%b$<`;9OqxKTLnK<{$iu`u|1i z{}xTZjnkvuu^)W-`rDxCcYVeDt@^)J(-;4T{&$Qsvw@PvvPk$1I6o!14IH%!#!2KPe~lJ%#w4F;d%4B>fm(cQ{N`<5qp&&YX_6 zZmutf$z{LUx4(^1eUGRX`N6poj?j3W#-Exg_}A+t{Ep(+Xjq};TczvIn)8M4kSYm3 z&~S;SUwV$!?7yoMGYUhfYRYt)kHeko-)p=}>+O~KLO)6EdB5V{ zRQzxqSNkf2&#iLqRXJB`{EBmh9pD;9s};XZ@sBG0an0v;r4Oh* zDmAQE{E6Crwx~URt9n+cy?)8|c9`?Dp8lkA-`0HQs-KNhzFSrQ@2LLk)gB=Y|ETnS zrC+OZ%d~xaRersO-&cQLtN8`BoDV78ukv256MKB5;cg92SGhCP4>xE#=~TG^)%)j) ze@O9b6o09PkE*^GDc@Ndu2TLpH7r&BDH@K|^0lg6Yqh@5SAXtPIoVntS7`aRYrTI@ z!>=j+IOU(M`R&l~PR;LJt;aEo#2#O0{cNp~_$&=KYrD8l`_Wq!KVIvpME&tI&HrZ_ zKUK>!UGdAbUOvq8Rymg{-yb!Z-&Xu+Z9gYyzj3nacc=RA zohs)-#hYy{HxU;JX)XkYx_P^%XgLXpP}If&8JNH4^Vw7HQuiI zpQ8PzPwRQ1(toY?@~EGFq)Kl>c&#|4#G0N$oyT z%lE9>;VhMNi|X--=2NBmj8^}7Oy$0y<^8j!|BKq;CG8*I)%1GeQJkWRlZa8 zD{zbbpH#npMD3`w_Br(er;mf{~!eXh~?bz0sFHM~>t%QW3~m4BGl>vHAm*05L0^_0e2G+w20 zCN7q8d|T}@U+p$Q<-M%(FH<`fYkfYh`44LNy!LlTYduCU5xLtntkwLD`p1tIfA&Sf zcdv%GXn3^xM~}vbYdwGSV&M-d{w|f%HC^x*E|l=G3ng5t@%Odd<1Q6^t;(rTy>3!D zxhl6%^B>fFy;}a?so%Yz_IpSD^&FM^fY$pV+Wy>%e^c@QQu$j8MUNv?&n%U9x%RJ* zY5u1v-^FUT<5cd;>L=gQ{`PBDKcV3}%HO8p77cf6J3U|HKh=DfX#M|4>+w1b4^e+O zR_(P|!`oG_m0G^*wR~?X{omSeTzQ$4bBx;eBh6=o@_$?TFIKyra<=flsB&LZ{Z=b| zxB6v{`r%~N?`);-(DIk7{32~<-`DsJ>JR5B{w1~l!`hzzq52-aSoF9|?QoIy&lOsZ zi0127I~=8YKB)Td(ERSw{9af8o1*3Vxwfn8H2;@XpD`Cnz9(w>QcZt~RSxAJuJV4X z<^7}P+oJu@Z5noIx<6~WJJpZdG_=+&|I+@+TG!;MpIPgk%{uN~sOA4q^;)j>8Ma9D z{=8no9cM{cuJ)Ox{lpz=x4$X=v+2V3iTc4KI&M$Vd}`ER?^OC4O<$yZ_h@*I^0~A< zoUHooQ9tZbe82kNN|irH{iaRrev+1>M8l0*Ur(!lG^(9X(D*bBH>ls_YrW;FT`p95 zNW-U<@9!EvSNQ^(-&PH?ly9BJ-_$T)@vmw612p}yC1S^1Ezfmo@7pv!=3Jp4p?)!0 z>*+kT-)O~usP>wn{@<$hD$w}fibc+l#w#`5Gz~XuJGn&pMr-)A*2fy1k3FyT@u}9^ zV_Lsi>X&!udiPEZt@C`FH2yseGoA0V_P3JH`Q4@I?$)qN!!LXOPj)&SZPq!!?`!&d zG`v^CzNf@an>GFe4S%TNeHwOaXzj=RNaOcwXzeq~exajH_Wc}f*8Z8b4`uC#S^HYn z{*tv%WbN1dSmi#Tp>>YY+F!8jX`PF-$|-!oEZRe*KZgXd=LX4fr_!frNY75_&pM}> z%x}e=%q7oS2+Wk&9@^1Uz_qdo)-RxGVtxX zSLl|04`<-(Re6h4-qs9!otqQo{UQUOQ~9>2yhk$db^jny-nI;UyOQ#KGy~s&%G;&+ zK9+&6;D?F%{!a$JHs#BGM))7kz}K53?}-e2j{8JTi^_X41K&dBv+C`s418V6*Q@e+ zGVn!{r!cGRQt`u8Ev`O_~auiz)d zS1b>|0QK=96M7%<&=3{Lxt-|y|Mpv8zXkSNV7~?STVTHh_FG`T1@>EDzXkrkVgV-# z62aAm10v5Nw9oj5BTj#GuCjn3x$*CO9XKi77U!m=gSF4W@1Y=iSDc=$yDV8?%)&-V z7Jf{hwHVipINOc|=&-kNP0BLEu=h6XYFt=*3>!Vn467byvNz%SJFeN;CVMlkUAU$W zH`&#=t{84|x^WHQnwn#B%5XK{`XR1iBTUZ35oY9cTn)IoaJ`1>@R4TZ3|v=_G^1X^ z^*OF-qs%Bju8p{QaQzdP^8hod4A&Z5FX7sQYy5#`R3Wa5aJAt2?t$ijZMfdXb@)N% zz&W`5xHjSH#kB|5iKESd4Y;ntwFTE(xQ-oT4xE8&5w113HsjibYxKe9z>{$;#1+AH z2d-yuy@%_-vF5-+Tnlh@;(7qr4qTt$n(lxcT-$K%#`U?w95m+;bI>YW-MD^->l0j~ z4mAf&!c~FGk82ICZd`BT8pJi?Yv!O6ah2f;;kpIac3gXK6&_{|3gWsE*Il@_;Cd3* zOSoRg^&ze=a2+_#9CQ?}({RniwE)-Bac1-?T%EW!<9ZF(u*1#hX}B)Jb=Bc!O!wi? z1Ms0on5+dyn9=tjeEkTMJ!!njUWDs$T*Hnu*~PeS#MO^0_b8L?KFW-~|0px;m7~lE z=h0@^B}bdAZd|`R+Ke7P!DQu40B(XAy$&9cu0WTe6hL1Sb3_s&o zGi))g8;^w@k2Ry;27K~yus5zNjx*U0;u^$tCeB`6i|ct@2On>;FT(XOuEQt7CnuT_ z-^KL;t}k$%cY+ylBd%Ut|HM@`$&9!bSMMZa@Wrgzfh82w;2Y@m__iT^ezPV*A6;ZD zLxd~!xx(Q@l$C_A^Zjm5$k&Qw<@B|2e9@4wGx33Xd~hw~UECb;(ARDS8S*R%1)A|q z@qjN7N})^coF{+q(A4QSjLxer2O=2qggyR1*ZmvBX%~ zWQKA#zIE#6&vIqtiG80tBZu`NdX*FVjF@~Ejy~TwquJ|=RN@=(ZhS<2iO-{7G_8xV z>L;ViyzUzMG^c*|a!w%PZSdA>A=5IWfX#kC48C{Xcy%O8L2~-4B{L+;h!vebJ#L_G z;y1`E$`_QTVyS{mU1^p5LtUjIk1IkSxnvv3m(7xSW_cn>)LJN3g^%|UC&B#9NDINL zq7eYtd2{6nh3FHSvg)(mK6BgRz)lEs&WTq|u-Vz}8} zKR!1+E97!}(SSt?6Y<4ipR`sI%&1hU__QPOu~z&wRO&oPh$T?8jFCzMO+kDN(2tM3 z+L&x|Sw+-Q1%I%Qm@EuhYosxTNKP`(6LER{MCLCQs;h8URldC0<*N;7SxRa{E`PWI zAGZ8PS*07Acq8Z)OYLZKY5sC5d0q)hvI0E#FrRmorz9Li2S!CUb#rH&S6WwIQF~!^ zc^!FaT^&9TTVIDN4hQg=WTdHEk!R}asgJI!=N4D#$LDJC(QFI5#1r8zyvh@43_yhN z0&6i^geGRF^R(3S_fjjHf<8}^)#1XHoU_Y^FWy>kGlmWE*XlsPR~-muAT)L~!1Rj5LlPAQzCw&nx z;tim_IA;{NBpeRZd(kPm=Pq8#V+2#Yes9ECslz~xaB;x9zHa;aReE5F0)PXJT4WIAzyXQ9OSj+N=&yO$V##5oEfn&SFwSo8m z%&b}o%8IPmO_fBElDOFum~8me>JT|L7I!KSJ}#fZs`##R$b%6*K=TP!g)ufmH~Yh` z1`mqtZOWKQ-3c+l9=?b^{(WYW?lmT3^D1U}h8@CM&Z{Xs@ z_%zdcYW&bX1<$=hDjro>=UIVvUWaDy#uO?&ixwj$mEz#^xiA8nx`rSoj*$icFd{r1 ztM(4fX3? zA?mLXFQJ~$1url2G`O055V=eT5*>qE?cdY3JLfE4V6n?*c_&H(ucbaaQp1yO?ga4p zWKYP$j=%*gon2B>Q%B{pm@6?{F7brsG&e1#I?KStA4E-|+Gl;GsQMHEu_>c|iaAky z61B`5t`Ds6gj#hFlNn_u zVSCStKR%t71?~k!lcdhC#84k>^wx)Y$}tZk3aUA|`bw*+unY+Jt6Y8;syIakr%hhi zBynM3r;E7+OV6pv;4tYOMTh4E5xOW#$uHiTQb=eK^_V7C`WrC0P7s#(<=zxx>?6J@ zl-b<3rN9fX%c=u@H`1kkTJiKmc2==b86=5 zWFvt$R_=^en_oHGwU|0`89hBsK}`1QUGD|PS4Azo}0lr6B ziEY;rrf&!v&ZA1qxP%g(F_X42A~CD~I4i}3KhK(nB@bpKt>%%en#Se`2I4X-sFpzS z3ouU5;^K)cS&TH8XS0TzZZ^^`lqHRkemcyu(!;}sn~khtCkhOh%{0Jf8YFGiOz#g% zw9`jOw}lPWpKPc%hN-3gGHj;#beP!cJK5=tbzAmuGsvp;vb8$dPW^oER%<<`0@Yhy z9me+hUUtl2uV$wh><#3n2K!5P27|qyZ5iyNY%|Pi*EQZI?7*4lvg{74$WODg&6X+n zJ#0?^xBd%p>x$sE1rG_VQs0_`SweLn?B%iJ&K#2+cOp=925>`;7|G82ogA6*bma^; zowp7{ZEWFt=RJ5HkzE3A=LH)Yh{55AbR-ZBweVj8FQ({mn8|Hbi1_)!_YCg*` z!^o{3&7q2`2{ebWR2a(1HUlS+;MeeU!gPkAHccpfzM7TZRjYiSuz6ubn9M7h{CWiV zPX%Wm6}oRZZUZ=Ink`$DmHzpd^L{=e&cAx3PRr(pvFk{9-ORjpBvPJ;SLed?ca}2tojr2@wLmhy)b{O+pe#N=RbDQ`#Dv zRg<0N`+;a4EPj3J*8SbnyE5HT5xJe zUiS=LqMjL6RJF-b_8$&grv76Xrr9Nfs!A9AKMuRLym5oN&z8{gb*kf(6;JQ&3O3_gDWlMAY|SW>d|^it>%6wV2RJjI3a&HKX0v z>I>pv(hmIBIy5&oHyF&#ZHQz9gV+;}e}cg*{V$$omE|@RH~Wf%#leQ+V3b0$@Hiet zM?`db6rz9d2Z+Cr{#OU+1Pt}Rt-f|&s5v7ym<3{Zf-5VRc*+e%z*Dd+6f7g25KR9$ z{&HJ0z_YK}*PIb*$kmA*p}}CgFBe6O49RUEUO_}hbE4WqgO2JuEIQ(|OWrDvbxLNSig1ZD0pG5z- z;P4a zHwfM;7`=r4dqi-D;7-9&!G9Et4~y%+$tWk4Crj`W!MTFB2rd@Fh7q8&K3NU;9|kQ72F_r2;@llH4DB#a71vi;10npf{zQ{ zEja5!&c9P|uHbhC7YjZUa-{rP1y2>+A-Gs@RPbj7>%+v5#XiA7c|qoN!6CszAs3=w zCU~~sX2EL(w+h}RxLxq8g1ZF&PVjNTqfu_6pCvEqgaqdbt`*!M_$z{21^>I?cENuZ z+$H#2l$+=u7krK2EI2Uqw?%NS;70_P34T_vd>~T&o8X9q_X_S1JPzg3`3YVuI4B4D zeL`?Z@B@O&1ivJ>Sun|o=tTsNML7s}2%aZ6D!5#*x|qxNPlAJjef!6Cuh1(ykaL~yfUDi_gf7u+kjOYoVONPdC~1gn{xUzOkv z!T%&UD)>b!zI@Q+_kwc;UjR8#{>6f?7kpfBv*7kT&hHt)U4nlpICnOO4}n~WUW4F; zf?EZDTJUkf&k4?w4@!_+DSfWsNhmkrGQrmfZWa7#!4bhEM~dGr__u<)1W$roC_F0o z7Qt!`^MAkKEWw?Ea|LHWE|k7l@M6IYg6|gGD)?o=?Sh9vZj`=DaK7N zzDIDE;2#J+E;xX4QTnXQnch``a|Le^Tr9XvaD(7C1h)#FiE_YzbH6sG4mT0oGW+; z5MDP=WI|O$K4lZH(-BxeL!7@_#_>1sm+4<`?)y3+e&{8$3HBXzmKcbhgSOQID8WHSj$)N zT*3T3T&30uZdlIow+n79X8eTUvYQwm1D@n-R{XtOOd_Ej5a#caDs>*P&TkdRUm!Si zGviN6eExo}QjZAc@8~M^J&E6b3&;Pp;Nz z1<-RUPeUDtUoE&p@D9QJJzmI1aPjRN|GzD~Md%BT2%d;`LG)X75|eQeo%1kos8cX+;I=%OVExq{hf@ffwjEvW&C-;QNd43{M^rT_^W~=g5MR~ z^+gVk3FhzlLcf-Ae$iGApDCEX=d09>g8BQsN^KR~`~b&)NpQn1#sRcL;y?Ev7#9dG z`$xtP2yT6l@hgJ69%B5V;H-xkuSPr8_4yUX4+-x0D&rprE`F5p2ZGxL2hpx6{qe^* z{4&9j2;*A8xw{$f7u>Li@h>gBmvP`)rq}#9>Q@~98o@!qcM1*(eoAne;I{;K2tHwj|Ay&Zg?@|V*C6;|!79q(CoJ5} zxNH^IN3P&Ifhm2f;O`3V5d4bZ;-j4YFM|2|+e#Ip-=p*$68?F?#cy!@V-|js@fEjl z{AR(_FH-t;!A}b2?|0+7AA*Cw<@80XCH{XiZnJO?<5SmgcvSFW!CAc=-Yl5E|E<)k zf}16L;;lko@CL!5w>kZfE&LAS8Mkr#2EktztlpLQf;--49JRv#hw&c;^Y_G+ItTqa z$s_Uy4$l{y8)JNf;8wvA!Nq^#@PDzw|H4?6F}>oGjAsizF8FrA%?g>~@0)^)eT;u2 zxLNS%a*>bV`GTW@s|06daQZI`&K2A#xJ>YSf+K=w!7rim9~b;-!4W?m;_u%CcL*L? z!SSPl*9cZaIQ~BfjtG8IaPgT!PcVO{9T`+IJ^n7cQWp~*g7MJV9DlQ5K95|frv&qP z!%F>LFrS;P)XXYQzjGp|ZxqbuVk`BGU_R$ssSgD6x#8%y*KvA22OR#gU_RGdsecg+ zr$o!APcWZ*t<<#joSx5NSE^PppKFbFCz#JoR_cEQ^LgD$O|Rzk{GAh}ZV}AixxjZk z1oQVglsX`o&&S7k@Phd}3F!A~m>z$}L8*Cy`CNXb)(PhCh$!_Bg86$burq@BdooJB zEttQX1Kaiqp`Xq2SSpym@1fLZ1oL+ilzLJyf2RQJO@jHnd(0PZV0wHWwNjS}=I;hU zT?h|XYUc*dZ>!*l;Clrh7W`G};Z3%A`{1d_Lg5Q$(U4p08aenF^rhl{GT)~e5Q+~yQzbm*w@auwG1-~!2UGVUF zrr#y_GGL;oc5;5JBs?hivl3n`I3l<~@V^Ld75sBa-!6DW1JmykoFn+S;41|83BE<} z_T1FKT_DUa3g&aNF#Z?J=T|B9 z3&H$79;L=MF+Dy9OQ|Bkd_I*@8wK-sYLxmX!FI;JT{D1U+g85u3^aq0Zd%%$Ic3fv!-;V>of|WjhPN@pP0m1hQ&Jz63g2xL! zDmW;3ZrQlY z*gF4f4dHWeo}q--2+kG!DZ#S^hXv;gepYZu@T-EC3Vus)vEUPeR|%f{Y0ke)aDm`z z!4-lV1m7w6cEP&@Hwu1Q@HW9m1UCzQU+_-BqwnPWTLoVt_#wed1xEze2yPSnMZxWY zpAdXNaEIUy!BN471^b&h|1QCk1^-;|6@sIJuMylM_*TKk1+N#}C-`>3>SflCy95UW ze^GFj;70_H7yOjqpy0!Tvjukx&K3Nw;C#V<790{h{4Orz zdpbD&y@ERgw+ZHRRh9aoVC-GQol?IO%;&8tbs8QMeLlBVDLN*Za76gINictx9{z=3 zKBpD_fM7na75FAlHVT) zql`FSL;szMu`S__xr{Fo9KD!vk>KEb#*#^GEz*iXfIs@No;7=I% zQ;eZi{I}b{hYb9Rfq!M-69&Era}y{JYJvY28hDL?w;T9D1Ao)NuQG-eTI9bqjA14DZz<)OIM9h6a9yY!CjKMYk6&tvY zv0cBrjPQL1e#wac8v}n}#LqfI^JC{fi?N;G3IlI8@D~_EEBSA)5q`+PuN(Ls#*a@OA^=&)6>Ce#SPx-(_s;chtZc=tsei9e$C4uQu=}4g45myS`sG z@KFQ%(N7^iJ3jSWPP~}0%|G?CPI>Jx@K+4nVPG5`=1LzxKMs0m#r!wPz?T~MS_4-a zcoSn={{Lv;{RZwd(*M{9|1Sf-XT(3r*p|$>ls|n;`%nO@8J4pT+iV;i0iw!p2zhsxM&>veO!ldb>Mmd z*NeD1alM4=Wn71G{Rr2;;(7(wk8$AzO*I17>9|JX8jEW@uCs6jaZSN>F0QG#&ck&+ zt_yHoh$|ac4z7!EO~Z9Du1j!D$29|2F0PrlX5pHLYd)?8xM&Q0Ij$>kEyNYVRe);| zu0mW_;#!Pr39cesOK~m3bu}&=3#zWgbsetdxQcOIk835a8*tr->n2>QaNUgS7F?@w zt-(cO_1kcj;<996$>CMV;s>~Xh>PSya>47Ldi;MXeow>oRXl$b*JHRMxOU^(gKICY z$8jaAk2y#?7gw@+$w%17(S-xZoAlucT%=!lp!a9|PQb6T{z&$NmHAajlS=L@5MF{S zmHaLJ%0fI-$IiyHiMYu2-qOBIwt>%@aG^Z`D&2IUFDv1$jL?X|Vekf@IO0M{Xpt z;C&Q<7cKi8aj(FHx5m99*~bug1tvL|z$@xaINT0LJ$alnlDdWyPcbkK9Z8JfQPYW$ zJZsxKnybdWqqu54NffV|_m1kUeeW2lG$1jBp#_N%l4wF=L_-@ABc#-b#OStGuoAdW z8Ytz5?wW$6twX5d!CXTKvX5YJq}4}3SaldrqaS-EiJv#&KC;3h84r&iVUZZ-aioPr zavz-_5A_k1j$@k1%%haNMV|G%D(>^uN=;B#R;PdWVifxgzMzwsj=?c;m@W(WHI zzjUy*>s)9)8W|^M{$F)=^+!A(KHUTB^@+^x6YKSvn(jyOGjzQVv3DKUXP^2OKlRD* z$n6+bpX!~SLkD+are(cTQIrnMJBsBRc!xUuD$A?3OQQo*r%&Z|CD8ldI^Z+qnTM$l zfq=6cd79*CR`1hR(>`i6y~Aa_k8hQy0~{)ApGm4!PR^w_4qJ8x(b3NuJI6S- zZAq}Dp0Ql^G(`-TmGq3~G<2R3Qdu&00#EbejFS93Pa~GwIJg73=&s{5-4P5U;SNk< zD4dbvhtvMQ@}(8`(eLRW2=6{~JKclg2RfR2kOzy~=g!BE6Hj`=xOq4|j=)d+?t}A$ z`oF=M^&Te=yNEAyKB7#Wgvmk^0Ucv3y&a5ryKFoB10!X;DoQSs$bwT&I7otZJ%gtkGZ7Fi3K&E%?e=J-&R?P~V7C zifvx?$Ge(5Q*5lNtSP5?z~rGNo7X0dP+ha0&*|Pw=P{RT!pD;IsmWL3t0Z+)vEI2h zSu9>#zD;|B1H`XsT8fNt^sD}Q4J2cuS^xA1S6K3+L}A~ zV?{VC*{17Is`%t>P|Fy6-%?+{aS6U*P~YfDT}O+@xuKz{qP(_hWp!g!Q+0it;4r~QZs>;wX9^hCx08uw^(`zQ&rDrzL~9nv|~9A55yL+ft8X!YzA7;XIfKqI~)c zb9XKhxVf$dCyg(=(lc-)bhI`}7<~!{x?ELB-+J^;U0$~tAE=|xNEnJMc~_S=*&iP? zT7bk5)oQW_kTRKsFTKDZd#9D zUo?AU$MiC?1?Uv&^N$KRXrKWKcl5(y|lX@#|1x?rCa~b%s z6Q}o%Mm?1y6HoD=QLe0Stf)>FxC9>_^bV}ygto9eDOi!TQhUZgH&;)=kyd;InA8^Yx(JJIOlgGgC3AJ5`F{oxY~YjxYdoIw$?r z$>r;478Vu{zNPggO8tFQ4_l8S=?sj7DVZ_i+I)G+zox06@)Mh(Z1^k$$s$Rll8yEC zo2uy}e>&FUI%;j+MiVT1$4X# zmG~X0l*#frQt6X3j-8`7uU3{ug(s7QMcIh%O}nNkNpzbh&ukp(WTp3vXR*#>uthcH z-iim?Zjl)%X56D2Af}ad%04o|!L&LL54Y3`@^DKfh^`nbNb;VJxY$N!_7rp@HbqD_0C)VssB2kLJxB z84G+%3LoRHt=-Oi^4Kn((34Ry8v`Wu&as#>EXJncr8oVO;>>M)S747-fV8~$ALA-wRCVZ~aEf7a=4Smd#My7@ZGNU9VpcU5n zsmi1=VN<>OO-D{pJc*LLJTS2y&X$8n`R2-+`a*mPwyvr+d7+X_-#F+r>2FhUJtr-b zGg9IhEeSPCIg(PXZ>+(Gq|tKg@X2O9&6hN4r5+yY%@axE$c&ETYp%9cOPWSkt0P6y zh^RAdj2v-ORi2K!qMpBOT~N2aHmO(Z5T0hnm1sbAT(Jjah_?ljxUI>bq#1}XIfdy1 zI(W9^Vns~OgUhrz&9u!`Qf5+FYCCoEob9skG_KXrrY{6zyghJ2U6ZMY^$ru;zXatQGW0T%bF@_a!wu7BI#%7 zRlI?Wc9k~j>{z&RO3@>`%g8wlL?L-mG0%lbyT)>iEAbKUrkaXt%W<;}AELxe6F%yk zMw?DaU?2&gn$k(1ssLIsmef>Xhq7~^pH$bamQg};;{|nH>C&WodVLK z?zxHFw)h&1AsO$a4b}CV>f>qL1@=zTSiUvoYL9m+n4K*(Ra*y_RTaL*UWpmumDTtz zdmSbg2bY`{(Bg|6O=yXmu&K>^P0O2Wly&jPglWx!tyuNICR)r65{bfk^bUh37GE}W8QwuLvcurSL6eU?v~%NnBPUZ#`2QoJ5* z^}xfn?RtH+rnc&a71yLiz_vLns$d73ED^Xz*P47v>(4Q?D5$T}YxMI!(NMKs*3##1 z)Sn8jsx(YLr&|YxiE)z$=Tvv9nAE!zVtTrMBbFu`2ayFOM5eXn6;)LG*H&#RuLK|S z8{^LsjI3q^ohasgQpc;=R#m%bGgh%1o$>5uo?aK zQ$Q@BCi*TnW=@kv*o0=(v?*bUl2g+PCHo~_Iit~OPb*bvQcs_7F6GwhCNlHZ*+RI? z6&_~INdHk1d+umpx`sb$HEHWL=3oP@mc|8RKX0tBt@U`ky?m?3(?*#o;Sr5Tgxfb` zp}DaRy|zc-M%wVwP`iE6_GNV#2{lzMUuUu5Xru|RYX-|JDynKRpd#1AL6)D^qs3J< zl2r?OXot0-J7{rE3*m7ZcCbfMbGvtNWBK~JDs*9bTok8~5YK}aPuuav^B{asEG9cw zU|qrM8_Ty~S5!O$SLo)Zsz#BJArDtH@8Y_mBq@$7PBlKBj=nYtFOGuR)6VX9YTfhA zW+bx$Q^vNcDrF?IE>cEzmed{5n(?;YLk~9TH-+`=`mEW>Lftg1258f$!EVX8AnnKH zm6bAij@>|2>uH|`jNoRPc!#`Z=Oxfdp1{ojQdiVBY%i^@s%@xhl(4G&(!5zsvvZq> zxZYG*pF9Tdh$^VKeREA?RbhEWH5{l#ACIf)dHF;jIb&M~WNfRw3(J;aW7Wp`Ema~$ zEw{Xx3378sa?2_qGK7q&E*h?0Q@&lhIQ51JiKlnL-Q$$iPbgL` z@X1PNB?_aiYOBMCA~(6D+OY@I)*8=va5yWfmcUu4c63R0l8Vh37}srbkoRcO5~-xF zya8K8H(gb{xTs*0<)3q_o|_<_)QQ}pN=Teo5=tV{QfDuDtg++REibp!TwHqlc;&GL5N4R9Q*NdUq%u!CTiI2FzD)J`h>!Y*> zc0OL}zz}{u`9I6**469Q`EiMn=spS!WIk=Ry=#{J2(u8FGAM_?%Yk}YRxgdxxM04$ z+Ur~}PlFp2V$EY8;kR_a*Ml4-1OY#l<7d!dVS1GDp+E}fIc z6oJGeCyLsHsf}A3u^Dz{J(fu3<853_-Zk0%yf~rP)Yorlx~2x(5B0?LmDn~=T)wGV zyJaaTE3Er7?jvwgc+PN}iTM`e+UrV$nThKb`rQLoe}+)Iq06%RWUa-RAMR-Mp#-} z35}*{+}=oI(n~QbG(h>1lXTmxk4|W1{q=gHb1RzS((<}WG(BpHuzMeaJ5Qo+j{oL4 z3}j!|4y;{RV{I6qKI=8vlR zZ$Vg3ISweg`Ua=u(y4H?Pp8duRTgHv2Fx)@dbdzMG96EW>&pA+ym``e^GlWZx6B~j z%Ji(6^n~f`kv>YLdZl*@=_B)TLlcH?I4&EnKVsEgPvPpZMmoCY!Io!z4n{}PrRgsI zAavv-WsshZp!s=F_mc1?&wekBN~~}2$bowJtu=StQCp?YUx|KC(rbO&-5;u zJhmoijf0>Kfl4U00pcY#@{xrah6FrcBoX*@J3G*trS?9Z8;hu$vHOzV-`|8y2P^A0 zS5#y9ziMLxHfG^%H9BpuNx#S%cgSVGnJheUcCe)~X~p!cLH13JSk|g)3|4NhE8mEX zX0F_>tf?%i#ylVf+)X^ImXZcyHPqKt;+1RbR8!q9Ql?o~--un5v|P@wJklT*<9|9> zWZ=Zu#DHqkD=>7T!=TdE^XoZyx1DDj$X`s!DP}3KCz@XAvC|C9VM7fz3^`7kNLI;s zM?l9Mm?GYVm-=6zqW!vP+vl zxwS#ao;<-@=`x?8rzt)PE!ne3yYY#d443sFVKBT|uO_e^`AEexUmH#2h6dtkiJEtV zR~DezmTT9awf3g++6`PwD;uk-ER(}etVLB#pO?FBFM?x=&n7Y`0YQI11(Tq!x&{r2?0 zakX*|9BqZyn?b3QSvx!8u@agHv+SB#ph>KOQ`pDqS~e^RX{U!eAk}1|OG2BXGySwE zvk6Nts_P)Zw2~Orn1ba2YBEVmnm$OYYMevUv=XGPCf=^tfYPzPwo_DCSX#BM0{hiV z^ zFSR#xmR8N0SGpx{76jxw*LhC-x%t=6oO9cvS+gDTanQJQj!k2$mxvuvXU~(U1I5ct z5zi>{oO!8B=9QH}BLC7j2_tBpqyC%)i8J`|geLp5yqI)kN4h&Zw{*+QIl6L^bapf( z!DkZA&3Dw3QJk46bake)tY*4-bCZcE{@lUv%-q?wQpjSUR}qa|W?h;@+Hoyi+msHS zIms(@R*Kd$Yp%C0k@#oLw#Dz>@Rds3d2`VmxyR&z#SJU9ixHQZA%QtF^^QN!wms)k zvKPkT{VSH+?ulhJ?LmUwFWgwLVp+kWYZjLXF9|V=S1d0sy=Ga-O793fT1lQ2MgRo~ zaj37=(=PPFgnrM?;(icOlT+5C3yb1;rAf=G*>FYn&fXOzX|`_X!IP3ZN>WPX9`YNq zX%-?efoJxK(UP)|u3KTM4~aBoT2IDOrbxR={yjHCn3gV^!Yn02t@4q}qQohIEm1v?eXYT)@G zJ3)H0H+FR0s*N-r6*BO&L=wL$RV@!RPvWWEX%CA`RUas!*^j4=pU_ZJM|bGKK*L*$AQ@2jVmuCqQ=lr%7!&s+~&d^tcN8Ewywd3tGsoa&NP!n)Z_ zFRfTFF0D5s5{ph4;Eph5G^}Fj_xh9ZD%2W{SFydKTULL1DXIwd`Q%O;I)fMMY^4jCoRohkRdRA{*tg@q9hYWHAD`P$; z3m*-!<4GT=*Uhyd&>KT_Dl1?20sYhMPX_a=#||r0kA-h4GVF;fdnQDW?Y_+lpT4dU z!*FZV=N*MU*_1klWX$<+*A}-?x-23@%0T-Eo)4KjN7?P@=#7(etO+_}m<%UGV1AwQ zwfyAi<(q72xL@s_?vcp!hNsg;gqn?5t(3G05fX`5KCqeAex8`bbac(63E_z(Sk%1P z!A$N7`_DDPFIqCbj;W@}^Ci z2)$n&M|R}Iw{NFc)D&*orb<0REEcOb>i1N^g{D|iRaI9~bvtoVy>TTDa;T-30##|s zH&3TmP$sFPaDLt|iB7MrU%y;8Lx+&~0V_uQO+n7e>nX>#><+&Zp>?>)*=)peaC7qt zk@q=tnkIhJaNrI9%vJi)Ss22rUT4v}G@Xo+CMP_EjwU>FDqcKry@<$q6`8hWSj{X= zQ?6CbN|R#E+*u{5qH&>_FV6*aHWupde}9+2-zD&O3H)6Ge{Bi;jk^7$xoizST@K8LVYlMW9mg-M=+wn|#t2jF~ zF@xz5&ah+SW{7HbLi*t9=Cw`sBa_~yQB3C{@J@e(o%8}i4`tVXrTp z$8dbYR6hGJfj@dty|jMaI&7K*nLEIDua49ZauGVi30L z+D;X}DJ@-JQQ_G2V9M{f&}$I+5jN`}PL1jV$1SF)-?C3Kp`)j8D#AkANyfehy}GS6 zb(N(xI70(ZP5!R@ET`@hrU<9vkL=2LC}?Tvl?5vcN(+}`TcOU(vL_*plrk{sG+mjv zNYx>?`gkoQrx&t>4|>jaK{jtKF6)nuU2)f|o4?RYQcj^q*h$Z#WBr2OI%h?g<<0*Q z(<_s9MmRM+{gGPT&d3m$^d9;d(`yh02pjaoLU07D-Ij0CW+kCM080XJ=rvW< z;vj$BpHaK8(kj(bC}*XRzF49Ne?-D(QDd_H#xlM z{d^MB3ku7G)1X(grMyw6F!}2fdaHyUVW|;$;{Fl&k;-|}E1t}$%fzk_Hu!T9#36hZ zDNlOsQ{CkyoSNR+rnonisDE8T?;)uV%G62E@mTXidQ5Gy6#GlAyL$1J%h-4evj_UK33Sj?edF}X?Rbp%^fz0nX00g5 zCpuQCJi*Z$GSn(4C2>Qvt8dLv!yx;H-5DzDVWm#RvtnHIcNz*xS3d5q#P5sxsrNsJ zznY=m@(4N`&nTa7z53vao5nAE`zsedar5?r|9$B!JPYFDZWxaD&{4XaTDC*)A94}G zoQh7}#421wi+ES+DTwG|-wgg@@QiEd)a}OYGxSW&*80W`O*59@)LbYF-p0ZtHGC<0 z>UgM$D56W{wdhv)=1(Dsr=WYova4%0IY?^E)F3b1xcMY*Q_?HA(UVi>V=ubYgQuiR zZ=>l6R|l{5vt<1GPWdMkVL-b2RULz_ewK{x5VZ@cH85TM_MAyrKV-@Y@*RrSfi{$) zzNpN4_1_??pC#khKeQaG85)Rg5#FJzuBm7;NL!CR>h074`NheHjhpTut{qh4594yk z$E~HeO1%LDIc#ofBv51oGD4}Wv=|F{r%%W^6}Jc zDq1`MMDa)To$Zi#8bDvPZZBKz5RyD0dKcg#`;osoL*=3g<_IQxM}OxCZeHM50T~PE zfRFjl$rg2_e}`{hf1wJO6sTR%Q&emoetZ2Y+~ZgKvwbSofvE-+Juf^`sa?0@x@fZ6 z_2YBYu4biZm^kL&a8JMQUaEHKxMk;u(b_>P6k7mV{W}WwA)j!Ezx4H!Ek5Ko6#4nW z-Jl?>49+Q1X#AMmMG^{pkb^YOg<)KF|sOKIO; ze`(+9Lba={LLKQDtzwauNqvXGXW)wkh#!jeoI%fS>!b1%BOUQVX}^SfDp&N3P>jk* z^zTxtYf5%r`27&*A&vE%%YABM4#jr+Z|hq|w8ruM65RLiSd6myblJdXyXq~7 z>2iX9%DV^oX5x8vuP=5I<*~#3x?Jr6#19Nr?{zD+l4O{znpc3%D7tzUs(Fz47^17= zWya${Uaojhi7`F?P%MBrJ>wob%Sul)dlrV~K|M#=`M1RD9Cg^GzK|C_NM#g$tCji= zrMm(b$?YzZ&(HJ1XQI3vJ~f-d?B{Rfg-7E#=)0f4lNTP2=Ru#kl;Ud{ppHontRokM zKXvltgXcSGt(qO~2OkM}RL>6o3C|PqXqX*-56`VUmV&+|Yp%Ns!j;GahTOsL?C={% z6H&|;$#yb$A|9>FrLTU{SO32LPR06)dOhTy-1kG!XoC*+h^#2@Hs~(ZUt8y-18A>f zA_(_^{*S^P#%g3$?)r+Fn4H zf!pBypg}x#qn)&&yltRI?F{m2Ro__>+k>*@q5V;rK8?6XsZF7c97S8U$~?8K`L#O` zM(stn&1D5KP;Mau*(SC7-4g%jE{g21avUL}6NXAyU zuJ2#_58C0Kq}v($`dd^uiZ<3m<%E1GK9!T~%PQoHavj{=G&!Hj)h2bQ>5f(h;oXfP z`R#8i&DVU7T@=fNY%rBI3Rh#s$a^2wWo$kpOl2$py^~0%>i~IB9W2ykTeR;a^oH9! z>CupV{iqMB|0wYV`9{f3p-iMxvzV_~q=NXI)HfZNbPRf;+aq{bK|JPwj~riM_`VOo zf8nG9QjZFI7<0bSPH`bH_Wi)d%6I9**H@IvK*t&R;R z{vb=@_Y~sogVKDo$x;0~uH1JL_S`Hd((Jd&_UDCZlm+ePLhz&8m8EO_OJYAoTB1ez zMfWMo1R9u=jki72(KARxdaCI_P9*R2I*&4>@w8{)~P7JF-yEL&A}k34K)0yIXGVi}=s#+tYGZpH;WdfyQqCEq##| zs{2WO&k}9{-b;0VPT$iyd^N&vcRl4X&5_46 z(3ouG0Ze(kH8m7_J1-P_r!W+IcVQ^@RLkl<=!Nzlru$UvlA$Vgai)q*8=+zsja0Gh zvEnn8T^N3;|Kx*F(01xn^g;upe9rI)Wah+eO>6Rdl$t}lL|WFk!t}FFX`^SW*c6nj z`|MDR^k|ZG4;?$(y01`2#^b(!NAbQB^~=$2hj6<^9Lo=+{(;&%^*3q?{6Nwh@!?** zLXCkr2vO#1|DNTmX!(snY(0{=}pKS>HPQ-)Cs+(ln_QLq{!?Jy7eLD;RkPHA2-!la)h?i942j5OkkPuH5$|D}V0nwq{q2HR&{XA>5okAp5j z7U-LFoT0wV`=%`Y{EF_SZH*a`<`w>1npa>M>a}+-=YHE6SAm`-Yb^_hzpUxs%l<9- z0p#=UhV395p!4$Gulea2#{8gNx2l6nVxL8s$cAU(mwfFW^v6zH(R-(ww=+Y05%5jn zdmwA-_ce|0Es0G<`pHzMXrG?}9kL(f4^W?B*^eI3A=_%V^~^=uzaSl@zRt;~f=sp$ zojXJGEZrviuFEL4m(oS|D(&NJ&}Bg1V3rj+vJX1vlnw0o+hyWUzX};g(PvqHMltEH zQ;%rOunc;RIwM_LYJ>+-Z&B2nQ_rZ3-O%>{>ayo-^c$#8*p7oVrm)93h4KELe2^a@ zpB&U(4)WP2bw~1RgKr%uxF{UJ^P?4LYw!oO%wJd%Ye87W7v_Yo7eDJf$bkA^YM)d; z5u<*dLpasXSvns2OVlN`O{Yv#$?7vCE7X(KpTBmwTUJ!p)Zg2(aL6%WhP9xrqAZqe zu)|v{e<Dd_65IetTKmwsL#-j{AbYdBuO4aUJDz$)q#UK9gPUB^|VEmiPwF z=VW{CMjq7e=y}wy=Kx|o)J8TI!KT4>;NCZOajX`)(!XP1`>ykZU843*HfXy}=bR6S zmzVTD@WL5k%7^kkiMIU$jXj%3hBqJ`*-2_AfuZVKsI!&YK9G*1P4s|o%#@7L&ybe# zx(#V`Tl%m7I?Z_&Q~f&XL)$UVPnS)-yd;*7bd>%j(4=s(twGSp{?JElsVgA%$)c(2 z%`r}-K5;kNCXFF{NINBZMtCHZ8*MWWztk=;wuz7bPzJIcb75a8KRy0KyS2xExTkW_ zcnsmOXa$$=0-~jDn{%8OmnYdB9_t|u@;C!N8thP4PIq=#m!mv8JbZ|HPxslE9UWap;;NAR!dmtVy6yK@rgAHU3PQ#AePMVfxE4s+YhZhyvpk|*^= z&?aA_aVw3H-b5Ygu@CwMt{e9A-XR+Zc^!p3Nw#|mCmr}D;zkN@J7C#2v)*{D z7|)O7O!BkxJBhr11R88tL$M#=K3nXbYpm^Pmzt+bBik)#&zh4tFLpE1Nzr*`xM4=_#of2!yL5ivN@gw%>LOC=E~dkJXyb7=GpJ*wk&<@ z9~OADa|!#s5tfR#|LrhWKicBfCtKFWbDKv?&m7^<$M3-g!EVFI9>hC^7^~3MOZ>Znw z(@Fo3rXMyBaq#QMuOq&T4~v%MV~07)Wb;>;*d}c`rW59r$3ivFE3Z`a(yC_%->GQ* zt?TJg^aTUf)8A0`SgM<0>!Cv?Dr>f<9Z*^4#h;^|O#2!X+j-%9!*)7o2W~ceXh)d( zEBM_3Gw&39_RmYs=U=7n9c4?UXM+kudF;M0-S+WO(tK3j)5y!&pRAovev{jl>G48A zR+#2OFb^3%37_x<8ZW3(;ZoEujbQ@Dc!7L!@(X{3I-S??j(;o65M$NgF<05aq}o zYS4y{*Nu6Xz3|l(!ZqEpv%;r=hRaWO$lf{U*F(PMt4m^UBQGk`R{XmA5b||-z1Q-u zkAZ)uPfvdQ2S|5}_<;Yb*It0FxvIlMcy5Z;jA(93k12=pn6d})Xzsfg&#|B9_*I$r zAIz?~NMqt{_y}O|MbGTCBkw<$iSa0&>v@}OpPEN=4tHm3C`><3S_L)z>-FBzrFTcIBYF@YU}_8=B{u z_W`d?+d}Khz0f1bzw0WUMva2J^S%0HlDUhPgCA!Z)){3ujPg0>>26Ccv#uQI0nKN8 zVEXco{4`C+*ld}Rr!5De<=F>9x9sPTOOiUY`N5dpu0uWk>~z~S(%HZZ2{x^LO7p1j zMWpK~Y}(iJ6K&c#NJHfaIBc5E18bU=P1AU!w@n*j$Rt($+44f0BiTFUV(Sa^RmZdR zh1w_DrmZWGp%s^WPdmRB@fRr^?TY4KX+8w)qbmnAXda%*L*?x7vF#?i8Nhyss1uLC zd`E^Od?bgDCflyMUOPOz=Y3jN01y5A>{qV^PLDssw%IY{4^cSnE6{09i-%+1O9CC; zPr$cMRz~uz18Uo&!!N=9g%SVyaL%WOKSE>V!0w@8C#Lf0GRb-{wK>#X7umRKv2o`j ze;udB_a6ES-G@2jL7v(c(wec3cO=6z-cE^!eNG&2-Vo1tOC=ta(RtZrEsWbJ-7ipJR*%950f3m_GfpG~_y0PjirLh;=S=Nf&X!*?bhDgyenFQyjpXio@qPw#`F zJv`aaVcM60y`g%qM>qP-DP>vVxkMB5rZ?j^3O}<4K4tb0PDi#f0AH2nH}xJ9*qjLH z-h=i-zS&XOk7F`ld>Q&uqEiGqu)BKi39Z*@{g?TFP21jMQQCJDd0Bi+Eo**l0n%DF zu?PJZ*>73nY`1(xO&k4`b6*$vj58!H$$;=QVDgJCpZx7P@c$fZ4&(>wJw+%7^^cLM zw2x$R-#JJ}V*yK+6M)H9v^n-XksQa69PwQ9UzrugIG}yem_;!vM<%6#oU*O5A|CDk z(s8S^^cX}T4wdx~Xwk35H`$C6bHD@2NIb=G@0u%jl)+i&zehaDGx^>p%5^ejD)}h5ggx zPsFEw$kbKZf2Q{#BFvK87lhZR@Jsyw=`_V7`4K&;_iySjs(0?MHd4KJ#@7$1T#hkj z7wM=vvLtp7(&@1W=KDwCp5oD1q8GXmgs+!9QjY`UWd~mY@c~1~m-@r=PVgGU-AJ#? zNMjo4*;<;9f^1!Ffy#ycQGv#rA7UJZwm^JTQCf`6-oxHti-&y};|1Y=W{-9AK;yUo z`K4Iz2!aRN-{2P>G#!#N);VZ>qyRj~-YB~al%B?j3N&5<57wH3>1W%0F8PqK3F>D{ zVhcoGKLnqataUnve(pgX(O4eyrP^-zkcQeC)i?Z%Z&SVX;+|*@Kj;2~)XvDarRP1U zPn2Kp^VD)P$BN*E>T4#^glw%g0=en2VS>*K`r79OFRpzDEph+&B=r2Gxi7&HZu?7r z1zH2;bN|LzA1WY^W_(1Vhm4h56>Wb?4NDEJO|InW*nML?IOO{9d%{;d94Hag;t%a zBz3L%K8^QitRucV<2Kf4v+e2^OJdidtx}u$rRL4y&v#~E96lWDs~NPu+G?#kYC8$r zu^am)_q0qzTb_7g?+0gN5Ad44otAF_+w@6luQZ>6JOaogIt^`nS}3-31h;Y8gI9|@ z$*$3J*wyx&DcbMu)9HSV{n3as8vPFSML6zySI<;mnCx2gLb}iw`q!M;MSLTCI)#&c z1}*sh?N^=8^GrdX-XlPEw$WBOs*ig+A_G}+53LX46;b|oDJO+DB^vF-5wPTs5Y**b&V&_4wO|V78-!PNEoaFq8 ze`E7YvN{{(r1D|!=t06`EZNbsLUmB{2OE5}v#{@O@w<8@jV+T)Qsjv~f%M=g(y*3B`Y1;#0rjSf{r2g~s4zG7r1}aoH|kg>~wT@O`tPpOBfQ z)8Zqy=b-MaxsUHq97q3Q&3}?E(>lFte*tVA?JxKi@{zHeP0LvZ@}rJYInYNOMH!zU zzECEszo^oAlK!89cNQQA+GmbE6!2?fZ@{L$i8NOJ5$K5Z?hWZC&BKO4Py1>u2!meG z-sCUf*&E1@{K&`Aej=R+1FwhBjy^XKzo;9{FLdoF_S0@Be#uY9^DT4_{iFLPy2qZ{ z{vAblXCWh;mrTC8ojK-~3O(u|ojA~8tDdel@=9i({%?Dptj}~kM?IS3Fe=9j*t<}a zM>gHD7t0~bRDG+h>u8gf4F8npZVy^#9doPi8{y7A>g^O^Z%|lgVn1NF5!AKbgX`YU zCiWP5GK*~j#iu=GumR+swFhpu_p`OrezpTz7S2AzJ5Nfl?LC!U_Oy{t+==u(+CP^5 zfbmq;l82x&BQfA^{bKi9gAxMu5*B= zVBB9Q^EZ&SWz)b%ee{&(%gHyOxdhk>d!GQty8Xw-VNSDC(xq$XV1LNYZAJOXhLKI# zq-EhATUq|DHP`CP`t&5Md-ZD`FqeuotNx=Y^0#ap)wOzaNvurzvJ&KFjSEZA*O2Xm zE$i3%D&s)-)7S^$%@6U8cYR_fF|ML`gXQB2;R7F%u=&6jasJo&m?(Ul;o#$pboppW zv?&Se8jd)qgRX#Yq`9xNb&47t{t)ex>`B0f%VS?>Bf>M_kLfWn+AsCnJ(PyVZSZw0 z`}NCNY$pb-H>B^-NovCb*6m>87P|doYD+=Pmj;Jo&Qvvz%ASC+nbqbH*U{$Udo7GM zW$N^k@XN?Qdld4pbox>FcWLQ#OS}%rFOogC+BT}*C9$obNwW5ntPu{I*A;}kv(M3E zcH6(R=1a8ZSp|<^c8a;gVQ4XpvrRbe01&vM(J(Ieeo$Y{}U0QKFeb zuSz}2@iR(8dUbic96ubW9I+*_r;(1zv4GNB?E^HjFHcd9&bUuuwRdeB?;2(9VQHPx zJU09kXp`R(Fl?i>hh-YVZQBT2Lj3F|eyGp8mdeBa%mb;*)2e($vAg2sXb&Q7_O%(b zU-7s#?sT{F_w4#Y2KOMYou`&cxer6F0#g9%!5EF6wc))_1sSY{@1W%~wkY-<;zwG>VO+bqFMxXLxd-w& zmT?5@9?bjZ0_+1H)0Y`KuwtKo>;c-#-aFZM@K7P$V=k&77~a=1wojMScV>8>|IEI? zUGUd;K%UI^aeK|A1$?z2d^f`HM0m?hE_okCIPppCGI|g3JFc$`_R8iR{Ov)SKZF0? z$pr^(o*$4pEuV(=Nbl4_UKr!*y6na?|3u(bkh?r9zZmi88QzP1P~qJ!Js&e_-v^`f zEjdRYgidc&u`K9E1a+ud3u4hG6?+QuiZ)@qi~gJLiPtv&7`+C7xnzDH7j!5s)t4^M zRw@g(DVn3%1ADS}s_#f8+I;}!BU+D0z3DOc0~mAHW4uCn)g!H=-L!pBl8?IMcS`*$ zxs2lfTKVaEhOG9HE@@pDjk0pxV_p%q3FTf5nL$oHrSuD2!S(gb@3E$aG|~0+yri#Z z1J~0(g4VmM@h)vC-l?s?eAjx6mp16S3Xkxq*lB3rr)J_^^AReRiMFWF&a~X37l+^b z-N^^X`$*45p$=B`^^9U&-qYfTj^i1XPu{=WjqrzNs9lFzM)viz3=8*^@R|aRd%K@j z2X`W@rv!TPbm(B9T!m>&+=6GC#zw4N(7fnYUf=HdfXc9f-t*+PW90J$!p?<0(>tBV z{6qHt7WsXBum4C5=tU4V6TjT%uJ7wPjcJ%V9sP;OZ#l{xpW7SNJ9*eV@TBvNE{8m? zHgu^-#m=VsEn;1wd(x$zA1e2I9-u>MiI3>jA=U-4PtjKt-hEy&&(eqJ4<+2854)lF z(PKly^j>y1%F{g;byf(uEa6b*d{-NQX3*+s*cQ49<_TGE7@8HShzJt1*f9t|< z?~@Yeg)_swPos{}j-z=h_Aj8@b0Nk7)b3}1UIpkcRI%t!-28SUj&9r2@cXPn-vYTl zuVR%*ADzK-f!&2F_8Y=^&|mrmzh9@{1*r4FQ0zbGej(rg6!#>T2z2Hwxo3S}-M63S zrS24(Q}O-}rQ3mYQ}O-}?&&u&HRDL9b??tO(t-O!o#S~O6!w?;c zageXWZqOb|T7wIyz}r6AU!?nBq@g}x56bZ}XlQwY4=Vd7fd^WPqjfXd|4RM?jYXy) zZv{P=JW|DKk-patUQm`P$bpFmZZbllSL-P(q{|1wWpXAEt zz1-_(o4N#XsEk^+;P0!jVQ4Gufm;{BF3?=A?(cOQC7I?==kik;r%zBsx`e!~y$8h8 zrJ(JcztweHNIb|{A&`ac8&I#@M@;Th5f%0mPbdS;!{&f4*?!U!-7Y9!)U&hR=v}O8 zzt|q!A4Z+}zEu<(hBT23*W2Y*c+(# zUm#u-^+VfcWzh|tCsn0jc>-D3E_dTLim-`?vPfO5qhTmPUuM% z@}+ttIqG}pbWb7l5qhe9Z|Gw$^iKENtD%pjiu&z#__pC*=$MXk*SK&mbV%zS+JdQ< zw5F(a4thcUL0jH!`2qN}J^qY&x-96^w}U^@n>I(^@(q;#NyOcc^6GYmc2R?|T2B9h za5a7d?=A@A{H6DX>uX+v=iOD6oE5#Wu=UUo@% zEo4garm@*~(AUvg6ZPFc10RP_XIf4bY^S>LtbfPVScmen9y|JkAsMWLFCdPyPZ&>r z7u8Laz6~~x`d5Yd^bE}D7vMd>yTKdv>okX``+V>b z?SxMTeaXmbel1`4q4Lrmw-IQE+Qt)Y=&r4cL<4a$@QnJA=Se1bMz-;*QvUuOH^7Hk z2^%q#WeXc=jeD&*5zEFqZT|*cCr(@KPN(}DvFl}KT)%rg)UxT+hArFOhJK6QgV7jm z^d+K!Hd2INlC#!vicc~Yzu1nC@)e^V2~)gV(Z-;6E}Jlo{7a&l^aI8NGO9@^nt-40uGMh*}6qRr_z1>?iL)OS!H0J|>jF#aA2>QlEv z=o0zmUqKy^UOCG^_MLQYH25*w!RaIeS&t=~=$fM_%sdiB-kO&9tZ`jD6aM8`?PE}1 zsU{S~A|yv@b7+HvY0d%1ppIGu9f@@MkI){Ai~#%xJb#S%MB5}C*7U7;6r?>m4L%S0 z!o3w4M}}lHzc!rg8SGL=ri_vDkcP%;K9m{ytL+HnNd7G8Y%l7Fbn-3Op0`Nmked~s zd~VdyN{SbqfqiD8v$TJn#u$O^HSqPu!f(Ez?@w=^eDF)SA|GVsw|!7d_Dzqad-nRn z&bIaRG_{M)W{l!FwWZyt+bKT{#VUk$8)%`9V$r=g7Y=pbE%8>944@w*FX|t2At%ij z)g|}|3{~MwpL(0@HkGX~c2e_A@rn06kf|jjvQ?HGNFQjezvGW5wSH1ur#?^~MB^~o zP1I8((#qJx^Zoq~QNELfnPKjNnL&-+` zkorVC(->{=7-T^0V;z2pZ#s8O=40Y*(29@r_2j<*Q@l@tZ&w@aoOs}VE2N?LF2z+`tO>6DU9S5$S%GX|3+N z7JRh%*Ys5f*apyZEzfg`Fh07qZ!Gem{Bw~%&EtV)YoK7Xo&&bVZdy;&gzzPZqkTu{ zGwR$v_k{Yf-RLv+BY$fSn9@>P4obN+-74@59ie#}s`m(fpMY#E|LrK+L39D$@m{F< zj~1%_V?|hFU4V7Xg;-xL#2Rl=sDB>G5@n<^wK?q?WQy~zvFCRp_n(D4)>XuF=b8gO zL-~wN(ka{aLC1d&o}=S2ForI@^$v4q)?wSzpg&nZ` zU#%Ntn=M;G?F2eQ_KnV$Bi_mHT}^r88OmYn5cxwSx7QG6mt`uK{CBc!e+1mW z<2vjC65qhle`$G78RJ@;(Dm4HPWXAGqdqEN)Fa8E8|^$F;Z{A;J_X|EDM~|nwk*Cj z5t){JjpZ=4*(pV_45a-A>VV|?AklyvNT-9)h3qOluWy&#HLqVtKE`PH81OSNmqR{= zmXl%MX)Z0g99JQ17VNuaw`U?R(yIi!4IMj*HbDJ_Ws`JYggz-UOzbvnP7iE1$%p(P zZLgpgX7Fa z7p1nRyAj^MVuQGPOmtd-CUKj)Hts{d_Lf3*-sCc+q;t5^b~>&)=f|1(XC z^Z@#%`#I=Vn^U)7kEl#a`f*CXo6?7jPI*TP!;)B-NNT$nBe}tWT zMo}l8zR^=8ceK&|9oJ&KBmD*X5$ik_YRfbhA-Ph2PWh2f{4#XKp1YDdrapq=JSAbo z1JicQefiyU7Ci4n^StMrpt+&tu#1rv^y4j#{m#(a&7ehNcIeY_rG1n&eeWPH>FX&d zFZKN)l>N0Hy!Rn~F2%X?mHkF^# zfN-mSwEUdk;+dXnAiCS(=fH03eja@W@vs4WQD0ASXxtjT5Pr@y_&GD+=j6f9xe$KN zH266);OFFFFB_Fr`+{rw#%q37$J-d>r1hal9X#JDFTK}$b>BlGgXfX1=NQIg@N=kd zqxhdSuV-!FNHOlU=d$CH1X{U-PRaBwKa!PmXp$F=(2o<$54La@$hVX=halvdy-Dr){&&>3fyr2piKj6?PSN<1nNuT)o52VbIexWAizVaM(JmI-}}^s@Pbq`S>MY z=p6mawOf^@j0MDeyoG}1JLnuJYR@fap4jalcVbV=xD$K*<4;6dZUnvw_$J_0C&nQUk|&KLXpZrGU^;g$ zg0*_WlYp%}Y5Y(5Dde-;f8&WMl<)ZRNzv8VZ;Jf&^OhUp&u>C|Tpj9%U)dkM3BOn4 zcRAYU)uDbBET8m*^hxmBum@H3Q=dfPbgymUsko=H3&tza64f6;o|H#-3DO6UFUB?z z{t2am=`OXq{gqEL}5PgO1vM#cxXy~#iS{Cew4;Vz!#I;U`x7T zOODQkO~E+II=k5id0=dfFxZ#5h>tPV3m1~!;B065Mg4zQW7esYxJTcw$G4Ww>2_Sm z?fOZ`mT()!wq#pmOm4R|>f_2pMp=le*O5Jj9=`th5hWuII;iOWY|c*bsb)bCKcwAyxs%V(0dJ(=u;-M0T-bblSn^CtRHnQuzkw%>rRTW$L*kY{uu ze1?Va4{e`GpPlXYnHH#n*XXvrMz`$;b)Br~yPwi)`z-fpKeX?c>VVcB$TsG{o{-!> zGfd8tKwF^srMJ+Q?({;tn+7F&okrCX^dpk8o{)BCNnLI2l!L^{g_|DpR&rMpP_s| z(moc;;ufuw)R#*i1X)phyl1S(r^8S$+7CisM*F99{mNL;sgJcJOY~*^JC<{i4-qmt-Hl zi1U1?|FPoi^s~Qw7SkSFNLvH|fo9#Wo&=3@P3~KH(jR zPvhmg|IBORg+iZf5zPrajPg)k)Xr%?0QL78qb=$ALTy8C>&qiKQrm?7Qoia|8fV4f0d(|D@Q+UtY+tx^wK{?>EU#Z~g$YKQOvVpEAPv@zOu8N@x+m1`{)dS~rx zAm7eGgg)-{*iZO?Ekq>KdLm_w2R?$nscfCpPWINxhpzmdjgzq>CzT=Q^+g|h)(Boc= zi&Q4&|ByBS-KM$W5ag`qhkyekaLM{-_YCBh2Q2Y^2S0oh_^_V&!KcoDSAm`vJBsqq z`*78eVK35=EU5hiK{I;&na{Plbf_$;M*MI6+D zJ|iLnZ8(5y8GJi`=8qm;Dd9fkq2HT>oeSd`>42tP=sVI2T{?t$V9aUs4Ofq^*zccs zAah9bihYF>4^Y4PWT)@Q+t4f8$N40D%>Dke4(uyD>p(B;`o5O4@~P~arwdiA=NRTu zr-?0~H6*luJ&)RgdDMGk4e9zz!@Wfk$2T!db7JZRtoK1zSCd@CZ^Za0hVfCXcRA>m zsMsVaip6E0LD=ruux?k2g*o z{EzdsOb$jMkDub6WVHZsSdUl0kGURx%n-e1NOeXu^xiYnK~KFpnCqlBS{>{pdZR;{ zUWd@TQ0QTPJNA7%bFXKeiv7w%j)0clpQ-gg`ZDLb7UkUr-&S>~@VS&H)`Msb2l2IE zp?$Z`F$cbiy|i{)32@)k+az`g?J4jA)?}X@li&92%KRMYXwFbv<)L}#H#d}tKSA-G z;o0R1X;$V3`u(>DhqCW*><#pB*f-indpKLLKa;|Ts@r#qF9?3{U8>Q2boPV}%Z!ID zl`uVrk2oZ2x`@`kmJ+O?Wxm~E&zqF=y@I^j@SN7#;hS)~Dw`3$56`j<7_fll=IY=31=Q`d>E2eQp#!>oLc{vPuJpi6wxvy*RwCzOHg&3SlE z&ol<#QPj28ySJft6whfVtawQGZ|MI|E<9yk)ITg7Esf8Oe}Z^JTAj{Xqd>Z&rJ!9A zpBJb8miEkcjFx%v^~moPwkgyG1LQm01RY(?K4otS!f%3)xEdGQaSydsiBI*1wzrbX z7p(}zHi8GMti8*T?uVd@HBHP{#G=QrW{7zd+6#CC%1&d>orq5|h#qo;N2i6amGEXO z{CR{wABx?BvQxS{tmn@;(v@8tUMT4r5gvUOd_D&r9POqDa;v8CHrfxJ>(g^c%S+dx z^&H<})pcEZ9(Y5Z(F&|n6sg!{lxGp>J&S7rXrn)&^&a$Rt$Ho}0kMPAuorcP>_x?U zJ-v@e9NLTe80_F~*ug>-n*e$}b0HsETZaveGB2(6`VzvlKERe>-5$D(J*ZFOJy7r! zT^NGD-~8GYRL(-^J^g~WQ}BBTWz+S6xe`5}lc!>{@w__^W!XD4JoEq1b}n#MR^|SG zhXEPzilTsk3?K&x6jVw;jXey*ML`fo!32k4X2VR*&Dk?tQVYWp(@yNvw2mEzz|&w> zRCa>$B!(yLYy{+`~K+mE{KbcZVSgi@!CFX-i-Mt+5PQQpE#5A|M(eCYi!r~f7SbQ$btS- zK!4GBwf6n^_LICexXHD_yNpF$ZY&yoW}LHyww;QG$B*2Oj!Wj_k@@EwFRs66ZCK?S zxliHu&LH_w>SA=1xLwF-vwMFe#V5QZB}d6&gXJ%Pc98h*%4ZTCd^C(R+?M->dp7#h zHdX6d?Eg+R-!mxSdkJR!djmX-P3QRvY5p*remIITbFASreqtVH+51uN0qEAr#%68{ z5>w(IK4izj6rafRacrl?T%#95ct=1wJ_P0nN0>skD{+e@}PJ zTp;tz={B7?ttL(OnbSPZy(zyNlwW_^nR3vJUeBDWziUn@Syht8=qc%fVUgt3$VcZj z6}F17%rmFnnMCTrI!L#3(@RLBGZ%+UUE$>no!RSlZhG5nY~et3NPJ&L8pV?jW&9f_ zpNpZhu9DHG%pR#b&!;q+7X*Xsxxn?rH}+w_-2;|yKUsNG*Oubo*@@tcv())%zg~L@ zy4z(J^HllmT2F63F@1)%555-u@7_(w=OEudG=4f|k4E=o_hQhsb|8KVpP+pHeg!Sl zXHV~6m~&Jr0~yMH{5f&eb{aqB*KIEzwWr+CwilP}Q5{#A{JcF2{Jfs_L(DlW@|jKl zHv0l6bN`C>j(@;&6M30<z8A!N-S5vvwv^qHU)J#q{SRAf#%6pBY}y6!0SCM8qn^8i ziSv>(;YD*~o)3iUtHR-WYOU5z$0A?lw`BzD%q*i7c%y6emM zCy|ly4-&3Ex7yYBC*)gL!ahZb*{4X2U7;;qNxVy>7ops=XG0w>ars>7<)gE8J>{jj zc>!fqxqhqjnw}p_{V$CFq^;{d$-R|%+Z0!xIoC=5SKT#d49KG&?WHwDQ}_Jg$F^@7 z&i>qW$FLop3h%_GXsxFYYx9NtagL$$p!Ta+V@|M^jIL^|Pv-R_{(zv<$ba=k@m-W3 zwvmxLd0kH3BH>)w*8hOYm?N2tG2{1v;Oag`A0CHqrI(#iKRAUrnQJ}fJ@xnbJ&3IH zs`Rf`>6$mE(mQ-DTlzdJ-7KIy&HW$GKda*?e95-AjmMrYr~UJ<={OBuSl3U!KAPXf z&?;EVrl0EUNjZII^y&}9|Cw~^uT@&3xOGxIV14W>`}4Th=!=)?-Kk>AID~!vALVgH zz?>Fahkb0nLN>2=U9FI=o(MnK#RU5ZZR|6cy8Jh`AurOI*N^sbXQlek{{Ln2=N%)% zYb3dkU)9B=!KM}DMUuOU`#h`joq9L%Y4w@&<|PYGwBIz0O77@)tLh^e(2rX4``GVX z=d(v7IWo>EpVlodJ$ps3xv}U=q|<&U_j4o<%8d_SK$4H1_rItaulBhV~U%JSu%R<4azI zxraSlq4gu}wX2`e50-MzZ?Y6#TNuw;8OPf5I?P#5rPG;%Z;)pYMD{9s-}|d}Nm=T-(Q-6Vdq^^IXd_ z@eFPTt31y3nCF-B?DNU)`L}t=M;}Or}0rXa2FrAB;!gOY-gY zyq@Mh*pLLa30>G7@SgYMk{@*OQ@DUJWkKeclCk%_C4B~6X)^M1=kWdunX4~<*Uy)A z=?QlnFJJj|S>H^+P94TZ8Qo=^mVc}B>kpByd}Xcs>P*XaJ-1!YXbAL{9v;2L__b!t!^)G4urIxuF|@T@w>S3cjXgPslli4VoG zyU(?Rbr==wEy$|FA>uwR{s}Yuleh8p;J?)4`6|P+_dV+^-P~8xchLSl?V~3S(HF4syObw9$=>=h*^Ny0^|iX8vs#>sNKSM0`T}VZ$i0<5 zDI2AII_)b?cH#f*@=VWpZ5utUap*thCP%AnsqbyXGrEfIX;0XeZ|_c){`$|M47KiT zWQgo^2Dr}2?nd&`{$Ci+^hxR{*)po!{uMWBhUy^}_CiGW{pXbW3_aQZ}ZW zJSkIWinJG4?0C7-@G{bzant<$_u8kTzVo3Q-%D~c{n*OwcP>0axNMN@=pn`^GX`Uu zL%BUqxbpcBzeaA_O( zD|(pf_X;~PwV!Y9ia9`9d%kg%+Q9jCyi3S8K#JUXR3l&7QhlVxwd2oRnX-|x%Lmbc z5t1KmYRgZ5-%|D_BX4X?M&7iM`qtGh@9+6}(>@33hy9dyR(~<=h-~y8gYJ&y+s{WU zR!@&>9<4C_g>BhNo+I^~KLQ^$@8Q<{!_B-+XNXw`zVTMKH>5L=mBcl5aC7{`BsT^m zrpHJA&h5t)+w&ZsCvG`^ztT=LtGI& zy9umurt>CykLnEcN__tM9IZ)8ztU%l%$T8mhhAxIF&rkxOf$v)CIO+FXQOI}Rc^te3I&~AQZho!4EWhe(&dI8unK1cm(57Oa4PWTMmy!F=oa|{odsdXRzD!No$WQz9 z#zxMP-@@2Nx%wuH>BruY#e|S3Ma^v{pDjtS8v#HB}yKi~0_W@de@Skn?^2LfiUrB=s_ZuGm~`fy*ShX2bpC5tz8TB;u4s@q>z68{z?HA~7de^y(v@%e5OybAm-~__ zOa7hx7H??Nl#g%Ao-ygK@Aw7fC!9XXr%V1;d#}<_9rCi{q4jIzUw=z7cK%E_R*L>EamBM}@?*?cRz5Rs>fSaZ&Uvsuo4p9y%&e8k zw?fbVgZy+p3>`|%LyeqP&xjYoa{}8V{#uJiVmCHFcMs(lACGcEpMM%{_qYj1f9SW0 z_Zi~#w)QODZW$~8ZB)l*;whgem{X1Bez~Pehb}dVo-f&=U(RQHTK$%LzRC%c&db-5 z>`fh=A8dGn9_BZ8HEaIFmuy;#olir!NfYj^$_CJXq|f4A>%1Q!jp;Y=xg5;dN9>T* zyCGS9A*BoOqH$OHs&jk`ln&imiY^3B7bQ#P``pD{FmM;&86tj0KR8JI0C}2tK{}53 z5BtGIUbaa665Vlg zu}k8YsLtrB^n-mxW9Ppa)|vE1|0#DAI)qc~cI!jLH}c7}Tj}>!d$3!RNfX+wiD2Ju9T|~1hNtY-7CVL| zDmc%8?xC0F%&G3U9jZKJ8_}&Z!O}bQ@$}FZS{dcmqZ3H$>(K{2J*ouX%b#Sh)Agmd z(Sd9|dQ-f(vCr3|OQC1$(Q~9Pa(dL}^2*ku_mrR0qd~d!X!WJ>l{xh2zbPlwqyJLb z-hBv}-{Gmn*fqXw1=0SZVXFm`5Lb6$3L*@@7OU)Hjk4e~*5A+Mnck8UYE{p&A*Q$?y|4-UR zyq`W*3{PR75}!TxsT|{xWMcX$vXH)w4&`j^Fx~+^K|bSw%)PfWX(R5k*mAYCceD}f|3=RSl2_X$lK)^6K9TWG`X@a! zbj};LY$@#+i|jeaVa7h48Ps{JRyW7e*(vSkx%G+z1zNA*S$#Tjk(ocFY@Xg9lDt~? zpJDG#QrYBpBKhO*oBS<5r5*3VgCBp5{13xxX@~LYDi~)E@m~6PyEn*qu=GyqrTmNx zLjRC72gjp_lhSAJ{z~53i(K8`oxPhv9p3(oZUhn#lv>ehyAqG zYb%YlpK`plb&V%&ibz4 zec2P@7Y=7^`&;!GJMkgPl)kPIAIKxr+wRB>B-X9 zWBGK9+uii|C1mt|^tgn)|51AUGCYJj(wiQ4BHy0$cph}6{lDt*snqNLN00wR`Mv4! z^R8aL9{&tlsK-AAzaKrmfOy$@y!q^4aK>5lEd!tR`+?TB5>Exmw*9pEQ<3Bo&i}lP zyri%HCO+tg<{U2Jx8N&_-V)M(K)T1--=cn@9=HDhJArL!4ec@ZMdv&->@m-#Ew0P7 z$GQ(z_PD)1Z|{#~vnZQ1ViVcW<@XF&pYmY#P+lkN98+k8o2 z$IV&fU+io%{hoLKlCKx@$GD@hDU6?Co0mnBZ zM10;!9(NMQ$<);UJMao^o693n+}G@3%nF|`B0l-1?6u=DKeX4>H31I?kxN+DtEsEe zbK)9%O`SF;-T7SN8d-VvIx#jsW4!zMFnFa+y2*4rWliF|W5o$^-JNxbWSTwR)jOFE zcQPG?9L64JymRq0WI8F5d=4HYQ=<<LJBSRzdi4wCN8I-{-jPQ;=dsOr2M@1OerPA!y}qFF?kBEZ3C?Gm zxhCV?lh9-*bU*SFU~?bxiN_!B#uHC=qHD{*xXu*lUf=b@G~VgVioLhR_oKJd|3+^e z9RDP1YTi>xugPpjr9d~aYdW1RS`56hsf z7HbV)l+oK1e@de{fT{QDS@DD8gCuLjrf%}z6!t8<>DTb&Y>3uFTg|)qBRlZ%cbj|n z(ETNpCw)=b24fpq@ym5y-K6K8saD>_(tWJl0l(*Q_Erk8#|3Tu&He8t4)^Y9uR!w) zzs$BN$VRsBBHrcM%-LmZj@DRyIFvG>nYgasCa?+8pY7ZwGYy_}U%+aY5YAZb36 zh;ERFFn!XTb=1C2f#fY&kme-UUYs$b4x>6WR;#^3{ndDzy@@0P)8yoIBX4_kpD?e5HSP{x^KxX@#KOug@uo;BeGMpV)V9ygA zq961W|2)+NepYfeOFH>ucxgR^of;pY)4a0}pR!rzECF^walb~Kv-wl}@ADhJ2PEG~ zGM27|>rRCO@UKq}*Rq57CFosZY-Stk9s|>+&Sn{VH6C5}>ZN}B5M>$J?{Mcluw^aK zZ2t?M{W93Li@le7mD;5^ZRe%8W}IM7K9O-^7x`-}56{S~aqaP`Fi*xaol)3{ZlMo< zUJ#yHh34}sdv4^vf5aZ$uQ7nOVQymf3(OrR*pb$7Zi3Fs_i}TS-Da(bXVoj!=baq< zeA%C%ov!bA^A+1pE8$V{*1o&{?!=K-f*D&qo1^fr6w5zA7iE7qD>lV`(cXkR=&+h2*yXm|Z5+pkfYP(I;%{1;NLY0Le#Ezjp! z_ENUnoz>~_zL$H>vNj+bj}D)eHQ&r1@NDa${Ab(O1x>&M_v=?cz-US`_;fX-_C4!W^5Wf6lFXCm?*5DXZ&D>i6)!64#SxcJzn=fe0E z%r9J?1A^f6T@}P7Z?*Z6=Q;Zs-j%L0$%E%Vw-0&n>~_K=-}dJ@-)!1-z`)jJgQmB} zuG0OzRyQlInvPCbyzHv!=zy_*A^*N!?TVe2dM8KWdhcl$d=2GKdbEe%BhaNw6Y?^3 zsg<;v2d8wYZG2qs?i&6`qxW<5UcUJE%RDlw-;4sM%ce}i@1mS{&$MO!3)txHS2N3N zC!OAt%_xs&mDe`Qw%3t)lvzyM4~Qfmp&ehpLeGZ(?t5^n^WrD}g0rimO42(1)l3_v zyjx@5-N@97_a!pMs<3>?X{+WXSE;?|pV+er)q$lgva|`cP8aB}dY9u}C+F)`XVR-4 zi3ctJH^cvGrw54#UEZNB6(8fQeA+M0+soWyu(1QIZ_FaE#C`ZlTbNT{lwPO!U*wye zkIFlE5oKP?I>ioqAN5+w|}+=rg+4^ln@4gLg-gBgKQWJ4Pn=!6)=})J^I2ml#F4 zq)*MO9Zy@rbqUFmG7ln$ux?YxH{{>w7%ZT=AA>a1c{e){h1wP$AA{ehg3Z7Wz{{j_rOl|8Mbyq5f7Rm`v{ z#FIYj+j*_Lw`J?(oh8NhD0o75AEnPW-m10VedoldkXB>AY$1KryZ76^%kjuy@9v{5 z&iC8EyS}7zd><&dmp!)|u$lS1I~LRLiVodxB7SzlW8wz%8~GiikFXcPdx&Qp`wI8} z?cn}D-nrxX8lJiPkNf|oo3QbJU@w|-Z(qk`)cldeQ{7MF;9lsK$9zWq%^-t-_OL`}l_C_}*e&hD% z7PNi;&FaBFdvjOkYi}0v&Rjmeq_= zzCt=v9`;3dg0%3BJM#@b#t);D^MbvKf05I}FSz&`bBxbLn`<3dcL_9-r;#~#thDA| zW$pwPy$1RlqxeSOJl?e$k3Eun8K+veoYv90f5{%rXY}6H4eom@n$vvXWbF1JGq2el ztnL%%+FtA6CG@qc6q_mWT#;nCpz4vzyr?(jtL4;(%Z{5@0V zHnYZeQIK3N-MGlE9U07c+@5dm17WUX?*rL_f2(iPoydJ4r@H$<+D68Y+-cU$_#Wk` z_>s>sUi0p^_B?b(+0-NSAsFuxcL&KMPca7XAl`Q3%~QN3-Q(Ry_!EQ|TbXyu=U>QY zKlyx>-^cm=8u8nRKTG*7&B(8fa!p%Y!taCB>j(UPli%<0`yKocbVv6anKHsPtXUDp zOZwV%+-oA)6w`06izLqyo@enH!dF;)n($(aPZnNg@j&6_7WW4$58c<)7p!$s^#hG1 zrmW#X@;!Lr-DUF*!n@$E{PbG)KE5Z?h209j{h~UB@6W02!#ipJm%Pk#NZ<6*i9dHF`<|Jxp_#m*(-e&Y5oVoES;o4?P_3Qu#qQ=|>f)>fHAM`Md%3STzwZ3)zblHdk?1Sb$c1-9K z51!LG8~+Zt?&pnk2L)-dHLOkbPv2jmIcGKbAIV48`={@%(EPN*rz30KM=@$xkX+@{ zkxM|o8Z{Cd0X_5lQYIf^*@|!UnRdUNG%8o?>&kzw|GYhj&-R~h4dNfpE(0IWzw^?( z-!O^yXQrs1XReD)A?=|_5yB`BTc&p%%)4-`cU;DJS77F^;df$(Pfvt?2ywM0^0pf< zhlnTojou}aE-=qMU4N}_k!HMiCj?kJk{Iu7M`|5|^{%(Bo8Io`6Dd3B`T1I_iZYhA z46t)$@oV}pzT%hM81&BR*aGNUpP9h8IG=H`igB@(aWPSXd9W$2Dpo!`+rTa=eQzh(T& zk6-;P;}>IKPdxbV1Kz<{DcKHiXS-YXpY6Vja<;XJ*huNn_bFF*O+THN{w_+$yPsck z5BV9}ir;Q@@r)q(Rmt-V4|{ zU+={D1j1D|{e5qkuhORCBuB#}{qf&8&zaJF^d;2&-#C5ykm?LwbJ(7A|3=vf#<-zRtco2puh6nW_7ZcR#;x^pKy) z2R&Ci9#K9iUH85#Neh5m(Y)!^Fdr^GS)r;Iy2wbco(t)3vB zX)AP8bM*{4k*{Qz@7n4o?w)7mYs&lWT=UMTd^NSnH^?hNJLygs-ivuu^))<@$D71a z8_~BlhHeX1_l-|c+Yq-(XL3?@+U|Gg{Q=$Q7``Wv*kZ@8e-Xc}q zoX>}GeES5?(l52qeNIN7Bwo1pqVoLqxz&VeAIN^&zGx8T>`&jrVR*j7e&bks8TqoY zZjN3+|4)riv0>Ang-3lW`Bv_d`rT>BC>HGHF3G(GgMu4hclR1*r+Jbz=37@62S(Nf z57~34x@%SEd$guDI(!#YbBrg7_i`?ZzsO$ZoBWY~p1YUB;NZq~?rSn*COkb7%C0PL zhT-Lc;70DwEtL%P+|J#jTBq6y&%%bzJ*3Rj_EyQhEq1iUk-bNjsjLAvyndQZe`N9I zy{*(Y;9O`MZSqs<+~V&0(>YUQXVy_Rs4Skz-@H>YT4zI!o*BOw+3$06aOsDkPdF=n z0rVi7UUgP{67s`F#BK% z?H|L`e$xrW~Y#z6H;)y>o^oa<7LPJ>#!Z~zqTV3u~}>vxCAo`&su$ z&okP5OWLQC&&B@g!&--suh0CWQ)kFp#@csPe{rfA7ol@!6@HyL*Rtgt)&S)zpVRT* zgmXsYSV7_HbLdy4Dy#jqyl>CH=fkm(ve5XPiMiog*=466l{g zlOP^jA9?Ay)*0<@>TWK5^Q0iy^sk!t$shbmK6m`{x4_*?e!k%i8uirPyWU^^Cr2AD zK9G;bm#|K{lVI%X&Ch+BFtvlu7Z{9xAiM>-es%xJX2ro?>G>96?5ps{z~OxoX8os_ zGMJZy>pm&lk}rQD^V{2p)Mn_5X`c$U-8mg=RVHl~w$&P*bvA=`GGkO5zPk87f)Azf zp>_YrJ(nSOLnq!1=#;RLx#oz-+~}O~q02h%6z|+MX1ww#x4b*$7 zlBdxb^m&|kM7Hw%#|We6!lS^CQ(vo>Zr+Ig41+G+(fOpaz~MKdYi-sV8oTVF3m zW~@&S#FxGNg7f3A)2=2CGJ74lPGlX0_A-0v88SoXv>$8MV@>;H%2ajIIYYynWH%*9 zUIMSu!?1t-`V^j>F8&H!puP;x+PB|M8x<6=mc<-HcL^A|AtR-IhPdI`3L~d2X}fC5 zV?9vzRqKHXWUT!1kb|FJZ+1{Rtug6%YhI5~e)gKzLG-!5;mf;A)#EF)_v)*m?%!i-hm<=^H55t6X$pGru~gC*Nd#csB(26zHMdkUV8K zHbRq3*}Jj!4mqudW^{3E@N5j++qz)(Sn*}%u*VxK`uSr8W4swFBBSFUdoR2X&XZa3 z|DO#iQ60w9pOC%Aiz1$TvOx)W?#TvSuKsu&8}yuX`2E_T?U(%HZ4mODfE;}r)R#Jk zHYiWn*`W7M?%4))Ko4!uJK*< z^v46U_l=H!q4V$GAIp)G-yc`;+*5z-+e?33OM4x!KYpWoe>~8uPtZ0X?2iW~_Usd+ z-htH~P7gjoD!dn;z{qnBa`gLSA$1P><49rGAI}E&iOFW^1&37!ML-~RX%asRG9 z!SVVdedf%+p+EjNlbVr&D_%T$HXbon^r={HQ>Gkp5v^xvWX`2LIhOOdYPX z?E3Eqz&-WfbD@X*cQp9@_TLY<{(A~({>Jh2IQ@6zKeYeOg;&4-zIr0h&Zj>Je!uNR((H0KBD~P0(@f4t>rI%7e3T>i5)>)ez)%I-7OmZQ~gNm z?z-!4zIQpY!QgJNmUH$vb@dDn~CbNpA7!QAe*XN#5eqYaRW@ zlH>-T-t6d`N|HDF^jjSL>LSitd3@gL=(R=3s7Kd+RNkj-n9j=fxxlqgSid`5x{AyAmgGc*(u_RgI)4%NEZ!byC^63vb`mU1X44?jW zNB>qy@*j2YoFP4$_n(f( zO-0EOKK%(7pS6jzpqq8JMBn&|pKzvK{fz#la!!{$#mD(i$`eidbX7XHS;AUDo;_!y z?`U%V;lM+YvGKFeu`s^ul8Niqrp13yG%wjA-dStXdo-fu{ioyQQ$@+Qn4^oPcTa+n zdC7ZCJ?$DE^aFWM%(H#*Jl=mKuDOGO@j+{RqiJ)s^+A_MuwY*DQ>HA^v-W4o`iU!x zJ-8Rcc#GyGZ!+Z!x9g3Ge(|;e;?bPHII2BpzJZObuj9^`>v*T{BON~>ZAC*ZHKV9*_3(ixx$dEBX@y01PV9!S2dPpNL#n=*&FGW*A$ zq)hq1;s5t%C`Lr;x7_M>BU2E)x6{fNw2e#iAh$E^8VY&?^*L} zZQIrJl9Lo~Jn>iyFmnEdi?^#N`Eg{GqQB(m4;3XhhVtioDZ`b1Ea~xGO#1WeZy(kS z>xefM9sMnT8T&K&TCeNBt8;%|Ty}LkW6W0=Q)FMYo^_wvP<=$t^!>Z_Y}Por6W8t6 zDXa#%boM0ifZoaOe$>(WL(}&l-Fjf^K1nOnlj3(FFZm}`>Jv`Sb!NtYX1q)9>vBIL zcVQ0JJ787e_haDU3Rm7A_%-Ku;9-HI{a!Tso$S;cN0WZ)41><`m^CQcav*xfxd`50 zar%}xDPAf5=(j#U+5J+!mLHzY?*RCfJ>lCl9XC<#gsl2VU(#n1?ET*RbiOf1`&>v~ ze*2uS=N{UpFLbrfPJYAo>Emb*^4m-M90*pQ96vYRKD)EpC-t0N-=5m%P=V!Pi+Ess zk&d)E+Q&t6?ensuZ4zI{Zy)X{J2`&rsZ{%<_;Kx%ezxtCdd}w8Z=W+L_kFidvA5oB z>V$7ntaZFm9g9spwJy98yJ!1U8EXS-huMUQu0Da@>@Fy>V?lp6R?H+ki_|ij&u7Y~_JIuQL8? z-y@_Sar8fyB***oKRfz6CCSk~J?ZG3CCTAFJ#Vflr_Z%T$uoU=KSwVwN}lS|2RM4P zC^^8VpX}(Xijw(0eUPJ{IXBsZt|}_eYB&Go16TzPoL=M=gm$2!KYu~ z=$|c0zUtFI=;$-%CSURCmpOXT+~i9>y~NSKSd@I;r!R2yMRSw??bEMv^sDD4pYrL~ zI{KH3l27>bRgPXhH~9mf9(DBUxykSP^jb%c7bU;x({FV2=DEpTK7Es;-&>U2;nQz% z^jqg9zwFaL<>+_JP2LBcu?+n`CH~Tn!}Skuk0euX`L5KN_AUkbP*;ACEZ4r=>T~18 z=(6;uPkprCVX!zoIh&cM0a;iBuzLsd|v(E z?U~Ew={$(J6M-@{cN47-zSxb}3sc9$fOrda4AbX3J93KpA$4Kjo!`v<&U|#Q>_@n7 zGr;idpP$V9&Q}|IhQ?mp5uWjq?X>Tg{Vy`;>HV@_kiXuulaKmC@}JNActBt7w(j@f zmvjbLXL-K^-z{&QJ-zj5|^pW zJUB(=J08bb9-or`ieK;7QMzl(;Qc+vE8l+WY+D?3Ca!?DGc2!#VVL{A8}G$*;^$D0 zl^s7(yI;&ZRp`S7;1;KQ5%F_|;zc@Nzc{j2{DBWofRG$VP|y^BUBu21@Bzdoh9+;lbfPnB}#Vn2Jfi?r!?UhMm$*>(BZ~k0JcW-D7EwP37 zsqlr2{%)cl;_nIP{k9~zm%Iu*pPqA|Gt_^HzqioY0>dkLeZlei1ZmW-baqB@u|22j zPiZyR+O4{H=Rd>nR^1O@=G_Zn=O!tCN^O~*OL*&g#j0Q5U7h*dfuyrj_^5hsRNoWP z9InCf^)D*-#K5c#e$Mfzbwi!g_4@_-r*rn^yj57YGMC3^NT>F;--Y+@cCmNKEIffT zz35wbH&BoAX1tPYQu21P&%1?hz>>e(yFt9t4!YlMemHLreSPM=;Wr&jTQCltslJR} zsJ_!2uVv&Rn*2z$^Us{!yB4~!dyIuT!{XOH%+HK#JM37zjQAQe!*k1Lm^!9?R^`vw zW_;CvJ>#*&57$u(6nB4me^j#5nGWrRNVYmtq%@bAG~U?*&$r0PzdVSW@y(spINI-h zK2~O z3n=&5e%AL<9e)PS-1kY_66pzh!AaKX&G$s`lm6W1&Y=2zNPVP0Z7n~BwmyjdPQ`XW zsX9K)GV%j_9gYd2%`q!=O@cseH`3kZkjT>i2*>Uzi?7cAMlB>pl>ZZA% z=9}V8^HlMsxvs(=bK!PQ*#r7V; zB{$QiVOwRTFUSthvhAT={|fI2O8@oVo_xkR8t7V_{xGQ!4+0QzkGUMB^i7kWU zU3d3MMqT>E-F)j-<=viV=DUg8i<1A|m**|^S^TJ+#FnDuQsTAURK$1R`|vkA$^Pf= z*{e^BmocU#y80M@x4moj-uah0`>43&zfR$Qa^ZiPy_bG(?WYTutR=fIV}n$dDT8z` zp+AXrd7W)HWexL-cZzeXdQo_=+k*{OP|iR+xv7T?&R+i zvpd_i%AMKa8E~}jDijsXpxh=~}9wcpeU+F~EZ@G=%zPu>;^gy=;3vREN zZT#5wd3ko<>x#T&VzG^TWFFyHa5iu;f3x7fm_HX^{bZlhx5TodB`7g z_h;Y4dH9=VvsRp^v1WHrJ}>#S9$q6COcUPyZ#n`?Z&L+%YKCj!V3D{Eg}~$>y8V|4Bv3&xdiw z<|RLg?MjT#iZi|_d57X?J~6h4^Q3v*^vB3$6!oC&Lp#ng_sM=$^%(BzF`PYvLZ=7d z_E}C3PIY>426`~W#yxT>;b))&L-^~T$JoH1i=Uwfly@n7g|Ze8M@}T|B~BNX)1Q~~ z{cQ2^SA6_;IqTiUyd&TCH^Xy2eXfi1weLnc5B-(D@$|V#^tmbYw~P3rzn-b|uaW)_ zr2iA?-wJGheJj%0_9xQ*fpo9&H-xmqNjr*kWBD6Tf1N~sokD-TXm;n}A+tMQ9X`AB z_oHTazBYDt=bC)-eJan|m#2#M7MvK~O@dCq_s>=C^OXB5%KZ)HzGBNYe7{23zoG13 zQSS5n^{4C;Df?8)J%hhfXLoWxwBi3%WR%!XK2MR)Ps!)!j{nEWb={&rj zzrSLS-o-9;VW0BJudArD{k8mWKh1l&eKE0RQ_tSw&%Gw&)ERwX>1VhJ+IVQ@j07ss_%V{ zI|AUrlzk_D5b4J_eNNojy=>)wuXw)Q@ppS9nWyJ1S@~|^n{uLm0>27=w7!dPpPbOo z_z#Q)gW_X;(ebT4Nswypia{Jq1&aiKqbihh-{VXm+4Kj_)8tiInWIo@RX(*0G& zhLO(LF#36W!rHJd$}zGdeK%P@SiBe7G==wZya*e4rN-&guq?uTLfA6mH96VpPM+*` z4&xNKc39xzwto-ZRT+%^tg)CrthfiEE6?RFo=Fei2ccCk4p+dt=8}>{g1AqMr|T?F ziR&WCX?k9sRj=idGB?)Kf>y3 z`(oPm3jQ8PP8+O_w{IxcyL>k$1_q^CztBhv&x<2WI2m+*@M=7cgiEBBNy|Y5Alw$2C6-J$rIlv$r_lIDevy}31!OqWH&yy zoNU&^8y#<^9d}q-t)nIKPcd<-y*R_v7LOMtCqXlLF0yL|iEq*d-?VmcLaJTQjJNG` zHn76xeT~cOTz>z^yOs&H9c`-i8)fqxoG3miLO@jmGnRO!$-R z^k>e6e2#qOBY%y4{w1^3%KR`4DpI@sa()ErLFZ@Xu=PMMnLsebgyQl-6)I9>bCj%&?Dcjaq;U2U(m zt`npO^gUs%S?Sl5cVZ+t$E4Fful;UuOYEHKTh#{{qhr`~>G02pqqB5ci;}G~e(w-; zo%ZnSp>qz}Z`D34d6@l5y@y7e!AfuP9XXHtzgBfTKt9U*d*p5Q^kdhj?}{U?&i>5C z{x!OIUnd^@hIPGF>;;%L|BU&X@-8Sple^;5d(=goQ5l^W8{bJ$EeOFp*`fZc&(Wc;|U4-v8 z9{+3-{@E1#vx_2~yU~059^xuR(GZGPNI`Rjbw0$ zb;JJXKYFDzO`p@+!6?=TbtcI5Z^=pfYFhsc^HrVJkY4THvftM6`tX^xnDBeUBe~14 zw|l3M#kTO?sg=}6?Ke+6QQjTMzYsZ1*wx4KvcTG!a1BuU=&u1PjoM1OX!5O|XU?T* zolm@rmiJk+54o*Rby4!zfZr{(Z4u1ndj5L?C9I)Cg1&wm(N3v zzH4ss9iRU7Fg{}{`OwF<1&K4`Uwm9=L(}V%OOW|#zm6n>KBInV@O#ub#C>L`@#nob zU-0mkJp8X7{)&hH&BG6S_!}Pnwuk@S!{7Jt4?X-N5C7Q1|K;K5JbaCZKjPu*J-o)l zYd!o?53l#|$2|OT4}a3bpZ4%)Jlw~_CwTZA4-fS4DIOl<;X1Fq8a@0m4}aXlpY-sj zJ^UpPzwYJ#KOTP5!~g2V|B8qI&BG6S_!}Pnwuk@S!{7Jt4?X-N5C7Q1|K;JIdH6XG z|I)+1_VDjK{1>lY2R-`lJ^a63ocBE3$BT1{H9$xF=k9zoZ5C4yc-}LZbJp8{F2R-~( zuCcImUeeg957>BxLE#JGp9x=)BYb6!@YOlOD|3Wb!b2 zf!Kh}Hr zt@wzegGjIT)r9xW5zhSzz1e4z{-hk?+%<9B^n-JR56uxiB1d>(j_`AHgipv3J~>DD z)Ewc{a)eLM5q@co@JNpEIXS}T=LlbzBYa7Y@X{RND{_Rd%n`miM|fq9@Twf)HNA%$ z|E0l%A2_Wy|E4KN_{JRJH|Gf7oFn|U9N}AYgx{4Td|Qt2dvb)|pCkN%9N{fF!guBf zZ_N?@NRIH`Il>>!5xyr!_+vT3_vHwGGDrB+Il`aG5q=;?_zOA0U(6Bya*pssj_|`d z!rOC%zmX&SXpZo=bA)%~2tSr1JSfum+q?bgnZ0-a)cM= z2tPMR_=FtclXHYm%@IB=NBHy{;g{wJkK_oSlOue7j_`#!!k6R-FU=9YB1ibj9O0{T zgjePWugVc#lOwz#M|e|?@QpdbZ_W|EIY;w__iG3_v8q_KS%fjIl^0V zgzwA|-kKx)ksRT>bA&&dBYaPe@W*n5@5>SXWRCEsbA&&WBm6*)@E3A~znCNZFRm}ypT9|)pm8A20sz-;JS2t z_9%k};+zi8Pm)g!cm#2l+}YI?*8BedVIyu~5DdLLo$hqfokrXaHVLPa-?`u~lWuAQ zali@ad%%x@UjVn?*wwZAk3sM>_&{ShjeLnc;EnQv5-Ux!l z;FCTHpQJ4Y-+WtFS6^@(JoMA)dKZw#9^_I34em^POYSNsAa2v`Y5Lia?kA5$&@biV z1P_3Vzze}G;17aVf_H)^f@{D_$Y&(@W^gHZ5co+)?*~5Vt6g2wpeN^17qIf*41NHt z{F}g!f|Y+2_!+SBUkN@8UP0Ol@G(a(r7lAs?&@kK&K1z-d>wry&Ma`>Z&>U#T75d3v+5WEZ){jccmlJ9nP9ftlg zxCt!!>)`o&y1E_(KSlf}!O}D7VS>1yCw$?Ty1JeLe;WM4mu+}H;Z@KU(C($Hkr#Lb z;f3X0T@i2tc|8p#TB@C1JV;#Ptavb!u6!!tyXrtDeFgFVLjKb~lctNW7423=4e!0z zRrw11llB2{$hSV!G78$0r*(B*+7<*~10My4;X?`Ug1@6DQ7^(TCw#=oX+7Hqt+fPR zM`f0~?FP>WKS`XO;41Jw@V|k#f?ojVk+u~) zANXg|6ubny6+9oj5qul?G4NgB&ETovo#30n=Yn^G zH-bL}zB%aXY69P-_+Z(|BZ?1}oxHMyHV0RM`$2yZTnT;zye+S*Yvb>N;4*MSAL!r< zz?;GIiE|iy4E*HF*njXeUSgjP{TXm6cp5kl{1|vD_?=?Hz>~q-!7qa+fbRtdeXafd z3GvSb7efCJ@Kmtu;9lZf3LXmH2VMvs3?50G72wmrtDK# z_!u|=?gt*+ud8ciA_yKN{<&c35yNB9{#*0_TJS&gLHbS&_+~KQZwpp~9|iXXmx7-J z^F66xKKK~;82P;eKIu>Ib#;J`fE&PXgU6PJyc)a}`~tWMd>gnFyc4_` z{4MZq@Xg>0z>k49g1-Yk0B!<*A3XW3_qrOu{lJ%kYrx3}bpTg^{|H_Qt^~Ibrv|(l z{0rzC!7ITpgSUcLfM*cr9&jo6ThLp;OTc@;yTJ>=XA@O8C-~M zm_UqJ8s4*Cp!0z4Fa z6s&wEfZqTspXp$}tsbl-?R@ZIa2$FmI02pmy%PK~coXyn@QdJD@MiD};BxRb@B#2( z;Xg z;B&#P;6H*B;GN($@KJCJ__yHTHS`y}2|O5lKe!fL2)+mWBzQ7-8~7pcbnso^$>90m zt>8lN3h-^wSz6aa{9sqt6+yH)&OYdI*A8reRSHKDI zw%-K7^WgdIv?2dVK7IM!4E;Z$-+Yk#!F$15!5hKf1>X;D0`CIv0f%zk{43f8+8YBI zUlNQ*v`60)@w35;z%}5N;5Fb0_#P|3*MK8n^@nMsT>)MKUIM)Vto|?ud^1@6;WXlG z1*<>w1>XZ!f9SZB_6A=Hegpgncse)%-UC*DC?)=r;HlvG-~(Xwhc@E83|4;_3H=zj zl#9`JLO%(==*8bsXYjf5k%)5_csf}9VKaC>_%876;1%HMzs7EY_kjcc3+2;_e0D>h z#+dTJ?`;01;QPVKzY2U0Sov=SZv!iTjca#-o4~ult>nKI{3Q5h=+)o@V2$sqzzJ{@ z_$si*vIcMoIAF}G0nY%R2Cf312QCE59~cdu3SJF96C44r1P=f&0j~geUV^;}(n(8;2@DW_jqwv!RKkXIjI}MLthH&)7oTN6zZ%+Wbq>LO-_e9P1z7Y)!I2jzUvjyS_+Zhufj1JT1$xJ{ zuCCj__ka&ir(AF|afV((KD7Nh$~tY9t^al4f-B%1JzET}5vCse1rw;-RA_JS#g77? z3vT!!^HS=!@WbTyIQ|m!E5L7n6Yw$%+^`Qlr_48IP>&~=r-R$URp3j(FMzj!_ka(8 zcY_ZjkBQ{}B3S&s41NRL1i#-SPQi~XU-^B{<70h! zWwf%ex~{3du%WuLa9m{&+fe*r4#a9OPYu5%- zgSF)~v7Tehog0)lH`NErmKQBtxOjPC(KW^84Nc9B(PhzCth&B#X>(mub#1i7yjw1i^%F4yfO%2UWh@d9A z4*o71*HB0f`Y}-i8tP-0jjJr25Up!!td4?fnkN@FMjL9%X)rxaR7Oi0qwA}q8y1#t ziZ&LKYJzQCQcf;xXrw)e8k<}gtE%O9Vz4P13+n3mpW3ghE3YY}y=x@WnKnwKaBU-^ zTNb^M5^9ATFDB_o6xnu^_W^vfM}3}vYts-61{LOm1=UtLV8P6eSKl97HOH#+S>Al>=f`)T~SzDO{}Jh zs+omTH;&tAB99pt8v~P8dN9nBfT~RK@xsuw>w4G;W zGeTHUx3+%fabtB0oGD$cuAp@)>YM3zb@fe!_3NXJjn(w}%Ia8!9yS%mZ0AK2ZDi>} zVER*9O_2$5#1uu5Yy%BFxv;5`cr*lg*P*sjO{=d)DXn%duWqWkvYy7Q!v;{P*x#1V zn&`UfI#RE#Uf0}cq#|n=vY;Mn%nn^;B2}!dt!{c>ktfq^H$)fI(fwSX(zE5*5KIly zT=!P!Wa?gr9iw!k{+PcyOju@gWep`POMN`V6N5&Zg5>oLJ){oG*Q1f;Yigp`&}7K5 zGFnl(slnKPPYkx~YMR-TNS%g!4!^U;PVmK$SXlzB4BRV&N2aa<)0;}u_6Q@u7? zv8kdais)(^YNAci!UvXVIydmP&AfEJ*!;m~M|k!ioV zrgeh!*gdys!NQU`y|yy(mzmUaOwXKY+s)=O)9TS2xUJLB8=JWn+a=|gxjs`@ilhk( zt7A=AkLEQs)fML(lL;GX6^d0gH}QnZH#OGRl-4&_R24zM=0_`+SCR3Y>X_89G9y*x zrn>Ul>WXC_j(t;#AYMWg#m#{nL#m0Gbpw76*t%t)L|{MyraOr zBT?TdXT%m6EYV18+4EUVRYC^1o3l`hmB$lv+FWRrU}oW@>*%)QBC84~)HhbIE3Az+ zRn=RYy%r0L>h_+%xdfQh-=Ik&p5I#xx?-hhc( z6s@c-*SKN_L|k0w|6GF)gkN%A6|Qn7mGL$*G3bGQ^@4@vYoaxUo>B#kj5#s-0_G?y z7mR(ABwS-1t%w`$0-`OeD{qKlybKSnAfG001*2EqSh%jSd=s`0d#7}Bdg?(ajTH#I zoEM84-_;4La0AX#1Hv;pqQO-4`lua<$3@N$Q~Kd)f62xS1)q|;vI(wUVETlFoU#Ko zJ=$F7VlR)D->@{gHpuf_?zwUtm%{MU^15|VKfqePK_1E4G>?!TZ$0ADXso_weYDba z$Ys%{CNuzd(oA{graEfg>5hcas%~no42v$Rs6dpB_4K7^#Om zUso4x>K4m#XcgP#ztkv4S zwwMLPF};X>%;e>hubg~Mne8q?+1g50y$z+RJVy3*%nVZDnwc^9<385ZY$~e!XmhM7 zW`>kygmee!QEMB`nqfIo{w5+*7CV`Qpj4`#^Si)+b zPladGIFP=^S>|GX+V0hHEX#e&C_0t6vT^|vs*N*)n3a1h+h5W! z9mO?Z9%&rn?jCz!#Qu@``r5fj00q|Eb&Z*pH8OOO{l*ex83j3C`}ei=}~FKX}#0b)U(FKYG$ipzd{*hhGW6irE{l;3eqUE z6AQ{J*4Z-DC5#d-+k{E4mEN0)G?N9Z*^ABM1ez_!#8`yNs66M2pbVQ)j(U^_YmMz9 z*KRCSMawHqw`!2ziYpdF>1A8eEni0Ei~&n^F)4dvQ?qKKe&m$>Dzhq}<(QfUbDX9x z_WD;?f^+sV_1G|u>1`;jH#(MXtC<^6VHso^*k~^ehK&dnc3o%(ooZLt^{(318L~{L z>KA5fRlB;bch&Z7tf!rrLf6?)QM6dn^MZ{^&a@ghf6mepXSR$6YFWtzr7L`OLk#;D zEv-WC^2>~}GGH1DAl-I)sT|Bi%xJ!Y2;Vp&Gp!z{XTLpk3Nmnhhgo+ao0=M{O>|jl zkkWjlzD|;t10E}>#Mohj%Ny|kW@DhGIxYnZPPIj%6Ink>%k-hV0+Z^ITkA(9vZQuRw32nt(yHd#HFZpX&Cs8o`le&1OtW&c6D4P; z!@QQ3Z^)UQSz`#guQUW^8f=H`HE5DGA#*Vti`Ooz{uu4LroO)Bn(`V}^VY~gj|FZt zjaH^QyPY}|m)BGirm@a+RZDgKzoNVjUGV#Xr8w2M523E|gh!L=AAhO2t)C!~99mtecY-W$*GFt;dWn=kvRQqv&y?RtV5Soq5{#c4K4f{{ zK}at(6M@;)uZ{23zs!j z*VGu#)>GAL?SJ4;G&Gp~GtX(98JMu_DgDeGD=H?Dny1Ju+1qSPvs&NXWo#(dc!t!c zYl>Uf6kEJjrp^nH8u3_H-DLhz9&?Pvn`zcuZIGz0ozYWlJvpUA?C4vqC3W)P-z7{a zalOqNJ3mc!P|lu>8UGgtJ!7Jjc2g9f`JG~z$un(T;`*3RGxG_b!1`!Ybar`-hGx-m zpys4Z)LbS*^>v}&YC}y9+0I#dUTh;}OcJtlvF0z!tzc%PB>@IUw^AFk(X4n=6-ACN zfN_I)eXP1-Q8{2^Z|Qr9<}>VE3oQ@Fz-sv-x{Fqg=^#>FmIxc^Eg7;%^~dfdTb}J8 zmui*_V(8*gV(-#Ui=yO4nxwSeP821AuxVukQdRK-vTQ;s4r!&*8ofd4$0^ZvBcQ{6 z8z_5|BF&f4g>F1(7L=;?{A%3cI+D)E7~svDp~!hBK35qoc)ElPvLD}{k);aDAbK)h zga=ejUHlBx?XGW+Do z$`HD>sj24dYMf?eVV>qzM{6oGB8DL>GG$Dq{Ti60i?Zh0Jw(tJ7UJy|;*Aj9!j{%s zKc=W|T}@`UFs1e)o9$umknx$dMK$OXsJgJT3I&k^|IzQ zWK300^g0z9#)BnAF}SVnWdzhI)SyC`W-ZAfw9<3felPme5MvI!>Ov>kmmr4jh|i- zaB~M^TH(fclx(V`X8qam?S`96)l&lJs~KL>#khUC#(IvNXc}Y63;jAj?gsqW+2(AA zJsZ$d5g9xw!TYNOQ*2kd+RW}lxgC@S%@)~xOi%o^6OkUl+&Gn*&T^hceq}h97sxoF z^EaNx@fXUy13mWeR?n;9ERE}Am*?#}iq{8%23uoohqA#Rt1^b5wB9UB;x*&=u=7&K z5E?M4?l!0L@+R1{m`{qb-B`29?zx0{vMpK52Buk?nCTwu>^1W#R@7uRA2eyVNt~+i zl(i@h0Rvvi$eNy2aS)*14tkdFj+kO#?Hl;j)Z0DM_WgE(@uKWI2 zdiC@8@lyL}-J@AQ;W(?HCW-Y0d-128t6?L$*;B>?=j61-W@zp>hI|mSL`L=e^p2hG zgKoy!gUKm0+ZtIj2wDEG2}^ma>8GBe&G+^vO-$>;8t4>dZFieU9dJ!DHhD}6JAbwC z_`7>1j&Hc}IWrdYDZ*J-8?{IO(FEC1%tFn?Q{qWEcZ=&Z5G;(YkJf}Hj_gYt%j;rP zuGSNasbk17nvTpLeQ zo%zWkh@s2_hp7_MJ3i?&)*u}xQRvpY!AEM)eeWX7FN~a8)XCnM$c|_lExonDFleVI z)@A+wKkwzr>tS=lg>>J1$Oy=kapqP;Dq_x^gfM3J1Davmuo2+)5;%Bk72e6cdX@ z{uviHDGj4?OhmQISV!qOEL7cezL`rKsAlF$Mk*U`ts;}wJq68Q?{GX1}# zF}oZb65>b@4xI5=bC%OnnxRJ{RylUIP|0QhXAM&l-O$Jib!oj>iLZCNs%{47N^&t+)STHZ!pEXP%sYjg@vtO3 z!sW*>3l5gx!I1bP3d;d?d#np2WoDoY4-A^47|S>m!wIhxF|~)l0LA3a3&Eq#p3TP0 zDX^>Q0jwk;FCB#xrskZZXbSy&4iQ%~v*a9BbDdccv_BdG{WZZrmfb0@+59yGGYwy_ zQz67R`{U+86`idYee_CCvAP9EmlR6@#q;dZg!P&oWX}Zb;U}ow9rjdE+Fy61?1eXz zvo|}i(fk8UmXa}7u%zCKO|9Ri79P#4J4PzbVP_el_5P8!UbpRI!3GW$+ZkevNn};2 z7XN|`-Ugc-a7(Z!bIig}_cIB{v3R|kx(KhNO`SPCSbyO({qktu77-~DRJuUkO1!ap z!Hu`L$LnvZZzxAuiWgZ0^wyRy3*#(EC*_4k_b@yBwT0bCVf>l$*Sg>1<{juALvvnoMjU>$s zA&aS^QVU+;HKkvFQ`wcvbl^?(4k9)cY}`nJjw{2-G?OqbMk=NU3Lpqm^L-YNUu6W@ngBhGOv8Hw>`#BU>eDL5!A11xCm>E)G~Ln zeT=GE`Ty8^ANVMWGyZ?>5+EYtiBy6h9*Bwx7$j;y)P(Ranm|kfq>3g-?vk8b?#{bQ z2oyCcDz#Wq(c<5x78R9RYH3BK8Y?O)T573AMNJhgZPB9A7A@7^GxL0Q?{04Ql3@G& z{eG|Soeq=t&NI)(=&*D+a7JP0`nNwLqw^lT>UDsH{1BG*J!|CK|_93{G zp3jU@-`G+;aPg=DRfA%>OjfSh^r%Vai^9`YGvIKt6rF;qVyWWAR5R`cRQb|UXv~G@ zQqj@!Wz2KqXAOPJD_~&yQ_7!9@zBC2%NE7wgZgun-MjsUlspIJudN@ggFp*L+A6Zs>@}I?UOJckKbheyr~kW`zLa+yA$HK0=R308o3h2etd$NW z^vzwzJBEurv?RbD=YUmNj{VMZS|lZFz@99Ulrr@HYFgjwo4eLK9rrlLj_nvOs&nc4 z_)QM_Yn_wU3fSZvLw|NT-BgM!7yY>^YcMUykhMHZO7x|}Tl>nxoqg%>9`)yezNBJx zzmC3ic*kM%_nyNF>Cg28Nup!mZW(dwpq%#a^w}{eTgDtjB6|n9=)m$L<$)DP4yP23 zlv=kOnN5ecslRt08K%E?4wfQagDGo!2M?wLE50KIcYS9x{k`%i`S<#xWTcJi@6Mx2 z>F;$zWTf>&WCn)h(t({rrqO}++%c5>+`;>EMOW?sIz0vjaXkI)7Gp%c3U8vnqoR>yP9hay z(M*4Z#bi1frtoGFqqj!o0y_H5`^n8r|ijZs}(HO+JWhBRy z`YT0=C=6U5v>F)*# zX;4hhvyrmQbATl3h#N^uK;B_v;Q%Ex%i-~DOEfh=2%_l!b(uv2a#1hivQ&!-z z(AV{pA1Udlzk&#nc99m9nir8gty@DWd8u4Mir-Aq(vC)`o8lVB**b+}b1t8>n#{M< z!nIRJ=}7Cx#M!XpNn$KXM@hy{+QUklv_g<#%6zp@TsLx%niHd(w8{e6UzS1Iv(7A0 z^#8@YMkpt;jmi@A#CEbpux)x`H9@wG>z||QC0;vRzrEGSZL^ZBEzcHt7EC3*_4J=? zqp~d}pBeQ23?1RRPRxz0Ygx}Rv=@1vg{d9M+ShBysKGMQF5A3^&KIMdaw!tqB5RVZ zkNW_YVC}Q%JfzQlDOC@pznF3?Tegq%g~VJ@Axi0})D@+iEu?>C>x!vdCiVr!dF>{d zB`SWD;>ojKwre5Mr7}a=!|0K|T{?5A&CFEiPngbQc~(d1NE4M!_8JxBf@CjQFVe}g z&`l%RD5u zdf7*`kdrOaLv<(f9#2X34KmF-vvozq32q}z*@MaU;GtMDp7;M~4rY*bOQ>~DC!5Op zku6(VQ1*~vI%3oZGhfeSdyu`Vta*8zljoXj>k-x8$!m?Qhj^{0+J?{C)P7f5$!Iwd zIs@d@(>^t>v*b9^n%ug^%XM!=E0u%)lBMIbocn*Tx>CecZn@so&`8iYMC6d8Ws2lb zNwo+k`Si;cF5#rY$uUwksh5YHBp|tJ>$46a*C1X-2W1_`2FcjW>JR+0V=0YdmO8}p z+bNyzIm8}HC69c$hR^_Ur-(T@Ua3R$sdfm*KEjpR!m*vklBNAb7VR%BR`(Zo_; zARKvz31{_TLbwMCNA*DAY$e}&IIY`uxNz(sfAAoZp#^|rPX>;9Z5O{3&*y> z!nuch@g2(NcZ6g0cZ72*`NM|@=c*yXv5tJ&^HmJb6;5xiaBL!fJNel|g>(2&;V376 z#ZX#ni~KI)+M_A2M+?VJ^7DrYN9i!(Tuy!``FqJ9FkCoC4;PMB@>h|+o{YWuSmDSg zn|j^CvDrp7}vytj6oa4s89vZvCRJdb4ZsD39>ekaoUVfn(*bvoJp z4B=QyL-!SD3WuveWY3~u;cD`?l0SNq$S$WfoYs@yN&dFUBD?x5(nD)(ttb*%n`nHv zZjQ)mE2s78DnwRQ73r%MS!=&5L}9JS+EXX`7Eq&DcB$xhAV75(qjjeii$2R1ll)Su zzojB;!!qIANsVXhbs}fw3R*|%Hj%aJ$K*dGvX=dthWWo1ecg{!U2GAKm0L*HR;sV9 z)M#E6j@(yi?WyflU)!l2>=2HE9hC0JB5UwpY0aungyX;`WOrH@dez^l9{x_{+AI3) z`dT$e%4z18u|UQG84F}Akg-6<0vQWrEReB4#sV1&WGs-eK*j9|E~)22%kQ&RZO4$D*p)h^r@|4`qWnW zgW=Pswu+B}PoLK+rUg-yPoL8&pFW{g{xJCTsjT8-;E#ZREPOY7`gE3luC`I|kAqL2 z(9+ME~*b-*`*^Wca7R9}9mR{PFPVlUn+@+US#7FNQx2 z{&e`X1P=XNZS?7`@@K&>fq$OnpARmDUj~0R{5kOH6JYwe+Ae@!0lyMHe{kz+n+u)? ze?I(b`1I*8{akGq!oLXq0{9ohzXW~_{95=P_zU6J!S}-V!LNtk0KXBwAO5BA7r_s} zZ-O6$AA%o-e;ND;{3!ew{ATzq@E5~xg}(&;QuyD4PoGHB&((H0{43yJ3BL{gRq(Hd ze+~TQ@UMk`o$~YAlt=%#@yEkwI}%8U>(z008+odV` z(Dvcws-fA3=c)#1AKukX_&U{a?c;}4gSHPZR8}y;^Q1A<&-iPbYRE1zS~X;ss6I#9 zsZg$%ko4p8p1yBa4c#TisD|zmZ2v;xkkJx;+`rIw@wM`xOSnAj8}jt!f6|ZpH9L7X zFY-V!^!gp3P6Ye%S*LHWuP`jLW#~(7FNLb18{vi(1ubL1KRrFuo?3Ygd*-T!?Gh{C z8}=CqeTL`8A6K0#6&aLjj}13SL6^vTQOc#}f7VSLZg)Pc?k0T43yJaL<>&s0>TfHD z*S^HQd46U~PR;L*PI)xdo`&Xa?{K)$K23dSpL%NAeNVJq9e`gQAiC_RFY+ttHbEqsMkE8J~c`>8*~+9{k59>37~7Fzh@-Gsl1 za2_|M#uw;Uc^s4)J__MHK1vNg2jP6(OAWsV;eEI`Df!=ka2}VX#@~YQ!8Y;VLb%H& z{I3WfX%jv`^@DCP$|n3&gdbuPUWM>1oA8!y!j~f4&OU7jpJk)}C4?LOu--nL=tuHx z;-87|9Gmb$g!k9Nx1)X5F5~t&%qDyd!cW!0jrM&$^h+)Br{}*6;db`D0O7}QbTht@ zzx_!6EG^tf|6#&BK!y~+^~Q6axVWwE!-&IpAjF;$*eyk{O<_o`<=M`4E>$Z zKg~w}@FGqhm!%Z_BN48je}?{rS8#m3KS)h~;FTP1*S=4Le!jno$2ZD%3BqS;`8U!J zLjM>o+=%}G;`4oBs{Ypzu7;naLqEUVQ`6_a9N~8PzaHUs^>-7(_4aR+ufxWEM!36; z^T+qMsri2p`t9m}55iBkvEL|M=V#f3FG9H9e;WC_0{P?n>v;Z*@LdSk+rJTBdKH&X z-F{fqPdn1Dw#nb1X&m3KerpkK*FV32^owltFGGC0>)&++d}Xw`)HSAbhlq{#Ovr z^NMl%8ukA-gxg);k0{~tpA7x2$I2Tjm)Ht_FZ@O~A72H(3x3{6KE4kAe)zLS@$ohA zcf)rb$H!~o?>~gOpg;Sq@HfHV55M40gu~wie?RZsfKF_T&7}cb{jA)c4j>;v1+2sPg`>07G!7V@1uMoPwJ_)h?#uIO(?&S$c7!O&zJFB;s=YR zAGdQ3!mmO2y;}GHgcsX{4@US#gtsF;C8Ev`7s6jhJ?r7Q2>&`Myj(_C@r`;mzBf_< z^p9bWSrfQC#&K7ctY??t^NIDyu&c;f)$_fuYhf?!DpMSee3#9ZZlOLd-{axXQa1jQgXfD43X<*O?qhA2t0=xzeg0nQTLtai zdu=4*f=iTUJub0E*;h)X|JmiI>mc$Y+l=0BSPxx4zGZ&)|CjQ^dR(G&vaGMR^v0o3 zJNxug=Y8+$%gR2i$0hcE%lwS^FXe~zxWw)r)|cIRJ^}q=Z7nYyv=Og^L2={8?1qi@AzZ~^lk0EUw6=Evl{XiXZwXHZ+#;c7B*!)$9<3{|IirsBEEZk$Io^k_I{6ZWt z;@_w^9zUm-@qeh|yV^FWc(u@O?-e4*NdG3quD0B92UmVR16^(V4>JDENZ&R7;L^VZ z@z?aS{3WRWTM@rY#i#R5wS%75-)h7c2U-5x5Wn#t+u!Yozv&?3{|NENDEo75szWya z6ymsDzf+~`8n%g@de}{eUyA&{41YiD_UBU0|I>5WpMvnefDbL_<3;c*;0NF@g?|V9_3(#Y z!14N5uzwu<@$jd?pAG+V_^-epRmt&Agg+I2E&Okg&*M>!H8{Q={x9G^4*vuAU%@}D ziuIoY|9bdO!v80H*Ibr69sU~lKZgJPc^rP|eD=q~FGIUn0N-dQw}M}W|1tbw-{tt@ z;GYYBKKwBJJK=AH|2F(jFXH%TEnxp4_&35nZ(qX4U#MZf6aIVfzkq*KEr+i~ymD}s zhmSu9|CjJL!QT%5WBC1W-i&~MI{aDiYv9+zH_o$%!5eViJ_$C?yHmWJj~Vb^f&V7_ z6MYLim@%za9QB;Xe!iJ@`dU96tbm6Z}u% z{|A2mAj=&GeuO5&Y%wFKUK9_`iX_6@H+M!&}gfe~0$(13wKOf%Eok z#M_JGAHshS;cp?IkKud_<2*bc=i3X&*GsU^$4Gzt#hj0a5&s$ZQ*rznl;c?ByA^t$n#<{jVApFanU^B|y~yt}_$A2KS@4fUzQ*8uyb#CF0Dl9! zOvHJ79qQ!}=qtkUy7M{RQ!ixyIpo&~Jv+hg;ClBu`jr;Q{{h#9zR>p#?AV3lLvTD7 z=?_D^{Rp1}yR3s_T~ehj@dKk5`f2c%0|u@Xvz33VMHncDN7q z_jlCmYsj|?`51)sKE(0O@N<#w6NtYC{#(#<8~pnqzXE;`dOK17zeGJf3_G8S@P(+4 zcaY9;DDMH3GlJt+Al*lh-toxqS4i((wCe!Me=+Pc81?Z0u4`FHuP^u?@E4<=+R+}X zk&l5$cO~+B7xMKo!mGhogBKwFW*nb_^mbspdq3D;#plEMbJ?Gc^Jx+Mt8w0cANl(V z?e{C_*@WY(pr---K|k1gF8Ela_j9y|EwINSu;XpW@4FXpK5mA;59$0A@{P#PI`ChS z{tY<4UO~E#BYXn#y9M=7j__$ncRK3JkN)@)oNw>L9(m|ThC=R2oEH%zU+`zZe;?&L z96Skj>4JY2()U9Da_GAg;m4yqYjIxR4f_e?|8GWrfaBv9vAvE&{;R^w&EVgFpMZTI zY~t`gAl>JXpC#y*kAQuTM|%H3dS}C)D}o%~h4eqhxMw`#2aum@k^lP;{|2KR2(Lpq z^WndV^YWiY{|fo3kpBwj+57NsLVmtPIcDR0u0}o0MLCZ`xmSQ6!};-5fXneA;@^$) z&H?#*AlCtX-$ywr(H_3R@pI9>-hlp}p&s8yzOO?+&<_7!u%8?C^CI$nb%gVCEBt*S z=GCy{^{B^92>(5NH;!KbefNT2LwbWDR||cA#_=K?Uyb9F5Wf-e{{=fdbphvN5qvl5 z`$P0ACn10HV85ZTLoMp*4&3kF3Ex=H=PvNw@a@+3G3K}Qb$;$aynEsQ7=BOJ|1svh zjCFw85&tLf?}KlwL-bSdTKMN5K8}p1jU+8M%c|TX1F@I*vLmBg7 z#=Mp>zhul48S^y{L+>N-jdhHS`31wC#=1yGIa#j5eAX=I#9id1?WV~cur~L z@0T`mTcIy!B&Wa8MsAgQe&`a0zF*nMxgl2#eZRJmTc@78#q~XIBiE^=yU9jwFZ8t` z-6w413i@(6jdDC`Bi9DG?a=p>joemE-)0**S3geIjdjI-VhexI-u`a8@X1<6<|FyyYq4b)=4wUVfgxa)B$}fy3yxW>!HQli=Dm# zHIG^-1QsaVE{jFKZ|EoettuV)SLTp5POdadWUVFFNp5Vm$SNndEL-$hM{X~wxwpw3)lc-BO77}@BIh-72gv2;h@2p~HRL+TeMQcFh{%~nZaKNv z$n7JS+h62NCU+sZR&uxW7l&*j_c6Jn4i)`plM9l&o7`4%`^cRzK=iLCcLli(c0q>m)Z|py+=xxoUDTa(9yZEx8ZK4LV%(A5X54+;VdFl6#HZV3+8> zfZQr_8_Df(i9=5~LL6E_u8rKImefR0J(x(k+quK z+vIYGimZBao5+cyMb?y~#el1i7S8oYi@y8G&mSfnZR8#uCI;*zKW8`{8!iUa4i}Ew z$$yRfoMWi{k*hyO9P+?1BKtjZ{YMDrWODT*$c`h#fT!ti=domOa#hEQtQ*K}CpVD3 zwYr4dedInSciKpiwUXSY@qmfRcUMja>m){|=|_d2=Zqeb6K$hD6aqGonw zX{bSZmA-(lE*6T+h=iIdV-bIlkE*}qvEqOy8dZYkAtQ=BIydO`MFLAG+Vn^y6gl6w zL>`?H3dV|J6k%a=%s1Q9^~Zc(rPfwSna}I@R4oZp zu8{*>%bbY6!5{Plpr>eFu_qjBj`*heTKsiB8Fgy2KM*Sk&i8wLMZt!Eub7Mw@rW8z zw9*%iQc0%yy_GRfBv#QJ43ZINhhqMEe;o>GDNF_IiEO+&bS)G;=5O*T0X;pl=<_J! zA(>tEM{&sOtCPi=HGN)j>QPxiqNcd4($f?UP|@q_Wli`zG2e_(MA?Xs=`u5YF)g%; zGFIkUM3yfulYduuf(_;Yl@-$1bgdQCG~IO1Vl1jAxY&D)rMMp2Z1T%wwhgpwAPT8S!}ibON&$6*$8m2=Lh| z6{|z3S}T1qDW`HZ-ydsKe@G>ULe8ZbR2*swhk}%ltQJ!!L9fap)zK`UzoAiO$2dY~ zYphYmQU~-X6~36qPhC&(%<_;w7(-K0UDfoMM$dsq>RX7BzFGo>yEmeOA?X%cs}KR$5aN zT6k$)4OMY8MBNX?scFd*HFdI&uBlUJTuCq*^91WiF&}O4#Z(tw=8H9kNQHUS5Htds zlt7KIwXRW~bS3gsZZbMtvZYGd6QGu8{M}5K4Q{XHp-`Ya6t)Ryj*?M1dOQkQvpEu+ z=Ls}ZR#o6aAN8p<)c4gH;&q|$lKDQ*A_#bWQR?OskNAS#qzJxXv+QPNw@}t>Tq=}u zGDA@`8mjYCr{tZp@KSYsQ6c`IKbDY4Ams5%u{T;3ieGG1APf%C2%02a}* z;drX)Sx>q8@X*yx)YOM*kQl3{KgfvGebSlb z3$`dfEc+-nwDKuE^6C0R|27AeA8l-^p-U9iES<}Bbg8RrqEPuad{h`6q5rAZoDuJa z=}+!~6T8LH)D)(-*7?*}Kvv}J%A!cbvm{SeX{1>WBjvGa{yNz!cp}LGi;8DVrM}DO z3C{2YRKueF*f>-bk$n?!k?i$6)XJy%>OIW?Qn?7%2wZQM(16hBDk;5qv-1+)Tzw%CD)g8x3kOH_a3C%xR9L z(W1o4BQ);zEiUye>8^AC1jsChQMicT*DJ6f! zWo0zvr^}TmNOwAV<=WhSXerT6oN7%ehiw{+bwk0WIH|Ibev0Dw*_0AQXG9$hiA#d@ zG>}eGHoH<@lNSbj*6GjkL>sGQa7wgN)wf&gDj}=3(hyOLgu#|ao%DJb-&Lj@#Ryb8 zKDPt|&ZP9`mdIONO>}nU91JXyWX*EhT5WDgsb`_=$ocB&YYNlAuFg}}XxO4`dR0-p zTS!VJF{o(Xj0oLlR?rwn-8gCavk6YtkaQ=Tbh@OGOGyY?$fQBKnp69Rgr$xYDWj-n zUqRRNP@u)x!CiQ$hmdyRTBRHpN{GnYg{meI9<=9&J;5oVwm&rY_a=!DY)uc`R{I;6U`QTpOOD=rGJG}%>oFz z<4kPs=Vglxzm+mw6if6;XjcWexScaYlyhx1S~rm(C9p-RSi{M`pwy{<_diWabBe@w zl1g{l3^`p9GcEpzBgK5ba8%H(4UI;Yh{qk3jm(l@m=scZI*9dtN@f!!|o0OS4l$qA3f7=tx^fza+oj#*@oyt%v=-(tmz3+sj zK61_w|8laeZqBkc){nBXMZ2=rUiI%LWv3M{N}FwmwVs4Rw3N4;%3k+mnFf0+E5%^% zQ+hDiM_D!o`&*V_u+OrD(>U=e{Y^B}CSGzRHdY+`S5}tTbrQ|n?z)WrS$-k?vuZK@ z(^*ID38lWh4|RFvp{QT=S$FjjS@A|hA-MXl?8D-TvN!kP(N23Gs*{_XWPu&(-;HFol-XSNLfBAEompGuM|PNsiW z$LODR^g(GBPeqml=hArhK;O9hRsAp|n;WI>RUXHr<#qkC#QqZ~`nJ*Z&xYgZpN=t< zc$r_`T$Rz>pm@2TX|&(<%NA?za8N!s+(yr0Qcvy@BV_aqIico&SJ0yuCygg|^lKFN9wH8bwP-*i?R9;h8RD_NGkvjyvcK53M7-IT zrqhvt&zq$GUwz9wkwxMMriJFzi;jL3K94u9Lr!{6r<&o$l~X$AIB&j`hy1j;95R>$z+?%dqm;q;S-b7KXusuhlD!>0`oSGn7r6gqe`9nKv-csRtQWUhOP zbYnRhg-TKZxno&Ru3IAgC;wgR=yVjUqsJY&xnuK4WxjiKZvI-w@X=%4TO4~F!zsbB zvEjq>@{}fuqyDG#Mi0;5Ku_E@IhJj77A$v+b&qws-72%BSN*E;a)%e}&K@1x>KHwG zG)3Xx*x{oo1Fxli^cmZk zJ$7|=X?3S#qhphEt#gNSr?V@2pL4Y%u-UoYvD&fOxzDkd{;HxdM*;bPt$nukS(mda zn*;)l?amF3@S3b$S^E!Ne^_;Cmve=~yEl8Sb8FV!S)2OFQdZHAN;kT3T~_XX=Q?L$ zb>7{MM*cG|?&qnn6^^{khqh<6XYFxr>J!-L*wJsJqsy_%vCBbKpYI+sC9uUoR$S}Y zK73VnwQ4N%&&flD7)YmAwfuOTerJH!9mQM;u05K05qKr|dTzU z@wbDshBNO5p9vPnvc8MJx!`NS`QY{7a`4;W0GJ*Hs`OTXj{~=Z&jD`+(<4JAzZ?8R z@L)IR=V|a*@Y~>a@Bwh?NR~g2$|dd94lV@KqeS()7#sjE0j~hx1>OeU4BicX4_tj5 z>l;M*mg%hrPXJSIt$t%cp} z*Ms+fe-6$*L8#w{U^niPt4EzLm z75HuNI`B8(4)9p22dTdcTn!#B7w(|n3UC4V8E_T&&)_h4AlX&wqY<0>6@c5p3&ESf z*MoO~e+(8h@R7eK!MWf+g7d*yWJj4^EqDTWC3qfqE%-|CX7C2^PVi3fez1e=BJ~d* z%lSDToChug&jMcy_JW@UF9UxHUIQLV<(B$4f){|dgMSL%4SpWHZXD<5GjQ8@W@#s> zZxeVnxa(97Zvqd-OGvB0dEiIEv%sC;TJTrkmEaMSFPYwE@VVelun)Wsd_8#Z1kTTT z@GS5j!Hr-il~d|p2_6St3%&rn>@?PQEqD$1QSfH)JK){mL1ZVXKW8GxKO4La8~|_1 z=kR;MJHRi17o5)Fd%^ACQ^@X8|2FWY;KDOl{-@vt;GN)BaDTF!jK2F8 z8=P|{>wg_Q8r+}kCiP7L&j43}zXuM0e-2&&{uI0xJb~;e^=$@6z@6Y%rCFr@&$GN8r`qAyh9?-v;p6-~m%Oy+&~1+01u>Tfu(>9{}f2 zy{Y`2!}8~VXMv;O82B;pYVbbrM(`O_Pg36w@Ivq&@M>_*xt!j1@M!QcWJejl5bOaj z0RIHs3jPSZ8a#^ZqU-~%18+0pgLi}f3eGO%{NzvK_-^p!;3?oIz^lMtf;+&ICv*Hx za0_@Jcnx@Lkx;+w;MK*k8x;BDYG@Lup*@L+03 zGQBO}DsUJ0X7B;M!59G-n1%byC)16P7qf+OJ3=d-+Qmr{Q<_;K)Z@Y~=G;IF|u z!NZF<{yy*&aCxavKMy#!jQJ*T7kDFh-E0p36F5AFx&KtwzXg08xUihVXM=Z(z&)+XjN!J~uB4dB8s^F!b@;6H$;#W?(Z z@G5W)oo7=2_7)DG0AAC|TnsK;%6tWQ2l#$))#V)i9=LWn^H4hPr2bjgGFK5xd*@!q z+yY(!z6?ke+1qDcF}n&)62P$!;b;ax`}xzcr~~Vya&7iyk!;3 z?*q5q%sh_HbE$vBEzDPfcihVSIC#u$%zpweznys|oyRi%t~JcEACO#qC-Yd6^ z@VhvC0G;CdI_c2cehrw5Y zSO1j59|Je8W!?>L2OmrQj?@>vpTn!bTfo|nkGyb8PuydL~Acq=%2F2~;mo&qlTBkNlPUJ1Sr z+y#CMoc{*PA2yHmRf7w_%fO4k?ch7XTflFC$G*w>c7u0xGM_P@_3r^+2ll=VdGN}2 zm`khK{@cKdh^75U@8s|Yz*XSK!F$1f1y{ez@~6^uPsR^}Tfn>DZMI68N1LoD>_79o=1?~b*SithGT^t?&w}PJluL9>>%<>)J z`QU<&IsPVa?Vp*4UBdG1;48pmc0(RK_*3R>;EjK0{t#UC8S^1@otO6P_?&q(xb+{* zMc`fFmEbl1q_yiC1ea-S0 zfb+pufUCei2QLG^3*H1CLE{qD9=~CImx6bLp9JUNYq9@;$AD+mar{}}tH67}KLSrV z+@TV95?p!&^B(Y8aITlmmn{3pz3oOU&vOMA#PJb@g4fcZz!8d?w!S{pPz)yqQ!Mnj7;8PYMeen5U z8Z@Z$a}n4Lz8PEy-UO}%{}J2<{tvhvJT$=Rb%680UEn!jaV)3b0Ct0~02hMq2G@eO zfZM>k!0q7u;12L%O(;J&4=miAelge$rdM55{S<<40M~*yg4@8af!o1<0(XG>1(81Z z6tEb{>0bzTgRcY^g4cp;!Ow%+z<&j|gTDcHfKLb^eeiU!7{%#VgWcd3a3T01a4q<0 za2xoK;C3)=*sbi>0X`bs1wIQbj^p%ez;5vOz=hzSfNR0O0k?s7g4@CW0(XFiUWW36 zCxZojn=F6d1-ro!a3S~}a4on4+y;IN+z$R6+yNdKLHgivU~xRBUkP@D8^ML(>%q0) z$H8sjPr>crKos@|{}9{--V7EeaQg3p-QZC%j$a5q2V4uj2;2s~4%`m@9k>H5no)l6 ziC}Rer(XefgM;8g@Ezb<@N?ic@JHZw@Zl{eKlm(g7q}WM#&G&kup4|QxDdPzTnp~E znDw`TPXf1tF9vsjuK;&}e+CvOar*Co-QZ(dVSjKjxE6dFxD9+8xE=gFxC6Wo+y(Bp zg!PM)Iej9N;9r0{z%PKi!0&*?DV+Z2U^n=%r6@l*A6yHr z1h;|f!R_GhgFC?YfxEyj5)bS{^FL!beb@Jxd4F3WO2E8-r4ToOc^_7KZU*LkX@xj! z8OP^+R)r`7^S-G<{1D9h&>X9VIU3_`FZ75c9#jZ>bQsf_WcRAzlFUzP>{A zyMp8MKB+>S59WP1g}4dK`@ahD5?JJM`TqgtebZ@P=StRBi111<@3$<(5-{((EyN>W z-WQynBY}CJXL?P!jrH-q^t9Flc-2Hs{~~bVnatOLYYUj40P{ZRLVO73{o-jDbrtL9 zeYb^}0p@+Lg;)&c{gdgv95C;1D#V-M)+r7lf8R(xl%9_)Wgc`jbI$jeM}zag1;ir` zZxe-EIQ+XZ{BRntf-eKNfo}x2gC7ESfS(6*Yy-WM7BJq{72-2XMryPhrw5Zc^?@eehlXQVuW}N z%=^L!@gB*YzZN0>WW+~!zZ+PeTkV%3#6&Rf$0EdBFz=@# z#8NQtn1-PI;^F!cP@GkHs@ZcL+|9)^G zxZqHZ9|O079|ms%zhlG)_x~a5E15EyM{o zv3}l9T8MdI-akc%Yr&0bKNYes@rYq`K8;{~?|=`0{{t3k-y|W9TgCF(;Bs&dco}#A z_z|!R{26#Kc+}0TFBe<}9uB@1>;^vq9u0mSJO=zFcr19#Ev!EeTn5euUj{A!uLe&6 zZw42F-vjeL#JF`C=M6W|>1J75?1Kj2*O(AzkF zL&4+0M}teiZtx=T81PDP9{6YA0`QCALhuLRS>UYOIsJ0*iQsDRx!_vxh2Tc;Qg9f2 z54aWl1h@^{30?vI7`zJnFYp?$<42socJQI#b>Ly(4d4^Oo4}`oJHWHRTfqy#+ri%h zcY?16cY$vM?*^|0?*+dI-Vgp8SRBvoD%Aqri87 z$AGtj^T7MT1>k{qaDFC%j{{Ezp9ww-Tm>!!UkaWDz872$ejZ#6{sdeLmR31@IQ6F^ z**;^yyx*V@)4{vdK3jDC1Fv$kJYB9;{6_FPFz?eR#EW3wA5n-;!MuN;5Cdo!B-8Ig z{K?>1NN+xP4R{%t_x%&%4lwWkN6$IIyuTso1@pdWLdeUaOpo_n6XFyw?;|DzEl;Py zdA~Zke*hOEfAZTi8K3vt6XG{u-lvbAJA-*YIZ7{!<$1q4de0He`>F|XF_`y76XH5B z?^hGk@_Nn|-?`H1Thq-ey^U>h7LzpLnbH2lT0eCRvY3Vk(hF9mNy`acABApehnx4Jm~)5KJLREzxki^jCHVNy6PbC|>nG`>#bH5xyv@fPMo zjP&2p_zUI%M)=nn=j5pT(7*gUR^ziYuGY9o2{%Oo+dKDTsYrK+~S|$H}s)awJ z@f#ZNVK&>Rlloyw+~gq|pRIAF#!EE5iPoCK;taBZc=)tJS`=g#M7D0{MRy@_WGX2cWd0C@dp~`&~=>Br?Z%UBQ!o; z<1&rC8poJT``@nd!x}%Q#iyllWq!=~?`!;-CjSkyX`iELoRL_bF&dwx@eGZtHEw1$ z_0uxFN&0Wq!XMK38I3!&`0s1{ca6W+_&YR?Ni5$98lR)_JdKxVyjtU*YW#@C8#R7P zG+ z4`}?1#&2o-PmObEoK5v*rawgElQf>Baizvh8ZXoMR*iq6@kWieYTT*uUX8!jcvx<7 z`A*XK42@@Ne3{0#Y5a4IpVj#H8h^!XwukJY$>)np<6MnLXd7^bYb56gw{es+M{B&i)%IT(+;r$?0wEw{+||a$CqfPfoVE|3*7A+L%?{8|U9oD6J>SJw@&} zXkzVKOQdT7sWG%xkSbu)5>f@V){rWYwne0h zo2`P+(PFg~K?zp0s^NplHAR*-7CMawa}80DxztxeT(#twQHSw3>abOm__}7vOQRVo zbo~7wo9k1xq+AEy)Y8B^1F<+^4T=RDU>B?p@)dg9UKvpX?F7SA{l z6OYH6f8x>9HgAN=wbr;4@$AZDHmkJNMB|H}#W&I5Z2sT6-$vqw0^RR3V7ZcZvDHox zwCc9iVP3D0!ZI5~e9H|Y{{OU5O42?fywwJ^kHig9sH?T#&_o9QulGVZ$o+_?9)cyV&R(Akj8Usr!f}?t=6`*cZuScZ;O0lKu;unEhY4-%`5$<9fe$QQCbG zd$#Fd$_7x~Y%G_&L6mBknQi8j8L;VGW}7)>jsMOzbG_YwjOVLLXp=y5o{D#FrR@OJ zydh5mig6dQBqm$kw5e-@FLrUt@u)9WrGh4>hK;XlZLLwe9MZmJ@nALOmNc>LZt@4s zF++MmPiqeap>bL>@1NKstv14Ha~5~K@)CAx)l{-ni`;0IT6j1Vp`9>fkxW(Q;p1;Dn3!` zRyL-5Ul>tN-QojHyo8alvXuHe9^{Gz&b}B+HP`2sIEC$xrBBuX|mMo zkCxGVP zq;igB{+c|kwn6^j^ww}FD))f4K7qKklZqb6)%zQ;g%)rAq8bJl(lTpapSomPhH1SD zZHH*g!OO=3@n%x9P;J2J54MD8>lvdzli_^h;HL7aeQ}agL11&xPrKKYOtTDZqBa_^ z36onZQd{bvj z&Acsh#oe3M{ikngWJT}8Cn`xV0+Ph9Ws}L?Lf@+(TP(wg_vd(0)+8SDywal>G z46g;xZqf*-rdF2rYJgm_LYBv6#=7xCUh7{h^FXzs6vn$D>vGfOFkBVVMHkcl&~o=X z>o~k!su`z(R9NQ0AC*D02a+jjDMmd-Q48%JEB7okC9S$w6raxhUdemun!$q$+TV#b zpPfVdZuTUd7Jnp0Q8`uHsMZa)PEO6yj&`(BD95)JlUJ&QL@doiCuLPAQrBn~IDY5XjJCT>tHoJkz z>IU69O1->hrpuhVs7e9r`2MIV&`su4N@~aQIrVbJm3llHTN=BV%ZOU%ZyWA%slH6?6PAUA$`Vt7|K#z%DBNE%6}y+)=CFpZ0c z#jw-}vKW>kh_BFeF*gd6Hf>193zSxRaic%xo9YS3J;>9wz4@A)UA60SW_{a5F#C_h zn3k1Jou$0kq`#oF$Q#jF(<-{@V$>BlE@quM*;zEv-5HH+14}rcd~X+zXqi!T8{I^; zPSYPP4J|IEd(If`Xdbn@%R$4?gwvHdsVpp*oYMS8Uwk0cqhfWd#kzz6e{hk{%O#-G z*1VC4-=fes*mwyl`EKSE%+5&B_;Vt+x@nTv>kC6cd7-rtqfrsIF{T9g>GfpeW=P9w zg7T2sxIEb)3Bi83Il8u+UFsuYfJ2=&0N`LCS6Z$#Z(n}1jxi5(=rJ^g`Y^IZ~t87oXE&h-r zN@rrs*EtZjswGRsrkE=GmVJAH|d{-x)m^rWs=ap{DN(I~8FF+KI5 z7iMX8P^u^n(bb{%%Hod=lRDmBWhiM1bw;y%^w_KTa=z%>>X>HEF&|_GzLf&=@ttwO z=vDcXpX#B(V8|7_^ zc3))O&{aQ$7e1+%tfD8=Y7((09Tv?pQF}%=i)V<&@UkcIy%_bVUXSw7xQYS8)1fAMG#Tkd5;7ts8t~NlWbK#vVjeH$V{#;ZETxlG8KH|P z&HJR6^SAl}Q=922b|g{GJdG@~S!{f)l3W?7hQLLu$MQ`mT5_XcqlV)-wG8I#V|jWh zukm!>N=2O-cxorDl^~tdb&KfH0EP`|M105 za+*1{6^PMk6pf`kqU6}}2_=t9tWu_vPK~tEl_vf438&&Qo^DcN)@`cjnM#4#&@@b~qQ&;B;`1CihQspdKhw<{Z+sL_m5FXE( z8Eg?%f3@4)m@>?xry)Jxoq~0-F@v5b?CoTT$@@l0uuK zz6eULrp|1{tc#nZ$)-3-GL1fum#(!oi6j)%oOVwBel~f&Sr_7J4N;fri^$7TT4|%I z(hBKykybddq{)KDjJNU4xjU-93Rbi0r{&v)ChIUxKvRdG-j<9T(md?(dNFxUZv*)n zSn6IE_;%U+Ryr@*JUaAb)OYj>} zMRk`o`y;+$PhBGopr(GiT#cV_hE!mmvBlkHY_a)d-n3!F*A!~;!Hmjo6DOqDEmiRY>KT9|ldF zl#;KA&q_Esb19L+&Cy2n9;%^Twoh&#>ac1arSyiDGR7G_iJzRJv|;a~)tr`UjG%9E z!Wc>plPen&-oZ3mjinq7IO}{fXt2w`=pPQY^s#VsU=Z229#E@`c60LeHODY$+2dKD*X*K?PXCQ60D>#SHQ=k z?4no|4a4H~uc}@(0$KO@c~;r8ir-D4Xq*>`l{c$*&PwWM`+VxXK-o+RQc|##P1b*~ z5vhe8bkvD5s!d-P$4r_U0?JUrSzDOl zXcjA;sa{U8h-aSdS`0&Zyh$VrjJwF{BhWFNqm$fGUe1D^BF7Rx6_xM6PNuIN=oWsm z9RHLA>qF}7{I<%Z=?+E*C4S09=3BEoj?fE1QwAOy?{c7;mNnm;ooqhsO?+V91C1^I zI$u=kN_?@mr|~TEtbZb(QU-stjxMb9%!0q}NG?Xyx*X$l%c$9KU9}ty#nmOe6sVci zGO|~hQr2Eiq~#p2nqe}9Q5-!_bkSGI#k)2LR;jyX4vZ$IYNLqWsV$1@O30;+ypgap z$ZWbjHeRfVs#e}zws~M<Lr(xLwjCOQ(G_6{x(JJMS2T;^yUH?H2%hT zQme74kGfD(lRwt`XsX)d)z_oiqq^^948MFwrbi7rq+Yh^k!W4K(e=ba>VjL*91N`+snsQ1 znUZ3diJ5b0%B=BuGb$X9Ot`F*d0q~4!6DVC;}7vB%UNwX-8NZ0?Tu?G3Iyc4e^LID z#Vos;F0;;0ohK~6r%@8J_{Ln}Wb@Ws4d2hCoAUpXy5v@wI9#W5>VK6E4{2@2rE+p0 zzaV=089kUHfSepe$#X()jf*4nGHg|d9+6BAh2?X_sCk{oAha|TS`;ny)9Z(7;(8jr zHc;+~HL77*8jUlk##2;|yU1p34n13bn)&j{>XmQq$xNAdvNUl{^Nd=i%H>lF`Kg~T zLis8#<5|2iPmr`kQgqYnfNHXmXSI@EuI)CeoZ{+TjKuk_-o@lIi_6lxn8^h+Uw-Ua z>3S}nRJ5K)ODb1Sqj?hROtw3D3GAjo4OCe@6s7h?6UXs+&K_v@su3<%PY=Y^l{Kki z=7zmAl}Md1&a_H-H!bhmBl4c~bea|FrhN7)ll!cLS5y_cKuvTmrc-g2C+MY9Po9d@ z?|qBhSt?D=@&7!9?)uk--M21!#v1OXK0{%y&Yo3(>|5e(f?5Dg)AXbTB*sfNW3S^| zR*kCf-siEDf$I z@8I)hsWUmhvJ(H73G}owEo-J{#!S2-9ZaQK#ZNZULFZ#`ly2WDmA(6cr|r=Nv(D+|XguX{bH#8B8G1$l*E>|eSx;47xj zx#*MsSYwD*gu^klxU>8g4Tp^hT5Zv1&7cUS*8u4wHaSLyHo7I?`639E`{^Z;h#6?i zQd_UYO%G9<>FrDT{eFyII;aXY*EQ1Pe_vCWUd*De)#%kEe^h za6fWT#nV3@ z&gjJdvcyMf{JIIfY8`BtD%V)CQb`@FdfiA) zo7f7eiMjY(8S72WM&hJrN?L&cXP+)L$(E6mdC}=!T5BiRpoc{w9(t*a9=T8$qRYqr zY8l&<6r`{$2Axu#I(pH{RsfnN*U8rvQ>5%ZW;VZb(=w@^MCiw8YH1Oco=qz4LYi*k zwWDUx)pAa~e0;0tU|}c}z+$#q+-ACRX({oGp?un>1gS|+o)Mkw_2YG<#Chz=^<+&s zP0Sw!=sBsQUP)J~o}i>0G&E2PM0(~I!?v=ruFS49HEDX6+#if`UD<{5xn>ngYfwx5 zb1*%bl8Nw=lta`Qtd31xGCkN#(<|yTS*ep|TRmF@Q)pET22`Krn5eIR=`@zi`sG(|0~F5nO9nWyh}is*}SKb^vhsa9yj z8SyV{rl~PKx)0UoLx$AQ-LkKvMnmS)60&}`UKf%J7HY@jL}FUACXSP|xD-@LZ@&9e zE(3m=bM#S{DBlW`onri3YrWV?QXdq_ZeRvIqK`Jp5K^E{K-sF*yBAt6lnNPWOsLz1 z8!g>7JaGpF%Z$oYH9Xl*_xk1^Vb|Hk<(R?u1po7cmI<56S`viB6Xgq&vLAjI4hpE z{inG%(h_WHrZphxMwniE)k5f&P(SaIUw<>drqLr>y-e5>8ERt2i-c*#jrZ}}+7GNg zq=%%u3abfNzF?aoqh49I9IE3@Wga;c#ng5Rsn@Hd_nA|)Cx7gs1=9q8(TVCUCLw4h ze~4fqfr%QM?w(X6-KwW1&Rw2`V!rfZD3GSvSzw>Ck0+ymVIar>`$#00+sOxSLqMK;{;}YC-k6G+mQ2o~QiK z-U3<{cqM54Aig2c4!3v$&GN~M#ngfdk_A!Q_Q^?|Vl|a-r9q1EXE%CTWr4I9i+!F& zJm`tin5nT!-oEG}a;ZqGNy5dnNWayj2=4|px`uXOn?7?+#dm9Xzbx95Xx5x*mHIxR z`ZoYIqw$Q7X4TcUQax4F^N2Q&2hu4hnO#{`G`o0ujZG=2+USP<+h|bl&mWuup2{@i z%8617;f+*NNv{;(HTHvxtcH4WvP3IJuX3Q2Bu?!2Dlgjm2EB^Qub%cYO5)c= zJQdn21vW35_EJZQoTJlc-mG+#7FAZJHhiuwJie4|Zds+ji5?7|lu&U=F*!JSvCr;h zRpabltioy`tMt)~4-w;1DW?c$IcWeOTWa?)%?RZZeRs7Dcc+)S+B9O%|M#zycni;HV~ zt#!1#N{yODoOrs>51o;6WWt03N&wG`>Dj!RBnw68Bl{ZP=`}3{j&t+q$*mzkyWP+O zqCibUAhb|E(X~EK-^fq04Lfb(nYLjQCr(HcHZe`u>1o2!rDvPZxV{9VkriU zPMcKIGVwGrkYiNh7N(;LE|_q}B~wq!Pq0sdj?>RDbu6|rae`?6B#3q=mzPE^xyr_$ zmSCyGq>PeTC8euKW6(TnyTvp3?Tm)ciLEl3P#D>E^Ydz2CY+%v$L3o1m05 z>`%H06Z0)gBdvd0zG?mB&y&+x`?S-kZSn<^2NiRx)CeP*SL}Y?DnMJ6LK;7O~YNM~D3CMh^>-8o@I8R59Bu z^mJ6AHy>%zv~evnmNtfM9__|RR(VR2wai13gk_q>;#Wqcq^QvathMMLFWIZJleE;U zkLXfzrwdqWu^aBCXtNWv)M_gg5Y^b+)3xWPx0(biJ&>)`mBka`Q2KC0=7u<`a|Ph{yee|m#Q zy@lHo@$R>A=!upVx&Kf6J?rj^kL7;tbX#7S$Jd1MQi!dE)oC}rrmg`)TI-BJO0I{? zQwwRu=)EGf3awpUp)H~<9BL(Q^!np#sEVkbEXxrWGM;#(W-l%ypK#E-S>1}LZ)nrY z$(OpVB&<)t@ioaW9H!>LE}s4&N^jB(<1L;=Y8XG?@0BkOG0gJG{hN$?o9@2RA77^y zDl7^{>E$z0!FNQ+GJhjPyCw0LGW4WJ)HHDOmY-Ib;^laKhy_>$e{)e1oEweH;Tou3 z6_p(d%cxjJy2;zgj;C(HCL~0kX~`m!nxy1eTpl*BZASQbdM{hPh?-7hA-!UrUIGcT z627#>J2X`m7*XayjSnmja_$n!Zi>^@*gnTfVWNbd;S>SRZ=w~Aaq@Ui%(O=GLZss@ zBI%>y@$$1dHHD72DFUfVj4`kt*F2sYMIY$uQB%TGRj{e~jch%7QW!^V;CB|#bvCFo z%v`}u)bQe_R@Hqa7^vuH6`c}g{u(rcwkiChgdPNs0`T9M=H{Kc_W zQDYHeWU;YHt*S`5P#P zje)$X$1GLyvXhum*^*NZQX5Sgp>XgB1*1W2GTEI zWS!OKc8URv-Tdot4mTudmj%ucJs&6u%J*?Yk@4OobXYv~;-uA`*N!jw{LuF{k6gUt zveqO1y5@?Z_kXtdtF!agOqn~R&mZooT=DA5&b+^!^3-7u4tVYEv4hGcP3iYwy?EhQ zZ;tdFKID~0Mtn2aTYZveXupga+8vu# zo!@Wh)$iw(+;fa?;k}-(^B#Eny-$an_}RZ5d0#BKXv+tGxpjl@m8l!f+U_}Q?8Gzw zUJzOr8~6VA{`Sm*lU{l1l`r3QZTa}bi^k7g^=1Dz2XD6(8Z zc>IO%U)CNovf`y{uD^cF>H8n+`^YV4j=A#9>;LiZn!xENJaOe$H}CuR{huscJK>q4 z=`W2OIpOvTK5z6at-K|4-hHp%d0*MX6IRZ-ZN+D0ua;bR>em+!KEq#p)DiDLJ$q8^ z%FAa>ch(M@visiXZ)atne%|&QFMs*Y^PZeA@y$nmb>ha;pZs#NYs%Rl|o#>RpF_+(%B_LA+N{Q7~45&j$RA2#H#W7o}#h#AN1`_Cs; zmtK4F>koZ*{%I$?_2~LrcK+({x&d8pf46bYsPa!1=BzmN#X9$^&xOZr`|b7@9&nF) zXVA(GuRS(=-n{d-zi`$4%_CQhJ@aSY0VO{__vLkexc9)n&#U?JmJi?G;Bb99Fi@NI z@T41t&AsgUcdl=}YUIAzFTHodytbEqI{Msa7k~7@RhQg1Y4-H;>m73^?1)T0qAIkv zy7REdKj?ekVbd>u_Q3IHgnsykop-fYO#0jW<~s)+`bftoC;UEq;{1Eu4=$g+;<<+| z{#BN<{ELAf-8JjQe&L2af4+0!tWSP&&9lEa@ww}M-Y2km)`aISUpMU29qZ5gVc!im zUYqsh&))sss?IH+U-9O;@iU!2ZSDWmj<4=|`jZ>)fAO@dpSbSBH~ybp%Uz=u{cOV3 z_`d<3A1<#=+;p-rVcI(Zlj#*wEH5P68Na)FF}Iy;-m-D$m1hqBXU7J;y?NXs_Ns{4 ztBbkJn?EM(JQ2ch{21qilmD0(^Pef>Idj~sLw-yAS=ME78ed&pw($GDmb{Y|EwiD> zXoYL`sjV;GO`R9UuzHi)@!ii7*VeDu6p?@IW!eFj>lZI(GxlSn`dg@T4?ICIzflGVoKqp7g;td_%Abrd2zA+D88EX!6dI)Dk46GjpgAv-^D98 z z5{FIZcif%)wE9T#s%7Sa+XN3}6LR0=pSNYXekuI-D@$qNX34GGU~$==?Y2id3&T{U zlRK1mz1e#Hv9i^@t=azNhmIL`tM5NjveP@{bKyr_2FF9oviEKAwzW+6yv!OMyV)b< z_}j02+YhYx;J)I|sV?ag?@xZ#xwSu4_sWmns~q3o#LqYtxPIyF0*+ksK&M}mpSrBq z+#dLP#oDKhxm%goe+PI+y3rJ!4EZE0HBi)MRm-oU|w^D*`!%pT^EMXY{ydUwUOd|>2&&Gp5*T<4|P5^|G26w`O{OYBlOjx zBheR+ZBctTqk>8Ex~{6>i{zdL-rLF@O(s>#%*&G}I>;_sYpeYA%cR8aV>>oBZ%wIO z8T;vsZ>L$(S(fKNG8W5knORYorm^Tvz~{W#tK-giN*_@5S%2oeLXGJnlf(5Uz9owP wUc9hMi71RNxT17zpR5IE)LY3a7yFkn`)06kw>T%X?5Rw;`M-Ql$A*gx05rftod5s; literal 0 HcmV?d00001 diff --git a/website/docs/docs/client-api.md b/website/docs/docs/client-api.md index 36cf4a119..5821e49f5 100644 --- a/website/docs/docs/client-api.md +++ b/website/docs/docs/client-api.md @@ -120,6 +120,9 @@ await client.sessions.close(); For direct iOS simulator app launches, `client.apps.open({ app, platform: 'ios', launchConsole: './artifacts/app.console.log' })` captures launch-time stdout/stderr. The option mirrors `open --launch-console` and is not valid for URL opens or non-simulator targets. +For iOS simulator camera tests, `client.apps.open({ app, platform: 'ios', cameraVideo: './fixtures/camera-feed.mp4' })` injects the video file as the +target app's camera stream for that launch. It relaunches the app process and is not valid for URL-only opens, physical devices, Android, macOS, or Linux. + ## Android snapshot helper providers Remote Android providers should import `agent-device/android-snapshot-helper` and inject their own diff --git a/website/docs/docs/commands.md b/website/docs/docs/commands.md index 5d8dcb26d..b99e927b3 100644 --- a/website/docs/docs/commands.md +++ b/website/docs/docs/commands.md @@ -42,6 +42,7 @@ agent-device boot --platform android --device Pixel_9_Pro_XL --camera-back ./bac agent-device shutdown --platform ios agent-device shutdown --platform android --device Pixel_9_Pro_XL agent-device open [app|url] [url] +agent-device open com.example.CameraApp --platform ios --camera-video ./camera-feed.mp4 agent-device open --platform macos --surface frontmost-app agent-device open --platform macos --surface desktop agent-device close [app] @@ -69,6 +70,7 @@ agent-device app-switcher - `open [app|url] [url]` already boots/activates the selected target when needed. - `open ` deep links are supported on Android and iOS. - `open ` opens a deep link on iOS. +- `open --camera-video ` injects a sample video file as the iOS simulator camera stream for that app launch. It relaunches the target app process and is not valid for URL-only opens, physical devices, Android, macOS, or Linux. - `open --launch-console ` captures launch-time stdout/stderr for direct iOS simulator app launches. It is not valid for URL opens or non-simulator targets. - `open --platform macos --surface app|frontmost-app|desktop|menubar` selects the macOS session surface explicitly. `app` is the default when an app argument is provided.