From fc7369384bc97c18907e501ff4ba15bb25bd7a32 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 14 Mar 2026 13:46:10 +0700 Subject: [PATCH] feat(voice): implement turn-detection and real-time audio streaming --- docs/VOICE_TURN_DETECTION_PLAN.md | 581 ++++++++++++++++++ .../e2e/workspace-draft-tab-retarget.spec.ts | 142 ++++- .../app/src/components/tool-call-sheet.tsx | 1 + packages/app/src/contexts/session-context.tsx | 28 +- .../workspace/workspace-desktop-tabs-row.tsx | 84 +-- .../screens/workspace/workspace-screen.tsx | 199 ++++-- .../workspace/workspace-tab-menu.test.ts | 107 ++++ .../screens/workspace/workspace-tab-menu.ts | 137 +++++ .../workspace/workspace-tab-model.test.ts | 1 + .../screens/workspace/workspace-tab-model.ts | 4 +- .../workspace/workspace-tab-presentation.tsx | 59 +- .../src/stores/workspace-tabs-store.test.ts | 29 + packages/app/src/voice/audio-engine.native.ts | 208 +++---- .../app/src/voice/speech-segmenter.test.ts | 272 -------- packages/app/src/voice/speech-segmenter.ts | 338 ---------- packages/app/src/voice/voice-runtime.test.ts | 212 ++++++- packages/app/src/voice/voice-runtime.ts | 498 ++++++++++----- packages/server/package.json | 3 +- packages/server/src/client/daemon-client.ts | 6 +- .../src/server/agent/tts-manager.test.ts | 167 ++++- .../server/src/server/agent/tts-manager.ts | 433 ++++++++----- packages/server/src/server/bootstrap.ts | 3 +- .../src/server/persisted-config.test.ts | 16 + .../server/src/server/persisted-config.ts | 6 + packages/server/src/server/session.ts | 360 +++-------- .../server/speech/providers/local/runtime.ts | 12 + .../local/sherpa/assets/silero_vad.onnx | Bin 0 -> 643854 bytes .../local/sherpa/sherpa-onnx-node-loader.ts | 2 + .../local/sherpa/silero-vad-provider.ts | 40 ++ .../local/sherpa/silero-vad-session.ts | 168 +++++ .../server/speech/providers/openai/runtime.ts | 4 + .../speech/speech-config-resolver.test.ts | 16 + .../server/speech/speech-config-resolver.ts | 10 + .../src/server/speech/speech-runtime.test.ts | 17 + .../src/server/speech/speech-runtime.ts | 42 +- .../server/src/server/speech/speech-types.ts | 1 + .../server/speech/turn-detection-provider.ts | 25 + .../fixed-duration-pcm-ring-buffer.test.ts | 37 ++ .../voice/fixed-duration-pcm-ring-buffer.ts | 51 ++ .../voice/voice-turn-controller.test.ts | 281 +++++++++ .../src/server/voice/voice-turn-controller.ts | 226 +++++++ .../server/src/server/websocket-server.ts | 9 +- packages/server/src/shared/messages.ts | 8 + 43 files changed, 3367 insertions(+), 1476 deletions(-) create mode 100644 docs/VOICE_TURN_DETECTION_PLAN.md create mode 100644 packages/app/src/screens/workspace/workspace-tab-menu.test.ts create mode 100644 packages/app/src/screens/workspace/workspace-tab-menu.ts delete mode 100644 packages/app/src/voice/speech-segmenter.test.ts delete mode 100644 packages/app/src/voice/speech-segmenter.ts create mode 100644 packages/server/src/server/speech/providers/local/sherpa/assets/silero_vad.onnx create mode 100644 packages/server/src/server/speech/providers/local/sherpa/silero-vad-provider.ts create mode 100644 packages/server/src/server/speech/providers/local/sherpa/silero-vad-session.ts create mode 100644 packages/server/src/server/speech/turn-detection-provider.ts create mode 100644 packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.test.ts create mode 100644 packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.ts create mode 100644 packages/server/src/server/voice/voice-turn-controller.test.ts create mode 100644 packages/server/src/server/voice/voice-turn-controller.ts diff --git a/docs/VOICE_TURN_DETECTION_PLAN.md b/docs/VOICE_TURN_DETECTION_PLAN.md new file mode 100644 index 000000000..d916d5af1 --- /dev/null +++ b/docs/VOICE_TURN_DETECTION_PLAN.md @@ -0,0 +1,581 @@ +# Local Voice Turn Detection Plan + +## Goal + +For local realtime voice, the client should stream PCM continuously to the server. The server should own turn detection using bundled Sherpa + Silero VAD. Client-side logic stays only for meter/activation visuals and is not authoritative for turn boundaries. + +The server should start buffering immediately so we do not clip the beginning of speech. + +## Scope + +This plan is intentionally local-only for now. + +- Turn detection: local only +- STT: local only +- TTS: unchanged +- Client VAD: removed as an authority, retained only as UI metering/activation + +## Design Summary + +### Boundaries + +- Client + - Captures PCM + - Streams fixed-size chunks continuously during voice mode + - Shows volume meter / activation visuals + - Does not decide turn start or turn end +- Server turn detection + - Consumes live PCM stream + - Runs local Silero VAD through Sherpa + - Emits normalized events: + - `speech_started` + - `speech_stopped` +- Server voice turn controller + - Owns barge-in + - Owns rolling pre-speech buffer + - Owns utterance lifecycle + - Feeds utterance audio into the existing STT path +- Server STT + - Transcribes utterance audio selected by turn detection + +## Core Principle + +Do not hide VAD inside STT. + +If STT owns VAD, the abstraction gets coupled again. Turn detection and transcription are different responsibilities and should be modeled separately. + +Bad shape: + +```ts +interface SpeechToTextProvider { + createSession(): { + appendPcm16(chunk: Buffer): void; + commit(): void; + on(event: "speech_started" | "speech_stopped" | "transcript", handler: unknown): unknown; + }; +} +``` + +Better shape: + +```ts +interface TurnDetectionProvider { + createSession(input: { + logger: pino.Logger; + }): TurnDetectionSession; +} + +interface TurnDetectionSession { + requiredSampleRate: number; + connect(): Promise; + appendPcm16(chunk: Buffer): void; + close(): void; + + on(event: "speech_started", handler: () => void): unknown; + on(event: "speech_stopped", handler: () => void): unknown; + on(event: "error", handler: (err: unknown) => void): unknown; +} +``` + +And keep STT separate: + +```ts +interface SpeechToTextProvider { + id: "local" | "openai" | (string & {}); + createSession(input: { + logger: pino.Logger; + language?: string; + prompt?: string; + }): StreamingTranscriptionSession; +} +``` + +## Config Shape + +Even in a local-only rollout, the boundary should be explicit now so it does not need a second refactor later. + +Current shape: + +```ts +type RequestedSpeechProviders = { + dictationStt: RequestedSpeechProvider; + voiceStt: RequestedSpeechProvider; + voiceTts: RequestedSpeechProvider; +}; +``` + +Proposed shape: + +```ts +type RequestedSpeechProviders = { + dictationStt: RequestedSpeechProvider; + voiceTurnDetection: RequestedSpeechProvider; + voiceStt: RequestedSpeechProvider; + voiceTts: RequestedSpeechProvider; +}; +``` + +For the first implementation, resolution can still force local: + +```ts +const providers = { + dictationStt: { provider: "local", explicit: false, enabled: true }, + voiceTurnDetection: { provider: "local", explicit: false, enabled: true }, + voiceStt: { provider: "local", explicit: false, enabled: true }, + voiceTts: { provider: "local", explicit: false, enabled: true }, +}; +``` + +## Runtime Shape + +### 1. Local Turn Detection Provider + +Add a local provider parallel to local STT/TTS runtime wiring. + +Suggested files: + +- `packages/server/src/server/speech/turn-detection-provider.ts` +- `packages/server/src/server/speech/providers/local/sherpa/silero-vad-session.ts` +- `packages/server/src/server/speech/providers/local/sherpa/silero-vad-provider.ts` + +Expanded local runtime output: + +```ts +interface InitializedLocalSpeech { + sttService: SpeechToTextProvider | null; + ttsService: TextToSpeechProvider | null; + dictationSttService: SpeechToTextProvider | null; + turnDetectionService: TurnDetectionProvider | null; + cleanup: () => void; +} +``` + +Provider construction in local runtime: + +```ts +if ( + providers.voiceTurnDetection.enabled !== false && + providers.voiceTurnDetection.provider === "local" +) { + turnDetectionService = new SherpaSileroTurnDetectionProvider( + { + modelPath: bundledSileroModelPath, + sampleRate: 16000, + }, + logger + ); +} +``` + +### 2. Voice Turn Controller + +This should sit in the server session layer and own the utterance state machine. + +Suggested file: + +- `packages/server/src/server/voice/voice-turn-controller.ts` + +Responsibilities: + +- receive continuous PCM chunks +- write chunks into a rolling pre-speech buffer +- feed chunks into detector +- on `speech_started` + - perform barge-in + - start a new utterance + - flush pre-speech buffer into utterance +- while speech is active + - append live chunks into utterance +- on `speech_stopped` + - finalize utterance into STT + +Public shape: + +```ts +interface VoiceTurnController { + start(): Promise; + stop(): Promise; + appendClientChunk(input: { + audioBase64: string; + format: string; + }): Promise; +} +``` + +Internal state should be explicit: + +```ts +type VoiceInputState = + | { status: "idle" } + | { + status: "listening"; + rollingPrefixBytes: number; + } + | { + status: "capturing"; + utteranceId: string; + rollingPrefixBytes: number; + utteranceBytes: number; + }; +``` + +That is better than several booleans like `speechInProgress`, `hasStarted`, or `awaitingStop`. + +## Immediate Buffering Strategy + +Because buffering starts immediately, the detector does not decide whether audio is kept at all. It decides when buffered audio becomes an utterance. + +### Rolling Prefix Buffer + +Maintain a small ring buffer of recent PCM before speech start. + +Suggested defaults: + +- sample rate: `16000` +- mono PCM16 +- prefix duration: `300ms` to `500ms` + +Example utility: + +```ts +interface RollingPcmBuffer { + append(chunk: Buffer): void; + drain(): Buffer; + clear(): void; +} +``` + +Example implementation shape: + +```ts +class FixedDurationPcmRingBuffer { + private chunks: Buffer[] = []; + private totalBytes = 0; + + constructor(private readonly maxBytes: number) {} + + append(chunk: Buffer): void { + if (chunk.length === 0) { + return; + } + + this.chunks.push(chunk); + this.totalBytes += chunk.length; + + while (this.totalBytes > this.maxBytes && this.chunks.length > 0) { + const removed = this.chunks.shift()!; + this.totalBytes -= removed.length; + } + } + + drain(): Buffer { + return Buffer.concat(this.chunks); + } + + clear(): void { + this.chunks = []; + this.totalBytes = 0; + } +} +``` + +### Flow + +Per incoming chunk: + +```ts +prefixBuffer.append(chunk); +detector.appendPcm16(chunk); + +if (state.status === "capturing") { + utteranceChunks.push(chunk); +} +``` + +On speech start: + +```ts +async function onSpeechStarted(): Promise { + await interruptPlaybackAndAgentRun(); + + const prefix = prefixBuffer.drain(); + const utteranceChunks = prefix.length > 0 ? [prefix] : []; + + state = { + status: "capturing", + utteranceId: uuidv4(), + rollingPrefixBytes: prefix.length, + utteranceBytes: prefix.length, + }; + + activeUtteranceChunks = utteranceChunks; +} +``` + +On speech stop: + +```ts +async function onSpeechStopped(): Promise { + if (state.status !== "capturing") { + return; + } + + const pcm16 = Buffer.concat(activeUtteranceChunks); + + await submitUtterance({ + pcm16, + sampleRate: 16000, + format: "audio/pcm;rate=16000;bits=16", + }); + + activeUtteranceChunks = []; + state = { + status: "listening", + rollingPrefixBytes: 0, + }; +} +``` + +## STT Integration + +Do not make the turn controller talk to STT one chunk at a time unless there is a strong need. + +For the first version, the simplest shape is: + +- detector runs on the continuous stream +- utterance audio is accumulated in memory +- on stop, the utterance goes through the existing internal voice dictation path + +That minimizes refactor risk and keeps the first migration focused on authority and layering. + +Boundary: + +```ts +interface VoiceUtteranceSink { + submitUtterance(input: { + pcm16: Buffer; + sampleRate: number; + format: string; + }): Promise; +} +``` + +Then `session.ts` can implement that sink using the existing voice dictation internals. + +## Session Refactor + +Current problem: + +- raw `voice_audio_chunk` handling triggers speech-start behavior too early +- the client remains the authority for `isLast` + +Target shape: + +```ts +private async handleAudioChunk( + msg: Extract +): Promise { + if (this.isVoiceMode) { + await this.voiceTurnController.appendClientChunk({ + audioBase64: msg.audio, + format: msg.format || "audio/pcm;rate=16000;bits=16", + }); + return; + } + + // existing non-voice path remains +} +``` + +And the controller calls back into the session: + +```ts +interface VoiceTurnControllerCallbacks { + onSpeechStarted(): Promise; + onUtteranceReady(input: { + pcm16: Buffer; + sampleRate: number; + format: string; + }): Promise; + onError(error: Error): void; +} +``` + +Session remains responsible for: + +- aborting agent/TTS +- submitting transcript text to the agent +- emitting logs + +The controller is responsible for: + +- audio and detector state +- prefix buffering +- utterance assembly + +## Client Refactor + +The app should stop using `SpeechSegmenter` as authoritative segmentation in voice mode. + +Instead, voice mode uses a continuous chunk sender: + +```ts +interface ContinuousVoiceUploader { + appendPcmChunk(chunk: Uint8Array): void; + flush(): Promise; +} +``` + +In `voice-runtime.ts`, the path becomes: + +```ts +handleCapturePcm(chunk) { + if (!state.snapshot.isVoiceMode || state.snapshot.isMuted) { + return; + } + + continuousUploader.appendPcmChunk(chunk); +} +``` + +And UI activation remains independent: + +```ts +handleCaptureVolume(level) { + const nowMs = Date.now(); + publishDisplayVolume(level, nowMs); + + const isActive = level > DISPLAY_ACTIVE_THRESHOLD; + patchTelemetry((prev) => ({ + ...prev, + isSpeaking: isActive, + })); +} +``` + +The client should no longer use a “segmenter” abstraction for voice mode. The concept is now wrong for that layer. + +## Bundling Silero + +Silero VAD should be treated as a bundled runtime asset, not a user-downloaded speech model. + +Implications: + +- not listed in `paseo speech download` +- not part of user-facing missing-model readiness +- shipped with `packages/server` + +Example: + +```ts +function resolveBundledSileroVadModelPath(): string { + return fileURLToPath( + new URL("./assets/silero_vad.onnx", import.meta.url) + ); +} +``` + +That keeps the model an implementation detail of local realtime voice infrastructure. + +## What Not To Do In V1 + +- No semantic turn detection +- No mixed authorities +- No client-side fallback turn detection +- No detector logic buried inside dictation manager +- No detector-specific branching spread through session logic + +If local VAD is the authority, then only local VAD decides `speech_started` and `speech_stopped`. + +## Verification Plan + +### Unit Tests + +`silero-vad-session.test.ts` + +- emits `speech_started` after speech frames +- emits `speech_stopped` after silence frames +- does not emit duplicate starts/stops + +`fixed-duration-pcm-ring-buffer.test.ts` + +- retains only configured prefix window +- drains prefix in correct order + +`voice-turn-controller.test.ts` + +- buffers before speech start +- includes prefix in utterance on start +- finalizes one utterance on stop +- does not barge in on silence-only chunks + +### Integration Tests + +`session.voice-turn-control.test.ts` + +- continuous voice chunks do not immediately interrupt agent output +- detector start triggers barge-in +- detector stop triggers one finalized transcript submission + +`voice-local-agent.e2e.test.ts` + +- local voice mode works with continuous client upload +- leading words are preserved because prefix buffering is included + +### Regression + +- dictation stream tests remain unchanged +- TTS playback tests remain unchanged +- app voice UI tests still verify meter/activation behavior + +## Ordered Implementation Plan + +1. Add server-side turn detection interfaces and config type. +2. Add bundled local Silero provider via Sherpa. +3. Add rolling prefix buffer utility. +4. Add `VoiceTurnController`. +5. Refactor `session.ts` voice path to use controller callbacks instead of client `isLast`. +6. Replace app voice segmentation with continuous PCM upload. +7. Keep app meter/activation visuals only. +8. Add tests bottom-up. +9. Run `npm run typecheck`. + +## Suggested Canonical Types + +```ts +interface DetectedVoiceUtterance { + pcm16: Buffer; + sampleRate: number; + startedAt: number; + endedAt: number; +} +``` + +```ts +interface VoiceTurnControllerCallbacks { + onSpeechStarted(): Promise; + onUtteranceReady(utterance: DetectedVoiceUtterance): Promise; + onError(error: Error): void; +} +``` + +```ts +interface TurnDetectionProvider { + id: "local" | "openai" | (string & {}); + createSession(input: { + logger: pino.Logger; + }): TurnDetectionSession; +} +``` + +## Recommendation + +For v1, optimize for correctness and clean layering rather than minimum diff size: + +- continuous upload from client +- bundled local Silero detector on server +- rolling prefix buffer +- detector-owned turn boundaries +- existing STT pipeline reused as utterance sink + +That keeps responsibilities clear and avoids inventing a leaky “smart STT session” abstraction. diff --git a/packages/app/e2e/workspace-draft-tab-retarget.spec.ts b/packages/app/e2e/workspace-draft-tab-retarget.spec.ts index 3f0ff1adb..8898176ba 100644 --- a/packages/app/e2e/workspace-draft-tab-retarget.spec.ts +++ b/packages/app/e2e/workspace-draft-tab-retarget.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from "./fixtures"; import type { Page } from "@playwright/test"; -import { createAgentInRepo } from "./helpers/app"; +import { createAgentInRepo, ensureHostSelected, gotoHome } from "./helpers/app"; import { createTempGitRepo } from "./helpers/workspace"; import { ensureWorkspaceAgentPaneVisible, @@ -9,6 +9,7 @@ import { waitForWorkspaceTabsVisible, } from "./helpers/workspace-tabs"; import { switchWorkspaceViaSidebar } from "./helpers/workspace-ui"; +import { buildHostWorkspaceRouteWithOpenIntent } from "@/utils/host-routes"; async function expectComposerFocused(page: Page) { const composer = page.getByRole("textbox", { name: "Message agent..." }).first(); @@ -123,3 +124,142 @@ test("workspace agent tab switch focuses composer on desktop web", async ({ page await repo.cleanup(); } }); + +test("workspace draft tabs keep separate prompt state", async ({ page }) => { + const serverId = process.env.E2E_SERVER_ID; + if (!serverId) { + throw new Error("E2E_SERVER_ID is not set."); + } + + const repo = await createTempGitRepo("paseo-e2e-draft-isolation-"); + const seedPrompt = `seed isolation ${Date.now()}`; + const firstDraftPrompt = `first draft ${Date.now()}`; + const secondDraftPrompt = `second draft ${Date.now()}`; + + try { + await createAgentInRepo(page, { directory: repo.path, prompt: seedPrompt }); + + await switchWorkspaceViaSidebar({ page, serverId, targetWorkspacePath: repo.path }); + await waitForWorkspaceTabsVisible(page); + await ensureWorkspaceAgentPaneVisible(page); + + const beforeFirstDraftIds = await getWorkspaceTabTestIds(page); + await page.getByTestId("workspace-new-agent-tab").first().click(); + await expectComposerFocused(page); + + const withFirstDraftIds = await getWorkspaceTabTestIds(page); + const firstDraftTabTestId = withFirstDraftIds.find((id) => !beforeFirstDraftIds.includes(id)); + if (!firstDraftTabTestId) { + throw new Error("Expected first draft tab to be created."); + } + + const composer = page.getByRole("textbox", { name: "Message agent..." }).first(); + await composer.fill(firstDraftPrompt); + + const beforeSecondDraftIds = await getWorkspaceTabTestIds(page); + await page.getByTestId("workspace-new-agent-tab").first().click(); + await expectComposerFocused(page); + + const withSecondDraftIds = await getWorkspaceTabTestIds(page); + const secondDraftTabTestId = withSecondDraftIds.find((id) => !beforeSecondDraftIds.includes(id)); + if (!secondDraftTabTestId) { + throw new Error("Expected second draft tab to be created."); + } + + await composer.fill(secondDraftPrompt); + + await page.getByTestId(firstDraftTabTestId).first().click(); + await expect(composer).toHaveValue(firstDraftPrompt); + + await page.getByTestId(secondDraftTabTestId).first().click(); + await expect(composer).toHaveValue(secondDraftPrompt); + } finally { + await repo.cleanup(); + } +}); + +test("workspace draft promotion does not steal focus from another tab", async ({ page }) => { + const serverId = process.env.E2E_SERVER_ID; + if (!serverId) { + throw new Error("E2E_SERVER_ID is not set."); + } + + const repo = await createTempGitRepo("paseo-e2e-draft-no-focus-steal-"); + const seedPrompt = `seed focus ${Date.now()}`; + const createPrompt = `background create ${Date.now()}`; + + try { + await createAgentInRepo(page, { directory: repo.path, prompt: seedPrompt }); + + await switchWorkspaceViaSidebar({ page, serverId, targetWorkspacePath: repo.path }); + await waitForWorkspaceTabsVisible(page); + await ensureWorkspaceAgentPaneVisible(page); + + const beforeDraftIds = await getWorkspaceTabTestIds(page); + const firstAgentTabTestId = beforeDraftIds.find((id) => id.startsWith("workspace-tab-agent_")); + if (!firstAgentTabTestId) { + throw new Error("Expected an existing agent tab."); + } + + await page.getByTestId("workspace-new-agent-tab").first().click(); + await expect(page.getByRole("textbox", { name: "Message agent..." }).first()).toBeEditable(); + + const withDraftIds = await getWorkspaceTabTestIds(page); + const draftTabTestId = withDraftIds.find((id) => !beforeDraftIds.includes(id)); + if (!draftTabTestId) { + throw new Error("Expected a draft tab to be created."); + } + + const draftId = draftTabTestId.replace("workspace-tab-", ""); + const draftCloseButton = page.getByTestId(`workspace-draft-close-${draftId}`).first(); + const composer = page.getByRole("textbox", { name: "Message agent..." }).first(); + await composer.fill(createPrompt); + await composer.press("Enter"); + await page.getByTestId(firstAgentTabTestId).first().click(); + + await expect(page.getByText(seedPrompt, { exact: true }).first()).toBeVisible({ + timeout: 30_000, + }); + await expect(draftCloseButton).not.toBeVisible({ timeout: 30_000 }); + await expect(page.getByText(createPrompt, { exact: true }).first()).not.toBeVisible(); + await expect(page.getByText(seedPrompt, { exact: true }).first()).toBeVisible(); + } finally { + await repo.cleanup(); + } +}); + +test("workspace open intent creates exactly one draft tab in an empty workspace", async ({ page }) => { + const serverId = process.env.E2E_SERVER_ID; + if (!serverId) { + throw new Error("E2E_SERVER_ID is not set."); + } + + const repo = await createTempGitRepo("paseo-e2e-draft-open-intent-"); + + try { + await gotoHome(page); + await ensureHostSelected(page); + + await page.goto( + buildHostWorkspaceRouteWithOpenIntent(serverId, repo.path, { + kind: "draft", + draftId: "new", + }) + ); + + await waitForWorkspaceTabsVisible(page); + await ensureWorkspaceAgentPaneVisible(page); + await expect(page.getByRole("textbox", { name: "Message agent..." }).first()).toBeEditable(); + + const tabIds = await getWorkspaceTabTestIds(page); + expect(tabIds).toHaveLength(1); + expect(tabIds[0]?.startsWith("workspace-tab-draft_")).toBe(true); + + const tabLabel = page + .locator('[data-testid^="workspace-tab-"]:not([data-testid^="workspace-tab-context-"])') + .first(); + await expect(tabLabel).toContainText("New Agent"); + } finally { + await repo.cleanup(); + } +}); diff --git a/packages/app/src/components/tool-call-sheet.tsx b/packages/app/src/components/tool-call-sheet.tsx index 917e4217d..a0aecd1f1 100644 --- a/packages/app/src/components/tool-call-sheet.tsx +++ b/packages/app/src/components/tool-call-sheet.tsx @@ -109,6 +109,7 @@ export function ToolCallSheetProvider({ children }: ToolCallSheetProviderProps) ref={bottomSheetRef} snapPoints={snapPoints} index={0} + stackBehavior="replace" enableDynamicSizing={false} onChange={handleSheetChange} backdropComponent={renderBackdrop} diff --git a/packages/app/src/contexts/session-context.tsx b/packages/app/src/contexts/session-context.tsx index a167496cc..733dc6265 100644 --- a/packages/app/src/contexts/session-context.tsx +++ b/packages/app/src/contexts/session-context.tsx @@ -676,7 +676,7 @@ function SessionProviderInternal({ return; } - return voiceRuntime.registerSession({ + return voiceRuntime.registerSession({ serverId, setVoiceMode: async (enabled, agentId) => { if (!client) { @@ -684,11 +684,17 @@ function SessionProviderInternal({ } await client.setVoiceMode(enabled, agentId); }, - sendVoiceAudioChunk: async (audioData, mimeType, isLast) => { + sendVoiceAudioChunk: async (audioData, mimeType) => { if (!client) { throw new Error("Daemon unavailable"); } - await client.sendVoiceAudioChunk(audioData, mimeType, isLast); + await client.sendVoiceAudioChunk(audioData, mimeType); + }, + audioPlayed: async (chunkId) => { + if (!client) { + throw new Error("Daemon unavailable"); + } + await client.audioPlayed(chunkId); }, abortRequest: async () => { if (!client) { @@ -1236,6 +1242,11 @@ function SessionProviderInternal({ } const payload: AudioOutputPayload = message.payload; + if (payload.isVoiceMode && voiceRuntime) { + voiceRuntime.handleAudioOutput(serverId, payload); + return; + } + const playbackGroupId = payload.groupId ?? payload.id; const chunkIndex = payload.chunkIndex ?? 0; const isFinalChunk = payload.isLastChunk ?? true; @@ -1421,14 +1432,22 @@ function SessionProviderInternal({ if (message.type !== "transcription_result") return; const transcriptText = message.payload.text.trim(); + voiceRuntime?.onTranscriptionResult(serverId, transcriptText); if (!transcriptText) { - voiceRuntime?.onTranscriptionResult(serverId, transcriptText); return; } setCurrentAssistantMessage(serverId, ""); }); + const unsubVoiceInputState = client.on("voice_input_state", (message) => { + if (message.type !== "voice_input_state") return; + voiceRuntime?.onServerSpeechStateChanged( + serverId, + message.payload.isSpeaking + ); + }); + const unsubAgentDeleted = client.on("agent_deleted", (message) => { if (message.type !== "agent_deleted") { return; @@ -1537,6 +1556,7 @@ function SessionProviderInternal({ unsubActivity(); unsubChunk(); unsubTranscription(); + unsubVoiceInputState(); unsubAgentDeleted(); unsubAgentArchived(); }; diff --git a/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx b/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx index 15ea705c7..478145bf1 100644 --- a/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx +++ b/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx @@ -17,6 +17,7 @@ import { deriveWorkspaceTabPresentation, WorkspaceTabIcon, } from "@/screens/workspace/workspace-tab-presentation"; +import { buildWorkspaceTabMenuEntries } from "@/screens/workspace/workspace-tab-menu"; import type { WorkspaceTabDescriptor } from "@/screens/workspace/workspace-tabs-types"; import { encodeFilePathForPathSegment } from "@/utils/host-routes"; import type { Agent } from "@/stores/session-store"; @@ -163,9 +164,19 @@ export function WorkspaceDesktopTabsRow({ : presentation.label; const contextMenuTestId = `workspace-tab-context-${tab.key}`; - const isFirstTab = index === 0; - const isLastTab = index === tabs.length - 1; - const isOnlyTab = tabs.length <= 1; + const menuEntries = buildWorkspaceTabMenuEntries({ + surface: "desktop", + tab, + index, + tabCount: tabs.length, + menuTestIDBase: contextMenuTestId, + onCopyResumeCommand, + onCopyAgentId, + onCloseTab, + onCloseTabsBefore: onCloseTabsToLeft, + onCloseTabsAfter: onCloseTabsToRight, + onCloseOtherTabs, + }); return ( @@ -285,64 +296,21 @@ export function WorkspaceDesktopTabsRow({ - {tab.kind === "agent" ? ( - <> + {menuEntries.map((entry) => + entry.kind === "separator" ? ( + + ) : ( { - void onCopyResumeCommand(tab.agentId); - }} + key={entry.key} + testID={entry.testID} + disabled={entry.disabled} + destructive={entry.destructive} + onSelect={entry.onSelect} > - Copy resume command + {entry.label} - { - void onCopyAgentId(tab.agentId); - }} - > - Copy agent id - - - ) : null} - - - - { - void onCloseTabsToLeft(tab.tabId); - }} - > - Close to the left - - { - void onCloseTabsToRight(tab.tabId); - }} - > - Close to the right - - { - void onCloseOtherTabs(tab.tabId); - }} - > - Close other tabs - - { - void onCloseTab(tab.tabId); - }} - > - Close - + ) + )} ); diff --git a/packages/app/src/screens/workspace/workspace-screen.tsx b/packages/app/src/screens/workspace/workspace-screen.tsx index ff3eb9c63..471b68604 100644 --- a/packages/app/src/screens/workspace/workspace-screen.tsx +++ b/packages/app/src/screens/workspace/workspace-screen.tsx @@ -31,6 +31,7 @@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, + DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { @@ -84,6 +85,7 @@ import { WorkspaceTabIcon, WorkspaceTabOptionRow, } from "@/screens/workspace/workspace-tab-presentation"; +import { buildWorkspaceTabMenuEntries } from "@/screens/workspace/workspace-tab-menu"; import type { WorkspaceTabDescriptor } from "@/screens/workspace/workspace-tabs-types"; import { resolveWorkspaceHeader, @@ -143,6 +145,7 @@ function buildOpenIntentKey(input: { } type MobileWorkspaceTabSwitcherProps = { + tabs: WorkspaceTabDescriptor[]; activeTabKey: string; activeTabLabel: string; activeTabPresentation: WorkspaceTabPresentation | null; @@ -151,9 +154,16 @@ type MobileWorkspaceTabSwitcherProps = { tabPresentationsByKey: Map; onSelectSwitcherTab: (key: string) => void; onSelectNewTabOption: (key: typeof NEW_TAB_AGENT_OPTION_ID) => void; + onCopyResumeCommand: (agentId: string) => Promise | void; + onCopyAgentId: (agentId: string) => Promise | void; + onCloseTab: (tabId: string) => Promise | void; + onCloseTabsAbove: (tabId: string) => Promise | void; + onCloseTabsBelow: (tabId: string) => Promise | void; + onCloseOtherTabs: (tabId: string) => Promise | void; }; const MobileWorkspaceTabSwitcher = memo(function MobileWorkspaceTabSwitcher({ + tabs, activeTabKey, activeTabLabel, activeTabPresentation, @@ -162,15 +172,29 @@ const MobileWorkspaceTabSwitcher = memo(function MobileWorkspaceTabSwitcher({ tabPresentationsByKey, onSelectSwitcherTab, onSelectNewTabOption, + onCopyResumeCommand, + onCopyAgentId, + onCloseTab, + onCloseTabsAbove, + onCloseTabsBelow, + onCloseOtherTabs, }: MobileWorkspaceTabSwitcherProps) { const { theme } = useUnistyles(); const [isOpen, setIsOpen] = useState(false); const anchorRef = useRef(null); + const tabIndexByKey = useMemo(() => { + const map = new Map(); + tabs.forEach((tab, index) => { + map.set(tab.key, index); + }); + return map; + }, [tabs]); return ( [ styles.switcherTrigger, (hovered || pressed || isOpen) && styles.switcherTriggerActive, @@ -242,12 +266,71 @@ const MobileWorkspaceTabSwitcher = memo(function MobileWorkspaceTabSwitcher({ const presentation = tabPresentationsByKey.get(option.id) ?? deriveWorkspaceTabPresentation({ tab }); + const tabIndex = tabIndexByKey.get(tab.key) ?? -1; + const menuTestIDBase = `workspace-tab-menu-${tab.key}`; + const menuEntries = + tabIndex < 0 + ? [] + : buildWorkspaceTabMenuEntries({ + surface: "mobile", + tab, + index: tabIndex, + tabCount: tabs.length, + menuTestIDBase, + onCopyResumeCommand, + onCopyAgentId, + onCloseTab, + onCloseTabsBefore: onCloseTabsAbove, + onCloseTabsAfter: onCloseTabsBelow, + onCloseOtherTabs, + }); return ( + [ + styles.mobileTabMenuTrigger, + (open || pressed) && styles.mobileTabMenuTriggerActive, + ]} + > + + + + {menuEntries.map((entry) => + entry.kind === "separator" ? ( + + ) : ( + + {entry.label} + + ) + )} + + + } /> ); }} @@ -587,6 +670,29 @@ function WorkspaceScreenContent({ [normalizedServerId, normalizedWorkspaceId, openIntent] ); + const openWorkspaceDraftTab = useCallback( + (input?: { draftId?: string; focus?: boolean }) => { + if (!normalizedServerId || !normalizedWorkspaceId) { + return null; + } + + const tabId = openDraftTab({ + serverId: normalizedServerId, + workspaceId: normalizedWorkspaceId, + draftId: trimNonEmpty(input?.draftId) ?? generateDraftId(), + }); + if (tabId && input?.focus !== false) { + focusTab({ + serverId: normalizedServerId, + workspaceId: normalizedWorkspaceId, + tabId, + }); + } + return tabId; + }, + [focusTab, normalizedServerId, normalizedWorkspaceId, openDraftTab] + ); + useEffect(() => { if (!currentOpenIntentKey) { if (resolvedOpenIntentKey !== null) { @@ -619,24 +725,11 @@ function WorkspaceScreenContent({ if (openIntent.kind === "draft") { const draftId = openIntent.draftId.trim(); - const tabId = - draftId === "new" - ? openDraftTab({ - serverId: normalizedServerId, - workspaceId: normalizedWorkspaceId, - draftId: generateDraftId(), - }) - : openDraftTab({ - serverId: normalizedServerId, - workspaceId: normalizedWorkspaceId, - draftId, - }); + const tabId = openWorkspaceDraftTab({ + ...(draftId === "new" ? {} : { draftId }), + focus: true, + }); if (tabId) { - focusTab({ - serverId: normalizedServerId, - workspaceId: normalizedWorkspaceId, - tabId, - }); setResolvedOpenIntentKey(intentKey); } return; @@ -653,18 +746,12 @@ function WorkspaceScreenContent({ : { kind: "file", path: openIntent.path }, }); if (tabId) { - focusTab({ - serverId: normalizedServerId, - workspaceId: normalizedWorkspaceId, - tabId, - }); setResolvedOpenIntentKey(intentKey); } }, [ currentOpenIntentKey, - focusTab, - openDraftTab, openIntent, + openWorkspaceDraftTab, openOrFocusTab, persistenceKey, normalizedServerId, @@ -821,6 +908,10 @@ function WorkspaceScreenContent({ if (!persistenceKey) { return; } + if (openIntent) { + emptyWorkspaceSeedRef.current = null; + return; + } if (workspaceAgents.length > 0 || terminals.length > 0) { emptyWorkspaceSeedRef.current = null; return; @@ -834,20 +925,12 @@ function WorkspaceScreenContent({ return; } emptyWorkspaceSeedRef.current = workspaceKey; - const draftId = generateDraftId(); - const tabId = openDraftTab({ - serverId: normalizedServerId, - workspaceId: normalizedWorkspaceId, - draftId, - }); - if (tabId) { - navigateToTabId(tabId); - } + openWorkspaceDraftTab(); }, [ - navigateToTabId, normalizedServerId, normalizedWorkspaceId, - openDraftTab, + openIntent, + openWorkspaceDraftTab, persistenceKey, terminals.length, tabs.length, @@ -924,19 +1007,8 @@ function WorkspaceScreenContent({ }, [activeTabPresentation]); const handleCreateDraftTab = useCallback(() => { - if (!normalizedServerId || !normalizedWorkspaceId) { - return; - } - const draftId = generateDraftId(); - const tabId = openDraftTab({ - serverId: normalizedServerId, - workspaceId: normalizedWorkspaceId, - draftId, - }); - if (tabId) { - navigateToTabId(tabId); - } - }, [navigateToTabId, normalizedServerId, normalizedWorkspaceId, openDraftTab]); + openWorkspaceDraftTab(); + }, [openWorkspaceDraftTab]); const handleCreateTerminal = useCallback(() => { if (createTerminalMutation.isPending) { @@ -1375,29 +1447,23 @@ function WorkspaceScreenContent({ } if (target.kind === "draft") { + const tabId = activeTabId ?? target.draftId; return ( { - const tabId = activeTabId ?? target.draftId; const normalized = normalizeAgentSnapshot(agentSnapshot, normalizedServerId); - const nextTabId = retargetWorkspaceTab({ + retargetWorkspaceTab({ serverId: normalizedServerId, workspaceId: normalizedWorkspaceId, tabId, target: { kind: "agent", agentId: agentSnapshot.id }, }); - if (nextTabId) { - focusTab({ - serverId: normalizedServerId, - workspaceId: normalizedWorkspaceId, - tabId: nextTabId, - }); - } useSessionStore.getState().setAgents(normalizedServerId, (prev) => { const next = new Map(prev); next.set(agentSnapshot.id, normalized); @@ -1635,6 +1701,7 @@ function WorkspaceScreenContent({ {isMobile ? ( ) : ( ({ color: theme.colors.foreground, fontSize: theme.fontSize.sm, }, + mobileTabMenuTrigger: { + width: 28, + height: 28, + borderRadius: theme.borderRadius.md, + alignItems: "center", + justifyContent: "center", + }, + mobileTabMenuTriggerActive: { + backgroundColor: theme.colors.surface2, + }, tabsContainer: { borderBottomWidth: 1, borderBottomColor: theme.colors.border, diff --git a/packages/app/src/screens/workspace/workspace-tab-menu.test.ts b/packages/app/src/screens/workspace/workspace-tab-menu.test.ts new file mode 100644 index 000000000..32742bca3 --- /dev/null +++ b/packages/app/src/screens/workspace/workspace-tab-menu.test.ts @@ -0,0 +1,107 @@ +import { describe, expect, it, vi } from "vitest"; +import { buildWorkspaceTabMenuEntries } from "@/screens/workspace/workspace-tab-menu"; +import type { WorkspaceTabDescriptor } from "@/screens/workspace/workspace-tabs-types"; + +function createAgentTab(): WorkspaceTabDescriptor { + return { + key: "agent_123", + tabId: "agent_123", + kind: "agent", + agentId: "agent-123", + provider: "codex", + label: "Agent 123", + subtitle: "/repo", + titleState: "ready", + }; +} + +describe("buildWorkspaceTabMenuEntries", () => { + it("uses desktop tab ordering labels for desktop menus", () => { + const onCopyResumeCommand = vi.fn(); + const onCopyAgentId = vi.fn(); + const onCloseTab = vi.fn(); + const onCloseTabsBefore = vi.fn(); + const onCloseTabsAfter = vi.fn(); + const onCloseOtherTabs = vi.fn(); + + const entries = buildWorkspaceTabMenuEntries({ + surface: "desktop", + tab: createAgentTab(), + index: 1, + tabCount: 3, + menuTestIDBase: "workspace-tab-context-agent_123", + onCopyResumeCommand, + onCopyAgentId, + onCloseTab, + onCloseTabsBefore, + onCloseTabsAfter, + onCloseOtherTabs, + }); + + expect( + entries.filter((entry) => entry.kind === "item").map((entry) => entry.label) + ).toEqual([ + "Copy resume command", + "Copy agent id", + "Close to the left", + "Close to the right", + "Close other tabs", + "Close", + ]); + }); + + it("uses stacked ordering labels for mobile menus", () => { + const entries = buildWorkspaceTabMenuEntries({ + surface: "mobile", + tab: createAgentTab(), + index: 1, + tabCount: 3, + menuTestIDBase: "workspace-tab-menu-agent_123", + onCopyResumeCommand: vi.fn(), + onCopyAgentId: vi.fn(), + onCloseTab: vi.fn(), + onCloseTabsBefore: vi.fn(), + onCloseTabsAfter: vi.fn(), + onCloseOtherTabs: vi.fn(), + }); + + expect( + entries.filter((entry) => entry.kind === "item").map((entry) => entry.label) + ).toEqual([ + "Copy resume command", + "Copy agent id", + "Close tabs above", + "Close tabs below", + "Close other tabs", + "Close", + ]); + }); + + it("omits agent copy actions for non-agent tabs", () => { + const entries = buildWorkspaceTabMenuEntries({ + surface: "mobile", + tab: { + key: "draft_123", + tabId: "draft_123", + kind: "draft", + draftId: "draft_123", + label: "New agent", + subtitle: "/repo", + }, + index: 0, + tabCount: 1, + menuTestIDBase: "workspace-tab-menu-draft_123", + onCopyResumeCommand: vi.fn(), + onCopyAgentId: vi.fn(), + onCloseTab: vi.fn(), + onCloseTabsBefore: vi.fn(), + onCloseTabsAfter: vi.fn(), + onCloseOtherTabs: vi.fn(), + }); + + expect(entries.some((entry) => entry.kind === "item" && entry.label === "Copy agent id")).toBe( + false + ); + expect(entries.some((entry) => entry.kind === "separator")).toBe(false); + }); +}); diff --git a/packages/app/src/screens/workspace/workspace-tab-menu.ts b/packages/app/src/screens/workspace/workspace-tab-menu.ts new file mode 100644 index 000000000..c971c4407 --- /dev/null +++ b/packages/app/src/screens/workspace/workspace-tab-menu.ts @@ -0,0 +1,137 @@ +import type { WorkspaceTabDescriptor } from "@/screens/workspace/workspace-tabs-types"; + +export type WorkspaceTabMenuSurface = "desktop" | "mobile"; + +export type WorkspaceTabMenuEntry = + | { + kind: "item"; + key: string; + label: string; + disabled?: boolean; + destructive?: boolean; + testID: string; + onSelect: () => void; + } + | { + kind: "separator"; + key: string; + }; + +interface BuildWorkspaceTabMenuEntriesInput { + surface: WorkspaceTabMenuSurface; + tab: WorkspaceTabDescriptor; + index: number; + tabCount: number; + menuTestIDBase: string; + onCopyResumeCommand: (agentId: string) => Promise | void; + onCopyAgentId: (agentId: string) => Promise | void; + onCloseTab: (tabId: string) => Promise | void; + onCloseTabsBefore: (tabId: string) => Promise | void; + onCloseTabsAfter: (tabId: string) => Promise | void; + onCloseOtherTabs: (tabId: string) => Promise | void; +} + +function buildCloseBeforeLabel(surface: WorkspaceTabMenuSurface): string { + return surface === "mobile" ? "Close tabs above" : "Close to the left"; +} + +function buildCloseAfterLabel(surface: WorkspaceTabMenuSurface): string { + return surface === "mobile" ? "Close tabs below" : "Close to the right"; +} + +function buildCloseBeforeTestIDSuffix(surface: WorkspaceTabMenuSurface): string { + return surface === "mobile" ? "close-above" : "close-left"; +} + +function buildCloseAfterTestIDSuffix(surface: WorkspaceTabMenuSurface): string { + return surface === "mobile" ? "close-below" : "close-right"; +} + +export function buildWorkspaceTabMenuEntries( + input: BuildWorkspaceTabMenuEntriesInput +): WorkspaceTabMenuEntry[] { + const { + surface, + tab, + index, + tabCount, + menuTestIDBase, + onCopyResumeCommand, + onCopyAgentId, + onCloseTab, + onCloseTabsBefore, + onCloseTabsAfter, + onCloseOtherTabs, + } = input; + const isFirstTab = index === 0; + const isLastTab = index === tabCount - 1; + const isOnlyTab = tabCount <= 1; + const entries: WorkspaceTabMenuEntry[] = []; + + if (tab.kind === "agent") { + entries.push({ + kind: "item", + key: "copy-resume-command", + label: "Copy resume command", + testID: `${menuTestIDBase}-copy-resume-command`, + onSelect: () => { + void onCopyResumeCommand(tab.agentId); + }, + }); + entries.push({ + kind: "item", + key: "copy-agent-id", + label: "Copy agent id", + testID: `${menuTestIDBase}-copy-agent-id`, + onSelect: () => { + void onCopyAgentId(tab.agentId); + }, + }); + entries.push({ + kind: "separator", + key: "copy-separator", + }); + } + + entries.push({ + kind: "item", + key: "close-before", + label: buildCloseBeforeLabel(surface), + disabled: isFirstTab, + testID: `${menuTestIDBase}-${buildCloseBeforeTestIDSuffix(surface)}`, + onSelect: () => { + void onCloseTabsBefore(tab.tabId); + }, + }); + entries.push({ + kind: "item", + key: "close-after", + label: buildCloseAfterLabel(surface), + disabled: isLastTab, + testID: `${menuTestIDBase}-${buildCloseAfterTestIDSuffix(surface)}`, + onSelect: () => { + void onCloseTabsAfter(tab.tabId); + }, + }); + entries.push({ + kind: "item", + key: "close-others", + label: "Close other tabs", + disabled: isOnlyTab, + testID: `${menuTestIDBase}-close-others`, + onSelect: () => { + void onCloseOtherTabs(tab.tabId); + }, + }); + entries.push({ + kind: "item", + key: "close", + label: "Close", + testID: `${menuTestIDBase}-close`, + onSelect: () => { + void onCloseTab(tab.tabId); + }, + }); + + return entries; +} diff --git a/packages/app/src/screens/workspace/workspace-tab-model.test.ts b/packages/app/src/screens/workspace/workspace-tab-model.test.ts index 19b64365e..aef4b800a 100644 --- a/packages/app/src/screens/workspace/workspace-tab-model.test.ts +++ b/packages/app/src/screens/workspace/workspace-tab-model.test.ts @@ -104,6 +104,7 @@ describe("deriveWorkspaceTabModel", () => { }); expect(model.tabs.map((tab) => tab.descriptor.kind)).toEqual(["draft", "agent", "file"]); + expect(model.tabs[0]?.descriptor.label).toBe("New Agent"); }); it("applies stored order and appends newly-derived tabs deterministically", () => { diff --git a/packages/app/src/screens/workspace/workspace-tab-model.ts b/packages/app/src/screens/workspace/workspace-tab-model.ts index bf011b010..121aed287 100644 --- a/packages/app/src/screens/workspace/workspace-tab-model.ts +++ b/packages/app/src/screens/workspace/workspace-tab-model.ts @@ -169,8 +169,8 @@ export function deriveWorkspaceTabModel(input: { tabId: tab.tabId, kind: "draft", draftId: tab.target.draftId, - label: "Draft", - subtitle: "Draft", + label: "New Agent", + subtitle: "New Agent", }, }); continue; diff --git a/packages/app/src/screens/workspace/workspace-tab-presentation.tsx b/packages/app/src/screens/workspace/workspace-tab-presentation.tsx index 85c953441..a4e2b7ffd 100644 --- a/packages/app/src/screens/workspace/workspace-tab-presentation.tsx +++ b/packages/app/src/screens/workspace/workspace-tab-presentation.tsx @@ -1,4 +1,4 @@ -import type { ReactElement } from "react"; +import type { ReactElement, ReactNode } from "react"; import { Pressable, Text, View } from "react-native"; import { Bot, Check, FileText, Pencil, Terminal } from "lucide-react-native"; import { StyleSheet, useUnistyles } from "react-native-unistyles"; @@ -124,6 +124,7 @@ type WorkspaceTabOptionRowProps = { selected: boolean; active: boolean; onPress: () => void; + trailingAccessory?: ReactNode; }; export function WorkspaceTabOptionRow({ @@ -131,30 +132,36 @@ export function WorkspaceTabOptionRow({ selected, active, onPress, + trailingAccessory, }: WorkspaceTabOptionRowProps): ReactElement { const { theme } = useUnistyles(); return ( - [ - styles.optionRow, - (hovered || pressed || active) && styles.optionRowActive, - ]} - > - - - - - - {presentation.titleState === "loading" ? "Loading..." : presentation.label} - - + + [ + styles.optionMainPressable, + (hovered || pressed || active) && styles.optionRowActive, + ]} + > + + + + + + {presentation.titleState === "loading" ? "Loading..." : presentation.label} + + + {selected ? ( ) : null} - + {trailingAccessory ? ( + {trailingAccessory} + ) : null} + ); } @@ -178,12 +185,21 @@ const styles = StyleSheet.create((theme) => ({ alignItems: "center", minHeight: 36, gap: theme.spacing[2], - paddingHorizontal: theme.spacing[3], - paddingVertical: theme.spacing[2], + paddingHorizontal: theme.spacing[1], + paddingVertical: theme.spacing[1], borderRadius: 0, marginHorizontal: theme.spacing[1], marginBottom: theme.spacing[1], }, + optionMainPressable: { + flex: 1, + minWidth: 0, + flexDirection: "row", + alignItems: "center", + gap: theme.spacing[2], + paddingHorizontal: theme.spacing[2], + paddingVertical: theme.spacing[2], + }, optionRowActive: { backgroundColor: theme.colors.surface1, }, @@ -204,6 +220,9 @@ const styles = StyleSheet.create((theme) => ({ width: 16, alignItems: "center", justifyContent: "center", - marginLeft: "auto", + }, + optionTrailingAccessorySlot: { + alignItems: "center", + justifyContent: "center", }, })); diff --git a/packages/app/src/stores/workspace-tabs-store.test.ts b/packages/app/src/stores/workspace-tabs-store.test.ts index ad34b3529..ef2c01686 100644 --- a/packages/app/src/stores/workspace-tabs-store.test.ts +++ b/packages/app/src/stores/workspace-tabs-store.test.ts @@ -137,6 +137,35 @@ describe("workspace-tabs-store retargetTab", () => { expect(order).toEqual([draftTabId]); }); + it("retargeting a background draft keeps the currently focused tab focused", () => { + const draftTabId = "draft_background"; + const key = buildWorkspaceTabPersistenceKey({ serverId: SERVER_ID, workspaceId: WORKSPACE_ID }); + expect(key).toBeTruthy(); + const workspaceKey = key as string; + + useWorkspaceTabsStore.getState().openDraftTab({ + serverId: SERVER_ID, + workspaceId: WORKSPACE_ID, + draftId: draftTabId, + }); + const focusedFileTabId = useWorkspaceTabsStore.getState().openOrFocusTab({ + serverId: SERVER_ID, + workspaceId: WORKSPACE_ID, + target: { kind: "file", path: "/repo/worktree/src/index.ts" }, + }); + + useWorkspaceTabsStore.getState().retargetTab({ + serverId: SERVER_ID, + workspaceId: WORKSPACE_ID, + tabId: draftTabId, + target: { kind: "agent", agentId: "created-agent" }, + }); + + expect(useWorkspaceTabsStore.getState().focusedTabIdByWorkspace[workspaceKey]).toBe( + focusedFileTabId + ); + }); + it("openOrFocusTab re-focuses an existing file tab after the workspace focus changed", () => { const key = buildWorkspaceTabPersistenceKey({ serverId: SERVER_ID, workspaceId: WORKSPACE_ID }); expect(key).toBeTruthy(); diff --git a/packages/app/src/voice/audio-engine.native.ts b/packages/app/src/voice/audio-engine.native.ts index f3d9e8812..d202f4818 100644 --- a/packages/app/src/voice/audio-engine.native.ts +++ b/packages/app/src/voice/audio-engine.native.ts @@ -1,19 +1,9 @@ -import { - addExpoTwoWayAudioEventListener, - getMicrophonePermissionsAsync, - initialize, - playPCMData, - requestMicrophonePermissionsAsync, - resumePlayback, - stopPlayback, - tearDown, - toggleRecording, -} from "@boudra/expo-two-way-audio"; +import { Audio } from "expo-av"; +import * as FileSystem from "expo-file-system"; import { THINKING_TONE_REPEAT_GAP_MS, } from "@/utils/thinking-tone"; import { - THINKING_TONE_NATIVE_PCM_BASE64, THINKING_TONE_NATIVE_PCM_DURATION_MS, } from "@/utils/thinking-tone.native-pcm"; import type { @@ -21,7 +11,9 @@ import type { AudioEngineCallbacks, AudioPlaybackSource, } from "@/voice/audio-engine-types"; -import { Buffer } from "buffer"; + +// Use expo-av for playback instead of expo-two-way-audio (temporary test) +const USE_EXPO_AV_PLAYBACK = true; interface QueuedAudio { audio: AudioPlaybackSource; @@ -38,53 +30,6 @@ interface AudioEngineTraceOptions { traceLabel?: string; } -function resamplePcm16( - pcm: Uint8Array, - fromRate: number, - toRate: number -): Uint8Array { - if (fromRate === toRate) { - return pcm; - } - - const inputSamples = Math.floor(pcm.length / 2); - const outputSamples = Math.floor((inputSamples * toRate) / fromRate); - const output = new Uint8Array(outputSamples * 2); - const ratio = fromRate / toRate; - - const readInt16 = (sampleIndex: number): number => { - const offset = sampleIndex * 2; - if (offset + 1 >= pcm.length) { - return 0; - } - const lo = pcm[offset]!; - const hi = pcm[offset + 1]!; - let value = (hi << 8) | lo; - if (value & 0x8000) { - value -= 0x10000; - } - return value; - }; - - const writeInt16 = (sampleIndex: number, value: number): void => { - const clamped = Math.max(-32768, Math.min(32767, Math.round(value))); - const offset = sampleIndex * 2; - output[offset] = clamped & 0xff; - output[offset + 1] = (clamped >> 8) & 0xff; - }; - - for (let i = 0; i < outputSamples; i += 1) { - const sourceIndex = i * ratio; - const i0 = Math.floor(sourceIndex); - const frac = sourceIndex - i0; - const s0 = readInt16(i0); - const s1 = readInt16(Math.min(inputSamples - 1, i0 + 1)); - writeInt16(i, s0 + (s1 - s0) * frac); - } - - return output; -} - function parsePcmSampleRate(mimeType: string): number | null { const match = /rate=(\d+)/i.exec(mimeType); if (!match) { @@ -117,6 +62,7 @@ export function createAudioEngine( }; thinkingTone: CuePcm | null; destroyed: boolean; + mockVolumeInterval: ReturnType | null; } = { initialized: false, captureActive: false, @@ -132,41 +78,58 @@ export function createAudioEngine( }, thinkingTone: null, destroyed: false, + mockVolumeInterval: null, }; - const microphoneSubscription = addExpoTwoWayAudioEventListener( - "onMicrophoneData", - (event) => { - if (!refs.captureActive || refs.muted) { - return; - } - callbacks.onCaptureData(event.data); - } - ); + // Only subscribe to native events if not mocking + let microphoneSubscription: { remove(): void }; + let volumeSubscription: { remove(): void }; - const volumeSubscription = addExpoTwoWayAudioEventListener( - "onInputVolumeLevelData", - (event) => { - if (!refs.captureActive) { - return; + if (MOCK_MODE) { + microphoneSubscription = { remove() {} }; + volumeSubscription = { remove() {} }; + } else { + const native = require("@boudra/expo-two-way-audio"); + microphoneSubscription = native.addExpoTwoWayAudioEventListener( + "onMicrophoneData", + (event: any) => { + if (!refs.captureActive || refs.muted) { + return; + } + callbacks.onCaptureData(event.data); } - const level = refs.muted ? 0 : event.data; - callbacks.onVolumeLevel(level); - } - ); + ); + volumeSubscription = native.addExpoTwoWayAudioEventListener( + "onInputVolumeLevelData", + (event: any) => { + if (!refs.captureActive) { + return; + } + const level = refs.muted ? 0 : event.data; + callbacks.onVolumeLevel(level); + } + ); + } async function ensureInitialized(): Promise { if (refs.initialized) { return; } - await initialize(); + if (!MOCK_MODE) { + const native = require("@boudra/expo-two-way-audio"); + await native.initialize(); + } refs.initialized = true; } async function ensureMicrophonePermission(): Promise { - let permission = await getMicrophonePermissionsAsync().catch(() => null); + if (MOCK_MODE) { + return; + } + const native = require("@boudra/expo-two-way-audio"); + let permission = await native.getMicrophonePermissionsAsync().catch(() => null); if (!permission?.granted) { - permission = await requestMicrophonePermissionsAsync().catch(() => null); + permission = await native.requestMicrophonePermissionsAsync().catch(() => null); } if (!permission?.granted) { throw new Error( @@ -179,9 +142,8 @@ export function createAudioEngine( if (refs.thinkingTone) { return refs.thinkingTone; } - const pcm16k = Buffer.from(THINKING_TONE_NATIVE_PCM_BASE64, "base64"); const durationMs = THINKING_TONE_NATIVE_PCM_DURATION_MS; - refs.thinkingTone = { pcm16k, durationMs }; + refs.thinkingTone = { pcm16k: new Uint8Array(0), durationMs }; return refs.thinkingTone; } @@ -194,7 +156,6 @@ export function createAudioEngine( async function playAudio(audio: AudioPlaybackSource): Promise { await ensureInitialized(); - resumePlayback(); return await new Promise(async (resolve, reject) => { refs.activePlayback = { resolve, reject, settled: false }; @@ -203,10 +164,16 @@ export function createAudioEngine( const arrayBuffer = await audio.arrayBuffer(); const pcm = new Uint8Array(arrayBuffer); const inputRate = parsePcmSampleRate(audio.type || "") ?? 24000; - const pcm16k = resamplePcm16(pcm, inputRate, 16000); - const durationSec = pcm16k.length / 2 / 16000; + const durationSec = pcm.length / 2 / inputRate; + + console.log(`[AudioEngine.native] playPCMData: MOCK_MODE=${MOCK_MODE} inputRate=${inputRate} inputBytes=${pcm.length} durationSec=${durationSec.toFixed(3)}`); + + if (!MOCK_MODE) { + const native = require("@boudra/expo-two-way-audio"); + native.resumePlayback(); + native.playPCMData(pcm); + } - playPCMData(pcm16k); clearPlaybackTimeout(); refs.playbackTimeout = setTimeout(() => { clearPlaybackTimeout(); @@ -248,6 +215,13 @@ export function createAudioEngine( refs.processingQueue = false; } + function nativeStopPlayback(): void { + if (!MOCK_MODE) { + const native = require("@boudra/expo-two-way-audio"); + native.stopPlayback(); + } + } + function stopLooping(): void { refs.looping.active = false; refs.looping.token += 1; @@ -255,7 +229,7 @@ export function createAudioEngine( clearTimeout(refs.looping.timeout); refs.looping.timeout = null; } - stopPlayback(); + nativeStopPlayback(); } return { @@ -273,14 +247,22 @@ export function createAudioEngine( this.stop(); this.clearQueue(); if (refs.captureActive) { - toggleRecording(false); + if (!MOCK_MODE) { + const native = require("@boudra/expo-two-way-audio"); + native.toggleRecording(false); + } + if (refs.mockVolumeInterval) { + clearInterval(refs.mockVolumeInterval); + refs.mockVolumeInterval = null; + } refs.captureActive = false; } clearPlaybackTimeout(); refs.muted = false; callbacks.onVolumeLevel(0); - if (refs.initialized) { - tearDown(); + if (refs.initialized && !MOCK_MODE) { + const native = require("@boudra/expo-two-way-audio"); + native.tearDown(); refs.initialized = false; } microphoneSubscription.remove(); @@ -295,7 +277,22 @@ export function createAudioEngine( try { await ensureMicrophonePermission(); await ensureInitialized(); - toggleRecording(true); + + if (MOCK_MODE) { + // Emit fake volume levels and empty PCM data periodically + refs.mockVolumeInterval = setInterval(() => { + if (!refs.captureActive) { + return; + } + const fakeVolume = refs.muted ? 0 : 0.15 + Math.random() * 0.5; + callbacks.onVolumeLevel(fakeVolume); + // Send empty PCM chunk to keep the pipeline alive + callbacks.onCaptureData(new Uint8Array(3200)); + }, 100); + } else { + const native = require("@boudra/expo-two-way-audio"); + native.toggleRecording(true); + } refs.captureActive = true; } catch (error) { const wrapped = error instanceof Error ? error : new Error(String(error)); @@ -306,7 +303,15 @@ export function createAudioEngine( async stopCapture() { if (refs.captureActive) { - toggleRecording(false); + if (MOCK_MODE) { + if (refs.mockVolumeInterval) { + clearInterval(refs.mockVolumeInterval); + refs.mockVolumeInterval = null; + } + } else { + const native = require("@boudra/expo-two-way-audio"); + native.toggleRecording(false); + } } refs.captureActive = false; refs.muted = false; @@ -335,7 +340,7 @@ export function createAudioEngine( }, stop() { - stopPlayback(); + nativeStopPlayback(); clearPlaybackTimeout(); const active = refs.activePlayback; refs.activePlayback = null; @@ -368,20 +373,17 @@ export function createAudioEngine( void (async () => { try { await ensureInitialized(); - const cue = - audio.byteLength > 0 - ? { - pcm16k: audio, - durationMs: (audio.byteLength / 2 / 16000) * 1000, - } - : await ensureThinkingTone(); + const cue = await ensureThinkingTone(); const loop = () => { if (!refs.looping.active || refs.looping.token !== token) { return; } - resumePlayback(); - playPCMData(cue.pcm16k); + if (!MOCK_MODE) { + const native = require("@boudra/expo-two-way-audio"); + native.resumePlayback(); + native.playPCMData(cue.pcm16k); + } refs.looping.timeout = setTimeout( loop, cue.durationMs + (gapMs || THINKING_TONE_REPEAT_GAP_MS) diff --git a/packages/app/src/voice/speech-segmenter.test.ts b/packages/app/src/voice/speech-segmenter.test.ts deleted file mode 100644 index ac9a6c386..000000000 --- a/packages/app/src/voice/speech-segmenter.test.ts +++ /dev/null @@ -1,272 +0,0 @@ -import { describe, expect, it, vi } from "vitest"; - -import { SpeechSegmenter } from "./speech-segmenter"; - -const mkPcmBytes = (length: number): Uint8Array => { - const bytes = new Uint8Array(length); - for (let i = 0; i < length; i++) bytes[i] = i % 255; - return bytes; -}; - -describe("SpeechSegmenter", () => { - it("streams continuously and flushes at stop", () => { - const onAudioSegment = vi.fn(); - const segmenter = new SpeechSegmenter( - { - enableContinuousStreaming: true, - volumeThreshold: 0.3, - silenceDurationMs: 2000, - speechConfirmationMs: 300, - detectionGracePeriodMs: 200, - minChunkDurationMs: 100, // ensure we only flush on stop - pcmSampleRate: 1000, - }, - { onAudioSegment } - ); - - segmenter.pushPcmChunk(mkPcmBytes(50)); - segmenter.pushPcmChunk(mkPcmBytes(50)); - expect(onAudioSegment).not.toHaveBeenCalled(); - - segmenter.stop(Date.now()); - - expect(onAudioSegment).toHaveBeenCalledTimes(1); - const lastCall = onAudioSegment.mock.calls.at(-1)![0]; - expect(lastCall.isLast).toBe(true); - expect(lastCall.audioData.length).toBeGreaterThan(0); - }); - - it("detects speech, calls onSpeechStart, and flushes on speech end", () => { - const onAudioSegment = vi.fn(); - const onSpeechStart = vi.fn(); - const onSpeechEnd = vi.fn(); - const detectingChanges: boolean[] = []; - const speakingChanges: boolean[] = []; - - const segmenter = new SpeechSegmenter( - { - enableContinuousStreaming: false, - volumeThreshold: 0.3, - silenceDurationMs: 2000, - speechConfirmationMs: 300, - detectionGracePeriodMs: 200, - minChunkDurationMs: 100, - pcmSampleRate: 1000, - }, - { - onAudioSegment, - onSpeechStart, - onSpeechEnd, - onDetectingChange: (v) => detectingChanges.push(v), - onSpeakingChange: (v) => speakingChanges.push(v), - } - ); - - const t0 = 10_000; - - // Start detection. - segmenter.pushVolumeLevel(0.5, t0); - segmenter.pushPcmChunk(mkPcmBytes(50)); - expect(detectingChanges).toEqual([true]); - expect(speakingChanges).toEqual([true]); - expect(onSpeechStart).not.toHaveBeenCalled(); - - // Confirm speech. - segmenter.pushVolumeLevel(0.5, t0 + 300); - segmenter.pushPcmChunk(mkPcmBytes(50)); - expect(onSpeechStart).toHaveBeenCalledTimes(1); - expect(detectingChanges).toEqual([true, false]); - expect(speakingChanges).toEqual([true]); - - // End speech after silence. - segmenter.pushVolumeLevel(0.0, t0 + 301); - segmenter.pushPcmChunk(mkPcmBytes(50)); - segmenter.pushVolumeLevel(0.0, t0 + 301 + 2000); - segmenter.pushVolumeLevel(0.0, t0 + 301 + 2000 + 2000); - - expect(onSpeechEnd).toHaveBeenCalledTimes(1); - expect(detectingChanges).toEqual([true, false, true, false]); - expect(speakingChanges).toEqual([true, false]); - expect(onAudioSegment).toHaveBeenCalled(); - const lastCall = onAudioSegment.mock.calls.at(-1)![0]; - expect(lastCall.isLast).toBe(true); - expect(lastCall.audioData.length).toBeGreaterThan(0); - }); - - it("keeps detection alive across a brief pause and confirms short utterances", () => { - const onSpeechStart = vi.fn(); - const detectingChanges: boolean[] = []; - - const segmenter = new SpeechSegmenter( - { - enableContinuousStreaming: false, - volumeThreshold: 0.18, - silenceDurationMs: 1400, - speechConfirmationMs: 120, - detectionGracePeriodMs: 700, - minChunkDurationMs: 100, - pcmSampleRate: 1000, - }, - { - onSpeechStart, - onDetectingChange: (v) => detectingChanges.push(v), - } - ); - - const t0 = 20_000; - - segmenter.pushVolumeLevel(0.4, t0); - segmenter.pushPcmChunk(mkPcmBytes(20)); - segmenter.pushVolumeLevel(0.0, t0 + 80); - segmenter.pushPcmChunk(mkPcmBytes(20)); - segmenter.pushVolumeLevel(0.4, t0 + 140); - segmenter.pushPcmChunk(mkPcmBytes(20)); - - expect(detectingChanges).toContain(true); - expect(onSpeechStart).toHaveBeenCalledTimes(1); - }); - - it("keeps utterance open after fade-out and resumes speaking during silence grace", () => { - const onAudioSegment = vi.fn(); - const onSpeechStart = vi.fn(); - const onSpeechEnd = vi.fn(); - const speakingChanges: boolean[] = []; - - const segmenter = new SpeechSegmenter( - { - enableContinuousStreaming: false, - volumeThreshold: 0.2, - silenceDurationMs: 1500, - speechConfirmationMs: 120, - detectionGracePeriodMs: 400, - minChunkDurationMs: 1000, // keep everything buffered until final flush - pcmSampleRate: 1000, - }, - { - onAudioSegment, - onSpeechStart, - onSpeechEnd, - onSpeakingChange: (v) => speakingChanges.push(v), - } - ); - - const t0 = 30_000; - - // Start + confirm speaking. - segmenter.pushVolumeLevel(0.6, t0); - segmenter.pushPcmChunk(mkPcmBytes(200)); - segmenter.pushVolumeLevel(0.6, t0 + 130); - segmenter.pushPcmChunk(mkPcmBytes(200)); - expect(onSpeechStart).toHaveBeenCalledTimes(1); - - // Drop below threshold: meter should fade, but turn remains open. - segmenter.pushVolumeLevel(0.0, t0 + 200); - segmenter.pushPcmChunk(mkPcmBytes(200)); - segmenter.pushVolumeLevel(0.0, t0 + 500); - segmenter.pushPcmChunk(mkPcmBytes(200)); - - // Speak again before silence timeout expires: continue same utterance. - segmenter.pushVolumeLevel(0.6, t0 + 900); - segmenter.pushPcmChunk(mkPcmBytes(200)); - expect(onSpeechStart).toHaveBeenCalledTimes(1); - expect(onSpeechEnd).not.toHaveBeenCalled(); - - // End for real. - segmenter.pushVolumeLevel(0.0, t0 + 1000); - segmenter.pushPcmChunk(mkPcmBytes(200)); - segmenter.pushVolumeLevel(0.0, t0 + 2600); - segmenter.pushVolumeLevel(0.0, t0 + 4200); - - expect(speakingChanges).toEqual([true, false, true, false]); - expect(onSpeechEnd).toHaveBeenCalledTimes(1); - const finalCalls = onAudioSegment.mock.calls.filter((call) => call[0].isLast); - expect(finalCalls).toHaveLength(1); - }); - - it("keeps confirmed speech active above release threshold even when below start threshold", () => { - const onSpeechStart = vi.fn(); - const onSpeechEnd = vi.fn(); - const speakingChanges: boolean[] = []; - - const segmenter = new SpeechSegmenter( - { - enableContinuousStreaming: false, - volumeThreshold: 0.3, - volumeReleaseThreshold: 0.1, - silenceDurationMs: 1200, - speechConfirmationMs: 120, - detectionGracePeriodMs: 200, - minChunkDurationMs: 1000, - pcmSampleRate: 1000, - }, - { - onSpeechStart, - onSpeechEnd, - onSpeakingChange: (v) => speakingChanges.push(v), - } - ); - - const t0 = 40_000; - - // Confirm speech. - segmenter.pushVolumeLevel(0.4, t0); - segmenter.pushPcmChunk(mkPcmBytes(50)); - segmenter.pushVolumeLevel(0.4, t0 + 130); - segmenter.pushPcmChunk(mkPcmBytes(50)); - expect(onSpeechStart).toHaveBeenCalledTimes(1); - - // Stay between start and release thresholds for longer than silence timeout: - // should still be considered speaking. - segmenter.pushVolumeLevel(0.15, t0 + 400); - segmenter.pushPcmChunk(mkPcmBytes(50)); - segmenter.pushVolumeLevel(0.15, t0 + 1000); - segmenter.pushPcmChunk(mkPcmBytes(50)); - segmenter.pushVolumeLevel(0.15, t0 + 2000); - segmenter.pushPcmChunk(mkPcmBytes(50)); - - expect(onSpeechEnd).not.toHaveBeenCalled(); - expect(speakingChanges.at(-1)).toBe(true); - - // Now actually drop below release threshold and allow silence timeout. - segmenter.pushVolumeLevel(0.0, t0 + 2001); - segmenter.pushPcmChunk(mkPcmBytes(50)); - segmenter.pushVolumeLevel(0.0, t0 + 3405); - segmenter.pushVolumeLevel(0.0, t0 + 4706); - - expect(onSpeechEnd).toHaveBeenCalledTimes(1); - expect(speakingChanges.at(-1)).toBe(false); - }); - - it("ignores brief confirmed dips below release threshold without flip-flopping speaking", () => { - const speakingChanges: boolean[] = []; - - const segmenter = new SpeechSegmenter( - { - enableContinuousStreaming: false, - volumeThreshold: 0.2, - volumeReleaseThreshold: 0.08, - confirmedDropGracePeriodMs: 250, - silenceDurationMs: 1500, - speechConfirmationMs: 120, - detectionGracePeriodMs: 200, - minChunkDurationMs: 1000, - pcmSampleRate: 1000, - }, - { - onSpeakingChange: (v) => speakingChanges.push(v), - } - ); - - const t0 = 50_000; - segmenter.pushVolumeLevel(0.4, t0); - segmenter.pushVolumeLevel(0.4, t0 + 130); // confirm speaking - - // Two short dips below release threshold; both shorter than debounce. - segmenter.pushVolumeLevel(0.05, t0 + 300); - segmenter.pushVolumeLevel(0.09, t0 + 500); - segmenter.pushVolumeLevel(0.05, t0 + 620); - segmenter.pushVolumeLevel(0.1, t0 + 760); - - expect(speakingChanges).toEqual([true]); - }); -}); diff --git a/packages/app/src/voice/speech-segmenter.ts b/packages/app/src/voice/speech-segmenter.ts deleted file mode 100644 index 6beae1343..000000000 --- a/packages/app/src/voice/speech-segmenter.ts +++ /dev/null @@ -1,338 +0,0 @@ -import { Buffer } from "buffer"; - -export type SpeechSegment = { audioData: string; isLast: boolean }; - -export type SpeechSegmenterConfig = { - enableContinuousStreaming: boolean; - volumeThreshold: number; // 0..1 - volumeReleaseThreshold?: number; // 0..1; lower threshold used to keep active speech from dropping out - confirmedDropGracePeriodMs?: number; // ms dip debounce before leaving confirmed speaking - silenceDurationMs: number; - speechConfirmationMs: number; - detectionGracePeriodMs: number; - minChunkDurationMs?: number; - pcmSampleRate?: number; - pcmChannels?: number; - pcmBitsPerSample?: number; -}; - -export type SpeechSegmenterCallbacks = { - onAudioSegment?: (segment: SpeechSegment) => void; - onSpeechStart?: () => void; - onSpeechEnd?: () => void; - onDetectingChange?: (isDetecting: boolean) => void; - onSpeakingChange?: (isSpeaking: boolean) => void; -}; - -function uint8ArrayToBase64(bytes: Uint8Array): string { - // NOTE: This is performance-sensitive during continuous streaming. - // Buffer-backed base64 is significantly faster than manual string building. - try { - return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString("base64"); - } catch { - let binary = ""; - for (let i = 0; i < bytes.length; i++) { - binary += String.fromCharCode(bytes[i]); - } - // eslint-disable-next-line no-restricted-globals - return btoa(binary); - } -} - -function concatenateUint8Arrays(arrays: Uint8Array[]): Uint8Array { - const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0); - const result = new Uint8Array(totalLength); - let offset = 0; - for (const arr of arrays) { - result.set(arr, offset); - offset += arr.length; - } - return result; -} - -export class SpeechSegmenter { - private config: Required> & - Required>; - private callbacks: SpeechSegmenterCallbacks; - - private audioBuffer: Uint8Array[] = []; - private bufferedBytes = 0; - - private speechDetectionStartMs: number | null = null; - private detectionSilenceStartMs: number | null = null; - private confirmedDropStartMs: number | null = null; - private silenceStartMs: number | null = null; - private isSpeaking = false; - private isDetecting = false; - private speechConfirmed = false; - - private pcmBytesPerMs: number; - private minChunkBytes: number; - - constructor(config: SpeechSegmenterConfig, callbacks: SpeechSegmenterCallbacks = {}) { - const volumeReleaseThreshold = this.resolveVolumeReleaseThreshold( - config.volumeThreshold, - config.volumeReleaseThreshold - ); - this.config = { - ...config, - volumeReleaseThreshold, - confirmedDropGracePeriodMs: config.confirmedDropGracePeriodMs ?? 250, - minChunkDurationMs: config.minChunkDurationMs ?? 1000, - pcmSampleRate: config.pcmSampleRate ?? 16000, - pcmChannels: config.pcmChannels ?? 1, - pcmBitsPerSample: config.pcmBitsPerSample ?? 16, - }; - this.callbacks = callbacks; - this.pcmBytesPerMs = 0; - this.minChunkBytes = 0; - this.recomputeDerived(); - } - - updateConfig(next: SpeechSegmenterConfig): void { - const volumeReleaseThreshold = this.resolveVolumeReleaseThreshold( - next.volumeThreshold, - next.volumeReleaseThreshold - ); - this.config = { - ...next, - volumeReleaseThreshold, - confirmedDropGracePeriodMs: next.confirmedDropGracePeriodMs ?? this.config.confirmedDropGracePeriodMs, - minChunkDurationMs: next.minChunkDurationMs ?? this.config.minChunkDurationMs, - pcmSampleRate: next.pcmSampleRate ?? this.config.pcmSampleRate, - pcmChannels: next.pcmChannels ?? this.config.pcmChannels, - pcmBitsPerSample: next.pcmBitsPerSample ?? this.config.pcmBitsPerSample, - }; - this.recomputeDerived(); - } - - setCallbacks(callbacks: SpeechSegmenterCallbacks): void { - this.callbacks = callbacks; - } - - getSpeechDetectionStartMs(): number | null { - return this.speechDetectionStartMs; - } - - getIsSpeaking(): boolean { - return this.isSpeaking; - } - - getIsDetecting(): boolean { - return this.isDetecting; - } - - getVolumeReleaseThreshold(): number { - return this.config.volumeReleaseThreshold; - } - - reset(): void { - this.audioBuffer = []; - this.bufferedBytes = 0; - this.speechDetectionStartMs = null; - this.detectionSilenceStartMs = null; - this.confirmedDropStartMs = null; - this.silenceStartMs = null; - this.isSpeaking = false; - this.isDetecting = false; - this.speechConfirmed = false; - } - - flush(isLast: boolean): void { - if (this.audioBuffer.length === 0) { - this.bufferedBytes = 0; - return; - } - - const combinedBinary = concatenateUint8Arrays(this.audioBuffer); - const pcmBase64 = uint8ArrayToBase64(combinedBinary); - this.callbacks.onAudioSegment?.({ audioData: pcmBase64, isLast }); - - this.audioBuffer = []; - this.bufferedBytes = 0; - } - - /** - * Called when the input stream emits a PCM16 chunk (Uint8Array of bytes). - * In non-continuous mode, chunk buffering is gated by the VAD state. - */ - pushPcmChunk(chunk: Uint8Array): void { - if (chunk.length === 0) { - return; - } - - if (this.config.enableContinuousStreaming) { - this.audioBuffer.push(chunk); - this.bufferedBytes += chunk.length; - if (this.bufferedBytes >= this.minChunkBytes) { - this.flush(false); - } - return; - } - - // Buffer if we're detecting or speaking. When speech is confirmed, we also - // stream partial chunks to reduce latency. - if (this.speechDetectionStartMs !== null || this.isSpeaking) { - this.audioBuffer.push(chunk); - this.bufferedBytes += chunk.length; - - if (this.speechConfirmed && this.bufferedBytes >= this.minChunkBytes) { - this.flush(false); - } - } - } - - /** - * Called with a normalized volume level (0..1). Drives VAD transitions. - */ - pushVolumeLevel(volume: number, nowMs: number): void { - if (this.config.enableContinuousStreaming) { - return; - } - - const speechDetectedForStart = volume > this.config.volumeThreshold; - const speechDetectedForContinue = volume > this.config.volumeReleaseThreshold; - - if (!this.speechConfirmed) { - if (speechDetectedForStart) { - // Initial detection phase. - this.confirmedDropStartMs = null; - if (this.speechDetectionStartMs === null) { - this.speechDetectionStartMs = nowMs; - this.detectionSilenceStartMs = null; - this.audioBuffer = []; - this.bufferedBytes = 0; - this.setDetecting(true); - this.setSpeaking(true); - return; - } - - // Volume is back above threshold - reset grace period. - this.detectionSilenceStartMs = null; - this.setSpeaking(true); - - const speechDuration = nowMs - this.speechDetectionStartMs; - if (speechDuration >= this.config.speechConfirmationMs) { - this.speechConfirmed = true; - this.silenceStartMs = null; - this.setDetecting(false); - this.callbacks.onSpeechStart?.(); - } - return; - } - - if (this.speechDetectionStartMs !== null) { - // Volume dropped during detection phase - apply grace period. - if (this.detectionSilenceStartMs === null) { - this.detectionSilenceStartMs = nowMs; - this.setSpeaking(false); - return; - } - - const graceDuration = nowMs - this.detectionSilenceStartMs; - if (graceDuration >= this.config.detectionGracePeriodMs) { - // Cancel detection. - this.speechDetectionStartMs = null; - this.detectionSilenceStartMs = null; - this.confirmedDropStartMs = null; - this.audioBuffer = []; - this.bufferedBytes = 0; - this.setDetecting(false); - this.setSpeaking(false); - } - } - return; - } - - if (speechDetectedForContinue) { - // Continuing confirmed speech (or resuming during silence grace). - this.confirmedDropStartMs = null; - this.silenceStartMs = null; - this.setDetecting(false); - this.setSpeaking(true); - return; - } - - if (this.confirmedDropStartMs === null) { - this.confirmedDropStartMs = nowMs; - return; - } - - const confirmedDropDuration = nowMs - this.confirmedDropStartMs; - if (confirmedDropDuration < this.config.confirmedDropGracePeriodMs) { - return; - } - - // Potential speech END while utterance remains open. - if (this.silenceStartMs === null) { - this.silenceStartMs = nowMs; - this.setDetecting(true); - this.setSpeaking(false); - return; - } - - const silenceDuration = nowMs - this.silenceStartMs; - if (silenceDuration >= this.config.silenceDurationMs) { - // Speech END confirmed. - this.speechConfirmed = false; - this.speechDetectionStartMs = null; - this.detectionSilenceStartMs = null; - this.confirmedDropStartMs = null; - this.silenceStartMs = null; - this.setDetecting(false); - this.setSpeaking(false); - this.callbacks.onSpeechEnd?.(); - if (this.audioBuffer.length === 0) { - // Important: downstream expects an explicit segment boundary marker. - this.callbacks.onAudioSegment?.({ audioData: "", isLast: true }); - } else { - this.flush(true); - } - } - } - - stop(nowMs: number): void { - void nowMs; - if (this.config.enableContinuousStreaming) { - this.flush(true); - } - // Ensure observers see state clear transitions. - this.setDetecting(false); - this.setSpeaking(false); - this.reset(); - } - - private setDetecting(next: boolean): void { - if (this.isDetecting === next) { - return; - } - this.isDetecting = next; - this.callbacks.onDetectingChange?.(next); - } - - private setSpeaking(next: boolean): void { - if (this.isSpeaking === next) { - return; - } - this.isSpeaking = next; - this.callbacks.onSpeakingChange?.(next); - } - - private recomputeDerived(): void { - this.pcmBytesPerMs = - (this.config.pcmSampleRate * - this.config.pcmChannels * - (this.config.pcmBitsPerSample / 8)) / - 1000; - this.minChunkBytes = Math.round(this.pcmBytesPerMs * this.config.minChunkDurationMs); - } - - private resolveVolumeReleaseThreshold( - volumeThreshold: number, - configured?: number - ): number { - const defaultReleaseThreshold = volumeThreshold * 0.4; - const raw = configured ?? defaultReleaseThreshold; - return Math.max(0, Math.min(raw, volumeThreshold)); - } -} diff --git a/packages/app/src/voice/voice-runtime.test.ts b/packages/app/src/voice/voice-runtime.test.ts index d30ba1248..db181c56c 100644 --- a/packages/app/src/voice/voice-runtime.test.ts +++ b/packages/app/src/voice/voice-runtime.test.ts @@ -30,11 +30,30 @@ function createSessionAdapter(serverId = "server-1"): VoiceSessionAdapter { serverId, setVoiceMode: vi.fn().mockResolvedValue(undefined), sendVoiceAudioChunk: vi.fn().mockResolvedValue(undefined), + audioPlayed: vi.fn().mockResolvedValue(undefined), abortRequest: vi.fn().mockResolvedValue(undefined), setAssistantAudioPlaying: vi.fn(), }; } +function createAudioPayload(args: { + id: string; + groupId: string; + chunkIndex: number; + isLastChunk: boolean; + isVoiceMode?: boolean; +}) { + return { + id: args.id, + groupId: args.groupId, + chunkIndex: args.chunkIndex, + isLastChunk: args.isLastChunk, + isVoiceMode: args.isVoiceMode ?? true, + format: "pcm", + audio: Buffer.from(`chunk-${args.chunkIndex}`).toString("base64"), + } as const; +} + function createServerInfo(): DaemonServerInfo { return { serverId: "server-1", @@ -91,37 +110,21 @@ describe("voice runtime", () => { }); }); - it("transitions from capturing to submitting to waiting on the final chunk", async () => { + it("streams continuous PCM chunks and waits after receiving a transcript", async () => { const adapter = createSessionAdapter(); const { runtime } = createRuntime(); runtime.registerSession(adapter); await runtime.startVoice("server-1", "agent-1"); - runtime.handleCaptureVolume(0.4); - await vi.advanceTimersByTimeAsync( - REALTIME_VOICE_VAD_CONFIG.speechConfirmationMs + 10 - ); - runtime.handleCaptureVolume(0.4); runtime.handleCapturePcm(new Uint8Array(32000)); - expect(runtime.getSnapshot().phase).toBe("capturing"); - - runtime.handleCapturePcm(new Uint8Array(4000)); - runtime.handleCaptureVolume(0); - await vi.advanceTimersByTimeAsync( - REALTIME_VOICE_VAD_CONFIG.confirmedDropGracePeriodMs + 10 - ); - runtime.handleCaptureVolume(0); - await vi.advanceTimersByTimeAsync( - REALTIME_VOICE_VAD_CONFIG.silenceDurationMs + 10 - ); - runtime.handleCaptureVolume(0); - await Promise.resolve(); + expect(runtime.getSnapshot().phase).toBe("listening"); expect(adapter.sendVoiceAudioChunk).toHaveBeenLastCalledWith( expect.any(String), - "audio/pcm;rate=16000;bits=16", - true + "audio/pcm;rate=16000;bits=16" ); + + runtime.onTranscriptionResult("server-1", "hello"); expect(runtime.getSnapshot().phase).toBe("waiting"); }); @@ -138,6 +141,110 @@ describe("voice runtime", () => { expect(adapter.setAssistantAudioPlaying).toHaveBeenCalledWith(true); }); + it("starts playback on the first chunk before isLastChunk arrives", async () => { + const adapter = createSessionAdapter(); + let resolvePlay!: (duration: number) => void; + const engine = createAudioEngineMock(); + vi.mocked(engine.play).mockImplementation( + () => + new Promise((resolve) => { + resolvePlay = resolve; + }) + ); + const { runtime } = createRuntime({ engine }); + runtime.registerSession(adapter); + + await runtime.startVoice("server-1", "agent-1"); + runtime.onTurnEvent("server-1", "agent-1", "turn_started"); + + runtime.handleAudioOutput( + "server-1", + createAudioPayload({ + id: "chunk-0", + groupId: "group-1", + chunkIndex: 0, + isLastChunk: false, + }) + ); + + await vi.waitFor(() => { + expect(engine.play).toHaveBeenCalledTimes(1); + expect(runtime.getSnapshot().phase).toBe("playing"); + expect(adapter.audioPlayed).not.toHaveBeenCalled(); + }); + + runtime.handleAudioOutput( + "server-1", + createAudioPayload({ + id: "chunk-1", + groupId: "group-1", + chunkIndex: 1, + isLastChunk: true, + }) + ); + + expect(engine.play).toHaveBeenCalledTimes(1); + resolvePlay(0.1); + + await vi.waitFor(() => { + expect(adapter.audioPlayed).toHaveBeenCalledWith("chunk-0"); + expect(engine.play).toHaveBeenCalledTimes(2); + }); + }); + + it("acknowledges chunks only after they are consumed and finishes after the final chunk", async () => { + const adapter = createSessionAdapter(); + const playResolvers: Array<(duration: number) => void> = []; + const engine = createAudioEngineMock(); + vi.mocked(engine.play).mockImplementation( + () => + new Promise((resolve) => { + playResolvers.push(resolve); + }) + ); + const { runtime } = createRuntime({ engine }); + runtime.registerSession(adapter); + + await runtime.startVoice("server-1", "agent-1"); + runtime.onTurnEvent("server-1", "agent-1", "turn_started"); + + runtime.handleAudioOutput( + "server-1", + createAudioPayload({ + id: "chunk-0", + groupId: "group-1", + chunkIndex: 0, + isLastChunk: false, + }) + ); + runtime.handleAudioOutput( + "server-1", + createAudioPayload({ + id: "chunk-1", + groupId: "group-1", + chunkIndex: 1, + isLastChunk: true, + }) + ); + + await vi.waitFor(() => { + expect(engine.play).toHaveBeenCalledTimes(1); + }); + expect(adapter.audioPlayed).not.toHaveBeenCalled(); + + playResolvers.shift()!(0.1); + await vi.waitFor(() => { + expect(adapter.audioPlayed).toHaveBeenCalledWith("chunk-0"); + expect(engine.play).toHaveBeenCalledTimes(2); + }); + + playResolvers.shift()!(0.1); + await vi.waitFor(() => { + expect(adapter.audioPlayed).toHaveBeenCalledWith("chunk-1"); + expect(runtime.getSnapshot().phase).toBe("waiting"); + }); + }); + it("returns to waiting after assistant playback when the turn is still active", async () => { const adapter = createSessionAdapter(); const { runtime, engine } = createRuntime(); @@ -152,6 +259,18 @@ describe("voice runtime", () => { expect(engine.playLooping).toHaveBeenCalled(); }); + it("starts the thinking tone when an agent turn begins before playback", async () => { + const adapter = createSessionAdapter(); + const { runtime, engine } = createRuntime(); + runtime.registerSession(adapter); + + await runtime.startVoice("server-1", "agent-1"); + runtime.onTurnEvent("server-1", "agent-1", "turn_started"); + + expect(runtime.getSnapshot().phase).toBe("waiting"); + expect(engine.playLooping).toHaveBeenCalled(); + }); + it("returns to listening after assistant playback once the turn is complete", async () => { const adapter = createSessionAdapter(); const { runtime, engine } = createRuntime(); @@ -164,10 +283,11 @@ describe("voice runtime", () => { runtime.onAssistantAudioFinished("server-1"); expect(runtime.getSnapshot().phase).toBe("listening"); - expect(engine.playLooping).not.toHaveBeenCalled(); + expect(engine.playLooping).toHaveBeenCalledTimes(1); + expect(engine.stopLooping).toHaveBeenCalled(); }); - it("interrupts the active turn on barge-in after the grace period", async () => { + it("keeps local volume alone non-authoritative for playback interruption", async () => { const adapter = createSessionAdapter(); const { runtime, engine } = createRuntime(); runtime.registerSession(adapter); @@ -177,16 +297,46 @@ describe("voice runtime", () => { runtime.onAssistantAudioStarted("server-1"); runtime.handleCaptureVolume(0.5); - await vi.advanceTimersByTimeAsync( - REALTIME_VOICE_VAD_CONFIG.speechConfirmationMs + 10 - ); - await vi.advanceTimersByTimeAsync( - REALTIME_VOICE_VAD_CONFIG.interruptGracePeriodMs - ); + expect(runtime.getTelemetrySnapshot().isSpeaking).toBe(false); + expect(adapter.abortRequest).not.toHaveBeenCalled(); + expect(engine.stop).not.toHaveBeenCalled(); + }); + + it("keeps the meter white state driven by server speech detection", async () => { + const adapter = createSessionAdapter(); + const { runtime } = createRuntime(); + runtime.registerSession(adapter); + + await runtime.startVoice("server-1", "agent-1"); + runtime.handleCaptureVolume(0.7); + + expect(runtime.getTelemetrySnapshot()).toMatchObject({ + volume: expect.any(Number), + isDetecting: true, + isSpeaking: false, + }); + + runtime.onServerSpeechStateChanged("server-1", true); + expect(runtime.getTelemetrySnapshot().isSpeaking).toBe(true); + + runtime.onServerSpeechStateChanged("server-1", false); + expect(runtime.getTelemetrySnapshot().isSpeaking).toBe(false); + }); + + it("stops assistant playback immediately when server speech starts", async () => { + const adapter = createSessionAdapter(); + const { runtime, engine } = createRuntime(); + runtime.registerSession(adapter); + + await runtime.startVoice("server-1", "agent-1"); + runtime.onAssistantAudioStarted("server-1"); + + runtime.onServerSpeechStateChanged("server-1", true); - expect(adapter.abortRequest).toHaveBeenCalled(); expect(engine.stop).toHaveBeenCalled(); - expect(runtime.getSnapshot().phase).toBe("capturing"); + expect(engine.clearQueue).toHaveBeenCalled(); + expect(adapter.setAssistantAudioPlaying).toHaveBeenCalledWith(false); + expect(runtime.getTelemetrySnapshot().isSpeaking).toBe(true); }); it("authoritatively stops and suppresses later voice audio", async () => { diff --git a/packages/app/src/voice/voice-runtime.ts b/packages/app/src/voice/voice-runtime.ts index 37c577ad3..4966de7a9 100644 --- a/packages/app/src/voice/voice-runtime.ts +++ b/packages/app/src/voice/voice-runtime.ts @@ -1,9 +1,12 @@ -import type { AgentStreamEventPayload } from "@server/shared/messages"; +import { Buffer } from "buffer"; +import type { + AgentStreamEventPayload, + SessionOutboundMessage, +} from "@server/shared/messages"; import { resolveVoiceUnavailableMessage } from "@/utils/server-info-capabilities"; import type { DaemonServerInfo } from "@/stores/session-store"; import type { AudioEngine } from "@/voice/audio-engine-types"; import { REALTIME_VOICE_VAD_CONFIG } from "@/voice/realtime-voice-config"; -import { SpeechSegmenter } from "@/voice/speech-segmenter"; const PCM_MIME_TYPE = "audio/pcm;rate=16000;bits=16"; const KEEP_AWAKE_TAG = "paseo:voice"; @@ -22,7 +25,6 @@ export type VoiceRuntimePhase = | "disabled" | "starting" | "listening" - | "capturing" | "submitting" | "waiting" | "playing" @@ -47,11 +49,8 @@ export interface VoiceRuntimeTelemetrySnapshot { export interface VoiceSessionAdapter { serverId: string; setVoiceMode(enabled: boolean, agentId?: string): Promise; - sendVoiceAudioChunk( - audioData: string, - mimeType: string, - isLast: boolean - ): Promise; + sendVoiceAudioChunk(audioData: string, mimeType: string): Promise; + audioPlayed(chunkId: string): Promise; abortRequest(): Promise; setAssistantAudioPlaying(isPlaying: boolean): void; } @@ -68,16 +67,51 @@ interface RuntimeSessionState { connected: boolean; } +interface ContinuousVoiceUploader { + reset(): void; + pushPcmChunk(chunk: Uint8Array): void; +} + interface RuntimeState { snapshot: VoiceRuntimeSnapshot; telemetry: VoiceRuntimeTelemetrySnapshot; turnInProgress: boolean; + serverSpeechDetected: boolean; transportReady: boolean; generation: number; - speechInterruptTimer: ReturnType | null; - speechInterruptSent: boolean; segmentDurationTimer: ReturnType | null; lastDisplayVolumePublishMs: number; + localSpeechStartedAt: number | null; +} + +type AudioOutputPayload = Extract< + SessionOutboundMessage, + { type: "audio_output" } +>["payload"]; + +type StreamingPlaybackChunk = { + id: string; + chunkIndex: number; + source: { arrayBuffer(): Promise; size: number; type: string }; +}; + +type StreamingPlaybackGroup = { + groupId: string; + isVoiceMode: boolean; + shouldPlay: boolean; + chunks: Map; + nextChunkToPlay: number; + finalChunkIndex: number | null; + started: boolean; + ackedChunkIds: Set; +}; + +interface RuntimePlaybackState { + groups: Map; + orderedGroupIds: string[]; + activeGroupId: string | null; + processing: boolean; + generation: number; } const INITIAL_SNAPSHOT: VoiceRuntimeSnapshot = { @@ -131,6 +165,7 @@ export interface VoiceRuntime { updateSessionConnection(serverId: string, connected: boolean): void; handleCapturePcm(chunk: Uint8Array): void; handleCaptureVolume(level: number): void; + handleAudioOutput(serverId: string, payload: AudioOutputPayload): void; startVoice(serverId: string, agentId: string): Promise; stopVoice(): Promise; destroy(): Promise; @@ -140,6 +175,7 @@ export interface VoiceRuntime { onAssistantAudioStarted(serverId: string): void; onAssistantAudioFinished(serverId: string): void; onTranscriptionResult(serverId: string, text: string): void; + onServerSpeechStateChanged(serverId: string, isSpeaking: boolean): void; onTurnEvent(serverId: string, agentId: string, eventType: TurnEventType): void; } @@ -151,12 +187,19 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { snapshot: INITIAL_SNAPSHOT, telemetry: INITIAL_TELEMETRY, turnInProgress: false, + serverSpeechDetected: false, transportReady: false, generation: 0, - speechInterruptTimer: null, - speechInterruptSent: false, segmentDurationTimer: null, lastDisplayVolumePublishMs: 0, + localSpeechStartedAt: null, + }; + const playback: RuntimePlaybackState = { + groups: new Map(), + orderedGroupIds: [], + activeGroupId: null, + processing: false, + generation: 0, }; function emit(): void { @@ -213,10 +256,151 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { return sessions.get(state.snapshot.activeServerId) ?? null; } - function clearSpeechInterruptTimer(): void { - if (state.speechInterruptTimer) { - clearTimeout(state.speechInterruptTimer); - state.speechInterruptTimer = null; + function decodeAudioChunk(base64: string): Uint8Array { + return Buffer.from(base64, "base64"); + } + + function toPlaybackSource( + bytes: Uint8Array, + format: string + ): { arrayBuffer(): Promise; size: number; type: string } { + const mimeType = + format === "pcm" + ? "audio/pcm;rate=24000;bits=16" + : format === "mp3" + ? "audio/mpeg" + : `audio/${format}`; + + return { + size: bytes.byteLength, + type: mimeType, + async arrayBuffer() { + return Uint8Array.from(bytes).buffer; + }, + }; + } + + function resetPlaybackState(): void { + const hadGroups = playback.groups.size; + playback.generation += 1; + playback.groups.clear(); + playback.orderedGroupIds = []; + playback.activeGroupId = null; + playback.processing = false; + if (hadGroups > 0) { + console.log(`[VoiceRuntime] resetPlaybackState: cleared ${hadGroups} groups, new gen=${playback.generation}`); + } + } + + function activateNextPlaybackGroup(): void { + while (playback.orderedGroupIds.length > 0) { + const groupId = playback.orderedGroupIds[0]!; + if (playback.groups.has(groupId)) { + playback.activeGroupId = groupId; + return; + } + playback.orderedGroupIds.shift(); + } + playback.activeGroupId = null; + } + + async function acknowledgeChunk(chunkId: string): Promise { + const activeSession = getActiveSession(); + if (!activeSession) { + return; + } + await activeSession.adapter.audioPlayed(chunkId); + } + + async function processPlaybackQueue(serverId: string): Promise { + if (playback.processing) { + return; + } + + playback.processing = true; + const generation = playback.generation; + console.log(`[VoiceRuntime] processPlaybackQueue start gen=${generation} activeGroup=${playback.activeGroupId}`); + try { + while (playback.activeGroupId) { + if (generation !== playback.generation) { + console.log(`[VoiceRuntime] processPlaybackQueue abort: generation changed ${generation} -> ${playback.generation}`); + return; + } + + const group = playback.groups.get(playback.activeGroupId); + if (!group) { + activateNextPlaybackGroup(); + continue; + } + + const nextChunk = group.chunks.get(group.nextChunkToPlay); + if (!nextChunk) { + if ( + group.finalChunkIndex !== null && + group.nextChunkToPlay > group.finalChunkIndex + ) { + console.log(`[VoiceRuntime] group=${group.groupId} complete, played=${group.started} chunks=${group.nextChunkToPlay}`); + playback.groups.delete(group.groupId); + if (playback.orderedGroupIds[0] === group.groupId) { + playback.orderedGroupIds.shift(); + } else { + playback.orderedGroupIds = playback.orderedGroupIds.filter( + (value) => value !== group.groupId + ); + } + if (group.started && group.isVoiceMode) { + api.onAssistantAudioFinished(serverId); + } + activateNextPlaybackGroup(); + continue; + } + console.log(`[VoiceRuntime] group=${group.groupId} waiting for chunk=${group.nextChunkToPlay} (finalChunkIndex=${group.finalChunkIndex})`); + return; + } + + group.chunks.delete(group.nextChunkToPlay); + + if (group.shouldPlay && !group.started && group.isVoiceMode) { + group.started = true; + console.log(`[VoiceRuntime] group=${group.groupId} first play starting at chunk=${group.nextChunkToPlay}`); + api.onAssistantAudioStarted(serverId); + } + + const playStart = Date.now(); + try { + if (group.shouldPlay) { + await deps.engine.play(nextChunk.source); + console.log(`[VoiceRuntime] played chunk=${group.nextChunkToPlay} id=${nextChunk.id} took=${Date.now() - playStart}ms`); + } else { + console.log(`[VoiceRuntime] SKIPPED chunk=${group.nextChunkToPlay} id=${nextChunk.id} shouldPlay=false`); + } + } catch (error) { + if (generation !== playback.generation) { + console.log(`[VoiceRuntime] play error + generation changed, aborting`); + return; + } + console.error(`[VoiceRuntime] play error chunk=${group.nextChunkToPlay} took=${Date.now() - playStart}ms:`, error); + } + + if (generation !== playback.generation) { + console.log(`[VoiceRuntime] post-play generation changed ${generation} -> ${playback.generation}`); + return; + } + + if (!group.ackedChunkIds.has(nextChunk.id)) { + group.ackedChunkIds.add(nextChunk.id); + void acknowledgeChunk(nextChunk.id).catch((error) => { + console.warn("[VoiceRuntime] Failed to confirm audio playback:", error); + }); + } + + group.nextChunkToPlay += 1; + } + } finally { + if (generation === playback.generation) { + playback.processing = false; + } + console.log(`[VoiceRuntime] processPlaybackQueue exit gen=${generation} currentGen=${playback.generation}`); } } @@ -227,9 +411,7 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { } } - function reconcileSegmentDurationTimer( - segmenter: SpeechSegmenter - ): void { + function reconcileSegmentDurationTimer(): void { if (!state.telemetry.isDetecting && !state.telemetry.isSpeaking) { clearSegmentDurationTimer(); patchTelemetry((prev) => ({ ...prev, segmentDuration: 0 })); @@ -241,7 +423,7 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { } state.segmentDurationTimer = setInterval(() => { - const startedAt = segmenter.getSpeechDetectionStartMs(); + const startedAt = state.localSpeechStartedAt; patchTelemetry((prev) => ({ ...prev, segmentDuration: startedAt ? Date.now() - startedAt : 0, @@ -262,10 +444,9 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { deps.engine.stopLooping(); } - function resetSegmenter(segmenter: SpeechSegmenter): void { - segmenter.reset(); - clearSpeechInterruptTimer(); + function resetCaptureTelemetry(): void { clearSegmentDurationTimer(); + state.localSpeechStartedAt = null; patchTelemetry({ ...INITIAL_TELEMETRY }); } @@ -277,134 +458,34 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { deps.engine.playLooping(new Uint8Array(0), THINKING_TONE_REPEAT_GAP_MS); } - async function interruptActiveTurn(): Promise { - const activeSession = getActiveSession(); - if (!activeSession) { - return; - } + const uploader: ContinuousVoiceUploader = { + reset() {}, + pushPcmChunk(chunk) { + const activeSession = getActiveSession(); + if ( + !activeSession || + !state.transportReady || + !state.snapshot.isVoiceMode || + chunk.byteLength === 0 + ) { + return; + } - stopCue(); - deps.engine.stop(); - deps.engine.clearQueue(); - activeSession.adapter.setAssistantAudioPlaying(false); - patchSnapshot((prev) => ({ ...prev, phase: "capturing" })); - - try { - await activeSession.adapter.abortRequest(); - } catch (error) { - console.error("[VoiceRuntime] Failed to abort active turn:", error); - } - } - - const segmenter = new SpeechSegmenter( - { - enableContinuousStreaming: false, - volumeThreshold: REALTIME_VOICE_VAD_CONFIG.volumeThreshold, - confirmedDropGracePeriodMs: - REALTIME_VOICE_VAD_CONFIG.confirmedDropGracePeriodMs, - silenceDurationMs: REALTIME_VOICE_VAD_CONFIG.silenceDurationMs, - speechConfirmationMs: REALTIME_VOICE_VAD_CONFIG.speechConfirmationMs, - detectionGracePeriodMs: REALTIME_VOICE_VAD_CONFIG.detectionGracePeriodMs, + void activeSession.adapter + .sendVoiceAudioChunk(Buffer.from(chunk).toString("base64"), PCM_MIME_TYPE) + .catch((error) => { + console.error("[VoiceRuntime] Failed to send audio chunk:", error); + }); }, - { - onAudioSegment: ({ audioData, isLast }) => { - const activeSession = getActiveSession(); - if (!activeSession || !state.transportReady || !state.snapshot.isVoiceMode) { - return; - } - - const generation = state.generation; - patchSnapshot((prev) => ({ - ...prev, - phase: isLast ? "submitting" : "capturing", - })); - if (isLast) { - state.turnInProgress = true; - } - - void activeSession.adapter - .sendVoiceAudioChunk(audioData, PCM_MIME_TYPE, isLast) - .then(() => { - if ( - !isLast || - generation !== state.generation || - !state.snapshot.isVoiceMode || - state.snapshot.activeServerId !== activeSession.adapter.serverId || - state.snapshot.phase !== "submitting" - ) { - return; - } - patchSnapshot((prev) => ({ ...prev, phase: "waiting" })); - reconcileCue(); - }) - .catch((error) => { - console.error("[VoiceRuntime] Failed to send audio segment:", error); - }); - }, - onSpeechStart: () => { - stopCue(); - }, - onSpeechEnd: () => { - clearSpeechInterruptTimer(); - state.speechInterruptSent = false; - reconcileCue(); - }, - onDetectingChange: (isDetecting) => { - const previous = state.telemetry; - patchTelemetry((prev) => ({ ...prev, isDetecting })); - if (previous.isDetecting !== isDetecting) { - } - if (!previous.isDetecting && isDetecting) { - stopCue(); - } - reconcileSegmentDurationTimer(segmenter); - reconcileCue(); - }, - onSpeakingChange: (isSpeaking) => { - const previous = state.telemetry; - patchTelemetry((prev) => ({ ...prev, isSpeaking })); - if (previous.isSpeaking !== isSpeaking) { - } - - if (!previous.isSpeaking && isSpeaking) { - stopCue(); - if ( - state.snapshot.phase === "waiting" || - state.snapshot.phase === "playing" - ) { - clearSpeechInterruptTimer(); - state.speechInterruptTimer = setTimeout(() => { - state.speechInterruptTimer = null; - if ( - state.speechInterruptSent || - !state.snapshot.isVoiceMode || - !state.telemetry.isSpeaking - ) { - return; - } - state.speechInterruptSent = true; - void interruptActiveTurn(); - }, REALTIME_VOICE_VAD_CONFIG.interruptGracePeriodMs); - } - } - - if (!isSpeaking) { - clearSpeechInterruptTimer(); - state.speechInterruptSent = false; - } - - reconcileSegmentDurationTimer(segmenter); - reconcileCue(); - }, - } - ); + }; function resetToDisabledState(): void { state.transportReady = false; state.turnInProgress = false; - state.speechInterruptSent = false; + state.serverSpeechDetected = false; state.lastDisplayVolumePublishMs = 0; - resetSegmenter(segmenter); + uploader.reset(); + resetCaptureTelemetry(); patchSnapshot({ ...INITIAL_SNAPSHOT }); } @@ -435,6 +516,8 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { async function performLocalStop(): Promise { stopCue(); + uploader.reset(); + resetPlaybackState(); deps.engine.stop(); deps.engine.clearQueue(); await deps.engine.stopCapture().catch(() => undefined); @@ -466,7 +549,7 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { } } - return { + const api: VoiceRuntime = { subscribe(listener) { listeners.add(listener); return () => { @@ -524,7 +607,7 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { if (!state.snapshot.isVoiceMode || state.snapshot.isMuted) { return; } - segmenter.pushPcmChunk(chunk); + uploader.pushPcmChunk(chunk); }, handleCaptureVolume(level) { @@ -532,9 +615,81 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { const displayLevel = state.snapshot.isMuted ? 0 : level; publishDisplayVolume(displayLevel, nowMs); if (!state.snapshot.isVoiceMode || state.snapshot.isMuted) { + state.localSpeechStartedAt = null; + patchTelemetry((prev) => ({ + ...prev, + isDetecting: false, + isSpeaking: false, + segmentDuration: 0, + })); return; } - segmenter.pushVolumeLevel(level, nowMs); + + const isActive = level > REALTIME_VOICE_VAD_CONFIG.volumeThreshold; + if (isActive && state.localSpeechStartedAt === null) { + state.localSpeechStartedAt = nowMs; + } + if (!isActive) { + state.localSpeechStartedAt = null; + } + + patchTelemetry((prev) => ({ + ...prev, + isDetecting: isActive, + isSpeaking: state.serverSpeechDetected, + })); + reconcileSegmentDurationTimer(); + if (!isActive) { + patchTelemetry((prev) => ({ ...prev, segmentDuration: 0 })); + } + reconcileCue(); + }, + + handleAudioOutput(serverId, payload) { + if ( + serverId !== state.snapshot.activeServerId || + !state.snapshot.isVoiceMode || + !payload.isVoiceMode + ) { + console.log(`[VoiceRuntime] audio_output DROPPED: activeServer=${state.snapshot.activeServerId} serverId=${serverId} isVoiceMode=${state.snapshot.isVoiceMode} payloadVoice=${payload.isVoiceMode}`); + return; + } + + const groupId = payload.groupId ?? payload.id; + const chunkIndex = payload.chunkIndex ?? 0; + console.log(`[VoiceRuntime] audio_output groupId=${groupId} chunk=${chunkIndex} isLast=${payload.isLastChunk} size=${payload.audio.length} format=${payload.format}`); + + let group = playback.groups.get(groupId); + if (!group) { + const shouldPlay = api.shouldPlayVoiceAudio(serverId); + console.log(`[VoiceRuntime] new group=${groupId} shouldPlay=${shouldPlay} phase=${state.snapshot.phase} isDetecting=${state.telemetry.isDetecting} isSpeaking=${state.telemetry.isSpeaking}`); + group = { + groupId, + isVoiceMode: payload.isVoiceMode, + shouldPlay: api.shouldPlayVoiceAudio(serverId), + chunks: new Map(), + nextChunkToPlay: 0, + finalChunkIndex: null, + started: false, + ackedChunkIds: new Set(), + }; + playback.groups.set(groupId, group); + playback.orderedGroupIds.push(groupId); + if (!playback.activeGroupId) { + playback.activeGroupId = groupId; + } + } + + group.chunks.set(chunkIndex, { + id: payload.id, + chunkIndex, + source: toPlaybackSource(decodeAudioChunk(payload.audio), payload.format), + }); + if (payload.isLastChunk) { + group.finalChunkIndex = chunkIndex; + } + + void processPlaybackQueue(serverId); }, async startVoice(serverId, agentId) { @@ -594,7 +749,8 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { state.transportReady = true; state.turnInProgress = false; - resetSegmenter(segmenter); + uploader.reset(); + resetCaptureTelemetry(); patchSnapshot((prev) => ({ ...prev, isVoiceMode: true, @@ -619,8 +775,10 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { })); try { - state.transportReady = false; stopCue(); + uploader.reset(); + state.transportReady = false; + resetPlaybackState(); deps.engine.stop(); deps.engine.clearQueue(); activeSession?.adapter.setAssistantAudioPlaying(false); @@ -647,7 +805,8 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { toggleMute() { const nextMuted = deps.engine.toggleMute(); if (nextMuted) { - resetSegmenter(segmenter); + uploader.reset(); + resetCaptureTelemetry(); patchSnapshot((prev) => ({ ...prev, isMuted: true, @@ -672,9 +831,7 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { state.snapshot.isVoiceMode && state.snapshot.activeServerId === serverId && state.snapshot.phase !== "stopping" && - state.snapshot.phase !== "disabled" && - !state.telemetry.isDetecting && - !state.telemetry.isSpeaking + state.snapshot.phase !== "disabled" ); }, @@ -701,8 +858,6 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { } if (state.turnInProgress) { - patchSnapshot((prev) => ({ ...prev, phase: "waiting" })); - reconcileCue(); return; } @@ -719,6 +874,9 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { } if (text.trim()) { + state.turnInProgress = true; + patchSnapshot((prev) => ({ ...prev, phase: "waiting" })); + reconcileCue(); return; } @@ -727,6 +885,30 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { stopCue(); }, + onServerSpeechStateChanged(serverId, isSpeaking) { + if ( + serverId !== state.snapshot.activeServerId || + !state.snapshot.isVoiceMode + ) { + return; + } + + console.log(`[VoiceRuntime] onServerSpeechStateChanged isSpeaking=${isSpeaking} phase=${state.snapshot.phase}`); + state.serverSpeechDetected = isSpeaking; + if (isSpeaking) { + resetPlaybackState(); + deps.engine.stop(); + deps.engine.clearQueue(); + getActiveSession()?.adapter.setAssistantAudioPlaying(false); + } + patchTelemetry((prev) => ({ + ...prev, + isSpeaking, + })); + reconcileSegmentDurationTimer(); + reconcileCue(); + }, + onTurnEvent(serverId, agentId, eventType) { if ( !state.snapshot.isVoiceMode || @@ -738,6 +920,10 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { if (eventType === "turn_started") { state.turnInProgress = true; + if (state.snapshot.phase !== "playing") { + patchSnapshot((prev) => ({ ...prev, phase: "waiting" })); + reconcileCue(); + } return; } @@ -748,4 +934,6 @@ export function createVoiceRuntime(deps: VoiceRuntimeDeps): VoiceRuntime { stopCue(); }, }; + + return api; } diff --git a/packages/server/package.json b/packages/server/package.json index dbc3694e6..8c471a610 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -11,6 +11,7 @@ "dist/server", "dist/src", "dist/scripts", + "src/server/speech/providers/local/sherpa/assets", "README.md", ".env.example", "agent-prompt.md" @@ -35,7 +36,7 @@ "dev": "NODE_ENV=development tsx scripts/dev-runner.ts", "dev:tsx": "NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' src/server/index.ts", "build": "node -e \"require('node:fs').rmSync('dist',{ recursive: true, force: true })\" && npm run build:lib && npm run build:scripts", - "build:lib": "tsc -p tsconfig.server.json --incremental false", + "build:lib": "tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx');\"", "build:scripts": "tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"", "prepack": "npm run build", "start": "NODE_ENV=production node dist/server/server/index.js", diff --git a/packages/server/src/client/daemon-client.ts b/packages/server/src/client/daemon-client.ts index ca320ac7f..204c33faf 100644 --- a/packages/server/src/client/daemon-client.ts +++ b/packages/server/src/client/daemon-client.ts @@ -1648,7 +1648,11 @@ export class DaemonClient { return response } - async sendVoiceAudioChunk(audio: string, format: string, isLast: boolean): Promise { + async sendVoiceAudioChunk( + audio: string, + format: string, + isLast = false + ): Promise { this.sendSessionMessage({ type: 'voice_audio_chunk', audio, format, isLast }) } diff --git a/packages/server/src/server/agent/tts-manager.test.ts b/packages/server/src/server/agent/tts-manager.test.ts index 6a98064b3..9ece0ef9a 100644 --- a/packages/server/src/server/agent/tts-manager.test.ts +++ b/packages/server/src/server/agent/tts-manager.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from "vitest"; +import { describe, expect, it, vi } from "vitest"; import pino from "pino"; import { Readable } from "node:stream"; @@ -74,7 +74,143 @@ describe("TTSManager", () => { ); expect(calls.length).toBeGreaterThan(1); - expect(calls.every((text) => text.length <= 400)).toBe(true); + expect(calls.every((text) => text.length <= 260)).toBe(true); + expect(calls[0]!.length).toBeLessThanOrEqual(120); + expect(calls.slice(1).some((text) => text.length > calls[0]!.length)).toBe(true); + }); + + it("prefetches the next segment before current playback completes", async () => { + const started: string[] = []; + const gateResolvers = new Map void>(); + const tts: TextToSpeechProvider = { + async synthesizeSpeech(text: string): Promise<{ stream: Readable; format: string }> { + started.push(text); + await new Promise((resolve) => { + gateResolvers.set(text, resolve); + }); + return { + stream: Readable.from([Buffer.from(text)]), + format: "pcm;rate=24000", + }; + }, + }; + + const manager = new TTSManager("s1", pino({ level: "silent" }), tts); + const abort = new AbortController(); + const segments = [ + "One sentence that is long enough to stand alone in the first voice chunk.", + "Two sentence that is also long enough to require a separate synthesized group.", + "Three sentence that should only be synthesized after playback of the first group starts because it carries extra detail about the lookahead pipeline and should exceed the later packing target on its own.", + ]; + const text = segments.join(" "); + const emittedGroups: string[] = []; + let firstChunkId: string | null = null; + let releaseSecondAck: (() => void) | null = null; + + const task = manager.generateAndWaitForPlayback( + text, + (msg) => { + if (msg.type !== "audio_output") { + return; + } + + if (!emittedGroups.includes(msg.payload.groupId!)) { + emittedGroups.push(msg.payload.groupId!); + } + + if (emittedGroups.length === 1) { + firstChunkId = msg.payload.id; + return; + } + + releaseSecondAck?.(); + manager.confirmAudioPlayed(msg.payload.id); + }, + abort.signal, + true + ); + + expect(started).toEqual([segments[0], segments[1]]); + + gateResolvers.get(segments[0])?.(); + await vi.waitFor(() => { + expect(firstChunkId).not.toBeNull(); + }); + + expect(started).toEqual(segments); + expect(emittedGroups).toHaveLength(1); + + const secondGroupPlayed = new Promise((resolve) => { + releaseSecondAck = resolve; + }); + + manager.confirmAudioPlayed(firstChunkId!); + gateResolvers.get(segments[1])?.(); + + await vi.waitFor(() => { + expect(started).toEqual(segments); + expect(emittedGroups).toHaveLength(2); + }); + + gateResolvers.get(segments[2])?.(); + await secondGroupPlayed; + await task; + }); + + it("destroys prefetched streams after abort", async () => { + const destroyed: string[] = []; + const tts: TextToSpeechProvider = { + async synthesizeSpeech(text: string): Promise<{ stream: Readable; format: string }> { + const stream = new Readable({ + read() { + this.push(Buffer.from(text)); + this.push(null); + }, + }); + const destroySpy = vi.spyOn(stream, "destroy").mockImplementation(function ( + this: Readable, + error?: Error + ) { + destroyed.push(text); + return Readable.prototype.destroy.call(this, error); + }); + void destroySpy; + return { + stream, + format: "pcm;rate=24000", + }; + }, + }; + + const manager = new TTSManager("s1", pino({ level: "silent" }), tts); + const abort = new AbortController(); + let firstChunkId: string | null = null; + + const task = manager.generateAndWaitForPlayback( + [ + "First sentence that is long enough to stand alone in the first synthesized group.", + "Second sentence that should be prefetched and then discarded after abort is requested.", + "Third sentence that should also be cleaned up if it was prefetched before the abort.", + ].join(" "), + (msg) => { + if (msg.type === "audio_output" && firstChunkId === null) { + firstChunkId = msg.payload.id; + } + }, + abort.signal, + true + ); + + await vi.waitFor(() => { + expect(firstChunkId).not.toBeNull(); + }); + + abort.abort(); + + await task; + await vi.waitFor(() => { + expect(destroyed.length).toBeGreaterThanOrEqual(2); + }); }); it("does not emit unhandled rejections when stream iteration fails", async () => { @@ -122,4 +258,31 @@ describe("TTSManager", () => { process.off("unhandledRejection", onUnhandled); } }); + + it("ignores late confirmations for recently closed audio IDs", async () => { + const logger = pino({ level: "silent" }); + const warnSpy = vi.spyOn(logger, "warn"); + const manager = new TTSManager("s1", logger, new FakeTts()); + const abort = new AbortController(); + const emitted: SessionOutboundMessage[] = []; + + await manager.generateAndWaitForPlayback( + "hello", + (msg) => { + emitted.push(msg); + if (msg.type === "audio_output") { + manager.confirmAudioPlayed(msg.payload.id); + } + }, + abort.signal, + true + ); + + const firstAudio = emitted.find((msg) => msg.type === "audio_output"); + expect(firstAudio?.type).toBe("audio_output"); + + manager.confirmAudioPlayed((firstAudio as Extract).payload.id); + + expect(warnSpy).not.toHaveBeenCalled(); + }); }); diff --git a/packages/server/src/server/agent/tts-manager.ts b/packages/server/src/server/agent/tts-manager.ts index d07da628c..20cf87b52 100644 --- a/packages/server/src/server/agent/tts-manager.ts +++ b/packages/server/src/server/agent/tts-manager.ts @@ -1,4 +1,5 @@ import type pino from "pino"; +import type { Readable } from "node:stream"; import { v4 as uuidv4 } from "uuid"; import type { TextToSpeechProvider } from "../speech/speech-provider.js"; import { toResolver, type Resolvable } from "../speech/provider-resolver.js"; @@ -11,80 +12,114 @@ interface PendingPlayback { streamEnded: boolean; } -const MAX_TTS_SEGMENT_CHARS = 400; +type TtsSegment = { + index: number; + text: string; +}; -function splitTextForTts(text: string, maxChars: number): string[] { +type PreparedTtsSegment = TtsSegment & { + format: string; + stream: Readable; +}; + +type PreparedSegmentResult = + | { kind: "prepared"; prepared: PreparedTtsSegment } + | { kind: "aborted" } + | { kind: "error"; error: unknown }; + +const MAX_TTS_SEGMENT_CHARS = 260; +const TTS_PREFETCH_SEGMENTS = 2; +const CLOSED_AUDIO_ID_TTL_MS = 10_000; + +function splitOversizedFragment(fragment: string, maxChars: number): string[] { + const trimmed = fragment.trim(); + if (!trimmed) { + return []; + } + + if (trimmed.length <= maxChars) { + return [trimmed]; + } + + const clauseChunks = trimmed.split(/(?<=[,;:])\s+/); + if (clauseChunks.length > 1) { + const parts: string[] = []; + let current = ""; + + const pushCurrent = () => { + const value = current.trim(); + if (value) { + parts.push(value); + } + current = ""; + }; + + for (const clause of clauseChunks) { + const clauseText = clause.trim(); + if (!clauseText) { + continue; + } + + if (clauseText.length > maxChars) { + pushCurrent(); + parts.push(...splitOversizedFragment(clauseText, maxChars)); + continue; + } + + if (!current) { + current = clauseText; + continue; + } + + const candidate = `${current} ${clauseText}`; + if (candidate.length <= maxChars) { + current = candidate; + continue; + } + + pushCurrent(); + current = clauseText; + } + + pushCurrent(); + if (parts.length > 1 || parts[0] !== trimmed) { + return parts; + } + } + + const parts: string[] = []; + let remaining = trimmed; + while (remaining.length > maxChars) { + let idx = remaining.lastIndexOf(" ", maxChars); + if (idx < Math.floor(maxChars * 0.5)) { + idx = maxChars; + } + parts.push(remaining.slice(0, idx).trim()); + remaining = remaining.slice(idx).trim(); + } + if (remaining.length > 0) { + parts.push(remaining); + } + return parts; +} + +function splitTextForTts(text: string): TtsSegment[] { const normalized = text.trim().replace(/\s+/g, " "); if (!normalized) { throw new Error("Cannot synthesize empty text"); } - if (normalized.length <= maxChars) { - return [normalized]; - } + const sentences = normalized.split(/(?<=[.!?])\s+/); + const parts: TtsSegment[] = []; + let segmentIndex = 0; - const parts: string[] = []; - const sentenceChunks = normalized.split(/(?<=[.!?])\s+/); - - let current = ""; - const pushCurrent = () => { - const trimmed = current.trim(); - if (trimmed.length > 0) { - parts.push(trimmed); - } - current = ""; - }; - - const appendFragment = (fragment: string) => { - const trimmed = fragment.trim(); - if (!trimmed) { - return; - } - - if (!current) { - current = trimmed; - return; - } - - const candidate = `${current} ${trimmed}`; - if (candidate.length <= maxChars) { - current = candidate; - return; - } - - pushCurrent(); - current = trimmed; - }; - - const splitLargeFragment = (fragment: string): string[] => { - const trimmed = fragment.trim(); - if (trimmed.length <= maxChars) { - return [trimmed]; - } - - const out: string[] = []; - let remaining = trimmed; - while (remaining.length > maxChars) { - let idx = remaining.lastIndexOf(" ", maxChars); - if (idx < Math.floor(maxChars * 0.5)) { - idx = maxChars; - } - out.push(remaining.slice(0, idx).trim()); - remaining = remaining.slice(idx).trim(); - } - if (remaining.length > 0) { - out.push(remaining); - } - return out; - }; - - for (const sentence of sentenceChunks) { - const fragments = splitLargeFragment(sentence); + for (const sentence of sentences) { + const fragments = splitOversizedFragment(sentence, MAX_TTS_SEGMENT_CHARS); for (const fragment of fragments) { - appendFragment(fragment); + parts.push({ index: segmentIndex, text: fragment }); + segmentIndex += 1; } } - pushCurrent(); return parts; } @@ -95,6 +130,7 @@ function splitTextForTts(text: string, maxChars: number): string[] { */ export class TTSManager { private pendingPlaybacks: Map = new Map(); + private readonly recentlyClosedAudioIds: Map = new Map(); private readonly logger: pino.Logger; private readonly resolveTts: () => TextToSpeechProvider | null; @@ -117,6 +153,7 @@ export class TTSManager { abortSignal: AbortSignal, isVoiceMode: boolean ): Promise { + const ttsStartMs = Date.now(); this.logger.info( { isVoiceMode, @@ -126,45 +163,176 @@ export class TTSManager { "TTS input text" ); - const segments = splitTextForTts(text, MAX_TTS_SEGMENT_CHARS); - for (const segment of segments) { - if (abortSignal.aborted) { - this.logger.debug("Aborted before generating segmented audio"); - return; - } + const segments = splitTextForTts(text); + this.logger.info( + { segmentCount: segments.length, segments: segments.map((s) => ({ index: s.index, chars: s.text.length, text: s.text.slice(0, 80) })) }, + `TTS split into ${segments.length} segment(s)` + ); - await this.generateSegmentAndWaitForPlayback( - segment, - emitMessage, - abortSignal, - isVoiceMode + const inflight = new Map>(); + let nextSegmentToSchedule = 0; + + const scheduleNextSegments = () => { + while ( + nextSegmentToSchedule < segments.length && + inflight.size < TTS_PREFETCH_SEGMENTS + ) { + const segment = segments[nextSegmentToSchedule]!; + inflight.set(segment.index, this.scheduleSegmentSynthesis(segment, abortSignal)); + nextSegmentToSchedule += 1; + } + }; + + scheduleNextSegments(); + + try { + for (const segment of segments) { + if (abortSignal.aborted) { + this.logger.debug("Aborted before emitting segmented audio"); + return; + } + + const synthWaitStart = Date.now(); + const result = await inflight.get(segment.index)!; + const synthWaitMs = Date.now() - synthWaitStart; + inflight.delete(segment.index); + scheduleNextSegments(); + + if (result.kind === "aborted") { + return; + } + + if (result.kind === "error") { + throw result.error; + } + + this.logger.info( + { segmentIndex: segment.index, synthWaitMs, totalElapsedMs: Date.now() - ttsStartMs, chars: segment.text.length }, + `TTS segment ${segment.index} synthesis ready (waited ${synthWaitMs}ms, total ${Date.now() - ttsStartMs}ms)` + ); + + const emitStart = Date.now(); + await this.emitPreparedSegment({ + prepared: result.prepared, + emitMessage, + abortSignal, + isVoiceMode, + }); + this.logger.info( + { segmentIndex: segment.index, emitAndPlayMs: Date.now() - emitStart, totalElapsedMs: Date.now() - ttsStartMs }, + `TTS segment ${segment.index} playback confirmed (emit+play ${Date.now() - emitStart}ms, total ${Date.now() - ttsStartMs}ms)` + ); + + scheduleNextSegments(); + } + } finally { + this.cleanupPrefetchedSegments(inflight); + this.logger.info( + { totalMs: Date.now() - ttsStartMs }, + `TTS generateAndWaitForPlayback done (${Date.now() - ttsStartMs}ms)` ); } } - private async generateSegmentAndWaitForPlayback( - text: string, - emitMessage: (msg: SessionOutboundMessage) => void, - abortSignal: AbortSignal, - isVoiceMode: boolean - ): Promise { + private async synthesizeSegment( + segment: TtsSegment, + abortSignal: AbortSignal + ): Promise { + const resolveStart = Date.now(); const tts = this.resolveTts(); if (!tts) { throw new Error("TTS not configured"); } + const resolveMs = Date.now() - resolveStart; if (abortSignal.aborted) { - this.logger.debug("Aborted before generating audio"); + throw new Error("TTS synthesis aborted"); + } + + const synthStart = Date.now(); + const { stream, format } = await tts.synthesizeSpeech(segment.text); + this.logger.info( + { segmentIndex: segment.index, resolveMs, synthMs: Date.now() - synthStart, chars: segment.text.length }, + `TTS segment ${segment.index} synthesized (resolve=${resolveMs}ms, synth=${Date.now() - synthStart}ms, ${segment.text.length} chars)` + ); + + if (abortSignal.aborted) { + this.destroySpeechStream(stream); + throw new Error("TTS synthesis aborted"); + } + + return { + ...segment, + stream, + format, + }; + } + + private scheduleSegmentSynthesis( + segment: TtsSegment, + abortSignal: AbortSignal + ): Promise { + return this.synthesizeSegment(segment, abortSignal).then( + (prepared) => { + if (abortSignal.aborted) { + this.destroySpeechStream(prepared.stream); + return { kind: "aborted" }; + } + return { kind: "prepared", prepared }; + }, + (error) => { + if (abortSignal.aborted) { + return { kind: "aborted" }; + } + return { kind: "error", error }; + } + ); + } + + private cleanupPrefetchedSegments( + inflight: Map> + ): void { + if (inflight.size === 0) { return; } - // Generate TTS audio stream - const { stream, format } = await tts.synthesizeSpeech(text); - - if (abortSignal.aborted) { - this.logger.debug("Aborted after generating audio"); - return; + for (const pending of inflight.values()) { + void pending.then((result) => { + if (result.kind === "prepared") { + this.destroySpeechStream(result.prepared.stream); + } + }); } + } + + private destroySpeechStream(stream: Readable): void { + if (typeof stream.destroy === "function" && !stream.destroyed) { + stream.destroy(); + } + } + + private pruneRecentlyClosedAudioIds(now: number): void { + for (const [audioId, expiresAt] of this.recentlyClosedAudioIds.entries()) { + if (expiresAt <= now) { + this.recentlyClosedAudioIds.delete(audioId); + } + } + } + + private rememberClosedAudioId(audioId: string): void { + const now = Date.now(); + this.pruneRecentlyClosedAudioIds(now); + this.recentlyClosedAudioIds.set(audioId, now + CLOSED_AUDIO_ID_TTL_MS); + } + + private async emitPreparedSegment(params: { + prepared: PreparedTtsSegment; + emitMessage: (msg: SessionOutboundMessage) => void; + abortSignal: AbortSignal; + isVoiceMode: boolean; + }): Promise { + const { prepared, emitMessage, abortSignal, isVoiceMode } = params; + const { stream, format, text } = prepared; const audioId = uuidv4(); let playbackResolve!: () => void; @@ -185,72 +353,53 @@ export class TTSManager { this.pendingPlaybacks.set(audioId, pendingPlayback); let onAbort: (() => void) | undefined; - const destroyStream = () => { - if (typeof stream.destroy === "function" && !stream.destroyed) { - stream.destroy(); - } - }; onAbort = () => { this.logger.debug("Aborted while waiting for playback"); pendingPlayback.streamEnded = true; pendingPlayback.pendingChunks = 0; this.pendingPlaybacks.delete(audioId); + this.rememberClosedAudioId(audioId); playbackResolve(); - destroyStream(); + this.destroySpeechStream(stream); }; abortSignal.addEventListener("abort", onAbort, { once: true }); try { - const iterator = stream[Symbol.asyncIterator](); - let chunkIndex = 0; - let current = await iterator.next(); - - if (!current.done) { - let next = await iterator.next(); - - while (true) { - if (abortSignal.aborted) { - this.logger.debug("Aborted during stream emission"); - break; - } - - const chunkBuffer = Buffer.isBuffer(current.value) - ? current.value - : Buffer.from(current.value); - - const chunkId = `${audioId}:${chunkIndex}`; - pendingPlayback.pendingChunks += 1; - - emitMessage({ - type: "audio_output", - payload: { - id: chunkId, - groupId: audioId, - chunkIndex, - isLastChunk: next.done, - audio: chunkBuffer.toString("base64"), - format, - isVoiceMode, - }, - }); - - chunkIndex += 1; - - if (next.done) { - break; - } - - current = next; - next = await iterator.next(); + const buffers: Buffer[] = []; + for await (const chunk of stream) { + if (abortSignal.aborted) { + this.logger.debug("Aborted during stream collection"); + break; } + buffers.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); + } + + if (!abortSignal.aborted && buffers.length > 0) { + const fullBuffer = Buffer.concat(buffers); + const chunkId = `${audioId}:0`; + pendingPlayback.pendingChunks = 1; + + emitMessage({ + type: "audio_output", + payload: { + id: chunkId, + groupId: audioId, + chunkIndex: 0, + isLastChunk: true, + audio: fullBuffer.toString("base64"), + format, + isVoiceMode, + }, + }); } pendingPlayback.streamEnded = true; if (pendingPlayback.pendingChunks === 0) { this.pendingPlaybacks.delete(audioId); + this.rememberClosedAudioId(audioId); playbackResolve(); } @@ -267,14 +416,14 @@ export class TTSManager { if (onAbort) { abortSignal.removeEventListener("abort", onAbort); } - destroyStream(); + this.destroySpeechStream(stream); } if (abortSignal.aborted) { return; } - this.logger.debug({ audioId }, "Audio playback confirmed"); + this.logger.debug({ audioId, textLength: text.length }, "Audio playback confirmed"); } /** @@ -288,6 +437,13 @@ export class TTSManager { const pending = this.pendingPlaybacks.get(audioId); if (!pending) { + const now = Date.now(); + this.pruneRecentlyClosedAudioIds(now); + const expiresAt = this.recentlyClosedAudioIds.get(audioId); + if (expiresAt && expiresAt > now) { + this.logger.debug({ chunkId }, "Ignoring late confirmation for recently closed audio ID"); + return; + } this.logger.warn({ chunkId }, "Received confirmation for unknown audio ID"); return; } @@ -297,6 +453,7 @@ export class TTSManager { if (pending.pendingChunks === 0 && pending.streamEnded) { pending.resolve(); this.pendingPlaybacks.delete(audioId); + this.rememberClosedAudioId(audioId); } } @@ -316,6 +473,7 @@ export class TTSManager { for (const [audioId, pending] of this.pendingPlaybacks.entries()) { pending.resolve(); this.pendingPlaybacks.delete(audioId); + this.rememberClosedAudioId(audioId); this.logger.debug({ audioId }, "Cleared pending playback"); } } @@ -328,6 +486,7 @@ export class TTSManager { for (const [audioId, pending] of this.pendingPlaybacks.entries()) { pending.reject(new Error("Session closed")); this.pendingPlaybacks.delete(audioId); + this.rememberClosedAudioId(audioId); } } } diff --git a/packages/server/src/server/bootstrap.ts b/packages/server/src/server/bootstrap.ts index 02a2ba281..bbab636ae 100644 --- a/packages/server/src/server/bootstrap.ts +++ b/packages/server/src/server/bootstrap.ts @@ -512,6 +512,7 @@ export async function createPaseoDaemon( }, }); const { + resolveVoiceTurnDetection, resolveVoiceStt, resolveVoiceTts, resolveDictationStt, @@ -536,7 +537,7 @@ export async function createPaseoDaemon( config.paseoHome, createInMemoryAgentMcpTransport, { allowedOrigins, allowedHosts: config.allowedHosts }, - { stt: resolveVoiceStt, tts: resolveVoiceTts }, + { turnDetection: resolveVoiceTurnDetection, stt: resolveVoiceStt, tts: resolveVoiceTts }, terminalManager, { voiceAgentMcpStdio: { diff --git a/packages/server/src/server/persisted-config.test.ts b/packages/server/src/server/persisted-config.test.ts index e062eab33..75b5085ab 100644 --- a/packages/server/src/server/persisted-config.test.ts +++ b/packages/server/src/server/persisted-config.test.ts @@ -107,3 +107,19 @@ describe("PersistedConfigSchema logging config", () => { expect(result.success).toBe(false); }); }); + +describe("PersistedConfigSchema voice mode config", () => { + test("accepts a dedicated turn detection provider", () => { + const parsed = PersistedConfigSchema.parse({ + features: { + voiceMode: { + turnDetection: { + provider: "local", + }, + }, + }, + }); + + expect(parsed.features?.voiceMode?.turnDetection?.provider).toBe("local"); + }); +}); diff --git a/packages/server/src/server/persisted-config.ts b/packages/server/src/server/persisted-config.ts index 861dfa485..947f86987 100644 --- a/packages/server/src/server/persisted-config.ts +++ b/packages/server/src/server/persisted-config.ts @@ -94,6 +94,12 @@ const FeatureVoiceModeSchema = z }) .strict() .optional(), + turnDetection: z + .object({ + provider: SpeechProviderIdSchema.optional(), + }) + .strict() + .optional(), tts: z .object({ provider: SpeechProviderIdSchema.optional(), diff --git a/packages/server/src/server/session.ts b/packages/server/src/server/session.ts index 3f1399e14..ea1b46134 100644 --- a/packages/server/src/server/session.ts +++ b/packages/server/src/server/session.ts @@ -43,12 +43,17 @@ import { import { TTSManager } from './agent/tts-manager.js' import { STTManager } from './agent/stt-manager.js' import type { SpeechToTextProvider, TextToSpeechProvider } from './speech/speech-provider.js' +import type { TurnDetectionProvider } from './speech/turn-detection-provider.js' import { maybePersistTtsDebugAudio } from './agent/tts-debug.js' import { isPaseoDictationDebugEnabled } from './agent/recordings-debug.js' import { DictationStreamManager, type DictationStreamOutboundMessage, } from './dictation/dictation-stream-manager.js' +import { + createVoiceTurnController, + type VoiceTurnController, +} from './voice/voice-turn-controller.js' import { buildConfigOverrides, buildSessionConfig, extractTimestamps } from './persistence-hooks.js' import { experimental_createMCPClient } from 'ai' import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' @@ -159,7 +164,7 @@ import { listLocalSpeechModels, type LocalSpeechModelId, } from './speech/providers/local/models.js' -import type { Resolvable } from './speech/provider-resolver.js' +import { toResolver, type Resolvable } from './speech/provider-resolver.js' import type { SpeechReadinessSnapshot, SpeechReadinessState } from './speech/speech-runtime.js' import type pino from 'pino' import { resolveClientMessageId } from './client-message-id.js' @@ -331,8 +336,6 @@ const PCM_BITS_PER_SAMPLE = 16 const PCM_BYTES_PER_MS = (PCM_SAMPLE_RATE * PCM_CHANNELS * (PCM_BITS_PER_SAMPLE / 8)) / 1000 const MIN_STREAMING_SEGMENT_DURATION_MS = 1000 const MIN_STREAMING_SEGMENT_BYTES = Math.round(PCM_BYTES_PER_MS * MIN_STREAMING_SEGMENT_DURATION_MS) -const VOICE_MODE_INACTIVITY_FLUSH_MS = 4500 -const VOICE_INTERNAL_DICTATION_ID_PREFIX = '__voice_turn__:' const SAFE_GIT_REF_PATTERN = /^[A-Za-z0-9._\/-]+$/ const AgentIdSchema = z.string().uuid() const VOICE_MCP_SERVER_NAME = 'paseo_voice' @@ -380,6 +383,7 @@ export type SessionOptions = { terminalManager: TerminalManager | null voice?: { voiceAgentMcpStdio?: VoiceMcpStdioConfig | null + turnDetection?: Resolvable } voiceBridge?: { registerVoiceSpeakHandler?: (agentId: string, handler: VoiceSpeakHandler) => void @@ -528,26 +532,13 @@ export class Session { private speechInProgress = false private readonly dictationStreamManager: DictationStreamManager - private readonly voiceStreamManager: DictationStreamManager + private readonly resolveVoiceTurnDetection: () => TurnDetectionProvider | null + private voiceTurnController: VoiceTurnController | null = null // Audio buffering for interruption handling private pendingAudioSegments: Array<{ audio: Buffer; format: string }> = [] private bufferTimeout: NodeJS.Timeout | null = null - private voiceModeInactivityTimeout: NodeJS.Timeout | null = null private audioBuffer: AudioBufferState | null = null - private activeVoiceDictationId: string | null = null - private activeVoiceDictationFormat: string | null = null - private activeVoiceDictationNextSeq = 0 - private activeVoiceDictationStartPromise: Promise | null = null - private activeVoiceDictationFinalizePromise: Promise | null = null - private activeVoiceDictationResultPromise: Promise<{ - text: string - debugRecordingPath?: string - }> | null = null - private activeVoiceDictationResolve: - | ((value: { text: string; debugRecordingPath?: string }) => void) - | null = null - private activeVoiceDictationReject: ((error: Error) => void) | null = null // Optional TTS debug capture (persisted per utterance) private readonly ttsDebugStreams = new Map() @@ -658,6 +649,7 @@ export class Session { ) } this.voiceAgentMcpStdio = voice?.voiceAgentMcpStdio ?? null + this.resolveVoiceTurnDetection = toResolver(voice?.turnDetection ?? null) const configuredModelsDir = dictation?.localModels?.modelsDir?.trim() this.localSpeechModelsDir = configuredModelsDir && configuredModelsDir.length > 0 @@ -695,13 +687,6 @@ export class Session { stt: dictation?.stt ?? null, finalTimeoutMs: dictation?.finalTimeoutMs, }) - this.voiceStreamManager = new DictationStreamManager({ - logger: this.sessionLogger.child({ stream: 'voice-internal' }), - sessionId: this.sessionId, - emit: (msg) => this.handleDictationManagerMessage(msg), - stt: stt, - finalTimeoutMs: dictation?.finalTimeoutMs, - }) // Initialize agent MCP client asynchronously void this.initializeAgentMcp() @@ -2167,6 +2152,7 @@ export class Session { this.voiceModeAgentId = refreshedAgentId } + await this.startVoiceTurnController() this.isVoiceMode = true this.sessionLogger.info( { @@ -2303,8 +2289,7 @@ export class Session { } private async disableVoiceModeForActiveAgent(restoreAgentConfig: boolean): Promise { - this.clearVoiceModeInactivityTimeout() - this.cancelActiveVoiceDictationStream('voice mode disabled') + await this.stopVoiceTurnController() const agentId = this.voiceModeAgentId if (!agentId) { @@ -2340,231 +2325,74 @@ export class Session { this.voiceModeAgentId = null } - private isInternalVoiceDictationId(dictationId: string): boolean { - return dictationId.startsWith(VOICE_INTERNAL_DICTATION_ID_PREFIX) - } - private handleDictationManagerMessage(msg: DictationStreamOutboundMessage): void { - if (msg.type === 'activity_log') { - const metadata = msg.payload.metadata as { dictationId?: unknown } | undefined - const dictationId = - metadata && typeof metadata.dictationId === 'string' ? metadata.dictationId : null - if (dictationId && this.isInternalVoiceDictationId(dictationId)) { - return - } - this.emit(msg as unknown as SessionOutboundMessage) - return - } - - const payloadWithDictationId = msg.payload as { dictationId?: unknown } - const dictationId = - payloadWithDictationId && typeof payloadWithDictationId.dictationId === 'string' - ? payloadWithDictationId.dictationId - : null - - if (!dictationId || !this.isInternalVoiceDictationId(dictationId)) { - this.emit(msg as unknown as SessionOutboundMessage) - return - } - - if (msg.type === 'dictation_stream_final') { - if (dictationId !== this.activeVoiceDictationId || !this.activeVoiceDictationResolve) { - return - } - this.activeVoiceDictationResolve({ - text: msg.payload.text, - ...(msg.payload.debugRecordingPath - ? { debugRecordingPath: msg.payload.debugRecordingPath } - : {}), - }) - return - } - - if (msg.type === 'dictation_stream_error') { - if (dictationId !== this.activeVoiceDictationId || !this.activeVoiceDictationReject) { - return - } - this.activeVoiceDictationReject(new Error(msg.payload.error)) - return - } - - // Ack/partial messages for internal voice dictation are consumed server-side. + this.emit(msg as unknown as SessionOutboundMessage) } - private resetActiveVoiceDictationState(): void { - this.activeVoiceDictationId = null - this.activeVoiceDictationFormat = null - this.activeVoiceDictationNextSeq = 0 - this.activeVoiceDictationStartPromise = null - this.activeVoiceDictationFinalizePromise = null - this.activeVoiceDictationResultPromise = null - this.activeVoiceDictationResolve = null - this.activeVoiceDictationReject = null - } - - private cancelActiveVoiceDictationStream(reason: string): void { - const dictationId = this.activeVoiceDictationId - if (!dictationId) { + private async startVoiceTurnController(): Promise { + if (this.voiceTurnController) { return } - this.sessionLogger.debug( - { dictationId, reason }, - 'Cancelling active internal voice dictation stream' - ) - if (this.activeVoiceDictationReject) { - this.activeVoiceDictationReject(new Error(`Voice dictation cancelled: ${reason}`)) - } - this.voiceStreamManager.handleCancel(dictationId) - this.resetActiveVoiceDictationState() - } - - private async ensureActiveVoiceDictationStream(format: string): Promise { - if (this.activeVoiceDictationId && this.activeVoiceDictationFormat === format) { - if (this.activeVoiceDictationStartPromise) { - await this.activeVoiceDictationStartPromise - } - return + const turnDetection = this.resolveVoiceTurnDetection() + if (!turnDetection) { + throw new Error('Voice turn detection is not configured') } - if (this.activeVoiceDictationId) { - await this.finalizeActiveVoiceDictationStream('voice format changed') - } - - const dictationId = `${VOICE_INTERNAL_DICTATION_ID_PREFIX}${uuidv4()}` - let resolve: ((value: { text: string; debugRecordingPath?: string }) => void) | null = null - let reject: ((error: Error) => void) | null = null - const resultPromise = new Promise<{ text: string; debugRecordingPath?: string }>( - (resolveFn, rejectFn) => { - resolve = resolveFn - reject = rejectFn - } - ) - // Prevent process-level unhandled rejection warnings when cancellation races are resolved later. - void resultPromise.catch(() => undefined) - - this.activeVoiceDictationId = dictationId - this.activeVoiceDictationFormat = format - this.activeVoiceDictationNextSeq = 0 - this.activeVoiceDictationFinalizePromise = null - this.activeVoiceDictationResultPromise = resultPromise - this.activeVoiceDictationResolve = resolve - this.activeVoiceDictationReject = reject - this.setPhase('transcribing') - this.emit({ - type: 'activity_log', - payload: { - id: uuidv4(), - timestamp: new Date(), - type: 'system', - content: 'Transcribing audio...', + const controller = createVoiceTurnController({ + logger: this.sessionLogger.child({ component: 'voice-turn-controller' }), + turnDetection, + utteranceSink: { + submitUtterance: async ({ pcm16, format, sampleRate, startedAt, endedAt }) => { + this.sessionLogger.debug( + { + audioBytes: pcm16.length, + sampleRate, + startedAt, + endedAt, + durationMs: Math.max(0, endedAt - startedAt), + }, + 'Submitting detected voice utterance' + ) + await this.processCompletedAudio(pcm16, format) + }, + }, + callbacks: { + onSpeechStarted: async () => { + this.emit({ + type: 'voice_input_state', + payload: { + isSpeaking: true, + }, + }) + await this.handleVoiceSpeechStart() + }, + onSpeechStopped: async () => { + this.emit({ + type: 'voice_input_state', + payload: { + isSpeaking: false, + }, + }) + }, + onError: (error) => { + this.sessionLogger.error({ err: error }, 'Voice turn controller failed') + }, }, }) - const startPromise = this.voiceStreamManager.handleStart(dictationId, format) - this.activeVoiceDictationStartPromise = startPromise - try { - await startPromise - } catch (error) { - this.resetActiveVoiceDictationState() - throw error - } finally { - if (this.activeVoiceDictationId === dictationId) { - this.activeVoiceDictationStartPromise = null - } - } + await controller.start() + this.voiceTurnController = controller } - private async appendToActiveVoiceDictationStream( - audioBase64: string, - format: string - ): Promise { - if (this.activeVoiceDictationFinalizePromise) { - await this.activeVoiceDictationFinalizePromise.catch(() => undefined) - } - await this.ensureActiveVoiceDictationStream(format) - const dictationId = this.activeVoiceDictationId - if (!dictationId) { - throw new Error('Voice dictation stream did not initialize') - } - - const seq = this.activeVoiceDictationNextSeq - this.activeVoiceDictationNextSeq += 1 - await this.voiceStreamManager.handleChunk({ - dictationId, - seq, - audioBase64, - format, - }) - } - - private async finalizeActiveVoiceDictationStream(reason: string): Promise { - const dictationId = this.activeVoiceDictationId - if (!dictationId) { - return - } - this.clearVoiceModeInactivityTimeout() - if (this.activeVoiceDictationStartPromise) { - await this.activeVoiceDictationStartPromise - } - - if (this.activeVoiceDictationFinalizePromise) { - await this.activeVoiceDictationFinalizePromise + private async stopVoiceTurnController(): Promise { + if (!this.voiceTurnController) { return } - const finalSeq = this.activeVoiceDictationNextSeq - 1 - const resultPromise = this.activeVoiceDictationResultPromise - if (!resultPromise) { - this.resetActiveVoiceDictationState() - return - } - - this.activeVoiceDictationFinalizePromise = (async () => { - this.sessionLogger.debug( - { dictationId, finalSeq, reason }, - 'Finalizing internal voice dictation stream' - ) - await this.voiceStreamManager.handleFinish(dictationId, finalSeq) - const result = await resultPromise - this.resetActiveVoiceDictationState() - const requestId = uuidv4() - const transcriptText = result.text.trim() - this.sessionLogger.info( - { - requestId, - isVoiceMode: this.isVoiceMode, - transcriptLength: transcriptText.length, - transcript: transcriptText, - }, - 'Transcription result' - ) - await this.handleTranscriptionResultPayload({ - text: result.text, - requestId, - ...(result.debugRecordingPath - ? { debugRecordingPath: result.debugRecordingPath, format: 'audio/wav' } - : {}), - }) - })() - - try { - await this.activeVoiceDictationFinalizePromise - } catch (error) { - this.resetActiveVoiceDictationState() - this.setPhase('idle') - this.clearSpeechInProgress('transcription error') - this.emit({ - type: 'activity_log', - payload: { - id: uuidv4(), - timestamp: new Date(), - type: 'error', - content: `Transcription error: ${error instanceof Error ? error.message : String(error)}`, - }, - }) - throw error - } + const controller = this.voiceTurnController + this.voiceTurnController = null + await controller.stop() } /** @@ -6421,21 +6249,16 @@ export class Session { ) } - await this.handleVoiceSpeechStart() - const chunkFormat = msg.format || 'audio/wav' if (this.isVoiceMode) { - await this.appendToActiveVoiceDictationStream(msg.audio, chunkFormat) - if (!msg.isLast) { - this.setVoiceModeInactivityTimeout() - this.sessionLogger.debug('Voice mode: streaming chunk, waiting for speech end') - return + if (!this.voiceTurnController) { + throw new Error('Voice mode is enabled but the voice turn controller is not running') } - - this.clearVoiceModeInactivityTimeout() - this.sessionLogger.debug('Voice mode: speech ended, finalizing streaming transcription') - await this.finalizeActiveVoiceDictationStream('speech ended') + await this.voiceTurnController.appendClientChunk({ + audioBase64: msg.audio, + format: chunkFormat, + }) return } @@ -6849,8 +6672,6 @@ export class Session { this.audioBuffer = null } - this.cancelActiveVoiceDictationStream('new speech turn started') - this.clearVoiceModeInactivityTimeout() this.clearBufferTimeout() this.abortController.abort() @@ -6913,43 +6734,6 @@ export class Session { }, 10000) // 10 second timeout } - private setVoiceModeInactivityTimeout(): void { - if (!this.isVoiceMode) { - return - } - - this.clearVoiceModeInactivityTimeout() - this.voiceModeInactivityTimeout = setTimeout(() => { - this.voiceModeInactivityTimeout = null - if (!this.isVoiceMode || !this.activeVoiceDictationId) { - return - } - - this.sessionLogger.warn( - { - timeoutMs: VOICE_MODE_INACTIVITY_FLUSH_MS, - dictationId: this.activeVoiceDictationId, - nextSeq: this.activeVoiceDictationNextSeq, - }, - 'Voice mode inactivity timeout reached without isLast; finalizing active voice dictation stream' - ) - - void this.finalizeActiveVoiceDictationStream('inactivity timeout').catch((error) => { - this.sessionLogger.error( - { err: error }, - 'Failed to finalize voice dictation stream after inactivity timeout' - ) - }) - }, VOICE_MODE_INACTIVITY_FLUSH_MS) - } - - private clearVoiceModeInactivityTimeout(): void { - if (this.voiceModeInactivityTimeout) { - clearTimeout(this.voiceModeInactivityTimeout) - this.voiceModeInactivityTimeout = null - } - } - /** * Clear buffer timeout */ @@ -7041,18 +6825,16 @@ export class Session { this.abortController.abort() // Clear timeouts - this.clearVoiceModeInactivityTimeout() this.clearBufferTimeout() // Clear buffers - this.cancelActiveVoiceDictationStream('session cleanup') this.pendingAudioSegments = [] this.audioBuffer = null + await this.stopVoiceTurnController() // Cleanup managers this.ttsManager.cleanup() this.sttManager.cleanup() - this.voiceStreamManager.cleanupAll() this.dictationStreamManager.cleanupAll() // Close MCP clients diff --git a/packages/server/src/server/speech/providers/local/runtime.ts b/packages/server/src/server/speech/providers/local/runtime.ts index 7c15bd6fd..55b9a49e6 100644 --- a/packages/server/src/server/speech/providers/local/runtime.ts +++ b/packages/server/src/server/speech/providers/local/runtime.ts @@ -3,6 +3,7 @@ import type { Logger } from "pino"; import type { PaseoSpeechConfig } from "../../../bootstrap.js"; import type { SpeechToTextProvider, TextToSpeechProvider } from "../../speech-provider.js"; import type { RequestedSpeechProviders } from "../../speech-types.js"; +import type { TurnDetectionProvider } from "../../turn-detection-provider.js"; import { PocketTtsOnnxTTS } from "./pocket/pocket-tts-onnx.js"; import { ensureLocalSpeechModels, @@ -22,6 +23,7 @@ import { SherpaParakeetRealtimeTranscriptionSession } from "./sherpa/sherpa-para import { SherpaRealtimeTranscriptionSession } from "./sherpa/sherpa-realtime-session.js"; import { SherpaOnnxSTT } from "./sherpa/sherpa-stt.js"; import { SherpaOnnxTTS } from "./sherpa/sherpa-tts.js"; +import { SherpaSileroTurnDetectionProvider } from "./sherpa/silero-vad-provider.js"; type LocalSttEngine = | { kind: "offline"; engine: SherpaOfflineRecognizerEngine } @@ -39,6 +41,7 @@ type LocalSpeechAvailability = { }; export type InitializedLocalSpeech = { + turnDetectionService: TurnDetectionProvider | null; sttService: SpeechToTextProvider | null; ttsService: TextToSpeechProvider | null; dictationSttService: SpeechToTextProvider | null; @@ -192,6 +195,7 @@ export async function initializeLocalSpeechServices(params: { let sttService: SpeechToTextProvider | null = null; let ttsService: TextToSpeechProvider | null = null; let dictationSttService: SpeechToTextProvider | null = null; + let turnDetectionService: TurnDetectionProvider | null = null; let localVoiceTtsProvider: TextToSpeechProvider | null = null; const requiredLocalModelIds = computeRequiredLocalModelIds({ @@ -262,6 +266,13 @@ export async function initializeLocalSpeechServices(params: { } }; + if ( + providers.voiceTurnDetection.enabled !== false && + providers.voiceTurnDetection.provider === "local" + ) { + turnDetectionService = new SherpaSileroTurnDetectionProvider({}, logger); + } + if (providers.voiceStt.enabled !== false && providers.voiceStt.provider === "local") { if (!localConfig) { logger.warn( @@ -357,6 +368,7 @@ export async function initializeLocalSpeechServices(params: { }; return { + turnDetectionService, sttService, ttsService, dictationSttService, diff --git a/packages/server/src/server/speech/providers/local/sherpa/assets/silero_vad.onnx b/packages/server/src/server/speech/providers/local/sherpa/assets/silero_vad.onnx new file mode 100644 index 0000000000000000000000000000000000000000..d1b57f7bb9e6fca4f05ed0272a4d6c0f1dec3f74 GIT binary patch literal 643854 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 z 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%0AkrR258~M=# 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%0AI}5wd;rf2{`3Fic|x8q;CcJ!{|7ve z$nyz2ugLRDc%B*0H{p42&p*e3!12I1E(pg5<2WH4FO1`+z5bu$2soaQGr4-o!r8Q;GC9~a1L0S6Td>3O{7 zkNcBb8Y;86IxVv5_u%&aKg)hztVt`BczVUQ`~ND;+s9lCkCV$M&$K`PU&C|O+3GtP zxw2!s|L@Q#didSJ7?y1v(cb@e#n2Hm13aPag@3#MZ%HXvNebTxLo5^9*Z;pi&OljH z4g@t8wEO?QY&nVKw;a}WJKNs>_fhW}=JdJ+X5a6(`~UiEdV_+|NBD35_xAVy?tPS{ zrTsfn=+a60=MSHeB)mQQP>peYrGNhN8i(|y|N0N01A+$f z=kFl8E!0qY%WLG`ibhff_oweP&RAM5Gp71~joSTdAHFn{I&?Rrn|}|K{`uQKu``e| z;`-D1d;7LO{|5}$l};CE(HpONNx#1JpwAn-N^{qDqF!HA+Wm7k7yZIc8$Lnqw-)TK z_XLDjw{dJ>J=gNCXX^REK`p7Ea({{M`Bj_}VT|2_DpAHa_T{CLQZ`_Eq( z`FVh!5BYij=?^0x2k`MAAJ;#BV&vllK3?SG2HyWK@#~=cdL({b?f$>~Iw`+iiC=g7 z^Pk6o@_0x*F75umJWiCyOX6{B@Bia*q&%Jyk1OTzm3W*fkGI6*&gUP4B%TM#^C9uP zP@W%&=ZW%sNjz`u{eL`08d8ItR63;W``IdOz+u#2=4uInUIWF4$e>qNo;{`cx z+WY@Fj)3C{Ij-9Me>u*8;|)3P+SmU%4uRtlIWFPP(GcV~1&&wbxNYzM<2VM6XXLns zNhj2i;~Y5N8OMG5^Pls8a6T~33-U5-JL5bdoG*;?hWyjd;5;InPmJ@5aDIuLX9DM& z$a&Yk{?B{rCO9pATs?Rf|^QM^gEBq`=^1%ftK@`G?P6 zW^Q3VZDfq`QL0uE3<5oALJ(H7UgHDfUPs(wv0BXue8-+Ri_Z#OoOb~~X{pi|0gqs8MVNH_ zTPJK@{0lYJENDgId@#LeF8PnUBY&9dPa_ASaFVyc&l%81T6VIY%=_;L8?(O$jx0Qe zDjpdutu&jdb{&n!{If_va#sx19ZsF@Erx3|c42H~H~6?@mRR%j2^cq9k<|lIgtcx* z@z5Y!A#rM78oF=?rN82F#cWe7p0OQPh4!TGYnRb(@y*cFSPs-bNHU$1jw91G>Gbmx zpv$PMXuVqyf3E6I%TFC8!m6=S$H()f6>KLAv&e`2b2ieO{kg?ZVjgsR)Q_t4OTqa4 zi*cBrKy9}+lPpVQA(r33X>%{S;cG31UV6oj?XSR<9<$lqlnb)@f!idI%W?mo4m5PD zKivl#=tieP=+_nr>BiY8T+@?&E*Jz?e~$)7*=tzy$PBW2rjqXvgsyZoY-#Bv zoZO>|2fELaG6H_1>!dF9`|ln!{FxJ+IrvC?dU+bHcg!S7As@gj;W<_|TSz$*9)ff5 zby)Bjxl}?uyy!C@2F#0w$H#AQx$zoUSD%1g-|=Z$+zn}e3H29k!hotOSi7P# zEn*2${p=Z1)VJl*;#MvdGuv9SQ&o_bol&Hg@z>zNc?ney^}*9~^CaG=H%Qf1vmNk_d2W;N_*%2T$Z57~)bJ?FyTa6hTX zx>1l}qCy7@&mlWQDrEB2<6!jp`w;(7mv$IaLK>qF!(f~4Rj*uCs?MgGS5=!XsA^cT zt?JDc#>+&@q_wx)s|*@x)#{EJRa@px0!8fskQ=H0F=3T6)e2Fc;dsn@7=w9Wu z#JI}jnR(UknsrrQtV^ZSZi}S4=4R=pW~p>}L7OBhc9;J6#X`S%KcLjQgxKZ3#fl$E zcst0K?TdUMD)SPhx6=|}OLaQ*u-gl#j`yR^iKD@8@LMppS&041`heFN6I3j@fJ?)U z;7kIv=tm#0+q?`$ExZgN>a}1cDM(Ep77BaxZ$QsUCqQ5IIk^@5N(zm7BSlu3RE^<< z;;sc_s~qbnFOpd-t^fT+8ocPVq#vwX)l?&Z$C*Y<`OgtsFX&1&3$&y;HRW9Pb)lea z7Y%R6twg0>eIRbJ8`*wEg?2yrjGUc36@un|0a>ClRSi^S8G2ixHX|7#CQpMMQ<|Xq zO>g?QDh!IIzJ!P0-a)a-TD%zR!_s|+p>bL`n<(D`uZ51Kr3(iz&=_7Q}!McS=_$q{Ho;7XUUa>$ zCY2`HfY-nqC`2)wbiM=qJ!c@TUgJndo+&}YV<%<1?fXE%>ydQnxM@`JMjI=xHv)xC zKD38}Jy;&#a_tEr!XWu_m`-INcf7(DXpLrjW0dKFtG#ec+AUJH-U!z&YeE0hy(P02 z9jWGdgQRj`zjR`hW>vzI;c#o}MrNBm9Ck)*fN5Wb(xR9j?AC65+|%hK81^&7oU~_^ zi)(ywiauZZaSa0JNiOgvz7I7x_a5ImH4}xb5_liG942RRuh`f~wA6}{@W=ycUBOc+ zE#s$Do}LbePyA)>mutn#Px`|ShjjclFBMN6+b&(ssF(a)Z%D<#XQYDDhhdog9?3$orZEy*E{nkR>^zT4#JM00o zXTh}F$N4~YdeO(z-Duk#E{ndW6W!6no)%3R3bVIu2e(0ENNC4GSmmQl0y`tQQFsW$ zpFM)Fo7HG^@hlvAXfZgh8AvUQF2ck)6>xh)3L&p_=%1OCHg$f09{EvF?`uZK@6;6@ zFMbS#eY&$+L@@664xM+V@MZaxu;|qW46~Kv=t_IMZ!iH*wyCpW1;=ox^=!LAzefNY znL_sOxrjsG@5U>GE9Dn*PhruJ_mDZu86r3Lqf_;@;q#~G@G5O9$aTEw!8gMsYc3O3 z7QGvu>FLv{;mYL4Vr57O-UNM;o0(}<86>)&!rk4AVRJU2TQ8YY`|M4`d#4iEX>JFb z+xql%k_U|1stlIBhe4ddduU<2Z7|b}T|D;@27JweJ>TCzRNQUSO}7aaI26Ik$1Zfk z>nb*Nv?>joxs<9dN~9x7H_>mUv3P#Sc6OoiB80ZI!Jf(w;)m2G+!LgSR!6kaaNu>+ z9}NNe{j;*EmQp_bExSs?kM5)_=O%4Ptzv7lUgHf*13KqGUs|Ivj!OzTqt=Lh zIAr`7x@El~U9MA2KY#~ytk^=E4Fl+i_qp_Lk6lzVTA$Xa#K5`+L&|qvKpHupR$NiS zNaJwq|KS|DL~Uq`_DNDRe-s?;+FzQyDM~sLSBBT)t;v=t3OJ|dUL;=2@XTQ*wkeFn zdxn?9OCb%U!gxLV#LJLlTQ9?Svo7?C+gW(|JPw*WrK8(=MQLTQ9JfEpW4gA5r0H6B zTC!v$oaE91zAv-U<0_XxIS>N_`|M$V49^Hk-Ft)G?L81;GKN07VokJWucfV~F__$G zr1am;ZfG-A5tf#m6?YeJ0upM;mW3$MTMq=lqHU6bgNZcufs)imC`7lOpK)QyH<-O> zG|9E@B+WZ(fv=W10?fV-Mqie|r>gw~`shf}TylI)Pk+Q^GtsA}Kq%;&jzwBS>A|!$ zpnsC{?oJW9Eo>y+{f=OgrVBZ;>lL|uFCTPHMMCfLU&7N5|DnQ~eHfLw7Mz9yC{}sF zqq1F~UUUWG*4@C*JFeoh0c%Lv@J-BQ;eRab_-a&Jl!>G5hR`0@i(qiKBCxz1jp6gV z68-J(NtTNqF;cE1*Asfums654g)g@zre7ql8r)%s(_sMPU>F&$1goq+u!B|%v;GES zrJW`Txy%?capSdI? z=??qjFmv^GbQ{b&Z;$na)Gs5*U31VM|H>Bc=khs1&0f^(w54)t zn-9#$kHf`Fji`-(2^o7o8)s{FVe0Nf1%<5zpjmwdKiv3<^5zt@6YB(}g@BJ6wqoAc z4$}5>Fgz6Lv3o z9!4)V$JiK=T?*Ncjy*dNRo>=3Xx(=FV8bnZeo*H1+Lshn@NMS13oz4mA8s98h$Tl~ z6GwBt)w}EqxN~sIIxpAj>)V_g?+un-#Ue2`toTX@?!N`L{ zsp3%ieta=nhEClO&ou490NY-e;g*fMmRHc7+rjNh4kyhQ+L-3fw=fi)afDtATlD4| z^Id)q$2_v6hZg@}`LUV!^u$gak+>AskQeM))gcs?B*DvTuh`+5gQDifCZc_06D*lN z9@SQKqzqPS{h9C<6E*R_!rTh^AlsgSi`(u z_SoyyBeb|1fuEwEu@B3laL@fnI=oMu@Kb9(K6+?_mc@I?4P`^tq3#IUo_Pd%#vU@u zmTz3%Lyzw9n9nB7P^aFSQJ}S{9$n|X7UOT{V{TYJ3?KsQk=#MLu|1WUJ=_N5^Bx?l zWKGq*rxLf4&XSkbAUf>)5LS_UjFinhBtC8QqWAu$h{q#~AvF6X``rAD#d+Mt+@+1I zx^_1VFK&QIkGoUHFF<PB6DO zR{`;X4!!!e6;-YvbG@+>t{&Y9i>ob2$tM+53;ThS-|k~ax)(xd8Gm>GdZ1$k(s^gL5K_^)`@X!^l9KQMs>qb`H={vf{c zD}yD)gz|f2bj}ojO z+knC9%6N5F19(>`(bk=Tn6$RLw0gxCE{*I+-|L>htom>??5!>}U5mieLm1@s>xEf! z9`Lzc8Tt6;5exTh#1U0XQKc~-el}XracOOk<8FfWT?(+NM(189oHWS0X__O<^ z=W$=?aH=jJ$|cwCki4nt@Tk*lyeMmgnzkx9&?5%ImZgyT#}A3endi8u?hkg69U>c# z_M`)@j;7u1Ebxo)0DCuImgN`M$vz)DjKz67aIa4`)&5wGb|Fg8(5H(OyJIg*{bWd| zHKnqm*OOt@-hJfoa}hlEDAAPue5+LH0(u|MA{LX+v$|U`u)H*b72X>`&U?f|oz#Gj zejbE*_FhEHGs0WRW~ATuoj7FOS6u0^i-p#9qDNnb(#vL(Xx>F5QWazld+|M5&B?|_ zZpCvnMN6vs>P|L(RuSi`4T$UY1r$=ev@#Bgx zrC-X0W3$u>6BeKk6kEmrj(9EQ+?f9-9Y0bGrzE_XkQZoYO&H z%T#j6-wVr~2E)M8>5wi{mVG~DA{m${OO^g_WfiT7@)9>(De{mJS@iMI zT~PU7A#{GHP1VApCBlH0Q+L2qiIe8S>h($II>;4}F)9InWeUh|$S zGHDwOxBnr_`j!NDZ+GG*5qXm1;Omw5ryh_Fhdi?jJk^y6iiB;}do3t~;PKAgi*UO9W_l$itbfX0&0E9ac3|!s(s8$bh4pQES*$ z+p3)k^iJnO2;1#0Tj}8p-^QlkpIu+sIPH7#T{DdZyV~ud@6m%SK0*Uc6qDt*ll#N^ zdjnz85*=};;Z!iV^H|t$qB|M|%)uF7Lt)CyYqAjg$rxazO*Wj0!yCm(m|XT5c7^OE z=lgBuo<=>`ZH3F&a$Q##+B!vAviTNvb#azLH=mQ)7JJJ}GLpp9to2~|5oAtnq8Pv@ z&W}`6@l80BZ;_3~*>2syC2X41FW?KgwY#FyDSRO`{x*VU#boL1bMwmi0o6pedJ8_*U zQj`xx4ZVf7?@VR##0f*GvdL-r=-ZQInb$sI#?3zTWsR>iqm0r=T$|=FZy`8pG+A1> zAceZR-iNrbTq$c{8w@!drKqOfz7_F*Z$yOtpBoX8QHpbY49Ko-dx)@7ja4tPC$p9) zv&btqWqH91u&_@lrfoCBBW9a%Ls|n%um}_jUL6qBuiq5v<-6E^=ef+x_y=1tLYHJ@ z09l;%McBN@6esC-5{k_yvjPnZHmI;1J(oX_rNtd$a{^k$zp9QxzT#C@tvy!mTeAm) zw7sEr@@2us@HpNYwt&>}RlnXgNmzFv9t%TnVM+RExVLRHG-d_k`;(D;{Pa3S>Uxv&g2-t59#rNwf~}7NSjCA#95-bun2hJiXkC z8e`6p=LYY|IrBPDt{%(&jQAi^F1*UN>R%*6hijsXsvdkjyc>(xp8#4N56`48B*MQE zU+Vg?O-U)DYfBqRIu{7>@79ZoZ6{DSBL+7t>jH~b`r&l9J-9nESWp}}iEYhI6#ur4 z;)ZF*aArXa`88RCF*(&ZBF7*0Kizl8J_{Qz z9w0@$7(x5%N$hzxl`L917xY&S6#So;;q8o2mO1n&cU^@gjUQR> z`dN6DubAZq?O=W7=5XfgcG6@0Oda|3Y6?chb-|2&0#(Kay=LM+O zp&0cKMuQqQR_j#mj;$1BD zl>sKUrV(GOYvl77AKaHw!P@wYwEB#UNZYk=y}>({R$xT7?LUCSn^R?%f)YfhXkBvh z+iQ_mq+qmH6mDC-oBfIIg?(SOuxE=8kgH!%oJ&We%RDp8X`X?{+;6bCU#i&+R?J0- z44L-z9Qol6N?0)aBAe_h!^CT^S)BPU*5ntDPXo$X=JI3Y$n){wJzIk&_Kqa-fE+F` zIRewp#iA%!u}(wGfhHT{$!1qfIrUWBcF_-?U%n)MoT|pU7n~H1DcN&H|3=o`CyRKI zbc`9eTJUx1kAE$fU`ONGXrO!_SpNwu;O=5vA9ab0*PTm9;6w21F$hhEUKPf@i$y2R zZ|uS00-`)W0*fuP1fP@D?9OyWETI?0p}gsTfV+4hxE64Cg`Rf#Vjr+(jzinns>=a`noz_dfEMeBwsm6nyC9smJ{9=Ba#aQ zwE|64FWMp2s%#cs)Qw^%^k1_icWu1)LzyI$@twW2$7EaoI`a0N0?X72#M+DXY=Vb@ zUHJ-6maOrB9qm&f_H64*ZlAEi=5K^tf1-@H=0;*#+g4EuRbaY#o5{F)7I4Q*k*SS4 zC(Ni^BU@#*SGN9wDNAh1V!qc;ko2K`sL~nb>9QHKtJKl|+HlmW&Jd1_ zw!&UpXEU`PE_lr(M@;+Kgx9LKFpJxMZ0y0~c58ht@le;b%q1;ZcGl0HsO~Cf+2Q-y z&*9~Q)xskzvez)?cf61-**Ss~oms&&c9^hPDa9DDU>3QDM@g5O6{r21VXvjvFG$oBy`(m5bpx+F+~LKhO#Sqbk{RE|z&V z$5VJcV+48XxJXDFSu8xTe?j!@o|E{3&hUB2Tu7rkLC!xINv1-TSU% zi%iu>hRG=0F@2i2wowauD(8`Xve%?!OTA!v<(wE<=mqDq`5R~NE@h5p!d%eC(gC);v&Z2+8d8TdL#4)0L0tBEF)Uwv z0`(?;gs#uuqy5A>a8=!lMzd!@vdu{#NF)dM4n3P^$a0k(cgC~J0` zjECZ{5JeMrcI=ZHnf+up8)B2h^4DI*ZCdBZsl#Eykej-s%(k4ZE(u@@^@8zuxC>F^ z%|9#c{>UyTzG25oEm(&yX6#9%1$?T@AfDnona`(MrZCtOTW{>bVaI=y6<0Qi-7E)y zR`MJYJIDrJJ1F2<mNsSox+ ze9aePmA8!j6#T&V=rB>|$YrP=#_!^Ji0*{*kPlG%w(@{Fm*lIMqWSax$8$`d}p zZe@GwQ?^@bwBC(sY9>(fFsM8SYwhO{!V66M9!G&^U{E zlG2SilAf^(3S+vHd6RyUfHw}Xw)H>w<~t7^d`8jrmBsAPlmy|{y1i`1s~tGo`~$Ia z+D<>sI!ZVEnhf{uy$~+mzeEx{Hi1|C9Gbzj@ndusX7bez4?q%Y$aG}^mlE*WOJy|e zYf2S+@!j*H)ug8?L6y;pcxZNC>DZp@_-6AVmR;4#0@U1aQJE`#pQbPU{FcqgW@lVr zUV%%#ZWklE7_k1%seEO#f;o+yC8lxHqh4MwvANJ0R|Fm>>ozRH?~O5}Q$iQcF-g4JJkfg<_VXJ94=uM4^XwkE(##enO~d{Z z{c)(iJ!{rb!|9o8Sbj(|SvmbIaog1g`*pK`SH&~P!cP98rO7P3_)ZnF*M1zqtT;_%{uRaSp~gMgFkKt`JR(v&v!EM3DL-RZ;53!6q+H@*=7*;i zTq3EvcEg5p2l_+%KbSCg0^8ET4`9Ip@Nry3wkFw;>kqt`cAw#_K41|`dF9J`UJE3@ zU?*8Uw*!m3=|B#zpTV5g>7gv{h7jPVjPpKSA$J^2$h|%TWV2Rhfaz5Y>DuifQt0Ps zC`w-hJ7jOgG3)H%^&?A|6*UoUJBsAE+AX&5SOn_o4wWnoj^cXt_vEEhs8r{mvxs(Jua+3=L`FA*6T`?eH$b>Ef16h_Vs5s z6)&!EB7}awa&T&p5 zvSw>+>g^|VwRs@+*84z0I)~!+qF90CF2EPn%V3w@TGWpE%ii|wigQ-?gsHB4#oE0i zrq=4=rMx(Cn&%z--ZNY{s(QZS`#=k6kbyhwZczd$|0}jWiYDn(XMj_Rjuft`0;YQc z*zMuNaq9E?SefDtr6)(hThmc6{_qsMcJn)NyLgCYHk~9F@HJLEslw3j+ev`;1$2^Y zLH(71;8n06^<_vtG(06=(`J!%j>BP`-P2>wIAt z`Ruq4-l~Svi@8WOW-FG;Go z3N8uiLr%^divL|xm4XH?!B59sB>#0oVbBvpP=31%b8@DE@h0BXzUKt~IlT^IewT>b zN<#R#D^T<43M>!UExGwC5$lKVF-qw)X*FynrJEk1r*9Z@SWejhZt+{n#5a=K3dyemRHEefb6A$9JMe*CNQx z7s;T3PNdoMub4LW1Ur8#hfL@gNqRp~0h_&tgg!0r$tKehcv`N5Cx>FX`xo-Cn-q50+-;-xhR2%2@R2?oz)h z8#uss2a+jg+8?+71Xr{m6X z38dTkHs)OF4!*StlJXXHX%VjgTl%oKblc=EQ4-E56uQdeL}6A8tXlnr$cAYV z!`v8%O==OAh*`wyxvQYgn}lZg8o{nwJ-WUuP`X|)oqaM`0U<+daHvx}c^j)Gg{7rI z#k@!8>%IbB!K7yzacMJzeo<-It@#(x^csx*w(0Cq&L=F~ zYJ~c0?BII+esVc{FYYFGP&af7^Ai9PO!e>|bJomi;Og=mm%w@ZYj?pTz{80kd&6x$=o0`}Q zuPpeSm4a5^4PjTyb*4Rk71(qJZ2Ooj9dVrw+dal$Z|{o`PQB^CpiT6#!XPr>_En*0 z;4N@F=*6OCwqQ8loF05zN7Ga$(&c9N#6L;{nfC-0HX+fQ{l4KX{=77VZt~S+?^Dd+ zZ>RJ0j=8zmt&1Pm)l4FJj4*t(X!mN=v$I4u~ znvz6sM)r}Sb_|gk^i^o0+FUZzPDARKe^)5inkuQy@rJ$+0QvQ#MZn?lRR4y50|M@jEr zuE(-3196p26Z+DHP@JQIrW41(*k!vw|8J~p=U6KkbIX{lj0}UlbCy7K*e9a;BN{G^ zj~2{iYB=P_Wp;4o2XcGIS9q$`Tku+}2LtB_7~sDH@ z4nlt>2?umb#7F6duspS%+$<59II;t|H}1L+m}3N^;?>}1^%XJE)k{1XXMKlN=F1|Gm1ED`i$|3BHUw0N< zZ$v_mM8L{bqoGWtOjtYhFAM$B6ReyLvYjt_LI0VFEOc!wd3*9NIkw?IWy}a|a>qR# zrhA=Yt&^Paxp%ExEm9FCZu!lucBJ5gq*@|-IT8POgc8wu8r=1L!Ok=egT{(`%qSvT z{I97qPDt)9rkFhw()=t*=HPfXF2-6~Bp{Jp*v-^Khr;lT-LUfI5)@rFGGp6RSQ&6v zh)xV98}{(ERWlv5FbIc@4!UHfayOQ+rBWQFrOp~}4JE1Xvhh*t2y{BK3h<~pbX4sM zhhE<&uKA;2u2%slM(2R;b(y@XjtOh8=`z#z){roD9&wD_fft6Eu{YdILgQ)|4Ez(1 z`4Pu)ZLI^VxqcPv$`D#;xpYN-ntu7*2zkT0NW-1SN}ET{gPT>KVOesHM5kxLfrV@6 zI_EAkPGXVu9Xt8;$6gS*LialBgbwgsw8-x2~$?^w4HrB&=#ot6L zVH0+%J0WD9?@Vv`Q=&HKD7?Ns9cD*5LC5|-NbT8sLh!vd(7BRB%42=eKII(DZBvzU zKI9U}2`6Ng0(|f*Cpkg6;IhUFhpjkCE~@pSxr)WGYPkZO(mn?#6PxkOlsgQrZWT_L z#}k+CnXs%ykDj>MO_u-axIE}=7ip2{9#U((fS&zQSrKw!A5jn8kG6)TEZEizF6GV; zQfm7VwU@l2hpZ%{j_en$&dvgzh)+V`pZTn&HI~KvxlhWKdclkLMeOdg81Z@D0~V{} zA|w)P(kQJVa@StOx>yxN_iDCHots~o#V`^wfLy#I%7wpI$b#4wvLW?@U^C}8b9w$< zWR5?Dx$J`Y!|e_$>|oD?Ra`hHaW~oft_xG0r^q5}^T{+54YH%#UcNbNc1p|Ugs|&J z8hbYPChK$}j(nE&fcWWo?90-q0gpVeJFanE~N?P>mcE( zH)L+MmQv~u!GY0tVf2?Z(x;0DrAMYcVfyxqq~qsl;2IdkY@rLPnVL}LbrXr9`G26U zZ3EYTO2o(AM965JPfu)!1!J${=%|sw=TzQcGi?ot8IUK+bA3tv^EI%{#g3`Ys3jI> zrl6u}EZnwsWuvYW)J(8~CD|%aUK5EY?u>^0#+syl;7Rt?+Jt@Q0$(vnXG!$=eI!5F z4mT}HVpMq`d0bu$r-!@YEK`v@mi0ijn3L>5=oO|Jw~3`B9bm`ru900BRf*m=?BLL$ zhpfw8MIrOyR;csWgyvrjV)(*15YO%s(ofXMx&+^3fxqT4%Thn0kZizGKPSMuf*3Zw z-(%4v(3Qp37{agc6mhORlth(ffKhD&WG_3&?k=ulhPUpq$UViZNlBe-wB01k`O+Kn zBK_fTU;<8$*@nNi&4#E`AH|7<3Zn0iHAIyQgY?T(Lh}<_NX<3{c4A4Ops(^qkiQ6K z(?6KP*uT5s%eGG_H(mvUTwX$KZ)XJ|nKWF0KL-L5He`PaN-Y~ns&1~Ql zZF;TyX^i*TCv@Q=tJ9zB(fuclp<5Ie(fL`AMmjk-|66DB3Lmh8Dd)+7^!?=Lgcoe^ z%ie5!$aXe3%AFlOkqz4{`TXaQ2piA#l|Gam!cx^euzhU>4*d{A11y`d*UNa?rCu4+ zu0*n!@sZTw`U`mK8;Ieq(WI{WCwWNv!nCGhcr(75Wcymd?rtMtif%HP*D6t$<%uw7 zi9M@J&n5}qO~fa=|B_3cV<2lqC&<0A1}rO8p>yF$F?nD&NPYW+G|1mWbDxWB(5OJj zI@TQ`c6oxjR|dRFsv!=8tRSF+9qd?Z0iR#_LtkDP5-_fY+&{=0`F4fE6}J?4-Ek76 zC)R?}%XIJ^w2LGJ4S}G-g;3gUIB{B+0beF@fl{p#B=VLce0!MZ3Yd}mdPJ=1)E6KP4;~+D56$D4bvH6+G!~~zo4_P*VW&TOH zw&EaohOS|*4T`iVHyqAiH6{mBBS34SF72G09)Ev8{)Z;; zY9xjzhwE&J@9m)KLnot0(k~Vg1$z{^>%cmtvUn9v$C}y z3>*gLm+MLEgf{{%eIi6!XyQPe1oB~^}3H)4->?(yo>4VB~O?(K|#uT+K=r#&O1G~>4EZ;!MOQnH>uGZ z@y4ePQ0!`pIkAeoNU9Ggyx4~NGh4~)JUuAga2;DWRSRp)JRs(-s-(=vRJgX3aE)iX zllhOZW~M*%&bJ4TYW{w{bsQ*KHIPdxnj|FLnH25P#VxYKX!eAQEMEj1wcHg<0wnUo ziLV3brLd;YgJH5;rZC#zHOa`E0h8Z$lC;cEu>+eENNkFR_YzT zygm-o*Eq8y6K6x$`~4)vZokm{Km#JZVp07CpLB9FKpSSAk_@H zMNZe3!SuYNg@YoY-`CA->kc)d&idh-41)85G|9qKab)sZCEK|!1K2@l zZ_r5+NqU#5&@aZzZk(Ae1o?Z4*VYDu^~@FUmEGjL?hcpq=E0-J9x(RxA~fFT31)*F zz9;$}+^AfiHyhBURzX3=g6aY>3~oIX3S&qhdu1nKZE%A*R;^ zg-@H0rgxS`5Itd5R7Xic5NAYsFili{wQ2Np<75A>ymNb{omY#p!&kpx_%w`*TvJVIL zV_InzUU)STB0Nuk&aMXZACn_B8_tzxI~vfcOOsJG?kM)nd`NcPo=r3Al_i@tN6EO) zUue1SBK!|o=lxIhAOC%_XGXS+R5sBt&inZ~6>U;UNlBVC6%Cb=m8~d61Cgv$LOAc| z>zv4lmP%Z`9XB;V)=2*Ak-dpflFMgX#J+qG!+{snf@j9lrCq=Vt;bb(_S$R~0KL z-W|X%nHK}TYC;Hh|Hz0W8VO&yn&mZLVH*<6`LVf@m~-zf9#v^2(&AspDqaV3ck&M6 z+VB8Er@klEm()q`<8&s#ems#kDrCL3t_6e2aGqn*ev)@&H+^5fiP&s+AWO6p=*5>C zXv%#qkD+14AH0)IHXVA3`NrqS59MIy(69YWckMeiR9l}uJ|BVGLf@0ozk@-4t28l6 zH^3V$X_S>+$lOiwhvgpc8HJT2XeBAfCjNB?%`!6#H8f)PDxSyD-eR!-g$OqdO3*vq zbHTbv6Juk3VOY2=k=Ua|>qVg$8M{-DGy&S$R5hJD+dffTr1jzbaqqdWm z;-4f_aIZ{UK@1jMIe^KNj#IfoR}%3c6*dNVkX6nL zVHX~zAE!mro;|fS`|qSeir*`qimQXb^Er1vv@4^gqr#ysOcB}7XIRTUzhG-Fi$_i- zQn5!rq4a|z{d7759j0@7!l?#aE@4b&X%*Aurv*gzO%`qAyi={tJLHQz7aaZgo)Nne z1sQqqba0~(%A351yqi4{IcS6Lkq9y%8&8c-Zh=>RvGjh!9p_WYVsz=*VUXLL3Zg7O z^4`%2R@|+?ynqncXdVKse(xbyMVdBd7?O^>46q12O{`+pF@HUMuzj36y~)_4Z_`O$ z=&%*3&_pb=mk`#6?jnO;#;|LT24(id((faj=i++|=D$~_%K~T7J;ml&VeQIfhZNDH z4+2PYrU)jjzDN6`$1=ZcbLeAhC8EI&!=D#b&`|W2y1(y$tuJ=*OteDihCVI$chIM1 ze%(#NFS`mlX;0`ISyRGWpdp+leu7qRHxzzN+DTNJu8@AyAUd}vfz)@OCmt2Gg0UtG z;PQ1ur36i+c`ih8`FZr4`3{>jCevBVX_vAxF55Ias!A6`WFDoF?}(VDuXX)4buY@UI?-0wJ-K47`N;snGDKtpRB*y`SflqCO z%U?X8o4B0A#GhwL>$pwCSXzn%%o+`n`p&`!&4vu`dkb0mOiLKztU~nrXJhr16J$Z{ zD%xlSIO`~%bdMyH(>Qk6z&nJVP&oJ}xVtQ{R5CT7( zg2Nv?iAUaiI(}d}&2#c3CAzz*q(L0>w%|V1?XIUcUTv+`Z(m6Vx6g;4HRGt#m2i9( zy923)81nQEGP~bbqs|R|p_xwy?R1;Wd#vQbmR^^oCcO{YGh0^)w*-%&MKN1Q;Xa{Y z>d8frIo%t@T>?qWYe(LwUrxf={@ZASM>egg^Jo8t7LtZ^3XADXi!@sFK9-Oh6B+L!Q_>I|PclMkh|;Yc@WLoU^PkZoFuAG*&VpWeBy)qR2$qtBAg(bw^9PsB`$Uv|)IirG9;Xd!lacrvG}A=L z%+_7R)E{UCtBFmlVZa6QyrG!R!ut>{8p97g=S`}wr7{)mPIxJp8)aVm2V080F@5t1 zSoQB3Iox`h(|j(VwBG~XU=N{jkKaPK?R}DQ!Im_pe4;x8RQO+twa5|Hg;Y(O04`Yy z!ec)MAl9AJMq96tE2nj^Xa8KG+P^EPP&|R^2RotH;#DN*x*9z-T8fU}{fw0|_yr-$ z4nXU!t>m#;I$Pqil!(gT!1jq^WCf?wJpJ89DCU(Z74;!8 z#NU{cpNx{V8=)_hFrof>jK%F;yoKu}*vt9<;g@-Hao#pQKCvoALC!UtwNabX1qf55 zI*z?GL6vf02=-aB7Bp>$M2FT(yx(Q*IAi`99OEud6B5TE*l)pCal?##O`o0aULZn^fCH>+wf#$FREGm#h$kZFndxio)iBkFuVI5 z+kcfK<+3T~^hNk<`$DYUEK3i3o{kH|B&kofIrZVdTJm*H%(f*8v}cMw)mJY;izO$R z{G#a~?wW(kSI=b{(-<6ecO8DR-_2z=O3?j+9Br`7W31)lQS3w}iba{g@#HJ0`S~6W z)vXXTnyFxYQl;}pDhE-2rD@8v6^vciN*KdF#1Fm+5LF}rpL4jpRNF25H03-F1Z&VU z$Hud#ZH{5pE>o0BIE!V5-!ROkALCq%Y5VlWkcjr^?rDlXybbK%xTkEvS7n&3$mvas zcjN6fdDtdi%Jf`~!Svh4bi+)0sff%2xrpk;aiPQF~t%!@pVQg+#RS?n~r?rO&=@n`Xv*aNn` zN}7&j%hNAo^ys}^LN=jwgy%P53zC;YY+3XW!;_LQi37!VRccekts%I}I}P{j%iyw3 z$yn034!!UG#JdR$#;q?#uUAjexKImo?_EUaz<;=MT0T!@e+?tou?WXrM>v+Ul~GUo ziaL>6)P0>g9u8Kg>dU2Yi9f!Z94#kJgc z`cl7>c>0qY7O#|{4~^yNz$Z)k>{mUzMt3U`jchEi$Dmb;Sz19jfr(BXk%!|(|@?^ zq%>_YH^hR4DY#Uw8Bbm-Ak|h`CUY$e1$zQKVDDo$Algp!<89Ffer?-RF3KzL>+O zTch8wavYd$R`X0scC(D~==H=ka|}9bJ;8?CD`;Tm2BN#!mwH55(*6CBbl5HvpO-q~ z#7Dg-9DM<3r348rXR-Y95!BYd4{I*R5(!%#iJ$LHo}Rxfa4Jxu>us+R&j8B4Svd+E zr?1Cf162ZvYt`sKCzYhB--P+s$8&|F`)E>L4L^xA9mPR)gTJeA_p2@voF~K$V^87Q zASbSFtW75zNk-pMlVGyY3tIMB(|Jcr!RWd!&8q0eiZ5}{x~`QthDy)@!(1#DOT>oX zUC=k!jL~O|VR=aoEdTYM6i6L{mD6$=SEnoaUlrn-oe7)nn$UE0M>zA- ziJm+=g-Y8zgGGrP0Yfl}j;wMNMju%zT$4RU2x>aQFiyig`=u74%ZN3*V@>l^X9-g! zmI`w+*U@sD4YasTU+8tNh0C>05t zGiKIITM12KDRjK!ZboX!MOu<(OkZ`|)8oI#k%YdvjLkbQdRX)u56)Jg&#ic5`lO8{ zI^BuR*jERuJ+!F9sw5~%zszM=QZPcai|{(^Sl1IqSo}bT+$-^gq66MkW9KdW+}Y0V zd0NZlkFRBy8rwnqenoOpAqyWqF(8%F6hfl4>G833aH8QU$eTRIm{U$-nn0(A7pV~B!1zt-biCjQ>**^){8M^R{fG+bYihyK<8P7HTSX))BZMUA zq~VzECFIn^R?K$ufwHWXxZnL8Pnjg&hvY&W)?^HDS6iCWW{DTNHC!#;yL#W^S z2sS*MMomg5k(V=@+0Qm6Wc;je?7LDq;jXS@j91%nW}U}uq3yFjC|>#+R-9IVC%h>% zv`7N)MQvxo(k9cKOB02$Su>ec4;@&Q>yE;&-wTO-?jR{X){OSIE$FGlGDbJ83tk^9 z1Ot;XWa7UIv_IAmTs zkT-)I0d8{%Z4FT%8^-%kh1+RZczY@x+Z#di5^5k=^&Ob6d_;4HPLa`jo5=MW-)ZBB z4(ok>Hl6jzR@mHS+1#1Goi41LySz38u9}#4%rQ&BeZ#1eOtP|Zx z;)pzb#SJ=Lk@y5pclX2cr4=}se1sP3$?Bgj?4tXIi`fw+2f8i7p1yl0Me`qj#M8<3n3Eih z+*~)++}#9ZK{Ffh)tw3!j$-$<2H_wFJXzGwoe?u5aI@7`*67|z46}-&yoi5bpq<9- z;`(w0%Up@ZYy*10dk=kbc`gn5TuYx#cB3W{f6+im2zf3XwSzYW&e0xx`~3`-PqCsY zE6u2s`!gz@LQzUOg=%K~rcYF_g4_KI$Q#-~oVvH*+|C}jY&4C!-fm~}$EstEa0b2U z*}?|*@uaH*ma)dA0L3w-y7jt-+MUMks`E-OdwxH&BV&fSJO!v(HIOyb6B41_=I%*ph)_w=K;k+5y88O=<&giqhu z5`Q^q;RI`zDr$*HiOfN|6R$yg?=5a%$6IK4{6392I#XD_N0KafF-o{+(N=2t;~<@2 z6jxk68OO?si$9-i^6=x8y%aOTSWLNB-NH0-fCwe%^(1BILE z{(m{_)U$l1e(zXt+-xI^yAeT0yM))wka@~z_uirHuR@t;J(qYNF`k#RXf|2!tDKp2 zFcX%qbtR_XfAKoFo=Nt=0Pwkt@}xQYsQKhp@*{0CW5ZuX9HdQ%)t4xCSRod~%cjyX z7TJtqf*CCh7>1#dBg`*LL#o{dX|r9VkJY%JDyWp=N-6bx;`9UZw{6+ z^Kko%HoE5BGjw|B!?^L2X~$_R8Y6y|+7GyrPO45z%6-Y~PiIKS?IonmfTI+>9!2k8 z%ONT^%!KL%S;W0DhJ7PpDKt!Wp*s}L!S1wJwsV;XTwk6i_DbXEvL}tWzt5i@+HnnP zHKdsnUPnk|&lj)_$b!dz;>oDO(d0;74ea^D!yLt#r0xAQQaF4Ys#gH9*&;_D?Hqz# zt8LNnr6#Fl|AWITuF)nlMVxVM9F>ffCRgSEvJqR};JbEE#&}g}*C}SGUGU02TQvU4~=?_{twJR;#(R>iS9Db zZhMgzl65?TItS|RszD;xpGVa=M6K@;nC_Xt)BHJxD1QCQ#$D&g6`!NY%6bLzZ)6XS zXorvuY7^=GPsuR;P!{h0+(^art>{}`DYdby1kukV+F;wyJoTqgrTCS|X9bWu2^096 zi=D_&&Keju!50%n@zo@*kfy3Y?9=y!xLzAr(pQFlI-{xE5G7%a zOX-xeb7|Sm+5G$mQPk>)4lk&94sO55d2ZU{xG^sSoR;R!>gpe+yoVa-S5->J_}H+G zC+)c3ybsmcyBn(?v|z>?9#QM#D0mvWpw7L#6bqu!fJx^d_TRx%UY?koo5?;uH5tR~ zis-SLpQOn75)EKq)O`L`i5_uU)Kc65OJ(*m_a{Y=if=Xaz4#MQR+`BFZ%-Aq=U36; zkVn+4(1E{`R`7nEjHPpL9U#IODSF_IC7p6m#7ozCPA5Aj!i%$OarWyxY_&I~gBlxQ zG0&G?DpnRwsT`sAw+vyzd_K4yJq95Omms6_3#!dAB2fZOXmiV^-%|;@;KwI6K_ZT= zJ#`f>+Ha~+e`53W`o&ZPYr_$r*<>K^Djb-6g6^E|P5g8Ifr4i#wKglI zC)cLaYmF(?s-Xcktd+vx-bJ9cfKUECx=-c)>!ZIFCy;^*;ow=RLX&J(5Z`Ss^!U62 zI_tqsS|xLVep$SdEOOQoeoX5o#S%{Z#fgJ8mp4T5gasxreEc*0F4{sqJq#nR?`rAu zFI&N?cD}BXm}a4_PRXptFKp>D}iZG%M;BRVnyLBe{`WNm~&u-~Wte zE~ujJu|MgWJx@?rW&>kR2GHM!ByhR4oX~3mK(Nt!>MDL3i@P7O+7W};__UF3h!E0c z7kWwQ-%l`Zf(kuTswT|jJljJ%Z_y!jQ(=Ibf^gLl2J>PQpnFhWShwvBEmCf!szj3P zp64i>U0%bwPm#q12RrEM1Ie^uPbPi+jT_o%uOZ@gk#Hg=h2CuH=4H$OqaCF$XuM|| z$mDTn63OR`)5uFu($E!d+%t?G_xrdJ7BOKyGgnyoXaK`Ea8#O0-gL^_49*K^pb>dR zRIU)1pdUH(%W4IBrZbNlx4aDMt*UffNf)MM387ldhi)Ey797p?3)k3p z8O^xafmzvHhD7lSt1jFQF}rQK5eR$Y^kFgHTyIbAsa~L=Z+Yy3?`Gt}i?ejz4Ix35TWmW!vzRCX~75p#0$@HC@>gcX@YngSk?5X2*AEH-31gG*1 zN&KJ+IXRSy#d;QG<-}_!tB?Q%>Z-I(dI~Mi*$Q8z8kui~eqd4Xe`67J{$H3%(5@Yu z|2LYMBO*wv)-ln?@_78q)hM;?0UW%T15cC%aMe8@$0RkPq+~j~;es=JEY_8+{xJsb zZCb_lY^p@nv-xcDG8TUr^05z3gJG}%c1V=r0aXEeu;n{uUOtKo)iaz`8XjU+j0U}M z*&DsK&SodClAv?X$Kb;mLD;@F3*VT#VV{v3E^xgLVqVeg+8rA3)ij5l|K5nbWV%lf z+QKmXHy5xgFUVqe@LyKePmSmM^#gBXng%t=PpEMW^}-YBq0WCJs#%-O@=R9K9xNTc z0pDhbk?5*9;E*f94377MFWe+y`IlFW`Pqe-w&O7FadSu2M}-(uW5IOl^e{C#FPN>n zQkff9x3KbyGMVir7jV_f95!lm3kZHj!M*1B*xF@Djon@85958P(cOdI;g3*h`wg6Z zMxSl|XV3UITo$N#bFGW>?~!*ciFLjb4YBLg2+KVIxBZpiQQ9~>mKe{hIed}*8}W;G z`cIMIZ+0=v*Iob%e|+KHqb`iOxd>J*yMW>s$5O3K0^gQYF}z7$pkHtlP3qMdVXPa* zh_8iOH3#zdXf?2wdAwxXRk#{#sq80jIxL(|pGB(B;<^k-yX{PD$s)4xohIqJ5XKgC z%p_C0cM|cmEb^dBhB(zuAU@w*N!YD=R_w%cw3C>JGxj{FX%zkwY@ZPgRndhk)s#f# z&K@*NtQWAqH?pta{9;}NxG|w)^x0dd58wqqitXOpPDEH1`xudDFmb5)LVz-JmwH(|>1NHjD* zg+F}mv6C+I@m%)_-16=*yYKZY!E32C7*MqjBuV#e@c1=xx~oO*^gFwWSNdx7;7swrL6^^rhLUJs+5#Zef_Rdp;g^ z`^XdJ7P0}N8SI=;C!YFCJ60}y4>lX_6O=Tc!drUR*mZut*e}yF1QtIM*{NgRvJV1| zu-!SwaaY$AoFqJsx#w2mp94`S`QLkXOW0iev(*a|%3X0r^ygx^Zx+G?lFD#xaHC>4Q!i`pZa>lJlDM;tO+}DsdBjT)jt@jq>JCwM*q6q!Rpw zx11uiNLJXgv7T1n<&Zib<>-}V_b~p?4P1RGf=Mr5im!j?)^r^m>Jq4(HTVsG`yi z@vQ06=My#~dJePm*DfN{T|&Bz z-jTyqRYciHhHul~LWVA#C-G~plTd{+vf&O8tw%|)v)7wU*f^0SzKbD8+B+F9?^sy5 z@+%{pW($jb63LgoT};)aI1mfF17%?$SiV1-S-nFJR}4JE?f!MxvCxPpag&=9q7Fm1 z`a*b;P=INJQczZgf-4iZ!gJu!dM_`dZ?7Vi?B?1eN8?f1 z+DR~R@>4X3{f?u?YrxzaKOn__BC&C}0p}wOh(CA3)AiZTD$8hr>Fr{suyhZTqcMuC zH=01|-&v8yS50urRgzQ;@j&5aJ8JO5@Zs%N3=u4cIQkj}-&Mo;w$)IRZ%Y*7tx3tF z0#a;WODAftlZZu_r4;@Ce4Sm>HRgIaN z_H_UHZ?N<4c8){1h6*Cj!3^hZV7$c?C*(@x#o(?l|pTXPbY2fv68vIz`1AOjuR8o5u zR`kch<(1=!+w^l_^DP;CD%!b}TMa`7uQ6R~?|{wyc{pwBG0b{5huvIIj{7fKqUVuX z#HVMlQ|lM2H>Als>XC(=5gS zv?1ExUr^dS6;n@rW8=+T@Wd)vR5jU$6RZp|Y1#q7mM5)@^73#Tes+Ozd2NZ4rWoLV zi;_??xv8eL)IPg#8dW!&{QGpD4BS3WM*X@>qU7h%$M??BUsj>? zLH!qSEH_Lk{LE5d;$-RR`B=%hjnYLguil3-~5{Rbz>;`H1 zpHae1|FWsuTq$ALsSz4yE})MNmDI3@I?*dP8TCFhG$5{+p7YeB$9#U3VkQq!KjDR}%9NZYH0lPm{49d%)?{MXb3agO+)JK!W3$ z)(;wz%?|ZUvwk(6pLUgNy)7m?6HJKms!O10kObyjB-J~K|yKD<2zJ3FecoG{M+Sr2~x^#cuINqmGGojZfA1{Z8Gfc7>YbHJeecOUj zmA!*k6XF;*Sxels=olMoS_io|q)6chip#b71r7r;WKGHvNXVs(puCE`dUGu@PEVXa z7f&GlU8_hVGnS|h*^>~i)x#5$B@;^uaNL-w)a}_dl00!V$sYHH+zDPvDw`z8%$zfz z{cZ()9pFW4{Z(jla|yQej|Giy)(|Qw&8fL*>~Zlan7;{`6^|NVri>=Y4GlQ2HX3H4 z|J>%$GwzV@KOL4|Nny={t=PUUF`QmE7j_kKO{I(%yyKTM82?#eki|8g5@&Q!BGzja5~piJR{H~FJ_hU`u6-m```vV`8^$%xewsF z;A417tqF_EhH%Qn2YBA*5bEVW!lfap7?9$NclC^^LANDN9GQ#J>tvX!DZ9BjV=vm! zt4js8&ryEAB-}hcjt%SI!q~Z00uCQR)BiN7_LNbi=+koEVR3QBHuWMq?iwHN^dEtz zLF-{gMhervrk;7EX3G8uErQc~C$l4YG0|O@{URezE`B9pRYOTeiYD9v0S_u{*k=G2gKmK5j5(twyG@E6SZUrOp=_K7Ej!S_A5Gz??@sTQX6JCi|6osdG?~>e=O11C}0k@^)bDduR}ZEp2P?#L=!Xe z#NUCq&2}T#>N-FwN`Xw7`~;pdQ(@NwKi(6a@ip@2TG=VTvzP?SD$g}L!_F z=!pZ-A7?=4oafRO4K?^wl}B%Xy~OVQ`G{fmMZz6zBk;X1i{I)cv2XHtCgkaKtWqy$ z{`}SC{depDEB>sP2~;(N`7QQf7bnTP=XIAUXe(nfTRE9E)(5pe_Oe&PbufGd0Rbt7 z!s~|YC_4ijnVSgP7Mn9NVQb)zy91kiF96R@&}DtHRdKvt0|rIr;F^A*3#P=Pifs{l zB%l_*W&^&Qt%AXOSJS1Nld$A=49d)H$M`ULYHGBEwsy}(nQa$w&e#Ujzxo0*c{OZw zMI;964C8+5e~h!EHW~!3XKIHSCNR|jr>z=dG$-Z@nnTyXiXF1({pB=>{nLk&w+Zo@ z83bLj`KXCxa@w(u4}bsf?ghh@b}!^WoatoFFwF{>dl4& z70(#&!%EO+Q6*SxCQqy8UdOa$s~IoS4PDWWkk9)KSA&njwCJx)(o0Kb)gE!w=nKR@ zG6gU}Di_qNePGU9O;RK#z&^`iK>xF#dFLtc4J3$cgdr)G(&Sx@wP#-l#z4(VIk>Pz z3Ht}$;H#+5=wd5F5B!#+U^k0CzVe>7|CJM(c$o_~9GNcs6l)>O@0%u^>}f6Z<)%~> z^R|@s) zQ8Hi4i->xUkzA)i=t%b9lnze$Ch%g7>+Ri=Q8t*)rVrjdy+!dn)kr&bTe`(g&}{FrV!Q0 zBgE)@G>MbCK^)AFl9Ju$NSO9PlJYf)l#eYZ`M;i%sFr4uuW*An&rlKp3r=#II!saVd%?V*GhzfA=SNe`Ov~ z(>nl54qby7wY6lvd?m#En?&C4nnBk0#}F+oO7g0ClPYyaYk2debuOC_57R|?*=x&i)* zWTj7rK!mMiW#;D(;l(pZ~K$)IM(K>U=?P$8Ac z{rN6}f>lnCJmVVVPg92i-P<_dxrMoDt3n(Oj3M=r)0l3tUZ#KdYtSj34o}v8f;FY; z#I}1Z`J1OhuAX=VodPAYPg;^xauk~AJ@??g?`p_gJ&FvfHo!pkT`-K2A^RNTU`1#? zl&QwRf%mecj;mukPY2#`UMQ13ov`kgOyKH)4#vnx9M;+RgM`_C%&q&W%$KW4aP)Wt zsPwOa@FkMaI6FXKF8hkv7xspkcJCis8WhOBd>~?1XCLCV$>cM^OO(N5p&ZJ0w+p^& zO~Y<%VT!X&MA}N_{*P6{e`1onJ~hP-bR?JRt322-OG4ST+H$_ zR0QZn!*gIemayS574- zpBg&vj$H(oA6#I6r)l9?G6_nXs@b5N9atYj(Mz}sryV$oGwkY}XZ`VF_jl&7fttr~ z(z&;+oZVX9wq?#VN_89SFz+Oei$pvTEP#1yrjXyCZ$U)ta}It#-m^m2>dWCxxg~TamEjEaE1Vg|32J$gI{Q zr$juE;-@x zD2_BtyGp+GTqRP0$B4-S7w&vLo=lM9kiL%UI(voudR4PonsbKP=?$WLEP%|3&e) z)$ihxS58={AxU<=zQ)$Q?G~J0?G1M~S%AaYeXK-LEo1SdgSC_J!(YvrHAaSqv2558 zmDhY{gSYdTS5HRRPg|q~A*ILIK)(=N|22z!Rj~^^-^_-@Ejj>hExbFo6Y*d!Wv%wv zvPVW=667v?%L@DFvR_r)m@_l#*l`|XS>tUd1+%syajlJyC)DME|;{GUkJrd8Zac1R3OHlmfDQqdQVeT1+vmSFtW6tEOjQ0#9 zL4n3-M%pup{Z;;v(LK1DExlz5VL3l}PP(cfeZ~)4-vte&k4GV7km&Ii9M{0r{F0%CxC9o_#4qKYFaWyxgR&nbtJE7PN zBV_~8Xonc@@%&YSa_4XC!1(LDGp}c(ctEPa>${A=Ypogf1}XEbO8l|@(`vFE&a zpBLRP79Go3wEc#0jeHe@PXCPH2Kd*0s9V!Y;LJ-EGT0wf)u2v+NSplQf;S;r~RWn0WSnej}z&Q zRRi?e%TdA&#u}W1XD;lyt|D}@5fegaEqyY#ldgI`Q`i_DCe-D&5=E`+g_lRdh0M6! z!m_e>;k4y(!fke&g&Ae*gbTPG$hyLCq3PD;!i9&|36sKdgo{Q$5f-NW78+UqCp>j^ zK-k&ZE9}sDCzQq4LKA6u(cf5g(VUA0qH!{6qH)`dMBk^47tNe$Ao6U}5LNHi66qb& z65Xtp7dfAh5FPw0BU<)JRV1&hELv5mE^0{85}EAR5&388h;FpWh=w{xiE7@6i7Gyh z5j_|-5|wmJ6lqu*i`J#-iRQ^lii{Uah%D+q3Vqxk3tgxE6ZQ;@2raz&g~I4T;al}T z!VOijqOX1`qEJZ{(dtFoBHN=nq95jCMBjUKM3axIiAw*ei2fC7i=Ir-5G6lX6|HMm z6unN;6!|CXh$_yjiXK`ii;UOFirgMZi6-SpiVRy7L^HnVh$PCjL~l;1i{>_Iihezq zC@Lq`qNy^*qD}gGqVNa`-J8ns4A zB)L>u6mO<0`k}8X`d}p|iv6x4T6$1hl&_>M$~in%RF*p|{2}o|SkX8v)ZZ*8N*SCe zGH`PdJv%)~q;VopI3{`{)HW0_yET+~`%=zf%=0p)`el1f_wjWQzi~kDA!-Zn%lY?A zFL7fgE3RkcVt7nQz$l*1zbA}}P93u?NuKvbqz>luH}KA09?$D^pUqC66~vSmoe)ec zOXEqnSu<_7&N03}8<_WJqnWoZqoK|^f_GT#9kW;2l3Di8kW~$mXOxCBnbflF%+!T5 zojrc$3c`Ia2=+al!nFUV!fq^`B+wk|%hV)aW8{-w2|~QqfbB*}Cj7-EX3SYLp7^db zX8tGv(`CwI#+>GEqp=On!-4UFWqlgFofc-ieU_3XaD(2n9Q=>ys?uycxO4P!>R7- z8(KQz%=HG!Q=2u!Gwh3Cwm-cs7(A01uVbfL zRSKdGMsYq5pEu1lp1D0WhsS@shj%0Pgww+Z?*zFqFPNldCk47)k~q3zF77(5h~wP! z8Q%?h_^vDwO7GhVqYOKQA$%p#m*h-g;wl@OePk*}2p@z!@drrTr&Gji&McC#Yadba zxCtXaZsQso3HE2mM>N>}o4Ncim&u>r4ntLqjQ$%7y8mGWyxwm?7U#-@JB@I9bj=1DR=0}Q zdzeu1*wZxV>TddE`F^@M>nPo|joZZOI!uqQ_N2!9{^8W&1$63_F;sJ-4x4S5;5>I? zIQyr{7%nMC;)mvW)I39x%K2KcdR)5PXp}TvDYFrGnx-=@9iIg|TJ+ejdw*l?f^l%` zQY`Od&{e^!5)~SGp$}bTFTjHh$OH$>$1f*OQB7hZe7;gsm^xiaD3PZqJkX>qJSD_*;eSz%TR9ff|FUg(6|{!GLZGQ$G0sYuV7s zLV^Ff#q88&hTvu?Bj{FiWSbujFpp-YK+lax*hC5#oBOeh!J!JC`h_v9+K=^+E|4KP zd(`2V{S0R3jYj62jU@~pa%9eZod}k{tsr)x8wO5T&pyl{kZqa*iX{)AszaLfy$}Sc z_?;OSCyv**$}@&@N0X>IoG00lce=B^KN@f2ueg(d9w?OIeXJ$jMDt_OrkK6Tnm`Aq9Ksrc@m#>=3p3V4= z9T-{2YzRKara5#mujcRKbl&&uMKycqwVRBE#?gYf23?%9G97PkQ-uiwt!#e9GFB{x zWhHteSzD6>?CL3>+3M$eIm-7e2>8+Vs6>#K$k zIR$W0>tZCIuSC{D3lAr+N>tNAoko~=Re?lmKo{i&Q*Dh>A~9k_XsL*U?&0eL}t zF)76jiK{=gaZjeRsyuMb&@HqVpTv522$0Wu;+*sS%>KJvOM3f7!2w)MPn(^F^ifk7 zy=As+(xF5)@c1a|(ve1Oo|Mx(R~g!HRF=+}=}9vmnXuC@dPC>SHbG!bHTI}{!&voW z@M)?z$!<}mMdrC^kb3}x4}8erv}hvwXhF>KR*{5QIdXwREiXGefzi#|!$ijo@HQsp zL1^+zu$@zgwLU4#p)-}x|3`t0zq%EdN6*BG9#d-k`Dai`qYanVM#HBio8WouYwU7& zgM~hK*ui~s*faBIuynlZ{K0_S7M zHXGdQ*T&RWMq~2QEX-V{gWs-O@=mmEK=PVFQ|U8o;nEMhg!FJEG#t-7HpF`g+T1<* z9XqD32k+gV!PGstj|IyWA%^qE#}e_$Iq3<8@k0=H!@?~g{@@srLJQH_kK3MEj! zrh-vRfo|SE9~Z||fS{MwZ%78cF+4jEL%07XSmB1ue=79p3uX&T(b6&l_kBBI0gB8d$B72 z6nmq?8q1?)DU%Y9iFx5DJ#joe#4=R%=PasKaFm+oouXGiSWw@a2Wde*G`#w(#k2R#FnS-;98lFCB@8<`1YyIRgF59Z8z15qa}^90}DmCt>gSM5>?& z_RSE2mp2c!9m-(dyM6FKY`u9nm0`5^FCt_nWS*yp29o{UYd6rKG^wbRXwqP4kTl4c z3}r|WrATH{nfG(Aod%T@rBNY;P&8_g>i3-Up5Jxe^S$^T5>#MiP z_nj`F7oI`otzMCaAw$?7*+wcC)F{~Ur8NSarMJCF$lF8)-g6J)xZ0N?TBv(;~ zTG0m9v2-Kv12^M~ysyt?Xm*nv&rC*qR}uSo%|T}IvpXa*S)>b+YV-o5SW!s&r9A5_@6hU3zN^p;7~d?3@F>toY1>Z0jRJ zd2`kiHa*|r#>gqEtl3C+K5$|U40Y+#%n>@lPKQ=2Nbp+zC6gR8BhU$VATx{XSpSxP zyexGsD(9B3z9^HPb{DjDFfDkF3DU1k!mR*-=+n@F0U z8d%oJK-k1kDs@f)=e{y$lSIWJe0mVfDJmpJ8q0|N*kvWn;lE3 z?GBR~on;lIu3)U-;+nN=O6P$4f7B^s?So3JlfCaHEEF#%+o0!eH8wCfY z#2N2RHl(Y$l(>b*F|Y21I@J99DVQE0iZk?dnAHY{1%|#yYMLg<(Ym#L?E4kZ9hjOh z+I4LsJ=Lek6j>>II%= zw- ziuIRz3%C5cLE54a>i!C0EYkw#W_^aks|w-f*j2EibS^y9UkqMn7;X#u0_debgYCoS zaPxIB%-(zme2ao1cLvMmhhmVvxQ3U7z4j=ZHGxyM|1p}8sZ$c z0m^Pk!bay%a>haie$6$3f!o{2d0iuFcJ~zR%WHI4wfzoF@{7l-vX7`rz)YlEwsXw* zO1!Rr4Bw6DV(^)x_+|2Fp;@b=P~?xAP>=Isepql0rT9(QHK!7tB+g;|N*3QtQxR^d zl@Ptax83v}og6`or?R(L(=4IcW`hhL^Vz&$!G=pvs49m zLAMF-H+SIn94X-vgFaNU8Z8u^Uy8Bn6eA`!qwLuPY}8(f*7HKp(>?)L$%kWX@H;Br zSA{?9G=v@NG=xp(WQAMX+A!7V6Uu%bEp&1Gi{2aB@b~v{TvRm=&slEAUE3Eik{rqK zefJdhRYe-HlL{w>TrY03qbt4s$PKMcL#blI4_?LVlcY7jS1@dQf;axpSHXqc{Q~o2 ztL)2%b}}=|MR{H6yUF;!A*8;^o7~e}%$)7z=H;U<5vv8wyfaP{$=oF+>|pj7a-$}k z4jUYzB3(5OuG>=RRdAv+FPYM-0RfD^UJd(srk0>{odz$@d@N1z;W0+iobGI#EVHj@ zi$m=G$?Vb*88*Ium@OsJi85xCQz|d7JC)|&IVK4C^pdFU5OOSbO z*39y=)^q~nBUt2gnVrwk&u*k8Fr#M&Qwc>?s@Qjox7A&lowD17id~IoyK_dwNb~JwmD}F_j2H*M0+c$F6!7%5&K*i(_JHfV`Wp){}8(Y)a$ER=ctTcn! zf!u7~kVG?kvM85*={vx)Eo)#duRFwunZ_}LDjm#nZ&l`qkrhw#-2fXk>p1UrpEtX> z80h@Fgg$bmv}{Dz!Rl}#(Rh84`J;EACtv-78O7zF_T0Cm`X0GdR^%An*rq}M@v2!# z=Q}je)QnZt6Cp(&b7*zoWNP0d!o6=hXyIy(4C{4|_1RWQHU4>0+YPl$@M{I87$xcO za1CAf^AUaFWyXFhxI=$A7t@W#bfm`8TL%kR+;QAEw2{zI5FA0{YxBi;Y=iLc6??PCF%wo6eTfr~a+1^pgiv-aM0q ziyA!J+7`b zQWej9dMm7iN`N>zh+5FZEeh1vhvg_=SGtHd5-|?x6-J8fd>Lk0ThqqV*o> zbkaL7`qcFdy(a2J@q3xTl~+uss<_jwwGXMx%~CcruAKd9XhMI=SJXDCsL|_x;^>tU zydqtSF!+pGtVW1G#j_Er7Otn@yL> zHqn>w{n$O-T)i!LNZkt8GX2pTn4ZI;bj{&))Sx$ko>{YuPTtcu48ZfC}K0R?WwID%UrKG z&6)>HU=p-%3ijMvOBRnWs*P1rpktoeF$c5%F>hNe>3GNKJnv7c4n8Y=X;thH!`AEa zMmo;ZX_xDnb(-Tzmc?}@=!g;>&Kpm6J=db1trG-(^ftTbx)$Bd^=%#uyRmh-2WVPW zD9hI#O?sQ;$kRnqf)s%|mrYWmds_ImYJmQl{dx9rG~f z1G6YiiXHf;Oxx|3!)>%QO^8MRrL?6S^w7-v0(@k4zwC-6O^ROU!B zXZjKU&NJ-%uv!Oa*YPBF!wYglsg1}SUqm_*j7axyZ*tHomoOi=?d<9y<{!~y#a_v< zzCI_(#t)Gsu>B0#DtDP4S&#(PvNdSgDlPoF*jN~sX@xPBu~5?2MI6tHg51L##*F)X z&adyLTT)L@pHm4u={gUhJ~fm4br*+~?Ml#6VhrxC%i*X&0O>ry&BS>Xw65tA@jM5h zoH_@ZHZ>3*!#{$gHFd-zU0MxM$l zz$|G)6dX9kKJ$D=%T+Fe`*kUhKE0m3Czr-}jeWshQ#%9y?(Kr4N#=B4m>B5gaOcCV z73|WVpGo0u6H*z=nYgvG$iWKEjVm}y6BA#OCmAWsrtk}N!Mv@cIeZ%^U-tyDjLBTz zxrPz{I-jV_kR%&ol8K4r7qT#Igrw6PL9F^g`s#Tf-LcD=zW!u|HJvZ$vWsnW_E<-r z*TY=W_t}StR-PfsoZ8c#|A%o)-AJxF3^HdF=d!CL#-o;(65>}^{2V1qSN4dJO|4wA zPsA3El&Ek!Bilf1^(0W&jUfB0uCbGNn~C8cQ6jzb3sbcB7w<{dJhFFa4!OP~gKRXv zNGk0%6HVnh=HcKnI#pj2J-U>!P1yrI9Ltb|-bb0}-?(+R6FQF-hyC-tplT73Ar^Vxr4HY=$q@1ufE+73XbTFqZ8xF4~up!_D9^KH3ca`SS!6$D? zKOP3r$lV-0z!Lgg_6Sm~x@cPS7|fDJ<{>@BC>d`h)1MtA6pxX8dk?aQVndj2H-E~F zLfISY9n^;trl+}Ou=NuMNKZ^FIqMkc^jP8(Wdma!g zCX`+DK8J3akVfiw8btEPB4!2kqIM$NS%te}AZU>}oKudcUNZ#j>JtLWE55-N^Y)Vg z`zwO1chAU`u{`2c{fq{Nas9P94z$v#LGTeAVYIak9GD-0_8)GsHP zde2$#G(M9(_TVbjPTs=&dacIzUp8cRinnrv&sPFTp4UOk8w>0|XbyyP`T^)r8FUKe=E z1MBEm%v4;QO%&V?lUy!u?~<^ak!jyX!gMR?eD74M?0S^mlrv`LXDO2m^G;^^+&y$# zj2!bVyN21fa~`?W9K%>@W>DLm=jrb`y0pmMga#Dt5Ja9EVo0kx_>~vJ`}Z>Zw~CQ4 zbjB9jY>!}Q%4KSyv52-FbEDtS&1Mrnoo3x9o+L$EFA>!vp~O_!NtSxZl9OZJlclL{ z8Xhv&C4hXN`v+s?eu)Mnpg0ELr4w zo7ZDrOoy#Rs9s$w^Wk18$ry^If$rj1y6+e*x!FqZt+m3yp_g>k+(vTCL4Oa_sNHUhPd}t#X@5S3y-LL8jZ@M6P87XarPrVDluE7#4_w(WWGjHNF`z)8St6;P@K4-rTE`@Cd_T*UH zVsfP^obCvCL$Cd{VU@36q?3*7d2uZd=@-e9G}-$OlRBct&MyAN#_nyTODj1Fxv_v= zDA1+jHr*%p)}DpX4MOlwJ_`H&ZjuQyP2>Pa#Rz&^4x_SufpOY7cpVrAt#&6tYN(FX ztyzZ=r&1UlgO|0Rov#q5Njdb^D0$pJuaNc%C(+RBg!JU(FbcLtWZ9>eJcrz9y0h{l zyXDeU+F3M-e(0Xgbd8@_i^=tzPa9-U(g<~V&gwXx4ixvWl~;~)I}}R=qI0%W|1)ZW{F*-YkeoI>cdLU2 z2LGmg_J*|Ts}73Ei{b%&MO zyqrx(TK)<)DQgJMsdrMwyWrL-X1TOgS0L#~ewCJv_NqWLOWY7QB3QjMo$)CY@8xqYLQ2=y&~w*^oF$F5Q9stE?_s523y8O zgU`!K5~yMIfOrM7EfvJ+PVy`#s_B@FxKYqd8!$&|><1>jf;V2gyOCj~u zLZDBtll2phKw#Wa@cLc=Q$`En@>oYOd9(}+27Z&rEptJR9|nQ155c1Y7sy%JLU`3z z2B}+4z=qBL$cBdxV0mFZ94x*FSx#8D5J;4TCze88KYtZt$ zF;rvs5L59ugFe19nPd(0(ZPutC^BR~zZMVC#U;C`)Aa(LVi(tg-8@Wl-pk-;gL!DR zMgn7!0%+d6cEJLPFv`sOPBVSD+2Ru&yz*EdUp{zB1&g@9DYbz&>}!HA)ZWrBvzFrM zkgGJT_Y-*@o+M~AKR^X->Fg|n)4Y$bQ%DO(myXj=W}h|qQ8l>)(j~E%H28cMSVb;j zUCugkM3$L&{N_$v;%ttOA&Nfl>7&76FX$$7FI4%mA2&4`;J$mlwI?|e)T&=MX;VTv z+QDgBcD93Q&iG7>9UjyDmA-g-ml>X1=z?Nz;#Ady?aw)a@F#s=GHaHJ$Nm}kLRs;1HYQF3JASVd-9?i!M)7Q*8<9bsngmFE?R zhp=XAwTPaf3<;YeP9DryTRZY=h>6>*&A3$zvi8*nn05ZnWL&8W@nXY>m`)@|Tsp=~ zTDz7gYbKDTX2Z2Fm}|_K(ff$Sz(+Q9YLg&c#e}hYQ^EX57)9JQk{ExKr+z!41?&H$ zFgNyFk%jW7nLN{tjD$z4AY}b1dSp%r6aFrTJiqD0+|BSI&z4*d|3d^f0UIDMI|p?1=IbMWSeP zfjzh3F(ZC-2I1r>g8BMe*irVm?An%1OlFD?t7y82xw{~i9_mi#oqHI~-U?j6W?u?m zEsZ9!C6{lrE2W+b@?$^qd_(F4n;a9TU)({Nfg2|5p`hB@@l%d7@v)|C%vyUUBX79& zbLW5{y=Q-b9WU5HYnbPHF8_AH_QSxtpITK;vKouUgGAu_K z_wyBj{;~3qxMz@r@4QPy0$a&PEk4n`XiJ?ozN0F?_~fDAaXfJ=i3TQilgF#xlhQ>M zOj`O~67`{(1O?9^{YggfD)0m0FIhxWG@b}-?=hsHcQSl6kAs@#-Ei<7A=_4cCiXJ= zFeBW8yxqQr+-yP;w7-zJ_snJHyO}}1&mQROmZnk}b7A;SCP^IEB{(`x1vKuwCW}?1 z!PajfOi3oAWe4qf>R{Hj7@oHJ!6XF}s6J>3 z3>yP4{$2s~K_%GnlOxbCPy%-kZ>aFt1iGBnA^+TM(%iF_J@d(*nLXz{8BjKW_*hRE zk=hB`Q@r8mr!}B)Nt2uFJRlPl70K8sgUpv7z2ww65orDwu>j&iW2#R7)> zYDhsrBAkYHSo`e~nAsiz{}(qw)5{8-UtOickS7owZ{;(%s4Xo(Oi0M_ZV88B+6ny9(j0iCG-?o z!LGl3O!@rL)cf{*LC&?$%;8p5)<9BMWQlQi{_UZ)4a2{h^=Y~{azVHq6tZ@EUQ(Nk7`ECd zj9lR@V{DJ~vu;7{jC;X$x@OWHsvmF6+-{2}i~e%^mkXqcal-<-_G2=uI{O=G)b1tP z?+&rkKYSz)#s8+jz+qb@BM_VGGwJIR~J>Tpv-k2TH{VPtj-NyCQ8@Kjl? zR>k=nNqkUC0*e1Iwl@YDhd4vBbJ0HnDs9BQ@dt6Jmn3_Br;rHCDa`rm6QtHKll-~g zPNvU^CjM#y;x^?2ad8hN3b&NVmv{R)+KC9f{#isaj&C7a~Pvw!b=}jNlQ)F)4vAVX65LGAwmDfnM7 z1P4-rzdgqYhOL(1Z~f8GCkrsPauk#-dP9mNPw~EAHiC;^jAHGOhe+X; z@xG2#A;Mo{z@kr7QbBT*r1*bu7dH8A@ZY#;*Tg9kZ6x0m}VXw%j$K6{+6 ziFPzIyzo*7kpHCz+do_L-EyS(QhZV2U1NJT@Ie~WIcg^VUwtR+x-$l3tBrxKHWM~Z z{S1l=?!fCwa{RjsCh`w1jKzhO(!w#ek@#LlkIFSiLHLhmYIk}y|J-H?e!bO0dbx5R zG^|sG_k4Z+xsgk7TEPIm$sPsG)DKvF>k=f2zW|N$T8zk(5T4IzgwNX~`TJ|^k@7W& zA{Q_&*Y*}PYTEJZIz{+%3Mgs$kqGjaLt!Po3~Q=I_&MzQT zH;a$sW;G#Sp_|x$wcxv5wLm?+y;zu)gNx65aLd+Ke5GA_{0mbb(YWMAA72y*y` z4#zj+RYeziZTSJ{|CB^Cj0Zvfkr@9Kw=gPv{|oZD8_tO*#?NOPgcjcac`-Hq-yie; zx}M`l!g>Avx@7zQ#k_Y1(m-X^K9Kr4jq!3bW5#dKtKHmmg>;E)3vb>kz?0)o38Ev{ z(sGS@c)dT#!FaXM!JK^=|C^%mU)M8KVSE>|sV;?#;8Yl_s8}fcU@wcG zbmUq8#YX%pLs7nxTQ(6!=?G0T9>GjeH;nH!+#Q2yUR#BZy-(0;)&lsI?T*!fY4~gV2)xe8ggw7!ftl9{IB?)CybQkpZKraW ztXHz|!?Klz{^4+C5>-gEmp+kp;Lu!2NPjk9j8(oosMFMWJ#4vgwS_- z4cbfH#;=XW#3?8Pwu<&S{M}WCU&5cj@CyODGqd68TQNF;)?neT(dc|%gmkq`M_Vyb znt53Ym7d6u>#n6VGVT~`P>f+kqvdh(>OW-F%nYh^xSW^u=MF8bia`hKVfM2m)1(Wb|kc*jiZkOC}FgY6~d^IbHOqwwrdNqgX8qX*yaW9Q#{5#4fWY}S3N;_0nU4d7_ zKXLWJU=r|Gi9aBi0UmOB;GG)=`4et&LglHz+QpH@tp<2-UnpxVt^=FTzJVLXt5LnQ z6T|Kdv)ZH`S2_B?9!qh0e%%i|q&bRhYdC>x4zct@@N2sN>O3qA7Z7`kZpffF$*q?` zgUFgkO7vQ@KhL&k=KyvDpl_hB-5{ zXIct-rX7OSHTk%*A(=my3%hMNdrz$OKn!nsncqx|rN13)h%p&QclSp2%akyITPoZ<`CJ%+V4$U7Qa)PZOcoE?wqZ z^JzSuc8}A-{N%MR%cSd~-oR7s5GpI!3%TVx;mTPZzWVh0(6M|49MCbsWmgo0)$d2+ zh;tNKH;{-wOfDneD;pji8^FnH)r3m=E}H;|uQ7jeC_Eev@tL$?csIA@wYzxU=7fpxVk7lL!fH<#6zU<(HjVz^@Js$ZNnOzde=N)C zqB{mCFFQ&QqIQBf#MINq!eM5%LNi^m{Q(M&9E1;hMsXOyg;+gQgQ0=M! z4<%N?^}ih$`c56C-L4WbyJW1kxkr*uXM+6=MUd7U!;fiyM^5+WLfW%pw&3Y@+*6|l zKFdFHkfb(xaAP)IG@>AU#3?@y3xBbPZcf2DPsQ=p!Lz7bY=;ax0ltd2lUlERWFpr% zmQ)p`S>0{)naj@FUpL>f)4uD1+U2uYe%g>cY5oSrR`FE-oUTyw$s~|4U4hsBtb;Vg z<50~VG#B;m5q>by;nU5Xrwe%w|#Dr3Xm(HVzpRhEE! zNCxLFaQFwU826&sP1wr0zXdh_^@{4C-=4dev-&IfB%=7V%`5AaTMw{M0 zC?c%;R!aR!%F*J&C`mo8PWT@M$$!@g|5=cPj;fMuK=H0ObmsCSWX{+VxZ>?hh#Bia zUK=$KU$ZPcmHV8w>aRdWHKeIF)~G$z0bVv4Qq_`Ylpji&HR`Qo$EqlDsAMUg-*3Zq ze^vyGhGx2V**t80c8p$?*2U%1r{La;H|fm5DOmJt7TPK;hLA%5=D*Jpi=6+iXw?4q z(&>Mox)eYum2PX@LLXgIfMvXO^mO!8dYYp%c;##cn-m7MPPCJm>qqg`N7Tqc1$P*G zF$=@PWO1vnJhOg>KUyjAKyP9ii-#^SQzlHt4@&PjCfyH|^65wAvI8i_Ijszq{vZni zB&oDzJbe^B#PF}*#)OpfG_ks#+z?G;dp;y$z=ANivPucQyw-*1Me;DpVhW9zG{PK~ zk%XvVDf+bV1M%tzLgmlJ%s|!=obl6`ehfNB|Gb&c!j$_&XN(>m$(ljw^Kmc~wwEYP zuB5YrR?;RVbzbblX=K3`b&{Ro1b44_ll6ZTnV#vVnXZ*fkhDf4?yeyJe#lVXfw|<- zg*>SF7*zXg_D0arHN(_kGgy``#qUk_CZ8Nf7|$Ug`>Cmc$;tRlmHf|OkEtqN>g1-~ zOdWYR*%hiEHIbs2CX!>>Ox%R)iC?JMid{Gm$fYW$l{>}+E57rw`}KJqN-WJIo6Sg#c@e^Vb3#~IopoNc5H?@%fjeTh!PuWt&6!K zdKgrqNUtrHL!M11#?9@4Kh-<&wLuJNHCBa%TPd+t@`tt;aS&U79>g{&3cu_&BgIql z@xVz(s{L)WaMtQ4VBG41i<5RRU#99qq3UhcK0AjjZ|5A6L2KB+N7qy6%d^N|by;XSa zz89{HngH`2{)WL7o>b!Z1dQ5U!XAB}fIrq4;-*iNF_Gg&zS$p*ZwJa~b*U(HvcHK8 z=M{P4Wq=)DCxX)Kuh185gl;mmtXT98&Lz~t&N-cqlhsA}(I=Z(GC2yLdVb-xMF&7G z^y5{lf8?Cs58eYGd3@?^i5|x1NNwIUs(fMsmY$ph^;5TD)^Gq2!bdpYT(2NzDQeT(7;0&O4GPkTbO>)!$|#cU8={%VElJL_J~FG-fe8r7V2}AXKNDK->uKt=!{_! zG-(3%FV;YL?RIwE!i!K|b%V^ebb%ia=HRIFMPOXaB~DzQV%&ELaQ)cNh_BlMx;9F} zO9O@|xoW0xlFl1Un6wWkStjGy=?VC=GX^IkgDveZNp;gb((){o-Em6~l&CjOd#Zr^ zfQ#(Bx#_Hgu|B!^DV6hkD)EBcn&?6?Z@9i-17xgDW(=0B#=YFMySvLqsPe!Cb|^VP zUaK~&)O|$$8GNRiVO?}#lK^(R<`MZ}7p@cakDWHA7LSLHhS~G8FhTz(kq<~=`+0}i zd(R`W_s~arb#fV9{`(zupZSEAGkekbOgP%jSAn2o_ekpUsgShToxY#FhH5vzC&$cw zke(2Ke3PXGVb*g5jw35zv&~l|#1=$OsKNP?Ar!h>2HX=PS8$@?h9|Kxp*IcPw;Rb>Qb(~}E^=YaT=Sdzl*TX6Q zUa~)ZDM^Tn0!MNd*7&wyiB1qUr0KA+6-($B%{dVJ>k{w99KP@nN5|or7|;`AUQpq8 z0!J(muDxz&Mvtk3_X>6lQ8j{xmy^iWI6ZogUqcS4ij(yrQcV5uDO#Ewp0@@>xHa7hIH9pZ(S>h-Lkae!oQ8(}7&sbcdgV(}oaALm|A!u{RB@I{LAzeMW7 zoyze*BrA}&-3)HL)+bt*4DmR*OTVp}Ob@)xzzVlqOmlD`(bpx>acu!3y^IKRjAYSj zS`heo1_)+tT*rOp=H!*PIdi(sL1@;?XLj*TurTl=c6~L#a`S22*9$k9`6dSD5>v>< zJ{GUnX=0jY1@$1h_C^oZb4jRN;&goiBv)%v1&>JFQuu(a3n;`|L(X@xRF^2K9N`>n z!60H@gm<1juPu|xLYKp%FgPNc#M@L7w^vGdGiM^Sc$lE;sx87xpUz<4XDKwj#*t^n z*a+3?_dv0U32gcPlJRQ^txb$MOU&CMh)dV1m>j`UJW%6hk>Mdtr1X2$(rCBlEzF*M;A zI-W4W!Qa-bdKZsg-*}YFsCA|5LZ?H#Z5Wlx4+6s^6PH zu}%aDb8!h3U91xC+0tvuGQ68=69nLC-x!;ZcJeY;;$n z8XOv+>6SP@xo?C%+q)0E_S-`Ax-+0)sKkFTlu3@?Uk^TSd~l3O3(n<@qcZ37={)Cb zSe}>x`%7Cf_8&s5`caUcb)Ato-GCL|7jSk|6P(qo$HOUa1o7#|Ib5j&Nt>wyzrK&+ zdo?Yjb=IO}&i-&9x8aoLkRQAD|vPf&IHC>&iUgbTOSkiD^p-_l-B z7KaIF>Zi%XJ?lD&oS1_)`5Y4DND&^8>cXiOX{<}pTf7*ZM_$KJK;psewdnGtLnS){vI5TTbp2kbLi}1vFPGo!Bl%M3g2@+>E?R)Ew`Cwk&E;V+h$f|5srakOs< zjXs@E0%MXeNUs{U)ZC>xPbc7zB!;w7{O$}=;PXHfAn7yhHgH~#OF z!T-EZ|Lci*YEjEt&lrb#(#t{FH50ObU8TQ_3R#b)Ahh;fB5Ybc4Rx-U)Mn0m$~*M< z6!c!0jc2`{v1cbYV5#j==s1`{g&Y(qufGsuKk(SNm5bRq{T49s^*TC|5lN12+JWMy z?a09t36wF4fplw$KV|t}&uHScJQJ}{?QQR~2zxO)-<3IiHGtB?r>(mQg(#enJ zRCXfM4Cv1z(_zQtCYYaBLcR+|7~EZnOMdIYqSSMYz0(8QUCEWc=n1FFC0GkiZY=us z2`gwfM*Xxl>X9)PBcBJuhKX`udl9MG6AQ>Zmk1-5wo^+oA8nnjNlkVDtV}vXF4c#k zS!o;DnKTuitk0&3k5u^I?Ayuic~fD$31vTwRTIkWjU@V7$#|^0o+Nc2raEUVgEt4K1|(IBYNoOU+NnA z69X0oz~kwgp|Hn=x#@U@s!Zr3uhy))S6~$sIc2M zm!N#WM3f3@Mv$jJ_~Wm&X-y6%sVE?wlAa-4I_K#`OdAHgZ!oZ?62BE4|iUASkd0zYlq zS}M3Z8N@Ei3vGwjF>_fR{2Q){W34P8WRwLwUyaBy;Z}N2>^FJ_9l@E=Jwzc! z6Kn-rXoIN>p4^zgUh=bo*U}m6T0=SbzQ`HJd)8r$VFE2>6W}862iWmggu4_avXhDLV7$ zuLuhg!iJ;9*aR@|e@}N?5v)I7fV$b9;QxCsIchtV&T${ZFN;g3bt+0QB(4duTKYVP(it zQuJVx@Je|-$!d5{Wuykli_2+n=b{@a;+DJfyUNLl?{&DQZWIcZ?m=PEWRfz(qdy@%v{3EQU%lQCAC(Khc19x6R4ySFP}?{{qewe8LjnXd39- zgvX28F_mc$oJ~q(mW^*FAEX>{=wv%xd&59Dw789yX-Hy7Kt8<~qtEcx*wYS?bo4y_ z12uy)*)+GgME~_{Y;rLqca=ZTzkhV7SiHQj?M68qn#i)#`#q@gvU$8;&K9uF!Gw7D z7qJ~1)38jqnJgO+f$H$}&=DFAKNDBtb}E6td{?k}2|6&C8-NN`t+@7~1XN`1!S}WE z(QL|jlK0$6m|`FSB`VA4l274ip*s#2+>FF)(?_HD_cJILhpbYV94=nr3UTn4wf(6G zF@cZi{Jw`g^~XO*Q=<{S`1yv|t4r~J9j5p*wiJ>Le}c{GRB~{s6drfpK`mduq6RAi z@Mpg{x{j8_%!kp!FJ-q$@f8RBYhT4O5Ax|_uB9}`>N~UTt`w@A+JT!MDYK$RI{3>< z51LoR;H=AEV3*7}y7db~e%zRX+$0Nkjz5E+OuRYpuL3SiG=}&m^HATv4W@~i@|%xV z@Ginas?7I7?>ljEJC&4|N6|g~JF)ZLM2KT&Ry5!|Kl9^?A8JkE_f){kh>k2@bZllC*hE(IxVBNNo zxOz;3l?t7-e9#q6H*3;v&$k$rsEw-Y>cG%Z0rn+uz1;=_{_*FF;j^tYicAm%-j{LM zv?Q7da&o12?e@T~Zz=41KBp|bbQy+rAczLP#8t^j;GO-Bj$gV5z11ecpB7v2u#(36 z3YTy*w-{)w+{2`6{o%>%_($`_RfIQS3_R@9h0>sz_(tBFSz7v zYK#_a`lN`J(+zR_F%8}e)hYBHUL^*}emL4c3CknpN&hBuxaW1BI-PfcQm46KH)S!F zy7kh#`O8Vicm|!`DZ!q(%Y>B=oWSH-HDx$WS7reKO-Lp+md~JH?E+PgzeA!8;^DsM zPx!f471{fv`F6WiSsngd*ed42wrg*o&&`l}E$pJNo}H)5RJ6(06KX>FD-zJx+fVoU zh~W)3nwB*cfU^fT-#amfnQ-j@3@gRqn^qAJMpW@XwA}>h5Fz{giY^W$j1#Uo`iwN1 z@^I-daqvEA!ogOZVaN7*{AFD)*nQUv*uU3Ez^R3JoKxuN+1XQdZqfC*bQhRg=Mfi$ z5v~)t9@iYXM%QNFVDx)-W5UD&*gxBfyjogGLT|*-)?r&}*OEmFAD^U~>sAU^?9GR` zubKG$(K$%ltqF6#)NU*q&Ymth+h*36o9lA2a42wz2W@A6f0a4A?F-MPgJ zE#qz+C9Q$wmD6C<#3O?B@EKkfoPf7K6ombEH=|h2Tc(#eN5-5#iVJ=%$Fh%Mq%%_i zGj;wl$@QOL)8cAIU$2UTUY^I-+6i=F&jfHbeh(AFMTB#&b<>OkT)yIfBXs_o3j*~- z=FPoSa9JoN-0g7`A81a7g=XOpZ}WlFeBDN?%%a&CyG7*aXjzy%?=EIs%K)eNAw1or ziph=~j92plI&4p&I?F#&(^?+pd|pLe)@I^li7=9Wpo9FFpae;YH%P<3Iwn(PGYZYZ z*nN}Y@z={5LMG2&-@+ zD#0X^7CPJ)g)4N|!EI$7wA?z5_M{S+cFmaIlwg7@3SPmI!W(3FQZZ9`GK<`fF(iI# zmXMb+D}@>YB~;MbMH=IiaAv)bHt=V{=H?25yC0`2W?W^2&P_7X>`wHtS^m%nFlQCp)@D%o}9tmo6&5jY%bMMM8Tomgto>V z0LMi}@cfH1enfZJ6w!_k>-5PKUI$J7BY~^7t*49P(=iIhK_mVny3$*b*ON?ETaKX7 zU=D7~dPSOF<}x(*5*qOs`uNWdSnu`>%7r$ZntO_{>}(WnTVzP(JiKY&D;Z(F>Me*ZAQao?|?g5^dkp}!W&GJDwU2xTyDAB*}? zQV{N&3Mz7?7&=RqI*j#)W{amZe!+UMvmIgX%Pxe+5rbsNuI*d^OCW1Xbt942jNSrGLoch zPwBtw)L^t0ztFLi(=Rze$jB5B{h*C2Rr2V>%@?7_QkfOgSRh!F{{(8QLeX9MAv>@$ z7}N7P-R7B}^yjq#c5z1*J@xu0-Fh^O*(#GkVpsmatt#ix)!B>g@G2o&VuWn0sSlig z5rG>F{<4ZO9z^ZwWyY}K7_W6qFWJ^MM1lt|P`%t#T;S@92FAwtNa7Z3=fB2PIe|1x z+K&Dl8N{^3(dekUlioe452qe)gQwZI>956iNi6Y(j4Ubg(kqIa+wR9FZb_uyOO5|f z1n}eG#o+hR1K3n4V!8uRM)EUjxG0ngLcE~-%v-W~l{k1di_#?5S{ku`5{y+Z!uo6H z@Y#(jxEX6He7HfH`B*SWHM_23PVOcm$!Wz8%(rIeNoHer$ZD*emc|6^GiPSnXyEMR zGB{W(4JDlgwX-*$o2YgRC8w3Yd1oC9(5+&iHAUX|~`=_wnlrt!Y~&10^N zb^?W{*<9@!&0E?nhNj>St3o0j>@~|VvGXMx6jA|w%xx%gmu5=FYcZjo&RC=0hru%{ zh@@^m9b7gKuCn6%!>w)Pg_k9<@;wKBJ_&T3{tXPRn?P5{aoLzbWxlo42ORjl5q?)V z@c*w_=l|>z{8vY#Pp_5w4gRAM$&|e;QOpJ{-@vUFWeOf1`%Y&r^rv$y6)-Fm>HSq| z`2W%M-r-pP;s3XtWE7$7QC4K8@IFsc+G&^e(%wl!)5=Q9u8c?|MVok^=cSN__D)gS zQ5st6qx=0ke)oO+j_+~b_x}!#>vCPM*ZX{)&*$@z@vkf2PxgSbw`(cA>rU$RTp9Lu z+b68edO)4h{u4sI`w5e}ot1DKiDFiu3`TUUA&g9-4aH&bCfJ2lTWvXZR|t)leM%!HtfRq4M)B1$(q|aLj1UM6Dd8vj-`VddFb6+ z{J*S`y?&c>pZFxc(J>GWRt;vi%by`s>MK%8?atMKm%Ww_?FHc(yLsYvd9)7?VgrX; z6}8XouwiyS4t-b74?}{y=2@KQhfhaA^`ntUL!GcsUUqqxqggo2WFI#A45qRBcksy9 z1(-H3Q&1WhM{Z>sv7jju`#fF=opL3@PS_D~bPsF1eaBdH zL8!j^kf+2B!8cA@_>9LES~-3PPb#S6dbOvL4K$k%ExyAx_nuPd3ssI=6^&i*>%y}) z*0K`MXH+;|j+Z-*!zBF{xYGQb)Kg}#&CY*Nu{#j6V>Iw$(OyWj_T`(|)@YaazZG}G z|DO-)|NWhMQk^cg4)v*+cxD8c7|ty(?K*{n&t>v-*IhjQl99~H{V@-sJh0btfsyK} zvfv>J==9+A3Sm6v-Z3B(}f(-J6==#y|9*c%r=mv*^Ohr`IZ$kCrULZzhhbX z%O$c8t>8{mFN=pS&ZO87s&Q~z(7(5KsgwR~!v0`3S^ zhxZ99c*7rEjM%HqS$hj0&R3gb?x>1|rF(@K1!-IB{X`6i{6vw*df+`PQ|cpiu}&Rb zBsykUve7~_4VXFH;%tkjJTrMlQw-G$+A*I zURu>kyC(_k`zurMzO#q3%r@}s&kx0$)}JBl;%?zsxSsd?xdwRQVg_djP{Z+5;Q%%3#5Nhv`(E#0eW5h}B27^JuU4;5puaWqc$-mk&Bzad{X9M21mDdUJ9t+aZhF)B$k=>hGEVBPkT)>M3i zGp`5G9LE!2(d7d6&X;`tJ#W$=9cx|~lgR6ywvuA92KL-lMOB|v_}#T=VfxL!>~F9b zc3*i7=GqB3PU05bZjrcPJD1_rHFacEW{GjzHDza16(Jy?7_4pv2#a3OE;c#?10> zba+;*@bis8Ho?GX|4qE{HJcnhZS?;3y#;<0z$#zrcSK z;34q#*+)g2cZYG&yLaS%b&?pIaUbmdJc0cIN1;;HhTLq{@)C7D@6d8JewuoP+6PC{ zZ{^X#Xg{t$Bhg*0PSD-RsrX~1CVt%LiD4;s=zonX zwL>&`cl1Q;a@$aR^kpbHonMagejFjSra6$a-w~XXbole29XRln2DmT(ONnpp3;m02 zWwV>Z(0!W`_IQ#2M=!smIYVbdTCJ2j&N)Tx(;aZvKXcsI%akX3neoW)3NY&LX!6ym_3kEV6*~gkl^sT#g#zb3wz~o6YyS(=NS8 zTo`j1)_f0z$bFA1zN)m5^~6

2e+n?zI({w)U&gd8+B{rIn2Jdlu5+KX=N)&8*>x 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

` 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

lAecBHe;5wn)O1nI%4xWYh%z6eUY#bdfa?U9~% zOL;Qhc{~&|ilxM#=N;sA*UaDwPS0j75s$gz(r~ikl4y_$vESRzqQ;gHxM5EfwTw6c z-%S34lS+5k(jX74d@xApHFJ@>T~FiFWyMk}ld;|QCF~#i7T$TqauseNa5G00*VnJd z<=b>9Fz7oQ;kOP7h1;*bibR@aDn%1jgxc=?a`y4uQ|w8V#!RJ)&{K4kBqk{~ijD$f z>Aog#H=iSEZcZpf#mZrDts?#I z58R*9In**Olq`PpctEa%a~rFSpN89DjEODf?G8t~%~|aB{*mna1bc4JJzadP9|Mc~ zMv>F8PQEV1o?2|Tf=A&r=JVYjyXQNgcKscC zZ*ZMiXUllq|FGD89xhX_;*R_sNKNg-#Ln7fDF1`Q2?CGdhSXI0b=(*I8k(8A{x zx_?}eULaUZ@8UNMdXCm{+LU+20z$G+;WF1tSl~XDx-x=rOw2}Dwn(3uX#26&j{=%| zNevj(4=x{Lb`LfUQO1)`O|Zv)2tLoAj7sy1v2%0+ivKOdlC~A7FM9&@N*;l|)gYlq z%;cO#yb*R*C7?EF30?MaNK*K{>ZxbQqj>e+Ap6+ik}Ej>Ptpo#@O5Q1Q3Zut2IFm+Ulx zWf$B;{nBMoENEa|)=KPiL{-GE7Udh6ppXJ0xEk(>U^)mA+`;O^H(*>tP5lR-mMe`?rS%J(m9OdWSNf30gT zdZ$EU)RdJN@s-2T3R>vvYs3k@AogvM3*Id^6Kkwkg_4h2=(=}3a)*9EWoa(HJADBs z^`@i$4RsiJ`5Kd_d9dx_XF=I|6BFNG!;=O)PAv^Z*A2^f&m${&#j;`CEaCIS8=s(s zoelilqsc7Jel}1ap%+~Cmh!&KVo-tG#3vT6LeLxq zvwzFui;fY@Bdn0k>mSOgADtr_(-eVc-e%$cf?90rzA2g@usDr3oyC~c5bkeA3}&P7 z`PZhyJ;(7lc)((OW;7gs|1d)}K@C^reVNad55wJG24eq7E;QS(0j)fJ@IUb_m~5a# zo4t~-uFM1n-0i?iegeO$$P+?xFF}yN)$P=hz}!EoLzk53@(> zb5eNwq9qHcj|H7v56lZ4ibJavam(^jbn3TP;8UN*&F@}<_|0Kd@YsZnH77wuZ#V|u zap1CfACx_%3gsuq;Ts_n;TxRAmStto9skuJ5e>wnrv6wKAmriw)ZxGe9rk{E6y-fv z5_aXY=wG{tKc^H~8X5hLYQk}$-7GFt3oz~v+iC?@qoqwZocj#x9 zm?1~Xx)r!vDy@9Rl1I2|*AN)2lqKXo)FtyQR9RSvwj?|~pUl>;rybc}L3!gQ8gtcC zJoB?Og%v4@r7{K-e9~jG7&*S8KbPrDPN#f+w8hOnT z3gQ(rD&W+DFg8Qr$PGR=11-0Y6gxIbOJ1l>L*4o5d{NLR3Rx3^!%Dw_&COM!t+j2? zCaVJ>Ya8j1wj=Hx!syGgQjirTc#hFwg%9l*~9U>P+8XHsF@}E*LJ?4$cq1L4e0irX;vb9^}-q1z8hWajg{YY4oGz z^bfzBT}WrX%w<6fPYSzq5tkLi!G=8on`mb+tlp;%_QzcC;b?8{MnE3+YK|q3Exr&c zWLP#IUQYUxw=tJtK(YV!v12pmqhEKO;L`X73tC688@gj~d(}kP6j>`;>03hQvn=q$ z_)F;a;v)5H&gY6WJ<%tqoR%p}ulYvd*@Mw#?#CYC<41S#L}>}G z6n4*#|Ez(c=em@#EE;wDFA!W1x5-J!R&4LOf%mhgp^BCoHQQH%c4Q5|Rd+OOon%X9 zYcsKVj3#W-Eg5y-n@~@?MzXsXAGACT8>W=n-vXY!jf0=(}9O0>6c+M}vfujau zd`UC>o{^7Hu_|IawIXg~>KE!B^pzH0eug%>47Elmvv2pGkka5rsvj9ZDjR*ue>ES6 zi#ADcxiSM{FCT@y9Pth@bAU|?V6 z7HZYPgthaqQ$HV1WxJ4xv;)>(5N=31jA-tovG_#mDb~vVE-!CA%#GMtMhZWNqUyJ4 zxX9=n1q=Iz*t4~4i|yFOZgO+z=`VoT}#Wo!iAnFhyQKXg@qkP+@D95xW-(V8wPi?NAndhZ)`p|+^S&y+vBLU0jo<P3cAKs9+=C{ws=#f*J~G;o0o;f=@H=A@TH5L1 zv*8AG?oKD1R82$MQAb71>((*Paw%aBy%$eCbYeO;_3(P_WTtlQ6yLz7;YcePaPv5X z+>WE9owbV{+1JH-%nGr6iUucNo(T~l$LM?K2|noVP5y_rut$|&15)j`%V*4D%suu7 zn%)pd#o5DQXoJQZ$5@+ta*UF(q%!!159Q!L7niSlV+N z7q31DL+bTtdz2e}EzqW>!MDICISjpLZKSr1=Gc=6cvN}{Y(3r1o{h1j#+g6K`Ft}D z@qR~lPb6VwZww!k_KOG0$;f=N;Jw8=cyi$wwluuu_Rf^Yf%od5_H86NuU4S4*lW08 ztv+U!jHddZAE-)AxGSo@z{UsuMuUoS`W+sLl?V0tVPq>=ypJXgy#!i4dz`== zY-3Zijc88#5z<$amMl`9&35WLb5`xUA?1YMVwuLYOQS5AvkRKK_^}-^RVy7D?JRU}vFWG&amvKu+JFqeg(EXYv7|D%qco= zA+C4LYSo#XWjlel#U`}i#vPSCbZD^c;ucQ&Z{ijBYlrJ3)i;`e_8;l7>+oBw1S1Q~eH zb=~KW?uJGJ(YhG3G$|YGIrcpn%Ncryt+H%z!jW!OzxURG8`v{J( z`UKW?YKYC<@30j+-hk8cDCid6{^njo@vrD3%u?qhwZ5pwX~QGgv#_^JW1uIFm>CXN zLsTVm-WPGNKb^&yuirs|c7K5(Sx(ctdU3jE8E&317$0YRL&v;rc1R;N;x0OfudqR_p-`9JK;BcT(YkH`%3cYizkVFvy|9w9`^Hh} zyjN(reIJ~kZAH>TnW}x(;scqng4j`$+dh96_rCo+o@%;;K_`PSG~b%Gt-L`S zN@DPNi<_VWeocq=e}#vCbkIepK?8#J)AzDt^t`|a(S@p+S z%Qf)qL?9oaxTj|+i3G>={o@{a^aTS>nSkQNX&Ri7c zh9;)?2*=|1$Mx*T+ah+nCY=SQ-vCRaY*cO4!0f*xP+Vh-b<(~#`=tkMn>-k5c8e*j z>?o?dltwMBM4T{Q;F3qaB9C zU5=b8OmM>JGwjR8UtIAceKG9YS7vH|kt^D^k$y;7)7Po1xOo2}m}a~g+h+HtjgkAw zetRW87`cOrKBvQ_p&6Y1-Sy~OpoPXJm+9ebH`MBP8(S8gNB!ZBI79Iv=G3gm8x2oj zy|)wn%iBi__*C#}{slAl8IrNv1?=~u2J;h}**W7Xs!^UvcMi+Y9=Q_yIo6&2MX$gO zi}%7!mkOL3IvbzQor?YZy^y`Egzcu0wESW{ES4RN2FK^{mLvV>U`Zf42(yHls!r6` zJBhxv9H4Uf0>HWowCokrSIaSYBhtUHEDEI;Ak9FSVKO$_u`|q4qTn%B;xL9 zQ`G!(HvTSh_-gG$w7zeF5}SUQ8MhW|3U^{zV+>4jx&+o%d+}1^MAR$Z$Byd1V}%b4 z;99N}K1`|Lb_N!JU)CD>+;GL_s`UVhP#K5Uau1-@HgsJ?B!MPR7=vZ9>jNkj0 z1-%l+^f8gx`7aTyjvZqjcP>#!M=nb~6GT(H-+-b@2-@89#E6H|Sa$aUE>9UCiBtcK zlMOzh#nalX5tpSR$$7(LD=SVb~OcMLVeHw!EoCCQKN zn`m7~8Z6yfk3HX?!2SF~n7Xu-W#1Yo&gdR08E+X#E4>ckbiaPM?v(`JeHn@GG`G@) z{@P-NUB#rc@*2L7RhFm>{XjNvhhXEZPheT%CFFTB(21R+8u{l;X8$m;QK%wR3v-c? zD*LIvJ_HwiQ4`0?4iQ^(Ik@)cdD8zBj#m_Q;e3!#7qq$H#}R)J^nQcY1wG6Y9i}ns zWyGvG5+}1G0zae)?#Uj8ueKc!^+{hmvQ?d%Y&=KoWgy^X?kPdT*gI$tsm=~QNoSwZ zZ^Gfs5F3wBd5AeTQhd6hg&WrT9ZuIxVeb+co3h)O5)x8iGM@sEzDBW`y*~IfA($y| z5uBxsCs>4gFW>*~FJ>`sI)#MC;?|k@Xe%wnN9{{R={hZlJ#K=XhBj2XE{@rr8ihdz zK7gX=5kJ>pC|0Q`k()RR9rg?rOCCm(M+-vN{=KXq#RD6t6<-@ji*sgyIBZ-Q3zphP z#|P~b7;CS%gO!`up^QTq(o}_m|Av8bX&!fIxxhSC`pen|32xe+gW!JswU8IwitQH_ zU{YE&=b9u>GOK(cEwZ9~h(#ntS{}mAxC>PE^E8_$`A&y@tZ4ejBb-CQMqbAwiBlYL zjui#`W+ux<(7517kQwUCIzA7f?&SH@+2T*5yYuJ*XU>}^?iJNrFM^=fBo=ny8EjM^ zDe25m!<@&q%su2b+{$^)(l!5MMvWpW)r!EzAi=kR!^_hKkl5gif<~nmrxeovmuB=ee~|1dAoo->3^)ibBmdE;qUcLvk?n~wKGD)>)7uCjPL1(;pa z4u8M?V`i^!@sHQ3VN#r&Sn=}$N`G(wWv*RfvQ-1vXdzRORr;3ocxJOm=DA7`T2BH;?mw79}Hbr!&` zDWk;p%RaItXVYQz?_-!hJqr8ZuO^A0g*1P6hz`Dy#(q`r@aUczcCYytE;-c6#@ts2 z=j0%kdRm8;yx1vl+ZNHsPG$PIVIe#Ea1;JvnUJRX9!o1u!8;{G{Lmdhqd&i3@y~Tp zt9zo@A>cVb`qX=(7tuIv##VR`cZ0qM7GukHA2{afgt@0ra>0SeIZ4(q=KeZ>-A}IM z_e^>R#P7P57&=@+Lg7qRcjUd(Rmvl$%J5ZO1RC+beon_QTy`%QPYJgy)dL^E^M0>6yy}3@HHAD^dnKE9i(nM!*oSYnZc8MUj4QsO+V3zTOJ(3(JmhFxGkgFB{xl?y_R*wn zagA&3_l7eJGAxfx6S6zgtkIJgzDS8Z8z;?4dM)VfdEK zshNXIeCNU!Q8JgZU=V2wzZ335eYg#g!|~b7MAVzk!~P4ySt@k1(7CJ0D>50a7OJ4U zeK}vZ@HFq$qCp$4|3SM>8Mt~s3awi!u;EPyTd~=a$-b%t7w?jdg{ z6fsxbLBc_N9lh)VD!Oin8If|F%Or2M>rW%T-Bk_i;Q-uzE5q`)%G0`{>+tzr4!yE` zUEU#HAsX+nAA7Qo(n;4`dWQ-8;@z&Gb3kxstLZY2nclRsGzIm?=)?2b7F2(OFi2w( zTN38LB!eDupE{-se7&!bAklywF(y0C}4JMI6iHQhTv&&D5^H3AIGlX zmq~}Y)4K(x`1}y$RyH&5DkHqqI|9F-i$mY2$K?TPh9JrB<%W?IR(|uri-|K(EVB=0 zrzF6Gi4k~PauCY|4tKw6hj7lf2>6jAO-b>EBBSPKoW+oRF#7!vQtZ)W9+MH<&-j9@ z?pK&GSC}V`7z14|cA;2c8_z$mntgBRhCd@OauwSG`B|?BRb<_9iEOfv6EG6)Fs9*_ zmIL@Pivt(?thvikqQ%vs{WlZ)w+n91H91hXG@nay7xK(i z8Z6~M2QKcP2si5s8NLE5a@_fx4PBFoYsWuh@01F;wdZDF`JNLHaLW*N&d#InKjO(C zLkWyr9Z@e#6TeD@u-%x*%qJ$YzAQCVc(95Ni6U`{!&+MUWh+}@7>P5E9fWx|7s0Fk zop4n5D<2pAhE;7zr3H%8&s<&_DT3%aGZL9%mFPx2&cC`tu!x8weITqgw zzU198?_o*e4fu1}38&3Tv0ljC66tOY0p(ONS(yzgb{{Z*SNAeQ}#IR`1D(*y@BfV@L&+c^0X1D^MW`uql@J^JCQeFN~oRtwnlbQ$;PaVHzJcQo!dbVL2u-tf&~47vwA zV=r=**{0fEG`KJcyJZCqR?~irY&r}z=1pv#$5POWGQp5)DOBFW!;VYindA4f@WXL1 zuKkmb^M2)XwtoX*WJ@3WC*0tbyxj{POL&S7TVwM&TYHe+bqWG(**nT>SF)Bohx9EZMkdpycR@ zQ@px~9L;$58(!?nVxRjD;C|O{#PJWCdD}K8Jhk2&UB0BD!M!gqzvL4CJ@`!d*X8SQ zdczqE9iRg(8tq^vtw;&Ok1?CDv$*e_4s6|42;xsx%y3>ScecT`eDB|S&=7cVQe|E& zWm^g!o8~!J+$Hw-pr<=nQ_(z55e5k-*HW|8xCY{*AJk!wqgR4ro(U2?I6%&%5a13+m4R%do`7I%#E=L&M?W3^Tr2LEuU! zIFj*#G~VQw6SsHAa5k!0i(Hp^(1AIO`MsP=?uG*-FK3*h1vyHXpqWT}Hy%ORrdD_) zeVNUYb7YQ{xp-JsMSN>+1sSUDVGG6_EI+HAj8Sz>P<-tJd;BAgYfLMI>?CDsSLj1` zZ8ugU9swu+lZAx}>J)ST7&BUtSUVe{yc%T!^KM1aLf5B!`p#<6 z>D&^gSX=@lW_qH^#Uipf@P|!YXAd)bU8w7|BK6a6U>m9yle~5)ciCY*vmSez6J0t) zi7N`Z3Yia3HtIfPPnrk|=MSbUo=q(6{TDDXl_wL4D|20M$-=&Svk9k$a0wavy^8ClFOc@fwQyfs1xt08H=h(q z17Al_{@}F`ce5C7-8u{2d;7rk0ne{9seq*&qwvj>SG2%6nEFl+B#F&E_N^)ndNOC@ znBz9^AuE}4E-|A#IUoFLugO$|TlG0?7(LmqkDZm1*tWCX(7jCu;~uI~?F&zIntB^7 zw-~cxITw8LZvZA9Oaz_xMW7+DG5VM3lB2vdtM3-LZe=n2=knvI3>`m=JMrV1lMR5clgjuzH84A z7_eXfX06|aML#a$smsprK-L+Xb6YX;n>QXY9f^vKEqHwMd1&6Y8?_V<;+vg`sQ-^BdceNy7W0n}VsNaJ9!i{NFv)n z*wPtCg`Xm5aCSX=<|%kL5)|-|qi|DyP~aFoeG5l}=R(1qemFQ_4t5tlXA#0K!a;p2 zcBhw6j=!4dzG?sz+8>9RkMHt>w-a*4f0*EJ=`lvJiz`ZAy@ZfAU92zp7pqv%4DzE*aQBnrFsa`h)J(j{hUlii zo{Lu){nKX_wUekWa}~60&?ehMqcG>vCRnQ8$|6>uhRrcSxM@WejZ9q0Dv$httu9i}9PVDJDsj2GjyWyPBDH67@O{Q=@`xTqT0475 zXS@>{bV`$n*+Tp?Cm!ZBKICkJ^eIdw9T(kyM^?#`$o>Tf=(Z(F%nIB|cH?!CLH!`fj!F$li}zi=MQWc-S57IA>rOVJ`wn;ba|X!z zjp2FESvc|E3g$IG5zQv=M$g}UP&(o*BqV#C)(je8ENK{t|=T(F`*~8*i)-JePs%k9I8aQ_5Gtl{mRj~a2VHUY@ z3fq4VL3*OZ?bUZ%#OaRfCP#oR6EJ@7W5pwT{KZ zCsw1!CE<4Npc(Y#Gf)qRLFv64M1`iY5ZxQbwv8*|V@KYj0^xo}HA)LVXF8zI2vhoO zp@bgCP2lQ;kL+FjFj{FC$)&&CKq=$oU?(?1*s=Ejj@}E&N0xz8&N`Hzq<~3IBVmZ; z7Hs(W7HW@bW7BgNd}`nV@=<%q@OOtzq=k(Ahi{yKUy9&ACWUbz~>^bPREY+5~ywVP~0mxF@!qo(&b|I$cVwZ$&H+b zQ3#vTS`0@r`q=Nxe=rJ6z`Q$__O8~VeQg&&x>Of^w@P93MLm9e%Sq7twfGvDu0$!> zMBH7hKsk#t6KyEX6oW9F?J|4oDeP(F7nPBdPUf#7g5yeTSEW5LajdB`J1ME{|OA>Vs98&-FK8|{@rQxeMHnbSCQ4)nvm zf~zp0-V-aW+hDYZHhnquf>rzG3x4M=F!)`-`m0p%+trS8#p|rt?wifLXZCvTX2L(V zYQaKoita^LeR(lA^zl(V+)tS0>D59&>tvi`;|k+3A8YQtVBT}jgSa#fPIjfh(dlkD zZQLUm+A{!aE+6H_Sf?<9Y8g^CJWBce^L`@*PG&9(nQVe#%R@=d z#R^rb4%0n_DDvy^qXkXrsNE^1iE>+Tjl~`MtSiiZ*vV@8 zZt$n4yhRb`h64)2@p+pwT^EJnk<$udzm+p+$zUJuiBP-z>35W_B<0d0$1)a`_lC;< zwSn2IZ(M5o50TTLk$6LK5RQzJ<|fwkmCyVB0Pdyir{moZ;ecHiczle2>HH`>qB8~i zMLOaA)it2oe>dAWd=AK&8dId6B04|Qg`{RZ^lHn1sh?)>(q;2uvQrgr|H%>$T(Cq7 zJ)T)>*T9A~|M-cL>D-IRRiNgmk9m9E!y=nY;BnIvXMPsEIZbCdwY58N%Q`u92p^AQ z3^&2r>U3N`S02{%e^-84t(x5&MR2a)J9g1^KAL^$gYiQp*!$TWjh<5-p7xA!{Sf3*!Qr|tqh$C&aB{yW)&#nO24hC3Ek9TaM&{W#;cG2Wd}i3|PH zaL}(^_%&l6ru%aEqtOlBXa9v&*F5lQUo7spw1HW)9>5!QE_n2VIUM=bgS(GOaOlcL zykzzi6_sSf3ZJi|()}V_>MX)*!d*>diU|(CVT|@Kr{SwVyJ7E(27bj&hBDH}a8*hS zPVn%=Bl8cV`+C7e_97ImB_k2jbFiCF#&V|^bZ+?rT1m=y-6sR<2C894S_OoOub}73 zG?beVj(R=o&`+`jPahZNGzSDer`=kdDzGz}U){qM6a7)yzybGvJcpgpvrs$7A5}~o zQ9m~q&kQ{S_T>e*#Q!upc5C9?b1(UT_dK#~*P#Dv5g0#pD<3sRQ()}b@TyUn{PB-3 z`PQXY*!U4KV5tnv(EkYubAq{l!$-5No77RX@*%wRK97@f)!A1aT^u>=I~r@`27y2N1E*nH9Q(X~)B;1qh!%f~<~Cs0544YaPB z(1FPs_*BUNvi9qu{@(y}wp3(y_-=5!*#N1j=iznLYe*>p@c$^ql1?AM8X>1Y_UAOd z%iEvr9e9!7zIioY9I43s=O4s}dd8q@ag^Wl>N%IU- z9IC2ioL$~Mrm!=Tje1vrcE3MUM&&!cqF_61KB^-Q=oyFAWq9h&>GG;h(?L zVF~jypymD~YPoO6X2THi6YVGLXX;&WF#FD5|8E%g*t1Ji;C+nJ)Ys#grmJvURhvsF zzDZ`u`DAV}m8ue)sq6m4a_cu1Otmf!-&(ccDS-(Y(ka=@Ln`IZ%S>3+j!1z_KRs^wLp-JeDZ21E~tITW1a_Zre_6?HgD_ zr2$KFJ46i^eo*w~Jhp1udP*v56WQlZ6eZ6Mq&a&YflIyt?Y8x%vk&BP(V^dLex5r8 z`WvBkdnw3XXu@(o33S?>;Cw@)NPmN}kcrg6SHr?s!;nMxV!Acl^1a4vV>_AsDvk2t zB|~u7wGKADPJpW{AAp{FV&VRYK9*a$iRs=er1QdiSvlzl8|ywDrhU`F+Y9B%XtD_RJv2VQ8MIPm#F|@71#h0fu~7@cV9z`M_w-==nqYkIm4VfD5xjZ% zHLS9g6PIoa#h!FMe7<8X#&2DKXMfkS%}r^T9H%U9(^f*2mDe%8`XHJW4i&GHx{7o5 zjl+O-`tW{YJha=dL6eXQW())+LWp6T!Y^Jl&kM&{HNpHX{lu{=c7x)AW3X~r2WoM; z%y#4nJfZXjvpq^MEMh>pQ^sXhwe1I5<2hKgNAIODG$7a@039UCk)l{E(#V(a50G;Uupn0`CT{9=45$7Yx4 zqx@r%_snG3gN9@M=nU{nsl$l_Dp;RQ2Q&CAg}2ZO$cZuKoIsY{`wVP$h)Kt79TiQ8 z#uI}+LAw7Ebk%VpQ%;$QjddyP?iqYN${p$)PO_A|K{R3ech=wZAn9mF!9YtFtWEKN zS4*0~-d+J+8c(rH8oxOur>~qv{&FmH3C5-cYv|K+FFZH>4lLXxh1%mgSj{?p+8mif z5#C2=y@MI=5NVG4Qx9VDq%eG1{{zNOSWM5{&%=MF?acY{@ba!aomyrr@8Bxy{@T%hI4cArEf898ZL;f<*thlsM)bcdyt1<=@PsG~S8g_e{cR z^WsqsG=W=Qz}C#Lq~J{p@ObbW?!t&ApcZZDrlI9lHjmbrqGN*>?igc%x_XI>U-X1EH*BVJ*QKc|au$E# z(`7v4TEZQ$T|tV;OK4fuJ`mS5vpLpM*tFK1%hzt_|K(+&wBB3r5)Z~jTV%L^*;82k zi>r`gypQa)TiGF*EogX6%;~JY&uh1b6OPm5HhP}Lqhn5k^DR}fHJ=3`=aZ;zhZOUA zJ)QK-iDVqeZW*b!U8y$l>p4SQp0!JH4U;$0Izc4T$AM13$0UVQ>9<13*1 zavbCvy=TRDl6j437r^gj6;m_Mfw5PAuwT~2D3YsjPT5p6*YEU58@^201 z2y={H>zOp4e+&)jpWtfTEK)Xk!dxo^M%Av-!i@43cXPlY-h9qiZoJ7rZbPOlKfLTZ z@Ah#fUu(Y~W~7QlGPhT-*w|WV)7(z4Wb|06uPOLExuU2^&5Mz=@UD-Y%Lt}@IpRV%uMD+;Q5>Hxo0t_Nnw{i z*I}nlx@zI{mi zCVOOy%zo$he}A3c_q_M>+}HK_EQ4-N9zGff9KJs?Emg;V6m`gd7+2_X3HuM79_+fBLaJyVqHKgw^&tds>VXw9E zI6OHz9cOv$)bk;vCQP|I3dZV+eg(2t-42QX< zh8QC}%WL%Yx?(bBX2?*fw!n42tbUTYo3AO6+8tcdNlOb%s}$-o+K;bZJxWEl7B}*x74~ zz&>^w4P$SF``=jMJ#-kqS}(=GIXQer`g@ijt5*|!!!+&*W+2m!%d2XgQY5&~^vlOlP;q$k0d)L=<{q+x-O^) zemN1#cEeSUmr+TxlihQx#VAi*Iu-DSP3ee$;fMX8#Ay$M`>C8v$s~HPGzgLgD)CpE zj*v%u&$r$@Ma|vXQ1@J36!OfRLY5DOV5@F6CS?#r{2WD_Uk!mzdbioSof9d2aV8E| z4QSamA)EUU} z=t1_mD{SjpU#R$dixpbzfGdNfm}1FLxZ$>y9rM}*Q3ns=7ZqUgZdnlMF_NO5&K9Nr zcbcAW(T9y|4O^Vo@1U*k_3+bKM_B#A1(GAA(A>-yj(#yD4VzvzEXRkF|C7N~U!M`J zw$g9$>K{ittv5pB5Ow%9W&^SB5@0SZ+?D1ppa&sJAlm&1<#k=*%05rZSs_DBo>3%q z-jH1Hp~%NEftT#cWi|^3x5Oze0{aSgT1CS#*?LKHZI9q+3SZNg zH^rdQdmdY}i=87-@OsVIi=Q`3!{@*ubT{@R_b~b%->^agx`sTbO=b>sZz#v2=ikH0 z9m82U|CK-9)5i51i^0$QnIIRLiKYv`p`9;-%5XO(H(*HlgR8mvz-18SrwVQQ^GNKk z7?=;%CeNA4U>%_(x|1md>9f>njgVyvnj=LcpWo-=_mr^PW6v-je|Z#LvY>VOV z{Rah}htwxLR^~{1l>|3()KmPY<4D>wx>^2$+e~(7AjEw4gvkDRpq(NO?CwmM961cE zzMNw9quNlvbt|}u52tS)75sJ8Og86vFE^>s7%sIqfcTOUIJE2%yY89*TDlH6HY^X` zE1d%=;f_#Y%2KFa&hrX=CHpf zG9W$854v{O!$pe;@Z{oc{Q6@zS$#ah5BAx}ey`q+`y`XtueFMFssApsz5EC7rpG~v zbSHbOEU*++{$s1RZ{a@9lZRgu<=LE>QBZ@GcyM_vW*wc3$6q9{Jq9(%PjustAC-V- zQs?;zekI()4;pZzSqwCP%FrG`S$M_7hYH4B#SdFGspgpzJw9SXUCx!9>@N+t^Y;n* z*WKV(yz6FKZtB?AIYZ<#;Do2skXOp@#}R(n7*J<~`4T%Qv(lZtH~7bK^NupZPGw5H z>n-$(ABi&mNWKHLJU~HgBRa757WaE1vtldQNodY{zl6gHs-}-ayv2-wsJ-M zy4M`FN*d!^@vr!w;Xa&OA%**EH6baNr6A^BiHlL09u7o!pPJs6@rnvs#arXI!G9-^3 z4cX>0>}B`@y!=-h(#O1}*58NO@Yk<6SHG2zckDWDOBn|fuWVvBW+$^xi}EmD&I4X4 zaJcDc2U~XbD*tSHF|R%D0NXHl0===yr-$d#X?NooT6Q;$Y{WN_tY0eg)$wCLl_t<) zkq?-%9z5?fl3qW}qZM24aOH|!!h5BWJc`caapi2(?)t{o8Ca84*?!ve@fLr%Dv(A7 zpP^-{Ep+Kq71y?sL9_p8x_e;}1Ws$Fw;pR~wJ>9c=V*$)Yv$vCgeEAI#X_*@d@R_q zkgp8=NRxkRvf_q7E@;CtbbYKwmQvEBpO(OF-(t+H7YIF$^M`2pz!Lgx8jn7D_t2s4 z6gSe8qfYttAiA=ba>lHrdow1(a5A8-2lixpB?u3yH?benH_+tj190!8Bvg+0iQIqo zD7&GF)Ss)<{9C$g@7p;-u8zT^H>%uhC*X#bO{2$u%y~2Z0Dj68EO!TDanJiBPH6>- zs6cLlYc&ObFSo?DlC|{d`#5%Og%M49J%kj6{h99FgK*3$h4%WivBmmnwBBADoW?|u zp;QBAmp0?eNpH~1C&@XiU-dz?_UL#qn!EE$G!@#^ab4KRr0WANC@@%rI1>XCk){hqT0T_ zFt6H*x7bjQ%OAeO)8(#$Tfq-PKPXcB>U&rqu(jT+tCE#h4Gf-YNAJG`aBb=uuqD$A z%Z0gP>!$l`>A+lO$vI(8+cuokw4ZECLYS9@ExY|C8U~5gA}-6Kacz-waIHD|`;B4K zDwM%0riPOkmB?-%afg6Op5*W`i?>m*g}W{<`5P}z(DQk@?4@KAUw%TIYSp%|ty|VH zU9)P@jjUZ5{818aUG#w|-_MK23yjDEU8QI_To2Nx)UeslWAQ^m5pCJ1MHc$oSguVr zoRbV>HYcy*^#kc#tEd65RNAmKQ5?|nH7ueqmYIFGhG{poF?m!pS29B%A|7qSQ~&8= zr`#bdbFqg9QwUXsuaAp@uo1UouPU%Z*2n&BhO`_FfGQOemptwGq^%HxKUad&kYaFE|rQ zdf07WE%aNL!+bwmJKIkhN)x^$F{!3@w5x~)eu2Pwn00~e%YMa~7bS7ge#ben)4S+{ ze$`D6)G} zMqs(n2s}E}=!Hrh91dR(aY|ERt*b0(b)8{i1H`tzN(3Xj3*3YpW1%Cr6T&{LvvEyH zymFZsGYx#py1n1=W(uL~o%L|4u`~wV723?3(&>BoSkM#S4yJCO`CiFH7J7bykh>0s zMWO}pea?PdDjiF`BNaez*!>KY^6%)7ZgTURu+!>Z#BxLEas=p)rKifkD8xs z9Rs7XY+%Gg1+27|g8X|M+Q;)!n?tU(Rb{l)st_v4W*0vB^EjuVe`3?)8q#%1tS-je*a?UDW<@4EwF0$8@yAC_i~9q&o%kHnx+m|N9${!n@evvWwL()LW4 zVKKO6ZsSvK;mk3Dzwx8MV%SJWR&S%Vc5}&~wg#MUSMndzl`;I@Xkg=ag3T~FP}zQ+ z)u#4=%n>_i4qgq?BcvFU$$`lh;vg4NjtBHDq47;POgN(q9ZzdvsnsP2+13S1osWU& z_H{PtLpD~VU1M5*b6CNP5LBBau&(NFKwN?}=@pbC-60x%Jzemp_)=P5 z3T)nNMq{5yw3xaifmQe=bia3(g`QT2cYXk}(?xV%IhEC&uNT;zDwNlG7LwQAAg!;@ zv8L7s3Xce9Ps3YiQP4~Ew%>$(*jVVTb7+~j*8)~;SdSE^&}dmU z{1JvcEaknD22r5F9h!AosU>RXZ&J;E!*2VXr%Osr^sPZS2OKM;i$%5UsqS&=KHY@Y zCxR%aL!zZ)i*ifjQ9ly9^o8EMZbOstZFI%6AMd^hMtRQ%?4&GFf?orLes(1Nc5!Cr zVMtq@wXnVW5$Z;jfih^f*wrRFKi?Qf^Tza%r1wI4x1*kOohD@AudSyYnTaHP?x=3e z6S{f-5jF2>poB~__@cL!Uex8#v6zuu$3iJOky?YlZ>YC8s|vpD$4T_GuZ?0&KR7Mj zS%B3Zdq~+_yTxR|DYBbsK=YRSlE=Rafkm>E8sF!Vr|mh;$X=gPo9>`%v^A;CG-+A4 z#+bGjm~pulB66HjO{F`HT9P&xa^45TDZ(UmF zN~Cdo1Z{d-%4+ljm}A#>p%SD3A@>t#>2L-=7V0{Gh>(QV+2%A-vjRQ;?xf|#26!M% zmo2%wo1#CxXFoiqf{aOzsNkQFky*2VSo$Q~K57o0DgKO?K0apKFPAgZua@kvyAITs zdg8djH*twp7pqW9qvX8LqH|lk$z13!CZ@LwneR_dckJJ@NUwBMDtL|`|Lnu)pIMyu zr1$7pHIv5t4y6MowY>dL6QL^-jtMHUp!XLR%c5I6+of=tAUQC4Pv+`JQ&^7kxX*)H!g)n!P2G=Z&cG#<~ z)E4!IRxX^)o*WXGDUt++|@UU%*w~OU2Dzn4Z(z!}irQKzp#cZUY7mIY!rFAK{iyML7DA3iLMEwNxIw#K!f7v7sZxXr0;( zR5!I_xylP*-nak2+4wPDV?xisJ^@#lXtwAK73T8DhZKNzEdwt9(KIzhy85DoT}XV& zciSbf1$Ga}Y4RaFE8k252m6Q@>2Rkj#o*!IA~yA<9P9i0o;p%y;7dcXmKrxhh#V3N ziY@cm<#`8Lldl}ZX&>pH?+(@^Z9s#3-{Gr^wm3O!7t21V)54!rr*-XvVdsn6&dFRX z+bvPV4)^?|ybr20rFAq7_&j9Esw$+WsY;0kJJ__)1^mh=DcV)~5Nv$qDgVN2?1_uT zb&ekNq-G5c3cgPUr_W8CXq|gQZyUG%(o=dqLYo7_$n_bv%x1k_r(axvd zTLbeRJYY(PZ$rX}2DoHr1&ysjU%^%0MLs_Y9{o8ExsqQX!{{qUxOhXeup@l5Rq#Up z`vs-Fag^Gf$c7yH2}u?+okwR>u!0Hin3IEw%i$r8;F5I?s^83mAAaZH+?V6bPNo({ zmF$9Rbz-pcUjwv>X}i$(%W&$_3r?dl8Rf@Vz)OpjFhl6IF5d7CvVyjP_^#~`G}8#C zh8%_FZVym=E&&y>OCUhC7LHmr!{x23;9o`_JYG8#RtyNtM$t{tTWezB!JpuI+ji_s z%z|~UmGt?EF6{do3h`z)AziqO{5if)=#~yZV`&C(&&IlR%UyyOnz3-D{x^07AAluo z>hRxz6!>$)8mG_R43GcRF!}MjS&oo~MR&axmhG*b*PUy>Vzu@k=9+=-;jIGD# z@;Pf;VMYFSE*c79%hERX&RCAVYF>ka1((?2!D)~ovlU0*^`q%lTJYVY47{3#v*|Iq zE}Qlm;w8%x&io$dva0(#8-H4s)i0I7Q9X?yotFn|6CKj=?{V;H)#mnR0)<-wlbM3*&rV96RUnXLHLT{aJ*q9 zWSq5u(9%Q@?-+|ZQV*OKy|yD6(^{4%c8zK{;tGHIu%;iG(7xJ{WVZ?(q(CQhJHLmd z!*%J<`*I91PhovBHE8x|9A&0DVzv2T;0Bh1r|cVYkg4E$45 zD-plu;~66#T>0PiW(P?JfuS;-O|}Sxd&4F};?#Jy{`Cs18sfy_Yv$16iB&uZ-LSH( zdgtJr493f^;J%m5$Ms`!`IEVIaHjtl-Rl2FGp`WclQDqHT@GN;*~^FKiqV3h-jt;G zmrEKQhVI2*G5wA?y<&4&M#vyA3rxh+|HfnWAw7~l8;<$oyV%#8zjzB30^JXTsr2U| zZilri)SUKWjWL#}tI~-}{6d-Ti9!sM3TE!LOBg4w3_oNpA{C!y8uyhsyVe(6@xVO# z_9qvUGHqZva}t>H$8m~+wexj@GB|dm0=0(rGWRumVe%gnDA}ILDjMXW@bFcf@$)sF z`Ed;wr;5XJ6?5S(^BJZ+GGR@1SFmlY1pAUTnm}g+}M!? zL&D~OU3of8ZOc2>x|J(P4&j~VWAu1Nt-WjV9RvCm=Kzo$?XBH=P=_H%Zp zWjMdbs152C6|)CjnXqY~j_oTDa-yTupy+W4xNSKKovmUnGFKAW?(+{p^72s_Vdm)K zm6inA_S50OFc}x`t(yK*L;avuP(K_!h@c zEdBE(R32mPZ89cD_)$Z#BK@~VV3bcw!ahF*7@3wOQp%eSNs)H! zs`^UMKJtY1M0w!GKr4!@e#f@zbIc;A7}Ex%DcU!aQxJ{7FZtJ5Mvxy4Q?RE~9>$b@ z{Sxc=m5I^!58)QOr>w~_0HuF%tnIlA)A_NF9TPYqDVzi-q#NO2)188Zrw703{%vlP z6#T3z-vt;khB=P6I#c|w=UuL z52cv1EuY)2X#(8}Vkn_}0&leG^0Kp@@x%Efh%YUKai53ce_8ACP1F!Bu3`nOIxz)? z&5Z|Q@ob;Kx@}r@f{DgtvXe>wxfBcccJ&L&*%K9Ycv>5XLk|RkL_sKQ$a4hO1;S4^gUnQ)5PB88=z1;1Mhpb!IQ0bm~228>-h77>8zUq8ZWM~dGnvcPEN?n zs$GPL%}OqF8cd+7G8T%?WI*cg5|}*YK4>4C3Z2u3yQsT2GJ9b*4&LJqH%zL*C0WD8 z_Sh%M5B;RflKE%>9ecH^TSZWvS^&dsTiM@v8~HG68(}xnA#&8X$^TPIVIy=G z($$Ms0WTMVNq7m&tTu<1Y{3bBVINe^`VU)1#=vcrHkh_JANRj4W~!6?AiXU|=xjCd z;!Ahp`1}LT1s(nlw3bQpTnGMxj%$Hv28`$A7;U@)eU`u$4CzNq+wYx-cjYMh_J@mE2!;e|ZR- z{Gx;3I8ee$-_8_x6>FKEF!vV5Z-Bj=2l232ir z2vvgR0=H|P-U-;o2H5Q%BPK_4gQvT~Tg@C& z7L5gGU&P}D0iYS0k2))b&F;M0$l6yh!#Tw$G4s1f>BJp0I`525t#eq)%yw{nJB*vX zU<01tRKq)-(uU(c73|ZwBdoVQjvw1EoHa*0#uYU;@XW7MXctult?SZwRoT5DH{Q5e zdC^C%CZz-xOs|1|#m{(+_Kp0pTdmlGxx{Xyj&?v&t49zPIPig;~s?Sq*JtOzGqJ@sPG( zlGqhDN~=@_SzT)qe_2Wvnmf^L{xSTcU_$p!1wzrCa<;H(H>9SHV_w?n)Z$Rh6l)wf ze*awfE6h5x;$E}n?M`Iv-6_g?;!la9bgp9a8}`spk4|k>gtCJGmTL|(TaDSUajqKO zJba$bteFS{SXBh>}N|aS2}2MDw1SK;~tkedF^E zEB$_QPFfRSo9-gGx57a4Egtu{;>`J>|wOK9JE}Pq{tjy z{BLVE?b!iEc?Q|`~?sFLR+{uq5#?@1o!lW5zMqi0)|Z9i&?4a znEE1?QitjDW)e!2@;emPt&CuMg-)dM^fF#tT^HKzKJdC9v%v52J}zomD+GKzPF+#6 zXrgW&ci%1+Kk1+0*Phda7?oJ3k-ybojmvd3E?SRHGjzyg`dIk=Yz5pOkm3to0v|$$ zxgG02a03^uz^7+ENQGM9)vhXPP#0#p!m$u`YdwsdZcW_w40b}S6bq#YB|L|)y0l`v zIrS9(d*dNEDyE1bLU;XUg9r!mjEGw2a@tq@$W!MN)7`lr>bA>5gtWj+cgd%-TE(Js zfxlSsrBLYAcO#F9eOTN(2LJnPLAhnSP}=JWuBtSm`B}RmX4P+8`=K0P`go&DcP%(< zF=Y#%Ep+@(Mh4zak%T*$>*((zBhaE8Ry%1u)4wnUOcLtAW1$6Ij_BYDr}DU>*Pmra z`oi?Q45yG!Gq{d|99Ed*2aCmAaqE^e_BKN3?pJF$j#N2Yj$P=#AYJ!1b3sc>e>jjZjj5j%U9*z`hUdUN*(Td?>M{z%*=>-^Jk>S^JUNP7P+FmyDP4B9i?W==u-BHB!#SG}h zl?QZq^%cDMQI_S%Tyhp=cG2}yBVo6il$iOu8{hc+>Y$sg#W}ci0uimz@SoL`r+tEdJa%cF#NkZ;jM_7rR_$<15=u=?PrVQu9Y>v4R;|Mftl1> zXvz|38IC(u0pDDF=)-(hdYW0rQUa5(HBKCIZ$D?tXUW0+ZH5FHyD9(36t2l?1z4>b z0+sWAq5G7p*kV4L{Vw-oQEk%vk4@qbKRu6`ews+(+Y{iMekrcLjuIP+JTw8ifZ{<a@FGe2#Yb4CS;bRqPID^ky|S@bT%3@i5PF!kbEfWk05?VUt<1xawJ zdm*ifO~AP|_j%V*+Eh0v0&T)Ki4rDw(cN-2klLF`rVrk5x%NLQENtf4L_j& z=_^>Mv5$THeneo?%w(G*<52VQY*2M*aq1u0$ckMJu$J?OWsPr{zkWHl(&QNKeC-WW zZN4!Hp$DpJqXDnt&I!4iK`=yP6~t~TKoWTCIc9zkIAISQnEsX>92U4dt zkBx9tuZwjmOGC2vY-ToTDr+;FE*ckNOAe#;*s+n-boi$=mVIi)7VB{oJaCg0#stF2 zKc|}A1Kx5sJZExmzsN!Fx-+Q#bUeF}?gSGhE@EI+Ix|zv=BlI{*IGG^yyyAmL1riAyYX*$n5a+zzd~+@si$Bzd~aSy5mt-~X|OQ(uW}{_}Hqu4^+z zEnUZ!c4;%~k`mP4SAeU230dPb1xijI3m2o4<$TDbTw9;sYS8H-){j=s6*JNN{ z?j&{0FGJUMo<*uh!sVrM%0#HcFsuVK7NxTCh5|$_b+mOnZROP$3|-&;td3(d*vf(^8$o?x+Cr-JIU@7%@UTyC9CJ$q7hM_}*-LRzpL{0LE^ z(l!|q`&NeYJ7Yn-DT2a&Z9?lJFRHk*m?ecLJC`4tMThhE-~%HS2)VZmVq_1KcS8u4 z1P#IiySupmB%`?E&MNlWejW=Q>Pu&~KVh5Or%|W39W1<8>)h~pG+bDq3#a!t2%W&u zEN@T0v%K0c;kP6KnrrT${Kfsmjj(_o6LBbt-OeIi7>Mp_02NolSX*lh|6EQ=3ykrB zT>;#vsm6XiRb1U6;i7o44z~D>rIHuVu;uG5+|{cN=Hk|@IQkZv_Q_Le#TF{lS8_Sl zkFoj4lt z-yGnt%D~#z6L!Z=OVh|RF*N>AE!s}V$E@=w*_;=TQK3;6b`Q^_>7gpL@!ETwd2W?( zULDLUIBle5=K0_rd7W;*-owtWy(aL;MpH($J7}-?Ku3i>#9Y-}s+}CnovA&5#jADb z-e9+uP3{kAOG31h^lT)J5+zuAQt*HOxq-X4wJ^nL{ha1m7rK8q0CewLVA;f2(8v;= zSM+AoDu|~8tK?jMr)Hx^WGntzZr$=ORSq6GCxd~OBl{g}jm3-P+4h&=BtG16*-8Huy+P@U>zE>8EikGbVcd-lz9Yw*d0yTv@L-40q{VMg_OcAS zVbz8Azu$%QC+0M|N62A%WWh=Fqu-m;X~n*+sLQO`_PivhH~+@kubv^JnKCX8@BDFU zs5nKD>m7jG_J$<|q{6gM z;ZUS6;qraTPF7ae08-=A;HQf$Z83fa>Nk(Vq2H7FeGOIM)Tspg!$rhAZnAtDh6fG` zzK76$)@k0#mHnHJHb%WTdW!?enF&~7v)M2)$qGb%8u%v2pUpHer5$G4Fy3tvTleQ7 z`Y5MjRm}m+_SgqkXXW7a`t#gpe|s=4^P_D-CO!0573n+blSJxF82oa8-C5j)k)IF4 z!ksQOJL@ppymcp>uyz8CuP3>?uIXG*rr>)S)X9_==7L2~61?fwr{~VwLGj&6Zq3JS z{MANN&@@;9cBck`$y6~;&-%=#LmnCO z{o4aktLH3C{WXevO(}F(`VJ%ywD9#7mvD3WRgB6-czW~*zqhiB`F}r$9;ORO?Z#N> z={N$#mu@*Pvh!yVAqmiS(H8QOGpKc3I;8cez@k~n5Mxrs#p(|uRyn|a&M1el7F`#c zSMRtOvvSL0wLae_S!TcXvuzeEG@x)vq3o>g!G+fjn{NHmZ>5UTi zq3u5NH6IIg6)8+FOBEYcD&SG}c(^3{1kYH`hZJGnz8H0lbxCpHbJh>`$68ZZc_IZw zD`IKOBP@ujWICf3l0xJe-sPPy`xha{VqDYMCb@i(+2t0vrD{UYmkxm~gPPg8Wv@iP zJSM{Y_>p*2=oj)>-`Sr zTD@fE`Ky!?6|(T}X*qPBe-Y~vRB2)B1GKM6;KRPlwFFpNw{*{Xz%ANZijOl~Iln7g zsbu|XHvHN*QN-gi-fVv*eoh@rU2j)`?Z@e?MsW59c&K6aoNBgqLpyz6_6K)dJB5>e z8Gv<3F^!b<=ad4+&@-(ZcG@ojn;zU@a|Awr=o2~EZ!?aP%5|vEeGfZ0d@nzLV-w2P zInh+_e@uxNhYhWpMczL8Y;d|Kbex+?db8cI`F$Do%T0u>H?wH_q4iYpHh|q)aQoDy zs5Lmv{v9(|J)YWyJ;ukuy8M}%0{Zgu4uUJUbcN)DNN9HC3i1c?exk&%h_zZA?Wfj~2hIhDj>6^v>`yUNChOy46;6uWK=m zHkJVQ&9Zb#=pC=41U5u6$$7DGrkWzS%OzxGU@YejQwM|@Z(SlgRv!w#opW)OyTHAi zD=0H|Peq?#C6;V-6`9X#(Q7nf_H99=T0eq}nozI#kz&~d7raEjl2_B;!Heib}3 z+*y8$5}TP3%U8L^qUHFH92(7_{jbgm^X@_lm@}0U&n}^BJH$XuCW!f7)na!)Z$MRP zDe?_B^3a5i$DuGUuAFM8*^|w44`{H~gZ`ew6n93l z#q#qGjB>FjubEclGi92yqxp3-T;0p0Zro-U(&{-TFz}zSIZ&HajW6E3Wkoe6SbO|2 z+VxgqP0K_alG4LFhfgF4V}XUZcnXzlKSJH&i4-pO4bLu92MLA0*fTwb_C1(Fx6%`Z z@k|OvTp3^kk)yfN%w#(L(-|5+>C^kkQ^;z`X;A#xhlL}z;Zt6nbP~UEMOW{$a^q-P zGH?Uj6#m0ALw12rj1Ik6bp>vZZV*_f60kk=o2ad43bil3h#gnA3-<*^nEJ+mo#zL+ z3`vG81tspcE8N!YLY4v}@K8(xcJ`xLlffd^S^n}*uq zPvP_^Z#Y@qj<$Fvv5z-Fu#E5if3Wj6BV+w=wX9)9cQ_(oya6HfVD5a z$_aUPP*W&mM|KYbu~JVm7@Y^MKlKIwYb>`v;|yOJa}<1IuR@Zn1g1q4bLn!LFj`d% zqG#E{gy?0wbJzrSr$V?N9h}4-c!?a=iOX*wG5TnzvT|?6r%%;p9J^fTMTL$ z16|3H;QGA-{dJRYghc|qo4<#>IW`~qK8&YNMzYY;xEmhoKWes?@uVTphz1I{FVbRW(; z5{HXkRp8`Z4_M=@(M)~qM0%g;4|}ZMqSKITtV81^lUClrzKFl!An708o*&OyS{ZVg zTYPZd{AHlO;{Y^A>*B(aEOw}O2jffsBjYAPQKp%K_rkO>UDX_hhS)P##}B;U)?hL! zkmRNb{0Qa2j*yY(#|+97VA_kzEOBiuc4fUl=e4JCP`%K(GZLo)?FAGhwF$bU);Nzy zJckRjC&Iy$ZZ6Ep(=U?C>Z_5i-W#kr*#rqaMyTa;cR*3*LBWx+8DTksx2M&pNd8Src2I#w^YoUQZN z!{+y2V8==$L1MfXnbm*8qInE@BU|9Kei)vaKM}1TmchO&*LnRNsoYt$NOWIZ2tsWU zqU2Ke+k2;g{fH5uc*Ypwuhio1>{85kFXVqOe~;ZyUvmYE0^wXy5wzXZrp<4JpDq(! z(3JCH2L&&p(<$M(95@P-8!GtElEv)fGfR^Hl>)O37Q*V4iM)@CEauA{VQylR*zSi% zK!1rqXA+#VUb!ite^ru&d5M#bOD(=M6Z#}iQsC%_r7WXePdKxjz{-gon0eoXjY^5( z57-o;YUqBjJG+{1bR9wR=`N5rGYgvq##Q}BYtp-D0iS}uVrE1Q-3)q`z zWrKTjX+bbteGcSxWDXq>`cWA_c3^&TA)G3hz-_T}6F!S6aF2@Erh-;J(?x+YE`*8h zOfq9Xq6Wj26NjBG@25bYfi&KkRE^nkD=^o2B@WbOWaWL{{B^vx2PJbKb@LIAOIc0Oy{CQusF_Jf4R9ZR+yFAcG8CTPAKCxoo0WuB(wf1h&mvTI7%gW$~h4b-26xMgfDjr#3G+AZhUdTkXl==j8q>v+ku!&Pb3 z=WeEUIi5y39|pIm;qX+pfnx5b@$)9ev9{c!peJOIuGS7=ia+A1L|_Ii+h0Mu?C(SK z590D}t|7OCQIyi?%?5wp4u)D6`R9pK=vp=-`zfO+V!jOv?aL=~{x;`fkj*B}*8#IZ zC+XIvog|uk3@Gyr>lZk15?w1nCBm94gQUn%IS01CkrJId*n#FD`#4&~vt&`U;5mDb z7ZYsR1;JhQFE526JeA3Fz8!rWeullRS_Nmn30;b7rAP)Gs12G$@+R>#PF5YZ&9s2x zVX^2Y%<``sHTZ@-qw&>C2htw@9u;EEa9YG*s6Md(_U~Op(K}4&!$@y1ziy3dDzs?t z1}Pf5YmsPGy_wKiImCNMnUQO-FK7>Kab7oH@Jqb1U@zl~+0R6Ax_@F3H^(zi^l8a{ z_NjR_By1ffxZgU_{Gkm@$-Ty$yJp}_xrh8;pVOePkq&h!H?cDHFB5La!QFWsp8pWY zE=JdJ0XZw_j>CTTG`I?{RbTSl_C7=Lzcfbm1f^x4r|7pXLjR?oh=NO;E6;vTKaVq zdsk7$eE){iS+8y5_HSkg*3EiX^1-a^_WpeT1Z*pi^@tA(Uj6AB_)xj1{E6TzMe`V(XffMli5JZ z`kmi@(Cc}6&V8Tj`h4DRDZZU*C@hi}0r%266x9!e*?Agd>g7gyC3^#1d&Gh5eW(PB zA1cDrYZiQu2dZqd)-?V}_=pKO)%8D0ml>Yr z_9G)?+urTal>Ui&am@OE;!dPG<2o*R(8mVt$U=H+A}pCPogA*4N>`emp{ox3VIRc& zqrTN19RL9K-hCW|m-fnNAxAGsLQh6#7Hoi$N8r0IM z&2AWYZ9S3p@Fv~HyNIKjFl3G@W7hmg;`O7IF;IC+mxfl6BR3PspYnZJ&jzz+1CnXW zGEwsD)G+;>ng}L)i>$_S0L|?saLCt`mDq-Kucb1c@m&e8M;}wo0Vgu~4#x_ZDu!PK z1*q|ve?+6SnYJ9+fSXpA)7lR%u;|r6dQT&kUXUrL!wRKLmaim=3@O3Tht*{EqcoCk zpv+n=4`*CYjIud=6{Rw57D1ZuY~LAH^XVm$QK-Re?a*cqC@f?8ZBnS^ z8hOkx5{JrJ{WSL5Q6`7G7Yn#=Cy%uWan{&Ndb8(1$~#~DijBm|&x1@F^JW?i@4?iL zk8Ini{q(%|IeMb{3gyK&(QaRc><-JO!KAS2+MP(qvy`U}`p&TGWH8%X5@i+Wo=x_g z;Cj(6M~L6Xwe0l$0`Q;lG<58r$h2y>;hGa(koW zJ3X3SUYtfoUnQ`ke&NhOa0C%e^d#fw-BBc75e8O8vYysQvC2A%tXsYwo}G+^Zf>)l zF1rb(Qv=yGYhvKO#5HBJzBiJQlVt#+@B}(tW!ML-)PKnk}5C zqp*sOf8e^)`pZbuY!_l*SIj23?V}Ha&frXVP8tLU=&By~%DYG2lb9TJSXKX!3cT*8 zdyHODIjK0Zo9m!U=vkswt}8P|@FQdWX**35kYh>(xN}~UWtD7BkzKpqqL%HSsuQA5 znWub)JJYs90 zkW4MWd%kk?b^vSXJ;M2Kt~Stwc1w7@Zxc0m@Cg_EOlDgm^_iJXh7i5Yowj&=pcc;< zQfJyq_eGTxH9HyTvrvG-#!m98IgPv=GNW65zJTnt-r6(8kp&B499n{bhvCfeRn<&CM2{n zS3~a6xJ%WvbnYzhaqr-=)GoljmO{Tv1C&2Gg(N?FM7Nf{rG08&t=`3spZ^en)VTipA6usOB3#=SF>jqI<|A*=3zJiHKZ z2TSojeDZlhH|s%1yowA56sRpXrn&~i@Cf(^L;Rn>%)hDh>zKTJpE8&_z?1Zi?+tvQxi`9i{&KD$CD z8x$sm)8OAZxJfvO{+FtYA(b}d-ev}pe5b?3`|+6Up-Hxqw@lhrF*-Xqs|3qJ>4NR-$!m5rqbrM^4{x;EJ|m9F$PEFLwnie{n@(A;QZ#B{ zpzzNcG%DseOe?zSQD#1xtWSp6fEsdSP#xl~=g_~qLU8nG6!uMW#0>`LSr3V59QhJU ze^0*1{(4>y+Q+3ZZcY*oZq6hveadjGQ3)3Z$3v&T8vy$sOT0pv2F@kwn7bGDY8ztF z$R+S_tc7&$?!MG12#(H;B&C<`poGO3Eo@$dzvy~c-xm&y{x4cNRh^wbQ5vmO9C5~x zKy3P8NLKFlB5|4_;HkWuvB;>!XB{q(mD=U;%3FSk+I;5D6NtITn5gQ*y|OM2-h zhFKjQtlbW8aGjO{Qum8U;DRM+amSAFo9|7I?QUhtKO8{zTRmB=Ee?RZZpaJl$!j8Ce`~NusW_ZQrJk7S6&+$r(a8beqc==5R^Ebq> zA68Jh;P@Ss{&|<7ni6n(7B}no9Ll~}?M(V)UaUGm-BUcUJp3faosdC0*(BP#&J-6YNy8eh z3%}vUZN~0N3av6!BQGCy5?YhV_U_c;9Z*9>V?a1!d2aoz9#7NDc< z7;S$$K>ph5(!-D6lB*U4#C1{=<2ywMw_HukkLGaM{9!L~Xm!-JAz7|vyuoNVUc!hvtB@VEr5+_;FY zdl5=q1fSBT-sa`I3vB3+>2pwukPm+>29RUMC^3pXsdUGa!re z`M8}Kq8fJ;aborhc&eBH$JDoSOcQUMe5nGTJD9=o$e;B0yl=3hdP?65rZFNbs&CY_zu|$s?I`MtMH@SIy0wr+1Uj8PAB# z1FnNK-wbp@3E|ZYusIGqBH7c!94p>J3jI@viGPKi7vO7ud&Rd|Aohp`UA>rM1UUt)c0mK>xPiV%!3g9JeBeP z_m94qA3_3~9q{^GJ$6Xt6xlfUndK)(9rSS%;j6E^$6id@ilgxvWN}M0DXsZPI-g!f z4WAA4nA<06$)2Tt_l-f%%mEwKLulp>F=oxman>gxip`iX%>J>phdj?~^!AWGx5E%Z z*|l7)J#r_Jjh;nL`+1;^ss|ojadDS<-3--kQbauh|4l zi}*sm#!9fmS?N@y_dG56sEt|$>F9K@AD2ZuU_URM2kRP&sCrN(sn5`Zv&9D)Ev0a) zF!^1WxnBt@eg;z88B+9{hb}HZDGdVAK6HgqRONa3P%Dc$J7`aF3VGsc1V5szuq)gJ z?DbU8{>3@wgp4?ytgV6V%{jz>(K-6;rY-*I(4qdYp5}`Q!S45IxM=1gnwx8gmT47) z{l0=m?3m9=Rwt7M+M6I;Knlr6MKI!6!q(-I7&ah_cWbBO_kC)pdVDr5sJ?)zR?W0R zBOHrk?diO~A~hai^!$=d33A znQQ_96Us;}NiZV2vR=fAU$HGkUhbeIU97J&nk*MjwoE8b;SU#$&XTuLTJX@O6#-RE|N&*`iSJVuMnq~8bq$WYfLzNUT*Y-F9_NLL?S_)ddN)Nuk; ztI4Ft^(5+62cnJGeVl7Aj&Z?J@ZTbL)Ht5Y-VBT-PsFXcF6I!O&(^Y?FW4{#y9Lz2&R7=?>2%StZc+b5Z*Ayvz@jT*@7=5Sgwy`w=^?LpDD8ojPj_CY6#7{{|4q>&Z38# zBx%+aD{jAcnwtBx(aXiR$hDwy8hrIEt4R*g-ee=Xe%f5*XUAavX<0I0%5`SD3z=tT z+sI%)3tB!a$T8UhdfGk|H^}iYhwCNu8H?h^^!*5;B_M9H70TsLVhMNFxPBaG*KFFt zt}ogRZ9bORbu|%O8jI>~qQzgx_pNM8vK}<%)YjTG~;D+LojkaaPNokSF)X~6hU*;*vAFIyIkeG@2|Fr9bH{|Bx9mERG?K@!&$+qO-wXJmbs;nT zz!|#zfdYEu*gsm7rk2m2G%y>y!dKTXEc3MJa|X%0MU zd_`9OU52tV)L`|O3q;Fj8m3u{Vu6h#_59w5YONvQ!=Hy*cQ=7ga~f;Yco8ID{bpV< z@wD=8C|w~N0FR?%P*{1Cyei%US)*fQUYIu)+~dxVqerRM*e{Y%Cc+Q?oPhrxS3}hH z>tx{`FV0K01v+%%Edv*fA^e`qf8*tji)+iVyi_q|s%;vi!CgvCOnL+VEsW6so351IB66$BjYcqQ`CY6n?^V?+OR=t%>AVawNKV z%V0<0PC8ICng1uYj~EiJzw)h{iL%=R&$HsO)jE+*|Kbd`n=((>=Il{ z1D~XWpmPZR%q^j2`;UU{^X96sr%OREtcmKGH)B?F7rD`%iNCj9qyb<<%-4It`D}Sxhjd-XPxE>lWC6d(*)l@USme!m*Kp)m?;ny$fXr1{46pQS@W3-kw zOH^BJo^%rD>n$c%{O+)&Ii|EU@hFQJgu2B~wzmGs! zt3T1K)1fN4Ik=}}2D+?WkHb-jJ%2gY!fhQ?=6Y<|g#^9jyQ$ZF1w=CkNN-6%t?A}e zd(RE}DOsiJX)upegnwZ6GwRsw+f81yucG(PMpF}CU&0&LV%vU5;_3}E@q@@?YOTP% z|4kF16TK3MZl42*{#rzS%q=1*#_QNK=Mw2vw-(}B-^7+rIg0JIGr4~H5u&y53l&Oy zOnoo6vZC?PC_QNd7;_J`^XbaqB$AC8c$4{h5I;`e%-NA>ajY9hFM>yoBTuR;iJan-KYyO)V^f3R?3L!c6dR%9rohV zZEeIhCZF8(PqnJnC?KHqp{kgO_E|)K>8)xo>@)%{nJbv;SOYVjH9& z$Re2PI=^8>L|wq4zlfC*e8GO3EXGdZ4YK}SMMOV!fLX-|psxRVs=a~RTX8&vITKW= znYAX|hbEO>zzO z->Bm9?Ki-0(k!deMXKm)5Cg8Qx*#JVj?$u0SZ@*r3VJEbA=zDcZ+J5u?b-{2kE&_A zp=4G1rz3=_h2suYK8gPz3q|}`dc`G)4RxFeVng2KquF*cs(qFY3UZwApwn0~V-XI@ zFM&{g93<>6q?Nxep!4)4klh}G-kO?pSU?`WCr6MD0b}r;6$3rpSro+zVY;OyyYclM zdir}b?2L|wLn*%)u~uHT_9T0&raC=5E}65#a3IT)y-i1Ov}aHDk}u$h;cP-Crr$RcUY}V6-s#_1o-3c- zXr~O#A_BY&;k&T9|0BuGe^ccdmySAe=g2D_pNPh5gQW0xa?w>-Vu(}o#eW(1>9ME9`s!80#7W+a*f^W!@Uh`3fCY#;3c7%F!lL6 zCL!bw+MESU$mDwREl22w^4DZRK{~zZ>dWy0Zm~yP1ZX<1hTgJCpsq6x60PaORlgnx zlk|T={J$su(BDVDv4;j%lQtg}xcA>`+;PPYJg1+v!Qz^&4+Rt|YF)aqRrtm`bNz3cNpyx}(FJ#+?Hn@px>i#VK|6^_CM z+B9HFA~Zy@^uZYC)|5>#o@(8xN668 zXroin@X%A*Ww{@-M>yV{zKG?qZX4V>K9e^5Hm8aYw7_qA9&>olBc|wdC2KmZpLU9< z^R=~h)BN|syrrk5aNYhOa1WV>h08~n5YCI{-Kl_&D38m($PjT~dopcJ6{(#T!z|>L z5>J=YRQTZ;c6L}1tL&A^>Qp?&pTmh&$F;+t@O30}x#lrz7OsX~mx0-GZxfXiWU@H4Uh->jT!WE!bVhn{I#ko-=FyC z#;|!gwRq~9D^3m+fgdB3u@*W+V^NhTU)9FNp4?u-YaQjMm9sau?IOeOTGZj@Ihxb` zjS9M|vl1G;^zGRMlJ;Z`owFO6`t!Ch7I1;AE9oc24fCM){3>!SC7*UmOd`syx5?N> zSrRPPL0vqpP?5KiELtMP@ozHNltC3d_vHb-5j2-haYWzWB^TC0ZYYF2|%V%^0 z_e=>C=wy~3a)+8QVc6c#TJ>2{8vdO4!{p1=ka8zE_-ne7R%9wd7tazVEgE8UZ4&9= zSUeh-&LUycw28Q%0trf!goR2Ane8|3;p1cfsBmH*jlE$5#q*+>2JKgLL`w=SZd_)6 zAD%$o?;K()URr|ltt0e?lPVTR{zI8V_u0O#pX^M@H{?g`h03iGy6|ezbYf$_i*Br2 z4C~%ikczwl+LI6gSF}y}D}s~})(wz$DLFq5tzUwzWOl@SQ zHtT~@^mHgKNyY?TE7ootMYU!Po@I47%zohp0mtvsZ;o>@5yW^Kn#K5ro_wOJ9L6$S z-nq^F0WFM+NB`|g{G`L%c(V^~CX+g1;al7-X5iOD`h6m|OWqX(d*Th4|4N*odD}ns z(HD;O@O>uU?lGmmm6E`*OA$QbHPhY85T%V#hqJy^L7s=KpE_mf(hes}`-d{iOlzO}JtxwTv~{tEkHK!(lb zvQGMPw`tlp8?q%m7V?sWA?(k4c3e)9NG-nvs}F>5&hdUWxFDPsPHEuwh#a$h;%{>P zZV;E}7X~j`aYpoIUges19IrV7;Oh6OtRhg)9GU46;4e{EB(Ux`8xLh6Ix=!SO zcx?zyYPX?bCKn=A6~`|ZK37eN?VznrX_$ZOKFsV?fmx+D$;^OQ%q{66@|nwF*453# z-Bk}g4QIgo(rQ|JSO%QAv~^a1$(#a z;;Ct2T**tEKQghjs-|NQ93MZcEV{Lb`t402+Z`of#_b?X4Q?dr)4O2)wTXPa(>?Tx zg*UXRit_u^U%}W85tO1|$l+xwyd%NW!R65f3|3izM$9ybO_2q)J-WCfjgMMlLkvGT z7XqhPV)C(iyzC>zFS<8~_CflPe0G>bJcy^Cxj|35PbZcB@{H6Tm*eZU?8N1oVjy2I zhC$2U!GdNXtjVgyZ=$*M*pOJ|uPbNh&0onFw^fS_y>)^$f7`0o=o-Q7`#SigZYnqq z#uAg3hwN+){&I4?1bi>+XAM5BAq^b-C4A@_8rTWbDG!V}>3Snsq#6%d*J_}>&Vk;x zF(TK#o`$mgPQdDQwDb2aGS_lBWxp7KV{0@@2t;75>mkfYvxEItzR>a0lBno^x$13$ zFldJECw`gjWJd3EW@Xo7q6H?n$8#fAOX&~?zeHx*=Q*HZ90m_Mf!deK(jKnxaA#{Y z{1)5CzEPY;*Vu>Q(XBOAS<~l0Qf)o+;K2b#|KSph%lJ+oC*;s<;~lW-VJ9q1*P}Bv zN?^0xb&U6^WhJ!x$-(J8WZKk7nB4G`475GNZ;ut=N#G3r>FhyzxZN1@vu81>Pj$Id zC=z2wj3Gud7UF!ruupyepoMWg4ks^VMPeqx_&foAgx~|ZR7#3hvVSRl`YyreaV6|a zCqyu^GZos}MX^MG1b!HF!^EW{G`nOHzgRv84r&#`#`;NMla)>0_%-56PG-I*x{KW8 zN>}bO3=v#17ha3qfny)y(BbLqrAY%s9q;E8YXzp_y(#!3Hl4=Qp)jfHIGvUFHi za-K~|c|^^Gs!4bCVxrT(kG?&?Np;FTk@xC{A*r+hyIl8zm7EX;oqa=$8U%5V_zW7E z%MC8LAlf27b7JgONkV1+<4{@|A!ff07k{4q%x-avO~{J)(tO+3e%5^89711t9exCmBrGOdd@M0j6Due5rlN60l-&;|g3)xWqq#u+9dQdc{4C`NOa3VT4D!AMmeZ{=sYxp4eZ{jZA z^A3^cFZ(f(pTJnp%LfY=NBCkJh(8Z|bx;pTodYLwML zI<9qa5A{b7e~l|BByIS32+CObha03#O|@Lmn8knSjHzLUWc5Qsm5{iSmJHce69@?bT-zf~Fr zWW>S|8Nvxyr#@gb~-l?!x+Jjn7 zx<=2pse?&jKN(Y3#fS4|@m4Ll4L9#D2Vo8d)c5u%Z7%u->AwVEq7+y9jkv)CoD{_4 zyEH+~l}{9XcCeY}MWG|~0*HP5PGh$;5SzAFB-Q#A2&M9P&xF&V$M!2+-hCWrro<5S zuwCHx!JOYbk^^_9M4__fCj4xkMeIdS@Vh;~qi?STCux<$o%4nSOb4fuyypfnzB*@l-(v9H*{y5^Kzv*!2zBvE&Bc#Wc zuOV);AJc~TDX=m03f*<{5p6n{Mz`P8g?^`Ywk$4*v@|sls$`3!b6u(?Eu4>!rVC?U zXD>1P(#k>nQt-0`JjCGF@}KA?My21GWelAKzc zMkR;25b13bF!vm!Cl>SJ>#873yT68m3?8If%e&YHGaq0(7lB<; z$LRd6Utzw>2@-5x16|Ta82Elakt{mFiLW%Ub@~$w6unPI;+1%XF%g(-a-UVU)VjIeYVuMHvPII4w!b@iIc70EUu9!L^d1(W0y+b6n>_`Ch7Zdn; z+~3pJvV&IKTZDhB7Jy)3Jk_j@!*%Vd6bBV3(|QG^)h9rZQ3ht;`iz_o73^gfpu1VW zRp(qeShs8!{&w{sDIZl(bt1$6!G&ulUAcgB)eh6XqQxNhvkvow^r5bF6`Z}12?e<; z8Bu3J+#4_*7C&2!InU3M(NlLw;k}=g=DN~2cU>^PRaW4AexQT)xre~snI(JdEqMnH zPUNw*exp{M?LNTa}xMb6{chH zolf4_L_=^@8kGJB!xCc-CS=w`3@jFa_5IyAaIy&cdj(Nq?E!M^$|gFLosSVp(`i)x zG*J52%YHp?fD0eprVU2LWZRe)Il4{|DU(G-Ty~Qb)l4FPRFKB4oJjjSztD;w5m0WX z%by+cp8i#;G7kIq0DvPlKom)C!{C0$-PK$vv{A=jwkxeIi z`H&^tGtV!qhB`X*Q_+8SiAm^5h?xf<)GScpF0dX%s3R$S&_WDM7sDD?Np^m83+rvf z1th1i7*e$jW9>pw%1a%VoE?O?vmuxjW`NF(>mb9#7X&^XLMLuH|D*oB({6__)zUCsc8>}H3cCs*;kO)R^iGF6i$Ga zK3hogsm1Ixfc*HSwE12djaV6iKDi^{bNUq&?L2~ZxAeGhmIzO2>vOA+)4%E0Tj@Ab z{Ro~{MWWVBDPHmBOk8nF51bC=qiEh99P!H_jBz|t=aWRm=Pf5LTg;!Jy@ATdU&Zf= z`E=l}65p^#6`bzLRjnHkrFLNoAgId~%%u64EOwo48Qg|{XB0pwOUtrgl{bz}c&Y8()WMfEMz<_HH48$S&;I#sxq`2uN+b79T;PekcV zcjdnJ7^~O9&Jdb(j>_%H1-YJFuva<=t{eocY2_Hb+c6a$pKAu&Rc@$m?1iSu&!~Z9 z3FyvlWcdvRls~|M|HSiv-`ou~&*IS5<{BPb7Y%u5jrd2%9avx7ieAMr5H{@#*%ncO zzszTlvKmF+sNgFYU0#6S8XuD%GsYn@KASoE>kKN)5uiuIT<}5WRZ_7b26^EYIB_f) zi(fTxB26y{aY?1s+_G+i$V}dOty92$JP+y5QxTTT<_FYh@)j<2CjQzE7`D-xEx}p% z(NCL=`>zq+Zsg$HFMeU|)@1rJW0dJXCxr@96JYY_1+eZ}MGhGpf!7bk`3vs$!2RX^ zXj(8zw+5CGK}L)(P$B~njkb(hj5wxgUPRX62xfAn)frMJX||v#L=JUe^t}K`lR1J} zP3M@0k~&03`3Q7rPv!LN9#p&R!|fy<%YBM6AMW2 zwwFX8SDQBLJ%fIu&8Qxs3pW@J0JB7rul(Z`d1g>YD)05u84JYGMavLkb~w|Xjoi}F zwvY`Q{|g(8g&-cHQJ%Y}YVm$rg*d;ae}qI>9q$eN)Uj6TGUGNpuYAI;P!CHc zKgu3n|4qXC0t%e;F$9gwro$f>O*nI}0EDB@lAXte_#^WUKYu!O6BBckMb!V@=Ju z>F+4@+QZ_iW8C}Wd&Avith*W8 zH=f365%R=($P(Yj$YR*~$JBp3nr&CE!$?UJocc_FcmH56IF#Hbrk*nVkiH5ycHNE> z8VTaXh;y((b-*gNr~|uz7!Pjz z12=t-LqtFVm7jJRc8+=BiFP4!&B_)O_v?{W+jaRp*K=W}@^s`|P*)}x` zJ5MC=+k$!cafS=D_sL=0l)3zy-XgHd<_j+LTnqQF*u(vYy;hyGBk8ZPJLGE7L}+>t zg0ot#fVOlJCeUltO??k;x44N@etsmoe0WtC=IXOo@)uIYXm_fS!hw2D&8AOO{HQ}x z3JA(KFO4AH-({R-^2(*6d;iNguAXW2(@c(enTnPrAO6H-#@gG(jFt)+I0iq}@?fpiAhF0gMM8^jfXEi^ zGmkrf3qNp@wB--r_}CO$?lMB83k7&fMMLS|m+h4@e=gv6djWnKS8}=`BZH?c3c==0 z0L+>G5Ld~3A&-s!19c+-P>d)6^Hm1KMsqd&78b+J6*7qDqldJ=eT4oNxj-U4ny|88 zi~l^t3!YFFzKYf!5;uW+4Id@aE}wL4bv*!i9VZ~$JP-QY3mBd68)0Lf zB>C;`Kq98DCC7gW^UQ_!q6Mo31)H-0oqka9)&?52)(J;dBC*S6GC0*{!Ml>#aKW-4 z?A79M`*wBS;jkV!((!?=5>m&eUB__G=qgkY*98530azkC8>Gv&qDoIY#J=nRi^PS< zM|&*G7vwQxU#xx^CP8D96xGUDYUQ%Y5QJ`KlAPB|aGK`?@E1CW`9s545>!`pC9oPN z2-y&|*-AXy^=+wB2$V-o1KBsE#kDGAcyi(|7K- zJ`cJ>kJCkWlOSBhloK|Hqgj~(-z{$nxK23C%boTDQN5B_xrDNw{1Wmn@i-or-$tf} zMZ)O~hIoJABY0_5lSHm`;q5vbU&##9y^85*mNH2A8&}bS<6?Me#xS?sUB`2Y5a(sz z_=cJM5@u^}18lBIh6k#Cxa8MK2voObtD~dv_2<*LZ?y;gv0?*c-tB}5znh@P{5h%y zGH6&bNQC{hamo~ns?R&4aP1p8*mL9-w&V|Efr=YO8cw6ya~3gYTkXNmO$=<3%)$Fj zI&72SAc-YhV8y=+mMz)~qH&j~_cTqsSbUmHo-rGuhIP?ZzaMk*KcSJq04jgK1MUW= zNOFF>)uyc{*(OgZ-oX`@pmJXjQCKU;FO3U>t(yNpJb082g)0!T36-2|{uG|lDTeCh zcS)IWBOI_W;qSQefjF5I;9tXJPIgvFq?BgjyUP-IOPRapbo?cyZTk4`Q8Z}fro!Xq zU^Y9s3QuT0!E!+v*nfUn#fuk`a7E`gi9d4!6Acydxa@4~?NNa-;g8g2_f&3g!|M(?tHIQOXA0A@tMZ!U$g!{irD1vvh zia;$l3$9Ni7%T9XNCY?|k-q^S>!R4IQ-*kyAz;{*3JbSfg{4Vz@V^DuA+1{xWOwND z4}6|QKQ$UdL)~Mx_n95u+I|X3Yvn;uJ;<`puN+TToFR&Ca#i>JLeN<~7M-{fcwYTa za1nY-ett-X&AaE}?v@DlPge-YiClp1v$%Rv8lGhJAF9=~&C$9bmb z@u}J&G`aHx(o}d!h1?L5Jtt8qAtj31z94+UZ8Q3{a?``Al6I_RWIHPnz+ho^>H z=-``;aOdv|^z=2xf`*f@Yqb@*Um^;7KMj)08}8!W8N9(I0(V-#SeFW66)v$GTVr5L{Vy_Hah94a4Mpq8JbvklBY0-?6P+;Hj0w*A zoNVVHw)1-t4{L+Cs0it-Z@@V-RC!^d+p(l(GT8a`;HS(<*d`DGC*wRI;m#5M&-My< zdsTrqjEAAoPmM2Al#bP%&+v-B4sWy7Tv&Ph7xcNsS<3HzMB5!2;G~TNKj$n13F&S0 zu5&)xbI@%O)*GuXw$g3Rx#)L4pLos~MK2ctWUjMte93B_^YkjZ#ZL>}^fyA3=t?-I zWe&f>6X{d2O>p~OJC2W^Cw?5LJHd<#;+X8FXP1;99gQKive)s3Q8a6wmJRCb!m8~2 z-ovj?y~M_j6RoWeg}<@!cyq*^iAdwaNuvl@lDUB>I4=Q}N7Jpm{0*6W!RI(Z&x5)8 z`T~8n&l5$x-;*cgDeEhxLjGFK0(vl|4_y~}(}~XNMC+mrE`DG~lsaj|9=|~0ZEuyj`E^F%dmyC#;o#M;v#n~f!l`e|eW>a*go`rw(eEhW zgRvA^pAyO(WxbG!`FrrG#6uEj~tFQ zU5B>?it`&=ZFsBpcysS}3&E%=1|Cki4Q0!pfUaE_WK8sDE*`WaY{dh3R%rnTCSJtl zS>sl1r7FDdS<6U)7N3BTAJ0=>hiO%syAPsPM|pERCu&q3LM zEC?7%gtHU8h}g$|j-_{+eJQ5FTfcE9xc__2tkq5dxmT}QlY=2xzek%r^HBwsD|XTC zs~b_VD*~s571MpP#wat<7*VJn+5`WCkQBt=x=FklHD7T^e}uL>%kpDNeq%w4B(zP4 zXS(yh(ZZ(7V8ZQMv&I;5g{|R=I776t`6>FPw3FNSm3W`#FXluIH*v`=U9hMq1J!C9 z=rB)YmOgF3ty}f@_OH!(Ei=;)_=jmH2Olv!T!-FHTbQSRYq9!AiRFs?XvmEVM*E*q$M9}JJdLF$VB%2$(fW7b_^+eP zEa6amSQ`$@o-%aZrYDf<9Lfnzd7PL}9ThL%WF?qU)`$~O{-^kc7Q3pzu{?T$gZ z##tI8Y8Rt>jTdej7UHEm(tyAhIoR^+1$x;j@W=F@(Q`*0lbX+_G|l}zc@W9%t`Bm; z>dHO1OG1l(W%gTg|7tGEtgWQJj#G(V{2*>~ya4hOXTtEx2x8tYgO;zP`Re00DqW|z zP_OMrXf+2+%vXz}bG1E~*w=^ge24+hf1NV##0nN}ZI;GYIa@$CVGC4d%cIfdXLMcJ z1YY%DSxB`%iASVm`6-t<@xq#95S)1soQB>I_pGawxo-jEo0=KdRaumc`bXdVa)OZ5 zT^Qe*LEbw$pzVkN-9EAw)-_K;m$Fze(3=1bhc?y(x38d}Cm+5k-cA4li?h}Hl8aVeQ;AX`>M z8j6tfy6#dTtEiL~?S+O)sEn-4WM@T28QH7*yso>fN<$fKDQ&5cyqkQ_=lc)%;W+m> zuXA0`=i|}713fMkl8R#qP-DTzV_OvAa@%Q8=FV$zijN4m$O12SABwGRAf*GfXnptu zYwt6S4U)`*Ddj?_+;f(iUlT*WX?!9!=OwMb>WfMRx4}76287%XqVGvDSh~d=lE!yK z->q0!sIeVSKj&msZ6#!aLlOvk267LPQ8L7Pz&DmjrJHwuXWpYG&WUYgpWQSACHolC zYvc*@$_n7AZ9Wb9b%yM&uZBaf1K9x*e{ISwLfY)onUU^r*rpOnEbF4lPa2H}Pk)9B zwc$|t!jSH<mJ zp{pX8f95NfS@;fxJ!WKf&_6n<;3I#J=K`z<(gP{|aj>+f2X_6tLw)Yo<8Yo3BmX-Y zM-EpbKQ{)&yBy%2r6cR`^ApUSHyxI3t)Y?%0(fvLnx9-A4w`2=pfgQ`2C6GU@_};r zG^PNZKZM|$t~C8m!Lc8G8xu5gGDO`=)8T41o~d0f>RC>_=W?=H$OfB&Oa_fi&O{o=Vp5e z9EhrTCZTQ0?bJQvEdD*{17q`lEau((OJ(-3aDHb#x%fd3l11V$Pc@1fezOJV3TMzv z;0ko7y_mJ?@uar97MY*xqDN0x2HB2EL=hOKuws(zl>` z-kY6@9PCy0Gc#l3O<)cu13AM_}{ejIePg4X%itA}Y7~+;Mf0;E&?T}G4ftUOv z;hNvHGoTYygwsVF(d$D7MAxswhzBCP<4f~c!5vfFJ8&LL8n)vf%{6GNeZzdb{0JVq z_8c3>2Fd=7^Er^xVH6zVENPo=kckm3ls~nH$?%kfmcAVj^W!0rH>sgdH(Dd_+$y3a zSxVjJ6;YkOV0@r94dgCqV~&jy6MrlM!Xj+2>TMuhsgzI66?*B`$VQUpv;~UJN5OIT zVmPUN6a7&a3%}=)lmlEre)n6v@Io8~f6ihs_x$50vT$8ImN}^1fc74;f@nHl5V~wD zFC$OFV==n=bpxe2MmwA6V z{waBheO6w$C-Wv=w4BJ(BwR_s(4V?x&V+)NW;&zdIy8Am2(mKH!O364Ff%#_ly;V} zUoEuol%fI*9KuJwhDRs39-#Yt)WUL1x3 z{w=T;DALK7JZOH&U6OTAg4aEME2R9|gX@pmGne*NVbAmo&}(o&dbj}f%@)zm;*x?t z=dR+e?Cm5!`8qDhlR}SePeF)2f%nCe1h?-5;Pvz#wuqZSov#hY6_X0U>xn$${O2Nx zuo-2u9P{aSnF#`6{mD>N)`af=EaAt~t@yB8P7n$EFx~h97Np0+zoPqWXk-*lpW4Q@ zth+$w?NVY^2RvbJHn_q5RA&(KXkzJ;a(MbMkM2s@PGrJdAcp*-GSSbefzwhvd2%`` z{*J-1glFW+?INOkH5gZQH?UsZZ+-3#Nm^F&f=J5WCXd^>tYV@s@eFJvv0q}D(gUHS zUQP-UpT1^6=^^MGa);v)Iv`VU4uefi;m3tgD2`l>8(TNg((LQBd@lzXsJjiG7pB0~ z2a(j^tppuhBdVT$XH$gxqr#0 z4S`ssQ-{R?0c2+QL`<#v0Bfr1sBcRq`7b=3udOMIt;H=wT%?ej=dOZvf=bdXb(J*5 zax==6i?H{`OQI+$1P5EW72)R)B2^d<_xJLtmBAsj)R_j#Uu}7k%byb&ZnyjA!%gC( zcbPbzxIoJC93ex(8x{$1^2ml1T6N+Bd-c&Q=xWfzmHV4e;_?PiMnw?Yo&Z})!{|0A zJIL(34*T7MnYaU~XtMVmU2BmCzT)bF%4?o*Y|D18a8XT@|clJ23>M5Z9aktsu0V;yq1-IboA413M?O+?*12>-T1)4mU zWC^5jveQjisyP{#wPemz4U8E*i^s%A$a`yHD0~=!_PaT`ylDok z?~KAxoj`PF?9f&4g)H(>h3{Q_7;{c13#D$DyF^|F;Vu=ZE!YC;yQ&B+Per_z&Qm#|3e z8XmfT9y5lU$>WL2I5DCZahy7=*s28O$$To-KbdFc8VEOQMc8fXa&T1dJ~>fgfWCZA z=23eJbS+guG$aa~ON;2m)@vx?Au3=uTjO%mE=KJ0XP9B$PuG>45%}z!PM##X;qQCf zu~Y3hDi9|QJn@`~X!%N7EoMRA_|NQV-(-@%>Mk?WV~{;sza6!Ort>Omo=}lmb*%NN zhT?%%zMW$vyXu@L9#eQt@`|@}^CC}__-IUG9jwR$#SNI0{1)98MuMN?OqAbki~ePf zD9KacJ@B{{MKd5{V9dj^xubz$$y9#qj^$z^}mKy%PiFnQ(x z{R)!>kz?YpT(Fa@;m%O2uDzje+6&;BxdkL{nul5~=ZVzrZsHR*1$L(AK-0?aIE_hT zt#0A4ixZmRxUNjfs9SsqOFa6Ef z+ZF(LP!d0?zs0zs1%hoHRAG1DePD->Wc8@=)_*uljjZ#~kyk*D+W%yH-c92mgGX_P zwheYS=#p&(h1iuOMKw6K(cR8wct7F_%_T;tzV41)x86 z1$8|YIEnBs@Rnxi;mrY5vh*+iI8tBjUX74Xhz(uF;(l>7{ zNq9U5E)ZUdKRMaXs>5d?an>U66A^~%N7@;+RTb1GRtWh%7hu2bZK5>IAMc*@C2=3> z=}xa{0%QNPL^}5%1jwF*Ub{8KdVwk_x_A*}g}q?8+HW#uw2-#dRnsH+<=`F9&Gx1> zkeM9dR_BW(nJ?jvGv_LCd89dPoBawBKU<%C`?H;v`)`0lEsv;ToF{~3j3;?}!k8mN z0;cYH6B;J6^yJzNctA`YGvZd#>Gti!fj^lyEPIH$M>c>nH_N&DX*Kp(TjIM1X>`vW zBl5scjmXG;mMJ8KWTUPJH=lHdh}(C;1@B>d>=(?FY{kIe=U`oJASPaVfve?Aa4&by zA4`5m%k!dr@gc>c2@k8fUlA9F<)#LXH zK5c$Ps#Cw2@3qdt>+`$lBAuIL#m8mD=!G2Eo2tX2&>*TGcZFpnKf>e0FND>b4{;lG z1-IS55Kr?zOw#*V=GGsSiF&CTh#e?{qY~QmhuSq<5nBkR6`@q7w*u}}3Za@SCjykK z1uKV{xHHBQoPRpOpOrJ9r;hOcZR+8KMyK)qwPEbGScfBfkI<}lX=Hmu0=^$=C8u3i zQ1SOkEYGi-EzfFz-HLtiqvR0w-YsUweG5jBdUH->RtWp9zb49|Qw3=~#V}g>oVn#- zh^q$glPCTw$*&qt80%R_G&?qPAn}dVK_egL*`0%praNF{!9_TnT8@f*QONji3RR9f zF;i5S7xdVldUDyGkOzU#6Mm4M3d$tkn-7w&kvo{vS65)h>tgupq9M3?^foT}y$YV5 za)D=)cyRTnI$aVxLIi0#f+y?h=tG@Nbc6pZV&EswGYzeT1%`l{Z-0}e!(&*dP>ovV z^<)+|Gpf^@CwLbV2jP!ef#sQEhs6UNm~jk$8cz|3hD-3g!nCQG;sKhLz~GA40&X^{ zftRNi!zTTS=(2yR;CrnZufI6~^oq)e($WyNfGY;fM1dorP169Pwi8MD*B>c%F*l z$VM&{b~}jqlb1}l-EGEtx%CiS`GF=KFo*1?7a?$^x?r?J3+`lBvexwxu*koKXihrI zyh>UIEC(O?Ti-`7?smfipRdDk>U+2m@|ZkX)q!@KJD79*zriH<7W>I{yx?_?9^6u^ zWH#3~qTZ@S0xAABR_)~)h$eF&^2rRI?N}JH9H2nPlY@hc7;|!_!{D@}7#%+ALBZ-= zl-yj0L8?p173Ct*ahbx+w-b5g(gpXfvFBnd&igqEOZ%4}HGza9b?MZuPqVmfEA41PN8Li>U%WMS(7 zo}Q>I@EhrZ)4fY@i*^Xiu5;ph#>t|8ej*00k`WZF>;^jy>K2p~1X(497~?+;&!)}C z^CP?QolFoWWoFZtiihCXgC}s}sH)&v6y*RfZv1kMSX8t8L7FR`l3JHCkn#0}$wIR1 z((FLCc-V+|uR2aGG|4pfERzK5r1kCzh9BM%HG3Z>w&$O63KX9B7@Kj`YrVB{}ZOnbsR zn7|3s;L2rXUeAnFVrLh~&K3odyD5#Xiw)#5X3FOE9hUU!)N**e{xSWMdx9_fW`Xx=UlaVkEX zXkLK2``vg~J3H{1%L_VLodZ%el)_@aAv$|i41K*p4Skd*^ByLhLtG?8smou8<4?yd zE=QKc`$Iz(>kzAPEZFWaBf?9~cu8u?a01nM4{Gm#|K&4yeC;mij@5&wt@pT&)>Yb= zQ^f>FFmO8w@!o$i@JVKj`8WPHnl5TU@$V_rLnM(}$$sMGhv&$IscJm4qZ}aU%|ZP2 z{tzjTuLd)%0U8+Z&YiU<8p*F`r!cZ13&dn$0aueZt+iV)& zQU=wf9VE4S5pC#EL5cEu`osMoI1gHZzw1>HNo&D=ja#g|^&WoIhAZs#g~9ku+6Et` zR}t&9RwvjMJJ&)}5E&z4A*W z=42-89;wNjyUm;FEb?F{Oc=$xrDN!mqs%)!b1!vz^YMS#V}WG`qDYZ4?5da~NR^Mp zo(}?cxbIvOo!zX!j74SIyMtzX>$ZsTT^K_Tl@zz91YFLcAY+q&f3$@c$GHv!7O{ zQ}u8UG!v;HJ)?SpQ->yD>Rl1IFVDbkgG}l-1`E^t{gx43$$CNREC0zak15_I?n*D~^;M zsX+e?N<4Rm#TdDZ;)ZdSWZs)g*tzT$X`3zv693JCw@nI=?ez(yWzRxb=@g9UUxi<` z$-}s$6j=N(1($vgf&GP+I6e9a?CTGPD`rWsTswy<_t=1n$02OmlY^mRC(&d7B~UAQ z3~v)XN#uto9Pmbqy9Ne$phJOqB@#yNBoEMcuHUfn(F|TpFrP+kZiL3M>tKH+ojl){ zMRLwZU|D=4*7w$dPFW_n&X*MgS|5Vl$`3htSODf$b))V1&7j#^2_kBe5U#jZzz!)1 zz81fPn@c7Lwr)QHC;zkI?N{!G{n=Xlj0;VmsuToW!KbqnTQ`t=R)>^NrGjT%EVi^ zhz30nr%k3MVT^dHg|2(&kQb(6 znA2qmM;y~Y`)VnB+x`KyzF9_u%$|@x23((O=TA~MnoN2_c9GzUjj&pqF#mmSA;0~f zVtcL%-6I}EXKCrv%CToCxG0X!!V+ZM*;M@6RS$wVM;6tW;!?QdVn+orcoDEfXtRZ(^Jc7w#+ZiR3_fT!v3zij9 zpl&u7%>QLzxNbklaC@V7o9FOSZ}#KUC%?!TH)n7Br;O1OndGuq62_G1gU?J8sNrS~ z%F(tMo3S0VxNPw*r(WXm=m<(wyg-j53&}6{t0YB{6QVy7fdYSR6gj8HWjN~DjPK&; zwy%ns8_9sG{#}yXTf}$oy+_*TY@~*B)A7oTlX&$&JFXNsLi9&nD2baYkm$>ygF#$B zWMw%%Q}&@Be+JUi5yqIs+5^9wr8B#pfOvEu`i<0M_oqJ4({$wWacVs8)h~$COjG>l zXiL5R6_C4pL&5y|65s&PxV}6Vr&Mgm8?cF{%SBO<|5Nhek#jWQXx3e4xaEpG9(NwdO9wCqd%CG=^f}cUSlsb^y+O zyF>TxoeJLeN5E;SC*q+MWCp8%4%$&@XKOF0eCGz~$70Fa)sG3rb%UeXLMYu(L~`vr z;N9p=npBVi9^Wib+;#<-@Y|BtB=)9WQRO~rY`M${nL@~#ReESQ>k2d*jKIQ!EhJ{w z4UkTINyq%0xs2N#Fgp2*B;U9VE>Bb0IXbxzUzJPlst02vn~XQ-Z(z*6#!}Z03Sj!C zh{)g1#eqfnsI-v-(CifB9e#BmpNJ6Ua9W0Gd2Q(Q!5w9SUf_CX3EqE| z;({S=FR1hVA`XXf*M0eJ%)F2Zk_D+C7B!EE9$Ud))t-rKZ_0yBl|Nm-CFam8E~Okx3DSCs@`c1Dol?%Uk==4JCd z-(qOwWkT;ud+?v@@RZxDyyN1TdL7yH?e^<9l#mBL>pz2u`a<|s zmdB^(8{put46v2efg5cz@aOrn5IU&={sxw@osSL8&8?MSm*`xQBs-O-9h1czs3YV- zd>BSvevUQQ_L1miQ^Bw4Jk?mP3WNhjS1%4GmBZga&o2g?uNC3rGjHJPbUiF~@P`X8 zLg4-qdy?~767=_6BZkhW>4}#+sNmx==&bCaZn^p(SRw=a-^`>RyyhUeXGs#xG@x(h zHloW9qd#k%L8kjI4N~8P@4cm2ZIe)(Iyo8dc>PDC7LJn3rP83@{)rP;oCn=+<;aR; z;2iM~+*oIcN^RBTNRbsh)ZYY3CtKNDx{9p&kwUn!#0yM+XJGZKCFoTYOuw2~!(4SS z-0digl|v1r<0H49uZg3m*@hnyys+w4I$4BVZAs!0&dITZmQ}2I!0;g~f6u^)jRY^h z6oK}7Mc$=_Asq0=0b)4zl!(()DxCL|k-GDi%wBX3njI2QQTsHja$_!j{9y;L?2h2n zA!XDQy}{piIRU3?<&q`B?c`5q30WZ@!gT%8!;NnMKkYKXOAd+Dw)_s^?>1+1x!wGP zN$2pMtTjClJ<9wo)E7K%`9!`vpGiJAufo+l2N3rTVZTUD=Xs`>K}wQ4aZ|m|&im7g ziP-~G$LI@teTD|yOLbw=rdZM!zZYOZR1R&cm@lB-XQQW?aR%B z@G=EK+>bVJ^b+T7`Llz_KAi$Z?mr-K~C+lTINjUQVp+MrJ#Z2S686e_N$NIhPLf>)2^q*}q?993f4l$>h zJG`T`r{9$W4BN)m0^Ed0m`mZ!;H}x3X9n?1ck? zGGy`0jWqD7nxJp-3jBK75I?2@^xw8(l|NK)zkfTp{>TBsrCH*-T7hTLy8x@#ZO4Pw z@>IMo3;ebPpffRtGhf1?{a!EjYsZ1_ksENQY&M-lYN${$%gFAE!+4$99Dpzx`-eBe z`tL>5+kCP47mYR0xnGupPPV`u88Z?w=MXHE$-?EIBX9zjSydF9!oL~n4W}pE0IO*s zaNt@vELl;+R-QS^e>C31{D9p@Y__t2qw00IJSm*(&!*!PZucd){tC_N zZr1eb4cZN4p@`O0h|Nudtt~C&);fE5Jj^2xH%)`y#7VGmt^<}H-i2>XA4AfNObFPW zhwkC8@uET~Y>3E4fAjM=FH)3OdTdLK>k)sF$^bpsS^aZ1JiGt;A_4c|sdi!rJiTj7k!$Y6EA?qmcalKo>-f z!_B_#5c)U?28fYh+G;)2X!IxNYXTrNelQD#hxBM%Y#3Iqx1rLisZ4mb7UoNz z#6xqqZ}%($L5%slXb)t}Q!hz$n;JXZ*>N2-`~LuC+TokrVNqVQ@Lm$P{!1^k~6 zsP}tqfhAcm943W(-yDUL zs~&-D_89#(xD$NeJ*GB6+aU9N7qAaZVNg>TzyC=i0co1B@6TMg*M0yirba{5g+B7O zQ3zH0yq6ClfbQ|^h$9K?)f&JKVDD_((ewU$SyJ1lA}&FN<(3X zM-G?kE2dTp<#~Uy)xpDOgqiC)1A~XYV3)QZCTE@?MCKwrmUJJ4xxQtb>J;#tA%aI= zY(_nwNpzx09*%8aLeyGs!|I0p_^CPuCO+4MNk^7L_=ql^oe_?zjkB5e$2*zijpyi` z!u#lXAOwO&rn6`Dt5KK;5#f>_8S3C$NpW4Dq#R!UvM`0Jg_g!RdE`N$beoh$;Q&jm2+ zUN+hLu9p~2lf;#8x6uBAo773VlTa50rpDJ6hcwku^@}8G7=MPCh`*%Cfcx8(*HAv? zD|y)0Poi%ma%a*#_-Ow$s+Mrc{9LLuuf)3=1|=e|J!GUn=6oH%(r{AyZ6g`r&W7jy zOUA95AtW}1>x{&FAS>7AlaMdVq1t;c-e0cCGb|OS{?>+q{P5poik~7cR?iTjGzK+d z#xtcUugH|>Tgpl9d}+yfQOtcmj|QR^Y#|b`XY_;p`zfu+#FJ4$MG>YaVE|G-sAc^K4?-#ocZG5DTy3y-KSEw!yFnILRTC>?WBLMb z(SOQIsMO|hGnDFXh?3>Yk1fC%!Y=v_R#!-bYjjWsL zTzD~j5oK!(c$4j|vG6}3!9gO0+jjkgXNM+&&fX3Zn!xSV`>V*aZJi(@9Rt6O(%^b| zEvxu`3HT&m#4av7>QlLm4h|2|Jz{y7?7^{@GM>>B9A90hp3eik%Z#G`D)blg*Px}Ju2bj|BnF&OxsEDdoY(iG$1>I@whDZ6X z;3?|LZ1Xz7&9d&1VK*zfY?2f<^xwwEJ6;p_uv_f!C`tIcLzdp=_W%2Kea3$S#$Y5_ zNUC$)m-+>x^p{BV8*8IHf8U>*;iH)Np6#n&LxdkK%Z+rz>2 zG3*aHV|=eJE3nMV!8xZ>QGVM(LE+!cf|)O(Nlu+DOj!36-Re`Bfwuw7X(M3_8d^)4 z%kwx{%voY)m`rpbfVU;*4j6QfnTNlqAU6M$VXK(|uRGZd3+H5EPV8jCgtJAY*6=+; zEhDk4-UPcWG+^$9b?hH2S%~@zIAh-ga;4r2N$hgCH(d%=+Z$s4VL!q)t5V0MVdUV^ zEyOxA$K1o>DtlqVaXi)Dgk4Xyn53Nn$hGN7Zmu$Jii#$Z_xF>CU4yv5Hx!Ls7qK5* ztZ?2-N`u=ebXLj2l*N%WGRwnUD!&&ePMQYwk6%%EpURAHxkOX^gfUPuiJmiU;d0`V zg2z+;u@gBNvqXmp<8+Wv$MR(~ImQOshK@;Lo5B zSa`?MhO^q3?x6_nM`Z+JvxDh>5y~|DN-2(KCK8Da_vr5uM4PJHWQKeai8&c4kc|06 z$A`tEUuzm3t!BVm8wB6Ej@8Sl)zm_GkX^s3on5c-oc$cQmZ(;)!jBI#@y<3GJpI-a zEA4WibaEPfp06qxw92O9M{Lp8eh<#MpG{JHZsXqMmF&5{ZLsM6CTux32lFlMsHN{M z8s+&Mj&eEZ1H*@L1t*-(6x%`4^E`>`Mq}pl=>#fs><$dxxd5M+Zoq|!foSR)LaV35 zksUwf(7f0Lqfc=2+%{FJkQD)QgSht{xd9itOnJwGI3B`YADFu_4~lnJq1}^ayy_c( zk!LcPNF#YdJ^#_t@!YOQRf)ICRuh-U{v(D#PVjF~g|YhKhEI0vgs%JZAZ1Z3xzXhf zDG!6`UY$Pl*a0}9J&N{cZ-%K}4^Teq0-m(3y7n|K z&~PK6sa(f$ci<8Eoex-cHfSR*95C4lSU7xaSSOXxSVfs~`>H2Vj~a#AWM z+uteBtYs5G=Fxaw*rqF}{>q8SuDC=m-R)wAKBoga`yiNJ{EL68%&2?SS+Yn$7``8` z#Ql@kgWdCd#`-@8EWDowDi$fUJXR7b&+u6cdY@&N=Ifk7-LP{TH&=(cKq;P*7^L=U+HeI~SwDNbu zdifyS=_tl~#DP`|FG*AF@@>@D(+^B$T7uNiYjj27HRzovg;RL>Df9&u?KCFf;V#gQl49Q2#**MfK;QfVdQ>a{o^1>u&$y1{xq+87KlvB! z+Ll3QsFzXCz5`6Li!|<3oP$TIN7(CgTd3OBb0~GFn)VrlqovUauy!l7bVHgc1P0J=8ET~!`U~lr&04xTYAYZk6hyk!`>a4}8D2269#BEk3a!0*hs|LC)+T zEe)Oy8Gef}IsZPDIJpB8id3Lzc{7Am1c7|`GR#I_Xix5k7ds8GH0~ChefyKRJQM@F z@Uu8ja2TU{vN@^t6rPvPOgugmh@zXL(YJaG%b)IoUSA=+C$SjbT$sp{cRnJy+6jwkes&@r^j?TX3xiA?N3bh=LCE^M~3IKcp1-Sj049GFQij0 z9l^8r;<5eoAmsbq#*}T#VTNxk2EILn{%cG&f8 z1zmXk27K;&P3FsbGT!YL?3I*_*futm``&%F82VYL7|DY6Unj|=^g$Zw6$1vWEzab` z3O7TxgG*{8WbL{PNvW@x`E8NdHl2caDT7lqpHi13z@8(waf<6|TzpXla@+%OoxFhh zeN4fzVig+aVv0F20pwBfdon{r6;9?pM3I`?_;g?jR_us`*?T-7Cg2Euc>Dy~9yfx+ z<`8cFHkqjpF@U_$1YGyX7u>mAPT24$`{EQQAGq8g`zc*-i!c zVc$7e{BAt!HOQpsxNP1Kj40Z$J*L#MDF_&s1?!Y!8a6I9Vt@QJ?B^k9DeJ4keE zH!!*?&!Ee8GG6N5PrW{maDB>Z;?$!-CzS=j;!ozVO1^}uXY8lrqUPZegLKN1;RNGy z-Y|8QCNvdIg@Mc2#NhpO()q%lhIYqO`(;NksEOO9PVA0KAX9$T4<)PX%Jy2FX#U zOxpM78T0JrJcxP8WoeH6#jduiVOg z{n{|@$S^xqrjy9FZHLh0MNoIojZSrK0@uCWv^i~*nX>R3TYYIE{*52tn|XJ$GwpBC z<`wIyQTrzF@cN9Y1GCs;QupxH^KKgTW&%~w)5nxXUFKb0BHq|M$f`YBKrXq~5hvXZ zINwEqOe||5Qo?J&a@j|E{nAXJdu~(d{%RLHMG}4}0Gx)3m;I*dryzE8t%NmnbowL&-{5GxC^u9rhho zPYQ$+tqU-0@lz^TK*`mMMG$JTg5DL_a?GRUV6=Na{0`+h{|}4lUH2^io8JB$_b$g$cmM>nXPV9@&48!BHm-muHW>BA5{{K zy(dJ`X08uT(JdwKcwEq&spMDfY~1^96z85uq3Q~Ah{)e zXSoD#-yI=dZRZ1el+1wq)CbJk=T&UYI4SVTD<*qo%80bvcHsPnaB{(TFy+o}`}7*{ z?j~u7I~f4s<9D;BYc`QbmxIW<{)x;7(a)qONCVgW-U1>Z}63Sb`?pJZ{<9=OlcT%Se6pqSt0RF`f%n;IUS&C$&Wu zb}F|K8vBrxzH7pmy_PufhZ3&5s|v?=Te8kqjnFD03EY0l@=AZrgXM#Fm<0-OcaC*_-$iw#8zJfKbCNPT zME|>SpO)L_FxMK(N%H^Bq7L2U;*@t#>10nt(@)VGt0Z9B(GjvsqmDFLD8l$Jinzp6 z5o8~Pg5B{WSah<7JUp2}*BI2$2PQ9}SH^=XyYb;sga}r~=b-rMU}E}sCCyx11_e_I zPAZs;OBX3{9WjpgqJEbCb*RK?-IBaTPNHZf{Rb-7Tfr5}xnPs41yxi0VfbM)J(ZRS za;x*GtE4P6)npL2rhPc<_YQ(Q;u(p{^C&TiGk-n(3LY+)kDmFaaH24o)$f|)XjQmm6M#&m7r&`hlq9u{cl!5gCgqb+PHY;V#o~gsPH(h zcwz$KbC)vmRqy$CIXTkqN4jXKZi^y%zv$}0B@mvzj_#K3ff|P=s8XK=F?j=gf$uxq z@6-XYO$#x$=^wEe7YdJ3{*YOB66mJc`7n538PujurS~m(_}|zuy7g2$6)lP4c0q_W zuP@W>?HeFDQitT|8wifZ`omNdKBJMevxP{B&E=qBPS|J^D8dTz)o}vR43NqZh zX&P+#Aq!*2zH`~jHISJVjA3p{X!B|hxSi}`H+tVBll`9INP-FoiU5@^m%&|^d3ZT} zfce31W>$30ft^eFG}P=Z|MijYG%sNX%QPVKNuQX=Mew4W%PT1 z7F_ml1>+7E5Nj(YLeaVSE&mQ|-CG17i!}wmW&{w`U;SjNM?Z6|?LL3+?)`Y=&q>e< zSE3%vbxBsWE4=0Uyb}CZ{Br@)bnA~C*7$~(AX~~AE&hpu>(gkEF&)D3MRF)9xrwy> z3t<9XSi00uK@cpb0>7_4g)E}XyRS%n1w;FYr8OAa2h!w9yE(}C%{i&m`v7DBm94}IRBfjg;LZVPFnnu{8 z80yiT!ASgmC_(beIH0o&@q<7HOsdEW(L1wy~E*FOe1v;@4CXYP4QU8 zyl3xKPvA`m6@d}|jp(MchtifnaGSLO-xns*2nA{U&hg@F6Y??k*B9#kToVTz>&cjK zEG!C0p*tRh;qChM#P9kT$+hbwMK9v9FX#wQX#Sq)D=(ur_(sG+HXGO6E#d^MS3xX38x8*cA)T(D z!AHv$m(5k6J0Bau%z-&1*V&AWPP`7^%dTO3_C+{(a)8v1i>AVb#`I3%0ump422!n6 zal->Wxa=57{Lh5biNYVvpNPJLMDq;u5bHGZMp218{^1OcE|-Yp(l}CasDn5Nwq!IjV;&)~|zI7`hUY|1Q&+*r2MblCG=4l}n&CO({%nrd1wl=io^9G2EVzRzV+Bd<$Ow9co~LsOY9CtZ@b-TpmYX`pRb2w`_ zA5Z-L4NFoe^eX1kzoF&K^!)Fj)nDMCp}5^1S4l(eku z9kN0i2qk2_=eggOsLZBHLn@W{mQ+gPcYgo+(>d=s&$;jG`h4Jl!Ce@bF%|wDJB8Q7 zSK-GdQ7lef4A=9IzylK%p-qE^P+;^4mh3tV&VlAAofQe28>Rv?R~uXxt%SEfYf!^+ zBlZlG0MRf(;YwtaPPao*z&#WfRiQUFB2>(`MA*5K{5Lp}%Sv3sxBLaTN(1o7;4HTK zk{emi%?dN})X3ZQbBN^xakxIvjs5@pz{Vm5M%jJr;wHi*FWSRyvdl$|eU5zD;WRq5 zx{zMpp-hM7#=yn52bg_<9=Jd95zTA=k9g!?AGk2%b&`2Q^!eAsYV}tv=o1r`iI1?V+`i1VOocDy-h=16Rq!Y~ z4$fpvCLIdD;NLE;w|e&^&*#(}5Yd?j5d-Hy!u>5a%_%19#HK>u;3>3KFQgkRo5&~Y zO!#K@7(z|<;qg;vd55!2QS`xL_-mU24Y66wvN{*cdm~L=iuOWt^((MWUC8B@E;F8! zop5YSIc}&FL;3t0_9UH7zkXzD)x{TN_CX;E6_3!z@7rotS(O5kgeG&`n=W)Eg2q*M4UjQlDLh@j-G`x%E z-WA+=R6#F{Jy%(cadm?v<&U!fk9?uei{#+kB{gB_$O?{e+|K+rsR=%Ayhy(_eWjje zU+B?zIsTI%1EI%3^KU*3mOJs6DJ~;| zEtB|bw4TsSCXsl6$_a~d-p~bqQ?YA_FKnG5im>1q>9pO9>2|SjM<)S4IdPomnh0$3 zSc-q{J|lN08*p;ka7=fzCm&yN^0wGLU@^ySUm&3i^^NX0?zS>+ z$z4wd3)5&*F1IV`tj6i=Ci>Lt3jH?Cglc~oPX-6nF{;l%U{@MRR{8va2TLB4Pn<;f z^f(8sJtKjibGaCrav&$N6~~TD4O$nl0@OVfK;t&cOuZjP9o3FwLCkLKzW5W2oU4en z?IqOlTY)DNBZ%YE5KPNhg#VTCL2*G98Wg$XuUFsbxcj>yLnan~|I;TviyyGDrzM2E zpbyX#GZzBNIgZx+oz7GMc?%%$svK`ra6(Sbc>r#lxVK zcbHt5ISZX?4It%03pI(nj1lmJ{=6Ru+c~jlBG)Zdwl0R?xNA_~EGpd6rGyKLxH;w1 zVhoupit5$h82|1Zn69`CdQQ8L!`o6&GWE8|(S z0$+`$P}N1pF-FUboZuWSSu-=KcVZZBkC(%?)^{-7YKZBZ;DuxVU4bL9v&md{QFIMd zKz&yyZ1*>&tKXi(LxJPaQ*S2>q+LX>pjj|cY9-WfNnqYNb+gp1gf5i&3k@F{n9*J! zAI_OVshDbbg9}>U!@VxD)2_f}SCE2H&An1%q!j#5VTGyJ4 z+UZrep^U-x-#@U&CPZ-}-plOi;UK(sxsX+?RAN@Dl%V?#Bd97JM?+t8^VVq_Y0U&q zi27Wg&MmRUL;ITOC%Z71p(4u1??~N!4!OPp~3)wc}wbE=0rm+^##w8p~&0 zg3Zwm7*uqT_HHtTgc(mks!ssc);SRMZZ@5pJ|H+SdKdh+jDA@DNKn;njnLD6O(bcy~%pZbK7fnRZ!zLf`I zu0|?*z_6KmA05LQO76wWg&RougH`lu)PHij$xNr! zYJcytVs?jvy5|E?hOq6FNWwTw7=i9?M;9we>` z!2rvHkX7@R#8f)ruODmScKSUkXPpg$K9|U*B`HAMZNbB#9=0nOkm>}>Dkqa9-)S<;P9}E8MLL1YSbe?HDoqNFsmpv@N zyPlH?k*@~}ZE4(jbu!GaI7xif6zR44C|D~l3oeF3R3YsxEvuIlzTcrCeBdBO|GoW0 z3nC(@?aA{voH&WUu;M$o{W9YpmWhHrHp`)}?G5Y5of9J+p3=${4t$yHVi4K6friam z0Z|%vn3!(|Kp;rM*@rx^Xoeo1E0Y7yHP7L^O&Rc`_d~f|CMkURj<Jh@srGee}U( zZL(2yDg+#A#GoD*(tBwI297*pCI=h_hiOApUZxTk1YgG8_Cs`m@i81%YRyZO8R6BQ zs>6zVjU4lJJZaka1Q&E>(I3|rkifZh_%%!&vd!CA6So0MGEW2hq?X;dkz&E5ZU65W;P2@BvA>p#(0oaFJD@nn+mtfY$0HA zJpKt8MA@kKWNkdKgq$sP72 z!e$OSI*#S<2~re(e1DOdv(+72eSc!WG+F*p-#jo2<`cCOCyCSFY4rQqxnMkT3ArJN zB@QMl_;sz4{0f^%*v0Kgs%j>3-i%I2@Vx`ga?#}USrK|4<_pEWe7Sw*FY0k96i$EC z;-9qegt{js*iNm%LB^I^>s;Y>E)wAK&jv(hhH(s~U(B)+X(-am!=R4UOttVGb((*U znHMk@%(-Qp03oBs3rK#vW{R%YI$Wrqt zcQAVTh|Kx^f;oS_m{xTuaJvLIn3>WB+p;f_m=B*wQ1362-snY_+pI$8S@Xc%O&m3o zPm<|VKHzu3lSO+OtHcEfmaXgP_$>3JI z5-r10@%+FIj=h$G##OzT-^tBFk__?4_$-Whz5#r-WoVRxJD}whm|b5Bol?E@dtwwD z_;eOE;}}`}SGK_0KUFY)cL#M!BDF(tr!5TEybuQmLyci_3IT@;_vM`#v7bJR>aA@}*__5(^uEZXbjC)YS>;?!r zTZz0&ENm!^AqlE?iK4~R6(<%XHKIfPhb*o`mIuh?r=wvnI z{lM7G6z06%2L^}Lgjz3aa8ODQVg;7?v0xl=Q<4z+H_OnF;ZX7{qK>#{ZUOCOYtZ$c z6#u@umD#$4Wp7G2ofa#nDd zb6uDm6UEzS(qL%aQQBLakG8ANb9<|7l$|t*?ViA~K~D_epXZa%_WD@*g>9gH14Yb_ zS1q)hlMUb6T7pxLNPxD;gN8WO2;#b_hXkj-BS%?HRFv5Phl~9|I`TFY{ODr_QyS5I z>v}Hdb{!A9HwLQ{M%98F9Gby&19> z=E86BB1*K;Uz04g%bcP4!uU-WEP6J9#yT}v0?u+|- zMtLzcmvKeRRBEMug)~ZDB6d5sk0JpAppvJKu zM72>UD6uY~ri01o^;RE_%6EW5@?ko0cL3P?Tj1P@BK+CMlSpdv4%|EPo{F$nVWpTT z`bl`<%{%|WyH!&B0gjE6A^8?&8L!77&Uv~}@eUrmzJZGql(V`TGx$awH^{hDZSu`F zkGi>pk}bE~Kxc{$<*ow6q`N_7aT@DystjS7L7?jP7)7S<0L2ZeQ1{OY@X{Ee@7_vW z!CHcjjhe9G=n$4_h4Y`L8PmJJM#=1bJE=y}0#x7f8=MTgVDfBJVLADVW$pR+zI-`* zZMQXQ?BV_{mcbb7MZ)mKJyh4uf?kODO~={K!wWtisL8ip_Qm(pP$M!AjiyDy`zc3| z#5&T_OBZ=xq;!$D`#l+Sv4Fivg>?DrLK4$=mnPiS!lm0Uf=Qz$8uTv1?_tY{qDu(% zPyWUTxW49u6`9zlWyz%94a65**E}q~1W#_MBIZlpQ^njHq&-1`Uf&x^XMZf_-iw>5 z#ZGsW&&q-LJ%(_&eKC3O7DCH)B&db!JZL?#l88CP5Oe=_dhoX=ZWYhNzYpir-b@>E zMA{W!aP#P`#R_y>Mk%ogSPw3IX$UUvA<|dFcom|K*x4|F94=LY{PhoE(zQI?_DK=X zocl`q^8<*BwGs_6N~NcEttA`1&w_HQKHnuLj`~?Wpl(M6U;@kVS4ak3w=Iwud5;%v zNY8^-F?p)n`i#adDkm$n)JaA0XIS5P8U0oF5UGt5u)P6&>1!d?1WA})J0CL4 zZiDseRAhE=KEG^PYPH-Ie_vXN9iPKM>q-R5A>MX zL_y8~bk1GIga1XrQy(*-^4c@>n+?bIf(}}w)l5&1*$1|`5}#X_L(=mr&|mSM=+4w3 z&!e)jS|^-&;du&7BX+Z6=ey&-ZCoGZ-F~{Z=mE&?d_m-+JMphKk2DQ!;hv58FiuZL z*qPUlO8d%~h0EnIPNtPHx+E$*Xf+qTSKNcj+Mgt6`5Pvf*U7&89Rg8P?vZ^7GD17g zlb}(wkBm(jf{6unM9Eb}`1-01-Zf-ky{0N0%$2~o?ITprc{2Ff9c9kPXyLkmDq`i} z$`7_12WE<6>3*3)dQ|)t$4cw6l$~>l>Fc-#nNJU(x8?u{7GA|m-&H}NBKzjKRkG`j&3(e0$(RZY#G^(N%Dt@dp_q2H;RXceh(mO;TPER|GAGg=QFX3!}o4- z!pNC@SmC1q@!GRt?y(;B%=UV;Qr!f*=B2~L@&Ia_90Em;)5zFM-B`GWfiK)S)}#Lv zlXf@_B*OimfKGv~*i=C)mqS-hbAr#Qicnlri-pJ5aeL3Nbo_5))c!Vrt^z$qaP0=1 z4pM@n2^@>bvj?qPb`s@DgIKd89sIAULTz6&(LSI;6N(-9ZBan{JZEC+O?|j@RF^IY zbpvTxgw|QBcs9$pPVe?f!euR=>C3a9!Fg^3NnJ027rt>_w>2|qs(Kob|5iX}mW9xI zAc5rl=JHOwF324|3DGrnn4pvafA+SL_HPkzjW>=Qf6z(%a+N?Rl}}u4PLujOry#s^ zGRCK=!IR1oc;V1M|L*^W>}C=E)RYaJgE#}eg>S*1|HSy$dOcx4rVmZ7q~jRpP`Dp0 zfN-`4%hYeN7ZqiITv>tdUXMc9-v~T6A)9{A8;hf9UASo=0DF4Y!sz{OcFrF=>=>~X z46f#wluyH{z-5?@F1rJJUUt*G#u;lenuA^7KDnTsskvv>@1CIN?p*ounL7D0|=zfiGj5!M z7sKYjCsgf}BFWI@c-BhK;fT0AW||5Gdbx|B12$v#yHrTr_Z9nA57I}gbinnIICgR~ z=+^2$vTa>GF7~k`-8KZjUzdUQxQ8gEw?w$KlNJCTevJh)stk+ng_9#YvT3Jj zG45U76Wwb8MdIQahp+5De$=+${9?4bx`4mU#N=UlS<%vIcaGKSs! zPK)?!$iM-ISL9z5A0*21$?&Wnbp8FA{M~ygTi2dI)(K@Uef4s`Xl=w&- zE4dU^WykVM0|P*RTP)4Bh$GE^9^*500jxA%2fKZ@pu>e!yiCgJ`Veh!Qp=^n(i@ok z{5u_;p-b*3?!fMs$FTJ52dq5XOiubp;p`K;VYOEU=~#cAImTsz5-sb<@`QN&f1l~+ zF=wLrDI5Q}ejtqnvgAow2M$h*#LJ&saIxGy*tk<1yuAQlFU_D=erDl&1uG~~^oLxH zKKv+D!v$~Nkj*kYcr&3CZXTb6lg@1*vP6#hiYZfezP7Mwjhb-1^9>Z2yhhg;-sjm} zyaKs)+D!F@bu_AC1P|Qt;8&RXpx8en6kHsnUfykx7Viy(^52PF(;iS5^B02i@8kDb zFF1dS1Q_a$!|xvr@ZXBb0kM~N$nm(d zg5{B=sBmcv7{9l~%l`(+M)Q5ReZ4xkR-L58cruzUJ`d0SHPfIlS?Jx&ffIEIm&Xh4D1K zvVweSms}4w;&&4Cg8cBlR~h|ru8-KR{7JU0 zk;Gmu8+Da`8gHD*0FUlda6-x&7X~kahZnwa{K~O(PVxx3s>1nX2Pc8oX)dF=_#xe- z@rtVah@>hFpGeFMj)Qin6p9o!qAV2A{pU*9&)v(YNlpQ-2){rb1d~vB&{d#P*+!Mb zZSil6DOD()20tpEK)tiHaGS*(Od`FELfr;<6*QBPuGq}<%FZVdCV8ZGc>*-aO0)Kh z4B=A;;WfV>B6p;RX!EiakRe^kY6Wunv1BzU7|kO~udJum+7X~PdlxIWDHuG=V{y`t zUqq98-bfae&^7wp-};}j1&OJ6q1J-#`!0kzCEM_x=_qLwwZ^lOT{Nz^m-FDgB>bQ6 zNUzy$l=J#a`tNn4Wav-w`-c%e*6$)>rY_X`i4p7xGsW`yOR#aWIqK56ba0b9U3p|V zHfc?U4|jUWt!8!XcdMgLyY-o}dAmrL^-k27y9oEc+(^X@8?e7&m<(1VqpyYqtQGVz z*8^4nau2rJBB`7j30IbE#!EjW;aT55RhGUN1`iz@KkCUig={q>EJvPIZu*%4=#fF_7iA?`(`d9R|0_+6n5Om z!?na1)}8Ug99b@tJNF&!b$Ui8EI)+{PXxk!=a)av*g-fLf4#*PURy{mAEP+Q{S{O}@S>%gDD^*nKWQGzY zF`{`s$WJ$*i36g1??Vk3Y$AvKcS7iJSTjt2^9rY58Ai39K;EJLdQb=`$CvxM*bsy3 zG<@`^j4UB2Y-kVq3R}lEu#|KuM0k0&96#ZuF0ilVHF|GJr(-QQ~Q}ANDS< zWt;M@5yy&Y@bKOUJ#k)(?6!M?v+q~Hvi~xeMAw<%?Y@G>XqU4SoN{op(GKWyBQ(|d zAzAusF6`-z!+S6DF-<)aWI2vhY_14udD%kS`FFT;(_G@Ly%bKR?B(*==D3(mB-UQN ziJf=Ip{{=xpHd?+($E(l)53mkRDzcOwlYYBzpC%NA2&|duO_yi?m?peOR$A`4& z2GTnCn%O3G5*EV|P;$4zJKQzDBvFgS%lDE~w@!lmv~<)dA0_Hv9uTqSKfDLFuSnDr zU;4A~K8l4sq02k6aDS}~xSlY@L*85Qx%5t~{;33$Y)er7Tn{xG$1$<9W`e|_aIm;^ z6YV^n(yMNsY%FsUycPIxW#bL%u*wP@JD$<5-ZhZ!KA)BrWic&lFH_OilQHR84YZ#% z#YJp22H)Harx(tE=SLOMytW<{+Cz~Q6@zPf8R#MT4TcM(iTd9qD1EdEEp&P-Kz7Kze)4t*!m=$NhZV7}IFU}kB+>=$paCfN=Ps=6(k`b9_|=ko|{ z+)g}#%30fLaoE2i3>wy31My@aYMKbJrg1p<6?u-Qg2+naXV|a(j}GA)SQ4nj#P`Jz zFRfD`G~9#ZhNM}y2y^sIAE6^lKj3cVM0$GeFC2+GgsokYM1srwEPr?t#>XWysrRE{ zuu_IE6(h%nXox|-{4|o3C=`qtE~i8%$wh zyFKS1dJ1 z&k)5X3v3Xw;PS&0h9bR)hl?8d6sZYooSK=dP0Fz5)oXHLl^7UU8sMSB%kiN>9(n%v z5q8QfC54u`?7k!qT+}K?3~Su*x9eP-x42r+m?|O6RZ~iYmnZOfG0#Ra_;o=up={v9N3kE z;#GgaWS#UikCrgZP`oaIPlkXk5gjJLkjKpa7;cQk4J6_!-qGnt-ER=QQrs zd3s%<5#WYCD7w5Qt~-x5c&t(s*8kQ(H={koa1O=S(KoS9Yk+i4KS8do45uIFRT0Ce zdrXaXBBpPB2IGZx#7HNHmK9dQVQ*JB%JD$AotzHOn?q2g-3=2?JJGmsDX@_dhu=Rn z*$v0fg56!NqqI7O&VP4<9`a};F*`NrDd%U5>%|bfZ1NwOoAir3J|9o(SuK9o_$b1x z4}ezBV?^VNCC=V-3XERg7j*nRg9nXt$?({pjKcID*yqi$#Uo!*X@hT6)ARvvX{-w> z>{?7E?sR>J-``4!uZ zdQ*oOi(7fHcD^JC#}qTRwvx0uejy$IIE;qu+(u6Yj{)Dxc}z@H7?w0=!w+36d~_}i zMZ_G)gI5=E(fY&C^1BP&*<&~@+Z`wOePFJnW!BY?W33QLa z)1g;LN7@2>)L2Mew;9lkGlAr%Fd9WgCc>cBExNFn%j;|^#Df3xWC9JrZ&*&KAH1Hd zz2gZP!7CeXJRG728~zAZ|D1=KCtb0#YZIIoJB1O4=koKG=?F6qv84VJz_yt&?BjI@ zp}vGilFz+@&b6wr$ZQNW=3XbO7RQkr9}|dP&pwoGn~5zpnnZrpLYz0T0M{jD&_`3} zkog6Cu->x+w=aJSnQ8#{Q!{&2B{OIoi7v(&lDM*rY$|llePagd+b}UA2wBsB! zA*AE&EsUuthDX0e$+m^DY?AR8da^AYCvlv$e{TNh-LjNf5-?MsFEb5x90~)M<9A58 z?OmcC!?Ih+adIe659SrA2?EVtGs+c+1o=#)TA zeqkYOe{zmC4pC)f{bGcb*oS!`rIs2T1J{y&)5hKe7@jP zdlWI>sDk04+VELi4))I2N?toF!TC}%Z27zeY`(>U9mg?@Eq_Mp>lc#DoGKbHw;uAZ zg^(FJ@#tG-1BbPfiNa22yy)bOF3SZ}?tTL^^RsP(`TS|jv%x$x_DW~pSwz!I+cN2z z>|2yyA55PGaST%Vr!cc}3~{fHBW;ceq_(Jw_Wu4Ukhry;>$GzoT_b{j)=I(0@~1>_ z%9%X+5{+}!R0WBfvWdD(8%}zhOy}(5y1{=M!2e$ohDD@8)0WkAaCswn_UI$?Q*8=( zO9gW!tR&3&83LzQC7^s#5)@WlBKwzI#ZV67_9f{M+^^`TZweE!_x)w!kWtKK6_t5> zwiJI9%)p%=_fnNj(dcL~Q8!>vy` z=-u}ei8Pk9=`cbx)anFVzAs!lrV zaV$*t>tU~^oFi*8L!onj7*$HoBL_b1#Y@|E!4J-&oimmXFza7a0?;D2|_`fKT_;)Az0o2-co!)_dT z5tL6YOZ}nNO&MP${iO;WPtZE|IWr=k3L66ZNFwur_ViAJyIbWTQ{xm-JHl}Y&+Vtb z9;A}_6}#}JyaBB8bH-BhNXifM1Hqslv6`>}|I0i8Ephtz(dii2SN6fenVP8oU_DK0 zdyDITI>GnN*D<+A9VeMuU+Ed=ZASw!B99<8$TpsS?VZTtqdB=J8_!)QNdNi zLZ)}*7QFpkNPd{fK;Z@h%DG5jr11wilpak-otyE|ax;E|;Z<06aRC~?N~Hq+C-&&= zNpOEz3Ve3@Md!>C!HHv{Q0#9th+YW9F5N3cqMuJK9tD%o*V}R7%Mv)|Qv|_t^0+=W z1*xDEYB5g{1c7#tQ&mVdRkK*Pcrg{%xBzecx3K3$rr~M3$RXSk*w});u3#Sv0$l>6YY?x4{hM9Wv z$i}b<{1=&_SUu#=b$Sf>qpQ#0ouW|Aar2sl1YBWydP>Mceh7}Ok0DE3?MT}|I?3y9 zp)0~(;GJeS+(?p0+vRjjbBd&-B@87U4}<=+T8{aVLbCKG3v}GBqe)T#LHMKT42o6pM9l>&Rdwi-U!c7JlbX;HwT9VSL*}VyBhP^}~K+==3t|b=^+n zZ+&3)97-WI59-(@E1Joq{j*VU+m>WXmyvjIf|r&XXn2$becAR1zB&xULz4%Xb2boW zj%LH@*bJdyH>m10d{(|sFAT2Ra=vl*zRc#l@i zy^m9@3b6Tc1?;guOV+eehW!}M8*}|CJhJR(+!wzCrwGmiQ>!UdT@eMF$C?NN-7@g6 zQ##ylh=t#`521_H9TdhF;r_f!)YLDV9C+`AJ1^}3jMxaq9O!7ocm#GuZ-$rOCHQfw zjo^OzBN}T2;gm#qeDx}ncQpJv^R;`FxN*;g;9V_Tf3=J^{kk0vy-}i8{njMqy)(om zrb7Ez2WqY2OKxBHp@#={!PGt6e2Tj+`RnwdX<97ie*aCxCbu#NA4Gx0w-fLlCt*#F z47~M9K=Z<6I=J>8(X>#+-hKVdY0DS1T{nYDUAPJb*B-Gv`yFh&@nu29lO!xqmZGlv zv)MHT3iP4kagz6UHjOx}PA^Tkk6$iMM!CJWNQCHh>W~sfqg6JemGxC(ue1Ps587i{ zswL}kJ&7iCB!K9Lv#eLaDzJ9pW+W2b^kzdT_0_S5OLN8W;4^DH(^G{amNksTtZ^jo zlp%J!Y9V)bOF>^Zw~OZ8A!5HQ@mG&K)%&p@JP*BK)F+kG8%v9zfXx8q;tZ^MFNWra z=aU`Hne_GXN@nuZ5T^3wOHwu<2P+a742^Rpg<4%?E2GCmZQsF0cJ~UtuL^?pG^socr?#5l4jV%% z9kmLxZlus_17|T_F^cT_tH$$?DaDccAIy^R`ZQzVAvP5Ca8Z;J-`vdAF* zroDz4U#u^rn;%he2`k*c{U&+3SeGgOZwv~hPQVw}zhJyfmfxk2$F^RIAn7Le@y+B; zUb?|Y2q>&&^^bicAAfONiC493)yHe3c4YvxtzH82IZu$~XbSUTY67Os${>Y?F66!1 z9a?OWKwXat>Lz60p{p7az|kRs#yyK;&mE~Dx4(R$tD-9yy{Hd@NnBpz`A;(}bqPZo zr*Cva!6|f>Tg+olax>sJIjoD!aZGm1$78-$bZEgUdj0l2><-PN{KIcaDd%i@u5EyS zM`KVpeJ}Pm+hLQSpFWuSnb{LDNTzBfk>IPTcyd)gY;!tGc+th^v&jl41sQ?CML9CO zX@~~NYJ-oC07DnvV!HY^;v=iiG`h4JibS~1_|x&Qp?)zb`KE_W>7`7p;tZmH@F%z* zcVHYg=3%B^0tBztpzo^p?kqscMG{wl#FqQ z=b}LjVGp|^FQzVzZmau`W5>9Y=99*&0GO~B09%6a% z7o4wJ3+bYi7#$4f_VIo=@#YCS{q=D&px>%cGKwlEeg<{W^| zK27}em&@{T=fKRq@*oZjlqBf2U6FkJV591VX?8p9@I#*}}|)<@>h`a+4Q zd>Fy4{}~HC4Qs$HOcKEYhb zo*9&REW=%^ucTbK0oMEP!&AEBG0|}{HJf1s?-!`Dk(JwNR!<1p_e_CVc184?iap)j zzK3_-$_!>6Y9^;H72v5m?&xycR?xg96tz>E*v0LS*<)#37qB%4@)m0ey9OUJMtL&y zo>&|n;e`SI*-ukq4-nnX$yBM|0}qxy#y$HTpg*$~Oyh-^KY1IzR1t^nI}&VN-7+@t ziWiy=FCwN%Q{ipzbR2%{Pei^-0MBtIcU}&mH%9Xz}9`Dl692|g5DQTIaYBF?CxKWwtG@(_S$N)WM~&mww3`YKN-}l&LOVFx^&;R zIVAFH6&!lDm-KkffSX$4V04pnlkco#&8wp=i$rDU`sQe|LGdO1d?p*h-eo{s^d>r{ zYXQt?7GSr12MvScxS_y339kQN0lyPBcSt%Cevv8j+hA_Q>9r^ zWa~dWlBiwJVyppUpHT&2O0(hquo7SE`b;p-O2(!U6-K*88|3D#B<>%6P@zLRi71(l z1E%+B{<+kKu5`}3<6J>*crIn1@q_TEzZ0x}o<{W3<4Dx-0!D7W9ku^=9`=m?iB?@_ z=xCl9yVppRXiin7ZyuZ>KkA;aNnEzCr(h!gk@XDhF4c!IUzVZlhz7^B+f8h?`@rta zbEx@KC7~lLMJ!a^NtS~TEuNABs&Nr8`ML*MNG^oc+XCV3u}vt&<))ewL}6Uld^&B$ zGvF;Lq!-tY!~WLE;QiPFW-LmhXT0@Eka-0Ca;O(}Q734*ABkGy!bxzZ2-=&E!vz`> zXufwRQ|{Ku$fphP#MV6|20f*;cic>}DJ&Rf?Z1pypSVJ`zYNy(tR#7fw?Oz+fB}kJ7*Dib24IJ~7Um08;d91L7+PP-xNsSiAG(v+PVe(AmKq9?=vEx@4voGel!jrxuWWrDyT+be2bNf_5 zq*k7IJ-xzi^ z9=4)T_{NppzRiM+_!@Bhy#Oeg6aqD=Q5Y6C!ad`s(Ugd@SR7ykMcF5D&E_@mHcb=a zqdoA2Nfo$1n+RIZ-O1ZMw~0@O9vCat;GD=+kY6Ciy`u$?rcnrg+y61vnnC1>V>bo` z+2GNpKC<4VoJOTofYqM}CMu|oHwFxe`oT}cIsXyKVt-Q;gMN5-^#*QV_>=>C4wD5h zZjuh3JOJR8 zn>H}3U{F;F6YD3^nrAz4LgsYfdq%;bJ-(P+97HUNb3ylQGU+V;%G0`fkA5vY12)YG zsJAiwJPI2wY4xX#Z_>=FPJ+!1cF#dD)>K)L9r%|n`6N_SN)#>9-bK>F_j~^VkNd;ty6^Wnuh;X513R;5nTC*=X%MH> z$njVjeMRtGPrx+2RQUF37dd$y;s$+{BKfOLEM4LTAL4hCIj)c={ng?8L$w1;I&LJo z2UM}@16$eefMO=6Y(NVCY*E6=m$L4dgY1K~WVg5$%{D4AyRnDx?i2$$y`UDqjY}Y} z;*VtZDu0&uK3C<5=>#wv<}#EI|SB%(&o@sOcj>P*+At0RvW=O6;3#{3tQ-t3 z_ksAeXf$$uM=wmXnOf#cQ0cOVssGaO@ovV}wV2bIb;kJiQ7XHVIt{~AX0r^P5*qR6 z9)G`T6jeX;V4XeQG<0PNG>#es(yFD9Gx{wn9}>&N{KD`c!W)W*SX z8b#$)^6*K<=Kh*efk)>>#)TaI(lQ|1%M#=&Fa>r`j-j22ayGkLWazDG689}Tg5LXi zk=HbWs#ptVZ!fCa?er1sO!aME_)6hD>r6Nov!2}w4`cJ2&8T*^2%q`Ov*Dd#6!?BH zew*XQxqBGW_VZui<7t7V9d6G_F5gf4g!$c;s9D^rK5yFiS717Ru)wvd=OMpW@UL2$ zqNFO|Tko}Gt+5WiN@}r9M}#@UNGEJh8(?7@g?{*HJ2dZ;#gaJzRQ&B0e9UyD@=!5S z?TCgUZ9QbYD$!cgavGC+XGI~nlp18G+n8N9qZWA~@3W>5wd7}!lwK|>^JS2&eKCZc`jONI5;UEpfh7iX>ZFMntNs!{)qkz{KuDE=F@Cuar!cUeaQY-Kfwqg&wPiadFjSP;UO+Diy9*aPyYq(?b*KlWjB3=n@!{ygJMi za*MAdQ*hbPaTHZs2uXh$arWWq=>9B`Mrz68$)9mFdto2!O4*EIoBqM;vUt$@Fphir zN1y%;Yrw0|;5|BC2hBLk(e%mry$XAE3WbJf}yBN)nZxN?C4|K@veHDLqM=^Ao z#<1HrHjt9N9=4cF2NN!fLZ^R)E_-*XC_D(Vf*a28MmS75xrY_|>yXZ)E1Z8~79Cnf zeC3M{;NAwq;YE26&KI&e^WAh($Xz8E6|#d3C+NqhW6;-E2Z}b$P*m^$Try+XEA7KD z{!0p;nz{s&b~5hFof;ffqfh#iAG3?|GBKxkBE56&flXFgz;_SB=(#)%-U*N@ebRm)5wyo`aGU5-w^>b4(pNUqISGD{xLOtFcjEO zk!*CySF+!skCmhTFf7aGwJch(a-pV8dWV%TGxnte`GVtf?Pk(&c})ClV;C~Th?ag= zq^+lhLCN(&WZiCtf68l_td*Wfc4-G&?xx1p7o23yn}3s{r<{%H7#Ccap2W?H%ENt8 z+SuuD43546f4lfGe*dk<4r|J>mvs}#bk;lec+YQ|eQO&H8{L80a;;q4&inXA>JQho z)r(&^Vgc3l^zwJYR#Ng_j<&1){^z4{0Nn)q|#JVb0M?k zk8{SpvzjqDgP9T6`u0zUoj&~m!ltgnz;`@+2)V<4+;oMFhw9k( zfpM%>B7>C;*(tc)zT%O~6Ch*k4)!HyKCRtRCGcIR(6FX(A(tlPYXh6`!KDhglXry$ zF4CZZqHkQ-$eFlqU~|mk37J?ql}(gZ9Dw7wQr;`ylj?U25{)?Wi)M;PF$#2}ka}&Ku+vH0 z=RjGJ??~P{L@xv#z0Sj_tBrVIXa#(6y+vzYhjpfTgpf|9^W6Fj}7JWSk&?!^i`A~6vo1=3$OXz#a{GN?hLE7 z&_sVZaXOJ{hL^@F31{Mi)R(VBCN0)jGWSPiP^|<_EO-npy8YamrKa@!T^RdzR*}p~ zW5{gZPY8^RW;ZJrTGyM5WBHjea5Cm0>(Vs9iQ52c{D#ny0dLWPZ}aK1*gdv-&`5}k ztf8MTUM{Zwd?fRV5>=3W>?HHmsHp;uogRy zDpHnd1V1HG9AEDY#it`>>y^iez!UD4e2O89K*`iF(6VKwL~#3ORUIUw!(Z5`8X2@2c8RI{9YL4&<}+^U8Sc(d zPkMPv4tFk9=HKyw_*hj@lvPsa51wI`_p{Nk;wvoeRHp9o1(+r? z4y|er;E2K?93<@H_m3{bW7F!YLhtpny&rv<*4>p>t*^T)509HoTHfzr>WUcdYj`A@ zSUEBaNpGAGw~=DS%rIh`BB==6+bAR9dm*zN8m9L`{K<=$KTHv%OSFW{bPDXzmgHZG z4OAX}u?8F`jG^3gA%7J%fxb9Pv&lwf_{&}3F(e0}nx7{;Yd>4*BJlSX_7`weJX9pM ze>WHKVk0{pcffj#!(;3B+EUCTHw>~yCWGJ21n@3+0xG52R6TAkUA*&H$PtxL?8_Ty z&Fis`w2 z>f_|{-SqvW56Iv<9$7VyQ|CqUPs0SOHU|D8)@YFx&3u6|2P)U2>WfDM+aC9|vAZ|L&7^MW^O65To; z58}F0X!DICbSlbazn|8y+oKe?e{z4p^Y{Y}o;}AY*KQ%b$)mq2cc8VPkpDdMFJ{+i zqKm}?TGUy|R0cgF{UblDrH?klR?BjB+y4Z1YNgQrTi>bDLe4rwYY%kKJByJKH(7vj z8eCDjNkKv5`C(<|q{$z`-=B9-tcD?F+D{d2UuVho&My&snnOf|1`gQv(+XEEih{jf z>SUgFiYorfP;BmGs*qjD;?nu*)50TuV7xS^T>Jr>e=%okmdGL5P z3LC%Lbqn2g@at)W>8l9g~}dDm93x)l$(rVS@(6Dd(dc{u!*Pr>m=A2P9vNf^{% zM6IMrM^lH=^aaORJ`180!>Raa>C*CO1yS&Vb=VczfXd!k)c06m0?hTJ z?}H;*N?b7YmkIpSNFGmB4}y-oZ)C?cU~uRvlr2T6T%D#!84Z zGoP?Zi&wZu-yZLMe~7pC9l%m}PbZ=iahT9cIa%k6ZZ9mc>BnMZ>F?M?-#~7C@KUy- zK9wB`JIB^}JcI!ur?PIlJcD_MaZ#W+em{Ah99vdV>FqRJnfs9cVcCvLjIFRvyPAu# zzXLxVW9Y7bJ;mFFlE1V)w*L}G|LN82r0QKdYB~)fK7CW13BrdOisO=w%Le_!et`Zs40ud%C(MnY`=@%0M!B8M+ENtlO)`b8pW^ z<0wZ{_CYC=0$hE-f2|d*`|^-q(iDv@&Ub~sI-N0z38f zN%=|?JX5rWjZcTtKvX)ltdXLomNNXYIt(kD?pe>>qD(ja5r;l^rJYV2&@=8hd$rdI zRbwo{Xj`<9|%;+h1e^o4uwH26w0-FU>Iqf$Mo+DKrWz@dbl zr}@fBRm^g~q>b^k@8nyU502s6fSVS^KQ}%{YfA1h@fB&5E;g4gOF84tfl1tJi-lwy zKL=k_MWe}#vuyP5bipxW!%TT~{7+(ps7peT%f91>p%>+Bq(T+Z>g6vQXBI`d5s%xxDH*H%{d!g%1Rv zZdX16N2np=XhfXm-vN&S#SdYEnkx>=!R^ zXu>qnuIioeLt9{D=xX3Y2QOURE<+dWqv6qw0$f|Gim#@Aqv-g2Heqf(erO$SbE&le zYI;&A!8w^zd}KkT{xivd ziu##4_+*(Z_WC8_Z=Z);vEgzwx^tMVkP^eyH|%)*3nknFbu&7?XE}xpy@=P`~J(eos3on{$ThxoIZf}j0!tv0QBmkN^i58xsX7x2rqv2IB7 zA@MJI)Of*&c9&Jq6x;SHdD95$^%kR*0lm=mP!={9B=Z|wGtpS~4wx)yrT3#0M0>{C zi>x+g(EDS9*w&(IQc9}h=hzm&!KPQ_xgwm2&DNvkgMWZfl);=rOImaOJ@j>KBZaV; zLVs?)z{q^acF!Au{J9QTsAU7eF7;fmz9;XxaTzA2tH9evGg>44A8fm-MqO>cdDlRW zDTZp1;`;?~Gbjbrg$~%lgQwy2k4=>5kqYN3uHw8uj@p_b4+PY}>Z+4oY`v@345ZuXLlnAhi(-;x3$1rF2>zOv0nGAhFz(Vj%JyDd#V~n1WejzN%-BM<@4bk9f0!kB zUmnAzGb^y#SP{j|2|x60WMk)z7Fq3|D&&78gbeTk-g8Ph^xA}hQbZPs#U_z~<967z z;tGt>%R}*jc<5L!WO5e$!kVdJbp3h?-1!rSnMU*Q!Mg~Mtr$Zy@Ay*dupv}4XERKq zsr1rzCl?sB5*}Y)CG5lY;pZj4`SDwqkbmwR^lVLGyZe*rx#D^F*wVvNq*74AQjdmC z`AogFcj0r32)?gV6dmcxX5-W%Fk-6#4taBcPclkkR<{T6^FvwmUFU&*0nc&S8!-yK z@c~cx#*p#4r{o}f_lj#YA$#8o*btw__uo0g>YARzm4b0--~XALY_kq~r}?mn%u96c z!ZN<8aSp1Dkc1&74j}PM9!IFm!3X*C$RR^u2~Rix-IMyjzrh)z8>V5>332k)a-d5` zC2YDL7a~9RBfNN%guWMNQF*#CbL0JKMol!j30;J!kA*lc=n8Ysu7g=wa`bjyB=}6q z$0NeNIoq`ouMhM^F$L{pIO%D6U zweSvOs>z}HDIHxZOMxd|CTrgGb(=UG8plI5nO;R^DY9vz0_M9t6{cN1mv0 zRsvJMFC?glXJ+Lx)+xQ;;oQ5^kbYDi7R1PjIs?MNb5#^N{>jFxFLgvGR6U@owH@Af zy+oPPY8nugu;9T-c&9-fr?p?kD;KY@!PY{~BruAe&)A5|_)exBu$gZBn1SlqmvQld zV-V)LsA|KX0=BYmBAlMP7Mt_RS-k8eN;eq>*QQ27N8J(T=YNlDJX8z%_<;r6ro-!! z&9vq7X13v8H2bFe5Mno;;$n55K-BRJb}u23>zX5j_kCkI9p27jqLf6J#a%Gs-W?q7nadXc>cB$pG3@G|qc}Ig5A15|v3bv22+64d*)Fd0w$ZXH+jovp3k#9c|rk}l^@Ym+@ABV{)=%_Bt*(R?JRor2RM~hDR9UNA^q!CYTGOg z&&?$1*_2ycuiFuPeE&W3H#s19nbO!-u{_oy?M7?QEM(UEb}-q8ZqRXUFYQT^2Guo5 zxK34_YKDe0Tx163CDzcXFR;T$&&Ehj8;Xm*K=NC6f**h3DSw|`IUPwSujhiR?Ml4A zt&@vZD&*=`tJ5)$cy4%^49cqt&!IPwlw*^bTj*`;mDTb#Pv_o)$`Ow_Ew>;XGJPL2 zeA@-TwqIf^UJ3d0#wk?_>c6qs@H^*F9)PX_TI{RLAX0lU60_ynXz;=cZgryrMXbMs zk-r69+DT4uq7ATsoK%)0^nRp`1Gv!oZNexm7yBIFgJ0(duGT(*jV>DsPD7j7gTr${ zC+;q9+cgmn_K)R_yQL^XX*e!etOyb-RO!y6Fxoq?g{Aj@6!rpl*|_qbpu9}*oX1RH zz6qf?C(xIcg`3lv{$}Pg?k@Z6Ucqdt7Ls+MHNCw28Um6R@Ifo9;JM^}ntno@bsUI- zI>%scu@j)uT~APbKMvhIlxe?}H$+d4CW#SiaItC%{!Z(INW)liDp#V^_+jj#_ZDvZ z*e00$`W6c+6BM_pU)Y$PF6_Ymp{&t2|N3o~X25=xE3<8=J;qO&x+)`0SIy%$A%0%!Ed0vO;Az^f< z{V#>3XR)@A?pT5jOv7h4%-@~?V-Cs)IlIL)NmCqaG7Ql+axP@9I?bMqEoCl>jT9s) zZgXg>J%tSCI5G2?+_F`(@Wophv|IClg)8bni=`PI^}NRvuC2naE6OpVI}X3q+=B?| z4_2{hDRAV-evtV-mBP8%81-W4&!Ptyu+<91>d$x-aLoH2GUolZ_l!tch% zh#F@6L4_Gcs1S1;{;Dlu+*db>KT*KERAca$#6gOxeo|S!=QKMl>qjR$HajfOXlqF&7ha${)F-Y{-bT55;E_k#v&azLF^=ampaJE-( z0d=PpL*d44*muy0+%nF=21^g{*L(sOZ1hkju9=zKS;dkxj#F}r@I87hC9#3PwE`KfQrf>8_`T*|X_k z<}H?FDJSxEY9Oh_0wd+p9Q@E5K$BJe((zHr>_WpCR@zsN$Hd!VZt4(Gvt2j5Q>tMK z_vWHxa|4|jJVd#@K)7ZjycEaP(g8!3qkquyVyqYn7LS(NRO)W>cOKcg9c# z^9CKFy_S{yqgk4Lj+1_N1k?i1S)X9=%6-RO4DYW{0m z3=3Q2M5`9;A*1fGlzsIg8I8_{a#N(KRUcTD&uq?Urx8u_Dk7IP?^#ceER1^dAI|?% z$*wQGMwwM6FstwnH*3l+_D;4Eng@DV(2}F5J79&K??YL~q>&`q%~;p8a??r5<~8F z!i1k=S>(fbYFs8kVVY~%kD`;5cz-wx);&yfT&A;9@nvwS+nwEd;Ln=E!?+BIG~89T zj%o+I;Xq*%>>lNgE3ZtYhP`gIV)tFvb|rwSYI->B9X_mRlq5c0??mVFwWhsi&-|T)NV-f?S&e?O%r@PX_$vW)aqZ!sAt&=$KwEeK{ z$3}cRDjKHEJrC?tJyR=IU>%F&am@a)xWaug{@gYLzBXk+wxR=hXw^d4<$QKYa7(2u zU2oN~pa=F36kyYDXJ$I3fI`fB*{&I4Wa96HW5=anmz^4L4wun!lq~D`cvN6?ouiN1 z0o;?$k=BJVW&+3g6?bNdz)cQLVs|$Svx(froROkCgn=zz(`Y-Y+fY4^d8+Yd3T_A;lu z_9ASu6nL$he$ot$IaC@J&sJ{rz&on<$uleyOXY>R>BI?D^;rwimOWw_%kM$M%JcZ& zFDq)2l%sP!XW2ue*GxCt3>I1s!KvA%6#8CMbnC=?wj*@})%pHp)1;zEUq6*{{@BAB zk-##!FDtMHn`z<rG3i5QR@k_pCUjodW72{xx+E`~g{ zr6B2IPmAPp$iL|)oOt$!$-lUc-vZm%)R9TVnHRu^yKmUF5e57^={|TPew;ry_$>b0 zVr;YjYB3cbox`f$&S#ge97j2$$)J5uOvvHSVcbqPQAl$gY7ExG0lyduQUA_XMdtIb zra0nb)1SC2O#)4hwDT}C4c0Z*u)MXWaO}zR>`+HGg*+b$n`RfWle7PV#Kk)JCw>W@ z%kRVlH)S+9Yzm7L29b7)CYmP7+B{!29aq;&VuY~?4jyerOWQ`HPMJ0w-Z`6A$asO* zjb3)&N0tgrPOz^sxpaNG8=2KvflCTQl@s!?t^PA-(h^1Gu|SrY56L*Zk-5qxf{V*b zuJ;*(!T(y>(~(t>I&T)9$(&FABVl9_VEP950ggK zssI|2lmT{DD=~V~H0U|IhWSNDS49pz51TaN;N@h2abDlUT-y!c<>_|o4T&xA$t0gM zfMIaUVH?FYeB@o$ePhF9$B;z8IvUs`2C63omf@!**uPbhUQAvFdw&HBJC$u{`&S$N zE!{zHZ3>Q_n+D;|#oW>O57w&Bjiw1!CU|Rp)LGNAeXTIVPoLHLWKs6OQf955&zOt?Q{N%S#J(zX!#2DCgZMRQdQAm2 zZ+>ApcRQ%*QxT3V-v+BEoIr;WAxukLn#ub0!RBYjLHh4n)cq{*@lNZ~O!qF9cq4_y z2M@vbx^+y=iRY(;wBl7^N7Nl)1%_SP?A>K~{!C9NdYq4EJL?vc(dL8$TmtDl-?k90p*B7!K#+CSEha65^y_%O>cAVQeD+#4dtx%`V7z2++q6Ejm zx5Z-xzP}7z%pZZ)_m;!EqAVtwbslVosZn#T8qK_T2Cpp&=49ga$OlpcPH#RQE&9SX zTr1{pT1Mi}ya? z0UMa?<7>R}R>o@TC*%Hay0}_dib?(UW;6dSqG$(CDE0rt`gBxSu#q*%>K8$1ekzz% zse#ohCz_{lx$4+~x1?Sn@M$8Om{g`4XuPh3SN~4K{ZV;ff2)cW1;+5BB%^rm3&)xN z-hOt|_AQ(=?uO-Wl-Yo95e#IQ?QG=WCrn5YYU##|j?9x(~-|C%fKQ>J0?=~!H_ zKb{^*HdbACUWLa$IWVoJ;k4q^GG^nr6kjz?65csmrvHGk$~=Mh;`5O+URna&AVYx- z^o-9J&YAP4e1sM2D{mlbQ6Q;!AKjVi{Tg_%4KRB~sA znNh!|b5%sY1S;(Iq7riMz(`tt;%jC(cZVbQqmMh+0tH%EO{+9*4HKnU2 zC-I-;Vd`HYICN_a1Xn;AjM%@C`X+f1|4@!>)c5duwLi|8K;kA!G~V4J3sSTSgs6p{C5l2%ok zm#Ixso?e$I;rtguPJO{5Q1TVLEEA@q^-wpkvXsHy!M|AF#blU&z?Azuc_9^FvWGcx zhvD(YyI{Jk12=7%jh71aMP_Hbm?(u~J_(y(>Jv$L{G*=6{3+)*blhUxilJ!QH-xm6 zQuvYgJka_ZNHFqOGrCl2j(k-L4DXW|o+HBpJG$IBIO+ zt;eXTQN_QpRC&mYsqDSMyHB~yoaUF(&?qJR6CFc&-Ra!0tuo*svk$T^Y{UGg(P%KB zj14DySZBK}E;v7mjjJ9Cw_d+x0oFx;uOlF9_*TqPJj8r@_u&@_8JmLYKvJ^3&t$*8 z#>&y-`F%o%`OuN6lquxDrL*nHXV)|Csp>f4@MDCJvp>V?GskerCLzbOGzG5tR-iLC zgL2g!DB)Tv_XnPl-YG43)?f!VREh?dLTJSG=&DZ7SIoL1kn-2pQg>S<%0}EIjrEEY z(slq2O>huc3%Qghd_yL>Okv3@Z?gJ7^Z1di5u_fUNsIRBP>kg%w)CSdSZ*v4*0t}U z;7cJFWi?I|dwUgq@2?_%BRRaiIuz5do(KNgqJ?-V?91w>3eKH#@nA`bA>#I zosdQSk>m6sP!Sfd!GM~q#{P_s&jvjbx+D)$LSPRtqrgAA}7hs95lvT`2RTlA; zVQ+Q~oC$gb3Ywvo|JHi2YP0pAq&$-HGw$IVOCwZF>SMNLV`0m49g6a=gu?G8hVz&DvIeVbEMLw5bqeLC(p#m3Jw6J=s9k$R;oq)*F0-L0jt zr)(4}86Sx8q8cv7PYoZOy$Ua-M4ZH4;s5vcJDkm3cRJJMf;%5*P>@RzOIS3QZ4om2 zV{BshTkj6y#n{VCMMeZkPuFviUdb3!vi~3trn1WTUx~cC0&w z#Xp6tYqmShGaDkfL2kn##VopQH5yk=+fjApiz^?NH-&DkO5!gHUbf#EA^6~?GuK)A z8DNy1;9vO8#_I!4FkJ)Qrjx;WS25o*EDau%-emr*30(et-zt^QgYcxg3@vF~L`vzM zyxaUlc4|Z#IX;TSHIu|`-VR;_9*5kh+-)Q$euLq+v<_x+_@}^a^&xpljwX&NMQFIp zuPU;F#DHe1|8hleT-);2xqGWDf7{T&lNM|rvYO3wzR5Nm=(JwlpH4kXT$u{$asHzh zbDm>Aah5)s>?dczDpvmGlBH@OV5=0HW9WvzOatkSYz^N7}M1& zfm6?wVZ-ZhP$f14XI~NFw}MGH!@!q{_omQSbHQzNKn0WRt6{^q7?vX;IMH*RxC4Dh zL83*S>))hDcNMHT#jp#4d&rfVuNAT0hy4)!^g1V?#NnK)DF%i=rS9zmq^oDi2Awft zZa$O9ux~rlSyfJIdGm1Otgq-5Y)E@5lF6(q9`6+U(`;8QQb?=9u9HLQWb9{V6lln< z?k=E-?GoIVcZLuaD-RkTD`?q;&v0*(4#bUn%KUO>;-25)BsqF2jffDVNNd46_G=$Y z_)|)4e^f}}*apk5*1|=#1c(l~D6nG-_`)+0oUhwN+VZcH?6*qL4IZG6@62PCTv%yHgSR)1X&yc}CdYfvbt6$D~wi81xBGUYGL`Obou znZt0e0m!L3P3u*kR$8}J;*-M7Oxf`Rc{$9+^U)b-b4!Z6+=ubQb<3$fOz0sQDv)(t z4Jtkw;2-2pgEoa+c-pdzF&AcgusQktQr`~O6`y-<8M1}!ccuc^CFG994<2x99c*|e4{K{&Q8#$5C6+&Sj zc<`GGog8iiezF(A)S#p4^n`AK5kH$A*zck7N$c@xVLdJ^86wQo)b$wb0vi z@4C=A%zDE*HBa(+k>BZw&MQzAn4b^a4np588OZ(A2Bi-3P?`m^Ig!b9-0l!t@Ngy_ zD?H2mYprpqz;?Z~Vjhh=n$0en1;dgF4`Ak~@kHNip>6#T7M&v{^m$&gHT$C2tGrg! zbWX<@pRpvlR|$k7JMX-%4!3oO!n|c_HX;8tgLAhys^`yR<++Ne^XCxDtw~~V>Er`)_@B2Arw-ulhZoAnf@Ey z4fFkHI;SbIX{*%ZX{&$hZU{9zRGuQOY#>`V)F%IEsz+yT~>5X3>c`P1ZJc z6X@!c-|UpbY0&;D1MMB17=L6JR{V;EFAqJSxdTMbI?i}TD~nUL;Q70jy=Z==g|l~8 z6kW+zvnebVr@7syNMh3;SRnJ9WdyFQlx|a_E&KrrS-c$DT}RQ-1#8*ihu@?v7lS2&N%J{{`?TDjKNr}{7 z`<#WpXr~>+C2jJCX^3Vh+@{u{cUYp`SJvTm5cE%)vY+9-EaswH<@m3s_|mT%DJV>b zUQN%V$14O!V$c*i8tsLax(d{jCq*7de(-L+!p>!gI=jTi;=9K>bo`Yn`_+CJJa9h*$#JYFLKh* z#tz1HV4$-n1H;E`u)vtoojr}N`pm>Rn`JRhW3lL_%LBUlD+|<5- zkQk?hZ8KlNmbx?W#I%sI@7UvRdm%U6{U1vg-WQ*4Rmy%lmNqW4V*i$yP)KtEr?h*q z(0@LNZT~H#ehqg#AuVv3=A7j7hepDXKjJVbZX#dPn8U7qp9{HSs=W6n1@iKX;B{P! z*+ut>Oifu4H%;HlB-9nyX0@ZV?57bOc3Vda_T7Q~rtTCHW5-(^8ccQ3f2>PmG_fOf zFzMVYeQ38v=v-_Lz=(#v7Z#YEbmxRzn>#MN8={LOY8HS6F3cHk8f%W+IKFmn2 zWA^_}vL|yi(avHJ@OOEdWonMA74O03eZkn}Eby+*_i(8>u8`sSwn|&Sl%5paV>Mq^ zV@~8DDpoSA@>So4N4B`(xZPtQXK@8uNIc{ zq(o6DR>q_XJqe-LxpN&z9=QPbqTdSdm=bQB5`YJv8gsQ%qS+-lYkl&NG)TX`$bRno z4Ba1yyB_O|N#@CLb#p?M^CuBEx@rj}|9ikr$p%r|ZK3xsIOs;)NTDRFNK$-#4xam0 z^UZFznV;?kbR8Q6mou~3$A6C8u~{2f-1Rit)A+F z6^g6PB#rbjxIZWi4tP(pxpKaqWo6V+)TD5DC^MX0w~fb{q(v$TCG7M0rRZ{s!&PQd zsD1MjH(_76kZqHo+Bq!{_eo&jJogcD2u|>1>n2QlGKu}zp+okW7vcHJv1Gro70hg^ zS&_;O+FvIJ2d6u;vK?38YTaixanucVB%>Ox>qN6L+kBbDC!{OQCiEU-==oqF-!NI7 zR(Wj{W|uFy<;jvZ^^K`jx%&s`tfxHs{%+tkrH|mxqywW=REH|;w$tkE8zACzgUd-2UfZD0sE(sz+F=G#E;F9 zyz#o5*!U?B&sS%YeYY38^lK%l)}6GDvf50Ve%GmVRW4S3kq`|`+s?ezuHfU(PN*l$ z%u);X!GyJ2@MW;z!rpt7Z`KNBjmHwXHfuRMGxy5amo5oortfWQ_Q{g-NY3v z$jA6S1~4NooK~;(#SQf{utV6rrNqV3o{lHX>`DoAgod&W8%jtobQlE;6Y=c>Z&>fj z41T$JG21%M7vd|wg5s8ET;v`Da(mUtHZJ?ZJ8s&*o_W83@~J~{*S1!6@9iiKmX}gz zGC|^V5w~QY7$%lE@C&p2+55|O^h-H{TuV~n$FT`$_+K}CPCUys`YwYf#u4~ppA1ZO zUxRHEkAomsgv@F+7N=^8zva8A@qj97w)|qHLwA#3k0Dll8jh#hFL8!Kob}?uO9Bgb zGM#PCrz-*<&mu{KT!gu)MSe1hDW9XSGY5-;91qeC-`&)#8%+^G*=(==82U2Uish2EVDT@a4fyN+>!_nY&bRYJ?88&$`SNIC^2&{&*NyV_tDHSp_C9 zIE8aA-NGmMiwh|hm_64nq4@0Kl;mnj$+{wWYIb9L##WRJ6qA)zcZ+^ zp7`Rg0t0UUF1TJ?hWF#!plSax=2$*dbV}nWic7oGkTVjZ-mM!j^-q&9BOI|nI~&kC+M zGtyX;3?}NsDA{{0j!H8puR=vku8t90kFGdbq8k@(I|TuQI671`jqT4;;2+8_#PyL` zRM#<%G@VmuW}rLHUKj$ZPZz>@Ls?-D6OO%e2Eg)s5%iA_X4}k1p=etz?o75s)p_dp z_|!rSzaiYWwvNGIdt;m--O57Wr+`UtG|vBA3VKHM*kP2w*2ZW;(DKtrkrPNW_A)Kb zRKUV58?ev$HG3`onXg&(k&44~Ai($r+$^l*wv_twtp(aBb$AGsSij}?5f(Vp=r1jO zE`z0S)bPxrFdF)5DI3#PSEbS5MxU>%;qWugENikVOI#O3*Ah=Mefc=1J?9K8Z9ho) z6Gx+(wz`d7;AkOF+z3NotK+tNgQ;rc1=JK%rMK>~H2s+?#kcSfIQ=0uc??E7rwTAO z91p2+N*JRx68Fs)m_MOGg7>rnL#|h$)!b$flD}x}`jmZj*2eFFGck7FS{kf!1AbOb z1y>(KygY0?Y>yZs5}711hX769`CvEGT-U>-KFp>hqbBa`{5ocm_lzb!N}_9HKeCy# z^icYXG;E6;Lu}DK&fDLN^$oXWIUhd3(it&(@8Ob z=l%W{^gYPL#S6sfOXO)(d@M`zqb}206IYB&-H8K9d$6Txu+6WHu5>o1A0F|J^xw^8 z^lQ%pye|_9m$Y>#AVz~LD=TArmt~Q@kSTop;S3v`IE0ptBDmo;mDFX7X_Lbxd}O+l zx_!#o-KE|*^o>`Lf{!oUJm$`jY=d$x*ilkMnikXHgB)1}-YT8Rt zY~wdpDS4gVH<;3&s93B!S&78w*EfdVScbFjA}?5JISbXt-I|toek^I< z4u#!9k7DKQ<(Q|efsKc=Y1UOSoc>x3`-=`%HS9{F?55c;(ACf133&md|7fvWm))Vn z&y;d{W9VSwY$j$PnQ{Zw#?IGIcm<2 zz_PUFD$Ce2Y)Fo$a35q~W|<3{t~J9O^Ae`xqDYTs=+FxDttg#rWb-mw+6Gr{;*$+t zTfb~J#Ksl7Fz>BAi4FZpYqFU28;2OKaDxtny1j?W<)27xcrT3e7>oLow;@jc0ZpUN zg6*yJ?<-stwba!s2*%yJj+QwX!VjP%%6hln1}8zA=4oKl<=G68)_#m=Lfh7w7q~ z>ysRA+#k$mDTkBy)&F>BgE6#rK$t5nm!RFX{bus&dS2wi97K;(yM z82CGixPQ8ISIPv4!DkZ_C zthPs5$Uj@*2Hp@8x>JEu3?`>T0I4#@tZTh3dAJUTiRoHcYd#DwX{^V&^3pid0=TT< z*DA+b3jC4Dg2QZd4wIdi19QGSXHSoqDkNUxIHpF_c`$Kvt65bU{L&eqClVWVvpr!zu{!ldl5MLh?{um8*fUJSq+ z_5ZluT1}fQm2#f5%AhqT^r7s?NNT-i08!Sp#QR9jD1Zwze!zWtiKA3 zmuI2q{Ur!2cfsW{FRlOQ>b%2p{=Yx2A#G_ZS}J5UjK=$QZlh9>70Jv=5+dvO{{H*>&vm&jmy5f4opYYg$D_I?A7w%=!kO*H zSS##zWObEG{p1Sa?{O2H6OzLh=*x&A+T~z@?kP5Cct5u8O~bNpSzvL;lE%7bV)OkH z5GNKx`%ojn;UtY$xp3Tma|VbyPeaz*&0wN^n=MJ!p+*%`hz-_*3tu!*Dd{Gt3O%G&Qmq)m)5ejk4ZR7@MeoGS+?gxI%xlntz6d3HC;XjMeoK^)y>5;zl5j(MP3+vHh@X&t(df&+B<>Q|7J>?=W@j8YP*;2G? z{}|kpuEADZP@z3pTEb3!Da5Sq6}nIR=v3Q&s@}>dda7_UTB6C+FIn3mzl7P(_N6QP zQrN*l1@OEaO|tK|!l1Jv7JJr#-5fR;B_|EwMtl#z_amO7(XL7}qVuqv~^boezz;Omal1KUH)HgF;2$L*k* zvH`5YMh+_4_K>;x1GrMrg&xH=Vx#q*)OBV)yiqGFQBYR~qmOPh#zqy)GY+vK^HbnI zS!HUU9*nCq%y{Lm54i2domju*0nW1i$!7!_i`*`5V%4Un`H-=CuTXP9NFOlv=`T|b+ACT*jOudndURx-?0{xb}U4Wj9v@=&ft3p_qez_kN6Q@&+7 zXgobiX2M(;)+PLTZaZM}@-7&Ze*}&-7{T(g#niF?DU&d}#irQB;8Blwx-!m}4f2dY zp!?j%P91V>uE&#R0jy^8N4x+26Wi7A{mhDv&9nQIEjSEH>rmDTAkk_I%Ip;KL&7_{ zs_!DL7rMU+OFf`W;u+>Ikiq&dPq@h&+c0-ZnB6(e3U=vD9R+&Ng!!fl^l(k9kk?+s zhlR+|)K`f}*@RKLS*4fUx54DC$GNP5bHUShmf&2TO&h<;h+6i}!7bkhQ~i{uIKnNJ zTuO9cVs$MOV5hX9#TAqscJU+Ln{wLP7JRvV74}(MW4e|U(Ai%?=5{}rubIPYt)nny zNmeOmSHzafZy+|qi!a}xL7^W@n9_%h{3Pi_wr{Ex^eEki#pQ-fc1Z|}-&g^Cx|%TI z^L_67zYExw9nV3r2)(MjaF%5{j+H6q`fQb{bF~K;PBEdy3sgJ8A}=n-hPet%)8PzvY49uZ9uQ2gOedC(*HFc!qCXUA!RYO? z*|^e3m;5t7Vt~wYDj1}M*XBRRF%KgsYHlbCjhYBv-V@-#lMAR*w*~LqsN_`wqv?s~U{xd~QC4=P%<8FaL&s;tY5`(i^{JDbl^G zx7g1sr#Tm&z4+ow3-j=eq3kWfzqNWeh3}e*o$m*e)2m3bR*fbD$wcviOhk=xH{{0*TW=#cb{w|~DBk|G4J%j)0wXU@Dis-~#P0X;?;8p}?vYLI92=kaIA%9|ZG(5=3fu7@g;LM>E`f}Te9;go&vJIVRr)&nGL52$Wp^ z;@c&UIoJIonN>qR{##ap$7jmoGzBM!zkCKO#x8@y*B;}D&QY+;498E4 zU$HO8ySSpx3K-Zh54E-&#nI(2;9q+tr_q@9zGA8I@nkrnj$7uSPHRrT!2@}g;=m;>bgr}}R#PEQ?9CC}bo5izvtp?0y+(qd1oJTW;)?w%7EI9M@7UzFd19bP7 zF_oeK<|*8V)+R3HC!IZw$y@YbwuA(WInn~oky_Lka0cTe?r{sOY^X)f8)Wid;I|FA zq@{QYF1bxW_sDH{zHK-~ZhgS+m|KzGKTXk)0ZU3vHeMv1uskwsNU>dM`;pI1?7(x6 z+eN+(1rW0T!U_>{8=7RL<22`_?}i>DECs@8C)0(%(j z&c1d%LW?u97#ry*co&oD!j^b|(GINk-BsFQ*=Xl}+>zOT_NUt82_Ub24StR|Lgpd; zEV$qV+0Syqcr#i4=X42ryjB9zRA%uKw18{|oPu*zM2|e`I9sL$ah6AgETuWFF}!cr znyWzrz6qX>gQMvA+H2ImzY@Kpc{Ghq!9!>CMd!~?g$36yVP@1Me7-CWo-|Hk$-X_@ z2B~&@a@?G$J6_<%IkZ4vw+FpR_hUXrRh;z00y_`wttdH8PBe8;8V$KRh2BMJ!N51w zSn@^=_DWs@gNYUJutCo*&O%Y_I5?m0l6W96el>BrxfF&k3g^8$7t>ga3JQ@}!Dbr7 zkWAnVmbC6GyU4mY2_1Lt=k?dPU(X$6T?dGFO+5qW-#n%(!kj%saWEu!?E)5X4f?Li zi0n6oV$zd%P_gr&ej|e5lQ-E_;qL#!V+b`I`Nkaelc?#VFrW1XL6h%Ea0_GbXJZL1 zl$%TkHe`d|4>KBd!W>n?y_oBn!=O9*3dIP0Wb-^z(dZGmY>?GxTKH!o%AAyBHY+V@ z(6An+6;}aUMi^t*xgfUZ;3`Vrsl;!vGKS?WkRJU~!C;>!-19H3>@&TgpE9llyRKvK z7dHqmdCK~Bp1>bmF1O>oHnl4zbB@lRaA?L)Y=@}K zN*6g>zcW`2RGQpIhi!+w=7<`Hxa`X z?=#nTe^I7tD86zz$N6;~X5FbmXCTCZzM0>qjp`XND|R&%sthk}u>Qr0+a=+mNd|NK z+KnIhDFU0uMCe#|;+E8z&>Q~|k0gwOuX}~;{W)8%`*A8t#+Px?+FQW$UKeXHypIoC zMp2=81G{OKj`1#?c-T6RSsEpxmfuDEo{~ht_vS*3Z#pF}Jd1K;RX}xun9dnoqV_@+ zF6#1rjPEsN*T$vNCe7u>Ew%)YYn$jmh9X`0{D=QCL(Cip&1NPSPQl9`$C=Y4fooqRfhu9gnUYE* zIURAQ9y5FP`|DMFlsOn&3LCNCg`s(I0@ZAY;rx0s*!$iXc-A(I8UEPDwf1jA^@;`@ z8z8)?W!u@#vTBq+!`n@)lOs1BVPD!bgy!z~%amIN!})T5`~+g&ZlF9{IW-izcR9kW zy(KL3-FB2t|Ay>FBpT$Jl0(}r{$JBLxU77dE{@A!k9GP=FWr&ipKRdpQji6eZ1~0I zk5_@5a9vU>G^KQlJkp!ngi8(6AZO%FLB4yLEuD6jJkC#mJa!Ih2VaA>woka^nmJ5s zHUKaCNZd2vAk_RCf{DgwDBo&7&52SGckJlKNB(jG>qN*G7R{wB;Xa~T=Zg6=AL1*2 zU&cD?;pyvs?4rvoNNqV}DO%Ipz;-rHZ9J8{jG~sFJACk!I^MrRf@1C`(xW8?rLV_+ zWYeGA!wA7s)3$ga_xaj-Z2w`#CO9s|ta=&PZnF;>|7_!J6l?R$bM)T8B6YCiE{5iG{*_fdYmEIB@-d`_#LJ)e*-QzS_Ou# z`fy2zGN!kmLRAB0hz{6?JG87}X|oHI3O}Dq+AaatkjS}4=RtgBFaP06F={8raI!<{ zX_ZDArzc$x?`_S5JytUAIo3oDpB14q+?Fm{B?z1%H?U3kEU*}C$!z%{Y@g`JiZ1t2 z?01HxGonhlHzQcf=G}PEa1?0|Kpg8?&2>!_VZ%FV{D@s82H&)~z@S8o@ji_Q`hLM* z4N2PIyptarvymDH3Rea8D5OOg>-PrPvqj2+rc?>s@9sHszG^ zuaM1?5_o5Mf3f0399&Szv%A)Mf<4WN#dzUXpm-z%9DMK531=bida#K@HBTln>>s}D z9?c4_{>Os$c9gvRl!;Yu{_v;9WYeL+7f^p*CY9WbCkwMfrTPvGTs{gcalfOiQGY)C zUZM{-9xkJXt*^NT-E-VE{omZ51wytF@38li)oEU5808k~ zd{&>U(R+dGg7x9cE+prWNLuzL0UZ|mLxJC8&g--sJ1ykee#?xYl~EbIy-plWP7=|V z_hXs!xy9i6v5D_|ypr=;9K~-nXk^RTU~XxmCj{!sf{u{mYit~W)xKIRBk3%icR$Ys ziuB>T@^Kcwbtf4b0#t77-3E-GnV5{Jq*<^V}2;LRr^+sF2H@V8j-IDA!M zi4#_mwA_7^UAvj(FY78b+9ZaWraz1?t`^w6j$kq33ntVq6!!kP>}$t8+^}8)M&CVx zW6!^2A!B6t+q0I@QPo8(XuJy9nVYj8+ts)g>x693p$BZu)e7_$vaTy#yqHYy8a~`5 zjS^?i<77#+|Jte6jEX1AGUZ6`O8@#k`eL_ zlkQQxTo%Z=4X46z8F6LxF?LvG7O5qLGsi$rdL3bhnUZ^Pi1keRc0!vAUgZbre;&~8 z*DK+a#}X#7sgG%#uwvE@wzMea5Lj+D!0_1LrC%OJ)7pcATduN_o!V|jZ23@5MR^6& zY&b{VZo9~={v=*;tRYSBGhBOYJ-%=;C$0U-+>Z7BY*p4~{^__>2tIudo01L08RsL& zCCCP!d^V$o)2UeIxsuI}TmXh6?bwg4k*Ia8pXT(&u{B{=@J9bImg;qb{r%L#Oiuc< zvnBHcw(wufi)}`UGg7Q0V-IUw7saN}YsCne&0O#|57xN37M=e-;3Oya<2Ja-o|Ole z#uPqav4654zPSY&&aLMHwPmQN;RtCwkbo+?8({l0l?Ii&!ld~L#MY?5?3h1x*R9pi z*&zaSYp&sxi+vbaTg{cs-a@}$O4FmCH$iLEJi4-A2>kswk$cyCk+^UJXsbI%rQ27- zZS%3H{Ae}R43}a(pZv*kU^jD-k%60@eiXeo6Zb9+CKJD_+|)rzG-S#mdS7Y7hG-;U zc*iU>^;iM!4}@;D;C}n_v;vCPcQMUIPimjrh?b3azD$2aeVqRT_Jd=%_^l2w} zGV~<{+Kh&`OOJqGw>oB3PNu>WZ!mYXwK(RB0`=Fe;4hDw$2!(3V*2!K5XI-S;=4~- zaHAX37^}e#S<}P9%WPrPJZC)8p36-dIE8!HI}PsL_`~YwWI(gPlC$s7f;u@HT4v*D zYbEPK;fCW%lm4c{oF&Ql*ykvIb{hy2PFLbCopT^SQ0yr2aR0;pf&cHZRUo- zVuy-1cy^Kk*P{KB`}1=fEA6^O7l+G=-M6>$ONZQM2IJ4LG{gJUc5W8v`bELsdIpXU zgdIy{Jk7Sq1Q&%QvYr@B9xHWew2>)2jW&X3)56(J-40s){2@E%XhNzZN-*9jhoMa~ zExi7SZI^VV8FLfqzfmq&|LHd5>xQuPEArrUa7XF+z^C*sLXA|^4}p^3JIq=X17vFs zkFL6c_wxtbQ!5iT`QjX$xJeWD3hcdT7)@)vZAH1Y~2{-FT!t@)X&0;MrdXNoY%r$*z4LJFu0%>}ILEr{EcmgH-8lb^ zE-Y!rGkp8^G^Tj?lI|Zrp`bpGv>hMg0n7iW?U*!#p4<$lEd=OLQZE~IS%I-a3p%4V zP&_UmnFf5Hhp*#Z;n!0s@gOvXc(D_e|4 z7eA~mmStt!W@jDma(bo6cb1JP{jJr)MsurCZNOj7cJyIfHESh1;bh5%T~;Tz%e8F! z`6k9$DZ$nm-nhor2zPytW;;Fxfx`V;+^67djK6n_wVe8cNt^%RPK&incYzSjo45j| zMc1=s5)l~PUxB&)CEVzj@{lz@gG*cUkhw2B3krT_e9Z0^w6G|^X?YrWUC)!ZEc{{j zEc+l0?O6zkDZQNPqCL>@z61xnm4^t)aiH;g2u!^<5xmnr@;fe%X6{Wc;5+swe_M4o zO#Pt)QkvmhhJPdrDmRDSIUAtmd=Ou6oB+4AoS`A_1m2Nq#Wu@vEaG|x8+J5}ZS$Q7 zdFl$Z|Flp_)jkBT)b`<@=mF6A`6FvRbD!JT|AE!XPX@_}$3Z*m3KY4TfKJ>psO|Nn zjpv8L!Y8%R(a2p0pAP4L+f&v$2{O?SW|>>fSkaYq z-1g`#8oH0A;e8{qzBB}9g>sO2TZIh|*pHI?6WGT;lJqR<22@n_m&W@Hp~5^fv>iMR zMvltEl;*8$q-8d^ha7{HIg{{!kkow@B*D)7Z(MCp2s)4q0@fhk>#@V(dRe%bhqGX&u~63C69YQ^)t77=x4r8{|p?eumz>{ z@0p8m>?@mHiQ)($*yU$Rl}S3hN{$+-wr%5o9aE-T5mVsHmI#!+Wlc#vhV(-+o8`Th zhj5b*obUMa*f~uTwv0?ci!f;c(s>Ya98KVfZ#kFS97>KugZNkeM@r9K)8_Wx55n!7 z61#2d!t|`v=}2Zg>yMgCo67HCgCMpqtB8>oF;g@5kd=QA8_k}I4)q(G;Df1h9BfqE)>gba82)AQu?xl4Vxy* zE(T}Vb%fZ$Ujd3TCYl6EryEvH*C3bYt`J~uN0WMHGleD2)H7x*70yd1vsJ>^#KC4q`=K!hz~gH8Zu5g!TJ9n5ujatM7HfvtQGhjmtH> zHA)rYRQ=hN_bI~X%Z2ZZ$>BCzCNt;naolRRfv7&Dj5!Fvihx=*?0Xo6YAK5ZnTnVV z`L&ad9F;>;y~!~4*asGw*21>@n@GV018GxdHIo`}h7HLxWT`q@eA77(Fcu!=my)+I z9rL%`VmD0dS%uOh$W%(@ zcaNCKB1by2n#0rCDPw<5VMG(Ndo}~}pIzZM3SoFxVE|hZJ`v(59x#;ww>chHu5cvX z+lTO#UaZ}x!|Py7*CD1o^cmVjp2T&++1vfeO(tEG!~A2d;ilSmHb2#ov4RuK($EiX zPYQtx3M1HLscfd~Boyp41cLuV%aKwrgI2>I zI1ci$=U~n5D=hOrRVZ9|2pj&BM2C+V%rZC!6~a91yuzJmz;Pe8wbqR}?vj9oHbRle zSq7@UcCwjcjd9k}x0o;>RuKH?!`k`Q7cOF6 z!4#4@+l^)m%Gu}1&CF|94BKXKuVl!}cRVff!@#=M5^vcBkRTn(?pkHAS3*gzG0+~b zg%S%g9nW|U4nw7L-W?b6x|SF4Ug;+Z{381Ze3B?Obr^9J(6^d`gyaZ(V~>0-_b|b zmf0;%!gXC~FgeHpRXrxssfHSq`J)G^Dxq-yrK_D{h$Zb*JU~J3Hj7+^O|Dkm3Rw8V zg7$d75iH)CqAkCckbH-w=;`n{cpO^CmK8cePIN9!Gc|&R1#9q_Tn_|}o&vKQT*ZY) z&Vb1F6d#dRgi`!1YK?FMM=vEXv;D`Wd@`lEs_LThC`qvPZU>#bxoqt?HD+MkNP%hL z>{5r2%5~{sUnZy1Qmc)qAURZo=j-$hcMt0~fq-v?9APZ3M6O(CgZbuR8uA2SY_ z10HWJX_}A|u)ZcZ3oQoUbdAUr|hV2MnR9t}QTk zs~L?Ht}?*_S;A`y;}cCrL%_I)^l#KjIymzjGqQ=aTbtL0qdB5!l@nl3@O7rNy%>*N zHlqW6?tB7&kKG!aNzVuBLQ$qUWPLZGWh>6|K9Wjokm_&de>W6*R!*UbXY!e(jst26 zf3Hh#Ua{97XOeB zTLBvCZ6#LbGv$s$P+T_}O0_?+g;n)fG^U4*iXA|vEy4uXD#imY_wifwDO~A^I3NhstKQ|IuNb3CEtw*6>Z7P;+ z&tU2^B&kzwHvG6B&uQ8o$7WFqB!4}K>zviMK%29)1Y!C$~e?%K@xReAISLb1r0E34;L1nV6j; zC*FRh9q(CrFw@PUaC^~8PId2jT5VHCf5)AIr@SVVUzUQ(AJ^&ER7KpdNsX%FO0fHv z1nFNgh9vuQsN?q-9(Y8O$;z|jtI*22B!b!L#+CfCfE%E>M-^hu#=_+58K8G=vgi_j zlFhN@DY!*SgmvH8vzwk!QY+9^lB8kK9~-PLmV?ido9L8~o|r zl?qm@{HHc4N9eOZ(x$L#xnK~Sy8za2PeuJY3koc+r5)>rP)+PHJf$wAjvNJQcd8|P zn-t7#n)!fj8g>{z*3@u|ioh*@s(v9 z6iaKN`K4aIAv>SS^EdJ4qKEisixn9U{X)SDkD$Y$uTb+`0py0X<8--++@_b~Av+~Z7`BR-vvqn{b((%DA~m8Jvhscx;2k17MIe_NN4)3np(2_&@c9JfDOHGG^41; zahThbF32L!!!flCw!E(bX7|UD_kRQF9(N4(R>!dhsT@|*mIbRvCvXq%?dNM1!jSt~ z3w@6ViBwnY$L;?j(A#Yi^!(~zCzLGs`vIe=p}|Q=ixt9rZ*Mvl@s!(KdloyoV<=He z2Bs_=i+2sY;Y45)lX$n1v_Jo2pVvIbvzimwCY5GDnJd&KEerE&yg_1B21?Am&*@+M z$X}KDjr(MeQ2yxMSllT1#1nNzKYA)zD}G?z^JjvumtbbDdc^|NN~q_VAv_62zX8?8i>glpWom=Js-Y&EW$CDQa7!6MLkn&n_4eF<}A>lXiE zeJj$rvkxTE*e4z2`h4K0pU@^>f1E1TW$~#3RUk$~QFLLTF4GqCl(%XMq{=LZ2?o)a zur8gfYxaVXq$>SB5yeM85iH+sM@zm~C4-m?gB{QHS;}y88ZINtoxG<E|D;@ zTljU%F*-cglO;Vj7t(L}uA81F+E4=#f zDkp9jjw$uwY=h}E@b+1XW+P=`)UzszI@4|EqEXHyw?vfcc|He=`I&6{s&UY`ISuAU zm7)x114>z4qzb`kKUJ2Uny*7Yg9n46O)3AnAf7vvE&M-7KgXiXD*_SV64!itJg5(< zpz0Ak?hrH3S*FX_Fdlrb48<1w#f;IzN}5Tz41BtB6YFCpni z1pG{%CfH}L!ZO(=iacom0rUOPe(@$+Bn;;>lBDsKk|$?VXbB}NBDtjz=Ay67Dx#!I ziCkj$5jN@GTyko;Yp1s@maE=TLFOLSIIJg#4Y?qRck_ZleyNhUNPal~t)mUJ?YFXb zrtgKiR2-YrVP0?G+t<=uKb!$ zotLs(YJy&Fw}{s?zjW^h>wAFQ@4=* zV?!qKe1ecDwBamX6|sjOa!Rb;rc+20I#goJfi1ccNE$E`=Vjf(wqPAoS*UT5;z(jQoBMADymYhxe)rP2l-# z!hvI4=jB+M{ZEd5yc!HATXWg0H}CCwVzns!&@E7rnGbcdUa^B+rX-IWgzf)%I6dGb zt6V&bG|o$iMc!9HdDvR|@;SY9qW=eWSVtWU?ih-TW+4B#wURWAV#LpaR?}1uZTgWr z5H_~_hmIPX;pnzu;^}|J!^_-ppc~Z%!yN)(XGlbF~mm`BKTiIv;N-bD3X15#V$NSpqf`5B){#3)N@r&WEfb0p4&gOt@l%C z+x2!%@8oz<_3c$~WqcLR7_}J^NA~e^nz!4zP8LXqPzn#ck5EwYDjE{LgtX%msj6lV ztS?9;wTdwQ^`-9_3flH$(Ae%WV2^ca zsj&yvj=aiB|EN=8#6tGcdJuc&`J64(KfrvKgmII{?xDJ}6k(Y*n+;0tdcK3Y~+Fa%sS~;2)$+vTk*SjJA;2}tf=2(GU0UTW! zT@rQc6#EpcES@rN4x~Oj#ZTEkk~w|w#VvXHw1B`^TzXj8~sX#N+ z`-zW74<~+vB|7w$!a$+rl;r+_^#;Y`<(-45^8Q(fFtlKnPj-_2EPqD#KC{D0f}#2G zP1b%ljs8m*EGmh5O8e&7VX*EotRDBCRpl*Xy<1)Qlw&fGVn;S4SVFSCT90XI# zbKpxw6xP#+lGmGu(YWD}8`LJ|BlhTGb91xMgnvW}1Dsgmt8b{4{hIrC_bF-{ zuLg||#<*2NQamMa2XhqWo?)K?*tHp(@qd=^kFOuJYT4qs8Nd;@XRYLAJ4aDMC z|M2Uz6zcu<7B3$*r1x$P_+V)+O<7(8;j(eyzN4A*o3Bf+tIy#u{wAw$$rmo2r)Z#W z0v^vg!ruP~hiA1HaMj~sY|N0!^k%I-TJ<|rmlfo!oYwM9#`)ItkfgNhPLiS;Q`GFo+S=%}zQSG0eo24JzVBEh9c=z}Pb36Lp_QNDwdUR%0UHIcGX@a~lQ^il%m< zk(d296I8P{vbfUUta_I_4c9qJ9WU3BTKil)kT!wtA2EQWT7gvHod(ubzadx~C}jFk zoHV19mED;ES)b1_$DO)(GEc6w_Oyr^>t8ULI~$?3eI=zHS`8C~_j+>oP%>RDExtKE z4n7HV5mkYb?loZs?3pK+jJP!BR{n#ni#dm*4bre6u!C(JL7ard8FFZG5*wd$hEc-o zw5zoT^a@h2q-#6g9ruJy|6oP=vp(UD?0>YrN=a-O83!+#hKSpu<4}I(AyyC#b{6`{ zcE6gOpmzRNnziEtW)HXyQ#>MZK&n7oFDU@8$E(QMemI`dI!xM$My0%lkkCIoo}M(# zplQ9^pu$WA#MOhuRv%B{+3d++^L3NZjF`{g%$dfl1OrQ?W-d6luEB_|0(j;%kKRTv zhdY%VeM?iLh>;qk5~eM7THwXfL{3!wD+b0C*Hh2}28Wur2o#56w#)q?oe>Ce>A5Q6 zEw|=kX^jCle&- z44v=^`(vwt^QvYA@1vkO(-$YIFczG171o$O!!l(bFiLQN#re~iL#h(JI~vbk%sa~h zlF#C{1rkClwg87xJZ^gt43qliQ~Y}m(zNiRF^m1+)RHggKOu-7ov?wewcFTh{bE)w z=`UEyvmj4yHT+n=3&uWiXE(Gf*h`~0%9wkSfB5GO|Hm{26e7~Fdv+`-uM5G^mRIPW z#S&PhRu2h^>p(qB9d!B>Fem&wJG{;n?2nBQJ3d{6k0ZacHMYHM?*kXQY1KvXs|whE zzq6R;{HbU^=LXANz{fGUinU74DWpGvG)7%cK0h?DLiVjU|(F%v!4Z!7MR4T zepp1Wi+0hmO+!h)Et6-?10m%N0M=w`r@x-g~wBg|yx^STkzUAt}hwU3sYH<++ z9Job3)d`S&Z4?aET})S-6(}k06Pps906%&;%Fi7{k346H&fE@#rAwxBo7Il9!5;Q} z@au>CY1^+fVSN-FxS0>{{WWNh?no*f)sOkh|6%DYFMj9Y%k=9~2AbTAqcXoJmiP1y zy?vX{%|G~)q`2ki+959xFvfsX=vEvte<@w;j6t2_Picuu0oQa%0>YjY!rsTVY=`AX zE@j1hm^cFHMC)~Qo2me@)q=sXIvxBg7Sg@%eyng=1$AY%u~SM(pnPcsY!V4X&O2XA z!&JJdZ&D*pJtTt_+NaqLp-o@;E4TF7-F*0(T!_UA0;To&bQ-YRoh=YZz#9_h(60E+ zI9yMgioCTU?&U^UrF#hq=Fep{+Jb%CFdU-UtgnWjyH|`Fq6a~=P6Mk1Qlalz_H>WTNpTuR^+@zsm-e>=<6M{_WjM4 zD+mOFuR_Zz<}<%;jj(?lbc=Sp8wSbk)6phGgPa0Q;nvktXumWJU2~_ve`D0dr(XA= ziL^jwIWU8N-6%tP9v9L5@IiR&gqW~>5)KX*uFXb|$;fOfjxfpO(miIf3#!^|?*tXf z+4~XqDz;!qb32!+8Vp~3t>~iVH#Wnq25;|P0F}aV=0mcCsP4R(C{V5$p6}U!%A;dS zZ*Go&0c$-$7b|geqA5ho6}T|bDkAqciD-JZ6(Vk&gr7|}NcpagC{^b+PARseJFg!= z*_JUPl~Wv?`ex0p7`%n8#@Ar|j4J;8#tK$9M^)V8Aw^rdEeI|Cp-Y}IM2qCfKB^4f z37^}Ur#|7%P9<`>8AdBL4%j6uh~V9&bWv*QDQXrzJ9jV71jRWWtox$^r(>CkhQl{O znDGLnMN44*<6dt15h;Y;YTWqh4m|YxigAHI*soo?LF)Qh_AYY=|55G;GydiQ`+J8` zu;V<~U*F1WTBXze|MaQw-9d00A}`9_@|+Fs7Gc7iNJx&$qyGd8vDTVrIC_wlutSid zB`bu6+W}o>vNnG)D&Y{Df@(31=hjyRj4gi{$qc1`;lT2G z+PQeBXzPwV{^bNsP*$1D*UnkO!XH+!>diT{*2ow6Vk7u>{Qz`Cj1Vcrb=hXAkD;7b zweyw5*7V1bTj92m&c4}Af0+q$|1c6p8BC>7)qmjGlM8H)auw(uu7(-% zjr_5Ruh~T5=X2^mH*l})p!GL~W8$i4IQ8}|F8H>To-RB_6MHL3Ezv-1ndHwj6!gHM zTa9!l1VY)9AUJaI3Bs*1sCBzT_mtC_?h|#V!1dE`KjHo-W{<_!{QtT|-mM z7J*dbEt;|VBldY1K+5_Rbfa)1ZrHVi{tc^VHGPWW(N||vYTab)h$(;pnROeAyibxU8O_QH-bw_W&OUEo0oim&H>F?l! zJkOFv{8f;BTOrV?^FZlk8y}lghDM4zsbYi)^v6m-YxE_OscgY%j&>qWMVp464afaM zuTooUH;dxc=!8@Un>%n5UB9Iv{#7SW)>{wRIjm^_wVl7oTp&i74mE=bt&dpy=2rUn z!;AE83p4a?C8pDRi5xdH;OA5y(Ug!Za2Y=UADK@A`j|l{!>nk_QG2>{g@gt|2-zBX zkbK*0oM%YXYacYjeJU~}SrLPz`jU5TxL$b;A4{f@!-)Z+ z9cjsI{canU^_-|OI*N21hp?v72PIP!HAOV!H!7u1!`2b+`Q4MQ;5+lfxGrNU4Jecl zYv>}AOmTwGhU4Jq>tt^I!6Il-KEc+e`@?Z?4zBtGHAWN8zDI4QHs*jA%gETz{2!>$MMWL%_c2qkr~5eZkGHxo z%ykl#pN^wKc+8F-)}yO=*Fm-IG`}z5Fc|NY6_r1bq_9f~aC)19_~AWy(Z?eD(rKRt z0Dt*7^gRurWv5fw6JgKpIQ|eTRgs60mnXB(XR}l76HR^% z5KXb)23|Iw!Dr@Pxcg%hOYEPFKKlb;)6Bu5lQVni*EYS<3!mjceUtD8;>+36+OhP5 zp9+&51Zs&%8N0KvmLexQQusd*ZCpMVLRxk+CyfQ7#-voz{FMf1-U6My?U-1W&Go+x zMyK`B)cGwHU&T(NCBJ&O+7ZGYa#SOZpR}D1R8bZ7*%gd-&!M7#jr37#4c$%mgUPlp zSn)sw@DKUILL-H@!_7)uS|dqr$-O$`bazv02|2?=?V>Ki_ToS77$7EGrdc*dUd#vw+%SLMV0Pv zu*I^yv%ySxILkk;1~Yt}sbt7E-u#Xe%#`_Ca!Yv;Z4c6h{F?iCW#%3sAho)*VX6j; z2n>T06V5<;&LlwThv>}fvX~b?(R#xn(4YAp&EnE|w=>J|)VW}c>ve>XEM6w}UI1S&bpN_>f`9}rQf<7~l{w&ZIN3CN!|E&Xl zV*$yQrn2gS0it1>GuVv8bh_0l?4N~zh|Ht}de`-ghPi~1V$g4V`{gA+XP-4ay_8(M zUcHldTB#&r7OT*7(*lS|o5kr{J5Z`TBiX23;_+2uA!XNMd>=Rl%S10A(qlF`?dW1d zPhKX?+-uD3)iC0?(xdOmokUgOP96K;V~Fq{g{K346NDu z@Gv4FG5oeE8ACFw`5aDBG=2MWIw)6#D^D&Jt$Q>USK0`l(`=p=o@l3OnICDwc{%b~ zy99N`9ehZNKYe^>N+&NX(4$3m;B$0_kURKRa!)Cb`|H_?0gt4?eoh~#+-OGwZ!22; z#+<9Ez2UUn9#ZYnqz4br zgJ|vsCQ&bDH6_JD9^f1PG?)QO?<+B3>2b1;{|Y8qa^PmUjjqgEM1@aYp#GhE$eyi* z1N*$NuGE?4e_lrEbrCp2(Teh%@8Pq#@gRLAofOok!srz_IPY#E1?=KrN3A9(`km(P zCo9A33t}2N=qP8d^o>*e_?ioB+5}2X!L}0jOyKa^Y8E-Lm~>w55sc6sT-RtubuU9{ z+_hdlZJrf(V(@9WCUt=~Z7qQ*i(8>CT~SD@-$8EiZPK@!D7v`K2A+=Lal!o()+p@> z1@9Nw#U_8Eb4825c=mhdnj%Thg+8`xEQ$SHksd9;Ejil zL}0Wpm!^G6(CJSge6-2HSs!D7SDl8|WhaTHrWFiJYeK{O+0diyi>!w&7RXnV{~n|g zgQTfMV~s5K!^bJnfzZGlOg^?QzAJ7LyiR4sv2ps-h4?)$L5O&;{ zJvkChWY>A%jZ`~0C8S;TO2P*Y=zV6gbsedgSTgqLEu;pM6$Qi0MRdF|M!gzz@X)*S zC~Yjnmr0ljvlFs$;;=gC4Yh!sQxzO+8e?dREvo;R!Oyn2M+Y8kfd>I9f?@>?)X3## z3@3ZYxv5k5hcC<{va!v)Tl_Sb5%rloxfsi2DCptjv`MfpSeF0R!vmDR(0=@w~&#d@l!?;=XLc^54Y7 zXD$YP@Mk@%e4%~#794Vw!2h}?kp!**Ev?HD2*em@E&RgPdFr6uiCGw!vYJePw3i(4 z5r@-y8F=Q&-fDxNYsorcZE9Rl#>Uyrg0w>% zcY>jYbI6?gHB@Dn0UYqsC#eHUQ2X76j#J>;uurWZeqkv$N7)IhSKK9*+w3u|?FqOn zN+PDgqcq4c7jNt_0OjMw5WVa&TVaRf_K|iBtlEW_gRJqv6~r?IkI47+#c)tA6kIAx z=`sT@b737oouvvWBu)J*85>K%I~dWwlA8(FFfT6Ll+X!rYVSjVK|T; z9WMd5E9UZ(&2BLNlr02K#_{N9G>f`@9HFkmsodxGI*{2M4GSejh|v-ml+*bQA#YqT zq%Z)4eH|dvPD*h2P6aJ|lWZ1*8MBLuM2!4uE+Sdlef8cFxjyAbhb1{wRk5F(5;sp7`R z^n~*XQY!92{CU=FuKj)-&Enc68(y=Ql(u2}wp$qWK?M8!O>opa7rkT&IK51S`*joG zM3W!>4X?!f85>}OQ7C$zZiW>;8t}nEoTlCMgM!hGSoud7cy6t1R%Cf~_moALTd&5C4)rTyN(MHGfHxZ}R(ATSYm~=0I3a?N`_O3nqNMjM259;9;<{hK9 z(h2upC?RW~K8K?sL3ndlCT-Ag0@tk?*fK+$UsHOTzS7zT=g#;+`&$vTEA^&-_SB%w zj1;=h%N@OP%gHI#z4RgJCI^mRhFdj%**`Tu=vY`K`TeGh-aVR1K7Xu$BcTbDS9G3S zFm9&ijRLIdKFS2`^n{(2z3khcs`%|eEhE|?CMdXmm}jJ$#k_ub4%dAxA*=O_XvEhz z^jspruL`_^t~aZhgC&V1Ti%qcN!x*oa!c?_@-fKbGvLncG{ZISkpj+;CQvi4_DddR z=Q=b)(w;BW$uJNU?f;{vW@}+fku}a1q|metDiFP>o=kal5}f{<1Z|(cploXk^LF|i z`awyDYpMCc(Ca~(d%u#*DU}0RwU5~N!kCF-)5);H2mCpjf_J}+5`kVitmoQvJ4d~k z$I;svyT8VG>h*N2$t?nB?}M-=Z#6s`8>SL5=CIgo0VxqakK0W@(?l;7m|dg^zrLNJ z`yVYq!}Y&lgcna*ZcP-NZ1czXzyC4E`pw|&E&(;`I}EkS=I{X?LBh-jpyc}|gOzKJ*SP)1E}fkG!DboXz2m(Q&e%GY#9hz5DMQ$I)ZHEW+zo?AE>7oWbe^&Q8gr zI;9rSs_~Dbhz&58rzpYmJ6pJYZYCqC`-EOl(GtAh9S6c0`Jk3rg;h0+;D|og*shHx zWdq-;9bcK_=ZURo8c|A$1}Ns7HX?~{bIIeJmvmR^SdQ#}CqykH&Ls!;k5pp?3Au7xW`e(x9ATN z*#lQmUhM?+Jvm0T#G*)`u_0Bd_MIzo}#E+XEnGZ8)^1Ibi0M zU@~{7FjtVZhT$Kca0+IB?k7H0A8Oc8Ol!VwV zTggd@^BC`6Ngd*?z&>d!uBh~(>*hp2DxV|1#21k~-ZJyw5UIDa#p};Im_}wfz@bTWHQ7m3 zIxo}YkqMx{rlCGxm~G`6=%wjycv3+gq+dOtb1Hk0>&SrGPzc6NFQa$D??C$5%N*@J z9OD=U%5Te|+wB2j^U#OO5T%eKajsNWX_THR%f+nlg+%#FHY_fEgU>`G(Lgu}qzcU40CPe4c4-58VP^91Bk|B*ex1B&)qkt z$9~HSmVCO8!{t-pp=b#8(0EQ3UB5x^jhWF~H`UQ#fRCZUa(vf<90<>nCqG|Y!#dLx z{4#Qzba=d_uZl*n&Q*_Zt9KX;Po+}1XXVth!w&4f-)0sK>d{ZPP6ORm#;A;Nu3FIL zn;wcFGshM|y76DQI8=+PlYi0g@oup1WhfqL_z6zZQ^2R~JeY4Wg`bL|sJpU|5t}Lv z>GQ?F#MK;n|8VEYUmmddxQrm;oF_UtUWV>Z<3Q?P!rDEbMm zJo-vwG&yR`t~E?>=X%_1b`Z-sB8R*3R4rRjMfEKM$jD2s`66oF@}gKxia1fCaH(X8P;9p+u7^zc~}CVG&xMM5AnUxfeS zwJN-OzYD4gra`4gs7$D&GCop#8*aulFe;1B7nES4W;a~_ z5(q=m^Jsy_c80Ihie)|4)#1_Q^g?PL33TaVt~^x2s8ee2*Z4MWu)GaQb2-ZQpNHg; z!6q=0s9?{nHYI)Ab=VJeD&TqNIQSgeLe||7<%8J@tZ1;gc|EEM+{R+tS^rGJF`}lQTECt4#w-h--ZFxL?)bJzYPbzc! zjB8AS!vfHJXM?+1`XRES0>??6MZL^2T9+k3H)YR&gD17oAomEd-Zl-Zk2f%@M7p^7 z?+iGnD*-jO1vJe$of-UCM&_w%)A>S`^j4e*&EYuTX)YV!-l~;!bWj(!D*xcAeQe>G z=Uj)(YrE;RatRc^$lXa=G>Iu!qM|rR<3IkRnsFClaP}Q~DVw7MN?)eSiw}YoXIKAd zE(B6*L}6udBsk80ftFe(F!{}RzBRCP|L_V(%GN>Au?D*67iUrA$iX^izY^UFd-(BV z8sB*G1a!WAl6GiGaiQ~R(7%5^wyEobl-muq$+7?r*!iHdLN;r&W(t{6=!|FVE#UK+ zPDX;uwN87W3}H`x@(QOV!~Tn=^vX*sE*l`k-pzbY5(7u5&5JZt+i8JOgRyktgl-bJ zI)VPzTLwwO$zT+hLr$ukt4`y}Z;`n#(ZfF5IJ%>Rq=&>q*c>&qW_kEVRuXe}dEyzb zH*mQ631ROT;>S}S@QkzAt{2rq6~8aUdTkRCUKj}zz0+t6L6|sQK+H3ExVd#A20hCJ zzfotLt-Fj4Ux>rh*qIpiI+_tVKN~b#roq^DZl0O%!BN%&h=hJC@AUKC$T}#IiH$QM zwcCVr*N@<0*BM~s^nnD+53{OLHH2{ths}k%iG$@gvPEJmra%3}Se%T;J^x~0V0<1^ z-#Sd145p&7@LjqYpO6&gZCE_r7yhn`#^6PAut=@~#Ik46>`rU${j7qb9dD2t)2dR-%4wJqxp9FOL$3_}jGXIS4lYo1b)l(fg1JbFzbZ=)8wbl5Ho)u9{ zQrBUcYxkVY8WCn5+=(Ya?aRR7R}wzf2*wZGT{PwNIEYoNgN@04be@=`pnaYX5jL%0 zsw}1Gl|o9rXL#c6)JJ5?R1uKzNuxb6kI=h$H$==2!0L`E5R?6mC>}XRi>FRtGQIZ^ zZCzm~FBwmrVsF8|vzHmk_CadoJCW>?8c#YD)$t6p(g*pXbasjcM2eil8V`GFqj|F` zNXG$vrB|a{r99l0XP9$qQ|OaeEqK42U`l8jO>ufm=RVA!=fy-xTKi1$BjzSCj_;yL zB2&>;xda{xZ9%u!Pst!hkj|*uM8{M=(D?^g=9pkUnIv9H&VHCdR+!|H3~omm&HevK z?0$@~$1R{tDu%t)IS z@hF#*xUmpMb3^chB$5V)-MDAzH!8X97#!wyP`Vo7IP+BzPb0Pp&U6gJ|7WawUu-8I z{VUi#g|}Fxw{rZ8aS^!cM-@r97y)_unRt7%47QO`YVk6f>^?4w7B(lThe`=}TM2Lv zN1@r*yA7P?C1B2>XZU1O3HjK}9RvULLR;Kc+*r)@UX1ool|Bm;x>iD?_a~5TSLZXI zF1V2u&nsa4rlWM(iaoeSPaE`p3#fAaBQXDWl_;J#f=hPEayG{0ByFxUjq)gm0Nb0@ zLEY)_-@gXPSr$%ZA9L^XSJ#<P!zm2m{%fl7ikgHAa2M zCwz8~BSJh;#m8bhvE@)NDc`&kuRibw!Mk*VJC4IrHVS#yU*L^dVemGwo~Xnd!aQ#a z61}Ap4t^P0L7o5Vff-2*vt_Rcm8UHEx)Id zt|3cYK35bTZ@5iFGAHtOo!-awNkWmAERH{Xp3`-e$z+~+4{bX7o$4M*Lt}dZy%_es zO4$1>$fg{`=D;{wvpXE@n}zwx-YZDNjsjZwVKL)=><0PPSch_{TI9QZDtky*1cJ1F zP^%1iIPCVDEIZRrUsj0Fq63FWrW;44j*3S}1{Uh$|e1XD*8I$l3 z&!6qc*oo-|SuFXmy?V|;g1v8eZ29s}FfAek$F8X`{b?d3Z1H5cxtjag2VSsSOF1j1 zjt9Q})QxYRRI@AlKhiJl|DVPw!frXoaVrz z(J*ipSim1Kbu3gjVS}R5q4bU`&e$3UbLZti>%H%++mnCn@e^05P{};jZe0&{n)i`u znH41cxG}x;`XevccrN&B-=~T>$1!7<2=KRA!K_IVkdPe#uj2?Q`S1)kC%nOw5 zG+KZ~lb7JDC;QO!_f#nKudF_mc#g`9UkC3+{Gj5YJbxFLqv6D3%<(RfQ8s96sgX}#yCebcMl+yg8J$zzwONL z1PT7?pGu6qhF5j*xO{Tp@GKBm@X;aXJNv%H1RUia6R(N@@?Y9CGG6&4=GnP}lk;K7 zd;6MbXXk-UQxkpTtw}46oyYO*H_7UmNLNQEFtqauTAmaJdG``p;OWj*jJJae)yc$X zMHbVg)LzY#%fsb2FW|fHPP7q%af#JIDq$8w-EGyOuV@;X)U}mX{Cdrk9`+$&8uO`v zBxjOPN~f`V_K<12M7jK$B4l#i#dX`%NcG|$WLvBNjDiEf>d$7lAkQ+Jzx|=*VHqUM zwt@D=FCwlY#$>}ee-h^Onx1yy?!cCMkP}!A8AljqdvFi=rdmpx&&`02@9yYK9jKL) z3`msyA_F(FvE`r`9wxR#@UXu+cGEAo&F#W&FHvMeOE*FWwV5X!U?MpFHb9+!XGx2T5v)EiLh2fO=;K|- zSUcNe?5$_3_!%YJKyk%6W=qEoW?}tf81Ss5b6(`qGjCR%{H6L$`=RP1B~_T%rid53FCwk#!?6`>829E5tP*Lb%8Bc+_2n*N^XwK5F46>- zqFBgFORU~VAAmvLM11f3A1rNIfraT3gja7v^nH0W^20rxZ0ZH&ZJPM@XEp>yz2fHB zl_+Ur3+EMM@Nm~(lwC~tIS&fJSD_nTX|8}p7dHVTcM)zlX0Y17URKYZA4R;~)cDSG za&YKh3(@-^g%4$JVY%rb&KcZ8+pBwt@z7x!Z$DG;G9`lUo25?E86Mnj6o6D?6ueY8 zM0buflETfmq31V(rhOt7m|dm|c~@xRHffx7trgysX`o)$8a%qJ1q%ig1xXrK)NOeb zdTAp0d@+=r>#IhebcEu>Gx;EX`Y!dU%VJKtc@lfo4Y2q6Z$`0E3RgcC<}ZwHV>_%& z8ONNRg>v+hAzC$Zm=h=n-x<{%_BsF0Rm$AU1Ez_}0c_CjwoIzwh!mg8Fpg(sBKkB6c*j_Jy z@*p$*wA^um#)`=(m(vFFLIIHfu?RHgr=jYOotW=?4{x6Jfj5~feX&OyWelFfeW`n> z{dF_SmFB_}GJt0s6L9hU>rk+UV*d^`Izfs7wHFo4wY@d0z*<1dZLiUWq_Jvge*+xn z%2~d~KV;irm5Js#DS&=z5C~g%_;_*FM zsV9%bW&}>i2*F2d5p;CbgS~|@xJ$2vI-S1_5&CKWCniJ3N`JaB%mO{~cOhRR4IaeC z!lhSQ7^`@ZM0%;?2X$34W$h;{Jo*yi-#Fu~Cs`mgozDzy>xXx|Vh}nN2Uh(~792acBQqPP%B|+fLG!Z-ghq{#3=w4Idp;!+f|#&ZHL5mZIG>)w!2C zcwWGvFWbpJrOOyotAuy2mq18$0$nDI@UT=I-}F;#H0x%quNh*u_I8L)7Z$kQ=s@oY zvC#J@7zLMKVR?TFm7IMYa*B)b-?A4Z{jNLiymbmTdftJY7BT*&j;|nTsKZv*DhUEs zeZpG-mAEbyfHV|C*e_8SiwXk4nx%BNx(Kw5OQzd7Q^JH z_`tJ=?4ieSVN)<%iuIwZMHoRQ*K<}))yBi>itOacJE;5SbW*EW3qH1Lf(HvSsF%eS zTzcjNbg9a~&Q-;5=VTOlzWg(17^JAyV}<7m7h>$Ji!6UqJx?XV4R5?}Ag0&Pz;mwx zYM}NKK1t-`&&ixI&3TCInHqrUZ5?>^T_pV^(}1py-x=dH4cs^|AHolF_P#lsxhZTD z^hfKWqwQblYYRpH3?7M6|3v)!71@QUiLiarP85E+m)7P?WbT_!gIC46u}0ehOWf%_o_}dp8h!U6kGa`*o7~}Fg6BW4U{^>sMk;@x zq7yvH_kmzK;B<<}-mnG@@r}@%brYE|Uv{?jL85(QAG@l53Y?eoU`|+{!}9kM&>O4I znx9)u&m4-vUd?Arytp+DS-+navl6ULO%*90dQ4x&1rwRQS#VWlKAIe#4zy+_E!NiM zZ@8=li@g@`RiA!_HPe$pYw0Pn|L7hPxFi|s^iA>4@!K#vW)hy=m4r6@e6nKJVO$?{ z9PAPr=vP((dTupw7G}lu`sp?D)$TlNy~`Naomd6a@4Uh3JU19>%c*w$eh~-v3q!#f z4U}8{oAw{O27jFW$&f$SeNc{~GOJZ^ZUAQ|Q(lSti5ZwpxrdgOIaLMb%NW(KuB0OJ z1fKP}2j4FA@qT!ZQcYP~h;Drab4u3Z$fFS~43vlevby2x!-wp-r{47A?M*azRT#Qo z7zDq5dmw55XcLhl>weClLE};|vCNa)xH=Pm9E>149l3q!as(5Oju^lDF7424gWUEV z@G0FMzIPIE&j^A@4`bq*DGXC$nyAa1d4lB*b3n-;5quWqa@HpUn9hunyZ3(5pJmSI zEZ@tR)NKTJHzmB($=wJ3=Fsx{q1d%Bm5mXxg|3ztjNPO;kYL+RE1(y z9olrWc>rXN|H4Y1Xu!3ZM=+~K7pJVAkH?lhg{=Iq(3#mxy>s=5;AjJra)R)a;&>q4 zZ-WwZk8-y2IG9??^`rh-lds83h@#R9V&3Dk;({2K1q8GWLk*)(cLrCw*!iZ@z(?XG9MK1oq}^#)6W+FGMry+RQSOPxE?;^T(O-$4+1AO+1fYzfV@Ld*6c;dCN zYSKx%SlSn-nd+hAo9SrrII+57Xf|}eUyg@|^;!F6Bh=t8cLr#m4yU;;&a*y4HYv4; z=g=gA$L2|3qH#YvD{29BOx}yK`FSvC(NhfvTkzG5EJiH-H@p>}0*hIertYaHwywb# z7d96!_l!{Wz#tsh5KJd58)3F4y(b}e>Z<#^qcQhp9GGo8hN}*rfB^kcaygI3o*qAm z?-^N4k6HAS??rXg^X)ur8VIGS4JIhjJQs7OFCjx_THqW@NuT32%uYQ3YMvde=CKLn zU^GkRt1QTM7gZSDXAXNq50Uo|!?}!t0vt6>CcIbsxLoF1a^Eo%Jq0r{U;I3bcXq{1 z3$7B+;6zN6b)j@>JqV7_XV;_cD*<>^Bkz? z=EKIq)of(aB@FH@g!U|gM)ox0&#hh1wb#OmPS$+xc#{|Nn+kP~neHCmGwt)pInRr)B4|D|tL#$0mrH%=B z?=GP4=Xl|4%X9QffgV3Rr435TeRhcRedj-d zr}te*Yr$_K#Tnr0v=sQNg%%*IIi2589#0PEyQ1(s56mB$$8`xb`D=e)#~GS|9k+@R;Py;e+8bHU8JlrEpBw5=X?O1bI_BiRC<5>ciJg0>f^?2e{ho_A5raR)y$-hil;NmYlH?nMP{U3$F36?=|2LY?^v!FwZ30rNc- zK9p;Kd)i@+?kYwv_bmojbX1Ku#hb6E@OPD{~)t}qPUc(p<6Mofq9sU@XDT-|q zf~=uPJg>Ns=C&k)_`)VKVcdD(=m!F3VLw&gkpr%8{cv1@JLX;H^5Wy&VYTiNF6YFV z#*O6#oenF(`??eq&t3wfp5;1ja#&P0*R6>c~A|9nIaH*hoeo9jfN_T4~r z$sRMp7Y)XZx*Y4}^1{`8KxHZr3Ky`WYD30F?M`T zB=;LyAVAxJv}iQItVS{D6B4IE6%$~B!hBr#Q3YNJ>oFr2Z$WzlAqqy^cNo% z?JmIoVgjo>GcVEpSKT!KPdHy_&;|XsY{6|^x2c5NYK&g_4u?Z4@k>lCoO|U93NtF% zb-tyrUwAWm^cjKnGG9;%Gvw>sze6J5iZjLAqL@(c6v(?|2(>q=xD&XPqnxxmn#60FJ15x)D-{kfbK-p&Z8S0ajO z3*+SBzocKUlbV(+r|yS@1RW*g1+6bQLk;(T*Q>A@zkFXrJ1rg%@%K?MSR%|ft51bp zr*6^;jj4FyW+61`4>Bq@RQPc}?_;h_ChmAy3|EKM$;PYSnQIQpQA#Kw z|LuYB%s_goy%M&Jui<*iwY(#;^P%gPp+NIM0rbANpocmak%iiGATHz>nwsU(65YF4 zd$@v;lo+X=8?gZ1*8gQJN5+Ww85Mz&p8{X+uQBkCG~&K97x2HcB7!b^e;DGPg-1V| z$c+cWAjasCAJgqHV`ma-owkGFv)}3LQ~OD_*-F7{ryBHaZGySd2L+MBu^3Z57X{rl z==n{86pwjf22HG9-@$-+VGQf2W`S$w`@-6oiFS&Z-cUK_tYxefgMPrXIk&5$^W%t9cM~7Zaja3f?%Zf z1{$3FMckrw1U{dQVb;>saPhZ1UnwseuJ4N{k{SPKu~{!!zsZj%_T7Sk8Vfvd=sYf+ zsDjgL#mEzTLzsH?8!77##KU)Dpgl4Wb%pxLm#H(+xURu?rSeji$Jrux8}{JMyeF_I za61$$9UxMjmq|d)UlJD5O~!YmaPQPi)=p#xRhVT#zjF2pV|jTn{ppWca~5LTiWK6Z zKZUt-{RI9=?8crqugQtgFq|5qON1*#a2Kmg%WC(-vyCMrv|kxC%>1j9udINBvlhXc zMm4yR&e=hto0uwbf3EMOkAMG5qnDeTF<`$cs{Of&f9g%yKW+NBs_;Ix>o!vfsi_>Z zBOIcCtKpF=LVPQ)WY&buU{rQgLes_LWXX#tT&sTpblD=3&~HE^j+?-EtsR(YD9yK& zlBh0uZ%Q8NMqr6+39>`;*vU!i@ImYZN^fpuKfUQ=OiRL)Q{tqC{_Oh7oP)2Px&WGto-!rGp zlm+MRgyF!a9i-;kRmlHz0m@$$(;YAB;TpF?&~uf6bX#E*H`Jsy9Y0BG&k?AwXkb3Q zZY2(%ZK3A511_<3AXlQ&$^1qBI7KfHcddU9nZJ4v#w;0y&!Z4Bx(AFeKB_(_8isx2 zHjplT2^jFPf%{9-V0HOEoY7ECrY*fiW$w!GC+`Sgk4#eIM}~6dK5-Yw*9oL2zuja_ zJ&@`w_eI%}VdzxyqsB|5VJxE;m)vl}$zI&=XZBs3o0vqR&(+ZB>-g1Q#P89Oi(5g2 zeTJv?U+vvG80!%f#EGxw6C-o%%&9h%7otKnFPv?? z3oq8(r?1CfLl4!5)vn@tXmL|suw1y`Dj+8jJAOH6H%>O$M2s8{~EKbdXK@ zMVvO6foT0wc1ZFS2-$d2Yf0|8F`t0{lrCaPKf9Vb~3yxmG_=t%Dak~Vl z3%HBx+qXjS;2Yel>4PmFFO#ayU=*#B*Ete*;2XJcHs;KixWZr)j#Kvq;n(hToOlG(8oft{ zS-s?Vmk=8H0#0;4j4~5qaBYtcf8O3!vL`+U=fA&(>9Pf=Y}yCgXB~mRR|nxZH|H)@ zNQY-7^7XbDt-0x_^wbnXQ2D zm*x-&_g(m8A;GT5NLaUF9(K08rKWy6Auo9p9kaqnlj}7QX;&9S+|7WQmf_5($adVvF^)bBz(t^tG*I_sJH%q*@ z9~|!7;8np9rhV$#u}2v6@SRXQ=BQx)e`=N4Wr}aD>&%6iY~}D zMThlUsqySfxGaO~YNWS-*R-qf-?zCinA?N8)29nE-nOBg!#tX+a2^70O+u8tNxo`Y zvkMkFRvSEj2EYA+SRd~cR0>hyhg{8pkJp#ciPvRtwZk&3Nzy>RL=a|OdQHj;@;P>i z1^E700euH zI6c2nkxKA4ajaG)zTR3jBKY`%mi=AFABkN^C(gPDA}+>|rD%^wRt)9bdeD74l0ntnc?g~lentU9Cz$#*hinf_(eXMs^HX^NOChx9qXm|yzj3S@vrJG z=5E(42#{o{LFOx((SMH0ohhQc;eOH|HJe;GznTqSFbOtn?WUWBT)H;8TAZW>84}RNSwYRrG^1+E>W^!8K48%kti(E@Lkb7?47F zHCVduB>t^2gM(b>$-OrMS#48RUwZ}}{4f{hZhT2hG$_vcybt`j-I1q+D~$KpgvHep z;F)*`?oCO7t|>LN)9@ePhbeI5xEFAGtl}2^h*|!;z%L z^!Sq5_-Jhfj_rx0Le;q#RrD91oVY-J?k$2A^9}GZA(|*W=_0mahoQa7AAUOhqgml; zbe!2o?AL0h{yaV&4I8R19(vC4mGr4%@e?R*uV0oMU57eh6NuL$3H)5VnrJfiX%KIDHrL^ZNyptvIqpSa z6_3}^Zz<}6=nd(pKYcFPTqvfyy|;m}Uo6@bB%`(CDe^U)Gq%0;BhJ0uwA8bkm>j>x zHgd!;iD5lR5KMs;k2urQ%BNhn@INy5Q4)1gj3!m4+4RI^QL>!AMQfkOpmozwAip7j ze%j#+Q=TmaC!IPRJ08e9b>MPcWloeCDWTa@qu}h4Ox(Oqoxg-*Z^b+2pdva#PRSLH z>2wR?MKJP~8hhZV;`BaOO zxzGHex*VMAtSu-VA5L?)oaWHIQPf_g44(P1*l=HlKa&az)~r2-67`>nwj0pw+k<5C zTx0%}k;~+uWFE}D5eUD#IIh>Lm9S4#mjCo;8_!*`o2e1`j&aJXsnM5Zpy`4znC3v^ zwY>$xUInmt>q}_ywiHx+@WV_y4UEs1M(oc zQxMF!e+zO3CBX4DAtD{bsz@|S=AJFN zse%&+ib#a-4Aky=2W!*1aqg)g6pXKc_q#<=Tuy+}>1t%-;tp1A$zSqWWH+4CKL&}l z0ZihVM8XE&zh-hEXDQy)&B6WeWq8+;+~JtR5F5qJz^3=!+`0A& z9q1Ls!iQN9@H~awo+U+oCK*CRrxm4RTt;c5A-&31g{^ub{4c_i^t*dGIXZ7I?ruzA zwxyp!;h9dXMrbPRyf00BrfqoZCRQU@sLyTDn7mx*3cd&?O1@~(j zVYFO{|Ic+QkYx$L>)!w=XXfFo87@E`_%MN0d5{?HC-||+1EO@K`JY?1U_qD*M%asx zL9zkFvI5|~;#pq5{vTF2(h9t}yo~a;G*o}<#UB6s2D}aG$+P`kjG^=es-GW;c78Kp z+{#hf`alv3mVCsh!!@W9+=Oe^t;U_Rr(*D*ELv;Ph|d*VFy3P>->~}+DO{hA?{!7^ zw=QV0DYtFu@;j%XgtLxnCA#Cs_TS7vl0R+U^p$>naG9?0FDEnKtbj7t1ZtACo0b^F z5#1&mRN7oY9`+nT(*^!)eN!D=+!78DriiC^S1?TjhIqY41Uf~y8QtD12&apn?LsV& z>FQKGL>R5M8A9*fWTLnC0#qHlL#JMG;X2DWhII6yYmF~XdH0s;?CPM7M(WUH=MNq3YoRY#4r!_> z$baZ1)=R`tvb2m`Og>3x+B_$^deZf*9q#8nQ z&7q(SfM@)q`8|=pA;&<3%R4_JKNPJ63O|L2;jtZbe)|AfGEIc8v_vtmMD|r6ClweD6A6xg0 z>-0}@M++e-22Di;Lsq6#>`N%hY)B!KH!BFv<3{{`J(2c`UL)$~#K_ByQSfQ`GqR_a zJEye=lizp;RVuTP|HcC+AJN5+WxMFfh7`0+ze8F)3h2VRbHsJ?dFUF{$=u2q zR6F*D=d@9m^m)CcHuoZlh`J=gi4e5DxQ7W#dq;|mFTwhdEx1^sjjpOIBa(AoQM

    X~*z3Q6s(+aUP3<$WYNjYZxcn(dJllXOigiSz!3Ts#CCT#HCRjMdn06j1rhYrP zLuz{n=FM=Xc4qxlE8LxaTs#TRHgeCoBbT=h&VWxnJV*;s#nMDaxT$*)8$v4~?ZXui zosxx@N=wMn$2)M;sfbzTT1u9#4rDuqeX0+W1f20g8kGH3;QuH(4|guVH;yA3Qix=4 zkt9^a=Q;OBL_?FPRJ1fGmA00hEhCYLG>jrr#B=UXDrJ{^*3Tg@O?7eSWTplI>Ak^#V}r0 z2DhgLLej56&Qf=VeijJsqz?HlG2-{DvY{-Dh zFHz>NyA#50&H4xX{@x~47fx_)5mivGE2DeXmw=&3ER(JD9l8(2VY$OZoYeJS+O&qr70f<$P+z}GY&_SQ2$t{ zX^y8GaxP08_!{i8z*RcJp@LrY0zDCi}VY>fn|?J$+?C& zYG$2-qElAV=HVcY-M<2NNP5DZMngDbdH_>0^0_@{I7-y4#E(KcXwMS(R$7ZA(LIdU z`FI*EC4sC|9Qm4dglW6z2Liqp4kaq0N^d<`Bj-TpyKJF7(g#SUMiw*8<~=D(t|CDl zH|h2xpDCZX9{e;V=soFpV77AnzG63Q9Fs*W|7*;TjuhzbX?~NFGKyI z5?1T-XR_Vh8V=fXR+A>; z2u{oD8Ez8|eu{s{m_`AK2opSfbC8nuRS!|6;vyUuYJd=fgAntofn?ejpelbk%9zJr(ypHMCR20OFc3zq6;q7G+2JsBwvo8_;edrmUmPux#t ze-|hGW9h_3b~?t_h~YVt8SqI_f}EbV5I3&tVOHo>WBck=SnF1XY-cn&mIBm>X45TU zb79)oG`f%z3U*F!$Fts_*!*pY80^J$hs_q!U+>q^ESqg)xKNTD=cmK{bL;7?n|F9Y z(+yE^&v)v5sUBA;%wxq)2?=8FIzqz{0@Y*O+^qgOhHs9>ubt6g^65ORT-gJo_MtdI z?KxSf(TVH2h~PQLWFG(FEs1+G8yE5BK*pt9a_wmzuDoFa%`;QzNWBUFMT#W9L&FpW zdv?;(&SHXRw?4BG?m%qKZK?F>QeMUNv$#w0HTBBmGP-?ynEhoPju`(Tbt)4{dG9n@ zXgyEKOK&eS-^*Ru zZwDXHoqs1{<-;a$I9N$SUf!Wy|M%Whs}~P`>0tiwr34Os$H2GH7DCX$t}0bcvMwHuqaLkzV8FUiCqEI z{FpxMQa?>+f5^iFlXrkv`#szx>WP^veaOcrru@t~8sM}2Exmf3d1|?rR3^<891r6|%d%s%{F-UWt#P3s{%113JE)f( zpOZxxj#a%%I{|)*&kzt-Q;2cyry{q%K!;-x3a!#WgMnvo*ys}G2XOh~#y1T6>ng8bQY79~ z%fR2)=hMp_5fB~_MwIp#%v~WrmJz;T&B*m@5Jda}Xs5**{b6*EvuD>RmMhj@Z z+GpH-{T2Q6GozSoGNyZ*SJ2Z9Jv_@b5>PT=hng4zw;R?oyG|-V?RpQit-S%iE+vBb zJS%$NNtQ4h!q9p1Hqvyn2=*5gGVZ(9;O5L`rm|LroDmLUPKbY_CJTnC-bI$sl|hVK z(kF87hdQWM>e5-W!6`FAGJ`b(Me#RK>HZL^wnS2i z^-t2@$;nh%4MK-mL{;4ng)=?jExanxxmimtG~Oq6cMn0U%Y6vp@=IA+hS;rI z!*Scq;Z|#4ado*HR2TTcg=5zEl_?_Iv#emwUfZC$slXig^+K)wYZ|G zoqkN*L(Y$RlKyM6Xl!>bwZA?G2JX-u00a_NCmUrOvxRb#pj+RX@R~E86I=M~$6mU_!n1*Wu-(2lxj0cQNB^ zKAfpe$2nWn(bzUN&pzHvyLMBH|fP_bH>BBivd;vve)PbJyW7w)P0cE@0coRAzs9vZI zeKXyVFZNRvgEF`btIuA(hxQX_N?i-Ji%kTrn~T87&YMccN6|oTc74Y8EW8puNkVzO z)cfQQnrApf_4TyqGWl}UQt^XV*GgH#hiTYv(*v1yQy{b77W71ZkaYXK^!Mz$U~5oM zH}_d%`ra0>`ZvNxeJIE76c?DrdDYY!SiBtZoO?SA&~hjg=E+9`~$z0;e4P2%KCE*&7W2% zeRCI#Jt!nT2bW_*iYavw_Q8Yi`GT9xVWdvyG|4{mg-OgbM}Ld^q^7|d22C>=t@5St z%3lgxmx}QU=A6Wz?LqjSdslx;b%Cj6Z^_}GebnuTGqE|i9Q5RQ_~Y9(s)v)=1alpj zOG0pH`b7vkUCK00iY1NLM~Jd<57@R(fC~*qz)t)`Gj()8qFxBscE0ysC&`vlF_Q{drf|V&fSQrx%Y=0V?S0u%5<02*yn~oz9nD4;g1! zn*Pj+wr5O%5dXDonRYp>-}eAMD6PQH%O8-<3m#DGDZ2dbzd=~w8xD0na`H3Y%AQik9g~Mz(zl$a6ewM|*iyz?Ej}7!+e<}<~&ZK67DYzypgnW8FLGVm& zCw}-NgO8;Bad562H(y;#1d?3FDDeQz-D6H~DO|z2hqBmHkVJzzztDi=<;2%30Dg1l ziuG4fzD@iuroBiUVqJoX{)xr-&E+Q42!#r$UK+|AKLiWzw9yq)Eby!W$1gKkgR=h} zfTim+Fz>q-HLQ1n=()?`v#O3j%Kb4j>xEazE`_boR}_Lb5-)LcP#=0S%oqu44_gWe zZm}OEKbM?@2Kxfg8Tm-8q%Y8;@w%v#`j>P+wq)d0qhPz`Je;$(1=fAH#>Dg<8mVv{ zpG~@ib|PgU%)1f5m{=+Z&P5f#r{#6{ z!nYPQOLahR?gp@qaexH}!|26VhMg*9t@ftT(By9~cl<6I?Zjy70HOv&Es+wCveyZ2fHqx3_+xMO9bHE%_## zv}8TsY`-3vb8&>2INPDCVGc}^Tm+JfH?Ygsek2*ii|AjK_e`PUX;^zyfcG+5sBMLi zAm2hru-5!66{_OS%$zuqxqmMV$js*#Hb`K{<{_M{E5g58CCBf+6$=C zjmA3plgoM!z<#(NTyx*yjjCF3oO_FynazM_b_;<69-)R{kg=4F;H^pC4gC>e5Tdt} zf45DIzjXtG?AK`eH{~UH-~Ssut=53{>Mi(W^;SOL^)6*6u~hHn8k`%ooL)VtgRzQ} zKwZio_w2Kx{U#ro!1^hIWuE^0{SPj~ch7$MGJ$jYU5X%+k2}+Z)FtQ}FbDR|OG2IN zXJOUjGayJ%B&F$^G;w4GHESy*9*d>0KIc08TDS+MikiaM)?PN!=@pIC)1fQI6zQD` zWx8a?6yCFd0cK02KQcQ5P%p$1bS>_|yWxc#^Ku%pjoobYj$xd#m&J&e9#E__%I0%# z{mmOX$e*{VH1xmE;I_;aJa~7=LhfA4bUTAl)=8L@EQH!y4x&28vsIH3ftHWnaHQxD zJ+YB2ZYfB4Zh(%G3gTheOC~Q>$Ga8ZLFQ&Zz4Up6 zik{w%XB&TD2A9PfeceM9&Z=XO>=#yR(3fLg{=o`|S9HPcDQHd#VAvs>dRVW*ZXsXZ z(z_=Fts$!Xugns`l-E;y3g@a{*xEj29{HaIRj`Mwy(rtssqXIv*7Dwg@WxT zuJo+H9WjebX+_0v^fGUKI(5HsR#O%aY61AC9)nhSC!sTI1+dW8E z=m%2`UtNL7$xM8|cqLxSD1*_bs{ARcI(Wb70`6D*hc!Dlz(brNxFXv~ubm$yos0j2 zUZE{eV^{*?{I0R-LY82)B?dm6Tnmla8nh491Zz6Q1tU$`*u&ol^um66e5XGeuaOX# z(tI?`^`O%fpP-}HD|#!>1CBWe3l`~@@izMWW=vH2pkLz-eejLX#ddS4_Q!6FkrIJP zCrpXf^Alvt!x);t^+^JaOgYbF7oLo~O)r?ACv)6G$=#@8R8Zi~(PQKBy7N3NT6lrx z{ys^y$0n78Oba1irW%ZHK{g$0n~qz@Ek|BfF0-g|3LWfn#=}C&u*}C4e?H@~(wSOh zNcu5Nzgfo2)PD%IP76r?iD0ICXNbinlL4Z=NS^Mvw~k zV8-otV++3CMadC2R%G5k)_J=Rz3RjHQ!C7P&5z^oLB~fT>bV3)#`)6%zZf>rn#I&1 z3A{P_mo(pbMAKgEfE}gwcw>qfT+H={`Xd@-^??PjJ$y1;Z?IwSo_j*c;!^DE+Cq~4 z*s=STD8Zt?qVR90Asntsg|1sBu>Rr=YBOyST& z&fkfvt1dLYR>gfQbp9yMq8lYU! zWYYXNgj5ZEAXz)B(Zx0gT&Wzs{ud3&24bwn)jeRar_myK+)NVa+QrOW{g;%zu7D0b z9loQ;S@t?#0u^IcfnoR#@}>GG?sN}9C*8wf^J)+FjBdrSLz`&j!F438xd9IarNV95 zi*(^EhHSFXq{EuqA;MY*_M2YfyfUxg=e2d%x!Qo5dYIF;DY@YAei4pX?SPZZ7UI_R zS}=I0jvTXFi3hLv!>rmd+;M6#{);Gs|Cr-IxH?>N}n=+Yuy zA-T8vJ5iiC5ogI|k?jZDY1+&eWZSICRKM7f@fg^Nt*grDwH;GYxMDWgc$(EAaZavNM{RZ=VV7%8)(WH zabo$&*857f#IfwSD~G7{!6W!yXbqf?E2GoBggdx^nnDDU5O^ywhD| z;i2msqxBcG-f?2X$~o8QNeRBdE0j$8)Il=y!^zM}E>r7fOwHOuSYth5m?p$0=`OF> zzn+Qs>A485+*3sFjH(eoI#Y0C>3ORR?@7oFf`w1J*ob~EJN&7>KM4!bqZU;nqW|x7bU0^IQs;_r0d2L~&J_!8XgbnSj4c$23^d;*Jb5ySm$ z?s!2C7r!CZr{BZnG+n;dVhR4Uw5e!$dzk9(nF--B$^yfGTQU4;6Rp^N1q$AqL)Mj- zblQ)HcwnRs8(e4LwXQ5!zVtY_@5%!It-)lXSty^MFk4Wz+z`+IxWPGU3bDc0 z9Fw^GXLjLzN~0+r8(i2WQ*h&<#(Z>&7UCJm%uxRVe5 zoAV0iax5QXeO3DPlph>>{)Q2kt!7ixr=Tg9qdI>g4OWkA1cggHB6qf&y!+=(Up4qp ztA=O{o&SMUIE6z>tsMLGp%$EPbtR|2+K_c)#qfFEDC51C!9THSC{mEYd>f7@+kWJc z9jpr9V7Lbo?QTQ6(qZ(=(uQ1)A2~JQPl@(&BY6H)182CE!3g&)%T}5q=o_l1D-Ny3 zleUY{UX0txJXwmf6Dp{K;chtW9}Nu~zmO~bowWOt3Cv06e5kp{k$1%r<_65eh47pt z@gucW$cB@^c>3xm;Sl$biRf33MiNB%@g)kJY(kba52 zVF12)U&~fWYvVuIiVgStVTJl8lF}H9N_|DRV2cirJKI^G;`h9BnjD`Xf`=7#^0;&9 zcOv^>9hYTW3g$B0ezM;Loh@IGs{Na2kY+OJvbjxv^;d$~Hwu4ZO7Z5`I}r1y6#vt{ zMSo}KQ(etS`roYp7zl48uGtUBw$7bQ*@oFTXO13b?&=|$2Uf#{6*9zPnH#QY-34yn zyU6gI12|15l3-Du0c!ott$#MkvGeUqX9PDIutMC#Q^(K^-Oum4Ii-PFMg~d+$xf|5QDh zQwA?UOQj9tXBg1CM){<)DvI`8z7 zL2?ThuhM|#K6NfPlZzTkEYyk3hkbkAvJXWT64$4@65Zh$^wa%PI%y}sx@?X$FP=xM z!XGm=JQ29PLKt4(*Mb9&^}ylX0Q=`Z75eJ3HeGb+Jh*xk;Q9N0oSW>b#r1cJ%yo%! zI`qbyPT#->^J(tbC32bFFeinq?VXFCv-NSwoBQDNWDXv5t)qo)nYiHNL0Xr*0A}jj z6OYJi%*_?rFz?(Lm%mKJ-^VWC-aaupZ{AFZ`WV36vTC6`SsTHQ$!)Mcy#kL|{4CMV z0B-*hf<3!mlDki0xg=>C**-oJye{ZK>>;ElCaK|swk=G@$X7bMV+zhW8;trvRqVW> z^F)WsdCcnXWY4P4;MZ>5NW(4`LXF8bmNn#4i*uHoW37$+&Qu0}31wVfJr}1ZbeA<-@;Tn?Ug{q2R$Fge->#9i|Z!IDXpO-+^@r4+1 z?l=bI%)n-OHGY9LgDG4lzP7|0qGBdsm46nz*>{nMcSpeUwN2Rk*ommh-oxPw=h=Bu z@#x3K!Hlp(w#vQ?oU}ILoBjtRVs$*GT9#A)XXf}LqXrIKUj)nE=5VaFIW#4$2sBr} zp*LkW@Kf1td_FLU>5MgzHITx+npf$^hZ4}%`i8_roF@C%NT5&YMds1&D*9aSH5K7H zoMK6Yu5#D|R>{{#{(n7<#X1g(*y%) zW?0Mu*7!)nu#znP`g|Lm|DLC-U1l?UsTHtU!iZU0W`=i@!^w29B-+inP1m{Gf`mXB z%lb40i+G$1(Doq7uw$^o4Is%#4ULPfF?uR@cU@^t5-Tr5Q}ahm_!R(Ti4%0a!R!oHt@mUb7%jcQHSHX0F?6EL5uIveByz|00K?_L6!N(~2_8)lC z@mTaJALM7LfJfy@I>6h2S}(XWmdl-e^w~fwhV_|k`^4b8S`m$T>_fhYgpp3i?V!Nr zR+br8kyqtcu;O(PY>YADH)a&#o;!y?s(l)H`8yu2%QrAEzJz=Y{f_Hj_CVPENUmp^ z0x9+%$T=eu{v!Evu%K}{yeQYh*`H(K`z=Wl;Zp`I=eFLqSC_Wy2Sdg0CD3}8>p|aF zq*I1GVP9k%om=$-tM>S@X`Z#v|IG$(e3&cPnH__)LqJ29c(7)xZE^pH1U8Y5gL#Ml z;hZIn^vGNTaNkKvc6cwK-L;kEkwO^pG*gA|RjcW)>26fA>L%^oH5qf7=itnp8!#%< zukg9LIkg{*AzBx!NGP2HcGJU2-W^9+-&aX*876V>k(s=FiAeC~?vkyUIpkwW0Pj$8 z8h$vn1{&QCl74Q!UhP!J3%^!^q3kZ&H}gKvc%l>CpD+^}eyeiXutxUOHKz1;a>Pw;fXtYym4phTar967Z0_j;13B6_U_OMGPd+3 zz4vw|IkKRcy1&)6gK6U@LCAr{ zAZ`+8QId8To@Tky^1oT!yUdRX4cG>%bREhHQb9ddiQjJJL&p`@z|jej@NbzN9f>^& zCl9?P_%0rEGyc%q+--JTRuub7dn=@F)Iwv45UPCXEaaPblgG~`1=Fu_`;CW*JiVHI z)X?NPT-MX#ydRG6B(R*6ALo3{rzLnzyZnKd>;NA@8lGv3;Ljf(K)6|_-k=(OZ+%5> znR2uB(|WY=uqLkkB8{1H;%IRhF#J*;6a{PGkbXIdK~dd zABdLayYb*AYbYO_0~$_NV0Rthcu)!b*|msHc#(t7H}}vjvkl;1dJ4^S^M#s+!r1$B z9!}{@LhnPxWCNE?9(eR0)Xf$mnNESYDSbD#)%xPSr!;bX-_>c|7!Q+O95l+r-Azz%-Pe&f)F;h1gvifVMkBD;i=FUz^k z@nms2W|~S&#$*V8I1F6<5RR_1gTIoO$Uun@n);;>rIlj*L)Y`zbt}%}U-d1J=j=$g zXTQasV=CYc?L?CapcSS_6OuR4zEvjVYNZYyxS7C;&iGrRHyjN`2b7_Tb3YWnoIt+%FCt=~b|ALk%nX z{VuRctHHrZ2xF3`VEV3HjPkp~@W!3TQz{$KTrvWZ?0INrCx=TpC*&TPf26PPDU1&Z z#IDg`_HXuAlKn&th2BSzuQs97C^`#Uyp?EQ-E90^n@Ic}zY&RPL3m-$96WOFDe*YG ziz(fiFnGNQCAZ3|6L%*oUTJmst{@I@$v?=T^NEhA7&8!P2)jTgX1yv-$P9~T|t%eR(kZY z1FIBr7IqzL!5ZiH2-j}Y&9~OkdleP1@c9pN2xH+%Z!mZp?}m4lX?WB*1FRI%anoW0 z5D5mZ*EEe|M2PU;sZKx<&N*~MxB`?u-3Q;u26C>ggN|G>#A2_>u$bG6EWc4mEH ziGK6oXwPB%R4`aFMPq=Kf8tN(X&xm0%g1s4RCkD>)f z@4rP8pBBMX?Va?me+cmE14z5fB3$djdB7{w`98~wNTcs<*r6;T*sM^9$K``b&YP21 zJ!($H9yHVBD^p>CgCAVFnod@8u7hpqop_`0Ch9rGbMErDu%t#t@RzLz@u7vttp3L3 zv6XpgcT(_>Y7_e@<{54}Q-~3U<|y903_OdM(hkWP0_#o6w0MO+UHI6Fdju=>MMTvy!7uw2hF$XyEC{aLiN(*=X? z$?#C}6nEG2gM}`=bkK4YoM^p3|6`ZH@6Xi`^jHhxx_V&6S6$!_G|}qjbUNBz0M?RA z;lXUquXk|^J$OTg)%7h`W)gR;IS zu+`H^n4K6>ojzivorF8H?_+{)E&L}KB|2UVZ-rGfP7KUOs^0_Kr8IHsF9#~b`9r<* zmg6b03JjJ#L03+8q)I~OT=z2$PYh|m#PvrY-qQlim2RWDQzjh$UoGyD758V$-9L{iGE5bG*)<1_0j}fd_0eN_H`rH z2>U}|_ZZp4Wq!=2KY)mwWcu691X5M}ON3NJ$=jAej?t4yMV@y->sTZ9Jzb1-x?}XZ zVLxlXN()?83^R1TwqUtf3nsZ`(S2+-T`inXWoB~h^4w7Pc6A(n*(Hhlg^e+CbTfYa ztV5#m7bAJOnan@PIj7HF#ZS6cB|=e$1pd|S%(U|Jr2WAJLB z1kMRuk3Y11SdS&cBv`nS{w*j4;evQ(dLv7AocqB!iN*;!(c3anZUxsl5;tIB&J6LfIjKPk8z@WsWFbTrD4yP+>*lVnCL;Zu5U%Lf6}NR z{+j_Kpu(GuL)sxt=JVt9k}S`9qT9*MMV?#W!zw-E8FYyRe3r-2*Ajx!ro-?)U>ex~ zSrFk{$0%G>#nn%5(3HGboGMvB?&rpkl=pv$_`#HZ^fuO%~ zCeC>O5PKHLmWWvfuzEAxVW;LA929yC)iJ)9pFRnlecC{^p_S$oRncu%Ii_0H11R8} z>_=q3@jm#R!!x|Q^q2Z781V049`E}_-W9H8jNjLgFvb(b_Es4+?~vxYi%HC?Lw9jCF^6C-6PRzv&5pa2@KJ;@nN$+PE-d6> zn0+6eAwH8aDLerh{oQ$=l$v9c1fE}FNO1vh%fIqS+5TZrs9^)JMae`Gz zM3@Hi$Kx~Iw7?K{8+@a!31ifM3xHj52}VzjhKVirnJE*c@TIjnR)}5zn~mcjwk4KE zIQr19CugC&hd0&~*3u33FK^1!J;Y&m6n(bS1tsdeA?vd(JUkRfv{Xyr zR97|`{$Pd51KWxIwbd3ob)M7GBgXVF_nxfpe98M38H{q=?{jW$F zV+o%FkAm}e4Zz#(>}XIF`Fl{2Ew%3@!a4uA!$AxNB#x2R3r8#ufUZ&DkJo zarP~h&v{H$XKu!WmC5kg=OoGPnL{=opGF3n6KT%UWK{h+g*uAvft3qh6Zx1)%=$WO zXbUr@#VZw{%=0gsnfttC{?ZW4I<|&$NlVe28IwRQ+Y}RbEhYjsn#_L^#+d*4$(Fv+ zLzAK_blEH&SZd!)%DXSX(!i_u*3kk3oTI44x@9EC<~4B-cu9U}{2=Pt3-DA%8e32i z2O0&JF{?F)`gOT6hDOPpSEtw_?!S7T&(KBM?chg_z0<*EyD#9(0Cg~Q`3_d<`gn0( zI?c$5CYu`ja3bdy5&sf^OWI_>{h}!m)saOf!96UptR-z%(qQn-M0lpqL}cfNLeSRz z(ARf~cCZF0b&1R9HcyAex4OxMt*u1PelI)fvINo5309e2Aq_p|Sp4=mIJnLvW+{I_ z*4_j~mT~*|o*{N?d>c7as)?U}M^h(%F25ctj#rh|kjRzmG3?|jSP-O%T2fq(s!y69 zKF65PW}IV|xQ_Dvae0puB#Ien{X^y@&d0aP|4?_sE8f;2CER;-KNPvICc-7}Fao(d z*+(IMvw1~vwVpkBpS%;9NI3wy2&BJ6qHJpxzToHJ9m^lYUO|dJDfhyWmOyw?Js!y8 zD%`}MC@9rvgo63%sHCq2<+nJG+an!#AMJ@JJI-S~PYcTb&`6u4NhBH3IsS8YL90ST}fB`yY-cY(d+|so_Qs_ zn0Ev_`y=pCG@&b!U*TAg1~CM$C-_%XJ<|38;MHM4K41ldG1=c znPf}SJ+5HD0|h)*VNHw1wGt=Fb#xDuY-~A@z z<`A&FYY&-5Zm>MigNA)mg+`%EXmw%(-tRbrPWtcYTe)bo8h%51F`U$-Xt3^95ty?u zftjGbg3E<;RibKSoJ-~?5zS(#l6(!X)W2_=SVUwO5o7=E;wPA zNn#^s3oItTCo0L=L|oc}eZ?P#C5|JM2k*%28dEUi-eennUNhBqgV_atE3kNF2%f(p z4L4mpFz(4~X1-7&y4}mh6AF$*VzDC0Z#qw6>r|P|$ISQ{Gp3@F_aNCRrNZ~vl5es6 z8t2FOCWHSZH1S1f5pD3|c$77g{KAUmjN8#6qMj^-3O+`PhK3iSU;st9?nNtrj1Fl zNibj+OL)hP@LtP3a`)S0bW>cy2pV70{o9TUO8VpBXR9**-C{3zm2Zbv52liMjxRbP zb~DGmTZ$SETd=@DjUUE&xmzbi<7z8S!KAwDq+`uZ(zU~%ybqj3eTz8Gfy_Rb)}=vr zyq^oo>qJO=P6Zr(ah4p`*+@UDm|@mUE-Ub4He8V~M15BmMrrc}a&-Cy*1P2-_0R}m zFVE73_vU}$$ATL2H?)9Pb6W^imBs1B3nyXb#T#U6??Z4s=L#M5S4mQW4*N^Tg7emQ z68R55S*58&kJgUU6{bB(?L1O8z#H^ zki5}K+VZsk?lo?JyT@;mA*m9MeU(gQTiQ|1LX2wEspE?WsaSmIB7`1U1pe;NS)m4B zBKAywkWptt zp-!p~?9;fe!xREvxSeUuJ9(UBd7ftYT*u|Dhb?B#lY_HkNL!-T(vk_W?8~lDG)ynT zUL^&Xy?8dffe$dh)*nAMFJT70nN&~aGlWVEvhw5n$kHlvSC5%1#|ogN@t{1190lUYq)6;RR&XQy7`IJkEvW3-SZY9waEjI*3?k(tW4 z1={)|p+X!OQI8V!m!|bVNy6B$XO4>V@f#T<>)MeIoGBkgH z)TlMnU7xH-go`bcpZk=Yz3`fmC|HGw*3vZ9fq z!-OxRfomP3F{KpFxTrGzE4}E#W8w5%^-S0@k_@>s?=tt)HK3#{gx1{|WlpHQB{xp5 zfSD>cVAaJyI-KIcNbwJVozp_9aybg*|GuSKj%OiUst9}sE;F-J=Ti0cK}2796!Y$? z%0M(mp;8|w`y?@S&_O2Ep z9&r+&RLMES=5l?Aax+LhV1aUHW>JgUF52E+N!rc2n0v2gfybc$c;o(=))c(wWy)KD z#QP}xJ##sznQQ@n4>8aj-^_crYA*U(zvP?=b&S{sPneW&mOPD+$JhN_zA;^bTJ5*T z?CY&m_GB4dHzSUO^{T>(m3HLz^8(s_a3)4Xb9>WwPWbxrX>##MGoiq8nWrnD_wG6| zY}qI%cOtIZ9|xhYi!`KymT`BKnk%ky1lE1F=LJ-IUJUZ88IE#hdi( z%o<3#-A`ctMQmT`OP|!8gHIFZ!e9P(a%+7)Ieb70>a-@4slCcL?e0$KvrmIbyQARk zkHe(rX&qhOZG(o=Q`t4gWT!_~g3vXxW;fnLQXliSQcdX>V#PL3zso;-q^ju(VN-%`K8~`OL)A(WHjkzl?l*OCPG z!P)dNN`xg+MTJ9Timot>-?J7J#qN?%zgr=*Mg*?4`(lglF|6tP4^4(A)B4mh>bgz> zB^L&v&(}vpc-(qu*;oe?YTekaTA^gHa~XM7_==uBZbbZcUZb`4^~I7;L%1x}Rn)6C zg3U`yiU0mi>SW9Llf84{Ku#L@)E-C5C-l=Wt$5JPK-#U(6mvMAJV1doWwQ2OCxszBTH{`9EuM53FZnPtK|+n^8)m zPLB}w>W9EWU}Utt5N4+E76==oBsTdomA$)|LA!rFW0_62(AN1HO#Cv0jn3+2kNbl0 z$tf2oY}d3I{4AIAydj3W>-X?utWH8wm5k60{6>a)J>0wAbgJ-L&mBKuvm`Hq{;-vqCWa26oB2|LXeveCO_ux;o;*4VLzGEZ+O0||G0C(J|& zpA$$c9c(-X)?ZDQ2nMZG4cvVDI;WU%3U1DkBGq4o{F%nFQ1o06gMUS%UDGt=x%ce6 z(F|rD<%}gO?crv_M>b5gibiHX+)QsC1D}e<6)&3xhY!r`d=zz4&5` z6`Ob_f=zSSOnndIaOQhm@#(xf6+?>0u{nwb;ArVXY0G(d+d7XFe?4W5qqC@Z+gmu} z?f^38YcOQeIkYeGBR~I4_QRx+)9E>nH(qDc=7;z2@LU}Va@NL}o*O8AR$9C-@Gd;B z9xk4HAfJMk=;3RNPPlb_GJMPU#G>Ty;I}gtr0XTkH6}~J^Ohjm_r@2!62`GpR(05Z zDUuTx7>W1PMRL`j4ZtI%6^4Diia`lO#gDfywuek{>tEqouD+YX)qJGD@^yJVuo0#qHcryDSEUM3= z$Zw2!S{8y#7_o6xr9uwNiftW!8f$hNiU)Pwqv%9Q(tC6X*Pc91J7as;@5{H?zL2AI z=gdetlPC$ZR!*i3b`#ms(a*T&Jx!>-ZJ5oD^jUCllq3Zm4unt!t++OU*P4mpMr=4De?WM5~Lfe2Y(Ihab=kjyWtka zwynD?ypyJ2iRVe0cHl)z~26&4u$j4K)F z#^lw_aHoWfQoaj4EY|1m{L`TaM}=?v-*ULpPuS@mHle*c z*Wmie*~}>?9xj+}sL1Yq5B~xr$aeTYKD}f-N$Dz+VPGEATgNf|7B@DsaScTOjz=3y z3pV=DF0@q{2j5)w(SUFMq-edLeFzQb*KME2b<}FpFS`tA6sDD*?|yJ{e;rVAl@fFL zB1_!pQekFt!8JwsbT@7XlUSV$-|Uakmu`U*|Na+T7!ZqD=c3r_u6GriJS^DcTmPZT z-#K8B@|c=^E+U2vBXR~5rQ(RgCd!Ci!Vc4h6Px+jDTBoK zbtA!W&mdC&z5|<^FLPVM1`E#%Ay-s?j;l}d=HuVYqD12(r1jPqK3c{hStEQRF!bc(pLzb&nQxBc?MqB6GeBuCD3c0A6&d;hqHuT^r_xWcsfCu zc?p7@HKLog2*CMJ@^(hbz`x0WKcn#f~rG7EZl1YCbKvjOAw zv+8=`J^pwrSkCLh5o1H~Z|h{}iHfIHdIpfDy$!>vT39eUi%(ArPK@&=Y;0r@n{Oa| zAD%cuDVFmn)!`3&9d-y8)&7C_@DXTx?j-HeE5Zt+27b~Z5eAf(l6rd#_v(E;RX4d^ zEve}wSTFf{05<&2!kxS2QC##C9$ypK zcees6_Nk@Oo)~qiAEJs+??~c|Vtp#EEI`#@Awx>LslY?H%X#XuJu8lJQXV2Ki&Ya> z`Q69Pi96Blq7LZij)ip(@<8g91l#2D3a0N&TH9vWmZrEukzHRV=y*VpQhg_ZUjHbZS9CI0*U(dv6 z^R`o*rZp)#szbxtDHMFy0EaBd;`1k;K)IZw`163kht*f3vcJQ`&z~!jN#|Qgc{(5S z*_yhY6PxF+^<*F^mJ9GAn>KZ@_z$X*y~zNZ>bHk*iQ8a&kae0a#3~5DdJ<-z<`~}OX+{}{9E~P+dTePsNsGu>ncUh*h zIxe=)W!BgI$$EbQv$`@xxY4?j{g+78PJYE~RAXrJk4La^(ld0;CHgtB6yIiCrqTO` z)8}vHP>B~-YY#J_0@z#E|}DA3n|cTqeK{P%A7 zXR{5OQg`ExJ(JP%*kv$P6nN%0(rCy5Rq@d2DYy+@LX7)G3ZF6nUP{JLf@n3qy0io@ zRApmt%1G$jDll1YrbBk>1!i|sU|U$-TU^b;_x6I(;C!r~kwtq2fAi2-6>54JNAEiG;A-6f{G~h<{|Fq}of~@K#GVa! zCvY1Ms5yue()2L2f+LgfSE1GUI;->%9IS3Pn2hIIe0xK1z;6!54E1HKyXgyaZ@bbhy30rp{=Jp^yF?JZ!lmRYW;D>KrBv+}|m@^%K(=Z8?(^dc%fXiO`XSct!Nr(;XQDEzNkkD|2{(J{E6_cau9 zeDBWSuml%8n;F4Z$PTtyaNrIb8RW!XpKfMr{W4jX*I>5jm^uEc+W z%S?qGU;Tj#N_VHL=PKEu{6aj}vV^AYCpe_FnT@D6=X?1a44?UepQx;kiX~sUZC;K{ z{f@L){lsdj|GtmHt_&h;yCm-QR9y_X-@t5a6!Aopyx7+K8w}BX!n7(KDe!nOcJSE< za#bK3{|Ih{Ugb?r#p3LQbL^HuClgJx$1cxXR8XTJetCb8I4bTr+o^2H#+~q|Z;mTC zCC!m|@%c_X_v^9HQ;op>S4x-`_!vtjou;`;R$!Mj48MyaQRz@M{njqvWqkV}#A7OY z#5E9KQptvnzJ#$JLu{0G>0rcjIea$Y5j*c33(r(#Xxg0~)|}(bWR;YJ*`WZXx?jM` zbiuWiFq7>*Qpa^xg=3sm4Z6K(!;P*VDLid1uDbgjUJg@)$sHB=>BTX0Eagz6vxJi$ z9!{O>RPgRPS;n<$&`j&^*!d?I&#t)(XC1U`9Im$F-rZ_A=z^^BzthCqRs~aOOL9d;<1ltnr;Rl#{bSaq0qAbO z8C_(hg`R67_8c7uU)^iid+)7~t-p}68U(IfkSaF(eh9wB-{AcvSsSzcjIE71fO9%z zgj`@GL>(QAeJ?iQt{O9xxmdtH7R_T;UDI&N9!Hw~H;T1nk0Q~+0kG*n63LC(NSAtz zaJ9{6ez~y)-5TgE_`1)t)5#rNL9dt%xpg0woS6r}`Vc$BjgTk3%aOe)(Y9K1G}tJq`D&JQK}G9tF>ui`ba!H-+0`AB|l!i6X5>Gk1|W zyGW_P9O9|BI~9h2G?h)XC$0KKnjLILNrA~=o+vm4SMAo)-f_Kuu@mj2yvNMI^o4Hz%X4?R%aiFHMbkyaLWHW{YaBHVp--|s@v_{Y;GZT*24x6YzFZ7%HogC!6v zWH(PWWN_;*ZiCi}S;B1Ki_Z$?!27tkX(LbjgS^5tO4(OUm%rDQUy&Wg-V{3FKKDeL zzU3jebD1=TsXu~EQ>-gm2P@E;36}UMZw~h+y#;J%JOur<2O)U5BwcH1h2FJsuT)6%1++66Re#0=D$*$6c|RA`{!j9$Fbny>DjDtwQZ zRZP^gpjDo8@kCh%WqT$t?;|6rVA*`G!8nbo&D2Ro%1rcO@(Av3^6>IcTNVl~PE!`` zSim<-s0LSsC_Fwn1!1%{J#LA@BL{D>-^M@Ket9X_SN|P#HM-e~BsE<6YXl8UOUHYr zV&Wo>Qvc#5_$fGzCPXK}9H(8Vpb{<24{uRswdODsA%RmF1EtDw;cLH#?hzXMYwRtJxE)205%<~z?QaV z{%iYSNIATV*SOvcF;8cqlemjX7aF48c1LL6<-`pMb|o{5fj0Ann6$^>G<0@*Oa+;v z*rWYN(R{%f$gg&zjV1kVT1&De;(K6n9UmQPXPnVbr>}357(wN%EmX~CjHQ#i+9o_@%_*1@L{VYUNB4$c+fIpg%TmF zGA;?D_QZ#gxZCJ6VZ(}KG=0;c`0;O;~liB~-sg$3^vF-SImzPI~g*r#Qvr@RB76xP!1 zc)?ZJHU^)SWrAb60)2m4Civ;oIPo`ERxl}&zRVcF%sqVtk7y~kh1~JnjA=OZYXbj! zTqAi-HbIpkEp)q}p1Da}03(@JbaS4DH}^e;zV;}RIA~8Q1+q2+q++>CT@PVVwli88 zjK*W1W}@X!MR@Sa2rQ*7X?8h>uR8X@_goWv@GOzlSmmMjyz%%X&{$y2Wk99dIUG@U z5I+?@MGKWPv^IVftjW)31B5-g&E9g}_ka#y2 z8y+T;%h@P8UPb6WI2E+-rjhM}^Ax)?i2BdWq5n7|?qum4=5?(BjK(hGS2Rtg8;%t$ zCSxNGgm3(?p9*Y~gcFzgYBgz{KsvSf5Y#p;#g84opx@>l+>d?8^=Hqa6+8SfODP&< ze#EmM9o524br>~BR^oSs@7$BjbY4Y;qmm8o!2GpgBI`rf+is}0x|W@jm|?T^PzLL| z)XS|LWKPi!CS!C}7_2mKp&be8ct~@esP>*P&q*c1-`+ef&^eSX&`jfMGAn8FsSM8J zjy9#}jv)Pl<=`>vB-39t82^2~!q%@!frU>Juuj-*oSvD`&_xp5KJ$+2m+#r$&)XgUgYu7-;)efr;ta*B%v)cZ{xnyT zns5VoOCCZm;uv;JRH5_Dv1oK;Ci%R+hT8XgK(Rn@OJthj#gDFdK|YtFntz;)WmThyO;EVqg4ce!FNOru$CkM*BW2kJgv7X;IistM|rJ z!l!O%nth4HMz%JC)t#W>+fZ?_Frz!nnTYE??8L?0L&U`a+G5=|XV72%6IWDrUyz`y z;N;nf)Un!|sx}n^Bp(HLvk;z7?m}m6AzLdy&c-QxtKd>QKqmrCNvBqoG@lSW&Iv(2 zP@D9$r{GKTv*k_RNi-`b9JJqv{*+O3Riz)XW|Y*(A62Fzrc!|%#*NC>lL4#+Qk)U zNMmsFceXI06>g?`)7uy8@j>fl<~1{(rB0j1p58J>S0h!5t#!1~I=>Hp-clpI-}zqPM?B;Kg0SO~Y7GyzR3HWlp?jmuJe7yh#$3b{wVL zms9vl&ouFa^BcP6l@6pG#13?qYs%N~HC{Cs$_HyMv_c*s_q z>=7yLv0@uX*78MmOWCy_Tj6bcC{yx2PhBa2@NnTC`06wh+Z8{tBf&mgqZ&``D}rI< zJ;u*{xQKbJlcbw<*0iwHq~cTUN_Ku=FnuYOX7=Gqy!+&JOeJy#PHX(kje6{f0lyq@ z8eE}wO~jiuZDPkB>?YlNbqGhDVf}>`CZj3L$uaKWeoGIH9%hh#V>142N`mn+!|~Q8 z9hQB|oBj0aWJ&U;81pIThqpZyZXFh=k}?pMT{7h+E*il$_a9*2J-xxlY68jKxB<6+ zIO6+lGhkERHY{|EVz;w~pt->~JpSr6i#uBYdjo}3z_DW1_*jn4trD@A%IO$i;7=t| zdZ_nf0(74(qM`PcRBbF|PEKw{|K|qqa{f#RZLf#k6QjhXo4aZE!izZJR4G;Fm}2!g z53YNDD>vf#5F6$BQuNJdGnXQDlE2zi0rsK4NYS#1bOm3b*Pk48I4cL&mkS=`ZCc_1 z8iKIZ!T7`q?59*^TD*8lG{UVWE<2V5?4yC)R!1EGa%Vz-lN zk=b{Y;;xLXnb@E1E5I|jv%hGDyeB%Uub zp%KYtAnD=9Y&8;Lf=Cs>rCneH0ba{Lz;8{>g|U5y$YrMi`DY8?yCy|wt7pkaKFhAi z2{d7YJ|qhn!C-bLO+<4HE3nM{J8)}yxoefm^wCqy-}HPWsw&fB7J~w?OYjR$&?scx zTGybet)A&hHNwPW5tQ-eHXXUA3RAAg;j4*fS&im%v?+GP=i7?#+7*3V{kWG)oVy$c zExACxx#cjbbPYFjQWh?-^XF$9AOp!>RB?(I)s$$FR;F;5_5Q`?tiQyopB3&izO&(8 zMJ@U%Yg4A>2z057=W5)RqC=rE#g571)I$59V%R`De)9*PczYyy40s^ zV9(wt^y#<<7w>D)1@os=XSW#s9hyj1!>*G=zZvcbieNLN!f1J}DapnCM5m_hXf9U@ zOIPjXFKxSq=T;u%3T2mLNpU1D?nvS9%iltcZ5>Si!d)`kGm?5kBWYZBE=x;jzz_Bg z^nIex9eQ1YcLYZDSNV%DFZ~rJNR?x6)#Zvm=j9>g&o(yJF^(+u#-YU>AC`Q&ggL&O z$qZ~f%J;~INIc8u} zg&j>`M2)`j!fm#k^cT()7^%{1>9&u!-am`_KNK)|@htpa_6&Ri>Y49%j#NthU_tk5 zF2qGVe9k^XEL~Z9r=wD|>>ntijW%_*b=}F)=XYc3h zwr!(hV?SZk+-R0ER2Q3+L+F}*2dkd-33T>6q?{gelG&8c;&z>6Lw}6Mdp)%fmY`@; zD6ppA%gy1mrb)1?uIf~>&l;otsPlWD>p<(pZ?Nu}6B>k1r#J6xgx^RND@o5H!!eO8 zXxt6vSy%>Rul=g9AJq+quYH9DBNot^;!t{+KcDrQ$FsFH!hN;oL;2LsE6}Im0SCX1 zVTXj>>FzNDV9Mx^qSUAIuq2}mH9Wi7q&eNtqhNsd>dN5xntj}j=2m7Jor`Jbwz9>? z?M2fb>(SXX3tSap!%m%B0|6xiDZD=%Ew&!#&8xI&`%Po?9y&m5zQz*eo?T!Li`L`a zFgYw<-3Xn9GWfdZGFz&=nu>>7VOs8f`hN2)_oXn85?uz+P8Bn>n4m-tS`YI4=iOAj z=(I@lQ7C0<4X4wKC57-n5m9GUa+yraY=}wk0C)QeBw^t9EcSX)6|ZR^DfVfM=N_%Jrg0uynCjds@Kb5D zxHa9CKN-1PoUmSSqS+Id{A@f;JuHUzem%JJwgUc3Xn|WLlkn-+0?)SE{A1ELb5UaQNp42=V6k+Y z7oHEyz(*Cw(C={?d<+SpgZ~wwVL%0o6LOw^1YYv1!ufbYYqG!wm!X9>hvUln1Qt;1 z4CiiC)A&&whU)GDjs7+Cbj%tkv-t|4_Zykx@HN=!I*HCCx5G<||l%*CaJe#`VS-ZeOk-p39 zXA4ZqHySi0d?l(J?t_FahXki*6F)LM3H@J9EnoaI8lB&!at}P-;@WTPQ0l)SG|J~D zGoE!2*Nilyiv}(5Uv~iPe>{}p+mF(?b*HE<=r9JU?Vu2y3!s1TyTA$AL>C`MQ{qcY z96cw1se4VvpIxeSSk8;)afHWAsw(!CJ7AQK7t^^K1To6_N@uLlfcBPnl&KUzIp$S>|4il4>1xiL8pu}LQi`nRmbr-4E@b6*K64cvk+ zo%YkWw|haA|Hk08A07B*NrSCk@g*ZC(wtL%l%X^Pr?CAna?mlr5+$1FH-~d{ast=FL9C3{#%b`14xw&h*Tj?h=P5ZshEngUcLsr1+ke2~g$ zgZ*m!>7&U#^BRX|(+;CVav#f_dmY|?$VabC4GOraiK7HBKvB*moXkqWS-9sK_+5Zj z(=qhn+Y1nVkEK25W9azx?V^sy(HPJ$9>>HCM+@!a1o4|Nd2)>4i4ZZXEtkl9bs4?% zeo0R@MMI5p5Dpq%18z1#Mq}4p8rvRN9&z#_tu6e(g(?cJEL*{S7TU(<-*Vyu z)Yj7TnNK;{WoPhqr~;p6@)b;u$MeUs0DMH}@Qhvr?Yq5-+&e-k&bo|-YNax%MuA7v zWCLAqf3rt=z09+*gj;UEL1b}L$g5Puf#lR|96Imx=|W@44%F}Hl>eO;1_d|YY>T!;C>Sbe9`ej_{{{hoSkD}0Re<1@(A#c9E!00)N z2SzTSla|tW%r}gai_W0H@1=0w*A}ZsN%5ZwcqsgtM;qJrVvD2!chdVdKXZvBEjk#2 zsj}*%c4GuuNSM*qMb|4XotcjvY9C=hUM19q9A#hTOA-@$ZjYYs!l24UHpK#SYTkyU z^hL2B7MM;(eq9lcAGd<8HcBGg^d-yla$uSFnQ2Wt%cV~HjZKQTD`HG$k-hs4HtR_n zt*DvA8!O7#tSvdpb{mMnOnA>&-~0FV@j|tt#Bt zUJlD2b+9*8Qz-)b*saBj(BNk(weHVhHp)L)e&#ePyfT0eG(6%QhWUW+gdKE5?GMus zA7PKC1jD?4faLiQ>hgxbaGfFIW1o`f`h$1;mxW>M+Rl1fw_y-P(}KJ{ zP5PJBgx|NcUVsz?M|E70<%CC zgzV3=2e9@^2{-uXbjobWoO@n9jbb=1gv9+b57g1|0L5IFEWf*TF?=9{CKHph12DgiZ?s8ZX7FE~M1UqG1W;L5cY&o@m5tviA z4>0@FkuXAh6|0Odqc}+&f}{6A*uy>+)I5M*r+2du)5GAB`HJ7sYK7Auhf=Rb4Z9yC z^sgpqQnYz5>o-e+era>gd#WxQrSb!melH-qM>*7#Qb}u9%&>M1)@8F5O6mQf4Y1EV zgsZHu#HIeJ^l{`Z{?L+4oX~85#=a5Qsh~|?tG!>B7ixXGqx z>9c80lPKp&G0s-`z~pSNvi1;l7Fj%z<#|mL{0Tr0L?D*}U_K2)+3mNmqF`7F-I&8Cvyl+xQ_}ameAN_AWx#bxO4Vwja7&+{@iwpUSlvRj^}u zBk7d~t?&*vRxLo-T9~h*Ci%o=Y?qmDF;K$2~84qIEYF`O)ptB*0GoP|k zl@~xeCKBfV-GZyX$x?P{DKr{vgX)U~;I7fjmTn4R&(A4g(Cu!pNjDbn`CBGD_p`Z~ zAL~#pX9FF(GMu(;>4!J!?VMltOs1A82V;iZhv{i2N~bn$@VAh=To}YP(o`pcd1zl?@FFx#Z!cQlfNx2T)P1^ zx31wU^smF+57VGZUWZn=CgLiSUwq)`b~f$bUVLIRoEnu2;Ub67_hA!e+RZ|3pK{zM zu)=?iwq~LfKYm@~M*7>UkH%y3nRbB|oRwt~$rX z+sR=;iwxd(9!Jf79x!l4Sw+RW??5hlsQhCroyyxmQBzKf#>|>X=ww^U%LXo_K8)Tt73GAMocB z3t8&L4OnA@=jTjd_IrfvP1kYO!p7q%TRSY2`c1MW{%CvupRg~yON+K@X1{Tep(kHPd(U7GH4tU~{A8k;2S zKvv05!dIi5@%nvBnz?N>hV1WTJ(9Orvx_Q3ytKnnCM&V@0n~g0q;|npv0bK zR9TtCsZ2`dni-sq?W9K=xpN3L-CN7&M^0onT?b;wlOX~dX*wQyv=_%3o*{!jI;3_|*pH6Wp?eX>p}YDn zd+L84tt2b()Tfzj>#DEdXHp4^cC_Mhr+ox1i*Q}rd|{V=jAV}3k#~_JtM)L)`-4vi zJHF9m{mTv?p1H(oRJ3WtmojX~8AblT>)3N)@AAY&2BkOr#68cKQ}>4FD24p*`RlA&0&wvm=>YJ)>%?QF7MDY{e^VYl>E7LlsS6F-I5 zSsMjmTaV$m@)OX~+ztVzu6U?r8Y!v@T+0ETR2vkETg|*E_|_#Tf4v0Po>)jSGMXsj zPt)~H>p&vai$=S5vizKOz%DZ_d_Y>U9C#9n%enu>ZTNabvqj^ zWN#}kwz4k<3ixt+o#@UwUHG$S6k8G73n06mWnDYMiZ8FH$s=ac>zB`2huT+|Et`bX zC;x*VT0l2{|7L4Fd{B2~5|iJkE{+a~qfsTXXkz}Ft?mzJy6> zonEw^d%)5K-sNZCBNUbBK^_v%xsi6t+zXX`EWG$Qaewx)@{n7ovL%P#xkT9U3%$h0 zb67>ey!47S!zWU}#I?+6>0&s1XCk)!8_AuWRtEA@wz7`X#{3_Fq3!N8p2ggm!vro7 z4Xjp&P76Jzzov$BF+9i;^xv_HJSB0H;Ufwvj)mvP{lIcz0EN3Wa{d#BvHNjEvk!7~ zAmvBJ=BM8&tD+Qc)T{8Gb8;cnIhrgbis=Keoq`@)Rg1`@n} zC)|0T&!fNon)p!I6;=7$QJ33tvj1QtdTXEoZAMyTn>rG=k7>QKudAJX9Hfs+49lSX z`E|D3E?D$p+aq$dHD_OWAyerXO;6mSxxqUUNUsj?&L>-v%J#xQzbSZL?JNZUiY(uw zV}zpyou^q{r$ysd+=FVBEEuMrE9}QFajlV0ss4==WeC}Mfjj_WErBKc`VB0x`N2-# zm%>)pdAN3b8hd+U6evz$cxGZ2H4j-uTg=XaZRI_D$Q0Qt(`ED@MuPcE3)sK50=o4* z$!h9480)MC;U|<)yJ9F7jrxe5B7Mxet`Ba)?Ov~|S76dd&=!*_F0w+0RrM?qK%N?; z?{JEOcBf$E2@Cpf{U&(9EV$5ya^`SflDq{rC@5r8YuirTA2NrJU9Kza;m6rTZ=6G~ zFO=etc^N1-t_tklb&@Epnd~2(q#OG}smc63+nXh26H?mAS0DQWb2g3@e?HucpIjeP zlF%zlRN8|U={r%pd<*y-yv7_b1p2QGw7LFz0V&2ErPtFQ!<)}tYSc0C)_8iil(DWY$A3kjwi!&^=#7RL;M_XTbf}n z)#UN%=GnA-upvpmG~r(M{UgW8^5k~nJ#G_zd3S|i!tJv7Y>6J- z3Hpzz{ulsfCZ2)$*7l_P?O~Yy@p*rm-K{|H1yrP4Ih80=VwE!8tjE;k9`YeD9*o6mL?wkNwVA zR(c%{n12BGod)}j!^r%m9EC+b9JwJKzDW+`(2R8)-^xl<_h0VS9yWg zB{->;k2OL+g&b^cMsBr`p-vNWK+!j(Xz=U>Ou;7xBT@tpTyHGwGVMz zh)M~(kiH|@a7zQ;s0^g6dPDS`V$Q7lG9j4LAh$KM@%`io*pXAs);xM4dYYcgf`xh6 zF<=G;rj+u&vxN6`i7QPJa$I%W7FK+T^5M2=Y2Z0^;eT$d;OOi#Lho}^aO{J9{EpfI z-02H(EHcE5V!Q7GRcfQ9h8jKgleX!Bd~mai=Pz$oE5Bm%k){j}WQrR5SVi`ao`YKJ#py0tI^oXL4o>J7dFRNwxx-ziMZF-t$mR zZVYbo8Ba6!KZRXpjRND&6t|leFuRAk-1|U%R^{(cGUdlb%8f6~PHGR?QiMG8s*D{FeuMyBwjw^cZ&O z(-pScLj&7yyVB1C({cB;yU>1K=&(jNu*198vyXp9fwY`9K2H_6r4OyxYkh&`FuRZW z)@sneg74hS{~qGf$TjSP=^Bh%Hk>!z)5#Zv?Z(W*2l=yK#W45mEZ%aQ4H+{(8d2pg z@KF8pd)gxSY-ZTME-}>!aG6PKel)OdC^jVermaIBT~G zsmP99o;!)f(~pN$Zm`FQipv9KlQ05{5tN> zR1|07%_u2c>AjBzURR`?-^S>F@DOV~-_I0P-|}?wELhWi))Fg+yGv#8>Kikd87X9` zGfXOGS1l0Dx?oBUvRQ25NHy!lYwFm~kDIZ(>jN->-Tea)^UBO<)0r$fvDbpkljA|b zV=?g#nOx3_eSFX*Q>J0&N#*t}-1QwFAm_d^Kd;r zJOGL54M+nMg#OeJvK2CB!EJeL%gRvEn$4r(%U)O7GUy7n<}IQ4^()9#Q<*(?m%=`k z6Bt)N0bM^Bp+?j&7CgO!i~4BIhDV8Do>>B&-7*Z6KN8$LT#ROqy4kGF_j$9VNE&%F zg5=lS`Z$O}uDNNiT4V?p!w*Tv7UTTT-cyTyPT76yQVOhsoHy4#(x_yn` zy{Ll>8fQ{*?gEy6^eSAqo`id&{OGIj9BsbY&0elrO)thsvw3;DaN@Ig$cu5s6(y;- zux~u%t`K@}!?kf@V;9W+)q{mHMO2xpWRo5yu(=(@Z1TOcXf*yNTnH?nmPlVdzu_v$ zWtPKL?>yN0w?#(kWTjNU$8baL4vs2ih#W;fa(GWi84 z+Zz5)(Rn}A_`Y$xy-S<$p;9u^kmh;r>!7R%O-huVMAAYB1~h$x9{-{<=moFC44&i&li^?tuzxYGVCZa2Dyty3P;l_N{>dW<*@=`2N=R9T!Y zI>=o2_{zG=?8ebfS-9b@fnUTfL6LVDPVX0?M{mu-EcXO_B=n5jSBjx8@;{K)OO@Dm zVl9n`r>Hzx3j97sVj#DRdGCD;N+T!Z7A*_Dl0p>qu1W&=r>pR9ei1&aIL-Xa3`0Ti zZcJMd1DoXv>Em~H5b$e^I;`9PFY3y87u>SYWVb46cE2afOi#d9^ObeMehKtvml5sg zIt39Po@npy2Ulm`$JDgnSfI##cED;ZS=mQhJiKvvW*%h}uM@O>z%n=pDy=!jE*CgZOZV~o@|NqkNpTVSPx#C(x~E6PId9+opfl{a0V`rQ zFa@Kuis+dtS+X@~I|yYSAb%CPJK=~ghEAGBDpm6FRlzivwSO_?FH)tG^~6!>HPWC9 z`D8YG8yg-Zvm;AK>Cy6yIBIB5#x=dGL;E3mrdJte0v}6fdceaDEf}YElK#$5L*I$* zjIFg3jIKJ*_4Un(;-;5STRaCF?vF9@>z0y3FPFd^|A4y8L(^$ic`Erht{BV$Et#j1 z&9wVv5UrfmOjNft5U;YW0_Q1Wpgkj#_ZnW|uajZu9oWkCz>`33sXQ!wtA<~a%qjcK zRX`=gVMB;IOr2+e6#r(Fb*6Fdtxb06AOlglAHPaPf=# zXm|AiT|Ft0&fA#;P#kvdF`&o)Vv8I4_&}%q9nGbEwy6nE*@646*`{0Da z{DG^bRJSc3v@02oA9fpSri(-7yHB*Xr~|XQXYsE*`biDn{=)a0Uy%IMJp@9m>5f&| zpcTl23HN1Tiv4&J{H&B%I@~6qF{4CLYBGdgaf0UtCRpJh4^h8W>oy#dfOxb-ui~d{ zSjGx$?-gN#B$DZ}I~jP@#*IE&a)A!S4^h9EY#6as!JcfVx_{&P=>7Ihb@Ce@6N^WV z>|<_U;P-7kfdDJ)t++oGneDQln40Y28$HcKwW~1;Hs;=KootndV zQ<}pdAWj<9rVp`9=^g5vUPwGM|5!@K#8W+yOWMSgr5_&!S zJ7aBZLGC_3O=rzLi3+#{^gc{Mkk=Q?gLhQ_xi&^y>I&2<|AXwoJNQ^uzW;EOM56q97+Hb3RnjJZ>p!7>z*HzyPC7(>j|XXJO#KI(N`62iWT!758i3oa95 zc>EOMbswN{Uh5#i+zJf_Kaz}+A^JGN8l{^oab%K^;HBH>H4+d=bnz(Jr#F>hJOZIJ z?I@@}`^zrnneumSWO*;5PLp+4I1c@l64F;)1iO#eqS-WcaCn>mRU~?yJv`-Q;`x%lL_ zk|23a9_jkH8V|2HLmtfRCcnE=NzjB6_<72O%g!c3|1>XrJer2VkMB}>UIkWnXoErI zIQ~PoGvIsH0^0vhq<$w{z$)1d^~Rs1ix;1zMq1VQ!}u$ad+bE-*_M*FmqOSe{FNT_ zTZYHqb9ue&4UlbVN!E{Kfa>R;>|J9@{-5nJj+h1?Z?44N!B%kGcnglHbyK}%*1UaT z6YEs`Ot4AH7GAhqpKI#`=Dr*n)9v8x{*!puigUnCR|B7# z4{W(X6*1Qwhd(=AX-el~5+<*Wrxq`O1>p&_xla#P->Jj)*UQjaPLd=s?L>~-S^Gb) zf=5FptZ(co+Wd)gkq?!^r-WweldFk|(T4DASQqv!8?+o7oK7Nx0E43cLFmj}I%l6f z&O0AUcFt>~Dh3k-_qL><>t_R~k9GmnL;IXy_#G6f_cG+ZRqva!_``{)0C{b6pZ$0NidGec7d(R*v*REmqk^v^? zSPc3$RD**<4hC%gX(h^Tp<6k|(QJE5bTj-9v*Q)W#M-TB7p09^W6{uBUJC?8aP-S} z8fY5Kn_H+xR$pbM0~V`JMA*xgeDq^g7am;Ztb8+9?S7txM-0 z`GlL)4AHmHhMEWk5m&ES%+{)P@E5Mq{$C8FDiq*~7b!S1R1<$)j3#zb*Kup3D9n=m z&92tatXYx^;Wa;8pM?C@&Pn*#UEK=+0zpwU6Ol$dN~_I|Jm+-1)5Y zS!tLNyPf4%)=>8gK~{$XkC65LbLg5MYpL!WE3#gBJrvGdM2*uONkZomx=k-0@=p8F z&M-~Xi>shd%Rf>v#dYxDjS?-IZ%MwG%Y(>lK9g>7wAMM8U}r8tS-i75bBAuoFi&*clCrn)5vQx zablyZfp1;5k^0;kIuKe(jH}6%OM^SvLh$J0UAoO+7x^$02N{nJ5gW>RtZ(n5 zrR-Wv$ev8?j+)mkDpw*G)l+D*Lt@MXVDv_Ko!`)oc(5g!W zwn$AT+5R_)<;_&cXlo=Rv&z}KTmMjbJ9GHrn#F#sPUT%`*bDv7LUBvu1o&)!pQ>mk z!ZNdSL_GX6X;p~C8A0}7n;czNXg`NoHQgWu$>yZRV1OBaCk;LiM-VN&0^GU42o(yoa1$a*lhCTu3h5nNY{f-ApcA(8X7I z-*D=24RU&KIT6u+!Fz8fiVCi(xavSEs#v(gCu2z*=+cF&SN4O<^$~X4jI*RDlcA+6DDY3nB`PDHlvNMiu^`D91Ntn z|7MU4=BZ@Cug^?Fh8Q(8o`zly3K;VBH%$#NhGj?Mh>1xTytyNbin8|^1tBHaw)!V6 zubo1UZYm*XXGCLi=`x})h1*p$+0^d1o`J5u7Wno=JGppdFYC-ObfM=2!LP6JsFAD- zADoX7Mr0iNyiphAUSEbEd&6 zl>T}9hGb@h&_d^h@F&!g=V&^W&3$;0^GmXtZGt zPIlTu$}IKxH;VXlgS#bqKUhY`hy5kXp5;S>=jvrEC z5(q0#;Dz`|ap&p@{JP~dGt|H%>yL`!DJy*%yw;kIxpDqGmt7DsNlM^yt^hXWQrb47 zl3MKX##JHf@WXgvxSbbT_l@fb=sUhf*6}WwN=+BMoP7iopEi)sPqolv;|b=rdOnIg zKSRW}@5LF~N~FVJH4)ibOdr+NV#v4ajKfM7(AVeFISUU%^H?{>LYEX=Zq(w72aYF> zDFw{TDk&V>Zbz@IRfCHc^I*;#1N^KkO&85SNvdBxqi4l>iM3iX@(xW!qu_IR!Ab$P zU)~Mu>1^VBj$%;MvUCWVO8vWb{eF-r;Zfc8)$8 zp5%DdYppS6$~-cG{NmkvdWL)F=WWd=lX{Z*JM#U4+VBi(;XesPSP_R8?v(A6@*&f6Xug4N`AJY71gcuMJy8M ztXU{8+fQax?I4~yDiE#4*(Q3fQ2(E*^jhi;DnIiIE%tp(MU?N8%$k$5Q~Nqy^YJEZ zn{3O?{G(YRw{B4B=6Hs8Ij;CS88~|CK210N5Bd&VVbi7auz5xmow0u^=$i_I?W!j< zqWLfs^?o6@Y^Q^ElP7d_@4+fHHSo(H558-^F@8l4Y4;KbbRG`J5Mgl`RMvp%x5t^j zi(N$i_*0q{sfH=DTj)FaI25;8K$O-m!oIUs=y5j)x;}>CP%S0t8hWsH#RAkbHiZ<4 zJf6EldlmTVtpNKk z0}0t)OsW!wh<)B%Fdi=g(ZNEz!^`cdg_|DqXvBh_?U}k+sm8dhl1~?;wA1lDx!=Bz&KdHdV?~O1HT^i=7!<|tvlB^YR3e!Vk#%j?e$qv}?d&zrVD4Fa zPL3>UXKQ=ZnCQEPcqmK;&o}Q!?QJh0Uuqwz;W|(EPm05E(=XVj@`Nau%;taIFU)z< zt4LC>5vdDT#l|Dz9Ob`JJO-(#>VFgX)?}2kFcC>cwR4@=E$kKCZuqUkwjt|MA zY5i(EWhxEgkw2J4SC-@R8Hx14h#LCd>|zBuYq4a>PMRhXO@Gf*hupDPRQ3E1jN%Ju z+0q!C-1dn`Yz~8<0}X^}<9cLs9pJ*ly^s?Uf#0jD*!veP_y+1PshChc^;5~kPYOoN zh^`bUYJNpS-f?J27KfoL9B<*U3-z}TL5G!G0nAK-9Xw@AzG@odfkzM7@6S`|+C6*e z(Uu5gOZr%u{9KwD7ft?7Vi;HHSTeoj2$hSjrGwXQK!)TccH_}zB2~l9>BCP@Jp6`L z&=O~p#B_+9zX7h39$>Tmj&Tm388rXj{CQ7!#Y9vX^7pgfnfjpFrn#I=fU}z&zo&uW2NY%03WoJZ z#{_a(N`j_r+<~2o&eeYPTSO*#m5`2Ev*1Ark{N>uT!*HtuGec0dsl89$Oir(%~2v? ztRsVe)}}D?SI8B%GsT)4f6Hp($)p zbHX{|m+3X(Lb6X{J7l6okD97-dp^VS`<2Bm1QcG;Qo(&l|@<>2OeDvN*F7SJFLvLjy0_dZtzwz?GgsiBkm;Z# zF&#%6>!D%v6WP{UPvb*1Ffdvdd%CJ=$KWZd)}o0K=`YErEib9^gJ&Ff*Boz$T%ZLr zbHG)pnPkVxfcKRPM0>#zjIEVN6=_)z+TcuE-<>1bPa}ZYvIVxhd&E4t?FN4*nWL9) z1}wJTkDYST#6$lqk-ohihUUD+jPFt8iQQSEdcy?=iZ)=f;{$sBToE+Kl#{xfiS$HX z2l*J(k9XAKF?{MNGXCE*lopGFIGtoXcIXw;{mz)bGG-da&C7?MM>~m3pewo;&BF8U zS^~yM3mxtm(uIOEC>uG4-(xF@S|fZsa9l>P&64B#IL?CCgISyl-H&#(U4)dgf9no= z`h)tUTX5CkHyJ2D2mkGPhy8AfOn)&4U5ZY!e35Ym1C!z)eWie!_!wdA)Lybpw3to| z=eW$MOByaJah=V>bXHEdn3S+oxQNtzMd5`CzPoqtv$9&@=w#IWjihqJb(??V!R*H$daK|qS@&x$3~YZz7KU1bkj*6cbE=dk ze3u|KzEUt!cLtJcU9fqFs34Y=hgDbZ6KjvdWWjndD#$Cr3s3Jb$EA+3HKm*A!1gu# zIRO*+cUwE9rzeh>pL_0dqW-T|)(ahvSj9VBb!41U12FYs$0(9YgYSbg$5 z{&R7s$rpdHO2MMI)jAR@x17Xf%F(ckE2ZQ2seJzU@g$y>;?^oxtkjBS%5RUSQ3m5_ zlf+Y~mzafLtrfwlc!cihd`TSt&Bg9}cWABA26CV@maT2C$K)1MSaLxhed~+qIekr- zNse&AfK8ZvwHlLk__S$eIr$ND2&E^-v(dH{6e30VEk}JwhMO-AmPB%))n4qcZ-R_4 zQS85H3I59GnX;Fs$<%2T@aDxI($=So1DC8I&$5ollx;_EW-n~!fY_UtB*5tY6cQla z!Fw5M5%L4A@h9W zHmq*s;F6sD#lCB#&Q7oaw@F-r12HQY#-I?bd&MEH-k)hW>q$;eG-h5Li6viSTEROxV7$YTPiGFRvsnQT*%5iUkwg(!j46I%MqiS z=>2bV>FUqNvA$^rgsle4JSs~p} z1^BY5Kv|ki`w)$z|BC7Jz8*~J*#oUdR%5+LF7vkvd8zU`H21j~#=ecj_vU8_JWYk# z?7Ph21_few8mV8(Suz6w@>cT%{yT#3OwT3k>v%&tT~p~Tw;EU+Fagim=y6YPfezT5js<=psBh*mO?iy?1rwV&ah4GAX4vJV- zk_FQj;@D3&bg_5`vjpep`I+MEpBr0<`uuJ>c)0-gsI11u`xrX1MarB9uo%CPyizSuthDVcRd2&Ysf zTXASGT<5$2ugIOktUv2nTir*r#rh=mJ1qpW?`DzcLp@~5GCLUjaF%>dXUKuYZ>fjz zEqwKbfRAt!aoOF5Cc#7Gxm_Hja4$xN&lX|IJWU8({2#Us2(cRyR*)S2INU85hu1I1 zllR=x>2B&0I?40}`_o;8KmS)7+2~`86B2V_=kr$boC|N8hZQrjcUoXd!5#WLpcdk% z-=-om3y73zB+hOSN4XIbqQY#4y$ZL;)oKo;*E0uo)50M7#s%`;<_}!SIu7&jAZuSV zM(Y;KK#TAg3G>;zL@?#Y35Z;%^S zU*K3$AmR3tbeB>inXV{CHgt!B_9s)knJA6o0~Mrji86or7i3BoUVx2F`$4^QH&lM~ zf*<3mq0&1Aj8@+TMm+)+r{=>h`F_|F`IQ=%kHZ-Sr$8?31LVBc!JGsQeyF-5c6@2Y zhPK~SO{Sd6Pi@7LReSJLubSXr(@*-kTa3TR^a3UbPbAi-eh}d$qhxfZgdk#@6vVvT zh;l(^h|tnR+V>_3=kB}$i4LOFVs{Mg(z2$jTspAkCkMj#x0wC#D+0f8XV>|nedNWW zJ`xw8!c~Xdc!JKQHO+M}&hie~<(~_pzx-)$`c4vlHJwba zJxD*4PJzzZXHoBiC3zgMp4?ezNpD!mQ;*SN=(x2X6?Z&k7IB5S^KQ{p6vSvdK@AXul}ChK&?_-~TTv9Pz4YDvF?>KD^t@8CJAow*FtlVots zsyxzPEW-aJFvC&PBXnA)BLCu|2$CFS1ZgL0$cjUX7~pY-<~;7F2}UaX=_Z8>(1s@f2LJjcx_dP3US^%0XjrZ&>~Ja*JQ6x`}fWUrP5#; ze|#(Km%KyXUyA0Q?!=L4)R5Q2~QJ>g2*8FC^2jPdk_iw$SdN?{|(_L;{ziEiV+zIX^H zY5G8z9C;q8Wyz5rJ@}GaikZ#DC3|R*qT9VZ-m4w1ld&GwMsJ>)jKu zKqnq9TiX%Vr;$FdeoQalX(Q7Ay72RzdZ=j}%oM^DePGT733-Z#YVC{R8I(|~amUZbkcV8uWb$bDA`qEx^bZ0X5g+|~& zQ$G`RES=mvr3DGCbR!)h%ka2GTal9#xA-_cVQ!pROcV$ud z7{c689)nrhn`vS9bo?x_A8ec^y&m#BAD_a|&mUmt z<20&f=>a!Zau=)jCCur_a`4+O3CE3olC{^rkdA*7`EG5tAR2UtY+W}Gdx8Y`WK%m% zx*QJvooaMP|4Q_g6XV}qbCGu4^MruKyLndT4MeVbA+~$mq$gh$b0tbUh~kD{FMz>^ zOUuZ!8{f!2Z9|xU@G#76>?6q@N?3n$DeUV%M9w{P5X}3QK)zQF&}kW8shwVZ9qTv~ zTe~k=N#-S?D`Dw2u3YZ4Y8_c7k#H^CE(HwjlyFcIIXL_`l5ut-BR+Z*iqiV&y{8^{ z&bFDCz)#2WIlV;2gT=?c_duLdB2-@MqEE$==hay0B%12lO_gN)3M^!m^-zT^ppwV!h(kWIQ>}p+adj%b5o(M0aIG%Ke9OUd?2&)nw{6E*P)Btpvl75NrxEr)QrrjQ-_U_(5+Mbj>-$Jn2m%v6*YY z-J$`F;)Dcu&d$cr1>c$19AxxieIAG#M7-3Z$a!`9A&Qz$R=N zR1}(VAntEercr^<&#YslT%zgynYx02dES_;UktNax02--rQwavI4G0cg%+!<1ow>k zh@{AF8Y&?HtFF$&9N#|Jb#)^Dabq{?=(v(_nYVcAa1y>NYJ^eU1o$!SA)0s#3G|;_ zqPHwW1;x>vTu-5))|i=>eKjc81QqG>(XpXT-hd z5o!%uqGy0URK1=>6GrlY%#wv?cGt*n62mQ?kFtMMAHl4g?>OkZjyNfPr**;Z z{CCO}obywNcSk1LIksciD@9noobb0lcO+hP1*ScHfQ!A?K}ujg?Vdb>OE>&w8%FLD z`KgsSykjMpI1-dta|D#?$~pP93sx-R1Rf)euyIBJjyF+-6^i9V>&Yda&DMV0WYd3+)F0M=iEs$+pod1=EwMYiZi}!Hpt!zLl*QcEov6!O5Mo_p|Jc?A6=dL6s|*`xAh zG2C2t4aQ%Yf{&wA_#yr)utK+oWSpub#Uny>YHs(4ocknTjS{h~YC8L9nGlXGm4kox zPmsJgar`V_O;lcthu)fQ4v472g%~bU=hm5+2AL#il@C1>o5r4Af0y~1noDmruS2i) zSJ3<`j#fXigyGX~$-GVpzSP;JoQPZtWaVeW%Nz^%oiiRLtCZk;TVTgmbkLdwL*TjL zJ!p=Mr$QU`Aj--Jgr4stS*mA9h^HCcpZ1#si<_fOqd(YNJR%7^?l+LDh>F`1@$7&1 zz_cWdog6wq6lSa7SV0sjNWWtLo=Jurb4k=&k<7j4=g=i?^QdB|JC$4)+@H3i9X&*+iZ0KB&G8{N`5 zpZ;t8N~fLO1sYMpDD_JQS2(PP;i_${W<(n7djA+d?31r6cWorc&TMC1Yiy^3pI?!d z1@;&_PMt2Yxk~2e#_)?dS#K;&&g<43v=VbL%jH zyujhLTKFv>4Sao`QJMbBFhTA#Dl~Nf-!~V>wOykAM`D>4kA;HQtvTe)P6j`Cad)uz z6>xIXJrwJ4L$N;vSoACm6N??-Vu2O>`ScU7WX=YuRPMKTx(Bs0G~o2}I(!95Xjmpk zSLdIjBP)ajspm{kNPijL^bVmH>r@~HH z*L$4p<$_=(^74W`AKURl`%@Z!nZcP;GTDk{;Q`b(=Zn?;_*i-~wiQSHAJM4;&q+qOv-=iTJp^Ly7iblp*}r--UI=deN+s|1o;_ThImE#y6#$v#f~ zi|>AD35vcHfQlkfxmp}^}g|6|PnAoby*M8E7FJ>#! zC%~s66;~nKejWSo7eR~prZaIU! zEeB9y(m_)2_aoZnttOTdx)71-N@MUY6!o=&O$-;iRyzkVsdpKFiAtEcPaLv9L@;e& z7v7rFLu9=*@aBuix{M94nOQm(#Nd4ewyU1RDK_%V@JSA8nDUhhE=SY&vD4K3BnKm5 z6QOn6Tnyv8LfKVufiMT){pD3kAKi1cyi;lcGXHI@&DLCwW&_{oU-2GDC~E^3+s}-2 zr6U>$#eoAC2)#O*h1-oyF~bOff0E$0xnH2X-rLZ|6@qQV_;@_*22HYy=J5n_DAF~G17j;`-QFVj zbHj#=&QKOOlwJo(4yBuLW#opX z;A{b%B>svl4~is)_VI(`jI-KT!*JA>XcNq5sZF5Yp=a zwh|wab|*07+QwmgVJWyjjRJei9k@QHmT|ar2P2vWkd-zDP0tThL;UjCxLsf z1L3Sy4j$f>0HPegZeedbiFh>ymODORtYKdLjML1V09Q#S9cl$Y99Xok9-I^OB}hq^gNhwGC1G{j%0A z+JO9cWsPBOGdPh%71;i|00){>`KL;X$bZiHwBB_o2Rn&`U%9b-hfOQ+d1W6Shfq8+ zriU78|Cil{baOe;+i=?7dybD-E(2wJ7NBp&fl<9wjR*Q1b#NR;8<@G@m0-)4WUu! z>#Iti9IB#{mCmsA@L|??2@g)R>|~Ga$)L7JjRd9-Vqqu7V!n7AjkG;aeut&gGoNJf zc+OU4$}=^7y$4qYldOTI-PI&WcozLPUWA{h;0+rV+d}(n4tzdbM!Y>w7aWY!wI#A4sA%SNd_3IsxuFRj@EQ11jb*OhD;!yzih(6@T3$Z@vWV|8G> zO+N9x8AuG`O6cU~NI-`&eEhWlD&9^4o3x3`nZ18t{ct?0`8UEmw`9nu9HBzz_QR_-dyw2If|^zSBx|w- zKSb&u9D2G3;PMB`jHZHXLp>}{(xtg!&!`AjHB#b)5ur;IAmsWs$ZP8b!QWG$Y;9%r z^5R3I&_3vMdP5@fjnUHO1)XLS39sgs;l$8W*hoidP#X819u>~Y_8bS-rybP0 zaVBoRbPoECzMzrJH9D>BH16GQ2!iAk*uOa)EE;X#Mq>fIQ!2s8_18(rGiiLi;uPuG zx0`@sA{d5;age61)F#$Kz+Zcl^i9j>LdNNMLFNs0oOuq;9c-Zu2h-5wKsh4#ostt*w$sB&FGOJE>I&*KCW>EjE~Be$16j*l z2M^{XbuyEOlpo=+cXW{6ODM(rdlcxpj&PbPc8dnNzku70`|wEDQ4GWgEWN%Qdv;eq z(6R_}jDH>-J$+F6**Aa}(E`g?Ly?86L1W!LUz-IAEGzw87YO{CXH=05A^Gfjb zGj)8(R#6wt*&uGZ1Bsa=oVxT97aTf;r|o3nfl3$5?~)S?=pV#~GC{biy%N^$?j|8# zDL6y#EuCbtmRL1t;{MQ|bjR<>>?x5+C^|eJ8|qXsKSCe2*axBJb#r2!ABIbBC%{0h z8csd)0@wXAf$;D5aNWnPSa7hDHkAQR;M&#}5qIcn^-2tLJ_8@dhr`g+MHsy?fT+K# z!9Q~~1z%s8KoDDBH)d4LZn^W36=|1-ojJ8Ayy+v}ej9sTvo>G6drti5CZR4 zB0a55+x{NHsLCZId^sl@dtL^%rIdJ2UjtCS06sWLaPJcDK-ftd<$`n2cK%dBTAUVN zKQEo!K9G%%7RK?83hjjtu_mB(uMEx4jt5VNQ{-8C8uA~{!dw z87CiM=`>FG`{6E`EB})gckHpMjL3xlMnnbb|D3S&KPz0aL<@~G#L?!L9B$4?perwo zBh5XsxH{W{E>__n+g>iDws#Wk$aq55H^-5o!U@JHnUQ68>W4li7#8zXkLRhQ@*wr%QVjuY13x5XzzHO2-QwTnCZKu&S9)jJOrmUG!c`|R&x03 zG2C?^8xBsk!$9xdxFp(u-8st^o0}05{Bnr*S}`~udW6d{Anh{~;@|ApMtXUUg3tFO z!EMESJpXOI_M;#Ytu2*F4>L;RgnF%J(~GGcOu)Ctq6(kUtrqH>r7xNx4Y{& z%bGaUk~O0WP<`sIRrCZ(lSNvnp{go=6)R^J<&A^M)i=o5+EDtiN`_{Z3Dbkl@9RST zM6p{=?}VoTu{e2HUC{Z>nf%;z9430!5HE9XU#;Fowd+q%$xoW>Bu+Z8ii5jp{j7lX zvx|tdt{k3^I?IK4mcZRyR3|5AxGbYnqJ$0~Z)8?dXG0>`3%)HkbW_NtIgrL2NczkUj&Jq@|N5!%*rK_La zrmq0xnG$^3$j#ZZjxZ{wJlyiT0slNyq>G6ZmK$HAnSLTL-s>uCi`z@VOo~|V3I~nWKG;|I3+DLxF+<6^ z#Mr=!RGCK6LhiY^b6$~q_Dp~q1Jcl}2v`#%$q&1K4F>8~kR?wyQKOeruweZ#G?ZJ@X+ zM1vP}QqL5aS|7n!M@|Jzi8H*4E7fH3Rei7+a3dis?*(AtFlY#+35?oNf#k9VPXF9(AW{zyt!@>b|9!Ky(afSU5 zm5>fo-+y7J1`{S>dOsc5k&RyiLSd?(KD*0k9@Sa*0p9*xP6Lfk6U)#-VybotWm1k} ztGO~vKc0@Z7970AL6&-GIKtk?&UjKZ0P4Mb=qj6!#LQk;;54fbQaV?_4yzoR_=p2{ zICjy&8_Ae6G7Xr+$4J;|Mf}@b&WHxfP^JEhbXnIYnEd<&?RH|Id%X%(+gbv3KMq59 z(lnUTwE(0p-$k$VNRUY0!~l1fn*U7(ir8gnt=3HvB6FeFa1PG&D}!3GCOBKOk@8D9 zSkewQ z;rbO^kyWMZxuJNWb6QFij0aDu<=m}K?zKRtGBz=FM{MymZxW0@-T#-!6 z>#soE^C)^<=RVd>D5N{w%dlliAQ!F=g93wcoWtd|au1c#w-p@B<11g_d%K2ibgdxn zOa9cU20g*ehwNyvmL=m+8jm-ne$$9Jr|W^&tppNT2Rec${6TeB7Y69 z(qG?i^DK5>gM;_35FIZGo~(?7pw+kpt#jlA;}cF$%U7$w?tK*2=pV%&J`6;Cxs9F? z(l~WY8b-eKqGX*54*rw||E_&_e%DLtcFYDfZAa*P$2EeJ|Eic<=a#W!QMn{wOBVY% zdL#7`K1pu$GN^cIn6{;K(8;Qy3bh zebB(ckIc*U!HV=e-U%%ys>b8sIpT7RuYD3*+i;RR|FaDJ)oS2t$#`(};o*3z33Q)V zKRIG?mwJ0#fqqdA?l;rm3o_uF=Im+C^zyQlEypAUVlZUxc_OGvVN zFEO!kWNcSj(BhW2oDlLEYlxV~Ou>KY z4d^5phmmbu{>kP9PD{-}<2gOtp4&!nd+jXza?g%T8+wAn!-d>^Y>3(hr_*j*MJO7l zk7;W~pv9+*J{?7FCRz+yHy)wr?^o=aj5OBrf-4G_i3xsxD5X5@bcnt*k&0Rw;xrX! zxS#QazUbiL=kjuL;mBt?cV8Y2wTK6^{4u&sr!E6aED^1f7P!gAgUBRD{^#z)==mi8N>#c1 zXQ|eW_%&)_WJxM&mIt4^)$jy$OZf6>3qd=4ps{ea5L9R0a?1G5Q4^k zWUh~{=G#gep{Z;zX!l8guhC;N7QBPsMNUD?@LbqRqsf?Dp2cpPNR*vDfprOYC6%bY-fx0id z$(YAGo(Lzj?b>RBYxXNawYE2F8*z&&T-gn7Z5{O10V%;TZ%&bk(yR^)^g{Y=h zp!hBq5SnfVwa4nA%1jb7_s+&cg+kmsub2c+5a79YEAjNdxwLnFIw{x_fsfOcVP@24 z7~9wbS4D%U1}~7>Xx<}5F?_P(vKV<`vlT<`aMI-vdGy&Gj*eYxVYKKTSsl0rB+Zj> zai%J|Ii5$C79IN6xC@k?h`~}}9$c=CM{;l*Sa0Eqd#T%?K3I~?)C-|ZeI~hhP7!VY z=8^U%S?tnu71RsJ!>+Lx^s}Q7|5sWP?3%iTe4l5Hj$9FDk7gSL1qkswADyHBqv*Wj zYJA@~-X2OzQ%i%Wq`l5_Ux!j=87VVc)0fK3D(z^Av@}#gL!!lb?(2w@kjzq1p~#*g z!teS0U$0lM*Ev1UeP7q-^L~G2mY|AF6RPKlLSY>T_&TnNUjhQC$y)CG?JEV3xy;+( znh8YK^*fZx?&orYJcw;EMq?2TPH0?C!plbR*n@X;T<(5!dGA2eGNb9@8ed|5-jb}V z}DEJ;z;+IZ7Ll0T{g7?ZeY%yJec7A2_(~raOy&@WI zqxH~SY>;Fg`b3{k+J}BUYM62OAiCC0fcJDG|HZ$3@MX{m+d0tbquGs&lgKcB{r-~L za@pf}v1TrBk`04RRlFhRQdaePCAGKR!`g1&#T2i+Kzp0+pw&BZdRyBDq#M(~e!(HA zykSR{N@_u_=ocdRB_>>c{SF!8&BIQ&2v+jTPZHeI1v4J+hpJ0gIE|YFygIZHOF5a} zmaYQ0p%@JJQ-thiGL`u4ZDF^LW)tPea;WK|P^mDU99(gTajMwGh+k*`eN`VERk0)E zy#+X8m`Q}ZK=QlM5?)G<;jfjv2p`uxpp!-}(a;-5;G0Sc1TUOVvKN?Pcl%^I*L?%% zJ=}tB@>?P5!g^|UPDvPF^bpr)Xh62iDeTm!CApE2c*Rd3p zwW?w2^5wvMvxWZkQK;$e4}Pw7crtD_m7C}W30b2k$;Od}`or9;N=;~W^%qerKS`7i zZ=-s0@w92Cq!r@b8Fz0D6v?ki}S5B^gX`fz#b%ht-!!jLf5{9o${L5ofZK0{eS6V|I?uCW`ikrS25^qhhnQnXoOBRX_3sw6^EMfPE0MXn^}Y^ zD}KQCz6?;G$ii(wAPherCHptcN9ie=pi^8;zc&=YzgM@2=j0U_BS^se=`zBq)vjnO zZpIf@eu8nbG58W6pzYCXxS+-ZfBQwD?k80aZ2S^!UyOj1Qv)u`+lm1j*5jl9Cg2Y7 zQr3A@7-JwJMn8T3#@@b{2nKx|FzHVr?bve&tp7^Gx})RpMb>Y!qg`1LdWEG<%u%>K zZWs2P?ZtQ;0?x38 z+J)rXy*sq`loxj|7v+0cj!5i2x(T|a z1M$C7fB1UtD^A#4LO!fG4UuPM=tkpcJdJhKBr8!ccfSu2-&6=s)^oo<(gIGB1lQCq z5x&J~m&dTPprYrDB><8Yxw~1K$JqG6oUqQb~3nAm#b-JVN z7AQ0*;a3?7YUchpyr%$HI6egZy~`QXKo#^9lVtqO+Hq-jA4!Y4gyK*BVdUXj*mxw4 z_@8&gsc(~^;j@IG$n+?t{B(rb5<2MiaS>}8lz|clCcy7>XUynpMTdk7)Jnk~z;~40 z%^rbSMv;QbaVuG)M{A*PSe%_bKb{P_OobeODctz0ge?D_hdZYoqdV7@Q#lWJB9HzA5F6h#)5fW4C#Fs0@V?z7%97-w5rEIsE#3hy6PpZT3n3@uGcWYqyPexs_0=j zzPe31!QqYWKoPUgP zvZn{L&}zL9QrB~Rruqc9KD39?h>xLneXW?Yi;vJhk;-5jc#rg-H=wm4@8D?7WpEf~ z!JM1%6~EaHkuB@N)guL6D(yJvsx$r;+6a3DqM#zE#Gn@50oYZelg>DZ1Il=589pa>f zqDx%y#j-i{vF|$KoA!=s``n}<;f;{2*aj*C;=(&==dp={GH<%br^6RI*emvf=y6KxGJ~DrS)omXc#cLs` zUG@#P@9!YCPWzG9b|3ocW_pjcGCKqFcx>Fw!sXaen zSxW|tq`(BG4gD1;;76lWj_IxNPBl4qBc?k3BJ^Mp%tA zzfOTY*FIzIly>xz8DW+}8~vW;z}+W$X`z!FimzRXHc#i#n?}13?nvW=i3gZmjaKq@ zEeDI5a33OH@1|$+yYbo3LohYwdN%`Hb}Oj|X3fpPZ>!AV;m2ycX*?doCIgVz5EPqv z6R|K5lQQ~=sd6#-P&o!aBr(DlJ|!qW(oB^fU*K&#^@;ot&BMY~wtQG!NhD^yB~ADX zD?<}dx-SJ5SxR6x>a9g;3a^ns zgC4Z{n!+|2E=ML}ic5CpLEZFBNKibA?k9>-we1GAsv4q?&V|5mXBr2Xyo@zkT#36@ zPiWB^D2&N#B1R5PDAFGdA!GJK#FXD8EY+V?dNfgJnQTr2=iQ=F{1U!-U*}mx@5CrHpyM*x@W?hO=l8 z9V!j8o*hJkl>g|!&6AL&wt?>S&!P&SL~$s195m7bJT$=p-VcvwZr#_V#fwa_CNvlI zwFjw+bsb$F^p5?$RfMl!pbOY$Of8hugvRe2$tTtAY`C&6jwdN#d-XmXh=_t~Dp#n^ zRy#JMDUK0##)3%dA|S=zm^0&_XAvAesOXYuo?A&kd6 zH%F+@x0lNVjKS;O&&jO*5EA!H8`OC@@I_<0U~lXW_&yK?r)U14HxXSiHAPTl`O)^U;VJ1FHJ>9F4Oygj_mZR0+M>5h46p((RU|G zKq4xZhz;DPtovAgsqPONIx7g4>)a!Qx*wQQp*hh0RZzS1DE8Z#!I^h!oQ1Lu1?tl)&-7( z)?ak|EuD#i8+$DV1KVDqL-n$xB?DLqC|-K!If*Y5T

    #G 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 literal 0 HcmV?d00001 diff --git a/packages/server/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.ts b/packages/server/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.ts index ae7107c16..bab505faa 100644 --- a/packages/server/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.ts +++ b/packages/server/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.ts @@ -12,6 +12,8 @@ export type SherpaOnnxNodeModule = { OfflineRecognizer: new (config: any) => any; OnlineRecognizer?: new (config: any) => any; OfflineTts?: new (config: any) => any; + Vad?: new (config: any, bufferSizeInSeconds: number) => any; + CircularBuffer?: new (capacity: number) => any; }; let cached: SherpaOnnxNodeModule | null = null; diff --git a/packages/server/src/server/speech/providers/local/sherpa/silero-vad-provider.ts b/packages/server/src/server/speech/providers/local/sherpa/silero-vad-provider.ts new file mode 100644 index 000000000..c113cd77a --- /dev/null +++ b/packages/server/src/server/speech/providers/local/sherpa/silero-vad-provider.ts @@ -0,0 +1,40 @@ +import type { Logger } from "pino"; + +import type { + TurnDetectionProvider, + TurnDetectionSession, +} from "../../../turn-detection-provider.js"; +import { + SherpaSileroVadSession, + type SherpaSileroVadSessionConfig, +} from "./silero-vad-session.js"; + +export class SherpaSileroTurnDetectionProvider implements TurnDetectionProvider { + public readonly id = "local" as const; + + private readonly config: SherpaSileroVadSessionConfig; + private readonly logger: Logger; + + constructor(config: SherpaSileroVadSessionConfig, logger: Logger) { + this.config = config; + this.logger = logger.child({ + module: "speech", + provider: "local", + component: "silero-vad", + }); + } + + createSession(params: { logger: Logger }): TurnDetectionSession { + this.logger.debug( + { sampleRate: this.config.sampleRate, modelPath: this.config.modelPath }, + "Creating Silero VAD turn-detection session" + ); + return new SherpaSileroVadSession({ + logger: params.logger.child({ + provider: "local", + component: "silero-vad-session", + }), + config: this.config, + }); + } +} diff --git a/packages/server/src/server/speech/providers/local/sherpa/silero-vad-session.ts b/packages/server/src/server/speech/providers/local/sherpa/silero-vad-session.ts new file mode 100644 index 000000000..dbe021d66 --- /dev/null +++ b/packages/server/src/server/speech/providers/local/sherpa/silero-vad-session.ts @@ -0,0 +1,168 @@ +import { EventEmitter } from "node:events"; +import { fileURLToPath } from "node:url"; + +import { pcm16leToFloat32 } from "../../../audio.js"; +import type { TurnDetectionSession } from "../../../turn-detection-provider.js"; +import { loadSherpaOnnxNode } from "./sherpa-onnx-node-loader.js"; + +const DEFAULT_SAMPLE_RATE = 16000; +const DEFAULT_BUFFER_SIZE_SECONDS = 60; +const DEFAULT_SILERO_THRESHOLD = 0.5; +const DEFAULT_MIN_SILENCE_DURATION = 1.2; +const DEFAULT_MIN_SPEECH_DURATION = 0.12; +const DEFAULT_WINDOW_SIZE = 512; + +type SherpaVadHandle = { + acceptWaveform(samples: Float32Array): void; + isDetected(): boolean; + isEmpty(): boolean; + flush(): void; + reset(): void; +}; + +type SherpaCircularBufferHandle = { + push(samples: Float32Array): void; + get(startIndex: number, n: number, enableExternalBuffer?: boolean): Float32Array; + pop(n: number): void; + size(): number; + head(): number; + reset(): void; +}; + +type SherpaVadModule = { + Vad: new (config: Record, bufferSizeInSeconds: number) => SherpaVadHandle; + CircularBuffer: new (capacity: number) => SherpaCircularBufferHandle; +}; + +function resolveBundledSileroVadModelPath(): string { + return fileURLToPath(new URL("./assets/silero_vad.onnx", import.meta.url)); +} + +export interface SherpaSileroVadSessionConfig { + modelPath?: string; + sampleRate?: number; + threshold?: number; + minSilenceDuration?: number; + minSpeechDuration?: number; + windowSize?: number; + bufferSizeInSeconds?: number; +} + +export class SherpaSileroVadSession + extends EventEmitter + implements TurnDetectionSession +{ + public readonly requiredSampleRate: number; + + private readonly vad: SherpaVadHandle; + private readonly inputBuffer: SherpaCircularBufferHandle; + private readonly windowSize: number; + private connected = false; + private inSpeech = false; + private readonly logger; + + constructor(params: { + logger: { debug: (...args: unknown[]) => void }; + config?: SherpaSileroVadSessionConfig; + }) { + super(); + this.logger = params.logger; + const config = params.config ?? {}; + this.requiredSampleRate = config.sampleRate ?? DEFAULT_SAMPLE_RATE; + this.windowSize = config.windowSize ?? DEFAULT_WINDOW_SIZE; + + const sherpa = loadSherpaOnnxNode() as unknown as SherpaVadModule; + this.vad = new sherpa.Vad( + { + sileroVad: { + model: config.modelPath ?? resolveBundledSileroVadModelPath(), + threshold: config.threshold ?? DEFAULT_SILERO_THRESHOLD, + minSilenceDuration: + config.minSilenceDuration ?? DEFAULT_MIN_SILENCE_DURATION, + minSpeechDuration: + config.minSpeechDuration ?? DEFAULT_MIN_SPEECH_DURATION, + windowSize: config.windowSize ?? DEFAULT_WINDOW_SIZE, + }, + sampleRate: this.requiredSampleRate, + numThreads: 1, + provider: "cpu", + debug: 0, + }, + config.bufferSizeInSeconds ?? DEFAULT_BUFFER_SIZE_SECONDS + ); + this.inputBuffer = new sherpa.CircularBuffer( + (config.bufferSizeInSeconds ?? DEFAULT_BUFFER_SIZE_SECONDS) * this.requiredSampleRate + ); + } + + async connect(): Promise { + this.connected = true; + } + + appendPcm16(pcm16le: Buffer): void { + if (!this.connected) { + this.emit("error", new Error("Turn detection session not connected")); + return; + } + if (pcm16le.length === 0) { + return; + } + + try { + const samples = pcm16leToFloat32(pcm16le, 1); + this.inputBuffer.push(samples); + while (this.inputBuffer.size() > this.windowSize) { + const window = this.inputBuffer.get(this.inputBuffer.head(), this.windowSize); + this.inputBuffer.pop(this.windowSize); + this.vad.acceptWaveform(window); + this.syncDetectionState(); + } + } catch (error) { + this.emit("error", error instanceof Error ? error : new Error(String(error))); + } + } + + flush(): void { + if (!this.connected) { + return; + } + + try { + this.vad.flush(); + this.syncDetectionState(); + if (this.inSpeech) { + this.inSpeech = false; + this.emit("speech_stopped"); + } + } catch (error) { + this.emit("error", error instanceof Error ? error : new Error(String(error))); + } + } + + close(): void { + try { + this.vad.reset(); + this.inputBuffer.reset(); + } catch { + // ignore native cleanup failures + } finally { + this.connected = false; + this.inSpeech = false; + } + } + + private syncDetectionState(): void { + const detected = this.vad.isDetected(); + if (detected && !this.inSpeech) { + this.inSpeech = true; + this.emit("speech_started"); + return; + } + + if (!detected && this.inSpeech && !this.vad.isEmpty()) { + this.logger.debug("Silero VAD marked end of speech"); + this.inSpeech = false; + this.emit("speech_stopped"); + } + } +} diff --git a/packages/server/src/server/speech/providers/openai/runtime.ts b/packages/server/src/server/speech/providers/openai/runtime.ts index f81e6c83e..0f25b6b0b 100644 --- a/packages/server/src/server/speech/providers/openai/runtime.ts +++ b/packages/server/src/server/speech/providers/openai/runtime.ts @@ -2,6 +2,7 @@ import type { Logger } from "pino"; import type { SpeechToTextProvider, TextToSpeechProvider } from "../../speech-provider.js"; import type { RequestedSpeechProviders } from "../../speech-types.js"; +import type { TurnDetectionProvider } from "../../turn-detection-provider.js"; import { DEFAULT_OPENAI_REALTIME_TRANSCRIPTION_MODEL, DEFAULT_OPENAI_TTS_MODEL, @@ -24,6 +25,7 @@ export type OpenAiSpeechAvailability = { }; export type SpeechServices = { + turnDetectionService: TurnDetectionProvider | null; sttService: SpeechToTextProvider | null; ttsService: TextToSpeechProvider | null; dictationSttService: SpeechToTextProvider | null; @@ -112,6 +114,7 @@ export function initializeOpenAiSpeechServices(params: { let sttService = existing.sttService; let ttsService = existing.ttsService; let dictationSttService = existing.dictationSttService; + const turnDetectionService = existing.turnDetectionService; const needsOpenAiStt = !sttService && @@ -181,6 +184,7 @@ export function initializeOpenAiSpeechServices(params: { } return { + turnDetectionService, sttService, ttsService, dictationSttService, diff --git a/packages/server/src/server/speech/speech-config-resolver.test.ts b/packages/server/src/server/speech/speech-config-resolver.test.ts index 0e715af79..37e48f5ea 100644 --- a/packages/server/src/server/speech/speech-config-resolver.test.ts +++ b/packages/server/src/server/speech/speech-config-resolver.test.ts @@ -23,6 +23,11 @@ describe("resolveSpeechConfig", () => { explicit: false, enabled: true, }); + expect(result.speech.providers.voiceTurnDetection).toEqual({ + provider: "local", + explicit: false, + enabled: true, + }); expect(result.speech.providers.voiceStt).toEqual({ provider: "local", explicit: false, @@ -52,6 +57,7 @@ describe("resolveSpeechConfig", () => { const persisted = PersistedConfigSchema.parse({ features: { voiceMode: { + turnDetection: { provider: "local" }, stt: { provider: "openai", model: "gpt-4o-transcribe" }, }, }, @@ -98,6 +104,11 @@ describe("resolveSpeechConfig", () => { explicit: true, enabled: true, }); + expect(result.speech.providers.voiceTurnDetection).toEqual({ + provider: "local", + explicit: true, + enabled: true, + }); expect(result.speech.providers.voiceTts).toEqual({ provider: "local", explicit: true, @@ -150,6 +161,11 @@ describe("resolveSpeechConfig", () => { explicit: false, enabled: false, }); + expect(result.speech.providers.voiceTurnDetection).toEqual({ + provider: "local", + explicit: false, + enabled: false, + }); expect(result.speech.providers.voiceStt).toEqual({ provider: "local", explicit: false, diff --git a/packages/server/src/server/speech/speech-config-resolver.ts b/packages/server/src/server/speech/speech-config-resolver.ts index cda874760..d7eaef818 100644 --- a/packages/server/src/server/speech/speech-config-resolver.ts +++ b/packages/server/src/server/speech/speech-config-resolver.ts @@ -38,6 +38,7 @@ const OptionalBooleanFlagSchema = z const RequestedSpeechProvidersSchema = z.object({ dictationStt: OptionalSpeechProviderSchema.default("local"), + voiceTurnDetection: OptionalSpeechProviderSchema.default("local"), voiceStt: OptionalSpeechProviderSchema.default("local"), voiceTts: OptionalSpeechProviderSchema.default("local"), }); @@ -62,6 +63,9 @@ function resolveRequestedSpeechProviders(params: { const voiceSttProviderFromConfig = params.env.PASEO_VOICE_STT_PROVIDER ?? params.persisted.features?.voiceMode?.stt?.provider; + const voiceTurnDetectionProviderFromConfig = + params.env.PASEO_VOICE_TURN_DETECTION_PROVIDER ?? + params.persisted.features?.voiceMode?.turnDetection?.provider; const voiceTtsProviderFromConfig = params.env.PASEO_VOICE_TTS_PROVIDER ?? params.persisted.features?.voiceMode?.tts?.provider; @@ -76,6 +80,7 @@ function resolveRequestedSpeechProviders(params: { const parsed = RequestedSpeechProvidersSchema.parse({ dictationStt: dictationSttProviderFromConfig ?? "local", + voiceTurnDetection: voiceTurnDetectionProviderFromConfig ?? "local", voiceStt: voiceSttProviderFromConfig ?? "local", voiceTts: voiceTtsProviderFromConfig ?? "local", }); @@ -86,6 +91,11 @@ function resolveRequestedSpeechProviders(params: { parsed.dictationStt, dictationEnabled ), + voiceTurnDetection: resolveFeatureProvider( + voiceTurnDetectionProviderFromConfig, + parsed.voiceTurnDetection, + voiceModeEnabled + ), voiceStt: resolveFeatureProvider( voiceSttProviderFromConfig, parsed.voiceStt, diff --git a/packages/server/src/server/speech/speech-runtime.test.ts b/packages/server/src/server/speech/speech-runtime.test.ts index b34b2f936..8ec416d66 100644 --- a/packages/server/src/server/speech/speech-runtime.test.ts +++ b/packages/server/src/server/speech/speech-runtime.test.ts @@ -4,6 +4,7 @@ import pino from "pino"; import type { PaseoSpeechConfig } from "../bootstrap.js"; import type { InitializedLocalSpeech } from "./providers/local/runtime.js"; import type { SpeechToTextProvider, TextToSpeechProvider } from "./speech-provider.js"; +import type { TurnDetectionProvider } from "./turn-detection-provider.js"; import { initializeSpeechRuntime } from "./speech-runtime.js"; const { initializeLocalSpeechServicesMock } = vi.hoisted(() => ({ @@ -20,11 +21,13 @@ vi.mock("./providers/openai/runtime.js", () => ({ getOpenAiSpeechAvailability: () => ({ configured: false }), initializeOpenAiSpeechServices: (args: { existing: { + turnDetectionService: TurnDetectionProvider | null; sttService: SpeechToTextProvider | null; ttsService: TextToSpeechProvider | null; dictationSttService: SpeechToTextProvider | null; }; }) => ({ + turnDetectionService: args.existing.turnDetectionService, sttService: args.existing.sttService, ttsService: args.existing.ttsService, dictationSttService: args.existing.dictationSttService, @@ -56,6 +59,15 @@ function createStubTts(id: string): TextToSpeechProvider { }; } +function createStubTurnDetection(id: string): TurnDetectionProvider { + return { + id, + createSession: vi.fn(() => { + throw new Error("not used in this test"); + }), + }; +} + function createSpeechConfig( providers: PaseoSpeechConfig["providers"] ): PaseoSpeechConfig { @@ -71,6 +83,7 @@ describe("initializeSpeechRuntime readiness", () => { const dictationStt = createStubStt("dictation-local"); initializeLocalSpeechServicesMock.mockResolvedValue({ + turnDetectionService: null, sttService: null, ttsService: null, dictationSttService: dictationStt, @@ -87,6 +100,7 @@ describe("initializeSpeechRuntime readiness", () => { logger: pino({ level: "silent" }), speechConfig: createSpeechConfig({ dictationStt: { provider: "local", enabled: true, explicit: true }, + voiceTurnDetection: { provider: "local", enabled: false, explicit: true }, voiceStt: { provider: "local", enabled: false, explicit: true }, voiceTts: { provider: "local", enabled: false, explicit: true }, }), @@ -104,8 +118,10 @@ describe("initializeSpeechRuntime readiness", () => { it("keeps voice feature available when only realtime voice is enabled and ready", async () => { const voiceStt = createStubStt("voice-local"); const voiceTts = createStubTts("tts-local"); + const turnDetection = createStubTurnDetection("turn-local"); initializeLocalSpeechServicesMock.mockResolvedValue({ + turnDetectionService: turnDetection, sttService: voiceStt, ttsService: voiceTts, dictationSttService: null, @@ -122,6 +138,7 @@ describe("initializeSpeechRuntime readiness", () => { logger: pino({ level: "silent" }), speechConfig: createSpeechConfig({ dictationStt: { provider: "local", enabled: false, explicit: true }, + voiceTurnDetection: { provider: "local", enabled: true, explicit: true }, voiceStt: { provider: "local", enabled: true, explicit: true }, voiceTts: { provider: "local", enabled: true, explicit: true }, }), diff --git a/packages/server/src/server/speech/speech-runtime.ts b/packages/server/src/server/speech/speech-runtime.ts index 618a8d46b..fc543458a 100644 --- a/packages/server/src/server/speech/speech-runtime.ts +++ b/packages/server/src/server/speech/speech-runtime.ts @@ -17,6 +17,7 @@ import { } from "./providers/openai/runtime.js"; import type { SpeechToTextProvider, TextToSpeechProvider } from "./speech-provider.js"; import type { RequestedSpeechProviders } from "./speech-types.js"; +import type { TurnDetectionProvider } from "./turn-detection-provider.js"; const SPEECH_RUNTIME_MONITOR_INTERVAL_MS = 3000; @@ -26,6 +27,7 @@ export type SpeechReadinessReasonCode = | "model_download_in_progress" | "models_missing" | "model_download_failed" + | "turn_detection_unavailable" | "stt_unavailable" | "tts_unavailable"; @@ -61,6 +63,7 @@ function resolveRequestedSpeechProviders( return { dictationStt: { provider: "local", explicit: false, enabled: true }, + voiceTurnDetection: { provider: "local", explicit: false, enabled: true }, voiceStt: { provider: "local", explicit: false, enabled: true }, voiceTts: { provider: "local", explicit: false, enabled: true }, }; @@ -118,12 +121,14 @@ function joinModelIds(modelIds: LocalSpeechModelId[]): string { function buildRealtimeVoiceReadiness(params: { providers: RequestedSpeechProviders; + turnDetectionService: TurnDetectionProvider | null; sttService: SpeechToTextProvider | null; ttsService: TextToSpeechProvider | null; }): SpeechReadinessState { + const voiceTurnDetectionEnabled = params.providers.voiceTurnDetection.enabled !== false; const voiceSttEnabled = params.providers.voiceStt.enabled !== false; const voiceTtsEnabled = params.providers.voiceTts.enabled !== false; - const enabled = voiceSttEnabled || voiceTtsEnabled; + const enabled = voiceTurnDetectionEnabled || voiceSttEnabled || voiceTtsEnabled; if (!enabled) { return { enabled: false, @@ -134,6 +139,16 @@ function buildRealtimeVoiceReadiness(params: { missingModelIds: [], }; } + if (voiceTurnDetectionEnabled && !params.turnDetectionService) { + return { + enabled: true, + available: false, + reasonCode: "turn_detection_unavailable", + message: "Realtime voice is unavailable: turn-detection service is not ready.", + retryable: false, + missingModelIds: [], + }; + } if (voiceSttEnabled && !params.sttService) { return { enabled: true, @@ -262,6 +277,7 @@ function buildVoiceFeatureReadiness(params: { function describeRequestedProviders(providers: RequestedSpeechProviders): { dictationStt: { provider: string; enabled: boolean; explicit: boolean }; + voiceTurnDetection: { provider: string; enabled: boolean; explicit: boolean }; voiceStt: { provider: string; enabled: boolean; explicit: boolean }; voiceTts: { provider: string; enabled: boolean; explicit: boolean }; } { @@ -271,6 +287,11 @@ function describeRequestedProviders(providers: RequestedSpeechProviders): { enabled: providers.dictationStt.enabled !== false, explicit: providers.dictationStt.explicit, }, + voiceTurnDetection: { + provider: providers.voiceTurnDetection.provider, + enabled: providers.voiceTurnDetection.enabled !== false, + explicit: providers.voiceTurnDetection.explicit, + }, voiceStt: { provider: providers.voiceStt.provider, enabled: providers.voiceStt.enabled !== false, @@ -285,13 +306,20 @@ function describeRequestedProviders(providers: RequestedSpeechProviders): { } function resolveEffectiveProviderIds(params: { + turnDetectionService: TurnDetectionProvider | null; sttService: SpeechToTextProvider | null; ttsService: TextToSpeechProvider | null; dictationSttService: SpeechToTextProvider | null; localVoiceTtsProvider: TextToSpeechProvider | null; -}): { dictationStt: string; voiceStt: string; voiceTts: string } { +}): { + dictationStt: string; + voiceTurnDetection: string; + voiceStt: string; + voiceTts: string; +} { return { dictationStt: params.dictationSttService?.id ?? "unavailable", + voiceTurnDetection: params.turnDetectionService?.id ?? "unavailable", voiceStt: params.sttService?.id ?? "unavailable", voiceTts: !params.ttsService @@ -303,6 +331,7 @@ function resolveEffectiveProviderIds(params: { } export type InitializedSpeechRuntime = { + resolveVoiceTurnDetection: () => TurnDetectionProvider | null; resolveVoiceStt: () => SpeechToTextProvider | null; resolveVoiceTts: () => TextToSpeechProvider | null; resolveDictationStt: () => SpeechToTextProvider | null; @@ -347,6 +376,7 @@ export async function initializeSpeechRuntime(params: { let sttService: SpeechToTextProvider | null = null; let ttsService: TextToSpeechProvider | null = null; let dictationSttService: SpeechToTextProvider | null = null; + let turnDetectionService: TurnDetectionProvider | null = null; let localModelConfig: { modelsDir: string; defaultModelIds: LocalSpeechModelId[]; @@ -367,6 +397,7 @@ export async function initializeSpeechRuntime(params: { const computeReadinessSnapshot = (): SpeechReadinessSnapshot => { const realtimeVoice = buildRealtimeVoiceReadiness({ providers, + turnDetectionService, sttService, ttsService, }); @@ -466,6 +497,7 @@ export async function initializeSpeechRuntime(params: { providers, openaiConfig, existing: { + turnDetectionService: nextLocalSpeech.turnDetectionService, sttService: nextLocalSpeech.sttService, ttsService: nextLocalSpeech.ttsService, dictationSttService: nextLocalSpeech.dictationSttService, @@ -474,6 +506,7 @@ export async function initializeSpeechRuntime(params: { }); const previousLocalCleanup = localCleanup; + turnDetectionService = nextOpenAiSpeech.turnDetectionService; sttService = nextOpenAiSpeech.sttService; ttsService = nextOpenAiSpeech.ttsService; dictationSttService = nextOpenAiSpeech.dictationSttService; @@ -485,6 +518,7 @@ export async function initializeSpeechRuntime(params: { await refreshMissingLocalModels(); const effectiveProviders = resolveEffectiveProviderIds({ + turnDetectionService, sttService, ttsService, dictationSttService, @@ -492,6 +526,9 @@ export async function initializeSpeechRuntime(params: { }); const unavailableFeatures = [ providers.dictationStt.enabled !== false && !dictationSttService ? "dictation.stt" : null, + providers.voiceTurnDetection.enabled !== false && !turnDetectionService + ? "voice.turnDetection" + : null, providers.voiceStt.enabled !== false && !sttService ? "voice.stt" : null, providers.voiceTts.enabled !== false && !ttsService ? "voice.tts" : null, ].filter((feature): feature is string => feature !== null); @@ -642,6 +679,7 @@ export async function initializeSpeechRuntime(params: { }; return { + resolveVoiceTurnDetection: () => turnDetectionService, resolveVoiceStt: () => sttService, resolveVoiceTts: () => ttsService, resolveDictationStt: () => dictationSttService, diff --git a/packages/server/src/server/speech/speech-types.ts b/packages/server/src/server/speech/speech-types.ts index 1d280f15d..797b5e3f1 100644 --- a/packages/server/src/server/speech/speech-types.ts +++ b/packages/server/src/server/speech/speech-types.ts @@ -12,6 +12,7 @@ export type RequestedSpeechProvider = z.infer; + appendPcm16(pcm16le: Buffer): void; + flush(): void; + close(): void; + + on(event: "speech_started", handler: () => void): unknown; + on(event: "speech_stopped", handler: () => void): unknown; + on(event: "error", handler: (err: unknown) => void): unknown; +}; + +export interface TurnDetectionProvider { + id: "openai" | "local" | (string & {}); + createSession(params: { + logger: pino.Logger; + }): TurnDetectionSession; +} diff --git a/packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.test.ts b/packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.test.ts new file mode 100644 index 000000000..c56401762 --- /dev/null +++ b/packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.test.ts @@ -0,0 +1,37 @@ +import { describe, expect, it } from "vitest"; + +import { FixedDurationPcmRingBuffer } from "./fixed-duration-pcm-ring-buffer.js"; + +describe("FixedDurationPcmRingBuffer", () => { + it("retains only the configured prefix window", () => { + const buffer = new FixedDurationPcmRingBuffer({ + sampleRate: 1000, + channels: 1, + bitsPerSample: 16, + durationMs: 100, + }); + + buffer.append(Buffer.alloc(120)); + buffer.append(Buffer.alloc(120, 1)); + + const drained = buffer.drain(); + expect(drained.length).toBe(120); + expect(Array.from(drained.slice(0, 4))).toEqual([1, 1, 1, 1]); + }); + + it("drains buffered chunks in arrival order", () => { + const buffer = new FixedDurationPcmRingBuffer({ + sampleRate: 1000, + channels: 1, + bitsPerSample: 16, + durationMs: 500, + }); + + buffer.append(Buffer.from([1, 2])); + buffer.append(Buffer.from([3, 4])); + buffer.append(Buffer.from([5, 6])); + + expect(Array.from(buffer.drain())).toEqual([1, 2, 3, 4, 5, 6]); + expect(buffer.drain().length).toBe(0); + }); +}); diff --git a/packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.ts b/packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.ts new file mode 100644 index 000000000..09e774fc3 --- /dev/null +++ b/packages/server/src/server/voice/fixed-duration-pcm-ring-buffer.ts @@ -0,0 +1,51 @@ +export class FixedDurationPcmRingBuffer { + private readonly maxBytes: number; + private chunks: Buffer[] = []; + private totalBytes = 0; + + constructor(params: { + sampleRate: number; + channels: number; + bitsPerSample: number; + durationMs: number; + }) { + const bytesPerSecond = + params.sampleRate * params.channels * (params.bitsPerSample / 8); + this.maxBytes = Math.max( + 1, + Math.round((bytesPerSecond * params.durationMs) / 1000) + ); + } + + append(chunk: Buffer): void { + if (chunk.length === 0) { + return; + } + + this.chunks.push(chunk); + this.totalBytes += chunk.length; + + while (this.totalBytes > this.maxBytes && this.chunks.length > 0) { + const removed = this.chunks.shift(); + if (!removed) { + break; + } + this.totalBytes -= removed.length; + } + } + + drain(): Buffer { + const combined = Buffer.concat(this.chunks); + this.clear(); + return combined; + } + + get byteLength(): number { + return this.totalBytes; + } + + clear(): void { + this.chunks = []; + this.totalBytes = 0; + } +} diff --git a/packages/server/src/server/voice/voice-turn-controller.test.ts b/packages/server/src/server/voice/voice-turn-controller.test.ts new file mode 100644 index 000000000..604512395 --- /dev/null +++ b/packages/server/src/server/voice/voice-turn-controller.test.ts @@ -0,0 +1,281 @@ +import { EventEmitter } from "node:events"; +import { describe, expect, it, vi } from "vitest"; +import pino from "pino"; + +import type { + TurnDetectionProvider, + TurnDetectionSession, +} from "../speech/turn-detection-provider.js"; +import { + createVoiceTurnController, + type DetectedVoiceUtterance, +} from "./voice-turn-controller.js"; + +class FakeTurnDetectionSession + extends EventEmitter + implements TurnDetectionSession +{ + public readonly requiredSampleRate = 16000; + public readonly appendedChunks: Buffer[] = []; + + async connect(): Promise {} + + appendPcm16(chunk: Buffer): void { + this.appendedChunks.push(chunk); + } + + flush(): void {} + close(): void {} +} + +function createFakeTurnDetectionProvider( + session: FakeTurnDetectionSession +): TurnDetectionProvider { + return { + id: "local", + createSession() { + return session; + }, + }; +} + +async function settleSerialQueue(): Promise { + await Promise.resolve(); + await Promise.resolve(); + await Promise.resolve(); +} + +function createControllerHarness() { + const detector = new FakeTurnDetectionSession(); + const onSpeechStarted = vi.fn(async () => {}); + const onSpeechStopped = vi.fn(async () => {}); + const submitUtterance = vi.fn(async (_utterance: DetectedVoiceUtterance) => {}); + const onError = vi.fn(); + + const controller = createVoiceTurnController({ + logger: pino({ level: "silent" }), + turnDetection: createFakeTurnDetectionProvider(detector), + prefixDurationMs: 100, + utteranceSink: { + submitUtterance, + }, + callbacks: { + onSpeechStarted, + onSpeechStopped, + onError, + }, + }); + + return { + controller, + detector, + onSpeechStarted, + onSpeechStopped, + submitUtterance, + onError, + }; +} + +function createDeferredPromise() { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: unknown) => void; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} + +describe("voice turn controller", () => { + it("buffers audio before speech start and includes the prefix in the utterance", async () => { + const harness = createControllerHarness(); + + await harness.controller.start(); + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([1, 2, 3, 4]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([5, 6, 7, 8]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_started"); + await settleSerialQueue(); + + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([9, 10, 11, 12]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_stopped"); + await settleSerialQueue(); + + expect(harness.onSpeechStarted).toHaveBeenCalledTimes(1); + expect(harness.onSpeechStopped).toHaveBeenCalledTimes(1); + expect(harness.submitUtterance).toHaveBeenCalledTimes(1); + expect(harness.submitUtterance).toHaveBeenCalledWith( + expect.objectContaining({ + pcm16: Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]), + sampleRate: 16000, + format: "audio/pcm;rate=16000;bits=16", + }) + ); + expect(harness.onError).not.toHaveBeenCalled(); + }); + + it("finalizes one utterance when speech stops", async () => { + const harness = createControllerHarness(); + + await harness.controller.start(); + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([1, 1, 1, 1]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_started"); + await settleSerialQueue(); + + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([2, 2, 2, 2]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_stopped"); + await settleSerialQueue(); + harness.detector.emit("speech_stopped"); + await settleSerialQueue(); + + expect(harness.submitUtterance).toHaveBeenCalledTimes(1); + expect(harness.onSpeechStopped).toHaveBeenCalledTimes(1); + expect(harness.onError).not.toHaveBeenCalled(); + }); + + it("does not barge in or emit an utterance on silence-only chunks", async () => { + const harness = createControllerHarness(); + + await harness.controller.start(); + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([0, 0, 0, 0]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([0, 0, 0, 0]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + await settleSerialQueue(); + + expect(harness.detector.appendedChunks).toEqual([ + Buffer.from([0, 0, 0, 0]), + Buffer.from([0, 0, 0, 0]), + ]); + expect(harness.onSpeechStarted).not.toHaveBeenCalled(); + expect(harness.onSpeechStopped).not.toHaveBeenCalled(); + expect(harness.submitUtterance).not.toHaveBeenCalled(); + expect(harness.onError).not.toHaveBeenCalled(); + }); + + it("retains a rolling prefix for rapid follow-up utterances", async () => { + const harness = createControllerHarness(); + + await harness.controller.start(); + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([1, 2, 3, 4]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_started"); + await settleSerialQueue(); + + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([5, 6, 7, 8]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_stopped"); + await settleSerialQueue(); + + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([9, 10, 11, 12]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_started"); + await settleSerialQueue(); + + await harness.controller.appendClientChunk({ + audioBase64: Buffer.from([13, 14, 15, 16]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + + harness.detector.emit("speech_stopped"); + await settleSerialQueue(); + + expect(harness.submitUtterance).toHaveBeenCalledTimes(2); + expect(harness.onSpeechStopped).toHaveBeenCalledTimes(2); + expect(harness.submitUtterance.mock.calls[0]?.[0]).toEqual( + expect.objectContaining({ + pcm16: Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]), + }) + ); + expect(harness.submitUtterance.mock.calls[1]?.[0]).toEqual( + expect.objectContaining({ + pcm16: Buffer.from([5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), + }) + ); + }); + + it("continues detecting speech while a previous utterance submission is still pending", async () => { + const deferred = createDeferredPromise(); + const detector = new FakeTurnDetectionSession(); + const onSpeechStarted = vi.fn(async () => {}); + const onSpeechStopped = vi.fn(async () => {}); + const submitUtterance = vi.fn(async () => { + await deferred.promise; + }); + const onError = vi.fn(); + + const controller = createVoiceTurnController({ + logger: pino({ level: "silent" }), + turnDetection: createFakeTurnDetectionProvider(detector), + prefixDurationMs: 100, + utteranceSink: { + submitUtterance, + }, + callbacks: { + onSpeechStarted, + onSpeechStopped, + onError, + }, + }); + + await controller.start(); + await controller.appendClientChunk({ + audioBase64: Buffer.from([1, 2, 3, 4]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + detector.emit("speech_started"); + await settleSerialQueue(); + await controller.appendClientChunk({ + audioBase64: Buffer.from([5, 6, 7, 8]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + detector.emit("speech_stopped"); + await settleSerialQueue(); + + await controller.appendClientChunk({ + audioBase64: Buffer.from([9, 10, 11, 12]).toString("base64"), + format: "audio/pcm;rate=16000;bits=16", + }); + detector.emit("speech_started"); + await settleSerialQueue(); + + expect(onSpeechStarted).toHaveBeenCalledTimes(2); + expect(onSpeechStopped).toHaveBeenCalledTimes(1); + expect(submitUtterance).toHaveBeenCalledTimes(1); + expect(onError).not.toHaveBeenCalled(); + + deferred.resolve(); + await settleSerialQueue(); + }); +}); diff --git a/packages/server/src/server/voice/voice-turn-controller.ts b/packages/server/src/server/voice/voice-turn-controller.ts new file mode 100644 index 000000000..5b51d317d --- /dev/null +++ b/packages/server/src/server/voice/voice-turn-controller.ts @@ -0,0 +1,226 @@ +import { Buffer } from "node:buffer"; +import type { Logger } from "pino"; +import { v4 as uuidv4 } from "uuid"; + +import { Pcm16MonoResampler } from "../agent/pcm16-resampler.js"; +import { parsePcmRateFromFormat } from "../speech/audio.js"; +import type { TurnDetectionProvider } from "../speech/turn-detection-provider.js"; +import { FixedDurationPcmRingBuffer } from "./fixed-duration-pcm-ring-buffer.js"; + +const PCM_CHANNELS = 1; +const PCM_BITS_PER_SAMPLE = 16; +const DEFAULT_PREFIX_DURATION_MS = 400; + +type VoiceInputState = + | { status: "idle" } + | { status: "listening"; rollingPrefixBytes: number } + | { + status: "capturing"; + utteranceId: string; + startedAt: number; + rollingPrefixBytes: number; + utteranceBytes: number; + }; + +export interface VoiceTurnControllerCallbacks { + onSpeechStarted(): Promise; + onSpeechStopped(): Promise; + onError(error: Error): void; +} + +export interface DetectedVoiceUtterance { + pcm16: Buffer; + sampleRate: number; + format: string; + startedAt: number; + endedAt: number; +} + +export interface VoiceUtteranceSink { + submitUtterance(utterance: DetectedVoiceUtterance): Promise; +} + +export interface VoiceTurnController { + start(): Promise; + stop(): Promise; + appendClientChunk(input: { + audioBase64: string; + format: string; + }): Promise; +} + +export function createVoiceTurnController(params: { + logger: Logger; + turnDetection: TurnDetectionProvider; + utteranceSink: VoiceUtteranceSink; + callbacks: VoiceTurnControllerCallbacks; + prefixDurationMs?: number; +}): VoiceTurnController { + const detector = params.turnDetection.createSession({ + logger: params.logger.child({ component: "turn-detection" }), + }); + const prefixBuffer = new FixedDurationPcmRingBuffer({ + sampleRate: detector.requiredSampleRate, + channels: PCM_CHANNELS, + bitsPerSample: PCM_BITS_PER_SAMPLE, + durationMs: params.prefixDurationMs ?? DEFAULT_PREFIX_DURATION_MS, + }); + + let state: VoiceInputState = { status: "idle" }; + let resampler: Pcm16MonoResampler | null = null; + let inputRate = detector.requiredSampleRate; + let utteranceChunks: Buffer[] = []; + let queued = Promise.resolve(); + let submissionQueue = Promise.resolve(); + + function buildVoicePcmFormat(sampleRate: number): string { + return `audio/pcm;rate=${sampleRate};bits=16`; + } + + function fail(error: unknown): void { + params.callbacks.onError(error instanceof Error ? error : new Error(String(error))); + } + + function runSerial(task: () => Promise): Promise { + queued = queued + .then(task) + .catch((error) => { + fail(error); + }); + return queued; + } + + function enqueueUtteranceSubmission(utterance: DetectedVoiceUtterance): void { + submissionQueue = submissionQueue + .then(async () => { + await params.utteranceSink.submitUtterance(utterance); + }) + .catch((error) => { + fail(error); + }); + } + + async function handleSpeechStarted(): Promise { + if (state.status === "capturing") { + return; + } + + await params.callbacks.onSpeechStarted(); + + const prefix = prefixBuffer.drain(); + const startedAt = Date.now(); + utteranceChunks = prefix.length > 0 ? [prefix] : []; + state = { + status: "capturing", + utteranceId: uuidv4(), + startedAt, + rollingPrefixBytes: prefixBuffer.byteLength, + utteranceBytes: prefix.length, + }; + } + + async function handleSpeechStopped(): Promise { + if (state.status !== "capturing") { + return; + } + + const utterance = Buffer.concat(utteranceChunks); + const startedAt = state.startedAt; + const endedAt = Date.now(); + + utteranceChunks = []; + state = { status: "listening", rollingPrefixBytes: prefixBuffer.byteLength }; + + await params.callbacks.onSpeechStopped(); + + if (utterance.length === 0) { + return; + } + + enqueueUtteranceSubmission({ + pcm16: utterance, + sampleRate: detector.requiredSampleRate, + format: buildVoicePcmFormat(detector.requiredSampleRate), + startedAt, + endedAt, + }); + } + + detector.on("speech_started", () => { + void runSerial(handleSpeechStarted); + }); + detector.on("speech_stopped", () => { + void runSerial(handleSpeechStopped); + }); + detector.on("error", fail); + + return { + async start(): Promise { + await detector.connect(); + state = { status: "listening", rollingPrefixBytes: prefixBuffer.byteLength }; + }, + + async stop(): Promise { + await runSerial(async () => { + detector.close(); + prefixBuffer.clear(); + utteranceChunks = []; + resampler?.reset(); + resampler = null; + state = { status: "idle" }; + }); + }, + + async appendClientChunk(input): Promise { + await runSerial(async () => { + if (state.status === "idle") { + return; + } + + const pcm16 = Buffer.from(input.audioBase64, "base64"); + if (pcm16.length === 0) { + return; + } + + const parsedInputRate = + parsePcmRateFromFormat(input.format, detector.requiredSampleRate) ?? + detector.requiredSampleRate; + + if (parsedInputRate !== inputRate) { + inputRate = parsedInputRate; + resampler = + inputRate === detector.requiredSampleRate + ? null + : new Pcm16MonoResampler({ + inputRate, + outputRate: detector.requiredSampleRate, + }); + } + + const normalized = + resampler === null ? pcm16 : resampler.processChunk(pcm16); + if (normalized.length === 0) { + return; + } + + prefixBuffer.append(normalized); + + if (state.status === "listening") { + state = { + status: "listening", + rollingPrefixBytes: prefixBuffer.byteLength, + }; + } else if (state.status === "capturing") { + utteranceChunks.push(normalized); + state = { + ...state, + rollingPrefixBytes: prefixBuffer.byteLength, + utteranceBytes: state.utteranceBytes + normalized.length, + }; + } + + detector.appendPcm16(normalized); + }); + }, + }; +} diff --git a/packages/server/src/server/websocket-server.ts b/packages/server/src/server/websocket-server.ts index 4e62417e3..da071a8e3 100644 --- a/packages/server/src/server/websocket-server.ts +++ b/packages/server/src/server/websocket-server.ts @@ -35,6 +35,7 @@ import type { AgentProviderRuntimeSettingsMap } from "./agent/provider-launch-co import { PushTokenStore } from "./push/token-store.js"; import { PushService } from "./push/push-service.js"; import type { SpeechToTextProvider, TextToSpeechProvider } from "./speech/speech-provider.js"; +import type { TurnDetectionProvider } from "./speech/turn-detection-provider.js"; import type { Resolvable } from "./speech/provider-resolver.js"; import type { SpeechReadinessSnapshot } from "./speech/speech-runtime.js"; import type { LocalSpeechModelId } from "./speech/providers/local/models.js"; @@ -245,6 +246,7 @@ export class VoiceAssistantWebSocketServer { private readonly createAgentMcpTransport: AgentMcpTransportFactory; private readonly stt: Resolvable; private readonly tts: Resolvable; + private readonly turnDetection: Resolvable; private readonly terminalManager: TerminalManager | null; private readonly dictation: { finalTimeoutMs?: number; @@ -301,6 +303,7 @@ export class VoiceAssistantWebSocketServer { createAgentMcpTransport: AgentMcpTransportFactory, wsConfig: WebSocketServerConfig, speech?: { + turnDetection: Resolvable; stt: Resolvable; tts: Resolvable; }, @@ -338,6 +341,7 @@ export class VoiceAssistantWebSocketServer { this.downloadTokenStore = downloadTokenStore; this.paseoHome = paseoHome; this.createAgentMcpTransport = createAgentMcpTransport; + this.turnDetection = speech?.turnDetection ?? null; this.stt = speech?.stt ?? null; this.tts = speech?.tts ?? null; this.terminalManager = terminalManager ?? null; @@ -633,7 +637,10 @@ export class VoiceAssistantWebSocketServer { stt: this.stt, tts: this.tts, terminalManager: this.terminalManager, - voice: this.voice ?? undefined, + voice: { + ...(this.voice ?? {}), + turnDetection: this.turnDetection, + }, voiceBridge: { registerVoiceSpeakHandler: (agentId, handler) => { this.voiceSpeakHandlers.set(agentId, handler); diff --git a/packages/server/src/shared/messages.ts b/packages/server/src/shared/messages.ts index 7ddcf8b46..7b125e34c 100644 --- a/packages/server/src/shared/messages.ts +++ b/packages/server/src/shared/messages.ts @@ -1236,6 +1236,13 @@ export const TranscriptionResultMessageSchema = z.object({ }), }) +export const VoiceInputStateMessageSchema = z.object({ + type: z.literal('voice_input_state'), + payload: z.object({ + isSpeaking: z.boolean(), + }), +}) + export const DictationStreamAckMessageSchema = z.object({ type: z.literal('dictation_stream_ack'), payload: z.object({ @@ -2159,6 +2166,7 @@ export const SessionOutboundMessageSchema = z.discriminatedUnion('type', [ AssistantChunkMessageSchema, AudioOutputMessageSchema, TranscriptionResultMessageSchema, + VoiceInputStateMessageSchema, DictationStreamAckMessageSchema, DictationStreamFinishAcceptedMessageSchema, DictationStreamPartialMessageSchema,