From de1daf4e53271d4bb5308f7528f6db8a2b732088 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 15:51:37 -0700 Subject: [PATCH 01/11] Upgrade Codex to 0.164.0 and reuse upstream checkpoint shutdown --- .github/workflows/ci.yml | 6 +- package-lock.json | 56 +- package.json | 2 +- relay/Dockerfile | 2 +- runtime/codex/Dockerfile | 7 +- runtime/codex/README.md | 19 +- runtime/codex/api-model-settings.patch | 326 ++++--- runtime/codex/api-turn-errors.patch | 286 +++++-- runtime/codex/artifact-policy.json | 4 +- runtime/codex/chatgpt-service-tier.patch | 217 ++--- runtime/codex/checkpoint-shutdown.patch | 455 +++++++--- runtime/codex/companion-packages.json | 610 +++++++++++++- runtime/codex/interrupt-barrier.patch | 10 +- runtime/codex/local-subprocess-stdio.patch | 26 +- runtime/codex/model-capabilities.json | 33 +- runtime/codex/model-defaults.json | 10 +- runtime/codex/release-lock.patch | 793 ++++++++++-------- runtime/codex/source.json | 7 +- runtime/codex/step-settings-test-import.patch | 12 - .../unified-exec-output-subscription.patch | 162 +--- runtime/local/verify-runtime.swift | 29 +- runtime/native/host-code-policy.json | 189 +++++ scripts/build-codex-runtime.mjs | 5 +- scripts/build-desktop.mjs | 10 +- scripts/build-native-app.mjs | 2 +- scripts/build-native-release.mjs | 47 +- scripts/codex-runtime-artifact.mjs | 4 +- src/adapters/local-native-verifier.ts | 9 +- src/app/local-native-service.ts | 2 +- src/runner/codex-app-server.ts | 6 +- src/runner/session-runtime.ts | 106 ++- .../local-runtime/native-signatures/README.md | 2 +- .../native-signatures/fixtures.py | 15 +- tests/adapters/local-native-verifier.test.ts | 15 +- tests/agents/local-native-startup.test.ts | 2 +- tests/agents/native-checkpoint.test.ts | 214 +++++ tests/agents/native-tools.test.ts | 4 +- tests/agents/native-turn-errors.test.ts | 2 + tests/agents/sdk-conformance.test.ts | 4 +- tests/agents/session-lifecycle.test.ts | 2 +- tests/domain/native-release.test.ts | 2 +- tests/runner/session-checkpoint.test.ts | 178 +++- tests/scripts/build-native-release.test.ts | 77 +- tests/scripts/codex-runtime-artifact.test.ts | 26 +- tests/scripts/native-app-inputs.test.ts | 2 +- 45 files changed, 2865 insertions(+), 1132 deletions(-) delete mode 100644 runtime/codex/step-settings-test-import.patch create mode 100644 runtime/native/host-code-policy.json create mode 100644 tests/agents/native-checkpoint.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 685e559..67920f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -105,11 +105,13 @@ jobs: key: ${{ steps.codex-runtime.outputs.cache-primary-key }} - name: Validate x64 artifact provenance run: node --input-type=module -e "import { validateCodexRuntimeArtifact } from './scripts/codex-runtime-artifact.mjs'; await validateCodexRuntimeArtifact('.runtime/codex/linux-x64', { expectedTarget:'x86_64-unknown-linux-gnu' });" - - name: Verify patched x86 sandbox and local Pi transport + - name: Verify x64 native contracts, checkpoints and Pi sandbox env: CODEX_CONFORMANCE_BINARY: ${{ github.workspace }}/.runtime/codex/linux-x64/runtime/bin/codex CODEX_REQUIRE_PARITY: 'true' - run: npx vitest run tests/pi/managed-effects.test.ts tests/pi/managed-subprocess.test.ts tests/runner/managed-sandbox.test.ts tests/agents/local-pi-transport.test.ts tests/agents/local-pi.test.ts --no-file-parallelism + run: | + npm run test:agents:parity + npx vitest run tests/runner/managed-sandbox.test.ts --no-file-parallelism - name: Archive verified Linux x64 runtime run: tar -C .runtime/codex/linux-x64 -czf .runtime/codex/linux-x64.tar.gz artifact.json runtime - name: Export verified Linux x64 runtime diff --git a/package-lock.json b/package-lock.json index 9b49055..9fbd30c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "devDependencies": { "@aws-sdk/client-dynamodb-streams": "3.1088.0", "@aws-sdk/client-ecs": "3.1088.0", - "@openai/codex": "0.154.0", + "@openai/codex": "0.164.0", "@playwright/mcp": "0.0.83", "@playwright/test": "1.62.1", "@types/archiver": "7.0.0", @@ -1628,9 +1628,9 @@ } }, "node_modules/@openai/codex": { - "version": "0.154.0", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0.tgz", - "integrity": "sha512-FV/x1OHXYv/ifjf3mXj9ThTTAWcUZN6cGIRQRhRxkKNOPuImu1WW0c8ev1vUkE9XGH90dEnYG1tBjIkxRikg0w==", + "version": "0.164.0", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0.tgz", + "integrity": "sha512-TWj7UGyPRe3Pj/A3ddNAxs1te3a/W/xAd+J0LHrrFTmsSfahGMOLF/vn88D3QCIgAT3B1rm1y/Z3NYE0rx6cZQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1640,19 +1640,19 @@ "node": ">=16" }, "optionalDependencies": { - "@openai/codex-darwin-arm64": "npm:@openai/codex@0.154.0-darwin-arm64", - "@openai/codex-darwin-x64": "npm:@openai/codex@0.154.0-darwin-x64", - "@openai/codex-linux-arm64": "npm:@openai/codex@0.154.0-linux-arm64", - "@openai/codex-linux-x64": "npm:@openai/codex@0.154.0-linux-x64", - "@openai/codex-win32-arm64": "npm:@openai/codex@0.154.0-win32-arm64", - "@openai/codex-win32-x64": "npm:@openai/codex@0.154.0-win32-x64" + "@openai/codex-darwin-arm64": "npm:@openai/codex@0.164.0-darwin-arm64", + "@openai/codex-darwin-x64": "npm:@openai/codex@0.164.0-darwin-x64", + "@openai/codex-linux-arm64": "npm:@openai/codex@0.164.0-linux-arm64", + "@openai/codex-linux-x64": "npm:@openai/codex@0.164.0-linux-x64", + "@openai/codex-win32-arm64": "npm:@openai/codex@0.164.0-win32-arm64", + "@openai/codex-win32-x64": "npm:@openai/codex@0.164.0-win32-x64" } }, "node_modules/@openai/codex-darwin-arm64": { "name": "@openai/codex", - "version": "0.154.0-darwin-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-darwin-arm64.tgz", - "integrity": "sha512-HP/vJCH/t2hB9Kg6hotN9UglClJ6/z584fal5lEP14C9gNAgAQS4/kTQC7l5V+BA3TqwDPwINSjul28cX8AYXg==", + "version": "0.164.0-darwin-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-darwin-arm64.tgz", + "integrity": "sha512-pDizgOUAtq3/k3AbUFHbaU19WpYKCja+oFpNSTLKrDQj4lTUNSDuTPJip4uQVn2/1EipQdpQrGMOQBVuI1znAA==", "cpu": [ "arm64" ], @@ -1668,9 +1668,9 @@ }, "node_modules/@openai/codex-darwin-x64": { "name": "@openai/codex", - "version": "0.154.0-darwin-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-darwin-x64.tgz", - "integrity": "sha512-2aqz+72Hop8PF2RYglQ4JnGjm3OlRIrTykJIT0hyLeUgM6NCFy09RgTmqRCoWliKQZjEn9jjZqUEp7QujAj77g==", + "version": "0.164.0-darwin-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-darwin-x64.tgz", + "integrity": "sha512-lIe+udnguPGzBezkgbkj2Eaz0YqOhNXT7jja136Fj0sXfI+UKNS2icmaK14GcoRAgeVEpDTtC1ftamWBPmD1zg==", "cpu": [ "x64" ], @@ -1686,9 +1686,9 @@ }, "node_modules/@openai/codex-linux-arm64": { "name": "@openai/codex", - "version": "0.154.0-linux-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-linux-arm64.tgz", - "integrity": "sha512-KmTCB6ST484zeYlPpKP/K5P/gRaYmt6TihVD+zotoe6O9q0JSBP+FYvCz4A/zZXR7xDOHURTSjHp0sD8wWS0YQ==", + "version": "0.164.0-linux-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-linux-arm64.tgz", + "integrity": "sha512-LL5iTQjyDL4YRX44EWqhIfEQ5uGnmgxkQBJSxjZSeJ8L1Og83pdlzUJW/PRJ76oaVwOVgh6HXwuPEiBNEHU4lg==", "cpu": [ "arm64" ], @@ -1704,9 +1704,9 @@ }, "node_modules/@openai/codex-linux-x64": { "name": "@openai/codex", - "version": "0.154.0-linux-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-linux-x64.tgz", - "integrity": "sha512-a4FI3A8sGtwGrOqltrPbrS2hajrHQG591EwmRfiRoLMb10VxdBtUGW4gu6IJVYENiYGA7k3P4jlRHEoCZU/s9Q==", + "version": "0.164.0-linux-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-linux-x64.tgz", + "integrity": "sha512-XLAoaWsGOT2khzl+P4FYDPTkzAr9W0VFXFaVkqlFdkM0soa1gH/4S0wSD57Ek3HHwkirAEGz2/Mwehseh+l5Mg==", "cpu": [ "x64" ], @@ -1722,9 +1722,9 @@ }, "node_modules/@openai/codex-win32-arm64": { "name": "@openai/codex", - "version": "0.154.0-win32-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-win32-arm64.tgz", - "integrity": "sha512-CRUmZnE0Y/a8aLMrrA681EytOGaPaF659wJAiI4I3hsbQjaeYBSPV7PkCjy4Qn5LR/fmwIUORVH+6JaBNQL+tw==", + "version": "0.164.0-win32-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-win32-arm64.tgz", + "integrity": "sha512-Zkzt8HNmB/vOnlDo5D7IOlrt5rHaxYQB7iGbNP7bHcXZtrk6gaD7UriwaieGYJpcf8DqAT/0tqzY4xbs8ZwbmQ==", "cpu": [ "arm64" ], @@ -1740,9 +1740,9 @@ }, "node_modules/@openai/codex-win32-x64": { "name": "@openai/codex", - "version": "0.154.0-win32-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-win32-x64.tgz", - "integrity": "sha512-Stg2KEJPIKVqPPR1wCverGOR4ey3RR3cvakR07w7FNKQUMzmHaOZomRsP2bR1qOT/67yHsks9rB+MCMfIWXcRA==", + "version": "0.164.0-win32-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-win32-x64.tgz", + "integrity": "sha512-urWPhwh9YavuoAPIkmVYKBTtd5OtGVL4Ki0Fb28dhK/Mz6Pt4LSy+gbRrZFz5+RXrw9ubvXuXDCcd8beYcWhDg==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index 2f3e0e3..19e8210 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "devDependencies": { "@aws-sdk/client-dynamodb-streams": "3.1088.0", "@aws-sdk/client-ecs": "3.1088.0", - "@openai/codex": "0.154.0", + "@openai/codex": "0.164.0", "@playwright/mcp": "0.0.83", "@playwright/test": "1.62.1", "@types/archiver": "7.0.0", diff --git a/relay/Dockerfile b/relay/Dockerfile index b70a22b..7f95087 100644 --- a/relay/Dockerfile +++ b/relay/Dockerfile @@ -3,7 +3,7 @@ FROM node:22-bookworm-slim@sha256:83f487e0a63425e5b4d146fb5e5be574bcbe1b7b843d3e # the pinned image's roots so both HTTPS clients verify the same authorities. RUN mkdir -p /etc/ssl/certs && node -e "require('node:fs').writeFileSync('/etc/ssl/certs/ca-certificates.crt', require('node:tls').rootCertificates.join('\n') + '\n')" ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt -RUN npm install --global @openai/codex@0.154.0 && npm cache clean --force +RUN npm install --global @openai/codex@0.164.0 && npm cache clean --force WORKDIR /app COPY dist/environment-relay.mjs /app/environment-relay.mjs COPY dist/agents-server.mjs /app/agents-server.mjs diff --git a/runtime/codex/Dockerfile b/runtime/codex/Dockerfile index 052b0e6..2d8943a 100644 --- a/runtime/codex/Dockerfile +++ b/runtime/codex/Dockerfile @@ -10,7 +10,7 @@ RUN dnf install -y gcc gcc-c++ make cmake clang pkgconfig libcap-devel perl-core && dnf clean all && rm -rf /var/cache/dnf RUN dnf install -y openssl-devel && dnf clean all && rm -rf /var/cache/dnf RUN curl --fail --location --silent --show-error https://sh.rustup.rs --output /tmp/rustup.sh \ - && sh /tmp/rustup.sh -y --profile minimal --default-toolchain 1.95.0 --no-modify-path \ + && sh /tmp/rustup.sh -y --profile minimal --default-toolchain 1.99.1 --no-modify-path \ && rm /tmp/rustup.sh ENV PATH=/root/.cargo/bin:$PATH CARGO_BUILD_JOBS=1 WORKDIR /rat @@ -22,7 +22,8 @@ RUN npm install --omit=dev --no-audit --no-fund \ RUN --mount=type=cache,target=/build,id=rat-codex-${TARGETARCH}-build \ --mount=type=cache,target=/root/.cargo/registry,id=rat-codex-${TARGETARCH}-registry \ --mount=type=cache,target=/root/.cargo/git,id=rat-codex-${TARGETARCH}-git \ - node scripts/build-codex-runtime.mjs /build \ - && mkdir /out && cp -a /build/runtime /out/runtime && cp /build/artifact.json /out/artifact.json + build_directory="/build/$(sha256sum runtime/codex/source.json runtime/codex/*.patch runtime/codex/Dockerfile scripts/build-codex-runtime.mjs | sha256sum | cut -d ' ' -f1)" \ + && node scripts/build-codex-runtime.mjs "$build_directory" \ + && mkdir /out && cp -a "$build_directory/runtime" /out/runtime && cp "$build_directory/artifact.json" /out/artifact.json FROM scratch AS artifact COPY --from=build /out/ / diff --git a/runtime/codex/README.md b/runtime/codex/README.md index e77e7b5..01b1709 100644 --- a/runtime/codex/README.md +++ b/runtime/codex/README.md @@ -7,11 +7,21 @@ patch applies cleanly. ## What is pinned +The runtime is built from the full upstream Codex 0.164.0 source, with the explicit +patches below. The stock executable is not interchangeable: Rat Things requires +confirmed checkpoint persistence, exact provider settings and typed failures, +ordered interruption and output, and sandboxed Node subprocess support. + +Reasoning defaults follow this release's model catalogue. A model absent from that +catalogue has a null default, leaving the choice to the provider; an explicit +saved effort is preserved. Model capabilities remain separately validated. + [source.json](source.json) selects the upstream repository, exact commit, release version and ordered patches. [companion-packages.json](companion-packages.json) locks each platform's npm package identity, tarball integrity, descriptor and file hashes against [package-lock.json](../../package-lock.json). The compiled executable -travels with its matching code-mode host, `rg`, `zsh` and Linux `bwrap` resources. +travels with its matching code-mode and voice hosts, shared libraries, `rg`, +licenses and Linux `bwrap` resources. Bundling voice resources does not enable voice. Replacing only `bin/codex` from an unrelated release is not an upgrade. [artifact-policy.json](artifact-policy.json) binds the source and ordered patch @@ -34,11 +44,10 @@ integration checks. Building the executable does not run those Rust tests. | [release-lock.patch](release-lock.patch) | Align workspace package versions in `Cargo.lock` with the pinned release so `cargo build --locked` succeeds without rewriting the lock. | The locked build and exact-tree audit; no separate runtime behavior change. | | [interrupt-barrier.patch](interrupt-barrier.patch) | Await child task interruption before acknowledging it, so a follow-up on that child does not race the previous execution guard at the concurrency limit. | Strict interruption/follow-up cases in [native-session.test.ts](../../tests/agents/native-session.test.ts), plus nested limit checks in [native-admission.test.ts](../../tests/agents/native-admission.test.ts). | | [api-model-settings.patch](api-model-settings.patch) | Preserve explicit `auto`, `default`, `flex`, `priority` and `fast` service tiers through config and Turn updates; the provider decides support without a silent catalog/UI downgrade. | Patched config, Session and protocol service-tier unit tests; [native-session-settings.test.ts](../../tests/agents/native-session-settings.test.ts) checks outgoing requests across Turns. | +| [chatgpt-service-tier.patch](chatgpt-service-tier.patch) | Omit `auto`/`default` for ChatGPT authentication while preserving other explicit tiers and API-key/Bedrock request values across HTTP and WebSocket setup and continuation. | Patched `responses_service_tier_*` Rust tests cover these transports/auth modes, including repeated Turns. They use local fixtures, not a live provider. | | [api-turn-errors.patch](api-turn-errors.patch) | Preserve typed provider failures across HTTP and SSE, including credit exhaustion and timeouts; keep private diagnostics out of normalized errors and credit exhaustion non-retryable. | Patched API bridge/SSE unit tests; [native-turn-errors.test.ts](../../tests/agents/native-turn-errors.test.ts) checks public categories, private-message removal and request count. | -| [checkpoint-shutdown.patch](checkpoint-shutdown.patch) | Add private `thread/checkpoint`: require an idle durable thread and acknowledge successful persistence shutdown, with a bounded wait. The host must seal admission first. | [session-checkpoint.test.ts](../../tests/runner/session-checkpoint.test.ts) checks orchestration with an RPC fixture. The opt-in [AWS checkpoint proof](../../tests/aws/session-checkpoint.test.ts) exercises actual worker replacement and native history; the fixture alone does not prove a durable flush. | -| [step-settings-test-import.patch](step-settings-test-import.patch) | Restore the `ServiceTier` import needed by the upstream step-settings tests after the settings patch removes the production import. | Compile and run the affected `codex-core` unit tests; this is a test-build fix. | -| [unified-exec-output-subscription.patch](unified-exec-output-subscription.patch) | Subscribe when the process output channel is created, retaining early output until the streaming consumer takes its receiver. | Patched Rust test `exit_watcher_preserves_output_emitted_before_streaming_starts` checks both streamed bytes and completed command output. | -| [chatgpt-service-tier.patch](chatgpt-service-tier.patch) | Omit `auto`/`default` for ChatGPT authentication while preserving other explicit tiers and API-key/Bedrock request values across HTTP, WebSocket and compaction requests. | Patched `responses_service_tier_*` Rust tests cover these transports/auth modes, including repeated Turns and WebSocket continuation. They use local fixtures, not a live provider. | +| [checkpoint-shutdown.patch](checkpoint-shutdown.patch) | Add private `thread/checkpoint` for an exact set of idle durable threads. Use upstream shutdown handles to drain descendants, internal work and persistence before acknowledging the set. The host seals admission, verifies history and waits for process exit before publishing. | Patched `checkpoint_idle_threads_*` core integration tests cover tree shutdown, identity validation, busy rejection and persistence failure; [native-checkpoint.test.ts](../../tests/agents/native-checkpoint.test.ts) exercises the compiled bridge and resume; [session-checkpoint.test.ts](../../tests/runner/session-checkpoint.test.ts) checks host orchestration. The opt-in [AWS checkpoint proof](../../tests/aws/session-checkpoint.test.ts) is still required for actual worker replacement. | +| [unified-exec-output-subscription.patch](unified-exec-output-subscription.patch) | Subscribe when the process output channel is created, retaining early output until the streaming consumer takes its receiver. Upstream retains the completed transcript; streaming still needs the early receiver. | Patched Rust test `streamed_and_completed_output_preserve_bytes_before_subscription` checks both streamed bytes and completed command output with and without late output. | | [local-subprocess-stdio.patch](local-subprocess-stdio.patch) | Permit the local socket metadata and write-half-close that Node subprocess pipes require under disabled networking. Keep connection operations, non-Unix socket creation, other socket options and other shutdown modes denied. | Patched `restricted_network_supports_node_subprocess_stdio` and `restricted_network_socket_metadata_does_not_enable_connections` tests; [managed-subprocess.test.ts](../../tests/pi/managed-subprocess.test.ts) checks the compiled artifact in strict Linux parity, and both KVM harnesses exercise the guest. | ## Upgrade one candidate at a time diff --git a/runtime/codex/api-model-settings.patch b/runtime/codex/api-model-settings.patch index 92bb157..a5a74aa 100644 --- a/runtime/codex/api-model-settings.patch +++ b/runtime/codex/api-model-settings.patch @@ -1,8 +1,31 @@ +diff --git a/codex-rs/core/src/client.rs b/codex-rs/core/src/client.rs +index 815ab10..a756599 100644 +--- a/codex-rs/core/src/client.rs ++++ b/codex-rs/core/src/client.rs +@@ -1092,17 +1092,7 @@ impl ModelClient { + &prompt.output_schema, + prompt.output_schema_strict, + ); +- let service_tier = model_info +- .service_tier_for_request(service_tier) +- .filter(|tier| { +- // Bedrock requires an advertised tier, including for flex, which the +- // generic OpenAI resolver permits without catalog support. +- !self.state.provider.info().is_amazon_bedrock() +- || model_info +- .service_tiers +- .iter() +- .any(|supported| supported.id == *tier) +- }); ++ let service_tier = model_info.service_tier_for_request(service_tier); + if !include_internal { + for item in &mut input { + item.clear_tool_result_metadata(); diff --git a/codex-rs/core/src/config/config_tests.rs b/codex-rs/core/src/config/config_tests.rs -index a093aaf..900c7d2 100644 +index c45fb2b..bc61204 100644 --- a/codex-rs/core/src/config/config_tests.rs +++ b/codex-rs/core/src/config/config_tests.rs -@@ -9839,7 +9839,7 @@ async fn default_service_tier_override_uses_default_request_value() -> std::io:: +@@ -10317,7 +10317,7 @@ async fn default_service_tier_override_uses_default_request_value() -> std::io:: } #[tokio::test] @@ -11,7 +34,7 @@ index a093aaf..900c7d2 100644 let fixture = create_test_fixture()?; let config = Config::load_from_base_config_with_overrides( -@@ -9853,10 +9853,7 @@ async fn legacy_fast_service_tier_override_uses_priority_request_value() -> std: +@@ -10331,10 +10331,7 @@ async fn legacy_fast_service_tier_override_uses_priority_request_value() -> std: ) .await?; @@ -23,7 +46,7 @@ index a093aaf..900c7d2 100644 Ok(()) } -@@ -9909,7 +9906,7 @@ async fn config_toml_service_tier_accepts_arbitrary_string() -> std::io::Result< +@@ -10387,7 +10384,7 @@ async fn config_toml_service_tier_accepts_arbitrary_string() -> std::io::Result< } #[tokio::test] @@ -32,7 +55,7 @@ index a093aaf..900c7d2 100644 let mut fixture = create_test_fixture()?; fixture.cfg.service_tier = Some("fast".to_string()); let cwd = fixture.cwd_path(); -@@ -9925,10 +9922,7 @@ async fn config_toml_legacy_fast_service_tier_uses_priority_request_value() -> s +@@ -10403,10 +10400,7 @@ async fn config_toml_legacy_fast_service_tier_uses_priority_request_value() -> s ) .await?; @@ -45,10 +68,10 @@ index a093aaf..900c7d2 100644 } diff --git a/codex-rs/core/src/config/mod.rs b/codex-rs/core/src/config/mod.rs -index ebda977..9ac707b 100644 +index 3f6c1cc..cdce709 100644 --- a/codex-rs/core/src/config/mod.rs +++ b/codex-rs/core/src/config/mod.rs -@@ -102,7 +102,6 @@ use codex_protocol::config_types::Personality; +@@ -104,7 +104,6 @@ use codex_protocol::config_types::Personality; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; use codex_protocol::config_types::SandboxMode; @@ -56,7 +79,7 @@ index ebda977..9ac707b 100644 use codex_protocol::config_types::ShellEnvironmentPolicy; use codex_protocol::config_types::TrustLevel; use codex_protocol::config_types::Verbosity; -@@ -3884,15 +3883,6 @@ impl Config { +@@ -4127,17 +4126,8 @@ impl Config { Some(None) => Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()), None => cfg.service_tier, }; @@ -66,44 +89,50 @@ index ebda977..9ac707b 100644 - .enabled(Feature::FastMode) - .then(|| ServiceTier::Fast.request_value().to_string()), - Some(ServiceTier::Flex) => Some(ServiceTier::Flex.request_value().to_string()), +- None if service_tier == "ultrafast" => features +- .enabled(Feature::UltrafastMode) +- .then_some(service_tier), - None => Some(service_tier), - } -- }); ++ let service_tier = service_tier.filter(|service_tier| { ++ service_tier != "ultrafast" || features.enabled(Feature::UltrafastMode) + }); let compact_prompt = compact_prompt.or(cfg.compact_prompt).and_then(|value| { - let trimmed = value.trim(); diff --git a/codex-rs/core/src/session/mod.rs b/codex-rs/core/src/session/mod.rs -index 8ffc144..8485d20 100644 +index 96cfaa1..e436ec0 100644 --- a/codex-rs/core/src/session/mod.rs +++ b/codex-rs/core/src/session/mod.rs -@@ -986,6 +986,14 @@ fn get_service_tier( - fast_mode_enabled: bool, +@@ -117,7 +117,6 @@ use codex_protocol::capabilities::SelectedCapabilityRoot; + use codex_protocol::config_types::ApprovalsReviewer; + use codex_protocol::config_types::AutoCompactTokenLimitScope; + use codex_protocol::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; +-use codex_protocol::config_types::ServiceTier; + use codex_protocol::config_types::WebSearchMode; + use codex_protocol::dynamic_tools::DynamicToolResponse; + use codex_protocol::dynamic_tools::DynamicToolSpec; +@@ -1206,7 +1205,7 @@ pub(crate) fn get_service_tier( model_info: &ModelInfo, ) -> Option { -+ // The API provider, rather than the interactive model catalogue, decides -+ // whether an explicit routing choice is supported. Never silently downgrade it. -+ if configured_service_tier -+ .as_deref() -+ .is_some_and(|tier| codex_protocol::config_types::AGENTS_API_SERVICE_TIERS.contains(&tier)) -+ { -+ return configured_service_tier; -+ } - if !fast_mode_enabled { - return None; + let service_tier = configured_service_tier?; +- if service_tier == ServiceTier::Flex.request_value() { ++ if codex_protocol::config_types::AGENTS_API_SERVICE_TIERS.contains(&service_tier.as_str()) { + return Some(service_tier); } -@@ -1002,6 +1010,7 @@ fn unsupported_service_tier_warning( + if features.service_tier_enabled(&service_tier) +@@ -1225,6 +1224,7 @@ fn unsupported_service_tier_warning( ) -> Option { let service_tier = configured_service_tier.filter(|service_tier| { - fast_mode_enabled + features.service_tier_enabled(service_tier) + && !codex_protocol::config_types::AGENTS_API_SERVICE_TIERS.contains(service_tier) && *service_tier != SERVICE_TIER_DEFAULT_REQUEST_VALUE && !model_info.supports_service_tier(service_tier) })?; diff --git a/codex-rs/core/src/session/step_settings.rs b/codex-rs/core/src/session/step_settings.rs -index 49502e8..af1bee7 100644 +index b66fb19..0c53160 100644 --- a/codex-rs/core/src/session/step_settings.rs +++ b/codex-rs/core/src/session/step_settings.rs -@@ -12,7 +12,6 @@ use codex_protocol::config_types::CollaborationMode; +@@ -13,7 +13,6 @@ use codex_protocol::config_types::CollaborationMode; use codex_protocol::config_types::Personality; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; @@ -111,7 +140,7 @@ index 49502e8..af1bee7 100644 use codex_protocol::openai_models::ModelInfo; use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::protocol::AskForApproval; -@@ -275,13 +274,8 @@ impl StepSettings { +@@ -267,13 +266,8 @@ impl StepSettings { next.reasoning_summary = Some(summary); } if let Some(service_tier) = update.service_tier.clone() { @@ -126,51 +155,69 @@ index 49502e8..af1bee7 100644 None => SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string(), }); } +diff --git a/codex-rs/core/src/session/step_settings_tests.rs b/codex-rs/core/src/session/step_settings_tests.rs +index 86b8ac1..c8963f4 100644 +--- a/codex-rs/core/src/session/step_settings_tests.rs ++++ b/codex-rs/core/src/session/step_settings_tests.rs +@@ -341,7 +341,7 @@ fn sparse_patch_uses_the_settings_version_being_updated() { + .apply(&tier_update, &constraints) + .expect("a previously prepared sparse update should apply"); + let expected = StepSettings { +- service_tier: Some(ServiceTier::Fast.request_value().to_string()), ++ service_tier: Some("fast".to_string()), + ..latest + }; + assert_eq!(updated, expected); diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs -index 116e450..2c1d33a 100644 +index 7bd3a38..327dad3 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs -@@ -5096,71 +5096,36 @@ fn get_service_tier_does_not_default_when_model_has_no_default() { +@@ -5105,60 +5105,36 @@ fn get_service_tier_drops_unsupported_configured_tier_when_fast_mode_enabled() { } #[test] --fn get_service_tier_drops_unsupported_configured_tier_when_fast_mode_enabled() { -- let model_info = model_with_default_service_tier(Some(ServiceTier::Fast.request_value())); -- -- assert_eq!( -- get_service_tier( -- Some("unsupported".to_string()), -- /*fast_mode_enabled*/ true, -- &model_info, -- ), -- None -- ); -- assert_eq!( -- get_service_tier( -- Some(ServiceTier::Flex.request_value().to_string()), -- /*fast_mode_enabled*/ true, -- &model_info, -- ), -- None -- ); -- assert_eq!( -- get_service_tier( -- Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()), -- /*fast_mode_enabled*/ true, -- &model_info, -- ), -- Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()) -- ); --} -- +-fn get_service_tier_preserves_flex_without_catalog_support_or_fast_mode() { ++fn get_service_tier_preserves_explicit_api_choices_without_catalog_or_ui_support() { + let model_info = model_with_default_service_tier(/*default_service_tier*/ None); + for fast_mode_enabled in [false, true] { + let mut features = codex_features::Features::with_defaults(); + features.set_enabled(Feature::FastMode, fast_mode_enabled); ++ for tier in codex_protocol::config_types::AGENTS_API_SERVICE_TIERS { ++ assert_eq!( ++ get_service_tier(Some(tier.to_string()), &features, &model_info), ++ Some(tier.to_string()) ++ ); ++ assert_eq!( ++ unsupported_service_tier_warning(Some(tier), &features, &model_info), ++ None ++ ); ++ } ++ assert_eq!( ++ get_service_tier(Some("unsupported".to_string()), &features, &model_info), ++ None ++ ); + assert_eq!( + get_service_tier( +- Some(ServiceTier::Flex.request_value().to_string()), ++ /*configured_service_tier*/ None, + &features, +- &model_info, ++ &model_info + ), +- Some(ServiceTier::Flex.request_value().to_string()) ++ None + ); + } + } + -#[test] --fn get_service_tier_ignores_configured_tier_when_fast_mode_disabled() { +-fn get_service_tier_ignores_non_flex_tiers_when_fast_mode_disabled() { - let model_info = model_with_default_service_tier(Some(ServiceTier::Fast.request_value())); - - assert_eq!( - get_service_tier( - Some(ServiceTier::Fast.request_value().to_string()), -- /*fast_mode_enabled*/ false, +- &codex_features::Features::default(), - &model_info, - ), - None @@ -178,7 +225,7 @@ index 116e450..2c1d33a 100644 - assert_eq!( - get_service_tier( - Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()), -- /*fast_mode_enabled*/ false, +- &codex_features::Features::default(), - &model_info, - ), - None @@ -186,7 +233,7 @@ index 116e450..2c1d33a 100644 - assert_eq!( - get_service_tier( - Some("unsupported".to_string()), -- /*fast_mode_enabled*/ false, +- &codex_features::Features::default(), - &model_info, - ), - None @@ -194,45 +241,17 @@ index 116e450..2c1d33a 100644 - assert_eq!( - get_service_tier( - /*configured_service_tier*/ None, -- /*fast_mode_enabled*/ false, +- &codex_features::Features::default(), - &model_info, - ), - None - ); -+fn get_service_tier_preserves_explicit_api_choices_without_catalog_or_ui_support() { -+ let model_info = model_with_default_service_tier(/*default_service_tier*/ None); -+ for fast_mode_enabled in [false, true] { -+ for tier in codex_protocol::config_types::AGENTS_API_SERVICE_TIERS { -+ assert_eq!( -+ get_service_tier(Some(tier.to_string()), fast_mode_enabled, &model_info), -+ Some(tier.to_string()) -+ ); -+ assert_eq!( -+ unsupported_service_tier_warning(Some(tier), fast_mode_enabled, &model_info), -+ None -+ ); -+ } -+ assert_eq!( -+ get_service_tier( -+ Some("unsupported".to_string()), -+ fast_mode_enabled, -+ &model_info -+ ), -+ None -+ ); -+ assert_eq!( -+ get_service_tier( -+ /*configured_service_tier*/ None, -+ fast_mode_enabled, -+ &model_info -+ ), -+ None -+ ); -+ } - } - +-} +- #[tokio::test] -@@ -5187,7 +5152,7 @@ async fn session_settings_null_service_tier_update_uses_default_service_tier() { + async fn session_settings_null_service_tier_update_uses_default_service_tier() { + let session_configuration = make_session_configuration_for_tests().await; +@@ -5183,7 +5159,7 @@ async fn session_settings_null_service_tier_update_uses_default_service_tier() { } #[tokio::test] @@ -241,7 +260,7 @@ index 116e450..2c1d33a 100644 let session_configuration = make_session_configuration_for_tests().await; let updated = session_configuration -@@ -5203,10 +5168,7 @@ async fn session_settings_legacy_fast_service_tier_update_uses_priority_request_ +@@ -5199,10 +5175,7 @@ async fn session_settings_legacy_fast_service_tier_update_uses_priority_request_ ) .expect("legacy fast service tier update should apply"); @@ -253,11 +272,92 @@ index 116e450..2c1d33a 100644 } pub(crate) async fn make_session_configuration_for_tests() -> SessionConfiguration { +diff --git a/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs b/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs +index 8537b9b..3b71d3e 100644 +--- a/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs ++++ b/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs +@@ -64,7 +64,7 @@ async fn bedrock_ultrafast_can_be_configured_and_toggled( + .collect::>(), + vec![ + Some(serde_json::json!("ultrafast")), +- None, ++ Some(serde_json::json!("default")), + Some(serde_json::json!("ultrafast")) + ] + ); +@@ -80,12 +80,12 @@ async fn bedrock_ultrafast_can_be_configured_and_toggled( + #[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-sol", &["custom-tier"], Some("custom-tier"), Some("custom-tier"); "runtime custom tier")] + #[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &[], Some("ultrafast"), None; "mantle empty tiers")] + #[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &[], Some("ultrafast"), None; "runtime empty tiers")] +-#[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &["ultrafast"], Some("priority"), None; "mantle unadvertised tier")] +-#[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &["ultrafast"], Some("flex"), None; "runtime unadvertised tier")] ++#[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &["ultrafast"], Some("priority"), Some("priority"); "mantle explicit API tier")] ++#[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &["ultrafast"], Some("flex"), Some("flex"); "runtime explicit API tier")] + #[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &["ultrafast"], None, None; "mantle core requires explicit selection")] + #[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &["ultrafast"], None, None; "runtime core requires explicit selection")] + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn bedrock_custom_catalog_controls_service_tiers( ++async fn bedrock_custom_catalog_controls_additional_service_tiers( + provider_id: &'static str, + model: &'static str, + advertised_tiers: &'static [&'static str], +diff --git a/codex-rs/core/tests/suite/subagent_service_tier.rs b/codex-rs/core/tests/suite/subagent_service_tier.rs +index 74d5592..2af9f80 100644 +--- a/codex-rs/core/tests/suite/subagent_service_tier.rs ++++ b/codex-rs/core/tests/suite/subagent_service_tier.rs +@@ -157,8 +157,8 @@ async fn root_service_tier_change_updates_existing_subagent( + ) -> Result<()> { + let server = start_mock_server().await; + let initial_service_tier_owned = initial_service_tier.map(str::to_string); +- let updated_request_service_tier = updated_service_tier +- .filter(|service_tier| *service_tier != SERVICE_TIER_DEFAULT_REQUEST_VALUE); ++ let updated_request_service_tier = ++ Some(updated_service_tier.unwrap_or(SERVICE_TIER_DEFAULT_REQUEST_VALUE)); + let mut builder = test_codex() + .with_model("gpt-5.6-sol") + .with_config(move |config| { +@@ -389,7 +389,7 @@ async fn evicted_role_subagent_uses_root_service_tier_after_reload() -> Result<( + }])) + .await?; + wait_for_turn_complete(&reloaded_thread).await; +- assert_request_service_tier(&reloaded_request, /*expected*/ None); ++ assert_request_service_tier(&reloaded_request, Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE)); + reloaded_thread.shutdown_and_wait().await?; + test.codex.shutdown_and_wait().await?; + +diff --git a/codex-rs/model-provider/src/amazon_bedrock/catalog.rs b/codex-rs/model-provider/src/amazon_bedrock/catalog.rs +index f160286..643e8da 100644 +--- a/codex-rs/model-provider/src/amazon_bedrock/catalog.rs ++++ b/codex-rs/model-provider/src/amazon_bedrock/catalog.rs +@@ -402,7 +402,7 @@ mod tests { + } + + #[test] +- fn bedrock_models_do_not_enable_priority_or_explicit_default_tiers() { ++ fn bedrock_models_preserve_explicit_provider_tiers_without_catalog_defaults() { + let catalog = static_model_catalog(); + + for model in catalog.models { +@@ -410,12 +410,12 @@ mod tests { + assert_eq!(model.default_service_tier, None); + assert_eq!( + model.service_tier_for_request(Some("priority".to_string())), +- None ++ Some("priority".to_string()) + ); + assert_eq!( + model + .service_tier_for_request(Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string())), +- None ++ Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()) + ); + } + } diff --git a/codex-rs/protocol/src/config_types.rs b/codex-rs/protocol/src/config_types.rs -index b5ac448..4bdaa7d 100644 +index 87ffe6d..38b86d3 100644 --- a/codex-rs/protocol/src/config_types.rs +++ b/codex-rs/protocol/src/config_types.rs -@@ -535,6 +535,9 @@ pub enum ServiceTier { +@@ -536,6 +536,9 @@ pub enum ServiceTier { /// selected no service tier, so model catalog defaults should not apply. pub const SERVICE_TIER_DEFAULT_REQUEST_VALUE: &str = "default"; @@ -268,10 +368,18 @@ index b5ac448..4bdaa7d 100644 pub const fn request_value(self) -> &'static str { match self { diff --git a/codex-rs/protocol/src/openai_models.rs b/codex-rs/protocol/src/openai_models.rs -index 8c021b1..ef0632d 100644 +index d3d3dd8..5e174b7 100644 --- a/codex-rs/protocol/src/openai_models.rs +++ b/codex-rs/protocol/src/openai_models.rs -@@ -923,8 +923,8 @@ impl ModelInfo { +@@ -27,7 +27,6 @@ use tracing::warn; + use ts_rs::TS; + + use crate::config_types::ReasoningSummary; +-use crate::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; + use crate::config_types::ServiceTier; + use crate::config_types::Verbosity; + use crate::protocol::MultiAgentVersion; +@@ -1016,8 +1015,8 @@ impl ModelInfo { pub fn service_tier_for_request(&self, service_tier: Option) -> Option { service_tier.filter(|service_tier| { @@ -282,7 +390,15 @@ index 8c021b1..ef0632d 100644 }) } } -@@ -2050,7 +2050,7 @@ mod tests { +@@ -1051,6 +1050,7 @@ impl ModelPreset { + #[cfg(test)] + mod tests { + use super::*; ++ use crate::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; + use pretty_assertions::assert_eq; + use serde_json::from_str; + use serde_json::to_string; +@@ -1975,7 +1975,7 @@ mod tests { } #[test] @@ -291,7 +407,7 @@ index 8c021b1..ef0632d 100644 let model = ModelInfo { default_service_tier: Some(ServiceTier::Fast.request_value().to_string()), service_tiers: vec![ModelServiceTier { -@@ -2063,7 +2063,7 @@ mod tests { +@@ -1988,7 +1988,7 @@ mod tests { assert_eq!( model.service_tier_for_request(Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string())), @@ -300,7 +416,7 @@ index 8c021b1..ef0632d 100644 ); } -@@ -2087,6 +2087,12 @@ mod tests { +@@ -2025,6 +2025,12 @@ mod tests { model.service_tier_for_request(Some("unsupported".to_string())), None ); diff --git a/runtime/codex/api-turn-errors.patch b/runtime/codex/api-turn-errors.patch index 3236630..58d0c67 100644 --- a/runtime/codex/api-turn-errors.patch +++ b/runtime/codex/api-turn-errors.patch @@ -1,52 +1,60 @@ diff --git a/codex-rs/app-server-protocol/src/protocol/v2/shared.rs b/codex-rs/app-server-protocol/src/protocol/v2/shared.rs -index b5a68a0..e6d174b 100644 +index 65c7db5..3e3f4ef 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/shared.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/shared.rs -@@ -78,6 +78,8 @@ pub enum CodexErrorInfo { +@@ -77,6 +77,8 @@ pub enum CodexErrorInfo { ContextWindowExceeded, SessionBudgetExceeded, UsageLimitExceeded, + CreditBalanceExhausted, + RequestTimeout, RateLimitExceeded, + FlexUnavailable, ServerOverloaded, - CyberPolicy, -@@ -126,6 +128,8 @@ impl From for CodexErrorInfo { +@@ -152,6 +154,8 @@ impl From for CodexErrorInfo { CoreCodexErrorInfo::ContextWindowExceeded => CodexErrorInfo::ContextWindowExceeded, CoreCodexErrorInfo::SessionBudgetExceeded => CodexErrorInfo::SessionBudgetExceeded, CoreCodexErrorInfo::UsageLimitExceeded => CodexErrorInfo::UsageLimitExceeded, + CoreCodexErrorInfo::CreditBalanceExhausted => CodexErrorInfo::CreditBalanceExhausted, + CoreCodexErrorInfo::RequestTimeout => CodexErrorInfo::RequestTimeout, CoreCodexErrorInfo::RateLimitExceeded => CodexErrorInfo::RateLimitExceeded, + CoreCodexErrorInfo::FlexUnavailable => CodexErrorInfo::FlexUnavailable, CoreCodexErrorInfo::ServerOverloaded => CodexErrorInfo::ServerOverloaded, - CoreCodexErrorInfo::CyberPolicy => CodexErrorInfo::CyberPolicy, diff --git a/codex-rs/cli/src/doctor.rs b/codex-rs/cli/src/doctor.rs -index e42fa9b..5f0a722 100644 +index 10d1cef..cb024f7 100644 --- a/codex-rs/cli/src/doctor.rs +++ b/codex-rs/cli/src/doctor.rs -@@ -2364,6 +2364,7 @@ fn websocket_error_detail(err: &ApiError) -> String { - ApiError::Stream(message) => format!("handshake stream error: {message}"), - ApiError::ContextWindowExceeded +@@ -2442,6 +2442,7 @@ fn websocket_error_detail(err: &ApiError) -> String { + | ApiError::ResponseIncomplete(_) + | ApiError::ContextWindowExceeded | ApiError::QuotaExceeded + | ApiError::CreditBalanceExhausted | ApiError::UsageNotIncluded | ApiError::Retryable { .. } | ApiError::RateLimitExceeded { .. } diff --git a/codex-rs/codex-api/src/api_bridge.rs b/codex-rs/codex-api/src/api_bridge.rs -index e8d7c47..1b33d11 100644 +index 98d8d17..fc131d4 100644 --- a/codex-rs/codex-api/src/api_bridge.rs +++ b/codex-rs/codex-api/src/api_bridge.rs -@@ -22,6 +22,7 @@ pub fn map_api_error(err: ApiError) -> CodexErr { +@@ -32,6 +32,7 @@ pub fn map_api_error(err: ApiError) -> CodexErr { + | ApiError::ResponseIncomplete(_) + | ApiError::ContextWindowExceeded + | ApiError::QuotaExceeded ++ | ApiError::CreditBalanceExhausted + | ApiError::UsageNotIncluded + | ApiError::FlexUnavailable + | ApiError::RateLimit(_) +@@ -52,6 +53,7 @@ fn map_api_error_details(err: ApiError) -> CodexErr { match err { ApiError::ContextWindowExceeded => CodexErr::ContextWindowExceeded, ApiError::QuotaExceeded => CodexErr::QuotaExceeded, + ApiError::CreditBalanceExhausted => CodexErr::CreditBalanceExhausted, ApiError::UsageNotIncluded => CodexErr::UsageNotIncluded, - ApiError::Retryable { message, delay } => { - let error = CodexErr::Stream(message); -@@ -40,6 +41,9 @@ pub fn map_api_error(err: ApiError) -> CodexErr { - ApiError::Stream(msg) => CodexErr::Stream(msg), - ApiError::ServerOverloaded => CodexErr::ServerOverloaded, + ApiError::Retryable { message, .. } => CodexErr::Stream(message), + ApiError::RateLimitExceeded { message, .. } => { +@@ -65,6 +67,9 @@ fn map_api_error_details(err: ApiError) -> CodexErr { + ApiError::ServerOverloaded { .. } => CodexErr::ServerOverloaded, + ApiError::FlexUnavailable => CodexErr::new(CodexErrorDetails::FlexUnavailable), ApiError::Api { status, message } => { + if let Some(error) = typed_error_body(&message) { + return error; @@ -54,20 +62,20 @@ index e8d7c47..1b33d11 100644 let user_message = api_error_user_message(status, &message); CodexErr::UnexpectedStatus(UnexpectedResponseError { status, -@@ -71,6 +75,9 @@ pub fn map_api_error(err: ApiError) -> CodexErr { - body, +@@ -101,6 +106,9 @@ fn map_api_error_details(err: ApiError) -> CodexErr { + .. } => { let body_text = body.unwrap_or_default(); + if let Some(error) = typed_error_body(&body_text) { + return error; + } - + if status == http::StatusCode::SERVICE_UNAVAILABLE && let Ok(value) = serde_json::from_str::(&body_text) -@@ -196,6 +203,24 @@ pub fn map_api_error(err: ApiError) -> CodexErr { +@@ -276,6 +284,22 @@ fn map_api_error_details(err: ApiError) -> CodexErr { } } - + +// Typed failures take precedence over a transport status without retaining the +// provider body in the resulting error. +fn typed_error_body(body: &str) -> Option { @@ -78,9 +86,7 @@ index e8d7c47..1b33d11 100644 + "session_budget_exceeded" => Some(CodexErr::SessionBudgetExceeded), + "insufficient_quota" | "usage_limit_exceeded" => Some(CodexErr::QuotaExceeded), + "server_error" => Some(CodexErr::InternalServerError), -+ "server_overloaded" | "server_is_overloaded" | "slow_down" => { -+ Some(CodexErr::ServerOverloaded) -+ } ++ "server_overloaded" | "server_is_overloaded" => Some(CodexErr::ServerOverloaded), + "request_timeout" => Some(CodexErr::RequestTimeout), + _ => None, + } @@ -90,10 +96,21 @@ index e8d7c47..1b33d11 100644 const REQUEST_ID_HEADER: &str = "x-request-id"; const OAI_REQUEST_ID_HEADER: &str = "x-oai-request-id"; diff --git a/codex-rs/codex-api/src/api_bridge_tests.rs b/codex-rs/codex-api/src/api_bridge_tests.rs -index 666dea8..a2df4c3 100644 +index c5504e2..17df58a 100644 --- a/codex-rs/codex-api/src/api_bridge_tests.rs +++ b/codex-rs/codex-api/src/api_bridge_tests.rs -@@ -521,3 +521,67 @@ fn map_api_error_extracts_identity_auth_details_from_headers() { +@@ -511,7 +511,9 @@ fn map_api_error_distinguishes_http_quota_errors_from_rate_limits() { + serde_json::json!({"type": "rate_limit_error", "code": "rate_limit_exceeded"}), + serde_json::json!({"type": "rate_limit_error", "code": "slow_down"}), + ] { +- let expected = if error["type"] == "rate_limit_error" { ++ let expected = if error["code"] == "credit_balance_exhausted" { ++ CodexErrorInfo::CreditBalanceExhausted ++ } else if error["type"] == "rate_limit_error" { + CodexErrorInfo::ResponseTooManyFailedAttempts { + http_status_code: Some(429), + } +@@ -776,3 +778,69 @@ fn map_api_error_extracts_identity_auth_details_from_headers() { ); assert_eq!(err.identity_error_code.as_deref(), Some("token_expired")); } @@ -109,6 +126,7 @@ index 666dea8..a2df4c3 100644 + message: body.to_string(), + }, + ApiError::Transport(TransportError::Http { ++ retry_after: None, + status: http::StatusCode::TOO_MANY_REQUESTS, + url: None, + headers: None, @@ -120,7 +138,7 @@ index 666dea8..a2df4c3 100644 + mapped.to_codex_protocol_error(), + CodexErrorInfo::CreditBalanceExhausted + ); -+ assert!(!mapped.is_retryable()); ++ assert!(mapped.retry_delay(1).is_none()); + assert_eq!(mapped.to_string(), "API credit balance exhausted."); + } +} @@ -149,6 +167,7 @@ index 666dea8..a2df4c3 100644 + message: body.clone(), + }, + ApiError::Transport(TransportError::Http { ++ retry_after: None, + status: http::StatusCode::BAD_REQUEST, + url: None, + headers: None, @@ -162,10 +181,10 @@ index 666dea8..a2df4c3 100644 + } +} diff --git a/codex-rs/codex-api/src/error.rs b/codex-rs/codex-api/src/error.rs -index d1d83cf..1030d81 100644 +index ad54b72..035f8d9 100644 --- a/codex-rs/codex-api/src/error.rs +++ b/codex-rs/codex-api/src/error.rs -@@ -17,6 +17,8 @@ pub enum ApiError { +@@ -23,6 +23,8 @@ pub enum ApiError { ContextWindowExceeded, #[error("quota exceeded")] QuotaExceeded, @@ -175,38 +194,13 @@ index d1d83cf..1030d81 100644 UsageNotIncluded, #[error("retryable error: {message}")] diff --git a/codex-rs/codex-api/src/sse/responses.rs b/codex-rs/codex-api/src/sse/responses.rs -index e4f5f04..126005d 100644 +index 34d5511..925f720 100644 --- a/codex-rs/codex-api/src/sse/responses.rs +++ b/codex-rs/codex-api/src/sse/responses.rs -@@ -420,7 +420,23 @@ pub fn process_responses_event( - if let Some(error) = resp_val.get("error") - && let Ok(error) = serde_json::from_value::(error.clone()) - { -- if is_context_window_error(&error) { -+ if error.code.as_deref() == Some("credit_balance_exhausted") { -+ response_error = ApiError::CreditBalanceExhausted; -+ } else if matches!( -+ error.code.as_deref(), -+ Some( -+ "server_error" -+ | "request_timeout" -+ | "session_budget_exceeded" -+ | "usage_limit_exceeded" -+ | "server_overloaded" -+ ) -+ ) { -+ response_error = ApiError::Api { -+ status: http::StatusCode::INTERNAL_SERVER_ERROR, -+ message: serde_json::json!({"error": {"code": error.code}}).to_string(), -+ }; -+ } else if is_context_window_error(&error) { - response_error = ApiError::ContextWindowExceeded; - } else if is_quota_exceeded_error(&error) { - response_error = ApiError::QuotaExceeded; -@@ -1181,6 +1197,15 @@ mod tests { +@@ -1180,6 +1180,15 @@ mod tests { assert_matches!(events[0], Err(ApiError::ContextWindowExceeded)); } - + + #[tokio::test] + async fn credit_balance_exhausted_error_is_fatal() { + let raw = r#"{"type":"response.failed","response":{"id":"credit_failure","error":{"code":"credit_balance_exhausted","message":"No API credits remain."}}}"#; @@ -219,13 +213,78 @@ index e4f5f04..126005d 100644 #[tokio::test] async fn quota_exceeded_error_is_fatal() { let raw_error = r#"{"type":"response.failed","sequence_number":3,"response":{"id":"resp_fatal_quota","object":"response","created_at":1759771626,"status":"failed","background":false,"error":{"code":"insufficient_quota","message":"You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors."},"incomplete_details":null}}"#; +diff --git a/codex-rs/codex-api/src/sse/responses_error.rs b/codex-rs/codex-api/src/sse/responses_error.rs +index 890f45a..8e40aac 100644 +--- a/codex-rs/codex-api/src/sse/responses_error.rs ++++ b/codex-rs/codex-api/src/sse/responses_error.rs +@@ -46,9 +46,19 @@ pub(super) fn parse_failed_response(response: Option) -> ApiError { + + match error.code.as_deref() { + Some("context_length_exceeded") => ApiError::ContextWindowExceeded, ++ Some("credit_balance_exhausted") => ApiError::CreditBalanceExhausted, ++ Some( ++ "server_error" ++ | "request_timeout" ++ | "session_budget_exceeded" ++ | "usage_limit_exceeded" ++ | "server_overloaded", ++ ) => ApiError::Api { ++ status: http::StatusCode::INTERNAL_SERVER_ERROR, ++ message: serde_json::json!({"error": {"code": error.code}}).to_string(), ++ }, + Some( + "insufficient_quota" +- | "credit_balance_exhausted" + | "organization_spend_limit_exceeded" + | "project_spend_limit_exceeded", + ) => ApiError::QuotaExceeded, +diff --git a/codex-rs/core/tests/suite/quota_exceeded.rs b/codex-rs/core/tests/suite/quota_exceeded.rs +index 852fe5a..c02a7ea 100644 +--- a/codex-rs/core/tests/suite/quota_exceeded.rs ++++ b/codex-rs/core/tests/suite/quota_exceeded.rs +@@ -51,6 +51,18 @@ async fn quota_exceeded_emits_single_error_event(code: &str) -> Result<()> { + }])) + .await?; + ++ let (expected_message, expected_error) = if code == "credit_balance_exhausted" { ++ ( ++ "API credit balance exhausted.", ++ CodexErrorInfo::CreditBalanceExhausted, ++ ) ++ } else { ++ ( ++ "Quota exceeded. Check your plan and billing details.", ++ CodexErrorInfo::UsageLimitExceeded, ++ ) ++ }; ++ + let mut error_events = 0; + + loop { +@@ -59,14 +71,8 @@ async fn quota_exceeded_emits_single_error_event(code: &str) -> Result<()> { + match event { + EventMsg::Error(err) => { + error_events += 1; +- assert_eq!( +- err.message, +- "Quota exceeded. Check your plan and billing details." +- ); +- assert_eq!( +- err.codex_error_info, +- Some(CodexErrorInfo::UsageLimitExceeded) +- ); ++ assert_eq!(err.message, expected_message); ++ assert_eq!(err.codex_error_info, Some(expected_error.clone())); + } + EventMsg::TurnComplete(_) => break, + _ => {} diff --git a/codex-rs/ext/goal/src/extension.rs b/codex-rs/ext/goal/src/extension.rs -index 8984899..633b99d 100644 +index bdc7535..5c55d3a 100644 --- a/codex-rs/ext/goal/src/extension.rs +++ b/codex-rs/ext/goal/src/extension.rs -@@ -365,7 +365,9 @@ where +@@ -427,7 +427,9 @@ where }; - + let reason = match input.error { - CodexErrorInfo::UsageLimitExceeded => ActiveGoalStopReason::UsageLimit, + CodexErrorInfo::UsageLimitExceeded | CodexErrorInfo::CreditBalanceExhausted => { @@ -234,35 +293,94 @@ index 8984899..633b99d 100644 // The turn has ended because the error was non-retryable or its // retries were exhausted. Block the goal to prevent automatic // continuation from looping and consuming tokens, as can happen +diff --git a/codex-rs/ext/guardian-reviewer/src/retry.rs b/codex-rs/ext/guardian-reviewer/src/retry.rs +index 5740cda..e63643b 100644 +--- a/codex-rs/ext/guardian-reviewer/src/retry.rs ++++ b/codex-rs/ext/guardian-reviewer/src/retry.rs +@@ -180,6 +180,7 @@ fn should_retry_guardian_review(outcome: &GuardianReviewOutcome) -> bool { + .. + }) => match error { + CodexErrorInfo::RateLimitExceeded ++ | CodexErrorInfo::RequestTimeout + | CodexErrorInfo::FlexUnavailable + | CodexErrorInfo::ServerOverloaded + | CodexErrorInfo::InternalServerError => true, +@@ -192,6 +193,7 @@ fn should_retry_guardian_review(outcome: &GuardianReviewOutcome) -> bool { + CodexErrorInfo::ContextWindowExceeded + | CodexErrorInfo::SessionBudgetExceeded + | CodexErrorInfo::UsageLimitExceeded ++ | CodexErrorInfo::CreditBalanceExhausted + | CodexErrorInfo::CyberPolicy + | CodexErrorInfo::BioPolicy + | CodexErrorInfo::MisalignmentPolicyViolation +diff --git a/codex-rs/ext/guardian-reviewer/src/retry_tests.rs b/codex-rs/ext/guardian-reviewer/src/retry_tests.rs +index c33aaff..47809bc 100644 +--- a/codex-rs/ext/guardian-reviewer/src/retry_tests.rs ++++ b/codex-rs/ext/guardian-reviewer/src/retry_tests.rs +@@ -47,6 +47,7 @@ fn guardian_review_retry_only_retries_recoverable_errors() { + let transient_error_info = [ + CodexErrorInfo::ServerOverloaded, + CodexErrorInfo::FlexUnavailable, ++ CodexErrorInfo::RequestTimeout, + CodexErrorInfo::HttpConnectionFailed { + http_status_code: Some(502), + }, +@@ -71,6 +72,13 @@ fn guardian_review_retry_only_retries_recoverable_errors() { + }) + .collect::>(); + outcomes.extend([ ++ ( ++ GuardianReviewOutcome::Error(GuardianReviewError::session_with_error_info( ++ anyhow::anyhow!("credit balance exhausted"), ++ CodexErrorInfo::CreditBalanceExhausted, ++ )), ++ false, ++ ), + (GuardianReviewOutcome::Completed(assessment), false), + ( + GuardianReviewOutcome::Error(GuardianReviewError::StaleAuthorization), diff --git a/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs b/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs -index 9b60a47..4058215 100644 +index 3b7b12c..7356d2d 100644 --- a/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs +++ b/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs -@@ -43,6 +43,7 @@ pub(super) fn sampler_failure_reason(error: &LunaSamplerError) -> &'static str { - ApiError::Stream(_) => "stream_error", +@@ -50,6 +50,7 @@ pub(super) fn sampler_failure_reason(error: &LunaSamplerError) -> &'static str { + ApiError::ResponseIncomplete(_) => "incomplete_response", ApiError::ContextWindowExceeded => "context_window_exceeded", ApiError::QuotaExceeded => "quota_exceeded", + ApiError::CreditBalanceExhausted => "credit_balance_exhausted", ApiError::UsageNotIncluded => "usage_not_included", ApiError::Retryable { .. } => "retryable_api_error", ApiError::RateLimitExceeded { .. } | ApiError::RateLimit(_) => "rate_limit", -diff --git a/codex-rs/ext/guardian-v2/src/async_scorer/sampler.rs b/codex-rs/ext/guardian-v2/src/async_scorer/sampler.rs -index 993e2d4..1f68eb6 100644 ---- a/codex-rs/ext/guardian-v2/src/async_scorer/sampler.rs -+++ b/codex-rs/ext/guardian-v2/src/async_scorer/sampler.rs -@@ -240,6 +240,7 @@ impl LunaSampler { - ApiError::Transport(TransportError::Build(_)) +diff --git a/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs b/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs +index 0fc65ad..85da41c 100644 +--- a/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs ++++ b/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs +@@ -184,6 +184,7 @@ impl SamplingExecution { | ApiError::ContextWindowExceeded + | ApiError::ResponseIncomplete(_) | ApiError::QuotaExceeded + | ApiError::CreditBalanceExhausted | ApiError::UsageNotIncluded | ApiError::RateLimit(_) | ApiError::InvalidRequest { .. } +diff --git a/codex-rs/protocol/src/codex_error_info.rs b/codex-rs/protocol/src/codex_error_info.rs +index 10928a4..a3bea0c 100644 +--- a/codex-rs/protocol/src/codex_error_info.rs ++++ b/codex-rs/protocol/src/codex_error_info.rs +@@ -20,6 +20,8 @@ enum CodexErrorInfoWire { + ContextWindowExceeded, + SessionBudgetExceeded, + UsageLimitExceeded, ++ CreditBalanceExhausted, ++ RequestTimeout, + RateLimitExceeded, + FlexUnavailable, + ServerOverloaded, diff --git a/codex-rs/protocol/src/error.rs b/codex-rs/protocol/src/error.rs -index be0192f..f0f8ea9 100644 +index 50c32e3..5c271f5 100644 --- a/codex-rs/protocol/src/error.rs +++ b/codex-rs/protocol/src/error.rs -@@ -147,6 +147,8 @@ pub enum CodexErrorDetails { +@@ -180,6 +180,8 @@ pub enum CodexErrorDetails { ConnectionFailed(ConnectionFailedError), #[error("Quota exceeded. Check your plan and billing details.")] QuotaExceeded, @@ -271,7 +389,7 @@ index be0192f..f0f8ea9 100644 #[error( "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus." )] -@@ -321,6 +323,7 @@ impl CodexErr { +@@ -359,6 +361,7 @@ impl CodexErr { Interrupted, ServerOverloaded, QuotaExceeded, @@ -279,15 +397,15 @@ index be0192f..f0f8ea9 100644 UsageNotIncluded, InternalServerError, InternalAgentDied, -@@ -377,6 +380,7 @@ impl CodexErr { +@@ -419,6 +422,7 @@ impl CodexErr { | CodexErrorDetails::Fatal(_) | CodexErrorDetails::UsageNotIncluded | CodexErrorDetails::QuotaExceeded + | CodexErrorDetails::CreditBalanceExhausted | CodexErrorDetails::InvalidImageRequest() | CodexErrorDetails::InvalidRequest(_) - | CodexErrorDetails::ToolCollision(_) -@@ -431,6 +435,7 @@ impl CodexErr { + | CodexErrorDetails::ResponseIncomplete(_) +@@ -491,6 +495,7 @@ impl CodexErr { pub fn to_codex_protocol_error(&self) -> CodexErrorInfo { match &self.details { CodexErrorDetails::ContextWindowExceeded => CodexErrorInfo::ContextWindowExceeded, @@ -295,7 +413,7 @@ index be0192f..f0f8ea9 100644 CodexErrorDetails::SessionBudgetExceeded => CodexErrorInfo::SessionBudgetExceeded, CodexErrorDetails::RateLimitExceeded(_) => CodexErrorInfo::RateLimitExceeded, CodexErrorDetails::UsageLimitReached(_) -@@ -452,6 +457,15 @@ impl CodexErr { +@@ -517,6 +522,15 @@ impl CodexErr { http_status_code: self.http_status_code_value(), } } @@ -312,33 +430,33 @@ index be0192f..f0f8ea9 100644 CodexErrorDetails::SessionConfiguredNotFirstEvent | CodexErrorDetails::InternalServerError diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs -index 66e4315..1eb4740 100644 +index dc5c2a3..95b7154 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs -@@ -1852,6 +1852,8 @@ pub enum CodexErrorInfo { +@@ -1971,6 +1971,8 @@ pub enum CodexErrorInfo { ContextWindowExceeded, SessionBudgetExceeded, UsageLimitExceeded, + CreditBalanceExhausted, + RequestTimeout, RateLimitExceeded, + FlexUnavailable, ServerOverloaded, - CyberPolicy, -@@ -1892,6 +1894,8 @@ impl CodexErrorInfo { +@@ -2016,6 +2018,8 @@ impl CodexErrorInfo { Self::ContextWindowExceeded | Self::SessionBudgetExceeded | Self::UsageLimitExceeded + | Self::CreditBalanceExhausted + | Self::RequestTimeout | Self::RateLimitExceeded + | Self::FlexUnavailable | Self::ServerOverloaded - | Self::CyberPolicy diff --git a/codex-rs/response-debug-context/src/lib.rs b/codex-rs/response-debug-context/src/lib.rs -index 42825a7..9fb0553 100644 +index 97f4024..5f07c4a 100644 --- a/codex-rs/response-debug-context/src/lib.rs +++ b/codex-rs/response-debug-context/src/lib.rs -@@ -78,6 +78,7 @@ pub fn telemetry_api_error_message(error: &ApiError) -> String { - ApiError::Stream(err) => err.to_string(), +@@ -81,6 +81,7 @@ pub fn telemetry_api_error_message(error: &ApiError) -> String { + ApiError::ResponseIncomplete(_) => "incomplete response".to_string(), ApiError::ContextWindowExceeded => "context window exceeded".to_string(), ApiError::QuotaExceeded => "quota exceeded".to_string(), + ApiError::CreditBalanceExhausted => "credit balance exhausted".to_string(), diff --git a/runtime/codex/artifact-policy.json b/runtime/codex/artifact-policy.json index f8768ba..1d0a59d 100644 --- a/runtime/codex/artifact-policy.json +++ b/runtime/codex/artifact-policy.json @@ -1,4 +1,4 @@ { - "sourceSha256": "19690d78c38c17fdc79f5d80b3fd04b7743e7c0763a58c4583b71d2662c1bb31", - "patchedTree": "a17024192873c259bd70268551db7bd581dc35cc" + "sourceSha256": "1f83d08f27b4cc62877281c65f5cb1c9c476b558cd7c188350406660ade92fc5", + "patchedTree": "c626245a178b390c75f0606586014fe7b1c6c7e6" } diff --git a/runtime/codex/chatgpt-service-tier.patch b/runtime/codex/chatgpt-service-tier.patch index 9ae01b6..6dbb774 100644 --- a/runtime/codex/chatgpt-service-tier.patch +++ b/runtime/codex/chatgpt-service-tier.patch @@ -1,10 +1,10 @@ diff --git a/codex-rs/core/src/client.rs b/codex-rs/core/src/client.rs -index a813022..aa95792 100644 +index a756599..30c71df 100644 --- a/codex-rs/core/src/client.rs +++ b/codex-rs/core/src/client.rs -@@ -183,6 +183,13 @@ pub(crate) struct CompactConversationRequestSettings { - pub(crate) service_tier: Option, - } +@@ -182,6 +182,13 @@ const MEMORIES_SUMMARIZE_ENDPOINT: &str = "/memories/trace_summarize"; + pub(crate) const WEBSOCKET_CONNECT_TIMEOUT: Duration = + Duration::from_millis(DEFAULT_WEBSOCKET_CONNECT_TIMEOUT_MS); +fn service_tier_for_auth(service_tier: Option, auth: Option<&CodexAuth>) -> Option { + service_tier.filter(|tier| { @@ -16,64 +16,47 @@ index a813022..aa95792 100644 fn session_telemetry_for_request( session_telemetry: &SessionTelemetry, request: &ResponsesApiRequest, -@@ -610,6 +617,7 @@ impl ModelClient { - settings.effort, - settings.summary, - settings.service_tier, -+ client_setup.auth.as_ref(), - responses_metadata, - )?; - let ResponsesApiRequest { -@@ -888,6 +896,7 @@ impl ModelClient { - } - } - -+ #[allow(clippy::too_many_arguments)] - fn build_responses_request( - &self, - prompt: &Prompt, -@@ -895,6 +904,7 @@ impl ModelClient { - effort: Option, - summary: ReasoningSummaryConfig, - service_tier: Option, -+ auth: Option<&CodexAuth>, - responses_metadata: &CodexResponsesMetadata, - ) -> Result { - let mut input = prompt.get_formatted_input_for_request(model_info.use_responses_lite); -@@ -974,7 +984,8 @@ impl ModelClient { - prompt.output_schema_strict, - ); - let prompt_cache_key = Some(self.prompt_cache_key(responses_metadata)); -- let service_tier = model_info.service_tier_for_request(service_tier); -+ let service_tier = -+ service_tier_for_auth(model_info.service_tier_for_request(service_tier), auth); - let request = ResponsesApiRequest { - model: model_info.slug.clone(), - instructions, -@@ -1612,6 +1623,7 @@ impl ModelClientSession { +@@ -1624,9 +1631,11 @@ impl ModelClientSession { + client_setup.auth.as_ref(), + &responses_headers, + &model_info.slug, +- model_info +- .service_tier_for_request(service_tier.clone()) +- .as_deref(), ++ service_tier_for_auth( ++ model_info.service_tier_for_request(service_tier.clone()), ++ client_setup.auth.as_ref(), ++ ) ++ .as_deref(), + ); + match self + .websocket_connection(WebsocketConnectParams { +@@ -1857,7 +1866,7 @@ impl ResponsesHttpExecutor<'_> { + model_info, effort.clone(), summary, - service_tier.clone(), -+ client_setup.auth.as_ref(), +- service_tier.clone(), ++ service_tier_for_auth(service_tier.clone(), client_setup.auth.as_ref()), responses_metadata, + include_internal, )?; - self.client.set_guardian_metadata( -@@ -1761,6 +1773,7 @@ impl ModelClientSession { +@@ -2033,7 +2042,7 @@ impl ModelClientSession { + model_info, effort.clone(), summary, - service_tier.clone(), -+ client_setup.auth.as_ref(), +- service_tier.clone(), ++ service_tier_for_auth(service_tier.clone(), client_setup.auth.as_ref()), responses_metadata, + include_internal, )?; - if endpoint == ResponsesEndpoint::Guardian { diff --git a/codex-rs/core/src/client_tests.rs b/codex-rs/core/src/client_tests.rs -index 348d169..97d4781 100644 +index f929e2c..2d6ab8a 100644 --- a/codex-rs/core/src/client_tests.rs +++ b/codex-rs/core/src/client_tests.rs -@@ -63,6 +63,11 @@ use codex_rollout_trace::RawTraceEventPayload; - use codex_rollout_trace::RolloutTrace; - use codex_rollout_trace::TraceWriter; - use codex_rollout_trace::replay_bundle; +@@ -75,6 +75,11 @@ use codex_rollout_trace::replay_bundle; + use codex_tools::JsonSchema; + use codex_tools::ResponsesApiTool; + use codex_tools::ToolSpec; +use core_test_support::responses::ev_completed; +use core_test_support::responses::ev_response_created; +use core_test_support::responses::mount_sse_sequence; @@ -82,18 +65,21 @@ index 348d169..97d4781 100644 use futures::StreamExt; use pretty_assertions::assert_eq; use serde_json::json; -@@ -306,6 +311,7 @@ fn responses_lite_prefix_ids_track_thread_and_payload() -> anyhow::Result<()> { - /*effort*/ None, - codex_protocol::config_types::ReasoningSummary::None, - /*service_tier*/ None, -+ /*auth*/ None, - &test_responses_metadata_for_client( - client, - /*turn_id*/ None, -@@ -366,6 +372,284 @@ fn test_session_telemetry() -> SessionTelemetry { - ) +@@ -1226,6 +1231,220 @@ fn websocket_continuation_reset_reason_survives_failed_reconnect_and_turn_bounda + } } ++fn external_chatgpt_service_tier_auth() -> CodexAuth { ++ let claims = json!({"https://api.openai.com/auth": {"chatgpt_user_id": "user-123"}}); ++ let payload = base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(claims.to_string()); ++ CodexAuth::from_external_chatgpt_tokens( ++ &format!("header.{payload}.signature"), ++ "account-123", ++ Some("pro"), ++ ) ++ .expect("test auth") ++} ++ +const REQUEST_SERVICE_TIERS: [Option<&str>; 8] = [ + None, + Some("priority"), @@ -135,12 +121,18 @@ index 348d169..97d4781 100644 + "test_originator".to_string(), + /*model_verbosity*/ None, + /*content_item_kinds_enabled*/ true, ++ /*reasoning_effort_override_enabled*/ false, + /*enable_request_compression*/ false, + /*include_timing_metrics*/ false, + /*beta_features_header*/ None, + /*concurrent_reasoning_summaries_enabled*/ false, ++ /*output_token_replay_enabled*/ false, + /*attestation_provider*/ None, + HttpClientFactory::new(OutboundProxyPolicy::ReqwestDefault), ++ codex_model_provider::WorkspaceRoutingContext::new( ++ "https://chatgpt.com/backend-api".into(), ++ ), ++ Vec::new(), + ) +} + @@ -149,6 +141,8 @@ index 348d169..97d4781 100644 + let mut prompt = Prompt::default(); + for (index, service_tier) in REQUEST_SERVICE_TIERS.into_iter().enumerate() { + prompt.input.push(ResponseItem::Message { ++ status: None, ++ encrypted_content: None, + id: None, + role: "user".to_string(), + content: vec![ContentItem::InputText { @@ -189,7 +183,7 @@ index 348d169..97d4781 100644 +} + +#[test_case::test_case(Some(CodexAuth::create_dummy_chatgpt_auth_for_testing()), CHATGPT_SERVICE_TIERS; "chatgpt")] -+#[test_case::test_case(Some(CodexAuth::from_external_chatgpt_tokens(TEST_CHATGPT_ID_TOKEN, "account-123", Some("pro")).expect("test auth")), CHATGPT_SERVICE_TIERS; "external_chatgpt")] ++#[test_case::test_case(Some(external_chatgpt_service_tier_auth()), CHATGPT_SERVICE_TIERS; "external_chatgpt")] +#[test_case::test_case(Some(CodexAuth::from_api_key("test-api-key")), REQUEST_SERVICE_TIERS; "api_key")] +#[test_case::test_case(None, REQUEST_SERVICE_TIERS; "provider_auth")] +#[tokio::test] @@ -229,7 +223,7 @@ index 348d169..97d4781 100644 +} + +#[test_case::test_case(Some(CodexAuth::create_dummy_chatgpt_auth_for_testing()), CHATGPT_SERVICE_TIERS; "chatgpt")] -+#[test_case::test_case(Some(CodexAuth::from_external_chatgpt_tokens(TEST_CHATGPT_ID_TOKEN, "account-123", Some("pro")).expect("test auth")), CHATGPT_SERVICE_TIERS; "external_chatgpt")] ++#[test_case::test_case(Some(external_chatgpt_service_tier_auth()), CHATGPT_SERVICE_TIERS; "external_chatgpt")] +#[test_case::test_case(Some(CodexAuth::from_api_key("test-api-key")), REQUEST_SERVICE_TIERS; "api_key")] +#[test_case::test_case(None, REQUEST_SERVICE_TIERS; "provider_auth")] +#[tokio::test] @@ -275,111 +269,20 @@ index 348d169..97d4781 100644 + Ok(()) +} + -+#[test_case::test_case(Some(CodexAuth::create_dummy_chatgpt_auth_for_testing()), CHATGPT_SERVICE_TIERS; "chatgpt")] -+#[test_case::test_case(Some(CodexAuth::from_api_key("test-api-key")), REQUEST_SERVICE_TIERS; "api_key")] -+#[tokio::test] -+async fn responses_service_tier_compact_uses_auth_contract( -+ auth: Option, -+ expected_tiers: [Option<&str>; 8], -+) -> anyhow::Result<()> { -+ let server = MockServer::start().await; -+ Mock::given(method("POST")) -+ .and(path("/v1/responses/compact")) -+ .respond_with(ResponseTemplate::new(/*status*/ 200).set_body_json(json!({ "output": [] }))) -+ .expect(/*requests*/ 8) -+ .mount(&server) -+ .await; -+ let client = service_tier_test_client( -+ format!("{}/v1", server.uri()), -+ auth, -+ /*supports_websockets*/ false, -+ ); -+ let prompt = Prompt { -+ input: vec![ResponseItem::Message { -+ id: None, -+ role: "user".to_string(), -+ content: vec![ContentItem::InputText { -+ text: "compact this".to_string(), -+ }], -+ phase: None, -+ internal_chat_message_metadata_passthrough: None, -+ }], -+ ..Default::default() -+ }; -+ for service_tier in REQUEST_SERVICE_TIERS { -+ client -+ .compact_conversation_history( -+ &prompt, -+ &test_model_info(), -+ /*turn_state*/ None, -+ CompactConversationRequestSettings { -+ effort: None, -+ summary: codex_protocol::config_types::ReasoningSummary::None, -+ service_tier: service_tier.map(str::to_string), -+ }, -+ &test_session_telemetry(), -+ &CompactionTraceContext::disabled(), -+ &test_responses_metadata_for_client( -+ &client, -+ /*turn_id*/ None, -+ format!("{}:0", client.state.thread_id), -+ /*parent_thread_id*/ None, -+ TestCodexResponsesRequestKind::Turn, -+ ), -+ ) -+ .await?; -+ } -+ let requests = server.received_requests().await.expect("compact requests"); -+ assert_eq!(requests.len(), expected_tiers.len()); -+ for (request, expected_tier) in requests.iter().zip(expected_tiers) { -+ let body: serde_json::Value = request.body_json()?; -+ assert_eq!( -+ body.get("service_tier"), -+ expected_tier.map(serde_json::Value::from).as_ref(), -+ ); -+ } -+ Ok(()) -+} -+ +#[test] -+fn responses_service_tier_preserves_bedrock_request_values() -> anyhow::Result<()> { -+ let client = test_model_client(SessionSource::Cli); ++fn service_tier_auth_filter_preserves_bedrock_request_values() { + let auth = CodexAuth::BedrockApiKey(codex_login::auth::BedrockApiKeyAuth { + api_key: "test-bedrock-key".to_string(), + region: "us-west-2".to_string(), + }); + for service_tier in REQUEST_SERVICE_TIERS { -+ let request = client.build_responses_request( -+ &Prompt::default(), -+ &test_model_info(), -+ /*effort*/ None, -+ codex_protocol::config_types::ReasoningSummary::None, -+ service_tier.map(str::to_string), -+ Some(&auth), -+ &test_responses_metadata_for_client( -+ &client, -+ /*turn_id*/ None, -+ format!("{}:0", client.state.thread_id), -+ /*parent_thread_id*/ None, -+ TestCodexResponsesRequestKind::Turn, -+ ), -+ )?; + assert_eq!( -+ serde_json::to_value(request)?.get("service_tier"), -+ service_tier.map(serde_json::Value::from).as_ref(), ++ super::service_tier_for_auth(service_tier.map(str::to_string), Some(&auth)), ++ service_tier.map(str::to_string), + ); + } -+ Ok(()) +} + fn spawned_session_source() -> SessionSource { SessionSource::SubAgent(SubAgentSource::ThreadSpawn { parent_thread_id: ThreadId::new(), -@@ -389,6 +673,7 @@ fn reasoning_effort_in_request( - Some(effort), - codex_protocol::config_types::ReasoningSummary::None, - /*service_tier*/ None, -+ /*auth*/ None, - &test_responses_metadata_for_client( - &client, - /*turn_id*/ None, diff --git a/runtime/codex/checkpoint-shutdown.patch b/runtime/codex/checkpoint-shutdown.patch index 4c220c7..a523607 100644 --- a/runtime/codex/checkpoint-shutdown.patch +++ b/runtime/codex/checkpoint-shutdown.patch @@ -1,27 +1,33 @@ diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs +index b183d6a..008d1f3 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs -@@ -820,6 +820,11 @@ - params: v2::ThreadLoadedListParams, +@@ -868,6 +868,11 @@ client_request_definitions! { serialization: None, response: v2::ThreadLoadedListResponse, -+ }, + }, + ThreadCheckpoint => "thread/checkpoint" { + params: v2::ThreadCheckpointParams, + serialization: thread_id(params.thread_id), + response: v2::ThreadCheckpointResponse, - }, ++ }, ThreadRead => "thread/read" { params: v2::ThreadReadParams, + serialization: thread_id(params.thread_id), diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs +index a7a7623..1fdd5a5 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs -@@ -1664,6 +1664,21 @@ - #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] - #[serde(rename_all = "camelCase")] - #[ts(export_to = "v2/")] +@@ -1705,6 +1705,23 @@ pub enum ThreadActiveFlag { + WaitingOnUserInput, + } + ++#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] ++#[serde(rename_all = "camelCase")] ++#[ts(export_to = "v2/")] +pub struct ThreadCheckpointParams { + pub thread_id: String, ++ pub expected_thread_ids: Vec, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] @@ -29,19 +35,18 @@ diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs b/codex-rs/a +#[ts(export_to = "v2/")] +pub struct ThreadCheckpointResponse { + pub thread_id: String, ++ pub thread_ids: Vec, + pub flushed: bool, +} + -+#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -+#[serde(rename_all = "camelCase")] -+#[ts(export_to = "v2/")] - pub struct ThreadReadParams { - pub thread_id: String, - /// When true, include turns and their items from rollout history. + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] + #[serde(rename_all = "camelCase")] + #[ts(export_to = "v2/")] diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs +index e1e5a7a..c84d6b2 100644 --- a/codex-rs/app-server/src/message_processor.rs +++ b/codex-rs/app-server/src/message_processor.rs -@@ -1359,6 +1359,9 @@ +@@ -1547,6 +1547,9 @@ impl MessageProcessor { ClientRequest::ThreadLoadedList { params, .. } => { self.thread_processor.thread_loaded_list(params).await } @@ -52,110 +57,342 @@ diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/ self.thread_processor.thread_read(&request_id, params).await } diff --git a/codex-rs/app-server/src/request_processors/thread_processor.rs b/codex-rs/app-server/src/request_processors/thread_processor.rs +index 4d104e2..9199094 100644 --- a/codex-rs/app-server/src/request_processors/thread_processor.rs +++ b/codex-rs/app-server/src/request_processors/thread_processor.rs -@@ -529,6 +529,22 @@ - ) - .await +@@ -560,6 +560,43 @@ impl ThreadRequestProcessor { .map(|()| None) -+ } -+ -+ /// Private host handoff primitive; callers must seal admission on every thread. + } + ++ /// Private host handoff primitive. The host must seal admission on every thread. + pub(crate) async fn thread_checkpoint( + &self, + params: codex_app_server_protocol::ThreadCheckpointParams, + ) -> Result, JSONRPCErrorError> { -+ let (_, thread) = self.load_thread(¶ms.thread_id).await?; -+ tokio::time::timeout(Duration::from_secs(30), thread.checkpoint_shutdown()) -+ .await -+ .map_err(|_| internal_error("checkpoint shutdown timed out"))? -+ .map_err(|_| internal_error("checkpoint shutdown was not durably acknowledged"))?; -+ Ok(Some(codex_app_server_protocol::ThreadCheckpointResponse { -+ thread_id: params.thread_id, -+ flushed: true, -+ }.into())) - } - ++ let root = ThreadId::from_string(¶ms.thread_id) ++ .map_err(|_| invalid_request("invalid checkpoint thread id"))?; ++ if params.expected_thread_ids.is_empty() || params.expected_thread_ids.len() > 1000 { ++ return Err(invalid_request( ++ "checkpoint requires 1 to 1000 expected threads", ++ )); ++ } ++ let expected = params ++ .expected_thread_ids ++ .iter() ++ .map(|id| { ++ ThreadId::from_string(id) ++ .map_err(|_| invalid_request("invalid expected checkpoint thread id")) ++ }) ++ .collect::, _>>()?; ++ let thread_ids = tokio::time::timeout( ++ Duration::from_secs(30), ++ self.thread_manager.checkpoint_idle_threads(root, expected), ++ ) ++ .await ++ .map_err(|_| internal_error("checkpoint shutdown timed out"))? ++ .map_err(|_| internal_error("checkpoint shutdown was not durably acknowledged"))?; ++ Ok(Some( ++ codex_app_server_protocol::ThreadCheckpointResponse { ++ thread_id: params.thread_id, ++ thread_ids: thread_ids.into_iter().map(|id| id.to_string()).collect(), ++ flushed: true, ++ } ++ .into(), ++ )) ++ } ++ pub(crate) async fn thread_unsubscribe( -diff --git a/codex-rs/core/src/session/session.rs b/codex-rs/core/src/session/session.rs ---- a/codex-rs/core/src/session/session.rs -+++ b/codex-rs/core/src/session/session.rs -@@ -41,6 +41,8 @@ - /// - /// A session has at most 1 running task at a time, and can be interrupted by user input. - pub(crate) struct Session { -+ /// Set only by successful persistence shutdown, before loop termination. -+ pub(crate) checkpoint_shutdown_succeeded: std::sync::atomic::AtomicBool, - pub(crate) thread_id: ThreadId, - pub(crate) installation_id: String, - pub(super) tx_event: Sender, -@@ -1501,6 +1503,7 @@ - }; - let (mcp_prewarm_tx, mcp_prewarm_rx) = async_channel::bounded(1); - let sess = Arc::new(Session { -+ checkpoint_shutdown_succeeded: std::sync::atomic::AtomicBool::new(false), - thread_id, - installation_id, - tx_event: tx_event.clone(), -diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs ---- a/codex-rs/core/src/session/tests.rs -+++ b/codex-rs/core/src/session/tests.rs -@@ -6575,6 +6575,7 @@ - }; + &self, + request_id: &ConnectionRequestId, +diff --git a/codex-rs/core/src/thread_manager/shutdown.rs b/codex-rs/core/src/thread_manager/shutdown.rs +index e622f41..088c650 100644 +--- a/codex-rs/core/src/thread_manager/shutdown.rs ++++ b/codex-rs/core/src/thread_manager/shutdown.rs +@@ -6,6 +6,8 @@ use codex_protocol::ThreadId; + use codex_protocol::error::CodexErr; + use codex_protocol::error::Result as CodexResult; + use codex_thread_store::ThreadStoreError; ++use std::collections::HashMap; ++use std::collections::HashSet; + use std::fmt; + use std::sync::Arc; + use uuid::Uuid; +@@ -129,6 +131,78 @@ impl AgentTreeShutdown { + } - let session = Session { -+ checkpoint_shutdown_succeeded: std::sync::atomic::AtomicBool::new(false), - thread_id, - installation_id: "11111111-1111-4111-8111-111111111111".to_string(), - tx_event, -@@ -8882,6 +8883,7 @@ - }; - - let session = Arc::new(Session { -+ checkpoint_shutdown_succeeded: std::sync::atomic::AtomicBool::new(false), - thread_id, - installation_id: "11111111-1111-4111-8111-111111111111".to_string(), - tx_event, -diff --git a/codex-rs/core/src/session/handlers.rs b/codex-rs/core/src/session/handlers.rs ---- a/codex-rs/core/src/session/handlers.rs -+++ b/codex-rs/core/src/session/handlers.rs -@@ -460,9 +460,14 @@ - - // Gracefully flush and shutdown thread persistence on session end so tests - // that inspect durable state do not race with the background writer. -- if let Some(live_thread) = sess.live_thread() -- && let Err(e) = live_thread.shutdown().await -- { -+ let checkpoint_shutdown_result = match sess.live_thread() { -+ Some(live_thread) => live_thread.shutdown().await, -+ None => Ok(()), -+ }; -+ sess.checkpoint_shutdown_succeeded.store( -+ sess.live_thread().is_some() && checkpoint_shutdown_result.is_ok(), std::sync::atomic::Ordering::Release, -+ ); -+ if let Err(e) = checkpoint_shutdown_result { - warn!("failed to shutdown thread persistence: {e}"); - let event = Event { - id: sub_id.clone(), -diff --git a/codex-rs/core/src/codex_thread.rs b/codex-rs/core/src/codex_thread.rs ---- a/codex-rs/core/src/codex_thread.rs -+++ b/codex-rs/core/src/codex_thread.rs -@@ -233,6 +233,18 @@ - &self.session.services.thread_extension_data - } - -+ /// A normal ShutdownComplete notification does not imply persistence succeeded. -+ pub async fn checkpoint_shutdown(&self) -> CodexResult<()> { -+ if self.session.active_turn.lock().await.is_some() || self.session.live_thread().is_none() { -+ return Err(CodexErr::UnsupportedOperation("checkpoint requires an idle durable thread".to_string())); + impl ThreadManager { ++ /// Checkpoints the exact visible set after host-side admission has been sealed. ++ /// Upstream tree shutdown accounts for internal sessions and admitted startup work. ++ pub async fn checkpoint_idle_threads( ++ &self, ++ root: ThreadId, ++ expected: Vec, ++ ) -> CodexResult> { ++ let expected_set: HashSet<_> = expected.iter().copied().collect(); ++ if expected.is_empty() ++ || expected.len() > 1000 ++ || expected_set.len() != expected.len() ++ || !expected_set.contains(&root) ++ { ++ return Err(CodexErr::InvalidRequest( ++ "checkpoint requires a unique bounded thread set containing the root".to_owned(), ++ )); ++ } ++ let captured: HashMap<_, _> = self ++ .state ++ .threads ++ .read() ++ .await ++ .iter() ++ .filter(|(_, thread)| !thread.session_source.is_internal()) ++ .map(|(id, thread)| (*id, Arc::clone(thread))) ++ .collect(); ++ if captured.len() != expected_set.len() ++ || captured.keys().any(|id| !expected_set.contains(id)) ++ { ++ return Err(CodexErr::InvalidRequest( ++ "checkpoint thread set does not match loaded threads".to_owned(), ++ )); ++ } ++ for thread in captured.values() { ++ if thread.session.active_turn.lock().await.is_some() ++ || thread.session.live_thread().is_none() ++ { ++ return Err(CodexErr::InvalidRequest( ++ "checkpoint requires idle durable threads".to_owned(), ++ )); ++ } ++ } ++ // Retain exact lifetimes because tree shutdown can remove a child from the registry. ++ let shutdowns: Vec<_> = captured ++ .values() ++ .map(|thread| AgentTreeShutdown { ++ state: thread ++ .session ++ .services ++ .local_agent_runtime ++ .request_shutdown(), ++ }) ++ .collect(); ++ for shutdown in shutdowns { ++ shutdown.wait_detailed().await.map_err(|_| { ++ CodexErr::Fatal("checkpoint persistence shutdown failed".to_owned()) ++ })?; + } -+ self.shutdown_and_wait().await?; -+ if !self.session.checkpoint_shutdown_succeeded.load(std::sync::atomic::Ordering::Acquire) { -+ return Err(CodexErr::Fatal("checkpoint persistence shutdown failed".to_string())); ++ let loaded = self.state.threads.read().await; ++ if loaded.iter().any(|(id, thread)| { ++ !thread.session_source.is_internal() ++ && !captured ++ .get(id) ++ .is_some_and(|before| Arc::ptr_eq(before, thread)) ++ }) { ++ return Err(CodexErr::InvalidRequest( ++ "checkpoint thread set changed during shutdown".to_owned(), ++ )); + } -+ Ok(()) ++ Ok(expected) + } + - pub async fn shutdown_and_wait(&self) -> CodexResult<()> { - self.io.shutdown_and_wait().await - } + /// Unloads this exact idle MAv2 child using the manager's local controller backend, + /// preserving mail and environments for reloading. Host controllers own their eviction + /// and recovery; managers configured with a host controller factory are rejected. +diff --git a/codex-rs/core/tests/suite/agent_execution.rs b/codex-rs/core/tests/suite/agent_execution.rs +index cf80fc3..03117df 100644 +--- a/codex-rs/core/tests/suite/agent_execution.rs ++++ b/codex-rs/core/tests/suite/agent_execution.rs +@@ -978,5 +978,195 @@ async fn tree_shutdown_reports_persistence_writer_failure() -> Result<()> { + Ok(()) + } + ++#[tokio::test] ++async fn checkpoint_idle_threads_waits_for_all_roots_children_and_internal_sessions() -> Result<()> ++{ ++ use codex_core::StartThreadOptions; ++ use codex_protocol::protocol::InternalSessionSource; ++ use codex_protocol::protocol::SessionSource; ++ ++ let server = start_mock_server().await; ++ mount_root_collaboration_call( ++ &server, ++ FIRST_PROMPT, ++ "first-call", ++ "spawn_agent", ++ json!({"message": FIRST_TASK, "task_name": "first", "fork_turns": "none"}), ++ ) ++ .await; ++ mount_completed_worker(&server, FIRST_TASK, "first-call").await; ++ let test = test_codex() ++ .with_model("gpt-5.6-sol") ++ .with_config(|config| { ++ config.features.enable(Feature::Collab).unwrap(); ++ config.features.enable(Feature::MultiAgentV2).unwrap(); ++ }) ++ .build_with_auto_env(&server) ++ .await?; ++ test.submit_turn(FIRST_PROMPT).await?; ++ let root = test.session_configured.thread_id; ++ let worker_id = test ++ .thread_manager ++ .list_thread_ids() ++ .await ++ .into_iter() ++ .find(|id| *id != root) ++ .expect("spawned worker"); ++ let worker = test.thread_manager.get_thread(worker_id).await?; ++ wait_for_event(&worker, |event| matches!(event, EventMsg::TurnComplete(_))).await; ++ let internal = test ++ .thread_manager ++ .spawn_internal_session( ++ root, ++ StartThreadOptions { ++ session_source: Some(SessionSource::Internal(InternalSessionSource::Guardian)), ++ ..StartThreadOptions::new(test.config.clone()) ++ }, ++ ) ++ .await?; ++ let other = test ++ .thread_manager ++ .start_thread(test.start_thread_options().await) ++ .await?; ++ let expected = vec![root, worker_id, other.thread_id]; ++ let result = tokio::time::timeout( ++ Duration::from_secs(10), ++ test.thread_manager ++ .checkpoint_idle_threads(root, expected.clone()), ++ ) ++ .await??; ++ assert_eq!(result, expected); ++ for thread in [&test.codex, &worker, &internal.thread, &other.thread] { ++ assert!(thread.wait_until_terminated().now_or_never().is_some()); ++ } ++ Ok(()) ++} ++ ++#[tokio::test] ++async fn checkpoint_idle_threads_rejects_invalid_expected_sets_without_stopping_threads() ++-> Result<()> { ++ use codex_protocol::ThreadId; ++ ++ let server = start_mock_server().await; ++ let test = test_codex().build_with_auto_env(&server).await?; ++ let root = test.session_configured.thread_id; ++ let other = test ++ .thread_manager ++ .start_thread(test.start_thread_options().await) ++ .await?; ++ let cases = vec![ ++ vec![], ++ vec![root, root, other.thread_id], ++ vec![other.thread_id], ++ vec![root], ++ vec![root, other.thread_id, ThreadId::new()], ++ std::iter::once(root) ++ .chain((0..1000).map(|_| ThreadId::new())) ++ .collect(), ++ ]; ++ for expected in cases { ++ test.thread_manager ++ .checkpoint_idle_threads(root, expected) ++ .await ++ .expect_err("invalid expected set must fail"); ++ assert!(test.codex.wait_until_terminated().now_or_never().is_none()); ++ assert!( ++ other ++ .thread ++ .wait_until_terminated() ++ .now_or_never() ++ .is_none() ++ ); ++ } ++ tokio::time::timeout( ++ Duration::from_secs(10), ++ test.thread_manager ++ .checkpoint_idle_threads(root, vec![root, other.thread_id]), ++ ) ++ .await??; ++ Ok(()) ++} ++ ++#[tokio::test] ++async fn checkpoint_idle_threads_rejects_busy_child_before_stopping_any_thread() -> Result<()> { ++ use core_test_support::responses::mount_response_once_match; ++ use wiremock::ResponseTemplate; ++ ++ let server = start_mock_server().await; ++ mount_root_collaboration_call( ++ &server, ++ FIRST_PROMPT, ++ "first-call", ++ "spawn_agent", ++ json!({"message": FIRST_TASK, "task_name": "first", "fork_turns": "none"}), ++ ) ++ .await; ++ mount_response_once_match( ++ &server, ++ |request: &wiremock::Request| { ++ body_contains(request, FIRST_TASK) && !has_function_call_output(request, "first-call") ++ }, ++ ResponseTemplate::new(200) ++ .insert_header("content-type", "text/event-stream") ++ .set_body_string(sse(vec![ ++ ev_response_created("busy-worker"), ++ ev_completed("busy-worker"), ++ ])) ++ .set_delay(Duration::from_secs(60)), ++ ) ++ .await; ++ let test = test_codex() ++ .with_model("gpt-5.6-sol") ++ .with_config(|config| { ++ config.features.enable(Feature::Collab).unwrap(); ++ config.features.enable(Feature::MultiAgentV2).unwrap(); ++ }) ++ .build_with_auto_env(&server) ++ .await?; ++ test.submit_turn(FIRST_PROMPT).await?; ++ let root = test.session_configured.thread_id; ++ let worker_id = test ++ .thread_manager ++ .list_thread_ids() ++ .await ++ .into_iter() ++ .find(|id| *id != root) ++ .expect("spawned worker"); ++ let worker = test.thread_manager.get_thread(worker_id).await?; ++ wait_for_event(&worker, |event| matches!(event, EventMsg::TurnStarted(_))).await; ++ test.thread_manager ++ .checkpoint_idle_threads(root, vec![root, worker_id]) ++ .await ++ .expect_err("busy child must prevent checkpoint"); ++ assert!(test.codex.wait_until_terminated().now_or_never().is_none()); ++ assert!(worker.wait_until_terminated().now_or_never().is_none()); ++ let shutdown = test ++ .thread_manager ++ .request_agent_tree_shutdown(root) ++ .await?; ++ tokio::time::timeout(Duration::from_secs(10), shutdown.wait_detailed()).await??; ++ Ok(()) ++} ++ ++#[tokio::test] ++async fn checkpoint_idle_threads_propagates_real_persistence_writer_failure() -> Result<()> { ++ let server = start_mock_server().await; ++ let test = test_codex().build_with_auto_env(&server).await?; ++ let root = test.session_configured.thread_id; ++ test.thread_store.shutdown_thread(root).await?; ++ let error = tokio::time::timeout( ++ Duration::from_secs(10), ++ test.thread_manager ++ .checkpoint_idle_threads(root, vec![root]), ++ ) ++ .await? ++ .expect_err("failed persistence writer must prevent checkpoint acknowledgment"); ++ assert!( ++ matches!(error.details(), codex_protocol::error::CodexErrorDetails::Fatal(message) ++ if message == "checkpoint persistence shutdown failed") ++ ); ++ Ok(()) ++} ++ + #[path = "agent_mailbox.rs"] + mod agent_mailbox; diff --git a/runtime/codex/companion-packages.json b/runtime/codex/companion-packages.json index 3a6c774..991e9ed 100644 --- a/runtime/codex/companion-packages.json +++ b/runtime/codex/companion-packages.json @@ -1,12 +1,12 @@ { "@openai/codex-darwin-arm64": { "name": "@openai/codex", - "version": "0.154.0-darwin-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-darwin-arm64.tgz", - "integrity": "sha512-HP/vJCH/t2hB9Kg6hotN9UglClJ6/z584fal5lEP14C9gNAgAQS4/kTQC7l5V+BA3TqwDPwINSjul28cX8AYXg==", + "version": "0.164.0-darwin-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-darwin-arm64.tgz", + "integrity": "sha512-pDizgOUAtq3/k3AbUFHbaU19WpYKCja+oFpNSTLKrDQj4lTUNSDuTPJip4uQVn2/1EipQdpQrGMOQBVuI1znAA==", "descriptor": { "layoutVersion": 1, - "version": "0.154.0", + "version": "0.164.0", "target": "aarch64-apple-darwin", "variant": "codex", "entrypoint": "bin/codex", @@ -16,39 +16,219 @@ "files": [ { "path": "bin/codex", - "sha256": "4f85982624b3898c8991cb80c0981b2aa71070e3537046c9a95950318a95afcc", + "sha256": "d8990e3ee7acfbc26f91265b12a1a83f0fee40d0e0f8f1f40a37d4ec21f499cf", "executable": true }, { "path": "bin/codex-code-mode-host", - "sha256": "426d73aaeb2aeef45e98b5add99e8ef9594a31673d281489bb2cb06b38c27423", + "sha256": "416721e33af8822041dc650793512b3e58d43e0be4f3a5c6187eb4dfaad3148a", "executable": true }, { "path": "codex-package.json", - "sha256": "6bace96c38debc466a94cd71d48464df1b1dc27a4ac75d8cebbcb2b6a3a6540c", + "sha256": "c77eb3abe21da837655153670c53ccbb89c26995ba3ccad2b72204b4670e1ad8", "executable": false }, { "path": "codex-path/rg", - "sha256": "6bbb665c5a40785e74c7ccf1c2e606efa7e70b09540c1e00787c3f88827e668d", + "sha256": "fd819df955fce19b2ee89c89c94e19a16127481de1ab0e5099add82cdfdc96a0", "executable": true }, { - "path": "codex-resources/zsh/bin/zsh", - "sha256": "25649b16e12a7b1b26686a9553d8a141866ee445319fddb5263d57784f0fd10b", + "path": "codex-resources/voice/bin/codex-voice-host", + "sha256": "ecfcf05fe021c5ad2e1c1e3975cf884eecbb90ad1a32e25fa7f216d6f178e437", "executable": true + }, + { + "path": "codex-resources/voice/lib/libffi.8.dylib", + "sha256": "76a199d09fc77a42b59317185f1e42b1ec0f5f288e8ff367d68a893318d5f036", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgio-2.0.0.dylib", + "sha256": "e48f50ccb00d78ec1f8b422e0fff69ec1751ed34a147662a70bd638ed617fb1a", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libglib-2.0.0.dylib", + "sha256": "47d1519d17e11f220d79d29a4926008433286a98ef92c6503902917d370f3bbd", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgmodule-2.0.0.dylib", + "sha256": "7b63fe175daa2aaafe131cae60851c5a8c71b209617ced0d2d4f273b73c8860b", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgobject-2.0.0.dylib", + "sha256": "444d41be63bb6593914ad2e73a127cc4dc8ad4907bd5c1c5e6e9657a02b4ed38", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstapp-1.0.0.dylib", + "sha256": "1fb42be568a30d07d4f54cbfdb9f64b3b906b68f5e7e536edd159ad7a1ed2541", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstaudio-1.0.0.dylib", + "sha256": "d4a48c604ac793f6dbc3afdc68c61d1c1144b9c35720f440669cc7be39758792", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstbase-1.0.0.dylib", + "sha256": "50715fac0c1ee1168a58b8191867977001831a8cd1b2ffc4d40064e92d7ec357", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstnet-1.0.0.dylib", + "sha256": "efb57393d18a236202b3e2a4f4326f0761c4e9da678d1fb2cefb62a953efd5db", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstpbutils-1.0.0.dylib", + "sha256": "adb620bdc2190a157e2e5f765a703640a73c498fb081d83629acc76f840d2011", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstreamer-1.0.0.dylib", + "sha256": "a1b30c536ced0265b3a8da01c6e79366c4f81f84367497ee03fd09a9efb711ad", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstrtp-1.0.0.dylib", + "sha256": "04e3e4ae32e9f31112de4e0f0be4a7562aef7b9a8447e8c2ac0c40f2f4833d27", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgsttag-1.0.0.dylib", + "sha256": "c451148da91f64d149d9993e98f7ca8a1a338ed0545fa80a559201aede82ca3d", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstvideo-1.0.0.dylib", + "sha256": "597ee1f7cd55013b2d42d8d049d09fdffe64d85ee5e0907596fe1752d0f08122", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libintl.8.dylib", + "sha256": "cdbc95ae3e8350047bc8b7510761b4a70285afe2a6924aa912109f93a9a12629", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libopus.0.dylib", + "sha256": "951c20cc9df5e242bd386e1145dbc755d61fc23619848166c63c1ec1e03a91b5", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libpcre2-8.0.dylib", + "sha256": "944fa068df87698d23452b6a590de741012897b54419cd785bcbd2c1bf3d5409", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libz.1.dylib", + "sha256": "73a57393eaea45753dcc60a130122dfdd10b981be65e98b216af1d0a7eb652a4", + "executable": true + }, + { + "path": "codex-resources/voice/licenses/LGPL-2.1.txt", + "sha256": "ad2eec519ebd4b5df86ea84dff24ae3bfa2edea846a703b58902dd221ae375db", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/libffi.txt", + "sha256": "17b64dc60f3b6897a60f971e288b973f655c2edcdf08b25f3c3dd5549857881c", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/Opus.txt", + "sha256": "01e1167d54a096d123cf6dfbbeb19587278845c6481d2d66d545669846079551", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/PCRE2.md", + "sha256": "197d8a73ffee0d6b09adba2f9c677b5f5aede24edf89258a68e48248d010d811", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/proxy-libintl.txt", + "sha256": "d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/sljit.txt", + "sha256": "5f216505c0f6ea3273caec89e766eef93cdeb7bbb0c429f9360116d7c938feeb", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/zlib.txt", + "sha256": "e32ff4e00d9d94930537635291da39e7e612703334bf6fde8c7f1686fe8a45a2", + "executable": false + }, + { + "path": "codex-resources/voice/manifest.json", + "sha256": "d6663e9c89b260f2936501e5822495081fb66c9eb629386a9fed0aef17b977fb", + "executable": false + }, + { + "path": "codex-resources/voice/NOTICE.md", + "sha256": "40097a1799441051aa0b6645cdc819cceb19be73cdd265eb602aa2b15e0b1f48", + "executable": false + }, + { + "path": "codex-resources/voice/plugins/libgstapp.dylib", + "sha256": "681e43dbe55976e63ee4931e532e45be48215ff7bcacf4b1f50cffae4c9954b4", + "executable": true + }, + { + "path": "codex-resources/voice/plugins/libgstaudioconvert.dylib", + "sha256": "ac1060be8fab2d9859fd06f960463ffdefc0b4a0e0e5a4ad288704d9fc447816", + "executable": true + }, + { + "path": "codex-resources/voice/plugins/libgstaudioresample.dylib", + "sha256": "af908e7efbb6bc41ccd0b1f79285321436a09ea856b63dcea361f577b8efaf5f", + "executable": true + }, + { + "path": "codex-resources/voice/plugins/libgstcoreelements.dylib", + "sha256": "9c95059f3fcc08ea94f11aa6dfdd9feaa839e1d7e324413b36f58e57c2689be0", + "executable": true + }, + { + "path": "codex-resources/voice/plugins/libgstopus.dylib", + "sha256": "0bbd4c12369394322edbfec44bcc6e6b3c6833699b98f40bbfa614dad11e66a7", + "executable": true + }, + { + "path": "codex-resources/voice/plugins/libgstrtp.dylib", + "sha256": "79a6612d349973ee87cd33e278db37d85ca7355d1dc8b8248c3c7fd591f0fbd7", + "executable": true + }, + { + "path": "codex-resources/voice/plugins/libgstrtpmanager.dylib", + "sha256": "828a6ab627e1cb4ea4a87ba1c9b8d2a5872d8d3990672df8523e4d946b69cf8a", + "executable": true + }, + { + "path": "codex-resources/voice/runtime.json", + "sha256": "8ed3dddbd77cc253897240234a756823d94e936921424eb098c9e1b549da9d95", + "executable": false + }, + { + "path": "codex-resources/voice/sources.json", + "sha256": "e2f6b124f6277e7c3c4f5c7cc8830c66190f671ad65e972bb2cc9507dbfcb937", + "executable": false } ] }, "@openai/codex-linux-arm64": { "name": "@openai/codex", - "version": "0.154.0-linux-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-linux-arm64.tgz", - "integrity": "sha512-KmTCB6ST484zeYlPpKP/K5P/gRaYmt6TihVD+zotoe6O9q0JSBP+FYvCz4A/zZXR7xDOHURTSjHp0sD8wWS0YQ==", + "version": "0.164.0-linux-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-linux-arm64.tgz", + "integrity": "sha512-LL5iTQjyDL4YRX44EWqhIfEQ5uGnmgxkQBJSxjZSeJ8L1Og83pdlzUJW/PRJ76oaVwOVgh6HXwuPEiBNEHU4lg==", "descriptor": { "layoutVersion": 1, - "version": "0.154.0", + "version": "0.164.0", "target": "aarch64-unknown-linux-musl", "variant": "codex", "entrypoint": "bin/codex", @@ -58,17 +238,17 @@ "files": [ { "path": "bin/codex", - "sha256": "9b7c1c7abdc26fc3c4f47c77656a8e9121def5483dbae830ef1ee561758448a9", + "sha256": "8813c8d8a4cea2eeba271b72ab22f49628b184b24ab18dbef06b4ce41e9a8d39", "executable": true }, { "path": "bin/codex-code-mode-host", - "sha256": "f31e1c5ffbbca7884aff2f0f8795d3da197f4aafb114033a399dfc17a5119031", + "sha256": "7d28b996b825b13ea058af67655b619a26a125d61d4fb2985694a9c4e77d2e21", "executable": true }, { "path": "codex-package.json", - "sha256": "abfae2ff248420c32f531f3ba0cb83ea27bb9ba9355872658b591e1939a60288", + "sha256": "28dd4b4e31da1d3caaca29fade8f7e5fe1da8d8cfc1c0bfe266bc9f341c57570", "executable": false }, { @@ -78,24 +258,209 @@ }, { "path": "codex-resources/bwrap", - "sha256": "58bd88f39d02a0b5ac553c2f334edfff1ec74afb9b8f4233dfc5b69225038f92", + "sha256": "0d784834f1674ff02aee25b42f2cbcfd27c5305863806cd6475d0eac8e33c378", + "executable": true + }, + { + "path": "codex-resources/voice/bin/codex-voice-host", + "sha256": "c70476f0eb59854c0b5b73d8ade1d27bd274dfae906102351167c21fd3d9d2cc", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstapp.so", + "sha256": "77560791fa89d709d02fb8241b88834e826cf0fa74f00098867552abb931e703", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstaudioconvert.so", + "sha256": "533c3ec676b04e6401658c628acf6e2ff80d44b3107e9befac4fc0e30b9331a1", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstaudioresample.so", + "sha256": "08ef8eb4bd1eebffc54ec80a1419f89cb58f32728fa48cb455b5f2553fbdd16a", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstcoreelements.so", + "sha256": "ebdc736002ff6b337c1bd1cd0daa6e8ba1c63bbd2425bda0c2601842ab54fff0", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstopus.so", + "sha256": "a6097568f03071c28bed85bc027386fa6d84b2b85f732805b9c5b8bf266157d7", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstrtp.so", + "sha256": "b817af549089771f622a9369aa7b360969be3d06c32e07d24842c162098782cf", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstrtpmanager.so", + "sha256": "0c0ee9409a88161ee5d4c52570c08fdd68995e0fa1cbbd5e2c627ad9efa50838", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libffi.so.8", + "sha256": "aa8da05db63784a05495256b92092d5cd0ce2d1babcaa59f730a7a3042350cb9", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgio-2.0.so.0", + "sha256": "f38f93d562656bc166cf8716d23dde05c40fe6068350f8d686e51052e470aab8", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libglib-2.0.so.0", + "sha256": "e47a6825d63dc4ce7078103830b61640922869562510c7c1a9db6af44a053ee9", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgmodule-2.0.so.0", + "sha256": "1aae3a9a1471cbb51d6b13feda0c8e4de98afaf920c3535f4e74cc090b0176d2", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgobject-2.0.so.0", + "sha256": "96b78d19cdf1737f03873ef73b5528e81e322b5dc02223ca1e5d38801ac8fcb5", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstallocators-1.0.so.0", + "sha256": "b5778d8c9d416151161785c2b82045bf08cc1d85d8cea88854ae2167fcf8aa54", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstapp-1.0.so.0", + "sha256": "67ce511205f0e0cad6e83fc328c64eaa35ea98e0d5f378395f8489eaf128b856", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstaudio-1.0.so.0", + "sha256": "df250bd1d07a2b023f365a270707486d5f00e851ffdd6347249ea0415e3aebe7", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstbase-1.0.so.0", + "sha256": "29b6dd83ee18d01cdf33e4cef589fa901aa612b16987a732bcbbb22a9fd86358", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstnet-1.0.so.0", + "sha256": "1e30dd69b436b10092cd5b2d854b557db73d886354b00750a37b1f6b9db2aa9f", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstpbutils-1.0.so.0", + "sha256": "d62afad3c9066c5a2d44ff907c07afae830bdd7d4e1d717f0d7575f7518f52dd", "executable": true }, { - "path": "codex-resources/zsh/bin/zsh", - "sha256": "7feeacd883e1dc749847936948c378653c80a69ec4a9542f0f126b411882c179", + "path": "codex-resources/voice/lib/libgstreamer-1.0.so.0", + "sha256": "18075362dfe989e31979deb6e1d54db740e6c78fca1a0b964ab9a3eb6f48a38d", "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstrtp-1.0.so.0", + "sha256": "5202ffd864930bc0c5e87457e9c8d71c9269deed3877d4da52cf0048f2d78a49", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgsttag-1.0.so.0", + "sha256": "73bb88bcc76a7c57a31066c16b3d0b1590105b278117242820da5399e5cbde02", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstvideo-1.0.so.0", + "sha256": "f4a7e532adcf5bf0527057408c71553ea3b4090f84b45bd896b0dc2c2f55ccca", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libintl.so.8", + "sha256": "d244097a6dd6d84cfdc76807bb8b084528dfc0b5bedca18f0ddb54904cd45329", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libopus.so.0", + "sha256": "7426975e16d5109831b4f88ea0681c251e332ed188e3b483d799fa285b538e25", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libpcre2-8.so.0", + "sha256": "ed12ebb1003748d284f98c4f90f060a80e25f085b0251c8d8ebcc7fa8ba58f35", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libz.so.1", + "sha256": "284a7e1475cccabdda7fb91d9917a95a1abfbe73688033acc7ac27241d97ceca", + "executable": true + }, + { + "path": "codex-resources/voice/licenses/LGPL-2.1.txt", + "sha256": "ad2eec519ebd4b5df86ea84dff24ae3bfa2edea846a703b58902dd221ae375db", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/libffi.txt", + "sha256": "17b64dc60f3b6897a60f971e288b973f655c2edcdf08b25f3c3dd5549857881c", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/Opus.txt", + "sha256": "01e1167d54a096d123cf6dfbbeb19587278845c6481d2d66d545669846079551", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/PCRE2.md", + "sha256": "197d8a73ffee0d6b09adba2f9c677b5f5aede24edf89258a68e48248d010d811", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/proxy-libintl.txt", + "sha256": "d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/sljit.txt", + "sha256": "5f216505c0f6ea3273caec89e766eef93cdeb7bbb0c429f9360116d7c938feeb", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/zlib.txt", + "sha256": "e32ff4e00d9d94930537635291da39e7e612703334bf6fde8c7f1686fe8a45a2", + "executable": false + }, + { + "path": "codex-resources/voice/manifest.json", + "sha256": "ee01011027ad58abae1bc88b47cefb91fed468ea4f8b042bef1b1ecaf4c65fef", + "executable": false + }, + { + "path": "codex-resources/voice/NOTICE.md", + "sha256": "40097a1799441051aa0b6645cdc819cceb19be73cdd265eb602aa2b15e0b1f48", + "executable": false + }, + { + "path": "codex-resources/voice/runtime.json", + "sha256": "6230eac46f615633854f4705efdb1ca1667a64c58bdf28a7cff8aea5fef87338", + "executable": false + }, + { + "path": "codex-resources/voice/sources.json", + "sha256": "e2f6b124f6277e7c3c4f5c7cc8830c66190f671ad65e972bb2cc9507dbfcb937", + "executable": false } ] }, "@openai/codex-linux-x64": { "name": "@openai/codex", - "version": "0.154.0-linux-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.154.0-linux-x64.tgz", - "integrity": "sha512-a4FI3A8sGtwGrOqltrPbrS2hajrHQG591EwmRfiRoLMb10VxdBtUGW4gu6IJVYENiYGA7k3P4jlRHEoCZU/s9Q==", + "version": "0.164.0-linux-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-linux-x64.tgz", + "integrity": "sha512-XLAoaWsGOT2khzl+P4FYDPTkzAr9W0VFXFaVkqlFdkM0soa1gH/4S0wSD57Ek3HHwkirAEGz2/Mwehseh+l5Mg==", "descriptor": { "layoutVersion": 1, - "version": "0.154.0", + "version": "0.164.0", "target": "x86_64-unknown-linux-musl", "variant": "codex", "entrypoint": "bin/codex", @@ -105,17 +470,17 @@ "files": [ { "path": "bin/codex", - "sha256": "3188814c35471432d4123203e0eb38e5bddc60226e3d7ddf0e59e649ea140022", + "sha256": "b93f6811d3f653f0fb83be4050d857fb9abbb111dfa2ce160563327daff7f306", "executable": true }, { "path": "bin/codex-code-mode-host", - "sha256": "0c57be435e73b70d9106c850d751cd259a7f04da958a453d7ef59090d82b70f1", + "sha256": "8ee4f472e92ac226a189e98998633b2d07f989f208515750764db660369f2926", "executable": true }, { "path": "codex-package.json", - "sha256": "b039964d28d57b2a7e929ee9986303582501c7cc9787f6c018b6d3c7b35c87d7", + "sha256": "328cc6b7d776fed066a3b475766ec01bd8b8f31d91e4955a5588f37ff9ddb51b", "executable": false }, { @@ -125,13 +490,198 @@ }, { "path": "codex-resources/bwrap", - "sha256": "01fb705f067bd5365b63d8ad2323a61c8d007733ca5e649437e086f3fb9935d8", + "sha256": "3a81c19ad10a70436529c58e77898e2a447abe80167f813fc20ec34bd9eafdeb", + "executable": true + }, + { + "path": "codex-resources/voice/bin/codex-voice-host", + "sha256": "a374997203c3aae9b6a8dd05f355256b4066f045ac271fb8dc8c52769bdbda8a", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstapp.so", + "sha256": "0e43aee9255c9d938df41ff6af1cf65d119aacf78ca1427616cf69623df9ee0c", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstaudioconvert.so", + "sha256": "482ec6d32a496f6322682cc0b119bd0af82ea31a0f3026dd07c9a9917346d2f6", "executable": true }, { - "path": "codex-resources/zsh/bin/zsh", - "sha256": "67faaaa89242c4a332e16e508a1977cffc24bf7fca31d4411cdfd101f3831ef3", + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstaudioresample.so", + "sha256": "e9abcc301e817a81b6f01fba3d8701a8767a23090603b5f3baa0357837f2346f", "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstcoreelements.so", + "sha256": "951d7579c56ebeef6b3db85914ef1001e6a466ed54b443b194eeec997d159c71", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstopus.so", + "sha256": "fd01916d777e4c0b82e7baee5a9ee8493f04b25194d59a7084cab1bb554169a8", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstrtp.so", + "sha256": "392684a4895d869399a255cba729ec0075f1849abe3b1fc9b1f56af5ba32a2cc", + "executable": true + }, + { + "path": "codex-resources/voice/lib/gstreamer-1.0/libgstrtpmanager.so", + "sha256": "07117be91f9fa2e449386fcedafe757f34436029b86843ddf92a72a088f8242f", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libffi.so.8", + "sha256": "bdec19c4e46b8fbf1c3e0b39f7b3fad933b77b43e2c37631157c97950fd2b174", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgio-2.0.so.0", + "sha256": "21cf9737aa0b78e176723112f419115aa0433f97cb13465b6e2c0a41faf8853c", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libglib-2.0.so.0", + "sha256": "f45fc3cabf7b363fd4b77d81914921ff838fd023a9ee4058a5e91bfde46d5406", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgmodule-2.0.so.0", + "sha256": "e30d348e2497900e44a43261976921afcb023bb0a326aaea9733c6a87512bd6b", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgobject-2.0.so.0", + "sha256": "f6d4f8f6d95c0e10e0b07baf265e5b53f35fe5c2840b341efe4122662c38651f", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstallocators-1.0.so.0", + "sha256": "9ea81406081c9d069915da4e4b7b3fd65f9294e94ae9d291956258abe17f4e6d", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstapp-1.0.so.0", + "sha256": "681f3f137cb194bdffa6a8d314dbe72002dbd6c3f72d26bffa4d97013648d94e", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstaudio-1.0.so.0", + "sha256": "369a54082f9b68b532dc4ffa98e7fee49f9efb79c93a9fdd622dc6ad42a20bd9", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstbase-1.0.so.0", + "sha256": "54c4200b2164ad19badee88fcb999989d37980a57b9ea3fccc204549da675745", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstnet-1.0.so.0", + "sha256": "60690a11caa2b561bc1fd8deb4f495a28aa3b942b6bff1c68c01acb77b8432b5", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstpbutils-1.0.so.0", + "sha256": "061c78737ebb8575d5c06fca16c555b2a763eb8b6ee9aa6736d41d8412ab78ed", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstreamer-1.0.so.0", + "sha256": "7ca382c8ec951368384f5c85fdccb31fc08e090be402e811575809f6babedfd0", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstrtp-1.0.so.0", + "sha256": "1d5e6a4d84d6da9b19599d8be5ee7414453b4e5c8e98ac8dfd0cbff3820b3b44", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgsttag-1.0.so.0", + "sha256": "26386441f8d324d05448399f7b25641cea4975b7224411588fcdde8748f54085", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libgstvideo-1.0.so.0", + "sha256": "1fdf86805535aabb7c175c13f73957af9fbe7527a99b48d6adf835ed943cec4b", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libintl.so.8", + "sha256": "3745518bbcd678e70f7560496596c8adc8b9215d23839c5eb2d0dea0bce3975a", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libopus.so.0", + "sha256": "7f1b4bd7b36f6e3d906102e93cf1c9f82053befe7ffd76584ce50222cb2ae3df", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libpcre2-8.so.0", + "sha256": "e39519b242f40686734ed8d0218f68cac24f0e956ec64c8c1b49b9da5cc9788b", + "executable": true + }, + { + "path": "codex-resources/voice/lib/libz.so.1", + "sha256": "6c5d765f42d9368cc4bdbd11f725c1bcf6b14b78322033d3c94f787fc6261f5e", + "executable": true + }, + { + "path": "codex-resources/voice/licenses/LGPL-2.1.txt", + "sha256": "ad2eec519ebd4b5df86ea84dff24ae3bfa2edea846a703b58902dd221ae375db", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/libffi.txt", + "sha256": "17b64dc60f3b6897a60f971e288b973f655c2edcdf08b25f3c3dd5549857881c", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/Opus.txt", + "sha256": "01e1167d54a096d123cf6dfbbeb19587278845c6481d2d66d545669846079551", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/PCRE2.md", + "sha256": "197d8a73ffee0d6b09adba2f9c677b5f5aede24edf89258a68e48248d010d811", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/proxy-libintl.txt", + "sha256": "d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/sljit.txt", + "sha256": "5f216505c0f6ea3273caec89e766eef93cdeb7bbb0c429f9360116d7c938feeb", + "executable": false + }, + { + "path": "codex-resources/voice/licenses/zlib.txt", + "sha256": "e32ff4e00d9d94930537635291da39e7e612703334bf6fde8c7f1686fe8a45a2", + "executable": false + }, + { + "path": "codex-resources/voice/manifest.json", + "sha256": "b4c7fbc3b46647c1a382c7129f47b7a4e453e5a18d671c726bb04d12f610f58c", + "executable": false + }, + { + "path": "codex-resources/voice/NOTICE.md", + "sha256": "40097a1799441051aa0b6645cdc819cceb19be73cdd265eb602aa2b15e0b1f48", + "executable": false + }, + { + "path": "codex-resources/voice/runtime.json", + "sha256": "350690ea1502d50be347483b17ef60480a5f3a236b9cfa638eb12bbe51c2cd63", + "executable": false + }, + { + "path": "codex-resources/voice/sources.json", + "sha256": "e2f6b124f6277e7c3c4f5c7cc8830c66190f671ad65e972bb2cc9507dbfcb937", + "executable": false } ] } diff --git a/runtime/codex/interrupt-barrier.patch b/runtime/codex/interrupt-barrier.patch index ce4fc2b..5a498af 100644 --- a/runtime/codex/interrupt-barrier.patch +++ b/runtime/codex/interrupt-barrier.patch @@ -1,9 +1,9 @@ --- a/codex-rs/core/src/agent/control.rs +++ b/codex-rs/core/src/agent/control.rs -@@ -359,19 +359,13 @@ +@@ -342,20 +342,10 @@ /// Interrupt the current task for an existing agent thread. pub(crate) async fn interrupt_agent(&self, agent_id: ThreadId) -> CodexResult { - let state = self.upgrade()?; + let state = self.runtime.upgrade()?; - self.handle_thread_request_result( - agent_id, - &state, @@ -13,15 +13,13 @@ - Op::Interrupt, - /*parent_turn_id*/ None, - /*root_turn_id*/ None, +- /*message_delivery*/ None, - ) - .await, - ) - .await + let thread = state.get_thread(agent_id).await?; -+ // Completion of this tool is a barrier for subsequent follow-up work. -+ // Merely enqueueing Op::Interrupt lets a follow-up see no active Turn -+ // while cancellation still holds its execution guard and rejects the -+ // existing child at the concurrency limit. ++ // A follow-up must not race cancellation while it still holds admission. + thread.session.interrupt_task().await; + Ok(Uuid::now_v7().to_string()) } diff --git a/runtime/codex/local-subprocess-stdio.patch b/runtime/codex/local-subprocess-stdio.patch index 754ecec..55091f0 100644 --- a/runtime/codex/local-subprocess-stdio.patch +++ b/runtime/codex/local-subprocess-stdio.patch @@ -1,7 +1,8 @@ -diff --git a/codex-rs/linux-sandbox/src/landlock.rs b/codex-rs/linux-sandbox/src/landlock.rs ---- a/codex-rs/linux-sandbox/src/landlock.rs -+++ b/codex-rs/linux-sandbox/src/landlock.rs -@@ -191,8 +191,6 @@ +diff --git a/codex-rs/linux-sandbox/src/seccomp.rs b/codex-rs/linux-sandbox/src/seccomp.rs +index 67cc724..5c21c3c 100644 +--- a/codex-rs/linux-sandbox/src/seccomp.rs ++++ b/codex-rs/linux-sandbox/src/seccomp.rs +@@ -208,8 +208,6 @@ fn install_network_seccomp_filter_on_current_thread( deny_syscall(&mut rules, libc::SYS_bind); deny_syscall(&mut rules, libc::SYS_listen); deny_syscall(&mut rules, libc::SYS_getpeername); @@ -10,7 +11,7 @@ diff --git a/codex-rs/linux-sandbox/src/landlock.rs b/codex-rs/linux-sandbox/src deny_syscall(&mut rules, libc::SYS_sendto); deny_syscall(&mut rules, libc::SYS_sendmmsg); // NOTE: allowing recvfrom allows some tools like: `cargo clippy` -@@ -200,7 +198,39 @@ +@@ -217,7 +215,39 @@ fn install_network_seccomp_filter_on_current_thread( // management. // deny_syscall(&mut rules, libc::SYS_recvfrom); deny_syscall(&mut rules, libc::SYS_recvmmsg); @@ -51,13 +52,14 @@ diff --git a/codex-rs/linux-sandbox/src/landlock.rs b/codex-rs/linux-sandbox/src deny_syscall(&mut rules, libc::SYS_setsockopt); // For `socket` we allow AF_UNIX (arg0 == AF_UNIX) and deny -diff --git a/codex-rs/linux-sandbox/tests/suite/landlock.rs b/codex-rs/linux-sandbox/tests/suite/landlock.rs ---- a/codex-rs/linux-sandbox/tests/suite/landlock.rs -+++ b/codex-rs/linux-sandbox/tests/suite/landlock.rs -@@ -1258,3 +1258,84 @@ - // all images ship bash, so we guard against 127 as well. - assert_network_blocked(&["bash", "-c", "echo hi > /dev/tcp/127.0.0.1/80"]).await; - } +diff --git a/codex-rs/linux-sandbox/tests/suite/sandbox.rs b/codex-rs/linux-sandbox/tests/suite/sandbox.rs +index e0167df..b718dd6 100644 +--- a/codex-rs/linux-sandbox/tests/suite/sandbox.rs ++++ b/codex-rs/linux-sandbox/tests/suite/sandbox.rs +@@ -1572,3 +1572,84 @@ async fn sandbox_blocks_dev_tcp_redirection() { + + #[path = "daemon_sockets_tests.rs"] + mod daemon_sockets_tests; + +// These compatibility regressions require Node and Python, and intentionally do +// not accept a missing interpreter or unavailable sandbox as a passing result. diff --git a/runtime/codex/model-capabilities.json b/runtime/codex/model-capabilities.json index 0a8e56e..d291757 100644 --- a/runtime/codex/model-capabilities.json +++ b/runtime/codex/model-capabilities.json @@ -1,6 +1,6 @@ { - "revision": "6b9826e3aa83b1a5947db50f4332cb9c65f1b340", - "sourceSha256": "f3b8104396daf6381bed9d7c4b154a8664f9b5089b44b01a9d54f421566ec9a7", + "revision": "6aaac694803004a63c6f393d153c96d22521a6b9", + "sourceSha256": "943ca7fe1d19ed019054158303f0dbbd80b3bef43b3aa425a71aa7cb3fb52c2b", "models": { "gpt-6-astra": { "reasoning": [ @@ -113,6 +113,35 @@ "high", "xhigh" ] + }, + "gpt-6.1-sol": { + "reasoning": [ + "low", + "medium", + "high", + "xhigh", + "max", + "ultra" + ] + }, + "gpt-6-sol": { + "reasoning": [ + "low", + "medium", + "high", + "xhigh", + "max", + "ultra" + ] + }, + "gpt-6-luna": { + "reasoning": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] } }, "reasoningOverridesSource": "https://developers.openai.com/api/docs/guides/latest-model?model=gpt-5.4", diff --git a/runtime/codex/model-defaults.json b/runtime/codex/model-defaults.json index a27db14..4cccb73 100644 --- a/runtime/codex/model-defaults.json +++ b/runtime/codex/model-defaults.json @@ -1,18 +1,18 @@ { - "revision": "6b9826e3aa83b1a5947db50f4332cb9c65f1b340", + "revision": "6aaac694803004a63c6f393d153c96d22521a6b9", "sourcePath": "codex-rs/models-manager/models.json", - "sourceSha256": "f3b8104396daf6381bed9d7c4b154a8664f9b5089b44b01a9d54f421566ec9a7", + "sourceSha256": "943ca7fe1d19ed019054158303f0dbbd80b3bef43b3aa425a71aa7cb3fb52c2b", "defaults": { "gpt-6-astra": "low", + "gpt-6.1-sol": "low", + "gpt-6-sol": "medium", + "gpt-6-luna": "medium", "gpt-5.6-sol": "low", "gpt-5.6-terra": "medium", "gpt-5.6-luna": "medium", "gpt-daybreak-blue-latest": "low", "gpt-daybreak-red-latest": "medium", "gpt-5.5": "medium", - "gpt-5.4": "medium", - "gpt-5.4-mini": "medium", - "gpt-5.2": "medium", "codex-auto-review": "medium" } } diff --git a/runtime/codex/release-lock.patch b/runtime/codex/release-lock.patch index 2e74ec4..919abba 100644 --- a/runtime/codex/release-lock.patch +++ b/runtime/codex/release-lock.patch @@ -1,1049 +1,1154 @@ -diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock -index 45fca1b..7ba1057 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock -@@ -416,7 +416,7 @@ checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +@@ -287,7 +287,7 @@ [[package]] name = "app_test_support" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "base64 0.22.1", -@@ -2040,7 +2040,7 @@ dependencies = [ +@@ -1888,7 +1888,7 @@ [[package]] name = "codex-agent-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-core", -@@ -2052,7 +2052,7 @@ dependencies = [ +@@ -1900,7 +1900,7 @@ [[package]] name = "codex-agent-graph-store" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", "codex-state", -@@ -2067,7 +2067,7 @@ dependencies = [ +@@ -1915,7 +1915,7 @@ [[package]] name = "codex-agent-identity" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "base64 0.22.1", -@@ -2087,7 +2087,7 @@ dependencies = [ +@@ -1935,7 +1935,7 @@ + + [[package]] + name = "codex-agent-message-board-client" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "anyhow", + "chrono", +@@ -1958,7 +1958,7 @@ + + [[package]] + name = "codex-agent-message-board-extension" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "codex-extension-api", + "codex-message-board", +@@ -1972,7 +1972,7 @@ [[package]] name = "codex-agent-roles" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-config", "codex-file-system", -@@ -2100,7 +2100,7 @@ dependencies = [ +@@ -1985,7 +1985,7 @@ [[package]] name = "codex-analytics" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-app-server-protocol", "codex-git-utils", -@@ -2121,7 +2121,7 @@ dependencies = [ +@@ -2008,7 +2008,7 @@ [[package]] name = "codex-ansi-escape" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "ansi-to-tui", - "ratatui", -@@ -2130,7 +2130,7 @@ dependencies = [ + "pretty_assertions", +@@ -2019,7 +2019,7 @@ [[package]] name = "codex-api" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "assert_matches", -@@ -2165,7 +2165,7 @@ dependencies = [ +@@ -2057,7 +2057,7 @@ [[package]] name = "codex-app-server" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "app_test_support", -@@ -2268,7 +2268,7 @@ dependencies = [ +@@ -2175,7 +2175,7 @@ [[package]] name = "codex-app-server-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-app-server", "codex-app-server-protocol", -@@ -2295,7 +2295,7 @@ dependencies = [ +@@ -2202,7 +2202,7 @@ [[package]] name = "codex-app-server-daemon" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", - "codex-app-server-protocol", -@@ -2318,7 +2318,7 @@ dependencies = [ + "blake3", +@@ -2232,7 +2232,7 @@ [[package]] name = "codex-app-server-protocol" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-app-server-protocol-noop-macros", -@@ -2352,11 +2352,11 @@ dependencies = [ +@@ -2266,11 +2266,11 @@ [[package]] name = "codex-app-server-protocol-noop-macros" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" [[package]] name = "codex-app-server-test-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "clap", -@@ -2378,7 +2378,7 @@ dependencies = [ +@@ -2292,7 +2292,7 @@ [[package]] name = "codex-app-server-transport" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ - "anyhow", "axum", -@@ -2420,7 +2420,7 @@ dependencies = [ + "base64 0.22.1", +@@ -2335,7 +2335,7 @@ [[package]] name = "codex-apply-patch" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "assert_cmd", -@@ -2440,7 +2440,7 @@ dependencies = [ +@@ -2355,7 +2355,7 @@ [[package]] name = "codex-arg0" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-apply-patch", -@@ -2462,7 +2462,7 @@ dependencies = [ +@@ -2378,7 +2378,7 @@ [[package]] name = "codex-async-utils" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "pretty_assertions", - "tokio", -@@ -2471,7 +2471,7 @@ dependencies = [ + "rand 0.9.3", +@@ -2388,7 +2388,7 @@ [[package]] name = "codex-attachment-store" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ - "base64 0.22.1", - "codex-utils-image", -@@ -2482,7 +2482,7 @@ dependencies = [ + "pretty_assertions", + "serde", +@@ -2398,7 +2398,7 @@ [[package]] name = "codex-aws-auth" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "aws-config", "aws-credential-types", -@@ -2497,7 +2497,7 @@ dependencies = [ +@@ -2424,7 +2424,7 @@ [[package]] name = "codex-backend-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-api", -@@ -2517,7 +2517,7 @@ dependencies = [ +@@ -2444,7 +2444,7 @@ [[package]] name = "codex-backend-openapi-models" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "serde", "serde_json", -@@ -2526,7 +2526,7 @@ dependencies = [ +@@ -2453,7 +2453,7 @@ [[package]] name = "codex-build-info" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-install-context", "pretty_assertions", -@@ -2539,7 +2539,7 @@ dependencies = [ +@@ -2466,7 +2466,7 @@ [[package]] name = "codex-bwrap" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "cc", "libc", -@@ -2548,7 +2548,7 @@ dependencies = [ +@@ -2475,7 +2475,7 @@ [[package]] name = "codex-chatgpt" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "clap", -@@ -2570,7 +2570,7 @@ dependencies = [ +@@ -2497,7 +2497,7 @@ [[package]] name = "codex-cli" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "app_test_support", -@@ -2663,7 +2663,7 @@ dependencies = [ +@@ -2601,7 +2601,7 @@ [[package]] name = "codex-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-http-client", "eventsource-stream", -@@ -2676,7 +2676,7 @@ dependencies = [ +@@ -2615,7 +2615,7 @@ + + [[package]] + name = "codex-cloud-client" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "anyhow", + "async-stream", +@@ -2639,7 +2639,7 @@ [[package]] name = "codex-cloud-config" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "chrono", -@@ -2701,7 +2701,7 @@ dependencies = [ +@@ -2665,7 +2665,7 @@ [[package]] name = "codex-cloud-tasks" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -2734,7 +2734,7 @@ dependencies = [ +@@ -2698,7 +2698,7 @@ [[package]] name = "codex-cloud-tasks-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -2749,7 +2749,7 @@ dependencies = [ +@@ -2713,7 +2713,7 @@ [[package]] name = "codex-cloud-tasks-mock-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "chrono", "codex-cloud-tasks-client", -@@ -2758,7 +2758,7 @@ dependencies = [ +@@ -2722,7 +2722,7 @@ [[package]] name = "codex-code-mode" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-code-mode-protocol", "codex-http-client", -@@ -2781,7 +2781,7 @@ dependencies = [ +@@ -2746,7 +2746,7 @@ [[package]] name = "codex-code-mode-host" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "axum", -@@ -2809,7 +2809,7 @@ dependencies = [ +@@ -2775,7 +2775,7 @@ [[package]] name = "codex-code-mode-protocol" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", "glob", -@@ -2827,7 +2827,7 @@ dependencies = [ +@@ -2793,7 +2793,7 @@ [[package]] name = "codex-code-mode-runtime" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "codex-code-mode-protocol", -@@ -2845,11 +2845,11 @@ dependencies = [ +@@ -2811,11 +2811,11 @@ [[package]] name = "codex-collaboration-mode-templates" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" [[package]] name = "codex-config" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "base64 0.22.1", -@@ -2898,7 +2898,7 @@ dependencies = [ +@@ -2868,7 +2868,7 @@ [[package]] name = "codex-config-schema" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "clap", -@@ -2907,7 +2907,7 @@ dependencies = [ +@@ -2877,7 +2877,7 @@ [[package]] name = "codex-connectors" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "arc-swap", -@@ -2929,7 +2929,7 @@ dependencies = [ +@@ -2899,7 +2899,7 @@ [[package]] name = "codex-connectors-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-connectors", "codex-core-plugins", -@@ -2943,7 +2943,7 @@ dependencies = [ +@@ -2913,7 +2913,7 @@ [[package]] name = "codex-context-fragments" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", - "codex-utils-string", -@@ -2952,7 +2952,7 @@ dependencies = [ + "codex-protocol-test-support", +@@ -2924,7 +2924,7 @@ [[package]] name = "codex-core" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "arc-swap", -@@ -3087,7 +3087,7 @@ dependencies = [ +@@ -3070,7 +3070,7 @@ [[package]] name = "codex-core-api" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-analytics", "codex-app-server-protocol", -@@ -3110,7 +3110,7 @@ dependencies = [ +@@ -3093,7 +3093,7 @@ + + [[package]] + name = "codex-core-plugin-common" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "codex-utils-absolute-path", + "semver", +@@ -3104,7 +3104,7 @@ [[package]] name = "codex-core-plugins" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -3165,7 +3165,7 @@ dependencies = [ +@@ -3161,7 +3161,7 @@ [[package]] name = "codex-diagnostics" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "libc", "pretty_assertions", -@@ -3173,7 +3173,7 @@ dependencies = [ +@@ -3169,7 +3169,7 @@ + + [[package]] + name = "codex-direct-tool-timing" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "codex-utils-critical-path", + "pretty_assertions", +@@ -3177,7 +3177,7 @@ [[package]] name = "codex-exec" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "assert_cmd", -@@ -3224,7 +3224,7 @@ dependencies = [ +@@ -3230,7 +3230,7 @@ [[package]] name = "codex-exec-server" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "arc-swap", -@@ -3284,7 +3284,7 @@ dependencies = [ +@@ -3302,7 +3302,7 @@ [[package]] name = "codex-exec-server-protocol" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "codex-file-system", -@@ -3299,7 +3299,7 @@ dependencies = [ +@@ -3320,7 +3320,7 @@ [[package]] name = "codex-exec-server-test-support" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-exec-server", -@@ -3314,7 +3314,7 @@ dependencies = [ +@@ -3335,7 +3335,7 @@ [[package]] name = "codex-execpolicy" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "clap", -@@ -3332,7 +3332,7 @@ dependencies = [ +@@ -3353,7 +3353,7 @@ [[package]] name = "codex-experimental-api-macros" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "proc-macro2", "quote", -@@ -3341,7 +3341,7 @@ dependencies = [ +@@ -3362,7 +3362,7 @@ [[package]] name = "codex-extension-api" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ + "codex-api", "codex-config", - "codex-context-fragments", -@@ -3359,7 +3359,7 @@ dependencies = [ +@@ -3385,7 +3385,7 @@ [[package]] name = "codex-extension-items" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-utils-absolute-path", "pretty_assertions", -@@ -3371,7 +3371,7 @@ dependencies = [ +@@ -3397,7 +3397,7 @@ [[package]] name = "codex-external-agent-migration" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "chrono", "codex-analytics", -@@ -3401,7 +3401,7 @@ dependencies = [ +@@ -3428,7 +3428,7 @@ [[package]] name = "codex-features" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ - "codex-otel", + "codex-network-proxy", "codex-protocol", -@@ -3414,7 +3414,7 @@ dependencies = [ +@@ -3442,7 +3442,7 @@ [[package]] name = "codex-feedback" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "bytes", -@@ -3436,7 +3436,7 @@ dependencies = [ +@@ -3470,7 +3470,7 @@ [[package]] name = "codex-file-search" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "clap", -@@ -3452,7 +3452,7 @@ dependencies = [ +@@ -3486,7 +3486,7 @@ [[package]] name = "codex-file-system" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "bytes", "codex-protocol", -@@ -3464,7 +3464,7 @@ dependencies = [ +@@ -3500,7 +3500,7 @@ [[package]] name = "codex-file-watcher" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "notify", "pretty_assertions", -@@ -3475,7 +3475,7 @@ dependencies = [ +@@ -3511,7 +3511,7 @@ [[package]] name = "codex-git-attribution" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-backend-client", "codex-extension-api", -@@ -3488,7 +3488,7 @@ dependencies = [ +@@ -3524,7 +3524,7 @@ [[package]] name = "codex-git-utils" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -3514,7 +3514,7 @@ dependencies = [ +@@ -3552,7 +3552,7 @@ [[package]] name = "codex-goal-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -3538,7 +3538,7 @@ dependencies = [ +@@ -3577,7 +3577,7 @@ [[package]] name = "codex-guardian-context" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ + "codex-context-fragments", "codex-history", - "codex-protocol", -@@ -3548,7 +3548,7 @@ dependencies = [ +@@ -3590,7 +3590,7 @@ + + [[package]] + name = "codex-guardian-reviewer" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "anyhow", + "codex-analytics", +@@ -3615,7 +3615,7 @@ [[package]] name = "codex-guardian-v2" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-analytics", -@@ -3578,7 +3578,7 @@ dependencies = [ +@@ -3654,7 +3654,7 @@ [[package]] name = "codex-history" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-protocol", -@@ -3590,7 +3590,7 @@ dependencies = [ +@@ -3666,7 +3666,7 @@ [[package]] name = "codex-history-notes-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-analytics", - "codex-api", -@@ -3615,7 +3615,7 @@ dependencies = [ + "codex-client", +@@ -3691,7 +3691,7 @@ [[package]] name = "codex-home" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-extension-api", "codex-utils-absolute-path", -@@ -3626,7 +3626,7 @@ dependencies = [ +@@ -3703,7 +3703,7 @@ [[package]] name = "codex-hooks" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "async-channel", -@@ -3652,7 +3652,7 @@ dependencies = [ +@@ -3732,7 +3732,7 @@ [[package]] name = "codex-http-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "bytes", "codex-utils-cargo-bin", -@@ -3684,7 +3684,7 @@ dependencies = [ +@@ -3772,7 +3772,7 @@ [[package]] name = "codex-image-generation-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "codex-api", -@@ -3711,7 +3711,7 @@ dependencies = [ +@@ -3804,7 +3804,7 @@ [[package]] name = "codex-install-context" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-utils-absolute-path", "codex-utils-home-dir", -@@ -3724,7 +3724,7 @@ dependencies = [ +@@ -3817,7 +3817,7 @@ [[package]] name = "codex-keyring-store" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "keyring", - "tracing", -@@ -3732,7 +3732,7 @@ dependencies = [ + "pretty_assertions", +@@ -3828,7 +3828,7 @@ [[package]] name = "codex-linux-sandbox" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "clap", "codex-core", -@@ -3759,7 +3759,7 @@ dependencies = [ +@@ -3857,7 +3857,7 @@ [[package]] name = "codex-lmstudio" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-core", "codex-http-client", -@@ -3773,7 +3773,7 @@ dependencies = [ +@@ -3871,7 +3871,7 @@ [[package]] name = "codex-login" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "base64 0.22.1", -@@ -3816,7 +3816,7 @@ dependencies = [ +@@ -3917,7 +3917,7 @@ [[package]] name = "codex-mcp" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "arc-swap", -@@ -3856,7 +3856,7 @@ dependencies = [ +@@ -3960,7 +3960,7 @@ [[package]] name = "codex-mcp-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "axum", -@@ -3887,7 +3887,7 @@ dependencies = [ +@@ -3993,7 +3993,7 @@ [[package]] name = "codex-memories-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-core", "codex-extension-api", -@@ -3908,7 +3908,7 @@ dependencies = [ +@@ -4015,7 +4015,7 @@ [[package]] name = "codex-memories-read" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", "codex-shell-command", -@@ -3918,7 +3918,7 @@ dependencies = [ +@@ -4025,7 +4025,7 @@ [[package]] name = "codex-memories-write" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -3955,7 +3955,7 @@ dependencies = [ +@@ -4062,7 +4062,7 @@ + + [[package]] + name = "codex-mermaid" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "insta", + "pretty_assertions", +@@ -4071,7 +4071,7 @@ + + [[package]] + name = "codex-message-board" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "base64 0.22.1", + "caseless", +@@ -4094,7 +4094,7 @@ [[package]] name = "codex-message-history" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-config", "memchr", -@@ -3969,7 +3969,7 @@ dependencies = [ +@@ -4108,7 +4108,7 @@ [[package]] name = "codex-model-provider" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ - "codex-agent-identity", - "codex-api", -@@ -3993,7 +3993,7 @@ dependencies = [ + "base64 0.22.1", + "chrono", +@@ -4142,7 +4142,7 @@ [[package]] name = "codex-model-provider-info" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ - "codex-api", - "codex-protocol", -@@ -4010,7 +4010,7 @@ dependencies = [ + "codex-client", + "codex-http-client", +@@ -4160,7 +4160,7 @@ [[package]] name = "codex-models-manager" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "chrono", - "codex-collaboration-mode-templates", -@@ -4029,7 +4029,7 @@ dependencies = [ + "codex-http-client", +@@ -4179,7 +4179,7 @@ + + [[package]] + name = "codex-multi-env-copy-file" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "anyhow", + "codex-config", +@@ -4205,7 +4205,7 @@ [[package]] name = "codex-mxc-sandbox" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", - "appcontainer_common", -@@ -4041,7 +4041,7 @@ dependencies = [ + "codex-network-proxy", +@@ -4226,7 +4226,7 @@ [[package]] name = "codex-network-proxy" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "base64 0.22.1", -@@ -4080,7 +4080,7 @@ dependencies = [ +@@ -4275,7 +4275,7 @@ [[package]] name = "codex-ollama" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "assert_matches", "async-stream", -@@ -4100,7 +4100,7 @@ dependencies = [ +@@ -4295,7 +4295,7 @@ [[package]] name = "codex-otel" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ + "bytes", "chrono", - "codex-api", -@@ -4133,7 +4133,7 @@ dependencies = [ +@@ -4332,7 +4332,7 @@ [[package]] name = "codex-otel-trace-websocket" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "axum", -@@ -4144,7 +4144,7 @@ dependencies = [ +@@ -4343,7 +4343,7 @@ [[package]] name = "codex-plugin" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-config", - "codex-protocol", -@@ -4158,7 +4158,7 @@ dependencies = [ + "codex-core-plugin-common", +@@ -4358,7 +4358,7 @@ [[package]] name = "codex-process-hardening" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "libc", "pretty_assertions", -@@ -4166,7 +4166,7 @@ dependencies = [ +@@ -4366,7 +4366,7 @@ [[package]] name = "codex-prompts" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", - "codex-context-fragments", -@@ -4180,7 +4180,7 @@ dependencies = [ + "codex-collaboration-mode-templates", +@@ -4384,7 +4384,7 @@ [[package]] name = "codex-protocol" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chardetng", -@@ -4224,7 +4224,7 @@ dependencies = [ +@@ -4430,14 +4430,14 @@ + + [[package]] + name = "codex-protocol-test-support" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "codex-protocol", + ] [[package]] name = "codex-queue-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-core", -@@ -4245,7 +4245,7 @@ dependencies = [ +@@ -4458,7 +4458,7 @@ [[package]] name = "codex-realtime-webrtc" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-build-info", -@@ -4262,7 +4262,7 @@ dependencies = [ +@@ -4477,7 +4477,7 @@ [[package]] name = "codex-response-debug-context" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "codex-api", -@@ -4273,7 +4273,7 @@ dependencies = [ +@@ -4488,7 +4488,7 @@ [[package]] name = "codex-responses-api-proxy" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", - "clap", -@@ -4290,7 +4290,7 @@ dependencies = [ + "bytes", +@@ -4512,7 +4512,7 @@ [[package]] name = "codex-rmcp-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "axum", -@@ -4336,7 +4336,7 @@ dependencies = [ +@@ -4563,7 +4563,7 @@ [[package]] name = "codex-rollout" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -4363,7 +4363,7 @@ dependencies = [ +@@ -4596,7 +4596,7 @@ [[package]] name = "codex-rollout-trace" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-code-mode", -@@ -4379,7 +4379,7 @@ dependencies = [ +@@ -4612,7 +4612,7 @@ + + [[package]] + name = "codex-runtime-agent-instance" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "base64 0.22.1", + "codex-agent-identity", +@@ -4638,7 +4638,7 @@ [[package]] name = "codex-sandboxing" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-mxc-sandbox", -@@ -4405,7 +4405,7 @@ dependencies = [ +@@ -4666,7 +4666,7 @@ [[package]] name = "codex-secrets" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "age", "anyhow", -@@ -4426,7 +4426,7 @@ dependencies = [ +@@ -4687,7 +4687,7 @@ [[package]] name = "codex-shell-command" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "base64 0.22.1", -@@ -4449,7 +4449,7 @@ dependencies = [ - - [[package]] - name = "codex-shell-escalation" --version = "0.0.0" -+version = "0.154.0" - dependencies = [ - "anyhow", - "clap", -@@ -4469,7 +4469,7 @@ dependencies = [ +@@ -4710,7 +4710,7 @@ [[package]] name = "codex-skills" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", "codex-shell-command", -@@ -4486,7 +4486,7 @@ dependencies = [ +@@ -4727,7 +4727,7 @@ [[package]] name = "codex-skills-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "assert_matches", - "codex-analytics", -@@ -4523,7 +4523,7 @@ dependencies = [ + "blake3", +@@ -4767,7 +4767,7 @@ [[package]] name = "codex-state" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "chrono", -@@ -4547,7 +4547,7 @@ dependencies = [ +@@ -4795,7 +4795,7 @@ [[package]] name = "codex-stdio-to-uds" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-uds", -@@ -4559,7 +4559,7 @@ dependencies = [ +@@ -4807,7 +4807,7 @@ + + [[package]] + name = "codex-tcp-tunnel" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "anyhow", + "bytes", +@@ -4828,7 +4828,7 @@ [[package]] name = "codex-terminal-detection" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "pretty_assertions", "tracing", -@@ -4567,7 +4567,7 @@ dependencies = [ +@@ -4836,7 +4836,7 @@ [[package]] name = "codex-test-binary-support" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-arg0", "tempfile", -@@ -4575,7 +4575,7 @@ dependencies = [ +@@ -4844,7 +4844,7 @@ [[package]] name = "codex-thread-manager-sample" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "clap", -@@ -4586,7 +4586,7 @@ dependencies = [ +@@ -4855,7 +4855,7 @@ [[package]] name = "codex-thread-store" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "chrono", "codex-app-server-protocol", -@@ -4616,7 +4616,7 @@ dependencies = [ +@@ -4886,7 +4886,7 @@ [[package]] name = "codex-tools" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "bitflags 2.13.1", - "codex-code-mode", -@@ -4641,7 +4641,7 @@ dependencies = [ + "codex-attachment-store", +@@ -4911,7 +4911,7 @@ [[package]] name = "codex-tui" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "app_test_support", -@@ -4758,7 +4758,7 @@ dependencies = [ +@@ -5039,7 +5039,7 @@ [[package]] name = "codex-uds" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "async-io", - "pretty_assertions", -@@ -4771,7 +4771,7 @@ dependencies = [ + "libc", +@@ -5053,7 +5053,7 @@ + + [[package]] + name = "codex-user-verification" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "base64 0.22.1", + "block2", +@@ -5074,7 +5074,7 @@ [[package]] name = "codex-utils-absolute-path" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "dirs", "dunce", -@@ -4785,14 +4785,14 @@ dependencies = [ +@@ -5088,14 +5088,14 @@ [[package]] name = "codex-utils-approval-presets" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", ] @@ -1051,161 +1156,178 @@ index 45fca1b..7ba1057 100644 [[package]] name = "codex-utils-audio" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "codex-protocol", -@@ -4806,7 +4806,7 @@ dependencies = [ +@@ -5109,7 +5109,7 @@ [[package]] name = "codex-utils-cache" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "lru", "sha1 0.10.6", -@@ -4815,7 +4815,7 @@ dependencies = [ +@@ -5118,7 +5118,7 @@ [[package]] name = "codex-utils-cargo-bin" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "assert_cmd", "runfiles", -@@ -4824,7 +4824,7 @@ dependencies = [ +@@ -5127,7 +5127,7 @@ [[package]] name = "codex-utils-cli" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "clap", "codex-protocol", -@@ -4836,15 +4836,15 @@ dependencies = [ +@@ -5139,22 +5139,22 @@ + + [[package]] + name = "codex-utils-critical-path" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "pretty_assertions", + ] [[package]] name = "codex-utils-elapsed" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" [[package]] name = "codex-utils-fuzzy-match" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" [[package]] name = "codex-utils-git-discovery" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-git-utils", "codex-utils-absolute-path", -@@ -4857,7 +4857,7 @@ dependencies = [ +@@ -5167,7 +5167,7 @@ [[package]] name = "codex-utils-home-dir" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-utils-absolute-path", "dirs", -@@ -4867,7 +4867,7 @@ dependencies = [ +@@ -5177,7 +5177,7 @@ [[package]] name = "codex-utils-image" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "codex-utils-cache", -@@ -4880,7 +4880,7 @@ dependencies = [ +@@ -5191,7 +5191,7 @@ [[package]] name = "codex-utils-json-to-toml" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "pretty_assertions", "serde_json", -@@ -4889,7 +4889,7 @@ dependencies = [ +@@ -5200,7 +5200,7 @@ [[package]] name = "codex-utils-oss" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-core", "codex-lmstudio", -@@ -4899,7 +4899,7 @@ dependencies = [ +@@ -5210,7 +5210,7 @@ [[package]] name = "codex-utils-output-truncation" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", "codex-utils-string", -@@ -4908,7 +4908,7 @@ dependencies = [ +@@ -5220,7 +5220,7 @@ [[package]] name = "codex-utils-path" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-utils-absolute-path", "dunce", -@@ -4919,7 +4919,7 @@ dependencies = [ +@@ -5231,7 +5231,7 @@ [[package]] name = "codex-utils-path-uri" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "base64 0.22.1", "codex-utils-absolute-path", -@@ -4935,7 +4935,7 @@ dependencies = [ +@@ -5247,7 +5247,7 @@ [[package]] name = "codex-utils-plugins" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-exec-server", "codex-exec-server-protocol", -@@ -4949,7 +4949,7 @@ dependencies = [ +@@ -5261,7 +5261,7 @@ + + [[package]] + name = "codex-utils-process" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "pretty_assertions", + "tokio", +@@ -5269,7 +5269,7 @@ [[package]] name = "codex-utils-pty" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", - "filedescriptor", -@@ -4965,7 +4965,7 @@ dependencies = [ + "codex-utils-cargo-bin", +@@ -5288,7 +5288,7 @@ [[package]] name = "codex-utils-readiness" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "assert_matches", "thiserror 2.0.18", -@@ -4975,7 +4975,7 @@ dependencies = [ +@@ -5298,7 +5298,7 @@ [[package]] name = "codex-utils-redacted-string" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "schemars 0.8.22", "serde", -@@ -4983,14 +4983,14 @@ dependencies = [ +@@ -5306,14 +5306,14 @@ [[package]] name = "codex-utils-rustls-provider" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "rustls", ] @@ -1213,25 +1335,25 @@ index 45fca1b..7ba1057 100644 [[package]] name = "codex-utils-sandbox-summary" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-protocol", "codex-utils-absolute-path", -@@ -4999,7 +4999,7 @@ dependencies = [ +@@ -5323,7 +5323,7 @@ [[package]] name = "codex-utils-sleep-inhibitor" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "core-foundation 0.9.4", "libc", -@@ -5009,14 +5009,14 @@ dependencies = [ +@@ -5333,14 +5333,14 @@ [[package]] name = "codex-utils-stream-parser" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "pretty_assertions", ] @@ -1239,16 +1361,16 @@ index 45fca1b..7ba1057 100644 [[package]] name = "codex-utils-string" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "pretty_assertions", "regex-lite", -@@ -5026,14 +5026,14 @@ dependencies = [ +@@ -5350,14 +5350,14 @@ [[package]] name = "codex-utils-template" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "pretty_assertions", ] @@ -1256,79 +1378,96 @@ index 45fca1b..7ba1057 100644 [[package]] name = "codex-v8-poc" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "pretty_assertions", "v8", -@@ -5041,7 +5041,7 @@ dependencies = [ +@@ -5365,7 +5365,7 @@ [[package]] name = "codex-voice-host" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-install-context", -@@ -5068,7 +5068,7 @@ dependencies = [ +@@ -5392,7 +5392,7 @@ [[package]] name = "codex-web-search-extension" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-api", "codex-core", -@@ -5089,7 +5089,7 @@ dependencies = [ +@@ -5414,7 +5414,7 @@ + + [[package]] + name = "codex-websocket-auth" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "anyhow", + "base64 0.22.1", +@@ -5433,7 +5433,7 @@ [[package]] name = "codex-websocket-client" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-http-client", "codex-utils-rustls-provider", -@@ -5105,7 +5105,7 @@ dependencies = [ +@@ -5449,7 +5449,7 @@ [[package]] name = "codex-windows-sandbox" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "base64 0.22.1", -@@ -5131,7 +5131,7 @@ dependencies = [ +@@ -5479,7 +5479,7 @@ [[package]] name = "codex-windows-sandbox-service" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-cloud-config", -@@ -5148,7 +5148,7 @@ dependencies = [ +@@ -5497,14 +5497,14 @@ + + [[package]] + name = "codex-windows-sandbox-test-support" +-version = "0.0.0" ++version = "0.164.0" + dependencies = [ + "dirs", + ] [[package]] name = "codex-workload-identity" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "codex-http-client", "pretty_assertions", -@@ -5163,7 +5163,7 @@ dependencies = [ +@@ -5519,7 +5519,7 @@ [[package]] name = "codex-worktree" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "codex-git-utils", -@@ -5403,7 +5403,7 @@ dependencies = [ +@@ -5772,7 +5772,7 @@ [[package]] name = "core_test_support" -version = "0.0.0" -+version = "0.154.0" ++version = "0.164.0" dependencies = [ "anyhow", "assert_cmd", diff --git a/runtime/codex/source.json b/runtime/codex/source.json index 316d33b..d032b5f 100644 --- a/runtime/codex/source.json +++ b/runtime/codex/source.json @@ -1,16 +1,15 @@ { "repository": "https://github.com/openai/codex.git", - "revision": "6b9826e3aa83b1a5947db50f4332cb9c65f1b340", - "upstreamVersion": "0.154.0", + "revision": "6aaac694803004a63c6f393d153c96d22521a6b9", + "upstreamVersion": "0.164.0", "patches": [ "release-lock.patch", "interrupt-barrier.patch", "api-model-settings.patch", + "chatgpt-service-tier.patch", "api-turn-errors.patch", "checkpoint-shutdown.patch", - "step-settings-test-import.patch", "unified-exec-output-subscription.patch", - "chatgpt-service-tier.patch", "local-subprocess-stdio.patch" ] } diff --git a/runtime/codex/step-settings-test-import.patch b/runtime/codex/step-settings-test-import.patch deleted file mode 100644 index 7fac824..0000000 --- a/runtime/codex/step-settings-test-import.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/codex-rs/core/src/session/step_settings_tests.rs b/codex-rs/core/src/session/step_settings_tests.rs -index ba04038..eeb4763 100644 ---- a/codex-rs/core/src/session/step_settings_tests.rs -+++ b/codex-rs/core/src/session/step_settings_tests.rs -@@ -11,6 +11,7 @@ use codex_features::Feature; - use codex_models_manager::manager::StaticModelsManager; - use codex_models_manager::model_info::model_info_from_slug; - use codex_protocol::config_types::ModeKind; -+use codex_protocol::config_types::ServiceTier; - use codex_protocol::config_types::Settings; - use codex_protocol::models::BaseInstructionsProvenance; - use codex_protocol::models::PermissionProfile; diff --git a/runtime/codex/unified-exec-output-subscription.patch b/runtime/codex/unified-exec-output-subscription.patch index 584e8ba..a01f0c7 100644 --- a/runtime/codex/unified-exec-output-subscription.patch +++ b/runtime/codex/unified-exec-output-subscription.patch @@ -1,128 +1,50 @@ diff --git a/codex-rs/core/src/unified_exec/async_watcher_tests.rs b/codex-rs/core/src/unified_exec/async_watcher_tests.rs -index bffc5cf..29e3d8b 100644 +index 5e9973c..e9e228a 100644 --- a/codex-rs/core/src/unified_exec/async_watcher_tests.rs +++ b/codex-rs/core/src/unified_exec/async_watcher_tests.rs -@@ -33,6 +33,16 @@ struct StreamingOutputHarness { - } - - async fn streaming_output_harness() -> anyhow::Result { -+ let harness = unstarted_streaming_output_harness().await?; -+ start_streaming_output( -+ &harness.process, -+ &harness.context, -+ Arc::clone(&harness.transcript), -+ ); -+ Ok(harness) -+} -+ -+async fn unstarted_streaming_output_harness() -> anyhow::Result { - let (writer_tx, _writer_rx) = tokio::sync::mpsc::channel::>(1); - let (stdout_tx, stdout_rx) = tokio::sync::broadcast::channel::>(8); - let (exit_tx, exit_rx) = tokio::sync::oneshot::channel::(); -@@ -59,8 +69,6 @@ async fn streaming_output_harness() -> anyhow::Result { - "streaming-output-test".to_string(), - ); - let transcript = Arc::new(tokio::sync::Mutex::new(HeadTailBuffer::default())); -- start_streaming_output(&process, &context, Arc::clone(&transcript)); -- - Ok(StreamingOutputHarness { - process, - stdout_tx, -@@ -71,6 +79,89 @@ async fn streaming_output_harness() -> anyhow::Result { - }) - } - -+#[tokio::test] -+async fn exit_watcher_preserves_output_emitted_before_streaming_starts() -> anyhow::Result<()> { -+ let StreamingOutputHarness { -+ process, -+ stdout_tx, -+ exit_tx, -+ transcript, -+ context, -+ rx_event, -+ } = unstarted_streaming_output_harness().await?; -+ let output_handles = process.output_handles(); -+ let early_output_buffered = output_handles.output_notify.notified(); -+ tokio::pin!(early_output_buffered); -+ early_output_buffered.as_mut().enable(); -+ -+ stdout_tx -+ .send(b"EARLY-OUTPUT-MARKER\n".to_vec()) -+ .expect("send early output"); -+ early_output_buffered.await; -+ let tool_output = std::mem::take(&mut *output_handles.output_buffer.lock().await); -+ assert_eq!(tool_output.to_bytes(), b"EARLY-OUTPUT-MARKER\n"); -+ -+ start_streaming_output(&process, &context, Arc::clone(&transcript)); -+ let cwd = context -+ .step_context -+ .environments -+ .primary() -+ .expect("primary environment") -+ .cwd() -+ .clone(); -+ spawn_exit_watcher( -+ Arc::clone(&process), -+ Arc::clone(&context.session), -+ Arc::clone(&context.step_context.turn), -+ context.call_id.clone(), -+ vec!["proof".to_string()], -+ cwd, -+ /*process_id*/ 123, -+ /*plugin_attribution*/ None, -+ transcript, -+ Instant::now(), -+ /*network_denial_monitor*/ None, -+ /*plugin_metrics_sidecar*/ None, -+ ); -+ drop(context); -+ -+ stdout_tx -+ .send(b"LATE-OUTPUT-MARKER\n".to_vec()) -+ .expect("send late output"); -+ drop(stdout_tx); -+ exit_tx.send(0).expect("send exit"); -+ -+ let mut streamed_output = Vec::new(); -+ let mut completions = Vec::new(); -+ while let Ok(event) = rx_event.recv().await { -+ match event.msg { -+ EventMsg::ExecCommandOutputDelta(delta) => streamed_output.extend(delta.chunk), -+ EventMsg::ItemCompleted(completed) => { -+ let TurnItem::CommandExecution(item) = completed.item else { -+ panic!("expected CommandExecution"); -+ }; -+ completions.push((item.status, item.exit_code, item.aggregated_output)); -+ } -+ EventMsg::ExecCommandEnd(_) => {} -+ event => panic!("unexpected event: {event:?}"), -+ } -+ } -+ assert_eq!( -+ completions, -+ vec![( -+ CommandExecutionStatus::Completed, -+ Some(0), -+ Some("EARLY-OUTPUT-MARKER\nLATE-OUTPUT-MARKER\n".to_string()), -+ )] -+ ); -+ assert_eq!( -+ streamed_output, -+ b"EARLY-OUTPUT-MARKER\nLATE-OUTPUT-MARKER\n" -+ ); -+ -+ Ok(()) -+} -+ +@@ -70,7 +70,7 @@ async fn streaming_output_harness() -> anyhow::Result { + #[test_case::test_case(b""; "no_late_output")] + #[test_case::test_case(b"late\n"; "with_late_output")] #[tokio::test] - async fn streaming_output_preserves_multibyte_characters_across_chunks() -> anyhow::Result<()> { +-async fn completed_output_preserves_bytes_before_subscription( ++async fn streamed_and_completed_output_preserve_bytes_before_subscription( + late_output: &[u8], + ) -> anyhow::Result<()> { let StreamingOutputHarness { +@@ -115,17 +115,23 @@ async fn completed_output_preserves_bytes_before_subscription( + drop(stdout_tx); + exit_tx.send(0).expect("send exit"); + +- let item = tokio::time::timeout(Duration::from_secs(2), async { ++ let (item, streamed_output) = tokio::time::timeout(Duration::from_secs(2), async { ++ let mut streamed_output = Vec::new(); + loop { +- if let EventMsg::ItemCompleted(completed) = rx_event.recv().await?.msg +- && let TurnItem::CommandExecution(item) = completed.item +- { +- return Ok::<_, async_channel::RecvError>(item); ++ match rx_event.recv().await?.msg { ++ EventMsg::ExecCommandOutputDelta(delta) => streamed_output.extend(delta.chunk), ++ EventMsg::ItemCompleted(completed) => { ++ if let TurnItem::CommandExecution(item) = completed.item { ++ return Ok::<_, async_channel::RecvError>((item, streamed_output)); ++ } ++ } ++ _ => {} + } + } + }) + .await??; + let expected_output = String::from_utf8([b"early\n".as_slice(), late_output].concat())?; ++ assert_eq!(streamed_output, expected_output.as_bytes()); + assert_eq!( + (item.status, item.exit_code, item.aggregated_output), + ( diff --git a/codex-rs/core/src/unified_exec/process.rs b/codex-rs/core/src/unified_exec/process.rs -index 81946e4..49dd1ec 100644 +index b3ddb02..ffdc5f4 100644 --- a/codex-rs/core/src/unified_exec/process.rs +++ b/codex-rs/core/src/unified_exec/process.rs -@@ -90,6 +90,7 @@ enum ProcessHandle { +@@ -99,6 +99,7 @@ enum ProcessHandle { pub(crate) struct UnifiedExecProcess { process_handle: ProcessHandle, output_tx: broadcast::Sender>, @@ -130,8 +52,8 @@ index 81946e4..49dd1ec 100644 output: OutputHandles, output_drained: Arc, interaction_lock: Arc>, -@@ -125,12 +126,13 @@ impl UnifiedExecProcess { - cancellation_token: CancellationToken::new(), +@@ -139,12 +140,13 @@ impl UnifiedExecProcess { + collection_finished: CancellationToken::new(), }; let output_drained = Arc::new(Notify::new()); - let (output_tx, _) = broadcast::channel(64); @@ -145,7 +67,7 @@ index 81946e4..49dd1ec 100644 output, output_drained, interaction_lock: Arc::new(Mutex::new(())), -@@ -173,7 +175,11 @@ impl UnifiedExecProcess { +@@ -188,7 +190,11 @@ impl UnifiedExecProcess { } pub(super) fn output_receiver(&self) -> tokio::sync::broadcast::Receiver> { diff --git a/runtime/local/verify-runtime.swift b/runtime/local/verify-runtime.swift index 5d9343d..8264ffc 100644 --- a/runtime/local/verify-runtime.swift +++ b/runtime/local/verify-runtime.swift @@ -47,11 +47,36 @@ struct ExecutablePolicy { } let executablePolicy = [ - ExecutablePolicy(path: "Contents/Helpers/rat-native-worker", identifier: "dev.rat-things.runtime.vm-helper"), ExecutablePolicy(path: "Contents/Resources/codex/bin/codex", identifier: "dev.rat-things.runtime.codex"), ExecutablePolicy(path: "Contents/Resources/codex/bin/codex-code-mode-host", identifier: "dev.rat-things.runtime.code-mode-host"), ExecutablePolicy(path: "Contents/Resources/codex/codex-path/rg", identifier: "dev.rat-things.runtime.ripgrep"), - ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/zsh/bin/zsh", identifier: "dev.rat-things.runtime.zsh") + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/bin/codex-voice-host", identifier: "dev.rat-things.runtime.voice-host"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libffi.8.dylib", identifier: "dev.rat-things.runtime.voice.lib.libffi.8.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgio-2.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgio-2.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libglib-2.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libglib-2.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgmodule-2.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgmodule-2.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgobject-2.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgobject-2.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstapp-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstapp-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstaudio-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstaudio-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstbase-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstbase-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstnet-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstnet-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstpbutils-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstpbutils-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstreamer-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstreamer-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstrtp-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstrtp-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgsttag-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgsttag-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libgstvideo-1.0.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libgstvideo-1.0.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libintl.8.dylib", identifier: "dev.rat-things.runtime.voice.lib.libintl.8.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libopus.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libopus.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libpcre2-8.0.dylib", identifier: "dev.rat-things.runtime.voice.lib.libpcre2-8.0.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/lib/libz.1.dylib", identifier: "dev.rat-things.runtime.voice.lib.libz.1.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/plugins/libgstapp.dylib", identifier: "dev.rat-things.runtime.voice.plugins.libgstapp.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/plugins/libgstaudioconvert.dylib", identifier: "dev.rat-things.runtime.voice.plugins.libgstaudioconvert.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/plugins/libgstaudioresample.dylib", identifier: "dev.rat-things.runtime.voice.plugins.libgstaudioresample.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/plugins/libgstcoreelements.dylib", identifier: "dev.rat-things.runtime.voice.plugins.libgstcoreelements.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/plugins/libgstopus.dylib", identifier: "dev.rat-things.runtime.voice.plugins.libgstopus.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/plugins/libgstrtp.dylib", identifier: "dev.rat-things.runtime.voice.plugins.libgstrtp.dylib"), + ExecutablePolicy(path: "Contents/Resources/codex/codex-resources/voice/plugins/libgstrtpmanager.dylib", identifier: "dev.rat-things.runtime.voice.plugins.libgstrtpmanager.dylib"), + ExecutablePolicy(path: "Contents/Helpers/rat-native-worker", identifier: "dev.rat-things.runtime.vm-helper") ] let executablePaths = Set(executablePolicy.map(\.path)) let signaturePaths: Set = [ diff --git a/runtime/native/host-code-policy.json b/runtime/native/host-code-policy.json new file mode 100644 index 0000000..6f364b9 --- /dev/null +++ b/runtime/native/host-code-policy.json @@ -0,0 +1,189 @@ +[ + { + "path": "Contents/Resources/codex/bin/codex", + "role": "host-codex", + "identifier": "dev.rat-things.runtime.codex", + "machOType": 2, + "entitlements": "jit" + }, + { + "path": "Contents/Resources/codex/bin/codex-code-mode-host", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.code-mode-host", + "machOType": 2, + "entitlements": "jit" + }, + { + "path": "Contents/Resources/codex/codex-path/rg", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.ripgrep", + "machOType": 2 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/bin/codex-voice-host", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice-host", + "machOType": 2, + "rpaths": [ + "@loader_path/../../_solib_darwin_arm64/voice/native_link_macos_aarch64", + "@loader_path/../lib" + ] + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libffi.8.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libffi.8.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgio-2.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgio-2.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libglib-2.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libglib-2.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgmodule-2.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgmodule-2.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgobject-2.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgobject-2.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstapp-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstapp-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstaudio-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstaudio-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstbase-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstbase-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstnet-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstnet-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstpbutils-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstpbutils-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstreamer-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstreamer-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstrtp-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstrtp-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgsttag-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgsttag-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libgstvideo-1.0.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libgstvideo-1.0.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libintl.8.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libintl.8.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libopus.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libopus.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libpcre2-8.0.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libpcre2-8.0.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/lib/libz.1.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.lib.libz.1.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/plugins/libgstapp.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.plugins.libgstapp.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/plugins/libgstaudioconvert.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.plugins.libgstaudioconvert.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/plugins/libgstaudioresample.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.plugins.libgstaudioresample.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/plugins/libgstcoreelements.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.plugins.libgstcoreelements.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/plugins/libgstopus.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.plugins.libgstopus.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/plugins/libgstrtp.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.plugins.libgstrtp.dylib", + "machOType": 6 + }, + { + "path": "Contents/Resources/codex/codex-resources/voice/plugins/libgstrtpmanager.dylib", + "role": "host-companion", + "identifier": "dev.rat-things.runtime.voice.plugins.libgstrtpmanager.dylib", + "machOType": 6 + }, + { + "path": "Contents/Helpers/rat-native-worker", + "role": "vm-helper", + "identifier": "dev.rat-things.runtime.vm-helper", + "machOType": 2, + "entitlements": "virtualization" + } +] diff --git a/scripts/build-codex-runtime.mjs b/scripts/build-codex-runtime.mjs index 692892b..d611a20 100644 --- a/scripts/build-codex-runtime.mjs +++ b/scripts/build-codex-runtime.mjs @@ -98,8 +98,9 @@ async function verifySourceTree() { try { await git(['read-tree', source.revision], env); for (const patch of source.patches) await git(['apply', '--cached', join(definition, patch)], env); - const expected = await git(['diff', '--no-ext-diff', '--binary', '--cached', source.revision], env); - const actual = await git(['diff', '--no-ext-diff', '--binary', source.revision]); + const diff = ['diff', '--no-ext-diff', '--binary', '--src-prefix=a/', '--dst-prefix=b/']; + const expected = await git([...diff, '--cached', source.revision], env); + const actual = await git([...diff, source.revision]); const extra = await git(['ls-files', '--others', '--exclude-standard']); if (actual !== expected || extra.trim()) throw new Error('Native checkout contains changes beyond the pinned patches. Use a clean dedicated build directory.'); return (await git(['write-tree'], env)).trim(); diff --git a/scripts/build-desktop.mjs b/scripts/build-desktop.mjs index 72bc8ec..e55f8d4 100644 --- a/scripts/build-desktop.mjs +++ b/scripts/build-desktop.mjs @@ -2,6 +2,8 @@ import { spawnSync } from 'node:child_process'; import { chmod, copyFile, cp, mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import hostCodePolicy from '../runtime/native/host-code-policy.json' with { type: 'json' }; +import companionPackages from '../runtime/codex/companion-packages.json' with { type: 'json' }; const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); async function replaceExecutable(source, destination) { @@ -42,7 +44,13 @@ if (process.platform === 'darwin') { await rm(`${bundle}/Resources/codex-runtime`, { recursive: true, force: true }); await cp(runtime, `${bundle}/Resources/codex-runtime`, { recursive: true }); await cp(resolve(root, 'runtime/codex/licenses'), `${bundle}/Resources/codex-licenses`, { recursive: true }); - for (const executable of ['bin/codex', 'bin/codex-code-mode-host', 'codex-path/rg', 'codex-resources/zsh/bin/zsh']) { + const companions = companionPackages[`@openai/codex-darwin-${process.arch}`]; + if (!companions) throw new Error('The bundled host Codex requires a reviewed companion inventory'); + for (const file of companions.files) { + await chmod(`${bundle}/Resources/codex-runtime/${file.path}`, file.executable ? 0o755 : 0o444); + } + for (const policy of hostCodePolicy.filter(policy => policy.role !== 'vm-helper')) { + const executable = policy.path.slice('Contents/Resources/codex/'.length); const signature = spawnSync('codesign', ['--force', '--sign', '-', `${bundle}/Resources/codex-runtime/${executable}`], { stdio: 'inherit' }); if (signature.error) throw signature.error; if (signature.status !== 0) process.exit(signature.status ?? 1); diff --git a/scripts/build-native-app.mjs b/scripts/build-native-app.mjs index 768c2e9..0541286 100644 --- a/scripts/build-native-app.mjs +++ b/scripts/build-native-app.mjs @@ -85,7 +85,7 @@ export async function assembleNativeApp(options, { repositoryRoot = root, const npmLock = JSON.parse((await input(join(repository, 'package-lock.json'), 'package-lock.json')).data); if (npmLock.packages?.['node_modules/esbuild']?.version !== esbuildVersion) throw new Error('Installed app bundling requires the locked esbuild version.'); const protocol = JSON.parse((await input(join(repository, 'runtime/native/protocol.json'), 'runtime/native/protocol.json')).data); - for (const name of ['scripts/build-native-app.mjs', 'scripts/native-app-inputs.mjs', 'scripts/build-native-release.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs', 'scripts/native-guest-inputs.mjs', 'scripts/javascript-notices.mjs', 'scripts/native-build-files.mjs', 'scripts/native-guest-archive.mjs']) { + for (const name of ['runtime/native/host-code-policy.json', 'scripts/build-native-app.mjs', 'scripts/native-app-inputs.mjs', 'scripts/build-native-release.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs', 'scripts/native-guest-inputs.mjs', 'scripts/javascript-notices.mjs', 'scripts/native-build-files.mjs', 'scripts/native-guest-archive.mjs']) { await input(join(repository, name), name); } await mkdir(output, { mode: 0o700 }); diff --git a/scripts/build-native-release.mjs b/scripts/build-native-release.mjs index 9138b46..344ba36 100644 --- a/scripts/build-native-release.mjs +++ b/scripts/build-native-release.mjs @@ -2,7 +2,8 @@ import { execFile } from 'node:child_process'; import { createHash } from 'node:crypto'; import { constants } from 'node:fs'; import { chmod, lstat, mkdir, open, readdir, realpath, writeFile } from 'node:fs/promises'; -import { dirname, join, resolve } from 'node:path'; +import { dirname, join, posix, resolve } from 'node:path'; +import hostCodePolicy from '../runtime/native/host-code-policy.json' with { type: 'json' }; import { fileURLToPath } from 'node:url'; import { isDeepStrictEqual, promisify } from 'node:util'; import { validateCodexRuntimeArtifact } from './codex-runtime-artifact.mjs'; @@ -26,13 +27,7 @@ const signaturePaths = ['CodeDirectory', 'CodeRequirements', 'CodeResources', 'C const limits = { entries: 4096, fileBytes: 768 * 1024 ** 2, totalBytes: 2 * 1024 ** 3, manifestBytes: 128 * 1024 }; const guestArtifacts = ['Image', 'worker-initramfs.gz', 'archive-inventory.json', 'worker-dependencies.json', 'worker-notices.json', 'worker-metafile.json', 'worker-build.json', 'build.log']; const jitEntitlements = ['com.apple.security.cs.allow-jit', 'com.apple.security.cs.allow-unsigned-executable-memory']; -export const nativeExecutablePolicy = Object.freeze([ - { path: 'Contents/Resources/codex/bin/codex', role: 'host-codex', identifier: 'dev.rat-things.runtime.codex', entitlements: 'jit' }, - { path: 'Contents/Resources/codex/bin/codex-code-mode-host', role: 'host-companion', identifier: 'dev.rat-things.runtime.code-mode-host', entitlements: 'jit' }, - { path: 'Contents/Resources/codex/codex-path/rg', role: 'host-companion', identifier: 'dev.rat-things.runtime.ripgrep' }, - { path: 'Contents/Resources/codex/codex-resources/zsh/bin/zsh', role: 'host-companion', identifier: 'dev.rat-things.runtime.zsh' }, - { path: 'Contents/Helpers/rat-native-worker', role: 'vm-helper', identifier: 'dev.rat-things.runtime.vm-helper', entitlements: 'virtualization' }, -]); +export const nativeExecutablePolicy = Object.freeze(hostCodePolicy.map(policy => Object.freeze(policy))); const executables = new Map(nativeExecutablePolicy.map(value => [value.path, value])); export function parseNativeReleaseOptions(args) { @@ -59,12 +54,14 @@ function maximumVersion(versions) { }).at(-1); } -export function inspectMachO(bytes) { +export function inspectMachO(bytes, policy = { machOType: 2 }) { if (bytes.length < 32 || bytes.readUInt32LE(0) !== 0xfeedfacf || bytes.readUInt32LE(4) !== 0x100000c - || bytes.readUInt32LE(12) !== 2) throw new Error('Expected a thin ARM64 Mach-O executable.'); + || ![2, 6].includes(policy.machOType) || bytes.readUInt32LE(12) !== policy.machOType) { + throw new Error('Expected a thin ARM64 Mach-O matching the fixed host code policy.'); + } const count = bytes.readUInt32LE(16); const end = 32 + bytes.readUInt32LE(20); if (!count || count > 4096 || end > bytes.length) throw new Error('Mach-O load commands exceed their bounds.'); - const versions = []; const libraries = []; + const versions = []; const libraries = []; const rpaths = []; let offset = 32; for (let index = 0; index < count; index++) { if (offset + 8 > end) throw new Error('Truncated Mach-O load command.'); @@ -76,17 +73,29 @@ export function inspectMachO(bytes) { } else if (command === 0x24) { if (size < 16) throw new Error('Invalid macOS deployment command.'); versions.push(version(bytes.readUInt32LE(offset + 8))); - } else if ([0xc, 0x80000018, 0x8000001f, 0x20, 0x80000023].includes(command)) { - if (size < 24) throw new Error('Invalid linked library command.'); + } else if ([0xc, 0x80000018, 0x8000001f, 0x20, 0x80000023, 0x8000001c].includes(command)) { + const minimum = command === 0x8000001c ? 12 : 24; + if (size < minimum) throw new Error('Invalid linked library command.'); const start = offset + bytes.readUInt32LE(offset + 8); const terminator = bytes.indexOf(0, start); - if (start < offset + 24 || start >= offset + size || terminator < start || terminator >= offset + size) throw new Error('Invalid linked library name.'); + if (start < offset + minimum || start >= offset + size || terminator < start || terminator >= offset + size) throw new Error('Invalid linked library name.'); const library = bytes.toString('utf8', start, terminator); - if (!library.startsWith('/usr/lib/') && !library.startsWith('/System/Library/')) throw new Error(`Runtime executable requires an unbundled library: ${library}.`); - libraries.push(library); + if (command === 0x8000001c) rpaths.push(library); + else libraries.push(library); } offset += size; } if (offset !== end || !versions.length || versions.some(value => Number(value.split('.')[0]) < 11)) throw new Error('Missing or inconsistent macOS deployment commands.'); + if (!isDeepStrictEqual(rpaths, policy.rpaths ?? [])) throw new Error('Mach-O search paths differ from the fixed host code policy.'); + for (const library of libraries) { + const system = (library.startsWith('/usr/lib/') || library.startsWith('/System/Library/')) && posix.normalize(library) === library; + const local = name => policy.path && name.startsWith('@loader_path/') + ? posix.normalize(posix.join(posix.dirname(policy.path), name.slice('@loader_path/'.length))) : undefined; + const candidates = library.startsWith('@rpath/') + ? rpaths.map(path => local(`${path}/${library.slice('@rpath/'.length)}`)) : [local(library)]; + if (!system && !candidates.some(path => executables.get(path)?.machOType === 6)) { + throw new Error(`Runtime code requires an unbundled library: ${library}.`); + } + } return { minimumMacOS: maximumVersion(versions), libraries }; } @@ -265,7 +274,7 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru sources.push({ path: label, bytes: result.bytes, sha256: result.sha256 }); return result; }; - const builderSources = ['scripts/build-native-release.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs', 'scripts/native-guest-inputs.mjs', 'scripts/javascript-notices.mjs', 'scripts/native-build-files.mjs', 'scripts/native-guest-archive.mjs']; + const builderSources = ['runtime/native/host-code-policy.json', 'scripts/build-native-release.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs', 'scripts/native-guest-inputs.mjs', 'scripts/javascript-notices.mjs', 'scripts/native-build-files.mjs', 'scripts/native-guest-archive.mjs']; for (const path of builderSources) await readInput(join(root, path), path); const originalHost = await readInput(join(hostArtifact, 'artifact.json'), 'host/artifact.json'); const sourceDefinition = JSON.parse((await readInput(join(definitionRoot, 'source.json'), 'definition/source.json')).data); @@ -335,7 +344,7 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru const copied = await checkedFile(file.source, { expected: file, destination: join(bundle, path), mode: file.mode, capture: executables.has(path) }); tracked.set(file.source, { bytes: copied.bytes, sha256: copied.sha256 }); if (!executables.has(path)) staged.set(path, { bytes: copied.bytes, sha256: copied.sha256 }); - if (executables.has(path)) { machOs.push({ path, ...inspectMachO(copied.data) }); unsigned.push({ path, bytes: copied.bytes, sha256: copied.sha256 }); } + if (executables.has(path)) { machOs.push({ path, ...inspectMachO(copied.data, executables.get(path)) }); unsigned.push({ path, bytes: copied.bytes, sha256: copied.sha256 }); } } for (const name of ['Image', 'worker-initramfs.gz']) { const path = `Contents/Resources/linux/${name}`; expectedPaths.push(path); @@ -365,7 +374,7 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru await run('/usr/bin/codesign', ['--verify', '--strict', '--all-architectures', '--test-requirement', `=${requirement(policy.identifier)}`, filename]); const signed = await checkedFile(filename, { capture: true }); const { path: _path, ...deployment } = machOs.find(value => value.path === policy.path); - if (!isDeepStrictEqual(inspectMachO(signed.data), deployment)) throw new Error('Signing changed executable deployment requirements.'); + if (!isDeepStrictEqual(inspectMachO(signed.data, policy), deployment)) throw new Error('Signing changed executable deployment requirements.'); const signedMetadata = await run('/usr/bin/codesign', ['--display', '--verbose=4', '--entitlements', ':-', filename]); staged.set(policy.path, { bytes: signed.bytes, sha256: signed.sha256 }); signatures.push({ path: policy.path, identifier: policy.identifier, prior, arguments: args, signedMetadata, signed: { bytes: signed.bytes, sha256: signed.sha256 } }); diff --git a/scripts/codex-runtime-artifact.mjs b/scripts/codex-runtime-artifact.mjs index ac8d2c2..85bd96d 100644 --- a/scripts/codex-runtime-artifact.mjs +++ b/scripts/codex-runtime-artifact.mjs @@ -96,7 +96,9 @@ export async function validateCodexRuntimeArtifact(artifactRoot, { throw new Error(`Codex runtime companion differs from the pinned npm package: ${path}`); } if (path === 'bin/codex' || companion.executable) { - if (!isExecutable(bytes, target)) throw new Error(`Codex runtime executable is not ${target.platform} ${target.arch.toUpperCase()}: ${path}`); + // Only the rebuilt entrypoint can differ from the trusted package bytes. + // Companions include shared libraries and data with executable file modes. + if (path === 'bin/codex' && !isExecutable(bytes, target)) throw new Error(`Codex runtime executable is not ${target.platform} ${target.arch.toUpperCase()}: ${path}`); if (!((await lstat(filename)).mode & 0o111)) throw new Error(`Codex runtime executable permission is missing: ${path}`); } files.push({ path, source: filename, sha256: file.sha256, mode: companion.executable ? 0o755 : 0o444 }); diff --git a/src/adapters/local-native-verifier.ts b/src/adapters/local-native-verifier.ts index 93c2539..0a89fbf 100644 --- a/src/adapters/local-native-verifier.ts +++ b/src/adapters/local-native-verifier.ts @@ -1,4 +1,5 @@ import { spawn } from 'node:child_process'; +import hostCodePolicy from '../../runtime/native/host-code-policy.json' with { type: 'json' }; import { lstat, realpath } from 'node:fs/promises'; import { isAbsolute, relative, resolve, sep } from 'node:path'; import type { NativeBundleVerification, NativeBundleVerifier, NativeCopyLimits } from '../core/native-installation-ports.js'; @@ -9,13 +10,7 @@ export const NATIVE_VERIFIER_LIMITS: NativeCopyLimits = Object.freeze({ manifestBytes: 128 * 1024, depth: 32, pathBytes: 1024, }); const limitNames = ['entries', 'fileBytes', 'totalBytes', 'manifestBytes', 'depth', 'pathBytes'] as const; -const executablePaths = Object.freeze([ - 'Contents/Helpers/rat-native-worker', - 'Contents/Resources/codex/bin/codex', - 'Contents/Resources/codex/bin/codex-code-mode-host', - 'Contents/Resources/codex/codex-path/rg', - 'Contents/Resources/codex/codex-resources/zsh/bin/zsh', -]); +const executablePaths = Object.freeze(hostCodePolicy.map(policy => policy.path)); const stages = new Set(['arguments', 'bounds', 'filesystem', 'manifest', 'bundle-signature', 'executable-signature']); const reasons = new Set(['unsigned', 'ad_hoc', 'wrong_team', 'wrong_identifier', 'invalid']); const maximumDeadlineMs = 60_000; diff --git a/src/app/local-native-service.ts b/src/app/local-native-service.ts index cebf807..805e698 100644 --- a/src/app/local-native-service.ts +++ b/src/app/local-native-service.ts @@ -126,7 +126,7 @@ export class LocalNativeService { const release = status.selected; const companionRoot = join(release.bundlePath, 'Contents/Resources/codex'); const environment = Object.freeze({ ...this.environment, CODEX_BINARY: release.hostCodexPath, - PATH: [join(companionRoot, 'codex-path'), join(companionRoot, 'codex-resources/zsh/bin'), '/usr/bin', '/bin', '/usr/sbin', '/sbin'].join(':') }); + PATH: [join(companionRoot, 'codex-path'), '/usr/bin', '/bin', '/usr/sbin', '/sbin'].join(':') }); this.state = { kind: 'ready', release, host: Object.freeze({ binary: release.hostCodexPath, environment }) }; } else this.state = { kind: status.change.kind === 'failed' ? 'failed' : 'needs_setup' }; } diff --git a/src/runner/codex-app-server.ts b/src/runner/codex-app-server.ts index eded26d..e6a67c4 100644 --- a/src/runner/codex-app-server.ts +++ b/src/runner/codex-app-server.ts @@ -511,7 +511,7 @@ export function sandboxPolicyFor( } function appServerConfig(request: CodexAppServerRequest): Record { - const config: Record = { ...request.sessionConfig }; + const config: Record = { ...request.sessionConfig, ...environmentToolConfig(request.environments) }; if (request.onServerRequest && !request.sessionConfig) { config['features.default_mode_request_user_input'] = true; } @@ -529,6 +529,10 @@ function appServerConfig(request: CodexAppServerRequest): Record 0 ? { config } : {}; } +export function environmentToolConfig(environments: CodexAppServerRequest['environments']): Record { + return environments?.length === 0 ? { 'features.shell_tool': false, 'features.view_image': false } : {}; +} + interface SkillInput { type: 'skill'; name: string; diff --git a/src/runner/session-runtime.ts b/src/runner/session-runtime.ts index cb50355..2a11ae5 100644 --- a/src/runner/session-runtime.ts +++ b/src/runner/session-runtime.ts @@ -2,7 +2,7 @@ import type { AgentSessionInputMessageParam, AgentSessionInputParam, Turn } from import { CodexRpcClient, CodexRpcError, type CodexRpcEvent } from '../adapters/codex-rpc.js'; import { bindSessionTurn, initialSessionRuntime, reduceSessionRuntime, resolveSessionFunction, rootTurnBusy, stoppedSessionRuntime, type SessionRuntimeState } from '../core/session-runtime-planning.js'; import type { CodexAppServerRequest } from './codex-app-server.js'; -import { sandboxPolicyFor } from './codex-app-server.js'; +import { environmentToolConfig, sandboxPolicyFor } from './codex-app-server.js'; import type { SessionModelSettings } from '../domain/session-execution.js'; import { checkpointWorkspace, type WorkspaceHandoffPorts } from './workspace-handoff.js'; @@ -28,6 +28,7 @@ export class SessionRuntime { private closed = false; private expired = false; private checkpointing = false; + private checkpointActivity = false; private checkpointFailure: unknown; private idleTimer: ReturnType | undefined; private lifetimeTimer: ReturnType | undefined; @@ -71,8 +72,14 @@ export class SessionRuntime { if (!ports || !this.state || this.closed || this.checkpointing) throw new Error('Session checkpoint is unavailable'); // Set synchronously so a native disconnect cannot finish the Run during shutdown. this.checkpointing = true; + this.checkpointActivity = false; let transitionStarted = false; let threadIds: string[] = []; + const rootThreadId = this.state.rootThreadId; + const assertQuiescent = () => { + if (this.checkpointActivity || this.requests.size || this.state!.requiredActions.length + || this.state!.turns.some(binding => !terminal(binding.turn))) throw new Error('Native activity changed during checkpoint shutdown'); + }; try { return await checkpointWorkspace({ ...ports, inspectIdle: async () => { @@ -80,46 +87,40 @@ export class SessionRuntime { && !this.state!.requiredActions.length && !this.state!.turns.some(binding => !terminal(binding.turn)); // Empty native threads may never materialize a rollout. Reject these before // beginning shutdown so we cannot publish an unresumable checkpoint. - if (idle) await this.checkPersistedHistory(this.state!.rootThreadId); - return { idle, threadIds: [this.state!.rootThreadId] }; + if (idle) { + threadIds = await this.loadedCheckpointThreads(); + if (!threadIds.includes(rootThreadId)) throw new Error('Root thread is not loaded'); + for (const threadId of threadIds) await this.checkPersistedHistory(threadId); + assertQuiescent(); + } + return { idle, threadIds }; }, begin: async () => { transitionStarted = true; clearTimeout(this.idleTimer); clearTimeout(this.lifetimeTimer); + assertQuiescent(); await ports.begin(); }, shutdownNative: async () => { - const loaded = async () => { - const ids: string[] = []; - let cursor: string | undefined; - const cursors = new Set(); - do { - const page = await this.rpc.call('thread/loaded/list', { limit: 100, ...(cursor ? { cursor } : {}) }); - if (!record(page) || !Array.isArray(page.data) || page.data.some(id => typeof id !== 'string') || ids.length + page.data.length > 1000 - || page.nextCursor != null && typeof page.nextCursor !== 'string') throw new Error('Invalid native thread list'); - ids.push(...page.data as string[]); - cursor = page.nextCursor as string | undefined; - if (cursor && cursors.has(cursor)) throw new Error('Native thread pagination repeated'); - if (cursor) cursors.add(cursor); - } while (cursor); - return [...new Set(ids)]; - }; - threadIds = await loaded(); - if (!threadIds.includes(this.state!.rootThreadId)) throw new Error('Root thread is not loaded'); - // Stop descendants before the root so parent shutdown cannot hide a failed child flush. - for (const threadId of [...threadIds.filter(id => id !== this.state!.rootThreadId), this.state!.rootThreadId]) { - const result = await this.rpc.call('thread/checkpoint', { threadId }, 35_000); - if (!record(result) || result.threadId !== threadId || result.flushed !== true) throw new Error('Native thread checkpoint was not acknowledged'); - await this.checkPersistedHistory(threadId); - } - if ((await loaded()).some(id => !threadIds.includes(id))) throw new Error('Native threads changed during checkpoint shutdown'); + assertQuiescent(); + // One tree shutdown can also stop siblings and parents. The native bridge + // must validate the complete idle set before it stops any of those writers. + const result = await this.rpc.call('thread/checkpoint', { threadId: rootThreadId, expectedThreadIds: threadIds }, 35_000); + if (!record(result) || result.threadId !== rootThreadId || result.flushed !== true + || !sameThreadIds(checkpointThreadIds(result.threadIds), threadIds)) throw new Error('Native thread checkpoint was not acknowledged'); + assertQuiescent(); + for (const threadId of threadIds) await this.checkPersistedHistory(threadId); + // Successful shutdown may unregister captured threads. Their exact flush + // acknowledgement and readable histories remain required; new IDs do not. + if ((await this.loadedCheckpointThreads()).some(id => !threadIds.includes(id))) throw new Error('Native threads changed during checkpoint shutdown'); + assertQuiescent(); if (!this.rpc.closeCheckpoint) throw new Error('Native checkpoint shutdown is unsupported'); await this.rpc.closeCheckpoint(); this.disconnected(); - // Every loaded thread was checked above; the outer barrier identifies the root. - return { threadIds: [this.state!.rootThreadId], flushed: true, forced: false }; + assertQuiescent(); + return { threadIds, flushed: true, forced: false }; }, - commit: () => ports.commit(this.snapshot()), + commit: () => { assertQuiescent(); return ports.commit(this.snapshot()); }, settle: () => {}, }); } catch (error) { if (transitionStarted) this.checkpointFailure = error; throw error; } @@ -130,6 +131,20 @@ export class SessionRuntime { } } + private async loadedCheckpointThreads(): Promise { + let ids: string[] = []; + let cursor: string | undefined; + const cursors = new Set(); + do { + const page = checkpointThreadPage(await this.rpc.call('thread/loaded/list', { limit: 100, ...(cursor ? { cursor } : {}) })); + ids = checkpointThreadIds([...ids, ...page.ids]); + cursor = page.nextCursor; + if (cursor && cursors.has(cursor)) throw new Error('Native thread pagination repeated'); + if (cursor) cursors.add(cursor); + } while (cursor); + return ids; + } + private async checkPersistedHistory(threadId: string): Promise { const history = await this.rpc.call('thread/turns/list', { threadId, limit: 1, itemsView: 'summary' }); if (!record(history) || !Array.isArray(history.data)) throw new Error('Native checkpoint history is unavailable'); @@ -149,7 +164,7 @@ export class SessionRuntime { serviceTier: request.serviceTier, environments: request.environments, dynamicTools: request.dynamicTools, - config: { ...request.sessionConfig, web_search: request.webSearch ?? 'disabled', + config: { ...request.sessionConfig, ...environmentToolConfig(request.environments), web_search: request.webSearch ?? 'disabled', 'features.default_mode_request_user_input': false, 'tools.experimental_request_user_input.enabled': false, 'orchestrator.skills.enabled': false, 'skills.bundled.enabled': false, 'features.goals': false }, }; @@ -318,6 +333,7 @@ export class SessionRuntime { } private event(event: CodexRpcEvent): void { + if (this.checkpointing && checkpointHasActivity(event)) this.checkpointActivity = true; if (!this.state) { this.earlyEvents.push(event); return; } const nativeTurn = record(event.params.turn) ? event.params.turn.id : event.params.turnId; // Hydration notifications can arrive after thread/fork returns, even while @@ -369,6 +385,7 @@ export class SessionRuntime { } private async serverRequest(event: CodexRpcEvent & { requestId: string | number }): Promise { + if (this.checkpointing) { this.checkpointActivity = true; throw new Error('Native interaction is unavailable during checkpoint shutdown'); } if (event.method === 'currentTime/read') return { currentTimeAt: this.now() }; if (!this.declaredFunction(event)) { // Approval-shaped requests fail closed; a guest never widens its own envelope. @@ -415,6 +432,33 @@ export class SessionRuntime { } } +function checkpointThreadIds(value: unknown): string[] { + if (!Array.isArray(value) || value.length > 1000 + || value.some(id => typeof id !== 'string' || !id.length || id.length > 256 || id.trim() !== id) + || new Set(value).size !== value.length) throw new Error('Invalid native checkpoint thread identities'); + return [...value] as string[]; +} + +function sameThreadIds(actual: readonly string[], expected: readonly string[]): boolean { + return actual.length === expected.length && expected.every(id => actual.includes(id)); +} + +function checkpointThreadPage(value: unknown): { ids: string[]; nextCursor?: string } { + if (!record(value)) throw new Error('Invalid native thread list'); + const ids = checkpointThreadIds(value.data); + const cursor = value.nextCursor; + if (ids.length > 100 || cursor != null && (typeof cursor !== 'string' || !cursor.length || cursor.length > 256 || !ids.length)) { + throw new Error('Invalid native thread pagination'); + } + return { ids, ...(typeof cursor === 'string' ? { nextCursor: cursor } : {}) }; +} + +function checkpointHasActivity(event: CodexRpcEvent): boolean { + return event.requestId !== undefined || event.method.startsWith('item/') + || ['thread/started', 'turn/started', 'turn/completed', 'rawResponseItem/completed', 'rawResponse/completed', 'error'].includes(event.method) + || event.method === 'thread/status/changed' && record(event.params.status) && event.params.status.type === 'active'; +} + function nativeInput(input: AgentSessionInputMessageParam[]) { return input.flatMap((message) => message.content.map((part) => part.type === 'input_text' ? { type: 'text', text: part.text } : { type: 'image', url: part.image_url })); } function terminal(turn: Turn): boolean { return ['completed', 'cancelled', 'failed'].includes(turn.status); } function record(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value); } diff --git a/testing/local-runtime/native-signatures/README.md b/testing/local-runtime/native-signatures/README.md index 0af895a..cc7c5a5 100644 --- a/testing/local-runtime/native-signatures/README.md +++ b/testing/local-runtime/native-signatures/README.md @@ -15,7 +15,7 @@ python3 testing/local-runtime/native-signatures/fixtures.py \ npx vitest run tests/adapters/local-native-verifier.test.ts --no-cache ``` -Read the final JSON line for the result. `evidence/latest-run.txt` names the directory containing `results.json` and `commands.json`. Every accepted fixture must return the exact manifest bytes and all five executable paths. +Read the final JSON line for the result. `evidence/latest-run.txt` names the directory containing `results.json` and `commands.json`. Every accepted fixture must return the exact manifest bytes and every path in the fixed host code policy. The suite preserves the complete Codex package at `Contents/Resources/codex`. Its descriptor stays beside `bin`, `codex-path`, and `codex-resources`. The VM helper stays at `Contents/Helpers/rat-native-worker`. The outer `Runtime.bundle` uses `CFBundlePackageType=BNDL` without `CFBundleExecutable`. diff --git a/testing/local-runtime/native-signatures/fixtures.py b/testing/local-runtime/native-signatures/fixtures.py index 1ddb3a2..0b3abd0 100644 --- a/testing/local-runtime/native-signatures/fixtures.py +++ b/testing/local-runtime/native-signatures/fixtures.py @@ -14,13 +14,8 @@ IDENTITY = 'Developer ID Application: Gregory Pazo (PB8NAVKU57)' BUNDLE_ID = 'dev.rat-things.runtime' -EXECUTABLES = { - 'Contents/Helpers/rat-native-worker': ('vm-helper', BUNDLE_ID + '.vm-helper'), - 'Contents/Resources/codex/bin/codex': ('host-codex', BUNDLE_ID + '.codex'), - 'Contents/Resources/codex/bin/codex-code-mode-host': ('host-companion', BUNDLE_ID + '.code-mode-host'), - 'Contents/Resources/codex/codex-path/rg': ('host-companion', BUNDLE_ID + '.ripgrep'), - 'Contents/Resources/codex/codex-resources/zsh/bin/zsh': ('host-companion', BUNDLE_ID + '.zsh'), -} +POLICY = json.loads((Path(__file__).resolve().parents[3] / 'runtime/native/host-code-policy.json').read_text()) +EXECUTABLES = {item['path']: (item['role'], item['identifier']) for item in POLICY} SIGNATURES = {'CodeDirectory', 'CodeRequirements', 'CodeResources', 'CodeSignature'} MANIFEST = 'Contents/Resources/runtime-manifest.json' LIMITS = [4096, 768 * 1024 * 1024, 2 * 1024 * 1024 * 1024, 128 * 1024, 32, 1024] @@ -98,7 +93,9 @@ def verify(name, bundle, accepted, stage=None, reason=None, limits=LIMITS): source = root / 'fixture.c' source.write_text('int main(void) { return 0; }\n') binary = root / 'fixture' + library = root / 'fixture.dylib' command(['xcrun', 'clang', '-arch', 'arm64', '-arch', 'x86_64', source, '-o', binary]) + command(['xcrun', 'clang', '-dynamiclib', '-arch', 'arm64', '-arch', 'x86_64', source, '-o', library]) base = root / 'good' / 'Runtime.bundle' (base / 'Contents/Resources/licenses').mkdir(parents=True) (base / 'Contents/Info.plist').write_bytes(plistlib.dumps({ @@ -107,7 +104,7 @@ def verify(name, bundle, accepted, stage=None, reason=None, limits=LIMITS): for path, (_, identifier) in EXECUTABLES.items(): target = base / path target.parent.mkdir(parents=True, exist_ok=True) - shutil.copyfile(binary, target) + shutil.copyfile(library if path.endswith('.dylib') else binary, target) target.chmod(0o755) sign(target, identifier) for path in ['Contents/Resources/kernel', 'Contents/Resources/initramfs', 'Contents/Resources/licenses/LICENSE', @@ -120,7 +117,7 @@ def verify(name, bundle, accepted, stage=None, reason=None, limits=LIMITS): command(['/usr/bin/codesign', '--display', '--requirements', '-', '--verbose=4', base]) for path in EXECUTABLES: command(['/usr/bin/codesign', '--display', '--requirements', '-', '--verbose=4', base / path]) - verify('valid-five-executable-layout', base, True) + verify('valid-pinned-host-code-layout', base, True) verify('production-ceilings-clamp', base, True, limits=[9_007_199_254_740_991] * 6) source_copy = clone('copy-source') installed = root / 'installed' / 'Runtime.bundle' diff --git a/tests/adapters/local-native-verifier.test.ts b/tests/adapters/local-native-verifier.test.ts index 2f312ba..c2af072 100644 --- a/tests/adapters/local-native-verifier.test.ts +++ b/tests/adapters/local-native-verifier.test.ts @@ -2,14 +2,11 @@ import { chmod, mkdtemp, mkdir, readFile, realpath, rm, symlink, writeFile } fro import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { afterEach, describe, expect, it } from 'vitest'; +import hostCodePolicy from '../../runtime/native/host-code-policy.json' with { type: 'json' }; import { LocalNativeBundleVerifier, NATIVE_VERIFIER_LIMITS } from '../../src/adapters/local-native-verifier.js'; const directories: string[] = []; -const executablePaths = [ - 'Contents/Helpers/rat-native-worker', 'Contents/Resources/codex/bin/codex', - 'Contents/Resources/codex/bin/codex-code-mode-host', 'Contents/Resources/codex/codex-path/rg', - 'Contents/Resources/codex/codex-resources/zsh/bin/zsh', -]; +const executablePaths = hostCodePolicy.map(policy => policy.path); const receipt = (manifest = Buffer.from([0, 255, 128, 13, 10])) => ({ schemaVersion: 1, kind: 'authenticated', manifestBase64: manifest.toString('base64'), executablePaths, }); @@ -43,6 +40,14 @@ describe('trusted native verifier subprocess boundary', () => { expect(await test.verifier.verify(test.input)).toEqual({ kind: 'authenticated', manifestBytes: Buffer.alloc(0), executablePaths }); }); + it('rejects a successful receipt that omits a pinned dylib or adds an unreviewed executable', async () => { + const dylib = executablePaths.find(path => path.endsWith('.dylib'))!; + for (const paths of [executablePaths.filter(path => path !== dylib), [...executablePaths, 'Contents/Resources/codex/codex-resources/zsh/bin/zsh']]) { + const test = await fixture(response({ ...receipt(), executablePaths: paths })); + expect(await test.verifier.verify(test.input)).toEqual(unavailable('Runtime verifier returned an invalid response')); + } + }); + it('uses fixed arguments, clamps production ceilings and clears ambient environment', async () => { const test = await fixture(); const observation = join(test.directory, 'arguments.json'); diff --git a/tests/agents/local-native-startup.test.ts b/tests/agents/local-native-startup.test.ts index 3ea8a95..42c6095 100644 --- a/tests/agents/local-native-startup.test.ts +++ b/tests/agents/local-native-startup.test.ts @@ -125,7 +125,7 @@ it('pins the copied host and companion paths without accepting ambient executabl const host = service.hostCodex(); const bundle = join(test.profile, 'runtime/versions', test.bundle.id, 'Runtime.bundle'); expect(host.binary).toBe(join(bundle, 'Contents/Helpers/codex')); - expect(host.environment.PATH).toBe(`${bundle}/Contents/Resources/codex/codex-path:${bundle}/Contents/Resources/codex/codex-resources/zsh/bin:/usr/bin:/bin:/usr/sbin:/sbin`); + expect(host.environment.PATH).toBe(`${bundle}/Contents/Resources/codex/codex-path:/usr/bin:/bin:/usr/sbin:/sbin`); expect(host.environment.HTTPS_PROXY).toBe('http://proxy.example'); expect(Object.isFrozen(host)).toBe(true); expect(Object.isFrozen(host.environment)).toBe(true); diff --git a/tests/agents/native-checkpoint.test.ts b/tests/agents/native-checkpoint.test.ts new file mode 100644 index 0000000..7760971 --- /dev/null +++ b/tests/agents/native-checkpoint.test.ts @@ -0,0 +1,214 @@ +import { createServer, type ServerResponse } from 'node:http'; +import { once } from 'node:events'; +import { mkdtemp, rm } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join, resolve } from 'node:path'; +import { setTimeout as delay } from 'node:timers/promises'; +import { expect, it } from 'vitest'; +import { CodexRpcClient } from '../../src/adapters/codex-rpc.js'; +import type { SessionRuntimeState } from '../../src/core/session-runtime-planning.js'; +import type { Turn } from '../../src/domain/agents-api.js'; +import type { WorkspaceCheckpoint } from '../../src/domain/workspace-checkpoint.js'; +import { SessionRuntime, type SessionCheckpointOptions } from '../../src/runner/session-runtime.js'; +import { WorkspaceAdmission } from '../../src/runner/workspace-handoff.js'; + +// The private checkpoint bridge exists only in the repository's parity artifact. +// Model traffic stays on loopback; no credentials or AWS resources are used. +const native = it.skipIf(process.env.CODEX_REQUIRE_PARITY !== 'true'); +const binary = process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'); +const sessionId = 'native_checkpoint_session'; +const agentId = 'native_checkpoint_agent'; +type ModelRequest = { input: Array<{ type?: string; recipient?: string; role?: string; content?: unknown }> }; + +native.each([{ paginated: false }, { paginated: true }])('checkpoints real root and child histories and continues them in a fresh process (paginated=$paginated)', async ({ paginated }) => { + const fixture = await checkpointFixture({ paginated }); + try { + const source = fixture.create(); + await source.initialize(); + await source.start(turn('first'), input('ROOT_INPUT_MARKER: delegate the fixture task.')); + await until(() => { + const state = source.snapshot(); + return state.subagents.length === 1 && state.turns.length === 2 && state.turns.every(binding => binding.turn.status === 'completed'); + }, 'root and child completion'); + const before = source.snapshot(); + const childId = before.subagents[0]!.id; + const expectedIds = [before.rootThreadId, childId].sort(); + + const checkpoint = await source.checkpoint() as WorkspaceCheckpoint; + await source.finished; + source.assertSuccessfulShutdown(); + expect(checkpoint.rootThreadId).toBe(before.rootThreadId); + expect(fixture.acknowledgedIds).toEqual([expectedIds]); + // These host ports record ordering; this proves native journal handoff, not + // an AWS filesystem snapshot, host journal implementation or worker replacement. + expect(fixture.order).toEqual(['begin', 'native-ack', 'native-exit', 'writers', 'journal', 'storage-sync', 'commit']); + await expect(fixture.clients[0]!.call('thread/loaded/list', {})).rejects.toThrow('unavailable'); + + const successor = fixture.create(before); + const resumed = await successor.initialize(); + expect(resumed.rootThreadId).toBe(before.rootThreadId); + expect(fixture.clients).toHaveLength(2); + const freshClient = fixture.clients[1]!; + const rootHistory = await freshClient.call('thread/turns/list', { threadId: before.rootThreadId, limit: 100, itemsView: 'full' }); + const childHistory = await freshClient.call('thread/turns/list', { threadId: childId, limit: 100, itemsView: 'full' }); + expect(JSON.stringify(rootHistory)).toContain('ROOT_DURABLE_MARKER'); + expect(JSON.stringify(childHistory)).toContain('CHILD_DURABLE_MARKER'); + + await successor.start(turn('continued'), input('CONTINUE_CHECKPOINT: continue the existing child and root.')); + await until(() => { + const state = successor.snapshot(); + return state.turns.length === 4 && state.turns.every(binding => binding.turn.status === 'completed'); + }, 'resumed root and child completion'); + const after = successor.snapshot(); + expect(after.subagents.map(child => child.id)).toEqual([childId]); + expect(after.rootThreadId).toBe(before.rootThreadId); + expect(fixture.rootRequests).toHaveLength(4); + expect(fixture.childRequests).toHaveLength(2); + // The model inputs in the successor process must contain disk-restored + // native history, independently of the host's saved SessionRuntimeState. + expect(JSON.stringify(fixture.rootRequests[2])).toContain('ROOT_DURABLE_MARKER'); + expect(JSON.stringify(fixture.childRequests[1])).toContain('CHILD_DURABLE_MARKER'); + expect(JSON.stringify(after.turns.filter(binding => binding.turn.id === 'continued'))).toContain('ROOT_CONTINUED'); + expect(JSON.stringify(after.turns.filter(binding => binding.threadId === childId))).toContain('CHILD_CONTINUED'); + } finally { await fixture.close(); } +}, 60_000); + +native('rejects an incomplete thread set and a busy child without shutting down either thread', async () => { + const fixture = await checkpointFixture({ paginated: false, holdChild: true }); + try { + const runtime = fixture.create(); + const rootId = (await runtime.initialize()).rootThreadId; + await runtime.start(turn('first'), input('ROOT_INPUT_MARKER: delegate the fixture task.')); + await until(() => { + const state = runtime.snapshot(); + return fixture.childRequests.length === 1 && state.subagents.length === 1 + && state.turns.some(binding => binding.turn.id === 'first' && binding.turn.status === 'completed') + && state.turns.some(binding => binding.turn.subagent_id !== null && binding.turn.status === 'in_progress'); + }, 'busy child with idle root'); + const childId = runtime.snapshot().subagents[0]!.id; + const rpc = fixture.clients[0]!; + await expect(rpc.call('thread/checkpoint', { threadId: rootId, expectedThreadIds: [rootId] })).rejects.toThrow(); + await expect(rpc.call('thread/checkpoint', { threadId: rootId, expectedThreadIds: [rootId, childId] })).rejects.toThrow(); + const loaded = await rpc.call('thread/loaded/list', { limit: 100 }) as { data: string[] }; + expect([...loaded.data].sort()).toEqual([rootId, childId].sort()); + expect(runtime.snapshot().turns.find(binding => binding.threadId === childId)?.turn.status).toBe('in_progress'); + fixture.releaseChild(); + await until(() => runtime.snapshot().turns.every(binding => binding.turn.status === 'completed'), 'child completion after refused shutdown'); + await expect(runtime.checkpoint()).resolves.toMatchObject({ rootThreadId: rootId }); + expect(fixture.acknowledgedIds).toEqual([[rootId, childId].sort()]); + expect(fixture.order.at(-1)).toBe('commit'); + } finally { await fixture.close(); } +}, 45_000); + +async function checkpointFixture(options: { paginated: boolean; holdChild?: boolean }) { + const home = await mkdtemp(join(tmpdir(), 'rat-native-checkpoint-')); + const rootRequests: ModelRequest[] = []; + const childRequests: ModelRequest[] = []; + const order: string[] = []; + const acknowledgedIds: string[][] = []; + const clients: CodexRpcClient[] = []; + const runtimes: SessionRuntime[] = []; + let releaseChild = () => {}; + const server = createServer(async (request, response) => { + try { + const chunks: Buffer[] = []; for await (const chunk of request) chunks.push(Buffer.from(chunk)); + if (!request.url?.endsWith('/responses')) { response.writeHead(404).end(); return; } + const body = JSON.parse(Buffer.concat(chunks).toString()) as ModelRequest; + const child = body.input.some(item => item.type === 'agent_message' && item.recipient === '/root/checkpoint_child'); + const requests = child ? childRequests : rootRequests; + requests.push(body); + const count = requests.length; + const id = `${child ? 'child' : 'root'}_${count}`; + const item = !child && count === 1 + ? tool(id, 'spawn_agent', { task_name: 'checkpoint_child', message: 'CHILD_INPUT_MARKER: complete the child task.', fork_turns: 'none' }) + : !child && count === 3 + ? tool(id, 'followup_task', { target: 'checkpoint_child', message: 'Continue the persisted child task.' }) + : { type: 'message', role: 'assistant', id: `message_${id}`, phase: 'final_answer', content: [{ type: 'output_text', + text: child ? count === 1 ? 'CHILD_DURABLE_MARKER' : 'CHILD_CONTINUED' : count === 2 ? 'ROOT_DURABLE_MARKER' : 'ROOT_CONTINUED' }] }; + response.writeHead(200, { 'content-type': 'text/event-stream' }); + response.write(`data: ${JSON.stringify({ type: 'response.created', response: { id } })}\n\n`); + const finish = () => completeResponse(response, id, item); + if (child && count === 1 && options.holdChild) releaseChild = finish; + else finish(); + } catch { response.destroy(new Error('Local checkpoint model fixture failed')); } + }); + server.listen(0, '127.0.0.1'); await once(server, 'listening'); + const address = server.address(); if (!address || typeof address === 'string') throw new Error('Missing fixture address'); + const create = (previous?: SessionRuntimeState) => { + const checkpointPorts: SessionCheckpointOptions = { + admission: new WorkspaceAdmission(), + begin: async () => { order.push('begin'); }, + stopRemainingWriters: async () => { order.push('writers'); }, + flushJournal: async () => { order.push('journal'); }, + syncStorage: async () => { order.push('storage-sync'); }, + commit: async state => { + order.push('commit'); + return { id: 'native-checkpoint', source: { runId: 'native-source', generation: 'generation' }, sandboxId: 'native-sandbox', + setupDigest: 'a'.repeat(64), policyDigest: 'b'.repeat(64), rootThreadId: state.rootThreadId, + lastRootTurnId: state.turns.filter(binding => binding.turn.subagent_id === null).at(-1)?.turn.id ?? null, + lastNativeTurnId: state.turns.filter(binding => binding.turn.subagent_id === null).at(-1)?.nativeTurnId ?? null, + createdAt: 1, reason: 'hibernate' }; + }, + abort: async () => { order.push('abort'); }, + }; + const runtime = new SessionRuntime({ sessionId, agentId, lifetime: 'host-managed', checkpoint: checkpointPorts, + ...(previous ? { previous, requiredResumeThreadId: previous.rootThreadId } : {}), + request: { binary, workspace: home, environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, + timeoutMs: 45_000, persistent: true, prompt: '', sandbox: 'read-only', networkAccess: false, environments: [], model: 'gpt-5.4', modelProvider: 'fixture', + sessionConfig: { 'model_providers.fixture': { name: 'local checkpoint fixture', base_url: `http://127.0.0.1:${address.port}`, + wire_api: 'responses', requires_openai_auth: false, supports_websockets: false, request_max_retries: 0, stream_max_retries: 0 }, + 'features.multi_agent': true, 'features.multi_agent_v2': { enabled: true, max_concurrent_threads_per_session: 2 }, + 'features.paginated_threads': options.paginated }, + }, + client: options => { + const rpc = new CodexRpcClient(options); + clients.push(rpc); + // Observe the real subprocess transport; never substitute RPC results. + return { initialize: () => rpc.initialize(), close: () => rpc.close(), + call: async (method, params, timeout) => { + const result = await rpc.call(method, params, timeout); + if (method === 'thread/checkpoint') { + order.push('native-ack'); + acknowledgedIds.push([...(result as { threadIds: string[] }).threadIds].sort()); + } + return result; + }, + closeCheckpoint: async () => { await rpc.closeCheckpoint(); order.push('native-exit'); }, + }; + }, + }); + runtimes.push(runtime); return runtime; + }; + return { create, clients, rootRequests, childRequests, order, acknowledgedIds, releaseChild: () => releaseChild(), + close: async () => { + releaseChild(); + for (const runtime of runtimes) await runtime.close(); + server.closeAllConnections(); await new Promise(done => server.close(() => done())); + await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); + }, + }; +} + +function completeResponse(response: ServerResponse, id: string, item: unknown): void { + if (response.writableEnded || response.destroyed) return; + response.end([{ type: 'response.output_item.done', item }, { type: 'response.completed', response: { id } }] + .map(event => `data: ${JSON.stringify(event)}\n\n`).join('')); +} + +function tool(id: string, name: string, args: Record) { + return { type: 'function_call', id: `function_${id}`, call_id: `call_${id}`, namespace: 'collaboration', name, arguments: JSON.stringify(args) }; +} + +function turn(id: string): Turn { + return { id, object: 'agent.session.turn', session_id: sessionId, agent_id: agentId, subagent_id: null, + status: 'queued', created_at: 1, started_at: null, completed_at: null, error: null, usage: null }; +} + +function input(text: string): import('../../src/domain/agents-api.js').AgentSessionInputMessageParam[] { + return [{ role: 'user', content: [{ type: 'input_text', text }] }]; +} + +async function until(predicate: () => boolean, description: string): Promise { + for (let attempt = 0; attempt < 1_500; attempt++) { if (predicate()) return; await delay(10); } + throw new Error(`Timed out waiting for ${description}`); +} diff --git a/tests/agents/native-tools.test.ts b/tests/agents/native-tools.test.ts index 12124df..26ac534 100644 --- a/tests/agents/native-tools.test.ts +++ b/tests/agents/native-tools.test.ts @@ -59,7 +59,9 @@ it.each((['fixture', 'amazon-bedrock'] as const).flatMap(provider => (['programm const home = await mkdtemp(join(tmpdir(), 'rat-native-tools-')); const tokenFile = join(home, 'fixture-token'); await writeFile(tokenFile, 'local-test-token', { mode: 0o600 }); - const model = provider === 'amazon-bedrock' ? 'openai.gpt-5.6-terra' : 'gpt-5.4'; + // This fixture exercises native web/tool search and optional code mode. The + // active gpt-5.5 catalogue entry supports these together; code-mode-only models do not. + const model = provider === 'amazon-bedrock' ? 'openai.gpt-5.6-terra' : 'gpt-5.5'; const planned = planSessionLaunch(planCodexLaunch({ version: '1', prompt: '', agent: { sandbox: 'read-only', capabilities: { webSearch: 'cached' } } }, home, 20_000, {}), { sessionId: 'sess_tools', turnId: 'turn_tools', input: [], environment: { type: 'none' }, agent: sessionAgent({ model, reasoning: { effort: 'high', summary: 'concise' }, service_tier: 'priority', diff --git a/tests/agents/native-turn-errors.test.ts b/tests/agents/native-turn-errors.test.ts index f6f1dc9..2b27f61 100644 --- a/tests/agents/native-turn-errors.test.ts +++ b/tests/agents/native-turn-errors.test.ts @@ -13,6 +13,8 @@ const cases: Array<{ code: string; expected: NonNullable['code']; { code: 'insufficient_quota', expected: 'usage_limit_exceeded' }, { code: 'cyber_policy', expected: 'cyber_policy' }, { code: 'rate_limit_exceeded', expected: 'rate_limit_exceeded' }, + { code: 'slow_down', expected: 'rate_limit_exceeded' }, + { code: 'slow_down', expected: 'rate_limit_exceeded', status: 503 }, { code: 'server_is_overloaded', expected: 'server_overloaded' }, { code: 'rate_limit_exceeded', expected: 'rate_limit_exceeded', status: 429 }, { code: 'server_error', expected: 'server_error', status: 500 }, diff --git a/tests/agents/sdk-conformance.test.ts b/tests/agents/sdk-conformance.test.ts index 65fc46e..a2b9798 100644 --- a/tests/agents/sdk-conformance.test.ts +++ b/tests/agents/sdk-conformance.test.ts @@ -95,7 +95,9 @@ describe('OpenAI SDK Agents API conformance', () => { expect(replaced.reasoning).toEqual({ effort: 'low', summary: 'auto' }); const reset = await alice.beta.agents.update(agent.id, { reasoning: null }); expect(reset.reasoning).toEqual(agent.reasoning); - expect((await alice.beta.agents.create({ model: 'gpt-5.4' })).reasoning.effort).toBe('medium'); + expect((await alice.beta.agents.create({ model: 'gpt-6-sol' })).reasoning.effort).toBe('medium'); + // Models absent from the pinned native catalogue retain the provider default. + expect((await alice.beta.agents.create({ model: 'gpt-5.4' })).reasoning.effort).toBeNull(); }); it('isolates owners on reads, updates, deletes, and pagination cursors', async () => { diff --git a/tests/agents/session-lifecycle.test.ts b/tests/agents/session-lifecycle.test.ts index 09640a5..71145e6 100644 --- a/tests/agents/session-lifecycle.test.ts +++ b/tests/agents/session-lifecycle.test.ts @@ -89,7 +89,7 @@ describe('Agents API session lifecycle through the OpenAI SDK', () => { expect(unchanged.metadata).toEqual({}); await expect(f.api.sessions.update(session.id, { agent: { model: 'unknown' } })).rejects.toMatchObject({ status: 400 }); expect((await f.api.sessions.update(session.id, { agent: { model: 'gpt-5.4-mini-2026-03-17', reasoning: { effort: 'none' }, service_tier: 'priority' } })).agent).toMatchObject({ model: 'gpt-5.4-mini-2026-03-17', reasoning: { effort: 'none' }, service_tier: 'priority' }); - expect((await f.api.sessions.update(session.id, { agent: { model: 'openai.gpt-5.4', reasoning: { effort: null } } })).agent.reasoning.effort).toBe('medium'); + expect((await f.api.sessions.update(session.id, { agent: { model: 'openai.gpt-6-sol', reasoning: { effort: null } } })).agent.reasoning.effort).toBe('medium'); }); it('serves owner-scoped traces, validates cursors and preserves captured steps after runtime removal', async () => { diff --git a/tests/domain/native-release.test.ts b/tests/domain/native-release.test.ts index 6c65eb5..752cfeb 100644 --- a/tests/domain/native-release.test.ts +++ b/tests/domain/native-release.test.ts @@ -43,7 +43,7 @@ describe('native release decisions', () => { it('preserves the Codex package layout inside sealed resources', () => { const files = [manifest.files[0], { ...manifest.files[1], path: 'Contents/Resources/codex/bin/codex' }, - ...['bin/codex-code-mode-host', 'codex-path/rg', 'codex-resources/zsh/bin/zsh'].map(path => ({ + ...['bin/codex-code-mode-host', 'codex-path/rg', 'codex-resources/voice/bin/codex-voice-host'].map(path => ({ ...manifest.files[1], role: 'host-companion', path: `Contents/Resources/codex/${path}`, }))]; expect(decodeAuthenticatedNativeManifest({ ...manifest, files }).files.map(file => file.path)).toEqual(files.map(file => file!.path)); diff --git a/tests/runner/session-checkpoint.test.ts b/tests/runner/session-checkpoint.test.ts index ffe67bc..f1cbcfd 100644 --- a/tests/runner/session-checkpoint.test.ts +++ b/tests/runner/session-checkpoint.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest'; import { SessionRuntime, type SessionCheckpointOptions } from '../../src/runner/session-runtime.js'; import { WorkspaceAdmission } from '../../src/runner/workspace-handoff.js'; -import { CodexRpcError, type CodexRpcClient } from '../../src/adapters/codex-rpc.js'; +import { CodexRpcError, type CodexRpcClient, type CodexRpcEvent } from '../../src/adapters/codex-rpc.js'; import type { Turn } from '../../src/domain/agents-api.js'; import type { WorkspaceCheckpoint } from '../../src/domain/workspace-checkpoint.js'; @@ -26,7 +26,10 @@ function fixture(requiredResumeThreadId?: string, initialTurnId?: string) { if (method === 'turn/start') return { turn: { id: 'native-turn' } }; if (method === 'thread/loaded/list') return { data: ['root', 'child'], nextCursor: null }; if (method === 'thread/turns/list') return { data: [], nextCursor: null }; - if (method === 'thread/checkpoint') { const { threadId } = params as { threadId: string }; order.push(threadId); return { threadId, flushed: true }; } + if (method === 'thread/checkpoint') { + const { threadId, expectedThreadIds } = params as { threadId: string; expectedThreadIds: string[] }; + order.push('native-checkpoint'); return { threadId, threadIds: expectedThreadIds, flushed: true }; + } throw new Error(`Unexpected method ${method}`); }), closeCheckpoint: vi.fn(async () => { order.push('native-exit'); handlers.onClose!(); }), @@ -38,7 +41,8 @@ function fixture(requiredResumeThreadId?: string, initialTurnId?: string) { request: { binary: 'unused', workspace: '/workspace', environment: {}, timeoutMs: 10_000, prompt: '', sandbox: 'read-only', persistent: true, modelProvider: 'openai', model: 'fixture', networkAccess: false }, client: options => { handlers = options; return rpc; }, }); - return { runtime, ports, rpc, order, disconnect: () => handlers.onClose!() }; + return { runtime, ports, rpc, order, disconnect: () => handlers.onClose!(), emit: (event: CodexRpcEvent) => handlers.onEvent!(event), + request: (event: CodexRpcEvent & { requestId: string | number }) => handlers.onServerRequest!(event) }; } const turn: Turn = { id: 'turn', session_id: 'session', agent_id: 'agent', subagent_id: null, object: 'agent.session.turn', status: 'queued', created_at: 1, started_at: null, completed_at: null, usage: null, error: null }; @@ -47,7 +51,11 @@ describe('native Session checkpoint integration', () => { const f = fixture(); try { await f.runtime.initialize(); - f.rpc.call.mockRejectedValueOnce(new Error('thread is not materialized yet')); + const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => { + if (method === 'thread/turns/list') throw new Error('thread is not materialized yet'); + return call(method, params); + }); await expect(f.runtime.checkpoint()).rejects.toThrow('not materialized'); expect(f.ports.begin).not.toHaveBeenCalled(); expect(f.rpc.close).not.toHaveBeenCalled(); @@ -78,7 +86,14 @@ describe('native Session checkpoint integration', () => { }); await expect(f.runtime.checkpoint()).resolves.toEqual(checkpoint); await f.runtime.finished; - expect(f.order).toEqual(['begin', 'child', 'root', 'native-exit', 'writers', 'journal', 'sync', 'commit']); + expect(f.order).toEqual(['begin', 'native-checkpoint', 'native-exit', 'writers', 'journal', 'sync', 'commit']); + expect(f.rpc.call.mock.calls.filter(([method]) => method === 'thread/checkpoint')).toEqual([ + ['thread/checkpoint', { threadId: 'root', expectedThreadIds: ['root', 'child'] }, 35_000], + ]); + expect(f.rpc.call.mock.calls.filter(([method]) => method === 'thread/turns/list').map(([, params]) => params)).toEqual([ + { threadId: 'root', limit: 1, itemsView: 'summary' }, { threadId: 'child', limit: 1, itemsView: 'summary' }, + { threadId: 'root', limit: 1, itemsView: 'summary' }, { threadId: 'child', limit: 1, itemsView: 'summary' }, + ]); expect(finished).toBe(true); expect(() => f.runtime.assertSuccessfulShutdown()).not.toThrow(); await expect(f.ports.admission.run(async () => {})).rejects.toThrow(); @@ -125,6 +140,159 @@ describe('native Session checkpoint integration', () => { expect(f.rpc.closeCheckpoint).not.toHaveBeenCalled(); }); + it.each([{ remainingIds: ['root'] }, { remainingIds: [] }])('allows acknowledged threads to unregister while requiring their persisted histories: %j', async ({ remainingIds }) => { + const f = fixture(); + await f.runtime.initialize(); + let acknowledged = false; + const readsAfterShutdown: string[] = []; + const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => { + if (method === 'thread/checkpoint') acknowledged = true; + if (method === 'thread/loaded/list' && acknowledged) return { data: remainingIds, nextCursor: null }; + if (method === 'thread/turns/list' && acknowledged) readsAfterShutdown.push((params as { threadId: string }).threadId); + return call(method, params); + }); + await expect(f.runtime.checkpoint()).resolves.toEqual(checkpoint); + expect(readsAfterShutdown).toEqual(['root', 'child']); + expect(f.ports.commit).toHaveBeenCalledOnce(); + expect(f.rpc.closeCheckpoint).toHaveBeenCalledOnce(); + }); + + it('rejects missing persisted history even after every thread acknowledged shutdown', async () => { + const f = fixture(); + await f.runtime.initialize(); + let acknowledged = false; + const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => { + if (method === 'thread/checkpoint') acknowledged = true; + if (method === 'thread/turns/list' && acknowledged && (params as { threadId: string }).threadId === 'child') throw new Error('child history unavailable'); + return call(method, params); + }); + await expect(f.runtime.checkpoint()).rejects.toThrow('child history unavailable'); + expect(f.ports.commit).not.toHaveBeenCalled(); + expect(f.ports.abort).toHaveBeenCalledOnce(); + }); + + it('checks descendant history before starting durable handoff', async () => { + const f = fixture(); + try { + await f.runtime.initialize(); + const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => { + if (method === 'thread/turns/list' && (params as { threadId: string }).threadId === 'child') throw new Error('child history unavailable'); + return call(method, params); + }); + await expect(f.runtime.checkpoint()).rejects.toThrow('child history unavailable'); + expect(f.ports.begin).not.toHaveBeenCalled(); + expect(f.rpc.call.mock.calls.some(([method]) => method === 'thread/checkpoint')).toBe(false); + expect(f.rpc.close).not.toHaveBeenCalled(); + await expect(f.ports.admission.run(async () => 'open')).resolves.toBe('open'); + } finally { await f.runtime.close(); } + }); + + it.each([ + { threadId: 'other-root', threadIds: ['root', 'child'], flushed: true }, + { threadId: 'root', threadIds: ['root'], flushed: true }, + { threadId: 'root', threadIds: ['root', 'child', 'extra'], flushed: true }, + { threadId: 'root', threadIds: ['root', 'root'], flushed: true }, + { threadId: 'root', threadIds: ['root', 1], flushed: true }, + { threadId: 'root', flushed: true }, + { threadId: 'root', threadIds: ['root', 'child'], flushed: false }, + ])('rejects an incomplete or malformed checkpoint acknowledgement: %j', async acknowledgement => { + const f = fixture(); + await f.runtime.initialize(); + const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => method === 'thread/checkpoint' ? acknowledgement : call(method, params)); + await expect(f.runtime.checkpoint()).rejects.toThrow(); + expect(f.ports.abort).toHaveBeenCalledOnce(); + expect(f.ports.commit).not.toHaveBeenCalled(); + expect(f.rpc.closeCheckpoint).not.toHaveBeenCalled(); + }); + + it.each([ + { data: ['root', 'root'] }, + { data: ['root', ''] }, + { data: ['root'], nextCursor: '' }, + { data: ['root'], nextCursor: 1 }, + { data: [], nextCursor: 'more' }, + ])('rejects invalid loaded-thread pagination before shutdown: %j', async page => { + const f = fixture(); + try { + await f.runtime.initialize(); + f.rpc.call.mockResolvedValueOnce(page); + await expect(f.runtime.checkpoint()).rejects.toThrow(); + expect(f.ports.begin).not.toHaveBeenCalled(); + expect(f.rpc.close).not.toHaveBeenCalled(); + } finally { await f.runtime.close(); } + }); + + it.each(['duplicate identity', 'repeated cursor'])('rejects %s across loaded-thread pages', async failure => { + const f = fixture(); + try { + await f.runtime.initialize(); + f.rpc.call.mockResolvedValueOnce({ data: ['root'], nextCursor: 'first' }); + f.rpc.call.mockResolvedValueOnce(failure === 'duplicate identity' + ? { data: ['root', 'child'] } : { data: ['child'], nextCursor: 'first' }); + await expect(f.runtime.checkpoint()).rejects.toThrow(); + expect(f.ports.begin).not.toHaveBeenCalled(); + expect(f.rpc.close).not.toHaveBeenCalled(); + } finally { await f.runtime.close(); } + }); + + it('accepts paginated identities and acknowledgements in a different order', async () => { + const f = fixture(); + await f.runtime.initialize(); + const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => { + if (method === 'thread/loaded/list') return (params as { cursor?: string }).cursor + ? { data: ['child'], nextCursor: null } : { data: ['root'], nextCursor: 'root' }; + if (method === 'thread/checkpoint') return { threadId: 'root', threadIds: ['child', 'root'], flushed: true }; + return call(method, params); + }); + await expect(f.runtime.checkpoint()).resolves.toEqual(checkpoint); + expect(f.ports.commit).toHaveBeenCalledOnce(); + }); + + it.each(['native', 'exit', 'journal'])('rejects late activity during %s even after its Turn completes', async stage => { + const f = fixture(); + await f.runtime.initialize(); + const activity = () => { + f.emit({ method: 'turn/started', params: { threadId: 'root', turn: { id: 'late-turn', status: 'inProgress' } } }); + f.emit({ method: 'turn/completed', params: { threadId: 'root', turn: { id: 'late-turn', status: 'completed' } } }); + }; + if (stage === 'native') { + const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => { if (method === 'thread/checkpoint') activity(); return call(method, params); }); + } else if (stage === 'exit') f.rpc.closeCheckpoint.mockImplementationOnce(async () => { activity(); f.disconnect(); }); + else vi.mocked(f.ports.flushJournal).mockImplementationOnce(async () => { activity(); }); + await expect(f.runtime.checkpoint()).rejects.toThrow('activity changed'); + expect(f.ports.commit).not.toHaveBeenCalled(); + expect(f.ports.abort).toHaveBeenCalledOnce(); + expect(() => f.runtime.assertSuccessfulShutdown()).toThrow(); + }); + + it('refuses native host requests during checkpoint before running a host effect', async () => { + const f = fixture(); + await f.runtime.initialize(); + vi.mocked(f.ports.begin).mockImplementationOnce(async () => { + await expect(f.request({ method: 'currentTime/read', params: {}, requestId: 'late' })).rejects.toThrow('during checkpoint'); + }); + await expect(f.runtime.checkpoint()).rejects.toThrow('activity changed'); + expect(f.rpc.call.mock.calls.some(([method]) => method === 'thread/checkpoint')).toBe(false); + expect(f.ports.commit).not.toHaveBeenCalled(); + }); + + it('rejects raw response activity even without a matching Turn notification', async () => { + const f = fixture(); + await f.runtime.initialize(); + vi.mocked(f.ports.flushJournal).mockImplementationOnce(async () => { + f.emit({ method: 'rawResponseItem/completed', params: { threadId: 'root', item: { type: 'message' } } }); + }); + await expect(f.runtime.checkpoint()).rejects.toThrow('activity changed'); + expect(f.ports.commit).not.toHaveBeenCalled(); + expect(f.ports.abort).toHaveBeenCalledOnce(); + }); + it('never substitutes a new thread when a consumed checkpoint is missing native history', async () => { const f = fixture('root'); f.rpc.call.mockRejectedValueOnce(new CodexRpcError({ code: -32600, message: 'no rollout found for thread id root' })); diff --git a/tests/scripts/build-native-release.test.ts b/tests/scripts/build-native-release.test.ts index ae1ab40..c1c5d1d 100644 --- a/tests/scripts/build-native-release.test.ts +++ b/tests/scripts/build-native-release.test.ts @@ -17,13 +17,21 @@ const protocol = { hostTarget: 'aarch64-apple-darwin', guestTarget: 'aarch64-unk const signaturePaths = ['CodeDirectory', 'CodeRequirements', 'CodeResources', 'CodeSignature'].map(path => `Contents/_CodeSignature/${path}`); afterEach(async () => { await Promise.all(directories.splice(0).map(path => rm(path, { recursive: true, force: true }))); }); -function machO(major = 15, minor = 2, command = 0x32) { - const bytes = Buffer.alloc(64); - bytes.writeUInt32LE(0xfeedfacf, 0); bytes.writeUInt32LE(0x100000c, 4); bytes.writeUInt32LE(2, 12); - bytes.writeUInt32LE(1, 16); bytes.writeUInt32LE(command === 0x32 ? 24 : 16, 20); +function machO(major = 15, minor = 2, command = 0x32, policy?: { machOType: number; rpaths?: string[] }, libraries: string[] = []) { + const linked = (name: string, command: number, minimum: number) => { + const bytes = Buffer.alloc(Math.ceil((minimum + Buffer.byteLength(name) + 1) / 8) * 8); + bytes.writeUInt32LE(command, 0); bytes.writeUInt32LE(bytes.length, 4); bytes.writeUInt32LE(minimum, 8); bytes.write(name, minimum); + return bytes; + }; + const extra = [...(policy?.rpaths ?? []).map(path => linked(path, 0x8000001c, 12)), ...libraries.map(path => linked(path, 0xc, 24))]; + const commandBytes = (command === 0x32 ? 24 : 16) + extra.reduce((total, value) => total + value.length, 0); + const bytes = Buffer.alloc(32 + commandBytes); + bytes.writeUInt32LE(0xfeedfacf, 0); bytes.writeUInt32LE(0x100000c, 4); bytes.writeUInt32LE(policy?.machOType ?? 2, 12); + bytes.writeUInt32LE(1 + extra.length, 16); bytes.writeUInt32LE(commandBytes, 20); bytes.writeUInt32LE(command, 32); bytes.writeUInt32LE(command === 0x32 ? 24 : 16, 36); if (command === 0x32) bytes.writeUInt32LE(1, 40); bytes.writeUInt32LE((major << 16) | (minor << 8), command === 0x32 ? 44 : 40); + Buffer.concat(extra).copy(bytes, 32 + (command === 0x32 ? 24 : 16)); return bytes; } @@ -43,20 +51,29 @@ async function fixture() { await write('definition/source.json', json(source)); await write('definition/fixture.patch', 'patch'); await write('definition/artifact-policy.json', json({ sourceSha256: digest(JSON.stringify(sourceIdentity)), patchedTree: 'b'.repeat(40) })); const builds = { profile: 'release', debug: 'none', incremental: false, locked: true, jobs: 1, patchedTree: 'b'.repeat(40) }; - const paths = ['bin/codex', 'bin/codex-code-mode-host', 'codex-package.json', 'codex-path/rg', 'codex-resources/zsh/bin/zsh']; + const paths = ['bin/codex', 'bin/codex-code-mode-host', 'codex-package.json', 'codex-path/rg']; const packages: Record = {}; const packageLocks: Record = {}; const manifests = new Map(); for (const platform of ['darwin', 'linux']) { const target = platform === 'darwin' ? protocol.hostTarget : protocol.guestTarget; const descriptor = { layoutVersion: 1, version: source.upstreamVersion, target, variant: 'codex', entrypoint: 'bin/codex', resourcesDir: 'codex-resources', pathDir: 'codex-path' }; - const allPaths = [...paths, ...(platform === 'linux' ? ['codex-resources/bwrap'] : [])]; - const files = allPaths.map(path => ({ path, sha256: digest(path === 'codex-package.json' ? json(descriptor) : platform === 'darwin' ? machO(path.endsWith('zsh') ? 15 : 11, 0) : elf()), executable: path !== 'codex-package.json' })); + const policies = nativeExecutablePolicy.filter(policy => policy.role !== 'vm-helper'); + const allPaths = platform === 'darwin' + ? ['codex-package.json', ...policies.map(policy => policy.path.slice('Contents/Resources/codex/'.length)), 'codex-resources/voice/runtime.json', 'codex-resources/voice/NOTICE.md'] + : [...paths, 'codex-resources/bwrap']; + const content = (path: string) => { + if (path === 'codex-package.json') return json(descriptor); + if (path.endsWith('.json') || path.endsWith('.md')) return 'Pinned companion resource'; + const policy = policies.find(policy => policy.path === `Contents/Resources/codex/${path}`); + return platform === 'darwin' ? machO(path.endsWith('codex-voice-host') ? 15 : 11, 0, 0x32, policy) : elf(); + }; + const files = allPaths.map(path => ({ path, sha256: digest(content(path)), executable: !path.endsWith('.json') && !path.endsWith('.md') })); const packageName = `@openai/codex-${platform}-arm64`; const locked = { name: '@openai/codex', version: `${source.upstreamVersion}-${platform}-arm64`, resolved: `https://registry.npmjs.org/${platform}.tgz`, integrity: `sha512-${'A'.repeat(86)}==` }; packageLocks[`node_modules/${packageName}`] = locked; packages[packageName] = { ...locked, descriptor, files }; - for (const file of files) await write(`${platform}/runtime/${file.path}`, file.path === 'codex-package.json' ? json(descriptor) : platform === 'darwin' ? machO(file.path.endsWith('zsh') ? 15 : 11, 0) : elf(), file.executable ? 0o755 : 0o444); + for (const file of files) await write(`${platform}/runtime/${file.path}`, content(file.path), file.executable ? 0o755 : 0o444); const manifest = { source: sourceIdentity, build: { ...builds, nativeTarget: target }, binary: join(directory, platform, 'runtime/bin/codex'), sha256: files.find(file => file.path === 'bin/codex')!.sha256, platform, arch: 'arm64', upstreamPackage: { name: packageName, version: locked.version }, files: files.map(({ path, sha256 }) => ({ path, sha256 })) }; @@ -130,8 +147,8 @@ it('assembles an exact signed candidate with untouched input provenance and hash const bundle = join(f.options.output, 'Runtime.bundle'); const manifestBytes = await readFile(join(bundle, 'Contents/Resources/runtime-manifest.json')); const manifest = decodeAuthenticatedNativeManifest(JSON.parse(manifestBytes.toString())); expect(result.releaseId).toBe(digest(manifestBytes)); expect(result.distributionReady).toBe(false); - expect(manifest.compatibility).toEqual({ ...nativeCompatibility(protocol, [11, 11, 11, 15, 15.2].map(value => ({ minimumMacOS: String(value) }))), minimumMacOS: '15.2.0' }); - expect(manifest.files.filter(file => file.kind === 'host-executable')).toHaveLength(5); + expect(manifest.compatibility).toEqual({ ...nativeCompatibility(protocol, nativeExecutablePolicy.map(() => ({ minimumMacOS: '15.2.0' }))), minimumMacOS: '15.2.0' }); + expect(manifest.files.filter(file => file.kind === 'host-executable')).toHaveLength(nativeExecutablePolicy.length); expect(await readFile(join(f.options.output, 'evidence/host-artifact.json'))).toEqual(original); expect(await readFile(join(f.options.hostArtifact, 'artifact.json'))).toEqual(original); const provenance = await readFile(join(bundle, 'Contents/Resources/provenance.json'), 'utf8'); @@ -140,7 +157,7 @@ it('assembles an exact signed candidate with untouched input provenance and hash const signedInventory = await readFile(join(f.options.output, 'evidence/signed-inventory.json')); expect(result.signedTreeSha256).toBe(nativeBundleFingerprint(JSON.parse(signedInventory.toString()))); const signing = f.calls.filter(call => call.args.includes('--sign')); - expect(signing).toHaveLength(6); expect(signing.at(-1)!.args.at(-1)).toBe(bundle); + expect(signing).toHaveLength(nativeExecutablePolicy.length + 1); expect(signing.at(-1)!.args.at(-1)).toBe(bundle); expect(signing.every(call => call.args.includes('--timestamp') && call.args.includes('runtime') && !call.args.includes('--deep'))).toBe(true); expect(f.calls.find(call => call.args.includes('-target'))!.args).toContain('arm64-apple-macos15.0.0'); }); @@ -190,7 +207,7 @@ it('rejects changed source inputs before signing the outer bundle', async () => return result; }; await expect(assembleNativeRelease(f.options, { repositoryRoot: f.repositoryRoot, run })).rejects.toThrow('Input changed or checksum differs'); - expect(f.calls.filter(call => call.args.includes('--sign'))).toHaveLength(5); + expect(f.calls.filter(call => call.args.includes('--sign'))).toHaveLength(nativeExecutablePolicy.length); await expect(lstat(join(f.options.output, 'release.json'))).rejects.toThrow('ENOENT'); }); @@ -223,7 +240,39 @@ it('rejects staged archive changes during helper compilation before sealing the it('derives the deployment floor from modern and legacy Mach-O commands', () => { expect(inspectMachO(machO(15, 4))).toEqual({ minimumMacOS: '15.4.0', libraries: [] }); expect(inspectMachO(machO(12, 7, 0x24))).toEqual({ minimumMacOS: '12.7.0', libraries: [] }); - expect(nativeCompatibility(protocol, [machO(11), machO(12), machO(13), machO(15), machO(14)].map(inspectMachO)).minimumMacOS).toBe('15.2.0'); + expect(nativeCompatibility(protocol, nativeExecutablePolicy.map(() => inspectMachO(machO(15)))).minimumMacOS).toBe('15.2.0'); +}); + +it('accepts only the fixed bundled libraries and search paths for each Mach-O role', () => { + const voice = nativeExecutablePolicy.find(policy => policy.identifier === 'dev.rat-things.runtime.voice-host')!; + const library = nativeExecutablePolicy.find(policy => policy.path.endsWith('/lib/libgio-2.0.0.dylib'))!; + const plugin = nativeExecutablePolicy.find(policy => policy.path.endsWith('/plugins/libgstapp.dylib'))!; + for (const [policy, dependency] of [ + [voice, '@rpath/libgio-2.0.0.dylib'], + [library, '@loader_path/libglib-2.0.0.dylib'], + [plugin, '@loader_path/../lib/libgstapp-1.0.0.dylib'], + ] as const) { + expect(inspectMachO(machO(14, 0, 0x32, policy, [dependency]), policy).libraries).toEqual([dependency]); + } + for (const dependency of ['/tmp/injected.dylib', '/usr/lib/../../tmp/injected.dylib', '@rpath/unknown.dylib', '@loader_path/../bin/codex-voice-host']) { + expect(() => inspectMachO(machO(14, 0, 0x32, voice, [dependency]), voice)).toThrow('unbundled library'); + } + expect(() => inspectMachO(machO(14, 0, 0x32, { ...voice, rpaths: ['/tmp'] }), voice)).toThrow('search paths'); + expect(() => inspectMachO(machO(14, 0, 0x32, library))).toThrow('fixed host code policy'); + expect(() => inspectMachO(machO(14), library)).toThrow('fixed host code policy'); +}); + +it('keeps compiled signature identifiers aligned with the reviewed upstream native inventory', async () => { + const companions = JSON.parse(await readFile(new URL('../../runtime/codex/companion-packages.json', import.meta.url), 'utf8')); + const paths = companions['@openai/codex-darwin-arm64'].files.filter((file: { executable: boolean }) => file.executable) + .map((file: { path: string }) => `Contents/Resources/codex/${file.path}`); + expect(nativeExecutablePolicy.filter(policy => policy.role !== 'vm-helper').map(policy => policy.path).sort()).toEqual(paths.sort()); + const verifier = await readFile(new URL('../../runtime/local/verify-runtime.swift', import.meta.url), 'utf8'); + const compiledPolicy = [...verifier.matchAll(/ExecutablePolicy\(path: "([^"]+)", identifier: "([^"]+)"\)/g)] + .map(([, path, identifier]) => ({ path, identifier })); + expect(compiledPolicy).toEqual(nativeExecutablePolicy.map(({ path, identifier }) => ({ path, identifier }))); + expect(new Set(nativeExecutablePolicy.map(policy => policy.identifier)).size).toBe(nativeExecutablePolicy.length); + expect(nativeExecutablePolicy.some(policy => policy.path.endsWith('.json') || policy.path.includes('/zsh/'))).toBe(false); }); it('rejects missing, truncated, and non-macOS deployment commands', () => { @@ -236,7 +285,7 @@ it('limits JIT entitlements to the two Codex executables and virtualization to t const commands = nativeExecutablePolicy.map(policy => signingArguments(identity, policy, policy.path, { jit: 'jit.plist', virtualization: 'vm.plist' })); expect(commands.filter(args => args.includes('jit.plist')).map(args => args.at(-1))).toEqual(nativeExecutablePolicy.slice(0, 2).map(policy => policy.path)); expect(commands.filter(args => args.includes('vm.plist')).map(args => args.at(-1))).toEqual(['Contents/Helpers/rat-native-worker']); - expect(commands.filter(args => !args.includes('--entitlements'))).toHaveLength(2); + expect(commands.filter(args => !args.includes('--entitlements'))).toHaveLength(nativeExecutablePolicy.length - 3); }); it('rejects unlisted executable files and links in the outer payload', async () => { diff --git a/tests/scripts/codex-runtime-artifact.test.ts b/tests/scripts/codex-runtime-artifact.test.ts index b607772..7702650 100644 --- a/tests/scripts/codex-runtime-artifact.test.ts +++ b/tests/scripts/codex-runtime-artifact.test.ts @@ -42,7 +42,13 @@ async function fixture(platform: keyof typeof targets = 'linux', arch: 'arm64' | const pinned = packages[packageName]; const files: { path: string; sha256: string }[] = []; for (const file of pinned.files) { - const bytes = file.path === 'codex-package.json' ? Buffer.from(JSON.stringify(pinned.descriptor, null, 2) + '\n') : executable; + const nativeBytes = Buffer.from(executable); + if (/\.(?:so|dylib)(?:\.|$)/.test(file.path)) { + if (platform === 'darwin') nativeBytes.writeUInt32LE(6, 12); // MH_DYLIB + else nativeBytes.writeUInt16LE(3, 16); // ET_DYN + } + const bytes = file.path === 'codex-package.json' ? Buffer.from(JSON.stringify(pinned.descriptor, null, 2) + '\n') + : file.executable ? nativeBytes : Buffer.from('fixture data'); file.sha256 = digest(bytes); const runtimeBytes = file.path === 'codex-package.json' ? Buffer.from(JSON.stringify({ ...pinned.descriptor, target: nativeTarget }, null, 2) + '\n') : bytes; @@ -66,16 +72,15 @@ async function fixture(platform: keyof typeof targets = 'linux', arch: 'arm64' | const options = { expectedTarget: nativeTarget, companionInventoryPath }; const validate = () => validateCodexRuntimeArtifact(directory, options); await save(); - return { directory, executable, manifest, save, replaceFile, options, validate }; + return { directory, executable, manifest, save, replaceFile, options, validate, pinned }; } it.each(['linux', 'darwin'] as const)('admits a complete %s release and returns only verified runtime files', async platform => { const f = await fixture(platform); const admitted = await f.validate(); - expect(admitted.files.map(file => file.path)).toEqual([ - 'bin/codex', 'bin/codex-code-mode-host', 'codex-package.json', 'codex-path/rg', - ...(platform === 'linux' ? ['codex-resources/bwrap'] : []), 'codex-resources/zsh/bin/zsh', - ]); + expect(admitted.files.map(file => file.path)).toEqual(f.pinned.files.map((file: { path: string }) => file.path)); + expect(admitted.files.map(file => file.path)).toContain('codex-resources/voice/bin/codex-voice-host'); + expect(admitted.files.find(file => file.path === 'codex-resources/voice/runtime.json')!.mode).toBe(0o444); expect(admitted.files.find(file => file.path === 'bin/codex')!.mode).toBe(0o755); expect(admitted.files.find(file => file.path === 'codex-package.json')!.mode).toBe(0o444); }); @@ -84,8 +89,7 @@ it('keeps the packaging wrapper Linux-only and includes original provenance', as const f = await fixture(); const entries = await codexRuntimeEntries(f.directory, f.options); expect(entries.map(entry => entry.target)).toEqual([ - 'codex-runtime/bin/codex', 'codex-runtime/bin/codex-code-mode-host', 'codex-runtime/codex-package.json', - 'codex-runtime/codex-path/rg', 'codex-runtime/codex-resources/bwrap', 'codex-runtime/codex-resources/zsh/bin/zsh', + ...f.pinned.files.map((file: { path: string }) => `codex-runtime/${file.path}`), 'codex-runtime/artifact.json', ]); const host = await fixture('darwin'); @@ -175,14 +179,14 @@ it('binds the checked companion inventory to the npm tarball integrity', async ( it('rejects a changed companion even if its declared checksum is changed too', async () => { const f = await fixture(); const executable = Buffer.from(f.executable); executable[63] = 1; - await f.replaceFile('codex-resources/zsh/bin/zsh', executable); + await f.replaceFile('codex-resources/voice/bin/codex-voice-host', executable); await expect(f.validate()).rejects.toThrow('companion differs'); }); it.each(['linux', 'darwin'] as const)('rejects missing %s companions', async platform => { const f = await fixture(platform); - f.manifest.files = f.manifest.files.filter(file => file.path !== 'codex-resources/zsh/bin/zsh'); await f.save(); - await rm(join(f.directory, 'runtime/codex-resources/zsh'), { recursive: true }); + f.manifest.files = f.manifest.files.filter(file => file.path !== 'codex-resources/voice/bin/codex-voice-host'); await f.save(); + await rm(join(f.directory, 'runtime/codex-resources/voice/bin/codex-voice-host')); await expect(f.validate()).rejects.toThrow('companions are incomplete'); }); diff --git a/tests/scripts/native-app-inputs.test.ts b/tests/scripts/native-app-inputs.test.ts index 517cff1..85f165f 100644 --- a/tests/scripts/native-app-inputs.test.ts +++ b/tests/scripts/native-app-inputs.test.ts @@ -34,7 +34,7 @@ async function fixture() { const write = async (path: string, bytes: string | Uint8Array, mode = 0o444) => { await mkdir(dirname(path), { recursive: true }); await writeFile(path, bytes, { mode }); }; - for (const path of ['scripts/build-native-app.mjs', 'scripts/native-app-inputs.mjs', 'scripts/build-native-release.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs', 'scripts/native-guest-inputs.mjs', 'scripts/javascript-notices.mjs', 'scripts/native-build-files.mjs', 'scripts/native-guest-archive.mjs', 'src/domain/native-release.ts']) { + for (const path of ['runtime/native/host-code-policy.json', 'scripts/build-native-app.mjs', 'scripts/native-app-inputs.mjs', 'scripts/build-native-release.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs', 'scripts/native-guest-inputs.mjs', 'scripts/javascript-notices.mjs', 'scripts/native-build-files.mjs', 'scripts/native-guest-archive.mjs', 'src/domain/native-release.ts']) { await write(join(repositoryRoot, path), await readFile(resolve(path))); } await write(join(repositoryRoot, 'package.json'), json({ version: '0.1.0' })); From 40fc370cb7c4f3df55cfa3671c7bca2a4d462d40 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 17:01:48 -0700 Subject: [PATCH 02/11] Keep upstream protocol exports consistent and gate checkpoint capability --- .github/workflows/ci.yml | 2 +- package.json | 1 + runtime/codex/README.md | 32 +- runtime/codex/api-turn-errors.patch | 7 +- runtime/codex/artifact-policy.json | 4 +- runtime/codex/checkpoint-shutdown.patch | 5 +- runtime/codex/protocol-exports.patch | 12871 +++++++++++++++++ runtime/codex/source.json | 3 +- testing/README.md | 7 +- tests/agents/native-checkpoint.test.ts | 37 +- tests/agents/native-protocol-exports.test.ts | 96 + 11 files changed, 13049 insertions(+), 16 deletions(-) create mode 100644 runtime/codex/protocol-exports.patch create mode 100644 tests/agents/native-protocol-exports.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67920f6..5e9e881 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,7 +110,7 @@ jobs: CODEX_CONFORMANCE_BINARY: ${{ github.workspace }}/.runtime/codex/linux-x64/runtime/bin/codex CODEX_REQUIRE_PARITY: 'true' run: | - npm run test:agents:parity + npm run test:agents:parity:host npx vitest run tests/runner/managed-sandbox.test.ts --no-file-parallelism - name: Archive verified Linux x64 runtime run: tar -C .runtime/codex/linux-x64 -czf .runtime/codex/linux-x64.tar.gz artifact.json runtime diff --git a/package.json b/package.json index 19e8210..3ace87c 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "test:watch": "vitest", "codex:build": "node scripts/build-codex-runtime.mjs", "test:agents:parity": "CODEX_REQUIRE_PARITY=true vitest run tests/agents tests/pi --no-file-parallelism", + "test:agents:parity:host": "npm run test:agents:parity -- --exclude tests/pi/packaged-child.test.ts", "localstack:up": "./testing/bootstrap.sh", "localstack:status": "./testing/bootstrap.sh --status", "localstack:down": "./testing/bootstrap.sh --down", diff --git a/runtime/codex/README.md b/runtime/codex/README.md index 01b1709..c783a2a 100644 --- a/runtime/codex/README.md +++ b/runtime/codex/README.md @@ -46,9 +46,10 @@ integration checks. Building the executable does not run those Rust tests. | [api-model-settings.patch](api-model-settings.patch) | Preserve explicit `auto`, `default`, `flex`, `priority` and `fast` service tiers through config and Turn updates; the provider decides support without a silent catalog/UI downgrade. | Patched config, Session and protocol service-tier unit tests; [native-session-settings.test.ts](../../tests/agents/native-session-settings.test.ts) checks outgoing requests across Turns. | | [chatgpt-service-tier.patch](chatgpt-service-tier.patch) | Omit `auto`/`default` for ChatGPT authentication while preserving other explicit tiers and API-key/Bedrock request values across HTTP and WebSocket setup and continuation. | Patched `responses_service_tier_*` Rust tests cover these transports/auth modes, including repeated Turns. They use local fixtures, not a live provider. | | [api-turn-errors.patch](api-turn-errors.patch) | Preserve typed provider failures across HTTP and SSE, including credit exhaustion and timeouts; keep private diagnostics out of normalized errors and credit exhaustion non-retryable. | Patched API bridge/SSE unit tests; [native-turn-errors.test.ts](../../tests/agents/native-turn-errors.test.ts) checks public categories, private-message removal and request count. | -| [checkpoint-shutdown.patch](checkpoint-shutdown.patch) | Add private `thread/checkpoint` for an exact set of idle durable threads. Use upstream shutdown handles to drain descendants, internal work and persistence before acknowledging the set. The host seals admission, verifies history and waits for process exit before publishing. | Patched `checkpoint_idle_threads_*` core integration tests cover tree shutdown, identity validation, busy rejection and persistence failure; [native-checkpoint.test.ts](../../tests/agents/native-checkpoint.test.ts) exercises the compiled bridge and resume; [session-checkpoint.test.ts](../../tests/runner/session-checkpoint.test.ts) checks host orchestration. The opt-in [AWS checkpoint proof](../../tests/aws/session-checkpoint.test.ts) is still required for actual worker replacement. | +| [checkpoint-shutdown.patch](checkpoint-shutdown.patch) | Add private `thread/checkpoint` for an exact set of idle durable threads, requiring `experimentalApi` during initialization. Use upstream shutdown handles to drain descendants, internal work and persistence before acknowledging the set. The host seals admission, verifies history and waits for process exit before publishing. | Patched `checkpoint_idle_threads_*` core integration tests cover tree shutdown, identity validation, busy rejection and persistence failure; [native-checkpoint.test.ts](../../tests/agents/native-checkpoint.test.ts) exercises capability rejection, the compiled bridge and resume; [session-checkpoint.test.ts](../../tests/runner/session-checkpoint.test.ts) checks host orchestration. The opt-in [AWS checkpoint proof](../../tests/aws/session-checkpoint.test.ts) is still required for actual worker replacement. | | [unified-exec-output-subscription.patch](unified-exec-output-subscription.patch) | Subscribe when the process output channel is created, retaining early output until the streaming consumer takes its receiver. Upstream retains the completed transcript; streaming still needs the early receiver. | Patched Rust test `streamed_and_completed_output_preserve_bytes_before_subscription` checks both streamed bytes and completed command output with and without late output. | | [local-subprocess-stdio.patch](local-subprocess-stdio.patch) | Permit the local socket metadata and write-half-close that Node subprocess pipes require under disabled networking. Keep connection operations, non-Unix socket creation, other socket options and other shutdown modes denied. | Patched `restricted_network_supports_node_subprocess_stdio` and `restricted_network_socket_metadata_does_not_enable_connections` tests; [managed-subprocess.test.ts](../../tests/pi/managed-subprocess.test.ts) checks the compiled artifact in strict Linux parity, and both KVM harnesses exercise the guest. | +| [protocol-exports.patch](protocol-exports.patch) | Regenerate upstream's embedded JSON and TypeScript exports after protocol changes. Both exports include the added error categories; only experimental exports include the private checkpoint method and types. | Upstream `schema_fixtures_tests` and `precomputed_exports_tests` compare generated and embedded data; [native-protocol-exports.test.ts](../../tests/agents/native-protocol-exports.test.ts) checks the actual CLI exports in both modes. This patch contains generated data only. | ## Upgrade one candidate at a time @@ -62,6 +63,7 @@ integration checks. Building the executable does not run those Rust tests. Refresh [model-defaults.json](model-defaults.json) from the pinned upstream catalog and review [model-capabilities.json](model-capabilities.json) against actual API behavior. The builder verifies the defaults' source hash and values. + Regenerate the protocol exports after all type changes, as described below. 3. Use a new build directory for the candidate. Run `npm run codex:build -- /absolute/path/to/new-build --prepare-only`, inspect the resulting source diff, and derive the expected patched tree from those reviewed inputs. Update @@ -70,7 +72,9 @@ integration checks. Building the executable does not run those Rust tests. 4. Compile and run the affected upstream Rust test modules, including the tests named above. Then build and validate each platform below. Use the exact candidate executable for `CODEX_CONFORMANCE_BINARY`; keep strict parity enabled through - `npm run test:agents:parity`. A fixture pass establishes the exercised protocol + `npm run test:agents:parity:host` on the host. The worker-image harness runs + `npm run test:agents:parity` and additionally verifies the installed Pi child + under worker UID 10001. A fixture pass establishes the exercised protocol behavior, not live authentication or VM isolation. 5. Run `npm run check` with the matching ARM64 packaging artifact, the worker-image gates and the relevant local acceptance harnesses. Record artifact identities, @@ -95,6 +99,30 @@ never replace artifact validation or semantic tests. For checkpoint changes, inc explicitly opted-in AWS checkpoint proof before claiming cloud handoff acceptance; ordinary checks must not provision AWS resources. +### Regenerate protocol exports + +The production CLI reads compressed, precomputed exports. Changing Rust protocol +types alone leaves `generate-json-schema` and `generate-ts` stale. In the reviewed +upstream checkout, apply all behavior patches first and run its schema writer from +`codex-rs/` for both variants: + +```bash +for experimental in 0 1; do + CODEX_APP_SERVER_SCHEMA_ROOT="$PWD/app-server-protocol/schema" \ + CODEX_APP_SERVER_SCHEMA_EXPERIMENTAL="$experimental" \ + cargo test --locked -p codex-app-server-protocol --lib \ + schema_fixtures_tests::write_schema_fixtures_from_env \ + -- --exact --ignored --test-threads=1 +done +cargo test --locked -p codex-app-server-protocol --lib schema_fixtures_tests +cargo test --locked -p codex-app-server-protocol --lib precomputed_exports_tests +``` + +Review the textual schema changes and capture the generated fixtures and both +compressed bundles with `git diff --binary` in `protocol-exports.patch`. Keep it +last in `source.json`. Refresh the source/tree policy and rebuild the executable; +the CLI export tests must use that rebuilt artifact. + ## Upstream, drop or roll back Prefer small upstream fixes with the reproducer attached. Drop a patch only when diff --git a/runtime/codex/api-turn-errors.patch b/runtime/codex/api-turn-errors.patch index 58d0c67..9edfc6e 100644 --- a/runtime/codex/api-turn-errors.patch +++ b/runtime/codex/api-turn-errors.patch @@ -377,7 +377,7 @@ index 10928a4..a3bea0c 100644 FlexUnavailable, ServerOverloaded, diff --git a/codex-rs/protocol/src/error.rs b/codex-rs/protocol/src/error.rs -index 50c32e3..5c271f5 100644 +index 50c32e3..2811d69 100644 --- a/codex-rs/protocol/src/error.rs +++ b/codex-rs/protocol/src/error.rs @@ -180,6 +180,8 @@ pub enum CodexErrorDetails { @@ -413,13 +413,10 @@ index 50c32e3..5c271f5 100644 CodexErrorDetails::SessionBudgetExceeded => CodexErrorInfo::SessionBudgetExceeded, CodexErrorDetails::RateLimitExceeded(_) => CodexErrorInfo::RateLimitExceeded, CodexErrorDetails::UsageLimitReached(_) -@@ -517,6 +522,15 @@ impl CodexErr { +@@ -517,6 +522,12 @@ impl CodexErr { http_status_code: self.http_status_code_value(), } } -+ CodexErrorDetails::UnexpectedStatus(error) => CodexErrorInfo::HttpConnectionFailed { -+ http_status_code: Some(error.status.as_u16()), -+ }, + CodexErrorDetails::InvalidRequest(_) | CodexErrorDetails::InvalidImageRequest() => { + CodexErrorInfo::BadRequest + } diff --git a/runtime/codex/artifact-policy.json b/runtime/codex/artifact-policy.json index 1d0a59d..04e21a5 100644 --- a/runtime/codex/artifact-policy.json +++ b/runtime/codex/artifact-policy.json @@ -1,4 +1,4 @@ { - "sourceSha256": "1f83d08f27b4cc62877281c65f5cb1c9c476b558cd7c188350406660ade92fc5", - "patchedTree": "c626245a178b390c75f0606586014fe7b1c6c7e6" + "sourceSha256": "0740d7a66b96c982a1cc1067cfc3db3520bcacc391a6ef66dcacb9cd33dedd5f", + "patchedTree": "d0d981a58ed1a7716dd8605e3a585dff5b6db6c7" } diff --git a/runtime/codex/checkpoint-shutdown.patch b/runtime/codex/checkpoint-shutdown.patch index a523607..1bbc9a1 100644 --- a/runtime/codex/checkpoint-shutdown.patch +++ b/runtime/codex/checkpoint-shutdown.patch @@ -1,11 +1,12 @@ diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs -index b183d6a..008d1f3 100644 +index b183d6a..e9a898c 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs -@@ -868,6 +868,11 @@ client_request_definitions! { +@@ -868,6 +868,12 @@ client_request_definitions! { serialization: None, response: v2::ThreadLoadedListResponse, }, ++ #[experimental("thread/checkpoint")] + ThreadCheckpoint => "thread/checkpoint" { + params: v2::ThreadCheckpointParams, + serialization: thread_id(params.thread_id), diff --git a/runtime/codex/protocol-exports.patch b/runtime/codex/protocol-exports.patch new file mode 100644 index 0000000..dd7aa8b --- /dev/null +++ b/runtime/codex/protocol-exports.patch @@ -0,0 +1,12871 @@ +diff --git a/codex-rs/app-server-protocol/schema/json/ServerNotification.json b/codex-rs/app-server-protocol/schema/json/ServerNotification.json +index 7d7b7ce0abc945a022aef18ed04050c2b2e68b7b..7bed6fadc842fe1d5605d5b7c742a5649769f289 100644 +--- a/codex-rs/app-server-protocol/schema/json/ServerNotification.json ++++ b/codex-rs/app-server-protocol/schema/json/ServerNotification.json +@@ -660,6 +660,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +index ba22b80fea07a116870e3c06d8b9b5f5b0d70267..71c5407fd50b772bf9701c519bbd8860aea19384 100644 +--- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json ++++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +@@ -8559,6 +8559,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +index 5c590af8cd21c0502f2cadd3fafbf80e15b16517..fffe3a87dbf58be2052ae53a98e070b696e42393 100644 +--- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json ++++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +@@ -4375,6 +4375,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json +index 108ebe232e070231a3d223cee7b6c1254bf5bd77..ea047a410075434c15249d5bb76cf520445caf93 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json +@@ -8,6 +8,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json +index eac1c0ab70fed1a421b29500cf8907134b9e2424..b0212dcf6aa59aaa2d2eee36a977784df52ec3fd 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json +@@ -58,6 +58,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json +index 2b728204ba0c654e5edd4c67efd77360ac7c8d88..88bee8f2940808435a5956fe011e9f96929655f5 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json +@@ -139,6 +139,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json +index 8f1b2483c796ac372b02ce99125aabddd7b70b53..22454b7888183200bec89641d23bdcf131e2a61c 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json +@@ -61,6 +61,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json +index e01baa846e884f63da1287c431951a5421540535..1e6559ccdf0fca6307fd3a804f0aa2a69a05d5f4 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json +@@ -61,6 +61,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json +index a81e27a5362f707c15e06e10bed111ec314e6e7f..28e7c23463840979d3d63e4b1a50afff8acabbdf 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json +@@ -61,6 +61,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json +index 4f4d578780ec4bb4baca4daa900dc2777d0bd292..d3f4dc5bd2ea781cc4977ac63d189407e7dea71c 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json +@@ -139,6 +139,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json +index 56cf784b3479d425562419aff9224ca05258fc6b..b882bd198488ccb3da54e328b615f38a0e0abfe6 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json +@@ -61,6 +61,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json +index 9597b7a900ec90748ea28785a699b268efc606d5..813b8869d4bac0c3456dde57ee75a47963e59b28 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json +@@ -139,6 +139,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json +index d1f288b3e4b7dcec5210aff44a5bfe74aeadb507..6fdbdfa9d08e647bcd88738f48db4c4ca634cec8 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json +@@ -61,6 +61,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json +index fdf532baf3783bad91349e7099903c5dcfc1fdf5..a9f4f542ee29076a128dc69c0c080850d7c316de 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json +@@ -58,6 +58,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json +index c4ba9a866d05b6cad62ac7d0a5534d065a9b2e4a..769287e2072142ccf3732d9d099b75161cf7ebf4 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json +@@ -61,6 +61,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json +index e718e1fa97ba5b5309cbc63ae1b79b7749622623..a48482c2406d8027fbd0a54ee59f5ddc21576abd 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json +@@ -58,6 +58,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json +index 3c47c0d872fa943f8d84b2464a740e06b046667f..f6bd40b46eeaa98dd555ad0644fe41acce1f9754 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json +@@ -58,6 +58,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json +index e395230a4b746bdc0849e55fbfbceb141ba2a1bb..b52207027fa21bf9bbd09efa8300965ee6cc18ff 100644 +--- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json ++++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json +@@ -58,6 +58,8 @@ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", ++ "creditBalanceExhausted", ++ "requestTimeout", + "rateLimitExceeded", + "flexUnavailable", + "serverOverloaded", +diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst +index 3772c1897579f51ae1a3cb167b9868ee28d78f39..d7c678bd6c9d132044d9d2cbcef931fb6ab25895 100644 +GIT binary patch +literal 167662 +zcmdPcs{fZEzlgN~`BK@N|NAch# +z9g{=HT5CK0HD3+8-?Qgqb>Xc8r{)~h)`o=6v>)`nlU +zVXNGA&Y#je=PNsZQK;rT?sZp}O_-ed(P!)QGwJTai`T!a+dBQmqUt)4V@GaebIn*U +zvaEca>cef5XZ=_C;LF2*Sa`{@p8F+{xj85992Is}|CkW4Fm=})qlX92RVDCT&EgZ? +zwfE75PnFHbn^#`CR(j^>^i`akueR)&SQ~CVS68C{>w({1!CU3T9wbC8n4lD^?mFS0 +zNsH9EOO8znUVR0HO^L4JLE_KmBwf258@AP7!F7T}|B;9V7sT_`OG8CXK~6%%C4b+C +z*~^~osfY@_xnI=!;tB@~`EGk4|4Hm{r0#NyMYKiHXY~ +zM&j^wgI8B}&Wnn^;T>2^T|$i-VMhV8#Tc2M-jL7$<6}C{1!vVLYIyba8?bpQr#=J4ZYF +z$%hdYIt9iS>lv?De5~`?*{I|2AtGb?>L2eeaSO1Vxjt`p5px+M^SQrCw*o%SljdZ5 +zeQ?2Taar>_Wx}uLOnuQSP=B@Z@O$s(24= +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 +z8dKku@;3Q!MTkU(DCY^uOVH%qV(zcj&+~8 +zKVGR2_;0<~ec#-TVG|_x`Yu!xTQGUrJ}#@YjsS9|^Jris1-R#($)n>Ng{^hJo(Odo&O!axY+Sc2o?oC{!xY|6) +zn9I|dSnm6uR-SlE?{t5f*79ZQ-(S9J`5D6St9_B{@BB-N^Pl*N><#6;VR*t&DQODh +zW`;;RcCN*&=S3#P_N3oGaGs$`+IM=Y(23eCr?yXF+oxY{n%hxO_R&r`(zDxox#=B^ +z$AQ@^_v$zqOp1JPkFh0bPMfv!ujqG|4)qAcI<2p0+xg~_{?6aw+!%W+#+=*6FnxO9^X3|l=?V|8yiyd{ +zs8A~!yhusAo59{X+4=lg@zc+OWkgqc?BDIf^Yo{egAG4R>uJ5Oyq&{p7o4zt@1I~FFF10Ej(5C(k}ePO3$#O +z>?ngNik>dMKC*owM|sV*cco2z7SnV-_w`a1X7hjTTa}vxpIu@}JpAv|ldaaN+g{q+9FUQdGTV8U`HGe~fB!9d +z-8k*v +zPqwnsE9YH5-TP*_&iOpaz0BozwS+LoCx2>D?2(z>i>nGYXmmiYJK4UlCD1a{k>h< +zJD$Ctd$T=PUQU0d`rgD=ANfn$o?hE?tb5h#i;2lovLaU}ZqkZabTd-q+@&XTm*p*) +zr1gEvpP)zcKV5N~v|IN2;ZI+7zxk55Wr^~go&y~%oj;?#te<>j>ch01FAA2tQ)fKG +z!M&ojp=Y0R&jh(UbC+#9aq&!GtVeTf?m8nu1KU6A4qQ*@Zs-%rmv8b?t5G?9DSZE- +zAg12Uu|J%?iaUNxC@Z`5G^FwWS1oUoNlR9U$ZkD%=bS*tX_as1D^*(-FaF%I$-C)E +zQ+Tm+Luc@z3ucnmLChu2){9$r=kZiX%=KKKBPzoyuEnFbr{$#DDzZz-@Cp_eG&7=mGMD*Q!AV9 +zZ0g`PZOPx=6;yjny2!xcfiekZJZho +z`8{&=Y0o0w`xvb+Gk9O$b)TL2$AZX)BKOeq5kgn9_uM($rFS^6VeDzy&js4eLbIg!Dm;(3lCYs%I6B3!x7k00Kd@7`9UZuNK;zrr`6 +zCA+qMa{d-w$Y#FUam$UE(u7aJ(YqK|J!NsV=xSD+G=2M$J3S}$TTC9A+iiSwct^7A +z+{e~?8fI{_iP!Gsii^N}CD&%l}aY$gA;Fi{$y?pt)%cluUaF5kE +z$|&lX)Y<8Jam6j2spiq_(yjL=J9Y{hMz2%{T4r1utnw%t7R42`kHg!bglTaO?O1=J=-D`J;A`NUF&pD($4Ha>#An0 +zoeBm=PXBA0qT89z_9L+?@N&~T-H4=>4;o4%0`8s3c-6MBd*_d+>eq4>ULEgFmDGIR +zIPdukeSJC6lxdO2q7MbfIch}<2s(f7bt?&)c|CW!w(i7lXFkuqd~8D?Z*ND1+xF?2 +zYBTz0_4+i;?cBO+#T>Rvfw_xs)#-@dvF`L=we9~wpQ9gUuWmN=SWzq-79eS#l)*LS +zMj(UBSL1a1xtkShELNDFHf}$8;r~A7l5=uxGh;s)Fip0YWbxy|`(Pm}$I_O&e&G+N +zo)Hbx5Z!!bwcHJVtv$2mbh`b@akhD$$7|@5`Rh!K+;VY~sws>7cF0XL@&72Y=8%NX +zwZ{H!*Pfc`>9bUvII>Q@NbL25MHVqmQ+K{xfBuJm^D~*|RofHH_AZz(C#3pz(IK{l +zzN@ck-kw!nEp^i8$?jQ`x3F!xTy^EN*w$$_w^prh?s=jXqpjVvL;cG7t=oUE&w4fE +z<)fN@;hY=oW(?5{f#(T=kAG-uCq$Y@d2bZ7EMw(~}$fh1gH` +zPVm@ebl5kZn{6t$M+V2%aO)=vKI?2u`St1I#}8T&zbi8%o&>%S+?a6woq>^}<*yfO +z4=OcVMDgkS#7WE5Em-5T^~1DX5e6q}pY3|qbLX98Q=h;YpSwr5SsR4@VlTOo%yLlC +zY+ui16>q_!V!5QJN4xbt24z}rKRfH8daLklvGmhVe*RPLOZIfzzx(3jd2!EOIj=-m +z9ZXJ9d(j)ZK+f>smOHE$m)$rW^(uyQR#Blj1IM1|uLs0=wk&S?7^?aI)isL=8>0?? +zY`+(^Q;%=b92bUbHEnO>kEW$Pdcv9>f4eo@IiTA0^%DE6vT1@RCH;3{N*1wZ|T6?{^$j@iTpO@Ws94)w>=B|5Rt_46L$v +zYB6i3^gg}65A-e@9!Z+_a@nGd7q%bTcc$5G&EBxxk +zdH4HOecX@N3X3R9Runy2TEV?7L_+g^wav==l1ocvWj=r8Vn26t{aw{||L|k} +zH}{0O+L;N$UjkU&ro>2pk-3|sjEqGUTQo8AO +zTwaW2UZ2*NJ;{$Rbh1yiojkv2&4vWkSarkYwtX(QHf1siX?je))M@1>k@N4v?Y0Bl +z{${goMaOyhEOKs)SNyj8ik#e<;$HD)TkDNH>-)W@IyY*4q>QOt>dn +z)f87Ou2|%>Xkke%pAyT<=`JA!sr%&Bg}>=fw7%2Ybl45c1`=(4z_Ox3JeaZ?qa{kFGmE}6#f<~i@#jz4-=H}5x4Or5wSDDk^&)}dg|kSVTN +z%ZlXoSEzStsZ5WU=C;4GQ>5d}nag|4w%zkvw()br0pUAL95Xs@!ny?pN_P^hBtF^XSI=g3H^3fg3xRO=8LMslgm3WnUOK;bnoqp5u_k|pZGxRj_ +z`C?O%+LYzF`lfwr_qG)Er7ucio;~qBb~y3v_9!VEtBz(9*|#naJCem1L->`W-%ab^ +zaOQdKI<3=BQpL8WD9<(2l)h4%=e^65qvw|oW4|Fv}mrPM)Ex~#n;Ae +zEmEtVpV>BHd;RL-HLq2!Z8@u3e<5E!_3FgQ&xO|u3#^fzG3lQ|eO=0r)v^`A`rp&e +zt?w_MViWQEQRM5;+a-2C1Y3F^zu;zb-}gq*b(zq#8LBX5ZKk-Y$ +zui>NVwm9#n&A(!AtTt)i`|XeCygQN)r`P`6#^hob!yMTXQsic;VG!TG`swr!9_@93 +zGcV;`Th_N#?bNlO8$>qszMG}<{qlmMDr@=WJv`j+IxqVFl3QM67E^ehyEx#;nb#W=*L~V# +zrVwO1;pf*>*E@S%?^!<7JNja?(=x-X(CwE#t+Tr5QN1MO)$?nDZ{5|N2Cu9C&H0jX +z6Z`iE1-XJn{A=D_c=RiE{SoyWQ#pMDJ3}u9XZ@R=VR&xaxuV}|Os1-D3F*%04O)_3 +z!q&uUr+og@%4}cn*(RZCNlvm$)c^f7Gv-QVliPpoJhMvjgo|(4t}(Q6`?wd|*{k)1 +zz7_JD^fN7l=h}6bWAU}0_q{(j*}R%#p5WbgPmI=wryZ)7chYZu8d%4`<$5LN`sW#M +zU+kM8IeA@B{DB2_-sju??GXxkBEI~nj_0%VS5kXtn~Bc9BwjY>Oyi?-O!-@GEi?_# +z=AXI2=TXbE%?tnEGOwAxuUAm$;-(oHmnZ&Z;9XFy@4fMjnql6Y8&`L;8C~SH(tqN5 +z_)tVhj7zYid_-5?xt$f+CoMX@dz|3E&LPEmah~D&|JCM;z6hv$2lu^Wvg`A`XJ5Vj +z`uY%yznLpfUvfFve)IFBnY+R`E994{RbKBr`b+zokD<=(a)}pti+dJ}P2PWbL74Em +zu6+>_8asMijXzfyU1w}K-Ph;&_UMKy3NJ3E#mjD7bH+3J$E(C?_cy#cz5K9b0=rPq +z*_Q>|7xU^d{<~Qu=l3#j(e~42l3GDr*@c>Jt`qJG{#s)6bB-dTs_+5!$17KSsa`!_ +zfbsn2SNCSVD4m(_rJyyle5;y;1eey2d71IEY8b>b%0y-cX6*j&+xl7YV&3hBlX+4; +z2j^9syT5k3%)YelA4cZtN31e~LT{Q|IGJ(1dvEu2?SZo?7v%S7{9LH(li^WVV)^FC +z!`WUE-uYJsOSms_k#c^vwLRG~VRi@)Bj^~IO +z>zp!XT31~0Tg6kWY%b^PSYD-7g7XE99mT{s)w_!KD1SO3`LnRO +z%EvOFUhTJcs%AKKh0Jf$`^K}o#>X%w?CQG7r_{AePWg7ck@PHkU%|O5p!m?$Rlctm +z8~lHiapql$ulrr8_{EAGx5JEf3FUV2`+a9_pKYr}evMeP2^`bBzf|}yjkbxe{1G2k%@<% +z7tUk+&6BUHxXi=sQ11klwKG(ftSL@=;QIZp_UHJ=myYaT%5+1vl6k5_lNDw58f=u +zE#=tFpuE|%1-^L +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 +z49`BOV^J +zrBa>E48C#qn0~2Gn77HqqNVi351#2clZ2a1YgN6h6Jt3$PTs!pRrp#LbHmp4`io_< +z+P2?6bwBZw*pDANUl&?E2zq`;G@-OfN@nJ-{eE*!CU5GBnz7+}&)Iy8v8fR;tM!co3=Ie(67y%=IW;wW%#{2$o7JvSK?em +zmEP>CzJtPi+e0^HFTJU7&i&!GtHCF#z8uS0l5)P{yy;xgeV6z=)`jQ&Iwodd9G^Aq +z*Cr_g&K&DWGTk3{9GMb(@7EODpGS(zIkr{Lzo~OjK51He)>)}TjrAOscPggE6nmcD +z?9exfY2B^uf{v?N9!)Wy%XQlPk+w&F#n~j|8z%(HEq%(a??2=nd2ctne)FD`nF~Hf +zS1(s(ZCNg-rrE(-w{gKjz9Wy8rxmSTU+U8*CdXR0)oJ>Nqk+3N*NO^=RRxBcaR!Ce +zO-h){5PJ3Tg{A4H@9)o=?EXcqbCF-C^_sLx{QFP!*RYvSH}_nUd#x%!qh0-N@^iOJ!61r`d< +z-}FgPwRG{5#p2V<kM>Y!j +zAF1q}*B$PEZKY7e?5C!I@nZjLS*|%pGEO`3MWRv6-EN{qnN6!Q>r{p)iSHG;(GPqL +z`KGVD|0zg|<5Z_>!1A+aniKALTZ)*;-RwG +z2VR@^o2?2hoZr!5#IKif<;D%UtE*SLsY{+b@R;T71@(ynF`}}kQ+Dl)oPFo6(lm9) +zq#bSWbGpZxpt@1-poI4$yR2ZVu7HH5*LIV(@ZX>R +zFYaPN+t;s&S4=No2r^j_vOVc3v(g3egD#Uh39^nK0esC|>)g`W)UX1^xwe`|V{#r50HkGH;CdB&t`a`fz~Lq9KD +zJe_4w_%v9c(7z*8r^UEdj;(h0bkU>zuO^w>bF1ABU%Bw#nu*R+eroB>`BIm&J#5GG +z5QhUMZzjHA-%U^iKd9BU0v=s+DK2~s?*n05D)+tqP=Gsw- +zJ14Y9GSz&k=K7hyk|OQ3`7FP(V9Ne$iw&+k+B=h@Qq=M=U#0J=X_GU9q~3aO)>-wc +zb&}xn@RrsqA9CKd>g?s6azFBT=W<5HM`?3Twq?%BI_1*)Xi;&en%ufoao&r4vJ@)j +zxF6$YTkrBEMnfRB%4x^WE8nt}cc|s6T!|Lsc~NlWKlj?5UN0tIeX{wE>kH*gr!z`Z +z9HYN9vN$EL`VjKc@SgJ<^RU*VyVH}_RqU3zEAqd{`R?UEraab0+SjF>lr$!v<#{qg +zYkU9qX_iyl7uC#qrR&1DQl(|tAI@Nj4@=u_=(0_Gxa;7w*L!ZoZ|FG0{L-`9J^ty} +zBrX%Kxaj(~+j$$^Pd=Bg4?DtGtChsC#M6_Tqwr#}U=ZgK)>}#M;?;MQ9{qiy^Pkp{ +zooAe$om$t^utu7@_So8l{p>F)#J0Mu5a&^sj#(@%p1M`Ctn}rUkOQmAv(q+vF)y1c +zpc1chrOxA!$t9^{LHaB#DYkR84n|rfWVoxbF4>U!;y|&yxAU)-t0qB8J)z2R2fx@A +zr<88AFV)=jY&S>Z;je;^Lz)tI&voAFWVuX6b6)eg%Xg%Fo<&8hvyDan5T66m^GkuzA&M_&m(~ou4_E)BQCtop%ZQJ)TI9PXC +zplqpF)B){jn`&Nn{dwoexjE{b&!1+O3$l-j6}GILUip;6(*5ai)d^fD!ar7JUuJy3 +z^7P!K{(C>u0@<`(UftVv_h58Jvzim@%N0y)as?9N%iiT)u-4dJcCmPgqnv{CjRh?$ +z*X!Nj-RP4f_d@4zi1HMpjHZ`q4cbkoobSJ3)jCz>Bh34Y(_1TYaqT^>SRRk>686({ +zj%LM5@uPw(TJ8CpM0}^4IK+N$ymvjYHRDC`q$MW3rxLDKfAhXRSt!TRJ}ME7q< +zE&Kor$K~B; +zV~;)2y8YxDFH_0y_*JT+Cp~L~<|w2dtQQeyILg4c{Rm?qXY+$g@lgT)Zmd{e9bGzQ +zg7daF%l0U-f10zA?4&)RP>&%Bh1Z1Myn(=0X9p5LgM*B4w_V|Y(xyO4sU$dCHnKbkg)v3Q932fvC< +z@bK-LqO(R!Qb*V}YxW|a$4i$rSg7}y$0!EO+Pm=)f8)kmz2}0zES+{H$M=iO+l;6C +z)jAKwRu+b5CG|x1Y&`9*=RE0&jHYN?qs9HEc{?)WeV2uBE$y7>G`VrgNycdtK26-2 +z$he6+*>cw56}=mSyO-zOj+xPZVp)QBvf=zqT??~U&G9*~Qt-O^OLe{rN4mC6?DTod +z?O7eczx!!!c{op|pv=_9^Oq-km*qKS9Nc-ai`(y|+b3bEBBP33$9ELWS#X)*!Ix6g +z>Ff@*&OJJvrW?-`+n)U1(|1{4dZow24{Z%ft}fHxd`Oh(?t2j9p|$h-+j*>8^X@&n +ze*6ASh7Vi+B+OoPPJ40IF;$oMYu3M)Rcc}U#(JmZ;Jf-ue^L%SSJ=0%T0PV$K~l}2 +zcIl%%PCJ~$pJfPlN6nCN(>P};cf4fVtiA)MC$R_Jm3y|3XPWB2!>>GARi`8rsopJM +zF`p|{yirQ_4v*HZ&Qo#8)4y+gb%gc1qvVMtM`jDPU155_ta?C4>alcCfEKf>;tH*f +zZ6BWYiZaYt{^I}onhQzmYH;Zve{qk-R@wJ=IZv3GB=Vq!($x8jXP8qc> +z%K{&ny42h?d;X+*i{v4RNIr#=6D*2e_eaUQ{B7CRapT@QQK4-Cf}7Zj9<2~NDZA_D +zp@$4AZ_;c3J!Lq&gKc%#MW5e+t3Ma|%r`lyu*zHP6N~-z!1xIlTW0c#YyH3RUn;8B +z{qM0t&fTYGFFCBR?3nUmi5VK=p%1t2e8s?an0=7~>qTiUH`Y^+(zi6S`fU`>?hsCT +zcS8QDi?rr;-lh4{ePUN`_gQd$+Q0l$%vHup3s0Gr$2=ceEE%MqJl2?DIrC!j{a%~u +zx6%x=%$uAPQrLF3v~$apnw3gxFL!oqaQ@J+BsAmn@zOnsCub*m^5pOEyTXvIZGS2B +zd60+5(cV2@R93qZldjXtCDF-w*?u{nUn_Di>n>lVa(GLV-Wz@MwVz%oKULnK`F_QTsw1_< +z#fIF!`80N^e~xjoyy2yx*JRGfbmrN#?+kyf815Rz@GC6+Yst;r`E_}Q?%#$8kqe5; +zv=*e~luzLfD1Kb>mP~N=Pnz&4;N`S!9HGm;9}G^;JRN-I{}&09koX!i_3P&}{0m=Mr+w7! +zve8-4!SeH!v`MDN7LoXm+wI>U)$qKxJK+N3rz177?>~PF)A&*@p5S@7xIMyv^-v%y +z_ms@*?tb$&Y`Cv0aN$U#`ExBTxkyPDZSxiCd^_e={d0L%cxrl`Uul8-v4!)O&)Tp| +zIO*6TV~ysmlR4NV)p)v+p51kN^vHOA^&DZx{^TQJHOD!mWEOJHy{=Kc!&Ty9bk3&9 +zX4UoL+n)T*;>E +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 +zK2ug=u$VAm``%|oa}I6T!u6IVJ)4t<(p$_~mY +zq0O0LvgP~yx#eE_uZr$(4=wqzmUV&dwTbniIl61-y_m4+(!Nd0o~?d&yLRrvg+~sQ +zU4C+L(jT1^Yrcgkf%bJqI~DIb%yQW5$DZgr+wW}s?)QFdjg2#l7_;|D9DB;-d#LnP +z<7d@>dg&ke>|cFVdvZ-AWX_VN2&GW%!#ie$xD;wfu(J1EFnaqg;(pc&KbdEom$&Kp +z{K=Evu0H1&Psz(E{pZ5$TrS*Ara#E23FQ1&r#;JnwOV4ZG +zRu}3&{dnz`IloVD(&JF?P-x(m=AYW&_T-1x^xxM%rN++N6TUd?VCfWY)w_PC%3uCJ +zzqRF;!L^SsUv9c48CQBDd*7xrADT{Vy|;7Gwf!dB4$w#Y^h{Eq)=Z +zVX*W<+&e2yS=RgSS@wwC%{+PW4d9i>TAAqpa13t(uv+$#MS9z*t6~ds&RKcgY^}Fp +zF^JS`?VGsqljo5=A)K4^vv-e_b`c`fx!&*R&%wZ#cPvlH$r{0LrPr&PSh%p{>S +ziMjcd+=HGB1M>~e{*O!wb~;K5NzQ!57e3jRO-}y(we;$0=Z#ttzm#{b_;Re|LY!cD +z=7Y@M=XM#J;$u$k-qq}!yuH1o({9fJUfZkpk_+;s +zB?IqWx|OhcQeFc4snrJ@KFjE_@orkbrC_&_TG26|mYwU?cV6YVF?p4|gu$`-PXAtu +zF%+=`P7f(8`2Qy`adF7|6`vM`cm=JLd&h4c=ezB#xaquEBA0dkscfFs+T@biY7z24 +z|5~|;>4){RpOr0srKeG^p}&9j@%ksWm(v7qo#8y6=YPj}UA@QgVqZt0tw*v&3!k;l +z`TNZ>CE~D3K9lc0oy)z`6jqgZoo{CO^zz2jLf*Zap2dtVN2jj{Yui3;>Y5Ohp!&~~ +z+`Q(ie}3Yxw~T9zeZ{Rkua+sZ=No=MA>`(3`Bav9>a5TiACLYFVLq3=cje?yw+>Hv +zo3V0x+$E0>+3{1AE<_5bnNQAZ<57|Ok}r3G&B2nZe5vl1UJquqd@Z^ASH9c2bGxss +zobm0zMEQq*mZsh|RQRkR_PWxIx#wJNAs_Rx`R}$)+0g!hdBG>P+|tu=g$GM6To7rr +z&{WI2`FH~_$I%0<$rW6)nS}2NH&r}&>i(lMduGt4ls8_kMY4->G;XvMo@98SwUbGU +z@8h9$t=E&kn0R%6Il}OJ#!gnHhl>TL+6OMr_!lwFVv~LRzB@}+-aO`9%A6US)s(Kn +z;-?**)+c4%W!@8c<9dO7R`9Q9@%?L$GKR7>KH*E-rF +zK2KJ)_{s9civNGOQN!M;bLQBnD=qGM9~99XO}{2T70GsDTj_9V-M-YhI~q=gZKzIJow)JUqcb92R0(<(G#k0SL-(7vmYX42s +zJYk>wLzatn2d*q=HF!PC;=N>u|Fjbv#$8Ds?)MLIrD_ie +zFeN}E!DQ1Z(YrJH8)YwDu1fj1UMS?S9sA|^&C=;6<_Z6L+px(!*aq(>S~3)tpyN!8iM_Kd=iqqHXW?|GUB$1}Bl$CikC9t0KQnH4kA5 +zKB95DNx;g}f?=hww6?nAX>bl&^MT +zm!)}M=oBv0>ayPJxWssps^7df8=h@DDSUjQ?i(@n^Ur>3ta-b!Wt;h~?G*))b6+-H +z&0NhTZ0tUBN6!+r32f&&_~W;`?tgKDy>SmGrw^l~g~A~&Xl)XFdZW6HZWprHN*>)hUE}mruC?jj{)#|nzc8-yjgirM +zAD4M!KYGWJZ8F_4DdcyQ?2FIJ +zKEj3SCFc7=pBBxP*?P{p!#t`$ytYp0f|ql7q@jpXNyo~Aj68CVCn8gW9fBD7CV7b+ +z-Ef@mOX$w>%l=Ds{%lNY;}Hz`%Ixqo^2qr^Ds%S!ikYu*YI|h~kNokC4^P_(>2$rR +z=Y3>olNfP%vYo5Px$hEJKb^W)TdLKuVWa-cSrK|-UID9(E++jt<^Lq>Ub$hrX1#NB +zv-Q_cXWLrXn*CO9|NlT}X4&Jm+?Sg&HS)S%HqG26Z{E7F&eBM1rRye(%2!ST0eP2> +zNQ&^DV*J~8VJZI+&nbeYtRAArjP`Ia&-%XZ_DnB*cP$^`+#`SXw0MRJ3$y3N$$5lN +z(r3Q*py%MF9eo{JpFAwO^MvJ~Yj2_P(^gfvIab +zS6m6l7V(eIwEU}?Jfx@kwNp;_(-#H-3Y% +zZ-?(^^E{3{D7xs}S=$exJKuUbHL5PGU%XeTSd(#&(~Hm6a?7^_aAhl{9Br~nnz7_@ +zK*es?1y|pE&po`XJlK{oMkac_J|Hgze6XKdxcr{^Du_%4{Z8O +zOFz7K6A8z|8D|eT^ka@Jr1^(O=5iEBC&ci|KcDk-!2voyVdqQOtVbd +z4hf|7UD2=-%g)(fqP2Q?)a2BdNiE_c7OMht<~$P;@@l%^ks-XaoV)wn*ZF6&ykqCE +z|M%U0U81p#`SVP5iDiQE7Y^*&ZP3yy7e84qb4A<7_7nhti@ruG{ +z?l)FaPwcM!Rjo3v+TS+$8Rs>JzxG=W&fH+-7qsulX+J>&2BryJZ`Gckv*4`R@kMfH +zur@=*_ub6>CJbI4>;L3t%dx*Y=Fzl3IpQ3{amLxND%0M|Wxh|^K277-$3xxQ6-%at +zZQJms-v0Hf*;+pg4Gh+Xo_?#8eVq`Eawb)9Z>{&eJ*{ybez&;9hp=dQ|zz +zeuc9tYqD1?j4Jk%=boC@d0p#kseh=cil4Q?>rGF3V|Vx;Jg8gqVB7Z&vCpUSjb`23 +zI+;U;NyH+u&vF`j|JetpbzJ(So`~Lc+jiUFymXrAnZ}|sSBftDS)rwMgjd96qw*1} +zJx+{Ono8T_@5>Y|uPE{6G5fBt@WT@6$psnx^L!76?aRL`u})P!IA#ueU+SOaLi??I +zp73sXtFa+bG%xVPLW93@9H%avkZ2=I*VwCExFz6!QMb;Ck!Zfy17X@qA}4Y`q>Kv3M`PoYv84BJSy)LSMyt +zo+N$V(ALPvH$%#9Y2wAhT&xV|RGF)1oyk6QGTilLB8U3M2+euZ4%+uih0l1(8+gU+ +z&xhXap6Y66Rk!@PvgOZYp%v$O-$X>R9r{}o!|NJ0{blpM`QNr`ewp9jEZ+HExX7h< +z&9X}xUmL!kVU4$xm6~!qfYIlT^48tk=BZ7w-+JV*Vyd`wLvphJB8#1pj>iiAq$Hi6 +zz}9tqXTpi6(|gT6^zV7Yl(9Hkc){F{56X^RQGfn8Yx;Scl8{508&2NQxD>j3{^Q3C +zfkA&~o;vy7;bx1Jdq}{lWzv2Y*$np1`;sSKfBR(LkGObE-G~T=4H?tp$_>x|p3Br1<;K$0pM@Ua@Q~&z|P~B;=cY#~izm>|>{9@~HfDKPy;f +zZJ2E=sz2eL#p&26p%)+SXe#^P@jhd=S@h<#rQ5|$v-%onEHCSm*fHnXg~|K<+$QzN +zUN`gfTfoD}_CnQK#7^p(YW~WVUERz^p2<8j@)njiyQscB+-&Tttv*e<|6Q?8;O|2h +z^iMmjV>2;1&+P5>K0)aCv%O;ador#b>`31hbv5zT7mgkC&DUxQ+mNUY;ubiIdBzurMWcB4^!J!VR +zjHVxV_`J_w)9@x!so8(s^%TkJE8h4Y)nn(rWBU4I%adnCObwd0s`HyStay0IX?dNA +zQC06>=}D8aI3jwF*sbjKVis9aoZzHBOacjfkD`P=h2#TFXR +ze;|5l@h+#$lXRC<>+N{GFlhy^PXAQBte?vhpf +z`f^WadvvlNU;OIUdH(|`f7vqkvOe+4U1x81Y*}ZpPS-o5YJM?gGlx}KTQ7ZJ^R*6* +zpBtnk)*`p*Xlj#!$k(~A8dpqAvMg3eTfKEBlb_Ts!=A<6m%n-K+!*ljctG?E&Q)2V?}=3n +zhigq0yKenYsadD}Vn=jr{J&Sf7u4C#i(2gPdB@4};Sx$KNB +zujl7XHtS8?e*M4aO?&3$5AQ9Up8fX7lkdGcK3Z}LhgpuzRde*e_-um1)fX$L--_P& +z_tRBDEywWiW9G@a?Ej0|liAgS|NJ}ft5q<*2Rn_4ti2oIhuFNKHIZipZmhX +zGjpXqe~R**Tdx;z{PjM6Tc*Z4FN9{Uzor_hqIN+1*rN^QU2p$)6|S1$FD`cG(FFY; +zl{;-rJ$GhtpV_?IeXY{x2hN#-Kl-+Anke$=80*V<&+1rzI5O>NT>UWFuuJdWrk)*| +z%4>Ko-gjZyAiq0Sa(qSdtenDFWR4^`V!6i?J}y;l`TRcu_e`S}yJ&O0j7P0#kNaV?YCV5QsB`18$! +zxSk#{r*?%cj^D$kO%w2__FXT%AaTu=PtTWqNjYYsZaF6?_{db_?k!w;?X1U_YNSmz +z^l+c_=;$5Ej-|gs_-{`Cck5@6Qt+Aem!`};`qr>@-@WiQuZ>T8lj=TP;(pZi=*>$j +zk9sY+w>bwEu8KVFqU7bacdhBu>mNQ`Fwjd&IwQ2XSw7U`+^Un}FIhreCUPG>?zwa7b-~)SiQAul|GV?7qu}K5?ICX43N4Jb +zzJ3`Ov%T*4`JD@I?Co8(O?`r^)Vu@74wQ3S`A7bH^5SOui5a4%A7ABf>if6EQ-Z}o +zdaa6@+nrt6;#&=c4;h`;e-!*#VWYRM)M9f^(TOpAp;pdPYkrDa29>m}o87MKW2*60 +zA-7If>uC7Q;QeYD-V%%lcK+v{vs*$+`71Z)+wy5X(*n|%PqUkSRJ*INp!9Tg#?#oP +z{wvOG$(R?B)~n=vyxx#^+u0k!FTS&6dw<>e`bw%jE9>iw<3f5I9JLIlF){bWXRMv$ +z`DS0n>bb3_SFXR)*HgZ8;gTxuoBcM`Z{lS|ufN~r_N~cIr(;U`j4Kv<&SY*5nzJP4 +z$vQEa36H8Csh6I*Xd$B5=NhA)EHj0(a{DAt#)_0nKFi*=*E{_!cmJRKdYQS +z#p`;1`v1s8v7SSUeCfT54O!P6^qXei>w0QUe#I8H>p*SX5x +zx4PC6rcdkN%-Zzte#k46dE`QK9{-yzbR)rY +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 +zQXg!;_%8p|4^Kw9;JP*aaZ-Y&N+ +z`WDudJX_iLZi)RFMl*&uiPR_kK^>~2Sp>=!~=X!sL7A%>;vAV(dK(D~7NC#G#h0DwO=IrX9 +zq;=Y8Lx91COM7e_&%S$Y-R<>Ey8G(grLhaEucXa(&r0Jx^`uDnUX^&ue&4BY +zXQ-(b#|FOs6&ZM2>UPuk$b)92B*=Dqxsb!C~?aj!1Uo`2s|R!iP|Bv_WunXoW) +zMdJY*vq#)_?(p#y{F%HvSMp@pEZ1Wpu5(gbo?O^hGuv#9`G)RImdeGeUb8cs6<_R* +zT(;(6B)_FYk8_!odDx#LZ@nERiDxg%TfaBa&*)W#l)83kW +z>UUiUyA3a6mMNBTmk2Y>o^qk{VTAqK2|Nlj6PLCvZ^(Y>#S+wC{_E_$iUX^DCn-+a +z!?(F>Cs))GH_dZ*_b&-?W}i^9!$oy==F;mfonIUcIeZl3{2Q2mhO50a;cx!hs_YW| +z{%Gm3Q1Ki0t5pQLrw8Un9(b-V@W;>Y&Vi7y-}n80?K|V(x0jXm+g+h;r;?*&l)h!$ +z*mO9}w%$kT{aX3wTjuwvw_C{^SvULI=WQ(wf%b6ZyY5Pim0C9zaDjqiH7Cnxg^H^n@y +z08dWI+I>-x99Fhd)xPg-y|QW9vZ#XPtT_oA_9iV%4csYn?6t$JFX_u~J~n!q(OnZA +zdsbI*=Y!^|h6zQ+d3OJfE6$yj_U?s>+vC7FBDD`Uyx^Fjm!oLU=kR_1L?5MX1{ue$ +zulIU3>GpvyR>@o5`SUn<^IhpkyM8paW7>lZxrdDvrXH6!B!tcS$Mx{s&bA==)^LXn +z<;v23k6Vd*@jCI`PuZt?>Fef*;FSzVwq?C^J9Ne+lsP5h)bE7$J^7K9sWlq|rMqg+ +zxU2|pXQ|6DUv;fX)v0W6)zyt!QQUEEEHwGazV+!_4H!iHRKpmzu;l%GqE<8Ze|OZQrk`TEv5f5K!F(*LAo@^)?6 +zTz>FI$ae?H?>P%D{=Bw8BP4-2oYB@mWUtA3p@p|MD6&ZJS8I%$!4Q_*9jtNjPKUr7 +zqgjY4Te)R)f(1{HRcbV +z#YZh&P5(`{v)ZCZwHsz%XDw)&!^gcR%|opsnLU9&Z_N|-?<=EUm3;)`H_2q<8bNP^tO$k1XyN?xcUU`sDAqBWo*6b +zOwo|6L+`vaFR&drRW?g6w>iLYhm2s>g)ixumifO{uD6*G&9O=|MCGzd3CE{^kdlUr +z+VkZ8&(r%f@z5^5HNI=s_Fb^gRlnj|k>?q<+)Z?g@QI>N9#@Zs-?M&Nl;d{K|4g3S +z`dw|-9a`CLM^^G19k;)@wrBFKG~v)on<5{~aCC6omnARrOv$^&>C2jVvB!^1w+wl* +zV!~yOrMtr}s7^N9)?`~RU8A;pwXcAIl#JE?-1lj>C(Mv;eN(WchmJGu#iR_HhRs++C4=p?c+i +zYoGHM_xg!n__c5qQ$~_tN9mpKwqmau3x2uP +z_VV2-#Hom(~n(zo4X=Zy}f3;ZU3Rl>!2*5C&U)< +z@~qyByow8_s=393pS+suy7~Eq!nUcVD!yfQd%XD!Q)eq>+U7@pnpEx*^`zi}UC`X} +z_KEzLzUwh_UpKwEym89Uwgp*dFP~y#%=6;SGJb3nopt8hC2a+Pt=&&pH+dXB6tslt +z?G11DL)Y(qVhy-^cj9IJ@WeL_Qjdq>*u8NFru&oazDcjv6=%BS}^ +z&#YYP-?@KB2)h!`a_*{s=Uz4YKDBvY$5U2zgYVglISP|vl2>;cGJo0r@%{(lMYcZj +z3zB}%f0Qq^|K{@Y?g?_1>AzRhYW=ib5n-Bj&B*0KN!`^SPFpy{PB2(rvJ7RI7dt!N +z$D`u*Dod8MMB(PHjq}g!+TVRm>8<>#pDk_oDtas?F?XK4zh_e{&leHSov-@~>|eiY +zib!LdV%6aDQ0V!iJ(H^p^gp+$-fB#+Zep`pHTj#!)*j2Laat^2l4jge-QLu`Dd5ty +zgqL!yGsGHZPn%{weTQ(T$mY-XZz{HI4Cj+(6-Y4S(q`WJ+u^o=`xL(|$@7mLR;#l7 +zfB)h03hsvdZJ}1lX4*m$>VXoGe`ZNqW&ens{UUm-@M`v%j3nb +zCkJ#LS+)K-r*FQb>D2sdrJd`Y1WbPIDCar!K$+vS_6}`(&6T1dm6I~g_h$AlVq7Zl +zR%-oA4$a>;qJ;OpvG2UQU3;klE5~e`&SvlYhd(S{@I3g&)7-})W07pJZ_lUa6OKNp +z>{r-x>$T~F^}ZZd0tR)iHXlr)PjCMB##Sl0^nfm8c*jtB)c`DyjPW{=>`2YRfUUuEOYzg5#0)jJNSDigBdY=1c(9~9I +z$4ssstN)MfZ^;_XouavHhWv6%#g?=imly@oHzb55*LT||JlOm^zWZ?8G+}>MslQu9 +zOlEIiVZO*!V#cQEGmaI!-3INUt_zceUFLlJ#iCUGl&iPvNlAFYUB$BL(Y5Pano~QE +zEaZC?{<_2X;G=rqO^xr38HLX#EZb7WW_jyXKvVm@KZmqR=giqJWPP__f8XwlOovy7 +z7@WB3U^Pv!MMu6^G}l)sA;|cxYw3!sR#Ss#ymC8Y>QrqPx#G!kn~E?0Oq*j)2fP*8 +z!s%(x$Db57eMuhUjOHGVkFQUD$hmdh`PHeoIXfakciDdb^l9O`gG=(x73J>rjax0@(GIzR-R?{woh2VE?Z-BU_#fI@H_ilw^$~}D)MS;lvZqf+5SBW +zw=U3FJqYdw!tIwMr|3iF=tJJDF75+DwzgNBdeevNVMnMgQgapRsiwC4wWaL!r +zBYG}a-+Jnp5f>rtx9IkFAI+T~-%j1cwORahx=%On+|Sd_ceFKTM>0p43$5A}lIDLp +z{KkF*d*$VJyz)2F{~tP37Naq{`$^y()tosR%gfc +z*?uZpa#~q0?N)0kbNwP_JbUTfeH}NLEZsE17z+<|a~_K*zZY~PY{LAr+@E!RFO@zo +zy)eRa$8nzH4WzQ47u3pD +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 +zQoC&?t6BxiQeS4T>r$1c! +zca`CB>!nvjc;7zWb&NgW+JU*|EE{yKvi@>}ay+mt+O=tm9^*O@JL#7%1&%(u8r1qp +z*WBUH+?C}IYxb;Ie~WKVw88b*{oG%_i@ln9rF^c)mj$!l?QaZN8~w(!-0w~w|6>T8Gc{+a(k;MY=9=I^R!-}@`~oS4czy+J+b +zFZ-V}lP`S{OSm)h)NZNMYmTjxpUGLI`BqkHrQLz-bAE~^=1P1Dx-6%EO*QZPoQ2$B +z*Btx!w(x3v-7os-we?b$&3t~`!sPGA{+?J*#uG2+nI42t>)qzp +zu02vxEM&7Lvn6(O!fB$h`&*urV3is}kSn#^7SGw`)OudSAzvVm&&qwaL7gJZVR`in|qq*{q +z^PCRsjmy5)2kP;M`lQYb_}D8op*+Gh|48|%676#Z7pL@QKYIG&o3;skhJihs_-v|Y+ktqis^Fik3c-S9><`%>Ug6 +z0$26;?a!wN^@m$FyM`jD-RwhLX~bIw}xy(Edv +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 +zM-;|4J!Y5eDGDl}J2`OyuL$gq07>Gxa? +z$NF=cE@0~LnIL44XVoPA^jFoM#=}SN7r#GMSu#I^ZSrfcCmZ>uUfbB)(fqXU_?HJ= +z26l{E5;ILj-@ZARtQOBEbNbw@y>ddaoKG)h^2G(I&-XFdtheopqL#fw;}v#>wR^Nq +zUYLJqj^w+^E-w}Lt#PmW(Y$twYkTYC|I^&I#%kO-p`>oW?cmdpv-3HNtBbz+*4jfe +z^%C!d?KwU7;`^gg{EHJ8@>=cudL@6F)SvPbWi_8mJCCKeLOY1ncXK^l4_SpG3)!E-HS2Db%H_b*x +z@i$MwR@+0;_dcz0ejguYzG$A*q%AAwUF8jlPMEoVE>N>}@^6Tm$Rwb8y0@Wb7oX^?A~~~HDwBOu +z&uOXc4XB>H-_ON8w3tab{;}RSUAFn(|NGwgeqUp|=%uD4)4U$XTViJ)B`s;|u<2&L +zkoVygPe(gvPu90`|I=#fKe(@+e>DHf+!On3(>;T{-cRlMEwa4j$+9OK`3ko^`21l- +zrlXwHX1-%L_N;L_>2u}#lrMUBB=3CS_TmH*Z5CKnibciaWb=XyUT`R +z^}w)|TbaJNFTbaCY0LD?RdRu16;n5gosjX;c4`!ws8Y?>CeJ=Lt8cbQMHMymI>jeiQFwrB)}UlOc){ASmK&%2+w +z&YK!F~5D&selvq +z+kLWY9cTS!xNE@SHu=V6w^u5oUr!jy8Y`= +z|8zfnHP=(Y^H=a)TJ^^~=cSf@52sj!z_fpfD*9h;JQIH!=#s(A8Nbu>)U?NZq7xRk +zP1R!f&b4gouL+0ES8Oc%qrpBuyGVv>KdA@|ziEj3Ibr+DwJ$`B8O{(thd{mSn9 +zmp0$q?{=Zs>9_!sUTUKfuUiXmzQn~wJ?9C<({AoLqAax_BT15z!CdF5(k=JA83$dL +z#M!@by=AQXs#!bh@x5{2wdduIY&l2mn#>3^HsVQ!? +z@$~O%X`!;t2#(E;^~|SgL=G*AnD2Q$>#+K)$X6aaP9iKdKjRC&}j@-_daBhP!`7_TtNX?-cLY +ze!Fw;8NSBaUj7wFgxbYlSj}?g`TlL?$*lWZ3sqOHnAUJl>CxHW6O0}#yR|)pU)ecp +z;h)dJULRU!S{5F)Sjeuuyi4|-&Tem3%^x?KlZ12(d7Y%^tGx86GB^G>kI(e=yXf;# +z`zBtTcHvxdo$>Rz-0Qvxo>O($w!!p9+#74}TME`yHy5d0uBePi+<)Z3f3y3qyUe7V +z{JoOGVgy}goZFRH!6d8{{oLS@Ro$vcrmi;zztkZ^@h>8PON+utU}QMz6a0Y5$Urch#ovMTDA-`PsG21>1Yt=NyiFI*;SR +zoPRbg$9BeCk8o5lOjq|2>NJkLsdGyI5c8|0N3X=MzP_T}^2(fvdm7`f%=^eK!!2&X +zm{=q6jgfo8T&3+-93y0wX+7KC$*?8t^z6XRQ940|iw`Z-+xtSuTu0JC +zbXE3sDZeS-odGQYRDb*>A4}NTY +z+xM?jJ$+%>BWp{kkGpSetPo|)ocW|8f3}WD|God_HnSNGZhB-(bWW`e*rhb(7rWd| +zz9q*h3$M4Y-nswaDy8!9udmqC6Iddve7yHe-YzO~W~cF%O>uo*j;j;}D&4FSCk1a( +z@c0p~^!(g2wHxbX`Z#>vMOp1yTQw=Xct_hy>!i0Ar+;gFU|hj$A=a>Km+9?>D>9iD +zC(}f(r96I;?fgifA?Tx)BMUW*EtHMC|CHyh3lmCAC1hb;^Q`*^nT~+t|QVrk1-qyXq_R$aIsxw?hLK)yAK|U +zGVD$6Tc)1Ma`l{lVxaGIC7&BQ2PSRO+QF0IzNw{1B5q3Xq7A)w)rpOn&+P7W4KjdQ>EAF!`!M +zju=n+j@Da|Tb71h&khkh-ApQHLe3uCb}Q;%lo#K%OOZ=uM9w)@ +zC+uGLd*0FiRq|CrcX;>&SsM6WnMQ|P4PPbDevF;DYPFc)-^3glr_F`855N3nC%-}Y +z&866*cb47nus-%^>nq04>!BV}y4)|`USKlcoz-Ypx~-vZLQ84l7QU*GNo5zrnWkm_ +z-5uH8xn3eM-+x8AFh`V(dwAzg8|S+mhdJ)mMcb%sU+_gW_TAUh71!)$9-Fz=rSPSH +z(8)ES`s!bdo_24aYV$dHuP)oc1y7gWJTb?(fwiEE&nj!#u_GV7=X6WRugqr7)@KlP +zD&B8CdtxEqcQ*-zp6oE@zOBdZiGQg5_^W19{*O}B +z+y3v_juZP+Z))k8ujuZZJm(nKgcq&n&hBKm?DJy(nK@Ruvv#d$zvEoPYZK|&rqpI} +zXWhmL@+Y79U1$oq&+FN=czJ}PbHM9v{WtAfCQVu}`-P}sU*^r{yDzcpNBX8`)?_g< +zt$%){*Px8I@W7|-lUP#My>gqr#5yX{==9cwO}nyV)K4{4HI=^;dmRz5B3|PX%M7dX +zD|eTfa@<(-?rV@`>bx^)jawom_8JImynQ_3qY?j0zJ>*}{IgijX}+A2y6o1Jnm5s% +z3-@qHXj}8xr9doDU?)4d} +z@eOu@Y8NW_BoALTzQWF<_A)@)yZ62nSKUi?EmxB|W5*aTqZfzxziO#66y1H?CfT$l +zd09h+@&>C5JT`x(v?@zX&;J(QE|}M|<9xsc28ojs0>2%dvFVo7QGfo2AJsC>8F?0S +z$=FUQ{dm8q#IB?-DB?tOV65OUW@GVsqlz5IUU?@8NjEhgSAYLs;1 +zxYP9DuB`3RV;hvB0$ZhZJ^m}d7Y;}j-+klp%5W%8YKkH7ncTi@>A4S!)S&s#8Q&F6rX +zZ`402@?Efa?GdiN>G=%Cw~I{Iy0J6qyfF53+a7pGZ;ty1PP_H1ejod%Wfm*2c9+5a +zqRyU_Pwy?Fi#08mEYK9};&Cu!y?W~3&P`Lr($_7|;Lp?Q-*@lP@8Hloe?=rtg#@2< +zU9(PSYox}G_?K>-VFeQy{$x+u&o=junB2St@hksZU6B=L5GkL~UKz^h{cFt$jgRV; +zCOZ=Q!>_8{-5+FrO5}p|IoB0ACw^_6oU$fU^zEgFc9!gU%QIH})nd>-DJ5CDT4smG +z{bSOd6Slwmd*-;HpUJ(I!i{@xrfxMqo2EB8E$qSD17S@!3%1Qu-2Evc-RvRvg0&H! +znuS~b$JgHYG568jRPUN;<{7a?&1E|!u0@G0(~-F9a#T#HU`PBmpVZ5ejaGU*9=le& +z*p$xw^X4wi6qy%uPP5FM(3H2qvha`C?1%~6KW+HZrfzq9rSzr#(B3IGqD@8K{fqJX +zlDtGJ!*{l7c;KIeqrWB?9SU4GqxQd7ymb6z!^tf=Gkm_X?quC78e*}`UpeJ`08g?| +z;)dER*N`b1U#1I62ejPII(vOJ&%*h~BPQ?bn^)^T;i=@rha9U~AGm7PtjIqp73Av3 +zC?oKxwMs&$Dtz(xCY^Qvbrv>@Ch<*^yu9F+k^YA2gHIbyRz5%L&CYhEXT#A|Ij@;R +zmx}W2C^!;S@?CQNKmW%IxYQh%vxH6F$E7ZIt$yjtzt^Xzy*<2p+6TAeH&!;iH?-yU +zcMox$o_(fCN#t2!ao{-x(V3a8a}K740bTMP@#`6g_vD&wXebv2UukWon4lww>p$ +zhH#y_Wi60=_2bDI_bocFH8EAlT08H|TzOW5w=k-p-{+su9@aGtoC2!Jk|l?|GHr}) +zGt$+9_-t6bUwm)+bn*M$UXd?v-ITwYCMo>(i)9l@TA8$(E9!b$iLvVmg;_r|5@SOB +zT4ZucVk0&z;*0sc>HN&{qzsn%%$pC&*6n?LI@^a~tzQ4RwdG8^&zGnR=ywZ*E;49g +zXT0RlFj;1%ef^9B{wnu9Rqm^%W-k1ZGD|CC@msB@(=R=~c_>1Azs)+%UtTlkTxobO +zR?cV`{Qd@m;x*X?4(-pxjtSiN5eVKS$yja^srKs7pRR-VSM2#$(e~+1l*jR)IKkGb +z3wI_PFjlKJl^NN5k8aB_=gI9_l$mzpjNSJsTi8EMo$Ybs@%IxutjZr)K3SNfF3U1k +zNiMth@?L{HkLk+(tlVef{GV04U|F@0gNbAL)Dj1d{+x`r`=_KSBo>8TTQ<*Mu5VR) +z$*h(b!C1zOnDj5~3LC`^-LI9H61aO~!xwuQ_xk@e>vm4~C{|W`?+o7~*6&N^d@}Qy +zU{*m7-| +z$(xGIpOIJ9(ilo&li{Q6nvLFxJv1;ZS$lxS~b=6zmu+b +zHn`nC&()md-SV{{;%}b6zfL$q_ZOR;H;#6#azA;p&(A^Y=3A$GxPhy|JL#C5Hx%yXOO`vsp-FC+4}U> +zm%ceK*S|_ODr5*aprb2pe?&_&V4o~+<*g^%T6J!3H??qC1|WK +zW4aeVW%C~m*-w$navvwvD2x +z@;_tSmEjNbKB$Ls|GDYU<{UYBHtWI3iUA8lTXz3wxn(vdTh?hs#jmWD8?ENqy}w?` +z)6rTRt2t}kH_6R;GV_0LW>sIkwBzmfrjy*3PE&tdUtuWL>)>pdz^LS{826a-i_rhn +z>IFX5wFS$5os}(6>`Okuul@U$}@lM2Y$BzwQ>r-#V5h +zTwkU5r{w)DOzS$M+xAjS^rOY%EWx70ivjy@d&OLPC4RL~YJbRr~Ymdo#k{wcP% +zx6gLU)V}wiLDl+&!+pEszx%dlG*nynY>^PZc`PDqpLLqX427g?v&(9oeYBTLuRQO6 +zYP+!c-G++|SEint&~&(*FW_P*XuCT-$?b%_VGl#^0^_X7 +zbFPajYdc+Dw#3AKg~rvno?DHUd3^{z7yXL)*SB36SGeCykiB;<@7@!4?;9NxB6?h3 +zS@HUx>3t_P?MB|zJHMQ5GOli`Y5kSbv+#-lhwSqmb1S5s9egdm_!-|lobxF_u4l_K +zF3wJu#JW9YO75ngves=EH09q=)s&z)u}W{FT-QU}#XghlcXWN4+U-8IRMLoh!O&>%;^*VQz +z>WR*aKP`LRlkMM}V)Lky-eW7@uf8|kX1CeDssmHC1P_bJf4YA2^4k-|B610lUV@eK +zUUK*Cf97X}XPkQ{$ofCv``h=TNxDXC2VGz8Z_QJ(^L)7V!Lm;llBe0W99KA2f9R=< +z_#;`Z499P&C8C+jHh(NyE>L`R_t)!{eqrx>S53chyU2CBd64yrHo=>r*BGLd?p^JB +ztkU}F`-&{L)LUUCvNyLz-xTUisco5 +z-sxuLdb;`Svl=^V37LniCYE~4>S3xGW)Hq>Te2k9Oi22S!6cEzR$+e^YHZW3`sv1N +zgTdKce&qtoGb+Ds8Fv^RyC85cYH?HrUsA>K!wuIM%sXnLrw1&* +zCcbP=R_LR`&&D4Aa_>o;$W{nFD}T3Z8s{2=GZx$49AH^y(zml-X79$8lhpzxC7667 +z@;fKBczhPweIi(zGx1{QYQxC4$0luR>C@A>e`ZE5|1aIgogepY>v$`C+xFM;W-*s9 +zQ-vQroDyJOG-;!z^nbCYhhL<&ob=_a6ytYt6gsgvioYYu^Zxp6IxQX(+ie~;AJ<8` +zl=X4f9Hz->i{#RH?2VHTY_@HWoO6@?=pG**zwcpZb~`kghK6lQ{Ka?0)m))kG31Z! +ze>KH7_Zhx@KGFE|E}MT9%O#oVIw}I&*M3;`=;_sC?*!LRQF6a$#9Db^b(4;xuTqz& +z!8MOo@gJ%J^SGy9I(dHXvwc-F3jN>xKUkKidUAa(`@UnP@+Z>!x{}|f9(RtNJhlE> +zID-e5?YQdo|k@Zf8MI_uHRL{zotkxAO83E=G4|> +zn-tDoR0;gdIh9HCoxt;RTCC4~t~tn5PKf>D_&}lHgu+{qb;7s*?q{95b;87NGM^4! +zvB+a%?g~5fe!ir2{*D`&+?S@>ZDW~Y7tkhe#-My$_WZ=ZUMatCR9&mHVVv@~Y2K;> +zT%PapWL9P?KWpUvGcT^JBQMy)O7Nm5QwG;dJ72?})0fq+^cF_`M&sK(X>ga34Q!0n5J%#D(gD@&|B_t +z)a3+u+dtD}rIt0UHV$Clba>Z)?^NT{-wVGozX_A`vo_hsn-;gXb>g0_b5HkZEHXHM +zyt^j#Q^)(ez4v;bl<`)~@^=V0@vfZ7sBL}Tf{17Lzs=lW@vAbZq0Ha>X~^4Ccg%jf +zz7q0RI5{g~;_j4RO!AKoJIuVB#v*)aQ{J3a_Ey(An6J3(V%+66gU2ADyV!u|umKPA +zrIq}T&%6_HwEiUhdH>Q0V%tN6t}WL)Veuh6u3Guf+VuH11B6%@`L{FdVc5+Oygys) +z^z|~m*q^S3+2A +zmC?!6y6rpW1iqN`uP3uO>B{R|+06K#Z=WB2DRV@ANo|wE-Z(YKH~PEp*t!2W`g7~N +znc{(~FV$}Rn^EI&!r%7MhN6kzn&wKaGFllER9yWbX5x+;ahue4Mrf#o +zebeE3qPXZ=A~bdcx`zzMmo=9``x^^hDR@0{b;j+uU9!@>ngE +zV0|RHUGHyHUTRE=YrxN_GGp7zH|^Ki`)}#nCVEBwz8sS%^TDMLo{9H*u<%;{>i*rM +znvxl-%6(fli-YxC?li+Q1?x25=c+vPQEpvST-YMsv1Mv^i6d`_J$sPeq?+6_K97H= +zYpFIjw@xf-TIu3(=}=JRjw?HZFRQmLd9ZIUpTbue@kL3F>u;!?zO}jR-WL6%UoV=T +zXqwUda(knbvv*PvOd$>GE%${`h)l!+Q7ovCUDw=TrCUzA2HM +z?|qBmz>X6K{`xk1Jy0U`#)GNdwf)A)>47R;$P)&-d`hcbmhfHXAfQG +zzYFfoU6DJFe{$0bmN_}@ObinkoDCQlL<}6%=C?C{%7~beYVXp(B-qC-#oscOg{?8= +zf`$rPKclxn3nQZpBf~Vu2F(XN$_f0U{kQl}KUpecRuy&VtCYFox!+=`OO9rraBg;x +zj50p_qB-EU=&{oIVV+Ffj~DTnUbuMq++@a(Qis}I=dWi4ar6bVRL5P~dQxoL(Y8(R +zIgfT<>W|4v*SMOUCL_Rde1)oWCwB+StJ7W~HKqDfuAG>vx@&RdqPo<=1y7y|GwW-3 +zFPZ1|xrOhvFlTb-Rk4{)XO)h>PwI?F>1WURdCy_#X@kQa7cNgUcxorirM9K7P|r)X +zjzaq9gh7FRA$ +z1=Hyp7y0lfFnn~e;pzEOvii}N3lF{2?zCR+ylbsnIKNh@u1`(x#P5QX=O=&qZ})tl +zvsijT*cE@XdDABE*}i#Mo!H-wo%*YMcClH?oLR&6@m*MQP_wH!hwZ9@gkybM1QoiR +zUpwzK;0f9A*GT+80!PgD<}B8^yh`P=M$8ia7R?!H21Usssk?g>Ha%zHTsl>)M76K? +z{OZ1MmY;sURC-ysbo$n1OQO_mmd*8l;Tp7QQ_;~QhUXH}6-q7N@a$$tmonY8b>`8< +zM|-R9RX5yLSk$dK#ptKcnq%iXjNf}^M(V`Mt0-^YTQxa5m-~=V+r+RPI;lsm{B=1z +z^`+vPpjpMPil1Y?onhIjaOyzkiV52i+1g}ljI&?-U43J<{nz5))G0HU=&t7eCwh+O +z@FS_8*_D&^4skTUcra($<=%Y#+G!o0jow-1Vn;i)Q&S$W%f*JLNZj5o_gw^x60 +zf;?a3sZEIM}vQsCvrMT{%gj(Tl4V?3dqooSj?1@9@T*Z#}09AKLK1 +zy!X!2lu1=?*Z;pR5K!1$aL}yCkHsVD#3KhiGn=0hetqAT*0|kJvWxqd%0GMhogXvm +zo$oVUc)8dx^2xcDiP2%6?y$-=yVpZRw`m@4+wj +zyZKf;>{}}P^Qo7WM##w$yOZp%7xx`+W~+-o#FKI68EfaMLw!fQRUN^e&Tj{|5IPDtd+Yx-KQrZ-Kx8HS#;>rq&1!{9%_1DLSr<3R$Fzfp093U +zDQb6@H{E?#zyj7K_mrY#IX^C8n^Cmt2Ir=y2fuE}zBVUm)?uEbv!wkCVq%5U%oDTr +zy7l_ZSa9^$rTW(kX`Cg+``ZhSazNNd*pD`*wzG2?tgJ+m0xicK>;MbphO#Et# +z2*W1XhaU|CoxYmrF#kO#@YCMw(Tcb3Uz+Fs=qSCLZl-xyqt7n*g>G8KT>Z(XFT}rK +z`Jx-VVu$|Wp8;zUZmhX+Ei~oI;ak&|{xTHK{9^HVkNo`B`Nt|b825-xaS~@)k(9I8 +ztkL(Ir5{hL&G{=%bK>&v&2uh1YU&bVuDCGgPfd8r%tB$)Y|B%T+(M=DUORsF92Nik +zdd=qeyv*EHbLH18^b2$M`R*TZR{llrf$Ntq=L<};pPiPz=_RM_1wZe5GO{&?FBJ>_ +zd$ut!_v=c*nEOR%mbsm@y6on5R+4QiqtJ@=N5ocIgl~3T?A>}v=l|tH59T{hvpQJX +z^T=mbn{L2Lxo44mFOIxp+dtKIxzBuI +zsgsNO=6&UUIg(e}xAYdDo|qtW{b8`@iPQ5ESw4hL|2TcUMdghJ7Z){%II?>++|55Y +z<%GTAth+({qH$4uVFBr74X@@XGM45CJAZn2^3V~%^*8>0*>rzajoId&WUjc>!;TV( +z+S`^@1iQ(&D=bkJ_qLj|;?|Gjb1W7d{pN8t+6`#BRsV(tbRo5@G +zKic23-}4yC$v^DQBEaWXCbZyf +zXrZb7dh>3#+{3kX9rlOccdIen+Ua{| +zXS2%r<`qp1j;is6{nrZB#UuM>9XY15+~w)^;B%*0+pW%U%<_8W&AV_%yRFjQJLXbC +z(_T=>6fJLUm&w$?W^l`k*vRPC(#I +z*uwR`W_JHGR&)r@N-R09=CNOL%7XZNu8&?vt(~-F{Te-qhD@uN&ED^Rzxg%o^5y-; +zANFT={MzoI^C~>=uaT=ie^A%X;=RA>Tw=+Ba)!{x7PCzs3SV9Ec)E5*UalyA +zd{(q`e6DVpLPqMr5_Q+@Z#S=%b}2SoAD{eBYoOYQ;yCsy>n$ksgLGk$4@poSLGM{6aG-H +z=$;w=tS~G9ia_dY2M!zRVR%~0pj>kOO&@1TUTn`pD^}B|zZh6^R%=uT*@qJ=|{4wRf +z&z)3OZQ3_~T47psWEpSc<-M~HiS7K`82<0|7h5$Emd~9HKQzwiUr_Emp?uu-q+aO4 +zw-;J|*7~lDKQ-kXkMy0sR?FR&cIj!HW^wpa81RAr?(g?@SK4&7u0PFw5!&=_$*vTA +z_M3e@9~MjhIJA8ConPz^O-j>6_`2m*$|#<=P-h&JK7F~0%aOuV(;DlB#wXL~UCI~g +znK#RWbFprt-F<^!x6?W_EnlD1_Agsr+Cea6X$W$Kon)8R|L +z^X%FJ=cT@-Hmm;fm9EkIdyLOaThB+e`PF>g#PXdd*se$~|97cLI(+jNYrmb? +z|4z=ek@!x+tu?r^N6$g{qxH)QG9`t2QdNzkqJa5NE +z-X}W)nl=Y2i*E|gm7lF(`Mla_{%n@l9`)1n_wvjRouuGv=5$m3rPI@H1Em*JY%34F +zm^jah?Os^wXScZ`idFt!oD({GGNj^~POq5VaP>RWi@&amyAm`7_o>&UZCzTXpj6x8 +z7Pu*+Dxp(+g+%h*>@{h2i>_5CshwRL{QtGyq?hbnYj16`c<+5UU@MEWWd3oTndOeZ +zmw)Tqdhl1^n#!ZME5ovklvK=K9`h>u_x=ZCR$EB-%GwueUmme9%FLU|CbXvNbn4*^ +z?|-{DTK62@m^DM{%m$0pi-Ms^OV&iftl(kHGdC2Jo(d-8waXCb2nIa7V&f7|^{_{u+d +zj?7k<*zSSHH7_`$QXMs_(fcix59 +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 +z`YW}pMQQU`&zRn` +zQX;;81ZIY0JP0|goV)V>Mh2E|CZ^Gc>NekQ_%{8NBqQhVYdjN7%4TM}d^rF7t7O5E +zwg;I){pr`$*O-dUNRU`7QMfTy_@S(TjJ$oGvigLXN8RJ!Z!+e{ObIx;h{fWHhCRd2 +zHR%pv0&}^JZ)8%A`u=p6$a?WoPpyN8_|I)#uD~$q>wLMh->gpTYhTV(_vOGVSB0gD +zES=l83fDe8qbF1?8J#Ts;Ih&3*tvdLE|1TDskyd6NaJbShC6Lfs+fO@Z~o5nKQ89$ +zhXwCHmDMYn3Lk6c`Ma5kajWK;t|p_DixV2Sd4k*?@a%Y-mN_xP>Bor`Tb;B@*UUWk +z{aL&9KaG_$CWNx@xp3XvYsGt!t(^Bgr35wBzcI7_x+*Q(!L4rF`5U4}Vs}|Z+21&v +zT)z5*lhQHGMphB711?A0jj}G@C|t2l=X^vR89m72== +z_1pTc>e=L9cvSc>r%UhQZfmvxueJ`O&mrB(Fo=9h@O<=ZWqq_IQJ^8 +za{c%q=F^3lrLr@xOq^B8#I|9l*^J|dbiXx3KU(kq`DBD}OzOs`S$SE@Opbob_jaj2 +z_c-i$#nOp)QbIhfil=*+zOvbt?dRvZ+xMgWiLaaA-47~0s%vpgVA90yhP`Pl3WuIf +zZ4mqWdNSMFe|A%hxHLZ~M|tfjvvT9szxR|+{*#iz&WR4!KG=SoVe+x_!2$Ph_Lw!# +zj`)P$m&#c-;o2I;_#Mprf%ZA|e=WP`$*e5=9vW3X3UJm?`I+U_HtEkLcAky*?I-VOy|c{qNuiZ%e(mFh +zh3#3zb<-!?mIyK|US3=Iyr**Zxs@5_)j5A649=*o7rn(69I-fq-@lVJ)YslF>qD&FNJJk|bMSe2$SO^1(f&iSj1>k}7GwtBO9Z$bEG&1iR-qKKDKuTA!y_A)ST +z6tm*@XJ4X73FTaADu1Q@KED)33t` +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 +zw_a6=x}f$|Q#Iht)FhmI*m3(Y?!jC +zQf%gomCKmLuAI4Yi2LaZ7t`ueqeBwT>y|9B5z*crzxA4gQ+;J>#G<5SD!VnOM{PVM +zs4LgGJ*0d_*M8@;O+gF8TNBoC&syQ)%rC0pv$HUa;go!3?I%Xw@N#84sX6HyZB8t= +z;$3eR&ydbAezzp>jn;+jCrVjs6Zd}F5jFP+=c6SyOaI7mD2QK5Jm;7D>VlC+5dZ0Z +zy=PAX+wvdbs +zZm$YfuUu1XD6hFdP3&gJ&K8$nt=n^h1H#r8HHJLmjAOZ|CY0nnF~Br-R@cNu8dvN- +zabErL>4j1J!YLJ5Y(;z4%yrGuo;`m;Q3pq-TCzeBYyR3jKcY=%8Z4g5R;0bv=-I-J +zNB1eppQ%&cm2DjH`pce~)yLPYVy{0i@r$Xy``D2pRIkfmixo4$3Koa +z`yQC=$D;qhDB$w0$Yo*Ij_y7%EtIcYvV;G0yFOoe&(6dU$Cr@~3u0ZhU#m*_J6pA+ +zsK~w!5ZdO>?{j2cgH2?A{@>b(oU2y65M&iuJb(T684o72U)y`{fW>onF*T0`lcrV~ +zNQAf_RiA6t(S6osPN#lKLrSx@-L*$ddM{S#1umWLAjSB+Bw(XvU}rE>-34>$585np&N0akTH^ +zS1(SDWy{aVynJmkqgUkIVZnBp&NtuKIXk!akaVo+_fRvI2&Uc6ZE5wY +z8e319Y6jdqvAa@bMW3yn`037wnkzjl8x>g&P7;z1Ii))}jcJ*}zK9t;XV2W3>&U6_ +z!orq){w!mW3Gtf`NYzPfZZ(KlBydsqYTt#P$7TI5RF?hvE|zHjQAaLt#~to?=I=iB +zb}rf(bDc8Hh4)A__1$1J=JfnAd-9<_Dp5JQPZkw0Z*-fI{LDy_;mfjZ$Ga9z=>Cy< +zBr46IHz&feaF>q9bo=C_BZ+Rp%bhykhd34U7HPk2yT@Rb!CDy4zU9P^uj@AKQ}MC8 +zfBj(>L*(?XJrkzzCHQ8pOU~yD__I*v&dDz!#||XMxV#Y-+&1YcoAJq8^`@r{1YJ4b +zhE;955R&!F^vSW6rW-D;x;9^>P*BkG`=Y%rA5lpUp9!X=wOnlnKTk2}ez>Ocay9pUgNt5@T1z_gjN&)e++oY*xcE4IS%Gb! +z(yfMxO>2ZsaO@X2R_LU%_TZzZ#auEO+dfm2BpBL`dlHnG* +z-kw&zu=ugzA(aw05!YFXcQxKWJ3H&j4(6i?_o941Gqqf1nJVw^z2U*x|5s!$Tz>MV +zH)Q48BVLVu0`AO@WCS#po_5akl44;w+Tg-EVP*{r-v#|C^X$@(=jUuZ^5A#)1c4K0 +z#ctoOJ1L&<*iiG9_ao!oO;ZzpM@vaK9$BKDpe6HYk?dnmiB4bLcDAiM7dAZjvHf78 +z^0AN4{y(@8mlgj0!^2{(_1{)xo#>nY(d$pri`VbDc1al8hcIjK>D)9w93AMS8X$d9 +zDe+TB=7SZ1MFq1N4QC4NYt~EoFh|pKAJ4;$-v3X1>Hg@I`C`d0+xYFN#k$vL*6y0Q +zD>wV&yTU_xX<7Jjkf}e*@-Ev#g +zNeYWfyuOrlzhdP*z@(GTA-BnCQK!)j^9}R*Vy_>R@eDq{=0=O>2DS_vWv-nJoLw8( +zt19mX#CaBQE+_gRe1hpIY0u*_0h*S3h|q~hsZu0MNh6j$=jS1^)M3SlvAaX-;s +zR;B!7!-)k3`!f>yj-1uxT|4tpw3Y3LAYmpy@#~l5pCpXGva}Q8ppL +zoHf+&q|ZdfcMsNeL-@jhgerOH|z}DcPcMwar++O!;z1w +zIUOu+l^!_2wfoYV?3=#RkF7n{6Z_U$XV$BEI!-IqLwj~HHSs7YvPqOj@4LC~ik7jU +zgGj&|?>m1y^0)MEHj_FcboBt2uHuPx44xJ{0$%M7xZ$s^e9kQ(>&-iN1)lS6-ySgY +zJy2cbaqFQdV@JgW&Q0#7+i$x2xHhyUSLEHP+{*oQ`WgSF#fG)yi+WX-d|)C9IrY+pbqE +zVpzA?$mHqXYrJ!2*uAv3IC3n@=)Zy4BG+Qhi%aK;a;=+aFiqpZTX}w`H_x)|ADX=0 +zy;Wn!#Wzxkm)b4uesuiy-WcZ7GF3rz?ed*Fl=7HjjJgjl^M4cc=a$wDr+W%r3+Md{ +zVdc&}C=?;9k@jnD1H;n)HR4?}dw(8Ld|9x|`MlsCp(R^BxbiG)66CowN#%*8itVoZ +zsW~mBM`i?ezPogz?UKeznTbJ(#h!7Ut}l*jMIQV7*oRSe`rIZ1&!;JGW`=ku&pON! +zUbB0)^^=894~DPeX>N+kk+bo6HRabu$Ek~z&ebzG?f04YekW7nO&NnqXUF*${{AtY +zW&Vp@!^F*abFa-(VXs?0dWq6g*8NO4ptgNA&*H=Ttc^Cl3389*==Jcr8|`5^_mjcT +z3YH0;J?XUuhKHSxNQynoe|>~8?zXqkcCr2Oe-kTO_zfm@h%NTsB=hzB@yt-mq>u&E +zq-xBTWwHG>aAB=GvcX#SfQNK!t8Fo0V +zjY)c9BUU+CuA5h5v2)<#9edVZh?@FEE4x9P<+bq)(}doPI?c(dwP{l}2_(-_$drhX +z6q|GS?Ao-YuA0>=9F5t&YbA*#9Flt>JJ0d?qBXDW;x0X6|Ksw2MT)unWnQHvMf}4*J~ync&B5=^gjXnFIT9pHj8?qsqGo5?xJbY +zrm{`k4c4=cf=v4S$_CdD6ia;#Iv_VI +z%uvLriNB(MRWmn>5zEa-UsO+heD%%BY{n!*W6L8P*7jjM&&%)i>o(0~++t|@=)voi +z>`TP|&elC!+^Jc$=FEb0L3TCCb8{!05Ssh_zM<%h33;}PGg$9)cBJ#jpY>ALKjc68 +zp_}SLHn!unufldsFljgeke$%`0PBByO%q_^{>tzawl)0h4QF5B7ZAleBK@ +zg7$=2`$ccr^SG28`4YNr$%5aHKE0JNeiOU(giho_iOo)*ERKau-nM?u$qRxqO_Blz +z0z9*0pE9);JFG6gko!hye_DNYUi$Tm?kQf3KO$VSSyo1J^Jj|j7PqG@oouJwVja<~ +zb2ENjznU;p~H7NBUil8I`gm8a=P8ML`M0rsw+vF +zH@|G#Wc5XO)7wW&*S^$Sd}!jlb22|wc^kg;eMp_McE>W0*8Ze0o`U5kn&QtC9Nn|Q +z;n${@M<=En{C!yH9?MI=xL%8}!cQ7TXFs05-Wz>z>imW)7gX=vo3pWJy^&AnkFYf? +z23&81+SLo$*}v}#%P(VDbN1W6KN^)yU%EV2s +z>o#!Z$|~P~JncxCZzmuAqDRrB1r +zdzeoCzc}rjZ~KnVT4#21eNKz{J!#JSg3?E}9D27C{W~_LEVcgbzBMvap*uqZgYO$YyXgP6Jnp5`@}tt#bk +zow|aD +z)@QcSLd<{Ggg&U_pK|YYgKV&l%;(F(8(L0DxIBNeZ|m({3R$^F?ltOU|6~2a!_+3W +zLb-mPt&mmg$@p`=EepE0ZuliMui26 +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 +z=ZQUv+IV7Rzzj-1` +z^71U6m8%PXTDAQ>bkdApkD;nte$T5C{k>r_=Uv+;J)Y9V$10#Vapz2(PZRbhEw8!M +z(Q+!5`CoX})E|EDR>p-fIMp7IKXF!^|LBZ{X*bp#Nw{A-gZ;?v3L#Ao|Mp8$C+wIw +zeTBW|R;S!metAvjH_mNno3}E7h5t^@x(~tb9&L}WE1y>B@~%j~SaGXOD)9CerJl?^ +z+w_i`7mCy$ea2Jhx!;bbwoV*_Haay7T0fzbma{UH!QHOT`bpdo)vH +zmEbM0_8V$HWbX?#GFT})F$r20M*ZiwdPOo};^f}j*O-=GO1ZF$vF@{x1jCDp9V`Df +z8*R0|`Q?0a!uoR$3%Prn4xI}2yO}nf;g{l#+DN0s)-0>Z+%k`ir_8mIiWQI9E#^BT +z+u^W-aYz3CfD2XGE}6gBj(-(1oLteCW8mlw2ja@60`rcV5mTb1D +z^VEGX(JlJ>*(?>O)!zaI4{ZGR`$*lBUE<%?UcTeRGc{g#(#w>UbrKBU5;z$G+7BFB +zT=R3Gc96ran-2d)HtorXIba|5+UcZ;*F8OhXqE0grw>nJNs{`LqH~eq5tp)Lz;)(5 +zoPB5FmRIU(irzhEuJGdC>%^qAG=AB4tJpqNI|Lovo?l<6n*a6Q&*tiVpRK?7pWm(b +zHUFO3wcE#RbHmpGB{V;sJR_sO3;&Y!D +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 +zbz!D{gvp=G?0J8V_O +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 +z{oDdYZ>vI@=SJQmf@= +z^ZyTII%J|793I^8RwG~Od#O^8lvPIJiY0G0562Qt4k +z?l^DRr#aQ>m)C<@vDFXtt_lcQIC=Z8SDWl5VAnF8fr(96a6;{bKXVkiW%H8Gt0)+L +z=41??rX5@R+Rymx*VmipAMjOs-gsf|j<|I-JnOz%*}CyeDcqjVA!)Fh&sX}||ER_s +zx5;yIb%kD-KeuXWTeG4$-Z+QtvH^!mf`*7>tkXmTUJ=u8%)$o_FeMg9aPT!XDkv#% +zur)O{s0eVdGzv92ur)d`NOp95lu3(Y&sDMdR?P50)_Q+oT*%tOYj7-=^4Fm9vK3%$cgix0084hv4p8tzWfw%72T@ +z*x30)`di&fS8r$ClBg0-Wzj9#9c||?oLJF)>S-y%%*!Ran%~Yk@@S(S!<(w01i_p= +zK~=Fvc1kRVJZIc~{*Grx&JB@jx&RwVcNNPpQs`Nj!Jv%>)LCIhO=u|3CX_$ZyNIRfa__=Y+NO10lwmT&o>( +z@2+5;y-29+0qO%2S-agVi;#Yjam{O{Vb)B&Q`g@lb>a{6DrZnXXkL1)X=UvZlsO_rAICF_j!!zf)tKH$NGKVye9Qj%|alOP&&fUue +zx?S%lCF)d(KDgv$zu<}8JV_tjW%koW9(rxx=-`sDbP?yg%YUbrA5>qOQSQmxv2u5D +z@015dbC+9xxqjqzup^mhP0_#`KGxv%7UfC$nCUy0!dh-00yw07|AMFr&lDOn+ +zr_P&zI**VXGmG}^?*HD!w%+q_igk<&+HgQ=ilHAbFV~8|J2gf;)1z`HTXa423TSSQ +zuoY^UdG(sINQZ%257B|Ow#+7 +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 +zUfg=Lal@Ct@XBU5BPfR +zLl%qm*BiZ;Zb~`d{bwE<9K&DaV*i-oVs^;R?1j1}(kG>&BjmHRZnQ6(KgWCRBbUdw +z5}&{Re0g@;ul-l<hcNx=`6!p9b55K(XyG*Ves})H-7gO}svj+1!o*jlm3KOGrK895!ei1b#fjnUp@E<8`g?Q+|9Z93 +zBRwEeH^4P;T8W|cQ^Rlj1o)2%^{!QE`>x%&@a&YjCjlKhHQj#Bv}_1^kp1qe`q6D! +zQpFsd(}fh*o>Ed_JRhZTG+WX0oYTgq9z7RAIs+B%e`Wj5SIH-_>_TEp-z|R2z{cym +zFTG?X53W?+JoVKHSDnz9IaA6*f1cWKJ#6apguuhgS1qXB-1LWK7wh7!_u?1i6kjZO +z6|=>6{)Jx!*A{fE#Fb2Z@YChBVr)y^vhD)mE3W3Ar4t1?gZ}@sNVYAn=-~~vVxQ!$ly%j1dok;_;1f=9iP`p1?up&e9WjTt +zUAXXGDQ9(eef@@``P~mYLe3>{UzFIwdRtEEBg^fsr#uJ6?pFQ1e_&hR=F>A$;IS4x3FcpPtZc-u)AP8edUJy7TaNEeDI6naTEP +zOjA_L`DV}h_u{#d?-?&%zn++PQs-{66vR*adu@x=snw5TC+n1c(A&TMKKE>k`|IX+ +z$o$m4zP;`5q%$|q@ttQ;{b|PS+*Y;L&&$}e`YXGSb;v4PkykxI`DIK0=0*RLF*b_Z +zylh55?Rl@IzuK;`{I%Qp`E+NK1@GE34=+p$)nXR6j@p*LOi#Up^RSnDP>xkY>@J(+ +z{)4+X{CfnFzxo|~|HVC)|J{D3TMr&dUz|Dp>Ah7(R`-S_r&6#gMCoYv2 +zVNJPk^hMp>0G73U0j@^8e5<$CJ^MWQ%Vdt`S=zbUn=c*jt|>Wtl>K=B_S4xfFZ>Er +z+PWf3|3JoNE3V=>QUxiJvQp3P%H&VbFgw#FsLRuHa~gk!)|D&21NQ%@li<~lnkIE8 +z&?i%$eUISB5ZPBZ{$Ms!WH@uA9ys`4`guaR?8|Q9WC~~j8 +z^vt{heBOEhLR +zp3Gj^aLryQo;UtpmcYpwYbP?Az89YV?tuH;*%HjUThCi%wJq<+y|e4+0oE?JndhS$ +z?DSc`RvI3*TmQab{&cmI%apyk-^Ge&-Z0-{x4ggP-c{klrF-UAMpy5f7NI@sneWkk +z%>2vaFHOU>c%i~C3VizFp$-q~GW<~uX=O`XfyK9)_&e-t>^S8o>&*?d`Fck%X< +zuFG0ls{$vtRULikRPk!<8Ftw!egnCxxz$(S7Pp+&u4t;gHgEUBw;whv3Y%BedRFbA +z&Vw2WFB_j}xzB`q&A3E6t}`^tZL#+)Gb&|T_57B#!Sv!ccaN06aa~#crnEIF+x}bG +z=eS!pH!Z(B(}&sDr=umq=ULRZX$q%0-wR}4*!R2YrNYq(uPjd_y6Fq-HZi`zY4cH3 +z^YWD}wKwi=(uZUOXU;fs;!5)#*LANNOT6rIY-(ohE6n5Ct{}N|8N)7Np5nYC@tH9< +z#8&mhsDI_EaO0|;!OD;{`PGb_cb}B)|9z!)?zg>rFPxge`Gaf5?H<;+l^-v#-N;?? +zb^pD~5i=Pt^rrBXr>CX-&6;n#`J=$+z8V>y{8anvI!WnKclO9Q8Gbz;{yFtYL%9Xx +zlumi!Si7Ffk5WrADi(5Y%IMaL +zlV)CHVJ&f5|2$iJ&vmyz(=R{$*39~0!^~^z!+dsY40CQoE;H|`T)8O#U_QkTZ*xydHwQ>a~-gfHRA#rz^;04*J&mUbh(w@rd +zREb-ryp#zL@-@C1ewnBJ?~#s;nQYQY9DhXKEIqZ&&a5C(!lwNBTuVl-RU$ikOEsLi*Z{gRZOaMNr4y51?5q{MnzG+WLz#YHQ;KXZSsjOw?!Y0UedO_vu+ +zxL)$b8pU(A*NT4*iNvoB~`$jY)= +z#VA?olNaw4_FC`NCBnaUCVhKlv_9_iDd{J2Tl3B)wriG*}!udm!OoQG{yB}4+ +z=_*)wUS8pOn;^5=?iD*vPuI3tzhP!W$K%cKd=s<^wzImK9Cg$V>k-NI@octVo)w}I +zQ*p-Ugq5!9TGc}5)B1uv3%jO#-5|N)lvS7cbg_iPKA)baoVnY0Gla#gs9DU?q*aOY +zya%U)Ns;VB&-3Nayk|79t((73@4^Rfms{p5>i<+n&oI~jd+1usbeZ+D6?;VQpWZN` +zTFqIN^ud>6y3Xo^JbaC?!wWO0eB +zS^f4<>#nyAL+FfK8xBkMmOpr}s;_t8EoWLU$3Ldf +zkCQ4cMsacX)x4-qj!9bSlXr&w*td(5xPNRuyyIn<(d-XB#g-jkMIN$;EjxVkk4J6j +zyTeoY&Rz(=I-sXIR +zvRzesf8YM`;aI^_@%qJkCmDX6`(U^0xp^61a%y%w3F6$H*_Cn5Y +zyR;s1B_#Z@xVl?PVZj8KE*noBcgFXnA$5kng;m9cN7m>c?ox^TUuTtMER*pXrx%X7sN5aDRejQK#(A +zLW8wI7QV{1R?%i~XrG`_S(CN+yrx<*>#pbcS;fWho$`%7iM0lF)mXm+iej4_h-3uf}O{M +z3%t?Mz1y?Jx*p56Bpw0(Z9{$sg>Re$~6gR__4 +zYuL80p?98?w$I7c$*1ZMEt^yF@@V#rdHg;pN0iJ09OMYzMY4cEAu72TfA1Tog8f*vveb)+V?KEx>Ly7tY@wK +zDp4?OUcr?9Clc@fwS1U%`i9SLCiP66nf-!iuVyLFy>xN)Y~|U85B}(wA5VJm@Wb$B%<%T2)4{t=fO!<$|smpAAjK +zybc;}{;95S*W&HXWEH!h)hJ8d-1Bya{oA_3BDbWD_VY7#WHud%x3W)p%aCQb>bR7Qz}>|g +z)1Ga4ns=c!FtB)*T$1#pZ2}#-A9gL+AnuZ~WFgO_NbyT?6-Oey?jK{G{Hu^f)%r`A +zi2 +z<=;M3l6@-3DM}*AYq^X58lFjR@mEDJm6uNWd$hN{Z;n9Os)i3-k9&0BT@c5dzNh)Zj +z=uQ$@BsWE5SHEiO8HT6(mR!(OzGaviRG~V3W8cN#jix=7st>15@1ODhnU(s{_afot +zkE%qcr^-CMp(1Xbx%O*h+*?u6w{1`AmTt&f5q@oA#wR7yQvnt|bI-)Qdb7;4!zI&D +zd2+XLC1*&%#)i|6Pgy!|U*>f0k;At+H`c1y7q5A)ShwnGD668_)b4dwCr)Owh8C~> +z=J`0TpzXEa?BJ90m0WLqb=BChciB@#MV^E^Z>@AcB<5`Dz4&C_bI$kGXEV-Cj}dss +zyQ=DUL!imw4M!KNyQH#yy}kYQ{u4XBzHThhZ?t|{Bzb`$!L)eAqOCTsXZ+#NFz4H6 +zbmf&vNs5(0a>Oom@oW2pIa0KD&b`-_&^;^f=(O;lb-XUK4IBRpO)c=;uCD9aa#r>} +z+j4>5S7z05HD>)$YT*2#YFHqsEUGe{b?pxJg;_fvu^OB1dAB5U5Qu4dG2d3QLi +zUGZT;kguIZgT!uuw)CTu4yIq)c9ieF;Rhjqec6a4-ovXOD6bMKOmS^wEeoEjrT*un +zbg07|yL*d%yc=X7hKJ+&LcnU2~_h{C&N$_TrP1#j9p} +z8ug{_PyT&wUyYi^pSl~hvio;BN}WIY>1M~lXz_K&?2O)W70N!U&KF(#bKee!yIuTK +z&OJD|^`g6uXMtnSwPR0A{dcOd^fs3XOuBGrSwsG_3cFeRl2prg2p`k1GOJ$2zxMv* +z1w0pXde^VqUeC^NKgXfn^%M)&axn+99Pg^mOVgg-Ka?aA@pO{+@0Dv*+P%YMvt##! +z&Ak?{u;|a}SznA>7jMn(&HHrhu;z(0R%O4`6UXbAa~Ry_yRv62vfo%E|I4X{|K0Td +zkI$Vt`+sGs?olfI9?9&=Z*lXTt&VRRkJ4MNsF(Np!a0we+}3|U$4Og-GgqEdiqkb{ +z=XCbY8M^kBJ)anwiy7U2e?D{c{mS+C!jd@lJ({t6``g}6AxEy&tx4WF)o2Z~|Hnh~ +zx8Dh}40|Fk`7d$tqN>A9{Cf{|#@}0O+GE+Qw@!bS^U55de;=c+u34};@o{H-OV@Md +zz<^HvO&bqKPceOFv(D~pb39i^qIH@K|Hrbqy*6iOdEWkhVNLiko}Z-?I#1kv8dq!~ +zx9H!)%@Kiq*}U%_@2<08yD#sT`nuULuJGEa?pgQtwsy|Ddr5~|mNT32rlpQct;ObB +zi&*?V9E$0^$SM5HMKqs>wQY5<(e$lJ_JnMtnx8%C1CHq*{287xeu3`+^`eRl`Xkbq>+bh?F +zPp>i5-3^6S{F +z&9j|b)+BG`iGQ*qXHvzNt6p7`1AJddIK1R?{PSk&nFTkjg=8jO`g&_~n-a@KiAmWS +z&C`7n%rEO2u^8Mjuu)MCV2QiDtm1XlL5{qN-8mwAxA>eo<;=D8>#5HgQ6;srw-ueL +zd-Z##^&I9$S2wB#nH9y(dtef$r;>33syVHmHYLx$U-?W(c&E9#h$Lud% +zg0%~OPCv7M*494B*AMvE9t-8V-)3b>i!8sm?Q6D@4}*gCqQ=Iu1G_f7PpyyN-gz)! +zr+VAG(DZ{IM+NSy7W_G*mT6(m+xx(1x{^}*(W-nEo<`H7%e?1mdkTle&s-iB>M1St +zUH|A}nfX@^D9Hx9D?Z2zWXsD=TlnaFtOM)r>ccGy&1bD(b$c1#w{u3rpQ)T2bC<{^ +zoh~dny?@^(=~odNS*}985AwH7aP(@ur!K*NH+}oD?;kYm9p1BEYP+@PRef^C-K{6t +zJB#0~o|Dsms`Zbq%+k+A5|&jgLFT=SE(Xp~eaJhhE8&b_FK5>q#g^=CD-xgfc{={F +znQ`9X2_J|37vEPt6*(+hb}<;aiHJ4$N;{}zde-+(wD?e(X4rem5Vzkz0=ehG&mi8@L8t9{^QIfRBC3n5`t3%K2+h(mj7`WxRtdmEf +zj8yx{70vOJ_<|J#Iu0->7Vfl>;&W|&D3fBZY|!8!pupACoS<-kgNLc9LBRohE@p$1 +z0!M-b8>5kc@WO?sL#>|MaT&eqIQ8?Qz?>AtORGE1ZEA?;)3Q1m&N%VHoYb>l{(f!d +zt#E2wS&?R#{W$T!?2nDc%$>`QZMqZG_32EQ_Z#jd-ilY89KJp=Hgmn_z1L~G`RdwN +zH!N+t9~z$4*4p&{s+pST2mK3C+h4G1x>sha1~fhBUF0xXxs1hls``YcP1j$kzxlsq +zuYZ7X(Mr*#Y2R3rJ+@X#r}LDrZ(gLDQL*r7zsJ7+4>(%{J(hNDTp;;}v+V}U?n^%k +z9IJ0K?@(i5*SOpLYTovj+hraZ>P%BQSn}$qQDtPgrOTrfzal*7RkEa4rr>5LI6C=6#;bEP^-d%;W +z;vB8iq)gt5KFe;KTo$%2QF(r|sn4H@72Ff*%*^i|I=$+KfDnh(`8m(yHWe({YWFXF +z9bXD7yXTDEXJ5{~HGT0Dt)pEF9d*N>cw||2IQa)m4fk8L&ZB=x%!$bj0ZTqU(7AKF +zLHtLB(4pBeH)B=J)_wn8KU?VJLAUi)7j;X&`mFLlckTK?=UQdga0bgyC(_PoZGCh$ +zrgo2w<*~q>3B^n>o*JMN3Uc-XhHwDjT3 +z4PNWz=lwTR+myKXo8gpq3Ot!tR(^Ti{Q9cWn`gThTig(3-1(xJr^ebM_|LK%uim{q +z6%frH^WLfvnTKOznOw(R6>!@f)+1{_+Ojyj7Rb)!A0zyhH0=uVue# +z{iMY^7R}$3%E53>&O`Fa*){K$q$gH8G!${aeq-X+w{e}^ip>wdBwgs4Ce7{}#BeV~ +z{K4C&oE64f1lz(QzA>o%-+rh)Q{s|)zKCYr-FK@NJmlk95#8c!b9U_=!*!Lv*Jxi4 +zcG>do>+I=16*6M;^+WCd?!1sUCFsg8<-#R?ZzHF6rfiK+?h5lyVcERn@F&H8o(&s( +zTMY_03Pt)(Igl;r_@aosiTdUiWxijhm +za(sh-{1iM?!FE+~#vMbYoxTU#Lh428PDXDEMIOAem)2+wDE`8)ta9o#j;#6aKH6aArU6N7kAxRxh2MG#?jVE9@0&E*GiVn>~r? +zSed-}Lq_vwmm6XfxcZ86YI%4q;x;#(w|n>3H@{?#_B8f??hBr@zjIoapF8KJ?$+N| +z6Ryk;DqbDD$&2HuO-zlv?>X~;Hs#D~*XHt163D!}GAm6^qrhQ*&53uj-`uMF?D}b<52e!`2xenWZ&F%B%C+^onyv8|^F<1w}tTKX7=pEW_K23nuT@$O&0y6Y$vY +z{f0vK!@bt54|X*FC^@X*yj!BVWJTlcgE7}D)wNrh@|7x2@&}nLd@|4a=%kq^`m3BD +zdUQY0dT3su`=s}#i-2dOUyb-3>+YW&dz(3C=3c2jej%q#lIi*KM<181sV|v)qvW37 +z;}YHfxmrscRPRWh;4E)8_-Vs@t1f^?KRV=2>4|H~tyu@^W?SEAiO=JI`>ptBLfICP +z4XZko3!nQk-}Pkp?8NZKBAQ|M&NVTK<@HrOp*yV1p3SdMPu(>=Hfs9I^iy9qr*52V +zs9Sa=_tMQJ{^~4u)J~e_Qc}TOS2y>7Smq7)whdz +z(=utLc3J%SS+@B%65l+vk+Oc2ALb=zlyd0Lk;GqHI7%iTKU#WDZlU3(i(CK8NJP)M +z6j#5#_|SvbdNwt4B_||Lm&?*xVdJRtBJ1}Hjhk{^lk=|5PB#zx`Rru)ORL8<{pGq- +zSQWbXyWb_0uR88>y{gjRa~*@#UKxk)6F(Uy+FjQ#R_iYH6R-|HXUULe_9pcFPM=>Z +zz8u@>r}pF<^M{_IGZVk=n#z3R(u*l>`2w72>kF69ez_}(spn*5S9tjmt-Oqql|KqJ +znZxd8zKi`HB!>0rwbWVMSzkOXlDqfTC9PUDnJM3A|7XqZ0`vL=GP~Aj +zDoTG2%h8AlHNL%Hc)O40x1$}Ki`g7Sj@q6h>^+bC!^612F|aBjGSzu1zp;b{}iVl +z

BP4k~Bc^;*O`LaeoAb_R|^g&|F@kYUY@(SN~g-0#r)88%k8<5*=0P{*VQL(xs=GP*}3jMbLpm+ +z-(Q?u@cet&^~BTfm#$LqydyZV$3gwUWYHUzD^AMHZu;Q+w_wFnLFs^x^%aGNJYmU+ +z5x$AYdXJDa@9$Y&jmQ6A51+KiHFbmjuU4__>Nob4d@oiw +zuz#6j@p}gsles{v{H+49r#YvS#8a@!9I?S>DQNB9NyRLsfyH0R(M(ToK?uszU7qiuGJe;_@J(z8mU8}>Uj2)*l(+OvUEYGG@&kOpg+`!c(*+uB;;M`kac?A9^oQtPgL +zau>UL1sFwMo&4kec$Q_7*+d4Z-yans*uD0PUAfH>DS!Q*@+Ntw^^=R)%O4q7-kh}M +z(|5Hgb~_lwCb4$;&GDEtC2!r9nk{b{4mB{!{hndIUHFRAkc82Y0B5L8}9x6V_X_*r(DSsWN=qP^Ys-* +zEso6R3_n)w`6BYtZ@u#h;qJw?nzJrs)=X_*KEt*pWec~3(xczXgZ`}v0+w` +z^78f-ipyJ0&B={u<1SmI+|WBuYfnhw?B|ahE3VDaxxn=}{WwcKzeDzc)XTkrFZg-V +z@7sA@f9SPWGC@b^qUFCN(fb=NEy&^PmC@gG+vwH&Z!5W#=Qtmz_FH%CcT4x$3C}-> +zcV+H!_$%$iCFn* +ze`l{c;N5#m&Fe?k;_GILuTLi!$!!VV_AfW+d*N&~5B{Qe8&#f9*wM!7TzmC+>b2Ts +zY@fo!4k_G@===Py{vP9v&`ZJvd(TDwPnmwvDLcKlv$f>XK4s3L1u5Rr%??!y7YWX5 +zay=y6?^PjpqD9@><+|;6orepmgDiKcS5158sq$*x_K>@mk67FFM0~gDTWzzaEbNKA +zo7(Kuj=b&zoyFRdY`Z5)U9e6`Tkt_~P4SJ^)_?O@4?gxZoSOgaz=FB!dG?xn{Nb!% +zk7TxBJUTb(!~Zi!*q9yj?=AS~%D?mG*@)K>uc}`>c$fB5vbn12(cE`^@tSOk^&hII +z9XK-Gvgg=alOr|_W$Hn!&q^Dnol2TL*|BQI4Za25r@Nk+6j&TBpLi;*;J#9a?Tz>>8&+C?ue*vl%JRLqonJ*-lTPhTF;+buld4@CI7&h$HFaVJ#A0Q +z+->AA+{U?d;#u22iD#ble3g#;x<}Kc7dbb_h0^iQ;+qv|5Ri{v?edP>? +zx}5oLOM;W)m_Nj9kU3=;FQHp8`Hjw**{lwy*d$pl{5|zRh_A*k?8qNa-q+^eI|1?J^2pG`LUa4{`kNCf~3@`h**)w +zlQvB*TK`~k#ormmGiUGpCRaIs@0qEFzr8mUe%I_jR$KUQLED6g-Ep~6#q*`BAKZ3u +z;mSKutHmL9&rVa7|BhX9s*2)9CJS|OlOOgs)+qbln5xCP(J!3IXOF$PC`Ux!S`kmb +zsdwETKbI&kQ89b)->GnZ!Q1)AYI48YR2O=R3&$*T;&GPyHmlt-?dAXcuaDKG+E%)L +z`!$7m*}K*qz4Q0(xcbNH!{n8^drY$V9FA@JXUcH%<#SE9tYz~{f;FBBZ`Z%@>4JFX +zxwx~_>e7O4ba9!rXI#;`*Ym|!(T7{7Jo!nuP?%-iv9m0j=2*;Y>b$$*frGDt^7%&} +zyHmLHB^p`_s+IQqYzcU?orc0KbqQ*E0g|5nEJgf(0^GkpT<(SYC8{x`p~%j9Q> +zZTWidX#VBbVfF$S*qQDtN!7HS?OY>sZm&#)d(^ITAHNuA|1zujE>(BJVcB7otq%)Y +zlQs!xN%`NLZcrtNoud6hU*qhjPS-x)CeOU5S=1`#LgLmwKggGFZ(IKuWA$iPi)@5pW}JqwPj8_;#xco31~i6ojd14 +zKA(5;hu{CLuat*6G#qrA?y`3`cR&AriOUia_L0W6_G<4c-^^j0$bRklT80g(dC}{) +zA2%AkgtZ<_jlB^~EfQg_{ftFRpC3nx4hGAujSx>)c7X7aznp@3gg@7kq_Dz$oD1 +zdwEZZWfv{u!>rT=wRRNRHd}RH)!=%n{N~Xw6Su#C#ZElu53p89SI#>u9;e64H($1H +zot0b9#%}JJA6Bg1YsqdX;gc`+@XtS^jol4REG2dmCH{O)mAdd^hF5^rsRs*|3WsJI +z8t?w(Yx2U7?b~$MxsL4jYr1P+%S>D$aH`<1)2f#|g_bdAelcFu?9x2-py>V)$<{3b +zhxRz>IaWJ`Pd!@8uO=c>XSP_LD|huG?w8EZGPd2h9(;TH|Cpz>hxMmjUS2jcJ=998 +zh~Ih+bF)|k?~NM2l{#geszJt#?uX0YYRu_j*l;lWuj|#B_oqx{lDeGZJfqujp}#}- +z@4`dPOj-=zy^{nQRJD}@ExydWB+=*jCM)<>%)V`A{wjgxR+F{WroI+hEUvlO;N^=e +zoEucwKM79d-gA$IC2oaj%iHu`7k*oJdFPz@{ZF1d`X@2evURL{w{3!G_m!?SMURfH +zykt?@U~oF_&y4Wv8f^z2>84x#XEc|5<<66EFJigGQdWzH&p$p8`1$^7%7<5zZ@QLV +zd9>_b?!x-s9q|S+nQ?w|D?!@q +z{qTS1f!lXVt{7~VS3I`ruXV*#ZJE1`GO`!e30WVSF+Gu!?Z3Je%Pzxp4V-f<-t1_4 +zJ#V(CZ$@<9v~OM(d0`p}n}6++JHYB-@i;I>*DQePwn|gZe@@-jBV|U}@_Gi-micmK +z=%>8jTzY0tr%K+N9f!ZC&QyAxb0+Z{^PaETafJ_kHb3SF|6#fzsn`C@YQy+SFMZoQPW!_TD6TDC2AZ+lB>;mbVM!r!M9 +z-qkBbPHx^&Df2YLcS7>EU0ixAoo{pg?y<}dcU)<)N2hnehLe`v^Jh7p|DNx-Ql#|CxE=nl +zbMl@m?;lk4PCWR&>(N!Wg6C^1cKxKK*LQzU+xb}hPqn`7 +zn(do~!=kISpXO~`6}x4v?bb{!{<3{r@)Ak{+pTgYKYT0Nc_N=%(uuO>)5&HwEZv(NBT%Bd^*-3!h2&gC-4spo#V{q=&{iinlJ6yCfLEjy^p +z_Mvf?SdYl5kJp7o54*&3W-(_(vlG18 +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 +ze0!I5xB0BY>Q>ux2|@!?@ue +ztBoZ?%n6;y|D5f2P8mD=nc4YWtZSdo_A~#!?VID1oBN@2{?uiPTlejBJ$Lw5qvC}1 +zt+%c-zPNVWG)lts`lN3sf1Rx=tbffrgFU8q>*kO-U-qlki}k##SQhj9z)azZ-X&)1 +zUzOhBo}(^x#$;VUpNZf5<-VWAwASrkvNVs)V_}AFfN*7`Gv@{MCDMF1xDs1`T==+3 +zrJVgm+zq?q?*vXgIMn@dqu^4x@8@Mp*K%L>IAW@#x^7ur?UACQb)P!79n*ibr9Hvq +zpItSt3HSWV-%h;rDV@$2DR#-gRN>(*+rtXW^f^63*VG(KnW?fwi*fToH%+_E6)(9D +zZ6*b@%pAC#hYf4?R%9B6*4jw^TfbiFlXvQ;+ttc>by6WY +z@rJob9yGtQP2 +zXW5B4KbKZ6xYG3BW92uY%8HGf9o%+2ElH})dAw@DZbc@}6JZieH@O_RWjVvI2Hd(@ +z8h$=VPU$7<0^=3I^Y&zw$nMG6a&}+v#D%|OHt5!iSl@ZNc+=vprjJc?RAxkSPW$AR +zcD&%E{sFU8?i;Uf8v`L|5@IuPq*_?ZNB`P^Gpd3g{I5+m*smr$e*SWlKwr! +z_VL9^MMk&!m+yF^^YdnY*&@gN;*HQ9--wTz%ie!a3)yc~UN>2J{+0)PozK;7a(V7( +zFVk!JwfU&JQ`v_id%Y@7jfasuk0Pp0FLQm|9(Jzb_JNaoHm>!Iy|d>e+ZlyB_r>;{ +zj?`h7i|5;u)M73h{YP2(0H;p$=UIoB{;EEe_~yq-?WEkfFW<#Qxi3C{`^5t;>8KZn +zG?VXoxio%dQP6s-+-K-565OZfHd7h=4=3g?(dhfk1;7b>i!`l89 +z+XB5^FSmW>3%lBNsj%soPtYy>;>_e_vbrq>0ngc*?`$&VV%WQL&*LZIIiAt?U;Dml +zicVxmF|;s$5Vrl-#xv86Z2oU>OA6e;23d$8@&V +zMeCegZlZ6q`0DNYW3}A|tG937do|jko8w#FX-`vz{edg0G)of;0$mQMm^}Pv8h*;G +zWK&C_pq;yFcpPp-KY$wen_b9q_mN=|Cl=(>Z>XX7_ +z?{+ZkFc-02f8{qt%af#krYI|Q(ym0N_ +z^WnVLi}MpRr5sjYZDVjTX#EhXQDJ>P@bf&b?{i;g9^TQp!_G_4cUieDqg{rPXM*oK +zkBteFjQcmSRIgu<<|rpsu<|qWO(vf@2BsE1!G>Cg%}<_B74KW56Qg11xPa-0Y40q# +zKSK6B6ZE2%&uS4~=lYz7@wSCaj(qBeJV4qBr$e)>*a{m(vwDByPK?acf!juV>-kmR$Pca3&(7 +zYIgINZ%wjY8wIDn^_&$ecP+~#?`5kH$I>E(y`AT`|5rTNo2G7ih3T&2V~wM_;Y-eQ +zXR0kR`RwR1Ut4jDiQzYq?nf_dl_Z}tt=JgaE0?7B_v*0&^L}*wvpl5f<-%aI)#akP +zL;-{N+&2<73#Fa4OYz}-23 +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 +z?G|qn*O*yZ1;-AmtlJ>ZNyIZgNg*Y4wwwO4!j +z=e?-q(Xrdp;`Fll!cvPDJHA=J{LHqUDJErF%5|@WQ=?flPHwPr5?lK9tj<-Ewbr +z?8|JsZRZq9`Z~TQcd%&3v(K$)H(TF7)tZ^#WxN~@WnB&N>0R+$Ch*mA2W8dvdBTb(c>H)-Z$J3>=iy_QAe-|o +zvX3m;K67$c*aciSaoW1XT3o>_Df9Q0o`2hvypuz^*M8>O_{{sZ>8j6}q8h#nm734B +zN1ir3|Fhx4b*8WbCZ3{>mifvq8JerbiuOg?L}yM8arndb^#8i)_ +z2&0D^%<4-TZNp#bWlekfen;9H?b-XQPQTu|^B{vm{FbJSa@hy(92b8Ss}M~HmuQID +zqR(x5z*YOKTFfj%@9k|T4%A+}EqlvXW7Dx1kL`v0{Hk+io7t>6lHlG|wPK6AO3P=F +z35uGp9(IVNF}{|_`#R^si>9R>6;^u%)QaDJ(=?i<<^OnFK9;Y} +zYx_2%T`Xc-lWv)yYlu7_4Bv#YJIo0urzlo%~Ic!w^`}r +zvF2_Quf)T1W5e8q^%%2!C+}PMS1vQ;qRNIz-a2x&x^JcbN1w9gy=URd`(ep3zRaxr +z5a}JOZr<9nb2abTE5%1mK9){m<#%>zES%y{pTu?QVyF1p3GRO%zx}vr_Jo=Wyx7l@=Kic&($>#EiXTCKOO(}`bwF!J&EeAj#nFgg>ID%-j-f9zVd-9!%uNQT^HY8>?xhz}y +zbkz^$nz-*z&VBv9)plmb~0i`K`U(%GoYa5aN1 +z+;gdZtPtnpSxeq01}iUH8C_v4U2gShvi+__DT*hy1uJR_ZOsic?RXWxc8SBHNe=?} +z&I@?uC9pB9km*~h&%Dg1xNu>6@JAla*RDSwf4#}yShxML@xL#>O+(rqU0pE2XWF%7 +zm5-Z0G!iR4DGED_89w5!2>->nHwXJWw{FYT>;n +zv+7R9MBa1KdSh^6&*dj`wwT*~+x1#x#@s~r-+tY8#>Xai^agm%SY^BC=-sJ$TNfxM +zoVwq~@AtS{)=^yY<;4{nL_aK*b?exW@!{R){G8?I_Dfv+)b&#D(_7W0mn}=m-zCmW +z4k~w+liB*RWaf>18+M-mcUtRIp}E%~@7j48KV+upe0Y18>E5<^h7RTeMO{^smR@4; +z+bd?{rg@0xy8ZLUdeh97Ws+4~)03^Q_-bo~HU;Q?TH>f1;=I;x+r%D~goLX*l_n)R +zmY=ts#C7N9_SN=lLYnrkH{H~@;bW!Clsi#=jpyHr@u}=w67cr4^O=kfC*%~&@&nBl +zEEVo`=v#3AL+`Sc$T(h@SzWuP;ec$r&$~nW?}c7s +zE&oy+>#6K;HpN-x;$SQIfGr?=j{rD>}Zsn{K%4x>pMe=U2H1 +zZ;prvn;j+wSJ+eH86K1wl^H1{#KgqJ_!s9UCg;b11j>w3(@IhbT0(YQUVl`$p}~QH +ziJ9r3g8+x40*3;Jf`ACC0E+;NfCv*8OEbePhUTsZ9KJEj4VU+Yb=3r(^2>^|edDQd +zOZLwi^^jQ`cX%ntN)?~T@LTvsWY*Io6}rpa?ImRNP3H@D7qCYzca66F(bRU)QK5+4 +zmZQgdWrT`=`%?FpH#)LUw>lH(l8`9! +z!1_|m!e_IXo!yx|r7|>w+}4Q8YxHbi>8*T()3E=ZPqA~+AEfS>9GrYur9*k%jB(1)ZKHH&gQ4^aC`TT3gvK`n=?i +zd}n0lq-t9Gk}q(<{=6TXm#VQcy +zEw#?HQ?fS7y$kN@aykoePX4w~qw7h0o5{_z88z{%RXCP^cUe^YA%Bv{Dc{?#`LjQ{ +z3FU05oVEJ4jHQat0K50RNY@;<@7Gg6uYJD9f3$j<#FXfkE*ncQoQOncn7Fo?%rkn7wZ5-9aI?CfU_ +z&8_q7=e%WYw4Km(Q2wLGi?a&4QM+7rD!)5%=nOZH#_~5DbFQ6LnGIF0UMr-|drZ0P^~htBj^SH7i7#)xCIzM{a@B_~UF^>1QoSx)@W_;j>Lr>t +zGbXAEPx^NJ9FNqrO;6vf-lucANpJGfX^CfzgRG}%M)8>`2Tv+mvPF5VDPyXNobNr6 +zSx-)g8%>IsyDWjl-y-Go`AZYMas<|AN_Oq|r&PfsxL09S|IauTO>57C>~<`Tku7Ih +zl8yBat(CXV6j0MSI?=MfOUb99NKDbkPdu7?4o5_bOy0d`w$cXSN7PM^ysj4vcjZ$` +zFE8A5WOCOH_X`HrrGFQidOkmVq~nARzu~qymVatJ6pDO2q@{N{FNsYPn;x~V=a$Q_ +z6H37^HMD$g&7@fG?#)Hq5{yNAR~qmrd{TY# +zPjUark4dKzg*Voxa>UM^aaW!crG+y3r& +zaJzF!6k{gcV%kKqPtDlG +zcuK`E<Z2mPra-6`OL?tvdZT#%;!#3ewvtiPF&u8q{KRJ5zvVXoF;J`EaEu$ij`t3vS`JGw= +z&T5~3a+G1#{TB(lx=!Wz?RhjYc=L^U6-(>B&M=yI>;K&qg2}tT^}o4gKUFfOBJVfP +z9HZ|iLP8}wP48;0)4lZc%mG&QoAL$I#i}fho{hOFCiC)q&cV1pbMMRjwmFgVbbHg8 +zl?mIzP4^TvxlK3kR{X{8D0BGi?Z^+dH;>$1Z_VKncl?Q%$<^j-GKQ7yIVN7WCyMy^ +zF{_C$-?DVtat|esDE05Vrq`)oc=2-9v0Ro_&GR2H1=`i{aO`?<^Xzv1V?QNT-Nc{I +z{Qj2vP$s*ClV8>3;{cW3BE84#|%s=#`$A6-e +zN}uhiC>k +zyZE%pB3|}qj8a0iQ$FlDdcc3VMB>Fuf%*UEUDp3wYop+?L{QA2?&YPQ7j5TRE?}Ok +zU-$LEm*ttuE(h&vw)SxIZR^}DZgo$5m-U}lQo8*6XDxqueD>k@-VrNm}?jm3Q@>z;>a-AqoXS9`=z^*C_VHumZXuLO?j8A$J+ +zn{Yj&ifjIs!~#au$=lR;gPeCy7WhM#?PRd-1m)r85PuP>QsKjke4PtKvhYb?ihed@@6ddf`r +z%A+%^vrK#|rc3Icuy7OKu+2PX%abXO7qdK=;%b=p&b?hIYgg$PZ=<_Q4lBHTywmZ^ +zv4|rN8znQlyIb$^a~Vr^<|s8-XXzhp=PrB2k)4nuE1h=o3R@5NhKO5jPXE+auQt2v +zD_dWB&Gt-W`1-<4t8*4ahW|glAycXUt|QCsH$wB%_Z?cXt5rd3PgCt*4>!5BvgKBv +z<|=0|e)hz5(g~>ojnoOI50vtR7}h;}aG)Ug+-mOV&;MD^zbrFf^3qzD&*J;cqZhkG +z_a$)NIurTCV^xM);gORZeB0yr|J`Bnet%$Y)~$yOy{5$!pU1#BJxj;{uEC8q5(FT)h1ID&AL)e~$0G(e%B^ +zGF!;_Penfep)JB%$9flBERUa2ZF+qspL5ywnNbNZIwPtXtKP{z*pm~Syf@>E2FGQ{gJfIPJ=+1Y`butzibJLdJagS(tx;pmF8XvuP +z!ikq=w2B5b?KrPpFo%2f#N`c(44-TlXYmlaHgAeu#>39*S>l9J%IT`%KjHqLar*W)Uw><^_d~V +z^wGxotq&s8uSGTF2ETFEm|So@eOs&e#`fh6Mov~iVZCoIFHktR!0+M`Ce<7IyEn*6 +ziT5a2DFj7r&dRK*?c#cRT<>i*e}u!@t*@o|W-sYeWYkxT-OqN&;-Og6){|m^`@hz; +zXsWy^yXkS~mxyQ$U+F}B?G1~ZU#nU_d-B3*uliT{oyQJVzINr85f_R1B%Twu@IcjT +zaho;OVq2F-|78l2-0{WhbNbgel6!V6ak}>Q_kvaP#Gb3HGhXgmyej_AdW+WITaGh0 +zxrs>>oM%>$F5H>c5O?dCQS7(JB@vb|BuS5j@A_>|2Y^L +zj2Q$392goOO`7E*#pmwG_v{Z#0s~W16FUnt7ZWR!G@}d$4}%E97e)aF1p$T=3>+Ga +z4GbTQG^X&Zf0|~_@PcE0;{5#ktY!7~XJ3?D$hh#>SA_2nr^4PR=5|r)9+u(COXeJs +z3|hBi^8qP8*J;&-pKaCc$(XVcBhwe +z>Q5{#?$!Od;qTPtddW-^)OY#4dr-N@hwr90tKsD4V;h~C=h+`~J2LN3LdG#h(>>0mF-}1^M*CpA%tMAM?);R5Pz`>s4?|Q2a-qzE6{Gs`N +zhEViUC6g2DlHcUq{wCIG;N(5cGD3dWyXsd48=iCD-Yd7TkN3}E(^(RhT6%7NGcFm0 +z*0i74d5@*>qmv$&lIWUC`##z2TFvnDs!YR;XQu@Nt~)4q#4w*OpI95BpT%U;z`tc) +zd5OoG8UK0$?7Y^6PBdNpc&?VESXh_LN!b>rC(~?R$y@u#hTm{HSMx|F+>?395d*QE +z7f!6RTK8OGMc5VBdWO}VKcl`sJbw9~@V|$5jt2%jeHrfl_=W5hl|x}VbIv5qOYiA^ +zzTj2Q!om}t=e4H(W)a)Ylea}?+VY914ErRvFPbiXLql&q_nU*q4Bj1*v76ZRn8l~i +zq>tGs?S6~ne^sHy`Z0s@14ep^J~~omRC(rRARonLwEL)_Dab@ +z4<5n(zh)2jE_6}od-wcOjmwMuTYjvOf21WVP{1;Vmi;_HieC%$wP56rv$hcjH&WKwqbx~bgD_*Dg>J!X`eURImV +zv)ygQEE`^~GtWOsUW^TxaPa$IZ>2}kk~0tA72Lz#d~5-8#NX8$_P#0z4&-iq@>+k| +zk(E`mcj1Rk}_a$##U9@o<|GvbE^t3F?Xm?W{Pu8sY>lh1qYqlM6Ui))r*1e)D +zhD-OvX5M@pDD;WrVcQf*x8lNx$^Bw!RSfE!57rdVn^^UKUCdHWy(tF+zDor%9=dO{ +zx3ICmW_{w3d5lZmu-AM3-tu=jlhLX6^ldEDAIf}HS1vrJJBeLmrn=db^vTu};@!j! +zu{^O_9K^i-O!V{quM<-AnqoQ^TUGqAn!UN^>O=hs^`Etml})SCt%6sxoca7wZ1us= +z_5UN(dpL@=SMLzgYt3h8zWdC$*0RWN=ZDwx+$vA(xvzLwbi%v;9e=BQdnYaWsT=Up +ze}Ch2#sv%)dC#-wO}oziuFXQ_JDKg&4l6jjD!K;=CvK5;d&I7L?o#dM!wG-YWLX-XuaC);e)Xb^@B6bz +z0j*N!Gj*{Z&a0!R$n~ZxCPXcdd&~DHM*YRbn#YFU*$rdETjF%roL$yB^XmG|+80k5 +z=BVYd-s$-8^TF+RtM;BuY<8=?$9#1;>-UXe?CsiaEerY0k4-4xxFpvi(f%QqUxH)r +zl<#6cvTtoXwd*v)>k1iB&RerrhB8n7?J_U6@KgPd{eDW-ta;h5xgS5@Q}sqSVZVpF +zLm?>=o(Iq3#d +zWxMW$!~g9((wSV(vAE2dJ98$(vf`L+YgnzOoi4igVomu}y@=LC(ZoY$carq)^@(1N +zxS###4%bm1U(L0VTB~Mnk37V(wM${!%nNHTL_cI>T>9^UL(+sRd%pf&#~A(Pn$ZvU +zSqE?H{~w +z`n9_a+Kob?hTAWcOgPu#MJxvBH~el{Ody^~uA8*B7D>pB6`Zzs5Iq{x{+%toC#i*mFk~=bl+cWO_PMo*?R)&Yne;Jwo +zw_bcNemwt+^Y6va*SXB)Nt(D#|L3I*^IpEuQDRuv(QviN@3PvbjY=DOCdO>s)^+%E +zg;bA%*~dMd;&Thi4r_2N@Jl|c^W;RmYgHAwB%Ft-~9i+`v1Jwp`4rClkM%d{o!|i)#-UQpW}k- +zm&A1(zj>~%{ju()TdvDI5aDPME83hC5duubVFeyDaAkOlu+2os<9OLqj9pQbff|G7Bl)ki7=Uw=B +z@&zphX79j{eFm-NKZEjz@j$u&a=Kf^MChkH9Rn%xv7M?$-cgk(>>pP +z0|$pqzxj>ZeH@Kv=9;%$d&I9Ov(GVILEkw<@{69}k>fWOC)w^W(mCxJV#V>YP1`pw +z`|9SYNq&>B9lv|_#4-D7yK>{pt-sg2yB@qq{*(8~FN*a^&1x-;ZOvB2Djoc~j?D>? +zytn7Bz9W6ExoG}^gP&_(q}*Ay|DQup*=(IeMy|KdwmuHwW0;wAi)${&oyq2mZHMyz +z|JOZTD^j5U^#cd5-Jkf-?FHdLs<%E!+#OSS4 +z*{q&MrfGb1oypBtwv1VKU&V#5AN6l;+VDkyQ|eQE`t#x~d~buCCwNcXxJCD_m4sZoS~^5J+eA(Z +z1*vcZsYp&xTDkahV9Q6}sMCQhhXP%WuGTbl@pU{eqa@{;z%_d3xcS +z&jtk?FZo@qE^YeK`z5{i%i*3ci+x`2_4x0;;j=x1`livy<)GCpU$(tPmRq^=yq|pVNZ+Np=;O^p_NJFhPVh>uyz(JTY5BQr +z`K4RDj-&*wf4SiNC6#?0PFr7nUK{Q-Bhym$ars=MhmJW@1#AT0E^^6p*5=jN^ +zuymfwhdZ7u>->~1SavcT^<-IP-pO!Vg(+e(hu@ +z5-el!Z~ym}TV1u>%zP}jckWV||NifF_lJ4a?=#nYzc=?#n9JSf$Td?gZ=5T&GHqsy +zq{_`{Ub-z=h$ +zx|VHLQ%%Z^Td_h@$`6@wW_*cclYYecia$c3>@2H&$w9M@2Iu?BSIG3ZzVOuZTc_%B +zcGfe4AKB-v4v8@IGqD0aOOyJ+E5M};pcbL4K_zumT~V$WCB*8Jz`LfzHACm{m4LVdm#kXeB+r;9x=6ES0pk5Q_KG)0cK`F7YPith+`W12g%zjyPae;fO-)kNpZ2pPqkV#&oiO8y71p5&Zc_w~ +zA3E{moc{^i9OJ7|VtwsG$ysavSsioGaoP`? +z*}X;=qJ&@HyfgFKmPWgblvUSmb=k@UUyf?tYIU5VeDd?NJh3*k4N8XZ49uB?A#E4pf~+WbG)kFR9aYBBen +z|C{5`FNLxaPub^ks#=?0|2!xk*7sPhwl21`Q*p`$M%FVoB!p%JI_CX!Fesb3sqH-H +zrRz)gvU9nHY+D-r-K^uNdYWj!9G$(t^cV15^e$AmbIj%*?~Y#cyH&e$|0KS7x^1KB +zcbD78(zmGIK33e=yJg$P8zw8#xALlWObSZB9R1zn_6BA3hc6E`_wpIEo)0zHDDtl;_}04h+vn$sADit|DH3-o@W+Y=uP2zKmaB-l=5DzE +zNPzk9rn=kj7@|@+F3gpFen;h;E0dr8O@EcG`MYElV;tQb6H^13AMJEvurPUczUe__ +z(}TNaVo4fb+2_4wzt^?$SM39PDQ~k6eDn7w{`vWQZs~_7cC6lc+j^E+rfS~L*30#0THc&mUceiu;ulo$X4m|SUk^^azcFG;{bbqI +zeO@QrqK`DQyiWh4_q)C9{cjPqq<6mElc$-kS|42D*DD-l5PR*-|3{ZsJyH%yCqtx<5|Az85n%1t5y#TGAsIaZfZHt3}v1gt{pv5feEv1 +z)m=Y*J?tjmyx4jn)3p0O9m +z*(&mg-jUj|(&^|&mUAj08tMCQI3B%sCc$LIh6A#OPx+4fKd8HKe)CD2bsQl#j?DZd +zaN&=GjF#X-QR6S$UogFnj##f;_1Wbb*To9W^5Yw`e&_x!o|iOVXz|JotC(Chmhjfz +zeznDNW{jYY!18ZDCkwXh^Z8=`>Q>v!gKE6L>gK(5(|>nyf311yl++U5q-rVCkh1}w +zMD>bxxif|{@4v{B8MNkUpursp#Y-BCmhl;GpL_4~H-GoU{W;ksB1eAAx}n{FHt<0g +zr+wd|x6C2Eq2G50&iLy&;lmlhxfumN%{n#(8mvo6>wRRMdE;D9Gvm7ruf85h6Df_) +zo3*VeJp8vrYs*#vy^j3<$v=Foc7B}wqBc|C_m5hdvD5ykGoGBe=D*{Of^S-!>DIg@ +zC(c~>qO+^(D4-XiaFldF$L~{zN5vmA@^0yQWVRja6L3**U>GlW~#F +z#-q;D*9!kI-2G=tQ=6Elv#++3%n9Pr<2?vx`*LMzx8@K&7ru5EGYtBP39({OLL+dV3FIa3a~ +z&u$cQ{&9l+$mK@$kCWX0ukF`pYo9P7i*L@8PSyQ0)Ng)mR%onvSoq*@^MR)tOXmJ6 +z;5^86u<1n9&$lNl=5e{!an^LQ-DTkTa&6sgtsT36uJreQs#6y_>-w1h$5U(OFl!32 +zKfKxc@B0P@7sdq-1s9yLc3<%+KHzER^VmNje4dVMjmb{y0xeaJWXK&fO@8h2`^_wy +zre@VWE>8qMc=GIL;fsuVw(~;JA7_j7pbvbOJVu4*|5`D9e!n|MmeK0J%aKpNe_Y{s +znc(*S!MQN6!*-hKXXEFttWUXbe`RLUmj`F2rpPI|-8(ja^Qy{e~UevjG +z)2_xo?GuC7j$TK9Glrz(v(l9vyHhkDEB>>;%*pmq;6w8_8N&s|D{@^HEML4ha{dNJ +zw%(Q7E^V$UVE-Q|bzj#f_|mz537=}Wb?0@YPe~13Yx-b6ucF!EAfFs=$#-Fqi-WDX +z`+}?(cpItbDXC}IA++37hmuX=przbcu|CFTA+dKUK`zd$XqW%br|4+5>9 +z#=bn*rQ68#C~2<#x9x3HI5*$w+BRuPhyE9n$JdnhW%&5dtX?=J?@~xnrtQPG31+i< +zwrrbYwWYS`(58rvq=2(u9~Rdy<&MbN@SsNh(cT)qiyeUv?PRhi>`Yl|pnhk8)Hg%R +ztK8k;hXf{yJc`rg`uKRxved1&az9Ef`BE|EU8nmW39lv@=jXZ~Z?ssnz4?FV)})G( +z2Vc_Ccm;pWK5Vk!_H)Mn&Q2fF6GHjqg)+VyIozMH<$53=Pj|uppBbNzCZ^u~EyA{D +zrqQAsp<54pIHM7^URUg2QS=6Fp{w7O`FAY-5V<|2CQ$j0feQEUE&TtMbP9xJluX>s +zv+texCEfkS_IhatPd6xkwNd?%VeFQ0`Q#IM$%?2ApNt#@=Gdn(^>cK`{TKVN`^Ld3 +zr&~4^`mehikg+9v>W0I=bpHPfXI~^zB7A5oL;B;xny$;t7OWIm`1I@x`QLt@E*`d& +zZC}w@R+Xl)ig|0}`HHRIlFBM){<)VaP%N4LeuvJao7ENmZptgGayD+cr+I9`>Gfaq +z3TFJ0ytm4-a;-FfNnG)TKYunqJEzeZS1ta2``gw>P8$!*xxec_Kezu0ssGJ|?(#Eg +za^=haA7Ds&|M|+r6JftL{XXt@Vq5x}{|gWPz5e(5i|E|*OxI#nyccpVef7_~uB9h; +z>#Ny6h1D1A_FyTn_spuN`uCZlaG=6z +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 +zcU|^;WqGb9aQwyj*m3g0;^mIq +zXI*?Fgq2k-7t}F1FdSXtts8gn=Iq{+oTS!cZs_r!#`+&AQ5GM~BM2cXF0w9C+0KNG|2n;;G>} +zbx!vL2BqqQVqrx= +z-&P%;;eSS2qD#$S%D3+~|DLolvU>TN`{;S`tgpwl?r|Sweq|@SERDfk`QtXdkb})@ +z=ZEgR5zJdDuv+p&^19tIYmLKRoU6`1Gdp?x4xQ$*`R@O+4D${(GsVry4=6SadDJm! +zwq}LjvqSG=Rx{1z-njz;l{WTLvEUD!^l5#b_@(ocWvfz?d~bLCTFQYURGoPh0~%hD{0?;bmDXVWrKIA(vbVy}17 +zQr+3b9G42$i=3F~v?WBRK%aB}Nye4p>RT-Kb}7HFh@F$rBoc7KVb2eykglfn*bN#?@4a| +z`u^U8r%xS)nMF+}tc>}6&R6z`*PP1fi4%PoZ%6wYGg++N|4`~phl$h$^R@HUj!qOh +zc3tvnO@Y$lS<_`+YbR`+lY4veHHk}BA17sQ+S=dp?~9&%&Gv+&Pnk^~AL3}4GU>un +z4(DZw@3t>{+?yuxPu`AqdF9OAf(n9Wu@)LLZI703H`Vr8Z!VNN;evSCm2IU?c3aKg +zK6$oJ@2Pb8bne_8w^^K+`k#n<&syU(i))HW=46xFNhXmiJZ6cg_?}Sq?N|0~z34Gn +zY<=#uww|vY*|%FCpWFDfWYyQhIR)n@DFxf#XstF1=3EqU<8dNyM}ozTx_YA^?b-52 +zfA_ZCoTK)K1wZruX!_dmu8>@Tgs&1@9nPy{@m?~o4%ay>?9X4 +zNzYxTr2zr8YZlntdp3i4Nz&W}<_GF}Vv}yodbM;e%LMa^jWW{?bO`h}-SnIOqrU$6 +z`b;&u=hqgwa1^gFVQDhq@fY +zWqS96^I`k6!$lV2zitL-RV4qnIk*2Jd+)Wc9WDkBd>&m}zjw_M(`d^%SELi`uKoH` +zVt!ysR!d~W(|Jc)kA1Dy3HYWSs#)^*g6x0WNi$ALU$XbOu(2@V!-?Y`=3RZVGUMvo +z)_M+=Zx6FoIm)KkU(^u#>{!3Z!!JpQHK6&*G~=T&p&D?3}mUuSIhl2Mz!Fnf>Y-0tazKf8>U#toc8fl6suWxrwQbuf&tG%6CW<}Y +z@i+NbhD58vy6gHbt7IFsIGVWKmVYe#`d#+h%YS@VcUKn7&T3@gJN;qn>NfLxH@6Dv +zA22BS;(4`J;sc}qT>~6;EinC8}!c&#;b?-k%wb>s&JxBIy +zVTt!bFV^FhQ+-p)Cv|i<3o3`t@wIC%>1AWHxN@xTZi8{sjUy5_HVRjKtvZF# +z=D~RZr#R+clAH0{s#t~Br}|BP!qw9FjzZOnbaR|0?M`34?kxyv3_jO_A+~o?a@8YvWvN2 +zequGS5oKWfaimToda=~0oUCv&_LEn5TD@g*Y&WtVyTX3rP2=~Izpsm0PPn4@hAk|_ +zGA6h7;A{UmF1vmD>y+k6b(QNdre&zE-@o_d<_GaR75;taaC++0I#)H=*{3M+|05?} +z5%nE+p6LE(=5G>=t)A=EF(qAUd6gN1mixYb%SWMSeab~e{ys?cSIK#P|Be1FrK+Mf +ztrbc;g4ZyoiN5}|+Q{WaS1AW?RMQoCrK@t!XCIiO>*3p)o5>IyG3VX9jO}F~9&x#* +z8YIe^J?Z{7jjir~xcZ*xZT!)z=kcwWbb6O&->T0Xudf#Fikvq!KtVs_e{AgMg$(kF +z>;00~=r*l*$8f0I=6Pzy!ps3`!Na@>^_dhkxVUP)^)}FF%`=Kh^Yn9qL=CAy7w=?bSpVGAaziQ2- +zGiwtbRnD9Edxq1MugMaPecRS5EXr+VKc2CXD@(g%=C-CBubLFagN8*jr7e%-h)G{N +z5URGN=F-vymHyfVFVZvi9m)SNL*s3QL7iiF${asE8}54BMuo{w=Ol_Ra^A1VAQ-m) +z@^tgZIR`@j2$`}(-8^uPx%9<`U0g+)i@jL$dOM^pb24g*KFHoTW0j}R9+A}6ck>a+6BoDa+sUe+98onfmcaN%E^*|QrQ +z8(ueCs%`z|w^Cy!o9*Jy7rNhOojxzT^k@4)(dj?iKTa^yy(52K|Lnv0k#pnE?OD)V +zuT{pFE&;B`lvsj +zdzJ1{dC@1qbAJfCUz+=%`sayf!eJAQBNFTue$JTI{d?ZD_D^ExiYu<{k(YY%O#Xze +zan!yKH?P~K-dlN)(@0A2Im@fQPa7;8R-fUVBqul}X7XgAg>D%M$4_&v`n+&5{Uf=E6n`>8y=a9L+yoKWdqs +zYN+>cR&|%K!S=-S3ZHuS6!NYvJm3A~p{!rP%{ki>=kEHSwdd;%2LXv&(ZR)BQ!8zo +z_Ut

r9U4wWApx>FLw$3MSo|p2Zf$#u(m^w{@;vK(vz2k!O!~Wa%r09(u~m_-?Va +za8AmD{Zpln)t_s*F^5w^CHm4c^9A=7x`o<2FT5n->#NFn_vhy+Jz2Ndo|r}U2)}PM +zY%|P{UgV+Lc9180pCp#{`&ijy=N;c?tEEzCv+ux+fdY1=NYoRoVBXrDi{yR}(|f +z!vHaT+omT^Pn4A;sc{@#TE3=o>5?SI&%Dj6ecUaq7b~5Wd;}8;3n$Z+`T +zV2_aW*~_qrgZ0}yqiC?Zkox>8v2&;gH}k@nnF?1lGriQf$8%!H2AC +z2yk#TH7-z803EEJ;I1IR!@|_!prFCQ!PKGP(#Q943;SuKi84DLu{&IL@mj|XYyDO~`dYR{ +zHRCMxsjrSY +zR?S-?zFTQ+Kz@u9xAR2@(+tClOEjOGHMlt4GjxzJwcK;S>Tu>^(J5US-@Kg;XKntk +zY{EOu_Rqg-S*pq=vEFM8e(VkiIZ%I7S0iY}-j*^8!|jXWWF-O?3obwLTB+mTIsbao +zk58{}|M@9Q{nU+p-;EE%IzHCjyynZv+kYnAJbGoT-EzrUesa=RoogR3Ob8EH_Ef6> +zdb4-&#&!9gQ}X|@z3QA5d*FBCFVRYkGkcEeHHy#p{%jlDzTgLvy%`7jZwFRPmYwJ= +zZQfPWT%`K%aI#3Z?c#A$QEtnnU+Yh)WM6i25vshsKgVtj>;2Cg +zmq~v-b1zlmQ4IU}g(q`bq76cB6i40?wVfDrq^A5xUj3=XS#LuQT>C1^swJi4R+3JJ9c)J-xlNgpx)p%Q6#P8CC`O~`NC;u +z_H#;=2OR2AbO_EUVcL6OvCr~z2YC*LyGa^yuQZr3amE61>6d;7c|7E{-DqGt*wcBI +zQ7zl?%H#gk#pVi$ +zqEAZa&iIimS|ER4`S&re#}}1#Hfs02e(>P-)5EEmTO@dNb$FBWm9m}InoRiR>hZ~o +z`Ac!7(W<2vSIy|$(!Se7VN$2h_IsBD{yKgWmYWi+GVxyhn+aP*q#vs$U3eT3yGMFK +z`^lt9(|i(Q?yaBH$Qisf{l%$+roP6fZNBWNb~&Wd^Ifr3f_c*ty(d#@MefI(eA^`P +z?^xR89TS=h6t`NgyUeZ`@qlTOWJY#roy@a8D}-48HkK`EUE;WaYabWqw_h0@{H(>V +z8)J4DJ(%Bmcz23Z{?Xeqj!$+>txs09xbcxOMf1S%%TX~mLJ|_b(3V1cU^v!u$=70yX;a9 +z49%BfWi$#lzYqRx$`>+Z{pg@0&(Ue7A&{zOzgViH +zcuKm{nHc5Q!EF4m3)7dYDAYYHU;gj<+|}0?d`jN%XKkI3k00ZSowCQ?>Fh|>P<_n9 +zJ%y=dv3D@T+Kp%T1nqkN`2H@&;zU&-of( +z&4+FO1UUJ>%Rbr19Q~zL%j0kS<0UVQUM$giZ<^zimbPo{9I4!ODd%#p9;%+TKS_P^ +zAMUF^B%s@}_>oWk=HN|-?a%iL9$k8Bg5Klcvk-;LmVyO4dKhp1g( +z@S~*5n;!+pN3T4a^l(<#>6WgUJXQi8k3V~JUJ=aeQgQgZe$kQ*ygOQdr)+C@&OJBH +zfdBlf3DbhVC#X)zd0Vfvp{}qeqKI|V*Zo`~oJ)IUHaG=2?7Q;GO6_=nNQZt#2$!tJ +zl|=i0PVonnT<%D0{;+7(?3m(>FIF3Pb}_7wXJLKvnK9+u)EUeRYPmK)XFqN3^O8b9J?5O(=gLl+vxMclIcmMdIFbX +zcg}S +zhhyUb$Jf&f|1A$YHZjyYXt%}INjb4I?XI#o$g>ReTI@&3xi +z$(^EcfZb?M&wn-T_&yIS-PjiO_*2Su9b#`<*Z*Mox7F={E$2C7smxb9%s*b^n|~v1 +z+3%b+O^;42dBc9{R!+`diPO)-k~3RY*1kT_`F5^^_rV!`{Q0s;MFPhTnVEd^Wb@bj +zC*~cJzftCv?z9=vI@QrS%T~TPFLpZY+}||0SkC#fmizox?rxeQ!56eU=iu)0{oWlW +zItG;wcXwX?@}EB=$Nafd(ck_bJ2qVW8@u^v>&fMpjVw1bIA=txeQ4(PL-hOB8bLP( +z4ofMon}^!&YTqss+h*%^O6tUiNXN257oMckIzLp6s$Na|kaxcM$RX`15fY~#y32m- +zn{d_NirYoo5^VO4Uf7ov7eUQieN +z>-;T+f3vDiehHC}@;#w)q1ZBRVXM<;#wFgyA7m4!y`3n3W|DmQvw7vQ?{1#pn&=jG +zr~dNU^M1$vJBOt_6y3M!x7d1v7>;=t;uAgU9$1DZOpWO4d1NHu+WOa@>!hyFgQ>?) +z_$-{I$CAqBY8skVH|3+&x*5S9E}NDAxmvW&)O@z&^X?lw#$s9<IW4MLo=gi}v2yOe+u5!1H-1cH6z=NZ$F$+JeHLfw;*S|? +znEkYkH=AWGWaQ)u6i$8p?rGTv#t$vL>dj_$idrGItK805-T&jWwBXPwb>B@ZEIsGg +zdZ!kq*OwkWFMBFeC~odvt@*7xb-P%zqnOq=nXQkXIdP?qz}anDZC8F&wIpQUt&#NF +zyDs|ptFHaV(=5xq-8b3KN^dk^%WGt7n$P~&Eo_dU*@ATAqBAoDoT^f`2~N$bsn~IJ +z?q>dmAJxZtzjED>$X;&Vb&V^?xJSNHq-lRY+loV*+f}z@%GQ~| +z-anSK^cZ}6v1{YX7@LRArH9y$a?Vc|w(C}_QJML{vz>Fk+w>2tIuE@=4zcS^`LHup +z$gWwXCS~FWPlbnE{SuIjHF8kGNc&t&Pa8JK7_nzkNFVw=0U +z-;e$G;S#-6^)6=~%jBt>uX}Mvn3(U-*7cEn-WW1j;9v6V$2NagIJ`Q>cDyo6^@237 +z^yeMt9dFy$JreNWa?E!9Lq?kg&o8dDoi4CmbJ7)dO@}G-W7ay_%uKtowdHm1lB1tk +zCRc7_uig39@rh47r|k-!$tleKkWVL@*_%IlJmOgOVMBgl=e^W9)(tLwG))E2wzt9ACo +zjD^oQGvfDvCKY!^30iu-}*`yWr%puW!yg-TsZS=B8!fug9AC +zGCPl5Uv1eERCQ8oiERJBcebqpYaL$;|Nj0rhhw&j^X;x@ajO!R-lz|Mm7y4%^WxB3 +zrHvc6l=`pN()p;V!};KfH}9HwZMob3Sh_41T+R?zv>o0c>j5({klw9Ok=y7hSR~|B>|a9*0LB>wk&-;)-B4*H~KC +z$-T+5pxEu|t)_V6eD%(AN(&Meu)3a~V#Vxr>6M5@l)>Se!&d4go-QYEX1h&Y;IxxV +z&R%2w+BEjLnp;nc9I-uk_wCB&Wlg4A+}b`Fh4coP9^5|f=I@6xMZX`Mo%1I7SD(qm +z23FRocf@*ZEtjjrSU6>Uk#VW`Y&}n9hW$mBUi&81w~rWWxn4y!b(mkB6wfl%pU;E+ +z`Xq&gO^QEU3WO(bV!w4p=*w~C9V;Hb6!CN7V2V9^^{gphlR{%6oAp+oCG%IEUoF<` +z$ZJ(1|FcNu@o7(~c}z;t-yNEaQ%W{5U6)+yYgQR?+1%~uTxlWhV`clT8kQKTti1m_ +z{q@9rOAA$(ogWLk!lX~V-Q(^Qt&u*FTUyG=@^5p|M00&@;VH9g4t+bSy##0m7 +zztEt3SVcVjPYiZtL2Y)6U +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 +z;DLArBlD-*Elb%>=EZ;EcxY)>L4c-@6 +zT^U)w?!+Di&DX|$I>%1_ax1^D*}wa4&6eL$svXhh<$m1uhn|Li*IoV2oA0jut9?@^ +zNId?))D>v+-SlVL;hpRE^SyfG&K~o4v6{xt^$VxWU6iy;UqNpA90!5#PnpA8n0CmQW7+Vox}XAiH#ruCI>-iok_TVSmKN5HSdSl85f*8`d^_g +zrlxlGA~n%}UwS3u;!nQj$#&ZEdiVR5+-qOwreEg_SodD>#MiZq--ND*^Jb}Qd+R?f +z&91FnW_7d9He<>)@m+$S4_b6b-qL#=9h+L~x&Pg-BfqY-e^p&^j(z5vtJg!~YB>-1 +zzB;VY-8+4YXNmf=rG1lh_dE;iiz|EFoymA)O10UMm_zEz_nq{uRlMM)=X@DH(9!cebNSpo6H-F1zIEj +zmxrZgZkkzo>Fb0^d|#DzZnFN}VH+#a+4?bI>q?I45--lr{(8*FlR~Izoce4-^_i-x>-y${f7GVd;x_iu{UpsOkaIZOZ>{K3sL)oReyV(p6;W* +z?~%f^^{P7YO=o4ZFSah-Q}krQYirTuu%D|IFJV$D?^#)MSMjW$yqIrc`92lR@`|adUlP_J{czG1m3H1Dkc7ZWg_14FTW+P_Ta>URi>v8mYOiMH^pui +zpMNO6OlID$XEV8!(jGh$-LNTcQhAirV@>^zZr!8vO^&MbWwNHPzr!CGv4}^#oU`Hn +z+HLmF_LqkKPMK_=eFPfiDU2)5h{l|V&!_w(&%M1>eJy%XXpFAgV+ne?Ob!TZZ``DfQ{PCvL +ziy2YuM>`lVl`-@#SnJMNUin4p?|*Bib-y|+&N!a=Ki}ea%(~WJ+No?qns(P(9^<%+l5k`*&cV>g*!it)MV!9FkX +zA9K=#=Rb~QyoorbaIn5-%iRx~Z5O3is|87XELQt&HfR1T;a3w*PW^fK#L*{Q2D%aF +z8$W3*KeNy4^OETS5k*_qKXJQ1^-hlV&VyzPmCvRV$UmKF$7C^lZvJA3ohUcm3+N#XjC85g+1wH`hO{e_7mOPe70QYE`mczv0QLQ?~0qcR+L5xlK(gRz({$Htl<*$KPe(X^=Lp +zDk;5M!}PP{m3JCH=bYYZb4_7!t*jn#%3=~(w8{(MJV5BE15GzIbxsE)W1Cf;wO1Od|h&}*MZUa +z;Y_J2t4pQN-)G#8uif!3Wyc3+#}iW;4QAA@@NQM%OcgflDLJa7X{}H%@Kf@@uMRQB +z|E}+i`t+n1AJ{nAG?~xp8b_Vt-8&OpayINd#UKzLI@aNq2Pr +z3zn%by7MXO$L}|}-g7;!1vPm_FUs5_|HUx;`@TEJ@1^Z&Iv>4T^t=6%3rkZMmK~^k +zH=}3g&kuKQ)^6Kf>|PtQQBX(4vb;!d3D>!~*Y0dHQ8mcA(`UVQc5LQ5g?kY%&dAO% +z()gh_sY&|glPUj|vy*kIg_;YG$IX0NlzvB_d%;XIVeuO-9Um7OpSgUYOyym|Ifal@ +zbN{;gUikHd?{?{lV`}9}8AZ!aJmK5BGp14f0cWIiza#tBJ^WQ2OLN+1RcRc4%i>jjtm{G9w~K1=v+Y|mJeajqEe{H5OfZ_MCDEEn9yRjivQy7Bk8G46a1cD_VIVLUTSc~(9(55 +zYGav;_#5BA#>?@~{G0Ud?hEYe3$&VbwcxCF@YM4+A8II?F21v8^UO@+U+dQ@ZR}x* +z;`;dN@6|UiWNtQw{`&Lv`nT%#s|VETSf<>ccvDmC-SIaz^Ec#b^L8mQ=}lO1X_p3f +z?Hk+SEKD?V)j6Oufk|$e`CQyNTpO5v)1A{jL8(jB`9XHvr=GLLUdy%U&xUF^hopS4i^ySYp?B{zpOE)q7ciw?1 +z{6{X^{X5L-u&HS0qZJ9K-6xBJ`D +zu%fk$n+l4XZiOazIehplQ7PDY)t%*Fg3Sl34nfX|iyh?}__+h?_b~K^EH>X^;j^Lh +zm%8e!o(>HM!&0Y&jC%o-EE)Z$s->@U;`-X#J6Vd=Xr7PH+)oyUj?=9oN=_t96Z^mD +z^97k!JuCLS>pjeVO)9hRDcn`Q+p$x(u~{U&@=Bu@%kwV@mecZ%ZCL9Zx~{TI^p06< +zO~S*XYn_=NmH(XgN^-h!-_&o;iMLnRyzJw-y?fr#&aIcNm_CGV-TI~NrH;GPBA3VF +zk&*9<*99uCm@ubQp+|FC`h|O|jQnRrK0i25m)UB8&QBlD^4Hwi-g~U3u1*WP)|nmD +zKBbf)#PCtK^^1%Uu9`KQzp|`ca4>JZ#Ot2Vhc$!Jc1ENNEOS*5xgnKuRztyj`|ZT; +z2%Z}^%@Y1-7WJH-m7}Y1t=d3u!?{UqTJtuT)RrFDwnnja&Ws(KKTar1`8Bo6N%)3h +zkbL<4;)8+vRx|TiYc7hNdueuq;n#a-J6B&8*s!|S@mN3|}CuqW!FJ35OwhZF6ILy($lfkp)-_{Ou<3ibIoozM(KYk`n+7+X}IxTL+ +zvn2hwx$pRUCcfB}x^HXR?1aeeZ+G^7P^h2gx_y~rjg1HMO8FD5@t4#k8n@KWxhQ^c +zi`FSky>l!Z^paK`)b4tq`gXR~eaVxq$A7iNvTsS_dG^WaVd%Wa(i&5z?QveRRc~gg +zYwO>yD_B1VxmOj-w;PrCoj<$7XN^EqeJt +zs`tRDZlixLVhfkA+HoLk35)xJGu;2JuC#=Us0&Yt%MsfazDRS`J*SBuGWXdpn~}k% +z{JPiq_wlVIe6FvwDx@Cd2IYSJ7M6KpZV&Sbzp!AjLkWkYH&nED{YZV|x~%Iu`zg8C +zOeMQGSuVT%PP(hB#`)~TyZKXjGlE&G8rN6#u0Qx-D0lPh-fHpTo0b<@`q137=or +zJ8I{}e@}6jKkVO|vpcphphesDzC-Wi0|zfkrSAFfc7AeR|HbAhYCql@$Vt0~Km+P|7(Tj|vF{@%&S3qF@@^__Qpmd$FZ +zyZ83(cHMhm{+$m^Az!+m2KrrTO)^k3U$FYeq}lA-XRTA)8TqF_Uu5Ilrw?B#`97W8 +zAzvE1#rO-ag|PWDzbENsp8~|b@LrI1z9saswc^Ic3tiU2o8n$<44>R@q!Jsw)HpO~ +zsc=|G${Pt1T>ELpn$nAxG8+`gXNNfNhZByL;iZ@U?z5a-qlt<2Hw;bV)8_!y99GhezzwKq_<_Ry7KJ>RQy^(k$%_;d(vzdXJ +z#jJHN0=>okVmv)=+KIpa#K2$f>9l`KrNPVHlUPmWzghTlq1i5{4?dC6;j53xHz_xN +z=TBOdWV~9Macz8_A)i8on`!$4@1$*SI&`_LHXbz)jSAYbb5(=-Nwq%lfOl+*eXSF& +z7HQma$?Z7vdy6W2LfOiro@}8zrZ~)QW7*<4GcG{%5I?uvr)?h>Gz6z#PX6ujEjz90 +zh4d`dbBian&Aip2xxr}G%@Ahe*#~zX5IXZ9xp3j3NBjvpTeRX0mZuiyIX@GLzPY9P +zlyR3PgZEs)cn3~)F=@a2jSf7Q<}5tR&Hd72R=ebT?Nw?Yw9l!0)Mh)`d%f&W*SkkM +zzu2wZ*k8_mWeUR&_tfCvyi5qpObMvSEOE{(F3l-UDTs+FOI2z!dy%Zbp&}q6W#A*! +zv3R0_$m0Te;f4bZ4F?(=6a+Y!6qqLxr`Wyrt6gV6>Kud|67(^Q#iUdUU*U2`B +z9%0E4%l}*4caK4Q$-lyn|K3_Ce|tQuPH|%Wp8oEGwJ{-{^&9%L9~#bD@K5x(p;5-K +z1JM=lC4V1y+0oLh>Y^=KA>74hVz?`&F4Nqnn>VR+wV#8A +zMWl0@lc-%2mN-O`#k6G{3HJj+&73md}a1{^HO=WLx#uYVy?Bz#QOE< +zP85yGymSAL%f~0@e}&xh^!V{V%-SZ==?m+J-`n44yYR@(Uv^KfYt_0#X+P%Lzv+1V +z_uATj^L5RtR)2YYxAK?F*@X?I&$s{I7GzQKe63v*tHPb12aCm?m;L)E_IK;t^38MO +zv*+&@6w5B0_LZN1f8l|Bd~*e}*(NAOIn-RatSa<6)7`Kum|Nd^->)5|?Q2s+qfWju +z^RNGPDDU(hZ@J$6e;ap+i2UT%JQzR8CQgz2!6H7-J!*T)69Oeo!&Vo+bXTWv%N^4ZJ}$KI@P&ROBbFN*WcyOPToc~CU$pPne)VEmbymaeOFveJ +zvOH-$u(xDS3Fm{qyes)!W%sE*is?>@O;AbFPy4vM?C1{B`YG9*|L=TTsCxa^U$%fN +z@4G+x3O&kXI_}E)?ax+235$pm>+%-1%#r5OlPdcf(LU#co4ehS6*EnCurG=g_ALmp +zJ*8+Sv;Fz1vKa*oR$HCgDw_k+8MIrIlT$w5+2I)8@5Qi@mGj%K&1DC9d{ido1jN

}GGj_rLk1X}69!w&ysl`mn`3>=MdcHfbFWS{vtE7LVU1i%8P8(&@B6R3 +z$#A`X@$-p~3mv8vcSRmv;i33hV(o0!eSz6>CNpooOfyV6a6egX5{psiF553hvsR{= +zPT_kzvB`&n_g+j>@-ed)>phOf?|&ix +zoz^tHVq{L*u(qc>?p^n%iD{GeUQXMwa0hpHws@Gm*p6PqSBG|8kG=bd`C622%v$}b +zna`_sow~tw`peO7-H(4CZoDNb-&Jsh;TLc9l;W?ST3ioi{xTAYyTP_nL8LCJe}-?w +zq5Mg+PM%xx&0p~Tth!zU#yKlpy&4x(uidv(bZ_Fn`Q^XV?$7zr^T5Gyu8Z9+KM}^? +zn(H`&Bx6#=wtcU^WAn^t%Ri$$IYItkY!h^|tY<9owY}01cxvyBZIXLMx32yqsw*Zl +z`KP_>GD*W0)4OhySf_rERA1cLIA_<670b`h**RaR%_qrk$^1ID%{TMjr}z|BOpOa( +zzQ^jWcB4z>*P@jf|MqUoHa--2iXmA=diPJiw0SD)!}eXWT0SxSxIw#iY47COaZv}= +zp7gxui(5HqkuyvBo-gg28l+uLY)u&Mh{GERyzE{_&QKpIh2p +z*7siA72z)$&eq+m;gs+Jw>oxi_}f)S9pztKUZ-I7 +z_EgpPl}4A=>B+rawd6whw&t>>f*Ii%rMs@BhtF2ydizA;kHbs_cajxuf1UUjZCWNmVImql5t-t2kD)-~O%6|0$&&CZoSU(kgq +zv}uCmy`PiK3ewLq2)u5uw+{BS-}A@J>!?=l{hYfKmgL-+w%Ep|W$$6tu!-IK{{=6Z +zaaVd-lj-T-(|?OjTK#$3%SiJD_E)}gYj>|Zv0=%%Z%KKnt0R10lvFV$>z6(B`n9QB +z{+F=G`*7VmbE-=e#O|@QWqWSX_j!NDm}J^ld}FHa~Qe<|NRGkdHkK=SkV5pY0d-95Du#yXVZaO_CImcn;ho|{w>XdPJYk%dvRk39Lv9pQa +zUxjs_ZoAQ%UGU90I(=JY-({(dW=~|4cP`#?_QYIEv#R2GH)Zy3b$_~Ba^g?(WRd*S +zYb^5rPqHxGjy)Vcp)fIbY^4=via9!~MXa%Dd}p9P794F#f>D^}ovNSfrr* +zzUmXVOPTIjGyK*%P`x+l56^?O$3pn^(wl-Vns$`QteN%egTao!ygw57k}8^ck_%h4 +z6yy%S<2`?M&(C>tPgz^17F^W(cIMBIrYSLHA+q|N^*quUtur@1IP)cp`*&E>LsJj_ +z{kDF)%MyY=*!-ApuA9Pr^I@9jIZMM$N-OMFKCO3o#JF#@=EsJGkAC?tPW*rJMzY*D +z6P!(?phY9_3!4RP5LXDW#=7tUC@5u&Z!@ZTyM(?{rcQ0yui9b^d8j?tdNVd9{MsQKTEkxOKgF7> +z?&7i?nmj>^le^x@vq|0zblG=7$ILeG^XQs}MFIPOOe)2Wi#477S +zN5#gV5|OHO-K`EQW^^nR2szKThb#E@o&(%#H>vci{feIQ`>0vxn&Kz#7TL_d8L=x+ +zNOXhpov1joFU+SLPO)oUJ-V5-GwH&^TL~_5C0Fb+47eE2Z`If=5F_hx$K|N^7Q6Co +z@d@@JUDFh`*0%ar_sI*VJ?1EHzRYlleNkAp*dEKugEiBac-~gaEHj#K&~ua};1n0f +zg{bTK-FLPv?pWk182Zym;j`x~;p~sW_a}cT^Pl9pIYxDn*(=vdmn%Q>*9m6Yc>Z#J +z`mM}oUQ_#uns@FJm*?!YaH)Kn{rvT$YXQzzzR7k!U2W(R*<7{2`0<|zu|*;}F1$yg +z_V%m0aJp{Rd7Kkueagl^a}HC5fa-O=MLcJ>xbiJ(`Q}|SDd}=T)R)8T>u+!f@=GBW&{2yQeCXuGMH6O^7e1p^uN0>1arzc4T{PEm +z*L681&o(8Q!?KUlE_b(z?dS3TS@S=<-qR(@Tu|#&o5G*}9RWO5g2lR79HNq+o92d` +z5a{yl)Gq5dv-+#8= +zxpsAzuZyftC2dc)db#wKR>eB*N56MWw9I*$uqQgE=H8?98rIkHD>qnlmsrSi=X;B_ +z#J}v@^p6TOnv6w$ch=)7hl~kw(;lcqWZ>f=NHQ@zM;F)i}7xG){|XJZWu@G$@+0w +z#Oncr?2#4o%Z_dM$`$p+(ZW(y(bQ>8MC&XEcAwLWCg;}gllR*z_#$?797~kOd)+O8 +z?-hRT+P5Tg-DV+=xnf)PYvn$C*8l#<`{^}K6WF%su94rsV8FM2itVh=>C=@A6OL_^ +zF1WeVYi6!XR-(;$eudee!cAv``!5kj9WF9%Wag}=2@)r>e4>u%U3Ky8s&tJ97wQmV~9%a +zpYOWx$mWdy_N#kJ54`!gKBpzzy6x1-YAL&YviSD-`~PE|jsDJ8UakG+ +zdC4qars@AxYS-^%F%OFVyJkOkTSDU=Kl|H!$Ijf?9$dt-#;W4T!b{vAe%=f?fBtf? +z+IEv|Gv|MOyzGrt{I}X$b)SkS_D9Wr`AX+n^OH&MIE2NGdguFomYHYZvMYn@#rGQ5 +z14+Feht7+wxz5`b`QYQnsLzUL&OKdm`e)elr0o*iAyv_97R}^jdO9OJ`_GnrM;_ft +z_fdFi$IY>}%o&$Z^y +z_~~~lyZlgt`g`|)rh8w{>^!@#@O{L+<4Jmxx8<*MnD+0(%|6~ujLC($C5N6%9xW=B +ztGPCR#Xh!`YtJ#STGx5@*6gfrw(0eiS=pB#M!vu4ptfIax!Szck}uD$W(bSxF(wBv +za2i*wtrj~j_4C=h&wV>Izso#-bk@8v;PJsNlTPhw+5WutxyLTscsoP(!lIz}jAEbL +zrdTa2Rh`A~dULVLtP@lEOd?Ix#7t?VyuvtnY +zo#kcQv+Cn+0`E)oN)nQ6v&7|}Z;sBmB|Ji2b|ho+vCF6A +zrDk2Iex&=iv!P-Zlf$`-)6{Ges@OSK9o?JSGWT=V$G$5EUuG~02wc6m!KhT^1buz +zq?#tpjCMd0W6k^|c9U__4=Xn3IZDn^6K86fENQLFHTdhJQGA;rccJ?n7nv0f%&V2& +z<~qi+m5Dq~kM*2<>{W}X{c9(q7lz^@DwdgrmYLs;z4!e2o%p`tQkHJOtT*gzmUrK?R^->a +z=%3Tm4t&0x&*hU`?q`>A;;CT3%4Y7OyuQCaz2tCJ#$Ki*{7Qfy_bLZ*I4*vd!C#sz)%z=QglnP +zXjZ;bUDJ~-n{rd`XR|)tB2@nMmEqT{<}0sO-k5!PpH9>2dG)s+ANKyru`u-b8GgO8 +z#iEH?Ym&=uePwCO+9BY6T5QMHr?$Gm+jKjopI7+d`S_BhiowGfyoXKwUv21I&Y0km +zXX7&=q>edv;hXl!r}aZ>7$alNa+{6RjAjP6 +ziCq_8b(|O6U0$PY+iB+cEx*PIc*)N{-`k-UZY?1px^&)-Q +z`OWQy&DZ=*_WjtSo3|iv(d@8adn>ae8&lT5vps2YKA>W0jHSbM&nr6%_ek1#*_^1E +z`!F}t$|G}bVyp9XwffhL7f&ciIJp&Hj0j)P?QR|!Zpr`7W=2qIL%5}l$ncI$>C*2umoa4BwuUvAG +zOe+hR-F%$uWxj^puZ0xtv3{ +zJ~=(}>z;e4*H~|Ji0{uy0sT`VkM#1Zwn({t4wX>&lpnYy_xM!p!s`cg15JJ~y;-T8 +z`F~+X*gCNbeYpoL#Wrn;dvEr%FSqdT_t!Tjc|KcRUAn!o@A%wS7JT +z{Wq5rDld&W%_|dEr<_^6U|o=NmuPNQ-n2DKn0)?;x4u2#ER$RR?0!#E(VXVD&m|81 +z=iM;(QqR*r%7?->-mTrV`J_*eVNQI&Ex~;~4DBz!Jr&y~Y%xQ;Lpi2+`^M~3It{(g +zLN@J?VA^O=ILFHS*xX;sr^VcQCw0eY?ng1k=sPwEXI0nn%rH9Em8f7C)TR1zr)rMq +zw1c-l)I^Of=9K{Z}Z1y7#& +zGTC2|-Btlm| +za4_Dm^xx`f(xC<`1cE+bp +z0YRaKn#_gW#(Vju1^3wN9qq_yi}Q-+{QUm!e5Z>`Ppy8?w_?7r$L9Z6_{BH9*At#K +z)vQk4S8&!`U)S#}3nN!|9+zL-5|Y)bx2o7-dt${GPWF@&tFM1in%a0Ohw*=DxWS>A +zwB=&9A&Z#j +zO-kH!=S}MRRQ=DL5-sZ`8++xOO$rWNu%F`k_RHzNH`^u8G1$Z +zLUPz~*O#Apj~}|VNAPay?9gmk*9AvBu3ox)eDi6qZ-&z^Fuc8}QWkmhh~>%v-jCfc +ze(ct}?Y)%uZ885e!Jqag1eWg7alOSOB6g}eXPFOYNJUdj1Jl8c2mdz3yCoh}5Rfgr +z`hBOkcbnI(OMg;#Pv3AsIrnzhzQUOkTc1r|kemF3>EpSX2e(w*bnbf9V)sQwu46@u +zy_EftHUB!p8ZS-RP&}i@`|85Zu*)5R1vBd^n2x-U1HDndhYfsl$f*Q +zf|pE&v!91@j4XFViRnDU_SEZhADT}OiYWUYt@xmGL(chw*_YT)n_PEzn4qm1;a2)l +z)MQayj*i3z9q~zp0c8iDe9cri`^NRFiMCt7w?|V>bbVjJq-<>bdrHD;(|HN+(hf4N +z7ka<(EQ9FwS?ex6xpc_MQo?6%i_n)N`tnHwN|Tr??(Gu8+vy{`7#~V +z)NRw@6q$dLOPkZDNqgm_29`ZFuYPcey=O_iIzMJvR<Xv@7TS)`boS_U|?O +z_WtLWP5#FOa(w;tHFfz4gESAnx%2ygI9FK6qtjcjD6@k-VorK84E<9Q1c~uUm1uUyoNhdwO6-P!!*jbW4VAciU;qq2iZ56$SZ~eckM6 +z!_xFRf8w5Ri|_M33Eyzv^@F5!D~Fa+{rvCF>z+UOvb)G{2hS|cpVEm(&z~s0Iqy_a +zj@_G2%}zMki=*C)1m${fE>-vi$$e)t&t(L}I!+6<*_3+^O^imcV|u;=wR={xnn +zee1K+KXMLdh8a9QEi)}~#ihw#B&!dm3vT#3vCeF!LcY|I_YGxF76%k*=k&H1)-|#U +z-TUalJ?mfgO*5 +zR+SWy*~cvY@3;x`Hp$jo?rX#tgT9u<^30ITJh{%^-zH~gcYAA{@6jlZTZcCuc~F+V +zOiF)I#TLgSd*u1pxPxa~V2emLP*^pDSn-z)rEsFBq8i~shF48zr(2Oi#9+`HLM +zaMP9-VsXzcxg3u-{HVymVh-Z_514Vz +z=G>$+bNU9&>G20z=X&kfCaH0!Ww!p+g!ID)7VMeus%XI+FCNB+DfTBa%U^YWe{GiT +zvo+#n66c@!k8AkOR@Gl}bMp5&x;nrKPcAxlGVE*U#a>d+&X{y6S80o~kTKi-l+8jHYdjw25&J^$&6V-}hf; +zrsm8jXX8Ig&J8!q{c@6$h*c``^<&WiK;x0AU(c@mq|0jsNg2ee&goKFt?I%9oynO^JU=!(UpFd +zzx)`sshwh&P_a6uW~6o`_Hh9FA_Z98zfUaUe= +zTk5YE-!F#s^ApN1%XVAulyjQOt@i2u*2+nx8rxEZ_0D&hO#B^t>S6Nw5-Th^fj7xAa^ca9#@p~9XBVDRWe7gw`F@d0 +zmH5>Dd#X2H#1>rKU7;mnE8aDg=jb$ES0}T5oIZ~)3takpyZcz>^*QBY%XjbD_vO^$ +zfO~2}t?QDiHqQ8AkoDv!qqxGV-P_KsOO$SInP_w+R`>n>%g1%}-JbGE{D|NBJ;Ww+ +z_4%R=7nayxIFiG3@bb+6S_$RzOeYqd;D5er$3v^#_bhFeb+q)|NDF^@RfBhS>@lX8 +z^FLbIl3DMU-7MV_nwTq_wDx9a(Xm)tmWMq^T} +zZ0_3W1~Uy@%XI%g-db`(Pc`_^$L$5tYpd=xc1Z8uH~X*oleaIv8?17hY|YJP7500w +zlI|CK^T@cl=b2}n*fr%x`oeU(+Qfo6clq@@FJ^vB{_fDeeBQ*<_tocJnQF@S_xg&w +zMCF&K+A94FP89q}60j)UU$6L%KQ`L?<;H*Ev!&<0i=J}D_WlfkeL5 +zAnSd{fno0)Nd|$^f`)%@1lJ@8uuXMp5nx=%?{xG*dgh4-@jrB$QIpE0XN>r;XY7AJUZlv${w2kJ8-o5A*9jJ-EK?)xr1{ +zCiy@2uGszPKJ%mbJ~J0by`q~y-RWlve*|Yb{g`XP`!GLW;9YD7|>Gkhs_@?J-Hm7YL8p{1FY+#PEzwKB150uG$lR%nz{t@%T}}4UeS@1UD7(aZ4#|nQJz$*X{Aw +zwcaVG9PBa=P3XwHkdu^RwQtprnUaYIbVB6?;$2o>b+qnKVJ^S0W0zsY1%`arxcm!B +zlRh#`S=XSG@5a3^LBQnZ@9&cYW^ED3WwvR#_TudR87qz!zj&2lt+DG6NA8||+ox^N +z(%F9M)OD5b0S<>_H&2pS!yoUm>uJ=P$TXJ&R>uMnl=kr-d=FK{^&gph{ +zX+mOb#=T|AJ*DO+t#Vgzzg1pizidG*yIa8TyEo3i +zU~iUcO%wN=H^Yqez&Ddf?ti8CuOGdjkeu=Tc;DUQ7i5e~TF=UAN=8Ln>ql)!PB&eG0?8wzKbF)ZEdtbOrg^2-kweu(hD-9O#pw6nER^dHBg +z@3`bM%^$LFocyZqN`~z9HIsba{7n<-ogwDtaj_fWn;&Qf%knAjk!IjvowIe{@Bi8DFY=()lj;3#*^2$Mn!fi+?UCm@^xH@H +zp8Mtx`vTg&e->!}{?%^JdzD9jb5-w&JAJgf-}QZI%%1n+k88E0-tWI#5$}2YcY*Ca +zb*4}MR7{@ywNQR9ty($1_vCK}|9k$^KH2$C{ocB9kAM2<-y8StSugUeHqGe0^4v=M +zh_k?>OM{j +zcYj;FzIXiTyV@BQ@AqG~hpMLYlzNyE*hdS+B@A|2B`sDYESJup5{`7Z>!TsYif7;DH`@OMfAOEq> +ze@*P~e;4|-&*$Rz;}iDfZ~pREXZichF17aEuYT)<-_O7N%WmPi_s1J+?`OREefiA3 +z_mjW{I*}UbFaQH-dShw^XB`}i*@&3eES`@>;CkY +zf9<3{d~a^se?Rw6?ffV2mmAjKfBy4#=B4}JSN^M${q}w8w*B`{|Nd?C@P4@R|9$6w +ze!qTYKmV0~wKhNA8=tL@KlAUm+0Xm!kN?|U{QvzS%K`g9#vcy_4)||js54{#!0g&E +zzlZ6Mh4=&Z%MA9u>_1LA9OyS@sxuP)@OVjsy(IUK!ngzcYRq-Bq&_r1Y?z;V73Vi6wdvWDxvS^1K8-yf8o2E6l_tN-GQJ<%*6z5> +z{i;FW)%T`NTLcsKOtuO*Eb&53D=O;90@tK~fKD|Hwyg&_n7bW6*OxTfMz5KEVuAkG +ztEG=}?=}W>vd!&GztbeNLufrS_d=_(9+i1_6L&9Bp4ZEDGKY74Kl|(Tnofm_)iPt( +zDl!V%`*La*yzrXB&b{Mx!#O_=g_qib3M#f*Uw3QHtYDMz`Oo)y&1t! +zZw;Pu;m_iO5(RZe^Q1VUnisXRAGcVzDPiuvl|M!Ks#Yj=H3YBzWb(Mt$(EDruIl$I +zdz#D**$ip|`R4oas&3hP_tX7ILB%9oJd_AMz;oq@F52kX5*BgogGfi7p +zW-u=NuHwMkd%JXk&K7s$ir3a_O@lt_Io~=PsLc5D-YR98RRQ&rSEhZM=qmA9bLTT7 +zlXfB5A8FmE3;Z)wzn#4ubLow&q@;_jVyUCP+A`C{Pyc8?w>Vo}8JRyrwj%fNq$`tM +zY>QtUmhpFfe(_C?OpuXa5zojGwe_sQwH +zZ_U5%k@%BvVWYIN?1ZKaX({{bfyshSf`;~Cl9HMo{?|lrO_~<{L^f@fU}#18g`|0w +ze75TrRLR`pJtgz{zDw=Ng-Suyp?t1&KGU4556m@ecU$;1o$qcb*E);#ebQ0Ct=jW= +z1s92bDQn1fN-$i@XUrKKz46K&BQM1x0Vl1#91$&gH!r`$I;O|*b|u0`48FE%=dSy)(mm*A%mm@^{2i0pzB}LiI@iG4?}@#B-*?rPpZu|t +zt~GuC-#$@|u`uH}>#d*a{cZv?q{LXk<%;o9|He+WA7fD?^nX5bV?szeto4Mh<;Ky($kss#{ +z+AR@Y)a`3D<-%ms$9s21tzv7r>b+IqYS)KbH!rsQbSlYMB(~&~K(B;a(0Vib8~YAO +zGpui%qVPkuxw0e7*Zhg|l~oS#uhsWK)P_Eh0mXHM%omv3HH +z?A7>b!P@e6F=MU6`Bgm+kG^R>ncBqBZ}j?i)?vlNXR@L+qn^7j%~lUT&+_cr+=4@; +z!C&^3s?1p=KD$Q!vSn-C@{IY{Ci`CuDBeGRQ8b@$2cK3K>*>|4UDK@BC%d>_-?1oD +z?8f@Ml`C%g3!8`@HSJvbZ5>Zkr}yGC(XWY{^>-KiD!C{42#C0n7 +zZ(MmrW9#%_HhtUsYqGa5QrYxl>E7#st8LyzKddjhu_}D``>)K_7i(O%M!Z_}Q{yO~ +za8cRs?o(AkMs4Bd9~=#}-fqyybFR-iDcF+e-lZif^zR+lN2bR22PbWQ%=57DakAJ^ +zBgOETo=C-ci)?xI*mf}(t~qzyVqxCO_sk8}x>5lZjomL6-6`yEu6@E#rCD}t@sp^K +zG`%_EYKKm3a5arNH^sO6H47&z-;a};D*~4>t-r|nI@*NU%V3L1%$B?T7j^WktedXy +zSn2SJhw+ +zd)6KMUhI7saqg{r@izS^y{7;BGQP2$o%8lsJ@ch_lf{f?OBM*R%We{9c6%?EXLxza +ztS0H^i@a*$+DCsZyeOTxCEB#sFKqQ5QMb$DFGF0~E}rnnIFM+fJz3t3-G94t&$D%Z +zwG6p3XFd9USyEElO}+NdR*APybXUtKZ@Kbjh1BA&=dJU5q%QAUo&4p``@rojj~Lc> +z3LKC#nw8DQ;O2I@H+rVZ;;AR*w4cn#+%VDK?ciS7)RJulXKJ>rKlT0;qfpbYYU@%- +zUR%cOWhV9Sw9>ZxI+@sUYWEI%W2?mnV-COjzGKhclNgZ~Y{>*5%B!ZLCMa-Pom47cTV6xZ=V2@4||cY=y3iZ65#Vbu-`Q +z&d!%9>gf8!?a$~5cQ +zU9B&7WqcNoQa;aJSkDn8-MWxz-&MDl?$Y0N)T7&W7ro%PD)%A7Pki44H)rpaOmEtE +z1adH4J9+<^Tjx~!uHy|U-*wrRxUY5l+8_ST?Wo9;FsXYPAKB%W7E~_Y!GH2(|GgJa +zH+ltbOzcoUdH2K|>EGv%Meh&ndC~ltL#8)M;vCN-$xGYso%p`{s;;!{g;q}Y&MeW> +z)ge{EIToudwbmaFtlfJ-u;BIkr8_lSK4i}dUutnG@P60g+Y`<%{qiV7p@6~BXaAeo +zQK<{we&H>Y$z6DBjRc$5$569}@iSz$*0RaEZeOk}bfHsMI@Zzuwv*Ph}o6KZoTVJd55*t&AX0ge=fRP_2cL5(7!6v +z|5|I6tT1hMU&%ae(Zj%>{$G{lQvY$4_kPr{<`!J)Kj-7c*KMR_{E +z*2x3SD<;o2P5QIgr@6Xa^=Rre@mu2wEj@Z;D2$?U!X1njZRTm%K#ng08oTFVWkct-6?b>$l7a +z^JcMmNWMKH7PYW)!lwSQ+Tvjt4MlYFAcCiUZecC+U#J-ydod()@!wga&Ps)wjA8U`iTkd`Aopw(DUHhLZyX_Zh?e_na +zSXS?pTXz4;r#JsJg>U^`>2|C3((^69jia~zR`bpNem?KUJO2eY-%UQX?e6@XqTTsU +zpUeJ>{CfM(M*N*!XULtunJstzF4-^8lEz>WUXouBp)UpYbboOjIZ^Fkv +zqqgmg9k2erZ8x90`N^4Yda><%nXb>B6&beL!D2fu)_m+|3OKWApNq<#^Q<#Fd}?3R +zp1LM!C7$qp^VaV_6>M6x@@`FcKAI@?L5Jl>q>%Z3#o7FtMp{24)%BkK;9@@|Wo&-v +zBXi&%msr1q%o_2H^L@{UUC*#t?r@s_;CoXW`;Fo)nTMV)Kd!`JZ+~~42=C9Qrv7Vk +zC#`os%$(1)u;Qo7viUv-8rfL`_M|iH`_41t!HT-9aGzB&Zzr5j4CxWf_`4@LY30hJ-u>hh)8asOXa#ewK0m%Uas@z+dvT$Dy!E_s#hqonI?l|2)*~#fGQH=V!Xk^!}H^7kYN8 +zJ!|;9w>&>8v;S?`9(3ntu>V!-?AOA7cXt14nXGvK-KF``CluneudEN4$~Uihii!TK +zm@_9&s~B-9C@svXU$_0QCzsM+y`;lO&P}MddYI6E%3kzB>8X#b_9p*BICj5O+J9K> +z;Mq=6gu|{5C)Sf9a)VtC;vy +zPAyG1W5&Gpby2ly=Od~A%eD8hZ_TLRUD=ZJRw6Nokz!o@&ym@>Qx_<9^Z2_FVVtulfte8$MkU$kbxKwWz!$ovoyL +zZwuR$!a3rm3(gesAr9K=L|UFtN%L03|5mpUT+!*aj^oSzqs)G; +z`zz0@<}b5gTKiVqYVpBEkLu>JL}@R4R?aE%QQdbIr^%H&;_N3lzbx}P>$f1`@&|U4 +z%tzl;e$OiRZ{%9xAR7F?;DFFstpNAXqc3DX_D#}Rp!Aq)=aKj+r}7BF$(sM0b1^mAtNgGWs>bN^@+FsmrN*cW_E?-BPV +z&Z<|dws)+0*VoHXBsS4rTf--oW8<^M>9@i!th&vo#JFHeOm)m;R#C-wyKHXRT=M?L +zt1lfBaJ*_(TZGb?1{pogb>UAn-+5RWYP=O`zQiw=?(s)Ij{T+Ki$4-mq*EBZll%+~ +zw_KQRlo2dBAG7^oxi=%`mrOY +z^M^UkM?-wZyuKJ&n_HyIVG&O +zcRsoQBzfAipvh0TQynI6^F7@xG0))Bapo0<%hHr=Tdb5iCRMl}DAj8H?temQOR{lm +zTj92?MP5w2*_uZ;39}~NIOYE0)2iyZKiyZzDzbUJTzBuo;oi;iS)aDP`f9yn-olny +z`VKV{Z%?@}gHa&mb8G9F18XLg9u(5L$gIL0KljU=1somRdk%B%6;r=*oU`>w%cUjS +ziv@SKi|;I6D7q+B{`Eua6Aqo%#5G04NNv4BbsLjaqJft +z^ISM>w`HvUlW<;*YB9f7rG3*c1;0>d;L8n?IqR)It@EYi@4g$6qL+5QUN&|4(W4(d +z|NmALk6PNg?_P>h;ELbfvF*RzcUyeg{W*4;;D-;|CaimB?sP3NW=-6i^+TuazWDUH +z+<#bj70S|;xl8Nftc{fz^|`;ExOSsF{$S{BK`HMF!=Cu}DO=@l1<#o9F$qEUor70jve}OdL`+TqqUuGI%cqG&*qogqNaYi>A@A9eHZ54nSWM4 +zgl|z{z{z}5j>VGQ1|sZEn6~PwLS8^+|PTR(cz#@!TFDNDWW^pH}3ct_&`sWyP-j?V0lae+l@&q?>0_)FyY{aLt+9f?~3f0 +zPP}0J{*;U9z+~okme<->F@86`^ZdON&yL``eW{CD{+BH{w&Fm$*coXPw(eUqt%j_H{CSyLA;JQ#s%QGyc&@Cm(5o;` +zXtU^W)9CYNbFn>9v{s_Pxc$W{4OJeAUvs#Z?0xK};?fy=*7Zb%->f?~|9;R_nWg0A +zFZlHN>&qgSK5kd)Dp+#;%C?Oid66!yoqbDOzg$<+dg*QZ;P$?feEmg@f-Xg0Z!+E& +zRz9_2fz6J*OB?p4#k*bUEPB1mc+tA>Exf|hQaCP}rf9AdUZ_|yV>bKkax+;~_55z(80|EBrIS*5x>JJN9&BvYW0t?=B)!;P!+pvd +z)n7%m4})bl7kIDVe4<1} +zcm4K%Y%dI^h=^<7*Hq(7widTzi`@RE@Zb`_A#$|c%+EA=h~~Zi@{ER4)llp +zas0pQgQ%cw#hitA-u)?x^@;rt)7<#9HO7DT`(Hoc|0i_% +zqXU;-#=fa$?r^f3^M|eD9LLqfy9 +zW6}R(eu`Qe?QL-6TIxdq!gR$Tb5ZKqVV!pJ(LOIuJ^S5TGZ{wZbk +zMVo~Kxt<(#6m(7gwCvPj(M>YlD_UPUPd&b9?VRovEN?1m*7lYDx$1bb?vJ|I&)I@| +z&BC6)7CFDJ`{unr)?0fsR=Uc3wO*#ob?Msl$4V2e7Rk$Vt$VnCWi;CZZ{0=KJ2IZ{ +z{_@_<=7&rBF}`014$yBF&sgPF +zncN-eT+O%74K8@Kw<~V2>1pJP4ft8;mlSZ(L7h7|bK>N^ZTqEGM1S+kefRTYrqYZO +z=B@J0Cm+lG>yDlk!*~5kW0?LsiLYmFHqLTleY->WPPCjx{P8Jo=gVn)irZ7M&H9q< +zh59+~EbF>w_ct$?%M&1IyIH79ex{Q|dX95I`2IwJb`=3f-`6(zcX+hS-7fskmbE** +zuFmG1ll%4A%{Q5auB6R7zEoOBWbctxrED!KFSaR|_3qd7F{_?l_=M5_<*az!sipCH +zt-mWBWtyCPrbpYoJE4}5C%nZ<{hztx<$@+L%?!ED#mk@HVlTV7>cb03N13y0cNjjK +zzd$J9!b$zRG9n_vTv|~->oqdG8A5V%R_@c#C}jBZAl~21iR+az>)VAh=8Jsc*Niv0 +zC=q<2caM?Sf5Ap4-Vhg+D-JJWSg!`Lr@UD)L-b1Ck=UaSA8FDQ!R<#mzyaoTo}D7J221tMb?7b +zm#nydKTKCS=goI(df*RVfrOtrN?Y$`O^TSB_Mt#!-tuKmp)U1x_11+emu{PFwR~=)&pp?_x}pyROGUIV1-z{dHJ*244xf+H{-0*$ +z+AUAazjH2**)VHON}vWu+Wzx1WgIm!&TZYhV72Aa)s~ZX&APv9mf42YKW|;#axm7n +z{s-@#S*O&LCI55n=&cW$k^XTmhib*u>ix4qx%K{p9$M#5w)m*cVpC9<$kBA +z$$N8rn_X5c-6}4pFZCknAJ30sL5FPL6+VZys%<{cW47PfbY(mH-;!PDZ0y)Y-kg~t +z-+!_&d(|Gj)qySt?neh-+5PtZtZ0QY*_dMMr$O-*JC>Pe&Jw<^Q*j{Eg=zJK2VbvG +z$@_l2=encoX4B|zA#3^<>^rI^y-4#2dy{dL&P>LI8(&_!;p1A*Yy9(}eBQkqcXk&q +z5HzXQ?Z0}UMY8eQnRCL;yzbZIPqWr_OiJzPMznnuqYj7LunZH}COa+3Gdy33!OBWABMvp5ytE~*wYN7LEo+_jfwg=Xq6XEKZI +z*P1pV_tl~o%%^_dJbw2B{{`+1Jr)=KK8xnh_nXT;eYbe1aE#RQzgzb+I`O{rzGi-) +zdj5T@YS~=Y}F)^LVmye{M +zQ`4FAQAhoGo_OzpZ<99*w&^aMBRA3y`H&K=RPgj%iB3Oc=0BqOBR*Fv&?h^ZYk_im_H@>(Mu8UTjA9q +zlUDO2|9UlF_?eAC#^)RCrpHGloX`W&isE}QSP)WC{UMaztKyUkB9IM94t;{V|n +zA%|?$-##?|F~@h+9=i{v1+5#SwR#@-dGBH6^HO{2cK7aiPbQY$C+ANl&v?p_{`Aj- +z#hW7y+~)p2zIt8zlHUxE4<b26z5T5fOo!SgY-8n_U0v +z&s8&+`{e)Ej6XBZ?FjYUA@MD4?n{#%L19VX^quivbN6k3ad^qa*ByUu{ZRkp#-;M< +zl+D~vZ_`)2=341<`qcNG>MMd3^%5i%tfk`j*Bc#h;%ib}QvUUF3jbgI70j8Xi4Lo0 +zbgnnPFh@MTbXus;Kc=4j3O*Oa7tGD(;QlAGmbEwX{*E8N&mFOhEMDw#Mdz-v@jBzYo~K+K;d2;uCKqKsd-B0ybz0)42AfjXBeUBR{(COa`YAEp +zv4hJjV77Rl=l)kE*CY?B*|trB&)BTKY5BWK?f+p-Ij5iYizF=mP6+nlSYa1o +zx#|4FkF{wDjr9xXUha?7dJ*Gl{XV+<7o(r|J^6EQm^WP8Dy(z;)xSn{K`JTYCSUOx^6pD1!;_&V5UoC(;mg$LgjlBSYB-zYF0l%e}3A4hFwh +zVLo%6LF?DOnOSP)d$sC+ocpmqg@O0bC(HA5ZCYI-d|y2NEWLqKaHV0aJ@KctZ{ZI4|K~2*i8L;&VO>!^O-Vhc0*LMjYDQ9^R~Gll$ZK`@n~tKje=muJ@K**SdUp +zmmRCZ|F4HGAG1^0Yi>~SZb`@09p=2}Hz`@nzIMyL&$vkMK70DM4>4k^5?Eiz&5Oz8 +zpO<#+ZK+JgpBecct~ScwJX137S1q>?67qj|?V^q0$3Mm&ZR7-=9@)$^$2923|DWs6 +zraXuYySlEz?Y`kW&MP)r+n;=Xw6lxFB*Cs{tL15}?7vl+^FQ8UUgrMzr%JGs-htm= +z)9zHTg&&n;tGHPDcxi;mm5L3IBWDLZ`}^B8^~(L5s&WO-ini=~A$QjLhUdQ|oohxp +z|NYbsuTFUK^BRN1@9Anh`)~4pD?fZHxX)2vLEucMt|QZfC%;dxC|c9qa;7=qz|)z( +z1&sdQuh0Dceab%-J3IH!UzQbo`Xlzgvux|mqxHY_-%UGPd_Py`-(rVTOBR(ro9{a( +z{YW^gDx3Dd;hn+V +zbNoD^=-wVagO{2Ub{sNhdobbT`bxRu$}(X!ySCmssD8Swf*5zxAGoors8Z +zJFDeMX1kl2i&*n2tNw-iUgNiMJ+piN*YCEWMyx7!jZ1l!$uT|hYPuJ;R4}#4$Zkv5 +z+e_bgo&0uG-8v$huqe}l|JvokB-5Ai60A#;IcF;I@6>z}lW)(nH%o)bQQYN1{P}nL +z=UME2?UQ{?uK^P;T^3GaM! +zVt;IE-6U$f{L|Z=JomW27aAK*iFz{6{0YBY!1_sM29LjqtobOr-`GI#?&Vt>f4%zd +zb7R4Iv-j^L=P{L3?|&C(s5|lc@2z)^m@-{^8By#1G|*!+?}^tM^^+%^EKbyK-W0i? +z=f@OgyUT@J=UqLp-15WB8N70=^P?RfnEcrD>r%KvjoIaD8?M4b%eN<0n9Spvf9|5v +zw6^m?3w|v5@qEtF`5coMzdv+@)A)bIod>;(&UT#__^|HS1c|lX=Z|&!cZk>-*rl&I +zbaLIQk1O8^U*C~FHFVbHlT7ALC$5{G_*b#mck!vm!E+vGx77UlboTC@JEzyK?250j +z+pwWZbw0;ty;&D`%&z%#@^kdxmiHbDS5G^6I6pA1Axk}Tx5f8T|AtNcVVV +zoLBU>ut3(~bEM1XNR}%;pFO8#-!YxPw5LB})6bSBBcWYl56(XKJh1%|Cz2IcsCHkEXxnY9AyX-{|M3^UGw{3uAt_`EL(9OVzerc9^$t!9f+?H8=n7 +zee_nD?W@p#Yrpu4#OR1PLcqrtgmbjR2Lw-BzGgUi +z@9^!?jwz9jJy}*RT6Z!He(+Bf%-=zd80gC7gx~ +zYEnu}Vbuz3(;3+>&(}Y7?|i1gk@HoHpQ?P^alhr`6xZT5)xW>zh}JFKykW_<$akw> +z>1aF+y!k!%)rLUcgJ;8U%XO#TS@a88&N+g!cDBWulsTT3E +zt~L;;-{5wjD6;lTaFumfW3;3H-MHO4?so;H|6j3f|9F>K`M$BVRa9K#g!S%R7N)Zg +zR^N=tS!t;{srZ>B$}e>35Y1V&t_vYA+nKaFpv0GdB0T +zUOe+}UYL-lXI%D%H%Sjvo26{Cp6mEe6KrJda6dfTS)qfWG3GIE>|ypUg{4bE<~tno +zoP2Y~nMH9&Yo0o&Maida`>UFLz<23MwZmdNCYfv&vD(CF@28?_yC>4;QvQagF1y!$ +zaWI|t;GDP8TD#3957gtdbiL9{b))vrXP@P2!y4IAsxILn%snZrC6M=uLeQ+-x?fwA +zx_`6gFmGGB#z#)%oaA)1N$k5;r_B_V+4Vs${_HtMW91TtjcJ+5XVU_U{K9z!Lz&IF +zON$o?%D1;Qp6z0A-SceQ+$~pfxdq?It`JWxXKCE+E@#2vQeypUhuJKH7jszHc^3a{ +zYnjCqSJJ)d?7b41BUenX`z_tEg)5tX((nEbsBq +zE%V?sKF1+?;bF9jl=YGTODkpXgM8oL-Fx$GZ)E$XZL!Qe+dMObzm=u>HSqj(-zvvu +zWxJ+#($yx#edc`T4le|LDg5sJZXfgAiCYAnC?bH+v`Pt#rEoryrTdBx$OtRj#HmPv^HQyIoU$&RqDO(7(mpyCT +z@a31)m2?H`tA*OJnK@5{{?Fa@;K{GkO1H$6)l(RhqqZkLW_)tRzsW0ELwSkE87`-? +z^{3w5Om6>k!{v2?f~((_`12VBE_*)J1#H=F+^h3f(Sfm}ZrQf#=dBxd#`AmKjq;i1 +zw#;Q?#_s)7EV{S-WU-mB!;rP&ciei0>oR*X<~J;SFMhM-;w6T+3q=>F>bt#Gc)N_b +zNOJAwIR9`{A>9WKh1L7pw7*eKp?|VDH*juH +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 +zrmhWf!YgAP*<;EwDmMshm+gq0)5Pd;OSX9$I@ +z`m{76kz;#cqTR-l+eTU{J4+93KJ0P*;>&dY-|zC@OkVz~ng90+!G^90f;Xr9{qSM= +z4#V{L{Dt+lKTB>iB=Ki1m?W{^dJA*XcTK^ZDR0fJ3)S_!vs_dXi;mul)pyDSU(l%bZn# +zVe=={KDzkd^n-s(Qo7yY1)+Reb2V>g%XiJ)d1up-6^A$tSvb2UDJ{(YU*2>gqv+_h +z)YTXNuW9|#ReSGXfb)+ZH$G%X=op20pGryE`1{QILgwwi>KMO7Fa%^)B!?N58K&ly +zHBScB@FF}yUW*k@IEo}q(U%8pKw*(!;c#kDkO55<39$4jfOv`=O$r=N%1k{O$+Ce~ +ztHfM&Z%LmHojr}?&b1}F2ET8;Fh6ixXjf+3I_pVAJNYl2Q4Gyrlx*ZTQSr+UuSZL+ +zY&S^GZz@;dvwf(ce7CjzMY0d)@?0f{Qwlpa-M#Z*$2$L*DLqf>TllS1*uEVNbzxaF +z{p=3?H1B^BsmwksGiP$F+E!IL#(rY=~SZ1zqb&DvNH|yM`FVV>{ZQo=K +z5}xj7`&!UhHCwyo3s30kY1OGtGd7)BBJFcC`*v#Ne|BRhbAer(RpUt69A&l5=cCT6^~D|G`L^zoUs{}hT1t*elTr37 +ztEQxLq5CqHo>@^n_m!6Zb77-!HyhTc)f;ETiG0jzuz!-N7Z|vXIct-YLU`yx)~42( +zE}!3L*gbGx!9Df+xfX?t2YX(6*9-4@b^UVK{(rq(J8lT_CmXg-`1bv=VAR6XBA;B> +z^zVz#;BgD?_<5B*@U*DFwdXaZ{2#Z-<*b;MR9Vyn0Mb&8i7n +zc^=Pp>FoBgexmyG?-V`H35SHa%>K&kYxCUT;=1YkdwId`A9W87e!e-W*7T#tw||%0 +zLSB9DGuy^mJ^!o0^7xR)5|1|S-gLLxF5!d1{|mR$oey2RU%kxxjGw*A73l{djd#Kq +ztTwt{_CH`B3#0w59~zzo6aT!JC}=Oc`Hg*A|E&4{44+^AeuBwsYU4TE*x#?jrbTuq +z-kj$t#CYv4H)r>M2}|YpylXz*7qpz0IjL18&&pK0G0Us#?)=va)c6)GT(#>1Yo%j; +z`Q3jfJmV%?Wj`X6zg(IxfHbmg`? +zUydC1Jj$!+EOU#)YI|(5iv5B+&s6?K3k#*US!!>#+;hQ1c&5sWFRR2~DaIdS^O(-n +z%{!@+S-#2qeNbZD>ACxiCd_K^`xUaHu}6P_UDeEnuZw0DZM*xq<<_ouCnjuP7hu0H +z*wkYQm)8;{%@!_)iLX2+&Js>-5M6ou?_CEC*ITYxUJ}c8vhCH-xG{&ls7v6=nyWus +z=kYA8Zp>OIB2Xds-BY0DSx?$IWmD02OQqNT)#!E;5qzJ47c)%R`KVchsdt5V7FiMCT1r*uk#oy4L*ttO6{><718doeXG`}$WC?>3Er262^N$o&!Yf?Ip?$<)r{4RQB^)sDxg9&L5Esq2emc#|C0nI*9Ffy7+S +zM+u&3v9oT(6iz#wZgpVm;fBu(On+}~Is0MVkN+*&t0WTTIo6id=vZa>-{kNrTvCy% +zxoyr4t)sE`?)aZNq9t}(le;uiudBnLiNW$rp~}{OvW`op{j+niIXr)^cGT>}mD#)E +zwjSBmGkH^X@A9Jk_U#2V?&r2zFE%JDNPO$$I&II>iMbak!5_En0r!*z+hetN +zKkn2}f81rt8Ox#e^;*pV{ol(Sc7|^ce6)OLUjAa|`)-eWT9)(Xg@o=1%=m8OedmQm +zi)87InG2ZIw@j0sdn0bq;a#ei^*m30E19LTf_eHHrNFWVZ@W~_fNd%>HdmeNw32zX +zN6AaJ?@PLLpsMeVBkN{7S|$?0+~3Y%K3VuyeBqxcbL-WW>o!}7S-Q;&omd&Ra`Ccx +zSJ&wE9-Z^MbhnUf$;S)tZb)aCI{x%qQWu!7x8%|5MQU53gk!#Ww1@p~4=bI#H0H5U +z`caMVM~uS^P5gd4_&inokWm_AAW>?&J;&`**2e4J2}?s$A7B5meQz;KT2!jZ+N{FG +zIZ<1srPY^TefiN_({JUDO$@7bc82C{iC(y79&_f_Q>m@1bdUXJSQGkS77Me>$2T2U +z4l}j%9|&_76ZVo>RQ14W_ba7;rnAMjSv~$PC>oW1!zg#jwqL=yraE8ErryfT{aT+; +zy5qmrbcVtux5D1%Ovqr%J)^gLyYlts7Y=WhZ#nP#;f~f*q0*&%WvdsYhTL8owdcmZ +z=+Xyk+gi6*F?C)N`xI8VcZR?5+qH486sK@8*`Cf9<&KE_ksqpbVVelkx_^%=`!siO +zF|mi{Sg;qZlT%!sZJ{A`I>GIn(F!5mV1r#!Qn9j5jX9rIYIIC_E$|}Ps>&xkUhKYo +z$tUfg?{!JS^zf$Ev^deEjO@B^ +zx&fEhIZX`OyMIBUo?i9Xt*umP_;pSD9d~!cQ!<6jIKcwYguFX?ys?7LNma +zU;PW;BepA?*QxX4ul?Jn+x323E&Jx)>Y49D&&)mCI9>Xp+^I`D?jJl7zVXrOS7$$7 +zDKgWKkN4lFrJSp<@zYiJ+cUOkUi@`_U)ro^g$)&IC(L}71U&h*=a#)_;QMv|ezPgA +zSi64Hnv5r}S4XTVd8WW!{w?&(v*#-9f7P8I?~9UHnf|F@m&Sa+xJ9p~u2%_Xt{j +zkH};?RT3!dUSiD>T(;8d(iM%coF9{JJh&Jop!w83EkrLeefh)hlcqNHr_Q!}|NEA5{#8C+XR3BROA$Z$YeA&rB6aP#SKeQ@=9?>J@^9`>_GzM1ImK@*`zw2@ +z|J(I@g*B1V2hZ%=rh8p->WNu}PPVrlt&Q2rCO!|&ub8$~ftCMF@}_%dxZYa3WnVrv +zP28GG+CsbZPhZyZKl(*~uaxbXv$eIse6v5#r!9Y24Y%%>mFtPKKE(XRD~_+kgXwS3z=i{9I6 +zYT?>EYuB$xV$RIidg9halaMVP*P^~H%KKZVeCstw%*&gf|4mJ{v^Z9Atv^ggDC4rN|!lKJ&$GQAgnVEh!+w#1c_S$2Y?TuZ&+<8z?ynNC{tqZ?OPm1l|!uPlB +z^kl=eIs0qGnzpWSWLSK+Qhwfo%&m(uQ!j1Na$;utdw92$nx;(4hVVP@6P<#{i%(Yzh5b~>g%nIm@In!z@AMfUu`;+ +z(=XR^snpR8#Ka8%x7%4-L`APIxEeU{Gghn+huzkHPa +z^-6?~XVH7>eto|%exF6_8~fkOy$CtNv;4*C&@XcjJ&pWwwKF{BVZKp^a|w6$;{J`P +z5$^J}OB*$=Io +zeqN6M(znt(8@GJ)v9^mA@?t;Kr|o~r&Av(2>$ix_ofCSx)w`{nG(0Y^bFI)lTb_L2 +zaCqd!ihVh&`&zWsDL+_FH`LZ9e#LPJq_7`PJpi +zyR>5GZQJ$B!dOa7T<76gx6Lg5J%K+oIhG2D8%$-jW~gVh-}kI_V~NAzqrZ1*&UzaD +zkL~Ukuky*yw{POF?vGy4sq-=6#hs$sO;SsK1~7 +zBk|YUU0t3zm-D6XOkZu}q4!wGQAYjcasMmNxkY~Hec^j0ETZ&WUrx&Lt#ihw<28O0 +zv?Kp%Xl&oJj&-Z$cCX4vd9F;o<7emBR%v@YIs2}kdG^Hp_EKwfxIT7qIHpF%%jHJ7 +zobLRYeep-)?re`P>7~_2xv%S+T6AbXeS5%e;*_5E@83^9f5Xz|M3w@h`tgt1`J4GI +zCM2tF7u&XALo|C4%j`_!EzhkOk~3yMzW8@;mZ_B5oQ0(U`5zXqJ(D6DHr@E}s?KY& +zEOS}@{r&k;>GH3mPiq#;zqUIpvAp4p!tR!J4e$Rd*?u~Ca5vN37`r1y+ph_Tc|A!M +z{9Vu{_I39S^|e=RL*5)!*jI09b63yrGJE2UAd?EH2U$4cc-@L9r%-{)|_?4O+z`QY5Fp$FF^^n +zJv`nmeS3V1|B3}M*2})^oA|rn-h)F4OU?BT8J>5WU7o%>USZ|!n1^?!lqjZ8P4domPIc$A0@1pGNUKf3*L1zw+8gEtt_g` +z6T8wqLDcNQtm%RWCtC4HA6~g>mP63ug~`)bdz@dq`el>b#l0o7S@o+wx=%Oi3!mgt +z?Hc}RjeyD|*Xio#jLeQr@yoe0W%_5^nQ>Q47M|Rxo${qY^En^K-2auCw(-?3)Z4c7 +z_%klZuqrZ{`)aF2#WbRu+XF;e0SnWYUu-oi641Dldc$qIR@b9;?stKf?R; +zMO%=QKjUtTnP>m<9OPB;l!*ya{U%Ye&{Tp!_4FErxT@x+ON`C+t5`A~ENcjk7Yg2W +z*gX17n`5tSv`9418vP^>JFiPO+EUmXX1?}wR*e+xOb-zeST`px#h`xAGR +zj_*9mq^=`BXZ0QXm5-i34t$v=@O1f7?RU>N%l3wb)MXX<++JCK@Ji+9h+VT%4EvL| +zd`d1&`M1@zCG9#3cfHRro5i%b+-si0YOV6?$Aup%o$G#^5WQSiKRso_d7117 +za-m^?)BYQ)PIR`p=xp=s_oA)$PPkdANNckl)q3RB{5^TeX^%Hr)%DAngug1DnB%nk +z0K?TsN6p_&|1xLI|B1RTaqS(d`bEtR +zbGFX7zdZLHFDc#g_{Ygvu1 +zTg-EB7Jfg*bc_i(-0Xh(E3=c49Bu1q9RGTmYVkz)sBjn +z3S27V;k>#pLH@vnzxDf#95YgDAM}eZm~6}X{>Az!vTeT;WXw{S_!)aePrPx8{<-Rb +z{>SQ>JabQfSb9IXtY$)9X5{K{WA@`Fnud|ZCd+>pX3snBQRchF5IhF_hfSh(?OPeMUbn35EO-nZrzD`Sq=rMgBPs9bC- +z>9^VS-1|4%eO)A0o%<1-naH(f%PxidBkZLY?QR1-`?%Hmd8^NV;0d~PXSKdkegX4q?cZwglIGXUziqS= +z=C8Ec5qUo&y*5q2(NSgdvyjz`487)D&k9RgJGtd*<1sl&w#bJ3XN%JL#gEUN;ozNk +z_3^CknyiTm4oj4*P8^b-9QXCR`I53#Oa~5XZ$2R2H*-py=vPIq1MW-RS3R`}bxoMJ +zwEfOP<_kCW1ThKE+1c%6a`r`Lvb?{Xx<1oJ!_P)qhuqE9izvFbm`m7QTON|*xUI)1 +zLghGDjlpB-$u(PM?Ag2G=47qk$9wOs-t2!{<%>^4T}<_%{+KfD)g4%I!8F5urD +zG@r+Qs!Z?;-ZK{;w#j{zQ;KSfuxR8yHa}UN?~C13Az7n_z5d}n>-+Dz983P~aOx|^ +zMf2?oA8xG`@a^Aud!JL>rNyrvZCvgUc2FkVJXUyTwd{@WnTDyqtV%cZ%h*5dk(<)# +z{L1x>_S&_tN?ebx*>ELpgcBa<7Yk>GV4483am#2O-(=`o({y~x-7D@>v(Awtlr2Tlx8uK&*V&iVf$pRX48s +zHo4SgaoN?Sck1+W>Xr2kr|`YM6uWR~f9#2SJDqC|UypvVK29&`sA$jP=xn+9|6O*Q +zDTqD#`Xbgc#WZSVt-HXwrMqP`wAHs1zdPc(p2g+WeHDnVe(YS)b^YFsN8U50?wDe?x^*U(;M>$^-+rC?+5BXe +z=8_^t7Z%Y+ng*eh3S=j~^DNl0iTjrOndRcKK0mLi-^qN$=0X5x$2E=*D{Ob{^EhDaC#2u= +zDc~rp3;X3iFD19~D*0a6F5@T=m-0>c*S5}S53-`$_dOAR7Jlg6hYyS1E4am9U3{tT +zN400*g?+Oc6vI8voG;G(QgHS9_aM)PEzbpRda-J+xVMJkVRx{Py_V{V&4POm+4cSH +zp7_n+?e_Yuol#qRUjKe~U%*jb&ir&u^qRHmOa@nC@Aduu5P@fY2@vi!(9$GKX2C_gPlRwN4Y2(Ld%C|7QBhr3(KoB0D-< +z-f3~Oo;?#+aBoHN^u^As%g?ee6DZ%WRKg +zL{DGvT=V~Fr*BZw#jt}W{O+dVwOh_{y^ok9$D`bR3hTNlO%VyFUi&3MI^~eE@_ptt2EYF3Mmu)MMJT*^C97K5l(Mm9)~?CnTPt?K`u3o8rJv~4+>GNB9@m!7%DGlO +zvEJZAv}CvA+6Q;0FZ{fs)gbxI+x!Qs-p#-5q;q6nPH)1iqKex}a +zt9G*fAH|}gLCSgxm(%p +zG<`WN!Qf>p{=hm^veZ?VziZy)gLhmE)L)!GA-1HXAd>NRpZ2W#M^bC&YDfL9jS>4Q +zT)=wPKx4Y8{?D>lt|NcVCrp&T#>wNRcfG~E-ru@ue~pESTF2|Dm(^K6s?0s|e{-b1 +z;Y_Axi_(kJf9vclmJxZC_b$~u#wUugUGso$)9Sb_Jl+a&7oK(eUvze+@I3|2n+g72 +z(f_p5LTbvt+~nK+qc1N>WygUTtL;8C{+*k6Vj|OnfFre!MSWYCKQD=WuD)f?fko?= +zGIJiueRNVfCYtrR9sA)P->fg?!O@K}iF3H5drX_$|3|N~_RB4ZI&$yi-&M)eUq*Op +z?mo+*y)kX_yTZ=xZ?jWPj|m-6I~V6rkW_Nrt(#-p#JIh0{M*fcC<%OVd;cZt`_)CI +zWpB-7&D!Ia9WKBB;gw%|{GG4m6;T^Pm7?|=tubH-2u@8bO3p6`PV{Yj32w}@a5V); +zu+B8((bRk^(;z;*VUa+mR7;R_J73U~+5f-Jj=XiGz~t)#_ENd1%L@w6H8Uz1 +zm9c!Ybvwi#JYVsKR=7!=a81*~u%tN;1bHP(@62}ml%qA%hf)5A@7#!WzhtyuJbf_1 +z#A(K^AK%w)=i4#oVKei-r!Tt7brMp0EmO1jk; +zht<-&idA|_B3z-e6Q=67rEAvOW*rE+bWW1R<#U(QCAoWjYd>}`zpCF|ZgV2h^7`F{ +ziyGDccy8EUa$ZmO>l#+EK3Ne5hNln0Cu}d4`C}yc`5F7wA4&iGpG1dUY17hXW9?ty +zH%t3yT_~&Jr{B|Sn?I|D|Ni@1Y|z#-{$&&Vg35{lilod +z-uKT?FFPWhu*P=NUIyR2_iPOG8H{xntrkBpzx0abH`Wgee>^#DpTID2QNTX^x$R;N +zyu6-MFECuc<(?GA(t0m;FSq%tYUlUUr2kr%xopW?yKduO@xAH0+&`H;-K#$-hQ+$H +zda=bkp{uWq|ywTG*s=j*K6dT(x%^7Y-y +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 +z<=edD*4SBC}x?2pn=ep +z{^biJ)IKWtg|fB(X}X@5v9cyt;dZTo--gC@su|kp`d`(m)=asaZ=ApwHT#ZHWVN~s +z^Q;*@?CC9MKJnZ+SSshJqS!xm`G?NqM?Cf{@+<2weXDOVt@YSM#l_n#O!s7-*j2xFhI4;q!`drTE7QW_ +zWcuH|o+Q)yYW8P)|Bk&jbu}5Ml$K6j@MxDp-aMuOz}T_>tUPCmvW|t9jhxRN6Iz3DIHMccguCQJ9X)=v0%ay>4m(dCXd-X +zQa#PvWL{}ZJK(u}qh;vMqEi8O30oRAmUxFhc&&Rky)Sy@^KFwiE;?*`v%yFqY^G8` +zNio-H3B7Mzr%y@LeE*Yq#YHF2t3<3=Ni1zSbmuA-^z#U9qvUNu6@-usZHC=gi)Q<%4w-H+g<0Gje1;vKDoLknR%su +z^$}Olye}Qs*l%>6rUMg^w?LC +z-|bN!`R7{|~R!hHhJ(t^m<8|0eCuwiLC5I{^>KOM`D_W`J3v-JU3(Rcn*Dqgh!cnZ*#3?@UyXT&wLiq_nbrJpHTC1FNGfC*RCfT%I`9y +zDOfNH+zW8!Ie6&iKes>I)a@A7pJSf8G$uhfYdzD3<42~-E^p}(-gNuP60MyrbKdPt +zzrDly&M~IP&;RULEm&6L|83R!yW!LGO};qXviQ@}@J4tp|7X8Te5WS_);HYzEY(+V +z^MQG%S4Com`Q)dz)sqb_R30-hZ$4L3_q1@aB-^6&DkeTW +zcJi(D9Ix*+Z{v+fEl&`BaZq$p#}1|`XOtfo-S4_PUu-w`+L^a>bli`6?@ydk!y(>5lG<;!n%DAtp>;1Tlu*|*OQ +zXFRXpn*I0U?zZp;Q}%Q$Dm(pK`sR%5*54PNkyRDQ;bRcUOmAq|@qk~bg0)fLASdI@ +zgx&{c +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 +zE7yjy+*(jBM64(B+vG-%`u? +zc>(Mt<)5B5|Kc%ud2XMBqpYuS>*Aa@=@!}Z7HXX~mu|DWtb4Zn#pgM3#|sqZ#3nyT +zy)1uBKjX-c{eE`*CW7qpuU1JI=zfh9^%T9VegC-Bx;-)Ncet1SmR_)=vqWThpjV-2 +zUAs^Kd-Oy5)UUg)EVi?`;FLd=_uQiY`{sU{zjFPD!ocs#PhKuxzWblG&34NI=BP%#k{vT=1c-}&o0XWQnB_aDBLwAog7{?i*y>9cD;bLzjJ +z<#XB3J$pCTf-Tm`f6MP^`z&?+Xdv1u?eptAV`PvnUwzYy=O6C6Gqx}>7$}q$h2|v+ +zY}l}!(beEn!JdkPZ!G4_53oBElc}Wic9)X-VWB0fBr9GVJ#gKAZELX2dLE712OPKj +zMUBLkN%>7|{|{TtJ&v+`8S +zy?v^-8|E}-*0#;wu;7DC$J0+f92@3w1~1(h{h^zA-%p$VqmEBhm)QK+x^Tv+q@5~j +z!iCQro>lNEbop#6StF){2mAFp8sa+Zd1eYP;a<3E|MM3toH^_4*-M*hL}nXE +zhVK+U@?}Rz7&*|8} +z@38&Ttp!!v9|~`@+J3d~(vKjU3SYnKe_m5=OFIl#ncj|(v +z?tSrm%-o4y^?Tgg?awXQ(AX6vwLf22QTl1x{quk7s*Y?A^wJGrFHvI+ax#>$-}$9$ +z|K0u1MZ7Ku9~STO=iy;3h>DHhJ%7XdjJG0xrX)ms)L$jAZ1Euu+2i(K{lD=3Tlc1B +ziOC#!^ZDydEL&}Em6dmT`FOv46J}}nbb;Kppr*A;x4b?$Wy4aJP7&S%%Mxb2k2s@O +z%9io-dCmcc^9*ZauV`MHwse+or`nD9tD2GN93M8nd3TG)B=<(o9JS>WA{(_T>}$DB +zxE;;g_f}q7YmN}>T%{tz>$j5^&*}8D{Jq$;R4-Vj{4XsVA;Q*E5$@b-;J+oENMF8DRxFuHCgb?1NV+)KJ0@e|Mc +z2<n;ZhUXxYj+Tho*pYbMZXzMnf{=#QJZz_M-uqk7i;=G0DW~932r!p!FEpnVS;kWHE +zm%hXG%f+3a3+wi+crvTrC-iUQft8(_6AUgrnO6C`dD@LQjWsWJ3EsZB-Xg*Nl;D;( +zoLp^lrD~ZOG;(TnYHJlXe6T#g;wz*fdzX1KgQG-L@x~Lc^Lykkl)wC#H_vMMl%VAE +zf(mb^2z{LyCc7$uC(1*ka;=k3F8iOBB@Y#!?&%0(KWUov^YhDq080^Dw?m3bitD0{ +YF4zl~Tt55QD|CPH*A;zBSp2-%09L}i=Kufz + +literal 167476 +zcmdPcs{fZEBjp_Veu&Ta}U;RpC4zJCM@5(&4_x(=iHEVw_Yj9@o +z?uZG?W>0;#f%mU@kWJN};|5O6>T{=QFWi{AW&MNT74d7#PRuB)UL~^R>0*H!p@-SN +z|C&_mDw^K1+xFM9s#8*0zZw?tnVLjYbUkZ%5V2s>ISI4v>~$Ajh(tZKkbJpE$L-=| +zlMk=$D;^h#`BiUJ74p!HE2@0Z=zejh$SZfhZEkZ)zbWUu+LFR6{<21Pb3Xgb(?M-( +zZ4-TryDrw9*x*_0U1PA;zItNZ$+!~EAkIjk?N+;wtejNh#<@^*mxuJ1BK9TC0aM;p +zF+be<`s;@HijLcwQ5WB3wp?Mk#MF9P^JPIJ)BEscrCo=XePqZi7mAl!`R1E`Yr`+w +zuvP9l=TB*#^Oc>yC{%ME_qwagCQQ!!=(BbDnRIvI#p~bIZJmB&QFWcju_HIKxn`^v +zSysMI_2IV3v;M1m@a5q@EWBh{&;63f+?*44jtV=ge@qBin7V6@(Zhr1suFmvX7P#c +z+WY9jr^@Ez%_}cmD?M{``YKM&S6lW>tPQuGt1Hp}^}uhh;H`3E4-z64Oi+qdcb)Lh +zq($o7CC4TOufBr9rbJiqAn|8&lCIs34cqFk;5tE~|477w3*z}|^4uaCDjd7^&Nll} +z{PrQgk^G|D@+X**7Y0TgFjHp>^4j}K@1BN*9`}Bp>-P=jZ=D{oXtIR2ch;<49>3g^ +zl^#5zI{E#_qiXooK3JRYf6?Q6=*SG8pu=CboUyH6TIS(Y72@KcrJlE3f6 +z>}AjPR78c|+_LZ#i>?1czX{jmJ=!j2d9O}9^hGUm`PcHpN2jk8%qroWB;wKA#KdI~ +zBXRh;!K*7f=S4+d@<j|*&Wlsa>2eK6ahzQlX-HRKA*TR +zs9#bmmGhFoyU#a&U2Q%5eWMGz?`Os@Dog$fF)N;I7QQ`~8s9OPhOSE +z;wSz_JD(?lKfCeNRU^Z1zF%&wN;=luspTWbKhNjJZuP|e!qsutVzm?|O_sQ;+gYC{ +zr|vUn)!YqlU*|iE?lqokdh=x>)1-<_=FV?o8cPnBZhh5II49;zR)6CXDfP6H>20dV +zTn;j|vU2elNJvNs&Doo(){|Mg_UODQD_^yjouNgUbFY?GZ@Hy>!d3M$hthO0g9lB! +zCw%dkaYgq1<;drGH|CsqF=g+kt>1Wpa>fU`9_oZYneEk04;eh$2 +zJM65_Jz2cQ>h|qbo6hxZm*Jl-(LZ&~+$*hSs~5KD?uzo-VX*AB%s0VrIUDy^?|%R7 +z!V|4Lx#Z0cw!PQAxp+;&8v%P=>q8xR_iMd8=j`NAUH>68t7Tus(f2B|UR$zPPC2_T +z%>Uy*xe2eWKenE_xZBo4PRF^{A+oe#uGY-vDwgwM)w}pz6Ps%{dpL0I77n^?676_x +zv+X5=^L%HtW^c8fAvjIK@=v6G)Agn`WuA{*iW7K?-25({(wwo*Y0EC=ol%!`UZ_m> +zyPG4{qx$rG($SmBf4_7GtXj6}>E|0qHcw7%=95;tA$}y))GGPLfe`Hlbs7&%4&{4) +z)0}^ZHC};fABOl{&ll`^m4X7w+mUK`CeVdSC((hyCgLo+_`-3d%NhDk2*Krx~o6OO!#+o;k0u*X6)k= +za{e-B_OkF9TSC~+-7v7&A*IIFlI@%n(a)z@w_tU%75vD&1jXXYLPE0;wq-0Xg_-y!yzO2j@j)h+iv1kQ4~_2-I;;hx%a +z`=loBdOT}9RDKHFH&Za3ck@8_mpJSVk($?cnOveq3< +zae8bg={Rkfq3(|OyYnKO4 +zUG!wZ^OsI%djgo#-)nOV+uzXi>TUB@KfF{xr|@HxQJYqe%nr{e-^tS??%r!nZShl{ +zU9p5$g`K05O@f2t!NCfHhK?8NhLQ7^u)I8Tf0?Dlj1P|=ZtzwUR`AQIbg7QF@ilQ+ +z(&?ZEIVWx@D)OTUzY<9XeK`S=9ow4@aHcqednGHa-) +z7>Ee*&FElmJ=)C9F1p$v7aRqI4rChv8uG09(l@@Q=uN2=kWYfhG-Rzfmwe=qt{ +znOto2+`v?b#ly9Q`3Q6CVHOsdu*10rw0@0Pw5zB3qRs>RF-iP$iSkw;jK +zQ(o9@%Ph4sPa3D^b}q_T_TYU=@)Oe?8;+b{Y7ONHcd>EM&{7c;;_Y!^$@lWOtxz66 +zvEtW*fTjL1d>?aF#uC8^>oz-%A*#~9* +zv>&+<^&1pf=Fhfk5VVU(Dq#~_p>ZH&rfTe&U(GYaCpmK6|I+C9wMO#%zG>T+yh-p8 +zuL*ABo!z#W_oTds=k4;v*(cXbh +zL2TD4wynRt+A`UGtmQNgm||qQQ=xdyyL2J8*~d?Yd|r3QsLV7bKTI-lx67h63o-%@ +z2=G=aSNp|2;*OG7)^=o1NUdhE)`P1db0=@?2|CU4Qc3#o_Dz#kr(W{=YqEBG+t~*u +zj%jpeS?@{9GtmR+-Sy1Tb*UCYrh +z)i>Jtucj?|7`9;(Th7$mBI4^eD7eO1+$oG}_P+0U@^b9~;nll&!@F1cF@7!Pn{B)4 +zmQE@AzSlSRNj(lZvc`(Pork%xs48_StAXD?#1D?YThF8-zRVH_e`pE7*bg`>#h6U3bcb}vcXKMMMEbf_Sd~S-uc{X8& +z+1EesdG^}!`SF6q7hl*jMzBe}oN&bS*PTzP_b}zJnPiv!p6YBAd(y) +zkkD{q!psnr2^pJ|>aHAc;TPcQ<7($_VQLaQaIio_hix-sQ$hg85+;pJg+~k>j1+vC +z?(?QgL@kulOZ#0LBG7RAo%9-?=?5>wD_=8OEb6B25pS9i{E;*F8H<-jqs!kN;m>9~ +zVegMsoAvO16R +zqm-%#Ligt!JQ#R<(#^ws|FSwX|DM{hhvmkjQ~{GjgTi}$4=+Y%uG|~O(Z;rEj^pZ6 +z-`sUSMSNNx{bbhN^TyYIx+Z1r>HE)npZQPUl&}dW?}xYubKmjw-tP7FPXC-dFI&y2 +zTx@)nMzeGRY9!m(nC~~+UQ(LE)0h72c!d5P`y7U?TXUNVF8n<_BPiy_x5G21_(jKf +z`k%NSwWD=0PvFClimUEgaUovC@nu_nJgV5S%4yd_bxry6mra}kbo+UA%5FJZwdC3} +zOj%Tsd|6uq=hl}-{$^H +zSZ+5bw(-12{3WHIFJ1nLD|*@BJ6N{;IWi +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 +zb*5ZX#nw|R`_x@wcK +z_q85_Vdsg~rvYDbxkaVJ`Oaua-|(6!;}jc`H&viOFzN9#6^@FpSM&|4lUAhkE}Alf +zrJ=t1XHQvn0;kUO2?bM@o|^Sy>jKqk-E-$eWNfV1+x2!$-Bcm@!*$)wr;pzX3Crb) +zuF1=su|fR6CFZM|2OkGy +zZE`)-7_f!EboJb@-qsyEj?OPEn-Tw+XYZF|oORQ?Mb=8q->Y)E#K7Zv&;{o5TRYxc +z2+%cSdoLF22wx95+3B*9OMi#x +z;h5REansGkUw^tgeb#Hy)9!7Zi~8641o&o}{9c~mEngNVT6mmuuG>kimCF;=_C({!W_kdR|gM0yRk)S)z3XwOaE`0btc5_4a0Rs&UIJS*7W)x?|mydML8x$ +z=Jdkp8!~>)_d6fl5a4}{FG=ylicssV8{cSrSeAFZ|Lfl==W=(hU;pV+hFN)$z`jon +z4GFUvU*0_b^{ijpznhJ-zhvnz{qw4@F7@y#{aIi4NHw2Rmv=n#LS}11!HMb7nZ;Qx +zH*RnRt$xDtIPY*)!XK65W`*Fz3z&Q2>{rJuGudbUWQkX0Ro2w~Retlg+MU{*XLF+P +zz3cT;C*-HEP-{34x?$a~Ne=_g?MylP=8@vd(|xl1zM|pPI#>ugrhNhns%? +zbk)nBxNYNw%o(g3_NM$_cD{`}u1ey_&2$To5Y142#fyvHO?uPOeXIWauJu=2XBE0; +zsvMTFOu2l`$o9{aFJAf8R?`)_j6bJqZTghoW+i;h==OEJq@8VStq)SttyuqTct5YA +zHhjHdYw%jr`9CKJcdoFsD=TZ&eZ^q(RPl`0`ZXFE`B$x%pU_lHjqG4u?DwkbZS(3? +z!6E*=sekX>4bFd3V(0s1@xSHsLaR3LHC%U7bWbXs9Brb%)3h{b-I=MKbM}O)Ew!uJ +ztLvPR-4nUrE8CJ$W$THz5xw7f+7%<((yP|&{GZ!rGWXfZmh}A#f43y9vr_(g=D<_= +z+Uy2-Zlji42e>XMHC8fz4D7pGAf@*p(l@`SJ-0T{=-b--^N(Zq{(Q!NNb=&iYdgaJ{dV%^epI2XQ*FOIJWnGVe!L9b%+(VVD4;ZAr +zr!Gzn*F4r6?7cTzP&hWw-7GFZhv#aSs?`@pHPf2u(y?*R{+3*4{I +zo|kr?lK#=@<$)I>oBA)@`JO)g>#vy>>i;8NZJD6(G0|qR(dC}0bH66$tG(YBv39@G +zTan$VzdPBgDyL{(N#e3rzOw6N=<5zv^&@4J?KexYFe>uXu&^o8MGi3c^0hN>L1 +zcFGM8}_w_6LN@yKda+ysOY` +z{)OvNy$^UgEBKejX%zJQol#kM_)?|V`BJI%aY`$l7B5a*a7E$D)+5GE8o!RGy15AU +zmAm}oF;3Gr)?eb=r}Cxu>7Q<9P~}uj6_tz_ahc$x!R!3!;~HiYLgwoq6-+ +zIiWT-){hR;41}*;e$V|{KKU3+XFbDFv8lElnjfD$`xzzA5wq=kTHDD3XH>2K1k8?9W&S4> +znRRnof@#g>Nk2~NGes_LXg=TcuP$k;ik@7s_r-J9m$!K)zPK!L{L+Ts-J;GW!Z%K@ +zt?6rzi)~_pRj$U$1ztEmQuWAH(K@r|mAs2Q_WFM#Rc`?)O +zbHYTS^iP4!a~x9~&zV2DfBxpGMIK!7#|zV5HqR`bIO9fk +zPXD9Sa!Gq$(E~M4#5Cvgv~u$1xo-TqU2}zl>~@9TVupo0U2JTx68;O6@O)DH#PlvI +zbXjmn<%t-v4Sg@Fr=Gc9;qsO5G^=**udZW$I-H-D2JB>HyyLLtpVG#*oyLBr7uxJy +zopXTg%RR{pVo$erKkIYn6n~J<{@_W>?MMkdrp0;LFXqUr_40LTeTg-mlGLghaj;tH +zg$XN5j_8$a9hNgHw{JT%`uDTt_QcAq=JG83WUS<#*qPk*qehI^*YZSN`y8w3*BV$f +zjhaH$Hf{QNM{@tHIkDo*tDbD%P< +zIK<_l!dI0JeuIYIf36Sy^&Hq4x%SJpU$&gn#g(>(*&d&9@Ialp>GQ4~)t3q{C>KAq +z+Hmq$#Rk64or^!bvSB{Eh%I5yamRr24_QA>aR11=Djjt>A$G6vy`Ntf?UK0=A@cdm +zm%0F+xodl#9P+-d6MW60j=HB{l5U|E;`>jX(M`e0uPh^PYKEU?* +z>c5luzY<+1H^2TK+->8zX#SGsHF{kPTzfiq7#;ko{@w8)qrgp*^+{W2Y@W{hthAc3 +zV!PBl&n+vZ8bb70UvvIwuzb0zd5fT`yhL42$Irsx4(SQ5*JM25%`XslzG6<=gNYnm6a7tIOwHY6 +zBeT4a_Y1>f_uHkvPUn3UUMpT1ZQOD4$BvQ}jF$xY11=lgyTs|m?AXzDJ?ZW0UAK15 +zmtJ{$Zs5V$kNQ+4rpZT)E!#$Rh +z*GGIPsfhm^Q@--YmWi4RKYJC$N*d;VQ7{eqa`lvA>r)Pkf1;;5nhK^Z?a53~yw7q; +zQ(<;^rq?wgrI(gY4VM3zjr5nNb}HQ2)Hwa|?o(ym`E8CfA~tyM{1aGy!N}57_gHy) +ze^9K#UtUhF?xwQJWu@zW7ctLTvV3u(^sSewUKUS}>J&Az<@Pb|;#TcdnRQBHRjGQ| +z&Pm!ivlp}FEnTf_S$d>qSFuxnfx*J>@0LZMnRX>WwlDgtO7w}|r&r3QjGGE-izEdO +z-{k*$WlQvfH7f4;LIy9UC1ft%=%F%yM%<6w$`5A_3F(Ceh9ugqH=6lyO+sqnJ0{%| +z|2965{qnktlV!&4J4(Af7^|LLEDBl3Ca*fJc<)k$PdS<=gwOxww`;TDOW{;xY%@v$?BMTU51KJa_agF7nBB +z@>$2Db5z)`J^jVuqNciQo1eW{=e%P2)##-Or4e5iKbU^!uvJ%4&I6TiY7hKtmgOFI +zZx7ObvZm;2%(i8#I6d}E+_UtzP?jiX>!fg<`~DnEJ^t-2k@u>ieyv$}LAr;R>-Li+ +zsh?OMZgrpd^sYdX^LDxG5r#f1e!l-ONu8aP-*jjtb`g8ptAW_hg^IqRaL- +zS5M??aXbAk;)%D&zK*b;`^LOvkFKp- +zdzxOaF8H3?m%Tmpp39FKQAvgLALYGI(i}b=?fPU={!~flw4k9}8PE26%il&feej(t +z_rl#t@s?HB!MSJd$ojJ1O;D9+IJsi`OeG~Jl>@Cg8vR!9{@&%e6&tqSd>n7dLtfJ}*?h8JeFOmr;4zPa|u?%ZE3QbAAh0=zQ(am$ira!=$fyyk^{G +zAEtEr=kD7s9qsQA3j9q73wv9CtI4s*&)gg|9N$2#Of`#9Yr1s%lJ2@OA3iD +zZ8@H&^yKOBdZG0;lM-3iZwwIMd+79mTjf)WA1t5uC{sCT?OWZt2j^cbHxE*TmA2CbcpD%mu#kLLAe6gwzIE(5IZPQSGxAoqp2?FYhPq?lX +z{@Z)DXhU5{gOrbU<07A$cj5d!EE%N}uUdMl9a#E?`Q5JaUd`OD*QdPio-Cf!$$lZz +zNZ5`^&GF^NJ%=Vt7H7@NSZDFMZfeWXE7$!vTAwSa?+Q8K^M(D{a`U&X!DeecpUM8+ +zwLaDV-((B9SXOT*^XSDv6O>D$)$2_ar->ggkLLdTiKTqO>o~E~n+3OexWtw)uMAjk +zr)%?+#p%!q4a@R$@9v(OjxxW=5$7H)WmkF32{kn?`W +znyI?Nw~wuPeA-8py_?l;vqm}GcF1c5K9C-4Z=cv_$eI3^`fB0|s{fV>iQ;KBs`-ET#F4k@GYFi_Y +z9?8}U=n=1abB;s&)}IE6D#dxLoOV~KiA*!uvY6fF8E>*eK(O$kqVK<>LwJ%-ml@2t +zJXvM&(j5k|TfXz&7VIlJsi3NPP%C)eY1TiEH{EUZZiT&x-6$X=-w}UWXGg7n&+lhh +zCUfS;Y1j#^__ub2cL@W7(`@tJ;Nj7rfncD{bY>Birhom=3Go&YP&M^Io>P+{yLXud8-}2g|%yzN^tQo1>i5 +zmF#W*UDAE-^vX9A_tdTBuvq+zr}#~s^6Z<_6R-7lH%*dXayWI9XUxHqn$C8~O-@Rg +z5vPBgTFg|j-SPY4u-wLF$GuI}{;nxpdS$M3%LP82=gnri`KD1%mI~jDd^~URV;RN; +zdU~;2CK`V6d6E|#IVC_!=u-ckixH)Hp2|Bo%$AjR>|$-P-SQ&h&tC@PNbVcA3b#%2 +zU3z8Xi=S5Uf#+`*M*|fXsqx4KR +z&Y8iu;eVlFkbEe5}N;bN|kiskRr`hoIvD6)VJ-1)~QW*6^ +zhWTRb>SgCnpON>E({Nawxc7H&zk8~ncF`99w;F4H$kxZGADEo|_c>?G%Yu144l{PD +zrOb8{ELoJJdGyxa%l52W*ZrAtp;IjGZgz@%_T6H&>$m1@K67vTF=0mQ-qS7TEY4JHk{tE&A>nYzx9W!UF-d(|4!Iq_BOVw_G4*P155KArv*QH +z-qa;7)@%?E3QB$dy6J;~!`8o*3r~E1l;HV!wfXU7r3cU6UG;&(Xl7Pse)N~t>Bn62 +zmv_&+nsIyL)4nG>C-=x*KEuy*pvXi^SW9#d>z$`_GoSC#>zr<7*}3D4{-<0wpUGj@ +zjb5>?KcjOmT_pIAFZYhU`?WUhW&f0LC@$vU$(LLH{MYo6;FV!FFxhp)=a~rBjw%)3_$UzI5iE4JL-FgZC6fgla>BP| +z{FeD2R=!_axi7`iC12Pzq{@&hX4A0{7Rl1L`7B`%R!o_^E~?D>K}q*w%ZWFI)lwsy +zqYb;;O1Q+f|KYsxGF3L~N&)|BOW8?T-Lvgtxw=lzXt{hd?ZnBy*ZNYmHg8*gY5m0c +z(LW~{|C_CCTkgYP?&`910wd3ot7ah6ZRrtfV@inWK +zC!Q6p*WcDrbfL`j!KaC;K6`z)q~dgS~Fru6VMduuSi3I#=oTe-YL)3S9fYez3?jdUHPN +z$%Q*jN5y_8|1NEB+u(S&^T>qoJ9%esigdPYWvG~SFv{`Q?5pXzl?l9$ZG~@GE;+Ty +zd7A2E>2sg?oIkF3Q1YlZc%7}kaIbUil$F0t%}jDM +z7sxr-L_g_uh?yX9{zb>O74q#I=YxJqIsL1PzAT|1U7W<-;Wk(0$rig=z75WkG=8ca +zZ=bYUW9ILINS(vxkM1wDP*jd_-&G{-b)45`>Dg4fv5?28kU^51SBq +zI~i)i$nZe!{fpv{J0EwR7fr4cxE%9cSzSlnHdADxj-1#t-|%~fcgOE%^p(Ap-njqg +zyjyzr!=DJ*HZ_X8XMFf`p`Yu)*(Wxz?ksFmIhdEM9u_`No+mPVBvP +zYv~W0KvsT>3wm9C0#Yycv)gI!dXcQPcaPDpO%on@m>IC>zi`s|^Z8_H1;@hwPne6> +zRII*|nj6fgyK+l8^W07mqKs% +zv#d70c9mhq+TN|t9cOX;?z~)$zp)xlSGM67;q +z)u{IV#VX_EF6q6CjAI>dKAsuA_7(5FhH8DmBO7lym#BPZ^SK)yS^D(bnWGc#rRZMz +zb0thid-u89GU;MT8aw4mw3nwGQ91oAx9XHRkN4B+4MqXkJMO)+^I~X;yE=XS{pjg` +z&%{)%6AZK1)i!m`?xLv@%$ldJK0Ot9GP+rI<590o`)mu#qqkMQ4lWZBesP%eJ4r5~{N> +z_PU||hpoMAD-ScIEK}HZ_~@D{##a)3D?bUAB{V;Iyxn`N{ETD%=Xw<0+`rM2f8)^N +zos2VYdVkz(^C(Z+xOflG&U>v+kCIeugqpO2{zc5r3A(v1W170_T%E7q4cDlrF3sv| +zF|$0cEQRWH?P{giy=)kC*+#O>TF&S(IQ@}Q>VELD*ZMIwjH(nnH2uu@S=(OYu4O4 +zz2$F;*VbyIyw9H}#;kg{;QHzA4|~3>f2o>dkst9;+UC}j-!=u$;~3`cYQ8Dwm1VTA +zvGMwgg*o<7EOoDh{P*unH9dX#_QXSvr$jHV$=Sl+X!}f|EKmBRMuKl}$oi#xaK7HZk>u*5w(b5HV7Tjf>9-q}_c|2fJ1wl1o*z&}P=^m|+3{WVp#(T5Y= +zI8O?BzR8x<))d?HRy_L1g+@Woiq>Q1Gaq*>u`o}IylByQ$4cGzliRE_(<;55?6E$f +zl(3U8*_kET#4T%zqR;KJKQ$L*TuWxKHjku!Rydu$9l+vgTJj?z^LWUgCUpm~ZT)56n+9n;d2Hif%|c6#RH? +z*?Zc{-6!*+62>3SZuZi(ofmf|DL2==3mrw4A@%o;-p>$0b#Eca+nW>Na6%8E2_>BU8!UM!j3I +z4fuDP^4**exaw=e6KS(1D-|JWBgy2A;!Jke>BmjOkOkm$*e6A +zD-A3R+Lzd^Rn^||Q#VLRk=c+$qu|9ifWAhme^`fTqPg{Ff_H2vrQ~g;T`*FrRF|Ho2N21F*KJkT2V)LAr +zU-Q%>&taV`*Bt-&iQ2z8m*!iojJ^MA$pg_HrR$`^U)^}ODYKiof6uMn>e4H==Q?5& +z-@GuWy3uScyzyYJX<6jy2S+}>JL(vCcL~Sb<4<>5_8ouR{Zwt|BnHk22ln4Se*K!L +zfbvwUSw-`ilB=YIHm8`L+RSr(#f>jPo6bdv9eMe1cEFAXuh+d-t2Xdm&Qtey4AQ$~ +zl^yjaqi^L`)Bj3$?rh!CA)|JN>4t?}&dRnmCns(Wh}e-RcI5W5v$;m?K`(kFGUrq* +z>oI)wVNX9VL-&LLiPIBhTylBlN7PmXx@E!^?VMKy8D +zu~d!)kArol;SmK7wwBWouR8yxS43>sBrBPwXr3d^){^;zQNCBWw526AW#b3A +z$juBF-`<&2JbBJpuDW^hTKZZAv5Td+`d^rT{dI`(OvCb>3C-sYx%yqOoaw}G^rE!? +zNiWCIgEhVa>rNSuMrOom$5{3QznvF8F7Yiq_Wc?PWFzs!sL0vNX0S +zl=?ShX7+t+^Eh^Tha3O(1y8gBcXj{R)Y58o^`LzL3wK4u?Hd*Pw;MGUPCJ`!*0#k% +zHR2AJH1{PzyKgI04g`0-s{gS(xxrGzIn*OY$(}L(f#v&EPJT%mJ(g*oC2PbaMW^$1 +zuZS=_zj)>JHLWMy{hynDWHJji51Vq>+e!7_O(lo5_514NB0k(St_Wg3AJXFBpddfn +zE!}BFbciIw&)=5w^ehcb<{e6oRB^qZ_eQAIb6HD>`-4fYcJq&0?&J>2Ja^2>$w}^L +z-Kx)~rc!!+!JBvQ@U&8#k(DCs`O#(V1HpOceDxI!N<~<9)}}Zg4egYy`R1bg;N;96 +zHD?DF{%sHMYiumqs#W``ZHst_$PYF@goAq$$1< +zE%xB%{WBw#g~d0p?aSiv?vI`mnl7LF*x;|hHo>N3wcIAve_`zW(^DkpwmfZmoqaa8 +z>to;|tLY7Mv{mkCOPhY4SaC#K%H!?oV0Z +z$=w*eiL*M*`s99IE-|G)F1x?J+-7%#H;%tw=kC(YiZjo0y*Rv0Ep6(4yGvY5wjU1I +zT~qFvJ$rGa#QTO_)k6J+)1AYT9xL4vR&dJsx01i_dgeLVtsfbZZ|Ph!c(Kaf_4H-_ +zw2Lq2R&C*Ab+fkcW)w1;#=qY^qUHQj|KdZ>7hkYF%~aOPRnzd`r0+h%nrhi3fe&%# +zo&L|C_Vz=s*2(G0>*oG>z0X>hPo>E0BAaosXV#%t$C$V;YVYFKIJ~+kZsXh-TNBZf +zaxHtGKDA|eb;Nm*rZl5#`pboG&sLnv6XSdQ=2LiDP?Y0Ymy<%5^>#+2MQ^q*HTDgD +z@@=|h{M7uwR7s|8HP-kqD*T!g7Ugw!D`=jTjIkCgvf=&XWPa4C^mzLG!n2K^L`3Y* +z>DVn_aVV*WW0K4qt(H@Z=Kh_U{`+rTR+u@|c&YAuiu$TCkML +zaUA|qnR-T}&3#^RmUBYv;egON`*IiS+kc*V+*0;MVPa0}I}UqiWfR3eR-4*)3gk=? +z2`{|l`R@I;H$oa?OR +zzMdlfVBH*tj2#;oVw_j7TNxakS)TWO$AjlQX)_Yo=>OdFFADU`m5=sr7ETljK6Pv5M9rA;-mfMuIned*G|s;SZ*nyTGm@T +zAyMHC`@}k(?L8+~F5W$}v18`G_r{uUIZi9A;4_cfcu;e<*QLO|$2!+JLxiS0pVQ$Y +zW08706Ulv&LrzIbLTLiKh`^W2tn;$=>+I6*_OmT|%NzJ{V({spE7NNW-zFVUU|7NT +z`tGK?yEd(pSGn?|x9?%T)_R6pNB6%tb+l^#V~_hyuj4g8MLgv_nE!I7?Z=<{UVLC! +zvAZJEIL)N!t1wdI{j&#NU(kAGiGTw>JT +z{^@tf-)GOOov**EbNCT|Y|ZjdmXXJEmaNn0k+PjyXTNUsYG<~1MG5tV0kU%>xo3JF +zusOUVRi$lea>j)OgH`1}kB0qx`etiemImivwSxI`=4h>9(l6LOfBmUj+uOBuhN|^PuWb$s_(KzetR5hQ=CQJq&xcTKwCa-?X{>$ygF@cLe +zo<1^8oM*Q73ghF?9kSeyeg~}o8oN&}(Pze;b*-#F*>@P_{kfe`$@+VT>&?PB-7zZ+ +zA1%*pa@s0${AB6hBjGZkXin5h4VdS|y&XzBvLH^N!CiPFYp-DkElb1nWCzD!0;M#r&SUuGb_wN5=8DZgu)^yA5kqPm~*m +zo}IS!?|-X_TmtK-m-)|rR-~uaGHvbMqm!RHE_~d2IeY7=qh;^5UuWLCG&CdN$@=64 +z|6-P@eLcNsMWWlO1vxGjH7x?|=N>b1rx)H@#C)A|uYSz(N205~2ko_3{nPK)OXa^T +zer9qayWeqJ#{Hg{W-@JQBir%yv)ArFw7&ZHu6L6sv)>ZTl3&8;ob6IKH9G9R&XJt2 +z_YdWtda`k%X~>IT#w&MwTIceg*x*wCIzgW)fkXBA)$np;_O9(>6wL#dgK^ +z&HfqvdhY5uelk4Aovb~W+1?x4h>B*t|Mk!GXiKx?hw3DzV|hH&OSPq6?dz*JP`cGC +zxpw&*OGPHdMpnMn5u14Ka@1Mh=;w0w5L3M4CF8BNZO)b@23`6+XXi=ZIe*mm@Pa89 +zFH8|p52w7;7{Ptn9OCZnPFSAZ7v6hDhEW9)=+4Ia~ +zrP2A^+QirrzAyWyt~uF~l<;dlV}aeX +zC%XiuShsGzALp2Oi6<&XdFobv +z@sHZvQ%}2Qi)O0pZQ6hR!p-!VUb|kd-ds|te{9mJ*t_2<7g?M$a}?QJcZ+3X?TPmm +zeCcl&zjRR9Q*nLg>ww@*tN!o3d^u9;<ZfDijrR@hQ_lP8W@}v1Q-eg0v9%D2yuu+O4hX`FbhxWo6^TRk@b**mIhz9Q?i0o +zU!ny=Izy8YmqxOPA;S-bNw0P78xj`Dulb!hwWn|C^_t}-3}P17eQy|s{w`d6WtM*U +z%kFPhD>)bXcJ0}us=Cla!%(MMV`bjd$$H)zv+suNdA2NUYsb;oYcjtkCp~WwW_$WX +z#d!vU)$}*#t&-()iZ}1>7pUXrInvay@n5jzxwRJ*KZshanOS@Gh?)T#1sdYCiuW&7QAJ3h5-^6gZ-s`}kfeYMEG9UlZWFFNj$ +zcC(u1sk|@5es;mZq(A(}3_E+1FK9;1J;z-0Bjm4`gWIN6>(PV+K{<(x`n65^ +zo&OsjO}W?3zSN@a;cfre^93$Xc77NBF*9p%*8K^c(^6C8Z~T+?{=K3{LGV`bKgF6C +zT|(y+R}@!#(^)qAL!x-#hu?gsEw=4@{e;sh|Ha0Q{cf>A&x&-DMRflr@n1RC<2u>< +zf(XZ}v`^M64WA!w{hzjNzhu@oy>`Y~!hGAE($>$I_+PkkMyp9%VUTXuJ)0l5%GGCk +z&&#&7nQxp?V-$8VVdMW-FUx*93;d5Yk-wTQ$LF)f!#nVabB$lvlzp`cTQ@3V~2Jxg>`zJCi2NdRsS#Wsl^G(~KQGHzb=Z7;4jXq>8K6 +zRTgc(ePqqFCEI5mXS$&qV!QgaQ*~#~FV$Ik8cXIs-=iIA8ry%Xu6p|k+nA;fqA;>Ss!Ifg3rSVvtU3=MH +zl``M9mqKIMZ$Y4?|+|BPh}cCP{w +zU0lU`r7c1=PAF+hc{y&_W%#pAM6k|X{I$83a9j6RuOrjVAANM+=T-5rAl7D@1JmWVQRj??F%)E!mTTtk`%N09%yoBd@Q(M +zeDcwR^ewJ4wu+m4?p25iO|q7#uKdLQ^To<7-g}=adbP6T>vAdzh$baZGbyYrn#6x_ +z>&iRli=`%B*^)Hq6*TcvsH7Fz9(ImF6@W!JuQV#U06?bXwlo;gtM +zmr`@J)l0fNAXCe?z2t8n>*LGuZy38?$!J{W;?5BC$Ul~9cXY-Eo;gb^UrT-5uYEvPEy?1qrGCo_ywqvP+$+?Un;K>ke75i}{?C_CMLuH!;~Sy}#kwyZqbR +zf9clLf0CTUo;~4?&}^k6uP*t0NnSL0-3rept@@wWuWQLq`u@P!oLQzbV`lS}9@l)t>u~@4;%TpJk_bKi-QyqBGOS&+h!uANS5AhcGHH +znsQxR|Jd#gPj4Dro_+q{ZHZ^sH=MmXwOuZ8x9CRSR;z1^q&xp}9B-D2WWM+wb%XPF1O2Zj$*oC^5GMciIm%$w!O21xI0zSdNwy@t(Yk&Q1?*e>6-m9 +z?b8?jslJdjbLVlk?T0;|%UqbPoAS8Km`7!4z2)39fk#$Im#E(V;>ObWr{DVX_Q)0& +z{hvC?=k3pMG3Wi+oEGn~Wy{5<8zyK5o!!`Rr6!*vAu4i1R_H{5-px1mZhJPXt@>)B +z!;$~zwQH{m8&6sJY17T=>>iJ-SvMRwDx}E3rt#V7ca@M#m~g(Sb!e=M3;&~Ud4h}M +zvi0sa$Oq(1%gfQ((v_Q7aCfdiu_0ezCadwvkB|6&zX)l&d_-qY=+dxjJ=+q^Ji~K# +zt~+WbapGH@F#Cil&mUynU^SX1v_y@$o5iK9CE;E~XopnjPV>Ca0crItrgkC^3|Ltv +z_bl%`-h|nB7!iLXL+JzCt>pt2)THP~; +z%hIAVd{&;*haZpQDy_E~{5aBXbToc~aIkV!VNl>lHJ>@Hv2Rpgn@fr%M{nub{^j?t +zudA|i3%Rrza(Arej}APyQFX+3g<9N)w_zaU*rlH{}4U_g5{(I?Hzxn9x +zRho5Wfzg|%*Mc6WZQfP$AbI}jlAWz>wl}=fPis7i-hTLQ(3ku58r2mw_qASRx<)5) +zJn{RnI3c4V&LD7^-Rzhc4}LRe-s~Wy`7^#fv^n!To_ou#h|k^DOWv;jwOQoyVK?@y +zRjiFYjVzf`e@;&guv$9#;@qfg*o>Aq_=Y$(5RXy#P59Utd>dT6#KKlw(%@6-DHX71JZ*941xy451( +z;+A?uYI$1BKWXFe$!lAAX$A_QK(x;6AsXNsY;@ +z-HY$a1Z+I`J&JQylAGgYE+OAo2eX|~cYX#gwy%<{$kB}Y{y-o$)Z~-P?WMQ3S(+QR +zFm8`Ho8t3yjn!<`JwJNer@8*Q9UOeON>g(4=9@28#T(mSFE_S&J+o7BjqXyh>yIs8 +zPuqAtNBNmq&syhz1f!xv51z%7&!w|H+_HcxX!Fl0>8Dcb+LuTFxZLO!67^87)Xa5{ +ztH5$$HP(>O2|;fCQ@)>?=_2EH*izw0$EiiG&R^L40w-GSs1RfNf7AJfnVXfitfOG+ +zDgH2)q&*9zrnTre&Jh+jDyo>=wqLbPTcu!!bK+%lvzk2<)B~gUI-b6AbH&v}r5(x| +z9m?stlLCYr!*m;uv#5q7q%bac^U0*7z;MPaMb_C2f1)gFS@($_zS=OecUnZ?zyLV}-6n)+VN#i;MCbftD|ndqI$RP82XH(BGwf8E{{ +z*6h$(y_vgoz2BMHU$r)VzPZk&ednPSoB9GfSgm<7Jwg@x4@oMY6ti4bE17H&r<}~O +zBCv3e{ij;>S*JFBxEWC4+_ZjM!<|i2Zk_oRFJv@tcha%apepGTp1nyQV)EL%j>a~f +zYyDTeS6^?cfR$8{mkN_(ALpi~_M^7>e{9w|8QyDobzwu&;j>{M7WH#E{@%ywcgic^ +zVokAaRG+(JT$6ICk?eEREq7Ty^@Y{z{80NeYs=LGPLH^XVi$gOess6DVcrvoiM_%V +zVLHi7#|$^l+8wTY`eFNt;@qInlWShyV%pK?x%z<0cgu{wO-~pX-e*nRmSR;UxmYJs +zcF{aX)%8=q-7z~5!u0f#JvXzh0HdF*enlSTNj(W5%_ukYOSx>j0QZK1l(>2ldL%(Q>vt8YV +z(-KjIMnAZW|8DxTN2RCh?zA0JKDtvE-|K6S>*zGEU3k%^UD#rkkKAs5c_!UN<@T3L +zofqf$?)+eGnwON8`S#(Wb4Mcsl>)WC)SsPiy<73Xryizft4hA!T0O(gKIz_PcALDd +znGf&i&s)Hjo0a|R%7hOENq?3cu20G;Ii{t-V42Wjx&MZdVz|EW2GvQE*Uq`hnRQIj +zJG|wVxb@MtfNE~(c^04FIQ~EB<&kS&va>ERBDHlMBl{MX5Kg8j@6zzkhE;rp4sGjJ +zPTjrb(!Juu3GNP>-l4h|c{ty(*y~1I`aUu5uUMGov+FqyYaE{b+iI|Ki})hvkp6Ac +zOig2s+@1HC$1#O*oxiZZ^h^2D2BWL1IUPmvSyu;y{L#7d +zw(nw8Z_C3ryM@uOox0g`zn|btpV?^D^eM1^3crwfW50AMW*bvc$jR+IUX6X1VTOsXf{}I~DI0o;533_E1T5@$y&C+`lW{aj~3H +zq#-${e9D%oFXOIW7McC4W8bs=VM=qVk8V=rc%I90P)54njBzjbaIZw8&waJx!)W&o#*0%Y9 +zvJ1QU98Y(dvlHLl*dD8+IDL0A2WwT#`>u(1YD_OOmwQ~`*p&RG;YVBG-hY=)7&$v$ +ztqGW$Bdc1WD1UzU%Qat|mY6j9O-{j|+Ou+o#&`tydI-otlVPv6^6ua;8RxK6#t +z{^W`oCp50Ly?FC8FQMTwbAyPKMRTmjoVjep>GsY&g5LKQ2Hm{;_;=lQyTj6qZJ`G* +z%g45R#V<>Iu(DvPj3IaAYL`wSrz??bOS|p~w;t=?JnveLUQ3$XBdJ~2c=$SZ+p=)K +zQ)D%N5_#8_?H}94jvv#e-Co~yldWon5j)%I=LNDKPI4_g`e>J5%5Gypxe{j8Yl;a% +z+kP!x+9 +z%{%D`_tkxeQsda(Y=5ZeeAw6MP{yafMsK%^xTvoAvP3Dye|_x{(^+zDCi@*i;*H#& +zR(VIBOjm3CT^?c5^rA9~`?sR;)HUCmBR^fb(QUrNx3pg;@k)pGVS|8`k*%8A=lo0` +zhBK-m8zq4j%g^+Tpx@e!=pYTLL%rR3y|Jx0`W1T)d$w&*XN;m&i{G +zA65F-&Mw*_Jf)!hCYQv|i`;Qsm&KS@Rc>^goX+o1oEN=cD`9i#dPke;{I~xvqbqsTHDg&(sBP@&zo_2=Om9~TrmvS6m=XN +zWfCXze26*eyP!)^X;)O_NfG~RCbNZazukFOcSEpwmEXUTxs!f&>qt&m>+V7o9YkJMoW&>9!uz13CJ9=4mnUi)&Zx`jY!S>t@uyRgVOUI)Cl*NG*&%8=~_q +z_VdTrm+$gq7vI?SN^XnWkHph!q8l#UxFPUJ_WN3aL$hmtA8Qqe?n|D&$Aiss$ES`< +zKSiA8I+X8Qu42!EZU4r1NnrqUCeUiF+k +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 +zsIw~>7J~wPIGbYIq3$&I^ZqB-2DK +z8B$kR7WUsQko(eacZuDN?^VCaKHLN?B~Xq`QeV +z^p0EV4zsP^k_AWXbf)&Re!p@=HQ&M1y|UHzrHpTyIxh-v< +zZ_#5|CHJo-c#J`T8e)xHu>h6UNmcN&QGC?pWjtK%$of)P>1>D&+r&iuAO=! +z&F3s!Z-^MImc4HvG+*-4KDV&%JXgM6s8tjFKF6cQ@c0}Cp75wG+If35HO#YqE?hH1 +z?@H_E41Xt?ost~9hdy3DKaY`9#J9N7eERkNoICP2e8g{Ey5}9C(sO-|urL?9yv^>I +z?-#sH{DMP^ojh47>;&m!iz6>+2rv3b~(*;KR$PhRYutEuP2;8A6kAkeyoXN5zi +z{5{LeS#u4{l$y7|zPmx>Q; +z+ovvLxKdnpy0T{FQRV4k*BmaF^Xxc&{e;FuW|iZ9i&ibZxm~^PZ&B$_)xXx7A`dzP +zU+rEh5P!?H=KM;}5Yd%J>a&jMU6$XbWl%kD#)H|fP3I=5YW)uW>baGv{A|@+#h(>( +z7_NBxZ-0JEC#$IG!c3dqdy2^q+LpY?;3#vu<&*T}QbY2~J7s;jMl~Jvdjnmc{@E8E +z&c(-9D0t{! +z_Hf*mFYi=cIonRo{;J<}&S`&e>%-%L(>mWy=VTF(;z}3r=<&{+wJ}a%FVh>=(`)8P +zF%>4BO>VgQsKxeTOZ)B9tG5{W8_%j-(KcI`ySGz*+wvm$Sm)rd@R{i=ew|uA^RYn3 +z+AnU8k3URrk}W*;Hfm>Kg7)(_{v0>YR_-scV9l~zm+*9DS^2$A5tj~T-kcdJ0_o># +zf15;kwu$C9dcHq+zPR*D;L(GLYkze;=bpQayqeP(UnWeeqQ-u=a*-AufIGlce$bB?5ihNcP6MBsi(f#ey8;5ng1t(W^gP2Ow_;m +zZC>ZGMTNPCZgwY#e!F8nY2u2h{$+=DH1(CO-h6tkY}tZ~&*Qwyr!KIBXKC@xU#^~hqE@$oB?+S8XkE7|wt*`^$G +z`~BUw?=76eb#&=vhgZ4T%?+1sAMB_#n((R5Y?gH1j=VFQ9~k9d+)%vyKL4ze|3Y~h +z>BXhbX7?ZKdloJ{F{e>S +zLY`%Hw(PX|Yt&hfJI|Ds_mt&ke|w!T;$!oD+uG8MJFFcZYqzPC3SXWlKKG%=+@yqA +zU7jm$xJ}n#c{D*OV$YMSGmiu;*2SGfP~&)F;i +z4XmjfUa0F$+1RruokOvG%3YTh(eAtFZmY8_++%j3Au1}?iqD?yC9{wN>`x?T%9}3>W4l8mfx~yk4^BO+b%NMRs8?pM=JgB<@l#nfDIM +zo}ZT6vTv2qkz|+X#dp-sykN?yI-=fl-=U;DUGc~-k$tKHqH+#_bDu1cD@vO5m*wq# +zj;yktDduMnI^4dta{ZKkwz*SgWZZtPo3686sn`FcsX*+XB~Sl)zPv7Rxbz`|(h?5N +zl(g9@5+8-`On+@ZTgyhvmd`sGXMcI?bqh_l{kF?<4Evfjf7b5ZWN}n8 +z;mUO7;D~~dKc@bV6)zW5nw({}^0^q|d1XP$rCV#Cr@u9mvnY7Td016V^2cE(xA4Df +zJgV2sXqv*=<99UQ$*L_!SNEQL+1Yv0Uo=i-UQZEeF?%ggq1W1e^l4-E^&49szcAwb +zcc9QIA}7Q77u%MtE1Rvjj`iGvCb$2! +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 +z8kiak=?s +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 +zfK1B1NeNGd?m4$R|KC-l`F)wez1k@ +z+V@qyyZ%*PReBG<#+uYA^LWf^cQyQc_~J{Ke|qNxd7!w?f+m&s43F{^uXdVY|$9^B&dMH|9z`a!;3gGf1sWVu^X^dGWhg +zOW)K}#l5Mgj=k#(5iZnxTYGiIzXz3J%Xy!i)2;Mg*~mWi!M5tO7fn-NAGybNt8L1! +z`&^x0Wy6$W)m_TBMaM1WEI!opPS5OA=n@wDx(CY-s4lzvrCRpt>J*#m-d>R+W~)<8 +zTkV4bwNy^!n#}R4$Xe3A;F+eAqHtG=I?L*7$JF0>%@<>xS7Rz~SDSZ`iAPKPmWk}^ +z%e7B@?Efk=GX^oJeV6x)3_AL?NZ{`;XCIG+w{P4KTCv*nskr_M!L)ekl3kXma@Wic +zovRURNttESyMNBvgp=V@oZeS%^U1tCy|#bDe74&kJ|;FhK3u*xSW;<1j^WK2!5SBy +zK1+Ki>0n{f&h~1b!MQ0sS*h}jo3E5J&%C`(%z){Scq!kcGtaGlt(||(o^z6)_nLPP +zUsvcqwpo%E!>`A-eR5*ky#w!k#8s}>eh)rUB=+A(!@g<>SLKw3gB-7mZ7#S!xbVw< +z8mF_Ud!#~0%3`($XG11-{wO=spW@1WS5Lot7r9cq_<8z$ri1$@_^*4l +z=uFb&`#X9X+b_T0{&*p$*{SO8$O)gf9oq4w!1^VhM(c|=EGOC8wJly&wI$~K5X)bo +zeYgJ7pUZ!HJ_a3qdrn*6VVISb5F6iy-wwUY#gnEkK6FFZ_Ibo7^P&iGw`V&=C(ZuE +z_N0TQO3KaLSib6H|2vHtr#ce$eJQ$n$yte6vb$~7hUGuno0m^K^YiXTpRK1ipZ_el +zV!L{u>QV5y$y)mh&j!v& +zOStbT{o)mK%l>EKin$lX;SKlA1=18w!?Z#zbeT1VVx%b*;Bj+{U4Lp)h3%1t<2$mm~ +zwY|4O|1(ckSz-FM~nAH9&eHuOQ))9rj6(-&V*SaDO~O4}*Ro*U}Zj%`o14)9E4 +zsaeH!SVo9X?eFf2t=EB;pKw$Glu^8aJAS7s`AwC!c5iLJ-4I83dOl3x2< +zXYHjGGhXhr`I#1-$%_oSI7D|K_{yJ@aqw3HMniuF0d +zvq}HTm0OpYSiSPz@6&!=Q>{3E^``hP-YStI%b4usDvmFI^YUJ-$l)`o>Fu)F9<6q~ +z=cII>6PMIY%U5itf2^pOb5>|+@x_JOCojazwlbXcJ?7(z6Pnw@w9HP==ieQ3`~I>s +z<`13u#Z2A_gcnZ~oxFUXQCwnf-_6;zFCA}g|GGHHK%VJ&^o71#Ix7}uF01~YW0Vx$ +z9;U&**gE^AlLpJlfUbnDS89UuRCZr{^hI}dC4aN#s>6~S?=IQG<&=Bp!gH;ws~Cz4 +zVkNm03a|fvxFU2x9`&2?U8>twYGmweJJ&N`?DldGj9!+-;tia(X}&XP580JKaqKBasG3j +zLcRKcrwcb-XII@LpJQ9`y)AfEHs_){4Lg1~90`$_rOB~k +z6N^(n1iZVxSNPl~=7(lw-gjn)roMdpD?#w|rjI@a&$ryP5%HP3t8doSyrrzBBG)dR +zTB!FX$vSg+mCQrclef-iajbgwhT|=BhrR8eZx0UHp5(B#(cUS&=WXxp+Zpa=cO9;* +zs(Y~|Uqh;x^}RzF)8`ZRO>qx+_WKCRPLaM9w?_KIx_?C>>=jPU&vu{Yo)9+0t=r&b +zx}1f;RL1h;lSfqA*?t_ota)yMxj}rj=1leVyKLV6%D;JQSBbP$PJw2omCM1ztG#kd +z_{Hz#7KC<(Sg0QPf0KWy%ie^XM7O7tm4rWixfHLP_gs$6{7KuKJOjTSU*^5~`LM^{ +zc+smzjGEpVeJ|N_b?ZXx>};8@+-CS6^!ByL8?JdR0T1VWoocB3y#IXi*%DFhg&*ht +zId(@_M*=jcQd^YLM3|!;OnPJGFQVi-6SN?&)7|O|Pp;j)bLEHg#$wAJ +zL`~-5UcxNyH~GWzt);Erf4!eaJgH)TzeUDmxhgLYvw3#vTG6(Sq?eXcd(AfMA1gOp +zry$KUm;LqU`QD!UgR(XVrSW@6Up?$>&NrN;b+k-wN3_ +z)$L%vcJCJHyPMQt8#99| +z@5*lB|JxmM;6U--wuQ$-9w)LGM)iHI`1kIU!^`=Pb28_(vN-(9^WazWx)RYCb+u8B +ziOItIbp5N{dy=@l%3jToHpuukZj_Fs7zDj7i<$YQ#aaiZwjTuGL +zcDxL*p1JwRA*WkFtu9t^VDH}LEzN!#t+uP3To&;tm8&F8 +zaM4nuNvSTYXFSf0a>=$6xe#2h^}yO|(#$qL=CokOiLX<8FRoktH?LUGzvXJFrs=KJ +zU+)fjbqC-2T63<#REasb&@KGkt5ZdZd7Y1s&QmFooD|;m)_wJptD7}5ABh+{8S3vf +zt~K`P;B0NVbK?HAPtGkmf6rYNUsk^0829qG9Xm=VC^ye}u*mn(vgM6;cv_E~iz~Fh +z%zDxB^r{B40QtafkNM&0&!76MMM*wh7`=M&!dKGqk1Yd#&Rf2Eh576Jth!J|-rI7O +zS7pEdJgoZQN5+m*yzET% +zyD=j?_^o?h_A%wx|4ov&^%gBu^IB}6?@|?a_@n8n4|Q=rvTZk=DGvxUKX>x3ZOFZC +zZ%-fEw296Abk +zq8t(5ubxIVWQck6xxCVyo}w2n{-9VZX3sQJowTp)Mi;g!X>slP<-qF9 +z9xFamT{qF??Ek=XM}&%9Cf}R!=Dy^%-TGOI2yyrN +z9(d`n&JF3XFj>6|eqEKv@-Hs5bDBJn|9Snx{nssK?6)^AnC!LFl4;$3>DQ6Zt#749 +ztL~nl$?IDaj^!3QAd3ObVB%gfW#hU&k?~ni9I+4a;?ZwwF +z)$oga*Cpvb#&~Qv29J0Xh>1U +z6CTqS7PetO9zSEr_ey@>y1wm$lj>IG_OQ=eWNOzfpO()lzenepPrCfW>@`Qze+k?@ +zZTG;p`Ig}_OJzm=$5Q`hocZx>_1qYCiKOMTk~VJpEXABT-DUgAy%B{M{2P8+zkj8E +zdhgwBa<4qz9h2c+u|)BU7xaylT%Q}tWKJ> +z>a7E(yV6{-$QIS?po1^Yu?Aa}YWQq!RrY0gvU65KN;PNAz6TQ8r@xkWh6SCJv(Ztz>{z=iuB{oij8zTo@&@Eq3!o_jY}yWH$Pek+dW +z({-hfVKo=>=4op!RlfC$MR`TV=d=Q?Mvemui#3(pD{bA8kJ@A9mgb7G5=aw!;J@=d*#DlIs^tA+CcEe835|G#4lxGzhBXIfZ|?74@{_XJX%s6LQ&$l_NAc)u +z^ZvOD7qCYy*}87K^~vMcCM=ftoT@hI9LGj4E7_fu-vult%RZQ>EBno2Re$Kqc;P?# +zGL!UIz2x`RUR>X|aBgSe^oVd5hX9t3oIw_z8!bg`Yho>1_1mQXyyq*g +z3H~;}<@?sZcT?^vhw_3e*A73oS!_9T^W3?&!dtIMPmj5%sa2V;p1yBtY-{}HYk>y^ +zt$1(v_%C#kU%{5JoT^Kd-D6? +zg+SNY2TnZS(QVs%aJhNCu>N23Q@O1s`y+Z~lP7F+Z3z$%;SWym@jn;~IxB +z10&&DL)BiX?|st8O4qkq{L&Nox9jiW@E7V{p1$){go>ih>gv9^^FVd=qbQHR`KzXP +z`@KySyVoDXdhbF6w-mdm)R$wbv1dvWw}z%l+FgBSG(k}Qyjr-i!JDg^6 +zDQ~`A-yHJcgwDz3lSJjyuY7XqKDY7o`xi45yw^%rO!;lT&gjn<_2>&)Zzdj-UC_^a +zkYi(2kU(bsVr91L=MS8py5Ont`(~d;$=-U0skMB}(x3S{sANmlg}VhuYCh+gNuvvmRZM7{to3w<+_i*pm-} +zS!ep>pB|t5$(nl?2d62QaOKU-KB33h +zm^b@S2;W|NZ3f*lJ2;=t7S%dhZMC-l_1Wi^%tzlX%c<4-_BDFflW*(AOy&d_w=j4| +z1};$)OgtHF5&vij|dd*$oC_FMbpI?gHOjXM;geEG_x!^u934xVrB +z9eMEf^29G&%-mjdHyx0zpY$TPuy=cMl0)K$Y!SKJ7kk~b;N}QbC#U7S#$J#{s;T*>x+)E@=x?kkzkJzyfHuTfEnAI0Q<&l8FpRhV=Zoa0$o$alr`nt;cV +zo1CXzF8PI-^?#E7&`_0W`1R>4(^rYl4AYgit7~sfzhZT)i`6gThx{?ygv7GrkER8* +zi>R;eiuRCqxSZvb|D{*BJN(Xvf)mrl=N{qJXDw1mI{I+qM~USQiQ$n-f8V{@{<*2` +z`LFDI0*y&6iC03m_n$kortkFsz>0Z+v8S$1ousXnHK{w~m*c*#pJ(YDikp-oQ?8gl +zcgOF$_M2HIAHEr1&Ba_1D!TUOfuoWN^(r?X6#cgd3;FcWSf_};EW2^vbhRG;gxd#& +zW0MkJJDZ#?o0hdp$SXVa^Plj%2EW=HyFW^_vMmVe)?w)Hzvsue|J^>FD-5;EH@ewG +zTJKt~^gu`W>6`1y+(+;K-mkM!vY|lwhB +z-AUWjzGn;OHB|F0pRrH;vRrL}JhPp%O+zqqz;&O^Z=HDC+AgoRaB?*D+f<_x%xEOK +zeo~LW@QS$_vKjhfg7$V&J_;>MzMgy?m3(d1lvL}N;=K{m60X&s$(?E~U}7KVu$gm> +z%dMhlrBB)R4GaCAKaWnEN)74yg~ +zVpV74vP)KrIWo648%AAZT32FWKo%yC;iFIck2lX1#i{vPIuJ5H_BXo)m#+}XML +z*JhQ2_xV40FOXt<@c5pK4%4-tOcr}hA6lH!X3{hN>0@?y!^H%P#pYN1mg$y;#VH5b +zsBg<$&{!jCI(6gqsFWwJ3$o5JcU=3lTw`{!?%Zz=T?)<}YW`AM|0&|{>%IT~lp9;b +z2|OtZIKO7aD(jyPGSc!rZ*Io9sPu0v6Wn8kX|(dAm}tkMa4JZ?35J>;5sEq?p&Nd<;VwUaw+rG*wA +zU7ou1lD6mTV?xTC{%o_T-^u#a`%-GheiQZIY?88Dgf3S7UXq-~n`Qa&%#`*$50|Le +zUCWl*(Ui70P1zv*0qcR~(j^zKNDCjYf25OCV;CbX5y$Y0W8SaYn>QMF-^(^;;JN;b +zx96f%TwKHJ*1+~HE|APi{Oc@Tak=el0%N}@ +zd76efbfuLzK4*G%w&kGF=H0w4})h7 +zFVa1^uTM=)dMOza;D7MyvNf6(73$#|`?$D%C@SePynG(Bt9I7?1Di_x^=pEkoy-wC +z5mkTjX?w?w3(vc!zw~_1z_F?_LcPFml3!%nD&D8b_q}-jwpy&#(D=B`Zq-+d+7*_Z +zT&X*!|9ly;?Q|0R`{VB2$8QIvoxAbF-+O)N!?aJeVzZv~FX*4x$d;a=5Mwy4YRkbw +z(-Vm+IlC8LpZ4K^z02lop>5s^CGNgftO;NeSJ%$d3swj{vqylDsl4eCbF}Tw0v7Gh +zxBe-ywv;N*ljT~*5XUoha_z+ARjxnozg#oFw8?Cyr_{&B#qVRq&wKRka(b@Zb)hm~ +zNp_T-`LaH)ASa)*`E@(kH|t*Ae%t!g<|npn>Ou=+W-*E{ixM#2y*MssmDZxI{Q(PD +zEo)QWF#fGi{`+nEPo`G&oicG{jQo!kr?oVQs;7rJueq}R(z((Jd=oZ?ZZBb4IP1tl +z!PQmSk(L`a{Z_ql@s7H{{=NlU-_GB?e!=}cCI@^r^(_uM>AR-U!u|1@XqUMw&Kok{ +zaxIVQ?fboc!FiRfd52qKE&3m*|2VhmQ}5roaWNC3OB45<&NY~H@_*sBXF+)$jmum( +zj2V)-x~9e!r)tNZi}AlGcPC`u=c?D=mv`-G7BJ{pxopHctYg3Q**S0gUpd*8yquk`x#M5VMpSMO*~G_`vb7FaNGQIENa;`?WROS+ZYOzsH_ +z3+`1pofXu1cEzM+t_nXI*0L;BOxo*Iwsgh0PlvuY25r2=&&Tn3|F3NyfB&#PeeS2u +z=|!b0S>ArqSzBu58yOHH9IB~OQ?Ng0=Bs6!6<+NyaPSl;Og%65X>)1tiHZfr(>aZl +zSnnnjFZ!vwZIgodr^-K*LZ|TtMJ-IPsFn=8n&mO^Z-wSr_JgJuta8QHEvks^`s#S< +z#DW;Z-~XoWGutKhcoE;u0Hc@OMcl7;uh_85&i4GgM&9J0LoUBtm=~_lP?`L3qQZd< +zSHJ157jl~4-=J12Y-_zk;j}T=VZjev2fKql127+k9BUJKh>`L +z-y_~MH9|n=-ZIBu>BR +zT5xySk&wyzSo}n;)oiVXe;gS-oVv-YKHDrnP-hVHN2mS +zR(=egqnIw+Rfqui((%iEb`cvc}U>qBb83`^4!AXJ3VbqZTvZL+WGbVjR&Q- +zDhaKa==^VobiuR#rDi;KqMl*-R?R^h-b_7Rerkorw#w&MLzt#)^;K}Y`jNA#xA0LD +ztHyOJTOQTxL9?}aKOQgWH~A;Dr1krB0}qvC;gZ8)nMr9?2hP<5@%0FLzxdwt>EiR< +z(vn}^x+#CnZF1iixK>ajWo1#eS4fj@#%6~G_og2@hulJ4OXi5Yu&Qu$kPX;9>3m_i +zLB^4g#=J)HI^CB)vuv21PWPQ#7|+zrUZU>1|B#Tag7Ohr=Y0;lC#Oui_^=*7y>S!weml +zgS8SGiwie4RPxI7|ND10rq!T|JGkcA*-e+_-_M-;NlDdX_kEvlQW@P&k41lYG#y>? +z>buBUttZVf+$W3|7I~kOntMRxfuu#`wKdOzW?%2s*m6xQ;YH`=PYYN1#xZ=J==fmo +zdflngvVP_!H)hNJ_np|7aVuld8fNv@daV;@15}GVQp4C2`W9_?Uv$OQSnAtTHWq))1 +z^L=a^Cf3Z4srV~=b(c^=UqkRNvGSCwy;3u0IBk+WZ_Kv%{kB^<#xnL>Qlxnn2vo#n +z7VZjAp4{X7!~fr5<7K`glkA-zPkL7x6Yitm-^%}I(#wBOZ)c^j9%m5$;xSVu`mX}# +zvpn_KN$&F^_s2hMvy8j*kArcJaN`@fitSA%8va_BueZ0pJbe4o{*}j50z7WlOHPs2 +zY6%Wf*dfbXbL+{@R-JdZtLzW@Dllwr{mA&v;kb^vfy;U}rh9=?Hap44Rz)t$f3V=c +zUO@WxmJ>P+bJ|M_bFMB}xTz(EPlZEZqS5#62bYhBS2$%I`)j=SxWb3jtTCioVomTMQv$9o+eVU03 +z*I(IN&HZy&Z=F_O_UFo3p)#j82L&>(QfJov=gKsp_L|Htp0AzlQ}S3#UuhSgK2)OJ +zRWT{hRG=vEV!+kEuk>$6Et@afXnuGqCrc>bESH}Q{ZkBYANO5YB9>o$pz8Yb0~^op +zeBH3Up`lv3XG=qOj=#?8{nlX`GX#>R`B;}Y2d%!)>$6hvscWsY)zOT3PE&SG{WYh&Q_E@B@~(`!3Hn!+ +zCky%b)P4xwx7~!b_h4z@dhtt%%=gZD9er|K=kJAub9#=(TD_e;jPDsV8!voq$9m56e+n_+@|2E(VXV*R<#j8eoLx;;CkP1|@D2*xfl`Ml)&d+o!e +zEY<%KcZOW44Vrt +zrU>3ZM(~#UANJ!wr&zlhCxiwxjn`5F9f90X;a*;=FWqsUa)2et@#kNP{fBLZm +z-^aYo(VP2ERQUGH?W;C?#Uy>LUg!72Z;GqB^Asu+L#|Z*JL@P>%lzT}+37!zyUl&W +zcf|5tM2Y&lT_5@`o?hO2S3XYDIL1ztbw9)UU7NF9ltM(etoh3re{Qv&&HdSnll!cv +z@2s+T{H*hT`^P4&z43?DYkFVXP4MUwJ}+ebLfz_gSLCVvG1K;l9h+2nb5Fy=q-P3o +zvQm*57p7IO|J=(^aCz_A?fFMHhgLFAj&|R<@Y&sn+1~nVvgQ=C3oSjbcU`rVxh*yC +zQ%(7;oNLn;-D=BhTXZU$Cp%}^j0|1gWouscxP1F|F)XM_*12oG;SZj--e>pNEPIgp +zZ}IhJ*~9zWjCSv9bnfuuoAvvipi2G|{eaq6CzcePEjh|Mp}wf~Xph*ErI)5`y?3VO +zlNr~&@CMmNtCjN=8&3I7E>LK5JlOTsV2Q#FPh)rM9S>JN4yf82`e;VNy02oBJ@-^k +z`|gpdXE@v9LWHD%oZ^b-s?S}`A8OyM+?#3lH~qWD3`?mIbKZnS2ZR;PN^y~%MhGjAK` +z{pOfsq6JsZ1t%4;bNlxqD-JQ +zaI@@do4aAIf7Xjn`syoQ+vhQf^~^`hs0|FEhi6-~)SYb5%a$rx@VMsYMimwdWA<13 +zWW_Y=qs=z|G1FUfdf$`Y+YdkVPO5C)GGUhgw(40EMfjGb?0K=tXVJsz@CoIQQ&uy+ +z|H-1#`leo8q2nR9bXL+o^IJk?N;dui22W4cS?aGple=NQhkBxL%|s#h(vvP7>)s#U +z{QU04u8ZG*Ju#HeK#j@?|VI??Q^)xGU+|DJy@ +z+;R8r+WkH2f6S__QBz_#@NqN4P7pMBdink2rJuG+dWV(@lz+j7h{Y=X?r<3g(yo-U8N8L=|MY-%gd<@KHR%bU1o +zXjn|C{Tryr+NAU6$H!`)Zmrp(hHKsbB=U5fo#NQ;S+{=29ACCc|9mpTlde3|>)yQn +z&9+q*lF>V&x7c?tKkF%U_+3KsZ=Qz&&vIjnG`IRGRYv@J?C_vY^@GjHJyM?!VB}yM&M5cRM|EQRNk%=xvRE +zLqB!xec{ypYpY^yvexAbtBxiww^kNvzYEycSZ+ypdglB88-@1UFZ|3%+~BJm2#vOFpoyIPx{y>J|Sq<@sN0r&^R1qpd$i=~b^Uok +zGqzvYEwhLx-C=*i&kT1ann +z6Ti&xHC*n9#L3)br{4GcS3TLTK=ZuES_>l1 +zXuCFUklkjyv{wDr@uNvQoL-tUvT&bmthckZXAE-vdct91w~EV*4F$HX_bmQ}o!vP9 +z@`5iVNkt|yk9K9$+AnzWV8)7!gQq^p>~?Zp{r;ly!)eN=B>6jce;4_+sd}$~#+&Mk +z<=f}E^(SvwUpx1Vn$12M;iapmq_x>3GC$-M9Srg%(IJlKCm??>%9Wm#$Wh|90LGn)TN +z{^tHIZ=Wk;oe~oCg8l0@m)E;&`jRGhtoX7!C7g+20)w*w1A~ZxgPL3i^QVl68>#j# +z4Nd}lJu~@Ornj&g$U+tM9dIDC@>) +z%N25jvGf(;XL2YS-#9ot-1$?b9Z5*94HXM9zcIlQYmyosOhUaVrCVvlo +ziSgSt??rGx%tCL)r%NVqwJ;k!l;~AcKilbefLmBRbTMDirHhh%F3ndaX2ksDnsVmi +z?i2i{W_4ZMFz?0jPaZ{XO@hk71`%IAX1ghg&755veQ7q!b)&Nh!X*<_*3UWHvX67E +z@=@1V&bz;@etlZ6xckxMZ|;k;jON}wGP~!Z;Pb^y=GRQyjGwHr+`74Z%W8$5{}Lfg +zGk29M#4X4@CHzu3_xQ4VMc?kr|8M7gYrVogW$Dr9D#aB>>+ik4`%U*YQ-x`mhN#iG +zidgL;hf8W2*>8@pehln*{G~yr)iPeyf5qopizhDHE91|ubGbc`=hlKp($5PFRs7X= +zteLf0?-E<0E2G +zzu-eG8&c1)G|c#LQ*61b!h7>;SF|EzLw_ua@-$a#XKtA)wtl7QxzvP&Y_Zd5UkvnIR(#CCmM|I+@E6XajZBdr} +z(f01ojhlH}=kK$g@2&Txe|2tZqvr8j^Ny$dKe>EGU7KpS(zy#g8qD`KR>@l_JWMN# +z+AnLw7tb;Mq~#RG73?pgrv;v}Gd47@`*-Gy|GK5&FY6}s?E0oPcTVw>_W6c8HXLG9 +z;$HiXnRohf<%FrNtrh%xlyR|3{-iU)k(>2@e2JfWx%_^S +z&9t3Q%8vZ`ox=U(+|AyHm$Us;pXYp)Dp+toAe&ow&S#4$tD;pKVrLsXD=4o$9g=vH +z<&@cO>4k?)v$nM!pH|j-dTMFF3Zu)CX7c;`qn;Twj5HIerbK_5L2sLhW8e$T@RQ_Gfp`sg&!(w^k&_iW@;UG&UTB(JfCwb +z?pRIE<1uT0y-$*%@#0=*=bcsO8PXTUznB~|OE5?Iu~11$_IY8u+n+UfpD~>hP<_u%zMh(c{xyMxrhCRU$0EU7e&w5=$Y1|AJW&_x`5lO +zIINm`ed{IL_#7_P-$qaPk8-u06^h=|)nlBqy5KDtMKetmYM(jeTf{opQ6PSIcI9bBeuSzEvP*`hf=Cp=A2 +ze07#xXJ2c)u+yKSgW1M8_tJQ4Q%lRT{B$@>lcdo{Lj4lr7_;Pc)nP<-U#?)k32YmcWl +z>j>}9yMC!4ML9?CnoG*5`o6_2B~La^Ib0bk{eP-j&z2qgz3%N__$|z!eBP_|YYx<( +z`{|#@ayHU`cD?hhqW?ed`+R?TmM#5**qyJdbPirwc_~8v0Uy`RJ-@}RPXsHbt4#^` +z^Fk}8KYBKo?z^^yme*fR*vNglLimr^i3kft@5NqC&W$SBj=E`OVMKS$wtsO2Fj_FWzizdr&Ri +zr_|7Iux&E?+jXg{vTFB6^7vWJ&k5PPfa`GTjq077qgVZEFxRi&;&pWcgJ*lq@t<$M +zW^M2Nu>bbV4p)=qajxt3bHD3aH%+1I-{R8FClB4Y{kAcz?mm{sz}($1-G*CrdbzFQ +ziq)wS54J7&y?cc-m#Sn=Y|fPv6F$yaB%HjYJGOPMvhRZ(>msfmTB=rgJKosh;_NwI +ztK?)KGxnXSvE1tN-=uiKMi~R9oz40Q$v@}qIhNqgZ?FD3xAfYQ*={dmOr2&=Ip^dh +z85Co(_r}TC1GR!Gy7O;~wwQ*j5*6E$XZY0b>56o-WoNv2_RqbxC!uo1VV#U!Vew7e +zXKmi>|MblFn1HU4L+|nQXA4$xTwe3pN^$PzvzKdx7rZaqxX($~aJJ8vYSZ|uM@~Gs +z^tAu}xr5IeKOX$#5W05BN6FN~qJ>PxJ(t{@enc;0nfoL*rN;EC*1RuM53@GQiyXcs +zJok9|^?*6^BE_Ab?q;k1Z|2SV^pg0aP6fNnJt_N=US}I0nD}E?n{J4XMl!EtlW<$Y +zGRAe8Ute@@e%)fNux#(tSP_-`OE>eXHZ$&O?)9^1Db_o5*?Xhk`lB{o>Z%d!Q`>}= +z&kTw=W4CIZnA@9g +zWoZkqS?<6wnWI +zbHtv1Wv}+z>vHQX{dwc`*G}R6{_B3JT{pcUcw1ZR<%EqZ#G=&`pI3KW(RaPDAZSHv +zD_?EB^rbn6D?d5bR%x_aUA|&e5@_BlBbUl?fo)n$$wbZEERWwT+&|6Iu0^~&G3#C4 +z+HT)JOV)TPWnDUdF)McalAS;N_hqd5$T@A&`e)CT#n#-BTDtz$6EOzOnmGkM)r(_e +zX1o5YFwGA3n6SO;xY@S!W9N3u7GLyr?A~oZ$z;c;!e?SttGE_j&^U8XO|*hDQs}Lj +z^Y5^PtH}*NT+An%O1>4p^Qvv*#W()0?x(I4xW(uztWSAz`kR5an1xx15chI*#Z@lHK(Dtfp!h!zV3ZL#HiIog>Py}l7} +z<$q-4Lsp6BrVWLuItgjs)>B`dJi_cGwCrMgZX;7+%ue+u>kjS^4$R%XsFP(!LHdpq +z_dC1y%+!6m<4ceH%iiM^sVV|d6E%JO3zNzxFrBKBPqqwcj;oma`0XDSU9X_>wl{Ys +z&J_85=j@vWoT-2&KpesE-q2O(e&GM +zv&fX))7w{kfd?iQ!y2nA8+Q4cx`mZ +z_pCwWJjUxEwOJj)im2-b$Us}le +z9`dwg@$dHSbN_^vimI@L>G&V9urWVG{0)60+hc5XRnqva>I;ms$b#WtO8MOP%&@v>x0Q4*APVegs +zmD;)OctL}cvu(w@-rO9|#Zv1Vme)3)*SuE$@aLuqedXtF+he-wq~>~9iUvlm-*GE1 +zX7|Im6u$zI&-XsQaCj{7pK(&;Q+JoVhtr*yyq{J~GBVQMxo4Xar}9IoKVd2zMJKwy +z>%2BMzZ3k+W0^J6SuY)ine7{%e(jt7!e1j%^GLg=xNL@I==_pNe?Igj9a}eRR_=@? +zhwsg3n%~9Huu`$eZIf$af#03tIKl8qD$u%s%<#7@vpYM +z(ed;nPfuFNay?{gpUv0J(BOPEM8ijNB5Sy$zU$w84rkNijF&M)Ny?e#9X?$=%{;Ek +z(~>#0D(jZho+3?$gx(O|=pBPLeoO>bRFHf34+=*8ajoP*1{ +zi(YGI&H6uCJI7?QY4Sbkr)e3yTZ>a>OW)hmFZ|7FGZ%kVpYB$-iHXx@yE(PqwAgMV +z{q*70Ur*=svTQW=kl(CixpLCc%dNR;N>_Px9B;p1NQgV2GvBR$TS=pIL&#@V6Bb1i +zU&pI)e9{cd*%#~ShxE7cb-$}A*{%OkoT=f>!oH3BZ_jzBeCun!)ysL4nik)XW1Zss +zsnT)rz8#;cxgI6IE7MjHjyf$P#u!#2F)eY%k9$XtpJ$%@^Wo*v-4TDBXK3A@N);p%{+Ae!OE1?Y;Nb?1)mgGXSF@+Qk7_^qx;n$ +z^3~(-hnQ=uYudC9#CY9FSipL4dti5z)$e$rHBM_&;`Q%0Np3p1#UseG*-lPz?j*s* +zeWDAtsD(O;x^W(sHD#QVB_KOr(dFl)FWQG?qUKG~`u@_~&?G7CkKQN4&WeUff>9cK +zq;lW3xg6Tx*b?UU?aa}d#b^7T_~~6)ZK3EPeDLzGOwWHSbB{^%ooxwn|LXpwY}G;~ +zj;NIPQL*O!J?!l>)oZrJmghc|_uG6b%$F&XzBSw2h+9o&q2|XnORW#Km!q?1Ew10+s;_Y;<(3x1 +z-;N!nnRnMIZEOEC_hu>EtLz6)%-kw|wtRcfvHIF=u9bouJ<{zF%SGH8|N3e@E;{p= +z|3hX<*GPG@MsHB7d>9 +z*t!3c?LChxCoE&H7_9xsI#WQVd3WQ{u=*Aj{@kb!wcK|5zt7W&z4_Vp^rp94g-tf? +z{&nK0FGI(LA|!owcq%{miDzO +zoeDl!{z;bA%S&voxY)OOj~E+Nlh*G${)D@V>9Sbadj0ainKxcoxNH{Ac&o50v;9(g +zCGWNU$wNx%yKh*#lON +zk1Un8?VEh%w!k;F*cAm2E~{otx1D4)y>`yM+kGd6oR6QIdhmu*vQ>dk*Gp;6YzyA` +z4?njFA7e* +z$P`&(t-Ru-8edBJ>j{$-qn;KCYc1A(=~PSbu5^5@(&N+1$MyfY{GqxHx$+DCEedS&VX64X +zJLRcJ-kQm379Q_S@)`EE&bXwsYVXPh=O*iPA*aVv4#YL8_^z0+;W+PQ(Tzq+9p~1m#=0BQCFRy0 +zd~IZRqi@OUX)L0`i(_4<2ZS@)nOdLedL_#oWs(+^Gyj?a3%LiOGOmsuQnyHDi4 +zsdzanY7wG&wpV?`miGa#v;jiL|Tr&PfqcJc +zb&7m=H)D&AfBNaHho2uDUX-17t)_KR(~qsK#>?JuF!@>^wcPKg`M<)~Gj`F%{kh-W +z*bm#he^$u&@N{`|)~@hr-gO_nj=F{IxDs8!Wy8MD)95r~U)Y)eo`*Mm_ilXVykthK +zZs0%JC&dq$_3w&IUw-w?zxU2^jJ)x)iQisPl;hXZf*neQDTvC +z)V;@xXU%Z+IPqz3gCEP(-^*UQ3p9M(Qs;l4Cxi8=am$9nkBU#K>Q@=w+I#-;^9AND +zoDZ!fT(|XqTK3p|)4oc9NX83{-dCnx@?ZBXnscG`#&TwfDc5fw-S7KR?^sW*&DAwA +z^Brn-|EOEek?hv3d)z?w^y3qpE%(&7O1(KQz;5b%)lF>DymzKdZ+fQB$p5ffVJX9f +z$F;qO8vY!9FJ~{GxTO1{wwBG}WJT5;T`5P6^!9FO3EE(Fz)dIm)JxHgJ69TR((ju4 +zODS6EpUBLr|D0x_Z>APpG~008fiXjNCi|*&`}L>qIh&kyoQ1i?-)qG|!IF2qD(B>s +z`7VYZ3pGlSbXR}bq#UOyo5FMM?P! +z)178@@!j=)RPj|I%&>0Nk=!l8Z3^|eIl49TJq#S&X9P?-!8dPB>s%F~BhyzNNq@U} +z!}N&H`OA~i*)MIn_$c`KO~t2=g4Vg1wQPI1DS9(|PX2%K=XvJdI*eCRkGpcqa(p_@ +zQlMeDl)K!s#iZ!s_wP?9eGXM(DXCao@J?vO34_@St)GTJXqmDmWC=r3VNF1`#?^~w +zdRQ5^S~wd%zEHpQ%JSQn%DKy*j!pfy`CAJzBIds +z=j4yXojMIchnyBKIeO17CD|do9?A4NHOcj^j6lWTFg*u{H?&KW59hk +zbM518>rbfd`d)iRx|-dKv*Gob&lk@H|LL(|(R=q>UskUD?hPBi_gp8lq+;gmx>h|= +zlkIcHEk2)+r_8Uvg%_`%>e-lHuia-NVLfGnQu0ksM#-Gr)h<(?#Avf~uo~4bSpIEB +zgy4K#hPoGz>ke;pOMGnRv2vw-gye_yt_=an<`+(=3-3{R#ciRrD8Au9&)e}~6FhFxbl*O?_f9-F|ZtS?b>dLM!dxMjF +z`7N8}+Ll)r?X3J*A8nlQc|~!{jvsrx+BPyIhP+rW`Z==ou3yKswH8J{1Kl$YZFwRe +zm0NVetJLX;mMlMO`;9v)#b;V?tnA+r#$Yfjc~8#EtIwBu^oYh(mR~)xv?jZ2;%=U0 +z3w$5FnXPm9Ui$|&?vxvi3{Oqkwi>Qri$3Sh{b#|&ubY(~lrWdxR{t8i|6KQ{4SxHX +zrcUDYf24N#@tK_doJ_8+f>9|M6kr%~;sGM`8Wd?GN9FeYK1G9>IIj^t@; +zA#VchH@a`lUzYRy!jbtR#*-YJPnqRZ?&Ose3``f@#=zZ>z5c0-)vCm~kDRa6E1nGA +zzwPTp@i2)t$%i2;E_BFln8?m^!sPn5uLqX~bSx5Ix0KPjx~9up$X@8e6}_vfv!=*a +z1eMLr+4$j8w5IuKqu_(kWi~ke7X>m(J!-t<%L{y_Xiz{J*>G`UIZK +ztwE=*$#e3}R{y)M?fmK6cg~%9`G19VA@5S9|AGsPW4vanwEj%l=F03Ev8{HG+=(v} +z*ckaHBm{e|Fgs|?{V(15=g}{ZCFP1|J!Zb=ov6(6Vq*ZWQr})xp-FRcLsXNE=RcXb +zareH3W&Z+Ab{bggmWma@NU5(R(o#7 +zE!%?+cBZq;vGb5PmGt}GT$7p84wrEpN@$FXKR!3ud%L9kr$Y;N)SLe@jt@CmuwsVX +z(r+6*TBaVsj^fvgjSmki1=&51(&T!0NNj1H?IE6m +z|AoJnqz9IjvOd1?QFr2c04{xu)wtX;yJ^+esJtnQg7pX8y#TkpI2-?E#0aAHrq#h<#s +z$1_@#nzVVu9=~L|q0T)`C*tG=o81@nE`B?IUDe>2;)95+m}s*ZM-B@cR3p6_P*h%}0@9f>>{{j@*c +z@yMp-={p#EQ>H0!E@6;AaYyB_;k!f4f)X><+zL)zq3x*uNK +zYa46b(kDx<%Qa|MuIz}P_-tp{j_K@q3isAbn|;a5YyG#(tK~~#*-m}^t@&Ad +z+oKZc)HzK%^WTO??3?%gsJ*B{Pt=BeF>0#o^PWs_S*s?&9i5jG*6_ZBscY7^V0O+B +z^NE>P6f@VkuwL?#_t+L@v%P15`=ZTl(ei0Kzpa~-Z;`R##ksHvHIFTN6yr75FqXcV +zDwlELlz{|yy=Snp$yJ5#@&@nbs3(SIJH7h;AmjAq9@Uw*b*#?VoH2C$VRP~|Q}wzj +zw^!&t+vh3erm*E@)r|N>4Pvsv*Vp-;o;#7VlJ&K#!OyT?XS!arN@6vpD!G0A?`vkg4{|51j!H6C$mfW~u3cVp{m+@h2j1FSa>SV3_$Gh) +z+P`9hm3DP6N_yq1>JEzjduRQ9q&b$($Y8WTb*p4x~nC=Ua4WjN{6^7JLVW> +z%NF&$%)L2@S0`;#NK*RmGgYV6UpoiviT*GA<$ax&HQV8RRpC#IEdQ9VX#T)^y?@G! +z*Vi|{jELHBU23r|v(=-;D+TBGY&KZ0-%;pztMx;c*fz0bpA#pSAFnzV8{S;E^o2rk +zTGko;OIL!QZ9gGptLIwy!m3}Xm#kA#67E#ud31wEX%WAvqL$O% +zS!Oxc-dl^9nqT~?CeF{&b0T4V@0R#I3tHO#Oq5You}q#5YhAbC_dySVHELo_66Yq# +zI$T)Y`(uXq(>_b>M(rP$UbE)R2zOZid`9L4e;Hv;GtDpccl49xPv1%W=3Kn7_s`o5 +z4u@u@y2uR4T7`BGvG*Si@@Oyq$R{IuRk-uX+1gkBb2yqx|Ml-`UUBoXcUV!!{8h83 +zD!EPVQ-00*M@H-8(b~(UUmGb3$$7r5|<$ +z=iKy4(yKM>J?1?v`l=ne=ke5eb7Gcmm-+HPA#mfH?K8^XS=>6yT+A-}Ih^G}f> +z^Pa7*ex2}?KlozgKh;;QzH&LvY^~004Sv +zI|geN-_$b_bXQ+q_w9-PB10`k#o#ymzbBnNuzOLt){(H8Ct9Uf%FR#7oWt)lH%{th +zni$vN{r^OtXRndm+4D8#Quvpj`(G@VPC2ggLr38E{0CAW-<}BW-@dD9YvA4Ob;<7k +z-A=?EdwX}s^r!D}Sr+LLi0a}yum{0H_cLf<=V +z{u#S{IkU)>i(k)$8cefx)_VTYzF=*{Uw;2t#m|z;Kizz8c8a^)=Wf#cmq#W~7yDJe +zbK~R*K?Mi-mh!u9eXAZk`JFAx+dRPuAKpHRuhBU!vFpp*Ky9~{i-|QXcKg2x&FJrr +z3ED1}xuZS6v7)r)&a7IO;CFB4ob0GG*xs=!C~aPakzh;5B#~J;nzxqf{rOR?x8cNg +zfq+%>)3(cQtXZ17_|b&OvS}NB+1e$_^L@xXtgw!|Z#}EX^ZKF|bxk%^Rd$9mYKBf5 +z>bvrtEMCN9F85A<;rAtf&4KxoE1cM-d$``Yly|#vK}V?icxn%y+*S&WC-hUT!87 +za=rdtD5v>H)=v|*ZNFN_#bf#DZ?F8`m+F43R!%<@b7D6HinU2m^gGjWBRs^+H#*0-vXd$~C0{45qTk#lsY%v#%W +zIa_a@or1qro9FxgCv^Pf+=Dg?bl%u_?#0BkFZwJ0`#xHG$!AhtinRF36O3oq&&XXl +zHEg+Ro+q#4hc(4kdOHhRvi&8l8M3Gse&6sp>u6$3z0jZM9v_*iZ2N;*?$#%ro?_&} +zKDX_84%fojGx&PkYm&}=35Yqi_FGFZW8SvHoumIw7q?4#iSW}Zv77DR^2^%L_$4u(&lFgagjF_cK?ffcBl2(G2dfLXVsPjoY-Tz +z?c`*|zzbi@OMaa5Ue&A^To;wGuak!%dwZ~Qf@g1NmCdg^%?2TA4`X-jPW<-hE4Q~w +z`|24nQ(hbwj4NIk6eMBY^e%tng8xSxH_ZQSJoQcLZNm$epG}vCwv@Fl$knv?_VL43 +z)_vZ~+m0k{3$)u*<|=IMq9!Wjz4D+}wqLXj1LK<)XZ#YUSF8?reY40&A^fijGuyFu +z`FsEUQ7*7$`?E<=oTq_5X%TY{FH6t{r`5L0W?WOLNZ(*`Ja&7daL0_9i(89$GJK^% +z*C$yrP2)efdi%34TmlSF80LM<(rsB1>-YBECT(_y(&T&Ei*M}}^hw!!_3Y(u_cD$j +z2o9AKwSKc)&}7wuAKw~NYFRh4TCV=ner(-}MKud_EmhyPRZU!V?*`AI_?_pbsX7#e +zuDH4NVKqysD92|@4S^ZC+-9Pd#uFC1$2M*=Z+*6}-|4Yssdwf~6Or>Xl1?Ad>h~^^ +z)>RDJ7Fe?~Fx~ENz;XG-p>MLzHt>FF^v!%?{p5Ddau;pptp#^jd8-z4o~oVLv{uql +z_*YBqMYX$8tSdEnH_fn#&q`oyP3IQ;H<9(2e!-ue)0MVJK2krFA#~CprfuGvIq4UL +z3+87CHdi<~q+gZT$i@9$Ax7#;VzkS2q5GY;W~&6xR^7Lu}7z3Q^MDTP`7H7^2xJAZzoDzg1Vc)HG_T^jo*@mghU-ypBu?RZA{ +zf5PU|#*?4^{B-=7?%D2@8WZCsX5P3u{c!f?2h%=@z4wt&+3mA#Dm +znNpT>k?e<*nJbJpt`8DRnou`m+l%A5Wt9pKdTzO1wpO^asOy+|i9^?NcbNidrtNpM +zSK7OAuJ&ni_E$`DZT&GPzEUf=!Dq$Pa}BI<8-sVBJN;a2mh8!e?#s_GHm+A( +zm$fXrDU8FL^M3xZt0pflIZTv3qM5lwX1!E_oMn-pUZiw&thGp~+ogBgcPBk+xhj0f +z)UhGXp0OjVl7si)rd<=l% +zyLC%0^T`=AKi_s+BXztk@_ZN4Z+7>5!J~Fr0U0K^;o#?_; +z=g4#NA0m#f{iL^Pe~cf8?&9U#PfmE&v9wG&%Izv%;BOrBTl_@R${+s&^`_}2gzK%8 +z$-Gb@%enP%dsFj~gO7H9%y(7r@Bcrw`|`dNt%Zx)-gJJPrN%Q|D?CHmC$V>_t&G{U +z=+gQclY<&ts{4;Dn78xx0k8FUj<1|G@y>daO?USyo5U4{%0At4-sQu#N&YwA2&<&2 +zifbLJ$O)Y{lk-%l&1AlbS(>>we@|;@n{r_3eDRYvYd(HA%DeL@dcv<|pUmp?mC4I1!t|$JOBUF)@!N_dMGM8{iPtt~M1^0>-&~+t^?AKon6d1? +zf9rm-JD*92U~;aQAcZ +z(Q5bETJp`T5W`@``%Bm-%u>AbZlh_7x%|e*o`sB(cS@qa%e@y|7g>|WbY;4_XXA^# +zadrWZ9Iwxl>{xnKceCui4BcBdnZ5;x^9gn>IJ*0ksjo(NiuD1b#3|*c-aHHuzWGqr +z$1iBM`~D6;5%w=r=N9u$U(D)m^`CS7#k^Z3-n(13q&D!m+?W-=he^DC;uWpVB74&n +zO0U+Udqe$d$&~; +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 +zm{Z|uj~v(dQ}f+YSkhwi7w+hLaYqt +z(y>l?0h%^Pr)sG@O6k2795D6Iz7Q>;!whFy?p<3^T71iORq~u`6U;caTb(+(r8ZE< +zBr9Q^MD6ahgX!O&|CDi4D`~x@IW73JPZ^~F;A +z%?ENH=js?*wF(u?doi`)aOS}q8rKq-{IY&to^yw%^W;%o$r+{gt{*qAdN8Z?5K4_-hxcKyn#3k38%NO1b;do{gygXF>t?lXTwN^{y%=zSO +zHbtI4%kr7WyqW)M>)8-%j(HqDQLBafMSs}e+!=TO!;UDkK>(;Clq +zU$3<%WmMK~yXx3|Pxy55w|TwyR!$Y@QsfHs+t|5$MhK_9=b`J&94${+)&x5-_3GR^ +z+_dtN_MuB1ywNQu-P*q%VmRUxF32ou^LX8bBZprs?dfZKZs4(E=1v!l#{Q}PrAfNQ +zw;o;)5_+{_fy{^FpMD%u@6_X);&G(Fl#gj9?d@pP<6U%BnkS-ix1x1| +zk!rA3mU&^o#0e2L?mznGtQEg-GRh^juw{E7)5R8{gcUb#tDTGBnfS#+FJN~6&hom8 +z4hrrXyDMfTr*UNWGQQq>Xi4ka?T4HtOIP`{-&*04&?2_@jQt9ae>%>wEDu)|ZV9_H +zQ#wS#De>duB@?`YCJ0__k-Ed|`J8`-NRR%+&5nxyoyvc?%qTiDZQ8-6dn?{%7|8~i +zXbE05Ygb)tw8+u=rP!g<{(A)%Zk*ZixN&W`*My4ZmacmmW=AEWS!+3_Cl%)%?Ok?# +z`HnAH^Q>78E=u7%vwouH3&g +zhJBUXj*`$H>D#BZu9#B0Cbs9Df;WRlcxd%neZ9?Nff1qz=pf*|CKV%pz6lrKcsQ9R4GS)wJ7dYhzd~)v)IPDT{M-rE4=RrR<$vz*{-X3x=jZFc +zN;rI(#NjrrarTF+Z|~h?H>{L0yCj}hbUZysE> +z-MnW~#2UG)CQM%+CKQ?KV(&dGbU{Ab`e}CSTL1r8*Ej3frn{RiyZG6xFp# +zeWe-e8BNsBPE70SoOf)ddi9!>C3}ibJLecraM-#ua!Q!@8#~QzOLWzqHxyUUpHb;eq2OjbDpbZesm*G0=OxkER^Ks|H0cf(liahlV}rSdg}YE%1*iqtL%^@v=IR +z(X)b^TqKk-dXL3Q@jSfhd1r&8;l2}dCq`)$yE}WH`q($Qlet+*$hBFa_tf6(Nr|tk +z+Gd|UapdMjuNV#wt{S%GO>2w}#tN=5ow^~&cLIa)`xd2QV-CCKUpq~2#3s%P3o%(iMYk(Rotk-W|Z*rpZ>gApL||u8c)cx +z<8c!ZvGZ-I)053?IM%$!%&N7`X1eL2jcL*5Z1YpN!hJ()R`c;FIxgn;{q(TgLf_>X +zXSe2WXlk9PbmaSTVQZ}y^LI!)OnDnuk!oGy$hURjw~eknN=ggXPb%82UAQ(}vAtzC +ztNxpouddJ67g%|%zj!oi&Fu*yiF{I3(QV#yEZW~L*s-JbhBi};>&pwGoTu$KpI>|A +z*+=yQ3Yytc(Fv@VR$bg!Q2INNyLRrEhe>bJcidXa@r&j0la|M(e>Pq&$@<)yQMY!s +zjFa8AtoQqB9ITRK;?>RKzB2w_&cffg!Say!fxIdFebT!e6`4EkJbJf0U5m$GL?Pi^ +z)rxgni_puz2ha060r-ddiw8NI>i;~k@!cL@$!?DedEN@m0!|0&_4mCi +zek3|;&&~CdPH?vFN_^lJ{x^kF<&*Ha{?Mil-3N;sY9d3eG#$Q9+B|_rlOb1%$KNqe +zr&;9Lx0{Dq_G%i=O_ctt? +zq;R>S?NrAOnZ`?NR24Q0&1&mqFXEZ-IP_!6g^fQPrr+x5H{R0Vw(CBJ-Ve98B?Z2x +z@2|aLtjAt^<4@|0Rl*nfrM9wbYCUsoDKhr1d!XMiwf4YuabBhdwQtuwK5H~HWQ4Kr +z>iFZW_@!U6V}Zb#^*i|=RJ5<=IomzOh>5vpeSlEX=IHs>VjCPbihG;M9gz|`_W#S& +z9f^vMc=`qUbDSEctete){QIrwWDesZmJDITBmO591-2AhMsWA^OzQA{a;{-vl%0Iq +z%Fp(ODpOr0{}{z}Uf-kIJyT5UMT$Igzd~T9&$6WtZ5K=wowiQ$c2oxU`g#-Pu+J+y +z4)Gk)P+T)LmMgqXEO@@9itvayCoZtO`gmXS>=d27_7Xc985wULcqcQ3iTMrdvH$gK{%2m+ +z{N}b{6S89!U|f7}iN=lvj1y*Zt!u07o=~#)#Vr+S`=He=2Sp|bKD>2{wQz-N6RT6Z +zehDL&i};!o0x!3no2&FUe0}P|m<7oKDLMR~9c@jrx41sEEjehgcYj^`+^X9rS@M}q +zeRq2M;fAM8W*c`%k?M~f?+ru?cTd%u+_RATa_ZKQ +zynM}Y0=H2ESB$1qyMc-S!fZA%`v)Fti{!EvG(`Tpz9i)4`pkgtk~cLg0@C)ytdM-_ +zx%Q_({#5Q`%WNJiZ{y0I(*C4;x73lx1-uU4i{A+zV>sY0FBkW$k-e{`l5BXy_T8Th$h=7fn37YtDi8#C7L)WvO@{DpzUN`r6hqN77$2 +z_+xTW<1y#(P1kQsOx4LJ|A#p2v!6 +zT=?^P`fj(z@7=r81J4+wOgJv|a)a$@w%X%7TlKak?{)rm?)$Dy%5vXjb0U9KG5-lN +zpYt_8`TmD$>+SP1%jDK3OfostGq>F>LF(b@b~jC-(qEgVo3x8>^1IwEb6~y){~CV( +z3hqfNbMBV~WNzKE(BrAZsfl_CE1Zt`PK>l%P(N+cmrX(<)i#BuH-EU?N&F};ch0x% +zxV`1Eg(>SjIt`pPu4b@Vxc+4lF*wsWLE5I=NnpQT__s4$+!-4mYBpUxd2RO@DU;9( +z8=3pJos@SKf6iZO@XPzI!$H{#*H=E+5#ibDXKuo&vFK*OE)k0)yD)~|X3yttPHvda +z{92Z?rDAu~lOW@dR*^+((hJ;{E9^3BFnwhdz5ZlGS|FoO1IM&p#yuiAI}cavPi}b~ +z6}r2K@!adTmv;-C(4Q~asV6b*kr!8J`uij4D$At6ETL5o#kN>)sp*gY +zv$`p1^Za|&U+$f`K2QD6b^l+pnVj#nEl#g|}d9=&iK|ynIXIoudNuLr*#H +zHwoPEkWv4Nvr5yHS7FmP{o}A-Am1nYZgIgm?+#&wmW1r(E&slYnW`CRY3yHbv)gTJ +zui?DS5}79dStdO^tdh_qw9SLh)}K{i+8Nb%CS2^-9~^W#FS2vhlf_kwU7~(&6`MYV +z`OrfC&jD{E1ugb@C5i6X_fE-$`Q-uO6m8o=^rj!y#3%wj$5lYg_s?Yl;BDzSo&YX +zG0n9#GGc17sQB02$$pzJ^_{)##Vqx{XOqIpnii%UBX+fdpp8!QfF-4L&S>d8?c +z7J1y{o~v?h%k7fyLdlan1>N-Q4qVY^zPPpLuxzsF;b~$2dutkY{8?hoB+|xksa;Ak +zp_2K7=A_h(SK1~PRrx;f(W-maypP0A0ZbEkdk`Cp)x+l`4weqA}%NnM=YdL?H%cFk7q3}~y&cfSz{O{kL +z!Je`FQp2Q^K3fm&E!T3a%GaIRSf*afuu@`1dKtsbl%VkIpEf7Inwq#U=u8!>*0=Z> +zZ>GiWUU}fkx`i9>Kl2v3lc>K(=Dobu$C$Qdt0epvPO0u#I3HMz6$?rnN-R=?1NHDOYS +zp#S|tDyQ|EB8z4?`?zm%Hny2@>4fR7mra=+dU#!Yk{PF92^{A%gL+drQ9xQiCRQtC}Pc&*q)z_$7b<>~hYWI}8U3Z8>VTP>MwF&zr +zgNqX)%71!_Pj<31PBT#Wl=A7LUytznx$E+L@2%|oud|f(orz~~J6l|HGl +z-IdGJjM}_rYw^ih*=skNmCZDFH_fj!yw>)p{B`+<)*Hq*lyzpm3vJ1cP?)Qo!Fuh@ +zIhHv*>qJaH-B|bRiE^%7x#m~HxfL?!WH!6AT)pEpyR+BMLnUv=gL(1W?JveY5V$ox +z?dy&1Q#7@;>=s*Z>n!J|t*t`u=k0TH +z-pE|q>QuU9o72O2(UA)k8A?UD*yjjpniNej6@7JPcE+2&OUtyG{BFgl_9vwsmvlb1 +zY)WhTkJfL0cF*(4JTAScoqg)bSg-F*QfGuFG?X!zc5I5DvhcCk@(#^gduJ}%Yd&oY +z3&+2s0-;@!i!@vQ#|11^xcV`YrC0gXA@^9FnpW3UbLKcadZqH)eOb4eXO8S)!HStv +zlNGKCuV`5v@MX@C<5y#TO<%jRXwBnQ#rbYl=`DdG%4bb~mMP~M)+Khz;DVu+n_>Pd)sri2{8z``Shnt;2UG6;rDj{d +z%>4fTRFQ`{>!zaRtQmTHcNtF<$@AZ!5whfRM?ij`l$|~I!#hStW@q`b3zsTBKian3 +zeCAy)+a!$CV9=#+h%jqQ=8Nk(Uq7mD^ +zf$w`v#^&lArP#JbTYX{;byzMjPQIi$XUep1Z+F)Qb;)L=O3P1UNX%4FV10PFF(YF3 +zgzB4VD}r6*pA^YU%!yhO?7h1yK0V{(mn&RHZl0G?DvxaV{qg1048uhkpWlAk`*E+i +zNz31JN9W&&e7GY{h%0i==4QKS&rY*EZ&4-94x5!*3T1EGzN)lXQmxZA^Y+$X{onV@ +zVu}tDwikG(J+I)yr}xv6mp49mxW##{!$Ibd6+RMQuO)MT4d_~N?@0%bZivo}sRrFM +z9M^L>+}IFy%r1Fh7o(Wo>s9fe*PlPTchw(t^P7*XPo6m1^{mJ#SnTYlxm@-)aw;Aq +zI@GcsShPEQm#yyn4`IH6Cr>AxTOobv(4@p==3E0fiE6*G47qLeypUx$QqpYl6=<>0Yh;sOUBGmWSxcIWOgBKM~|e=bl!2M|Bf}(YoI2 +za`imR3Qdofgzny*`{v))Tv5YNv0I8_g<(IBKWaa%!Q!l4HFw|ADU?NlknRnro$ +z{%2mde$Ab?GXGM2ON1+AcG*bJkdo|B-Ndxs{jlXRnY=Tid2Wr%E6R>Z)~$(s<@EDT +z>%J|zTaMiGy7BL8{@;zPp%%LqIL!-4kyLszqfYav_KKv(!C#mqZ_9ALFu$uhqv)VS +zkp2I4K`Gxa)thE~dwJ{EEt{CYT85e*vu$j*oc2pB;hVeCGgkMA=KdFfCLc*@%ZSz>Ot_ey9ps7Wiql+qOIwRciaIe+ll7BKXj*m-MdG4s*_p_IphCMw6$;=ebql;dD%UBz7O*L>>Wf9CSL +z$;@ZwEEE>Ho-F@s)S<{CQWkK?ZCmkw(-zL@qLa5SIlJ4I4pAR +z1$!N2@o+?^!0;GyTF^@nf&kQns??A3Bz+vQ1)5d-|E^ +znNuPK)h7skd%~NZ-oIeRCdJjaew&0>duwFp+i&}J?9YP<+4_tb4JX98H;ZmJGivVM +z^t-Ek$&}c2)&dRJO{Yo-i%#V<&3M>rzH9eF+k)8{9BJ!hN^ZGc(0~7GQ(u@gm9P9f{GZ*;E=QXs<-SREf{B6j=H(giUX6#(IyYt!{`?9O= +zEyYv5XYQPuv%b1TwzlfQOS7b0?OmT+WQq(G-HkHdaaI=#=hT(&;hsOCyi=!gyY9(J +zhNpJFPpAwJ44UvsX;SmK)wOT6{j2$&?y+RjU85pw>@?G$CSi@N^TnRsJ2yU2{&x1P +zaK6U6J+n?F@D#c`%sa&L?#Hreg^G0t<~Q97-{vFN;=FR=Ny#l|_kOw>`9i}cO22T` +z<9M6Gl>+PLe{712bMT+m=6l9fsCa+<^y#y+k`Br +zIZr9M9K+Z?ssB*+ujD2Ei2+=d0<#~jkCoPX_(sO(rqu@fCW+@ScL+>a9AG8(xxe$r +zN!u?czb?9cW8)OnyHzr`gpb%oy2P2Ct&rI-znJTD#8Xz2;y*5qCtfBo>`X|zo!WlE +zdfT7yio%&o?#S!E_+T!pb;)X1gxqGgwCV368mGP9xF-8{pF-B=C9P)PK3cdt$^E{` +zF+rAj+u}$Pir +zy=e$Ze$D3b_IS_6eJK_d|L=7juna4?a(!zA+f!e);;&gV7tUAk6_#aWH>qS@cyfb- +zNu{gXWJ89`Pf>MmJZc`#47>W~9@n%92WB(L|DU@_vh~LO1KKTOY*v@O78%~r=FEFI +zbG6Bt1cO-Bz+Sx$9?2*@!H6dl3-+!Q-Tqm&JdO2h9@D((t)AKLE!N4L`sye9_f)8M +zcFWhvKMv(z6L7qH`jdhirz_$YTb4=JFL-cc>hjMIexF+ylCUAJa#{QH=Eq-_w1_ly +zb?sHzt5W0n#rfBymsQjhEC^>;OGB;O_ozRar#Zd?q#z$J7(Rpptn~XmIrv4&s^LvZNbwPyLb1FM0w3nOLPw@i%R=FEo~c9LsD6q +zcVNc0vrf^RZnJW2=lo0Gpc^qa!uXz|NQ9BTRpYmvx@%LH%vSrq_g2&=8@VHwVoV)Z +zs~QwH8vTFXYA00i^1hl=WSTmQ$b|eRrZDl!OVf{8*G`|+wfp*&B%Vt}*DW7@y4B^q +zoU12VI9DQZhFV_8>uE-E=Duq4mbvCn*PeEur2YS{N2kt;zm`}cD7Iu;uCKU;RK?!? +z(%)9hV_FoeeK>Zz&YW{qjc(G77N1pXdon;lcnkF&^c9)p=-n98p +zv%0!`smF>iVa8K>8ujO+7~lPv?>;YK=I?Ed3Z^GFbJfYKI4bM0#?JNmol&13@rCDs +zo787d{(y&jDpe11i(j7kF(NQkQ=@WYK-ZQ&r4|N}eN1&pcXIhBZhkWLl4fg>s_I&W +z-uk>Ft6L`BIAYP1ExxGojr4B575lZPn0Q?G5zalzlVw^i`) +zMdl_|qolZaxpV7%^v+AmE_|1_=KqE0UQxA>H#)+Mj?*tDR~xTs|1M##xb3&eZr;iW +zmLuM)X0obyuseFrv6weqr?#meG?&XMZ|V6xeiBZ~+Amn<-ZEQga9p9|?8Jb6r^y1- +zqvn3RICpLD`Ju<+*Ftn(`C+pcMwx0vL=zo5&>u;D3xQAfwq%b9DJyDGDNnp<(_k7&ek +zTb?BI1GnciFg7%`pMG=wk^Sxq%j!jUXXYN5>l=;seP`m9 +zSL$kt-aTio@Z#R<#H6$|e%W`c*gjM{1RdO-Utg%2|MlL_=IVW)t-tx7->vsG|DM^k +z+sAB;*>l6!I&4*YcJ$l1{Qv*Ip56Ps=XYA^tlV83|I0%C{{1j~y;kf+&*F2R7vEpA +zdfU!*Gc?mzo{e*nyd{x#)I(kAqKKrkQ-{j*9TGy7bKcBi>o~gN%fB^jf0=_BI2be( +z6tr|ieU?1TP&&O)o@D_;D{~WPGh-)XGou&-O9N8_bAu8C6GH=I0|x^G0~<5*0d~d4 +zrVDysb~7J(r$3)n>(k{0O6z{9y*|8>SJYB2P;mE8m;V}Crz93DO|j5&dZ-{;D5t{o +zZGGmAhten7s!UaL{e8D8ACh;QJzGUx>5S0HhsKT>W>bE7JT=t!oY4K`^5%(O7VnjN +zeK#XnW@n#9-mUZYZtgUH{YLS{G0*&6 +z4Ih83{x87lB)END=;AHOrcQS=zx5n3Xmo$?6?;qkDi2V_mTs`xc?)?GgoGn=nf(w1q{nvSAeBYRix%6TTAYo&`z +zu9r?sOB7#u(ERwdc@asHdMnfyao%w0jNB3TXg_QjL+Pt0~IMa{0{o8UUjD`nzl=KT*t +zmt?H)jC$(gZu5Zm(CtemtpAmbKBUS-xJ>srwysQIV*tOB&K|anNeo~29B(M|I4ZO} +z=tBAnh5EKhb#s~W6<_^b;BOq$JJW4jzM`W!{|p)CiNCHon5>Kn-_d?Rp9k`dtQKHaxeT#_QyP!+D +z+RP6eWDcr^Nqb#%lw@5irYx(vzG4B}8793|S|@gzzK;Ftdj6;9-axMMb<9img?CL} +z^PX$7G68s|JWzt;joF4IvnX$%A%fRc1{MTtyf3)0R7-w@m;?mPIxBO0>dSEXiUa|W` +zzL;dghJ|*^13wjSdbG&sf#%_t(@o|m?BQMRdG6BvCPfLirEJ?g9kN6Bp2;$DSgYo_ +z^Xic=2iYSZz#K6MP`?oa=|j8Zm!!W-)x^*tJZA`S9*bSyoREs;yaF +z64dm6`d#~7HYc@j9gJBKKIvcj$2xASC4Z$o+5a2Hvi?y_GWtYp! +zo)r7>sr#&O#)Xi|PfohZ6J86;?X^4G(--?b^OKMQ>%pyCtbRB1xJ_Dk*rOw~ZJJfQ +z`EvJ7PhIElImmM5dctaDj~{b(u3Thobn@EVg#Npn?tAaGeJr|Bz+Ui3ak;W|Fk90j +zN591Q6Q1AaP22gqKf?ReER!pj9#u~6m?8N +z{rR?)a^6Zhq9yk;)GLm;KM0w~HK%Vp +zeF9oCiyB^}I`I7A;aDun!1eLWgk393xGkqH@oi~drXqNvq(1aLf5PQ0j9+zYAM6iN +zGPO-)`_KCFe&-=&pLhB~-AcaOUdnHk36q?<-hEb{b&8_@^@$%}vaVvcEH!w2>8z0I +zypw8I65Wnn-P&;Vn_n$w%kh+16E6B(Ug2{2$ij&nkEDbWWj?%#n0eg$x=2KH)`f}j +z#dkxh>i(D%C+JH)6cb~L5Ur^;i(kZCcBzK*<~8pF%Z{%qu)n)mEck1CRlkXmjEU`u +zs7+nT&(>S?O}oi+?fF9aZqbtg+JdgG3_K0ZoMj3I$uk60n~%yycg|*AXKBzo!~61$ +z;LM8tpCa8mQy&&R{$cyxwQr?*)YQ_Q*Ve4!**qy!Rr;l%;f>P;-W7dv%U3JeE(kq; +zPkP$tiB*ezvQv~#uV#LgeCi{o`_15`4A1|4*}Q1#i~n}QJawU_t1KoK&I(@5uUsRl +zdn@Tg%A#8@{`*_)dtz4qZ*PjoXRrD{UQf5QmB~ah-SUW8tM&5K%ZWRuEXhAF$-gXu +zae1zrV)DZ)hIxJqw;ahgiIgUm9GkBX)3nIlJTGCIi`wu2gUT +zjRE;wrYktq8)J(*Hn?a6txTBc$bL>VMTFu0A*EEkHH=>+_QXcS-P$;DdchCI)DF=d +z&TGs#1-T~+ZA|kP%)TSyzHnFOiH}#pZ|(fW6;Qrd{hapI8O15jk2_S=8KgZ}wTSI+ +z!}UXcj#rcT%pbgo6z%IdPl%8JgGjuYNy +zXESC$n{Ybetf;8GS#qoWan{wz|Jg%B!p@Zh<*v9C+kb|&FMwr1e66e4L75P-fZSzC +zx+=x9inf;R*LcyzG&5>L{e3Chh7CF&Rcf}fyf1g{c5c--oBKAMjp5(I!moD|vtsQZ +zJy?4*>i@;#vR!NV(=JZm+EndgTUp(ec@7a^_b4L;l7*TOuC(m6Dor()8Hd=<~*Av5}JVq@<@eSScPjqot+J +zbWGy(s?Q?+CdcOgjjeCG7P<1~mQ!u|f*<)$t(z3T)bH7hJ=>(1rmtDj>AFwec-g#` +zd%X=SSBY$&v#d9(`%r68fJnU9S>^kO4u5^%G)1#9G1BZ$;-r_;g>;z=R7PF>Gtpt2!^)oidsjt+=zJiAB=)^pqD}Udsh}R|`zlylW@e +z;ndN6AuyzK&9m@|c|OWDs|8OOvaQ_q^R3PkjjLAT>Z;2<=iK3vy?W-V>XWa!oU8L5 +z&U<%}aq^c8u2Tuu7IbdfCOxyvl6l+AgqM1%E;Bwzi5u3uz0H2dm))3u$Fzk#o|mE~ +zyM_FjA130})h^iO!DAUYd!6U@DF!ZwOD@Q?gx=^9xH^?zQRdsTmW4a3KRL-LUQH?S +zeEi^;Yi)>KzSAY$#|>-eq)%MQ<}RR@Eg@vQLe}Q$n-`mw*4!#xxve=c+xdfnxM?+q +zOj6+G7tga5dv9o5u)g}CNXN&+h}ZvH_vdTxO7s4Uuv&)H2=E^fVmx-W^Ew@&{ZW5+$~%GxRH9tL(#TEAb=ck$i3_qxt~hW8#z=btv2rL)lO +z_Kd78H#fRj@3Oh`^|!z(_l)eVd{66~FPT4gz3Jq*;o=XDeG!Wrzn`(1{+}~&YJ;R+ +z?qjjo{3pr5(m5Uv6C4vRYuQepCZoD*$)n_dYGQ#u;tvIRPxfP0HTXXx-SE;u<*Gv} +zdJ=Qn_6VoSY!<5U`e-L`ag~sY`^vVWuCE;{mdoBR5j(3`$nogoie=M`yq$Y}Vzmr= +zt{t!{yi%cGV7u6)X9i2bpCHFAR*W-mFzGOQyZz1e3|hTr@`pUB6*k4b%THO$OjlV^ +zaKNA?Q@2s(@ifnc4uZCw!m6BhpQiOh|9QJ}+p+dNvzA+ac)0mw^0U)Q>*p+5CdSlo +zd(r;gx-K*Oyk+>izw6{`=}26d=X9cx>%r9eQ=cxbm3TR~&tQV~0|C8V`Jq8y>Xq!? +zsacmwoVfDI|Mtqbm3y^4uNiVz@!y%#ZhME}{V8GLGwc_%*K;c?Moi!I;Pvx!rw)k} +z#7|ndyWZ}@+7MATneUI4fHM{q)b%l#X^aNY0+zn1DR^spG +zOxDZjm&=qZk0R47+%c&;lO|NpoCYNlcBQVX`!NZTlW1=W9}$5c5t2R +zb8KV9mjzY(pGjURl>NQcretDuleT@;vG*no-!eDuPB_OKlcwkQ<37&}HdEuD{33DN +zt}Ze^deV(;cEPzVOK;CU6miE}josF8kyBUKg(4q;_jv_k$I$gWtTFBT>9Wdfzc`FXx7&n#QY2 +z{i5OQTYXFO1t+$Yx(%yWk#Q +zqSniK$J+S~C;#bv>ZKxM*ZbsGN0|(x=#sc-qni~|?=^<5jLEw*-S&iOoo(_f?KGqO +zU)i=v-97m{YWMuCH+!{2>~py58fjr7d8s|%827VxcM7IR#yp+yl={d +z+q)y%13F)XG;X_kZ>zJI&%V7HF2D5Eum3n+Ui)pvlCT#?7Z>s$pp +z*`tb%tJo$#MXfF0Y;5pwez)6KV`s>GVzi`9yTPL2305uEwpG +z?YP!)`9;2D2oB;`W{r|HC{h11`|aAiT=5C2?#DPduN}76n(s4dFDp;~X|=oI-8FC9 +zEZx<)+Gnz-n|#}Ma`%gKCqHE5GIj>sXI@smP-6F;yAD??vro=Hcj3PDOV);9kI&z4 +z=$^Y88uiy)Ha_;ze$9l`@)sU2@9PBg$WA`A|K);hnVK#^UFU?_9KV{cOZ;nAzxeu} +z-qnw4Yc3~g{9AT8!u^B!(Ux`7HuLSgFEU~AvL4r@{V&Cym&KNdRjNVA!@nt-*F9e= +z@N)OrTS^r**Bt#bM|~P^RldRL{y9JYKTf^(dcvu7iw;JG92FOQefdFT-|R%0kGap? +zop-cq?f2yCxN%CB%Q42h{l!DJ=64%RViiOS4$A5Hl{}nq^`S3^7H3+Er%5)88bk2h +z2)_3wiEiy&9e+7KuK%PbsVlej+_@F|B+J~pzQ^C)nzXCI>P`StN!&z`6))$X3D1TwwWhd{G9c7Kg$!PiIE!? +ztu<^koh#kjxm=Jz`w)ly%fol%5BlqM)!KZ0rg|bZRV&Hm@-?mPOINlucvx|UhBR&9 +z>(sK{blz%W_u5mb)7In*O<+3L6uXC!zi^2l@7YfD}%YS3#lN@ASXcj>4pYppOSgYA8m|Vx_XY(nyiIs2XFrHcX%8(!GKR~A=fR_ +zT$zP@Ei0DollZxX?Nzhr^Wu=ndoL(hsnySzeL3RTxf4PU%TyQ7XZGEibhqv9r8nQK +zZgZ61KFzS=SI7g8J6~cNOg78r%yhoHP-K!tCoj{+inz5O?q)2=iTXNgM_0m=r!Lzs +ziaE6l3cpwy>2=&b_DZUTz}w@BJ2aQXyo*x48RPDDo;~K&zbBhi7XJ0KtNtLmCbLN3 +z*dMDWn{%~eg5KTVX_k7S>P~C1@3JKl7TY(k&ENFw&e8H*q_cNVf*LYd_Y1nekE=KvUM}r++r1C7jb7kU| +zXROgnUrv$wzBVLBb7Ft&LXUYRa%@jUo(pxwMy{W}ZQ03X)?Xyt1wK_JJd+SSli(Qm +zYRz`f7e1VsHy=OK5miv^OyBAg8FBiVQ65WJy7%MMbe0$5anrb2zsF9Sy(w^m)RjrG +z)%&iSE{vWO&1Cc8VfrNfIm^y`+% +znX9~?6iDj=;uH@QoyMf2;j&t0J +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 +zo}9WfCP9DstU;L3qvt?;=ZM&nG|6 +zaEPV{9E!c)GJkoD7Gje#UuwC5pOAVcad02r>AMBR;P&kHNO1C`X~Q_Det6;zj}T= +zv^D*fT;rE-9lnMAeCMMyw5~K5rZ1fGZj;6WgYGNEd`u$yx-DL-(jVpr* +zQ+m34PG(|Gib76)Kz>1fL1|uTUTSJlenCoRu}fxgaZX}MbNq@+(~nIOU=sFVTO +zyxw$r;pc>@l^5J(XT4vVvH5IvdVEr7`OGs059XBXN&XJl+3-QlWLJ2OMu_QzTNiz# +zW%q_{x~cGxLupB-nN(0tMuDh*hLfvD5a;vH7Iqp%>>`XAPpx*jYZSAruD_8yV^Q}t +z$@zV3S^>q@6OPV*?ht?D=+ox^AOC0gWW8W?6*{eat+v4Czg&I)IbXKLt8Qx@Jq_QZQdM^5Z;8TV=h-qRUSIrEvc*j*{fv^}JT>C{IplO;TH917rz&`fAJd0gmt%eef@a4 +zScEUEn&;z$;NNU5{|}qp>e+nk?DMtHmonzp&;FXWaMcEZOZT->PxfCsQ1nCQl~V4G +z*^B3^W>4}lxfj*>_8^1h&4~{^1adb<9Nt*G&_LpHSD4iiKGQohrhR_B=%S>nA@8Bh +zllJ`W{*ylSY?P(_0RxeZYxKKK>cLPd-kb*%lpsl)FvlvrRY4 +z&cF9HS-A4l-bUIS+REYn$-cvY=kj)2j)gNVKY6TORaMJZXTHE`!_SnvuBQ{+yTtc) +zwW*Z|6*8_V<3GFGREw{uyr%le23{dI?!N{iOMe7^xb5QZS;~3poY&#WDUZ@~`aW#u +zXnQhcfTkI+t*1#_yOdMf08K?doSZR_fNREcgC`Z=baSFGf%%>{^9PLq6OhozdvQY6X}(xu}$;X)B{qIb&dXb}#95`7nZSAyda2H%H`)BQkhzDx!A_b~` +z9IU^pjx;EDawG=@J=!ij@o%E-A~lZ5TCERcmdGu;t@5z&#`{SwyR&?D@hqS4X;y1N +zqwX@ZZXM;xyJ8Lxns6`DOKwweN9m?((}Ll(5J7U0voi)o(@( +zp7Rv)xH2=nSUpu8uP)DJk2@tkaY`=Zi|;ocPd*^!ooWB&R`g>ZtDK9gX5Mp(4DO5e +zeEj0^owEJAMT579P1~MvO-k~}-Y;5>a;~`=8#+#8E@am)4d<93w;^p$BKq#nH=Bd);oGI3+mPHx^~H$2|*Y!YD9+IcDC +zhCi2)o7P5&U!R)UOpM*=Jr)Ycrsu-ik3;s?^UYBYC-i+_Z +zZQ|a2EMQjpsQi%qwypWSJP*~3Y9G-S^ZpKp6?>Jf_m$oKA8>GPZ%oI1kx7C~=8GpU +z{iwgiWA;JEoNtA11wU^P@c$MgbH=lB)@jw4NAE67ato;F-L;>+=4Hn_(V22L;`m)< +zr%hpa>z3YPw~5F7qxYRV%10BXdDcES?wO~Wwd`kG%j&c0`<)-{F;B>A)&DN${o(nc +z-)!8k_e3rEd0$uNeSVy__~)heVloUSr$QewKGTT(n76Aww(&np3v-6x2c|2Yc8N6h;wuh5dbE?a+Ut!afVg+{2;FO%1n|C&J`)Mha +zL+2e`&#vKq@_33&u5N!@$2gG +zKW;O*zi+DVo))?)MOTxxVA|>ygNxS>MV;chc+H*Ruk!KK=SI`kJ-vS_ZQrDLEv|UY +zREYz>GutLDx2R9r@chZO&Z6)B%^jc9)b4tg3$O98_bE*}bW`0avxIYRzzdNg^<_Ps +zNi$cx>6(<;WO}05a`SziSq-wiIc`ByL-u{OQ&@BSja{I3;$lX1p7vSJ^~PT>D?g1{ +z(yH>*N!9zAQlZz8m8CDz;kJ-zf>^*OJ_^NEHrQ55;O%}{l=F^^LW&EdpYSYfW +zJ16PY@8;LcH@`cj@xr|ZIhHGGOq1Sc%(=UKk;LMSTk0f?@9xcfb<6j*_-FnP%b)&v +zf2!?iKx(_e3g`MMe8CC=4hj|#9T{#@PB?i^V2-j^Hdx@Gpuy49(x9+{gM+EDLBWAl +zfP8Ye9xktb5%R!Kx3$S!ysDv$uj-Kidy>h*$GRE{fd@DG<#y_yY<&=_?LNuNdgl5{kpn+F*M>}< +z9HqgqeA<<7oOasB%0edITI!Ku6dY|g$!yuSsts(*#Fl$5(c8MT^;YJ}wPk-gj+_qs +zo6C1~wU(D|%=&9{uFNaArPJ|x;ug8jE8o=h!Z`1*4y^HQ}Esht-)BLfaQb*09-Sw=J5mOa() +zYQ4{X*J0TSlKl6|JO6ZS*!_X!r|W_G`qVwwZq^*1^7cz%d%`4-O=c-GZg{E8nmR?Q +z{-B4Y$NGg2&fS@85Po#`(!ZzIPDr&oeIn&nmCpNB@9Tt<<_Fcr&Cq!8@=A)lT4tw| +z{EpjSTqWLEmGiH^eC}wZpqAY2dcE@11XZ_d3jPP5m@v9C{@>z%D==%_ +z%C%>B`ouS0G!=iZQP-olzLn`^Z^M-pEB7%d^J{CKvCKL)@#vkX8F$ZKY>HVM>(Y}k +z@xY8NH7k~NEW5Y*>e0W4J@mH +z|C~bPlCP$6pOkj~)o0r&>MgzLL9LxM-`aPa9omzZ-VSOh?^XL^(S6$T^0VLVDKn$R +zE>1k2xxL=7exJTt1mgn<&isiYhF|?{YR;|-)A(rm@#AWPrAlVYBj(@!cahWLht+bP +z)eDx+ig3SMA-ZwuZDk4WrCCpS;utbNghe!$cbHW)a^-)RHs}3L@t57T7mjlLRzG^W +zP^)ozWm3lO9qC85K2Pbaeeg$bO@!qG&bs$w{i^naA*54EMXTi7n +zqz|j+->^zj&&@b(xhB@xThU-frZIQLL~d3~)v2zZ1XuF1u^ux0vEVp|waYU5(xS8H +z7s^T;-u21r@t#ji%W9wIHY6D&RGxhP_R-YW^Q|VobZZR0@qm5u%*MT{B0&$?I!vXw +z=j}N;y~?Fl$wT=VbH`l2eY;-!-!aX)RduHQ@9B(ugJ3tcHlt0S74ju>zB*W`+MCP8 +zx%8)*wQ5YzS*Cg7_lku7y+1x4WT|#Ns<}>bFVnV(O4etXJWjf9RL=Xl^DetZsl5XG +z-6PRImoVB(7|mRJV4ca``wY8%Gxw}bmC`nD*u79>@!gr8k@XzsXL^bx{hqkAdC$5x +z&rfB%;rTbK+i}CjA9J(!@f1IhoyM4&bfI${t8(0)p6?QIFBa{(wP@yp^|vFw@i+b| +zJ$lX1;T^YeZ$|^i=I-T9VJbS}McYh07ZsnF*;2_O74&82#c=sc2kyxT+)GHgdsb+| +z@(Y(dnDb92Jd2o7^gBJqW=`z%i;t)EN+vfo)h)RGeIpOs)1VN>Um5B*eQvUqw2AVS +zJc|`8aa%7}()KY~$c%GtZ2s!$Pd$}ljf);XPLP&YJ6|C6TOeu8 +zy;ugmgBF$PVilKf=7w~I&yjw}lyP_Wx}Ue4cHcic-7BIXG^0l2{5I#+rwlWdJb#$_ +z^Bizg-@7r|-MI0tu#dObtpiQ3j_dvIof&Q%(xmf8wl#Bqm#1RDq(pJ9_&^~=ksk{i +z*5^(>v*@0T*fvg+<1>_g>Mgxoc2!QgCIk?B_4D>^|BhD5zYNL9ex9RzaoMdu$!<^6tC#-X9`W*_PW2uifwxPWth)GPmA@|PzBe%` +zpzNZPjpN1C*)NNoe_pmaryG3yuciYa??o60i_rzwFrGsPRX}_$d(=xAa8=QGy6sx%Gl>f%K +zti0FWj8m7+FZRFJD7?U9>4d4@zKK;`{M<3Q{pxMI8G=(%Rzy9~h*N&Ab5uG!=#z)X +z{fXgKdh6Qv6USnt52i1XUG?{W$w5y~ADt+1 +z7H*^MMc3LY(#_t#QV&=p7~{VkGA%ANYwFp$C(v?rDEEBHNKKBU +zD66kxN@rHFdLK49wOo%sV)CGpqzq+w$ +zY|cCCz0CB&0-j$XlAlW-{H~fHvGeK?DJwlK#mme8Xg3|-IO|Jj`auri4<~>9yzAPZ +zz-N2xlV_6o`l4;VTh!10x~jT;o?3`o@4F_2y>r;>J0|;OG*ud(c54xlaD8ylX}^$C +zKuqne2-6d7ZmEf)*W3FV=4W`^-ITPt?v2c1m@kWan{JrqpL{Lool#;Y) +zRNRIRbG7&o8xId(vA?<=#h)uCYHfexCw2bSZHE(On+_SR`F@OXUh$gXgqr(q=L}XA +ziC0N)-6bKrqOV`YC1T(8-A4qpRM|h=FXp@XJ$L7yg%w}&O%n>HuJ%}Tt2gpm_{l$d +zx<+f0-u=BZ<>G?%Uw-LLcA8!obD)kznCDb2Tj`fi8HEPdrmAdu@%{CSJ)4p@PAqPp +z*{dyf>EXEzXJ=cMJ-lDZkhIot+Y_y_$yqre@sEFhFi@0~ihr1QS7^-<>-{ZBH{Sox +z^e`6XTG*WCTv>QsKWxHvi6`OxjI}>`fBt(=-8R=z|HZ$5QuidHEKlv97>w^&x)~ZnWn}z^XUz) +zCD%4(RUKDZQsz?->3-*IlGw=~L0*XoH7iYCKREhkn;z@m6+yGltu31o$(fgLS(~YQH7qAMZE0MV|63xmn{P(#7p~XS9&^|n2~Y~|IsdrQxO;j>Sn4UJ +zn7X7(8?@6?Qa``DAI9+L%e=LlwyrF)JaziG(!!H3bCL`1DxECbvLeq_VOya>RowQK +zuF@PAoszx?vQN+4%U;DUbfa%id(f?Q$13y%Wp>@Uw>m*Fi6hD7wnEaJxh2-E$(Ps; +zE>&2rHpS-p5-pDA<;!mVWqPb8uwkq4B=HyWZJX}YtYoi%k6V{>lFdVilI>_^$UbyVJWJ;B@z7Wqv2jx$Fe8(49Jt`D!wwpb%RJKE*UnWDj+9#p@QQB$q+`csj;?>1g +z*LOT<+GyKlbYb- +ztgjH(xlk=eC3atcahu;R;ng$yf8FuF7+2TzC*$MXsvQTs{cGfxm_|Kvi@6r(?JT*< +z@MneigN|i~Z!fv-e`Q7B>p;&d?;1Gd1Wfh(ci;OKBOz*fvEgF} +zcMeLeIv?bH`?+`;YnYUP&pU12C7YK^9ecVbfSFmPa|&x|mqEV^PhwCq+iR}Rv-d_l +zn(%(PQlO_eYq?Xq=e~`;5GU-7y +zcXF|N)+NdFUli&T&b)4CPtQ=@$kpW4!q=qg^s1m!;P(NS44#B{GdOgQ^*>!UlY@V; +zps}3o(~MrV$Fe$N=RSU!>+oEsY-U|)&RL^C`2@aw?q4^st$Av8c;4P5=j9Vxw#yW7 +z-JCjg;cTClBFR}-HwX78&-682;qgRwna1*nNz-LJG><(r+Fy6((i+VpK`N7+)!t84 +zNjdjr&uxFx&8rkD0xQpkx?BEv<7>+9l$tS5-(uCP)AK?;9o*QwY!3(Tmg^FgCnlb3 +zVvo7b7S>_B@SE|j=PP^7fB%U*;k_=ZUV7!dBQtBn40Cv2tYnUuI`f*_m**DYwbOJ$ +zy&vd4(B&~{Sl-6M75O!VQO!Q)lt9w~o3(Y)RnzjCx2%4f!*#a&P-D*0r1o8pE?&AA +zf32o;@|DJI@CkQ%1+8R6YGhZrg!O! +z$P)!SiPg-h5fU66+FpelSgzjmKa|w)eoxQJ44Hl13tuYbJI6Y$dC{2bzy6_pqxxRG +z_E1CrDO0+qax7jNvt{4i8FMTX+CFVr657V;Z8YzqG8XJD8)U0AAC02zw=T^W%uWsqNZC_ +z@AGgznf>*#)Z_bEQzH(3n<}&-wPsDx4QHRniXZiEGM+sn>)BT`+e%o4<85q$U3u^J +zc{eJi+10jI-EoW&Joe=Lk`>>gj;bBr%z9a_Y}tb($(Wx7O|oLT!Wo4!|I=>uU%9l; +z*lStxWA?HFAJsoGRzmI9lWwJln3T+T6zj8y$@|vL8OIDyFSS>lnY38Mp_j94O4bYK +z9EKY{Zu2$Tqc6-i{Ap+46u|#3eBQ_O&PnoLgD*Zg^5k7G!(F+8fWNX_zHPipZ@a#I +z+9SGN=y_*`{L9FOu#U60OodE>RxK{l@0XpSd%m)VtwFJf(f!5eGgEKxj@w&%M`7P0 +zNAdjo(nnWzEZ%$KSmV@5zU=;$Cz`kKUV3TGi<*>O#>bjo^_tpMw07?+55H!R(^ec4 +zufoE5JK^7*w<{t`*L~?#Kcp9AA%D{4t9{0`Yk6C)&8Up2EpF=)b!%g2EKOUm{k6%b +znrl8D^V-7q7MY94z32$rrdNLUV0FzG{@zPR8ltingxvYsZ1m$_f)Q5*{aP#1 +zz2K*)pZ<-f+sr0Q^epf@-YEEdWA^6T;*r-kM$Og_O1S4)_9rXyk;;yfZrLAIerZhY +z*--S@qriaop6Yq2D3)4d75hL3{h1C@#ZgNX4nzl4oKX3|5I1@Ar-j+E&fD+2-Q@Y@ +z{ZlFSe77mnq+Zree-Mz<7Pi4a{rluS^QABSSii0>mz}Zv9qZcM)N9A)%wvnax9?v>n5Bco=GqMP8&4iX@?ewFtcW!6HQfK?&VDb=lx919m+9lC|2h)kJx_L5w4MF2%k>7E{!S6Cu&@)= +z%3d5gtnXsX!-Y~JOy~Vf58cXj^1+WFKG#p4JF|*gth^-n#7Z}QGv-#kcTZ@4gr1xT +zzmszF^0*y!_q`9KJXk;Nf6@0{cD)C#>+pT=+uL`SBbw#O4u(Un!r~3Nd<#^S1onEG +zv(FfI+cvr;QXJ>*9wpDfY?=4GsbdTusdh +z3MV*tni?AvG&n)$Ssrjw;7E|*X-d&p?SM|aR2fpap9ALMZ++s2@GQeck +zlWChH>h5W;Xi(r^5&z1(o+q^}jaO6AF6?1E_e2$!5}vEyy4X)-Zhe*IVm|GwXR|)9 +zSpxUYC9jgj9;?f-RX6a>o7nA9vH6LZ(u6Yw5lQpYJ+yMT5Atk0H~q-VFv%^u_Bwrg +zsX6=ex$r|JnSm3T7jN6UvY|sglUr0K!&)Ues!?c-c~_Zl-wnZAA=4VZo{W7x%i!AO +zN4~YQCU=K(+}bMNlURDL+9vrzoO{=_1#er^_K5!IW4G7snV@%7oR#;3ddLxxwT_Et +za&x(rbM9ZpCUqfp?z>9s{Z9pCniDjIeAM-)?PL#`&L8woz4~P7dkLGl6QdjWUu+Zk +z(ZF|DGKlve`!9#*mqgzDt-q3ZfKfFn&ORyDVoP%DQq@i07c)&fFT|~3 +zlJ%v;TI=ZYTd)~xN)Rdj6bJ!N^%o6kM!`{Vk5 +zuN-uD+%(^LeooyZ152Zrr4bj6N}m{Y+?d!L@uj7?=Y;2#sb7xvbDME;sG6{4?b^#< +z@xH%YKkRtm9WJp)Ec^a{PcdC*XtYY)T(wp1;^V^Xtvod$e3$mjIcnRVlM}XA@1D%T +zsmJrvg6_OxdQ~1_KmUZ!)Ls4m`b;?Dg#=B#co$5lJi-4m|B3nJl$e!qGnDQe@_ke% +zcstH6<Qz^IYE8`i +zihs2}PujoUIUZ2Qp6Idoh*RyKwR<0)_kHWOa=tc0(M49tAMYRd{PX>|diTYtieC?I +zKUcaSI6uF)W!Gc=s@*&fOS`4_f8XnP{6^ruQFWMMFe}l +z|GMI>7Qk0}etK2i!@|{hj!Rc~wQLETyCQR|vx;_gZ$zB!0i_v?J(KtY-+XT_&{~o# +z{zOBjmUS7!>NY=lmlJHAJ^?GN&s`cc~O^QL$`eL>v-PdVi))p+?eI| +ztXQd~v~8WjjGBa+#OOxf(7$K@d%L+FTvqGLHQ`~<+C~3_Yy7t!jK7$$TJ?KU^RkmO +znky}&GI=^5&Mx%XWXyeY(#g6NbN1hwreglXAb3YWSjj?J1^(OeM-DEm+i8C3?`9JP +z-&Ipj-jVt#n(^>wS;EITD?X!L6zFpXQrqxmrx$flLjFiM5txP^oQ_sey +z*z_5ED>$kcFZFIx$G*$6o4&ADr~JSDp#1g4_fLLttnZohyffRA=TqQ|kLxt|iOsIL +zqq1tfp?&Gm)?4Q_QeP+DnD=p}XnjE8a)0y1w_`RI)RZqVTDMc%b5H4`ocxu(v8D_E +z?Y!!`i*wt@zRLx@r6ISrB$}6b=zV(ym; +zPcD4(Y=Mk*otxk`iAhI~DsSg?;n}n*yPPxNvg~}1;)AjmRfM*^@tc08&Q5FTp^2YP +zZ*2&<8##Yss+8iS4K8=q?JS?R=1IF>dAzGj*?H@U*@hG=)o#0n1D{OU-uvykrFYSE=ZC2!4q@MUd-r|3o$I@5 +z@#K4ZC6-*=$ewoRs+i>>)|7|Ke0I-j6U3w# +zdaLa7{;krNg|8gHpdnB=LGh|zoM*tpYkQaM2>Nf~`17al%rhaCibrl;QWE^NslqGm +z*&eYJ`&z3Sf8iM)?6#j0*DvraZ<}6nsr&u0{Y#1`Sor+#%HU&+>t!v5g4*f=Of$pJn1#p{g_oEZn%C3dcXbf&tiVxwBq`x3C5@Ai9}@`kmZy0 +zZryaoSe(!Q)U_#-MTI->=jJ-;_MO~YeeQLNh6)%Mb9)BN~wxF($c7GdrPd^QGfc0<14<~ +zI;P}1G8@*mEi*na>G5v;9V^XEb6VODv|Tx^x8d1$$BmIY8cx*x`(Y%mZq~dwjzQSb +z^xKz&9d|<;!Z(WWUol%`dF9>oj#>A&DE~UwGvUF7b?;1DZZWt_uKB#M+$!+ve#iB? +zU7S^E1^hi>r6x9t#q4U2{&CIO?vmf8rEHV`d|PhP*%OKHLoUq@D=l-^?CadiWbBZX +zAFL+0ar=Kh<|KV~Rz@8W!IK;zOnIByvg@NPk1rG07a`5J)i`NQ=pX;d7QLmJYIl|f +zIxG>K_m1tGYS6{X!~3EZF1W0}SjYXa-B-y4xBkBl54y9O=bLWL!uXqVzqy1N>{f9x +zoD@ozU%>G|EbvF@xd#E~xBc1uqWWt5k8EDmY{{4NnE&y8Fg&)gXbsab_15P3n`@^q +zH#4Tb+`83b-MosBMQ^V$)-08ESa~zJoI&|huu44R{)v5zcho&x-Pi)S`2t_RD-JTB +zsbaay>3{4~2BzG-(=$z1H!6wQvE1OZ`cf|tkerh&lwi1a)yB0e#O5s%jn6CXxh>Mo +z`jh|Qt^;c$s!=`V)W-#AK +zayYOgak2E-wr2VATZUDWUI_fs|90fR(wC;g_c|=%s;-?|;dsbkWyY7)ALSStnU^sg +zo%WMq4#R@ASuGNW)H*IDoo#ARK45yo$kTVll@DhA!Z`O9Wxgk(OPnS<-A?| +zp=S?fUj2C~c!G6oyMW!coZmq`i;90}75h7y=}o+pcUog-j*DLCdo^d!SW +z(Sp#uGwXCFU9x5J%R!w;0s&<9j +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 +zmuGJ~GdckW14wV82z +zgNs()%q7h$j@k-uf3YQa;*P&IZ9;{&rC5`${}P+Kdt2?DRjb9G7vBDEqv#i(cE9m; +z@U^DnVn^@B-WEH(qqcRwKy%}kQwD+BUj-c=OgL!5H!aHji)-d(_n9}|%zd=>ecZ=s +z3c|D39=#ovzvb113!TF2+Vegx?`N4%S1o+VHoaCu?3nuZBRoe}?=RvnIk|0%@ISqr +z)yuO#x-M>AaZ}BMEBE&$-WZFEJ?v{&H@-f$A=;har>%Cc3j5XlUsKZn?h9JiIVJmOHU?V*av3CB9JAUzHDc80?&HV|aVh)}VqENt3#3%YVIYHZxf` +z%Sy%V*ex}o>FeDV_TMQGcn7#&U>U61f1FCWR-2d(;aUCFttr<~Qy +zc-GA*&8aW%PUKYav;PsaT%v8|+s8`w)jOOo0`eSB_&77 +z(_-3x-}yPi;q|e^d6G6SCdM#*+IDNg()&{W;gcCw1}fx+#f8jc;$IQ+Z3F)U^%vH% +zMpCZLlN^|ozc;Prc@QU{cZ)l9+4eulc@cVV$|d(VTO4Gzry=kEDLUKTK0YUu1NB5>G=>%wHl +zq)86py2a5o@vY~x%`KMJ9o$?Y>sMwq=hm6?Swef;jQ30Nt>08ozMC8eZEgmF*XNr=dBppyaR^-|Po(Vw;>To +z?msdXJC@Ho!>Ajc&iagV&W_bJ3ypX-UF~6<@AjSBxkywsT_mbxxDtF^pXWHmkQ}9-jl7pc=b}By8C9X +zRgC*J)Pi5mw2j$fEWb-?!iHec`SBn0my|K|&b!B^@=tc7=79vu8O(0ylK*k*@@)O5 +zw_;LRREVTk-@e}Xgt<}6nJSx4)-Q2Ztn{9EwCVW9`Kmc`i~g-&dStfGREZhuFRx&E +z=ATmNJ@wH|=H>P)`C6>^+6J +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 +z%Un%Va9v*?@<=-(X<6a*w#n4B6K8H5rP +zBska@E0{P~7+Dxa7+IPe85|jU91NV4G&bk)uqt(4<}W+r`B>zQduvUt%)tLVg7`i(e0_xNB#s{qp;xIZCpZGP$iU +z`HQ76zI9ShRG$^rByw7P!GyP0FP@i5Ih_8+^_ZVwRfEJg<1YP|_ZO+hJIuZ<=GD5= +zPpDR)QFNodeng7!qV0AX2NuY1c{=}RRTbX)j4$+svA~TDTN?wn92fu6x;7`FNzUPn +z56j-A&0oGX+aA5aQF6^=mZ)r&Y4i8blAJ9;yO{U>e17}4fZ!eB_mwkPcQqedD6&1P +z(oXD>j>nZV6D#cO6}MbTdZHP2{G7IueVO8Ro&b3pDoSnML9 +zw*4P(MbEob_DKmKAss5(f +zSqJW$Nrl#J3HW&~en*o}EBhT2m3^*NQ|<@N;8T*BTa|D^{XOGGULOCz&f>W>)0px- +zCKf$pw36k$^XicIKHVi=dNl`@bj(t_(z@iI$)bK6O=csm!sQ?5=T=*pzh^sm_|-G_ +zTVgEvJVlR{-%R7L%ww@XT(rOQ&dMVS_ML^7#6&fFXRv;ndT3Mqv*l@qfuD|Ve#hnY +z(xu6EUTfm+&Djq{amrc@@#x)iB>ZD}FuM@gsoi +zxa*%I#TE?eGu7-^H6H0t;nkLlS1deo#X3p1`;qfo@8ktP60ZF|a#$`xdX98pV06Tz +z;Dw5RY(QVRtIr`c*Q69hL +z9vXl4e%Ptnv7o=FqKYIz=bFTiH-HEvgr%CuC*WS#vf +zpHx-8_m*?COkB4_Xh+-9se+onlk=yVT>HVdpP{k&DW{m;Sq;+zdk$}Dy05TpR&<10 +z>|D8(LF$iW4{^o*5ZS9VBmCjT-O6c&P7QZwHQsy3?RW86cWsue-uuQ1)6|GbT<31a +z>hvT9vnz2etvK(Zv6zv6%DoTs{xYmvANZET^v&*OW6khy?^0eZF6S>*c%#^x#9O}I +zOGx_6mg{Biz7nE~JvVqQ`Ir?H6njYFFQuT-&mawB~W7(W`&)GrKj$W11Te#mLt=9Fb +z!Ae_!r7VBmaISda^frJiPS*eF+3?*bZR8Rv{~i&@_sUFnxbRFylJg^%?k!WpZtFzV +ztN$ay0R&5`jfUoJ5>dRz?h^(y<_Q@mL?D77;1 +z?7Z1WijFQmbab{-oR4$1W}JiGRPGJeKL7?=LZf?;9YhKFB2 +z@K@>XU*|dXQRJQP1&_NuZ?1f8r*ufpZE07`x^}rN|Jwo5Pkz}fyvP)+nScM+oeNvS +zmv(KBPLD9?G*!5v%ICCCAz`&s?Ca|0>2~4Pr-L&0I^;NZtew<;?K6Lv)w&4PtAd;5 +zI)Z}*QkE)AE&a%(WxcFwvg|T*y(ftdeO}IM^hHV*|CnO6Xv-Sk9nP|+!qo$A@2$#c +z5=hGkd!dS|a@mrIkGzrRp1EkGrk8cmCkj-UpX|P2BjZv5B8O?A+&d +ztNdCS6a;MSj@hr{h+C&w@xWMc)XOA47fwtN +zSjd|o`s&P_=~ZsbCMyyx6iYm11rJQ>%P_E?Xk~e**db}jcg6;&Yxb&ByBz^@^z8H +zk%#Xcmx>5B-V+geDwvQJ+)^S +z`_7->kfyaF=0b?aWP#I*RJf)+Fz|8xQI)XI*hg`O9%qV+`=y>+-tVtp=$I+BeAUd1 +zmn@BMJ0thLUWEyYsxK$43|%5T`9`>L^#sEpg}n+bikg|VD;pL~b}flN(XAePfAJ5m +zyp|b1)jTu8#GL~TK1#|89=O-@=YP}0i$_&IxCDEh;B4c1W>NDr?&4bWFLun2`PWYr +zwpA$Ml~L2%Clp)J94#(hD~ +zm0E3K(D>3aAvJbKf~4xgbRQL;7>g63KktY>)qk->o=G`kdDH8c4#!(Ib1@?K7nm@8WMZnY$z^by|VPk +zyEQwbmWF*6+^@~~a?YGYjexK7gH~4>H%!_8SAl2g`yxO6nn{83oTUYGCLdX$-c_&r +zG<1%$xXPN4+M`#(9>@qTmE)FK@~5^qsp-sxD+?25FPR-)Ge@uJvyVjQ?8gUder3(> +zzhv7RraSknYe%n6Z~Ux_A4Q#Rxour(sxNpuCd#kabp9%a%q-EJnRYEv!qKz%TlQb8 +zIqJ>5nxpBN4M)JVld09u?mvq3FxE_sGAVu}zSuVH9`m*KnaTy%WkkN|>kF+2-&pqG +zu`r_n`yxBVnerWZ@0ez?-*UEHcxJ)R;)DyA|L#?P>?~EhI6CRMmx`m#%y|Xo^%ae> +z;jc8Z!cM5KNc-b?CVtP;H&yqU7u&FfD=_;{UtToj!Yx)w)(zb^7+XTcdI1Qqq)VxA(T|3iZr3l?w})uK3XTPXHh1OPixcE?sM+CmvpN +z+^Vgf|5GI677@<)<>Csd>v%1%9$fVKOTcW=p#MK^{yld7h-$LtZ}wFW(yKkgpDGsh +zr#zfFd5*m6Ro=xq4|YtgVOe2YvFUrQ(v*K&KHbvMI`!|@=aX*7YMLtc+&KE#{jrun +zvHaqSNfbv$*cbY^I2z2Uld#y+}}e|~zA^!!4u&&8#U2HzKz-*np*<3HbByZLGM +zy@}y>pSsH4^Sf?*cH;|9-vEzf{VsuLeu2@U+d5IwllQyYExb3Jrq2qC4p_|kFh7Flz>62&;U_NtwD?xR=HsEYC;H4}uc;sOuK$Z& +zQg51Fao*&`l|@^=Wizt}1d%UY`22+9wNNy%RH0wEz9T75fe6#auL7yd?AD;oX;GUj}hYNiF;H=i@=nJtdqj +z(cC02<55aY?83kZyHXIG&D3YG&&dva4;#b +zG%+wWI(!gz5D1vSp&`J*G>4^0Qs&{qmnLl4Def}Y`OeIpFxS}hpR@ChHL?d@M9Usc +zzsh%Hn$v%_t9&{?1y999`W||5#B9NC3+5(2DF^i{dGG$}SgU6>249#H@buj0O6CJs +ziXJ&NpPSXf(rM>s!Rg|zs1VjOxh^y+=hhcynYlZ>GM1hQZ_2*(`4zjL)5Uk+{?9&; +zd8}bI!^;aT&d1t|-uf)e^gDA^sOn2|+{aBKnN2O$H>`BeWaW#S{N-b6wRz>Jw9)g3 +z(pw9C+gZ0}?YZQ!rYQc%{#hlu6K{U&Ryx~wHS?m0q%qga8Ee}3S)XfsN=kJ3Vciw8 +z@Z~K==i|(toBTA_D_xtO7Ax_Jd@=TBOkY==n4P&I`O>N(qe}e_4Y+Z_f!JT +ziA3|waXa23llSjgGV|FP9Dcmtf1Q=_>UuQg#;ZyHm$aWe#}mIMh=nHA@ +z=Cp8S?Ybm;=+OSWh_sL1B2Fu7IcIi6_}D63Sg5A*D?7L2RJ^23o +z|5FYNM&nM?S0C0V7%vY{-LdP_DifonqFNJ=3IAi;{p6lz;?0TopR}n|dUy62K5UvI +zR8VB0Idiext)L%X;;((SH_U0-Dc|~9#fwex%pc1s2UfN{dNuXMPjQ>+kq-~DE-G4d +zYuC+u-WfkHr~aD5QquM*>rcP%eBVcX20ZE^F>j50AFYxO3p7l9Uu*ySeS_x=^)GWm +z=1r;)?(crv8Em}8<51^~UnYV#MBRnlHU@58eRP^iRL7i2Dxq~zTQa9#Hd9dyUpeza +z@af;hQ^|3z+ityL +zoloRbRa%lGtE6^cb}CEaCt=xxbAG;4?kp1i^6T&{$r=`^ +z+<$KW&8%-J`&wPz_3hHKM7f9iXJ;Q*p4hjpVo699)6K?DHQSZ%9Qf??OE&t3pir-_ +zO4+3R=!+B0cXj%g$^L!j!T4$Czte)#Z3FYZZY-%Vo|Lxm!<3TP4NJOu1kO*qmwWRe +z2locWXMeVydMvVUhv1^4AuBp-f);I@xO~Z^;0No%cDkLLuPUCs#Pr;wtC7okw_m;( +zV=TYmYM#lWg#{L8^|Bemn`MiAf2KW=K4s#3)M|pm84vD)qujd6zr8)ZuHMfQkWBQ_ +z&17G*cheI7ppAcaOC;Vqv;OHcJ)<^3i%kL-gq#+N^?V5`b#^!?{6OM~;7mcmV?lS= +zR3~c%I4^1Gv+Z*6E8pRIZj;J^b?OWI*Q+#M6&Lz#y{4q)N!*s_L4t`sGwY3(be!s% +zkf`BVvm|^$%hH^)O5t|9gHyVig1ngj1*SY;(0az+sT4hF(vmyMYb!UZPwH2@FK*tq +z$6YRDA^WAuYi=m4$dv5LS?uyjLP>t1zkI3c#0DM}&i*fwQ;sMZ2=g6q +zbJaD3i;q;^> +z&P4s(a{0`fKl69~)LZf?fzE4|e(u*e-0YLuX~$Taj(7`RZlw8y8Fxm1v3bJ|OJ3!o`{|;^eHxh?)Pj +zJhJmrHr!iddFT6628EdlVb6B3FwT@%s5(V=mWzP>stGeg)JwKI&XL_{YWvXHmHiX1 +zv>g}6G{x(JalJYQ3leH73;xP&*xJ02ZT8IV&DmF@6y_ZFH!T*(O#T(3a4bdo=VFIh +zydlOl&NjBbpXW#igg=~pkdx8o+?6fme`G!O7yEQ~Y@f~$qRw@`x%*pP)Rv=O*?J~= +z7kEx4>rD&^Rn<2!Rlc?Q%XPhigI?Qs@31az2`-+a-Pq{x=cjnah5MDak~7$5uGy!3 +zVJ=VdY`eqVf)=knJ=eceC*W$Zl79-(95 +z<bIy;<;&!)jg`gWWUZL-nP$&%{i+65)b3{v? +zttK>YuA4|zh+JEnOTW;(?KM9-1s3bhD!Ou8{@nv_eR=){;mj7-H*vef>q`35`Cd5q +z-q`yq>epqT%Z!@$9aB^ms~vXnla-SZ$ +zmGY*Th9-4<*!k^}5Z7l1jTE;HOAmkCE){<&Xi3a(Gx2Rx-laYaU|?sSr*SFrTK22l +z6w$TOS6pIh%i|h$XwNbb{>=0?_SK;YbFHrZxEN@e(%+!lKZAWnuY1tex9=8ia~82k +zHp{xfnYGwQrREV|^T#<3eV!MmYHn2P-_3rvprG#C;{_$p7v6dQcH_qluhPBu^HeVD +zTq>0ve1GSMl*8g?yXp_zTF)jjA^Dm08_!wBPyT17-udP6%f9KhV8tV+hBcfuyFW2* +zcv2@NtnlC%>nszqN^J?>85JJl8#uSeZHehl_B}EqSnNqh@N0_7-px5o?;_4=Sc<**puFZtVCk_rOaI(bNNM;Iwf(V% +z>i-b_mDT6ozFB$uLa_Wb3*+$AODl!{#;=Z?;Qrvi+FKulraw<-%GmANyegHcBvXlr +zje+Tk?Sc0`ey>gVbtX-?+)%73yK?YJ +zvb|kpz3SZU0LH0l-|kG;vYqL;SX04aZqg-rb944vvf)V<%@duN9o}&kcFdc-^XS{9 +z>5uolE66U7G?6{@*SKKm&WfEY*zR<%a431QSI?;T;Ja^uM>5KJ)0LCh?#2Z+R|Q;r +z%#d@i+VPppv>BYY?y(%&VjTQN`r!8Kat7a@6u-Evdi&P;oefJDpHDiqr1&L6`psn% +ztll1%Dd8^K>)LTM!nNA%%cs2?)5HDkGUU%Vr8m0sF2166uI}BAqCUshPrS~?ZDrDl +zf7^8K)VEW1f@){uEfh;Ne(zv9zB8h?q)S7}*!Ei!1Lu+JleP4x*+m+4>V1ps?TP>W +zaYxsU$IU(GU;g5ePOY&MsndA#J6vMbJEo708=hAmUCQ`-K{WRU{p1txXUCu4?8D%; +zY?iFi2QEKz`TOU3&c2pqo&O~6+3f9-XT*}ijOOp)QH_vqm~&>i8nb?3?E`1E^;ch) +ze&OyuvH7b&lDk!Ch0Ut3FZ6Z%cv}-6MD~AaTW|DQT(2zBe}B8;hmHFd1y@gMfh5FWz^XEoaTVEv!=>zGRCuedC|W%K3~pbkZij +zRq7du)^GGUoJt%PvbrmpP8^Y-3I*>Q|({VJDQC&4%teU^u6 +z(FOl6uNGXEu%Y3!)sxG@3m+7lR8F%~{i4lPa)P0$O8&*Y~ExX(3`LOHAn!RCydG|YxOMUJ2_S%se@tyfX!u;F0OWtO@ +zeeCf4Jf`z(fRyLWVSglw>@<*Y4nW&E_nl40-J>F%FmiW~OtNSk&->GX-n +zD;yOJ<{6UrE~;)c{wvuilM^%hO4hc=ceO0p!i02ttvOj&{QYs)z9>U2Z(FNO$Q0Fc +zsk{@;AN=vuN&m;p9evFUv_i$tGD~beQGcgh*sFTNhyG%lzGf}|nMwlg#Q~E~>{fb| +zA|`&vD#nIgRFdI{qnhpMdB0mC@0jeksJ3UWk`A*;?T)!|aSlrhR>mag?|)Jt{_X>- +zrp3AyT<#An6!^YH?x^~+BmeL7X~+8hUZ0`w)?KT6=&0`@S&5%3%Ods#FW?F0DG|=8 +zoOJKi{euf7mE?ZkZh6nUGNIs!{qzsYPWP7{J$s6G-HVdu%d1$6V-0r1D?Qlgbkpff +zkieanhCL?sI^l^^q;@QuwnT{e&Wdm)Rn{G%bYO#H!E1W|cS}`Hjhgy%DvR>_l*iC79eX#3A8~jP_F$XQ@wsob;{O~wa<|L&@EYBD3&XAoOmvv`(3D}_#Pc&H +z9$ZzqezULpTCR!t_UX2&DvBphH!oI9e#rA&jQP{1`QDely8K>#=<^T0=eLDQnu}HZ-AX@g)8G%VaM`1M +z{+F1-;+_=^oEaMz2fYrM**?L3S$oQ~SiQ-Mc2)iu~mF|#_6Fe +zXmI*?_LM(i`~M{`m?qa@JN4mr{nq!^pBApwsw|B8YIsP$a@8Zn|8?y=@eZ^83w|!0 +zA*EXMxp={)nRU`}Yz^FtYVDri4w!dtJNL6`N~i2vnK{y`CpKQ*dt?5D)9;glc2E4h +z-7b5#b}!qX%{F&$O(;}&yHH-rfpz%h(*t;xLK+$m+Z>~Mp#tD>v_`wJOY-EH};#Ct!wo$~msrp(f?{B>-m +zbndG%zVDBMH>}##`lNEM;L7FpQ{-Ct6&6I8?>!{@!_xf4&C0tM-|#=mic#DVRbl#1 +zRAP0!Q`n-Zo33)+mU?vgh12Q(bA2|=_E;-vTWHNNSIlRxpT9*++LJcBJ3Va)4ij`O +zI(9tDvt}^Qc#^%nBK~q;=#^MCg=3FbXk5R?vsUWD9ra25Ns~Vx`fqysy7rN_G7E|Q +z=RyzV{ru%xb!vw0xPik+IOFE2%mZ0a3j^pdSPCwbjIXg&CHyxRxhtz +zE7ND4W;F^((0=R0b(ey2!q|h>^SL_~~s-!a?cvx4kYLwdAc!YFfQR +z;KA*-oFf?mk&9GQOTS;*AKP*JTBgOm&I1dchUdOMsd7qWNv^lMh0{?6jfk0>bXNrk +z2eMY1I_UhE`*TA7b?#c7t-haKufNKBQK83l`PSKUN?O5+MY~HF9;S&Nd3-9I^&eZv +z&wfd+ysrLfk8d%WPY}}ZOMN0HH|4I&j0>xG9Bp>WI3{rKort<9gTfl-r&G7>ZFs1B +z@Afu{R~=bFInsgaIwsu7oW1#<4F~gS-5*yCZkZ`pdEGu0=<_(}3G0l)7i{8J7SuWS +z#2H@Gyl)v>FtKp=o*2e$H;vLtFSVbU`s?)8$o}uHLYLKl)jiO1O^oO!Jht;hwKxZ*Sl*6-Co6p~PAb2h8z(eMrSDXD${EyzZ +zuxR1W`&Cm_+ZdlK2}Zni*u%arS>sGfvPSK(fIoXVjC9kIG?1S~fkZu!*T +zy;7(D__D>tOXUPNZ7!|hSSBAS+PiDAnRUvCB{`O}YfWd@{)-kq@%j3O$C^Jh!jzX^ +zDgEAZHZ3l~KeeUjb98;k3i)eW_wESF`}eYYzm)Xu&)5DtB-J^UD6L6(mm>W(#rna7 +z^2N6{95DUYZTfG^#hZ(d*{i5qJDg{9m@C>b<=ac|i4%`HoZ0h6iz7JHF=5++f?F4C +zeK_=zPrdNdzI>x*VXNW>PqXb$TQwu^ICMEp&%9yy+vcaq%cH$3b|f{dTGz78-~Ep9 +zwTFdKA+m3;Fl0VRUAA%YUnAjc^;@11pZB})GbH|Zl)bY)ByraV+X;7Xb2c9Qw?E-C +z&q3b=?aQyzxdp!1s`AIi*{5pUxN^}nvhDhN*`~86pL!|YIP>lQRyvgtNCxO;4_GwRTruJGi~qTe4ZKi +zOCDS=VPI5pc=|r;3B#qv&BuES*Sb9kRcEm1t*PPLbLibup6(ff6Bq7c7fk7K4$0wF +zYfJqsFe%C@WW$nQw{JzPSz>=_iS6SuW537qW7YFYeu=b(e)_tu#2`+u(k{g2@1=xb=635} +zqRLEeJscSl6ID2rm0S#zqz#mG_IGTN_0(5-eEb=+_{0OcN&lpk;+m+EV>_*6c!GU7pl>gtAYoXVtm?NBh4_*vEaJwzvC!c*s7nuwvux +z;3X3o@2K28bXDQe>q$Iw<0RK8i{~~*Om6C!B=){g*hOf0?gZJS_tS*C6(-fpzv_Fs +zJgWKdmD4i*4<{VR-leUel(c8nlqG_@^>%6giCcA5x+o<3*<*nt!Fw_pNa);b|J;6GECF{C#e8qTpBVj`&L}f@CL!utgeZ +zsoSZfUOt<#|LC8mwkmbsC(PZ|KB1WZ<#F35*Ka$&+V)m)+1BIT~w@t}hz~=Dyi`aU$&4+J$?>u;l@t{2C<%9*S +zPMycK?WUBtslF0n|CWB|o~Xgbw}%?eH@)rAlQq9%_c?G*ZNcx`tlPh@-|*D0>Wy@p +z#?|c2ZmS{-4SuQ^oNny8^*Yg_<*!l9^t}heJZGGFnZPvND7E)~zN{$k;Y}wbD_pjG +z_gXPm%B{?L@&3LjzAr*gKR$oZ&U|vU*H6J2wi))TQ@K6H*ce +z*dh&>KSy>=+%&0i*^Z(~*?H4_p3AMf$SlP>Yr9)@(<2@+j@vOGc-~)IB~YMoO=Rll +zjT-Zx9Avm26t|fzyM3!zko$y}v#w1jn_#tTBb!CNhM$KpyX>wVlMeFl?TZvQ$bbE{ +zXXm?M2b%{*0o*gal&!2J@0bW|j?_FB^^Ehuqcc1rGh<61y3Ll7(C15$XUa90x8UT) +zS&x6J_*8IZPrSA0O#}P26&aBZK5QQ*Xz6%yF47Elc{GcMQI$ol|OEsl@o&HTx +zLv+SOyAF|_EAl3-9(yDt>ONPk>gjSy|5jl4=0Qe6j^mG`YV$v)dO`@<1$ +z@4p**{{3T)HSL?YZdSy3%}cA6@&8(&6TbRd;2X#8wOO{eUbVPw$tnrGyR^-a^-!`4 +zN2BIO{ht!Af9(0c;NiTh(h*PB$Jg(<)_SPp>O;X_PL6zQ3>9yc@4E1VX_e?aq|*IWj&3=uRW}bFIsTBvF`l( +z)`utk)GTGci1_Jlwn9^SH|fUi+qhA;&SZ7N!<3gt>ltf1?2c|!G<)r^i6XjTV}8GhKX+~#AWg?33Qro{+Bg<|Kk5G +zO)a-(?R$4U;D34G%s*1g<ReFCh+rFqJ +zFYiwLA-VqHCoyr!88dq~zrA)*Yw=aVJJX8iSJ(-1RGr)rcv)!K?IlmUu4()@y-2;| +zqp0cQ3pY$utIsP}`#*@_=qlM*9>4MX>;G#7tL2#-)Ak0}{Oc_IGynUogTe6?+W&5T +z6WqI3hGz%k8?C*Zw}f}-pI!gO*Y{3N`k}9!WiRjD4Xs^Yvgxv5lBxfN#~yobN3k#F +z4oNI8ukl*9?9C2~>+T`MauL$;%wNTRJ14;B?%YEeBTY+jlqb)!YkB8#bl= +zm7W^b-Mqr~E0=CZ^~W`SUwI{`K1i>A5oR)3kE7z!-NH+Ak2?HHz9bvt8R>hmHtgPG +z!|6r^MhDhzToiEgjX2Y!_41~_BK}NOxaL(@a-n6()Ft0UA51PQ=VER+#Ju5OoX+>^ +zk47)!XX!V5n|9}I^e?T~?H232X8f7rR@HiR(~_Cot%sx+ZfUwNt-Z4KQq@e?98<$E +zRkbsUPk7p5qf~RU1_D8UflJoR+IPT&ityg-BfV#o1^~B7ZQ(FJN*2^t#l*t +zu8jKpL*+j0E(mm-m;EhgPHXL~Ez_F8|;(1*(%fk0di*L!fPEY#rc(+B^j4%a{C-n3VF6{e&a%nouXaKCaU@sn^w +z<-N}ZM*W$KL>vm1*|3_(Ye=Tf*!yVGzm#1Gztpb1PPpE4B5IfP`MY-)uGzKcZ=HY8 +zmgPq>jKV@!gk)vx&5tg<)uyH^$bH1Ime2Rd#5;oj`+l9fX3Z1X{BFkcBNwbji|6a$ar+IetG`eZ?E;794289o^10hTd{^5ooWAW`qNMf0`#r6f +zQs)V;liqO6$l6EuMOai=<}dTx5n*}V$(xnNi^DZPMom$3H7jwF8Th4Eum|~-cy7?w`d>6l)i!IvpET{o)NcL^oMwG& +z-Q;^EXUx-FZQ2A=cA80?-}#~X1ZM7-uzdNb(wfHBqy2gD{bA1~0 +zPxwBPtz=KH_3dchDok{0P(EGobULrXMN#kC +zpQS0yYnxTnn8%pYV)^_ +zrOKwwc`d@*&e^PtoLX}~{fa~Qj*ki++t?m$UN%$3#c$I}WyK}upEL!kwESG)DPy?w +z^R;`P3+@LdUt7FkfAg{U=nNyPAI;nvy_&jTLg%H|i_Ogbw#u#}^_0=eYf^VVINHo+ +zEczQ&?2!38A;;s~m!MPA9w>Y=oh=l1#&)AZ=!_f7kALpr-6Xa0U!wDQABV-4eu{N4 +zeHJM_)e?J8j;Z2W+}FO38Am5OIK?bDC;mh?aTZHNu3=Qz(!<*;XBBSeo1O7$`H8~; +zC(Jd&E?xZe_|=NptnN$7rtR8RTi%+qal+{ZOTKz8Td37I#U@MPL(iQJTWhw7x2G4$ +z7g)OgNU=3oer18&J88|U)%}4*j2F!xE;~N^!{a$>N4F;A{p3^0*yG;6|Fm73ayrM+ +zr!T)>dZhI1PyNTYpLTOR_`-IHXXCHgpEVt>yT9qHYFn`6zycY&-x=x}3+_)~xLPkR +z*Ztx5&y4R!lTz>gp2D_frqQB1pECW+gF5I+vaMlni6hc+I# +zbAQ)=es13bQvWxlxy#I`arMusKfn<5{_|3gUWroSo`VdFT7@MVvZWc6b_q|^iu4ic +znZ2K7nIUJho02wTxBQnhgWXaVF^hG?m+ws7)UhNqFf}oE%TbqJDKEzQun5D?h11ZFV(4> +z$;=QvlSAjZ;shrJ*K7w42L;dm6Q!r-GcS<4eSJ;*?3XW3?peAjr1M+sg!g)@HP;@E9m#i6 +zOcIZN|w|2@LS$zBAv8OB29=dz=El&FUPS>5^F!8_o#x{>=#s`+tZf1A< +z{&2k$je6Uze&+LM+tUjzCI84yVJJ=Bw^*oxm%;Ddab5=V%4@}pIdj-gZ(LAo(NX*2 +zpEi49PCL86+^3J@EESS+b{xDSB(`4W%jx$w9=f}$aivfCc;eyaB8gQeG`{3dnvs5O +zSKL%)+X*wayWCy3`0&M4=@>n>}&*e+<51tG>!@l&^3Ds2_UHWFslF5;oHE%=jM60C!V^z!{2cGyJ6kEa2 +zugIt7&h@>brt4(x+jIZ6Il3wT-2XhwW>TBl@4ASfc+btRlVw6hU;nHrN}qJp;)}!k +zo-=C46f>i^<~%6ZSjoJ?zDV&;OZ+$K{KA;9<=z$i3{#D#`-?y5Ja*vq`Fd*!lWDL1 +z_-s9P`{Di6gUwA{9b$)kk5oAP@pIoV5~R}V&Tyl0XXh;kHQ(yXo3s?oT?R!3T +zXXA%g>mm*0pYD2Maa#1}J+G?mRwq2}7JcROc=gU{ +z8h5#veI0FQi7xP35qV{Y!sGh553$TCThp`-?OWJfHDm7OZySy+ydQsU%kFovR`bQu +z0@GOX0vh#2CD@`Ef;xW2O_$)kaxBYdjgOkTWLfBididA9Q0u5$Ui?Xgc9judTq{e`*lsU!30bgvt% +z)iUkvp@d*;x#qIML}kBZt-$WbLQ@}Xe=JmU +zc1fga&mAkh9aih6iLbp}Xe;znvf$SG#=V+9CD%{eX>rx-Wmnjg`HlrKkqH|GcLkVo +ztzI2mHis>_WxrNOH(%z>C`Sdgu>LDi`kR@&WPQ^5CMQ0*{9<+*k}o1vqwfvU*SNc*$p3^lXX8Z?|?$o*o!<5jOb$H{*#N50MY +zy0t-emKA>}clqA887|gp!7rzUE=nvF3yivcWl>I?HqQ6rZSIeYLd#2ANmmE=k2)I>nK7s7ZD0F|VkWl}kj!yrPcoI`0{E +z@A}e|;6IM<1rO?;bQgC&bVGyx^xZ#m4*fW8d~t1vqU1g$(Zv~DYhU-Je_&lJ(dM>* +zE6#NKi`%ta!rU2+d$>hC*)w=Q+|oNAuqSJ&rOS_Rk$m0)Y4fMb{a&*!f60~fo42Dk +zR-Nmbx83RGwR*eNFKfhpwy6BlY;u~h_<`0Fhg-9|52x=vly2C3{#4_6r|%m6KdaC0 +zI#qq`&n8Km|LlD$C*~OXHAuxR2$;Jz{cVr+!h}#hQ>k^UJ=`6-PUbCbp72mK>hz5p +zB{nkmx;D3^mrS48yZB|U&c`)dSJ$?sGp-JmouQ!kwD`XPSgX5{ntGd68@Ir;5g1Iy#3H#UeL+Z*TLK7qNkAUNIh7yFm6bk=wA +zcbdf8zF9gpg}NwQ{QK`?>gG2m-!I%;CO@6UNA%{230@i}mv{HAKOn()t<_}eTUCcF +z$4IZ&>J1epujjn3cz$Hr&D@Ne{9C6@p8M~_i+}8{_ZRo}uytX{}O@y|AOwsD%efvmExRJbvCGJkL-1wgXi~d +zOZ$5Az#)~jX=m$13|B?o*V))TYw8@MjZL#uzg=F_#P5Am%0^L-w%1oL +z^CtXWVG^R}7w+Gv7c;x>hf^B&1KulbrW;RGy?uT4;8fd9?`zH0-OHam|4KOji-4!U +zp1yxo@HjIe$}{R_XVuU4MfbdKNiMV98|XB9>e1Ti_vBNbI4+QT>Z5mEFZ0T3g=;Ie +z|784ZSy#2}#@B@tr^PAOM;!Bb_twJpqTm12tp{S}dEEWPl6Cobs*eALxJsv@QwghW +zE_y%he5fwQ*r&d$p!!(_)A5fk?Mwk-4>{jI`ako?nsp1yEciBe3H;}NvQWRr=*~`? +z9k2Gjcv~iP<#C1D@}dpw591#t7aTC>m$leiqQk$h>3q+c*;Q<`-ci*nGm{P?s-av$;;V`s|AB!AT29H;f^Mj?2%)S!f``mGdNg#vn^DkGAu^-C{ +zJFw$t#B7cCNurjkBT2TzLx?n*v%dH=zJr!#J792St3 +zO{q(N}EMEw!RCF +zoGg=8)|tF7C8Xuq74>V9%V(BfRV`uYeG|V$zm(I3lgD6sz#gIR5*`IMxz}YTOgSR1 +z$yqebJX_)Xn!1?Y45q1Cy-| +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 +ziNy-{ug45;HDk5*4*gDss +zy*)QKJiB4rTg@LS|0Zs#+r6~?y6t6w%Ao7ToT3wAy;RTiT=~UpFja?H*@71uv$EN1?aYlkS`)Ca0c9{0k0k4K(kxwxz6*sP1WA$AQ#2Nj~u +zJH1=L`eiS}B^Q3d1-1{G&K!L^f&F`IWx)l9uLirg55M`hu=n0{%lf)7UD2z%UR*TJ +zFjL9OzoO<|w7%V6zD%R&8C$|;dIwztb>61Na9o +zo6`)^55+B8Wj|GuUo@F{+Ase22jWLWuKMwBa*)ZCT6p$9ccRBE^?6%F4hwA+F;&af +zoK*7IzgpL|D}9#E*;$LY-Yc1KPJXfK3cjXH~sI9oFLt`zv}mS3N6`miiPW?sLMT>)5ZqQdtjUK +zYwGiWANAd}4Ei5lo?UD8;qI)odl#C7!s07_%hu<~<%vWFEuN~>#2$IeX_3Qm`Q)~A +zeF-ts&Ivi}_A}BJ{GYPv+On+zg2!{~e*W2D@aNX?B>f}C%#))n7-dC*<%RF39=y=> +zeAC?1fl6){b7cj^|B1wh+;nVSYb_JMDx&4UZJ|nsJ4s!dZ`Cq^IT|<*G=Ww$0=3Uu(ao{LvTjPqrC?f_ssvd +z>Y(JRME1N3C8t513#>Q=Y +z)4piS-j06^$9i47o)_%8zn~>F<)G0?hSfXz?%5sEvbtVs^sGPBMZf0zA8GC03;m1I +z!=-i}biCo}qUZfMfgv|BGiG<&8HTNw0#52TKbd;$#dD{VE2g=vijoTAFV756;LW^Q +z<OtW<)$6BY5I=!0rOTU+!W}Dp02t%=X5^H&P3F?(aKy|N8@P&mCq*%x^w=%d{^^ +zxxG0zm_z-Dl~dlAf?Z*MQzsuX|L9zLMOJZE^%`E54c*Uf{jg{6sQahiCTA{C+12g4 +ze|@M&M~}zZ_84&vg@}+(QU}houlW*p$?lBxrgq +z)|S8g5nC5+yW{_5UnM`spL{o&74LfPJlyM9Z&5PbCz*f4k?(=ELq4 +z*H(Tne*Ws{vOf|!^{eNzOrFe8ls9vuwedR%tCKep7X~#HtjXYF$XLU={>!`HKO$7N +z#pq-_`Np?#-N9t>^U=Bc+1bi6yT631iyOFYopa-s-sPS$uf;weXWwhyQ}KXXVUb@f +zvoq7~{reAZ{ABm9ul`SSAkQ796+5`k1i8QJdwpRG^ZgAAt)_e`h@Wt`e3NT`Kx(jl +z#s`sDw>crKap`kU#`tWX8eDvK>Y1}^rK-4#e`^KJ?5|8{{fzO41|D$Pet7d98^^sl{gY-5J6cB<24 +zHD)mmlg`(vystQBE@Ex?8~!%vhTWZgwMp9=ggE`QX0RXQ@;Uvksz+2LBlWM#gxbO* +z5k*W(-q}mKI<>jy#U?iB#J}3q=UIB?rii}2mMepZ)JFFDh4~4Ba(Vw^D+FUEXA6k^ +z&GcE+-Lg`C2~*QghFvG8O6Xs(`?}%z{ijV!^VKH2kg=GnI>qkwW`|fAi66n+cL^PK +zU|KTCSM~Vp<=;;|eYZ*O_T1NODGYT9H>I?86-`~}-M_Hg`%!d7#lK>M9Vut6PW#-l +z*nPRBSwAX2lEGB{MU#-g33qYMvf`HxOIL=)2R*$OWN3al`FDBM0-Zh1@-BNeDy3ah +zO1M>1Vvz6D_sr+8ZI$+lqvxKq&CK6WEV+$ihr;!pET;SWv)WHy`0o2d_WmRPJmYzD +zZ(Pt1XLzuGPfzK}?fM%Jxb9+I6~6nD0Q=*V&(ktrEH+MjHGh(!t=E^msm#m#KCeA` +zn=QYhXmM;Ox1qC@itLHp6AwS7wCddSFFBB +zxq4YymQ2`UdgZrmnrV;R*^i93%y_RmmIWnWt*C63XTM#0)xc<8hvwgff7X}sKU}}< +z&)!=~yKg166>GCMeb|r{a*8)fXsXy{qyM+c`0g5JKi6VzJ}pyk&NO-6Nw>W&w%(6Wev|zgSTZqn?WAqYkeK&l`&y8LRp~E}k>xvF(8^>&{1S +zd(kaFIp0%4X->iOJ}~ip?>q4_52(AF4P)@WfrDfdb|9}tv4BOe|IJB +zTfd`!<>#CSEgwGbQ__}`op{-5i$z|1XJN)0ZKip*bboa%cZn~w`y$#V@{5b_msfz+ +zEx{61p6Bm=$<1bnm;AZiZ>2VyrZ#(1Y>l5(`5jdkDV+-e3wLyCSAAtSVVJu#V9~!! +zBTb+3di})@i%wpXp7}y2fh(gs>=(aVU)S%xxCw#`%lnoI25O{!-z8P&htc%RN{7Zalww|*(cBQ{ZqVBf9Ximtn4E=jhE9a4VjiVUE0lPJA2~e^8aj^%{SdbRt4_b?(1au1 +zJEAd5(c`m}{i20QbqTY2xO~1lWL)Sn+c9(f72)>0K!H`|QSVt6%5XjnYFoVf*s`J* +z75Ya$$|XJCYts8&Nb>ztgL~dDAML%PbMJKMp6LrJ^dr^oopyh;H|9unrNH}CxqGKA +z_e_sIT&>ymU5NWV>*q#p-YE*5@&46C!9t#XTkj^v?|!AfZ9$zN|CV=+X?L4X?qWam +zetAPX(ern@5FQ@C0_sGry?EPlT6g2Z0_uROolEuWTnwPaoNZRl25sndBo +zh&je*W}w-zga-4I*^d3yAMJx1FNce)-=AguY=S`%Ysk0KdGDsql>BQyML8|=pty5V +z%jC2^FaBmu2ciU!jW@07&l1f)V?ld2`lWIdf1q~)BIuD-t{#qPZH8P_`|!M +zrXRWNWip%nVk`q6Bw0J4&s>e1b5`?tszkJrox6q2%b#YVVybCN<*$I!M-W3PD?oY4nP`~wN +z-ir?kye~RS-kn$dn|&&6i6e7|5P!I~pnq0asqe#GoSAcN4wl@TyVI13c +zL(hO|yVIsRnM^ppz`@}jw?JE%y3h+l5C2@{00Wt~dWOs&&l~)#bKDVT=e6g-{fpPn +z9cl7!x0T!YV81x`^;=E)t~*qfZI>l{w2eM8v1!TOmHw+Gxr_?ta7FD;x%qv?v9nu0d$l1b#Oa# +z;@0y;9((1&I*u;j&U*D?MyvPbrdMu^yEbi7P;@>mly=bn!U3&i;RVd6ns&9^QBu4r +zd|%+U&YdFf^BO<+X7D>yg&EG<@jB(@&1a`w&9W?AHQQx=?_jyp_{J%8YEVeZ?<>do +z++IYmY}uOaYX8-$Y-8w5CMkB!)t4=^*9J`xUU6PcS7!SIIRnR!#flGF&VHUSzxB*% +zM-kPs=9xEBR5K?3(UmUSp!R!pV))$qci3N~o_8tiZ{Js#vTWYECjwqssjHgGY+mn{ +z7Y*9NR@?t5{?2CAq9FclqG$K5Iyfb%zIHNC907X3VUB%N~}EK7Exl+RC2Dd`=rf?V@4w-!8LdTMfLyTZi%C%ybOvUVz;R96ZyOW^HdT-T9t)^XdT*_+d*Dr>ynF}-E4 +zL&Kk497^*nm;WnvSRL$Z(4_bIY2xn%w_K)p?RE1#WHZZgLsh`OH|JQbE@#)vb5u9& +zzTM5p#Uh)*%COWpL{RZ$WAD6~A0NJX`fXyGUtHd=cl{@%TG_*P=eJo~mTGJ*F%Lu~B6%l?0#UrnBXqn*tq`^X7NpK?fpO&|U76Lm<87Dqw-XUM~NpAMC(_KGqOfXqG +zS$+!dtk`KzS|8xcC+SMc)fjCtWrE&C9OV^S$Qr_v>_~{zrPJ-}f)JaGB^ID`NgydBy69Y!cyo +zpK4gEEp9~iibM&eIB=|<$kqDjTh7w6p}jeKSGm2IqvAZF<~x(o^k-FEhiwdaz1z$V +z+bhI-Xj$%LSGno)(MQ78wtm~n{uZ`N*)eWShf`fd^<5X=wO%Fo?Ns5yU-Cs4W{N-i +zX%rW08hrfmwD$xJr7jB&LW!Z6geRE;(FYSu6 +z>HH0s;sQ4v{A(ZmJoTm(*Sfpm408&_7B&Hi6r{ +zj3Im)N@>EMA8=Q4Dctdno6II3J#~6>+5f<;LHDn)-#bv=CutG3YwhKmb^U&;*g8#& +zzA0;eTz@T8>0#7^(+}D6StlDLZD%=<>dg2wx7L(tyYy8YaniU|rclQ-Q8O?jRYSUXT2{=BWA_TkBi?Gjg*FoYJ(HvTi@R>;Ko@dZ!(SU884w +zUcE#s|D3<viC9;)VWIp1e7i#i)}^JVI_&02n}+gh$oin{E4GR0&1nZ6ZKWq}uy1RbVL{+scA +zo~P-YcLf3mJWB2!e3EIB=WDKY)+0!X|J*-|d9%|Fy0Zn?@833MnPV5fx7M_`XYTPG +z;`a4nn6@T(3d0fZhMmE;bv*b(k2+ma>HaMBI)9-I)8@rC#`E84z1jcRDZ|hHR6xx# +zdCk|Wdgde_Wctn+?z>U1!P9=zq`H!K#{_bDb&fvNco|c>!cx$btZ#!Y6vV;AEe|h7H;b-Rt*< +zD(uhx%5*+c`^@$2DXlLy74Ne#So43UmP(zO*_ry|d`)gW%@!iFHP1xOp_&3Huy>ADnypaPkdRIuv7GJ3!B;foj3A(gj>&)_wyd( +z?2`LmCuXI;?}GDR-y_WZ%3lm}cQr}XNigl2%JKE$%&cR3E*V5jj<_~^!=CkiNzUnJ +zFS;Mu6&#n%UL(3h-N;+#aM6P`XA352PiyUAT4wZkXZk{sDDmluKThgKILws}J}v5D +zbl1n@zpX%gn$+_%?RKY*@f|%po%ibh?H4Ccs*3yfL}SBVmh&B}*=_hQCTi8ozF>WE +zBIl`g4sWaB`@iBHf0Y8-H4~K&nR&$p +zr8%i30YN!AO75v`ANL&I&uiXzN`Lu@1J+nD +za?^_H!y8}ohtFB+bYk5}H=mPxAN;xWM|%s;^NsGW6_@+gq&_&cTdaod)VimuPwG1} +zmuBB``SAIr$0NRHTQ6UHX1e<1%M*vSCx1}tzabyMd~l-6rR^VtTQXX-YQN}w(sY@A +z)#%&BO}8gz&FsCJIVZ}EnPsEO);GeNUDmfph3Tz`-cTL&ZB|#d_mfQ`Clkw?)odQG +z>t8qF@|K+bh3@&HK0i6!Z1^g^ZdoID+jF)1w_b&f%XCe#Vr=YXMz8R-AqSWkDg`>>=gcovbOikYO^jzq+ +zh`C-9!rgizwH|%2Tr+i|!FTBoOW&4-OKQGbd{#U(^svJA-sV#;zJG7}{>Vr2=?tSP +z28R5LQ;oEiO$pr7opaMeGE+3j&3L`-KC@FEj&*WYTg3aP{L{apusg@+#y`f?DOx{Y42S&Vdkckl*tn}e(vLb`(}6AJl~&}E}tnb`ctj*(&*Oz2qUkEbE?w% +zCq3#8ZV-{oZQbGcwrAr_N%d1-q$JwQyo#o|p2M +z{JXyUA`@&q+P3eXu$Q;CIP2CVr39%x9N)QDaxJhZDw?|d0b`$oM8rLjr|CLZRrxxM +zE-S0R$|)*=i)D8^&FTK=`tI1A +z3ma}eGH^T+a7~bZZc^=r!~>OYBCG@M6y`qD(U1sMNpOC)W#^n3O#Ju01n^b%=$&&o +zIM>%uN=HvaZ9&}L&CPNlPK(wr_-y4?swC^$z;;*V(Bw0ZoDR=FpTCcr-Pc*6YNkZt +zudU|0H%xI`dB^{Un!%2Oy?zm9(OsLZ*)A8v#j?A^92ULWI{oupwfMw*%@^7wMb>xI>vurzc3Ve=$v8S|K@h)&$#rqi#Pu77qI*<^z*0F +zm2{z*%>i-Oo;D>qKjAhto|$;z`YgYR-$WUv{_IU#Yr6f#c3A<=`c3ETELVI>5xf2KUD{b40GI~Yp-haD1e^%*(i>x`?yClDzW$JBKPw3GnJ#e>-1&c +zy1oqb_7*VPTk_E4jKC|2%XjO-)P)<~tj*uUV#IyqNI*@e;#;RD79vevD!4iy!f+u!aex76bZriW3 +zFJ}7-Y@hLd4p&{zsnsuL&tH^pb>^>d?e_^0=N2-ESiiau{yF`8+rBAQlOp;a?L6kb +zE1_lInjoX@u7B|kf8swqEnKi(C%AX!r*6JK&wux_U!R}~{0$vm*tvRC#&=yU5Ji^6=_KJmHwla^K~oBR7) +z#_#wa+CTqc%~ip3;SF{V)b{-RRrdMo4V&EX+3%;Y-hI=3_PV(1yNz$!vi5o9Tx`y{ +z$#c2pbJF9)hKn^fm1pVi=e?S~??$|HjB$J;*B`^rr7E&+Cu^pDcYHA8eZ3w#tHLvB +zi!u`sO8bPycA1k@@~pZP%=tZ_D$4MejSl&N%GHfob_KIDfn8 +z#$PG@%5>sW?5T)-It@jMKb01iZIXDobkSC=c-!E)hprdz5B%w5mUK@d-Ozh&(7x|# +zPpkibeQZBPKThL*%)+x*kltS7H0{wtWdS@h>C%}=2-MW>&*{&Jh7!M^`#leV(`RO9~STa( +zp!WSw&6Ntp;uH2wXTQ|(gR`8V61swTShl-Huu0F`^=u}WQrd%Oq8pTU_LN3_ +zG!9zV@%;9J`6fqK^0A4|*;_CFV#^;RpIaLn?#HgtJEQb^Rl?-0W+D^9)6|sDT#)#_ +z@={VvW01)L(L=Rm>QDB{sGPG}*;RKqdET?C`?XERAIozccxtDw_iW)A1K~WbMZIodsxZ)?($NGPoNZq{21_yI52;H6U9{hLnob@d_sd16zZ;BW;SC;Qt +zb7DomuN05JSizk4H*Uw6c5sUCU3KixnL`FeaZ0vlyqx$AW>2zwvh|?){GWg1Q`S8> +zVb~jACZM^*&uZQio@bl(*C}4qkv#CnbKbx6*Crgja$=bT?*ubXlcs%gs*|5iy#M0o +zeZd(ko$cb)gnnJ`-mJgrj<=wDA*0JRZ&?f8hW}0Iv4&Ch1S%x(`^7e|L#q +zb#JNNorJo+$SDTR5v_WSeUHV&!*3ouxS*J2l3@>P8nfabvFQ80+*Q);%o +z=D$!Hu$1S~#P?a#I3LY?zsC2YnN-K}O%67Rb!Yaf><~YC^ja^QEJK9JUKOk4$$rIZ +zqML3@9W+~#yi|tqv*^m4-&1D +zD8l2&!f6rzzW-aEvg7zm^TV^%gzfSSX5O54M{ja!V&dnS&eM`w@)us(xTMooSKFdz +z>5OB)1?7sTet+urt?jYsvHZ8ih5v*5^)`xUxo+Mx+34A=t*6c%yE#G2Ivz*$NOIyP_3egb +zU#7lMw!U4*$vi7_e_`YE770(Q&UtNe-PX0fIbxsH6yjJmVZHNGrcK5?3f3(D +zZ*=Ch)xD9)p7w9XLw8m2RPE2nH@((s96s}2?s0*4=gG`xOD4aqo^<0Q`xb5$0p%ja +zL~*6EMy|5F^Vjn@84J!T)i(FOD>aePdrw4Y+)aZ&wvTGqLF#gt3zVf}Mn +z%vRkrAtCeY*XsGd*7yVkU9XwN*|eFjfJawt`KygFoB7zA_j+1P_&)t7Pr=f6(ocUF +z=mxzKIBxYbeAy$@YZtjWUP|#kn)}yt_C%drr_NN7Gd?fYy>g3i|8~M}8OGQ{6 +zO5YvlW9s)PIL#@PV#-R(m(AoYyZsB!6V7tbCl^Is*avpcm++;e#ZS))7qu1m}^_xhx| +zAadzR!{rm4Jd+=Xhd1@8PL5r^MCH*nRk3>|0((^2_daErewcInobKDE>5R+cCh6Br +zc$aA2b!Xb$=9!!Cyj&2*vOLe4FU4GZ{>vXzvyUy}%3H0sulBFS>El~0IP^nQPb$3G +z-Y=}a6}-nz +zcvor6yyR(pHC5YKJ~&41n)T}46!B|}o>tdZr|r44Fh7WYUCDtE!^hm|7cORSc`V)h +zm1X7HgXgXqkPJVl0+BCl9oL3c-<)?S=d=SyKMA@(`h}Xj^ +z-r{bMXarFbJ%ZK?(+R}$Tf@G +zIVpF|N~@dMe}*=lkYb(qp+ellR!6+faQ+nbPro7->GNG&B@hzxMPSb^j?m`tf`;i= +z@>lho^O$FKO+81j+%(x>y12#qPcru%rfzv6`>VNhWB5+>GmjU4JLdg&`Ptf-lNSsP +z<;(ASp0;;CkbeEQHJ1(xgGl`36KqD$a^hO2TrPJPeN^Lq`OFix8(fxG84?fV>Ny=* +zb3sqawcFeC=!wlyYdLw2*Dj4*KV?qVGWlBuZh?LLybakUEMajIHmYpm*c*0~b(@l^ +zg;Q$W@9PVh_AJtwxu7IrvqH6`&&K1|I=9S!_S?Q|$FmK)Oy|s~zjL>E#e%$xml+Vx33RByajU +zT$4;`iZgKd|2{M$d5WZ+nEby631uVE>n~(ZojYSQlg&YOmP;99wvDyKFQ#|8%(M2o +zBFrAKBW3_EKkvzzZV>X3Qz=av4k?%Uz>-%L1euySJVd~H6j +z0@WYVD-7nFPm5Zt^LhV8=L>H)u2ERR@}K9-@tT-hvH72$o;_u;aP94XAB9~VizK)v +zaQvIR)F@nIaU~P0#NuopH_vsu9w{Y<9h+kG$uKWSQ1bd!w^`qfB!re(-W6H=tKevH +za>)FPmPx@8lUG06RA%Ypmrxt$S@>$n0+y1NxBBkeA9*@hT@bk4d_Ui0>nqh`f;Opo +z*~|a(uwIXUXwCd@MfIn9o&ry{y_u{ +z$v)GnA_}Evo_5% +zN}Zf|>RIfmW1FV*hH1|34KlmABxl}|oHZUdGnj(R-UpgBF3xdVoWtXG^MqKcu}JFV +zi5jyx1I>;t%t`UonsV0Pyj&=D)BlQ^uCxAT?>*FPxuueu7r*S8x1i|WnW-&P-WD&^ +z;{PyX+LDJ$&nl}oXs6Wt-fp{&f2*U$nln?jP7LZkAtWOi@IP(YE7|5<1{Z!U)m_HY +zl&a$5;VHaXR4hW!fq%`7@P(?^Vpeli2$|c?V0?N{@A{P~VY+9Y%yR2E5ioz-3??7B +zuiPgWaLwV0DV925T0Vm{I%Ol{lgSJpf`juiAuux~pdz!xIkUJlr#Ph`CZ;SkS*cC) +zMX~~iihzKWp5LU7=7kO`j@`5qZaC1;aG=3KL4bovfr*2KsZpV!$3ehBfy04AMS?|u +zYguQ=@o>}ms)et=dqmHF +z@$sYk3Es1r?_DwlgoE^owz>whz=ZmVZG7};nrXQamf3X=LL-+J27kW%D06=58s`2BtG9;o +zRWxv2oUW9dTNrs>_|N6Zq8Ux$^P5=(@A;lMKIvA})z#;{qN_u;DNp+@>29uYV?)ip +z&MBo~5pfq4BShGzxzFFcq5kQ{?O(31|I-;?>DIlbcTdDlhsDYqD|$74SFzTuPGnGg +z`#v)^U%g@VJ;|e4mZA}-`#!JCUTb*dR$@o%^^1-D`!@VGKIOgQ*!^{mv0{g>a!ZR? +zUYZ_$V$p?U3B~oE?`4&>k`uE;H&5|Mb})V&DBITeIjmoR|A?@IZt-Cbqe7jX+&q6Z +zg4!6&w>d|D3ubxtuhu!NzS`*edllZ|=$e={Tn=#@XS|PlPjA?}f5xfpD-Iw3uApmn +zjrE%BHzu+FPu59nfBe_o`{(m*7Kh|@m*g|J-rXs2e+j=_Q^5=kpMJwx^BZShE(uMa +za^ba8V)Me)$LycHsK{$!-DC8AXXt?q*#a|;uJl`3u`FS8m?)pH-?!RnPKj}bR}$xX +zRn_$8+_RM4mbF00;mU*uGko}@S2x~N_H;Y7dM)SVg>QV=*DG$g@G3Cr&CBTp-LI8o +z=H7ZK^=h(-j%3sJdfBsGn|GZ4zr(fgf6TRSz9!uFYnxYnTf=ryC#Jxj-{j6F!F3Ls +z-!!C|`ai$grnmh0#^V+@{Bj$o72i&rGUvm~*};ta)+F4Od_7@Zc%06PH8m|$)s-Y$ +zcy<-kUXXYHa$;wopXt(#bF|VFu7wF+TJ-kdNqy7%P8Z9+>=CQcm>@YPDJpTpk_j(c +z!%}MRtw?1%JJU@x@{j9-_ktZNf4!B$_-i*xt=h`F?yrUX#|>$fW2Xm#JP-=PR7qmM)uNU37QJvXx1i+ak7YeJ5JF +zX4Ah-URzpMO0;-AxzO`rw&xpZ3y*uRmW5uPncm-17!cd~@tMUAs{nxHTnZNe3oV(Aa8OkY>oS(lU{L}KBSvO;5i}@SgyHwjdfg$6{ +zBCWZ-v)3_xZn+omXTEW)W|0`r%DHYiC|R +zoqD8s7o$r5q=!OfSC&Z`xa^dc=C}|&@$l3b*Ia=pp?|?gW(lrMe3+|J9$;zvdWnhQ +zgq7XRw`$){mDfzPV0h+o>!rKF@3-guu6-z2U3vCq`RXfs?})z-Teq{#>&ES!`x-u$ +zFfE$j^L6`F9f`ML*Yz}$?}$^ +zi`MS>tir)_tE+~!O}8j}{h5u+Hz@HPl36QrqA{b~YiXLcPv*8&GEd^8S7}c4i`{nW +z(I(M%O4jq8ce#aZJM=IxdzHp3CjPlT+md>(C}*T-UrYIUD!Fyh`n&h8oQ~|;kgV-^ +zJZ#6A1zINCq-Jdt{d%Edo>=tW5rL!z?h!nWgbo}2*mzZ$lhAQTVNBEp# +z75>!BE>O|py1ypx$KIS9?{4$;CBCoeUlG$8|0`2FZC0Dd!E>zhr+yHf#4&B#%gFZ` +zw=aL?UcG6Z%ZB8+ALLJXt&Diu_u?GWvb_z5T7Rz*nqP8S^~`md3fu25ROFo#@(7e+7qR|x9{65cWj&WWgY{|fvx^^X4#;b^Z)N`T@TCS% +z+G=i(fAbFQd+@)F&ukXsKM_~fkUB=bQ~KBD_x!!IS$E~Xty}(|Rh;JN-@t9ZH{FZr +z&*AE+|9EdSimnQZpQ`iw`RAu%F6X_1{|3)GwV}h(?!VWXt)|_&OvX3%fBMd{ug&(^ +zsiP;F`J|%-j|V(&oRPb~Si!pNwDt9l-rx4;#RLAm`QjvcT&!C2bIAU!M}mcaFREMp +zKc7Wx@~`XN_xoNudhMUTLSV@*)^%+>`}NTf +z$4_JoylcYqKTEg#S8q7exN1Z1j_^AUOBdfy&0X^H$E3BoJ&j#L%%Qx7J~21W?VswB +zoD&eV@JimzeHRi9<(Yo1yf3qSVNus&MV_$F37_<+^#<}$<1-3bg`S4<+{&Z{uefG +z{$srM)YP(Q%hpL#gHw4#eC#$ZnfWulVRqfS#$~+XjbB5~`P584?aarVdHe5yFF69& +zU4CsoD7+(3jPKptjmGPv=d8aPzqX@2@6dsX-hAkI-!ik_);y+!T>lq#>-+Bu +z?fPu^y!o;*@2VG4?#=o~z5OdBeEze^%xF&AVc_~W +zymMz--6TcTaLZL zxZGi<4vxlzG*?^XWaVGBMqdGlZVyKUX^hNTaff4G}Qof6xm +zd~TA?vm++18)`p2tgm|%xaWSXOm2(tJhqH*(chCDC9^snY^ZI&?Xly4`>~+j^=9IK +zQ~H{W<=-W3xia&a<>MFcCqMdovR-}Sj)k0e({5&K%o9_0tPu38xVH4Xe(7DSzO~1U +zpB_{2bQgX1c4x`!g8~0C+6=kH!x&6zwPzXMpFd~M8I9*ZTo&7{cL*^^jeVk@Emn7J +z$8Xipg|S{AU_uK)Nq=>-gFUnXARZg83}&-$f)je>O7ly>urky{r0 +z-`WtpPA_!1+JxDUm+y#6ZF~H^Gof6i@nC5K@2npu#G@8F*hcSu^X%4w8xN}GMOtE# +zmVZdpaF5Yux?`0mB6z@IU+b;tnE`WnHH=QFt-8!u(;P3%nz}_(hHLYbUDJ2{c6a>c +zb7jKI8OKfbP269(o%^`jG1abL|4XJ$$?ClHH?`#HwB*jLKhJmWJ1DgDK(A_~j`*jf +zj^=MG7}uX)QK|o7RdLwK{bh2(PwS5M8deHF^pxjJFPqY(F^TI0|8)+1X|IE3@xmWH +zDvw^iX~?g!nu}_x_$&7lkv_)2hQyC-qLkEiRoA>t4(I^!R@YVCHFdRoMgVj +zPn>DC&l1IrV*N=zOWX}7{!#h8)$t*BT-D75-|qY0YAWt*(F@7TPCgU7-0`O7%N47h +zy_VfZ1Es+$7Su?eE8jqIBx1Qd^(=s2w +zooX)4uVJVW(<2cg|3OEdt@UYLrpC$)UbVUZmzg)O{97XbqiGfoo6MJBN6$SABp$H3 +zMwc9Ha@FEZivAxSP<6~*oh|Z`#{y;p_8*Tjb~&Xo7#1%v)@)dKF6Zh5CNqZ5591a@ +zly#f)cFOAqR86t|!N|!J_}}-TnOa}1>uTqG#oT}cQ!i{?aWQ${niH403Z|{=wyQq= +zdfN|Go8Aw9<-d6=>A8MdzTccBv0AP^>H2S<)w@2ZC)ymS_3Heve7<)~qGCf$(xIt| +ztKa4Xf4xyx)x74Bg+-FPbydE?xw@>vO(&o3*6r>KeSTwBf<3F@7qgq)R~KxH+24KX +ze$U$Zd|T^QsmtDar05pJ@R9rH{2nuTwHtB!nPcLPyvXIx)qU>%^UzmmeXl1`sk3?( +zM~V7OyZ-*FM4x3&seu?r*gpq@%$lWNI71?mT+1xvwe!8FoxDF|m&>oihvZ+)+zEjOLGbKJB2(x=}2Jd)yu1v9q=u=dER4SkCYK+H?H5q|V&$7e1f)!BINl`OMeR8-4Cn_SveO +z`JZtm-usqw;Ka_)XP#{opZxBwe{AK;%Na!*dv5>NiTn5`m1}C&$C{)m^U9KMRFwvO +zdAg6O)2~+`RK-F6eE8){7fyPI@XIc5erkEGYUd}Lv(tavSz10}<+;F15$o=-1by$V +zjr}Wd|H1M0=XUOgWMiJ(48GR?ka0nuIKxk#KbsHxzS2vK+3o#4XUQ2urP&5&pDkbJ +zYqwhK+}Cpk(cH%KnA=3zlWds3(XaFW5_H$_igU+7rY;Pp8YCZr!2b7vh-)I@!DqnP7}k|VP;=9 +zNZesdXtA9K=r(v>r$5I~8rW4D=%%x7< +z{<**Vd4gi)qcS&zo|%Rz(I+Rym;UzV^^P7_P=ijg}@V{hDH*t8+G(C?wW>df)wV?Lkek$rJKFTzg?Ad*xb#$@8l_ +zxr!|XZI~MFJas5%5B#^1ujgu|XxQ@?hTG%y&9*Y?|7ANC7P3jP_HN0J<`Sv;LcjF$ +z7xuj`esgRAgZ7EFFIMnwm|FV3)e|u#dMl%>{&Z+r_|NQN!|w{xE3TI)3bk`ye5!+{^yf| +z)!*jW8`f2F3;Zxj2!G)3xwlxaq;HmW`WyX(3497KSC%ZgBj>qNCHae5Zv4Loq0Amk +z$2-qoa__#-_*PUYc>T|(o7S&)ljmTWIAcNJT#qw7S5%+u+~6`(Y;o!dzokbe7jh=N +znf=;#7ZOQ-X-HEDGc9hX>2>z)htp20XR}<6w*E0i{`Cvy0=~48O)I}R +ztX8bJbuXsa)!%W>E@x-fSG%T~p6O!PbeKnQfvrp9b^`;)m&>QrN8GnJVZ1jhzroqC +z>}}oN=P4z^9liS^BpKh7-rsI=y41@4;x?=1*47o9*JttsD+qW99B^1PsZvLRr^T7k +zb*{a#f`fvD1ZYUg;eY@SOA`Z&qc1}vXv;ej2NMqy2U7w|6Z<1Wr=Hhq{>EO&2rA7L +z33Trc{oT3uyJ~~l9x*d1ht0*st*Q>q`y0xaF!%0Z(A|D-TkP5TEgNbUn8)>P%bxsg +z6PpBs{T<842QIGd@OJWGddnimE9AZJFz1%{Kb3Z9iGLBbFO6Zj@I8<9)AE1sU!P)L +zYabjbyZkHP3-%~Zu4?n+`KEF#zL9KsYiBKJFS%WFt@^l|Kz>P{oxxL!toJhMt-2;J +z`Z`g3f-(-)Z;l3Q$8pQJ79_*^fMn=5zs{z=Ext=ASWn4iERXL4<(_sQmO +ziE>-m&)z+*;mBMs%gb^0`xm+98M#ODs{SinY0*ABIn_hSd;T&p1!WVB$!2TzGk%vd +z%;OH9e%t+x@>N;RwRKIoLQ>aHoMSP*H8aSi`2Mykxb{Oh*VB5F{`_}=wddp)pPIrQ^G0&pFZDA^H;KAwn;Ws} +z@hy(!Uo2~KsYBu{_mfANyCrgS0&n$Rv?)m0v+?l#Zy^^HS>@h%K4F-1ZEe3WUs_q6 +z*Q11M2mWpkDXPeoC&bv5XUth5Xzl4-HL1;;#i?l$+pS~&syC{ro-NSNm#f|< +z)v%?qz|mW3scZIG<8$4cch53e>vPcX&&;EF`$CizqYE!}%(Gfi#_=`Aa(;Az&<8K4 +zEu}{`8lTv3XWG(rg5KLW4|;6>V|i-97TX6I(LB>sZ(U!&mGP@N?dL?FT`z*meO|im +zIpzIu-KWOz5?+g1j@Jq^uS$1FIe2Jw@ZR}Ul=j8Y@2mJcJv|fiKT~=)*WG`3d0}Z- +z&D(1#2WxNpwlz!?DdlD6sx*F^9eu}jS>s#xiCwKpPj-EIaQ|D|i&s9?%{E3_r|v&s +z7k~Du`T0Iw&ZemBI}C?=cE?KmdAfb;KaGH`w~Nl3u>P>WsF9T`y`j-9%zW*<&)?kA +znNG#Ye%O*5r}f}>nrm~>B$wUX8pjNx9ywYR@MP|8XFP4*W^b|O=Y`pV9nTmK)>i&@ +zWsYLedQdv~`K*;SH{N-MUj5K)w!C{*#hrBVeZLPJN|?2F;WDkDyguGL)f07gn;Pey +z-tmURnV)4{mRf@DPwocA#K|fJ6ExjV&pVTB8`UDXv1k3Z`TeJ3bJK;o6-(DOT?@H; +z%t3kUw!c5p-ThuxJ`8e;*q19ge}?ggPGL0`r_?70eUlEozsGifZ +z)7m!A-s-*m_3L}$qTfu!rt$ur#xNGv}VaQ>pPuQv3Vogzk#dnUzb{EVz_?u1eX=gJPcP|rCq`bgy#M7Y(M^XA{^{qk +z-Z=Z|Cx5m#XT3xt=P*e7zL@2GLf^6I{ei-pA7e#crTcGKJ<)iwma_lWhMvmS&nmnT +z8G?&3e^|7;2rkWC0VE#s`Q-*8g@m1N60*Hxig-2KH8jTVcB +z3E +zjf{|-@~Z3HQI4Ha>icuKz4kj?yA<;yadA-Jnx6Bb<*zkEeXFCwE^~#Ho}01i&+LBV +zmSoGH_xOLF-eP#y{b)q#xp=diKeuypPS8G7yk%cEgKoE=EWg9K+A|%`y=DIWzcWMM +zxz@3C)$acFaWVX7zF#Rx&^e>5dg&1JY>{tWFE4#kFTd&Y?a$n&dD=Tz7d^|IAFa>5 +zE029Wf9a&Qd9p|Dz4BeNyYtjPk^ZlaJ6SdEH#BH5YpmR6VNt*5=*&3w)0)SQFKv+0 +zf32FjX34gbe-jqI2)bjsJNgJa|B{c}kF+6I>bg5a +znfqCm1TPse$>3WLckbrnNaLQH<}PbgVtV8Id#<9;84GuFdzsJwk+sF^BS%eS*q#Mf +zPWHJ9e4dfbp>+Bc|NcrY8K1nDF_S6>GGDR!p0f?#43H_S3?I07*ukgpCY5A#VTNt-|Iu +zHGKVVoBD8G$eNPQc}CAaPkFk8XZrFtD*lll8GTk4h41f=d@8c^e6<{Rwl(j5P3N$+ +zrE-neltaC1&tIBi_*VJK!n@x)5{y%O+KZ1a5PBpY_(3K3nebGzke6~jN}v88Gx)cZ +z=hqg=7p^MlJj;DJw|r*V*_V}PIOR9*9p}h{3IeNIS6naF4-?e#yn6ivo5Vw=jxAZY +z=Nz$A=KdSk6xKVj`{7Q7ni2n$&fy{k1%zb+u-qdV-3|RQDe@ +z{FG1i)CqBH*=}T+@N?UmZ^3W2&Nnbs+gR9jSmlW5+9Qe5MVkx`8R{oYT=5G_{XH>7ZugU5;>oKM6CzBK<*{|rG*kdPq +z=~CR3X=$f8PQ~eTZm;NP`oL@y8Nnfy-J2emx76JBOc4J*&PK`Nsq{TzH$!BKsMdz8<_xRp*~vlVs6hoHx^P1H(NH +znqW_EN~<`i(%FM)AWU6yoL&i$c^~-)dClrB +zJEbq;qxtcvmHG+4oXYw+&pFNdyblwfMUB}qhaxXhBk7fipF!Hk{DL+2FwrJDW#s%+E_N%WtvZs>4h@Y)vvh?$= +zyVK+{E6(5YZ(p{~u;H{6vzm=o7EiIk|1X8pM4VduNRpNA*z5LHn7Zg9ZK!N=6yM53zT +zk#VxVXyLE7l}p;yPCxVA{d2B*UrqF>!q&AP4IVg8WVj*Qf8@fMv|Oo|6Bt-;w6SbS +z$k994%98b3$5oMWRI~(%&lSseWj2Yi&o`~HL*Y)_@ +z?IZ!2AZ6~Nx*uzg{MWb`{Nh@aShS8`wo<{xZ$BPw37w*2x~uh4C7<~ViwnLXj7pza +z95xu1X)zqzv{>js&sL7dCnA~DdoMjT0{j +zi(6&7bH3`-T_l>i_tAR8ng7@MyUBcQO5g}6I+Xjj?A*ue?`Qv9DgX48<&|K*iM5>9 +zuP%vupSIPjN;+46E6)P&G-1ipH+1CIEnKC(YEivwW#5@SK5G??S12F;9&@Xg{hHeB +z3zsi;+1sq$R{k%e{>%5aACoMl1s~LGJT0@+)3=U$_p>EmvRBUbK6%LOL642Ei`S=} +z%ub1)*otOpUAq6@KKbJ4x?NTTCcxm80bCpx^t-2c}UVZp;qMP~m +zZ}0H^?XeaAc{O9->zy-L+@=anV@p1|-hE#8w$O#EJK|T~ +z?R>{6aAy78`{j@M>q@`mB;L8Vv*f^yFB!o(Y5X;1dds$5GceVVcoS3mF?mtZ^_?%4 +zwLCsms=T)9USZ&(Vo^=!oD;VXzDP8gr*_@o=jCtT)bDQ5_E6P@{RVjR~z>?eApivJk^%WPMo5Q$?D=^*f`G&7IO)EFv +zwT%1x=$q5_YmpZJ^qzjc$Ft6u^V%<`sm0&SYZawbq(9iLetUhUipkG)t`;|+D>(gWA1+}mc3nb{9D|1k^u9qsGaT*2oeD;Ej$~c;U8b>WtzK&M1F8v!(jh<`ZkQdktJ|o^Po0 +zXVG#JmJ-X2&bx77`u@)sRzJ2_b9m~qm!|hNw{EEGs`#e&dcN_yG}B~DiM$)ecRe=! +z*^8*4d+_W!#3`zrgV_4|q%zUFeQ;jc}o +zRb+iV-#kK|^U$yB!q?b0ZTR*KCb_d72A%9(zR{nD1YqUB#J9oFjGWYtpr2?UuVXz?N`bE +z`ylGI_rs|8{OiB`_FenWz0FQ^}-u>13?%MUP?R8Bq`G2!Z@@v<6-2WBx_gXvS4!au%zGm{Q +z+dsXaR-^6pe%l!NiATQP*IMV_Quud&@9W^on0oyuzXDXQzqj7GZ_25!kE7Pz=Xmxj +z#rXR1jXUku&3S$JL(KoT&wsf%U4O2%%Z}&L*NfBEoqt?XyJ^Mi#{seX-@f|g6m|Xi +zt6g>y8(t^(#?C+b=2uwe_3*^q`>x&o8vA5je^_~~+@9By-^R)xfB!3|@jAOpMeT;e +zua^hz*%$u!YpTL}d$Y<~>C>;%Q{(2he*P6X|9ZOM-n!_QUt0s#%Wto$Rlfe(zkBaK +z{rmRGOOH`mr~eEa%# +zMf`p3KfjEgTraoYzi+~?uQzY4=Vz&}-Td?Q>l^X&wg3Mz_;X$Sdws1k +zx!jRBe+|!Xi;NrU(TDB&q`#efw4vX*{cl3~jpY{)+eOHK%VgMiKU?6pQQHl1?<4zo +zmA}c$Z}eB|{CmjjO?G0^{{rFPJ8U+dm*}cB2zs-7Zc@C5=|?Yy2LDhiRu0;=JPvAyxUD1z(IqepSvXzPEIKq`_aCzzcbOi;IhTTVtK42H9i_ +zva@9LMV`Bk~`*U7bCs=o@iJ~S4J-hTGi&Fmjj{$2mfx1&yIXI)xA +z!0x&x#nf)KZH&KHPG!IGkX`V~`PyS$EtdpdWZCb%(x_<7xAm`!`{V-;Crw&hmv(lk +zW#hTE)%K#?I~HkQ7TrJJJ>yqag+-L0#XlS8jII6lk+*DEy-RQi#_X|R<8H>mzQnUa4&PgyYhu%Ulgvs&+%itwTJoK +z`+JGoyqivM@f1Awt%YsowOi}hU$AFAx_VW}g6HGAX$taucaK(XaL8KZpUKG>vR{g^ +zNu|^4uiK{D>AsUpo^3d{mxuY6`mZlhQ@&*H^O?d}nrUMErPlu#zqoyNu*uDaaE>d= +z5sVo*bv3PwSJy5&xiZxDY|B&!ew{|Psn%J?4$kIa)QP`zc)9Z=#;v*2|3rUQmArlJ +z_wvr3hIs`S9z1N`yth)}*wnk1tXlT0*y51Lrf=|d9!rI=MVZ|*wpX2!*Pr=bm+~wz +zKmGdEiooL)n_qEcY1S}Jj`aC-P{8f8W}zTgm4jz!Mf=gEuLW1A=xmtnaOqQDpUy%y +zYpW;X!7@LRs{Z}Gm$!cQ{WYd<9-PTJD|FKHm(Arri8UJ+Jj{6Jx6oeU(fQSkMa%d6 +z=2`ZngHv)v(iz7*$418FnSP~l6B?6usn=}0R2Tl-_@H{4!_K!Q5rLTp7JPqSU=_f$ +z#qODVy3%G=!`^ca!Iv(r+x6CGb6nZG15sz#FE02!Rb;VazvE2x>1`{rq(oFqy|XSn +zDPJHpg>lDJ(+sg+_pdE5TAsjQmhtC8pSsx#r;ZOH0lS&+2nDsgbhVgnz#;0*Yq5BV +zBTvWyN5yr2%*!*KXJur@>q%ZY!?fd9t!Tf#tcZ=z)cQhw|HdCy8tuQbcFxvP;aRkR +zQzUuK=7jUlRI-fgg7>fSeB!v*asy^Nd5) +z7ub%p{I{PJZkO>m<{A4ctC!7OubP|0f)56u-Y_6eoH0Qh>smxH$?7 +zyE)FElbaOj?4%fTrO8rxp`xCA$n|I8JJ)Z#_)aQ@v+MpwZq+NPQtUxa>$w~y!bJrq +z@^{^dY1tw>Wz&=y%Ur_+W1VC-$qD4lH`dMEwD|w^ZDE`<*urbXxNIuUJeaqrO-yLj +z1m>_?tL_vxHMjV=-w!sA!kjb +zM6V07Y%Q=7ReHH^x7xQrhHnWcTR)zESlGPA`K#}VSmoq}2_NUrneOv50=P!vJ +zA14O|EcEeRf00$i_6qN&Tbqx34LH<4@s!-GLX~;nE{H$czf^hae%9B!FHFyDbhj}( +zx<&O#*;HMT&D&Pjtx#NdZl9W_vD42T`5DGM9dX+x{FP2%3f%Jh&9ND^d<(c-{h5>hOx* +zan5V&z3EO@ey*1{O;fDuZMmlJ;%S`Grt#y;_O=!GxAI!LY+lAMP+OsJvt8rP@fL+e +z{d-b#yF0GUo~ziI@op^FM{l`RFI{&u+mcliG%R^Iwk+|LC>*YgKn?o(kq+=U^-{t>NJdYicO%RNCmh +zW7h}qyJ}m{uDMjd=t_0P#@m^dN)^h&S0y_OqI!3Qyyoee=$pdC!TujEAk@U@{aOm#@QXMFBcVjFo;w>pPg1;vQRiR +z&~bmsqF)!=z8#sa>pZjR(Ug07ALbdD|9sIoDP!&=#u$H*hK8?Cm)iweJ=H#%tnfcB +z$>EpMj2AyE1TU-<7ybdwBD%E +z-gbG$d*?@I&RRd7sOa}>_6pXj3t|(L&uz8r>auf+>3Czpv$#CUbV9YWXlkL|uFJYp +zp2}p#-3scOlTmEE;33Bhwg-%2d23&!yNb(CJk1pz!v2$O*P_U$-esTtZ}SISV%z@W-Sr*z +zj34eTnwX<$Q*be)#L+=I+ATXq(#^r*h$OLpwca7z7TP`Z2WXX&)kH;e8H +zcm@Y(#62Rf&+C>A|BAk0;xUbfIfBGBuLi)_o4 +z1J3EsHhOFf-~2D$@7`g=6KlLG6B@v`Ugf4o9x{Fuvlo_UMY%O=b7Q;_k*fY%u&K%GBbt +z=igqrnuNdBo)qYMxk57V$&F*0z8Z`3ww=&eJY)Gj +zm)C60MUh%Z8+nf%P`%-rdHYlr=gK^{!06M-UhI#0R-K-m`-0!qhAH;TC(DamarTS* +zC8u$Auqa)4VcgrgFxlFj@xV24E1TJSS1GU@64AF=6t&gfuy{-K(dSF;X1UorNn6|O +zU6=LI#7mB2k@bcqDPHv}FDfrv=DW)ENwwxqF1(<0RnLE)d2GsB(KUg*HBYWCC>7U_ +zpK#%}#FpviTFaGpnH@VXxbWnKPdR6QJib;|_T)iEu6^y+ceiL2Y~PG9}M +z)-t@Ft!rJ~L$T7YpHIJjwLRz7)&Cz$!{wbD!{rZ}$Nl9#wdYq$c-2>Z$#1W;eeSJ} +zk37LFlg?lfUXouBteg7dkGwl42+Hn0tGBh9*kB;R+JrE{jt#U$V$t+mh=;%$@OoR`flO+y42#hGw+|z +zyVG9Wk=Yg%zvV%yW3{krsvLgOc2i?Oi!beb(m9DK~7Sx0%G6onNQ2@ycx*--47QduA`+XpvL@ +zdCP&yE*(3qIq8~~$1cwBes8lj^JI@(*=tSDgI&k+#s51vf1LJpX&{Sj;YpX2Z}u-T +zUDIE%SS(CmazVJ|2XEfZEsxth4w^g=biF9dn^)&-s;{|g;zeP{J#XJzGoO;W-23$X +zcebU=_Y|2aB=6|>n_9JhSKFgaOnXIH_Aj^pxZ!k`+Uicf++6QjXa9G$ZL})iNn^2v$=vSMQ6j2Ww=B-3FzX(8WNEbb+#c|5=jx*K)*X%;U$6*UKYS;7@ZhvP)!Q7duQb#@!EHF;bk@m6e%U=oD;N{^z~n-Q_Ha +zcP>Pnss_+gFSSG+d)r@o8X_m3RKLq$ +zvGn*+{u`XLWIlgdp?j>Br!qw>XP+a_%S#uQJ`hNGR&4h9W#2Y|`9Di)Evl@hbJ(;P +z7iO*f$#N^>VuD)7tB?)0UE6=UY@OhK=}FDM!~(gX{iX67%I&IoCA)3rzpiw*sj|Cx +zUAxAPwg2_|&y`l^exFazwXOXn%|5r5tyZbOZQepI`*wjv{;zMp?%ez0bIr7c+SN0x +ze|=fMSL)L8qxYRc*S~t2FHslg`SNnvD%Y#t^P}`kSI$s9l<<%D&6ktT$zQ+Byt|KK +z`J&MJ^a7A%YS+WCL-vaGM2)$h8+n!ZXZ1V^knKQohu +z*+l+g)vS$a&1JRMcH3F{|Nn7d(!J~Ii=#?D=T*2H&OU#naHpY?-YHSZ&ntyP9(#Rw +z>esU+{&$7ViAU<4r_W}G|Nc{~HqnITxwO6K=|ge%K1%F(k)$S(EWg9i=acYU&A*Hr +zxdVP_7TB^KNiJWW$EQi`g#sZqGO +z^gS;>_rvpRs-9P`;7W5iC2qr4{h0NK`yP|fA}%I%hGW9vhw3T6KQk*7 +z2I{O~yz0`ODmq2&%Ex)l8N3N`Z8mz5N9|ufn!j5^9cgV=lzr!A9~B2^Z0+I +z^ycf3jMM&py7#YrJ((As_J57TTj#%P?@x34of*9{y2j|_hrgF4{x}`JFBWx&>quMO +zw*Q^XhpeRdjxYFi`|WhKhwuM;DKjlN^K`=dO)vBM>gya?_6RFoS?RLkev(4O4SUXj +z*9Rn4`#Q>d+F2Nj&+yqGAZFBge~ZnVhngI9JPlI9S!t@wC31|n512Qt^M6>szq_Gf +zU#`RM4`;TmTE1^rfWThC=xtL(`8*gy12;`5ejyUD_4dD&JH`K0&p&o^@vL*PM}Nrv +zi8ETDH-qI*=`qO*R~a(4{n|At{D8!yztduZk)4I!+7<6asUT^zDAZ5Y9>h-*SrtjWeThs7pu1W1g{{{b(%mf-r<+2$< +zm?H0I?-6-XYTo~<^_$iO)3axS7he0$Hi>nY5QD#&<`cDG5%Hu0$M(%ED{D!3XLbFQ +z@S~)sw;tNA=IRp?O-N5_UcqXRXRGq&`u-)`tUu~y3nffri)y-eW`(QV>{U6r84tQv +z-sL=Z?(NdLV;y&W^A_xwe?3fcqQU+~v6Sl@e(!wXWy2_IvFFAuealGSZQsthcTC8; +zaHnK^CTDtDn)WHK +zD1MjU$|1#e(P8DYXx7Ml$ +zn^(fo9q}9oSW-i-JNR6fm6%yJ&B%7yQrCc#0~c;jepVH9_mE_#Orz!Znq#^>Gd10_ +zUB!Fm+9cN5ESZtr#^7Q#v-H!kzfUza9tL07xxGtRRHT=yOTxW%()X<|CfX>4onQGU +zV=pWFM7C#P*&PBtW$NBZ-(3f)E0dc1Ew6s?r-rsi%+CS1oA)V +z`qm<6nUdgIy^xjh!NRU@Jg=P`U4Mt44=!ocymk5xpV^|Ajy?(yZ?uBF}+ysT#KGX8gX +z`>Y2(8Wn0^X07+ny!1I#*z149%Ea7FoW8eO-gVj>^nLL{ZOe)2RVmwRduA0meOH#4 +z*Y<|dsA28}vxZMsN`$X|lgpbI;Qh4ByxK`R?{r*T#1z3JnI|p@TRYr*VPML?ug6vG +z`)Tft0ld#rZiS25x&IOBxz&;E5UH@q=dR$4ovQEUkB2UPA0zYCKlWhUq1WvN4#}t8 +zwQ{&BJuVlWxI@YK1*o^#pGYh}Khk;;}A@xK>5kNh@a$z^YQhYNx?GUKN>Ez;Aw +z^KGvmn*xjOOe02_IEkjRiw0Njw+l{bU$9lhic{m$QoXB6EBIfBpIU1y^skd?vq4At +z^h%Z|6D$^OsGF6*BM+{j@Xs|zd29E$jx+Cv~NlK +zeRh|Oq~I_9yq#Vxmjs_J)aU+s+e3R{xstZi?8m33Z{{dn?A_;aP1sHN>7_)^ZJv#} +zp&b$j%3AdPr@a-N6}@Vf{KD9eUKm`DiFi36P$;+WY6B`O8B&@2+l9OXI(wZ +zW43IL;o4QXb8p+Cji3K3Z2B19*R_U`tMw_{E5oAWN)rOLo7;QlFK<**NYNO#dFY +zCuW=Ui9`Nr7Q$h7?#@0fWp6L3Aa*z9W_Po}0>yK?C(L)=&zQj%T>f5-Uo_|Bmv9D; +zg1pQW|7LIGb3S6a<zj&b{3nTPV{9$(S9 +z8h6XFvG&;7IgUHt<%k_9HvZkRr*xS(0}J~r%O)9brt1fOoo%UnaC>H;>*{w|M)~at +z5pCf@7oPrI`LFn-!G|-BYBe9uOv>M8vUK&#mCVf%}d6{ox%c|7QZ&6&G{z*FJIe*-FACJjVZ)S2a?T~W3pp`O%W7fYj9J7>4FC6{o +zlhgA`LSO~&qRdQQPvZ;o=Cv(pcGR(7baFz*J*Rr!*?)c|uT-7Y`u@uY=90bB*l!-# +z_4`0z+VW>1$*ix}uhh&u$ENVWYt|Iiv#$eBsr+Qv%5&w{Oefakg*X2wy$E^kbW!E0 +zPmScp9I;5V(C(JSsh^MDm~ui;?e$UldFe-{9Z}u9)APiOIkIQ-3(c6gTh~cSbd=lo +zyC!`UzV!RRzh}Q*teLv`=R+xmhcD*W3f3@$MKt`r+V^-{#xka#Z)aWT>26YuQ}JZF +z5IHw-b4Ib=EuRI8YRYdvzIO3hE(79c1y-Mxs9kt8O9L!&&HW~CEJaD;I>h&Ad +z+}63waSD9jZ@;NeI6F5=u5!;q2is_cH}j9qEoIeU3cR>*QMO*5T4=>-rk}q87wbhf +z$o-hXk)o99pfTH1q?z|kSe~8lv20e8d$v38&J)d0cNR|D_E0+d`U|za&6dt74|^Jy +z&5n#UVM=_J<|1LVChy&%yPO&86;53EWyrC+)R?)dSMiR-&2yGf-_M@A5vn>tx$v~* +z_g|~|jW)Fv2c^D$cDk&*c%PQmYyIsv&tFhbYs_d~(G;h-JY`j|PG;rXz|Kg?Z%>4^ +z{EDk}GCn_XoM0I7A$%F%bv|K+jxKhYy>;iqU98i-9JyWdnXlsQ^VyHeUb8fv_qe~t +z?QrrhHNUxrUMzJF&h9NR36VUr#Q&d{Bx}Z=+0)8C)HNA1^7AB@@-Gf9WH|TwFhA2A +zk&w#0KZ;hQCvOkwd+^SC4{O&~p^V3`Z6B~Ou!K53NU1u_lfSuWpZmi*K|PV5?e|yx +znP9>p@kSyiqEmN{)%#~BmrmHk{oFZgvACc2gD|#31=A8O1d}XGJ&wt(v*kQ|;jFOb +z@)H+N&0oQBwSbS^X=NL)`U{Rb2k#W5Z3y4@&_rLM@=?LJbxlj}Th3vynv?hcYt0*3 +zzty)+gc;^+x^dXEPjIrLyx&Z_iPzqUUTpVt{_pp(Z{o5?saxhfTIn{Y|Ni<5-J(I2 +zQ$*iiJSwEVZpSwF1J^G`{mbfO5G`_;IAPwR`S1P-clxY +zQ$92^{L^na9V>95BYP>=Kbee!!Pm^|KL3u$nWO9Yv9jSt;E8~^rT@01v7TAH(dCNH +zuK9Q5)cp-N$~*`tWZU4g>hRZRbJ{rOf+@=udwS(?DS`R2nJ +zpH^=%Mzxz+n4m2t9EQn +zJy+xxKE3$f-m`pB8~TgSwI=Okb#Z8s}xlyGS^h- +z^@HauvR2pA+|>3+PIMQ0u$=eu8JFh^%dLM2*WhLmw{7;cvf`4}jW6lSpY?Q~ +zzII!ApLg+t#eyx1gAYtQeKGRk(FuKiLH~a3t}a>k_juu*o}k&Bmm*g!TFG!Cy{%+d +z%9WOPEIe#+fk&RN_;6T=bDGn&t>60FJ7qey@0hvQetN4`1e=l9^Uz!Emw)Wq*cW%U +z=!34J_wo(?NoA8>SzcyJTh?gZ#dx4ZsOhB*f5wrLS6u1UBE9wD7pFOtEL(MU*0~?D +zk8kdu#a`siWjXh3xLwSVB|_Sy +z-md9Mi3{1DyUcZH@qM6wRb+beIpdEBsd`(#dVlBG-#k}D|C)hr^QSAE@^QbHpR;BA +zw(EZOA*Xp)U)H^dpZi>5SHPkKzAY^0qRh9f>#?YdRjHA4`MBxavi8-t`tN;8(>8sZ +zf9QDH&U5jc>i&OUmT!GlWB)h*!O@2st&*RAcqz^lr1ntc)32{LUh~w1UNBFP{TK6^ +zbLZM~C-p`Czn(MEtzu7>D2Mi&lpl5+FCtI9bdNmZw~I~c!@8VP{c&m?Y#|Fg|F^xF +zBBExk_A;>{MV-0g%JY=;C)?G235CVQ*6E2<#o8xCo>+BLv#_DWcGhv;ZO@$S)6+ja +z;JPl+(Cs64_;R6yV&u>FV)^X)PoMueU9@A#NBjC~b-@9eD=K9APMqZbpt)30*Q5EC +zWc)%|`&AlJ%Z(@O{~waCsc?`(``mbGQv;Xax7V85p +z%N{D-J@=}UyM2F&M9I0h6KiZsR!%s(w>2?i#Y1zJ*bR(oux +z`w=f!+XUOY9LHx_i{82uX=VAyqC9J@MOevH+wwlO8=v<5tvxcCxtl9x!l`5D*)=A` +zR$jOw*c@8^jLDmI;pTT|qRN}P55$&#I?d8__vHSli^tzx$vEeH`dyFN?%?#}3`b%w +zwI1AVy*T{RgAo1sjC;SlmcBQ)S%M`u{^!jf8*=72Z>(b|=KrvkJ7(L1NW&_wmvdP* +zEZtI{cc8%N@x4x^dX0d$Qd=5#-hRCC*!ExN4jg|m?_%!L)%T4PlWV`_{_%6*T2c15 +z{N2>)B3{?qL%&?&K0c>TsA8Q$tBIn*`_%tVw*>x&b^2#CEz_;orB`vSVC$b{2Zh%i +zEbifbz&CHVLP7I~FR>oa-7A6~Hd{tr;yiCuRAge$bzbS>qQkA~h7J!qD$ZJRo3R`} +zW~%go;lzKFvlCn|-)~>O;9P0Ghll!+V(~{irzQOt@V|3w?dz#3^L8k2?s>gn)2XIK +zdyE(ya#Bm&Q}Z(O8t=R?QKubfLfC>vQ +zqf>)`0*gV@1d;O@6E02SV_CB1|Dx9AFZpB^ObE{8DH41Ar+Bu&d!^&SWlZOnm2KE} +z)3I&)Q9jSk)s?MRZ67kEZmd*E2xV#sm{hf1_Kwwtzo*K?Z!_!N(!UXOz|rfQcAE3L +z)z=REg +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 +zWR<(0p4Zp=8dslkC@1(FarK=eA +zs+%HKCFoq8Ik`0V*r7S1tUHzJ+O)1MzdLV%jqHqLOMl&I7W^8K__=&#-sdWrFWy_D +zw^_a3R_=DeAhcq}tGTl+46kn8SS}fSR=j@k!&P0?o19FiMf19C7WwtcvMPJk^YsB& +zxsPu?w~TAPTG*e2^L_!fg7)W@_=)~Xs%>>&D7WL&>aQ))xsT_rJ;(7og=ektixjC- +z^RwRhiwdkaJ0@b+u<9)H>g-?TMfDu)ZULfa**cefJN9bXozj0sHL#(6h38)u--Ix2v^oSM@VPV$H-%susV}>-%ZKxg={vj`2yp7s``YB_yN< +zc!fS(kSn=5r1i+>J@11|W7t^@cC;T|)#b1)uAnvIS(E(Moe7>(oPMrd#S(s1khSQz +z`ML#%OqZ|DayWiq-7Cq%-?iuDyE=VZwQp~DtnHQG0kfS;=Zk9buI`fwyDJxV_hrg6 +znX&vUyTYY+!>DJCAy~3h@zj+nfe^F>UpX~o+ +z=Y#EwDozy3raI3$v+PXKfqwNp%R(R5ZqWI=($1pOd3tK&()?8~E<|0;U7MAXtbP9g +z|BY2#3^_@wfAO#wL~rHa=`{J1Hb-*w)m6DyPvl;e%3sY?tS|NZ<+e-J*|RG3D%log +zpPc%)tkCI8!S!<&-ba|S2j=Zu^`|RnqtJ5UxxEK_drBsGJyE{4D{IT7l!>mY^{Nby +zw3jfOCim~Kzy0G>)4|nE+>J7ErZ)@E*6h*pT9In>J^pXu;^I2flQ!$4nD=HK-zmMr +zQTfaTDXH%QFXBQg*3Y^t!{46%`P0|iKUc|J^5J~Bde;Wu31)F2|I>}#?#TXrQmlU4 +zz;fY>i7`_Xv<|g~nSNft=fb#V+9svj467MqUcNtQe2#JT!Dr8xPyXm{WVj*AQ>)%u +zZ0$@LnAlu(CN*bo2bc +zjCQxRwv$fCuIgNCTDrVeZ__0fk@t(3`W0lGG^?YhsyJ@Gnp5M+_$EVFK=Y`5nnFbQ +z(fNziUuWHSn3j8@?WeDQQEaL6uCn$`)vJu|9$h2;H|C=2rnqBkKA7$93jKR&we#hm +z=5O+y>LTma5}cH`q}Ct*;%=7lUgGlV{scQm=~JcWD%SZ;yD+n)Al>YMUQtcfk@N`e +zkFPyyecFzOZ{9Clu`NI6?EJ$9SJ%Jlu)q0c^}nWrF`E}|`lpq_6mqo9^aT4qajUb> +z!rtf$u4BH}9yaT#kzT}k!+8oSY_G*sYg0CSt4a1~zWPA!JfPvbpmgpEDBFbw14bU3&Y` +zyuCrSSA}GmvaY(Xln|BQ-1+3m3+IWiSuZZXaj#LK_QR}u{1f*T$6aDinUXB2u$p1Z +z>SftgB|mTcTq7pDUVrPIpGkkFm{tYo^6ku?#~*&%tNu^TR;M7{n^ktZ1IkZLerPNI +zQ~7iKr_VoKK3itm>tF8vH9aci*Tm$;2{OGW;@ee@PkcRLW5mief0Ob9QkvW|s?zOl +z8_!q$`*Fd~hO<2PZbemQ$gsrxkg>y+cH^YgEzxJu7BZa*_NEZ}2cbKtIk**~h(7Ou0}esjj2mN0Xt +zHcKuI9>Enqk~@Pc9?aCxKOh_bOm_b3ME)lq1D}0V73E0iUoZDFE+kBNL4W`Cn)Ox< +zT_-sHJU-3vq`37t$CKYjw7>kCZGS}bZqdF8{uhnjd~n$(q0l8+x$EcUjS{bd18OcF +z_tx>9p?^%syDFf10@stS^9>L5#pdr~dLUSHy<0-2yd}b8_e0ZomO_qKPb3~H-xhyq +zq1b*w^oskj_hM<*tzbQ&wXpcst5r{VYQwf9XjYoO +zzj*&x?bN4kmNqSFz&72%aWyIMk%Cmb&7 +z34U>TrNYFg6Fzy|dLuaX_?=VTlY|3Vrlv-mNUiRe*7Gwv^KYViq^?v$~5+PYsIjb +zZ}#JhwY#!Rd4+{CWOqsb@e6x4k4yUL8L`~1QcotEM|M|!tNpl`cQjS0I{ta=>O{{f +zAI0DM*EQ(>T=e|?)N8w&zH!_y-?`Y->E;JS2{Jb#hD~qVLP>1vW7O(Bz +z8f%}Q`xSC}_u~S0C5wA!)@7PoU$2sE4{o_O*-Ph#Z{sIXr_>eh_re{k@5r{TJ}+Nx +zRiFLf*19>Rxo7wb4f%SdWRqX82Y3FCy*DSfU3sTKuKNYC^yxAe?%7P4_~+xj2kS&F +z{B@H|^&ctoXYUSlUAE+BkMO>W;d8d~d32wgo^eG;$d>WabH{lOh0BhH^(AvmH2yj{ +zV82KpdwFJI!Sim1o%a^hUEs5;ICyLkD(jt5G= +z^rsd6cMYF)@+LdOv9k;kkxaa;DtsRpl6k$oEM~O)Xo}_av^ce7?~atG@=pqU56_5M +zlqD>4U(YN1$%lj)NftZucjlLUKEFmc>De2bV=2F#KR*2{yzQ)b%G)Uy(&Ea`IqW_> +zU#jwy5!!d4@mE9i87Z<>ih^8dFXeKTT`xU^-iDQ#fs-pj1iac +z8awknQ=2fcQRz&jz^=E^OVr~p|Cy|M`$2G>hv40<9ekT^8C~t@TX6e?V@Qx@p9lMc +zxD)b*C;H3Z9rY04N?25o{#oWfXO_|?mE6gH(6-C{P3XlL@uCyIE39DN)KxJ#lxOyaf&itWo+Vw;Ct6?4I5<&VFZSa7 +z33K;{niOYkGvCx*chKi+nuUvTd{W#j!7s_B@Ahrs)3w;s_I968*JajIVM`cFmj4lw +zSp6y8+~(Tf`#bWE-;jD(A<)Ys^=!t@cY>)`r~21F^Gf*7SM*=+^FEFsb(6=B7E0b+ +z5OH+=igKn2dd^E%&$vEU^v2b8=Vv0itZdW7qV`wnzuft*K1EyUz0x194Ug}wUj5GN +zcJkr%|F&?aWlWg1ptMn|#6XeDQD%O_{%bRjvCJyhUMPO^ng02?+w@#66^nB$d&;+0 +zqB(2Vzg>5(R+YN>PPAJrYci$h-@MfqB8~czIpr2CWK^1bu~BM)>f(s2SADozzMZ_% +z;}+gxGcD)&mS5uAB#&(}c)$41ert{r$J0w%8A6;J4k<_rGg|!m^HV&WVaCHwbNt4eRpQH|gz`54V+4cONXdbKq)@d-JYE+c(FG?A|LUde?4B +zEC2nkQ@T1>e!YFB?mgk&`^a^jZ?4I`U@N`cWa077XqtZJ-KSEw@3+cs?%#1JHYY9j +zdlUc8tB->H4qklsKuYfL?REXfZ&u05Xo@^*U3&d+-i-={s)*h1zCHS9^z})V!r28= +zXKT$Vu`@UrJn39Xo!gzS6aNHFy}HUg@@L+a?1YXTJX)G57W1c?FWQiJ_RFIshi9#R +zuVS|*@$QnZ<(jFJeP_I0@aXIEJ!%HE9{n@+>hE0s;Ko_O6?b1dl;=e$7do83ld;xS +z|BMWSL~2P4Jo5a#=qwS__w$D{8a-+w6VgFk< +z-u_Pa2;wg;`mf(PZ%X9v$}Nue9z41S0kso801{c#YIdSCONzICaca&+93(`^fkq{H-F8kH<^9hvgK +zt=!hzYZ3j;s`N}!qJCw^q6=FtzFPLtmt(Rq@4q98?n&1e1y4@ryL~ub!*Or_&g>;W +z1i!NGu$TKaUCQxT<}GUvj}@XDufF$vUca5aVtv5AxookGpATtO9P)6wH+4@^-SLH4 +zo?(uR>%%-gs_0hQU9W$!H`&AEcT+55o7B}m9!&eZe9i6U8~n<++SbHRp1baQflQet +zBR8Wt&y35gOE$S4%*=nw+tcNJ_I398`kD#T`q#W!e~hJXqes%FV|;$wA77gzmweOo +z*$MIF2j;x`OTHX?DylsFd3LMi!I!aR1@}+1lr5Pmy!p}AMYS8sr};GdSbYCJpJSHo +zhZdgqjk^j{le)g|5GsG5`~OX$;~6_1aUrJfIokY|CzEE@7tYmh;5KM*{PUgl7=zFW +z1}QiG!(9)LY=2O*V!x*H!T!T9-<@BVbY*{+t#k5qSCwn~wE`RR{yxrKyg&B;zME;@ +zes?@Jyoo=llY9PO=yUd%OD#!d?D8k!H_U!|TFH^ezbbeCbd&h}GtMH5fAUYRr@RM@ +z;y;>KP7*v<^S9(#vF($SjEjG2EcuzFro=gM`K;cssS+Z)uU`x0;(gF;$27$@?L(61 +zJq6?QdRyG?s6Uz+&7`8DK-omDXBTR0ZsKQKBe;*39u|% +zkf6Y3*^|^U*}_`LK_EcDL%>17frX<;pL$h +zQ%ZNNNZIzJ%wzUkwF8Uuyt{YaDzMMGd^*;pf8p&3p>yxPRWe*~?(d`94k_jpbJ`Xk +zQS8!IxvQUlxnO73S@8u&v&0+sXvbcCU0&QHX#G@i>)RPdt73Lm^*DUr6tU4e@YUr- +zArsrgzDpL`t-hO;*lTuV=gCu+Q}~-Am#^cy!jqQdm~wb>g6;ddRrBjp_V4nVJ&7-& +zW9PDxPEm#W(9{1{cV+y4+{*HNn4NbX86AsNkjPDKC6-Pq0is +ze|h&J%{4anr(P+%IVHBwV%@{Z+1oEkujg4XdG(@8i;sV1tIGlkACQ0l$<(&MgT*M)N$7akmpNmShLykyfd?c$Y3_qFUvH{G@TO*pUAW`Y05 +zEkyI>7Zo3#6?(d2wMv+xiP6-IrK>ek-;^i+mR=(`yF^02mV0K6%B|^EQQ9Fi +z@P(JE<|mf3rP}KnS4detZ;D=X_gKu957ImiJBo~YZK4Zb#cq2Qs~^Et?{j}*mv)El +zg152f&x*@c$j!SuchQ>=mxhMCU-qGkw>he8`QD_=@xnFi^!Ix+GAyHGzrKBq}F#GfaFT +z(c0j!D`Upd{1eIxCo9|tys9?QWk=7e#+6PFoEBbiePmF&w_xtm?63RocdD}_J;*kk +zb|@|0a{8t}k5d*tJiJ3K@; +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 +zWe!-Ieyh63%$OVr7z3o4ay`r +zC1y0vjC@DP{zF}wJh;jZfHzaezvdabKzgA06yeOO`efAmGE9NHe<;rK-mT)sNFO3U2 +z?wB~~SJ)x9Db}aoHQqA#^_iJ@Da+5jufJVLtg#EE%jbw_Soq}`JvVo +zU7Ofy!;M8XtCKty{(0J}xw{~d-Oc9y3YoKq%Ce6<*Ee=JYBzV*p+$#Vrz|PA&`T9K +zU&6-4KYiV|Z&hzZPQGeh;Spr1`^YIYT*>cb)$zEw$Ga=$2k*BR+>&NLk!i!~sT+$CbtOR5@d_whCugfa9h{4%>-e-YQLQU9d1^k#c_DLYKyn2Mrd5Ciy!U?HgG6 +zECWIXn8T(eR^&Wp(mTB^#Qzbe#2VgnHH9aO9xqO7YY$N6W1ph%_Kq2^^AmHWhIdt| +z-S!&d@m-HQq;@{t#wE-AJYMG4_acdhIqQQo`Q4`2WnS*ubZDJY{?0G&ytavGPn6`3 +zTrBz0IauZB&na(zKK1_m{zY2rMwTgV|1Hjyt=X~d?Vjn0-nQNf46^C2v!1qunVY!0 +zT&yTn<-0!i?mY43(Tw#+Yit9L?tZm_Z|T+8jScOWdcr%`nOstQeQm?TUgP6$w#1uv +zvw^MHxr^npnHtI7*}ceRA3;^`~Ry^a*Y4Yv-)DcI~Y3ou!?| +z&G)Hqv-6}M6Vrqkm<10Vi3yM7?#*gfRVsKHJli8!OWyTVP+z=qt8NM~9h0k6TpVB?5bA#8j;C}4e$!eaRYc^>#q$pZfGS#iU +zDelnYSCp}Aw-ncbhBduEclq?Z73?_g9^5}A=G~Gf)7;A+8Y%A$cqy#-EY&4%QrENB +z&1aAP)S1mMX>2g(YYJU?@=a&=f7Ke3KC_}p@oJWydt>{z +z3(A)Myj45n&I6w3msMZb&peS(>UYUvS4O-kC+`fBK|-vL$`I${tH(;>w@Pl +z`SWP;uGcF6zn4z>W!G1;aPE>{nd(3PHJNR>;~CQbPUWhziuh}5&!d0+KD|B>x!~^y +zm8U}fpBk1-J6a)B+Qa-{5!*hSrzYoqg`Zy3*|%7IWmM}o@h9iEZ%JrvK4bH^O6chE +zSFIN9wIer7M>w0f}V4gW&M +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 +z^QY)w{ETw%;;nVuhCHwZ6Th;ph +zIr~uRh9%RSJvwIIy@hi2 +z*W==yujgGi{xMzHal;PJ&5LRl@}-oEJndd|ar5PswXVN6FX3ce8*36+uvXbwTURZI +zrB-dDiT%R!FRv)Ku|K@D)jg^%>dJSSGwE`cv;Tq;aV`p=cV-eBLg`2PWhWKJ_|F+ +z47`1Jf^D$o3I#S1E&UU}R!7<#)j8}C#COK-@fN1Nk3yJl7zmgOn1^kWOG=)we&$B? +zsP7J~d3eC#% +zuIEHqL|A8OS>$H#uRlGZ?<3zk-nr2>D|YnQHvK74IPEN)cqKnpE<&#$SiV@8PwSwg +z#Bq&7&w7>a`1kH@Zj^R8yQFe2ua3U+lk8=@w?l+a{oK&v>hZNc?(OkAbEX$vxEXiq +zlF}3R6BMmTleAC3?sICWkwV_T&AIaeIHLDV2S7s8Q~j$XUOa +zxlf?thgYMmklWI?Au|MABrLq=w@9-t*5j+nOcyzDX1%P!lU~P)cP}#!pI5)`)1=uS +z(46D>Pip$vOp#F4qTCwMtS_JTwjSKfa53NpXF$!nwO>;YGNtNXS)4wvFu8tr^2DU` +zp0Sy`=l?F+b??cm4<%n+Hu9W4anNnojXR3ZY9pqU^nTwc<@j6duWJRn)6J_(f*+Sy +ziLgcqa_JpveAYUj={2+Ap@OW6TXqI#H=0(K$|3YJJcJZZs^Cp`gHYHV3l*=4R=|7ub3}ffntUK8NBo=JjCu?YLv@K+rMW8 +z{|}+A3{>Elk5`6g1lL<}-cz+zyWqF{u^#07+0A8j|%OBcrsjY3;zT&}gLym(yZk8PafgUrf=&R)YD;43=bUdmO +zY|y33sx@=d>d3g&7ZU2z`ZR?YD-0%`Rk6CB#oMNR>p)xS)_jFS9N!nPo}H3@yI`No +z#3e^rc@GGDb2ATC`mXxrkoMW6NuIs$KixT^!8f}niFu!j%cmz#Nu~B@`#*J7{_^B)=X{cy?9;lZ;y_kQ(1KLc +kld@A^?+;IUeaP5R-}n4Exdn{UjdialG}yXxMuoBh08PE6Gynhq + +diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst +index 145a95a10caecf13da80ad1a3f4311ca893e94e9..40a36a3504e3039205229efb813f6af87f1a5fbd 100644 +GIT binary patch +delta 143973 +zcmX^2jC1mH&JFME>vQfg-fFH9(|)k-7;nZi@@rSvsvi+%@FH#C2Qk +zQbVqNbG-il*Ia{>H!`>O-g>yuLXy2`vY%>da@fk<>%5M!NAm5y7}XUNr2SoIXY%!` +zZ`VrMDoq2#Qj264aQi*Kt-`X_tv-Zp;R<1)fZH#HqNG;1F4(H0?>f!-_Ki0)OIs}- +zERkSh{jK$J(&JDi$A9U^KU#He-g;@l9FfB(+-{l#eLK3uR4S&6Yt@q7mWPh`-8Wyg +z#rm3Okh)i?!!*ZIEyePzU?#2IL1IS~II`A>?ljRkubpgE$Z+*-@V0Bu*MD7mW#_(v +z`d7cpZhri1kkPO$tzTe^O0f8S=lvTd{<>}zwlUt^SNHl7zbL`(&iR)LIctqFcpfdv +zjNZ`8=W?Xmr%o~^?f;s(n4kG8Gv1U4$?TE~eYN3|!L0RHoC7YOm*CiR_51T*ReO$W +zC+)qvP3r8EBNNVVopZeY-gWaiQxx}$UA*S1HFxVCwgpbNJuPRr-S^U+W$u}-{(P%X^C=yk +zmZa~kocG+JW&e&H6SDqMI`+pKTUro=wJ>GkwZC&#&x!?7t<~^-oEZEy) +z)B0hy*h&>Cg%umu-w`+LKc-uIyS}2NN6meE_nC)({N99Jir`w_`no8d^HWmLYb)lr +z`e!bLYxwvO`a@X42zu$Ila;Ten +z_(tg$t&?xP>oO*7=`C^OYn9ipm!6#FELHz)LqN@gUr{d-RjfO{Wd>V*-EUaIo%plYgL7uu$d%3oj3+i&CLNLW0GF8x@c~p;Y5Lsj*@^3 +z*U85|N)k5$uK!+p+-u3Y@BAJn`)7(JX{#TSGG8GqQjoQcZ@Ky93yW>N-)m6bZmLhFhURSJ +zIoI}Kd$h{lm8BgyYc73X%&b_MbX4NteGgtYA5NxE=c@!4<`&GEq17@%xSVh7FP)^%7H4HcpC__P#H{(8ME= +zAS9zvz|bW2>+7^bljN)2+$DnB_nGUf+=<}fp7Twu#YE`VzID>BxBNEWe6dvWj>JRW +z6NYXsW}#K@rR=}8O;$|g`Z;%^V!HjbGl#ZC9qP?psCfP6wx=8ILcZTInD`;#z!9Tm +zI<4Rx(uKl1sNFg|9Uub4lrdYgX_1({tf3N=d*~MUK$BV27AEwE@(&vdd +zt-tK)uND2eKmT&yuD+Y46f6GGI5kmc`lJn2v9G6{JQ#a(lY_~s&MQmeE;^W=-*?t< +zT3Y=t6|?;rRsx&!_AkzU&=QgayO%0pE@cT5R8nIPEv-Cnq%Zk^ewQuRE| +z?1LZIT%7hrg7ds~R)Auz?o^(sVk@@%nlnX`*CBwxnSq1Bp<_jW!PL&jA0w3NN*oSP +z-smb_FJN>+fcXc*_M>|L-0t*x2AJH)5eo6p(YqdKn37`qYN_?t;F?wmqtC(x3mhyJ +zcb&ST+V((azV$-FoE5+u&sEk+?v13PlX151-z;7$%9lhd73+tc%IqMKLMTpyDwp~(wuT)dE +zy2{-{lkDx&Y<~W;byINrX>ZotJFo840Ud`l6PfMXW{6nX%#Ar{onjuPzS3#w)LC1D +zH-{cPYnQ++sJ!L;l%L{|n)Th*ayn18THa5;o70XioPm4Goi2ix8<;3ytyAtL0 +zz2lzm=DcxDhGmA5!xFwkvl;E3|D^&}{E9T5mhD+^|KaU^sfLpI{8>9~mrCEQx;ppf +zsp;`uhlF!2n5`2Q?)g|e(a1k0azb^}@q}M_+;Xj+wV@~9Pq6(ved)yaKg7;RUJqlg +zj|^K=_w-Jl_n*AST8;{4JIgnV1pV}2Ir`;h)q}57`gFU$#WKDZd!H$BVr86D^{M}N +zwlm4;P3G_OJrkSyzMV^s!6V_SmBf0VtyQsyI5RshHv}%86MT1u$E0tCcP4G`pKRP* +zwzs0(A@{eCX6+k=?rqCwF7Q9v81^*TSEu^sgp~RYHmh}Ot{htI66Eap(bOn2Mm$Af +zeV|vixB&JQ|MgrE +zDv{+ps^$vwC&=Bq*zx(>b`!z53nhaL|E=8;6z^;J-&z0klGS@vwrC`j{mf3`S>!k+ +zp)Bdpr>`uH!a?;%nu4_Zs)V+tZ@WMF*FU$(PiCzZKdt0C^Kx~4@bvKdwfA2*>XtlT +zJi*KD<%x%)mrrq(H1E24wuJlMG*v}o0TK6?xqNp&*LXbSeVDdv>Yv2*TMTF2m!CeT +z`9$E78o`^>Pn=q7*|xXE;pfr0kG|e&KD}a}YH|o`{^~5dUNwh+?u|E2>9B24Q7}Ji +zqq*s?+@o0&rMEA={b^0PcIx8#gIw#sEnx{xP!ejoeeg@k`2hCylV+8byMDe^v?bp1 +z>MrfXTQzFY-WMFDu!NRl`iG03CKZG5@h79KIh{*O%V3ddjKP8SdXDp3JS#`Lrj| +zeG{vdel%y^vz?mz4{u;;&r{jBQ2I{y%PQlLy&(lJ?N~B7_;nZ~D)^Efbxn22c9L|l +zS*w}bLti^d-9G&14e(W!ALqhR~hkYGU;) +zISCnaH#7;WIvo*PT|V)a)f-K2v2ce&`=X048a^{*I(@zN?pC!Ex!N^*PUIH8atWhR8(AemFFk(d&{x-)`Wd5d}etSvlvnN6xKX>-5EqL&?kCAYgjYJA8%d%!MbTJ8H+ +zlgv2cR%kz&U*BvYmd?QZ`O);B59j`@7EMWwd7+_`m+;VZ%XI06wbpTpYr{U@(a_-E +zGs{Qpg3!fk*N>Nle*C$2?%-ro9Uqq+lNndbor;(^Q}K?J-qk0)FUlm< +zNvmYqui4)+xqg$5X1v6anG5dzdgF7J=h4ySfzG`CMfyj!mp^#_O)YV;iCxF1ZK-Ws +zQ<@9zo&A4U`rInF&r%8N&pT!Qmti>UYc8^H_l-YWe=jL3+qG^*R$Hdf>?f5;$GC&< +z%s;3knRsi8=LDf3(XNA>3+iuXJ$oI-vg{}Si|LZl{gGdvPGVyBwR(A=oISa7Pi_3> +zUtbQhahU9i;t2Rsa?s9wy0v%fWYt?T-y7C4Sgen+o@QA&i_!h*BoPVe!w$!U)OrM2 +zbde@-2lvZBFcx@*|;IZT~5ck{Q`-xM`IA>Fiu$8WyZ+zWR<>M~q< +z@p0Sp2hBn=N{tOdO?3V|n=M%7oULB36#G2+{b4EQw`VsnC!~0|TWl)n?96+0;oEWd +zhEFChJjKs>zj~Wym1^9iwQa)}t(nfZ{OfmRE^}3HUtr}K_-oR+;^XOy`K}f}{vga` +zZL%q~IOA`3 +zss52>^FPggF3I-hXATQoRC0=G*2prmj(L7uP)s0suSQ(_`-3NUs^32-Gyhi86J{p? +z&2uN~*DXC!H#79*a-o}*%x6PZPBTesKl(d=hOWH-ao5_-+bj2!E!eS9cgvn5oF7k? +zF>Dq}t+aUE2Hks=|)T8>X)0(z5-j +z`uFi@3Y{yQsW(5Zns@xO<;Ez@`eNlpzPVdhJzb@hGvR9W +z^Yfj;8@`=<>HLHF#ls~+(_Jpk|6_NtcEhLJJq~Id@~`dn9>pvY_FuX{L85ww@rfOi +zc8aK3%ZZiiE?aHOIHi93!_Z4kg&g;G%sxG7xz_VJij&`$@fe?)YdCvj^zum;j?3sT +zEqHWW^}Yb}rAFz*4L-a0W^OlG_@&o!Wx!O?)r(v-mwQcT|MPNkWORe^#D8)OSwW(9 +z4O#iKk_%J+h^L-9ee1w-`~8!rsD5<69+X$JVk1-3E!Tww(K}Waxv~lUDX2eY-|=4E +zWHsN`ytacP#bZ_jV@ +zi?*C!BA8NBvaX|Po2SV8>Vj#PFSQr+*Z=G@&vLkD%2S+E@Imd$nRWcUiy7XoIddYl +zukn}vrF!*mE{_ssol=!aW^FX)ym4v48I8tQ+a*qYcBuOPEj8lI&OLiiHaUnK_|3qk +zvz-6=f)y`#SZtnuy`$MPo%ztz)eP64d-vaw+VA0eqWfNHq=Q9VNXhJ01HJB!=OxNn +z^`S579j1uNR(`ZhWsc@}&9nDNejlf`v9@~7_xO;RMQ;PSJmsPszU)uROZ$7wPgq>? +z#4E;@9HsQiyZ>wB1ecWEo~V8^A$CJ#_g}8qiJrG@G`IAL&EH@0;H%1-ig{mdpRYWt +zy}W$?!u1C-ZnJo&m24JRw0JsKr~1wIkbfuJJiAO@ht%KqTGO2N_>WwghGnn5^V@Y@ +zVTv2h?b6|4QPrs2yCr&~g`Lm@OJ@0RyB=mAo6#25XZ+}jK1;MfjN+F?vVQTuw-)+` +zo@(3H*tO=TSC90KnM#vd9#3!%FaPj{Yw50p_Dh;p;prYHmOgwhXS<OXZnc?dnne?l{sD<&JxIw+;0-dw?xWqhK>FigGG~5H(hsOa}8Xx?DFJgHOH>4di={G??(Ql +zlP6;@9TwM?iR!ZN;NEoL`jto0y4(4R<}Pc940K9Lnz=c&l=Y2M)V?$IA2Pn=NG(pB +z$-1xIM>dyF=#az43gwrPHsNm>cXqxMtJ{8Mj!2Z|(OUk04m1Bbt8IT|azjt7=YoSo +z&K`zEXPwqsHJ*I+AavHQnTwphsU(@3H3PJ6A^7(CN +ztT>Mas68&)-y!MEdBS6+qtx@GmmYE2q^NAXeL_-W`?K453@WGIPd0IKy7Xe|ocl&h +z?S8UzoR3U-;IKU3L9g2A<(y;-olo1$nJS)it4w!uFc6;fJz?32xVIjB{}m#I9Bwh1 +z)~B-8O^N!eyxi1wYudD5yMBb8?q1LoW5cd|cuIuL4~dL_Vu6QKzU`X7>fW`ZZ; +z*g3VtJYwsP4fD7vpqLRyxAfq*?GjgBIcmahGv`Hyqi?}*V^azJUwM~xlE%x +zR-ke9_uM(|){>LTUrHIpIdVFkD6y$O8R7b}C+y~N}J=OzAk +z+ZViY`t;(CTKT=VTh!N?fB!h+)U_);4FL@*qWUurNx09&^(&8IQ?cbc!O&kj-h+Mw?H+NKxn+ +zV{VqT{G#}#Sy4hc`Qi(WIBatis`?ujK7Qkou*fz&tBvhv$KUqTpZ-bC^635(Jg={K +z-O0&21>Rh|a-~k~hmi5(J=v8`87 +z9;j++H2HIU<77tVL$(Z7OQ$!U*Y^tiG2{N3qHniqt1=(A_O>#v{A)ZTUL(@#^@A@J +zGnVXqEG79Tt-0~)W(KoROaG=<8@!Lr$`-^a=OE}fp5B03mVfK!m +zRUy8_<bDpTzI?rqdnNIgc~AbBO+T(Rdcy-R)m>%T?Dp +z`$EtaKHVLhZ?`VEdTQa_FKLN&9ouHRR2N*&aR{4!>rvWG-`4V-2g};}B%^dQw|+ax +zJLO2ndUoeaDw`WZqI|TvCfl-KKD^?j+)7pP`qUnF%@>M3H@5X_p1(0|+ee8{XY+SH +zekkcPWA&b*j5XCU3@+kF>}n40+-_fSah<2`X(_er7aE&-cOAIb+jR8)~(V +zDoTDkq_V#LKEv+T-db_SMBbd4pQj#v=YDH~irY2c_PZW6Vnv_k$sa$s^+)@;@|o=M +z50<8v_R8zeKeHiCKi8t`_H~66g+$d%yH{(d;XQzfr@!(QE$(S1C-G?!cQuVh# +z=yl;}ZAlD26!Fik>6(6~zvI?=1OH%~$ubFR7=JF1u@x>0v2)!bY+`!-Q@y~f98TZV +zEi5T6+vjaRE*s-?VEX#4J70%>aNOIw)G}yapygyM2ELOUB}4_80|aVMWs3VP4tw(= +zLMBCCdw=RY>wkCee+{zuAa$~MS|h8B&DWv}ACt9?%6jc93~sv;n;>BLGEHXg%?lQX +zD^EqG_6B~OdW0)UIcq{&gT3<37N_cZ&U(Wecapa%PF&n|WB=K|4<0!SI&$*P<=tqz +zpmpc;tgK_N_6onxxYuQHLix_z#?xlfde7th`Om$%E%(<^?s2WBCd09$UCS@UvXxkD +zj4VvrQJnjG`nme%AY+NVtj9Y!zV1<2{Bv&2wOh^1tR1u7#D2MT`PstFH{-&4=70Yw +zA=6lIX+E8$G=xd3cu$?@`~?qYv~E4TT`{b0Wrf?elZV(R?NeXoaPRw@^ZGBlnVwr4 +zNZFlcFP?WtQnV#ER4kaiCoN#@)<+hLPd*ZTvQs)OF@at1#Z~iJ*ki5aMjOYP1d-fH1nyjqv5|v +zUlwG|a92y2F@3ZDq5r9BNiCeZvqe%~iqvgcc+PzH-SQ0)Qg+iaWWK%oo%mpj=LMCQ +zDJ!y0&fK_n%4K<$%xxdeyxpI^W7gd%Pi5xm6`1bU)A}y;*=J>1oul#ZO?jJn^D^VK +zFNN)F<%^v?{l=lj&U%5ejNM!td+z@_mAq7ULH*^}xT7mp<#66eXbutb*%|7lxNlo0 +z6YnPrkp|V2sIXao1&+0tE?hC)O3HD~rihtg@Bd_YF`v9L_wtplu+AW^nd!FaW%g}P +z7cylWGFbA3YtPIb4Ts`16cU%SE?Q9ZKHc)_G9Tr|vr~F>cmnFU&g>Sg4{Tv-@Ol4s +zLcN-}cu+v&n+tCzf7si+t>#Vq`M5XTdov~r-c1vkFsJgGa%Q30n;idgORiJud!39+ +znzm1SFhOC?s@)eG-(PuSk?s8C%asc)ReJ-!njSs2@qd~X=M0z4J06}(i+ZqhpWWVQ +z`)A=s2QImN`2Q=hW>J^I`-mH+rZqR}J2T4K;(oHPl)U&Q#n4G1-aRnOs2v#QQKeOd1NXZ}t8F`Ua%TAp)H3u-K9cF${( +ze)X(K;Z}acA@}WhpLTzG*!1+o)aL$!KV1TTWi|TUTz|}b$tsDJ3zxE<|7o`o-Bu3UXoYlp*5gBO0g>J_v8+3Rnf>8`l(|Bnpc>8F*O +za~1zjZdo*YQG)u*Wt*J^w%jvZ=da$piFvW=!d)(#>;EZtSZgGOE!rC+%&966!ux5@ +zw;QJq1pc1PDttZhwbq~aXC9o(nH6|puKuj=^Mb_QF@E!U_{_!M#nY+(*3&y(Dm8}h +z)@bcGl45kOeZQbl{cp7kyQChtG5M_frTnAU&(VC%8x9ULk%o@@>`5m>c30m#JFPUm +zz30&1t0IljZ(Q_m8Y(qhIH*x1l9`vb;-QtAhQ;c|ccLARAAUM(>c$Hn9oOUtDcOZO +z)(Rh<&v(T)W!ct7HR)=5gA4WV8e^Q8r#OdX +zwcTxOn`1x|x`Q9ZHyLO1Zt14JG +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 +z)qFFIYd_nw!4X6}@=sx1iH|`O`h? +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 +zr^vSWQC`e}>4FnJ6|ppK_!2N{n-_PMZA-_B1 +zbJ`@&y8-)`S=lk{REcKdJDPF&wqy3s0NuP&vxbMls~gW`ACTQP(NR&3d-{hMsk00# +zn=d3iUgfyBbDxoQT64oHrZ=2#Zk-Krw|cJgbII)`5;bynj~qDLHoZ8lL|W38*VWgm +z-tksv?B4CMjxI~T8d(d(=aEYA%?2`bf@;@Fzi6=V=OSv_GEqI^%GGypH9W+^6X; +zfYrF8t+SH|;lXJ(KSRKE+v8499JL +z-)rLBB`>h;;%To;PL<<)25p6WmM=e;mvDF-pUYdkKi5)4|T0jx8g=)XK! +z{$a!H+5dx?i|gNCKYy#h@s)adln5w$(dvxzwhbK8(t{mvE +z-tjr>OJY0At=}OLLA!a`%CGEt`M8U@c%DFyzw^FQQ|7j|BL^a6Rz^iJ%sGACC^s=A +zGoj)C*{Za3@Ae;|1`#U{KRjTbqcDr9;FrtWC8qaUoImV1xT(LZUh2xc@Qyn1XV-&l +zuBTo!z3nXZDrR|)f9LD^dA{!6IXhN_zO&?>`E8cz^1m*U3k;39x-O<4ZwU$FPH3&R +zKbp<3djFJHRynL6bhy9ly`*Yvdsgz5<4s%n9WI8(mp2(y=^V)@d28+5#}Hf1`S+u6 +zXPop5g$6@zKmNb7H0u)6X4Lz)G_JdH%e`(rs$_`Pv-ea%QVi6YmGTrsAp)q#r(PO!$3blQkWB$FXQuQ{dS@5^(`tpTb*+Lqf8Js#78LcAc@N0d@ +z>XFX4;V8ZHY+Ws6YLd1&}F%7wo^MxjNKE!)+(qcQz~VV3~w0TGl)DA +z6nou0-(o}hCw1oIrguFbr=RfN@Nez!Qz!fW-i(;HHR7NBj(zRrS9_V5m||wVWKf&B +zw>PlX_<#4oGcTr}JX!GX_Fa$39t${`OyvaIIj+oD;{KR%qKQn0jY_8CEENvcq=*6s +zUCGHg7WKZ;r?1TEd9ueV@X5so4a-=$CM#E2DDbZk3RDPuV(2RK;7|C8;CI#&W{Yag +zedfP(Uz2U%MrkJNN8OFT%=k3!3GL)xxA=#~MNgK02VJH1#63P+kZ8HSZr`WMc9CT6=bi>s_S|9OD{`zll8{{5zGOBbwo +zp3t{L%&3%;C3^aAomOtXZwHTWzgCm@de+Vshu^<_lRxAo-+URg`0?h=d=K`npH~0! +zu=F$?`>t7^Z`Co)+?(`Rrzl_h5F4Abaz&}N-)bARNgS$G4pEa-_LNsobt{_?8`Q}w +z{q^2-okt};#)(~}&vzCjyjHNEeeHAIIkKf7t{Vtci*$t!@3X`=FP-kSPp)6WR? +zZ%`39pPCpSm2LRhI4NT7rDJE>Uc3$7$8V4>8{(lUD!+4f{Rgv|=}SLFpH6ZMeWk(H +zd@+BK$shl4hG>b~8V0V}Cx1;6$ojkCfAzz?zv~=7+ljZA`g&KAfUYz*sllC>(VrO8hW&PW?Z!7-CO!rq85K!Uf{a4fV^wL|N{DpCH +zyY=La+pn#;#rh!sWb-ARLaXc1x*qI)x@;le1N2;Nr|x_8>*$&9pLC9fIIi+qyCOQO +ztgru8jMF!b-I7|Re`fpqDLr$AxzDX}5hrsKE33%Kg^E)5)A^XQSZ`-O*!Hc5MRbz1 +z^5OgStxM*#a;;5mzHvC`@fZ0bZJ~(f-`98>d^f${cPeX1*!1+W%x~I-mvnyzcdb|S +zRq4~%x8m>8wQINKsIZ5W+)lUN@pqV}wPG3*Y364Gg|Hl0HbJ!&r +zv-ec|Hdwf3S%B!~zJnUY2GUd3OrBRSRj;D`z39p1)^8eJF&9!;$E90(MvbYy=q>TXTEZ_L)FIKhPO0@kfl5m4p@v2!9t!{b2jWM72}#MCdZ^XrKD4v8)$;em(Sy2};;qYq8(S +z*x-&U1vo05! +zGalpSas0x(uJH-ariO2|IvT!5in_T!9kQJGb6$AJy!yf~KW$#bN=AiEIpz2;<8%40 +zf*8wS<7@77g#u4)OMiZt<#g<)!nQokeFBU%%u6|Ed2Hx3JUU5j$=%Gzdai|GbJ`}D +zHI&ZO*uB|3C-lWd?dmgjOWI65E*SLp+Z@U3FyXG;!1tDE0((eNbCIpwJE9T?#b{xL?`hZ3X +zL-2Jg-^S*dI%x{h34MLfC6@m?=Uig5Sw5qU??Utc7QTot>ze=VShQomsO#y7rL)Bx +z|Lv)dh;OXd{Jf#NP`p_1khONs%v{fia`#Oa*F;Gx=(nr7a@B3rXMM`Y(7IQ_QIK0- +zsw@A>m$MPxZdn>L&i?v%Jvky>RHtByOv1A(`a*R*y{q2EC3yA_qF9*muD^zc7LAAYsS&E +z!S~Z-g?5iR)vh$BqP<$XVvNl`T)gW4srS1+_qFRw_VC;7;nVBXyn8vC$;|wNY9WJNby8U*r9p$*LRIe+tnLu3y#t)OyAp +zxfkoxO5fhJu +z-KI8+9Q#^$ZK6=vGHb>=k2b8BJ}dY}XGyaA)ZWZ90^TRK^a;8;+3I}k+_bm2aQl{$ +zD-Ubettswt-IAYXD)n{#I!~8%p)Q}kN&HMwnZE3AXlH=)^)|6$BX533XHx$T~IQt*cL3u>4y2@cs3*&wiHm%nuY_9nQ1)P{TXc6|1MKUa_CE&thK0 +zdrA4FS-Eu9wV7=9ek_SgKeu>Avggp0Yb8a`_pno>jMQ +zs+U|j;lYzfOV4E-;d0F1GGA_m+W9YyEEPK)9UG^=_xo6Sb>YV~%d#ErznHUl>qe!E +z2ehxBFwU5%c@5RA$Ef20hE$do6Fo_`bb(yV2#rCmS1!LkgTm`%42F +zPHww-*Y=QRl-)mzdgIsK8qPx3?&U{GUd~w>>GgE^-uvb|T5n9uoxNMqUvTp3Pp=~8 +zIRsyj$l^tsvFaQFoUxhjcrA|zIPYc7^>7lu +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 +zJn_&E#|>LLmXu7>%DKrYnYk?8ukC +zxSf4|i7VGv{|(*iht?{^+vzed^cO* +zO_N+>&jL21hO^?kxF$c%((Jgvw8B4V`9;lzV*1eLqV^{B!OA4>DTZ**H8c!Z9Z}^gztFGwe +zn;~{FXxZ6s8@~%hmiUR*nwbl4Qd}=&vB0~uYi^SHy93OrJijw#;yy6hN3mR6>|cNH +z!JUaOD}QeIc6iR5xe*V`_Xy>r#hy3QeOJSgQuM3QWMNrD$&Taly$|~TJv;wie~xv% +zO}*fTWhPupt{vIDpjlksOY#}J&eWSbnmE$4uL-8ja(H_{P-a!kc8gE{Zq8jgM`*`8 +zh2wc_aq-1H-{*(4FEu(|ZJbnjI!gBPN~a5}z3X*0uZUBWxqayiYxC+Wu0I}fm3XT8 +zZ(-Qb{N_T^_VY>H!AAvy&j~wloh@H#wD-(**^5V?hPp>?t#wt44}4d_BgN)osM!$f +zruKiezhC!9;vWxPIzr}F5v9q%sQ-`6)uM7l6D_7@v}Ojt#Kd0l(s!9_949SwNr +z8l)69=rF&Hjh>^y@a5eR=8$Yj6XxWO(n +ze~n&sT2P4c(bS11jtzHaL`$^4d~Mq@OT?j|}X-Z00ewWLL42`?kMz9G<1$_5b$Z*X9RePuo{oeO3I`u<6GE=hXW=@$Un? +z%{Qy>v26dnt2Oh9NS{Sb|L=%b6Pfdz&uQN1I9X}7_Q}_sO6SEEtFGhIIIj71bz2@svW+TChk5Mm- +zjT6=?ed=5jH1pVxGt;aT@9sS<_x!b3!`U>$CTC7ZA8VeIVD{iy`KGFh9S$5f>eudL +zU9v0J+UxC)ssxo~OP-u8Ptc56c;=X+@{{ShHU67sZF0z(mi*k~iFe+W4O70FE?ctc +z?2Bo63zy|{zul+I>a(lW|9iFTf$z*-tlf{aYzzYa9B3<$4%k_j@%7*QxD`q7*&c|u +z9#|xA)9d2PA08sroUqnpi|7;=xwLHGkNZ68qyHZ9En)JVVEKIK(LZ0}-4*gqTsoa4 +zE;{$&Ps96NH7nNK+aR`9*CoSFME5}Ax?tH;_XQU|-Xc&_q5G9_!kugGEvsI8e~4B3 +z{V{3()9kJ3nYt0%ceQb>2=VqfGx?;<;a#g=N-S$wSK{SeVwW)Wdd`&>+4a-@zSL?e +zO}*06d-F-X`4!e>7vn-6DMj?-TGK<8Gtjc+9*LE;uUtVO;nV9C^Ch;cxdSUg{%a4Q4=oH>R{kpvONWX0_Rij>@x?9R0J}e36pz;rjM|HJ-E+Q@y4&9tmSv +zvZvmTQHz&V=3(r-c?nM9vJ8`M2^1L_&$l#S&77_1DBg9wXR3n4U8DK8Is-hXX85Py +zGyH!g=+CxdiJyvnt73MlHXe;LIotj$RA|m65$?DbllA2HZ{>Mu{AI_hV@(%XCgyo= +z*3HPabJV@&d~it=d-0D)G*n=GNOfBU6N +zCLB-7I?DFOsq$Zl3X_Z^$DN52Wr`o&e$KRR$|m>QPq_`1_}Gsoo#*)0xbRi|zG)47 +zCl@&J&0FwOXC?1yC!eRDHS^;o91@+vtW|>LXJ0lp`gvmhpVY_`hk`ZVu2(tnaB{-> +zIa+)V8bjpLE%dTX>L#%|CY=5-$;Q^A!)2LdvcbcBPn5gu?%Yu|deOMYn%!Tln}!li2xK +zhL+^m4!wej)08e3uH_Kb5nwcsQQLko-srSS*{?-MvO;?F4ms8czKz|``E}Q-mZ120 +z`M@OI!}BjMDmbBhGj;m074rX$3!|gt-hKYjQ~Kt|i!d$OQr_U9y(rHy-8IcJs6`l$Z5wIfI;?7Pb^olO;J89qfZ`#^e +zHeS;y+8)e)w}MvKPvRF-JoxTWUlHRBF5@j3Ul;2YDC~TzA|)Hwr^o$~A?VEJuCRT( +z|HoyiZCk(V#_i~PTpO+6 +z%$Ymet12tuS^(=bjp_ZDoexhqT(vZ~v32v4H=loSBtN%((DUzeayM6Q(C4^5(eqcf +z3ZJf5sdKC-FuVKc{`nf=HR0Bodv@{Ygw$JQ{s=uV_1!obl0AB%Tv=GADnSiZ!PB@3oD|Zn +zt_bAqnmnn<=j*%AbHy)o$eb*FZqS{qzqfTm&6?=V(j3c=qjU;ymd~`FIcPf>9F-EKe1b)cK*!@#rlq4MamHH{H5%c-q`uwxAgdVPWVslnpH_xak^RO +zhWqm{jm&FOQOrvjr$}6tNviyJ^tp*^Y`Q{nNGZY +zUbJZye^qcc<0C)ggO`^TGn8g|1zB9Ez8te@mbYh&$Uc?Tm0h567fFP2mhzBRyPKPJ#l906JTp-nsEAT +znt_;h;Woh*w;d}}=Oo{oc%v +zwa%pJ^a`btlp5ugC%oOu_FOKoIm4%Rq|U_PjOFLK?aR7sx?;ka>hF5|b9r6d6jpV? +zY{!KAJB;tJ9lGG$5a6NGl<;T0LBXWRcgMQkHqZTV%xuoeOX7lkzx&Ipz9erfGFtTT +z#HLsey~l5Z4$dgPF1mE43SU8FUc7y~`&$XFwA}Pfx3bdG*FSg|9x20MC&u1o(jIbe +zw<5d0+vVwjFLd807X7LH5yD+xx;>jOD(Cv$1~q|c +zV4dFQs%zg>`p#B&amg`Os6vB +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 +zS2cys@64E;%l)hF77%z +z>hGtXX-xNiW{~`ND|@TSo@Br7ON>lTKbSAgcw%*nM_Fg1u1b(Y +zhoaIPOZVBFD^DdzuDh4~ZL{}^{8y(QX7;a<^i@|en|{dV;r7{!UVc$Ac##qpbl+}c +z6yq}CGfC@A7S=a8ZGLHza@c69=54QeE;Ic@9bcS$eeXp>v&f60T}HDOd28A7PZqf3@tL*}C*O +zaV2t@UrRnsTvWVUfwliw{i{1Ajg{|XHF+N#TJibZXJ-Rv$H$ks>mOA>y>)*c5z5#lhJ^wFfvH4PYrgToI +z$-;Y;1~=Z%eSXtN*VlEeiucrj`(`1lc4p^SCUYh7GVK@PI(hQlS(A|L$w9FRNjqn_ +znk$vgd9BiQJN3jauJyBcRxgdd{QLf&g@WJm0v3pJ&M3X*nRH;0^%gBvjkpJ$Otb2v +zrhoj~;!sxZ!%`*U$nBb5UL!L5RmuzQ35EyEGWr;k(l&CtZjs}4;dr}o`Kp?0*LIjM +zIdJ9SwW#l%olDgCoKIJXs#ryRd)I#aOPI^UttJ^++3*J=+(#A>@iPzS2`n; +z+^hAkwz=&*blBH%=I)QzYn5`d?bEz}zm;cD&z^IkSoMQVgke&BVM|2yb=Iv1XZ?|{ +zmAN}B{G;S7iN!qezp@S$Em)^qcrzQMUSN+KdIG*D1 +zVFvf=qiOq_ShoIhT5|b?kW2k~$x{6X+$PtS&OGlEQ~8kP1<#Syh8OAtpPZ;nOtr3F +zD!=i~D%LfPMp2I=o^`mMvoSKbP_SEHZJqZn4Y$0POi6;9rnIEZ>}D#i^%P(<4GfsT +zDg9)<@Qs2{x$c+O{B}>xxae}?-A1oM2ZqNEHoTKL4yMRFs`pwe6}I!N_S2B7^%lo6 +zml%t?UpT$pQZn3h%J#-<$G2=?`6U*x>0f3*+1r)8$EP`2#Xpnb_*|3Ub)@Y2{uc`v +zGjFn-PT`v(>822A$8tf?;R}o5KTDdnmS0g;undfl2n +zm7a+2SIcL87V&9Czjxh>%$SMMQBG;M8kA>=#BXLWeHOJ{j$sOO+PoQ6c^;eiqF=i1 +z@w~uk())U&pn>nd?Y|n=J&-)CI(>zPmcC@;!i-ps-li`Bf;_Elx4vES6YIIjc6`FA +zqBteLiS_9Wx97R@e&Am^Qy@Ec&F8R_uglgQ&uzQ&)mDh(M5aUFwI|+XPfrLvo^b!n +z$5%?7bDWFP`vVFdM_DVX7*~2;>yh2+vFx?6A)n&a>5s}+ie!A;%zPr>neQxPhq=Vg +z8&`hC7phyGzR=n!`LSY=&-b9tm=uMrCZ`k5sIPd_Jo~Uzz4g35tI{il?^Uaq3r*_~ +zxqCgpPcA?et)47iN|#oc}$&C3c_BfiA20rcZum +ziLo~2$8GWLjc-brySP3iMj+jAt1iRM!_KU&hP!LCYL0|$JN{(v>Cl=rVb&o${<^E4 +z`0wOnkpA>TWS8c&%bTV%Yz_Tf*?nS$TqylomwuOymHXy5*DM}MfyrZc~dTSJ7E +ze@wW1yp(TlLhC}&8#mOv?rxeIP`2UAgNg$OeH>Rky}ELnzY%YO;K6%MVfD_(EvN0} +zci_9GmEzw2EVIaI@iqO29{>DB7MeJ8+g*G4XQ5#2qDM=Ls%#ut~o46I~d>yuib)I6pf4wE8 +zMXtKTZ^h)R$;-{}dzZ+vm)xSmtt!t+V=v;3g@X +zoBLMxuiJ9lsmsPk*68QU_=PX>*+8US44AaWrLe{nCZ&qK;}#VZ3y}Suc07$=kki +z>GK=3_uTw=~+LgSf`s>v*d+P5WPgb+O5qHq^ +z;s3v<-kvFWDI2^eFn!sBl++~I3~Cq8Zg{Z&>y*5g$uA-aJ1JEm=llL*uKC`zXAfjqR6dImdwjEe@3UY3^*6qjJ8>(O +zvtA|a-L{HQrK))gTAJcCRNSHLd@xzA1MQ`p(g +zz~I*bcMO)77d~=Y*x%H#>)2a9X;sdu^|K}w&OH3$LvzsDDj%kM_cyM&{^2gy%$=+E +zCG1`tB^2$#zV3c=t^M|0=DMF05;rO7JV|`PA9*sb-h0D#$>b>?+@qNVKh>$danD}& +zt4=##O^lU)-j%vC=l$NTizL~eWiM^BGR6+aiA`2VBH`hPc$?wjxJ +zVEgT2@qSJn-kESJTi<*yJe+zlq3+DwtnY>_R^`rbT>4ke@XM48erI!jVnO|@?N{Xd +z&wPG-{C@kQTd7;}&kIf8@S}Z4+KPMW@s_HI+vS#)ip~4~^{V6HLe+X97hAuHt}iF8 +z^$DB$Bqs3Gi|~}4S8kh{t(@rW9v@h|KuLlx=GQARMXhzl#_q3wvQ6r`!pvN{x+pnv +z$NV>$YkL$eAN?vX?vH)8XI9$!g?)cc1@rIg(op{+66cnFW0gVw%tY;d>vn7w?=?7Y +z9ee-yL>BAVS+6IgxKEXfeG-wlp+0WUg|p&d(_&nl{TV +z8|&&zn^n&if0<^%V$AN6Bs-(&0bhg7>3Hd`gWqzw*kYHyczu9nH49VXj~TVRcQRYe +zx))73uEw{(BlJteq?Iq#N+vfyI4E#Wq0r%sZQdIpmWZlJrdA@q(lv`%o|a}le85-l +z+3RsqPi)KEoJ7B65`R|u7mGFTToCt8{i$smKV$FK|NX!I#NEtob(xVZnD@B#<>|tc +zk^AEo%SO1?b?{8@59cXm)9};1>?YmMdghI3&iC6hrtXS%)?K~LE56u4=9$U_U%BVc +z_DNrvdX;lW+A)uq$_WoSmTV1J_)5oH)=pJ%WxaO4{Fe*X^J{j!*^7VKA~ +z7yBcgY?_v=z>y>&^p06rz>$H8rHO&FsjA>EOfcR%+k}Wo6J;I_3MRJOIq$C{#{%_e?t`RAF?=FKPzyro7oB_lh=uVCg|zi +z6WPDW+ghtDx{#hvNTAX}5%Y1GI +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 +zvLL}XJ7B(VhXlu};M)R!%!T9Im;~4| +zyzSQ8B2TN${qp>!;`>{gYwC+$q)ciJyL%EvRQ&pvjc>ap9S#5p%r-AKdS}s`dM2edy)? +z4EBsl+g68KdE9SXvi#m3ORZyRuivpti}y=vOi@_2jxF`T;f~DH5J+13f=s`=#gc%I4|mXUsN1f4q7@X>dB{Tagpd-&=c +zvUl*Vd{&=XahKDKE&uSbPk}jS=FMNY(NJcw^uDVChoi4tYL8?#ShMr?)SA`u%uoM3 +zSYNizTDpTLd+Vd+lfK?um2!HY*SA@bC)@6eY?|7WBDr$+9S^6jk0CN)`wbhDC5o4) +z=QJeCr|32GZF=(KsZZ>W*%8%k!nb3EPilqu^?cg?bBk~%cYR~yi=PGZfhAv0E>wN( +zIj=FP;<;A6~mhJU-dmd +zPrJv>d>kCYC7!&8F}cUx=-8FRajNM(H(fe=x@|B8GcBkSch0@X&icJtb(k!Um7`P(ad;Ob(E-`nqXT~j9 +z{3+w3`khDtW6A9qk@?4`RY}zbO;f#7)FBwW@$W>#BVqfwWfU}Is+=eNjf_!jQQrCH +zknZdp*;~iG#p@C;rTMQ;Ta+lF%;hHZcG)k*>x_*r-dSH2k2~g(vFC*EwtD?~gO-mk4UuADPd7TdzoZ}&HF +zjsH*AtF|7ylK#XZsr?=!J9<`2g&1OJ?#8LJmwx!|}(w|dgy`gETS>@x@8X=8|H*1`H6ldL6r^3XG +zXK$%LJx%<@tJBT<+~(R8y-rVU>M>zWQ!blaapu0FtxEi +zt832$NFCegnme!Hm-yeDpDp&$NkOb1?q-=qhCGlyFLsel;qjaQ-#ks69^K>2iCWBx*!ReA0i-TwE#MBlu{!hd_$-TKGT+wG5){(ihO&wkD8vU&0? +z`;(LxhJH7bgju{Mf_%ex0dO?3)Ez>nGo=_;~NJFYkBx$1_dc@4tSO +z8GG}-@x2|2r83g@>*t<0rtJTGW371p?a8(5GhY@iPnmA38K|QXV$&GRDe^Pk1=-1fucWu$CF0Q!u7kRsz^1Djk_Pn=Z{E}8) +z%fo56J|kG>v~KJA#)!|?D^qxypUmGJ8l`DovGGLk|MH24G_3a&YykcsiW66hp#<=Lpt4jrrSI*x3gb6{Qi2Y$Zlp-`*d!HZw}{0r~41*O;ZYc +zG(~33pJpj>p&V(!ZN3txAC*!z7+XUo%^rCYkX&*ky{ +z=6u~hS6yspg0xq++V*fy_0KOctM!}gx=8O(-Zt0xw{c69{Mf^uNZEWV@CtbJCQ-}( +zQ=X8QSESxf(W3f|=L4F{t){#Ew7OP$#?iBL9}67z)mPY|?4IWK^x=JN#mdab +zCL!xye#_tTOWy9{^ZR-1hZat_a&rwc|Ga09BXZ==9{8~MFvG`~FE{IpVlUpb+uJ$& +zr_dJvP1ih^*__dRmA+waj??`#f!03rIxh9Zw&ya^HbK5xyI4y3W}Guy!kPP6B}eHT +z8(X@8W83^Zcf}u>Gg=;oic0K!zEgJFv#n2Ts`D6nnj^YcI@dq_EVn#R^GIgPG^?vt +z2SV4H-c+#>t6#a+sQ38)=9^~B^(<<8C4MI_nYz!i$iwOGe@A(f&qqES@fW|^_hROm +z&~5Rb{+hnj|7bPIeNuWvX2*%=FH5=2ZoX)Kw;l{@}ieY5pKyzZIlWv?~{@aWc*wzefysW`@E^E~gJ +zP;}wO>?;!c`R10N?P{xFIv&ZG@_hl%{fVz@-c508PYx`Y!)1O^{>#*P{VWlClp1oC +zn7EZSSLxr0;J!3lvP96cxBpP=K7QxdxrPBY67?RNS~q-`KH#xSXYDk;#>%Ddj|MBt +zZICQ73l^gFE#@yd3XkUFa%cHYpag +zPnXba7r(QzPnyYs@fxGXBk36@i^UdR{r@|fOK+)^BTLzbX>2?P3$-S{Fi^c=D6!l7 +z0pFs{53fzEe>t^KLgTc|zunpY=Sucu%xDz78SU~>`Mq-|qsM&1$s$e4f{d4h&p2+~ +z&M-~VtNqfCIWk@yQ%pE|R9@cX3ZA)8Q!2_eL}J3}FHYjg*Bq^X*l(*T44=m&FTUw>PS})BrbrAe~sP<1NpL}?vVM#>h<9a=Ta~YBz$wKNpi;f@o +zt!_B2Tyev^gnZLQboII&`h-PB&C7wpaq +z91I2;3Mx~%pIt0)Q9E^upXC4pYcn$^bK?|7=ElB8rY05!riM8TEIbSh3@i*j3=B<- +z4;(#~C>eRLInN-vWUBqoG@CxZQ?@nnGq;?q^}o%>a_`#vS6%%x^~z2h;!I38U%U05 +zXi{VNrv36~WETEW`^#1T^<6IO6+tui(58Ow;MvZ{HnTD&#hzbr>V)f-HReTCqFNg5 +z&u#y`cw?oR^5CAg(}-5K@8c&1KUbHo(EIJxlU7)F>7M2C1-8${{ydLa-+b=3@QaTxjN5;v +z9DHgK+`d|Ue`(c^AiIsv?rV77FOcU^YdtEZ`l&y|X}z%JH>Z8au3hfG+Nj#v4fHH@FE>TB85ei+KV-oOwl{H^1eNZ#wrDWB|S7OYbF +zemQDmaz|s4{6?pWKzobb)0$RqFnW2V-ucYDJeGfM-YG%(*-G9yvT45!7v`k@_9|pr +zzAJdjgss2+eb6YHa!N+Xg4p4K>bPti%S=O$_xPK*uz^)b)GJBibJm!f!_NI`=~-r|F9_k@<(`97JS +z(zsE5z2W(*|6hCVb6;?8@tmu?T~of6&9-+;yLi1NKk;t_srI(1qlBC{8!B3 +zfA;#WSE}Wf@}0+i*wxFI9JyO)zrpm&%=#w@k$a6(lI7eBS;P8;InMtw<9l{bzK%IB +ztLOgCeWr;VZ_d@)2HfW>{d)BHE5F;bYSd>u4SRNO!qT4U|HZ`*>LXmdH2B!?`q&w{~vnLtsx}5l2ovXYqy7_r{(c&*ntefNH-{jVxzZ_@=?(9CNo3q?_CN8UWY5bPdLPAYAN%;nZKa|LCmN>6yxM(q$87tr^JCZj`+w@%f6at#X@TE< +zoIlSsL82>ubwm?nqcXV&z%_`=R{Hfh+n=a4vsh-d2 +zUvtxm{b7rWjX@)5DA}KDPDL$_3BdWU7_2+;--#2OK*-?Kq=g_v(B^eeesT +zKmDIW-`sF;5)64Hz_H@(!T+HJ-kWNhwll>3U!CUnEXS_#xjy`dQn#HQ>Oa*Z=F5Xk|U{3v>^gdSN!_X~xOR +zsy0mTl=^bhQ|2ub-_OhWR||`FOx$JF_hcl?+ +zia8BI@AzC#ocXsk`^$wzn_8G=2A_!7?7old{ml}qbT)>+hkw1gedNj;oApJy{WTy2DDgG4~3ML1CV%&Uk(H+f>gh_XN#{hL6T=zTcTYA1(dE +zt`#9=_CD*1Q|O0;4Ha?m*JTw>+L{~buL+zt>8R{^{l_hP65czuxHrjj|IFU%^=96o +zn~}_W!-IqZOD>$uk-EXB&88*JP=9yhg#{BQB&!G3d+>yo{R&e_a6d4w>A?x*cf$MJ +zOV*y_DzOOo_a`v_(G=^iKRb8HRBo+us6-5g(KPms! +zf4?&EK~%WEI75JFhI(Pm84(?0hqbemgWs$T^qq3E&}{1R!)1X!4~uxZCZiFJ*Dsb=ETC+XMD^cg%UJh!udZ#7Tc8GE>-=sw8fmQz|&8%P`7bd}i@Ui4UhEPu}c(Y5mBc{@A3c57?%B^eT=1 +zaHNti!LxtbyMh)M;osNi>Dum)?d30UjJ*_WP}3WI)yeq)yG)AgoVeK^m-bk`Hasj9 +zc(g8HQGlD-oCQZ~+qIiRCNC;FvP1Imn}z(F`?Q=K!tJ&c%sR_yTm0rp>%F9&S0>KW +zKF@n~?z#DN@t4z_6&5^;+!j*b>^h-nZ{_l4gA@LxwIwr`iE{1?**`ULi_9dc!xh|F +zt%*Lf=KuB&T%d6wRIB0i#~BGJQvctW+ef8d*twA_dqI#Va#5F*i?^6sb>2 +z2`cUVd1=|tjOVtQ(-dmhW2+KEH2wCU@nPRz8*sN{Z~nq7%!i{hgXdLjKKn&~is!N~ +z)4~Eyru0?tGJ +zHa}(V%Fya11pyKdUwL*#~q67>zBRl@iBgx;_aI_ +zS1QZKpkT+u%oU&Q#01(!^sE+k-(b4K6esg_`}+H0%O+>A6gGW2v%WvzUU7{4!6z(l +zJofl9Uwn9Ng}YiwqT1oWy~$4sn+pAZ_QXzzda-%&-@WZM^|g9=8Wldm+kSVXHvC@t +z=}XAfyL|^&7|u;D|J1n5_n_~TRy*~WRSa=8^Eau*dQOacCTRZT)H0P%o7TQcEp3_B +zzkB{XE1xA_Vp|@sl>1i_f4=k#(^q!A6R)MtJ=p!}sPG@bFQ$k`|JWpbQkbnn^&JiE2kFE^|eYw8l%8Qv(eFx2dJ;C2hId**OuA%lFo%Hy<{w`sWdUA<1A_)9)+FLdL%D7Mg6eGu>RDm>laJ +z6sSI>P=>`eqIPekU1?9>-&?$U&r9Z<)-OK7d4=z-am((6IL#e*>Qq(s@yuY$UUuQ& +z&n<5@m+5+(b+ew$Jm+O~x30ro+os6|#*0KQ@~vi5QL!yh=XE^kA3o7&eM`6?Q|rzA +zZ<9kOW~?<0Q_8K@?aZIDszvqR7q1-K`cE(Iw?AOg>SI36#I&~aqEz_d+=ik|osb@V +z$9SCsQ>;F0`FS_mEm(codVSNpqXy6Z@AqgurE6+8v4dfb^n*Lj +zTRG3xYo&N+ZGZlcec|GnOh<33Ull!lH`y`u@bTKRucoOiO^&Z^S0`FO+xKAm`!%fV +z_gd{;o1~TIuiz@obLwSpZ-B}kdlk-qf-~DzG&L)I`Ixrr)Z5qZ?=d^P-_*YFXnXS2 +z6-MfIi9Cm^_TRd^`QE|pU-_My1)i^#D6!#AGLzF#d{oO +zV&j6Y*Qtdax7)u?s^6AaU6bFq^^)BjOQ+|Sww^JX5)+$3Ww(^5^UbT(p7-=S$F#}4 +zAGIIkXq8Wxn)15(2Ai<|x~oc&#sUceQ%k>cCu>e<=*gVjW2Adzt^`}}iA$Zmy&IMN +zJOryY)NfjSZm!Y_=V11dNxx_4>2*$;*vGfv?^n51(OjBrwmW0L{@Gj4{(Iwp(QVBP +zG8eiVME0JxxzN@>r=R)7)ZO`?n^N@ncKnc9I`#j4FSg`|48PuImNsTZsil6Y+n&p! +zwbyS~l5V!K99Zu!E!7b3sCG@5+-0*l;--Ey5XwL+e~ +zJTmV|`{M7P?fgp?E%dyeT4X&w +zF+b%cY*-ym7aCty;9J1CU*`C__va=H+zmftxYd5X{$i8auY+fqz7;!JIK3;}GHFBa +zV>bVrXA6`1s&ii)SJ8M8qGz_P`oolLCvoxh6Myq2eB_v5epBSEk-&>*Hd@K{n|52A +zsn`5gJll<YBj4HON)aqmV3-lyzY9$NzhF7 +z8h7RiMxTm$m-1In1Gc-17TN|WFI5v-ylRO<#A(kjtNv=(Ja-ho6>zC((T+ZWy^}-2 +z^G+Uj=gNJ5GW8CpZB>cdch~Oue}XqAO;ho#xsY9-lq$k>yV>4L`uW8ld9kmhm#*6p +zbzRETu;H4(hf}u?_ZrD{#6EevHpfb9or94&oZr$3V%hV#Rdlm%v`f+^ +z?4D(Abm-Ev +z$Mnmg&PRAU>Swn(tUc4!7T|E&kzFM5mS5;ed8S35+kSgzf4VF**`b){XD=yrb+&O|Io!cLZp~I^Jo2}AmetGV +zX=`1Y^?BI)zO?a2h3Sg7)%cy{mj>?LDB%=wYFUh8y+E_~+6j)+&c9$gX|UO8f?X=(TyeEU +zCqmzddHH&JyySdQb4t+f+&Tp(LvhW!$uoD0%ybuWjWH9bJ6IDIYiA^UDQL>cUkMKC +z+t@DX&JEmV5U}*szP((Y0bkXO`WC+uSry%~+xkjhbvFja +zJvEbF5xL|PN2{~X`-q*{LU(h*CFECfc^2<#d#R~9`~Sut{f1Yy64bahE!cDJqh-;O +zIq(0hZxU!+efrYM>KRJz`{sUT3SeoQbU;PHKjZS*V=BKbAJ+#-)QkPp<=V-c8Q-WS +z%*eT6hR{O$pzy^TQ`AHQFKrck(`q3sw{|uEv-S6#w$=D`$#~~0C*3gSJCM8R-=l=k +zA6E+=-FP0?qBucoV+o_Yte~ux^%a@6q&;t~0^aYO9rLnnUikOr`}1#YOf)RFba^56 +z+S!F8o57r!m%-eL&rh>n$YLvVsltuBFH;*|R;&ql7H?uAK+xoZy|D(4T4}yi=K6z;uj9 +z<84;h{{?oY-1cqTzHu#3W=T!f+-f~s%QR9~bZN2<3}PzV^qxTRH5(7Ta(2Nf%s}{5N)(DRbsli~Ly;zn{w`x9<14aF_Ym +z|A)twPb7=X|292Pq-3E=TUEyv*FV`>s~Y}Gzo@%)j_c;%<9buy2_^9EyD~L@x~N&t +z%F|sRQ}XOL>u^QHE>!$}ebOR{SqJw&2u?is&RE~bil_GhV{6Rc-#zc!=4a-yT-a-Q +zBj-fD{g%Y&cjCNqPuaXKPSJULKUigL)|xrF{}yasTE6RnBddOeP~@%q+;NY%1q +z-|#>CY~jq6lMS4XGlhFS(#o92uD-cn-{!>^RiC(=sc-GrW^=!)U`-O5zUt$p&9OY9 +zQ-7@3EaV?7we|PIqf__!-0sL{c4H_wB3;^U5FsnqpIKkD>Z`!LWgCSRCg#oP-njIo +z`NvKFK0Ns%AD0mrcj@?thm|@;&4-Fh!{7VNlz86kuej-;z~S4?>(;f0PyS}NMvdq8 +ztuuQ9*nZn82-x_aU#ditu#uwZ;X7wn9=mw1e!tac^-axd +zOL$@$3T3l@-QHC?{q3DCS0(R$xV3!=AKSOLcT1SQGkH!aS*py&VEvKdknnlgKT)R5 +z^LSe8jgDMjl`T^$$G>~2JY$rPh-`QL*7WHU4*CmDiYachx&L-=3a4h_+?84xr;Yvy +zap`m&SJhVW|M-Uav%b->T>=t5?RV-E?bcpcwbLzUF4x*C;-YyerytMk=Beju^C~<1 +z+VR=0)s=sos_v%$550TW?@TIh=T=RY2lfeveD=nc@7oe^qw3?Ua@8v@TKP66?yY1$ +zl+z#K?7w)S(1zMF5pO*?H#>i0i5;tCPknOJ)ViYIyKAkO>yHaTZ~yo`@e&pLbopp= +zSiN76i+9qUt?pVHqP$zpS^@;6JY&A(To-m1w9XgV{xWF$xxSQz-8^DOnHM*7U0~8t +znWLR}TJzSC33|(!MJ}I^o~1OweOLSLqG})G-|AhW^Kvv7cl={rtf_4)uzh~PdH47J +zEH6x_wRvAIzGK!$8@dh6%~94u(1c-Ns~p7WW-{- +zWrQsqCTTD{e8%VSV&3ldoyrXt1d_`Ce0j69KI#9p=(W>a&$L#C&to_r#btO|N@;W4 +zqsYWf(pen4&YqasQ=*$JB0ll))J6T;9JWI5%S{4rJZp5^A#|pB+w4Qvx4XZ~$xh=* +zW9dq}DYUCP<a6L_bA|To +z|L?s-!J+%E_YSVki&>F7SOxf6D^AU|wSCi;v+MkcO0g2DsAv@)GZ|SMS5`-C1_DtXsc)g%L}0v<&y(4|+de +zU%EdnaO(k)u1T^F?WN{R-{6|zGiBDC-$wlNc*S!B6pqI1KKiRPbJwvoBAYBUHhWH5 +zW7;C9e^+n)#!{1alZAWE*E>bAXMS0hdu6ijd+Uy#-HmrX<*?~Rx<8oeby#i9AN!Ex +zqkLHc`&yoCYkzVfs9WXAp(D3y+@_UWn`vf|xpuC)NO7Z^Zjus<$#wt7HQKlK{90iq +z&7kR?+h(|EI>V2}ZhpJvKiyXd*>-2c)}0;`^I>I`@XHFRQuPOJXVS5 +zSUEPcj$PXn*eCzteO~b3?}IMKjhWBb7o4jup>lu1MLj48*ZmNc!o+4hRRxnPm7 +zxzF95mkwT2sTMta^T)=3@XVLB{ymREpBUdi9o)nGweOs+ypZz5eWw$@-(s*n`KDq0 +zO!g$(2&Hq9XAcT9Z0x=ksk_iQB*U^;d6weW4S5%j@6?=e_k&x&;V!8Ng{||VudZj6 +zF4S^lF{pRAI^Vs|RH5q}fSuPvRYc0(qMaYwF@ +zXh%%ze7ifr@hY=DE>9`4-_^A$Q@$W+VPWLrvk%HoKk%_M7Mpp%#GdC#=hWt72G0bK +z95UJXdX=ka-wKP>e~Ua^><;M7Wo&3>pZ93RqOi34i~+8f>p3?RwzckR{Fn2aVd1`- +z88@q1Idt96uF2o#!saM?^w#W$`%F@_l=T#T3x958EU}b6Q61jTqA=|Vv%pg+=L)U2 +zk2O!28TM)Kxb9Jq;~`?txo4xP(v#BJg1J8uxb?4GXFD|`UwFxW(HU6*Ml5O&3Q9)-rx2Spvmym)Fcl{bIw=`}S*=APy>du^11rjMsnfSt3uCsA`yQTGn +zb>-jr#@F}E&|3Aw-?FDR@8_M>D|>59qXeqjEv;kDM7r-X<15o`H#^UF&Ti|}-07k+ +zR=!uI1MW?a-@8)q=%4j{y#E=r>n|;R7@n|E{>DDdX$c>TD;+kx;S&EZQ7^%E+Ny{< +z%%O3EL|~Ks*%C$hc`vm%E|zfi&0O|6j{BCeYS7J_YNAeB4J(8@-c8+-%6;$J{Z|3& +zP4#~{xqaK4z0cO{(ve`v)~Y14#M_t8^sZ(#&*%0mIDS@sgX{bZPTfr>8XVZ$T>rMo +zEtK!hlFvQ&SmiR4%v@tG*S&l>OM2^*+2{X}`EzXc#5u1{O-|RIqm@0wVOzmGqixWU!!?%}ml9y25=S5u`=Px9LRZ^s|b +zZ~65#Y8Sghk{gBl*R(Zr`^&QzG}m9N&}=P!Y%Apa-RvMo#F7oS +zgauZvym0u*k5x?%_U`!REjs_w6S2durymcQ($Tf+$F=DDxlTu1szVuH`PB#9s#?^V +z=w;QE1v$m~FJ8@CK +zC +z`eKoDw@T>_->N9HhIP;St}_RmvFoYTJLPu%H16OZmns64;$xJreMH#oJA_xRMyob9`jW1=$0x8G6k@x#hC2Ngq!1q?}!FaD^e +zNfa?md3jdLbiT+`*Me;g`hE*F0zXuHrB)w0sBqQfp18o~mro;u@7wsV`k&}}QsVvN +z4;M9FuX0B^9KlR#w$&Np+w%=!KHT`CLcfz@?z2U3wjg<#3 +zCj7j8$RS69>($=UyXi+OGtC&pp9h?asn&g9vVK?Sb+t)vuNUUdp4xI$*rVyidtHIz +z<9v-Fcft<(7d&!VwD8ZGC*S|iYglno`1h9cCeeMN_16x|&2l`?qnRc|{5 +zHtYZA=9c>!@Na69#m;%3pLDLzPK!4UVtshML2G|p!MiU1O((zYau+Us^QznN!m4w9 +znX&8Z%<5k~j;&qtEH<{TvY^UpucyRH>0i#(Ts7spICG0!`7TVcowFo(`PG)L?A}U^ +zF9uw}GMn$kOFXNO&as)LqaN4Rxo3-NlY`NNP~p!-M{Cj^x0ZB1FIe;XDAObTTT%br +zWc;Gvt6LVb9BkU?^shj>T1Cn$&Ew-Ii-eDJT9&X+_XHeV$G8rX9MpH+WV?Xm;bu6zzn5o`OYNv-TPuH{W?^S^bSI8%%i|*@W^M +z_!mFAnxuf%El`nlBk#SerZiu)FB2yEl5tg-0b`uc)R +zzIk!8TjiUnvdU}oOFo>?@eVIGs4&S>-}bTjwR>)kD7+21sgw6&Tgom#(pG5^}&Hx!pZvjaf}}89M_(e3QYaDHYc^GY4=UW +zFptynofG#+yE89UTJS44um4|2dw}wZpROm1LKaJz^6vIAp26~6#dOsiM%`SNgF0ue +z&&sg;t4Ym|Dr}RLJzvqe;7!r?A4<+UryOA|EAO1_;WOb{k`9l{>J*R9c4k73^&Br4 +zCz)Om2+>e^A0UzU$Ka<*~{JG=HdhcwpS{K~3vEL-*c_DK&@YcBGqmVFezKShjr +z{{j!mNbQ`bE}va&pXIeR?cA08c|qLsIRCqAy5c7a*#1?IN|f_B#q;Xw@#B)I@k*bV +z?b&Oc*Lb{TS#&4P)XeAY>BE{#M$^APJsVvgcW2G%u$wF%SC-CxrkOS6ntYI%kH-{s +z#Ru%tAKxf!ENUM9?QYFt-=3^j>d{o$DII#HOz}|6^&N`K7W%f> +zG;C7xFRfoVD@?re_n+`+hK~;}?VFPNIoOE1P2%%sv;TpABfsXHSNK`BZSLGj8>j43 +z)oqn!3aftjE%D)kGi^~jG>v{r_Oh9ubC~nwvxyN)*Tab+GgcaGJ8RfCkC{)ZEAeYg +zXV6VK7PAjQs`n~)F1lHNBHw%x>%De|m_z37=c1SDt?7GlzrMRz#DeQl#?;*jH*1w& +zzfY8|bz5Wl%WZu@hLle2sv}2AE##}#ZBcEB+@Uz@&58~gtF;$T1l~04*pzrrW@&Qt +zF21zqy;G{a4`PnHBi`z~W}h7T&7)*5RiU +z=cZlw@F!+ku67h>jB{K4bvx((RXjR()1p29_Z|7Aa;@^_5kXG9 +zPn{=w7dGF$F=g+^@_)T1x_@gw&Cl%qcH-Ng-O{!TxC72^V>|otzT_#%Kl75$WchBc +zWGswMF*ud>@GPUw{IAzdRxM(AwWMXX(v}8qGYN(gyQnjX784$y{XM}g`N8-4tt;#A +zY+`d;((hX}n-4-puFVYM|JOH4InGBUn9ol?{&*7 +zrjoz@R`-rl&AJ+UmDgt%zQ4HtxTI5#MUeGF=6Fu8^Z(SgCP%vMIIgoWvT2X6oygva +zB6qH>FYA!kd-=H1=JUzf$zOKdR(tqYaj!SieN%R&Q(qoxspg6`o&LOWg^QHXKBJT3 +z(Tb}6FE4lVJ9kXUUG>URzJqy2hMASuzPq2aUVO}26J9^xb&LJ3BX(u0oPPXONm_gH +zK;RosE2)avLdkM%BHpSddwyRQ@ey<0FIur@+K$;S`Ud=hPxU#&icPA%#4NC57pt2f +zS|9VJv3K($d$!7>7s!7 +z>}v-iG`~4smA=C0`I&w3&Tc)Q|Isq%Orz5$8eG^DRB?gr@VZSYnYTUb-!9;~^r4VR +z^J9gW!Go}t3{!o))ny%L*TbjO_9p)4y*K-Z!0D5MwR6+Av##Cu +zF(9-yt#8*+kvk?fBFhD9`!=T-y*{(MKah8-x;C4qgvuFpi!K*lww{I7Jnt6OY)YEM +z)07-1VF`z?pj`d23*+r*QlILqaOt1Yrhu7du +zz0Ol{2Em_3xzmqSOJ+VT;w#l>?5uJKZ9CjI*K5Ikmfj^(z6i7D`D&h5;CY%aS|s*h +z;T1`hJ9-CK+U2@@vpQfdb42uGln3h{t=|Hcksd9dN{pn$viPP)c%3`fBVZ$X{C=CwLz9IQN>!YC%2jT>h!64?UQ%9r +zmGR+~D;s}3=MHb0YS3Dn(ssK0M2?y+$KnndKHY*sZH(%k;kuYGb>I+Op8+BxY-8oB3R6{#OEm)vU_chXe(&CG;*_l|JfRGR%bWr@7r +z!~E|CTUnD93vrxJn3MdWIBVsPkRmfFk1pnqPS>jYlf?`4fBjFXPJOgLU!nbr#HxKS +zK8tSna_Uup^9ue)6W-tOJ-AqCqwT~${~A>aR&TYL$7!c<)LW^(f%{D%-<}MKM;Wrm +z(mG^~y7~f_FRCqCr#`vroy_fB2$F3`P6GTOi9ftcI;NKc$e1t#^edl^Z3!ac+xhBySY+}x1LJ=vi +zUYzz%Yl|T(8~c}oOC;;pr8As+6Lz9}WpP`$zz>z1hCF=h^tUILHy@0$dt)-RbqUgAr(syDOFHo3)BHMNA5swXbFI5*hv7RA@@yim1pmuTb31=BURR{7UHc=TogB5_$Hv#;2@1 +zwd>%itEqZZL^uwux824vdwT=pnvS^Tr#J1$`X1l5y@oUiJVjcY1U^ZcvxY}Ez99fCGn1m`3uTSO@T +zh?Fy`-*GQaW1Y%JZ(jC#b)Ta#E4G|^DJU0u@2%%F)r+UD<|_ZnDrvaL`LxNZVtOgd +zgx^0;F4=6~n-v$?a!BB{X8gI0At^j9a}HiRz;X3jnn-w5_WNxd3&lR1E#B-_V$`6- +zP&!-ZhIjV)n-i==b<$7dYCL+yb6=^{_=KIse1V&RF-%G7Le^EKHFT!B6_R;*O^>WIRywaa9ED}~` +z61!HD8=xaC&KSv2f4rw@a#mS~pwP6Iy8S0u^R{ap&@S%UpUYdX7x2A$aayg~#$ESS +z3ruFKTh6O>%)1ARKux__!)Smks0Jx{8v>O1vz7mF8X8&X=f +z&k9;}uxyROCy@-vY|~?Tx+mi-gDNJ4$_P%s;@{^{eoocBK=jAazprhS8CbfXBsU6o +zmG_l~DY?rE?AyuP&Slb6FZ#b$)P1t_=ien~R#*JlbuKUA{=^mEd4Iocd*rrWLRCrX +zTm5dyNeO@B_xlv4rEbXo&)wVb?MAwplh6Wr#YC?;e+!yCWI7J%*MH;Pd2ibny-$H# +z#s7VG^t{tEVIFh0tb>>R!H03FIrb4!|JimVvaMvi|0^%MDrRo}?oZj189XDz6d32n +zrZhaM->US}?$5E1e;sosp348%aq3yK+vJDL7kS+4#pbyrmno-n&Un($^sk)Pp=jf4 +z+Zk&)%tcNnbE~Yqm^o{%X>9Us%|tEZwePq7+?KalW!3MuE?Z=zCO*6{|LEx_9$(IH +zmsSppea$>etB_}6M&aYKHkYH%IS)OYXyUkN_Jsks_|}q&XgGNV3uD( +z&pef=Piv>^9{*Z@NbkeO7h5Mg?)BIb#cb@oYLQ~!EvM-Tb9Qlk*(x0y#>}7_94%D* +zTS95+>%DrBOfj1$dPbe~;$7^#L+B0TB72EN%(nNRzWaXq>50WU;>I)GU3ja0R=Qpa +zkDB=Mz2w$2xq5vUF3od^c2u)cF?v?z%6C<&=F1zwuH_})3SzHxWY>!%&0VyRW3G?? +zSsBCC9v^bNo*iI}cych@`pBYL!ZTCf2Tn=3yL|HGNzqSE=-$+;eDmISTHIcH<-<&_ +zLVi;O(nJrsocQy$p{sGBLbp%m_UF6_z0walC+hGQ%gh&HthspMtdsN2FTOK&g-@S! +zLTKO1wI`nL+*hNAx{Py9H=8&sZlVx_F`Y6Z6> +zt;P1QG#QpL#IF#ZEwEo?heFA!?T7p=&l|kE`#JFKIg`-i5@x4dvL0_1S*R-=Fp^J&)FAe|Plw63A9B@FHo|k(FvqTe-v!slCr1FEqMg^EY6v%$rWd%5|?MG~F`^srnvq=;4Ha&vJ72Mcp|5 +zxcPSm8%JCulV|<5|1!^i|F2{}5PeBlvUcvAKf)^)wqAUvsdnh4NqzgA&RSmG+&_#j +zk4lRDH1tunkE?jn&a3ouqhrsFANHEz|N6Za{10yXWgmC(pMT7r|H(gO<=Y_kQ|Ar7?jDVLE=!H0YVq8Dl3!!BE?9Eavc0vD+1c%qo3~WOD@J5# +z+}*ufg?dF9guPuXmCu}5V-8`h7kS*tULMJm*iMBsQsU%W%>73cci_az=UP< +z`rXa%xL0i3c&<%UBN8)a_iJUJYp{*JGLv1eZT^3}2O%{+^58SCCV6Omm%rG5qX +z-x`uCo8CS9f@EJXEp&8S@Edty@A{cxnR}|L3fm +zR9An)?pF4P{@?2l#y^nwAnEC5Z1XR2k>k~?bN)mo?c1{YwY_XzM|18ZzGrPrH|LAG +zIZLMBV&5{y_wmQ)J|CHk(y#3BJYF8ia!FRae9g%a7Qqg+Lwkz#gtfm}nhS3>ZE@)M +zIw42%s6@TdJt2-I{wa(sPSX`WvzMInFxYthjyikBvj0ban3*Q(u-g`DhBv*A+$zFe +z|Kg#>hCc>=NBYzSm?m7Dn|R>1v7^EZCcEB;cV5ZAXKmJFH=Wwmc9ALnMEmAVB{M|W +zS&e>ZtNbxvP_WBs{jAOE6J)k;j90H!S|Mh)I8S|pr1rn;`U91AQ*2i~)D@U6v2>rn +zms6kj80iPCyFM+qF^hY*EVo%l#+2$k@-K~@IfNtj6)Rs;`EyTQAlZ9C>TxHHfW6XU +zZ?8I{z)d@I~mAW?HQZ +z!^!k|hOnz=wr#UJwX~#u*M?FZ#&BlA9bf;S?|L16jyGNZPTliq?_O3^*?#Wvo1;3X +zBHS&Y-7$BDM#72nqLTOL7=4cYIM?z^UXZfnyVT%(JHyy@pRYJ&*uVe(=J<2byRiu; +zvwS|Ov6{@2OjFrAYpQsC+r9~G|Bk-j7aw9RFTPE&gGU9IW%3a0Oiv|`qT+wEt1>$?BX +zMW;$Je)$`gkJ}z*9tqD^Dk$RnCC~AAR{hS9)jH4Ht^a#X*i-Pr=+V@JqGeuk72e@a +zJ7@MY&Oau0U`3;rC7;T}`RCsYmjAM~v642Lrz@)yro3Zov&8bbZaj-OA9+{FHM^}+ +z+H&q;b0a;s_HtK+!s8u@Z=@!7%B5~KPgiVP{PL{jgFpRom)Y^w6s4|J$C+hib%*7AiYB8J>BRHec`&gMIXFWyOlnkQ`H? +z)Bh?T+U&1=k~q`CcV&{Mh)~x(30YauEe6uFn5*3r&eltPwp_YxBlnUMe_3RBAHCDK +z$$ISY!R~!a-<~v?SeDGQ<7S(IE1Sbw7S;bd{9`$H_5R*GO<$>WOQ8C`#P#a@$KUP# +z{&mF*_K?pmPhOq-w28-d{`sbij8wlDoOgx0H46?n&5ilMBm8os?=KeXU(%%&O&@b) +z3N6`p&NXHU{5>%^pnhSQ;%n_i(UDVmQ+`;AVC +zzf3XgU8yMO8uy&RNlYT|xqHq9?i1%+)=zbRl=+vTcJIVh;%$Kvf{p$4COKOx5>)b+ +zggAX(V1DF>`LkZBnms1`#Y>ktaAs_n{^McmYLN%_%pJU2c21E$t~_^-c-UGSm8q)^ +zE%f{PUBOA!W0zM}#*RJ~!(WHXIYctN9$dK*HzULEU!aA@@_!mG@6`Wk*fQj7T>pBZ +zq3Wk}o36##hkZ0OmMrwO_&e>A%i;RKO9hP~vripaXe(0P@4hOTLDB#5EVaeXYj$tS +z-NLv>^m0S=)p=~~%?l1~Prl0hf6mn@^F!nw>-Oyvbv<6?r&Mq;h~-E`<&>ov8UjfV +z-+4AA3#D|dp1-9iWlEUU(GAH(;*4>6reD^G1}xgjG}mL2&f2TCQx?B@_wD1;PcD1n +z_SR1j6g{R%-)?yN9Xh?7ZW!X%>UtFD;J4 +z6-gxr=9lUp;LqMI^r-On{8Z7h-Dc+k^7y3I>;9<^T`0UvXMICu{1(?Dik4p&N|-JeB~0Nu7I@T5qyN+f);P{hcCM~fXOa&(FTc0$ +z*a`y)bHhFQpHhU~4HN99ZP3U)(6e1xE@;>M*;@p-tfzN}A6e9E=U&gPbI@(N%jR_c +zxTUKeEw6j;q^8I^b^ReXN4x!ZogDL%WWs}YFF(apwPSgUkV&ie+?h_BmJ6saon_bh +zUT8dl9^ +z>Bn(kt;PL+vJ!jkUwogJcz505YxTVAM7}>eE|tJwu(7V0!PnM6h?&n`^1q~xLedPz +zhQ5rZB{TXT{${umKF?9pR9bS{6qC6UrpLKnyFO-TPGC!6xSc$eXNhfoB)bUjx)m~e +zd;+}U4%u0mczs&(!oug@=OY3POOH5eK9^`L%9HNo{E?c^qrcXBQD?c8r_x4+7N2@o +zLla>)2Zm4O-1?UbT#vop{Kn_XtTc6>ucbQg<8Cy4c)C_Ws51Fo=%V!2#>wG%v282% +z6zGR&&f-shPjgt&XQuM-)UiXYt>+%>vz7kW +zu2vbUFllPR@nEIzKZVm?)berI2ML|uwT=Jf?D|0QR347y3@`0G#Qu5Cyb_~%yZNWQ +z{u!t8@U8DX*>>)k_Wy2p(vpDhFIi{&Zt6O8W_6p)PqQ<^2lM(kS0p)ROwU-#u=vv_ +zWgpf#Rh>^;ukm01d?;J+pz4dG>4Fb?SDvpak#Z~vGnQ29EeX5)*GMHJtm>OWN+U-Ct?GzpI~YyR;+YT*)adZ{c4Fvez^AJew_gvL`?C^_v&L +zkN&HERf$`Ya(Rbj$hAHZ-jl)W3wLh*bvmsu!||!vi8q_g8|SahtqIB8C-{;jEJO3_ +zW`W9(t{Zvx-X1CrH7yF9rnFcm#_Uwkg}^Y`kAY!wQwu73uLRbYugf`XcTI(NN!F$! +zf1kfbzZ6p5uIxUNR+l0xZhA4`bnBWAX$3qJ`#;|gx_&!i(c1j{sggx=CtaBJq(M$` +zw)!>C{ycfUxGNv@pA@xcPx-Cv{2-5!FSgm?*1WcF4iEk%t5~d^8^JAoKgnOH*RZa^ +z=BL{up=rNTP*dn3fBKWsdqW$109)r128n0O+w$|-<-?&84#om3L+>$C)8#i!tKbHm^<==J-F2)d%vG?=)TI_<2a>|7H8R(KkeA>+XGjB~9hK +zcS3#HonXZP>epyj8+&1sDnetjx$*pgSO +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 +zadNIUi|#G)(@W; +zu5XY@$nShIA@;D5?P4Uk@Ag!|_3Ky1s^5KNujT#MeRD;3 +zlk`9LyHU?Cg>5!ZG-(b!EUx=_zV8e+U3H%AEIz+?G6hb1>Jw)2NXN8aeczl5@^|k9 +z9@}6bv^~;e%G~54t2*JJ2bL=<-qrP3ofP9CvEWhjp6ZnxXJz<4@^3CR5IdsI +z7I>X=;||t~JGGC#y7*n$!*a2LV~nJ2XG(rV5 +zHKE`9!#l%|6$eLhtXt$!{yg12W#5S8a8>hC--z2=uc`cza4wmQsT^e +z_4RUl_8Z&P|CS0CQ_L09JHDy<$gT$_O}86$cHL&quP^`b(SEIX^1kx3LPE>0CE0e# +z^NF#%x~TBOie*vqmh%6uEs-a}WwTW8R!q>yu5aJ(W#6^(;I-|Yx?f73#5K8bzuC{Q +zVTY7|tY47LBxTuW$%%){zPJjB|Gm;4FP*XP*v@-mbyCw8@2cPR=?b6D)Rex9Uv-KP +zuexya2HQiuwdtF!Eaig4%ng35^SycC!~?e)XSS&8QTytHcU;xoY{WA8?!;L3ABu&? +z=LX!joi4k@eZrjWcXFg|njE{~;(No@QUfP!kJ&6XV%|YIk(35s9Z+vjO9Pl%e1Y9k*JS3;jzH0vT!&Sx` +zrt0%DK3N)NcVVlj)9>DtrB^NN&gW$AdJrvhTv4nyVSQh=ot^l%BBe)PSnR4MbG}jB +z8$98g_BYeFkF;ESSvA|NE^jdEPPtpHEEZ||wXv!4*OC*Qo}T-z|5|o}MgH7`dh@!5 +zUa`q}J`Ha#xfU%xvg7Q_H@sJ8EPk}{YJt +z_sL4L;H#*Bg24-<>lnwn~JKWeyKb0APssNAIvyBnbCiCtU)-sxK#jz~@V>G;&WV%-#O>5`7>px_gsCw*qz +z-ag~P8HJr*1xgb?IoQl_DD^(I^&CbuRU2+P31&HNXUD@>@k6rg=1G;|Kd)CY@b`t+V$*jzVC_1U@k0E +z+*2qzt3q~y>~>}$wo0yd>z_E3ICgax@*G&j!|asU*?4Wqtpzm_P7in|J@ijz*l0NG +zm+a4u+buigj@>)H;*w$GH%m$OBlWrUIz=J^%%P@pkN%KfZnAfN>)iO+jXyn-4IbWZ +zFzl6D^Dl)SHA^F~g-H*I2L^$p|acbnyOZZJ7LcRX{Z&F|p3#nbH$ +ztT>ZAjkD=*NxYk-OiFS7(*kei*IiG#E$c5Em~Her +z@UF(w;AD-gP~%hkg%2CCw)KB_@pEm@ilV!(@&%i9h3&U#DaQEKKiU``m^Opsa0a&* +zr}W359aCM8h-|jtUUF7oTU>+N1RbNFQBG`m{n7L41KB6*76kh{E@nURFEsKY&!Vu0 +z@7wqOOJwWWxytvvt>h=4;DvwYeYx%sw6<&#U*67KRo%$W*_)1t&SfvZcFo``*PF(@ +zg52-R6ilXOCsZ-%8=G)_<1>0v=yX_m`-Z(+cE$ZyaLE00ZRZ(=Dn*yoM_m_1Y^bQq +z|KcGYVqaVTYo3yo)x(GPN_xV?j@O@1{@Jh7^*%oQ-(rKpj(m;>YhKJMX5BMg)q>HB +z@$B>h3r5v?1p^iVj)+D!MiwSVhE9bBg$4#?4!%W_D#rd+xurE>8yOyFeEqaOXXUE6 +z!rALr#`UmH5qx!7 +zSpB&78Xr?D<>8ZC=b(R?!zp>ff{}#smwz`1Y~{4!(E9&o;)DlAt2Ipa%t@|%&i%moY?G>8CI80m*(X+a +zi>s~w(R5`_be-t3U9Eebu!dddn^rU7cK`OugIhWloe7lCJ^p3Q!o!m94G(n--kuX+ +zVy$)Wr}pHZM}7+kA5)8~zta5Dt!bwFjop0tt_;PtY=YJoKJ=+iI2-$>sw+`(5C6oT +zGftt&{=D}b#Lqo7p7!XW{D&;1IkP%j?2f88h)+LQezQpESU~(|9kE5-C0_S+vo^Fz +z-z-|TG3xz1DVf(V?s{8){JgG^W#_h6*Mr{)eRE`NJSFJW1s_DS|-Pl_FbrB(CVjbd^KLl9k~30#Or|A| +z{^kYE-o4yJC!%`eeOckmsED +z>QRA5!qGFSial5SA7x2R>yemv=!Eae7FLmxo8mXJQY*7wDqUZiaO!!H<(giB=)maB +zf#F~JL-s1D^=&wyTjRBx>&$A4M|Zkrq-rtjbp4_uF8iiFsx~oT?Y69Uj(e1H8iHyW +zGxPQuobog5Sh45CowSxsY!4g~MT=+hKai3Om0kE{_Z{=eO~%u`%~_8;wJT6~<1Tfy +z@+qH((C_)0)l;>N5<^^idqOLE&BMHGezl4DS2S5)cCJxc`$W!U-+||gSlU%~Ugl=2 +zWGePzw+wDsDSAw_e*J{`EgO4vJP+;rQ0RH+dh*F7uO<4e`9A8s{;IvneBBC1y)7=Q +zS!|_MwDsK=~sPrnVY+2jQE%w>- +zk=9Ld=|a)@-8)tZ?d!{t?R%e)aWNw0NBpf*c{lbIqziPgux>6$de~I2EfIFZNILw# +z>kfg5uiAe&X3dblqsW?<;-Xqqe*r#+a*y5A#$^XISW2UNc}$`ovs +zkSHh>-(uAAu<292rCjRGQx3Q~^zs*YxVIPJyBtd9EdIbXM_rp@$R;psZ#p3&M5>;g|OO?>yuaC!B{lrwjOJf|MXdi!m!Q_O4qJJ;8SG41QP>9jGg +z-@#*Qp(tBe)x})bHAcDzf+oz54&!O#aJ^b4=l-XE2e;3MpOFR^7BTCS*2L*(HvXHVN6|Ij(3MwkDg^`eU=vnTZ*n>w@oPrKlzTve%A$E7|m +zOmIK8t@FoIY0E3wAFr3~x}o~VN=P^6^zjn&RX&2twz11S@a|$;3&$bu&OVzgN3spM5d2?9w!OQlR3bm%-FLyNLYcdn| +z80##F-_4Vur>3p1*Oc79b(-LbU4hHOmn?1FIJ;*`A8X(>A*P$AoCcD&BTjER$i}ca +zNbA}4)pI!#Y($st);Y9duig!#oqaCcW}T6_C$xe^T2h(pyC)blb-6xHIy#}dC5UIk +ziK#Qab9FbGImFn0S~6{d<3EwGq@<0SS)49wJDWwrS=w*SP89ztDqkO6{(Fmw;Onar +zCtkf!dz)mTx++RQYfoW*|6HvFv&DA*SvN(pk87O_$JMJ%(Hk{XoiB8EHO{zJ`%t)B +zYhu9vbz2M!Us?WLc!fVCs^VeD$}F8_8?-X@7l~vtOtLCnvi4BmvDv!88@A~9+$z`n +zb>o2S+S>G$i**ksE;EaIv+MT$pY`jvygK0he)hggPHu@?q_$sKzff^nMA3_Y+<*U? +z+}4?BWo@}?Xen@4<5pdM<$X6RgXNs#B8Ou|4@_?PO}sIz|#}`v+beL#ZUH% +zdsSm5A3CYK>p~j0{%uj8P^R139w$G(T4lA*N4cuL;m%Vz>9;LQyc=g4yNUH&vr)Hy +zFS3g7ebn_C?YhF*!7)n`Rn>!behJMj{Nc08VS1(3yb1o(H8+-J1Vn}hS(SfI|_4UW{k7!BS2%o){YYww5LY}|;9hrRmMnk*cJN+khO52ZUus2++f5%q7Jz%)2Tll5WZB4BWn_5Kv?Y^#BW^}-Oaao%?zv1$& +zJYv$Hir!AW`qm{%U~a!n*-iU35#nJYStpMrzdZh<`Otd9we|a6E4*G>F5bng5c=S(fLnNJm+ZhnzpaoV4cOLap1 +zJZ9!v2mfPPm#w!qe4FQH_wMoMly3hmM_KiM1qk~cS#YY(T=^kKx%tcWgj|v +zPWu4w6eU43z3W=96P+}^Y6VW59QS+17qQd_MSk^xvW~}BvRi8O>^<_*{>2A@Cs!`t +znY2~=wYKcfpIN+;9G@9qPDnVg;X&iFY$nAbp=DaOwfU#hH=nsUbI-HWUnFXu?sNFQ +zH_Pvs#T~Z$JGQO))wQME=u(`f>D2z4af^R0zxupE*&dH(f_!f(-IrvZckGA%7pJfHJUd%DDz%SS74JB5g>SZanDz4ORxPX6rE>h! +z=3KQd_dvsgqRGDnI?iWLd{a{YhPAwN=b0&6&n(#^lqn|Etij- +zF|+<`kTyxye(q78bzL({nh!I0*e699^sReRo3SO{+4MxhGlo4}dar)i$S;B`- +zKh+fimbIIsBg8q@)zyA5;!M4CXU%O3`OH~|PhL@oO1*p})kEdWm;I;q@7f@+GOga} +zu|~=KX)6DPHCCF;bmZ+;w4Ecc=u6x(0lx)r9~@cgw(Q3Y&aZKoraiHpc=bR>W`N?a +zHS6yDxIX_Qzrtd(iHd7)>{qxDF-6cQZqo|Ke6T~XPEmt~8??7UA +z>y{Noif8-#mx~_Mf9Nv%dDFUW%f2frv4-6K;#?oBG4WXVuI#kve4lt1{n>|4thN{5 +zB_3nl!q95REOcm>jY>g;Y59QW6dYym6gioHpi{?C+P6otmzXuem}CoA?yEVWdtKB_En0VN +z?EUpG%a(}=35!eF_-*7~y03GYkVp2GU;iiF{OpmvSt{0L{=Gv>r??+m5Oh7A$yu-I +z%*>-I^*ffZK7aT0u+h1lFYX){*?VeUsnOY&sq(H9bt9h5693O^rTprq;i;pWA1k)l +zTCa7zvNnlFq3ZBc%Z$6n4e~VPo>_PVS$|Ca&u-S%{G`!6s?Fd?_}PhZQhVnooOjw# +z@l!6nGi3Lzr(!9x`x$vvmMHuT{&`NnIrZxcXSOv>lN>ASx3=)y3S4tbnT`F9*o#k_ +zZb>vAf4gGwz4=aOZ?hJAOrKxD{c1{K^VgFpi8>Jnz0NE0`SHabWER_68|vt`@$+fb +zDY=Vop8b4*Z8c9Bhq=g`BZ{f^aU2^B97PYG`L{l{Y4iHivtKG5{P!X7!km>IhoV{j +zmR?w)Vf10v8;XXu=cP^de&8! +z6^~vxEPs7re&4RfO)6b?vKHL`R#wQzoukHlw|<8irJklqYVVy} +z^Z8e}!iRU>!f~v9C9=zz#5ev7|0T#e?eugfOS{JBMIW}@b_2ctiT-sO(hu*CI~hg#riLFRCmkX`t=3-+DEP*w?%Wj +zTkv{|&+3u|nTtiPIxYz8FA@0s;a-G_Q2q3!?o%7SuQf^1{@SfmyM2Y~r`(-^C5k=E +zUB9OoD4Q*`mbP2+M58G^@yZw3!gUv_bCnkt38o5Z@VSuMV|Zz|yverV~ismGjU%IBk}8b5o!h-;s{Oflz9ZQj9^2lrIWWUebtHe)Ce +zv{9=+yI1Y-^l;5nhhI3B1l;0xdUwd)iQDwoCD}#ia?7PVc291q4wf$4!_{B5TCbRKV8Izb7K5bL<14rCy>No{j&Bkp +z<4;G99n#ioY9enRU-tMO-z0?vvp)QM(6Ie#A$!jrrF!=GGU?FlWBT{*{G4|CT1N9u +z?uFl4Rr8EP6weqe%n~TGQ +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 +zS1)2h?H`4g9`S-=$ +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 +z=BpzW>K>!Oun80x))!X~#(IdtHK +zu0c(4*_^Je%;xd?bsci1iEdasW%b%G7s8_EWTtMKYIHd655q=>9Tf>j`Iq$W?3`I* +zoxb5f%yz!k|Hg;)o?AvgUc8wEXxWzs+H*LzDJ`_uF%Io+@3oS*-XdqU>V(0ay6Z>rMYiU(wc>OL|p +z=H4c0QH|3p94Z1E3tU+_ghelOuQ>20pfS#wbrQGe3EveApBFIgYT}y1Ec$|Xg~N~f +z`AjGOiYQDvzDZ^7@iU(u6f-PqyL6;0F8f2pvs<1_=}Rx3*7O!$R%C5yBC&i6m+*gW +zIn_{C1J&-PoPNd`8~9e+G(KB&{T|=kr&E*895Q>6B=K~S%kM)m6T3G#=yfel)PDT= +zdDN_bN8UN#6Z% +zFCto5pfc;&b8Fw*Hk)LA8DD<&_#$(ab=SuEYZ)dwUsTwdBY3%6X#tW30t6f;ZR2FVpXrTbEgJ4ELPdN=EA%MVU4UoOF|@0p7Q#^#CLJl +zqN10w-ic>8>kaHey*~hL~z5Q4b5|!=7n~A<^N-O_Tqx%E^UcFCB25Z +z4VChz4=mYL-q3L^wX;>?UD&EQ3IBw@6sRhtP31ddRQz=}=!SRIBIzIB4$tSAs4CH< +z_4UE@iCY_0TGpTHe7t?i&9z>QDGS$lntqGhm4De}y6~r&-}lznG9Fbc%)fY0Yu+&) +z2JXnIjrZ?r$OY}%F8zC2qQ!o#hktwwf_?XQ9ckKBS}C&n=9ZP0o8}++all_~f4~2{ +z+C63;&NrWm4&S7FjPan+6o;FB{`VZWJnwLQ7N2eHXzPE->u9vn#Fm{dS;uty`F?mT +zpYn9I@TJ$679MYS6~AriTGjeLCf(|0{F@f*_)dOs-M}TQ@Fw$r+w~Ug|IXdJr~kqI +z;nVd8-sioOVES+N%b)!ZQ@XzJhw3<~J>MDr^SDUgv)q_l&+upZqtEyDzn^w{{qy_z +z&wjkT`0;^h_`iRhMh9-!**iP2t-Bu{IRELz_wnc7cN=JDE(vE+Dm436GBT?wiT}@2_vOuK02J)N2t;k;@JKH*tKQ +zp1vty&14nxjlWkO-r!foIH6a)x%5)V1g6(hOrLI8VEorCc80d5(OxU|%2L0^^&zvw +ztc89r{JwL}QB&TYGt26B3;xr(eemIwwBqooTJ`1j`jM)4MZT0&&x}d*JvdY6Qsa$v +z6GYpObqUv<`&@hO@iC_pm%dmAezA-+Je_Z+{{LSA#x!q3v-?NKv-X~#uhd%SI +zoo`K7pSZvAbfMpcOP^;nh5gD4z9W%R^pjU>+iM|nuS5NYKBwKdM#{i-}LNt +zs*WoYd+6gAhXN;j-xNFdx2#e2gS5|o*RJp_*WPkS@+g=3%>zF}9^U!9q(}ac=fdyV +z2J0m&1RnhB*I>x~ronXbdVQChz<$+^POZLUB!T3I+JC-Iz_bHQ?+z@7Tijy?X`$4U&$MI%zc@|4yj47Mk8$T-?)Fwm?I>me|Hmo}lBca>Zk*TY5_-A%`wO4T^6Cfm +zWftA5|M){ug30jyY}YHZ-1#rOnA^WhxaeuTz^p+Z)!ZN?B3<>#6M@P +zFAATSkTh-e8RkW2e)FH7^1d;R{noiPd-nfP`}O>F)3^K!uPZW=u138#le>Pma7Wg^ +z+^g#!{Z$fLJk!RtW~2K1g)9?u3$Ck~Se9;Zm~&Aj?1jjQLnVh+L`OXS$gOom{$#Pu +zgCk8dgWs#wKiu4NK;iy{70O+g-?sdm(7_utOSka(wFPe&)D1MnobK@E`Is=2%Unt{ +zJX~A;@BhJq>3Y&n4#nozWL7_QYqbtGTsW~{e_g}1#H;o^?}RL5I1m0|`6xGe+r!t5 +z)qbieoOf1FZu@&CrDDtB*Xzyi<)5$L8Mx)m`qc^d_vPzOS(;y;{!`+U^YXMmX=(T0 +zEwv9jBQ&?QPB@!w`ka6r^A^^6OBG~Yy|zttQ>GB(r^riNqGXKP7d205{oP^l>!{H2 +zIqjb}`^m@raoKvnYf)FL(+%#<4bly7!fiJG4_R>}=)v*+=x*;>^Bbf6jLt7Ki#oCJ +z-#;_g_Lk2%-HnMVHG98Ean`^8D#=rRGj9LycN?<4RY^KqNH5@?np*3(zP&qd-L7A) +zUv_D1alWu7_3AR68F4y#>=)nNzaI5(UqN2O_w6@kecS4C`qh5hfPeNgFW>!?&!#ff +zbBX??=RYE{w(MW5Q*N-XJJ0IO_BV=hUShMJh|BEYJQVZBD#j<&X?D`RgFPV^f7E;4 +zdo^j1zDv%-jbG +ze%S+!MpJ$-zjrx1`R93CTcZPFI-UL3Ba6UD|O^if?*c&OczyE|`6nQc|mrAb!e0a=+GvyD04 +zTeepg-7&8J;Ku&t_qls+?zs+38(HM%OAFfMcnB6w4)Ahj(`=WTm6P=UgoanEZ_z^b +zZQ7=lJJPm%=rrvV<`)%;{q8l@^+RcEvuU-3$PX^oi?`nVJaYGb%E4J5ew?x2BwU>P +zu~k>?E?4%~Gp+6sr?P#o^nST@;Y5yaOijO6(b`F~EjcFW*0)>8Wlt7*E^#te@cHYC +zWtB4&&IxnwdLMq$Dt_x>iMGYc5t|R>ZF=2@QuPT*t^v;}}JlBuSefuVSV+Lo3MX~DADJO5vSu=BeLPB4M>Pn%vcB*Z>={KWH +zdju6@Odj6)**S5$%Pxjb(-m_V_3DLIOqnn2%)r6IAmS3@GOHtbqJ@9*34WG@1C5Q1 +zObv`&i~OJB2I +zC0jT8%cLW%V$H0kyty|*!uw20znl_bGR)ze^yU?3+?G8d?~+a?2zh@`75Kb?byo!^ +zPiA(Y%1gVxboHCX$Gp>0vYn>qt$KReeRuxE6^mnot+(qn{!*;<-zMk(>rhY{1u4mC}8_E`L4vnoHNt3Wo}*ZSGvP;(bL|tQTW)3iuWGf +z_l%o;rt>VEzt?N|m+*7v%cZMV2z*U8k}!LbB$DxFZrM41r~Mq=(TD4OTRo*SGW8P1b5}o+ZDsdY5(IzZJVO`y7p}#aHhTtIH2!Ue!Lc`=E03 +zd%>PXV)4$tKCCzt8+boa_y6tT;T={n~LoJFdlB3iD0Qc2s;7@u)w~ +zb*g&mg&j8pdAyFj-1k}hv=pnb=*jlp2Wq!dqtlsclNXC +zQvwv9znFZ=HPg;$aUaw4S6kRtCWh~exMr}sL?CYG$}agYR;lJXjC}U1?QXAedhZkJ +zT(vfF$FUb;?Hvznvt&MNhG+hg6`!ZjvCoK;vHs%Q%b}7reXXo@EHOKeSv7oFc>3ps +z*plQGdcQqp7ro$p@q1N~U?#^iCsxtB3M?TLT0hyn(>(FCH~09wzLHW6g@gXiyDQEp +zKkN7s{?1@|_WKTlQ!)oLog^9+dY;@@?~&^3=z-tsTZEx>asoOoc_s-;9JjkJ$=yy=dH$vaBcFPC|3G +zpa}oRTN_?&|Jda9sb-?LHqYle=C~S8Lz(eOfws;nqpp=4vp$&RFxxV?(uLz1~CZ +zRa%SZ`R*%X*s_gFVeR=TM$4_&ueLnE($Mndz<#}dmJeP`tUvo`i)72Z9*xlH^E-|o +z{d3oF-y<%C$xHLznojj=F!*1v^s~;~tsE{B{NGREyR*bG#f+!#;hN11kM6EXPnqP# +zJL6gMdEP=5^FUvlLbK+3Xa8;ZJ>lv~i%&1i>H}Bqh~nNK^XQT2?5@C%l1bb29?gth +z5|r5Fsej4;@LR1}3l9h+|E@an)#m))?BF>oc`nJ`PVfx*5u`fHyvJtZk3xZeySo;0 +zGn7vXs`z%1S!yw6lbj`Qzr*x^{%u#wHr +zZU67-3)iY7_sr&yUG%?e_wMxn8EpRi@q8a{YwMpjIy9$Z%bXn{R|9oqF8t;#-@-n9 +zedCFgKz{Q=@7|-~JpcFSa<1=G|GaX;>MiS58us~I&v+yxS3hf+p0DE35A$52F2BB! +z*pa}!j-$WPQElFly$4gHU1k4$=cg0>Gdk9nm;Ur(s{Z}(0pF2%-|w8M +z_;gtHz&W3n58K=IbzAS)$t7uZ+TxOy?gh)mo1{gPFgoNR`yzU +zIGBd?{}vClt!2&&RA8TXX>0Sg>X6IAQxDIY7wl^F^MpC)25H;aqxoMvP8Zx><=lUs +zLFuOUw0RrspDcdC)1mr)`xlqs)eDz!rq)+WWkk=j+*_r!F6bcVy~fpdAMP>W6zOw0 +zy1Yf|*{K`(9r`knCyY;jZj-Sr*l)DZBeO%1+7DWRI*(B#9I-b8|p1^ +z#ZGij566Pp!spITtp6u+BHvSUhb71Uvy$uHn5}uw@~+Q~iR-;wz%7{`cbA1{7rH$P +zvN9>Cw>N8VPvG~<@yqp{%9-Qm{b|p$h?=ZPO?fqy$@ynjIu}O&XVBgI>4?g?MROJ= +z-g&XJ_g=w8^TvPbyR)YiimJ^leE)!X$)=|{AOEqMcne%JumAMSIU=)t2Z9bKQDj%GG=J+A5cY;$xa)Aoes;5j@yy5!j}=Gf2kDlA#ibbv$6 +z@NGwZ-hOI37WAZti%sKc??hzU(&dn>5jZ>(c9{hEM9^jk+%;O>b`hv-;})V@2yX +z-I?eX=v&_Z%KnQ>{zC7W9*)fKbul|elo)g{IR_Rc@Z{GWkx53|Pc1E(F +zzWuDAFJ+df?Lj5+oY*E&O)h)S5+C$Te};to1<~i^Humwq;n;ZbVy^7zSbH=SI2I?Z>wZ>gSiyx#2E7&F}%v-iu$~bPfrph6O@cxk6kuiC^2>F4GwPq +z>xy@6U$n;_4cI*G#@hD7X~Je7&sqJo=9HdkyZXw;`n*+9JH-M&9ypfj$iQw^FMZ?8 +zu8T1VlPe8^|Hp1tp5giOt7k&7Yl86%fel<%_qDkLrHVGM+bheQ2v>0uXcwW_%Z+4491f}k6H2_iHf{x+<)x&?U`Se#jQB-VXtHR4(ki~t!+0R +zOm#{PFw^B%XL(&O^=Rjbe-4Fr4#rGhKXKVDmwj%*cNbrh%KR61_+Px^)E^O2xA?@C +z?>**ujp5Dd>2?bR!i8mjA7$5AXL&!-fBiy(+a-qtXZmNJRw)skT+qYEw}ko1x&!-) +zH9pU>`J=3}KJf3`mbq)AnA-I=%(sY9o@2wa-m+!|OHas@35v(pZnm$F<=f|Ev}iN8 +z$IM^z>oN~Uulmoq^y0M%#l1I8kI3(B+K~Mq_vf?p%{zZ5&I!uRP3aD~uEW5Zrv6C8 +zM61Je!yh?&7NfPM>t$_9c$u{rpN3mq-_xhRzdY-dS;LKMFN@xuHr+CfCD*DbeAn6~ +zex?dCEHUou{;lj;axQ2>L-1Lqfcp5C?f;&)++aVo`fJsKQo}FqN-^FF|MPiSpRBFT +z-jcqmCfm*EkJ9fv-v{m&*G4ZsBee34RQakT$?a**cV@Nld28I3>T8u)w)Wv-cgC~V +zJ|rC5Wa?O{aC&af?cl0-Z==r6P4ziuo?MS?*?)g>%i*xTr1W=1m7iQqX5J&qqbZH` +zA!-bBra#+mEyms0u58=>!o0aY_o_?Q{9DD2p>J=_-*j8*ipgHCWXA6KT5Ga9jVI1! +z`?&vz<&@Q}6+b4(Pg9xeJK@W_aNaD3OHU8%l(o&+Ytx`EKH22C2-}8_?z`l~#b0Pj +z6l6;a{SSCI<>P@V6P+YV&;9(W^|gzQd-omJM>6$ElXpxh;xk?F>W$**pLd#*o!X`@ +zG2UpT{(Gm<@zA$dzPDMrc32+2xVAcT)8j*y={aB0iaKLV)A)i^jf&SeIqa=YI>)-( +zE-ilALcW_Y9v(bQk$Nt-t*}A=+2amOr5K +z-B;1`t!Wki-pw)e&Um1^_{aw4g$W5$9+V|&hwk3L@ypbJ*~g#d8st85e(F=PB{W|? +zYMSAetGyagVqb4+-MO}9E`zMd6cvge{weN*J!&9{tKo|u2``Gjh>ebatin#Y;mbBilFkE@-d +z)p>JQh}J1Pp5ynwM86L;xe>tf$^Jry`1xcX!5H0n-hZX*u8FzeS6y9SAieAg=36x;(G>*MEot4^>emD?w@CBfm)&D-l{KZq}Wu|9IXYvG56 +z#mnnB4=Twt-1j@yGfyp3FMZvHXV$8s0sDm-7ReXuZ>`YWR4y?&_}Sb1u3NpL8&%rO +z54_B;5%6?&fS?G-Oi+Yb4rzC3RYoy!c9QoZZGkrZ*yIJ1B +z&>(G|?RQ`A2R=)V>3^TKsy2A;`Od4WzsI^;Z=9*RzDRtLf4R+rc@OH=AAhm^&W)dK +z_Sw-TCv^7vuWjBJ$TV?}=KY9;%5SITuQGASkE%%v|H8lb+Ch^7F5zcb>__pGmT9P#5Iav{w>m<`E~EF4WDB!|JwXH +zZTXa|lja??EL$$J@Tgh&>F1UkP8!;$&(DxPvnnFiX}_WOovD*O>)G?qM6VMvoZD>q +z;>^CBGbxh36Aby2b)o_k!i++%t=jut^M~7}g6@>UMYUozKlv7ApLZ9VAs4yHK4POX +zH}93&7yI(JTK2kdrdF@eiEf;i;8y$V#)E}x-nv!3&|GG>eEW>)eUsj8e^~7&^!Cx5 +zIa@ybYT3>iCoORL`Sou~tDYRI&kb2ETJ~$hg)>{yQ#kLvP4D^X`kzC +zEWXAqx%){aW}hivUXG~Ec>hWZQk|w +zlU>TW1^gHvpG!Nzxrg}^ua^577MsHhtIn|r3LiMO{C&#&RQB(RVi#ZA9#IO3HZR>A +zY@@R6L3tzSPcwooPbPIcarb{79=9=@(ti6(=DgPW}nYX4vm6HYpE +ze&XS-QhmvYC}vT?r0M=Wd$y@gY~1GjsNvJa`WVfeoIBS8H#TH-{`K{{xwl^YVT@$q +zJW2Um4~4bkGldq-jjeyrXIG-jw(i&LW-rD7u^uxKEjQ`CK5o*&{kCarH|HOC%X$P;&4pV)okuP$9Ip}b1vvidYe*x +z&Sc>OmFoKXFSA}vcVkbIW7!uf!_-!|=<$@~Ah%R^lT*BMqW_*q9ChCM>%pat+xOP~ +zQvBkc_hd%~W8B2Yfk#>2_dHIHDHJ`>#29HdS4rj&uYA(7sRH^Pxh{S!H8wXlrskWh +zkK~ZxyMDW~&tt{f+3_yl*Ug$Wuk6#q7N%FXO}8a}%Dj0}t-dkfUG$Opwp^XIT>Ipf +zZk2l)-Y?`E)cYCYWJ*>_MqmrqX4T +z9rulrUoCbxCL!6eKyX7uz0s;5v-`F0&4teFXlqG~Sa~Q~@@>G;f`RKcdHOwCzhcMFyIq0x*B2%wdLD8;=JS2QBimK{DyJStmUk9*m9G29@Y&}>%L9|E +z+E$!1%x5IUYdZ=h+Hy@hWIgf!zdiChuGl|6y{P1tP_{IaKG#O3(%Dy8iVIRU?v*SyPdpMP^3eqMi3oA`F;bD>?6%J(PyJguf7q0H7dy;6ni +ze&QQ;#(xP%wE7bkfB)ki*s#N*FxNS3hy3HPsSCV6dB5;5V+i5j^gu=H_v2EZC_izt +zt}`Ao%Yx)3?={}ve4SBbs#4R8jXmeX>pvYWuVDx>lVWuJu`2qC|J9!*tUG0D-|)lvoh_1y~XS`5fTy}mqa9w@o^tkW7~G> +z*NplN2@hu{JX|r?)%4_ggQxorbxwUP{86;+I~R9-NP*SG*oRX?{W<15bXs!$?fbk> +zENRzc?ioH6PUSe--V!wDuyFmCe@;)D|5DQxz6RZ)N*%`n-;isC0O1_h6~^1&2pht8e=$+_H6h!t9bBFPkL&omc9` +zE%VDEH)M7&EOOx&m{8jin~@sJQJ!OMqy5YN_>Hg8x6Z9dxjsozXy@BGwJ`;yg<)@Q +z#AiJJd+7CE^V}N;>#dEp-@hAn^ZwQr+4i+77TbHWJ1YoyI3x%JUQAHpKh~6~^yC+# +zvO<7@fB;KVi-Upz2MbfPgTf6#4i2V92Zas}CJvUSP6dciO&Ir8ZDF4LNytMfmclWurSHJ(J3O&sD$`oG4 +z{^N}1LU)%d+zeMPH&!_^>^jWor$2*De8I2!vAgQ^%lB-xKad#I_UivPzJxD_L_8vkv!C@Y;b!8|Pq{2{ +z`O{+VU#;wS&pEt_f2JAy!$6p=_4y$|{t(V`xtDIU&$aFr3euisFfZ13_Qii&J;hI3 +z=;wN^pQrnbY2k^!EqzkgcDCKMUci34-uc@JmKceT`&PyTgd}!{&gxWJRj;tXi@Baj +zpx8?5IP%i&`RqV2Mt`?zJx3(RulJL@CN>{dtI$WO0q?OVk$$ig# +zB3quLVqjvB)SM5=e$!Huc{8>zaCqYo?9!Be?uNtx?lWQuY#(}}Bi3oXtu9Uv%A0uZ +z;dblh8%@dm)%n~y*~0s7Gc8@?a#u_vU2t~&PTdl@mJ4Z$QiU=L*R!7es&)I&ue=vC +z_>auC`xk9`qkN~$Ba_MdxcMY3*DPI#p5?wGfg +zVL~?VnLG7oIitcGHQ#V7lwbT`n7Lo0>EH=p-3SL27uV*L27d0J|0?RG>aWgL>f_D{ +z_%3}@l*3Kr*>A2kE0cT`PjSX;UXzV?I&t+LI~JPDD7pVk`CK7U!)5J!zr1>I7UwzX`bRBu?v{Lt)CgbqavE3O +zZ@rqg%Y|R`XMPlv5 +zvuV@9;=171QvHV9;>Sc}O_+C-s-0&@Q#6?WmRT%d+p%T4cE4;5{gABqbrqK$cdOdf +zjj0a~wDE-DbkVy(IzD$YD?IEsJ=DBfCVX1a +zT>koz;E%#TBWB!L9Cb0-QAOBb-@CmV%*AXNtwTkgR88`3m~#C`@@t>s)n_%3{VY^l7mqCVtf7gMp1{JD-#dY%2T+(z( +zFKw8d5p5u}bgjhk`-N8({#DOiwNuT%?U=JiM{CsLeF|a~{(6&+TbG)cwR5-#>oM0& +zTwiv`TqkCi`Iat=4Q@q8qzc%?_=@W}w{sla!XfcG_KJ<5vf7U=H4|5D6i-!?{G)D^ +z%>H1?zs89(g<@}}9SOX&Bl<#Ixk60Q$L13iTiBLQe?Qyh$z;J3Yxv!NIjuB~={wrW +zdvJO8eVy36sEYx=8m8E)98bMlThN}AI?+Jlz}17R{|K!rEIkp>`Fg8GMMlf^m+#U) +zsnzE^=8=5onBrl&_|L!CV+Rzv0@=%!-`b!3ZvB=C^51g)SO)%_b9zYFVY^|ylipXV1Sc?Op)`CFW=V^q(~ +z^sK#Pa{sF}@62BYFv^!6UnZo!)9&n{vT1XU{L<-r7Ze<@tE5FhxG-|!$%Zfa9Dfex +zC#ST%>OH=YM`7-DX`S~uyt#|=3*=2EH1C_r@`&$C@0Rd3jrsX6=jC6EoKVJhf=_z^ +zA7_!`*Y8J@rk<`ZUC3wQ-1M4D!v;c@sQ}ldhMonVJ&xZU3c8Zq^nq^f<$I*cWB4TtF(j`!@^O}|20UWB$x-`%yKF~&7x +zd)J37QODXa!K5`xbHZH%)^^ngcSrJ9vl!Gb2$O14LvkNHVG?3~BI +zux;y=WA%SylBP>uny)Q6-(=po*e~~`OnkPnUpb$?+-dgA-YK^#7tekXs{1F@C-nR= +zWiEqbZV^7rG6$4IJ+5vwYdiQYP~nzc)8b`w%E|?qDuT>sR{Y&48Mo;wmx5|$zSJhIF$r#kDpOe?|yI7%f4@ES7g_!h}SLNwfInQ39DIZ +z;o_R0Yl59F5x+EE7ft5aDl|LrUEiLps5@s4hwO}$TfqE@?b>&(tGk%`6fE{EUL~ul +zl*W4P#>JWMr9#c03NRUX)?Qo|Z$E27x%-Wc2amrm{Ge9WA};iKSLu@%cLIJyzT{B+ +zw%XXqeO`TinV#~r#Y{;;_8nIo+NUr7*E^@%l=W`XS(&X7+=*h@%^M@Ed5xnsPBY(o +zPp0F{qwK(h3v;h-S6CBivcpGY3%99BjKh@7f2&3^QIv+;rgexZ+CfpGpAf(&|jqGd)(nsve)I>y){SexmJbM_lFgv +zzM0qh_+qu=cJYNfZ6-bz`ghDrZp&llQb&nr#8w|!(v+#u_A&BK1t#O$f}e%8%g_QAJqMcC<3<)Zo-O$_ta +z?le0XWo-37{!jT|V<9cQci;AX^NN+#={BsF+9z=`DzLM6(pH-T6Ccg$4~)0od9|mZ +z)$hTH!-u|KGyGSVx-41YTaLT_UhmV}gT4MFK6}4iOq7L9e-?ksn%hz0oyVRiztTI@ +zbxPDg?!j-H)CsjN{=ZJ1c2(Y^b2iS-B$IQRvP6nOrl#!0JykK^j)sRTOk%Z`tgDFM +z74Te7#VU!>Z6pJ`rnuFt)4$7GU4PH0|rlY>`| +za979T(;X*nx1DbftXvT=S90>le{cOx_THDDk=!EjHvBy6wBy@2Ew?WIyLPH{O{SpZSnT2E5rWO`?DMucP~_Zt{DCA@lp?u&?nhqQi=JYF?}aZvOaBKxH+YW +zjcewO{{0u^BUo;k>*(&ua1Vc#5&0!~#uOKx74jBLM&B7#rfP50*in>ncvt0V!At*z +zcx*aM%}sP{UVHm9NwfVswpMSu;e>=0aSBU6ZhK*C{7U4)&F9U|%xn$u59>|3S~g4y +z>TQ@T#i;No`Umg-4tC?}-YT=>>8!7(Eq2sq)(vRujqYKHbJ-^qr?TByp~*$z;#<|; +z?QvbQ#{1^-`9F`jwI@aN%pL1T+DE$u{5~H%y@&H>mAzofj;Xio9}Be3JUp3WMhEW< +zZ>0^f#S4@kwjDZn@to0~qw_zUEvZbZcP`>*nj7y`7kl{Arir^;7d5DU`1QGyrNYas +z@2|_Je>zF^UQ0e{#8m>*zphb1FDZx|+R%ggbv)%6VqOPcMgg=%if +zb0s)#5DgGm@+H(jX41J6PB9Ca&hGfHlCu7wXY=HYc%PKlsoKrbaegpf`7_gS{{rr#-u7xQ&EtUUSd +zw_>FkH$$BMZ)N}cy?-V9+8(Ay%)j#Q*RjsMYZX%b>d*T08S%#TjPu-#f9@|iS--&R +zU%%(S-^xGNFJH8A;{V%4?>^bKiPo8a%C-8e!5yR~$MW<-{mo}jre1O0vfzPpt?E4A +z>2+MKCYt~bhhyxr9=6zz%t)66l +zchWF!?~rq?aHu}K)}V^>SBsQi%dJ}lhZJL%6r8x-c6sMPnGm<@=Au10 +z9+!(vx0GG@uB>U+Qhmwxw8(eSLX$7`>Ame43$1=EPhBc+?fhlY9Ay^ebjek97cPW! +z>^XOAZI^Oj>%8CJxz2VAn%{vY$R^}m)b +z>p9_G|5$wfs|_#mgS;2yA54Gd%DfL{n!cljsghuCoDeM2rvotjzgyAflM@-}_DBUQZ7z*6i5RHNi}! +z)uwt%PS2l32A^(Ed2m_kN&BwTN82^6Ozza5xjoZU*=3q#&cT072YPgU4oY0AJte5$ +z*5G=!uzTT*CQ0TP{U+51J<1jDX0^=Pba|SfzbSW2ip=aseRoeBf6%)4^{(2F8EaN= +zGd;J4@mhoY7FMGjos$;tl8yORx=?7wpR$*&VSyaaKF-*asA50ylJ1rt`MpoCz7e19 +zBvd!`+x`0JJMa7C)AS62eoQ!OwEof2RasJjauajoN^cx2x*Gg~;pyzNJi?w+g_H7o +zGR2*BerI_U^Oac2{@#7z$DV2Nc0r}Vi6U!rCHHL>J^aGMtv$fTaK^pn@1+waXf4|; +zXL(j#KkRMEtvxd8pM=(`&i9&PH?wcnyeZAR@mJS4o$Y%dSO4(Eb0?W!(%M_%+9ftR +z@l6h}x}O(##m;%_lF-{8s~aYSz3mVCDZ6%(c~t8Bi>q#Qhxv-Gtx}6pUEL98S)DO8 +zD`V>33#+DFSoLy2XuMv=RH=-q#*Aw(X-F*l`$qlZ>qhrJ1;=`(R8hU#q1z&+e&{w> +z9-+D@BDF3ll)=6vCMmRD`_RQ7pH6sszKu)_ycws+tFTRL*PGCVjx4J_=PlDLIrBWp +zu*x-Yk!4eX{%W(^pZhX2xxOl|{C&G9ny2^suKrKoL==B2?Uy#%?x4V*tF^|kL#+CW +z@2NjQmOI6>{pBUE?^8S;5P7h|eo>X}qvT%kz`IWiGFp~3cyA1NT4|uDRUf2g`o!pu +zW~5Z_op!FYb6ibN9s1UtcUD~;``2cbbLjU2>T|T!j~-BXa93h)^pmKl!VA3u=k|7O +zcHOWiU$84kyykc2_0GZ~nSSFSiw0wdYqo2zxVXIVl}-3K#UZS(%z4?oA6FjzT@jje +z%)CGQ(T{#h*X0bpzjqhDy`Xt)aivIoYp?f??ZTh!?Mzi}C!M$LeV8e6Ve^HFw$mG~ +zPx&I^B%#2iv@R~l#xktbyY+R{lBNAkoDW!?9FI6~@GOtN#m}`pfr-;9;i}64J61*c +z#&tYQh40s^huNO6Z0&fnO841ZB$M<2CkiR`xWmd`Pz7SqmE}Ed=#5a_U=%y +zsORm{`}eM6(iGNS=ksy(;S(N;8(C{FZHk#ad(WZ%>y9i||E?_boF7_g|D^>F$6&k4ND+{|0k@3KO2a&m)eu2$uQH;$_PK|Ko+m$$Ml(%0%S +z7F_iFX=}4c=za>7dB&P)yOtlMW?)^3PeD$_JQ?&lhb +z+<+kVM`_!?OJ141LiMk1bB3f=eIi?C6WgThPR9icb8hKB^uF+W;fJ+bo*&cBd1<|^ +zRn~@KdE`-h!}7h*xdner;#lO;7K@&{9o`>f^YM8=5W~#nhy2gXkKt!z`#Q;$D{4~W +zB*7%st=Cg7YOPqL?GXJo`j|^sO;3}Cwp)p^^3MRLs|}G`9$&p*-`c@?VSVMDe<5~T +za`b&39T7V_J@0C4B=>v$uU{PU&Kn%RZ<@a7$9gM0zLVFbCh@1*Jq>@fS62Fu@Rw%| +zwY~K$B>~QxeY@TjXYA)~V(MOMRO+R(ZbRt=A(qhd2cu8!NiliBa*)|~Ue>jLEUk9E +zPc%Fp-BFnsJae9u?6oNqE!ye}YE5>md}iucDYu|Qm7BZi#a{c`>wQJF3d@YSS6q3Z +zddjR{z9Vs;)*XjK6Ao}c%Fc6V+U8&u@H4^fjeYk!pVgvC3$6>_xgn=4%&XFRO;f|% +zxwK;y%cU1HD~@c~r1sLU@9IJhshJ&Dw=%hYVp;ifA>TuO`JbIT%o^>lfAO?hP=7k( +z+%q@=lIP^dJdRpqs +z+uT`V=09bc4}FYO^E}SV%*Q`r#-7^(TSbNb9LnUIRIVMx&EDU+JU2p*#s$0|JUd>;* +zq<0s~k>w05^-OslnVG)+A)(=}9&SOwjwzXWK{+|D?y14SnVBg8&YA7PD<0=FLk7hk +zGziXekmz=Hy5#VhUAWn%Da=znsiuZ +z3DrDhH?|282zn4$zlgE#vEcG})sR~sv$Pf--!52X6ye~1)4*vyPad5tD5II)z!yL`LdKR%QV#e +z+WN)m9;Jn!jAk5~$;j$7Dc)4$glAP%t4qIRzQI}ZsefA>{X1sbNQAK4Hms2MDRaNF +zNou|H&z43D4adAm3#ZLdSo{FcAp&YIft>-od^3+fC*zH?grd1?A-?gE{A+rQ>pvUvqu +zu2&W-S+2NfmiE273oOlfZ*Iywaa_sW=11vN&8wGg*`HalTr`7w+Ck;>w;o<$UZGIG +z<@G7|wcWk`93gBj@--98Z2v4w`u{6!Jy&Q=GMCMr`Uyk`+Y?$`1o-0q}Rq$?x +z+*flC8Z5ZB#Ad?Yt6{U%nwd;KUA(8WU~Ye_S0?Kf2JHok4*jxwHqQ*KTem%1SFnKT +z*TWxkRE|3G=`2|L;jm+fh}e;B8(I@yE(&jIUQsV=!SVNS>-}IsKj%jWs?SI;HHY4P +zv~Q-Xs%!Ht$^Bn+xfqU@Pvxj(GK`d6x0K`e1MXL=ZXESF<9{-Hp+)@0T^=_@|GvI( +zRr}MM*gtm~m^X*~k@@mfQN-Ta?~e?FT-sSZ&o;|dn_`z8c-{7YiNsEIS&y0$g?Z8Y +zdcv48#V^>Z)K7ZFF-@cWNIl!X&WCYZkELx5h&{QYkD=;_0Ee5ymIY5ARO)OJZ4TCx +zTYgLU&$7&Ebqcw$hu$nrUE5W8Ijmjn!Q!&kuOhs^?6>%PXUvumToXJ$ZZ()PY>X=z3x3|rEbt5@?ZceBAnIo44+m&9_ACoQ3h&I!l`YrQ? +z@Xn?2Zz +z*JV}Di<@_wgUb1tFaEGNR>q(GRxT?^H=+H8trSo1L;`I(W +zdqSr)qU%_s=8jKm)L)pMz3r5GLuudN-e=r5BfB;ryB?6{|hHSf-sA&61 +z?!75HZ`nsTj|E%Z`)5y%-63;((@n!SGTn!I&XC-V)lD;UY +z%ii*z%W&_8`&6M5pH|6VP2Q2i?$PTMCq0FmMNghF`Df&j*Yo4O82%f`gc_{#k~sd6 +zuBE5FU)t1Odiv<{hlop0PyDZsb89Q%EZSkP!ri!T +z?SXTlN7udBH1~NL&xhqfhI%G%9_z%1-B#aNq59*b=9PjcLZ>pE-nRL_7A-qbDZ2EP +zxoOi1C6>K66c;~{JZIAvA20aY3n4jVqaf{uQL>DZYa); +zsjD${sg^R7~pmDX@5M$COGz&KAMXo12R`>q1|0 +z#XP$CcV^5p*)VSHoo`NWPh6_`g5UZ3<`YcWTtmX<5?HD#Zky2xA~Iq7I9D?j6|ZoVZ>n*tXuVLa25vHg$g +z1Yw`Ek0*=j*zxk2cu$^TwP)#*|Lf*Od?`p#-F?@nEiLlTA+t%R&M{cXgkIBae$SM& +z;e-CmX*)QR)sk)&SSA(UEo{lz$sLfVIpdCy)M*vnUbRB+$~zVz&a-RgfBU`d%8wO- +zR*u}gFO(v4>>+MVFP)6oA%>1XQ-m59fi-xahM@2X;EDSpj-?;c~>;}7h@ +zC*Cf(BC}y?^?#2gj#uk9J%3-nc>h$Tv^dWi=gF1YX1l}BRIbi$(U?_w{>be&w{|~> +zT`%xVI@9{J+LvQiy4<&4yyc9&mUekd$%>hGSNWVi+ZmU2;#X&tLuZ7PQ2r@{%$NV3 +zmY!!dQu6R_X_?0nBdTL- +z-Z#&;X>TvFQQ0zO;T^|}&YwPM2Q0gS%U80W)$;TCDO6QI?R5D)?FT2{%T`)!b>%+5 +zHm&*a<1M?@*Io#J#poFK<=G?cp9zXy&y1b78f0{w7LQAbNK1}bR}wEVEq2xMuMun|5bsU+1 +zV{-jp%Y8oVUHi6ip5b>8`?XbMVx5l3LI0Err+<9w&ClnX9J!+O-|~>s+vFQ<7TkA# +zzi71NvP@eb@^izU7@YvOU3tw+seDo1(v3wuB_$h}Pc33CEvRFB%H8+lnzTZw$|h;6 +z3nCMoGy&{CjM5&%(#I-_Nf1?7u%>s!?@&apf)M +z$In;3b$_jRch%=<@t*7KYYKypOr0CEsfkOC*=?_+%D%b$8c%v$*y^U7xUjG3OJ&ZQ +zg1^iH)hl~M6;DLeKm7iS%SS?c-Vp~4r@Rc=>~$YnwI}boo7nwwozLSVCAV)U^mK^Y +zpVpiupuLUj|MSzwDqoyl(*C(+`xld-MAt7(3*|N}VtmAu;oP@b@!;GAKFocyFHe)+ +zdxG76>c^`SX7FD;_ED0%>(t)8g;Jj~rHa;+@AqE#VS--y-_AFJVS6suZ%OHzQ7qW) +zbY1BFV{d6W$M$13rA~`xTv~KKC2GZvlvo21d7C}1zdRLMzjUqG{whZHaC6&aPZQOd +ztlYfw?an7VeDiVUm{HI(y>$`($Ir%A>)X3ryZ;f-j)XjmuT~#Un#DxN +zR{WK>*W@|c%FJ?T=dO;U-0Lp|?yUd6b_S0|_&#mXU4A=*S;RiD`tduo9kJ5=QG4jh +zv2ech+|Y^ZQ$_y9ubOvCL&#rAhr{Lcueyb~3w|C7emGGqp?0<21dRxZ#IMgr1_#l|v%UP#mes<#O^I|@Ht5SLx{nr;Z8?G+i +zbafNsL5t36R;~B#xw=w+Wvo2S>>l2J?I5w%=3?cMK(-{^r*GvgBHS+(zxPQ@TrIgL +z=0)Bc#U&1}|4-U?|op^ +zVg2K&&2J{R>Rd~==K1+5RRSNS?2PmmF)1}Qrtef+rg*ko&?15Lh{UD5z|~(hRmEn< +znU*JsCM@ZUo~ULa8mum{h*QgclJz~;gbMNE^`7tEJ$kS9%gpda?(T2f5A2lAJsZ0B +zjs5h`I#a$E)QfW-l9sESyf-$czGeHnE=;K3rkA9XWh)>?RA^Fdb&vGUW3JHa;ADOEdgo8a?{FH$>f +zA6_pGtb3PTE&KTPPKzD6ktclL?cb^K<+JAP484EzcS?BAe`Rv!sKlA0foFH`o7VlZ +zBx>G*sojUeH$Qj%{bbRTRlIyT?$cwI>wOd06PzmFZswNJxDfs3Ty#y4(*rH#dylyDH=1aFzPspKZm|Jdy>VdLuA}wh +zFU6Moty`^>w3JI>zLL}bc8BgjmlGS}oCFl7KmoH|R!s^L?Ao{F>N<$9Mw1}L&mz`csc3@Sz8TQTR +zzk)dizZWQ8fMlhB>y_d_`x^frSisurGg5t7*vu!^S`XV;m4|R)TfnU +z^Q0vVYno!T=5Bi+afz2a}kB)rVd$9HV~F^;k7<-uIQq!D%-a`%7)T&-#i8 +zGcJit>($7a`)7qsS1(`P$>#_97O`HnY5pHFr*|jQf=}rke*0Y?vab+{`aeIZe{;Q4 +z@b@Wp4NZYZyGx|fYP4K5j9edUYko}HWVZanVcRPKJa135e?6|w=qo7Ze>A|p@ZYmF +zmj1OHV&k<;<{vbZ>C5vl-PJg6uB#pM;S&Wv68vAxKM?RsQH#kr#hbg)F|>j~XLoLY +zNw;jil_k*`mALEuxU$2*ZPw#AszW(BCF&8iMI{xC+I>x3w>v-_|Dc*s+^Hn^i +zG|Zn>TvN99S{19?<C}s2@DybyJ+lg9jQrxP-E0%Y}az`P)du*Ued3-8J#8>w{pw +za@!>{_OG%zR8pr{duoD&)|=oTLH5sTyXtG!?@VWQyF2Hyz3TbXou=%r@g6M93ol$a +zb@a`Kh4U9YI(=-ZWJtZv!nc~+MJ%%ZY)Nol$0q1MFFrrI)vL>O+swp26Czo?W|17jJ`{23A9ny_O%I!R;LiouPUos< +zrKp-|r1>3mxpQ{@eS-tDRv270S~|(x)pfaET=xD&O2)^Y+w5ER$))jYZvD4?E6&_& +zV|8m~KDyxjQe%c+@{1RJ{Fwam)QSkb#Y~sHmsl-!(&APX>A54i`SLsVg)jV8)%7kb +zH3>8=-uS&dR;wT*(MDf%&TQ?E)4M*g<~UhJ2ret?k86}w-lV+qsn7M_(;vURRT3}O +z^ROe#Z1y>eqNqoc7HnPl=ImmJ#Lg{w^;#d#?B8qXe!YHca3^0v)kn$0@qg}LkDkXh +zPiwtoua(Z)<(C@7OK$yJ#$`8E)o4~0&m_4ZgD$WCvhq%QuI`-J&>6h7UG{ljbjBsm +zrCa6rt~mM5mki~x?cEcoS|hbHJMhRNp{1Lj^}VxS6cTwsZtsqRQaeK=tv_#?uI0Wz +z#4)q}T^+}QQ-8lU&el4xtbF1P18$e(e+3IW*&-Pfyx07=JjFz8m69*h0qHHv^|o&N +z@QGLL(Kn^NtSh-{Sj<*-Wu_cIc)oB-(4@6cKV-IB+Sbst%@x+!_F$j^0LoDmlLuZHPXYhDXo7cZ)!YpZtfoz*vmb1BK9y1{Fc +zr+$o==9qudy@QVbz)i +z)oWO0WqsS&)W}=^)G>^!Q^+yJwOcajUbUOUdp)ZOQBs1!vJA^lUkm@(V=%uy`uqu_ +z0_$nt&i(%rp$^7r=rV&b*y +z5j--LMeObU<{fc!G!(;EG@jY;W%I$jpzSJ-+5YQto(PAn7YqKdr6IbLv0FX-cHYOQ +zJge$l?R?F3e|*`*zJBL~h0}^%*`L;&Osw}bZc69)_3uLs)02)XD_$LA*!M$ov0z30 +zsT;jMokq(_M7A3$M(bC5PgTEasE{CiWah&r?jJT6T9-W&uPwZgZ}l#t+x-<+Uaosf +z{n2cg>Q3XfXTR&e|KyKdZ~3nJUwgCV(bNb<~v00wAXTHURUVZE6zwD`WUfjO&c&lylKEY;J{3dp`Z`Oy>x4RR?uAJC=?G@`HLxD3} +zvvn$f+jFDNaH4ZUW< +zd-5-{W~}Ye+Rj5-3jVt)*JU^b)<3q$_uYDh|98}1=lYJf5t?u5fhP>o<4v1!TXN-*_P|C-<|If#_SNdL@7&L`$#?&f +zc+0JqcHO&u`TEYA^75H)GJQAXOcrRjfNcHeO> +zP>|Wo^=s|D+`CIx{}q#dExnWLT}nnls>5k*?Q@%6X0<`N5 +z+g*({Lhikee^@54?|PHUNAsHf57L(WKf`^s$t|VXSl?c=sm7&(n{_sRK5%8#+}Bc7t8{DMyC2%E^Kbp-XZ4dp{ybZ~+gtu_EQ{$G1D5#}OLsqE +zoV~m)?#sbRwbiRC4jLNYoXt3?Q>n|9Yv)n7$o(H1Yc4N$AKN*DJ}lW@|hpikDkB#V#hfcPSJjcU6=j^ +z32|R|5@&N~|J_dOZ~4Wx$EVD%|J{;Se(JY*naA&~g3C+y%g(vOY$zCUPl(yX~OZT +zw(tK$+tk0;KQi;9Sj+N53pUhOaQ_W@-MPJCdRV*gw_cA8GOrc+Qz};fVLf(Z(uZw- +z)>z%RA@f~Ue8$OygeeOOqpt|Oi2U(!TdT;{RM%bqW1C$ZtmXE*Wy#OHl`gY=le)bB +z9kn_Sw$y*AbB}snTX9r2=Fp2o_8q)dUo&_tIX*sl;c#x=3C3mfuU>4te=R+(m#<#- +z>@KhSVa&C+R~FlT&b@tV``YbI=eQ0mzi^K0(eeFDzoqWYUCAD$vqgHz_N9A2X}+(# +zJ%8t}lGd5ld-x_wvh8F@c)#tg`tD5C_gB{6EtA-=@~+gZ%VuY;J&Y`U{HgVR?yCsT +zw&{DVub+E;>Pw>N)uJhDmWHc+=2kv*@ml2%v$a=6`cM9>>+A?U_Fze}lKVrs}3k_k%)0_RpHM@#TXo{-%Sk +zHoCkyx>_kiqDH_xbSuNnAMZXLW9abSE-3KozW>#>h5mkdMYbQt9 +zs=Qi96(05MtJ~_nJ6||Av-|nv*h!Y3XBWPbQ+uSt@u4t|QPHz=nnC^TiSPDW?*7o@ +zt(pJHETKv(v$&;7e$tcY26I%EI!%w~#ZQ{ca^^<&+qX}*obUFVe0XP;U!D3c?jWA0 +z{%m&wB>t^-zFlgq%lUWlue5-M3v~@;&a-3I&1BuYP}TPD!D|=JEq$N9(DsscBX8Lo +z6K-D{u1gPm*B=pK<@?LA{Xg?O$NJrYD|_;e`5YG1&S_lokFi&~Y09p&=h?Bw+pd{h +zzSNu4r~2saml=9W?Ye$HEltb}C0Lh#@@!c4C%vs;Pgz7j)i3TCoBl(ub#7%p4bo-1 +z{e{Pc|JYL=8@DC{9%^^w%WET;w6{vUaecNSMRaKF+SJc(Ly*Ab&*|A2vVZLi_HY((X +zrX1$`b$!a>L$_4f)~2(l9B$XweZ!bNS>=nzwoCQ;k_OjYyoRJE*JQ4Ju#V)`)}9jV7X)FNA`bJl6f&fe_s6GhtsQq7pv84IYsgnUYi+s +z_uakDoEK*Mm9_Tze>2=$v3~aZT{-54&59MpriR9gZT%1JpZ;|Fsot}R0eQP$6z<(S +zVfmV5+u$GW#&eclGh3^1-F5fV;$y-_X*M6VA9qR_&67#C3B0!BV|~?~2QGOnt4{VV +zl07`ydrhs> +z*ZnJg-0l3o^Mwt&U)ym7PeqxMy*DPWJaNd!bE@H;lr_5Oy)_3Ri%Ny6*B`(~0 +zI6d*5R>3jHi{abmuM&6JvMWsXO8x3f-fw!kmb~TJc1H4}`qrxZJ|XMgWc#&7$jU8R +zuWt2rpWXDO)x3d$MmL&;7HYA#zLR&$-Fqqd_x-rMBfG2@tEW~Z8|~pqouyWlklWCJVLBbx%Wl{QaKxE}u|gq`kjP&6V$nX=?hWon7U}jOTia^RBKp +zv9Icp)#WKMj$wE-`=D-w@PltB2gdKYq&S +zM~&SCt&q)t_Nj&8yy_OL#ETdym< +zKi%X~mdEWalA1du`SH`=+o#Xhxn~oAune?WXqb?vQD6Lu9J$>SMi$cS(`T-PWOy2Xma&tu+GuBR(^Mv{d+ep +zZacG!bEbU_E)Wmk`}KIH+{f;-$M%?8NM|1l_7T&b<V3}d9>1Hu6Ykg>x9A6cu}WIVEbp=Yid~mxypTw=bAPo^6mVAQSOkzy6%@%Bxm-LpeV`qie3Eoa&N +z)Ks#bHN&H5<;ROho=Dlrc{ERaRwiJ>F8SrG$K@V*uf4~WyPvmyduDKvFG1&a`qC9^ +zw+lVCzOuwcy|T3>b5YxM2QkA?IsNomR$AI_I(w83g#YlJyk%a?kxQDcrHUK3UcU0j +z$20SU|NpwF{`JAtdFDPo87sef1O(gr_RpU&VN;ZWlB@5w{OImkQucz){XFN2MZJPJ +z);BUT$uE34ZCjI-BUk8UuYJ=TgQB8CFR$67aPRcej_jDH%YVpxAk%XR^*yhnmsGGII8-kSXRp6H+y%L*-TEM +zEvGzOL|iL^%(mVZ{Nl1OdA>@9#9NcVps5Tuv&w{0^Y`jz_&?59$sDpGqv6{kHVvce40o6D25^@$Zz(Ql +zXfoluaQzvBsD|u<{+ohYxeD@QG#& +zeIXjK>#fhv}%&fRIf|iH{?7UUaB*mt;py4d5NpGx!>S^u_iyFqMuk{xsvM_tC +zJJitT$g?7&oAK;piGY(z%u;-*4!OH|G8E4?9J(rb!C(QSXtv3MNFU}^p;->WiM%VK +z)-%3Uk`B0##XO7Me8Hr*Y$kpA4yoLH84gDnMc-H~$ehC56<+Lc+JXJb#+MD-Hu9~g +z-@J)gio4w5>@U6yv5yUx!sISEy%#^Liq{uR~V8F`n=2VDBae2d*- +z!7^TsE&YuSU%dn}jChzt-#RX+RAJ$YYIXRWz!9>Zw{hA>ffad*Ouij13pUN=FqzQh +zV3;lV!peYYYPQ>g#2l8am_7&NM}jNj?3r|x>s117bg@`*crGZ@=iJgi*}=D4D8nv< +z>FR5*1*uzDPDM?3U~c3L*) +zQ>aeBf{ltID|*_Qc$aAe+>v69;s{!>&zH+&;!+3K(;^u*bC|Zi4PMad!g?xprGxQ8 +zt}FXO8|$YPiLNN#$i&+jw&2)Zt}PSSIm~=5nxT@=ILl1ug55EutvZnlUK(&;*_7UR +zZK9Y)>Q$y#_UHwha=A?=Y0OeoUZS8(BK +zYm9!O$YQRbHc^pHFxkUS$N@C$>cpTJz#+oa(%^64lprJ{q#(g$W_Hh&$LCmH>7GSN +zayJfqIllfE>($=+1g+mJMvSHRLSDXf&ogflIK>x1VT-3ggb%<6Vt*?8@X&@%4_UN(+lGx_^Vnq;SQ2k(5{Y8Be%ig{_%y?cm&e`hlk^QmidvCJ+KUo(dz3f=)=bz6{TGSspzx={~-S0ON +zcfH>9;$oI;zudAfj9*T_Jv>ET-hk0?W=|c5p)P-X+l&&8`5m4wlbZ!6v&fYPdH95F +zw$?D5IbS?7=~CwXX`L(oRe!qXIE{lxj%k6$vb^gT4JRiRnKT_)KI6{W#LQ5iZ>{Iw +zXC)j;k~$Q4Wm3;Kt=E2y2R2VHu79?7_Y51qw9`@EcO<_4sWI57>73kbxU83UjU6{eaZR}&iz&W+?>WmuWm>i#KuQj)4gqZEPH>2e7j)yZ$ +zW~Y9hlw8Chu6W+i_h{XP2~`&_bTt;#6)wK69>8Na@1V&3^5U~h^W(&8nwNaNROM4& +z7Z{sp5wLGtfJ_gEz;2-@*N&S=M4L1ImA85DY}?kTx7$nX_N>00X(M<Q~P> +z*E2b(iz6bgJ`dfLHrHnTq~FS-UdtG#{$HA6WmkWz;rWUj$;zU8+_JZM?@2Fel=oeh +zGRx<}f^4JA2@R!RmiwvYKi&Q4k)T7giGnQ0iIN%_fm0^S6!cX)jpm-8CDvndN`%qE +z=(|EHQ@?0m+YhHV%RcMvNfZ8`6TislqpSRr`cSpUhjP+1&uiWIr1W@qX-&$c3wzi3 +z^vpV5s#+3K@5Ft2iriO!oy#+iZ8%dbZQjjd&hmcei3=Bu9J4fZCkw{jn7lT%h>K|} +z|3s}dEYA%!XG~*=QB(8S;&#;`upsr_zrr}Rm&X@9;++uZ?icb%`Lgh@op0^zjT#mi +zT=tk@saQre}iNaS?^a_ +zowk>1oY4I3Z(C$m^=qG52UlgLXZ@QJ{m$pPpx`&Iie(RlGhI7{ZGUn4F0uI^e}0K{ +zYWn+`?9Sro)eG<3GSYTuV0BsfU4pGxlyjG6 +z+tx)7)91H%>RFq!>Ts%-eGgdlczv6jo +z?tP*sr-iNFUOML=%lCul&rIItulaw~uL*%gGIzp@+)nN|*}7)3m}5rM)LvyXPmPmX +z_~zWQ?+;3N$Nyom3(G};fadK|trySuFWJJeu(fwe%MQ6m9$xPJyg70wIbPmyzF4Ec +z(MAu4O?{D>p4vUwX4$^=Z!6EUow46Fb9QXHJ=l-kF&% +zinEp8p82>XOr>k1aMqcAeoZ&CC32ZouYdK{Pn#~}slQYt>g=zepg%!}jwm+={m2$f +ztYBFam-F-D&tsMvrW=^HwrM2XN@mkKC0FJUe90-eiqD{_#^8as?HQdWWvrc#a;Y#U%9C#bW2Up1O}Vs8Ij5MD+0GnIjW!<|HI|9R-XHr>Z*lHGinqL +z&k^8mWzF>A*FKb_c$am(7yIeeQ&qpp#u}t8pR)AbZZFp9TaE~nUSQWWs25e@(Y`79 +zOp`}5D@=wx&A{ZqIWJ3{K7NT;{GTG;i+in!Ugr5=ylbHTdX%(erK2X-bsHV56#}NAob6DYY~-KOBk)b +z%;i^|bkvzIXjTLt%d9HHRa_5cGq~KZ___ES@f^H0IfP-#-9`TkIbOYZHs{X#>ZAKu +zh4U-?ow!|J?`}2n*n0fek0nhK-rVcH`eZ+ClKSE)x`TOzf7B}frhz~4g9<{Ip&{U&rZ0;^@WZ7`r1s+S(45L +zTQnBVxw=gwbMgH6m1}~w$IGt#d}2jOo5QU@!H%viY_}QjZVcSMi8;FG>EkEaTUv@2 +zrzmdZaAE3W`SmJ`>1#?;>6BR>yLU*gtDKTlXu*8`fBj8G`KA1w?-(_H1eLc>m?W>g +z`>CGYr8-x|z8$BzrhT0_r@&Y9ltTT1woOik@)DA4MKu$DOLCNRgf}H!@?iSN#ean9 +z%A+qE7@wuT5KiK7+0LFDpU=rsmGB~HQyKeC@0Fef?G05^C;bb^vbYfYMZcf@ +z#PZLl&srTWX!utj_F(zEU2Mno=dR83DXQJS^(UT@!GX}0!BQRvn+M{BOk+PCTPJ{&knZ{2t$<6|rWL)^jFz&6EFC<0m!aUhM4E^?zO}{VBR&JhJZG!N9J3d*Xq~ +zQjhnj9&?&8`KDmZh-=nHG +zugUtGQFk-&$*kr--t$||3N2CG^lM3m!nFrHo4h8jiE=ih6hgMZzQ`9T; +zDc!5sc*(T!(xcWntX}K5r)X$jFbOa+_g0dP-eePC<>=k?@Ab?+!6^npQ&wp#@Ck_W +zIknu^M_a@2Wbw}Wql-9R+|TRw{kI^5&8gGCnjy(OSJ12X!kueL=AXFBwrX%VYw{RQ +z*&uamj!~_Jv*#=|Y2B*jizLD_Ho6Ed?J!%n^>H?PSJj*rAJMnlKNf@rO*y7|E3fO) +zgo{dx7Kxl@uU`>d>>D*@)s^t(&CO*CHC0VKX36GrcQqJTJAU!itS>&k`AtRp&2X+i +zJx>eGD)yHN}emv`OW7Ldy +zYzqT=+e({`x~kqfzr?6}lEy^+T~bqJ`qlObimE@3d*)f(Wv`k#*Xwc9QD2YX7vg#v +z;bM%6l17eaibqPkZI=&x(|4XwnfkX=b?IvTg64VwIvN4VTth?mDeeDBxT= +zcj-s%wdpSs50{-^_2uEjU7HiuJ=@>)LqK=qtd%MrKaK=zXKhh&jtyvw6BTkllJeuO +z&Yeho7prAC^}_#opKbCzx5Y$h6<2Q5p_Zm6y@d_zfzK}o*_9MmH3WEfnD_GCcM$f} +z^)%VB;cx$E$E_(Ak5_Q7steKO4b`2Po^q-nTGuc}xAa+ZoUZN^Gyc9qjtQ5K`1db= +zaq;?&-K|=e8&7oUDhA&8D8 +zOHR$A*d@m-O>VZ7cHAp?F)2`E^@_l`wz9s_w`Q(x_kQubLX&qj3(vnaP2YR0f+wFh +zW<(u!OitUq@zbSe{O44@tedy<$-PgVHt8=^Go&Xhnx2!h$(b!Js{f_x-Du}4-c`l- +zuXz753QJGi+rlBXG-Izx{n5&UrF&ZvY;WCRNO-HtE6jgBPyg*L-HEmG7q_Zh*RiSL +zw>kO?^-UFoJx)Jt?*0}3?BkWft<1}}c%DAd<@s&trY&!s`8QrY +ziUWHr5iUhoYTJm3v;7`K!*~Cf&hme)4|0Cf+;?; +zP4@=e+a5OefV2GeFh^PO)%s2PrFyT_G!MDl7JjGHyIW)1iqAW{8CrRhrOe(=38A*Wb)Nc%qODGETW>#4+qk|e +z_M1(Wjae7(f15j16B8Gei&XS{4cs@k=8wtitKy!oyUSE&&QKI^*r}goTpqP;o?gbX +zJrOq+8E9GkV{zm57TIeV+Y2m_dmdPgjuEpF9FJ%s2 +z>@fLA`}L+b@!AJ}oLe_FK*^2!_QZ9jhfZ}>*TC??Waq1x +zpEv(H?>?y!=sbC{V3N;*uUWeybMpT`axgj+5m962bMKgU$3->aU!{jS_i8TRsIcEQ +zFgk5Z{f^u9XEY+6e+IplzMB~-r25r;ci6T}#SKi~KBu4_%xOun?4=Pb8f +z)DTF1`)7N+Z)Jx6ObLVS2YtLInRq$(+|q76>Zv>|nXk1!lYukHe +zp4+N=lP1nA5jIn=oO3NKLZ(hFx|@@)cpN;xYh#69$(xU=!pUke4^smsnMod(RhzOi +zbn#0+QU6-Kq}~qu8jmn?9XRW7V!J@m=y0|GI6~+J9o=wYdf&#-A%TK1nOu;ugg_>H5**ML!ccBj-nk +z)%OWC1cvu5s6KjCULrF7^wW-1(a(x)$DKL)BM!Rux){07ZCRdm>#_*XnJXc+2hOlY +z2fvxOm*vLEbi?#(M(ukAr4CQNQrvRQ;p@z_nHyH+Yo4F7j{oX0AJ(2G%S6tit$E3@ +zlBNF?=W74nlkuwKf1=~evTZin6K42W+l3wIo2FPlkxfg#x5UTnl(%%k?+HD93!cmB +z%Q9P+DTMQ1{(7Nro4ie7>W1{1xOB@stX6C(nWg&;GP2a$kR~>ld9R$GhQW{YA;7)>!@}^Van& +zUg2JQWpSK3>z*sht3|g9++DTG{U7H%&sVqIHxwCcbYNR{XXR)1uD#)Z=36b&cq1ru +z#ZxZ#%|+X9FT#&#RUc6mzW?Uptt{8}ZypN-d8U5Tuy}j%jUcm9`CJ{I;_54#m%Lm$ +zFOGTF1MyXNl$m(4oNs;HYI#hietE;%M#Gu98%qUKxu0pLEp@3`!aA?+%%^2XR#lvI +z-~WyM0e9;OHoJH86MEzSojb7b#k_cy?=SECh>)*&*7VDxgQ==KpV}q;Thx0R_B30yNLmIoRj<_1yJBj;>e$lCf1$6-U$_T;QNApdaiu@SVL@5_ +zUypxFvu^dL)HhB$arbYAm7e#fT6?3tVwor9_cFMu9xpr>S+eE!l$PwPWfT50#4Me3 +zciq2>pK_VfJZk#?zc^hVGWD1L|G+z|8mB+{zj#LdNfo=*Yc{n9^4{U7PgGiUNHfQ5 +zqSk85vOtak`&F9iXZJhpH!T%dl(10GR7>IQjMDnn9=}FLPp`Oyu2VIxj?1>KX|E4d +zbJ!`oBGx|7@AxH_;^GXuKQHwr+z4IQe8^OVS@X2RBgRST3QJFK-Ona8JJ@elu0mxn +z+pgI2MGCPT8WD?3W=TGNJ@IwOl$-Iw4eb!kU6Fos4CrZ&g-v3Dt`((bx7k +z^I?s)hkavB{q;GlotK-I@bxX9{#N8i{!-=(ldj7=`5N=>)r%yPlXlm#7DoHBFOPih +zcmG#fjg-m@Xa9AML61&OSJat_5>8I1C%rtQ(rnW8YZ7JXN7JRqNo!P$VXw9juYj`x}`qY1$dT4h2;5iwv +zr^}I>{Z}fJ9&5AQ1?fvyit4?l3onzt)Oq>zNmGI2`DlAIq_KO0LRytWzkT46D51T#1YBNNOxL{hIAD_h#3H||;aZpepV=I{Z^Dt)9^1pT +zvRtbcXE7eNiJz#oUumNHMt9NfEp1*`Z!}tP`ueT-IqlXIwK?6DZT()ap86d+5u;Lf +z&NYj9qxq~81{+%sdHBiXyf+XMtw^(Z+f@Jjh{yGo`~@pNZFtG?c7CScOo4Ct>Nd)2 +z>o{_SrKC6odRt8GJTp~%S8~ldcg4f2XK|LwM0IoK^{bW$ae0aK^!}XPQ=1n*QKN6` +zM6=JWVQROxC!b$zRA}Iym3_#2=ABDTN~Ic;&#Zas{zctdX~)z5&rb;TxBOc2=A*}w +zqci3Q*WX|es__VaoBM8$jg*yPZz5NskC*Jy^-O2dYgICt<+faov9A^O__R@c$FAfU +z3B~J~j34BBck@o-;^tex?)jA6b6N(oq?3?{V&-!LexF0EcWxD&{`K)6dot7MfW%jV +z+b1mfQ(rj6Oy%Q8?k!ri&*du|RVJFSh$&4fl4s#jo>V{M6|0wus{HdjCC{f8i6Wi~ +z)%qvyUu2UL^K4qO@ZB1w^AE+9Gyhf{xNkCPPrJwLZ_dBnF0J1h{@jCWXSZ&>T%(Ks +z;$n?zm9M+6F62`2JeO*1X_oXjP%2*8^N!S#iHj=NnlIX|;4a@=`CHp_Qu~3ViGOrn +zeQybvv>^3{Rmh~0`n}hR!Y0j9^FO*!$Fn{+K59}`Xx4eRr~{Mq4m>rUbJ2I^G_Q+} +zTb3||&kTtwEdRz-8cIH}Su^QTvFMZ8UFBIeK<`Ur_k9^i175i~=T~w2A7kmAh{J)F$zx}V*xoK1P`V^-_Ig?m_yt$yG(_p&K +z%k$cO^OL+yp(+d_~CSr9rh_3oRS| +zzEbHay)^Y7%XUAm%{SvzjBn4fUAogFEAUF&3^%8$KXXNPH#91He^~PIib&M4hSZsj +z+v<(ha-P?^`aU7l!~fE}_L);>U74K4tdR7${r`0G}$tyJ=XJ_khsbT +z|5a1wUpeF7^m+1u%Tq6|yER2;6Y~-)yEFSFYo^;ycx=0dS8wa_&@JuimZu7SOl-X5 +zH-p#XKv%zMheqR`+2RNEcI}%I_<>tD^op24cb}8|29D`}nlHJxgttuBf5@m=&!G5$ +zLxjauK;V&}pH;NgU;T>8g?|n2?QCDLb-}|2-Q9h!KZ+M0o%-kTp~q1ly-v-3BsZOr +z!>v+(nh;xUfZXoHORU>MpDa9(=xlRAaPl1AO*`BwDm9kQi2!R`6&Q?{D4YpBO+rX0T;XIi)H +zSZu$By*|5Ob@9!MBHKUL9o1po;S-lUVe>t9r~e|mm`}2C^yI#~b@Sm*(f^58)_zT# +z#Pp>(MU(IL#6yb@sk~5}TqdG%;cCv^#j%NRw>o+iELWWw)~Z+aLHMxt$C`z!BX6Jl +zP_TAYnDXJd2j-+EIc^o2G963ve*gZ4!!oJrx?ph*r#q{))i=TTwNX+5>XJKm5m(cs6RqN;up0Jkq?<=zZ +zuXw#%azh?7&l;ayfAkA7)~+z-k=t6cBOr0dvp?74x*dM}v=ref+LL3;QGH>B-ipPa +z4(3m--MH@J(kmh^N^_SPeY#(mks+>h!D*Md?(s`k^@5(>j`vsOwA#gIx})Cv-rRzc +zecPHjoXmEWGUmoN@bFEtuMt1MF7~e=!f?yHcU9)Ezs`NI#YASRkodJrOXYHQD5M^q +zx`2D)J6@xA>zZPJeUScnICR4z9rsVW-9G3YdB9U!_|)t;ORf0iFf)sdjcGUaP2bOY +z(e~v-(jM-r@cu-T`w?^JMHt=R_+WRAQT@Z+KFpuaFX`}Sy3zab_idS$LsKX3Sf0B_ +zJ@9+1!`_ho*=v_fTXSFZpu?xgTGiL5Tkbr)?YJvwug_LK?~@00^*=X?^9bhYv8=Z* +zkZ6fp-q6zXPL;1n_qxfV*AM1=N%{5G#=as{@&xC@t(~`jzIeyVsr7KHQi=SRmhKBo +zVG0Mo)ZaakIJ-`AU+viief>VQyz7t0UwZJNE68+`!<{t@y8Go$X=`c-=ucuWx!hHt +z9OvS&`>RTvf@<83r6*)~G~%wr`D)F%AKK!;5hX>0v-8}HWL6Q^~xERWLSvB_Dv +zL-%%&2vi(EnDKX +z?o6y-c|(#Zn9-MO*`nQ!GrH6_8;E-M9}bZ*6AUhN(^z(hZ|97zC6{J!{aco-RV6=R +zrG}1jaN(gDK1Yq~HB+_91Wt!|OrO5;hmKM3!K+t%Tpu+Viylr**P5p=f8~z)re#X` +z9m@_)ww%?azt}|dh41AMk*t8=!l}!aJ({#}Ru|(`Q_=T5*;+Ll*00nEOA2;eFvZvP +zbCa3q?95y(wTZVwYV-<&Kia=o=A^oFc9-HJbI~*I_d`Nt8-fL;o9lx=&X@2zsz2F6 +zbZT3nR?pnyD|eVo3U*u=;^(S!a8B3!O_rkjyPt=w(OVd780)e8P^snIF4sj?q6|w) +zwRZ8}SXrUCIe25o4Zov|ldMI}Tg$cHOuxU9L-^s!2fAI$7hQLl*QHu>Dz`bW&m`WZ +zz0;RNInm|8s-@Wp`=mR?m9>7<-wrhRvURQ3v97K;f{qhh>SbG(*qr!qBax?6l_i|;J9TIK$wP&zV$q5YLvySrL;ON{(Pz1WaL`|Pc*+bb2TFR%ZV +zFR6YpsCU`^mGjR3P)_HF^*7_5cdes`Grq$mn1Q4H$|*s%$Xni3yeqqSqkCO+-|TZM +z?7rEn^epvLImgZP@865mWIUHl_w<;w;^V}vp$ofLeB<5j8c?JmYWZNc%&Z0e?3cY4 +zWvE=)*Ww}PtK{%fEp_sW-?!!blwvBsE!Uh|@6vkX!GgIi|7D+9ty{|)$@S!zo2EgI +z*o~8HUra8tng+Jba1Rz{Tyvc_O!(kj)`zP$9sI1(EZD4Fm9{*kMydN?eDq6UM(G;n +z*TTAQgk>{b?roPVJIL5$&Y+N)nOV{#yyDYyB>@&876}oFvxO4OjuI?}bwUmTHyjlX +zDmZXR)HAg-bOg`gA#4KwN0}e21r@#c%jmc3JDJ&no&Bo@bJFEhofh)mCk$ihn0RXkK$ax4O3N +z--5*R+V_m?>f${2Rd7~K<*Az5aba~&dsof&SW~Y)Auf=yGVh7tat7H)UshGl +zyfA;uynT(WLF?B&v8i4gxAx(JlRFmh{M2GT6E6C= +zGiBRit`N6#Ms>%Jm`!fCIPgnT@yNIRoWaZIOk25piH82Ph;7Yo2`80q*SvkTVCIPf +zUfYk(lIY%vS)Z0eQhdMsh>NhSMYppm5;@p4O8~@ +z|6kae`)+f+vVxdU{)Kjn-+Kejv`a}Ovke&%^KyT8A(souGnAGytcsA=ey=K*1KEn0ylnfJ6bf! +zV(K=xM<cYm#C#xAFOmV@bTi;UTl%GnKBGdVtZk`pWv4P(C+1xj)@Y +zOS>LUXK$~%X#Y3V{l2MTScm3S$34;YmP+@Hlb*li`Pa2nzidgtyOOBt28&Y)4>s66 +zl;oCt_rLyF(Cbyd@=T^>u6OR5EZY6ED|MK<3`k$_OtLht+y-Bw%z~+OT0jsrVC}Yz% +zjb{c6`qUI6+f{4-DMngMu1TA|^N7Im(8iM%whF3N^@Y`**9_u!3x!O0mpQHV>(eis +zvPC;<7z$NReUD%hIQgF;shU+};+L=^ibak*`ZEf*e!Q3PYr4=r{r#H+S-uNQ-EF_? +zpwnKl`R?nzZnyQ=@h|Q_8GEpJQ`?J_w-d!qmTrpbkXKc)Qs8*=TYceS`8r;nB2E2B +zmA4O8#l`V1BdU +zR?Q=vH3FrFY&M$+%82P~=@MdjUdQ_Vd=4Y$G4I1a(rmx|m~F;k#B^i!ImxWNLwu4) +zBah7~UB{=W{8)!0>gKF%tLK{(n(lp*W@tO<_{sHOEV-{Xw9iSLCSnbO)jaFTUna*CUte5BZURYJ@&|dQ3pzBw|C4U=Y*^Xye{yM4sZ6ni! +zi&K7Pt(tRZN70v9gS{0;UujGk!zGrGcipb1C%io7zidio?%}>5t+(Y`UB(-A +z>g(OK3$ne{XXUNe4^Wt$andxWPWk#JCL0M8`#0AEHB##QST8^Ftp9;{5}4TNmsSdGmM&Yl^Mg{(XlJ9zSV$T=)7W +zW4;yZOKMMBK7MH}_4tzF7YT(+HtSp49#w|ixU +z$vtb8#5ZQR8J&OoL +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 +z(W)8Yq3>TU-Mh$eM?}~l>f^Y +z7Ch?O@$qxPjWAt{?5jVbKAyk-XoAWnk(J@%mRp%zzAdxaX5x^f)q87(S^KgxzN*4C +zz0SUKbn|30ra!BR|Mg$+?e+tu*Y8bc%&}uInEIMYp}s*tMaQv8!J=tGN1BKB>=L%L +zHAUsj>ojlaole`v?&@w?<0K;R{iK1Vn49I#ojL#7&U*E|-hD^R#NX`5@6Q_+9$waW +zT=A9d3xC0tx@#sUK6SfpcaOJcpYf8K!(4Zs7D}At|G7r*sxR}}+==W@b|tf2R4P=F +zRx=XbVtm6-{mS}!Nx$z>$r~1L)QvOw{CjoooF}!nPdTshzk8vBV`WNt)lFU22||~h +zRnwd*PRDW?7?vxjr8y|vYuU(pB=5WSj?T;jot_rYw)3a|B015<<7{> +zToKZtV}AUN(xhjXDo-xkWD;X~T7xl}YZHTI_sx`si@C~smWQ3=)!oj@zkEmi*Ndsa +zp3^&@)ZYKU>@=T5K-N^v5XF75_0xIl6;#)_{8-?qb8Nj#Y=S`57bh!@sWqa9-*<>i +zWn)dfap`2xS*Mlwe-ZJuQ*BHA +zrLNvXb6c{H_|^BnHK}zA*S+p3&|k~0trt<(98>rD?uEG0S0cGSzaDImI=$aM-O{AF +z!u<7~>y0yvg+*ANJq(VhSL;~(PdGX_+^O3l%zpXoi>h`9M2}`fiEw9ZKi56~a;IT_ +zuusUO3gtC7Wh*?C8)a6@xqDTxO$v8ku#h9B-eGo%t6#>=*{i4hdMFgPSHit!!Kqz^ +zTNqbof31sLwPIl7_d-k#5Y3q-orz7)LpD=1zqbjZ%RH%aq$FPr$ut{?KrMJ&4o +zWSL$s_7|#`nHFLEFh|8zKlW~5+>_Y5jjL}Sd1k+6*19QTZ`6P2a=bd%^-!SadZ@r; +z3CEoY3!^{v^Iv(M`rdt!|2EENU*|`dBr}oPIbOfx%x_lbBQG-MNklU= +zZ;5Y=xytoyhi(6Xgrza+l|_0gEbf{@visx(rwW{}K$ZRiY@!02O-uuVqpPUBhKQ&hY>IQAJ^lD9sH65bpUR7@^PAfKaqqK8tX>hpbN-I) +z3MYR{mE>us5?wsbTDHqBY1)47;gxd>uhg&aO7v_`vc8{JmLj(Ij7{F0{L7zTux@z% +z&^4l?f4g3nz+78a=5D^$D!W!gHW|f(hn>=`Jt~{ta0Qe&2fy{?Z9j74JzM)Hhq+0i +zpRKLu9sh0fv+VJrBT^;{G&+u1q_0poaUpxP=b1Sz)rWUz6#lO}l@#;C$iInodTF%f +z3&L;g7yt93I&nMZ%rQWPf +z{i?5zmBlqP^6nN&IHUgFt7qXtt(O@Mm3+zzyV%q`mep_CE^8Jp=e?CJ?x{dj{@fia +zIorLy^DJ4Sx~@gi$JQsFC6KT9<=yI^B7uLdznP|{WH3u`Vv^oWO`X@j`xM{4SKDC2 +zE?ocQZau^Mo82r2J>Rr@g`A)KHz-uwBx!zz%cb&=a4EwSslw}8UG~542Ue9tb)@{r +zcD;EnBHeLPV&%j7inj|i{_p2>>Wi2rQ}|A*E@0K)!>hz+6!k?k`ahZa_NCQsJ-nN->@CNb{#t +z@7xCs8rv;-e~X1~`Tcp0*%keTjQ^aLn+m#JTr%G2xu@AvONpGi +z#T7L-7F*^0E%#K75X#s7pW^*!o``de@$Iq=lk$$J#O<1pQ&CmaAtRE-_G!z7KP9*L +z4%!+oD_gHxbCcb{f00Z0i#11#eCxAy_fHf!=B(N0XwMQ^?{p@3V}NP-&)Ap)c7ZW5 +zvro_FpA-Gt`m(9JvO}$4|CSbqmTS{_%+}3UKcdN0BF7*QoY<)MLXkz8!!6K9FsZ{x +zDDfP}MxVgiQ(i{b+%jwS^b4#pk<1rA0Z2Z?(?x^k3^=W7@le +z{k`@@Q)I8P-q}5C+RFxA_N{MSy*BO>P}Y9B^e2ni&1ut9|C%g+DCWAc`K;Y9ttY-x +z|9DlRretoDj?HOFJF{Foih0HRxn|-0{}#`&DMwSTwa@G60+ +zpOaY=7v8UbxV}Pp(Yyb4L7zJ^b47g0%i7F&POPw=v-vdZc7>IV@8mE3I5|5uWX2aQ +z8PmHCJ38L$D4m{nDyGCX18WS7s5)zSR5EAV?>-tz~x +zk){teg}#Urk;$HY-QvfJu-^@lvd=#DN-kP1_2SL4=j|ppTI=T*=}b~tu>U=?Y(V^q +zy8^2gsyV92>+9A!mu@=Mk{}c#)0Dbz?vx8*iu}nt5*$<438hw5gh@W1CjZ2gZP^sg +z-&$E~o}H=<{;RxFs9~dvfwSgaPvsd5Uu-n&jD+H*FABaPqxb!TZg^PTkqudfE~{3C +zY>}A12K&o(TOR@V?d +zu~J&Te)=EX2fg7hcO4DfZtf@eSIj+TdtHN!o?@u^@vowh=PEAm+T{@@qu=0y1xG+uKx +z-5g)HlcMf=;aScX=X{&9?A2@*EuTGGjz;Ept93VRy|;-$_@0g0L$9WX^Kb5*J*$$F +z#nfPa=xdX@LkFE&;-&vb_u2fEyzI3jqv!RyTa3$3P783aK6%~d>HmqocU%^1yFANC +zo^$S1#R*&Y3T|s?I{ckg+f|AATush9^ZH$^m#+jY<9QX>%rRj$*N=C-1|la@lkAx7 +zAF1m&b6KqoII-ATqx&4kj=ftmn^JGjIvjT6j95a@%-MO8hRH7(q~(qoL>Spw9$gUk +z#q)fAsb%RbgM|+>|FSqdbX)R(Gsw5ERjg&=`V(L0KXgtg*x1*V=CL4**FjS{_>qLt +za*JQGr^RKKar3y9oo7~137#3@X(;<#KSql|A~?0AaryKWJWM+E4+Ys=9gZsAT*7S3 +zS>$v54V;6V9BTQ(pEiy5?Yz+^?pHnC#!ZJKu;XYw9uSaNV*|nRI@e +zgyFfvDL0!NoELfTT)TjwySUDLnbmZ$tdob2t395~+tfRAz2$|p#bvSIe%houf0lO>j9IxMg&QB)1c;|zHo+aG7-h^i|PdsqB<>N9}+rT}QTXHAd +zUp?0{#++e`bMPzs?u4zg8+vc2pJU+M>abbXp~uhiSnSUEjEg*9LGNuo{)9*YB>?f%#WxOtX;45pkAn8yM>y39w4~bfzl#^ty?C^F2)FoO^V{Xa7`}R?o}R +zGlF`PJk5TJPOST% +zu4z7NPN-Y1@V>cPx9@$r+P&+DW9S1b^)0@dE?u{myVd`@a^n7?DYm)amQ0$?Bog}n +zucddK)Yd14F}o(E>Q$yBhCKVM<`L4r@v+>#)3>L;KE8H#`+n*AiFXn|#QVr){^&0H +zbcy$(;fp6r!^-+x_iD?XSL*pFrmP}Y@ocZMl!=O>nW*@+jf2d$X-RWLo +zQ+7@3M#Hpb$=eDym)^2b@-m!Wl#>>%cSMlE;A80gZwwYQ_*qJ<#<Vp36Q?43}*1?ZH#mro=`P59MW1Cy8>lyz%3$D458sltw=FlVag*>4f-p+ef-=eVN +zW5oR6F6)icULNDFdiV0kyzb-dVnoJON#Y6CH|PlD(h}?P3Z95F@^cU&PIzje218P=N-D!p}k5d +zIW6X-^PEe|EtYngZeH)fcW=)I^BZ&ZAI!Fv=qQgrQ0bOBYwPrtEf4=#s)@4Ae3rLK +zrE%-~oE7y>R`QlxT-IehS$)Fr^IOhuY8^*&r(6quzU;+MlMUe-S(p2jPFv_oHx>V? +zdi17PYS#3uz4JF-N!Q#`=-Iq8V>5R~^Ueos!Ix$-=&h?U+sKr;>7DD$=@&dJCOz$u +zDlw2*zO5tk%WNH$Il^_S7lch>fsn_OS4AVXH +z^Z$wN_n|@@3lA{Ne=~8ZqSaZGwZhFToD3Y9o*N$U%a+`!IqDs;J8-}K_e*=`cbs^- +z!fW-Xyl174*M+!;&O3eVXM7R&%EPfmCILQ2&pfvbNIm&pEACS@AJ3J)<~%F?zQ|;` +zo?mr&`MkCNj`60Qzbp`{R_`Sg8r13&<2qH7PqB2J)yaU8>&NBS?^X*9dLGYScg6AH +zqUu#Vp`CZG%WZeDU82QlyV7g@{-mX^)~)in5)m5ow>_e3YUI?;qF(iDa-}PULTAid +zarsMAsE}yl)V}?_A0N&;|K-F={k1P&O!2F|7*pEsP^!MXC(UE+q!k8!o&GiTU*|~d +z4$68mId*DM#Kp}^l3rgjPrdoQEo5K0Y>LCeIf*)7_0O|OvAt{ziK`F!JTpBY<-g6= +zb?0Yv|J$53b7|K^mR(H-{S()Jd&0rM5LCc$y~H&5yJVhyN0!iGu7oq%KGUBhE0iDo +zQk9ilwbE>EMz)rpYuU<`5xY2-uHavD)T;i9n@#SaTgQ$E&Y1IPrj)70{$R!054R?_ +z3%JSh;Y%kYZaa^>pWzHO8JFkKgWJqZJ@?ZRKjFWoqXS7@HisQCRvX +zMDh5K+6y63?EU+Fxiswz9ax!zEni%DpW4v*%YRjy5Yx<^HC?X73x8dBCNx#~Uv+Tj +z4jI*>4EGIEcKy6MMUcTFsJJxOF+HbY&W;B!g#rW|1U#nei7<)RXP(xH^tNMuw@ppL +zdDi@6Q+FTh63_Z@`~Le^40#K9!_BH+gg(2z!TDd0^2zyI!ym1>t-)*&cQx0dV$z<% +znF8iV=iI-xq>|~*f*MYlru +z +z*Y2Ox@LY|_dMaO|mqdSi|7T6lb^e^I~SSV^zu^n6a7l>syI1= +zRJf14TqEq+Zk}npU}weLuRr~g?)^NU+tM}9INIijbyT1eACLI_St;L*%$**#?3s~u +z#M|4;!?455&vQz_fxjzFb0?}i7USe~__#xK@#8P9OQ&;%CNnIJN|ob`k0?L-m3?8+ +z#u5jCde^Lj!WYt>JKqfrWn99_z>%)~L1LGN-a>OzE!CA`sfXE)t=jm}UB7U-kz>$= +z+b&bSnN7TYEHeAytmDBVkuRo(tc}wB*iv=HB{uuK^dg%D_Q#dDSWA7r#AaHEaXnfq +zI&mRqh_toKl5@doJI*S8+B&~`_d=&G^&%0Gp3W=Db2)++vo2IHkChHyzk9`XPSyCQ +z>9<#3_z@TXt?GBF!*lMyP_1nu=3nyNlOM02QTE1t$`p6Qxplvm%-{3d`O@sLRZnFa +zXZ_!NMTEg4v>>IlAf+U+sA11^9&skQ`UMR)LYJnR``mKaQqwjoz0YkK$8k&JYjKMt +z--a?Kwyb}ZF)<{^XNRkBJ;VY`Tt%{bm +zt!u4UtG?d1#&Pq5oy%&u=bTS;UYV((@^ikJ(XMme9RHS25SW^FoS}P$a8p!{_@{r- +z8Oif?UoA`TF%svf5-Z$MocF2l&I7TFvzxV^JgMAv$?M*}-!s>Kp0nW*@A6Mxw|;My +zxb`OZn4Qb#pIcLy-0FY1&FuLRQq97hvFB}zedBW7$b@?1&WXm|(`SC0em{TNybQk@ +z^Vb?dOa`J6(p#rGty5xM`+eH1Q(oq~Kf9^wN&2?uU%BLU($M7d@`g1xvW_3=^JR+k +zoW;ga8@J#V7gN9~#dFD}A~ +zabMXU`(W>ps}J=)DAzZ17_1GN&vCZDZrLo>LoYX;n7U?}-}%Y{y{{YZBnwXP?br88 +zz2mS!Q(L%hYEos!@~NCY4-=h<$L#W_);EKgV&7z_#+ru&+&uCHl1c)k0-q?{9jbA0{JUkb6hjaJu%Hf|4f +ze|UGgfs&9&~){op;9mMqG(R>)sDYh@N2 +z(_RS+Q=ZTGkyQIu2u6VSXvaBmmQs5 +zHf#6i@-v05A1i7+>-FO;P2`jKd|%(qi!aUaS{JfJGrfITi<5ig-Znw`SyEH^&raNO +z-gLHxamTVb%^7v7xgmm!G^YuieII=K5%0yAg2TUKoi=%A%=Oyj{WdE(#AR_z`MUqk +z-zT%1EoXhFbTP)We1GGvK~K*zW!!Z3c}@Rg?j&=Ftzu@K;;_xYxqQLId#B|;o;5Jusm+|V$u`9HwDa=ioRL~J +zQ%b}&7Ylg!TJMtMr$2twJ8vuddIm>bH~i*Mf?B!WRE&ym#Awi +z`lIakft}?Z(ua6G7Tul1$lvy=q<(h)p^E9-=Y{zTxS6)46|J8x`m#aOCgS1R?_z4~ +z*-yLqIU6bjE$x1ICdl4BC{XO3Vv^JGAZMoiR$WQfm`i`MgzO5}dJ5cSwcY%jUtjTT +z`VZ-Jm;8_ge{=ff9A2NViilVHuj;#0*Q=$=#kH1yss79v%dCuiC%(JV^fKM~okRVn +zC-U=Oh_{veYAldhrtr$cbB_T-Q-`EPgFpL~<~hRK+q^C%-PO9`XMAMm0qGgrS;~^F +zx2fOvPkud5cg2ONQ$OY2U(J~CGjc8apQ}QP1qF?KPp{wgQj+he#OHHs6aH}*U)6oJ +zR^RiqyO!;XTVK}O{bqE#ZnHIEo^Y6;>j|dD)%7a^#Z^yBDRML(4ww*hOu&i9$m=ts +zP{Ra+z7&ml4UP&diVXrS4XP?kP8|mXomh?tF6L0KnCxV=qjhP@j6DyhoRYoUJvVMv +zkmTJLbC<~&Ed5l^Wyv*p^ORFlV%hd)pPy%8pSquiWmWRzQ+hsPZVP`3YQ!a-Deio{ +z#OUDPwx`eQkL`1Pd`xZHhF_aDP0R?quvmJkKXc-;UuK@E^S&)O_Cs~0js0(~cgr@u +z_xDNud?)1l4Bv(atIvorn{0^mHCB9Cq`1;&Rp?A7ArGy|K&nDybs +z%c9Mmg<<9{r(_ehcW%F^_hahohy1CG4u_UW#~t5)VN+%P-5G54&%Wj>?l>L#rSE@m +z?@}=b1=;In|DU~OotQcKXEdjWNzKcx3yh*1T7&K#PzzUG7C%}0lj-c3Pv^FsT)HB2 +z_MIZWyH6&?+?;*KXnxgX@4{e@WZCUCy}NY+bq-Yg;?ek4L5{vo +zw;3~kJ8su<+IzL{Ll>XbwBz;j9k?CmUP*Xy<4qV}`>UMfTGiXLrM-8uWb8EvyZXPw +z=XHWw$i|Hl2UQY0W;g!Xp?aW~`yZ+o3 +zJtHBJka>oslUhF~KB!;nUw1m$=E$Uz?T7ewY1WrWD_1{JcHOkG>6FpuTN6DpSSI#O +z`s^ib7@_@J&{X#fhl%n=epjJ?6OZz{^ziSOU+_6-zsl+t$Dbx$_@U=_e#gH(%pYx2 +zCv9Xe{`YZ1#acx&rsKLvJtrI%(3qF3Z^$ +zb)E}J&$_7MawP6*zwqUbj5bZ5UX68JNlH(8r%J_`J(9V4e@1)Cq#S9PUn$An#~4jY +znZN8m{-ge!JWK25TV@*y*;tE@=+3{u@VjMackhF^uhU+ldV>ETvMO7F=WBjFF^&O3c6V_QT3Z2>eoz<*}la3d9?4J +z`RO^!R%YR_16BX?^u+%>)RZw +zH1~fGK0j_KT)$hfYUah9s{&peHz!@;y>LjXq&~|+!Ly&E({z2DZ_%Qqrbnk6z35{N +z{Cet$#*T$7*X?rI&cB^fpZ7#yHJ2&xx(PoPEYn+cxYVd|YWn1w2{UHhc~zZ}e00_| +z=AwhArX*(HeK4c?U6W0`V%Ore;&B@-Kd(nU4#8sECU*@4+ybL8q}{BM6b +zlmB+glAqj9tKzRrIAGZpB)p?hT`~EhgKeC&footMb9HIFn$~t{rSltqeRfQ5c{M>w +zp@r#=S>r@D%h}FTcKv?Bck0fy-h?2Ii^>x1Ct8l=dOon9e7?v3j`U^)2Dj1z)wU~3 +zidJ$P-F1*L-OYYV$Yj%-$}^YCX7eeYsdvA#>x=vPT<(RB3PftBcpNEv9Lly|{GG2| +z@(z)_a+WFQ8@}H1TjVrF>cW{~2eX-rzNDS}tNtJ$OTw%DQrOFqC;W#QJMZ2%yreYm +z@3{=S;aLR#lxG?F +z*B&!`vE3f_b|rhtM}}uQHQEi?R>lU*#x0zih2P!_TDHenP^rk%dsFl*_RAmS>~r!s +zSY|NomQ3Ec_(Vn?Ljgk(gZ4u8L-k)~&(4k(tr2iKbhV!Uc2CudlP!~9XuV7Q+WVp0 +z@Qg~F(EhtiYzjkr7rQEpJo}s&s;!ytK6&~lbuV$_Yp0IQ<2Z65wDR$zz76kNt)G@z +zbS=HD+}VCC|DN5}hqEqu2`bO@68shZEvACUE@}Iut?OB5&n=f*y8r3nx7UmuTG~GC +zV&geG<%#m0Gk@P|uBpGhSZ#s^-?Pb<%lBR8^$=Wf<)g;5eI3^A-1#C~wZl8s+P!-) +z`>5HP2Ui5VOQzlvv<|vszjND>`~DrZSKiH*UZ>!AX?M-xM~@aAQf_^1eod6;(6)Pv +z+OC=_ht%&lc=*lf*80#*;otU(OunF<_NzZ_jqCo&|5j^HU0$L6J)3ny9)Eqs)Qi{q +z9yiQjuhfr5dd|#AnYzk7LQ$+zJR)@V#HufniYD5pbYi&=SLUc)`TT{O +zOX2e43ibOwGRNKA_fI+%{^gHt?RmQht(Q(`*1IPESDqxL;kK7wYt5Z?cly2-XH6+y +zcucVe)6v>Sc}r48{xs6Am0W=&WKq(L|w} +zBSe7fIWx-wMh+qFnXIkSjVw%TjZBS9jEoIR4G9VY3=E744Gc_-4~#S{xcVE*w3s_r +zd(^*bTadc{{A{i-Ygd{^yYendx*qhwZLfXq{dXOaN^i7I-eV1amDHSIz$BL#z*9G+ +zH78L#%J+4dTSDWDuTJ+&CQ85R?f3q5@UDweW=#a=zw^%+pKqSUQX{=Wq5k*|)0lWy +z{V-1B>v5r-esb=``|tgq*v`+M_%NA8A-!;w*Osh$$JiNn|F(GQOloO%k6djR^Lf$h +zVEd9Dr;7K|yH@eUP1-g;L)pTw*%xyfSajv3nV7|M`1zIG*`G@x>=A-3T>~cOhK{O>(T8>`uH|vtj+h +zqSF@@qUJMCeY>^(AG^E3Tus5&+Lna2uPn2<%FdW(XEXQYftn2TcdRP +zpPy}XS<-nkj#ukHEvx^{&dn}R*1M}~;w|UH3lByuo%VTtBE!kXg+`(rQ;jDqi90dp +zjn%&Ln??5-7k=5%(UllXFQ<00 +zP44O|mTZUew~;F)HF&R2{>rR%VXyX-?wHPA-$S)2+r8>ME2{M`CLAffaPi&C)lpH& +zKOVJ)F`x6ea+Rh3#O3Yo+p9}dx1DA^xkYzU)`mW%lZ!!&pA|9yyg+lF$t&52c8N}|pu1}W`% +z|18`rIjl~U^PL7eDXzK=#E{ufWofc +zQqfg{qBHkQ)c7WO;lq7_W*47k{`~D?YhQ^kcr2RvE%=m4qwndOsL0h1Wfo4KzR!}g +z{?fu(mita;N6q-3w!4V+L)*pb=fd8_Z(ZK#r=mJF&h(?EwMUP&o$t9CUTb^lSOQ02n|1CA{m?}P +zr`PP^?z$%_67X#OOJTm0h~?{x-mVh(%D=L>&HbcredlS-cbnV3&7Rkzd^9`AcFBa! +z+1u+5RQn}dJ@?S<_tb?xN8hjYIyRBp@=xE2nxCRFZIZ#sPnmar-XqrWPE?~Ov-N<==5rmwK3NZzxjZ+rIkpS+&PY!z~ih7jem0 +zhCdXZaG=zHZAN;oI}3 +z9e%{_r4nJsbiC!-r(mPr_`Yt%Hy^$R_^7>kX7S};`BTTLEbhnk;lFacEpue{FVd}; +z#5iNN?f%;zXYP7;-*cV}$D{qHx$FdSMI&f`bGVUL+uUgC#RNL?QqpyYPI}pYUA5%M@HwTRzk0A +zA1zkCdUd_xrB%WYif#V#*vH-Kc)y$B>djNLB5VJ=)xMja(bLS8lm5YE&!c-b|E7E_ +zdr}&*$S~)R5$n8(ck_!MTssi1YnZ#X%Evg-i79!9@cZf|QfKFDd9UvmvTbCVlc;_Z6 +zPB?n;>DEi-nkR3XbeXCKL|=>evsAUX@kei+@y(vI$-Jvr*}L9Inq0e{_rc;@^urqE +zsW%ud+jab&xz(s|-)1?jDa@Zw**A0xb7n_hZqU0?uk`o!{QoYy@4Zh6d{_|1DJoRH +zhB2SFkZW=NEQOjT6Zcj1yb&!Alvl*xFFdsJT$Wcs1n0AMeaA?q6&L$U?kGRwSXOY1 +z`(B{N+-FnVrH*&(;n}qQ$gd+h-;;_}S`JP4u>M!Xq&HLfwGU{oI)86nj#;YK?#)s6 +zR&C++lCtGly6jT@nY-LkOA=LH2Y72e;k5eaU?FDS+mfM|*5P#XU;N|7&wiPVmt8*_ +znbz98W2~Dx%~{cq=WDLv%4_C3_pf;8By)v}PhH;U+LYy|BaHqn-SlxrlO~TN7kF-V_Fv+n|t1OSJ17ZoT|6GCnfLp +zGYgYs6R6PM#koaxbyfH<0noAd6PS4w?CMtuySK`!S8a7uH-#a +zeHQY~+x09}p?hxG|Mj*hZwijj*;>D1X@J(PO#hj!Q#JE7ZWy~swd97)_Bgi5^lnqs +zlg--C?+PkikcxH7eNcHp`SF}L1_m0err&usC$I;FS)XBk{aR-M_rIzmUfokOX7x}JMVpF5?$}S=%N0%Esxi>&3P;O{&0G}8&87o|G%5AWS$JaE)i3CCw6Ps +zlKRJ{BFkH>`&lQ67Mov*Rgl#G5&1J9xhZ_>#&(6BH`0}O95+ROQab@r^9mnUPZ)~&o}QZTXbnP!I +z_YJeWu50IAKOCdDx@n7m-g +zo;_b`^z8#A&7Spb4p7d_$@yQusZjHEyv^bA9G}-A!WweY_b;2}oJ~%C7@4$S!jxqx +zD~>JhOxeM+{o~(y|H8*DQhT2=9lrGO&zX#qSHE9YtML}*Eq>g;Vvh7_E{@yhkFPpf +zv**F(**p;wvbKpR^Tb^Kb(ka6BQ#*CihB2|{4CqRM;6?|caFSa)0}WXbE%l+$+KDq +z#h-m>dwS|wHyK%PVR&V@`OcIk{a=&UOl{h8zv$?sDH%>*zn*ZNv|&Z9y0Yx##iyP`J~+4T +zw75a@4-3KhP1>7hIK)KrZu6MqqvZ6+^qSrQrwbF)PI=3=nA=bN6qu1CcaWQD=H^0{ +z9lIMYb_t(9tZ`UwaXi-xOVvkirT^;vj%VI-TKV|ehL4t8bY?o)yZ_#^ui4VwEF#`@ +zeoMZa>$_(!FZa!m-E@d6w^&i5L0==~++J4a<^@mcl@A;}7?zb0+}jfL&T)QAeb|0bjDy$e7e|0k)IZIf2Xc8H&}YXaNT+D +zm-WBg?%U}#Y(G@e`G4w;7krj$Pi)(FB6Ih_*DjkpO-iaJYqPtoSpTU_Vu#*apJ%N< +zgF|C74;O?Ub5E;wVVFN9)lQX}t3Zh5Q#@ystnklcKU-@8y#yFk0}Z{-=u5wn$~3T^M`r*Q_iL**Q?&+G4QrO +z6L57wtFX@WqD`~bzpRq+iHrKv5c0(7rKx1+9?fEZ)@gg+x$}E>avRhv>Dc^VV@lM+ +z%*_A7r)H=J=GAlm(VHr=xb9-p((ML+X9Pb#pxiNGk};=S{c)FqJDI1iznuP*U-s(T +z_c87)vv2))WZx3hzUXHfC+|&bE%ifc;rairCf>g@t(ag)2XK +zO3m31y!Vr*e3nUjBN8Y$MN}a9{jybRvK}UJCwFCw2|rGvH~r6FT=WdACG42nD5|yL;L>1 +zJ3^)FLtk_%8wLtg9JQFGA%C5ta7X(S;p-f6E+?jF6dws~ow`lt+xIEeazcIgI-Ql6 +z?r#2>b#{ySbF-Ts25qZc)^H|osGqRPy=h|8M)gVenEQ|VJ(>AoyU)&fGkka+GB=6r +z%|6E^dW!XM*_TflvXVi+c=?-NKacJ4`Y|g#-ilv&n^BOYd*!Ze-m?u9%zXF#Pu(75 +z!tZ_jaqtrJ^l7P}7lKm1$2 +z{PEp4%Pujj3*X!E)KhHYgDY$Au(BNM@qYN)#-ga6^UF5HwO@DNOir8-{9MFtiiA{K +zOS}BKJkd)1HP8743e@sXZaJcrkbYT(kL}bWr-k1`mZjbWN`TJ+a;Tx*ra!!+7mCn<<|3$`ltisd!! +z8n3d`Z%QUP-QUXm?SN`>Yugd)vOeLrT5(GC%N^(H>c$4nTv%qLVZUzoGT{XaK1}{` +z<-{A&2iv?I6Rx)&{uGxfonkYI^ZbRVW>!`aw|gz(`C9iqpR|T=le)0+^rVOHe=Xpt +zG-WJ$E$b+JZ0Ghl8y@~K7e10u@AgxUwbANcb}+Z_5{plV74A5$WJ`?O$yfJqUZ%pG +zw|t7yb7WH7Mb7TI*7L~D;ro)FhYOWHtW%qDDF69>$^13imrWwN<^LZEU*Is$%|k$I +zt^Mi$A~v&iri5D@%dt4isA2b2ncVEs5RSJWEQbG2u*kI{V@GlorrVc<73HIn&*_%A3JV| +zn`m=fqT`TB$BE!gix%!|tUj8fYxU=agRfx2g3W%%S0BH-E1_5_sC3ebq6$&QU+I-a +z@kWVnqSG{bxOY|jpOvKCBPyL3xzgG~deNa9_1+WLni(&66vSltWs#ZS;jbNh{&Ph3 +zFP7h(b!ywOhbNda479&4vh8Ll2`SjWo~ylz?{K!AvNG4ngUf}rt9-f?1MfHZ9EMQRIf94?fN+>$(fPu?x{YL+mI +zYYFQ)r_D;>S9dgdDCTjoe#%ybE8o7(&YvMDeVysU|MZEX63UD6Eb2o~mEU=|^pfW8 +zFF(}c9K-qdtyOuKY^$fRSEhP9XOExrn=RH=_HvTay4>dUw&$^L8?#u*zO%~(Z0`O@dEQ?iyu3SR +zbIZ0muY+3+m!G?);dsC!eV4&i%fCLawoX2G&TVpWj_wmb{lDqw=3M@8CXjh*u3u%A +zzT@Rt+Z}4I8#f59&A)4Dx`kz)<-WMj;UN|OgtwO7j&PW|sQ2iThcjNS$nRFazft6i +z!Huq(7Yl>$Yo@rr%x^R_L!RN32ZoLm#)xaSYk#kD?;`(OD!yYlXY%(^mRhq9*c>MYD$7n=_) +zl*&8Da;!MRw?ZN0Z_moon>}koubVEgP0@-HQ|OS+ue!wuQyjU{y6kZrTog;V`l!^o7i4Hu693lOJCV>L4Q^6k9h@aH|lP% +z7gbZeb~*6$>mAl7vLElcyGU`Wih#7GeSl5ocQs)T#RUrm>SdY)v?uw+-*KEUy>RBC +zLMQc(Erpp+VlNRy~StSi%L#TQ{yNqSN{9KIexeFgt<~*ehPnj +z!N&J532i)*@|t_O=qU;VYW57zV^-I!%8w5>_#y%pAOB+Jh|gZW|YLl!`nLk^qQ<#cKMp4 +zL`}lA7h=I$!K)ma7acpCw{ruZa?FMJh~v#O3)b;ozZO>1bMiz)q2KAvE4{zfhrBKS +zmn;60FRNqTmAK=P6F1vGnDFW4A}JB06~`B>mCI5-nwatX&y?u6a~8b>gqm +zU2nduU-VIN?}2-~%0K5PPx#nSSG=zH55Jswz2c0t`@%IIzqaan-aC`A?7;sohRIdu +ze=So`lWQqDe|)o>$AoV}iAsFxds4+h{9-NZ4OrN0C+*$kC(xzfaDsh7pzQ2#0(;Iq +z?wE0GbJETmncdFf-a4Cv%p$c4LV1PXwQ7B1e|+$eXXEkEzKKzD?wx%YFxiaHZJK_t +zg)HB88KY9)moBEAUAnFF&hr;-x=?Iizu$WKvdsd&A_T6VNI!a_Rr|}SBW2k!7lb%u +z58X7bwX0WT_#4_4xb;b<5rh0f;T3yZWNq$W%9>+l_Evh*Z{PXv-sGL(wbo=RtJlkF +zoGHC~s(bK*;+=XItFAZNKHcWT^kwaSgX9+O{@0C#)l=IQH^fgo6Y#}o&D`|jIZvj~ +z+qB*7YOTWN|J=#$z9C=yCa5%L_G|q7F*n76VG)~kS>>eM`pLJhPY!WU=xQ^%)SAs0 +zX5f0gbm!}HM_Y|JrfI}zT$j|{c}B)?`3}(^9cl3~_8L*KiPMj|$}YYczot>WwD^C0 +zoc5oKZ;qP1F~0OhZ}}1d&&g@u*Uw#h)|B8{)U!> +z*;_9dp}6Dnn-}%Gua@7e-)M2{^{Rl)i)VS|{t(x)-W8Bzyz=JDcenk6H*dae-9IPb +ztRAm}XQ1itbLq?H)?9s~S+X%>^-cD8k)xsO)28b!FA4t>HM?*B-Ysixx-vVg+L9K} +zb7DWwCev!UnC`~xZB4QfX#~GB*POItpuwz<`f1p~J{*{SsmVah^SM$~T6YbYmG(j(cmFd}!{+yS8 +z=Lg5`X8k6!^;^v8+m9RaB$|z7g?T6MV5y&WXIk<7Wr<(3Kiu0G&zG;OUzK4LQ0i=& +zKf$#s)4#p?g~qwwlgz3Mrs?*~XUV$y>%sAlm)9=usf~TX-SAaTcHJW<3Qs;`||GtrJdW?w5heH8wIooR_fTQ +zO}d%1zy8u?h1Hil4Et=;dc2ojjCpe8v}*QBhM4UO&i6cK<9)WP>h1t$Hc`lE9otW|8rq^J5qIe|u@1vL`J>dDgu2txK*4zhH0%7iK(@QDGp8`m7h}@N +z%71rbQ%k7PS5~gLu!$w={Uz}y+BEMxfAUjLS#1AZmule(p8A=$TkCDf +z&jcxtqc87V%XQVZdvZ=wXRS)i(Qvs}JIf`Hdd<3N!#p|VmD>|}(dK=tMMF-TdKv9w +zS`=ygGa|F>uIQ?*x<~6B`VR_zX}-I?$9HFA=E)mh+M<=`1XS#5F5}uRD{XVb=tX1M +zEMcJwe$4he7fyb?$3se2Uu(L3pzWJ4bqg+TVyvs^@#XB3(2BVJXU=)iBtLomU6Ts_ +z$u-W^+$(Czc5SZd`ayq=< +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 +z){h6bCFd3(1NDI2d7cKZ;auc+K`i6`UFoQqp# +zcrbkFS4Fme!dou(anG|GT+Lli#_@3-9gDzmtA4VWZE4 +zW0$6A^#5&s5aV+4{mdx>%>T7JZnHI8<@0OCfBPbKLtg0azIol3>y7>YCm3A!zA-~# +za_F3CMGMZpWcYqc$aP{?h+2t8;g79hYEA9AJ7qa7_OHoGoW-H=UhUBr=XpV@1txFr +zY!rUswKAQVbpglC{9RMJ7MwX8a_;uGXEhy5&F=V=?|Iz0V3&Z|WtRun{jPG%Ziv6L +z@#f=i{#t(JhUyDHD5&JzHx-Gjx4&I>_2Bg8_flS)+Nvg>Sp0Bi?u99P<}EPDnQ}ms +z;m7_S!T-PI=dRTDSQI?<%lrSg6x|Bu6_ssTXwF=<(u+gnr$|+zw(>=$pglW}u99Ls +zax^{J<2_gR?VX*M-?n_%xc~GOiD$D~zp$=JPnTb8vN+k>+-6qg!OflB@*J~HwQ0xK +zN5vm>Y_yxf;B5D|m|w~zW#PifhaT14yW!&eD(+g{J=4I0+>iFw-Ftp_H81mlHBtx8 +zriE4)eGd*We`)_nibbdSMz+Z1^U+85G{;H*-D7=2RHr9R>do`#zK0+F*<&sEj$QK9 +zcVW(gZ&rcxctAG+QLHoTYdNi>UI+duDrj!FIVgrzt7#H?hd2&BwB{_Xhpdc8b9 +zkp~*~vTMYq-q2BAWF2w(Tl($LmuHM8hNlOYSZB({-L`TjAj!=W!(WSV=U+;i_!NutHFGXniid^w%+;*YJUrzo?GR+7Mk +zCoNSG*8gsr*RyVvy8LX)EyF$aH&Sgm^L{p84?JaMA(1?r$$FAp9&b{0>0f*#7WizjI`&p~#_pRF=V^;K9eEVLJ$%-eG3v?&mF)EvKiQD@r +zv!cryUHO>84;N&jQ>HFD>hOF2b1x=mrKKBPCd;jM{8Cmddgx{S+=JhoF1(R=zx&+T +zdn~)=T-~+)ah>Uzgab?eGL+_Mmc5Yom6(1}eGmKYw3?b%bI!Q83V!Bi68)oSEp0pB +zp0hFW+MZpX-0yjPDEh?ex$1OAuhQW&R=@S<^@ZEtZ48Z!cS^B$DM??jW6kw?Rrx+y +zwZDyedrt(f+n)M-cg2Qk-{18wT4pc!t~h6A!kJU|cTU(~;<~mw)xmW_(YN>8ESaa| +zvP{!qZueMod+U}C=OEE-wGT``_vSuH3JwjZzVdCS%mK@UbAq{1b60$@5KR|3v-nco +z>vUeReR4T#TJO}H6@KuaIp^i_o@Zu@mx(Jb`oJr)JtomD$sp;^TtB~#9jg-z_SPSG +zeQa&>E`{-L5S+;ClVy~;G-6kC;KYB2 +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 +z`d$c{oiBKwAATIP{YLT=f*6 +z2~$_;vle)q+1n{v#&|q-rqjoJCs${Qh2NNaxW1w4>8G`kHAa6E#9kWTGV4Ejm2I`5 +z&04uhZl`z_Esz&|cFxCTmfqUKPYz^S>WG!suDKu)d{FC;p7n&YAHCeAJR8+{O#W8C +zZ|dsxne#Uy;@`p9^+zUM|B>k0c_C=FU_jNGiAybB|BPPG?sqz1vE!?o(s#~X`G2uC +zWA@L@SO4s~nr`Y-84_n+Wl`5Mi?`S)tkEbHqbxqt`ADzD#xBJqu +z*B#p?=Gu%%J%l3=UM;O3p($7cd_ufbT0#U +z{Jk~zuDOX=9CUmwZhzhWOwhc2sr(=86)Fw$*tpy-@f+SWZMV={r{B=a$jEZ3d8Hgv +zV&OU6Lgtuzd|#HG*OvIi_4dqzT?$@VzZ-8n5)M=@j6?76{;-LM{gv6- +zGB+uIXD{C-y8iI&H#?T;AE;mZe&dJK$aW{c$HB^C`O8AnSWKRKr|S4^rUD{-!#a$*Jl|N4}QdusR +zYtyywar`MAa`KEzKOf(1esSZhmGhXU6h7uKm^O)np)Yl3=|c0^LLXhtB3r@wQ=#t@ +zf2{cF^H}iru|JESNon$**>*;^Q0hyHM_TLYaP1lO@{TgL`u_IZdn%SpFj{oVHv6PP +zr&$v3Y1faw{TmIAWq2-ddStoKqNA#%*pfL%%U`a{XX(nT-D_<>K4ZH5Xb$6kj)*B1 +z;wrY*JJu`PTHh{ox)`ms=gh&jbyig+EcLH0?!LN9U_R503)8mlD0;E$v3CR{_X12?ul-Flxh~hc;t+8e6zv4d{OnPud5as +z`Tdx2`Qo|<*Qbc@ty=5golxSuJ5k~O&yxvv)~#91{~{vWBq~_$SlA4qE4yC3bOUG#8MPp06No%Y9-dFmzVFLMU6cHB3RDmZOgtMjmW +zlA-*IeAzDfb6#A3UM{tn5F5aD{(-N0?S~nCr&BoWY90v73;mHl5mxoHgpTe$eg_~^CJ*l2ZUZS#5aj%>Vm@8jaq +zh)#Z^tt%gw9q?#~Gp^_J5O?wJtBX-R^;DUE*U!gOq+V`6+B@4s`FhLI-`h{|L|JY7 +zR1^P9l&du|>3jH!eH)MHolM}?$x?KG-VmwMAER!Ub4>e!vazi6x<{9;E|NCSW!h%( +zv0HKt%hL-B7S61l?QuhXio*B)WxwQC6nuYT(JrIZnO>@5WV6@UQAv=u-n^H&B|oK5 +z@6&~PK7ow87t9Y$Q@-M1A+&T?>59z`A8-C!+-+hK)pWF3%;>>|ozocw+8G2M-M)UB +zf6p764Vy1YNNxH*?cV)ET{>NjBF#yE*Y~hloGe%HnkMPN-G0*WW~uG&Wg&;ZKV0>l +zIbzN<_VcPu8qvRtnB6^f-rg!M@L;SzyYTbMn4^c;`2`<#Tx<2nS({a9{^Cq;R^y@M +zyAI}$s`iV`@xCf&F=J_vyTh6bt^XSyU#Sq?WVhzA$b_oqiDAFP56z5ytZE(H6jvqa +zHsfwFm%^k|{d+{yY@Oy#?LBo*zcjA$tXq~jbM}?&<6ha!jh>5mU3$!9_XNdC8XKN# +zsb^;^FH!n)XzfGRti59MzL~j88a~df&slKI%a=XmP`&*7eOB_(b~1M-B|CDiK5Ch( +z+c0C{Hk&79E7xrCJ^X>Uvv1n3bIRfk<_kVNK9P9Od`(2GmCB2#**E-z7kHePIIl08 +zKe2Rmo>N5au8g?IP4U)|wT8AUS5N$YGk(MDNiyH+6_#9FylG?Pjm@VmXZgSJ{AvGQ +z{Kdcim+EupeXk7YOyvJn@A>Wg;X}`(Y#HVWy9sTu7MWdasMKS}ZCf*c=Ya;t$m5Oi +zT95x8{oHu*yy4>aDI{Oi}5&iEbNt3Lcc;%g?% +z|0vnnsdHucQNI)Q4HZ!zB*dm23^{vw=03ZSi#}8MPo0!IvLsICEbENJYdV)G=I&K& +z-~2oI|NPeUc?_#N|F1t|;p=v>|C-L?LZw#j6YF0~D^2^8Zy)!Mnd_R-h0p{085hXj +zpQk_JX~GP{uNu+8TDK2x{1w7fy?FDtALgwLX$jYCtKGJA8BD&Qx^sGcfaBF8Q$2Uc +z{%_=NV8}8~*ih2D-QcXyPsOC}=*g~o{quy*9^?tW)1bt_^JG`SyN^3p&6HdInLShW +z^*#Mn_e#Z%3vD}?`{JA5-TmM6y8OJ3Zk2can;o==ai-?3m66M*e%U_p&C31Uxy%yl +zmw$=XYHZK`SiES9@9zE;|BnTHlXzFJq!{SDcw5t(+`mhmi*$SS&itEH+h>qlHk;dy +zP4C2YhE{%s$p`+p|ByI%RCs2_eFYVM@#Ju +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 +zPN``8pOiWAVw{|?S%=h0#s +z%z^GRR%$Q&dgRL`?FQEemAvm6wRau6U!cG!siC^=L%_UKGh$`dT+MsVB(k@@Vb0Xb +zf|B6kQp@x6dN=IZ_i43bkicwHiMDW8?}yqauDxVvwoAX4J!4j&Nqs__wbFj`kGz7v +zsx^Aw`}Td`9`0A4IQy7e$DZ=CKh^KkF7xj_VDm@o@!|Nra}1f-);R8+x-;;=|DDlM +zktr;hKQ@P2Fh*u{J({!F#8AucfMC1Qk0V_|f1VzeIM&3=Is0yG=$(+a#YXx$0<&YT +zq)lnzdvPx*ps}hjSo*t2VUUgeiaAprxG$=C@>R3h(r=Mx$k#20)atbpP9ztyu*`J+ +zw&M7wz0Dn)jte>FojW6W_lW5He~oK7mijdQ5IE*@<_vf3#Ai&JZ)8k9|2lGk-KcLx +zYW_Q|>5W$H22%{q^zc-Hv8m-*2`lMB2tEv>gz|_C$^AsJ7cL#00 +z>zVOfGD%9G!$9@a{L0oI-Nsjc>SsP@<=??NPghPSYog=ZndYvS=2bpd7iCp_`hiiX +z|Hz~M1*ykxFLh-Rw>KcB>t4Km?fgcdRK)>Z-d`m;W_iG+3Raq92Ri?naF9C`t|RMA2X-Do*P@c +zPHy6v`aMapJO3UHow4dc*23LshC%WtX0JXqf#2?t(p-mz&LeBTi~Ie&2MlL7WHw)! +zb^Wwll7_|ch|BePQY-FRbDf*pCZg|EY5c)Q_<->qH70(8?0pa_V-Y?*8iM38!0<^8cp(?Ry;B;e3EAqK4zvR<#lX`Cm6O +z+Rj-ro2<%up&_(DThU`7tLx>Gqx@^0#kAN*Wp0~tbw|#E7i%hd>ce-u>t!ul>m2ju +zd}nCrC%31cj{l0#ZW7o1+wiEKFSqpZeEV;+xvV4D8<^+((f=YF_uBN|*O`mUADFtF +zi0Ld`a5`-}*X?J*Q}qx1J5aXVX1dVJ%eVPVel?bS>8c7<67&>ivru>|*6DOB@S+3v +zzbiYZM4yd5_GI0Xrt~Ryn;rG*p9g(3s{5X1%o^P$!!(B_!u{Fo{LU-Rdy +z%};2z&JmlL5T@89naF&mB5tDKWgYK7jgg@pr&j2%HFJBbT~IpvzJk@I#JRoItLk$W +z2Tk$S?sjhc^kwqrJb8w&3mbU*em}4TcHuW4R-79n7*Ex6{ +z^XaIy-RIIz<{j~Uw71^m{O+$yt}9g?Ua^()%HD3B;N?}feodbiSiYL=(H9Rcmdj6H +z9J%~owRFz5*^k;YbPH>oay%0QElM7RM{jLdUC-vXTGy`2x4K_g{8xtmY4i4i53e~A +zKiVA#)cm$M^VR;4mH!uN+p6%0PHPPH&o9_o*q_2S<7c$MerF2>vmhVncj->%zf#HmP0y7a~b_Mfg=W^_iYFZEK?I;Q#Cn^zyW +zsJ^z{Fkzt(-Ma@j06XKL()MO8e8taExYm^$inPjBv)`q9(H{6M#P +z_Y2ON|8w15nf&W`X!5TpV4kbUg$bYT*}G=Ni%oK|WOro@`h832M%Nk37fh-Nw*>xs +zy*?%5bk0nXrLR(L{@rCW*Z=7|8_r$MxaQ4my>*K%vO%!cULrjH~pfszO0o0hO)hNYkys9b~q5(xc;t{b;AA73$d#{JGs@p +zTB)-wo#m-x{mCgyAC#{axh +zsnVT^tbPe^cUD?ozxZbH2A1BCUPD=}B!l`UP0`!AE1TWtGhEv6h;ioeX;+`8O$&K@ +zy-Pp(OOLTt`_p^PXRHGgo}X6I%U;V~CorL9w(ZrQK9|f-xlcPEz$h%SxHDeUE^?*# +zJND<*i~RoAE_6-G-Tiyfr?~~kemJr(EB&}}Nd(`;q_zvs(w>SPYus4e{)-xO=S +zJ@ef*&Rb>9ZdO_c|AZd#6r0AUV9+1CDScr;+#X3UCAac=m%zuHtKy71*d>jg-YK;W +ztXuO{li%yE`TD$PyPoZSh8m;I8U`Z>VEcEZ&kT~*><&KpEBzBxdqKQPH&ETa^

+zwlL{=(XDPv6<5fg_Ndp;4ZCRi@RWF#?K}NvB9A-Hc5G<=?z_9}(eLgw_pr)JCRg*8 +zkj=46bl)x3|5x^Ki_X-{} +zDQ?565c754dIhG+v)@o+b}l(1{<`H`eOF2Ng#vA!-KtwH5{p+jD|wWCO8vWq|6&s3 +zk{Yeg_r+Q6Sk6khaZ4_2#k_TE{%1FST97_x-Z7E8Hc}1CIxnkp|4QLWda!u$@^9R4 +zt;Al}OkVwmJ@`wu;!N2|O^Q#7N@Nv2zgIR>VO`8@pjWuc=;Wu$1!pSuXx5$x)HN(f +zG&il^^s4yebdxEj*UmbbOe;V5>Ub>cchv(~sv#VYyeCCn*c!i0vP!aOLRZxLSK(^v +zFA`q=aNf}?dTZ-q+27h(4u_e16OO)~cK=ZGI%mP7zWX*Ws0ion&j0;!p?8(?yc2~w +z*I&Gm)i}IW{6fmEPp958J5Tr;b^K~*j<=y`c*KdK>gV+@Hk?iOKC^Frx092Sz@~cN +zaxKO!54Jp7o|selZgpPfQjq2~DH%(#OC?@L^An^ZNz;|_qo8E3qCcnJY(%jTx +z<=dlgarl@n`>74xpJO)6xqQ=c=94}8|7OKU#Y(?2=eFANC+(o`#?{s +zH~szW8|zb69~RTRcCLQq#<1PSjp->{9>NEBxX%eX*b5B$0Va +zK{Pk&b^V)&B~!y4SN7cS+YlcoR{A3KK!pBj3Bh!+3)V{2n|ZUNFFIt1tvDn$W7)}u +zuYz0e$Gz^Zx@&jNpTkRiQ@GcP)RI+ND&nX05_hG1yquaaxiaL_n~bf8>n&$#hTn;{ +z+K}t@&~Ne5OJ7qf;?9XlO;GxyncDgH&hz6FFI{}!DE3k2MD`!PhLa){T$6T8OPgpC +zFZNLFUKd^TU>7T2~F!doBv?7PKqakEX$ +z-^p)8CK_;D4;6C_^6U5|#Pe-Qyw|4s4wEZ=@pszf1ldwf7#a}Y}hV3E#`f) +zg09MPrCk9B9TKNLw~{`v>_k`jngbh;AN^pQvgyY6oFxf0Yb$qHcDMeroz(u4MReiU +zn17t7PO)Zb+>M)l(L9aiptsuVO=neoRM;58PM>1lywOw9Zv{)}(u?7qqWX{SZdVYO +zcd5_Zrt>q@X%9zyk>{IJ2lgCWHtWO@!aVbpYq(zsQ(>$-*@8@odEd-OD7g?E1ATs +zvRr_zirFfcBhlQ<;dl0byX7(YJ3=S)UY)yYhL{@gd>spD*h +zut`6ct;t_s{62Z|g*RJ&SwDOfCv`2L?Mq(46V?KK$9E_9&E0wD-lNI&=RXE-sM##d +z+BsiVPJQRpSv9wXGV_;S*f(PtV{-a|Lk2qko;t6ej93vhRQQviXQOn^fxV +zKh4RyI(s@z_I}!BDca+xXqNl+`I|iF!sMiz33;>Z!^Ml9J?k%Dc|gpw`lx}T(iPr- +zX3zVl6Q{m%5_ehc{YBBF#W;ClLCUm5J+;6^!8N@sTCbjPE7|_C@vyYe-2C!e$}_`* +V{M9ECTbEAFInGnxB(k`Z5db@_kMsZl + +delta 143922 +zcmbRIob%i>&JFME>)+gEeAQebru|^uG2W!p9kHD`dh?I$Yt8;N-FVRncf*d#Wh+f~ +zRL=To&b#-B;2DF%Jkr9UjIoSyjO+U3>w6O74!8-QFiGY3RJCTRm3rSitBmFp-lhdx +zH!S{{z5JM*A^*jYb*|pRrHxW7QKvr%rPyxi +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 +zgtBLcA8viqCGw=Q6TKy` +zYu?mGSYL>f-L0bhxcrGS_mqfIW4TlHf0#7pH_!X>Aiy&>@0sR(B@c0K-AT;JDeKUUK2Ukp0p{}FL_$iS%I#b`Vrp`_3ldi{eng6QL(ZukD#vDqwtPJQJddc +z+0We2u;zOAkzYbQY3BkzF+TedqI05~ugUPyoC4j{^HU<5>t0QrYo6mXHQh70EW+kr +z+wD&uOJYKls^=cx&fG2iyLqnb9E1A#x$P#}S|RMbyBDo8I{E#Box@MQCewuG@_Ely +zCQplhxbxtqzT1;;Stu_)aQ8;Y%t;H5P3|r-i*Oe8dn +zm+&r-Fnc{=!L6|4myF*0VPdfEd(-kXIBt{Ko?klt_G_kB{LKu@2%d1Ku=%*t`hacI +z%IjZM)^H20Zu@lITrP+zzot?k)c}$AU3?{v5j&`vy5bt#VJ1y@%gVzRS+O +z-|t +z6w1)}7~1)%;j^9PR#pp@OE;Mrv_qdWulTmivg`Ka{npFgtmw7+dvp2{$xize?XAb! +zckwKEs>k&<{*dofZKDYR?Z)bjKl~QXEYqkl&ROPg+()RiA$Q%BbkWL*OLQ{7ZnXO~ +zVn=wwKns9smDY`tURE_#@jZ6z}n@na<4p_PEyXRvw-Esh1voP%+?SyBoIf +z_47>=BK{~yUOM{AWR=xFL9HpNcJpigXEOcvk#aoNcW$ai#w?eQduOLx>Uwir|8lKj +zHCsyPVS!_8{P|ADF8^XM<+^b0)R~xPk{W+S{>CTyPcdEA5pzh_OrYK%v0*NcRg_Ri +zt#`jAe{=bH-8NOr>6^`Op6YPg-=B6ssI7ocNpx;w!}FbT)~>r`IOi9c?yxI;Ig#5? +zjMFL3EA~0>p@ZF8)516osJhHKueIo#YAc^h# +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 +zT_o(5tJZ6)`c_jfS>@(c?e!NQxV?LF +zt4@&5(sbj@rT1B{@SQXD>JA7~{d~S+`)UG0C|F5hl{b!PiGL!~vNsOwQ&m6B-b|tk +zw0dSOe#&!u&eUJt#-ArITb|eS`F&2wl^Z{bZf`t!&x_S8u5tZ=W}}e8R%_GAzueWd +z<-+n0$yF?gHhfyW*pgvym)Wi^cIDt#Pcpt}^xOEjDtun7s6R8mn{|o8(O=(e0vy)v +z(iNx=C_i{-@;2GGy{kG7DlT2pc;SLfPEb|5(*7w)i>BGWyXg=nb~&+q+a}E$@^4%o +z8$35Y<-}$V)IWO_7?51~$^^S%@ +zuULwV8UJ$~@7w4a_xYjOImx)g3f>=cKJ@DJ8ooR2a&pB4ZVo|f=bPcbnD#x3mkGS9 +zT4u5Q<=3SeCz2*s)Svw}ktwE4Yr~dB-d0XK+$Yc3X}CQ~?&SQvZE^WiiW)tco@}4A +zVgB*1v~}rUq@7Ic(?d4qzn%7hSFU(Nl44jV!|%T1%UAKY+^BvNKFfvS5|ia5hs-Y_ +z|E_GP6J;zCA#psxqsi;Gjn`VE$>i1eccoW0Av%XtzS1+is{#U!(H`U!Wqc7p}oR;XDr7{U$V|CB` +ziu+-CFoIXUCQ~v-Gt+uaudHmwy!z=pj)!~WOUmD5?7lLuc)D278tEIUtM+Q;G>h)_ +zSvy1L9NV?j&MyrIm(0D`Fh~6QPqSxBx1D9RA4>Ff!ab@0j56Bh$EsPmQ8ozEzn5X9qFIB^q8{i{nW{!EY)ZcX^P_2&a#V}(|u +z$ddM)KBhwX=O>n2dl{OfQe?|aKr{RIh%iV*YHS!Wy4m +zZiV(OTZ+UpXB?kK~ufY +z#M~{I8N$0jWX?&4eRGGH`qRpyW`D$ +z`*NaCefm?k +zZrvrZmNRq0zN9ycTrMX(-s)P+TA%FT%+zphd&GXhs|Po^$&2;wtDB%v89$rVR=s7t +zy-5ic~;dgWs)m=?pe?`hdK0JpvbAuS@i%6&CW^V3;sMS9OUcDdr%Q+p39?ZykNZ}na^&6T(=C(_n#_-3u5n7%aQ +zdgeR3=4OfZyueSPBfAiq_#!NT!|2@*z +zJ{X7e1)V?r;HI|ZN5{KuesdRea%9%b9Y!V+*;6Gx6#>B%(MOwKhyj-kqVb1b*3C>)RvQ8eIRQ^*t|)y0jf8vf_|&- +zuy@)Sohub<$!lz)uuxLuuA9ozmy32hI=MOE{ysH>kA@FaLR|!z;!-(9ObS@0{5WH& +z{NQ@vnfODl*XouF&6uR@YtJ!jo$2yNtKD`fZmajb>)y1t?DT1a#}Bg242l<2*PmgW +z@YSfF^~8#{tNT};{dQ0P<%2urH9NoPU6C%oYp>B2u=DqOla0*#BQ=lZ2*l~EWoxQ^ +z`MJgaMiq0<)j|j5UXDPsz^j~Dy{_8Z{^u`Dn`7F!FLqi)UdN?ej-`#O*f?!kECaSB|NXH{JgK1}@k=;k#ZA6Gm(7za-2^|GY&knuX3v_= +z6^y?<9-WIg|0Cd~fz$FJhKb*-!{iiCxvjLiZxi(3bJ(o5il6)EUa;cQdH=LP`)b9n +zpKDqLKi40v&{5mLf$M`^GuUUEx8}eWLI@1%lbUYiah7-Qr~R-dd=BA?>+bNPEoSu +zzQ7Wa|M|fqlZof=temlNjr=sr;3M7DzvoE2@KY9l48GEbVx@L8V6gG-8r +zw@y_wR&<~8f1Ufeqwt^OpM>LQCPo~8dywfX$Ay~625Aes9`+fE +zF7F?;Y0bVR>%`C8`>eM2>CvOp#HGBAw~P23i11*`jxr7Xxc7^Jd}Q!cX%OmaGpuJujlf +z`csxh@Uv}kKk7~LXFvL|{#@Rv;5YIwmhZ0TO!+7uEWOI_=SLZJ?LA5h(`#}9nU}vf +z_i2i>nbJa`(^nRBr1pJkT|Z4{YqznCQ^}{-Yc~oy)SUU-meA((EU4i6YypknZ)O5D +z)3?>k@VKk2%WEHc-(H?!N2%z`8NUrf-^ZWqIrpdE$g1$ss&1pd$IO-sxpb2Ct1Y*q +z+BH*@zy5gYbw>Z+wA236xYu<>FOj(Y@1e{u)70o`XT5npELP48n|fmRr<7%ndVMGT +z`|ahtFjHG+$-Z0zjyH2?T7YPizU2uY!Iw@Fh92Hx$E?nL)8i)J5%4|Ko5S_M!|&CCIlo@%zju3`Iu&9z125X;lnzZN#R$@MuF>#WqQ +zUL>6{2$DNw?I6!Aa7+D&Ro9Y2tq@z;&c=YllakrrO#jv!ytzC5v6hgX9pfBlu37(s +zH5zPBb1Zg`{yE|A?3wR_7FW;yHZg3<3)k4Wteunf<0^j!O?Y(sn#1Kk|8E7bw7GKH#qd-_GaNL +zr{5ZGn49xgu7kC%Vsq%G8;U*-*QD;Hl>grL>c*iNzW38j-^Tpf*sL~ZxhhfA+WO*%Tkfk9Z$W0}xiZ)Wo=hqO1YNMbuEG&L>B|MT^YTf#Jz +zORrU|n>DqlWPiiiN3UxNSMFW7@$rS(Vu_VJCATFvWUtjY;fi6Rbg>f +z+0rT+FB+% +z$LD<%Sd=K9&&5-C|Nb-K((=SvUtPR+Wjx@uYN}lkll4yRl6I=Fk?pdc2D(7vW@B8A-BGm`|8dzEohoNW3{^WZ#Id!0=JiX +zN;Kq1xt#i|`1E0+)Y6%(pB#RMH1zb{mp3ipY&K7|4p@<_`IDJj<5s=C=EUEd7O;wO +zo?v2N-SFh%y1Xb=<2wEML3=80G=#ToS=Q^mAm#DF#uIYC#hed*ec9~4e@3>Ryy4Gj +z_udpOoe|1;*{z4`i*8sF4DC}l9bgfeA#!ZaXWL24S0}b_kYK)cu5DeIRP-JrKGD9#&MziZ +zpPR8(^8EUc`u`IiJXz{pwnk@f;*xJ$tA$vmoHXoOSyFUkQb|J1JZ{mgu_kTWD>?LD +z)r*`w$x(N{XHCFODecKSgC|UtRI<*-M{@^-hEZhDfwC;xq4>Gc1z +z=`{8J4%;UsH7UzdpZqw&bG>`-iTJ0lChsY3kL_@r`}|6S*y*EdtJYXH%{s6h +z*qo~?9Bu2KW_G=j7nZsf`lHA%KC|uFwRiUQ?3;}oB=Uql?>v_}an3y-&MTh+AAhyI +zcXYY@k@*g@wYO}pUo8IeC*yt{hrR!VBDi#oMc23p3%mO;4UJS++!KW#Hqlkz1E8v9PZf*`<)8{QPu9 +zbj_z_^BPtpFRsampK-X!XV;TA*%=}n|BLoMkYSN5<5*;=y1aRZ=>a8);|nxTR6KT4 +z`*i6-VAv{&L+plI%nyWfg#6l8wsls^JU0>X$IP{dW*lGe+hW!G75m;k?TU!m+BaJ% +z(^n)XDdKoU;mc+w*(HmPSWC`YXI)=7!R+9^K2hsZy>FUbUqP4Eu!^%E{81lt1-7Sf|pLXu1=T*H8 +z)&X8yI+Roo$nWK?kz#cBe0wFr?dnC2iLST&D|zcf6qnjL$N$f4ciOgtY2(p?_1ag? +z&SRYvy2?J`^2_B)e!o)x$%Y>6mOQc9ZnLR-NJNoy;@&6KYkig7`qLMD(lK8acF#@i +z&#i;Y!mmBGkJ~FX!Tp8wQ|={fDqG8#nD=`94=Qrl@O)51xueVI)34>#G`}H&C4VGqW<@8f7Oqsjb;lS;WaZaJD +zRJe80H+UWSU? +zX%@RYI?GWrCFkj{lDjRRtR?Qq@V-8_#OkfU=@-``r^j!85yswCS^p!_hUc%1aI5J5 +z;$rVfvjr}&2&`XzTHRLQ)3O6svOH#`nC^|gKAFu@!M3OER%JxYPSb!*5)=AZ8)h)y +z2;^{{vh(1C*vK7+Z8W}_d91i`uIb*5-yP?tePN5d9sBLIMD}AZGm(nmw4}t@t;e^{ +zJ9S{{ly{0PsZT$rG}iUpIeO({eTAUjt4nUN3m30B`}F)QKJV0H)*75$Gn&s&v-`4t +z;;jR7cz2!g(3&^7`?8HgPeM`&qwUPttFzQ(4=>=UD7{nObcTa{{&(g|9Wje8d0QzB +zt!?q5YJ7V?e7GOIZJlMs(@CrNZ=PA>;(m`UXlhk>?+5lb@zWD@8l0Ra#Qu4ee7LH< +zk>LR2g{^KeOQ$9sy&rQa!sgd=WinTvN~a$TGo2>#9Bt{r_Wz3yzs>=>#*Uh +z)z^0M=w!~zsHjgV|72#mb*j3k$OHMh8&Qf9>=Cw~U&d!l>7MOsW%T*!t5Yc&QAa9X +zw3x+SzQDO*MRn7H-R^-r*CnnA$XCAGdM0+t1CCXZ8-4~Z`8cirbkwAOy7zcpbwgdV +zZ`ZD1d%4utVYY(3HRIhI2hT0`soVN>`;@q4CoJxY9$Rg_^Mt{HGxe7OmDY*`{W2Cx +z7rH7Yy*gcaBSTGo!CU9cCtTt>u1Rc&wy$!H-}V1e)3pEbA-*iFIxLQB|--`$Oi4nH>Ey1%vZY&x_5*RTi0nN7MRP$JLVhJ}r*U1_Pl_4wt5Udu-+JG$Fk~>9bEw_0=PFeA)5_ +ztxtDvNxUR^RDHq8bfe@&b5oz}O7Be*g8b +zd99o*vTU*cRCx}?BqSCX7k=1rdbh=j06~A5Qs2i(B6r-rUJ*?(UYS$6){iIUlS%i| +zcuArB_3x|{w=geUrFQweY~I}Gs)d^;?U)x?pV;*=YGd+Joy1ob8>A{XeF`Z!R9r0A +zn7p2yUxnpkp~WKZo!6ghCKPYlTr93|^guLk +zePpHMuV#@zc7o-tBT5Xt4 +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 +zg#Y5lGj)3;tsMC4gsmQ2*v7K)ShhopToOqLy +zaGJ;a&}QpNYkmiYI*VEAh-m)!^&=?2L{|5W4QE$G#l@VO#mn-KMHvM-AI!Pdzg_OL +z)#`-C#Y>osm)A}73C{@;_|6r*t8`(pZrhb7rKj@Gd-80RyL-b+NXJwl<&Crz;)tKcwEw +zo2j91xG~|bpLpH!TRJV@XZR<&_Q-x)-_vi;owe@KAA6SKO&K@OUaNX?cHeZ*8D16P +za;*w$ysQgu$JqTSI&|a9jP9sCoztWjS9_ao6mLFu()8G&AD>uK!%U?ZU)t{cnw{ad +z%cJe{f`&Cr^~I}_cPMxFo_XqTIA3bX^c@nF!M0bQ>xS@Y_uM_6sjPZu#yZA=?!$}X +zviuU&FZIs#Fk5EmyhiD=sB(YHw+%;^r|dp+^zEffwe8<`Z+arpozXS3G~r79t~5c* +zFhS4z$xn7qjG6T_DEu$>tyrQkEZ>+#rW==aOb3cbBIq-tL}pW|>`- +z{k6LPzs`JqD`D@fH*KLrS}WsI?tpN8?+LXP`z-7t-p{o8)>+ZM{b^)Zr|Mim1u8IA<3#*?!ZrxPcIr+hpo5klcj&M2VZ<#-D +z$(M6q8d)lKIyyE^fA9CP^lD=5v}M@=_jk-+ywZN+ii6tIPaAJOBmMZYwU~ypsoCw! +z1Azvc-|Mlr+_q3Sv0rFW)GYIi?&4p{q3<;m7JbJ^M{7I-N--@?y@j+C8iW57Tcwjd|yl +zW-FA&z>qSzsXjxgiz$u$@2WkPZo+S$-dnhSQ?NyS7hfMEwVFkIi239>^k|+rPcet*B%h4zccHpkA(C4>HeC{ +zOw!R|Y8$RzW9hDXKGV6xPUTR*?9||S|AN(1RkwEDFIXcyK{+%|TD)=7wW-yaHff^e +zci-^p_=_9qJwQ`>+Ac0!X4XO +zuI&z4rs3tZbUEjRM;jG?+q_z%%v$o$Uq*vd>OlE{#7B3W(=JDRx@{(^cxv^-6|$9W +zq0OvQ^%viD{`Jo@cy46!1>N*@x4wtxUb!x*a(Pc1^XD$sP9aOS&2AT^ZtW^MU;koH +z=%=ZZw_ebS6#jiMaGu|X&&*N2eP1?p#^q`8+l$rjTOnd-(KfTjLu7?p%lX%{vjx9h +zSa(b;*Q_#2fq|_saoy}djg1`4=`z`yH9sxAURBt6o+&WlN!jv=3!g}^G`>8ve&s6;*g^eP1r8X7mE;*}~;* +zMfXFqxt=MtE?97}ejk@;(f5~DcA4SU4+1hS+?H5c`8n{P!>ohfepux(KhaWr-6tQr +zwc^s3^9}W%uYUW+7m;1Mp~W&~Yss_1yyU&irF(oFCtff6_4Z_T;>R~a)9e>({L*{= +zX*Qd|&o^D4_%E;Dxg-Dj#zV{TT_BxW@zraaQ1P%#I(tm*11n>;?Vxn +zcP0EptU%M&7OrTsu*LH2wn;+iyNweMDa}b|Dm^8AbWi)|Nvq}WwMs23oG|(H#vjXf +z%qbSkOFL9^Hg|qfT&dzphWQ`%JXQRzp1sX<@?3u2*E{!=tDF`*H&I)-Z$0+J%~!W2u70X_7TYrAUB{a2kbta>FRnSSuubePy}f_E@uc#439GE| +z?HRF8_T=OTO52FPe%O~YyRUar(~S3;D#yjGwu+W+nH@Eyn|n=nwi=U|xnbHlrXMcq()G)y +zAKP={?xL3kThmH^JnvU~6U1Ly@^Zz@8Im`<*Kaks|F-y6XY$wlQxkkmJZ8VSv1;No +z!LabvM?|BiuobObD|Np7YpVPL>DZ6Y(mDl9*c$}QHZ9q^Z)vUkCwKW2$E!1?sxC$+ +z7rv9;up!g;?@q2*vAlQFoOh>rUT@;n*?Vu(i~8>MoQp1=>0jgVJ^aV!kchpe3zjoj +zTsyaag8X^O=BK&QhC3?u%(}wIuX!Tk>urt_@%BltWAEwd-1>2^X?=G1l9wG0EQq<;e)|I#U0S_l=Hg`6+VA{YG86as=3lvRuPJzfg?N39 +zK+MZ$8fUiLtZ%Z_-goTiloYvpExX+{Wkmj8Wfxp@{gm*XH@a~fPhDL4_-gY0Q%YQJ +zKNsz|Ah6~5Ha!VF)=-s%Xt9XN3nqWNbF2AKghJ##(>Ij|7VUh$v+l{~m)v>54^uOu +zw41m@)PoGZ+`F88zn*2z&%bP2#;~`-gRyO603U?dF)-P9AmitZCcFfRy*&VJ(GPSIej`hr+&H4l$CW-Xy;_k +z+2tJ))eW@dXHGuBc`ozYr0a2!XFVj7@;`k% +z;eR4y2P;qD5{tA`-?Z+(cw(ebsrqD1T=?>y#cesOI@CJ3{T`i+I@EgVJ%jPzxiZl~ +zCuDSQ3l&yRs-9A`J^1|BnT`vz(>S*FzI?t&SY?s@#!@kf8990D6x#|GuX^FXNVvX? +zC1Kkff1`gniELda9j+(%PORek6?B`)DWEsojbrKK{>k&_=zj{kXEJNYvqUbp?=L>h +zmfv$a(C^k9ut31EI(-d@;SW0J#@7Q|gv1-)TLyJS_ +zACK<5u~GGpO8fE)U6X>B%sBDnPVXDmXnU3)TJ3Jiy<%ZwyO-(lI +z-^q16+(D`IX2tUKc9+&?v!1xj-Dq1Ik;_sgeSBGYjSF*`So+OR`+5JoXpjxe_@y+Z +zS~cot@|x&RDc+6Ia~QH8x?37X)F<+CcXS@UWVWIF4!`S(V+)Rd3Oll@Ecy1VAEB${ +zW*q$QkeAn9UwLo0qQHd+)|Zn@VxzR?|YtlILj;jrOTG!t8Gh`P7&NxC!Dm2 +zMf}B5N9#}3tOd@CD|dYU*LAu0j^(jrf8h@w58qrwgZRuc<2z`4VHP~N9Ex%I6 +zfuhqdgQl%Ka`k(5?Sz=_oO{@C|oWr-DM+zK}ZTO|inbSb}V!%IBnSlZU^D&guX(_gIb9B`8Rh1myjKh|a4 +zYZm^r_^;UE6O`&dQ^@FNzM|J;=XVPf`1UV*S1Z-MAv#lruXd5qMcvA@$@ZLX5J}& +zQ99u5MZe>3bsq2hKY4S{H@gWpcE6h7^J2;0U8c&XPrR*PdAFq`e!ZYkxb%L>6|);Q +zPkEWE+`U8~Sms_-&+hldldj$pg9o#4}9UeQWkAfuabAoQ0BI= +zTh*$Ft64MeKl}WZd)>kL^P^Y2G&-`t^JD*q$WP3EAI$Em&J9h9deZW2?E`QzZ;)eAT1mRsDpc&tg^@$!z&NB5U7wTXL0mINQo>5Dq-zv%3zdGlOu3QxFk +z)ZyaFu%`Bz3EopOw?<6$)%YH=jEnhmeQ{IVn)S~vS6T5sdhti1|Jc8<%S{}wYbrb% +zs@5L!wt4R-k(4asI9Wz~`SO+K9CPFslwH(YGS#3l^2&z!hAf6AGPP-S%yRDHj9%`) +zbbhudo$PqP^!z!)W6Q+VGyGar#IE^o{_-fApII|u5yQOoS)mde>`%>0I^3z9k-_&^ +zF}!{^>rKsR!Nu!VNBb+5$fU;_r`^yf<;$*cPx6?i@@iYyqaz3QW_>vol;d>1M}#Z4 +z<%n?tirf;}5rj +zEm0GBe;ha5^;WF3k;^IV9H+W1!-K`n4eO^lM+a?rUGHtfc0y5+v6yk%6OH;K3El_Z +zZ{*C~e)s-=o>sjk1d>Q;2=fjL^)R_^ke +zpFFfy3N+QE-F+BS!|b%F%Wg)$=#Ad1S!Xs?Xg{~ +z&tu%b>f!3QUiUi=9Vm9);%B2B@uv8bXGi+~W}#S@THfloboCj=yRN%F3VtWG@!nf~ +z<;>`|MZTfCf)?1ZeKrW{=zYWWA%2PQo0qE1abFxY^ie3F9m08%O>$IV7)6DLr{2*in6JzP_D( +zZ~xLOvVb8m24v}>ax?`sQu+51#-nOvu*3>64nQ;zRrx@K;w%Pgd +z0{@OT?K(VH6S)$n*Z=IYUUtjojE>e()+7Jybjw>TOv7H(Upaap;nws&SJ;ITR$p8a +zc~QgBkW1;~hv0uD?G@gWcdIoWeE76OYT@kcr*gKt?LQkmDtl#ApZOuSGV!XD!8iW( +z=l;C>w!>wkB?sS?3(jY+);`lckdl&r=GBT<=4UoVOc#CN!DnA;`*-G-`j<-_y%?W4 +zOwxT&{9;*Dp0k&0;9ftmN15hpx@)2xbQgJ*bj!aKkr$|VrOL6lNb1}7lKAUv4)Z%# +z@LdSM^rz|0yt=?j%e)1T4o9k-l`|>lSvbRN@w)tt*IoLqL>%LOw~kFls3mRh?Z;R5 +zXeH0w;X3oZ{T;pEq3+2K%c^fX@Hy1`^R(TH&8pR&0>+O#ujen`E3-_-5nQ;H> +zG@Io|o~PS?TJhvs`m~(AOh0mR6~D_K6Vck;Z6e8kw8iu2&iu=X=PPe8=I&aRDwmos +zo+dnR`h&Np1oWot4P{-wRw@19+%SpOs8g@@1jNP(&NpDvp8QJD$J3_&uiE<>J>QJ@ +zta^dquCphWP6~XJyGvvCO~%P9t}VLilmFq*t&F?OpQ~ivE{_P`zN}%#(MB2X&^-OU +zIqM{O1^92uN{W`1F8?jJf6_Zc-Nk&T1g}@+rM)_1k=?oQW2?cc&R&h#iofk|Bqz;Q +zz4d=@?!EBFJ11s(3!geHUhsp*-k@d4`gfj(?=G2>QGe`TjI7W+vvu3{PBc$kd}$re +z>!ZDnhMqF~w>#oO8Sk069ex>DwzYC{?ynptr&VmF>V>b^m=wkL2VLi#m0PeeHR;mq +z-k`#=p1Z#kEq;o;_;f75^wysL8b2<2KPzVr=$pJxc+K=Me}{(x3)@Tzy~OIum^@9E +z?4G_bgTqQiiOZ(`BwumI`bg!zWe(x{2xh57k_^>c{TycR1`LY7+=C!YiBjeRync5aVwou)2gG)2o{%VBPYX-4gmJ;H2}3lJ87P!X?L_CD!|$-=`%Ok*QvPu1J4fdFrvuQ%@NeO7#Y1 +z9Y67Jku{IM_<`+L7gipU{xM&z)_c?YcQd9P5a@R(vu6;wG4Dlq!l%|9Z@bsI`D-x)&ic+LlU{jWf3~dprS`|{s*j?-#%XTceyCqLXVKPWLKTej^o%kRmw7l9?>Tqm +z{qe#GarWYqPGy#__I?S}FI74_eP*xj#$&AC`IOl@ni&20AAFNPcP&du=w`Kkx=j77 +zx4(HhH$P*niD`3bTX%A&&AykssZR^NGY(CAxx70vTxXtBvDS2+SI1JcjT0Bup6zjy +z{IkLFH3og0% +z*5}RqzVC8IRMpl?MkY-T#V;$LRvv1b>>c6pv%WO^*u57l(Nl}}+rKb3n{1_VEA}ea +zB8NW`31>}L%}P{06c)T+XLfP1WP9$F>tD|wz0$JdLYK{&Z(J{z+edi%9>c63TogAOAy$ZSMH{G@3L0q6%r<$dd;-b~A&-Xai +z*PpK|krscgdCgq$18Z$Vk2kLk!))sk{^V7cg1Q#SW^6QAyVk3*E~G$|t@4VAx3ly? +zGf_w3dX3bySD!yc>3Ljk`k~wu_2@d6HIy`O4J>@5=2D8d7&t^Zg@;YR)N>ONWrrZ}xgWLwrg8~BI-G$pi7TjVMc$Lg$ +znD+3(lpfPzsqTP{Sw-tMS +z986kKFePvD9EFR2%w8{AY*6!Lg;L%0V17w=<*2C*m-k2{#rpG@B(AA{*T|c5zW$f* +z`=|wfj#?Ohj#k@$X +zDK+-{3=emo^;6<7ZPZw_bf($S<8f+I7cIYjmb~M0qHT}YgNAQcG|Rf~?qKGhVyLsM +zFzX=qpA5l>e!EKN;^S9}pB$dRU%aWjzUuJ%9V!yDN^39p-TBGI@#+in%Z^)&_Z;Qw +zzcktJIy?VzeEGXSAODvn`(}!Gtm;f>WM3UO#pn!wgx2Q5sRHY+tkGLz+&HOGIc3G> +zyuv46Hd}W;@OZGEzwa(j%>2g^@9kIi`55&-&;!U(w@tXFqQi>3Hw8uxjS*vX-vX*|Moqe`n3C +zS$OA};R|Vjt$_>$l9eaT&5F9_cxV2o^VGQ7a`U0@t%Ljl$|au;P5NZa})-os7UYZvad+E#)1@|s*rI(Ejdm6VJ$X&i%&7rEvApJaw$#tvWx7|lf +z%F8Rn{k`~tf)}TLu5UWZ{zx_Gm~Fb$>^Gv46AHiSY`!sJeyRP<=GXU|qEGY7zP=Lv +zCGZqelljzI*bF`wHxu1@2DqzVJvRKa#(w>1M<1 +z`zIege8`}fu>F_Xgjd_%YHWS{x?^Jfj7gK!?>D9vwHisY_fCj6`(WFdbBbwYWZzt6 +zLA{-Uhl8$Nn^APaOnGxj_pE&)2Y$0@3S83NbGu)=>5jRE=oFD~#m2@Y#@PpQ9aO(L +zU#R~5rAg$sY(u;zOIO_!6Cq98KZ`C!G;h6hVZ{QQPqxv;UDK83zFKZ>$Z78Q%<{Zo +zaQ)@`g^Y!c)8e*;t$4w8{``NrPa8K?HE-3(Rdo8e(1UT^4!@-u;_gpkE;Btm{Q4^U +znGA#3b@Sy9=QiFaY +ziIcreo;S}1Ulf_NQv7h{lJ9BhWhpMXK!+; +z{%=5s>o4O93(%zJqGxU9(6!mWy#=Xqx2bcrPkToC=d{$5Ad86J7N +zX$CU{!nGpVgrWuOCw%(%lVyd;68l3NZOWTCYpoWjZ)KczQm4l4;FP7gZ7#7IvyAPU +z5@Jr*XsM_5XsOSiw4u-K%Z2VN@@6{v&-!fpzfc_u)$iSSFU%6Zpmvu;JUU8C-`x`TV7*o!wt=U=ogJMbcE|Ek4&AL|p2+ONS +zE?@DqrEfB;?!4Cw8OIYAYV3EFb5%IjsN}Wb0Aqq>O5S4slRT53q_}kM3^bg?!Tu#_ +zd-*|u?ANP=!fO83x^!;ksrTzXq}ZQQ7yD~*)t~cC>6wu`&ObK3Hgoaol=z-wkF=*Q +z72a*TJ?-Gm7iW^$7Aoz@^0J=L{LS}VckdLoZS|X!HTF0kn=d1(G$rZdUE$8OiK%{* +z%Ma>2c&a!6fSF8`TeJ(88BtQ2+b(+*t<1H4u5654&84$A#_k?}uVVWruW}~td%fF^xn99oTaoO;P1;N55pOgl~%{SR6NA1 +z5qy2U!p8^sdozQkYtP&EE%eo&UIFh1f4{d2?BFCw!SJU$1=H;N78rRgw%{ +zb3Jz6^^MfN!`V3drH}LemwsNSf>(V%6CUeeU8Hio_JB^`-Y;T@K5blnCQoIK@Z{Ws +zlTF^mOw?;q-@j9;bQLRF$B>e?isRxr +z*#sf`2cJ)0t59GLmHc7U!8Nzu`S}csO&xlD2YyeuWE14hTdCA_uTd=S$N}Xe2TyQJ +zUT!aL$rRw%=^L;@f!oj7oVl-7+&nUM0mE}Axyf%oOh4Kz9;30~wOW_fcX^*Q_ap2N +z-m-1pw}^k;J)`1F+kX76ZC{>v@827D_2>WQ?7O?*)ZdfSA7=`5di_1brR37YKe0Z` +zRju)db;qeZ7o)jc4^0#&@o0yZUss>6WP0)Dc}d4m&Z^+e48_YM*)Gp0W{A!5(v-Qecc*@2?^4TBhxe~F^<0~_ +z*3LPx(lKVU(}CNJ3Ia10Y`NFowf*y~~rrp5{GGT1k9`3YxtTe-spN@rw!I{!)-T)Fvu?(wCkxSy`o +zW<2Zh$@PA5nUJl9j86TD`klr;Y)LOv6#_h_G}-(Qm#{dgQ=aVl{h(N-vP50TOXZgQ +zzy0L`-#0#3VYujY%FPx}y~n#kHoU&`)tOVXfH}rtL;v}Q%ic1uY@RoB&1MtswDk{u +zhg-5Y$R2GBGIM@))VjG@ee=uHCLX7)4Kn{|)~sqhb=#CtSL{WeLGte_^&Ia)=B%ro +zva~N$^D3}W@1uN# +zHg`1F-2a@pBp!O#-UA=W=Tevp9Hc#Tt*y{*1K0rx);--I%y7=cej~OA=2G +z7?mn{icBxnvCJzxGu_h1>G6~|c8pG@`L5;HmP?7K*4H?=npbt&tvaE#d1uuOnUjSt +zCW*V{$~9^+Txl=OT*mbM*~7T5|LGYm&cf4Qv}{NZ*t_6>@_UcpEH7_H^-tksS^uUX +z*i}uR{Jx*8GMEKbTAO3dxcI4-3t)ZaVSw>UZa6~n4Db +ze-<9Qmi~C3$qMzqcHw)uOFxtg$rft{P*4GY&CRE+v{6iGplb7 +z>EZd5dcXG-S6}BN55qUICpBbF?zr&h602Rq;rg_kjAL?jH&-rwwIgGB$yVjrIB!Kz +zL4exxLmBR>{vr$J{1D{nisWinD(&^K-E&oY)^3)G#-~s25$O>KxcKDc%Df5c@0Gkb +zcb4-6E4iMmH#vW49^=Y$J4(H*z8^fs*q`Y#FhycZm?*SylLfH +z-|lzE>13kp3%?_?WkcSswp;K!%I?n+jq?WkTKvq_wI}=&3l9_Nm~ec$)76#gQyylo +zT6X$WLdpthFVhhDUEgIhT3@qu7GJxTr8nPUTGPEf%O3CVJGuDCySJGePrBTdD;G>l +z4^Hk4R=<0Bfmz$c&9!a6_7~TCr8A_gK2^zCv16_F@ud%^2X89e%%vOK>bZEkNn^cZ +zcra7^1JTD!E(Q~m?ZTfNp8Zbu2OE#@j<)E<$9_KB#rb9SNT77I|KUxGKq7B#e +ziSMR<@|3AR-~8EnW%P>`n?5^T`@Rz8o&SJ70_6$sxSmC+Ap1htF@Dne~5yZ*YA+d0(?|rtbBL +zO4a_qZ@HF~B{i+hIiDsSE*4giqQ)`(z${Uf@2WDfiSHxK+e>oX3pkg +z&xJi7IAT0kO1d9jwBF-jK{$J3f1n-%M|XI^qm_)OJL;Ncj&9oNq$JXQ%F&WPt|fBA +z-xo(N`=toJW$3NmRTf>(Z)PnqUq0gIox-UX6w||x+`PHZ(%JO0!S5gLB~>kVjRlWB +z^bA)ndG@GPFU62)#ms(Y!^niL^T%|=9aepr(RDLQd-k#p@ytoN(sA*MjMLs8$Pw}G +zULvyN=Jo{7RyVDt?7*6i=Gkl??jJc+F=Okm`8yR=Ek4b8KP}96!K4Y@y7kxd!=@Z~ +zbM5e&xktVPe|svpthPLUTA8I1o9LV7kDpDwzY6AA9?*{$J@WA}N0ifqRLK`_7=F1j +zv`DU%^B29)|4u&t(e|AuqlD`H8KypM4=gZqxT(>9PV({p(y_^-VipuFc9^I@#y%*1A3$jgYhJ3ij}A +z315_`JNNrjo`Q3W-5-`-{xW0c?4EY3=QkkCbm( +zc%604b%<&Hu(AAxXn)+X2^%Ed9y_p9&;PftS@sm|hI=>JzL;e<#vPS^v3G&)n?;)s +zAA6Kkf2DfKgaEeb++VITMcVN1b9LFme)ze;+TgFtL|sZ3Z@(Bc<<*8gVKdK&Jw5eJ +zJK{}*hVtz&C6)%QSF^VsDVn6D#g}R`Q;Ab5GSxv^Md_@Y#T-Va24=}E4#9tYWXcx> +zb$`6QNmk(kubrd9*Ujmdz3*(Z4Q1vyVLH9>(cWW%;tcgI;*wolS^okq&$@PFnnmcP +zjfYn;`+>_+2z3dy_Y +zxjb%8RA=CrVt3!Feb-f!fFs+&ls%4H`WsvkR9tu@L6bS-98dfLmCV1VJPW*Z_M3jL +zKFE^q;p(m>cgp`zeR0qSe$Dr{6dF!?RJdgNo$A%mOjx%mUZ-KF=NH!k%TR48R_8Te +z7yA7>r=QsHYR-7t@={f>$7f$=jtQ7pm;6YYlc*9<)nY&p0swe55 +z=D9b=uI;wYuIeMzqOPjCKJEKF=IpCfw(5#}^6RWBqvXq5s{eGiSM=0-OWtljd&57* +z=5)Zzt?`M=Y(DSVE|`(b7SZ2bFDG(1v+36|@9mgV7QAq&-HFAIHzu*G +zJ}HbS{A_Y?r{U^$3%w0u7A7D5d$RQ>M9RJGU#f7%?$PG&TQv{x9!|Y0zTUvhG^Y01 +zCy80&pL-*}{haz|5#w8B7xUh_zIu&4PY*7+op$q%OZofV(wZ78Pww{8O#9k-!sGM* +z-(q{Wa%fDSet;uCS-|%0M6GR1Pkw7Sp6GBi%lR(1VA{GFCi@SqS-dF9vbnuAR^#xg +zCJsfvImzF`!d5j+mrzrjIl*_&f>X>|(%(MzGp=~}y+Ff7Q~SpLiE9~H<{mS=zxZ9< +zqk63t(*-xzUwQ8JDN{>SaHiUCJqMmc7VR#DbN63fkZ@kGtI|KENZBqS+RausN!O4Ia6nCe(> +zdUd!RFc9tPmOkjs$a?F?oWcpt+oNvmFrN5cTK8jW$=UPGSN=FTsD@rVXt$o{{WbaG +ziG{Bg3GXxE(5j!tAZ@xSLN?Uq{E2=Q{XJIP-?OjO+x2^~W*g33X_3fg+j3~r*9X0i +z`S0DowWs~NeAk(I`;SfypVqy^jd`V;slu6fM~>Tvm+Ca#b(j4j@?7<`e@~&#mA!h= +zkpem!6@LA5I{1{i=YmgPfKR??-BQ=4?>81WMY_E=zh9`K6wsSm-#TIWrA*tcHs0GJ +zehbE2c3ANJvuk?z~iyLh~qXt{JoYlfZhsh{N~f~y+1 +zK29;yWSm!Ys$ip +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 +zOLbhCXV20)65pJ?a2#z +z!(G+}DQ@=iz8iK>$u9F}wu&R`jZlgBI|&ownECGgTDq&@;rm^_4Xa*`~^7Zyt-%1H@Vy%1mA=(1vQfyb@Lpc%)C)|k#N>0M!ax8B|Tq5EIqcT6|R +zIrueg6cstjMFZcmi)U}U@1Zoeao0qN@JXM!m~LDxXuGVd)ldXqH|alQ +zSn=r9qUUEHKQ>@pKVy;TZsy*k`X$=M$I7<;}a$c;%9(o+r1g6|`)B +z6j_n9YG-&iSHyC!_&jP<`omt}q4btlqFsXG4Dsvn#ZH+&cqrG?|#9zNE+ +z*7JrhZraj^+XBRvL?kYK{6OR8rXTxQBYdx^UfwQk`?Jlq@4IyWNuOHdJiiZ)ECx^O +zn^G3-Puafz4nw8l=U!EA!Kr+`mACv1{X(*2r<(b(w5;W77dmYrEM~;@$n8`f)AK}` +zrG5X4cNwjVJYZ+2v?L&YdcfuS)#pU-Wtq)beIj;mO;@B6^OYk!vh(%sH2j?~Q(P%$ +zrFF?_uRHD1uiU+-S6q8DGr3XWu>8f!6(0W|2GmE&ovmIT+-1V!<#2k1^uq3A56<^m +zl)jpLX|j|<=Z)fxE>a)7;~p*%)O;~9VS}zsZt~iC3GqpGXSTR7Z&jJZmA4{F!l2%Y +z?*tTU&(Hh0hNCO!V?H-hFjPgF`^N->=m@3FW0@RJCcL@r4QP0PLd%Q^I`mM&-P +z2tHvx!Mdehee$}HJ#yZ`mk+ZoGjRy@n4#J$-K_G-v#p}5&gG}`yhrsnc`g(zIdQN{ +zvi*47gY~SxS24NoShHmRHE+%X_5ZsYE>yQ`_dNPi*&}*+^V>+PZ^=d7hWFP@5nF!h +z`opU=UQJ0Yr)}?KFzmcmvR1~r_<+uG|4EJlf&IPiW-0elI_h^{T#zTs)RPr0Tg}Ct +zRUsDkZJi?L->DgA*PDrHFsi#w|7W|y`TFFjV;SCxjCmCdSF0XtuL@FlrMSbQ!f?X1n`Lw)RuJ04}%X1wiHl1MqbK5YhH>f6a&rR#G~%l^p< +zOf_G-f-iTmaDr~{%+0d(QD?Saz0K0_eJdB+uHucxOaUquNk2O-weo7az4^Z2(?#6~ +z+qb1$52fN3>2^i^z7W7;xYt_vudMqb*UD!~Ojb_=O$&<>JiKOQJ@s?Fs8KOT@Ws&u +zQchkSJugz?60M%ZFur~H{PP7vPmf7^IUW1#B|5)l-I8CXez#-N@rxI~pRAw2w%e}k +zpy9@^N0cZ`I2DW5G*T?@h8w(Gxe) +zxT;?#r8ZxDnN!uaGl3?@xu3nBcrj>f*z4WLVq)jd +zWE6Sj^T9hpEp4~+$-G%7r$%>s7H=@W^U9;~!~!AKBgS`YPkx%EeDY52&#nD&sfNpH +zS7{rZawt37cs29r7QLT}C2Lt1|2J8foik@!gzluf7cHhNt(WpXv1QHIyseEl=6Ga< +z>HHM2*|xpZUa@Oyt&t&HKuy6@n~)gmhnwYRzgix7fKiNT9^;AU7k*rO`}TGF;<^py +zG14J>O1CAlxh875e0{HZch$pdSr-agBPRx2jQshh<-6R=iSAQd{rJ!s~d +z$nO1W)A=Tt&+N|({dGg`$;Dr@<~@HQlCb)JX@>;skz4ciUIvDAeeKwGCF81Q*c&N^ +zYP&_!m;UYW_$O_*ad*l4`;3(VsqMKB^8Ct;LPJh%mEy8GQ}dHcR))#!O0msGn+vad +za;SFZ!JLA)=jgz|?HlC4PnOgtNwklne4?1$_&MA&1^RsVe6qR)+DpahJ+Q8pF|BAxq +zZ-=Jb&2gKSEaP!9{Q5$dJsGpACktgfdeM7v!nL1!J(@OFT@%$YinDPtx)#D9loh>Q +zZ)(Jz`jZQU7OD!p<@s6OoXR89)xS*h&0T)}wq+d)^@UsRTzepu(Xp|7lE|x?2tG!; +zuT5na*0-55{1$As?dm>q$u*HhGuZLsi-0*@t1G7j^aMVaIabfs(H$M3s3@~*uTsv+ +z$49KJCH`eze=C}HeetW1nyv?FN97c=SDn*4E}kx9-&YS~^6%5!!YoD4Emw#lv1EorTmqh;Fu~m9-=%o6!vY%yVW_mT>y}##__>1qJ +zJtsakulJFyvP_WZ+&VjUTF>>(=j{tuiwE;hun2zXQCGZT`Q;|{-3f9lKYcy7F*0)vtM%6f=DCoV@nD^yE|LbLw4I2WAU2}&mRriEMK@LZg%e<-_&OpcYkvG`qWONcvU@j +zKzvovaal?Am*+E;+~R*8;&IdLy_r1kZi`!M@v2^v*`5)86V)ev$&5|f-^n=lRmA&~ +zdGBq1u6(`kr?ew)x4Ks1zL!pyW^SsPSTX77pFE$2HHwAL{pQwe?Y*H{d)5C@Z~3gf +zuF+eAkFPgb{?4hSq$w>TY#x_y^_H1ZF&n=us1Lq>x${%?q?P;C?@C^K==k^M8`Jcf +zl^P1icc#qzTRiVe)|;OylkMl?3x;KP*-mg&FmZ;PRovViGx&~9OO*dtK?A~!5*r +zVF4QI_aeM?>hE*@KlnmYjzjFjamEdI?lxbX_sztv%hJ_!8Y}l=7LTroCWFrsts3GC +z9{;W!UU6j>n~v%Pi+A?B)+sLJ66>_RV;+8g+gk-Y7Pi!5D)(RQd~)Ktx`w=A=qj;A +zRa&P1N@p!x8DtSMb(3u0l2d*r*Iczfie%im`|qV}_WYDO-tMOQcC*mEPtU8ie4W+u +zBPM3q^beCNHGL-*7BqG5*RX5gF4+|Hr;dN|UH0Go;%&Z*&mZ#qy61;1>+fSl^Oq<6 +zy2e?-a%lIDJ8cGx9XgMr_MG{Ae3Gfrvl&)7(nVLzx5u%E3r;jzGw1rsxW7q)he}0f +zF}ygKHKjVGSo5>7sMhP~mG1STuOC`IIQ4q5ntAzW5Ng`92y1EZWuDS6vXmQFr?n_5S_#fZ&`n2y_zN{y&S9VnMrJF3BjSEz^@_wy1 +zzGx)VaLR1L-p_ds`!f=^Onq&B+bG8nu$%id`aYlOjx{egV`3F9jXUvq_AG;@V*$)?g +z2K~+RRd(+^^Mv90g7-}-bC$E1)HbLWSgHpsULd|?O-;|IHZFN*naqtklm9UEq~_^) +z{|J7gqask5dP2aoAWl-4lSwMYD^kW_-^*|Prff5=ALP&B-CnPFRfkvK`rxr=xi=*2 +zx_V!JHa0Q)mfUi9yM$9kchoO~Y=*X(yJO#m*Ya%n-0Z(~^WB>c$0JsE+fDU36Q=t3 +zi2xQ;r_2AHI7-YXF0m%Qdp#n;Y!A3 +zmXD8Q-O0AF+?c*oUBuJJB5m@s5Wd5o(s#2b*t-2s=9yXJa^A*Akb9@ZXSNjw +z^53*9lh?>)_gu8NZ}Ek-`pK38PqkAXN{14hbL!1+>^)aDUW2DZ{S93D_(DT{@c^?o@sw$9zA?{XyP62Evk7coEES+VGu +z@a05V0sAJqGs4lTx6TE;n#O+Xl>N!OZzrE&{cz*p#H|NYi!W*a_ZRG(InUcn^1tEQ +zMLE6VAL_f0`5$UCZ)SPPn!ByGeMf1}t#BK;-2UwPh>LUcrNky)yUsi1Z9&SPx}2bl +zMw@HBK`vFz+at9#9nv@by)Y~1_DlnFvp;V?I8J(NHs_F~+cVZVQkTuzgmN_MGaBbd +zE9^X%>>FCKV3p7G`64Ezsq-2BuUns`m~rjZ$%QgXr_2=V)0i@+FP^^XRdd5Ww~w~h +zK5jN@>tS7(8eF!x;>`U(+bxl&RLVv6PJ6U<$s(V?|EmkNZ5N$6Aa!h|Ywo;)U(-M2 +z{7A8xop6cug|AVxj@I|yQ+^lRCcOMsf7{bE&A4OLY)SsFe;+dZ6E|uSGu?D$-+}GD +zbLQr;ZawOK`%86NE>lN+$lX^LS4G<;m44nBW^VK3mD>6Klkpq(Us&~P^Y`Pb>^C+Y +zXjfkDy3gUO^ujJZp2be9lS>cpReDw?S6rH0$8`DXzx9!)(yTk*sxA_-jGN}SHt+2I +zoyN2O37Pzed44O_v?=0^gVyxPODjJfIqu5)QT}nesr%j6k6dGKUNxS#Q?ayOTKfE) +z6W^5mAHS@*o`3pu&GDHp>zAjjx7AdPm=MC%xcZV}fuJgre#0B)P!_u=w+9S=U;SGD +zn8ht&$wJm(2h$JbJeRi!xh+(bO4SJ6@p?N~6wgYBeb0~Fvx&W9XBcUHF5un6wwSXk +z_y5nE@UOt;-J1n60t~BCcm6-SCo=G`>$&=$21-d~YX!qU9~SQx{Tu6HZtlKNfpeGN +zl1ItH|1~eGasOL!rp8|1NC2i*yW& +z4G&$7+F^I?`?>8!bp{=i5^LvY>SjLT(^&Rj+wMWct)&ivuTtF=ZrDo*{|Vdv&@$|T +zklk$O`h~kA4kx8tnst6pspHG8Zl&<->_gg*gqM3>ewC-GaO3RfPW5Ju|3z!F1us2* +zJbjMZgY(Hf7ysQmCmr=SM3i+;+#+eS(z_zBZpqv?WqNV;+b;>By10wW6sJXd#WU}E +zw*Jov2@X$-^wnD;@;)R@yz!4;acSI?ZE0F1(*l=0IQmk!UdVOn@^$mgx+mR;=dqOG +za}+c?cO*s1RJW(&wcyoX(+y-dv-x~IS26ph(4vX^4%q6t>KxS6jM$p{zA5wNveV}A +zxhBivPH7&UHgAE=wkJK@mFus)HvhJFyR0zh#{*ucMW_GD)B7fTp}$Z4)z6gKZry61 +z!e7q#S(DSrT`}X$x&FTT_r2oonUhVXeG%cdKO0;bQT*V~$FM!g-&OU)t`vmZ1Q_K_ +zo55WY-8bK(lv}tct$yj*RbIA2uG$}Z{A(Y%I!k6LNjkcI3*%;h-J8p$mU$U=`&tYd_=i9Ms*WYug +z_bu&CY3*Cy)p`4RK%-Y-anYR91(%sP)}1)%v&+V&ST!*&U8eO^cGdsbwRQdeQ~uuG +z=n%l~X*`?p(}H}vbBD?%@JiN+NGRN^ca>MXu3+W2+`P~xUg_`2s<$gwsuw)|Wx029 +z*M$o_b_*Z#HZ^IS`Jn2)!(Df>k>1C-Hny1AbhN2^TK(?vlAXM-1sdJXVsK= +z*^|}nTBXVMYjwJFv*#HzJx=hRXz-hx<9%VOR+@}6$1)8}LMIS2b$iESF1UZF8Nr?t-)0dX-N%KJGi!GUZ{X?V6-FrS^NX!%U6{ +zTljG>>}F5R=!pq0UM?af(|zf2$d3Mh3)X+BQ91BPlrcwGFhZg+AUE)6)#Q6;7Ib@L +z)riddlr0gM-`!Au=zv3zjzsl-M)yrAw{JZUI1^kOVo+PMw;_L1?uD%~d3*Jl=zw_%+FxRJI>7bV1{{2mPKOcI0{d>{xtN$bgju#pY +z3g>prkl8M?=HJPEPx&qdDo=A@+uz_IBeQ&yuYYi(Z1cw5EbkPo#Ow29XWo-)m)-Q_ +z;r`v;z}`!@z1ZP_Q}*?Dp4+{uoP6DKJ( +zPEfIpOSG^w+1uvU!NpuS)9YOln{_t(|LMAscdoiSL|h4UUUX-nexlabU0$u{y0%?# +zUMg^FGaEdBwb4ht1D`E5Y5%ryA0saZg0P1&&%Ja-o@ +zC~6JecI5)YroPEq_qH~CaZVr^h# +zn8(1v!@$76!eqe6z`@$Ut~jylgw986W{qnFD-_(%$9k%<*mYp +zZRgglW0?7Ji?f)ip!M#FA+KX?`1VW+|DQ0AjOgaS9kRV7>6o8u9$S|kLdY_ +z^&A1OtE6<4Ll&jR&b_>SCA+1~^AGO%S3MP1SL;8$wVSWENx=Sr*OB}wGG|47bYoEpc_}RadduDwvJlFNX +zgO^Ppb5G>`$j`Ip$e#;6y8eY%{iWi=0u@O-`nSsK*In3OtSwzJuSWIQ1PlAddzSYv +z%`2YquXx{G$LDs!FBCr+w*H(_Z22mPeW`lRT)9U@-ED{sA*i``6>)hglgYj2o$HWp3Ybm)KJOpD!S2fnV`Q>OJ@VDo;d#_Jb^ +zI(>t5%-JL1d`SNrwI>#g4(=}pQo5p|lp{MS{9UD4C8m21EFyXURPj*c&lg1tGn +zpRQmQIMlzmqEt?C!f=lgqf!>`gEA&NJb3Umr>zgIf7yZrJzm9R~V +zXMcOB%EZ3nshL#G6T!e=nQH%4WM@==l6oFv>*8N!%k)+MRAk~pkDE8&PT~wwtK#N2 +zRpPY{I>h{PYo%#(=m-1xd5m9#t3yL9pXl8>5!&;9pHKS@+i%Rbo#y{!<`WCtU1#>J +zK3UW_;j2XJhLrrr39tSJnm?G=`*QBZ%*qywaBL2Bx;?S}vE7kdS6VJ!<*}|0-tl=c@4Wew +zrI&{5&nP{dkbm0MkD=xzXG23X(~8Fv4!xYf`%zQ)>Hk-r>r&fn4^=Kb@Q9<~sX$V~ +z*UK8mzWk4O%t`z*ztu2ib^d>mpdbIQHgx&^IiocBbLQ*a&3{)OW%FZA*rd;AclA@N +z;2MSpwyT!Cz45PJx-sgwK-Gf9EJq$rVNeU>6!_r2DxII9?(OS#2R+_rciTnyGEO{X +za98}(TXEQ3f@RL06G3Ww7=>3f87QmFN?gjwWSU$ywQr8FY=i9$#uf8cA9|;r_>gS)-`^MPtRgl52oasRCE`$F6PPZ1HkYSu~Mu@@nR(+XyLqe&hZN)PyyeSJQy`4TTw87(Px!avka+L0bL+L5o=v#*vp-JPct$n*%Fu-+n@z;) +zkGg(%-z|2T@djJhS+i?wM|m7_4W#3QHcD-DHk`kB!{z-4TKL&l9+x)yR_T*^<66eV +zxwq0^HJd;1dSukxvBJLi@74>c2kg(4-`Lp5<2vD}qF})7=7*~jbWWPF%y)^5-bUU*7oN +z?xv!1($cf35$vg7Lz?tFo|OnPv_2~oS~F*IfqbX!s>v6wa-5Z)Ado8dbiU7t+E*<- +zGw<_HF>1Bh{g_{Gb@;+lkEL8+nyIZkF3BUjrZgdDr;YE%hK5srQ2`mI7T9?0%Q8x!An;lu&hwpQF-Qxv!xW>6c&5 +zl4SVLpS?PtJJ|T+p0K2=!5`Mz-COK&;9!Z(fOkAB{ZDOcEY=k~-(MZ2fQI`1^< +zZz?{C|F%lWCg-ol`P)}-ZmecXO6T3QebS_kN6miomN&kwFq*K{;nVBBcDCLlY_>g4 +zNi3(o;Oq(JM1)`C4c#8O4#b@*DilF+9Q+j +zzIstxj77zx#wX?Z94k+FO%{In<&&Hk^L35y(;16HWi2}oCoOx>!I(8gcBa!IsoyR$ +zV>5y)jk3g9CI4kKHJ3}h_jn%*7l +zX|XwNT8Co4$$8cL3QI7oSd&utm&2r>v8;7JaLcrF@u;J +zUVJq^@j~r}ENfVJ7xd(=l0LEdq2&Wb+fy&<`PxNio!I-0<7LUMiyK(8OIJQ-ns|N3 +z1~I9nb`NS^94O3XTV!<1yoa=gC&YE&qaB)_T@nX9ki&Y#S +zV}CjvN;Owsa%S%&@pWR!70V?*&HWytYp{Rkw@G<78K-B?YYi+FJM!}SY;)O`#IGUE +zi@n*_dR(htTD6Wx`FO%DiMAyNGFUFsLpH?33ca!1aC6`r)Ffc?mf+NcIiV8Nn?dqmt3=LcviRM804?b +zlKiFDv0v#pzi01C8HqbH5ArGNhl;AnPd#fnen#f%+u&Dj +zFKfBa%1Oip&i-^{cJ8wJg+8B_ZkK5GdS_9j!@w8wcXn{g@`!UYmE^VIsw)b$vw!}S-^*=NBKe#u` +zlKbWB4>AXAF0sFxD`tP^a=p@9d)`{Kf)A?$ +zyHgL=2XJ?G&wRac;nY>5v#a+C_WGW@rri2DsioiT-d{8K&g((F|L&=jUHRsH +z!2i;dRe{US)?Zn*QqE@4>50{omo2R7)aZ)bV$}Lj>Zh-B_yid@-lsSIzO9&7Up7Zp +zSaD8@r|RQC2R^x(+azZ?T{*dI)*&m?D-{6`8k9c=Jm08c@Ks|@iPQ9rtQFiQHm}yF +z?O*%ZZ_7E;rAastV&xy +zB)MzX^8b|MxfAf%(D%tZ&T(1ARB^NR +z)VvZ!*Q(RXg%eiid!~eKdnI>Lu+Qe*G~3dM#HCv~Zux&@S^B$WWwO`?`vMoaEDMhN +zQ-%E}>|YRmPTcK~sb1>AOXug7eBRQ1m}}~<&)@EQHYYX8 +z(_QD^Yl_9sL~~BRzrN+jbjIL>vo%&0lc&{QTF3hH){BJV8OF6+ZZNTgyBCP29s92I +zYfF|x>k{^LR|Tf*c`3E%j5hyq#}D)WUaM3R<-8I#UnS_}b)zSDgQxl_^~YVi_V~xY +z&mQZXjtV~cVqY*{;`R=yz4dILyp^vX{ZaJps3gx~X8+lb_quM5{bQt=`+)EE`-Wt# +z4|6(>T{%)R>l{PCCC3+AvdcxfB_}!ay}POZ-MaB`Ohf0zU2S5;wua(fk27VY8`zdS +z`Eo?7W0%CdU;l;IeAuznLioKDLkV+Z^$TB(*w%ePyZ?T#zrbX!`9baXlH83w^%`PR +z;(q+d3V#sf_Dy1oeL81O?mO+eSb7?YxZX3(KYK0}C4NMew>ZMLA!(CLei6 +z;HRv}LV>Vl{<~{=KPNE=#C~(w`ont7ETiH_?Z*x3-iPnDeI1*(`@3U??V~_Z=H-cn +zX^$5QImwGZNKtEUQAK=^=N@k-;%GAdzT!|?=RCS@VIrHss8yM +zU;j(Wru9xs4yf2@?WW4+Q-O)V?iuKHS +zd)+b*{I6FDo@Cyz?sshLf=$yrJ@?*ElsZ_sesaa$=*^qTM1a&5fqE +z3K9=izIu_Q9d`Rb&B6=y=Ip*+v$v)ggfOi6!!I$9X~EMSGcyIIUzid+nj?NETVc9od?u6{IR{1dTb=JlS&Ayp0jC_L_)b{8uvi@D9al5%|2j4x9l?#uo +zm=mP%ra(wC<2&d2iVaM;Wm^|01hl)pXIZPA|M{b%^KRRn%I{b<%gsGrdvWCxzHpx% +zsuxx4B$h?QKRNcT!CCXY&8^F8mB016iPnohKetGYZIvmD(^JnKfe+c46o1~xneD^9 +z;F?K}=Hq+afor^4J-x2+sc1+APtH#SVauvJN*&9dIlJ`y5|9nZ +zE1CAaCZYC-P}2S*Ep7^me=l=x)SoAC=JJ}wS8mo^71+pFc3B`p%lo1LS7z`9M%Ugg +z!Tz7>+nZn5Jo$IYr!Fe#NwBxc%abbSrUcZK*QKq8C@+;-2``oIZbQ_HSl( +zY!hPE+%RQcZd~SmrryGgXx3o!J4V({Hk*H)H4zp_)70$hyvADcc^*RqsLxb&m{`FoEUCeRZOGOk1d*2`axdGq9e7?`9-TUs#WMj^? +z2Oq1?J8>-NdcW#ck%a}9S^sQI-=3UeD`3;?Vk*UEekP;;L)iO;F6@p9-HKO< +zzgYH7=F9(^Jc!)d5xOAmwn~G)|eS}cGPDx@Ro>Vu*dz? +zS;_pCb*7Hzt`ApQH{ZR`x54pDsik!jM`%3DYsZMfiMI+4JITK*dU5;Qyl+ayJcj=4 +z>&_^j?T&NZ6Ud_X){d2Tn#%6n-=Ay`#w*@(W2{{#abddV?REAG`WFS>-5{Z+`*dB5 +zqDHg-S^>4wmtUwIHn{41$*z*Iey+N(;*;<YdpyeEa1JHGj%@ai-pShVwc@2MZ>pkO*1^i;p*oTAMx^v%9XtE19B@*tt#Hd +zeL2`>_Wun(_}^T;-#D`(#j*1CB5Bf>mN13tFc}_@s8?kwT(ZMW`J~UQ4Jp~mZ#Wl9*lbuQ +zc1B*CJL~5J5zEO=LzBb@W9r|>o&J924aZHZpV$~Pj5#Om+69B(^&r&VrYbOEp6?X`?|cuW}Xw7i-<&*Q-zz7vfPb_Y*k +zJ^T2eQ)j(p{eKfh&6^r`VzM@sFmwBuFI-sWWqeoQx=D!1k{p|w;>FMFj56Ry)j!?Vdsy;j%w+p_^@HRRGvTja*6L1p)HTzkNpxbZ<>A(QY5tlj +zy;m65wmGey$itQF{9)6vEeB%$=^kIyEvfW2%j$naPS&@&16%69ty*5plIpCxRdn8_ +zj~%P$w4G>=hzhm|uGfp-FtMO~yYTIn>HLWcZT`*8X#UFlWPNDX1ktTJA2<4(ar`*J +zZ)t1QOndeiQHkv}39Bz~MD}*f*RM&|DH6|KZQIKKu3+k_Kl_i(%jq*~h;U4OuyYR>s&U2mL~zjnb3vp4?_$Hz}#530Fky*S~;yh#jS1zfv7T%OX$ +z&~JF*@AY$H++0@$7pjfS45Q4!nTdU}K +zsOe^U+>>O9Sx1?-@Fp@T5kUSKG>a +z3iv1f`(Cd&E5bTCrGaCezx>KQzyq{e&vYjAOy +zRPb!QlgYCDH!P-keTP&Y^v!-J8wpuAa;l7S{+(Q-yZT-6m5;V>{OVa43?oZ)K3tub +z>m+33>QN*r^+{%Pxte!|TIsS^$ELM@_4e4OAv9g5$HsLt|Kj}`60e(^(C1=EU;NoDz&~d|2YzqvfO@AyBw(iSF`_G^brgvI`C<`)711$iED`GxeLH +z?~C~yt`$O_lCHnS|EyVarD4b2!?xG2{&Oi?AHhJ}FG6vpTCahAvplDzdgY8r*Xqv8a~t-Cyq&u-t|~`I$%G;Ca4daysQ)4fO9oJo>xk&S$%B)rQZrl=3n9-GTDq^Bau)(4IEFl{` +zWPj+m_oUu>w>U^_-~a9u%YvrsS1mvL3ukxvFWQ`kB~^TLt&ooSEHZ~irZ +z>B>vj8rK)U;VI%1YgW|T_$eoT>vcn+W0Kz|o{tI=U=>-(Ak;b8J2|IK!c{vJDq(%lV7l85SxYdG}-GP4D`> +z|JH7g(mg$c`|~;*##viM;+C1Zr0qSj`A~}a6@il36SXB@Mjg}OQtA)yk_{KBT5|Kf +z$0CEX%*}a^=f8pO~}TEEh2-ew=woXoA4eYsT-2*Vn&MHLB7vau>GcybRiS_SUBM85!ay!aJ`?3LM#Z#3MN_P@v$BPz&=9 +z-ndmcJCqJy{4Y}NyYZigNj`hE@Sf2B|2-TVcy>=O6Rlc&_0vw)39?+Cr{>zG-{8Gg +zcz>d>&I^Yb^=Hkt7|-ZSULr51=zW_IQqL=9$Ym|A{Um9gR0 +zyYaxGtMZN5>+4radLv(^6b7VCR*B5!P>$ObYnS{w>5jU(Nqv2j3D>0;zPDGXN8c+K +zkSu53`Sd1_%cgY)c6%LGd%{`2>R6ZT7lj($lWX}-F5E8WX_4Ay`a?(O<@(LJ1(%|% +z{WYF3^+p}>;mEL?f9zn`7RRrFZ;cr)wcX+=cF|`naP5`ZDSzv}!j-(8iP_2%lj2z< +zBQ&)eIj^vpCsft>@KyWPI~^@@UhW_=?fTJU1=l)1&A9k^1;_7cXZAMUWtvwpp+rsG +z$7ZwALC2jQ-ZElek3E(VZTq|{rTOkO6Z0F~UGj4do(zkuE#_#sYqaK0RiKrF@$t|E +zRevL)=^M|!ec$`@RoIuvSPp}2J8WccB)pDt!EF_b<()w)*lZRnZJAA=VrEnWJ(SK{c>6Dj++{SD(@ +z$xe;7E9r6h)p7V;CG(plEzJAUmGG&RBTYL!dqPO+SWD_aB))GKHk_uE}Nz`_+8Z0W3I%C&6G;!B-xyEboc +z-m&%HCDEmk)2n7BY+k|oV4G)%LXl|Qzk>SOi8*S%v8Voi(3-d`^FSx-(bTDC&4+cH +zlb@ck_*9iyDRH7$gS|iTjN62Nm$I&xiYZ$ZJz697WP-*|haDwsEPQ&A?Tg*lo~dPb +z60NOQ&v}&cD_F6f +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 +ze|fK&IK{*M**w>svz?7xj(;fHzngajSy +zWjnS_uzFrJNpHQ~o>=~CtK~Y5ap%dQiT +zE-;CkmNiwCf3T69UNN^h*;4W2+l}4MzpOqRdmgF3Z86!oR=smo!Gl +zKKbZVz!9G=hJGt0)<`r+dw-eM2JP$UWjBniV +z?c`)}v42lY)muMZP_Fs9^{HL(pRDMXvw5Mjr>ziA-yd3fLNh9%zkhkwX}gl|JfEh{ +zowNPywt3!9&i41S2IRZ%?%iaxD&I(DDZk#f;&gN2ut*t$lCLuLjThhDXH~!PW$(e| +z<_{TIFLW6hMn#G*{=YAfxl(m!^V3}ke3Tc=OFzI?~I +zfV+(g=FG5|afZ3`V`;SOv4>vUWjCueEo;{j=MsDUMEBs;jbFl33(v~0^tL)!;~B4P +zeg0L(w~01utGC=>>M{Hve`{m?q%UH6u7>X-&kJho4P{%Jx+LJ2<%QMeQ~sG2-t?_d +zIw;n6Xv@(T+cJBuY4u;c{;t^A$?dsY^sm(y`ZNncfPTOVPw(Os2-)E-(_c`7#y(#BPs~cO!UA_zLGH)|m=6jx!FL8)2cCY{6 +zaan0;^xusa5?16o(z)D+5iJVI% +z+8#Arb4yn!Un;BU_F3(!nd4<4{o%>Ap3sMM6>CiS+Cx4HAr0> +zTJ`^{%I0fK`!0Q&rEl>rG1%Ym(#7nJ5&wUjtZ!-EKQ-SfTs%j3=`o#o7T)W3_nItO +z!eHbsE>V!rw;*Hbgp@ER*{tk}tY^WZ&e0*E>1=-;B`s{r?oBx&?Yg${&ckbB)?44H +zb|vn5{hPn0bj_g%Gwy)NU(fG2d87WE<`fZ*O$O1E)<$n|aBKQn8+py`UEAr5e?@I~ +zRs`qIe&}4UAh6VPYtY0d%vHyf}Rv*WV +zpW1WtT)nm2j!()OMl3sJ@#uvMw@hJ7QK(E| +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 +zsTps{@S(Cot +zi^=?7OZLbK2(92>c0uX|ugJlxJFEV>c>6qO6piuO{ZA&9a}npo>xt`1z8eSx?ESwr +zWshR4@%+!hk$L(274Ob@?)_N5cB;nx=+AL|_g##ow@>annJ7|a(G}gmd6jF1Xw3$< +zuG|Gpd?)?}WiFXHLpn~vOGY^1M`52)m*Q-@sjQpA4*Ycxp0B>bhW}xayL|nL=k5pR +zs;u~QxG3`qql3Qs;$mcQ1tls9g +zo_$Sk$nG`H6KYxZC0qYwxOm{Cz05|L`d`1Ts{h8^m9mY~bKZWqMeh34=?|Tq?u*;* +zyY%<#jjlic7WLZiK2TM4ckYn|&+GQEHOhxBzQSCum)YwXvtau9btVO~`qzhDjY}|g +zDO7C#xA~|149WcR0)e{heU1SVDI2u^^aSbEADA9CYi@SK-*zqD7s48GHRqbeFP#+^ +z7ZcaLCB8huQ;l!d>*k0hep-LnnU!WHZalU*V`jnD6=xVO{}jG^fbHNp*&iS3s~$C9 +zc+>J}>3qYf5#Q|IeR-u*uIZq~YRSsOclQP-3&#(of=SPPemJYE)ZaOwx~u=!Qi+FV +zNs>-B*h+kY3oRNp?o=bDVY?YYDM+rx!-p4mJlHpr}X+07q6 +zcu)NL7TurdR2H)Oo_dh%GhO4?oR%Vs`X?>*k@f +zb@SI|?S1aF-i9S~eTT}zUA8ltq$mEi-x>cwyd#0p;6Oltzrmj8y>0t-ZRhfa@O(3@ +zk(7%IZ%|L0aA9s;3JI!&8P6 +zN(;>z7ax0ix!QJa=(!}57v4PT3ual1+I_ome7j>^VAC)z8V4OfVO(zRi2=foF^1BE4U_ofF>HcO;r9yFFhT_+8iWyQRD4>in4= +zcj8W!y`5md^L%6SX`dSTUWv?h$L~dDe{xtJpHlx9^Qg(ScJsGmciyqD5BS7-Y2Tji +z<#sCP!|r@rwD~;y^INCt4#{!yd3A1mbS3la^GQeVFxS^!(_8%GfnjoLf#ex$LD}nJ +z`|FdQ%;}jdXu87qd2^Yx=dt%o-kxT#?Ftk7+I*U8s#5KzyGaMa#5BAFgurq;OAE0JFW>sO +z-r4?jn@ZcmHJ80+SzdJ)$Ws0J#Uei{`$kUGD3Gz=qI6M69&(-q&2U`|ZY%SR=!RnHIkz+EWh_^e#w%TLh92M +zk5^X|Nk~8SNlrEHZ?0t9*>p~N23vjTvF%z%r>d1c3eLKA#J;eGzchLK7w*-;`lYiM +zW^G__IQ}q?O|1U#qDz^F{jM979b?aQ*W3D8(K^Sb=GuEkxeYC6j%5a%HIm}v&JQU{ +zTs8B^4HJ)V1}(2t4H>^3*kL}~KVZ50MT=txJ4xgV-kIs6Czivr(E^&~W|oU7d$aUs-M8oyb_@tfKELwz7&#`Rmo@=8DGr#yJJ2 +zHQhLrwy!=~cGxRg;N@FxrJxIkTn{NGYUo_Kx{FnDkCZUC40l6%z-?R2>jBp9oxNt& +zE)!bne(PEFo#4X-Ki$_l-c*r1mUm`BhPTU^f(`W%R%b7Wd0m>uoF@M#Xt}ntQ^Ws& +zP7(1JDogs`FZi7LWydj3g?v_xiStZrIZBS4nDoC*WfRkB10|1Ax9C;oA2;oHI4DuL +zRYmZ=l}Gi#%d-Ow(R^Tg(h2<;TX^2gJtF#TZy1^hM@f10-xyb$liU|NVdAy%*D}-cJ+SD$=JWR(a`2 +z&dvGXW|=T`wX9&<;9%?6)bwWFomyvpjr)gqIxKQucRnfkT{=(UmhVEQz#_TsV!`;= +z7m|(Ft=;}1TFSxWYFn9!x6SXZm(F~ga;W~t<y4F|QRG=@#`pWY@B*evq$`MFB*@7aun +zGkZ>jPrKJp{h&*F<^Qf5zA=?^)0Y)?NPTH&l$D9xaJ={Pq#LDoYixqWe@|Q{@b8&^ +z-{f7s^_p|6euqdUNt?8qTwWd+7`Sx7t#_)T1)D0@R`{8E{Zn?0Uhr?PxzmzOGT#MH +zg)Hj4sT?(4AwT~WSJ*6#g;MST0@-563o +z8f`r|zd&@e>EhOAZmXYn*V|a0n<7-HIJq^oYFhKZ8yAD>W!3t`Prv!ipT-;Xng6tw +zT-fzpe!H&LhD_VjpY~DgsrkPCXwSch3B_nCnQ? +zv`K3mj#OsJ&Hu5frv6Mxxs3jy6LVt~HX+4KY&~6fV0PV~U_%y_GI7gXN!uUwZFlNJl%G^x3~o62zb4dwo%^x!l0+MK=FS4mygSTm%YB3I@cmI*Y5Qwi +zA-nw7%ulT`|@`mge-Ii^GW7w8qW3P3VgX_XSU-1Bgc%pOu_G*I>jX9@?6AH64qS{ +z`feT@c~@1t`NetJYo!{?%dDTYRK3rC(_qVVVvlOcx)Y~TdhTkPTX$``_pLbY+O0e0 +zDGPs`;Jz6gcx9mmqX=uB#aB^&`;1x5&*#O*GVuSZ&o`U@VD6ek3gdyC`5CD#MP54uSTk5-<39;eD$%s#*C%@ +zT{5jxo>Z^R@A^`I+gbM0G5&<}N|$&Iuw=rvJuU)mc*-(2LaZ*1{?^G1&M@(x-~w?%^=xmB^AD4X^AcBXsT#xu{XHZNp! +zs8fB@a4e47b3t-N^yT(owgboBtlYKosL+FdTmRP-mFI16JKDH-k$$~spZttB(fOe^ +zEbV_+yM^#Bx9It?;KmnYC*FFw|LI4CBIBoBlnqzRIdS)W%j)$`2~ztv&3VAEChzE1 +zd8zWdUh)$e*y6Zl*1G4Msd0;2c9SoSyQWz5aD;I6%j`|xR9D|$*(($7v+X8}f!9S= +z$xF|f%hoZ*+}rP?oaTR+(bV`{eXdcstKDwyqO&I!O8)9;sNTrT{gJ^>z5Ce134GOi +zvi0RYhHmuVA5!_YH?HzYjhJgj?2CQsa@SOUZWQ9bzfzTJf&80?U$*aRUso{Y>xYBC +zO|B_cR4At@y6r~Yb*OY89jXf8L(OmwnRq%+9Un +zSiREYzD=LH%Qxx%zK@^H|Fe9M+EZP3rC-20XI<(NH(Ljt5AFQ>#hv90_ij$&$U1#C +zRcPaer6<1HecxL2l|wv#mXMU={9+&0hSb+QC!RgO`n;}@RjVmM<@1x{nVU~BOz+@W +zUgl9C^H%ZHh6#(J%WQ<^Pj%|^^HwyAC*H^P$?8i)wF)*a+IHXmB9F=fmj9YxBU&P+Ejy~gu~3vp-iTr00W${AC4Z+* +z?bvgyW8$9~50-zP`~F0-!Vc~WpF=k`_c9tLr#O^3EPe3R%UVWECE~(yhA-m&4pBNh +zZL<_4r|_Tqx?9`mk3O@)A(zQ@Qu2bc4X)q2A#IjWVsqi2Pfb1JMyK0dzZnlXg!*p( +z@OSZ4x%sJ$pR_-#$={Gr{~^MACjI}mx?i*Uowlu!Nd4$=?7QLl9qz7+6(?o)S3c_r +zKJU!>`@mJ3rkOW4Xl|~2aH-w!;M0q#oAT^;X{&_u7=19?c}(cSl#t#)|IgVo9-P}* +z<-H)J@5(uQtw{IfCRRtx*z0p||44pSEwb?4agT&|J3d~L)!iNyV(dFzN_x_(8%gHA +zKHvQuEL +z>yzVQsj;UFee#TzPkj&#l*o0|OjN%2-E3{gj72f&bGJkuy2gDWqt|uiy_QqQ>V0#) +zy}}Y^vF1GxNvUf15-+QLKp`vi&)+kzx1VYF7~c4DmiozaCPz75oIEb&5u`siXQA%o +zwM!JW3xlW4STy;;xdv08xp%7)GLFRE{kNa_Y0!*$4IDhZOdZWUiB<=9_ekH3D~VaO +zUtobn-IJI!lf42Uf_U$gF*$X6pH`{3!_RCLlXm2w}FL= +zu}j*#63^Ain`f~~R9x|{OBLq+%60n-^VdiE3wj)$E37{D`f|j>?;ewrCR|xPIqsCx +zbLq0eeF=LtJz2xH+I@K!_`>Jh?aiVVk3XN2n0>{t;)BG8J!cd+dJUUiX-5l`eqN;E +zqnNPi^so9Y&z`QFkR9{$hJ9lkCVhBVyz=SIog@s3uC>k +z)MgZzxP>QpL)(;)J?bsu%3F3iU7XWgaeckdg7$KEAM3J;dO`Nfy$qY>675CqwJ|)a +zh;hl`eJDH2!EE`BFCxvd75qw)e_K}_ljGQPP-o8Re4T^MtM6Y`o->QBv$kvfZ#}){ +z_nV%oFgVxxM(4PTYv$~Y-g8jOZ_~+{Y>M}6O)a|W%Guv8xfh!(@Z{FE_@#GRL+|!> +z7M5{;^`3od@$Tt|jOyyI&6zdxyilEu^O7yEs-l+c@Sc?T?#A^yftj_>U#cHSouOmm +zx~%>7*69U}4e47aiO8*wtzzz#4nC8qRJxTr@_q*(IkXWpe5yO*2FZ2ZP_aMxe1`1O^iA}9PRRj;pesJW|o +zF|Ir+u_jaNF=xEB`FlInhtboQJ}P;=Pn1VB=IQB`zLC>=BwF>4*iSsX>$ywwt&XHM +zOon&)l27H&R$H}eht7k?Z-YZxxME)|vk)u#qp7x3dr4m8jHmg9nt^NP?QwF_QOaAY +zvnJ@#uaeB4mwm-n9Mrp8*UZD%IMZLZe$ynqAJL))m(F@dc9f(aQk$k8lTvi_h21gL +zx)0t{r@lM5B(XD3g;ltF*2X_oj|w~#49`4O=(*yNlr1%_M`Gfk6TT~31m73m6u*&` +zTAB4y>H5+DhV!XbYjOpmFGf!e4FA#}Vyp6uIk8c%#%o8`jPQ>)?sUvZ)jv?oyB`-oE)hDoH#h&=Q3ojiOGq{Kq|0=8|s +zqd)l(_cU)4)~cubN)_ICO1bJkBj*8ZYo><(n(N)aj(7V%xmJeUgezG9@ +z$1z#1k9xmsE-asKyp%Z5j7MlVFqP2K!3 +z_0c(j9o!vTChagdbnPH(@6G=OqHiUucX+ki#BAj}-?v7{{oSVR89Ii4^m9`4KltpJ +z%u&PC7irN`aIjvKM>}U`@9O1}F%ChXut!)yEZ*LX|VqMqNIMt+Bx+C-%*A|iKPp8d2DBu|Q^xWf)dcpF> +zyLPo=9UHoI1U9MeDQXjED>z->vBF&Dz1@nnPD}>bGxk;PY?rVToV@<2VvW1WthC@y +z7k?NvPyA@GZsS@H=g$$zN+NISu5A0kYZo6?#**ESvc=C72`F|T$9 +zlg-}=0_R-{y5>ngZPw@IDQSCpK6`#+&#gwY-@%IGAHzuX@-lTahW!KJ}Mt)MkTk69ZpHR3+%T +zE9{n#b(qnajcjn5IBR#+FN +zqqtI_`@+#v=ekTB7!w1he(8<+#B%0B@zF(#zR5KIVGTQY#7k%eZ%5QKHWBglzqfQG +zUVp@0pHu(z#TH}1?t2ZBug-P3b)ewXibJ9y8`E!jET6Q}=eO$q?C(78t*c8Mr^b6n +zcLZ%?P3m0qHG`FVzF44zkk;cRb2|g4d@o+=5bb$d%r7=H!|FOCo|q#FP6~d~fi +z>c`8w@yMjZjai?+i-#01{TR6TpWX4scYiKy+xzsebY_#~f771eS1imXWmY`9AMAfR +zP3!oQ#I_9^VolDRREwU)*jjhjdB^=z6AU^Qawl5)ZoehxH;?60nr*u%>tD49MQ2^V +zC-&zp?9{g$5OkJ^*V$HFKf$hfr?t1)bKAWkN)jpct15No&)u~rQgwc_fuKao$7wzP +zf3tfv7%cL1|F&fE{|!&hJ^Z$OF;hpZ*L;qrtqi5nHYa!cPd=l0xHR$N;=<4T7iXkA +z6YfnjeRy=ec|C(&!kFSOg>S+_g!Fy +z`i$69J(CTE4rrVyu1Q}$;l+n_<-8R)i~>zv-KFA`6s8u(Ukyk)&vGhjruwIx`&)e$ +zDle)#WumHiaN&LzFBZSeD?RQt_#Cuzwd&%S*vrLsGNpybIq +z3JBF(&D33ze`(c=rD0;3Nz>FZs8UMP^(7 +z_d4}GtBpceEsp1Ich79j(iPbsC0CU3D=&0)^{i5}%J^kLhx-*KDtQV1IN`IdFS#fB +zqC%v%ioAzgkI=z)vmSOaKHIXz%&FAXW3lN4HNLBrzv`~tFf@CRc;q+t#`zx6Ng|AS +zTXxqkx|@4Nbz;xPojO&0g2AsH1ge*^{j`v3d)=kiDs{8Z^5=v6+f#BcD7)_d$9^}| +z;85jJfmhOLmJRKn3+&B~R-S13786;xsC;dK(Ur$uvR)D^2*Cr?~&{1st|E{!i +zF3*Rv3+Fyu)IR&NRC6!y{fO$MQtSC*F8`GKW54lhUuzX@joS1v;+NsS1#hx_zRzE8 +zed3nT-6f)z*yAHNmCfJ9Hq%-9gWw;vjhmUu)ALS#op$5di~pI;GlUI(2Y7Y(9;)mJ +zF#F5?>eJ+AC(b3o^#>f}FHGKe>&qeC1+o6h^5vf^PaU~?lj)sU?Fvryf-5Qem6RXO +z*uBf=yvmo8`imD`_^kJ%Njv0sOZXO1c`MJgQyte#s`Z=mC-uhf+@4>8Y0QRIONx!$ +z78(YLA4ujp8u*Cmoc04YuZ{U)(@$%?PUM-AG-XA{q`2RgzI4vZxAYCHZ{~S?g-t}` +z&D6s$MN59wJicOjW716R*V=dg{mkkW=J$Q$e>be8G&b^-;I#EQm#P~goH&v;O6YZX3e0K`%M?8*9Ju113H!oxmd!2-9jpo-XWX8s)VUwF^b;ye +zP=DdG+(?Gu%9|Xkh?I8|qR%Zk`@vY?_D)TigT?GJj7z(l^<*vL#AB@t*8H+*l(_m> +z;6i=Zl3VK{@04Y5*;Fpw{Lrc7#@66F9?o5w3)!<)EaKY34(L9 +z84;`#E4B8C2=yNc_fx&g-}Oj`b$&p;@6TAd&Tw+Y-?qHX%4rvz +z&uE11e{b+P;le!*~e8FV=mG>Rvgs&Z$jk2*Py)V4j+vfGKa;EYw +z7WvhWKUYt9wr2i=&HsECI6XdpR`1}dhRweozn|tg-LrUC-r=7f&M(z2H)MqR)=yJZ +zUby_V*8jr?4{e?Gu)cfoh1#e|*ZmhPxs<|YsOnymzx^(Eb`&d +zc8_-Z>e9xn+~zp}oX$d~|Bs7I4<)bO +z{ipxfO4G0PAFta7_g#HoCM!wtEq`}f=&MJ+LWHnLzTL%Z+CPMzl-Y=yPpW!5VROW4 +z&d+9t860)q`}98*Pq*+=SXg`M*#VX=?U3Z@3T})FjIGlh-5BNS6$CiAm>e4%85$kb +z8xlZAsIg375#nG`bSz+V@5q{a>`GSY^rDU@wY|#xvsAV`o@?LC>N8hJW7A35+h?22 +zH>$r6kXv$tGvbKq*QbZK@9Es2dGl4?TcqGY08A}ui*3OF5Y4A46e-~%>X6BskJGC(vSKoWbQMsd0HLM=e9?Yea$jkh3$XT +zuP~HR;k3E*X_KN{e&3f%FaEOJmTEeB`n!eql3Q2xwky2;!JDC=$a-@Asq*@IOP$sA +z@+Jvir|_J*s+4k}De0=5;g3h#7M$+Bdd$LB&s{e3pGa1&xQ_F#FGr#$1RdiH^HZ}< +zKFAgJi~VB3r59X$5mz3s<|;aRPUm{SwvB1#H=Sp%EV`+9KVUGS#*%3M0Pr#lJS +zHMSRhtk1q-A};nxR%MM^c4K$G&rx%Bp|f+hi2FU5@@sGW&d055Zk>96Z>iLiwWcZ= +z^S@p5T%dT1u~M>{J2aE?@*VzwU&#>*wL5lafh{L&-V#JPo4=2G6+AOnBaWWOD&i2(~5{Y9WJWDFP*t|xbSIAfAQ`0 +zl060OU7P}^Ub#3Zullg#>o$3*tqs+Fx#+1B@qqNQ^M$`!Bg+jAt>MbwGUc@^73{qKz&fp2g9v#60} +zKetJJ`SE@GLe8C;bk;01ykS+ZPol}TyA@2l$@&u|w>g%vY}5RrqO!;A?2H3Pc5bt> +zJhpZ3W#?@no*z4Qlt@2OdFwyrP0U+oj{4%i5pQ*`O03)Ba(?%NixR?{xl2^subeYK +z78c@D#r0^WNp(tF-PJGs&OJ+X-6c9qSs!KH>nmHG*Wy}w>Rw9yxA);0{d=nRY5Duu +zikRQIPBh&iYG!up +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 +zC;wqT$FuB1Pq)fik0VS +zw{LA4&!Y48*V#t}%W`Gw$yTiLUiYlylwZu*>=L)?!rN(SSN`+Pug!T;_(kmGuZC|z +z8|w|t-)&wNC;fJ9zirdWJ*JA03)`kg2wVximA+4R?Yw!Xo@;6UdJsA3Ymm}~?E(R3 +zJoxM0-PIG!J@V{#;k_?R6IgyTGlr*x?6nBlJM&cU?e!t~GeYtmH>qmbZ?0c)CO$P) +z#qpQP57jN#Yi;};Y`cDzKFO>|vCQvfuVL9aHROv#{o!lumyVeSZNFW8^>xp)cyHy% +zwKI$wZ`8S))XYwsoipEk?w>gOdkjmmd2W_CcI`XWo>V<)&%*Xtx$bq=5$qB10t!3b +z&aIkJWXExH(ahIBwkvaqME*FRz_les=KOhIe>W+)^#^ZVWr$x9akuEC$c`AFtj=|E +zkzFfq^`AX$_M)f$srWJO0+FjvKdioPv3W<{1qSNM{PzxRrBb1>9#-ZTw2H95w} +z;LfFVXLFLCbH2QsO`rL~ITLrT&5bO5u~YiT)nhN-bZcp8~e8&d-3p+wbq-DyVDPDyXg39VqFMN=3h0{m8O_eJ8AGuG>XHompH2Lwa +zZ@-!DNMHY967+swz>@6}0dJ&w_PVb-8L{|nw0NyTjdz!3k$hEMdW^t^*M}|y*Y|9$ +zt#2)Hd?9#Q;*DT&=d53Ry*5W;c$8n>W-(+EoDwbjE5y2U4MXKcNu9*Ua|Jyw2yItv +zGpT+tPs4J7VX_BX+N4F3WV#m4X6TBTWpd32O8J+>;2JDX$=iYI;mQ}(qMzkzJ<nHEaE?HqDF11&1#L_KE8-ubykb`OBi)|KO8i2J;{MiA8_r@W2bUaMGG!v8_Y@TkH(US3Qo)xuSzMhk +zIqSvu6`|fQ?`!q)G;tr3s9(jr;eDk9Z`SSxUz;NvgoXC#$bIPF{tXQ`wlj0? +zKU&cD?qtW@X}UL!^G`BKXl +zk|%$-vfWFu4V_+mTCu2#WkQM1(^U)Jm`I1b_^CPlSK`OL_ZRhC(9QX@NpP)!aZXHZ +zaQZIWg5cx#`fJ%fYH09j>}&r1cry>vL57F*>T5boU+wXW+g14Z#4^uSyZH69-^s_R +zg>1X@bM-+ZjXe@qLKIpbq*&j2`Rl`k#|DpM4hPhxo4R-W+xMrXe`#XEii`zQLO1pF +z6;65X`1_Fh?i)$EnEO<-E|A|DEHm7P-D*oA?~h=?>xmf&M(O=bP?ZjJtMj=>#xSH!dnhU^Nnww +z{eE+ql9T%REf-FA@2fbPopgO!Kt;*Co#xM*w*5-%tag`te#51H4$G2+{la?|Kh2J= +zZdvCivB)&xqR!<%|E4EBn(cEa`tkM2`yMS_=9y^4(i9Zjy>Q*{u3u^Kr^A*>u6Vn2 +zV@kZR%kAkK*PnIVdd${VDKe42!P_#{viGULPNkrxqfVUD3jcF{dvo>8o6;pWUryhf +z^?%wey(ZE8_ecI;^%RiZ@19lP#>;R%VX12GQD(-5g_pkb^<5OVy6j?bAjnE|X9$Zh +zD_>W0Uel5QJzk!dhJ4NsCvX`)F@K +zFo^f*C;q!RBkcUeX623c!7(atWi!~OZ&)CEfYn4Wt!UGSSJ4)>!Mb0o3||(0spl3t +zs1>x~!g`emvm__cjNC%5T{kL1jGwKY^#9#v*O|Q;r5`6g;#HW^`OBE)a#WdApVmjV +z_jRk6dW(1N|CX#P(e$46vCD&Ji^Ps?HcsGGW3gN7`g)P|(`7~+`b8{Zt?GOB-?=!a#aHBxn0(LUTN9=0HFN_eYfbN7P%`0e3t#Jb9xhJfHV!`< +zcO!;Vr#?llKl06~E&gYTZpy+x3l>FpJBZb3O<%*hxy{Cd`83BLt(CVTnsqK)t&i+v +zcmFG9+2gDqwxRArn`||Y)4iJK%NvT{msK8lli7G^#)iN0^U~CqFJG$N<2+%8o#mff +z=gU6VzO6rA`1lVt5#M?;3zIYn8w{f{L+ +zy}0T9g8xTf9nB7Y&mP_IyR&WUtB0%G=u*K`8!PHd9Y5UF_j&4S<6l-1@=DU7tnqPS;xEIM^%-mS%dFy8{#$d0_v#Mb +ztAFpO#X6TB>`Tw(_$&2rY1;RYS-Fol%zMD0_*vn1vg_X;>)(bxbiI%xUjH|D&AH8w +zot4ixcf3oIjl9yyf2C8xe%8S&9HL*WuD-D{HH-Sc-S26?U(U;&+gBJjKDqRjdxMF{ +zd7pPp7fy0I6>m}4eEHb_dQs=+5|h8b_R14}b$`F}YlnrOJ{~$YJ-WmBBAb+faH7Md +zd&ySY9kg~bU0$`Sd39sDnHNfJ*WN1>WSqCtwA#*TS+esA{@TB)3JQRREXY}@wy +z1`pF8ilz%MzUuO_Typ8IAphizFZCX))QQa7JHe_@@vFFvQHN*{cZkQ-9eY#kgo0jM +zsY(1(>|Mealy> +z&U|YQpU52!X+N%(;_q`romtK;Ir>WKc-OUJz7SN^(2B+-+{8%-MX99pfNS|*(eC}-@LT&ePPSG!5B@(=TOMpX%R +zt0Uz#JSQ_;JTAj);r`&X6Vrx274QEsM=$oe-p_gUM*Xz=I+m`+lV*v@2TF?6ctn>( +zufLZRXgZBYJUptS;_S=&CqB;%KmV?^Kuqt#-Ioo_$}MIF`%F}oKkN(H)N0oGLeL7W}$F>1(~O +zhZtW+n1=I=VLQ#S=M`3lC^X@}}|W}jPggi-45 +z#uV4bEL&N11h|(TYU*9nqV(XxE={fC^&3Nu)z4vgyg$k*>l#m_;F^Yg(>KKZ)MB#s +zc>5t@Y5e~KM=w8Mlby5U%t8LfNW_$Zps!Z^ytv@+1Y}4|P*}v8&K9o;|+f!}T#y3H1 +zbC&I%BT%!e{{1`d6;hqu-Y-@~NEts^8xs1fzI>}i*h@LzH?w)>{VcWm{JCLfk6e(- +zyotFpXGLsZ>#KU{lgcW#+9JW)nos+WWj9;#XDzupL)Ma)Lu_G-+8dKSGAh-5{B?hJ +z?+~7HTICGmS>+((9qvo4@*J<Oy)8KGvFiWwfuE +zAMsbW0_|4CJ6m)`r7UwEhPm5*C$XSDEkI(<%vxzRvCA#^5gi?mFT@u$lh+&#B^1cOy8a37yZBnP=R&^8W+N +zPVN`Q=epHD-tZR*1J{Xd*} +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 +zUvcX8Bv +zHuUKB?337-k#O^m`t>=?+;0qCS}xF2UdHTN>h{Q|?_1-C74{8xcZ)~}Z1$87^o)Ez +z{XqSXdktr!Kkc%a?_^pO#n+bQ>2&ZXQ~D+IiGPk5e(f|qqJA#HU&g_IPUJibc7K@? +z^>gAoR2@nm6&wydXTeebO}S7w-EXRiTf(xNZPvoa!zzwmYkOMLG2>yJLaOQHR{rqt +zn|$*(-F*FG8j1*-fu3Z2ew-NuaKv(mciGtYjx={_fERpteSU-kye?{plF +z`h9@&)#)7JOX~{_9xYj&tJuQ6DQR6TcblW@lDC43{(5)jSJ*>pN{Y!CBc}CQkLColHWw@zZzvz3t`*$)CI1eXZKU@CLt{ +z<=giQjPCKLEvipGF2cdz-ZsVFqPYDq`*dy%*Q;9=@GZT$S@MkXmOBc&mOC%i_ptEV +z(>mp%w*aH-61_u;FQ%SlIsZ3&b<44$wVUpAxN-WHhiXN?=q&m+`$~@VJbnM|56o;B +zPa6Ff(LGVRzpdP1^R$ZhFWv^9sHu!(SKR9B)WT`V+S$9CoObems|I +ze&^uPiC1|KJ(_EADte*DwVkg27!MhLx@>sc)^pLJTT4!6=mh+Jb!OA=Pv5TgJZAK4 +ztTmQekt-s%X8AMgE4Am$N*ZP`uv9wl6D)O3$&W~)bBqNsQ)j!KbJR^++ +z)_*VFAeA0!H8C!$GgvF!OeVMfLEbkl>DToUQ+Y%E7r3V;x2|uTzv*Vlsb@E*@Xpqp +zU9CBLN03=skXh)GoHgz@UG8W|rw5u9F3P!6x;(&a!uGj)H0v6kx0LIgtUh|=^Nke# +zCA%}{N1Z%ul%`~~RDMdjn&GRw8!g=Z-(+m#U$958`fR>-*S2-@GETE?b4w>hv(!t^ +zwEca3V_rwpPerBO``OYw9sZi8e7W9H`uJeH@m>AT$+68>r!&4d6TN@giuliSCT!)h +z+8HjEAXl_8ruy=C({sOPt^7UfXf5x8cP$U}f6rq4W-8Df7W3Es$qa$coH`RtwMag$ZDCwxowm>7nRMFJ!a?yqqXp|mu8UGX{`}#0yp!RZSzZ(q+~{@S_w^&D$&XLJ +zpDVSQS7Gbk9dmjMdUvQg&hEQ2HP78L(6{$9L;J+l|MirYZ5FBD;u5l%IVAp9<{wMP +zUk;2pd*yb-`uv&5@jxgdIr?(Lp1xbN4$gGDB{hp@e};1O;@^QHN3Mx%cKNWCZSJRt +zinWS2x3XPM%-6l0KujH7$ZaW#yE@O0M^>J=Hee`qqC|&C_w( +z^Mv?&9lVL|QA^}G&!248e_1bUz1%2LA%%nC_tKqj-yL--c>L$w%im`e)~&r&bbI^v +zmyQ=w5@RBwSTJ)Ms$~0 +z6;wI&C;n&o@Z|6HhjXqlZ0qq-fAXlRifi8OTXi2ry}LFQ7^IePho8%gS3m{gy5 +z{m+Kk!ud@T*v`xNI%~x2Oq@l +zQ8}gZb1Hjv#w>&KcTsZNRylmR_QZY0;%_gEy*50582`!e^#SwASDzGpl1p6G&8>NM +zA#+gq(AS<%lhSLBBN1m=yw`@@R3`}t?d{or=yZqBjN=o8#&b>ja4md3>n +z<@sl`gw46?Ws;fuZdU)Ew|C*o$DbdxKM#xl9+UCz8UKvWn_FJ(5ucJ_J%L}%k@Jq; +z=Af;wrEkY_ZjH>j#&%iF?#h)G_vo+R6jLOfqw_nIQUd3%J-pU;_N!`vEgIL}=rljx +zTqh^0bK>rY6{^S5mG|rOyUy0Io855W@zi4de=GLz`)qt|Q@OUj%=NgmuF{N7TYbC9 +zU0+|;^sRsXD7*6PtH_FD8f$x=wyo!Iw=iDqv2@Y1!wmm@_}47k`=GK> +z)2Q^p%tQMRX0Y14S3PVnpD+I3j#|^-HltW+3xwct#0uw3pKOp8jh1TrTV4Zc@wMmcu&2h +z&A~e@echU}&8L}HC;sMmWw}CZ#nzY7M;WJZC!5^!y&u4wzE8cba_^KEv;X~!@#(2N +zU$iB7R%DlYyW+2!<0bDj-yN^I^LN_xuKXM6YtM1c^!>iF`mr>tf>Y50Y3mXeyC2JX +z*s6TH&#&qFCwaZPc;l2$ocEqE-xX&P_OyA?ThGXJB>1bqm%uOQx7=HCN?XHTko{U> +zS^gOxfqzbpNzW7-PP{kz{J+QfVd2Ek*?$zfs#bhsUs%}wsdsx~?S@tfmCf-j)9j3t +ztv5+^t$CW2vTpDEP^Yw`;qv9@4sO}9V9!d8RMS%@66C(w2u?^#&SSM@->jc@;bwYH +zbGE2H}J)+!?8mH<^58V2?_SApp +zX{*|Gq_><;j^CGE@-p^>Q<@_82Y#=B6Pp-H`!b5`?Q8lC7R6>w4%cz;ub6i*I{WaZC-sthL#D<&XTNINdcj18 +z)i_tev$^(%WYRx*IbJETwf9ukc17IN3hGiSlP=yeyTdWL>%im=*ZQ40%1M77r7myx +z6V;r!zj%_bZjRix!$M1X95r~03XUqMuAaD3(M_$(Z`0BqMYXS`_7e~6y!Yp}Q_dkS +zx9K8z+YZgX6}o4`+u#_3Vpiyjb9#GyeT+%^MOT=_ev%G1P4D~ +zbLCqGf1GD$HlIEHu6Ix81}hQkMLFzuO)oYbdRkR|QIKF3pl?!62azT9Wm88Fpn +z*Dq!*v}-GAwBKX{2rC%XE(n8>(+kr +zz=R7Q!&eoAyE&|^SRtdudTx)n%O>qVnioZnl}`%(f3jX=d(HMqFS&wk0wyUSy+$)=wRkf-&eq?igvrxrD>5lusNqOpz@6Z3ab=r~V +zbD~5}2PPFdR~RYsEy&wGYYKmt&bI4{KeMg=t~1>G`%r)5+|3>F&wO@#J<%=Ywd%3@ +zj(pXP)oflbjnlMm*w>rid;b1;v))Nn>COa6ZO&`!lh+)P>^~y;)lJtvu(s|$ufcw) +zySi&kzuP#8zsVERslA!P8gS&(W7Ga438g!JIDX&Xx#O(ziWj#3KX5SksjquHA?91| +z9WG8TkAJ47Lc9&%o@=vooKnh{%{)Exu$zybP}9l_ifzdcO7>Ywd|&dQev!eq&-bRD +z_|d~taGFV3;mE2guul62~FwR4h48HIfy{yz%u7WwQ +zw{yB*vH8LN-Cs@n4%;tN*Sw7z4*As|XIi|;PVSjj&GFERjP#2xhqUH=4^2#Zs-?90 +z(7#oOn(Ub^w7Rrv^sdS?rAL&!D1N$o_L-+QTBmp3`F2KJ|6|s25q5ta`QH71cdV*9 +zx@YP9<;h(YH72*_zhDj){#icb!C$5qSrfmOg&UueO+H?>(dz%fWe;CgZr9JA%GP%G +z2t)leoef8veg*$Mx;^m{W8Xx@AK1o@-`}jUTroHZu>wT&sg_}#N=^1sFMR?^E#Il`7nu6cj$Wj*`X$tUCDzir)bH-95b``Q(Y +z?LFC@6$CsS0t6f{CMfYAYsy^oNT^6CR(ERn6o}5o9Tf)w>x`(?H}oV-`$s;tgCh6u8HfYc(cdU>$|9) +z$E%x_jHef77-|Ht9DXycFOE_FO60E#dltOO>99NfUtO@@K>tljdEogTp{k6CN=8px +z;i=+g4&`bLPg~FJVDL5H-rIGlnj^G`FSV07Pt1GZr{^$r!k<8|$2ae9kt|%d)@ozV>iFO{SEpCT?C5%9 +z@M=ZkqwG(6nZG4y=bzA%E3fBH$=}t@?JT;jeJNw0ODGS^2NQ*cYx4O`^V+$Oi61IH +zVz7m~x;k#%xs<9OzM=~ktrc9eFtp{-i=3RrrcUd8G&m2>Fns!LMTvvG#u5=V)#rb7 +z%qDK+`N4fl%3IEWwvT$# +z!{%7=tEbLc8#mz-jbusGP};~P?F454e-d|n&-p4#C37J +zE{o;L#i27q14`#?=w8YC?}WfV@o1BdZJ+BKPdDz9>v{FKY<}yN1!9ki)-ul8ZRz+z +z%iyW3;+JHbx};NrI}L8sUOM#C#Yx6$0`G@J#h3l%{>FWJ8D-F`c$VnXq>O;#IbJ_uPo`@oH}XH2-0pU%1&bTId7E5D!R!kII~ +zx({9c_||FNUp*!EJ?-HiJ-2V#F8)jQLxnE4(TC97ZC~!yrMOi--g`<(JK8GUXzRL( +zjH!;dW;{|%3)p_@ndmGXh3A{&7`RV`9WNHN +z_JxZpOcG8UTEZFh`QW;s{}Csedp|76czE22aq^Mc32AatM=v=f=-o~X-I?pK>tN%t +zV3pe!61J6jW=!B0kBDb~T_G)|CT96;Q^7Wo!=2Xl{I}f0Y?pq{cCtHi;J9jy*1V;n +z+)m$Dh^>g|IM32^zgl0nzOyyxz&TOYo$HPIWIc=mZ*5xCEup|p94Ri=l>mZg%N +zL1xD$R>hbe`X9SI%k9K`=VZM{35lyGW;M5-o!q_U(OWyI+5Aj`GSeCN-&$QSTg<}! +z`hD;EM_g+fWm;M11hyQGIi>4ls;k9wSZ~)HjTlb5(tRx^XS%<8vQ3qH7!h1{sxG0$ +zr&DfwWbqV}uVTBe%hnjhd{HQp(>?g|`){>{HC617zAC!KPx#8SJ-M*Znc?Ll1Mlh5 +z;U-JuCtPZO60m+ZzueJE9VH&Ng0By?>ib)=+^th)qkH9JsBg`Scr|QRdZu$DK$=laqq3zvwb=HcLzHC)at;~Dt{%*T=!Y?=T&J|2^ +z>Vi$D-U-~1<5fQCwTf;}`iZ$~{a?S(GiF^{tlTo=Lbs?U%aUhp2ju>kEY=InFXKyP +z@LYM1p&~u|_|cl?p9>nFd|Io(k*j;(r7Cqt*iW|LpY_MiH>s35Y)fU-^iYspxmfR7 +zjb)fP7pt_#hIKw{LTRV2`Zy{$HWtOFxpkageBJfODfI~jD@p?j8<*`lsN7KMVtPZf +zd3)m>dlkE~cdnv~! +zFTq7#f_J7UZP0LSPqz}!+yDqZ*FBVx5-Mdchpbt +zoL+y;eb=dqU8NV-*I$@%R&Gbk`~TA{gnrvp)T)Qr(A?OCdjhC1>9`agAqBYKGgkzilUSA~+5(u<4g7 +zzI1H(!8P%%WJiurRii~~j#b@grsl=E6 +zbso-kS@H40ms@35LN6<%$fdPauVS=fFgvl&aix@SLCB%qvaX?p{zrO(#AK8H#V#)8 +zlQ|@*)_Q{D>~;OfLvJ-K{2m_<=UWaiQwZljB*K{tM&cogvS*Xj*Bjx^M +zT92tQ+w{)GWvi^(CU^e&anPx1cI4upb%8tDbTT&Fj-L7_GW`4If9e++cx2xuB+ohV +z@WW1t`ZaGCnP1<(%ea2K2Ra&EN~({&Z~@@ee+PdTHw4zDuG~lvX_W&VAsXe!-Xb_3uT^eywD( +zo8cTu9}B;T{+T>Y?es%!mEWRXTJZSZRbI^>rkKrN{7*Pj +zP5MoP)rGfVZQqvg_{L4CztX_7b;`9P4tKeh?yTASJ&CvVa#;VieMU9&TNnS|%W$iE +z)lQv>j|Km!dB525Sa4c4yL`I28?W)LSC5joqje^p$gGemYn@+oc-H6Fc6zS7OgA+= +zw_Ul`^n2q>#zX@av8x;`7f*P$uY2{^DDENizkt8ofy!^}%vc$7;)`>i@fp`2`nf-1 +z=MBlD!7(z=_t{O^Wu;|rcxtP}$&f(J#z~&`2PVF=>J^N(-uYgFarJzOlZTmZMc@Bl +zcf{wuZ%?lK{-Wt?@|S=4nD}gCzV0fPU3#BnIcA>C)cbUIiLXuUlHOCI5qbyst4|qR +zu$s5P`;co^h2B}a;*3kSQ#y;z^|b;p{n^?r(zSPP8a1S~39C{b|nOJVQY +zN!fR<+NZ5haF%G;%d*w%e^;hmYW3fXxl63C?wd9H!}o8&$zSIF*m(AC8t)PJ{2Mh> +z_pv*EyvcoG(YGCJ_c(jn$|fEwdT6S8?NNK?hq_{ZA7SgKkG8G&@OVbg+o+I#_2xId +zV!XQS-0N9``7?f8S=?fL?_=D;zLPw2{brx`Rqi|x_H)~F&Lvaq7Iyf=xERGG +zQSZv*yH5-&*C`bJ`FCKyZ^y;WRo4y|{WarSUUu<*)WyTo;}Q>FSzwV=#mBC?>td$M +zw6&R`!cBKW*;OZ`&bj5igfA)h3WG=e)e^4ThjsV(3yTYw)>q5Mv`TJ%buDO#&82AB +z%)7NpDf=z%O`XFh^q;>^NioVLFG2B-MA*}RGj1%9ddX$ttC_eUpy%vQ?ncILp^wY% +zwTi#&_L99T_Lo_$aiZK;=6HvSS_aJ`RW@;g27$?}#ExvMUz +z2i|c$Ju +z)Sox)?wL7@w}opca|Ez@Zl3P>O`$&PM1{#ac8}B@ZT1{qSth3UQXG#>G&3$e!yY~7 +zZmRIPimg2N7ctFP#5B)^)uU>a%~A!{EABhmtemY{(%*OL|88bBlRwOGHC^*;yx-(4 +zVmdzJT4#FRt20*c-km+kB{ykObV;=2mw+;tyk)Y2aa*@rFBP;k{PQC2{TT%=ua+0MY`2yPln`xrU-`O8@Mkz+ZlnM5ymbvKHlFkUH{YKU+1@qu}gmT +zU|w`5If&h?X?K+J0{5oREqyu%i#6BZd|r9d=X>HMmJs=wCf^@#H{*^f{PVv4vAxhT +zwO>YDp7W2@*Uwm?ZBhFAf`R(c`q0CFX7PR4qSf&K$N#^^-`>mLyZ`^p{rdKcQG#1qbFS7n} +z?{94HPq!!CaZO5o%+s7UZ<}P#>*%y|{SMYki~%n*et5P=mFd?DGg>bBs?nL>a5(+x +z8sYx}`(DW}o*tl{lBaa#TH9ORr;Dnc-x=u_U9L^& +z@Z8Q2d`CO&e86)*cK)c=SJ&oGTT%DsNWP7wC5PKHsa3ZXRRQw`Z}wNw +zTTN18VP`*ftl)Ib>Gw^TkW*iH|Fz&m`>Ki;=eIc9zs`?(wRD-cU|Zcw@%gh77uc_# +z_TV~8{vU1LnN|hbtZJ|Q7|px5gG5BPFE!k<)!^Y;8!qp*XD{^Tro2$u+3h-0DAM(< +zwsW*ef5)*Er!E9{O?>;u#Ozvv&NhahEb&VSxynHHNBTKfLp +zePPFve{t^`vV#*&gwK|)N!Je9b$Pn5llU2hWd3{JpB=T1pDSxIn!n`0mcw@^KeG^A +zoWb_<#lre8fGa;NsJrqvkL>j| +zOsgZeE|0w0pEk8BZR*`Ks}7`w@v3irWt%oN=*%iJ-pyXxGeW=VuXfU3{VX=DcITR) +zFVjMObyusL+jPq9puu-z>(2Om%OV!ezn)#8)i?F79?<$2U+0h5L~lh&DY%X +z)pyxMx>}dKd-7Dquw-+&)~VaN7Ed16o2T$FH`>fzvEkSa?~gBLPWc(T@1fjQ+r5U9 +z{;)MVJ#8+0mTyW5(#X6vfHpLZ(?@r)ib(I*Q-VS#T*4?Iw!EkOxV0U +zw&lQNg&Xr^-$~44{Pk^B@Z?OV8Lt@Ds>f||+VI7&_Hl6Id-w28$;iSboR916XC0e! +z%Jl6uH&%n?9=*>3vvbZI-#eG%|Bu%ba=K%_>$EM;aPW6}{we0tzGY{0Iqo`6c@)3a +z(WWx2bZN_L$tA5lO(*mIIIh;H7x=t9Tt+@5@gPf)MZ(HfjUNn7xy<~M3ku%r=lWCx +z)V}K7vNC?l?jt^*&!1U;z>#BZ&f0mrS@nJUzLZOtlv(JsJKm40iGIUlC0bwJvn1Nl +z^Xlf;?xI_Mx1M>@zhuGwGL`wCL#-}&_MW#cNl(2JKQ)kRYT#VW#U>sz3oobi{w@BX +zqPDmwcu~rf<&BQDK@(S;J1SDJK4r4ktt1@lL-yQvO#34iV`|sY6<`a+ieQEN2ae`;+qZSD^ +zSE*um4d!j98su!RPPo*=Z!BWQB)r$ZbJo(bSg#PK)$vmgze>{FKW#NzsFi^E#J{H$ +zj=1ZxU6*h;R~CL1-k#luauvvdnWXYb?@tih+rG^C9r-`!_1rZJjzlfl;Wb08^4yFC48HI7 +zv$Sqtx*m4%w8O%J<4OYcsZZN=jad1Y9#l*?Q1<7`-IY-@{$|S^4L-G6Z}tk$gcYuz +z&$2c?Up(i1`3iqAqm;JF=j$wm<@c|u6?Bv1cAIzm=al$PnI{`>PWas@ld#;;Z#~fJGkxqjW$PE&=>i;sF!B?Z&P +ztCsRLZe%~w==-TwW5L^?0JhR1O=F0o3*H76V*MARxZ#F0DjCOR{t!r)E>%qZF{U=w07Odgq;zWyPh +z;jSKTLBWnGMfo|Ic|kcj?y14SnVBg86`3W@ne75AF55$f#}ghj2rhCF<91Op4fw?< +z+;G5wfr*K!(UGBXfr0=B8&l%}wT1)%2Y~=30S*?X?t}*xE-bV8FFl*``c|^a?8zzb +zZJ8$+%==#Nx;%3K4f~^o-dnq*7Tior*_d|8C03u~pnbLQ+nE_(B(HjToUnf`5_J2C +z?b4z}$%p+eW+wH +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 +zAtAfR<7VQqEZ(0%W5q&FKV#<7W)70&6pJr`j +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 +z&0(Rd+3%X^-rrF1^WMwV8$AwVe5u +zB*9p#f2g_R;{`!=oudu*cON@ez4`ZJThl{@9(5*b;~p>XErAb~2BaV5H*#yZt8zlP +z-{<o|I*rVf8jw_2HpH87N=LKe%GmGzp(!2_UijP>i1mmI;oYz*S)M@#UAs* +zsdpTI=&=et%>Ti6@N7q+mi}IDDM{WHd*&?RxK(({yE$cX^u`ZY*S-)uxXR*|%-XoG +zT}u}v88@8EkqBMKI+@*BaGG$%Lazs`TXjPX7!?1eo^4TNFH`PZGudWG-qgL~+tk?J +zHLeV-UiUg{>9!Ahn=Q)g7yel9kH6WzU`zk0*7F8!o*HlHu-s68EKV +zzpX&?qx{u2$4%J(g>jxecj}$_w&hQ^3m*5c^PY2w=|Ju4|1;-Y+4od9gY)fe$q#a; +z*~32kU;lvV>*Vfz#viLqw+9qlRPIcEx9PLv30-|Imgl?IJYMis=yYfKCb>s1qq+8f +zpMF2_!?gNY%MTTC?Xmq6By%A8^7Jrumfy!p6ZNk-pPTr8+8@?qF>A|jKVM^&m^1IA +ztoWHHG6q%);-aO5Uql8R+`5!utElVe|FO#39aQA@yQRp_{N=BjH_@LjV8>cr4~Eof +zsdJC|t_bYjy|X27YEgdmlPila7N2;2^5VxivPT$8=3jm3d9VK3p*^!CtfF=b-Mgk) +z5xpdM|NY#*Kl7yTtvb);?6=TZyJL5~_utp0(f{RUYzQz}lb4Mkq_~T# +zEA*9&1&SOUPv@TYFT3S+Z}s~fZ%q<{cjsiR%bl_I@#a^@pK^b{JtcG!kA8Ley4Lwq +zIQgYlJt(g&{S$iMZqATBbh +zSo!{P)PMiacy>cp;LR_&$Cfj;h;F;E)Na->(ZJq_%`ZaN%-m|)ytQPpO?v0$vUfh> +z6IY5Z|8quS_K7~T;Dvq-%XGLGKd8`+N~rqP?P*hY=(SGUnkxO|Z7c47;rSp}bXu}v +zrN=IjEABym=O12b+I>twB^1&B@LC-nl9(-!s&Uw31 +zM=)}W*28;SxEiOv=UrF8xX-K2!{gUht-ZYs)*{urQkquGy3xq!cy85+Hu*358t$!g +zy?JiURh+=XxX)*1`_lTeCJUe6$jUm|5GYh>STNb=WN+Dvtb;%NFH1Qy#e@V@r&>jX +zPi^?H@>*PaNUtxm+Do402OE-{6fgF#{Pr(&E2sRM8*x`_R%EM9Z@RECZmLzTNB!&B +z$)DCwo?dq9X052xGsezkUA%kid_PL=*zdOWcGm)*N3Bche81>liPv^rTfgHPhw{{q +z4gY>_kK#Fq&>|+B^}+yi+A0%mAiQ%x6ZvJ +zcfL+i)uuS}#icj%ve=rxr1>YMRfNt9sL`LCKUMm6LO`C}^~Y6%4ZWrZ%gKOW6cYIXGFFXP!pAUPV#%9fhhp4PAE>*d|L0Sa%6a9$s1c##uvk +z$$`o19`SHb(5lNkzF08phv$@CT)#i@{Q6Mpa%7-rpLY +zuO6;gF6FFvz`u3dyZeuSJf9}L_T7`k>Qnb8a_Bb~cueNoVCL)De>rV;f8d{dAs3zr +zO{!|5uOEf@6nd!kE*JQiqGzA0wnfIn>};Bli|G3!^_ORz6y#l;@p)dNpG!_*f34`VyA%4eS)=Q%fz)Jx`VuV3ERb4tCmZEl@W^rAZAQoXXk$J{i39tWq}-VG&+~wnABZwH&14Tr_72+ +zvma)3=q#KqBV=6UapjdhN5-v%o9~`3iZ7VeC1xaY?Z%bzyNfF4xoNGFpPeyF{8Mm{ +zcn06E<{mjk&C=db<2O>x{mT#7g_*pRWB7SWHssrb`*}GZ7rKT$d-IfYv&vKP-v?SI +zZBw1%a76svl$J^NT@pRNsjk0w_)Pt8d7G9AWd|e@Tb#Rh-ZIKa-!-disfpna#|6uN +zPPA~{P$~2F*I6rH;nj=hsj*qlbvzXy{CkNVbJ8Yl!(P@!zb8CdoOJ(SyK$Ju)!B-! +zLYMY4-}uU+dUkf%=J1bQLYE%d&7W8M|3+)9e39J@!v^`bNF{w@Q&VAc5 +z0Rxq@rC)X)v%YP&Jop=@%HQ)mtlnF8^+`O?U@x-W+P|ptz1sRkNA(#e+3l0q%{q(a +z&h+pDjJowb8U@Oi?>J>mpVykGr}Jr3xN*^*y354#^-ouwxj`Y#g3?C5XU|WW()Q=fyZZ1eCR?AE=^tsC7S(^> +zp$pS-Eu=tY`aLO!-`okQf2P~-^jQh&@1+To0AtJ +zy2e>z^7RML!kcdiC+=#xRv++;^(Sj~l2hrK9eYx*S7={5QmPQKr}=ZT?+eB3N0(f3 +zRl}ET+qCSa+0iZ2^A@_9HQigC{rq#3@Y{ +zwu^E?s-doZYtz&Nzm?r=`X-XJuggOwAVT~*XVFo8p@RZl(YJ5p25q_hWlD4X&z4W= +zE>kKwA4;h^-K^Tg@T;49!NnTJFTz618d<3fZ=2Zyu3ux2njr0Pajiwez9q~WIpqv< +z{rML-ePuL}S8!;RV#&~VZcv)caUr*dVe18D2kYr98Xi*_YI`{Y8qFAg-4I@Ip@nIS +zk*32|OV*6ERSd4nMHet9GHPAdaR^tdk8UWM!+oK655v=s;tM8nGK&-&I(%1T7V+E6 +zbK%|`#x4!11s7K^uDW3Au-y3;gX?dwA +z60BFYEol%-;?jumXXI5D4cNGfX%?&Yf~Z_p6Vdezt3<^v=%p~SzSUV!d4)+UGTPzs +z0oIUhI~&+i!~+g~Vw%;azo6nT>z1Ab2U%^N4C(qK4OZEP3pQG?U0HLYA#EX#M(%V* +z-6fI%kFA(*ahNPv*2`uhf4O1Tbg2sgYZz7Enl7kKVa|%mb@=^&EoA-O2DQi10T-K? +zXSG`_SRl)8(qH88HH$Ap@s*+n+LZ&;@+7qIgbvlN@{f@5ph +zO_aYkyb_hKzhLx*vGuLpg61#GS>^Q(zZp2LY+-DCmaGu4SBNF5&2hmRTMm;6Ee@@# +z1u~R)8o9PBUg)r4(TeGC5T3{(vQ4;=El6-hoGz0tvvR=EG!`jo>BdttlrJRMFdcpC +zzM!>*#~!N$++M^I)#0_^PAsR%t73HXc{zHnX6rxaE2u- +zW|o8WM$Rca%^Te&39ra3WqRAJ9&q{_%dEcn4!YbT8M01|L1h{jN<~<;q8B?bJ933= +z^lVH^)(kjl#46Puyr80%YfH}x2T^U&4C#E=vt=e7k5r;_;V +zdz7~a9$&g?>-r*t#QxV;SmvIR`Eb_9pmvJE-q(>C-!^gvD@rWd=r`k+Qu%y?wdKe8 +z6TW|yvJ+i4w`}gowA+7g|N0m;qh3J#Tw=xjdnCeZ&7`}299Oun5 +zH=|6VVqv+Gr6QZr)7FB9>Ho~w8#!ibEj3pZ77W?5^SzVW^7G&B_@(jO?r6PhzB)wJ +zDE9f*n0k+OC+b7my8esJ{NXPB<%n8z+tRafZ)9g)$mnfv`#-_QUuov72I-S6ij1$n +zuzRV!I>q1DEnK-R!@=rxpXSGk+LK#+9j6Hy&6Mz;DCT$}rHbd>#=WL9e;t={ORZJB +zcKgktQ^n>DUp|j+uza2QNoH++U-s;yAJnfg +zWK=OMRB3d1Z5^n8L1gbW@fjMIwmsi=ca|&H`gcAe%NL$ee6nQs8_%b^0>oOqYr+{c +zV!})E3z}PZd`jmLa!?T9Xkuw*P;?MrVsR9ho_CT_uwHplsFl%_{4|Y46Ii}YlF|@e +z#n6-+WaGQxv9|(S;+xlL>D3+o*S!pj)7G0d?|S04um>94Gw;gwt?*bd=aia=*Zav9 +zd>J#ZDjm4zwDOCDTal>Y-IBwz79ZSv@1T#awRry2E8@GI^EJNOuRqJyQBkTf^^BRQ +zkJrJ_#a5bgDmMDn*EOb!wtX}3=5Wiq!e*~}qlV>O^Zc2|*ZbT3UnS=j*d=qP+}l-i +z*U3T?b-|_!8R6SLW?r&Xzsyvawbs~c%TD{E-bpMj$_}FUvaa-{U6x&1%)xtOF-za; +ziT^Zozh4k2UGl_Jy`SfE>jTqEGwvGe{mpU3Orde_c}i5se(K6QVeTN03+z?#jgdPv2X=gWk>Pu?uO@?q%{ +zo&*=Oj=xLu^6i7B*e!58BFK{LT`xKHm5cU0vtFrJ_Lt6oI@Hd{HEn)s?{mkt`Ksn0 +zr0>^G`x&Rek}^Nli;1~G_iFme5H-G=jiP@Vo^Af~#6v;(r_Ov45eEN{k=G*RLOw)p +zTA)xXUUfdmc6+i~^{2V1nKgWe=Lm4OvS#}5|G$`|IQQsMFV@q_lT^RT#%?%ar{rB9 +zl{$6aw2(s+iY~Al8;Ghs*P3d4hFxOOl{FT8bK)}?x~CRI$h7Mpk$#LE}GolSK`GS5f3z$DAn%7KU6?Cqr@m%eMW3VJe;_0nfXL1%>t`kB0O +zX=j?wf~UsB!%4W27A +zEWaD?cq5>fc|fI^=AY9~xhDCJDP${?{nsm|7Im3PrO8#-zpvq4Ze28W +zQqj~oOM0^}ggRXcb^2S7tiCdPKi8xWtG~>%&uy5h^z~8U9+9BF +z{rB2tdhuv`@@<`Gzs5!J>P8Q-riiLO@qZq^OvdZ&TLc5cUKNElt~y$CWm5gVP016! +z@7wWIZ{`ox4e!1%T=d$vZ|<=J&I=DMnfgSSS8wf<&QqONTjR}Q^ke5wUlql)%g%c0^u&7sn=b^{G;y(|e|Tc%E=cR=)b8RvD+0~V{>FA6?OoO1X_Dud0h>7qLCW+q;CJtpY?>sPOm#SLkH +zr#0F)x +z+g^NFKj}mLBt}*(hWe#Pm-O6VImxh8snTbghseP{;yD{Vd8eF{*5KUCY*coH#c`#; +ztgNUfZs(X(b(tyxq!zO;UDjr{+(*16plR7ki|%_XCEAum>S#K@T-59OcEzp6Yc-R1 +ztXy>Qo5;Ig?UQ!89A*wQN(p(S;AK(o!nZLa?^lOV+^?+IvI~9sOWWD%H*Q*->&R8G +z$@s{bDFyF#Oq6|P@Y|~~e}m4sZ_0;j-L3fMTw=J=;uPMU!sJ}z%K5h7#i`@Xtj&*p +z309kbU-j|8$%3;V8SZ+PJG*NH9=6K%4Cp*##QAj55}!|@Yzu=rF8(oI^gQLyV(XPY +z8|OXYUOFj!!#06Cd%m;^p8BiwL9Mx7{p=izsRBh>JD==2n_W5iPUDQ}2PMSkvrqk% +zFaC7J|Rq)E*xFB9|Oo@^4{LbHR&Mv-b*zF!3zZDag2)p7hC}zEPFSq(8W|-^vk?va&w);E5nU71uL{ +z`a)`vO3k+prEoq@H;FtYqxU;SleJa+RM5VsJe_*}+n)dAovO;L(NW}R%dx?SBkGKp +z`|*ukI|STg+-|l@$n-|8DoMS`^HTas)w9J%`~2py7L@)Ay%C?zxqarVh8BODrAfBl +z23M3*UW6*n^r)}lIeoUvTD#dJeM;_|`z3m>mpFU7x=b}#wAAl~_B|>0Vu4ag-Gzr$ +zma~^^Nx5_G#TQ;H$4f#baonu`1@C!z-)eQ+8?f;Er6A_ZmsH%Aoxi!|$lWb1Gx?ux +znG(Fk#zN5V@2s%8st?xuGmquyE}6u4W!lywfr(qPwE_*^22Gn`RKKW2=Zzz$d+=k+ +zLeAU`N3H~P&AM?RXs(Q@`jQh{d!(KR=m>`??&_Z5UAeGk;j!{>B0M=K&&BA5I{n-0 +zZN5f7;nVEW%p#SJ5A(QME=ci(q=j)cPp|lQ!S&FqS2MlybmyP2meb$5t)XGhlmp9j +zQmih2^^5y;k88u8mf2r+?s3tpPcF@Vw$yKf&eCT~gU)5Qeimw9npVutuz30hHya-H +zy(!n7L^pm*T++IwZOIL9-+(=}dMU2wt~31Dw7>df$Vx}P1?v1)qx(LH%4x~2>9t(? +zHp)26uUCKJ(p=#$EzxVw$!u@z{rE9tuU!qJly&@sUqKv`%xm82Ur=+}l@pP?XL7w} +z@{d<+TFJ>BHSx3VH632?n4@V*drzRk#vcxs`@b0W9{kn4{qF1=E&H!zeo(t=+%~)9 +z%%YqRv#L~h^>)~`Ii@q$&Hi}$|I!m(2AlR}EogJ*zru2eZ3|;a27^IRL0*w@QH#}z +z$MxXT3lknZIN>4F=c2UHg6{*rvVwwu0aHCYQzK|gW`cl&!VOLZ2@aMf2VqBsMu!4H +z4!PD&h2&dn7%yI2x;<=egQt9NSfi}?5`89}QoUblnum{E-&rD6^LzZ!kn +zx0}D5`p2=*jXUn{#%=@N)dp2Qzo&hf{;<#0iuvb$Us3lJFDK0NFX3QzVgIkU>PO$k)#@ +zE_dHnpqHU$vGcOh7fq`@zg-KwxqJ3&2+hm9QT5zQa-OSvcRAKL91ICP +zU?duOYMHEd$ZY2icIz+Qy649yRBLd;$c($L{8isxPj3fpIi*Y4)g@PM8b0d`b8@@; +zA;sA(t907wn6D2foyc%My!eEMw;E67)jK-d68|?TNGA5^*gaLtPyW*y*vL88KJog! +zDJN!Zy+3covDEq}H9Iz+*4VSK#^b2;)U7%vD_=1euT?5#RowRRe~;we=lh&jcJJXb +zzIb}mxt|gX1*MW#{j`sJSe@bDFKw{-;4&`{lU<1twP9Uqu8W(loal0UdZ9JSKx(H% +zubZ24+9ZAX@Yo%DvM$@i7(DJclJCRRX3{k2*c8dkDVE;)5uS^!>c0g|b~9jo(tJrn +zv(zens@rL=#V_kkj_)!lij$gap031{B6ab|w4HM@OCCSJ95GM(*Ov;j%NmngH;8HM +zG?9G%kNZ^5iit7mLCgQ$U+#8Tep%5G0W +z+_!L(+lC&m8MEq(*GF%4+whvF{*OFUdBfJUpL-szb8OZ&Ul%z4Xk5l=^;Hq7_q~?x +zekdK0EFt~YhaoB9#y`ZhH-f;Y+GF~bb2}+uvhrXd{^V_|CIWL +z|EeWI?q;0jWp26K5whEPLAfN?lDl^~){9-b_@K8UqVCFFsmzHBqV{}pn;WSkdEdt| +zQs{r2m2GLh$nS*#GCO}ueAxPl#cT1I<65j+O<%p2KASenq26lJtIKEDbe1TwFj-{X +zn!?z3ph8uopyX+E<>3Ppf7m>J9yFNK)vqSI%i#rS5*(AFKqj^>(_x*6%3Z) +zKWsHr!h-)h&O71gT+YA0phZM4Mfsd$->pmU?B}kPer<8drIvr9lT09^$a?eXxhd5Q +ziA)9VoGp(u%(@mIX_(Qq*s!q9bK|eWZy$HvTd|_+tcBJl;kKr%c`-VHR(*ONs}Fv< +z@qI-sTSP+rRrTr<6Il`rCMwT}D-2~wxyr6#$rbU`PUlm_j>m%9PAeWNJk4m`VBsrh +z(#mwmv_R%maDzB5BAAk6g)KL?DfDG?EX*Kb0p?p|JiQ7@8;eM{F{`6q!gE}3Y9pu +zMft_E`lp?eyGlIvd}O#<@px+Dv-ZiHi&RA)M0eT!-hbv<>{JcCjn+xbazFQ4ANr*x +zzfa_!a_FtJSxGM*o^i_GU$6WqSUCEi;QoqE6ZS@T+ecipjT7Q|+DtY-j%G<>otCGW +zFgI=MgQ$(`8J4nYYb0~2vIa=IGg(G5%3oaeQujgEM~_`h?U!-|m;G>aTlsF^#p!#4 +z%xhHhwzIbwFxXDj?{`?^5$}_)xc9+qah{J-1>Q*vq6MEdzCRP({{B}~;Pd)GrZTyk +zieV974}32%micYN^w%cJ>gIz6xvSA1SHDOSs|uNMpnJ)=S{FrjXRZ{7Q^(Bf7tYwz +z^yA9LuDNmt9p<)NS}0c;*uO-1|CPlHXWm#Lrx~vOX_Y%?Z(_!3_l2w7=Q{D+*x+57 +z`1RW2N2Wpu(C3BA_4ixn*H +z8UCDoY}GABJE>dpK58Owr9F0wwwmsHTh4Z9arLW*x6&USJMQ;jbJo+vcerj`3oL#& +zHDAtGcB$AFf3ABkmwpvYyEM;${gclrrZg8D&c93N@2GgUtAE{H_tY5OyEXE?weq&v +z3jB2<^$dP+Z?dm@@~JTLQ})k`Jb5}B=l`7eW$TIwbs-EI>vZ{w&n;TKb?KDY +z)!Ul>9DbNKdCj*+{a$Ipe9nukKD%%Dx!5`D@ALixVRLr#+>+=0$*A@*GF4E!N92Lq +z4kqCbB7Pfhri9EqwXs`{>AUhY%Zz`bKi7IT2`uF+eW}Gz?|Ej8@W~g+j4C3Z>;kXc +z(HGvbDOLVY&nK=|{$aO{?t8{C-Hl~-^4|~rj~lLp?)2lD{(|2_fMW^U4H2f3oiWXB +z3YxB#=am{=W*c34Yn8{8>Ff|7H230}DL(xr!5{aRP4Ay|`o;<&hbm$Jt%jvxsOxwSd$7WKk>5nge3>s|+L3qStl;*n1g +z+AVpk@^g%~Sbumud!x3;Z~na#SYP(Gv+H`Ke!iIPBJW!Nms{v-@t>BbS#}3@woO~H +zSf8!qAlu20+jEZHdb+r&@2po$2J4qcY6n~F9tgmn)TY&kqT1ujhtTJPjB^U0arle>MLn${e>F}G}C`dd!U=}T0d +zD$jjO;BCFbfADaC;=?KIGoQq_E?GV^mgNqYXK|~`|7i^sMNuhoT9ThNoB6~q1A +zYqrh2?tH0CXL~yf@8yMwEejL&DGHd&@l^d)ocd(D>Gx1Sb%{8pJ`Sb1hIbxZ+5L8V +ztFBv%8P}$Zo%`+jiyB?0@Ijv-Ue%UC(>2mdl`is=AB^g~T6OPPd*P8T(WknnRE@hV6w!9OsG?<8npRqLv +zd3CPjlG{P0zk*_%yhkQwd}`~oJ>}Z;AmMk(#Hz!_^^50no85Kw68=}CcJi>B@|UV* +zFOr%L?VlUlqw?Q5Bl|?M$`?bSdq3h%dh7~%Z_GG-BAX=p8IOedcYNYQ&#Q{GXiIE9 +zvn%Dton=;m7Cmm4&WO9u+?M}+-tUx0XL^@hYbi8J^ycmknc*`x@_fJde2tdc$G_$) +z|Fyhyck;GH%B9`)g*MBxm@7Xh$8P_;-S~6Hk0T~+x-Az~N~id-&X7H(EXbR2@|^0w +zFTNQQ7VbF^+VZi>`QCC?=4unG-xG^O<~06P{`*V$?Zr5i{~o*RmwZ1w$GSy2XKUrO +zy&Hc!F6O-F$9lcF)8W$Z|Bo{I6jmyWXVjMNsb5eqVM>Nater-0#nk-K$8K1_Aes!#)8BCE*-_UFLjtmxcbJFGlmxun`=Tj|Gaz0X5la)YQC!I +zpJ^dB1}5x9(=9d6&1qRL?>c+(w464v%wyYr`Eu$6758j>=dum8ET^MlH1h7-BhK3u(|JM+@9$^YsZ!i);1 +zcW9jqdgOHEy{Ey0$q^qs)oX+Tb{YK&o&7`Uz5S|=^KWjqo&U)eWb^&jgP`nCSM9Q( +zW}f!`7yhUCH#2fZeBH>lQE0`N%DI1=9(hZ~>=#%NmN~`IDy(OE_(Mj`dId)g3#Qfv +zR{?=Xf__%fR)UUqKP~#2yr-DkG28L*LGj~K*PpyU*=7CH{ll@VkN-~Iu4t*pB2f9M +zPFI!3YK~3S;ceU-^`AU!JKR<=LpjWHw|(K-4+23xX4-uhi$#iev^s9&3A<-#?FitXlWeQ&cuuE}RRCT!f>zc5FvYjez-neW(l>J@})Lfp^%~5x`pv&>3+ef9WT|%lwg7TBzTov~)%L-Lo%XUMiYX)~sVRLOn +zJ^wWZp68p~m2aQp6x}THz^Jl!=bTwI<;oa0^t$K0;Ystj}{!8LIgBsUeoMqJJzID~j +z5T0zWs$4|RKg$m!c# +zc_eq&kK|oH>M!km8T5Zyc9-VkYeEkd3-n&ROe>JwDE!bkw5!nQxqzJQ{BoiaVSF-;Pe$)xtN4eZSuC +zMfon%b%H0zKii^m^@Wv5{T;pi*5_W_$z>O2 +zNiO;S==44VBLvyxBw0)V8 +zWV5q8yf0Aqe#G295AFN5=XR^qZ#uX84AZCc4ITbWF})vu-Rre`rA$Fg70D* +z_Hgxczg#p;;=brXhfk5Us;^IX_B_7rzbojj_g21TDTj3Xm)46<;V?f|f8F1b$EhjU +z;Sle4A@-fqvZX#+S-9K!*Hz2$?s>&lWc4A+pUnVGpFNt5@YQ381zV}*83N1SMQzR`oL;gkBU$!&ih+W7js-L-^OLq6-_Bio9 +zqU){HSe^5N(t_enrJYzkKjQC>TZ=-DT70U1COue*Ta{UMTO)hguI!ixbi?~ +z&l07aNlO+9B~9Yef8nXcHepK07njhWK%PWT*1b0;afKc8*6K@@RTH&r@zJ_6(Rk$! +z$*ds8*;_naOPSS0ebfB3-1_H+#F$kEeRTV=j)~05L^1F +zrEp4DeQMB>kUI)qD<{P2Elt{-;l&zuSyS{NYlzmg(V +zTB~~2glsV18WgzVp_gmut*Kq^$HKMLRwS&9NIw#^uvymIHA2&ywe^yY=w0qDAwJ78 +zSN`Z+v-DBH$!T4`4(f{Po!lP6BUrf7!S2-3MK2wucWtTPs3-cpb9cxaqmMxoO}+#r +zzP;mpbos^UTue*jwSEaTtem0A9K3OtgwN5}lMF;JwN +zE{+9JySB|KQ@*CNsQyvCHCNxhZJ}vvR{YRYS}@_oqQ!1z%{(7uj|HSnU`({}?&0`x +z_jEQxfR59-u()Cd!+#0NMn~O3T+Ea*%@)OM5tQ93_%}`ZqHG)JEOJZNU +zJ@HgAStN04?W*KL7y0cI53?1l$SbZ$+2nTPf?(!FSJgMa7Z-0W+6J2EQee)K2c&g9dw|>5g))_YS#VTFz4blp8bx#B-xSM!2CK_+|GgFw_ +zxo&Ew(Gi=cMuG-=`?_a#ypv%JpUOMWUdrcB^hIN9(|y8`od0gQ+6dlBkTsb1LdM_3 +z^1XNd(zi{_XUrKCGBYzvnnYK8dafkEBE%vgB5}4*g4t1m#j#GvLEwg?!a)TGj(Q2E +z7KRQ11&&50B^Itu1(#-%m?XDeMy>bjJUFiEKIcB$Ww|kM1K*3o5?N9Uq;oAlYPCO_ +zdN!(b=E~Kg>yuX3SAO)$6g%#J^nOoxsO4|%nytQU#v*|q1p|6C9?k6qb%q7N58@OIY>RzxvX)1A^DKbQ(CO +z{Ehv=sMN8~T~v%KS*~O4PaRek?YRL(TRxuaX;7PIcXe)hviOeAezs}{QX+QWpZ@Q{ +zA+eV?_r2un?k|6Qxc{$R#>2xMKR4(d{4J#={bb?))N=ma^|7u87)$NqBz|^2WlKrA +zyKejcu2~V+yguAGvPoH4P<`4_!OfN%*Qi~wZ&nxE@0ze&U2O5Ys6BQYUFwqNPPUlZ +z=C0LrZN^*8GpUd-zyOt8s99UwzWmsT+N!ZTvTFW5a22-as3sLn`w9rqWF6 +z-X5El&A2Mrc1*pGdkv%d_Nld{Jr^#R@a$*5`Mo0fNa>O)k9p$DSNRBj+ +zabyUExESj7iVJEf!_y2bSAB0T5){w +ztiw@Ov!YWPr+#^vl=9W*Q*d>0vf{P1x9Zg%E1G+)IAW5LoWHqu7D(&1_Z0Hv3Cb5>GC9 +zZ?cN2?+lKXQFxxz9h|xYkG|{%d5_N~L+K$D5n#TR!%tJJvlqacN(@K>y1~ +zu4OWc8y2d#z0BSaR^O}rC)8rOXy5Nh*H?TBlh>>2ywf}5(wgEhUDD-$d5qF23)erU +z3yvm|z%&EeILH*Qf> +zp7!}_h~>`0r!RIVRK<2p4OGh32-NwvgmcA~;~in$FWY`Ep7P+9+YHzGm0tH(YA7aI +zuIUmhT`N27#ooPf3luaiPRKs`$3>+giUf9}MK2X6hds%)w0%n4z2EewtvTuEWO +zwq!B9f8u^Il1IaI=8WfFFLrCq{~fpD@~hY*caCqK$l848`!SofGI0Xmd*wB?8NR!o +z_s^br_paTel^R!X+fC=sDy+7>eZ8h$ZP$;j`G-29)YgapX6R?&o&U{rOW^C>oR{nz +z#p8P!7`OD_Pu{!vq)8a})1U+UuDzWwp{7=Rn_N`pIB?w0d< +zWs?MyL9D*r_*M%By +z&RZl~Wi{*3-KDDH2XaCuvPkScXPoM}Pw*^0DVSR4gd+&h#PM7X=kvbeeM +z{m-a4@bScHWpVjf)iw8Q8rD8-o?>}a_f&27(cfniopdJGZoWIOQuSf@D%on*faCjl +zJo;`lSL;PwU|?me{VlcdRl;|+!dW7wTaQZ!uRn0NweN)4i>LJ_OLW;MPWa5i@AuGi +z!hjFV +zkusm!KlV8`EMKattt0sP-q*SF*3M_wb$j`XIqtqp^Gv~S?7vE$pWWT?ax>Eh+b4(Q +zS}H9n4qCrdzgZPBw<4XdyCkK+P$?Qr-1)txg-`UaQyX +zyS}gl{9t<$pfclV+0nW+OwECj)n;j>v&wSSPR4fe-DkJHTL0O)mf_BSyR&(j&NXjY +zS!Q`!=Qgei+|BH1Te_WhxBI4r+jI8@94j_rv@6dbDzTxn8)ehdB6X(vz2x3dDsZaM?bVjbEr#T|y>YUB@3T3L)PH9MOUD$Cw +zPxttYucqOjB!VBgonXCmSl(roG?T-L51rPRPh|^xo=>rI_w#it!B=N3YqMVYgbk;_2L*4u0`JWHOC7PUgmq4fEvKeM=U-sAp&ikaL>)OF5z@B8Ty%tlAz&^TMj*Kfmy0 +zB=ULfWwt5p+=YwBBbZy)yo1JUedYI=2x#h)8pNMP)X +z^@wP6wwRQ=WgXYz*r~Jm#7)+px*PRHC|r-}ORVPC`qi6$hO-_y*4-Ft5bK`e_xa@c +z8HrOl^vXvL|exrG^wfuN8=X<9)s6*1wC^n^P?Idh%9uRQ$|w +zkgDB$W4A+N`)sCuvy_D;4NAp!Z@29c3F)^-w=$#~eKX08AZ_{(hCiPgg?)%CW +zk5mpmu2or@wB$kIKk?k}7tRIgRmd^)=>1SBR^*ZU_^j>I>s2zp>q{mq;rDF2#AM|$ +z=SA0Ey_S={O}h6MPx+CmT(n`|w=WldMHa2+{jfNPOZvx|9`H-|T`SW%L +zZQ9VA>HYdbqK2rE;kQ!_PmZmqKVV&$7_ojPuf!Ykqgi`3E?7oqiYRVaqy6(^Sew9p +zA#I5pzfT!nW_Mg6sjFccH2I#lY1e;^&z%}wHU~}}i#yGt^H(=fP%k0y58n;ZE%F79 +z!dqRlGpwJ+96$fP{cLw;fvnEH3KqfD4yV^Ll{p`AFDsH +zeJz)~UBHRJ$A2EoyzFpacFJ}g_hSZ((Z390{+{_Wi~Ew7-OI-Jcgs&VaD5igs;%31 +zNvy((DK5L2=l|A+yK5vVXCC&9u_bIh%$=xc*2>h`Z^{R?qh{>6J=Z*ZV4g<_5tfMt84Iy6GRU +zU01Q;hvN5F>D}{L<~4n|a=O#vRJhY8&D2?KCl;tnPxSH<*cjI%^`@zX_oz^-(?*NS +zm-kq_5W7|R_0Xv!#vFXf7b34MHeTzk9V-xD@36L7A^G($mtE3FZMN`iGGJVteErA@ +zZ8`Zv@pG=#dkLLuzUDShmBlgV;yeF>i^f|@70m8@+<4`dq0RRonU#08U0FY;B2+6= +zzj^Yhew`x%KLoSAPX@RocHEn=xyM<+&7D7~dFms9ood0M#rxmp&)Ro21HhtG@n1v{>mD4(a-x8Jnm5 +zcKx)}ZHoS*@T^laKbP2Pb6u`7{k10W*BTZ#rM%VWySCb$er31+M*7Wrt2j3nr!?J- +zt)1VxNA^ae>(dg~Nk(r^%Bz1-2-+F3XovB)&v+vqkpnfuar%JuV3)_Pkt4mGKY+1)rB(r0kSYhnKz6)ncSzj#Ob9~Qt +z-L02u0+z1iY7c(#O3sU`Dct{5YwXi9MgHBZIPzjn-4MNbW9qe(yV-xf{P3LE{q$#W +z&aBfBm+4pk?6q7~Z|@z?E!r!tzjnw9{}mzFb#G;xe8<~YC(D*TPh0f%R95{O +z`@G$YjvqgxpY_~iM-ah8=jOu!KzI1PJ`rj2Z +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 +zt^0Cx64$zKms*&8#yi5 +z^nA%0e&odkn?kd9to6zJnN}u|w_dps3i#CK?m{9o2I*}_3a +zp3&*xIte~gSL^kbW?_zZmQ6Y0DYxv()-6sAZ7FKU0>q6Xw(P%=d*_V9?q4F#)#v2a +zHfbH6x#FLa?4d5PQ)b7X{+KHLQ#>r=fLw4>c3H#I)nDcptV&(eq8-3d|7^zOS=qs? +zS8p`>eZArL>{qDko<~b0FFuIhKBp{nd%zL>U^|g}5jzBVwnV=O?bxUi#bj$bLuF&M +z+Q)wDw?+#COE*4k*d4dRU`X>qBi)eyC>XmmAeLOmqy&UMaWOT_M^{A)~_j6yqve^=Lkmm($&K +zZ7=wQ%k7hEDC7&8m2b}`<|NZ~;*LTGUu#R}k64{wm$T*LjNUvfH@w(o8yI(|iPf?A +zUt!#n4SPkD+w$KDg>){T(_!fS)Ie#8+l<59LC1}sZD=`@_-cEXqC@+Jx$nOj8tsUy +zPm?o0xBX@17p4uLE-339IUX(U+Hr24R=sPx)8~1cB$%}n9g`O>mQAsBEMwK!wQ%LP +zC2h`0kFM7_7cB5g4ShaWw)6P!DK)``fksj`3#PPxTaxCXa6%wuwda{REx+gP&?x+0 +z_aZUohmn61>-5rS%f~aBuCeWyaCal`1Ir#(9?^Q`55*PkJe3X?6qjwXeYAn&f!j6f +zJ(swx^)J0jO(~x5SiYoqk&U2{Jj>Zld!4d(H?LlPP}a#ic#(><)F-y*SEg4RPo4Gh +zljx3of9a>mZm*q=GRfP&)+>v9%*^{+AmPpA^3-|f3#ONBIXLsM?+T}8&fJxsa@kK$ +zy&M$De7uO`V12ZDp45TF3%2v8Y&kNWyZLSV%kIf*4D9z>>sKlLt3R9PqQvF4nLFr= +zs&Q*-?R~=~fA6wPd!F#9f6s6J2d32%6)Zac26Vov+!Vj+YFW>T`W}s6ey>!OyVRAx +zMb&;x|8MQp@5eonr+%%*ZOPX<9!5I)GV5hU0{@3MWh+m+?e?cW_OPti*7}IAOu^>_ +zwLf(3*<@>*yo0xsOY_&3rR+I^2Xg8;=1fr1sIe80+<016Q1q~ZLgkU8_G_LCX7fy` +zO}@PD^|DzMr)}m7`}B755npi+-gN(S +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 +zgsKLL&k>scC!7Fw(rt +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 +zduY+ZOAO3LL*LzOkzR*N#(bk +z^;~;xpO`)U;;eT_wCRNIXG?*dAx5pU#GjwKy`x&-DpTUp;|)pqVOw-B?%lZ}{q3`j +zZ|WY*$Y`5c$#lfW^-ev@4neuVDN8^G?CiTI7Y5Ar&=F1BypwB6a)a1f +zr>nldkBjk#*$7Kd6s%ypc8EnqiM492l1kg^_E05`^Sbk^{p&KFg+rG;x;jI?dv}L( +zfAxi*td=TUrJuPdZQnkD{ha7e`@pcNO-lN#onNO+P>%k3j!DueJCXH3{mkdOTQ-`1 +zIQC_A=|sn64F7x{Ol~>UZvOZ1&z?Oh`;>KNuF;UW^zoVVb~#%`dDBUq@rtM2U%AO0 +zWjWJq=NafPO7rK7zNLKaM8QnY4F#-jdytwzHH^{oluFS`JYTJIekG_1=EFwWzRP +z@74V)1iy=_345q^Y?LEmbzZ-=PT;${y0B(@kx)@3W1?b3BTSQ +zy0|EWw|#YQOS|#fZ9EgF->P7j+E*v3oNuJE(^N}$uR!PL&*#%sjOts8vo}s%d+hdQ +z=5rb5^M2+A{GM?>EbgnSFz1(~3zm)hDus=viE$i>|9`Y%`CB>BH_qQPZ!4{^y!)JY +zOS^^)7mHJA=*?@kmlPz6<22>``yK}0mgZDjDsS6V$T4BUhG|EBrf-`0y8X90FUx@y +zd}7BwObyX1bzCOhF+J(KBWL4>`iZvvemC-rWm$gKgp2=~v@th!#f-ka?#EqRBqEa= +zs%OfbG@kPLe3^T|C!Q5OZ;gH#uVhrSVNdz5;l&?#r{3x8lD36;YPpAYxrHQ8n6&QC +zk3~^}yS`h0{3-K$xBM~P#s&4|=hcMTUp_TFCgfhvz;tg)?*fgKhv!xZ%s=kr{oSPA +z@~lqH`I>b5zym+_h#FVj@jkfRlxxmrmFC|sOa7f}I`K96?VVj84Bva*aM*tT8QYZN +z>&y(rUFNR~87_tet^Rg}dC3=sX*$(f6SQUj|Nn3Q`(t)?wfD?-ew_-6xtk{6QSp6z +z@JjT@S{-$Z_4iGA*CeYKNNyJsJQ?~^VdjDkc5;wkf>ew9Cq!+996c*~g +z+5OOOr=s4cl4=vdi$BiZUTzoT9;Nwc(n^tq^{MCEmOo&BRr!mZeZtGaJuK$~WRANX +zUz_swcf#h+=jyw^L~*P*;1VZ(aN$g;AFZ=@?yqert-it*v}9q;re{~mcQJ8JwTgT4 +za`KMm86VsNcNewZc=cFlU#>H!AMZw&@Rzb1m5=_NobCPRZ_5q$xBGrRxO`DNL>T=V7)YqxhKem%=^RW|K|LABAt_^EHE*4FELIjx`Z(tg%P +zvA=%5)~^eh_h{;!^`ZxM***w$i#O+G36gm-cSVZVaZTe*Ma-*1Y7<*;eA3&n%1rs| +z3*(@Ku#m`IVs4*L1h8->zF59#x%_vVv)}F|{+$}KZ_)GjFRRNA1$l}G)yen%{U591 +z8qigx?h&ywcBky?=SNmNbDH`(x}G6Gruk3t<9m(e(+b0Wu}D=a?!5F^!T0lz+HJhf +z7IFE{rHch-uWZ%fNtB$lJh1U6*Eg4=2Oslv`mHdzGpT2rV*rCOgTRCX2M#*37*8}& +z=sA%r!1bJ&<$xoHP?scIt8^m^6I&xwBU1xogMfpB00UbCgMb4=BSV3ph)nBohkEO& +zjHQ2U{@q$pfBeYwR?gm#;c#Kg%*I`^Ze|zU>URVln|t=b=e^hSIHdm9cGP~m_c(g< +zl8Xv|c1^R%zaq|od(uLi^Vr3 +zPm@~l(eCc14`q!VOFkNM{+RFkqxBpY_mBLYO@E>vUrX5A6t`y5kv+#&dHH;@kot4$ +zgL_HIpP-2SGtaV2rEdxvTdzuD1*egfP;@U4z};HJ975$6MYd!#gJcl5;J#QYT(waHMXg^ +z-TU~Cbm@zJZBE6dmQELA#Fw`|VmX+))W9tu&EOhyWUMlGc1=#bWkQFUZ9qx=TJOmm +zNfFXXGx{f7E3kgDB*E9tfB7>j*=UV*O6yd`*1TS{_QCNZvsp#iPR><6AZ}{j_i~QX +z-Xz{5E{oUg3jRH_;9kPos%JGqJPJ4YLe$nVKJQW0%(-z0v?$)ZCttRO^K_;ye^I}d_ei-Tdu{7X$;a;|A9pko^4Pj*&5MP{tHLB6Onmn- +zE#q%opR)Id*P9f^qF3Uax%0IJ1-2gBb@eJopU=G~^}kF?e&k

&xXUAEiv4wVqBpuq@SX?V79g1$_>u)%RKQXNsPkBlYxZ*NpFJyVF=d +z^j)0&RG4?CSpAKF4t9ANi#gTx`?#xHV{fv|=6tn#(re`~|GD|@Q~#XT{gluy`sn<_ +zb5EjPzGVJ>@6oLMjTgO(FMSoQ?Jt?0v1IbYnPyksYHh9Q)_Tu+)WY@1`9HPAhl2ON +zIu@$OCAz4-PUoxHSB=|KcE}!;z4YRq>EyY~DlV>Qk1&}z$%#MVyzS~+R(CeUOU_>T +zV`u2eik%Z$_4iHLUB`OaJzjIV{f5HRSzrIg6&{+AX6U2;RLQkgU^3tF(}|KF|Hg0Q +zS9Cgf^G-(;?{OwY*G0#;HIzH=Y^&LI^TysU>o|4%LKtU9f3U3&Pf96}&fC6L^j278 +z>&)Wa2hY?-SQHzUMuiK6?w`Z>Na8|i#Z3MK#kcq+zvR}&O6=>N-YOLEneDmBhBM2B +z?n%e(ia7Fog-g%RX*~~IKNM%D_vMx5y2S>rV2~EIn?EID`90;*`#!f`Kh0D>E4FrH +zWzE*5tt`jCnxBz6JxA>%bG?Y}l41#=I+d=eVYlLMFMpa`v$yk$q5B$(g}ybX>UU>9 +zj_r({F)w3seT{T~#@D>tHcQ!BSCyaqX66%@_}F{Pk5VIs&5WmZ7uW^={k!{H=Ofiu +zcbk5AUOOfzoT%-xD=yzI@QHex>O9 +zYjx!x0$bf2zA~JCWntPCwXDkbwO3!?vKtF{r)E!zu3q52e&y=!ymN-|V){l$sb|IRsB@b@&|yop@<&nl`t +zS(9~s%Us6xh^Bp8k6u%|r#$gh^4AcF_57zl)|c&n(YAPs%k+;YN^e)r&UA9QypSz~ +zNhEGQzY(+f*@eF!_DO9@I4`}+c+;e(3+jWTJR2g!ESMMWn0+y#b^q>|lQYjADUw;C +zJ6}gh;OL$|D|?nn-89*&&AW<~{nF9RG8@v$U+bgHicFupdJX*HFj!{la +zq(b{YS~!ZbZ&2(c&KK!ny#IrQ_7V% +zpZ9T_^o!W +zhJp8q6_zqiiP=A<-+!lU{VDP4hpw8`_ot1mXL`vUIyL*jqJ#CT`tLccJZc(T;^>_r +z;i+}yq39+)Sv`S$ZL^OpnZcduve4n*`iU?8MBMtKda-GS)Lyyo5iUzzXR5R%?&5WM +zz09X9vE5pquP@YivcKA?rO*YuA38!hB=S&8|RsoetK!E9OX6 +zZ{O&(rfA|6J-?5dUK(qf=HEK^e|Cv@uI0UDU+Z{W)=B@X3W)RgX +zd2su7mA7+df1;s^vq77hR-Vj3+l@8rFBhm^(-x_&(iUvBD$P2mD%ZWS?_Yeq)u!u> +zeU`UZ?A{dO#cNy7t*x8?Vz#jxKgaF986MX{vza)qD$Z|Nx+~jz!QU>P(+5^J$#tu3 +ziaPLMPX4?1Q8C-&Bj3uNzdJF2!R3@4qIp +zfn78|b?V!_tK{t-8zfy|_`7RsV7f~D|Jn7vPj$;plb?i2EnM?|>ose$Ps#5Jx1Mk- +z6$|otlHJMi4#FJv(TYlMSTfy>;#WyP!OgOkSrQ=zBp_7qM>uryl$uW<$wx)QS +z9X5LPCo|*c8u@ENx!i(^agT$RRQ2kz&N*}5U8MV`#jDF7coY?`ei2rFvQO>JVUE)t +zp%<7u4|Q>6arLd$% +zLl^b_)=A5w;~zJ1)j#Vi4T!!cvG?%8t^Q#g``O&|AJ#lEOpYO?EYvB=HY +z`jal?eYKic5yU!|@2u!?!Jn)4JQQEISz~f#;=dHp&{;XFL!*}pn)=I?XZO5T=PSrz +z2@2+%C-Adov2|?qLcu4qWgXXN{ukodWT0* +zrrtlG>VPWmqg`o6{?4-|&)<8C*C~H0lR8i2_s?G6Qd*3Vk +zWzOtba@$4u6T!mTf*M +z!=uu0{qAJ#$NTHIaGnyrRjszGBDZy_+F};tu$dZJ49)DPTQ1h-2QPb~xAB42$E92I +zl5f1R4>PFM~qwxA8ml3QcL3{@-5Rb=Cn%))z1S(ra|zT0&9n#`SvlipwC +zF21wv_0!U$k+yXLQnM!sbm`R3%rQU5@_k})x8bh^$sG&th3@Z*3CXDf}an8++)cF~{88oF%J3F+6j`Bj2V^K))7s8q~2zE;83aLIdZXFHh_?Oc!U +zY5w;6!RgN2(YRbUqkHPs*fSTW{ulW-xm1ZU+&Gl2!1nsl4F636uJ`VQ#5%YfuHPXW +zpKd4Vy*q-k_X&Mrb-2%=T6fjXC%e987=2ZjSd`v&`-W$#MM2)x#+}Dx +zd`d+x{B~Gc7;^fn@Jb1Dv(%#W)JI%lb9)TxC*>XrXtaE5W6sj=ka8g-j_EG@y55T) +z<Vqg8r4Y;74n!VxEyW2X3ep4Ta-dOTO=H$D>N4m}gZL57Y +zTO#e&wdwQfnKv(UTpw5H`$Mp{mvi^hR}WS?nY)NpmX#S=t=#c`6GQcslM#h3zpA<) +zi|jh(mon$F$oa4->kg$ySWE6WR=RQP{pFD=DkokT^0G3#31YZ$=-|Vh;kVAH_boYO +zT>3i2$#PfT_QIV$PurK2KeTgU-nC!b=ug!AsSg+XIOs9CGqlt<&e4u9`SIYaH!F`p +z{miBZviaRt4n5SK^eZvQyeWkFz3009@fjyfc66>~p21sk@A|}({nu^8m-QDJDJ45D +z;F!FhIscLHFa2KgV_MUB-nE9*RcUzK5>n3Y&{;M2Yxt2VzE*|mbEfB2J~LSC^LJmv +zzqOnjL=8OJSobAuU-xTcOnv)O&76qMSL-a!FjOt(Jsz#g?%utFWgVlN2Y>L9?6p^` +zv>z~yVAAc_U^2jpPd+(1sM}I$>QX9up&mNn4 +z=AB*soUciJuHV+r+{rur*olS8*+~-X{_~Y3HJ|U1pUug)=E@JbNCww=P4}A81?Tp4 +z-F~myd|}?<+Oz2nUWzmI3Jy8<|K?IzY!IH>QR?&S;^C@Wayazx;>O*+RsFAT-znzzOI##GC+y}ud%aJVpZBUEr*<5ebTo(a%~&KhyOYon379Go<3dg_0ve_PfSAebhDP0@LO|p@=xp6>by~I +z-+J_R{jBSodbpo8>rDO`TXbaEr(f;4PaT6aO&*@)sSQ&%`&c`Uv1#p+Y< +zAM$_W&~5e#lKOi2Ypaz@Wc>slbDf6A9sKR=yHY33T|U*}di_+@JO2_I`>$Ecp3a!Z +z=zOl^N67M3oPJZ3=JqPh;x=_#IIA{uV)-+x!xPrt3f*S;Y~|j|9GP`>#5js(6xxOaO8!`V*Qn{`#wN>@ZmT%8JDeN!x@y+?sR3+&{lLFE(uYvtWX`=}hApA7zp!e`k-h +zf9xA8rh2Ne)Mi8bicY)eD_iEN9B`I%7xbzB{h!O}*6zLg59j>~_@Z5)b42LD`R0Wu +znVjOEF79CGj?j1;5jSH-WbS)W?vO(VxbK8T{s>;V(c{b`wg!v3rue`!;<~+!t&w|o +z9f(s1yrJ;iuX=S$Z>j4x>w7!?FLC*m>gALXmdO!6Pb_;H>#pxsp2AZybwP(+7^H4goL17SHZv6?&q3)$hbKUDibjF*dinr8uT8 +zRDNT5_2QY<$qr}l&FPykr*zZW27{}2KghwmrajrrxtaL0@DvNX9Aq~%!N>|xq{!ai)Z-sK*Fgv-WpC)*axom9Sn +z{d{Tm&mRW->~{{fakuZ;kmh65R(Xqi@%|gj1nb>-=e+zyY5Y~33z+W +zW5u+~txN8EnLU2lVKF(V-s!=udtU37_bd^8zUANST~Az2)wSmbPt3pCX7Twz@tzy1 +z(acez@_Ju&6q`#Lq(6TU(JbuPHeY%Q71Lm&DzdrW46itI?F;1IhN0FB~Ko2TNWI?@z0G*zLzF?*L9h>9QPMY +zi9W6*5FVP;7PsPv|1;Tdb3)d%7lmkc32Te+y*&8nf%VeVYZDGFJgxYdwQbA2j*L0~ +zpC*2Lc;SGJ=%0LLy{unihu)ljaL6O{&gA+6)L;kXOq@T@lXo*;?Oo54%X4Qh**i}~xbdWGOjVxu>Xl8I`wnfp8}?3RO5^hu +zb*IkLFXr>c?3upcmt`QV7p1OcP +zaO#eA-118%9Jnex`;h4|v8e~Xu4BnQ$?OrBtlGF|WsBV3z|8uEcZ`*mUSNswU9YEi +zq)}4RTWFnf9arkh`A!qVX8f>Ad&e>*|Ht+@GEY-us~A~oEYhylnkz?RWP+-hAF?bNTavEy!T=;waXPa;MxH9a=`FeR3cYTY)YXZ6Jd1N+oNE|JktN!NDv4d9p +zD}R_R7BKyK!&oIG>!@qh2e!y7`wD#XC5@Me_^f`Wwe-7SdcCIpvdpK6lRXyc{4y)> +z0L_{FD{o>eq6jrDzR`LTUPA)U9a^yUHk%@tweslK3B+m!&@#%HnmN- +zf0ju7f{WW-y#4yWGw+WTZ)WfE%L&s^F7Ef$StYgk^n&VxEe-;cXyt_?uTJ( +ziX(ro(9$WNq*lAC&tSrDn`E!lGZKHyYlL$ueeOM8|F=u!^h18J^>4TQ<<}|r-@CK2 +z`djFfQ?*O{&Z)-aOp$qHw8ikzvyPd2H!EwtaZB+NJzifU?(s%ie2Ye0?VQNHGdE_u +zx+5BseS1myu^qAd*^W|e_Afpgpx1SE*}IJAbj+ +zB=}dQRq0`vPuuMIKN`hs0(xImKd--e_p3sgu%>3_>e$V{Q}axur&&4j|FOF3qIuz? +zz@`^0v+M7v9@{%EaQ< +z)p|C~16+-cX$9H~*?oVmT9~hrt1kIb$*9fBr&W~yd-hkMpNqRVYqdomPK{zpcl-N- +z=X;e|-+`;0k|kSb@W=Wtk@Mz!|M9+T@XA#`j;AqRDM|RP!}_km^xgNnA@hWb54RQ0 +znPXuSHRB#rS;TZFmPb#nC0_c*cXt1Ix22NDeeSZ>UuO`1d%@$H!c|xPWwMvJvzAqV +z4cWpv^J3FVftRc1-Db7du-(E;gm%$ +z_BLco|Ln=j6ZEaWcyWWFeN-Zoko2e4#tkl?d=~45o_KLOo_fwvEYfMtvq*}T1@4xS= +zX{VFYm-K$A?RPD7OkhZ02xsUuuCLP;oXj%A-Off;YI}qAZRTw!|5wetle0(c=Ch=2 +zEC<;Hrv`#ok-)Z(Z^(BxpiagG%G2iqvw8CGKGb;R^gsjg9O} +zY$eTHH~H1I3q6i(Jf*DVDxk(SnZ46mtZK_6xtoy-in~w$y?T(R?C`nk-&XJz-mG8b +z^>4=1C5wEQY3<*Vs>W46@3zcVrlYChb?f?KIWa(4D|&Cx%e|j(J$0X2%;4Rc9l!0_)8j_w +zMaQ|$R{e=7n%>-Ac`4zWGw;rt$eH}9vG=pOuGY7Q$#O4e;7B>ZxKpQ2Xnp?O`@grH +zzItQp=7VmNVuVj$S&?X^dugN1M<$LJk@ftAo1cE*k<)lCkX-g_NkZ53{8=XqEsHu> +zR*1yR?qXvUF=h~8NI0P2m}E55M27psqb5POC;Ti82U~@N_1XFLS=gBQ7+4v&7#J9A +z8Wtm|d_emJ6Omw+0_>#jY?*VUIQE@nLIcb3U;AC!Lh?z6(J2R+}89aLG&J^$R+ +zoBu;%E`FGI{Qk-2o=N}tCkUo>EoR?*Sx3<0S$6qrhsL_k#w{-VxiV6+ERX6#3>8-d +zCd#O8+8Dg?6!W?Z)k%C4CVFIDUu@HB#IR@6hvF^&xE6{l32H|1E6)4!yO8@|+@H#4 +z)BXhPdSL!ynO~*6ef4##*7Xh-`E2wf_eK_Ledp5m+w@!GF!N#_cg+azkKxM99*>*z +z=Y6!cN>=2zcCVAv3ZDM{;fr*GLN*XL;qZ^}{c`P3fj#8x;(ERMM>Ez>ZRO}Zsh +z)tFm1oO9dJ#C%2Hg&6f#h?j$)4b=)+uf0y)y>v={Qki^>!xcPs`@JWoi1N+ +z_Hsl0ms5&d`WIKIlxal&F%4hUn4YW2+xWlEGB0r(!-eY4pGsWjd8xIVOntdh&0|VX +zDto{J>zQ48+3wXd+HZQVc&q!>`OQ{C;a&1aiWiq~=BSAa23m*SHw)gsWAUxWYL*xI +z?n;$3U-I|3k-AVgvUXeU@8gZYei%GYKsIa1qY +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 +zj+M7ANM3mC^7`%FFVoCtKXRKTxSnZ- +zL4z~j>$@x`!uQTTv1X$~;1>5AnOQm0v^dv`+z<73m~zvc?P~n%iygN;SoJ~{J(auk +z=Kp5Cdq>4~-;$r6Rv*)_wn2I|`^pDhx7wLXHrlBseNbQe*~IkGKlXV)WVP2mnzfuQ +z+*s7lQw4G+E!@l-KeVmfaRg@(}vi; +zu6tt^YkG2@op5fh?b&Fqqs_DStuA!WfB50Vo+r=OTnyqbE@khZq4193Kz)+bkXZ{77~o6yN4+u!^vn;pJL?Vjr?f%gYuzop+P`13-> +zyx`_)#s^#0y;}HBJ#&NFgL$(|cIV&duXjmZ>35l>KDgTH=)t+GBNmsOo +z4_h+ok8%Xz&BL6ygnt{XJ9hq^@VnBxKPId@_;udz3A>iB +zz4YL*milVn0N$yq9vo-9cj(eCd}*-q7;n|E7?&-%Mr +z`mxD=#fGxY0c;EIUX4k~G2)39S?HN~??~!_hO*P=nQqnA^S9l|sky6h=jDHqkZETh +zd1#s`q|OTnFOAS%#~VCb>}+15hl-Hr=4kKe*11`;?!IN^x6Ufl<_#!{H{HGSOjEUL +zcf}&l0TOKt} +ztKkOX~sce_N)>+*B;7=YN-J?B4IW +zUys>=saE*#I_?>+M`x`5pyv8nXI-9kd;7^#cfT*R`1E!0O|^3w+WRX)>Q4tH|JZd+ +zxwl4VhE2ZK8Qzc%J=^nb_Yb}d)0tRUd+&6_b|$Sq`%EWHy{qcp;!)%;5xw?%Uejag +znGDZwDF3rJd1k1-{$rr{)9p)V2S!${F%iS-}t$D__8wJx0>5nF87a!61*JHUzTgScS +zh0mwnaOW_kq_3Ck_q<)}z5R>JVXZCuOMfYRHqHI^aN?d=2kj({>APghy_A(T4!h3| +z4X*ETKFhsMyz=LQkH>8e_1Ya~IK{4#3?um#ys&>9>~KINxPGoR)2I6lMvD$8vb;=cy*5i% +z|91*^>`S@QY|Wm_*RvNMPAN`Z!dnv+(f#U1)P{#EX3u5rH)MRwln~qS<*e|LHIn($ +zn`G*Di>oS5Ilj6f=-0<}{i>_;Qsz0N-ieUo37_@8zRWX>h!#P$-)Y`Fu*UvDgb +zUCv*>kWDVbeQ8Ji+J2|&9+nAaU-LNcElA&Teoesotxd(hIdU34UizcM(dqta{@s;M +zAGLP+ZMl}Z!-`9=if4_XTPsV#KR>IZj#o72oHk8R|MX;LR>QKe>YTUT(v#Xz +zGESYWEmPa9qF?B@SxF!EaXPLc8rQbdDOxtwg6a6B=R1;CjU#_zNo8H@Yu)3Bm=1x8Ah8=MmHP8EkD|M +z@A}n%oji77cPE-WSUyEOziMrViUHGt*i{Pmf8I^Fb9BvWF{^8Nz1y_;Z-(6vx)S&O +znshXCfv(CP*;6{!U0U2)>szAEpP$CsmtolE2w^MYT_m7oWtWUX{u1A~dDZ`$Mm%{FOh8`;A(BYiIQGa~@)knQBzubb|4L +zvHiYF+a9-t?E7%d`0|$5QDS#R7v(k^UNTBH(tp>u4f-&`W3Cq +znkyI0xHrF|b^ak8j_={w_aX}PKHg*E_EB^XZ#p~Kok{rd?2nua-2K@3+kf4A^{&fy +z_I6#rCnqjNa>`wtws2->uF9MKb!y-F9si!6S&&y`;>PFOb=_LX)Alcmqtb`A*)6Px +zwrdvZc^)dP_v71g@5Sp4tgKmAT3uFNiZBdSDBh<3-FnsmeZ>z8T60QX@SI@qh+{bM +zR`%1UW*zJP8#mc_cnxzuKHmOWDS3zD(XzDn!DWndREz{#E%F!VzPL3*Ter1i^1ctI +zTVB<&Gb~S?|NN8vs?7LR4=k*_y}!yx1Rbb)QS)qZ$=?Tpu@?18tco_#tJ~~1&w08q +zYJtiI<_o=Td*WSRZfH#Yb476dMb8;(EA5&6dao+Ic2@S24thUXU`oxCGy66$Sj({N +z^%XqEvb%vr;AF~5dEtH1cP%GN@0EL4e6RBCu_ANfFKX8pyu7Bi&~uTt3y*?j%2F$% +zG}Uu0G4es81o5wqtRE@m}iVGbRZ7aAOI +z9GBZ4vg~d5bKOOgJ7-EdYjq#W|Mx08apB3t&ahd}?rEK^*URGHylX~q#g6P_o9az` +z&2Ebx5q5BrT^XM0e&T_OZbe*V1lxkcleOwS;$l|zI=A3{ks0RE>Sjm0cDdP~`p4{b%_w2jmmKCI +zYuEGQHKx2Xo_~#rst(xZ9{M#?sCxD`wg0oNSk8QT{o7Vqq;UqPc-HNBJBO>UPO0qp +z`e%V$Lw&;KZv~t?-C|NwH~v=Kc4V!h%U=Hzr>4iJiI{6}G#EVDUl=Fj3!>vgqxy55#|eJ&TIWH(bYsw`^x%U`z>em>d9t;qag +z?edVW +z=7(;CJClgrtH}p>hlvBBOUU1uwGmegW +z8}d&|Oi(O}`Se=7>Uh?h>h(WOX58pGARW=)R{gJ_UL$0u(lPH1Ctdt%f*GDpS|{*J +zyu97hYPs%_w)PvVEsE>+PpK>u%ZgT~vaS5Dtuvgm{VZ0l+FZ>#nQiif8#VPWLz_Ug123eUxV#c +z*}n%Xk{7X>S6r!kQqUvmX!bAqRd;Q25U;y2f4BO%w~>E!C07I=p8r0fyWZ$cK0 +zkNZs(Oj&=+a($9u`}TXs%{g71T*LymWo +zQ7nHZqr>LJTg@M5{NT5|-9D#bn~2xZ`Z&$C^BSTOuH1M2%)TXCL~@htl#A^q59IoD +zk68REm{7nVIbnO@`d>d6&zbsQzP-WWvmyoi{_89~!RFJ#WZe1r^K#pdC!93D{?Ps* +zD86X2Mt}M2J+oX+uI2o3`tJ1plF}%7?eg-hbH_FwZ%N!|b?MXTd39fJ6f}u_4Jl)t +z9mP{-DjlG||DDyzQ2(HlI>n3&t!KRzYjpjr-x$$fW1S(Qw=ms&cHIpJ{_7TU+H=>joKnyiToaST7F+r}_O)N=%Ebv(52R3+=u9pa^5w|u*kRlKqG-I4TG +zCMLQ0T3yk`KfNyBiDG$hy=>mBm|uVYRJn&e{gs{6rI59_bIRj;8eanLtEh1b@=x6s +zv+!t()5W*COS1yHnAb8n9z0Ny6PNvpS#;vRx)@gfzpN{dY5tzFAxF?mM^Nx_){3VV +z<^d{>o8A>Z_F~>Rv)nL1r}|M{vxd2O{~JZ5Qa%du;99C!Gu*RMROwV+3!`mnEXSxQaBgr1X=T;0zt_{be)|CxjBe9+wT +z4NvR$D1NNp$yqhQLO4&kZg%&$_cE3MVDhBscJPLLCjCl@hD4lrflxM(~X7QiTXZk!hwDA4qv;Mj)&+g*qURU-OxBolp +zu*Fh3X$kugH-Yn&pMP;O>+jonOT>G2Y^FxeL-t!CX@*|Y%IfDB^55IM{)VK9`;O}y +z{s?UAp3>(&`*}lsV)P!}mo_uyzim0qSQeUbcY{Udf=^zVtzqivH4MkwSd!xQH7Paq +zecXGYo6U3b?6ixopUb8oi>4lW&{VxSs +zYp+icX5B$sF?F&;WOUae=)49`F60yYldG4**bM`UD?B59)Av+cz-+Q#=#kz^+vj0 +zXj9*onx96J&O84!^v;sJ(5>7sGbvkV!KK=z?9N)Of9@>cSyCKTdVP=Pj6-dbJNPp< +zPj=q9;r9CNyS!dBUeNUueetj*McwqD&fbI +zZuK2Y#dXv7iuFsDi#*~wsGl)CK$!bhti<(&Ne%T?dkx*6XiQ~4JNu0LqR4w3n~RiA +z%{k4>dtl|qE$_LyCFZ<~-g?@#f;(pC7uG7-oKH>jOdNzK@+NocKR9Ty&n$gLbxPgI +zb8{2QWA`buWgisSdq%a>)jvW!zqOk6_IlR8AzWNeWqFfNiC^&U?XR?`+M#n|*ZhQl +z3q5C#vah@8RG%ZVgFAFL@AeaKGneh=t$J}@GXBDsOC_a!@9LQpwBk309J&-&c7aXU +z<=y6TjY$kWfB(6iJ6yE&?8y$VsqNMmCf#`*<~4yOdFkfBd#}O{o|0>4p0@B}hWA4u +zOXWJ&t_hM1&-Q=Xqmk7fJda1-Eqda2Yv#?{eDAzU*|ykTmGkV&`dfW=>N?F!x^7=| +ze6zHoh*SJLihEl$0!ZzL~?~OJ08bOqLz{Q}~T;X)ioJpXc_AnG0@Z=A`YMY{R5) +zFqy&NaMazSJvS9^{yFiB??^{|vgl5WH%oGoxb}H%mp*wYMt`;_J@(SG>7- +z{Q}nmBlaJ6ye~17`kkw&?K$VHc#~)CN+vZchj_IWr!Oy>cyIm2Q>&WFYBHUhL?vCA +z{TAP7dMWVip3zc=Lu(w$l(;4GO67Igb49*rMNDXS?GT#1ih++;`n8At!=vl%_3H~} +z^Sytb^diPLKj?R9w?ewG)@G4t^^ne>5-vW?31QE!1ztL{fcwXby^dlpq^=u0ei}2O +z-@e~M+h5AcaBr!tNz_}l$upVHt#fs(4s5vesjx&w^PbE8yw1ZXtG>Lina%t!jJs>;({LaKymBzE^UHKrlWs&q>S@wkX +zg8`3Ti9TIfe&gwxsELQ994`KD?~1(1%U7Nnbp6nqn|7yPXYZA2XEprdX!L27fM&>< +z{dY^|HU=2QSNr&COW7J6mYaD0_E%n>zqLn>eRs1fe!J)U!FrQ46H?Piv +z`PoBbBfFZ@PnGl;K78Gqc}a@(dgJb|+TBq+&Gtbv_%;YuXoy;PtyKh;`Dx>%o!yhXmrv9wI@PIS= +z!NUg!okS($rtAzj;ySasI!Z%hrGk9uM-Q71f?Fb1oozO}-S+54OkHkf+3^$QjGGo& +zEVuq6cX!k8zw`coYd$Xj-0^&-+twBL93K3L+4h~=w<7FC|4tt9Jie=|S4uC~dns{C +zZuS4$vW$JR)i3IPKGFW*V)*7~&zL4O@ouQsj6Um{kN%Gw?H1bwI +zzpnSI@`2)0Ur*Js{7_a)H1W_{<~&houfs}q-jC0|POZ?E-8yqw@ck#E3Fjr66T37w +zd$BV&oIRQvF-1H)?ZL6fLXDq|?>wkHXLWs9>jk^ZfeIDDat7`RN;@7OU7XqS?8@8+ +zf9B{MaIa5cnZ+PGbAjUO_pM#>_IztLA2@HyV!8cz>Kgg&`=eSl1$jOeUvw~h#ZwvY +zHdAl;39S;QeqWWK8{229Ic|{#E;^rMwzGFjhMfLofwS8zUrQ~`s5h(Dzh(BFNpAOvQ?n1I +z-(s1kIGe+UM{fUD&xza4J)2~7){`l&=lfJ8i;W(?Zr=84p2f$pdcNN7sgX4;*6h)K +z8sFZmLrb^`Z_i-^j*&HU0PXOyTZ%5=IANJU?olJhq!__odEL_YeJR*bp3d;Msf5 +zhkPct?g>?W-lO%RV~ISQMMGJ)h|?{})AKuPU&%~}KC8j}Y+cDg<5O3f59-%H-}KQa +z@B6lyO}ZU(82p+d-LngXn&fM_)LbgLq=gvwFv{#Gc{8y<-*Lm_H~jqaKW6TdYN&NC +zFVp&Q!}H;Hp(1B&`3H&ABXm +z{jvGEPUZ%S_U+G{g(FU#?9sXAT3qwFVOhlSms^>{=N_K)R?xig`@gR?@1J?T?|8wx +zc^_jyjd-q&ue**^`l1Y5ruN0*!F&Xi@kxt_cI=naPFL2LS!?ffsa~lzbe0^ +ztoVKH_vKx4bJrW3xH(_GWYT2zwLy{neb?UfJe*>|F6dWQFUU3D@%7}!5UV@2PdsN7 +z98bBor16xw5bMb(`}a0k2TDtYxqf&Y;7}KKe$!vp^~m==huGpx%pCI{Jic6I_y1G# +zqX5^%TUIEFe7#Y7KIGH7M-hf=e~K2&Df`7$A-rV0y2sI~^$pokCthk8F1r_R+@B$E +z(Dg8D;F{^jf^MAb@HkL^F2e8M)dPuw>}y=vJ}y$%{v|Hex&4Pi+V&qOwx)>%GB|Nn +z|MzM88|rcWevHvk!#DZb8#G&rfAXnbd6n?1`--S~%bjB?5;0}RY<4ToTyMa@5uf|@ +zL&MqpbF;gCOk2=k=c6?#OH*OBG`G`o7S3~Ry0UeLyV#ChzS&gkuu|!jPd)!0&8Rc+ +z-uIoVKkfUSt8znRZc!W8v-Yc&SGSq{s__^8AkZ>7@9~Pw%+nefJdgWYGMt?@+hD;? +zUjvtQE{C&DSIt~eKao9l_3;CY_YZIzE?8E7Pvg{yOFOwGZIUK!U$SFOqbI{+M@6UQ +zH>b>gb@Qp{$HkXU*uHGCSS_Ibu&`qC^!lP5EkE~6z9oFO=6n^0Xi@Hd75OU9EgFtD +zv%h4UzL(=LIwx19yJm~>oQAyQpy{nWpI4L@Y*bY``Q(pAu-LZC2id~5wJZL8_I7C> +z--LVDgZ8>{oI2*@(_uHILZDie-9s|YqgHrZ(PHV`hb-T0%mtrYZK)NRwqW8a!)4B{ +zJZ=W{s-Jc#mVS8hTS{t8g~H*!O)u{FOj`9f{bTB)V*Mtkl(#Po +z&n%d*VE6Ln^E|h@@oxE~A5zcs*yH2sqt7)<+kYP{)?0D4{(kPn)wkbW3fWh1u43xN +z_RPSVGmTUIqbG7(Esv~B^9h-=ATdgfYr|}#=q^?p^=-}dDlbpGvUno;v)qioENaG! +zw{watpWaNCk~?uA@``tD`NX{m3xC@symGy+bNINz%{_OoNJrg%;$?pS$?fC3{>fr{ +zFCW?+B_RDklHtC>pQ}37R>HblE-{}eU#^{cea-K)va=Rk&pYMeuG+Z6;ZM5A%RS}p +zSDrfmOf)&_?b>^7uXRgD8=X+gI(&Kcg#am~UyYKSOX~x*774HW +zQ?z#a|0KUgZpQ|W+aLC6W~JBGuhgm1+^!yA&@jR7HtV9JwHXcfL+4FfYPv?^V5ao3 +zyN0JC^0)Aga-QmW4dGiknO_F%{?~=xb7m0S|+ct5X*P5v; +ze^@T#A6MG^`1Au?jT|ooOz#tDn;K_YFRCVD)fE&LUei;lHGS8iifMOOzBDYHd0LEl +zL8Faa(OKi;+wV!l&VB6T^PZ!7yOB}jM-_>T`zDTD?Aa6eRD(`z*m22+`-RYw^bXfW +z{5Q_+wY|N9IqN(lt90@1y({bvDg+#FzPm18=ZhGR{?*tC5z3j5+?m5BHL6*q9kp`w +z`dXi;eP{Q@!|xn)&oF*|IkV&H+?tznzBvZEH)zg3rSX}Gv7AMXaqBkQZA{DMuhnmL +zho?TJ-{#-^SxdsH$1U8r +z;agqKr^P2^8idvS-cHx~pLXimA?YRjmWu^H>%N(%P_Jz=y{5HoQ`+j#juW5sW)v*b +z{>b|${Jtrd^In0;tg+)%@I|Z|UliYfPyED-NdHgvV)~KfoZdgUG<1~3u +z;pt~C*gLqkt7&xXv%T||+u_@!BQFwmnLJ#eu*gsNG55I*g{K>h-aN7qpK_q2ELctR +zefRcf)2}V!eb~x6_xA1$4;HUm`bucJXON!qiL&Q6Z_NI>JHIr-vukT^ebyT8clUG} +zdJH1Z+m(hsPiXwNcgfdtwIW|nd(Zoq9>k$MQ(}ozT=w~X+3qc$v^1s)-sapkb^1~3 +z9cRQ}a~cZ1Nnn(1ds2{dJFw;A2Y#_FhopRNrZnVt73EpK>DIezSG_!TsqoKL-Y8L7y%@}A +z`LH-c-rZ~Y9p;J8EHB*qv6gw6iU8xJ43)D^4{9`@stGm(WjVXAdHeT`+mD!O=Qibp +zeVP8@L)uT(gcjb?dl$rndG`2;2)WgGGPkU=Ig-?5HQzTpJ1Nx_1#D;O4R(8`+2n-HAk`YO2L +z{Nto&l17bhs^8Tn#1yQ!t&p-Xt^diMrR%+J>ISKY-g=#P=crtZ2nm+B +z-IVYtZ`(EjmCNC^xq*u!r)~;rOkQ`>p*#7de0A>P$tNpSOb*+BzuUvuyEZYObMNc< +z&kHZI^(9OeTlR+c`@;=?uFVhC^H$kCL&-X&J3aqzx~X2A(1zfOm3OCqx>;7_X?ypg +z?e%X)yAECGom?Mp`a{IKi}4k+i>cAMMSevG9*HrPPjV%BLa~3l9=0AUIUM}tPtt?y +zSq$eVOsa^E*Op5ySjyGyucpAF6111AcT#-oq>Q~K^`d7*w?_3&dGBxM +z{rT8amfzEMI7LQmy|y_?htJH!uyMwXZ643elvZ}`*Nx7I>0j`7db-joTU*H>$&Zy& +zi!aBgFK16*P!pZ@uk5+ww|*M +z$0xl!wCmZ_P-9=MRWsIH__w{?@#^W6uKHz;n+uz5+Dvb4`xl-+Bkl37H-bF{8*=Ik +z9S`mhG}y93@y)3X2UnHz$5jgb`_?X?y!(rU+Oap;YY$&p^8a8(eS*}>v_ICJ8~?wo +zH)nmd`9y!q?lnKuXDupPeqZ|Q-DKX*^$aFn(qYWU)pSgRGxvPjCDAUtSivke^_=f% +zw({hp!$I#J*oTX|Jb&i+E+|pdv$`j-$zp}{61LgUK>MPp +mf+CYUuWnrH# }; +native.each(['false', 'omitted'])('requires experimental capability when it is %s before entering the checkpoint handler', async capability => { + const home = await mkdtemp(join(tmpdir(), 'rat-native-checkpoint-capability-')); + const child = spawn(binary, ['app-server'], { cwd: home, env: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home } }); + child.stderr.resume(); + const rpc = rpcClient(child); + try { + await rpc.call('initialize', { clientInfo: { name: 'rat-checkpoint-capability-test', version: '1' }, + ...(capability === 'false' ? { capabilities: { experimentalApi: false } } : {}) }); + child.stdin.write(`${JSON.stringify({ method: 'initialized' })}\n`); + const threadId = '00000000-0000-4000-8000-000000000001'; + let failure: unknown; + try { await rpc.call('thread/checkpoint', { threadId, expectedThreadIds: [threadId] }); } + catch (error) { + if (!(error instanceof Error)) throw error; + failure = JSON.parse(error.message) as unknown; + } + expect(failure).toMatchObject({ code: -32600, message: 'thread/checkpoint requires experimentalApi capability' }); + // An unloaded but syntactically valid identity distinguishes capability + // rejection from a handler that ran and rejected the native thread lookup. + expect(await rpc.call('thread/loaded/list', {})).toMatchObject({ data: [] }); + } finally { + const exited = child.exitCode === null && child.signalCode === null ? once(child, 'close').catch(() => {}) : undefined; + rpc.close(); child.stdin.destroy(); + if (exited) { + child.kill('SIGTERM'); + await Promise.race([exited, delay(1000)]); + if (child.exitCode === null && child.signalCode === null) child.kill('SIGKILL'); + await exited; + } + await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); + } +}, 15_000); + native.each([{ paginated: false }, { paginated: true }])('checkpoints real root and child histories and continues them in a fresh process (paginated=$paginated)', async ({ paginated }) => { const fixture = await checkpointFixture({ paginated }); try { @@ -154,7 +189,7 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool const runtime = new SessionRuntime({ sessionId, agentId, lifetime: 'host-managed', checkpoint: checkpointPorts, ...(previous ? { previous, requiredResumeThreadId: previous.rootThreadId } : {}), request: { binary, workspace: home, environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, - timeoutMs: 45_000, persistent: true, prompt: '', sandbox: 'read-only', networkAccess: false, environments: [], model: 'gpt-5.4', modelProvider: 'fixture', + timeoutMs: 45_000, persistent: true, prompt: '', sandbox: 'read-only', networkAccess: false, environments: [], model: 'gpt-5.5', modelProvider: 'fixture', sessionConfig: { 'model_providers.fixture': { name: 'local checkpoint fixture', base_url: `http://127.0.0.1:${address.port}`, wire_api: 'responses', requires_openai_auth: false, supports_websockets: false, request_max_retries: 0, stream_max_retries: 0 }, 'features.multi_agent': true, 'features.multi_agent_v2': { enabled: true, max_concurrent_threads_per_session: 2 }, diff --git a/tests/agents/native-protocol-exports.test.ts b/tests/agents/native-protocol-exports.test.ts new file mode 100644 index 0000000..3899b25 --- /dev/null +++ b/tests/agents/native-protocol-exports.test.ts @@ -0,0 +1,96 @@ +import { execFile } from 'node:child_process'; +import { mkdtemp, readFile, rm } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join, resolve } from 'node:path'; +import { promisify } from 'node:util'; +import { expect, it } from 'vitest'; + +const native = it.skipIf(process.env.CODEX_REQUIRE_PARITY !== 'true'); +const binary = process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'); +const execute = promisify(execFile); +type Schema = { + definitions?: Record; + properties?: Record; + oneOf?: Schema[]; + anyOf?: Schema[]; + enum?: string[]; + required?: string[]; + type?: string; + items?: Schema; + $ref?: string; +}; + +// The CLI exports embedded bundles rather than reflecting compiled Rust types. +// Check the actual parity artifact so a successful build cannot hide stale bundles. +native.each([false, true])('exports the compiled protocol with experimental=%s', async experimental => { + const home = await mkdtemp(join(tmpdir(), 'rat-native-protocol-exports-')); + const jsonDir = join(home, 'json'); + const tsDir = join(home, 'typescript'); + const flags = experimental ? ['--experimental'] : []; + try { + for (const [command, directory] of [['generate-json-schema', jsonDir], ['generate-ts', tsDir]] as const) { + await execute(binary, ['app-server', command, '--out', directory, ...flags], { + cwd: home, env: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, + timeout: 15_000, killSignal: 'SIGKILL', maxBuffer: 1024 * 1024, + }); + } + const requests = await schema(join(jsonDir, 'ClientRequest.json')); + const notifications = await schema(join(jsonDir, 'ServerNotification.json')); + const flatBundle = await schema(join(jsonDir, 'codex_app_server_protocol.v2.schemas.json')); + const bundleText = await readFile(join(jsonDir, 'codex_app_server_protocol.schemas.json'), 'utf8'); + const requestTypes = compactTypeScript(await readFile(join(tsDir, 'ClientRequest.ts'), 'utf8')); + const errorTypes = await readFile(join(tsDir, 'v2/CodexErrorInfo.ts'), 'utf8'); + const checkpointRequests = requests.oneOf?.filter(request => request.properties?.method?.enum?.includes('thread/checkpoint')); + + for (const errorSchema of [notifications.definitions?.CodexErrorInfo, flatBundle.definitions?.CodexErrorInfo]) { + const errors = errorSchema?.anyOf?.flatMap(variant => variant.enum ?? []); + expect(errors).toEqual(expect.arrayContaining(['requestTimeout', 'creditBalanceExhausted'])); + } + for (const value of ['requestTimeout', 'creditBalanceExhausted']) expect(errorTypes).toContain(`"${value}"`); + + if (experimental) { + expect(checkpointRequests).toHaveLength(1); + expect(checkpointRequests![0]).toMatchObject({ properties: { + method: { enum: ['thread/checkpoint'] }, params: { $ref: '#/definitions/ThreadCheckpointParams' }, + } }); + expect(requestTypes).toContain('"method":"thread/checkpoint",id:RequestId,params:ThreadCheckpointParams,'); + const params = await schema(join(jsonDir, 'v2/ThreadCheckpointParams.json')); + const response = await schema(join(jsonDir, 'v2/ThreadCheckpointResponse.json')); + for (const value of [params, requests.definitions?.ThreadCheckpointParams, flatBundle.definitions?.ThreadCheckpointParams]) { + expectObjectSchema(value, { threadId: { type: 'string' }, expectedThreadIds: { type: 'array', items: { type: 'string' } } }); + } + for (const value of [response, flatBundle.definitions?.ThreadCheckpointResponse]) { + expectObjectSchema(value, { threadId: { type: 'string' }, threadIds: { type: 'array', items: { type: 'string' } }, flushed: { type: 'boolean' } }); + } + expect(compactTypeScript(await readFile(join(tsDir, 'v2/ThreadCheckpointParams.ts'), 'utf8'))) + .toBe('exporttypeThreadCheckpointParams={threadId:string,expectedThreadIds:Array,};'); + expect(compactTypeScript(await readFile(join(tsDir, 'v2/ThreadCheckpointResponse.ts'), 'utf8'))) + .toBe('exporttypeThreadCheckpointResponse={threadId:string,threadIds:Array,flushed:boolean,};'); + } else { + expect(checkpointRequests).toEqual([]); + for (const text of [JSON.stringify(requests), JSON.stringify(flatBundle), bundleText, requestTypes]) { + for (const privateName of ['thread/checkpoint', 'ThreadCheckpointParams', 'ThreadCheckpointResponse']) expect(text).not.toContain(privateName); + } + for (const name of ['ThreadCheckpointParams', 'ThreadCheckpointResponse']) { + await expect(readFile(join(jsonDir, `v2/${name}.json`))).rejects.toMatchObject({ code: 'ENOENT' }); + await expect(readFile(join(tsDir, `v2/${name}.ts`))).rejects.toMatchObject({ code: 'ENOENT' }); + } + } + } finally { + await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); + } +}, 45_000); + +async function schema(path: string): Promise { + return JSON.parse(await readFile(path, 'utf8')) as Schema; +} + +function expectObjectSchema(value: Schema | undefined, properties: Record): void { + expect(value?.type).toBe('object'); + expect(value?.properties).toEqual(properties); + expect(value?.required ? [...value.required].sort() : undefined).toEqual(Object.keys(properties).sort()); +} + +function compactTypeScript(value: string): string { + return value.replace(/\/\/[^\n]*|\/\*[\s\S]*?\*\//g, '').replace(/\s+/g, ''); +} From 27fb59f796b0f7038d753d37008f46e269414460 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 18:04:02 -0700 Subject: [PATCH 03/11] Wait for native child completion activity in checkpoint proof --- tests/agents/native-checkpoint.test.ts | 29 +++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/tests/agents/native-checkpoint.test.ts b/tests/agents/native-checkpoint.test.ts index 636aa80..72b57dd 100644 --- a/tests/agents/native-checkpoint.test.ts +++ b/tests/agents/native-checkpoint.test.ts @@ -6,7 +6,7 @@ import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; import { setTimeout as delay } from 'node:timers/promises'; import { expect, it } from 'vitest'; -import { CodexRpcClient } from '../../src/adapters/codex-rpc.js'; +import { CodexRpcClient, type CodexRpcEvent } from '../../src/adapters/codex-rpc.js'; import type { SessionRuntimeState } from '../../src/core/session-runtime-planning.js'; import type { Turn } from '../../src/domain/agents-api.js'; import type { WorkspaceCheckpoint } from '../../src/domain/workspace-checkpoint.js'; @@ -63,7 +63,8 @@ native.each([{ paginated: false }, { paginated: true }])('checkpoints real root await source.start(turn('first'), input('ROOT_INPUT_MARKER: delegate the fixture task.')); await until(() => { const state = source.snapshot(); - return state.subagents.length === 1 && state.turns.length === 2 && state.turns.every(binding => binding.turn.status === 'completed'); + return state.subagents.length === 1 && state.turns.length === 2 && state.turns.every(binding => binding.turn.status === 'completed') + && state.subagents.every(child => fixture.completedChildActivities.has(`${state.rootThreadId}:${child.id}`)); }, 'root and child completion'); const before = source.snapshot(); const childId = before.subagents[0]!.id; @@ -128,7 +129,8 @@ native('rejects an incomplete thread set and a busy child without shutting down expect([...loaded.data].sort()).toEqual([rootId, childId].sort()); expect(runtime.snapshot().turns.find(binding => binding.threadId === childId)?.turn.status).toBe('in_progress'); fixture.releaseChild(); - await until(() => runtime.snapshot().turns.every(binding => binding.turn.status === 'completed'), 'child completion after refused shutdown'); + await until(() => runtime.snapshot().turns.every(binding => binding.turn.status === 'completed') + && fixture.completedChildActivities.has(`${rootId}:${childId}`), 'child completion after refused shutdown'); await expect(runtime.checkpoint()).resolves.toMatchObject({ rootThreadId: rootId }); expect(fixture.acknowledgedIds).toEqual([[rootId, childId].sort()]); expect(fixture.order.at(-1)).toBe('commit'); @@ -143,6 +145,7 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool const acknowledgedIds: string[][] = []; const clients: CodexRpcClient[] = []; const runtimes: SessionRuntime[] = []; + const completedChildActivities = new Set(); let releaseChild = () => {}; const server = createServer(async (request, response) => { try { @@ -196,7 +199,15 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool 'features.paginated_threads': options.paginated }, }, client: options => { - const rpc = new CodexRpcClient(options); + const rpc = new CodexRpcClient({ ...options, onEvent: event => { + // A child's turn/completed can precede the parent's final subAgentActivity + // item/completed. Starting checkpoint between them correctly fails closed. + // Wait for that real notification rather than assuming terminal Turns + // imply that every native writer/event has settled. + const activity = completedChildActivity(event); + if (activity) completedChildActivities.add(activity); + options.onEvent?.(event); + } }); clients.push(rpc); // Observe the real subprocess transport; never substitute RPC results. return { initialize: () => rpc.initialize(), close: () => rpc.close(), @@ -214,7 +225,7 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool }); runtimes.push(runtime); return runtime; }; - return { create, clients, rootRequests, childRequests, order, acknowledgedIds, releaseChild: () => releaseChild(), + return { create, clients, rootRequests, childRequests, order, acknowledgedIds, completedChildActivities, releaseChild: () => releaseChild(), close: async () => { releaseChild(); for (const runtime of runtimes) await runtime.close(); @@ -224,6 +235,14 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool }; } +function completedChildActivity(event: CodexRpcEvent): string | undefined { + const { threadId, item } = event.params; + if (event.method !== 'item/completed' || typeof threadId !== 'string' || !item || typeof item !== 'object' + || !('type' in item) || item.type !== 'subAgentActivity' || !('kind' in item) || item.kind !== 'completed' + || !('agentThreadId' in item) || typeof item.agentThreadId !== 'string') return undefined; + return `${threadId}:${item.agentThreadId}`; +} + function completeResponse(response: ServerResponse, id: string, item: unknown): void { if (response.writableEnded || response.destroyed) return; response.end([{ type: 'response.output_item.done', item }, { type: 'response.completed', response: { id } }] From b1e8aef6aa65a3a8cf878f0d82c6bda9cdfa6775 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 19:23:36 -0700 Subject: [PATCH 04/11] Align subagent tier regression with explicit API settings --- runtime/codex/api-model-settings.patch | 26 ++++++++++++++++++++++++++ runtime/codex/artifact-policy.json | 4 ++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/runtime/codex/api-model-settings.patch b/runtime/codex/api-model-settings.patch index a5a74aa..00dbfc4 100644 --- a/runtime/codex/api-model-settings.patch +++ b/runtime/codex/api-model-settings.patch @@ -429,3 +429,29 @@ index d3d3dd8..5e174b7 100644 assert_eq!(model.service_tier_for_request(/*service_tier*/ None), None); } } +diff --git a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs +index be73c65..baeebae 100644 +--- a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs ++++ b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs +@@ -516,7 +516,7 @@ fn service_tier_test_catalog() -> codex_protocol::openai_models::ModelsResponse + } + + #[tokio::test] +-async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_support_it() { ++async fn spawn_agent_service_tier_preserves_explicit_root_preference_not_advertised_by_catalog() { + let (_session, turn) = make_session_and_context().await; + let mut config = (*turn.config).clone(); + config.model = Some("test-model-without-fast".to_string()); +@@ -527,7 +527,11 @@ async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_su + .start_thread(StartThreadOptions::new(config.clone())) + .await + .expect("root thread should start"); +- assert_eq!(root.thread.config_snapshot().await.service_tier, None); ++ // Explicit API tier choices survive omission from the local model catalog. ++ assert_eq!( ++ root.thread.config_snapshot().await.service_tier, ++ Some(ServiceTier::Fast.request_value().to_string()) ++ ); + + config.model = Some("gpt-5.5".to_string()); + apply_spawn_agent_service_tier(root.thread.session.as_ref(), &mut config) diff --git a/runtime/codex/artifact-policy.json b/runtime/codex/artifact-policy.json index 04e21a5..122e03e 100644 --- a/runtime/codex/artifact-policy.json +++ b/runtime/codex/artifact-policy.json @@ -1,4 +1,4 @@ { - "sourceSha256": "0740d7a66b96c982a1cc1067cfc3db3520bcacc391a6ef66dcacb9cd33dedd5f", - "patchedTree": "d0d981a58ed1a7716dd8605e3a585dff5b6db6c7" + "sourceSha256": "bc5a07adb1c0e88df5a6441e50096286df7319e381d1d7b949ee2574c5867673", + "patchedTree": "082043c032cd3a1de9c936185c418c6daf7bfa1d" } From 4f66bd99d9dd89c2f1efe88123cf2270273200be Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 19:59:10 -0700 Subject: [PATCH 05/11] Align upstream integration tests with explicit API service tiers --- runtime/codex/api-model-settings.patch | 103 +++++++++++++++++++++++++ runtime/codex/artifact-policy.json | 4 +- 2 files changed, 105 insertions(+), 2 deletions(-) diff --git a/runtime/codex/api-model-settings.patch b/runtime/codex/api-model-settings.patch index 00dbfc4..3776484 100644 --- a/runtime/codex/api-model-settings.patch +++ b/runtime/codex/api-model-settings.patch @@ -455,3 +455,106 @@ index be73c65..baeebae 100644 config.model = Some("gpt-5.5".to_string()); apply_spawn_agent_service_tier(root.thread.session.as_ref(), &mut config) +diff --git a/codex-rs/core/tests/suite/model_switching.rs b/codex-rs/core/tests/suite/model_switching.rs +--- a/codex-rs/core/tests/suite/model_switching.rs ++++ b/codex-rs/core/tests/suite/model_switching.rs +@@ -632,7 +632,7 @@ + let second_body = requests[1].body_json(); + + assert_eq!(first_body["service_tier"].as_str(), Some("priority")); +- assert_eq!(second_body.get("service_tier"), None); ++ assert_eq!(second_body["service_tier"].as_str(), Some("default")); + + Ok(()) + } +@@ -676,7 +676,7 @@ + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn unsupported_service_tier_is_omitted_from_http_turn() -> Result<()> { ++async fn unadvertised_api_service_tier_is_preserved_in_http_turn() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -703,13 +703,13 @@ + + let request = resp_mock.single_request(); + let body = request.body_json(); +- assert_eq!(body.get("service_tier"), None); ++ assert_eq!(body["service_tier"].as_str(), Some("priority")); + + Ok(()) + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn unsupported_configured_service_tier_warns_at_session_start() -> Result<()> { ++async fn unsupported_configured_non_api_service_tier_warns_at_session_start() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -723,7 +723,11 @@ + let mut builder = test_codex() + .with_model(model_slug) + .with_config(move |config| { +- config.service_tier = Some(ServiceTier::Fast.request_value().to_string()); ++ config ++ .features ++ .enable(Feature::FastMode) ++ .expect("test config should allow feature update"); ++ config.service_tier = Some("custom-unadvertised".to_string()); + config.model_catalog = Some(ModelsResponse { + models: vec![model], + }); +@@ -743,13 +747,13 @@ + }; + assert_eq!( + warning.message, +- "Configured service tier `priority` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." ++ "Configured service tier `custom-unadvertised` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." + ); + Ok(()) + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn default_service_tier_override_is_omitted_from_http_turn() -> Result<()> { ++async fn explicit_default_service_tier_is_sent_on_api_key_http_turn() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -782,13 +786,13 @@ + + let request = resp_mock.single_request(); + let body = request.body_json(); +- assert_eq!(body.get("service_tier"), None); ++ assert_eq!(body["service_tier"].as_str(), Some("default")); + + Ok(()) + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn null_service_tier_override_is_omitted_from_http_turn_with_catalog_default() -> Result<()> { ++async fn null_service_tier_override_sends_api_default_instead_of_catalog_default() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -821,7 +825,7 @@ + + let request = resp_mock.single_request(); + let body = request.body_json(); +- assert_eq!(body.get("service_tier"), None); ++ assert_eq!(body["service_tier"].as_str(), Some("default")); + + Ok(()) + } +diff --git a/codex-rs/core/tests/suite/agent_websocket.rs b/codex-rs/core/tests/suite/agent_websocket.rs +--- a/codex-rs/core/tests/suite/agent_websocket.rs ++++ b/codex-rs/core/tests/suite/agent_websocket.rs +@@ -716,7 +716,7 @@ + ); + + assert_eq!(second_turn["type"].as_str(), Some("response.create")); +- assert_eq!(second_turn.get("service_tier"), None); ++ assert_eq!(second_turn["service_tier"].as_str(), Some("default")); + assert_eq!(second_turn.get("previous_response_id"), None); + assert!( + second_turn diff --git a/runtime/codex/artifact-policy.json b/runtime/codex/artifact-policy.json index 122e03e..783e485 100644 --- a/runtime/codex/artifact-policy.json +++ b/runtime/codex/artifact-policy.json @@ -1,4 +1,4 @@ { - "sourceSha256": "bc5a07adb1c0e88df5a6441e50096286df7319e381d1d7b949ee2574c5867673", - "patchedTree": "082043c032cd3a1de9c936185c418c6daf7bfa1d" + "sourceSha256": "d4d9099d91ca0c5e7602d8a82afe8c504ddac38f8a18446e8422a91b0cbca7f1", + "patchedTree": "c5379dd1626cbfffe1d526661875c5633765d33b" } From 14ae7f77a5328ca7f9e62da16f54d16573b2d1b6 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 20:28:55 -0700 Subject: [PATCH 06/11] Preserve explicit service tiers in upstream handshake regressions --- runtime/codex/api-model-settings.patch | 319 +++++++++++++++---------- runtime/codex/artifact-policy.json | 4 +- 2 files changed, 192 insertions(+), 131 deletions(-) diff --git a/runtime/codex/api-model-settings.patch b/runtime/codex/api-model-settings.patch index 3776484..b17c633 100644 --- a/runtime/codex/api-model-settings.patch +++ b/runtime/codex/api-model-settings.patch @@ -272,6 +272,104 @@ index 7bd3a38..327dad3 100644 } pub(crate) async fn make_session_configuration_for_tests() -> SessionConfiguration { +diff --git a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs +index be73c65..baeebae 100644 +--- a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs ++++ b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs +@@ -516,7 +516,7 @@ fn service_tier_test_catalog() -> codex_protocol::openai_models::ModelsResponse + } + + #[tokio::test] +-async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_support_it() { ++async fn spawn_agent_service_tier_preserves_explicit_root_preference_not_advertised_by_catalog() { + let (_session, turn) = make_session_and_context().await; + let mut config = (*turn.config).clone(); + config.model = Some("test-model-without-fast".to_string()); +@@ -527,7 +527,11 @@ async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_su + .start_thread(StartThreadOptions::new(config.clone())) + .await + .expect("root thread should start"); +- assert_eq!(root.thread.config_snapshot().await.service_tier, None); ++ // Explicit API tier choices survive omission from the local model catalog. ++ assert_eq!( ++ root.thread.config_snapshot().await.service_tier, ++ Some(ServiceTier::Fast.request_value().to_string()) ++ ); + + config.model = Some("gpt-5.5".to_string()); + apply_spawn_agent_service_tier(root.thread.session.as_ref(), &mut config) +diff --git a/codex-rs/core/tests/suite/agent_websocket.rs b/codex-rs/core/tests/suite/agent_websocket.rs +index 6304ffe..004a06d 100644 +--- a/codex-rs/core/tests/suite/agent_websocket.rs ++++ b/codex-rs/core/tests/suite/agent_websocket.rs +@@ -27,15 +27,16 @@ use std::time::Duration; + + const WS_V2_BETA_HEADER_VALUE: &str = "responses_websockets=2026-02-06"; + +-#[test_case::test_case("priority", true, false; "fast mode enabled")] +-#[test_case::test_case("priority", false, true; "fast mode disabled")] +-#[test_case::test_case("ultrafast", false, true; "ultrafast mode enabled")] +-#[test_case::test_case("ultrafast", true, false; "ultrafast mode disabled")] ++#[test_case::test_case("priority", true, false, Some("priority"); "fast mode enabled")] ++#[test_case::test_case("priority", false, true, Some("priority"); "explicit priority survives disabled fast mode")] ++#[test_case::test_case("ultrafast", false, true, Some("ultrafast"); "ultrafast mode enabled")] ++#[test_case::test_case("ultrafast", true, false, None; "ultrafast mode disabled")] + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( + tier: &'static str, + fast_mode_enabled: bool, + ultrafast_mode_enabled: bool, ++ expected_tier: Option<&'static str>, + ) -> Result<()> { + skip_if_no_network!(Ok(())); + +@@ -67,11 +68,6 @@ async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( + ], + ]) + .await; +- let tier_enabled = if tier == "ultrafast" { +- ultrafast_mode_enabled +- } else { +- fast_mode_enabled +- }; + let test = test_codex() + .with_model("gpt-5.4") + .with_auth(CodexAuth::create_dummy_chatgpt_auth_for_testing()) +@@ -134,10 +130,9 @@ async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( + "child startup should connect before its first turn" + ); + let handshakes = server.handshakes(); +- let expected_hint = if tier_enabled { +- format!("model=gpt-5.4;tier={tier}") +- } else { +- "model=gpt-5.4".to_string() ++ let expected_hint = match expected_tier { ++ Some(tier) => format!("model=gpt-5.4;tier={tier}"), ++ None => "model=gpt-5.4".to_string(), + }; + assert_eq!( + handshakes[1].header(X_CODEX_ROUTING_HINT_HEADER), +@@ -150,10 +145,7 @@ async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( + .await? + .body_json(); + assert_eq!(child_warmup["generate"], false); +- assert_eq!( +- child_warmup["service_tier"].as_str(), +- tier_enabled.then_some(tier) +- ); ++ assert_eq!(child_warmup["service_tier"].as_str(), expected_tier); + assert_eq!(server.handshakes().len(), 2); + child.shutdown_and_wait().await?; + test.codex.shutdown_and_wait().await?; +@@ -716,7 +708,7 @@ async fn websocket_v2_next_turn_uses_updated_service_tier() -> Result<()> { + ); + + assert_eq!(second_turn["type"].as_str(), Some("response.create")); +- assert_eq!(second_turn.get("service_tier"), None); ++ assert_eq!(second_turn["service_tier"].as_str(), Some("default")); + assert_eq!(second_turn.get("previous_response_id"), None); + assert!( + second_turn diff --git a/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs b/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs index 8537b9b..3b71d3e 100644 --- a/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs @@ -301,6 +399,98 @@ index 8537b9b..3b71d3e 100644 provider_id: &'static str, model: &'static str, advertised_tiers: &'static [&'static str], +diff --git a/codex-rs/core/tests/suite/model_switching.rs b/codex-rs/core/tests/suite/model_switching.rs +index 2fe59dd..7a66c32 100644 +--- a/codex-rs/core/tests/suite/model_switching.rs ++++ b/codex-rs/core/tests/suite/model_switching.rs +@@ -632,7 +632,7 @@ async fn service_tier_change_is_applied_on_next_http_turn() -> Result<()> { + let second_body = requests[1].body_json(); + + assert_eq!(first_body["service_tier"].as_str(), Some("priority")); +- assert_eq!(second_body.get("service_tier"), None); ++ assert_eq!(second_body["service_tier"].as_str(), Some("default")); + + Ok(()) + } +@@ -676,7 +676,7 @@ async fn flex_service_tier_is_applied_to_http_turn() -> Result<()> { + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn unsupported_service_tier_is_omitted_from_http_turn() -> Result<()> { ++async fn unadvertised_api_service_tier_is_preserved_in_http_turn() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -703,13 +703,13 @@ async fn unsupported_service_tier_is_omitted_from_http_turn() -> Result<()> { + + let request = resp_mock.single_request(); + let body = request.body_json(); +- assert_eq!(body.get("service_tier"), None); ++ assert_eq!(body["service_tier"].as_str(), Some("priority")); + + Ok(()) + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn unsupported_configured_service_tier_warns_at_session_start() -> Result<()> { ++async fn unsupported_configured_non_api_service_tier_warns_at_session_start() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -723,7 +723,11 @@ async fn unsupported_configured_service_tier_warns_at_session_start() -> Result< + let mut builder = test_codex() + .with_model(model_slug) + .with_config(move |config| { +- config.service_tier = Some(ServiceTier::Fast.request_value().to_string()); ++ config ++ .features ++ .enable(Feature::FastMode) ++ .expect("test config should allow feature update"); ++ config.service_tier = Some("custom-unadvertised".to_string()); + config.model_catalog = Some(ModelsResponse { + models: vec![model], + }); +@@ -743,13 +747,13 @@ async fn unsupported_configured_service_tier_warns_at_session_start() -> Result< + }; + assert_eq!( + warning.message, +- "Configured service tier `priority` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." ++ "Configured service tier `custom-unadvertised` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." + ); + Ok(()) + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn default_service_tier_override_is_omitted_from_http_turn() -> Result<()> { ++async fn explicit_default_service_tier_is_sent_on_api_key_http_turn() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -782,13 +786,13 @@ async fn default_service_tier_override_is_omitted_from_http_turn() -> Result<()> + + let request = resp_mock.single_request(); + let body = request.body_json(); +- assert_eq!(body.get("service_tier"), None); ++ assert_eq!(body["service_tier"].as_str(), Some("default")); + + Ok(()) + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] +-async fn null_service_tier_override_is_omitted_from_http_turn_with_catalog_default() -> Result<()> { ++async fn null_service_tier_override_sends_api_default_instead_of_catalog_default() -> Result<()> { + skip_if_no_network!(Ok(())); + + let server = start_mock_server().await; +@@ -821,7 +825,7 @@ async fn null_service_tier_override_is_omitted_from_http_turn_with_catalog_defau + + let request = resp_mock.single_request(); + let body = request.body_json(); +- assert_eq!(body.get("service_tier"), None); ++ assert_eq!(body["service_tier"].as_str(), Some("default")); + + Ok(()) + } diff --git a/codex-rs/core/tests/suite/subagent_service_tier.rs b/codex-rs/core/tests/suite/subagent_service_tier.rs index 74d5592..2af9f80 100644 --- a/codex-rs/core/tests/suite/subagent_service_tier.rs @@ -429,132 +619,3 @@ index d3d3dd8..5e174b7 100644 assert_eq!(model.service_tier_for_request(/*service_tier*/ None), None); } } -diff --git a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs -index be73c65..baeebae 100644 ---- a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs -+++ b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs -@@ -516,7 +516,7 @@ fn service_tier_test_catalog() -> codex_protocol::openai_models::ModelsResponse - } - - #[tokio::test] --async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_support_it() { -+async fn spawn_agent_service_tier_preserves_explicit_root_preference_not_advertised_by_catalog() { - let (_session, turn) = make_session_and_context().await; - let mut config = (*turn.config).clone(); - config.model = Some("test-model-without-fast".to_string()); -@@ -527,7 +527,11 @@ async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_su - .start_thread(StartThreadOptions::new(config.clone())) - .await - .expect("root thread should start"); -- assert_eq!(root.thread.config_snapshot().await.service_tier, None); -+ // Explicit API tier choices survive omission from the local model catalog. -+ assert_eq!( -+ root.thread.config_snapshot().await.service_tier, -+ Some(ServiceTier::Fast.request_value().to_string()) -+ ); - - config.model = Some("gpt-5.5".to_string()); - apply_spawn_agent_service_tier(root.thread.session.as_ref(), &mut config) -diff --git a/codex-rs/core/tests/suite/model_switching.rs b/codex-rs/core/tests/suite/model_switching.rs ---- a/codex-rs/core/tests/suite/model_switching.rs -+++ b/codex-rs/core/tests/suite/model_switching.rs -@@ -632,7 +632,7 @@ - let second_body = requests[1].body_json(); - - assert_eq!(first_body["service_tier"].as_str(), Some("priority")); -- assert_eq!(second_body.get("service_tier"), None); -+ assert_eq!(second_body["service_tier"].as_str(), Some("default")); - - Ok(()) - } -@@ -676,7 +676,7 @@ - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn unsupported_service_tier_is_omitted_from_http_turn() -> Result<()> { -+async fn unadvertised_api_service_tier_is_preserved_in_http_turn() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -703,13 +703,13 @@ - - let request = resp_mock.single_request(); - let body = request.body_json(); -- assert_eq!(body.get("service_tier"), None); -+ assert_eq!(body["service_tier"].as_str(), Some("priority")); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn unsupported_configured_service_tier_warns_at_session_start() -> Result<()> { -+async fn unsupported_configured_non_api_service_tier_warns_at_session_start() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -723,7 +723,11 @@ - let mut builder = test_codex() - .with_model(model_slug) - .with_config(move |config| { -- config.service_tier = Some(ServiceTier::Fast.request_value().to_string()); -+ config -+ .features -+ .enable(Feature::FastMode) -+ .expect("test config should allow feature update"); -+ config.service_tier = Some("custom-unadvertised".to_string()); - config.model_catalog = Some(ModelsResponse { - models: vec![model], - }); -@@ -743,13 +747,13 @@ - }; - assert_eq!( - warning.message, -- "Configured service tier `priority` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." -+ "Configured service tier `custom-unadvertised` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." - ); - Ok(()) - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn default_service_tier_override_is_omitted_from_http_turn() -> Result<()> { -+async fn explicit_default_service_tier_is_sent_on_api_key_http_turn() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -782,13 +786,13 @@ - - let request = resp_mock.single_request(); - let body = request.body_json(); -- assert_eq!(body.get("service_tier"), None); -+ assert_eq!(body["service_tier"].as_str(), Some("default")); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn null_service_tier_override_is_omitted_from_http_turn_with_catalog_default() -> Result<()> { -+async fn null_service_tier_override_sends_api_default_instead_of_catalog_default() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -821,7 +825,7 @@ - - let request = resp_mock.single_request(); - let body = request.body_json(); -- assert_eq!(body.get("service_tier"), None); -+ assert_eq!(body["service_tier"].as_str(), Some("default")); - - Ok(()) - } -diff --git a/codex-rs/core/tests/suite/agent_websocket.rs b/codex-rs/core/tests/suite/agent_websocket.rs ---- a/codex-rs/core/tests/suite/agent_websocket.rs -+++ b/codex-rs/core/tests/suite/agent_websocket.rs -@@ -716,7 +716,7 @@ - ); - - assert_eq!(second_turn["type"].as_str(), Some("response.create")); -- assert_eq!(second_turn.get("service_tier"), None); -+ assert_eq!(second_turn["service_tier"].as_str(), Some("default")); - assert_eq!(second_turn.get("previous_response_id"), None); - assert!( - second_turn diff --git a/runtime/codex/artifact-policy.json b/runtime/codex/artifact-policy.json index 783e485..c268e02 100644 --- a/runtime/codex/artifact-policy.json +++ b/runtime/codex/artifact-policy.json @@ -1,4 +1,4 @@ { - "sourceSha256": "d4d9099d91ca0c5e7602d8a82afe8c504ddac38f8a18446e8422a91b0cbca7f1", - "patchedTree": "c5379dd1626cbfffe1d526661875c5633765d33b" + "sourceSha256": "be19872dc59c505e709876163d4a66b55ffcef75358889bf723b94c9cc091c75", + "patchedTree": "8c2ebc87b34b0f39f9e783666a53996f89e79402" } From a5b81b2ab409e9cf440e5413b025adfcbcc9745d Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 22:06:16 -0700 Subject: [PATCH 07/11] Use official Codex runtime without downstream patches --- .github/workflows/ci.yml | 38 +- AGENTS.md | 4 +- README.md | 2 +- docs/agents-api.md | 23 + docs/development-and-deployment.md | 4 +- docs/local-workspace.md | 2 +- docs/quickstart.md | 2 +- docs/security.md | 16 +- docs/support.md | 5 +- microvm/runtime-server.mjs | 6 +- runtime/codex/Dockerfile | 28 +- runtime/codex/Dockerfile.dockerignore | 2 + runtime/codex/README.md | 242 +- runtime/codex/api-model-settings.patch | 621 - runtime/codex/api-turn-errors.patch | 462 - runtime/codex/artifact-policy.json | 4 - runtime/codex/chatgpt-service-tier.patch | 288 - runtime/codex/checkpoint-shutdown.patch | 399 - runtime/codex/interrupt-barrier.patch | 27 - runtime/codex/local-subprocess-stdio.patch | 143 - runtime/codex/protocol-exports.patch | 12871 ---------------- runtime/codex/release-lock.patch | 1473 -- runtime/codex/source.json | 13 +- .../unified-exec-output-subscription.patch | 82 - scripts/build-codex-runtime.mjs | 134 +- scripts/build-desktop.mjs | 146 +- scripts/build-native-guest.mjs | 5 +- scripts/build-native-release.mjs | 74 +- scripts/codex-runtime-artifact.mjs | 48 +- scripts/codex-runtime-targets.mjs | 4 +- scripts/ensure-worker-runtime.mjs | 2 +- src/adapters/codex-environment-files.ts | 5 +- src/adapters/codex-managed-policy.ts | 37 + src/adapters/codex-rpc.ts | 15 +- src/core/native-checkpoint-planning.ts | 61 + src/core/session-stream.ts | 5 +- src/domain/codex-managed-policy.ts | 52 + src/domain/native-checkpoint.ts | 50 + src/domain/session-errors.ts | 32 +- src/domain/session-model-validation.ts | 32 + src/domain/workspace-checkpoint.ts | 2 + src/runner/codex-app-server.ts | 14 +- src/runner/codex-cold-verification.ts | 191 + src/runner/hosted-environment-planning.ts | 13 +- src/runner/hosted-environment.ts | 2 + src/runner/local-managed-environment.ts | 1 + src/runner/main.ts | 8 +- src/runner/managed-executor-verification.ts | 2 + src/runner/pi-effect-broker.ts | 4 + src/runner/session-launch-planning.ts | 4 +- src/runner/session-runtime.ts | 141 +- src/runner/workspace-handoff.ts | 17 +- testing/README.md | 69 +- testing/aws/README.md | 2 +- testing/local-runtime/codex-parity.ts | 10 +- testing/local-runtime/linux-kvm/README.md | 10 +- testing/local-runtime/linux-kvm/prepare.ts | 4 +- testing/local-runtime/native-guest-build.md | 8 +- .../local-runtime/native-vm/worker/README.md | 2 +- testing/local-runtime/subprocess-fixtures.ts | 40 +- testing/run-native-image-parity.sh | 5 + tests/adapters/codex-managed-policy.test.ts | 31 + tests/adapters/codex-rpc-checkpoint.test.ts | 9 + tests/agents/local-codex-selection.test.ts | 8 +- tests/agents/local-turn-admission.test.ts | 7 + tests/agents/native-checkpoint.test.ts | 120 +- tests/agents/native-item-events.test.ts | 19 +- tests/agents/native-managed-policy.test.ts | 41 + tests/agents/native-process-lifetime.test.ts | 1 + tests/agents/native-protocol-exports.test.ts | 52 +- tests/agents/native-session-settings.test.ts | 47 +- tests/agents/native-tools.test.ts | 7 +- tests/agents/native-turn-errors.test.ts | 36 +- tests/agents/session-item-events.test.ts | 21 +- tests/agents/session-model-validation.test.ts | 50 + tests/agents/session-runtime.test.ts | 63 +- tests/agents/turn-errors.test.ts | 26 +- tests/pi/managed-subprocess.test.ts | 8 +- tests/runner/codex-app-server.test.ts | 45 + tests/runner/codex-cold-verification.test.ts | 134 + tests/runner/managed-setup-admission.test.ts | 9 +- .../runner/native-checkpoint-planning.test.ts | 60 + tests/runner/session-checkpoint.test.ts | 322 +- tests/runner/workspace-handoff.test.ts | 34 + tests/scripts/build-desktop.test.ts | 80 + tests/scripts/build-native-release.test.ts | 71 +- tests/scripts/codex-runtime-artifact.test.ts | 90 +- 87 files changed, 1994 insertions(+), 17405 deletions(-) delete mode 100644 runtime/codex/api-model-settings.patch delete mode 100644 runtime/codex/api-turn-errors.patch delete mode 100644 runtime/codex/artifact-policy.json delete mode 100644 runtime/codex/chatgpt-service-tier.patch delete mode 100644 runtime/codex/checkpoint-shutdown.patch delete mode 100644 runtime/codex/interrupt-barrier.patch delete mode 100644 runtime/codex/local-subprocess-stdio.patch delete mode 100644 runtime/codex/protocol-exports.patch delete mode 100644 runtime/codex/release-lock.patch delete mode 100644 runtime/codex/unified-exec-output-subscription.patch create mode 100644 src/adapters/codex-managed-policy.ts create mode 100644 src/core/native-checkpoint-planning.ts create mode 100644 src/domain/codex-managed-policy.ts create mode 100644 src/domain/native-checkpoint.ts create mode 100644 src/runner/codex-cold-verification.ts create mode 100644 tests/adapters/codex-managed-policy.test.ts create mode 100644 tests/agents/native-managed-policy.test.ts create mode 100644 tests/agents/session-model-validation.test.ts create mode 100644 tests/runner/codex-cold-verification.test.ts create mode 100644 tests/runner/native-checkpoint-planning.test.ts create mode 100644 tests/scripts/build-desktop.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e9e881..7da90b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,16 +14,6 @@ jobs: timeout-minutes: 240 steps: - uses: actions/checkout@v7.0.1 - - name: Reserve native build space - run: | - # These preinstalled SDKs are unused by this job. All Rust build tools - # come from the pinned container, and Node/Terraform are installed below. - sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc - available=$(df -Pk . | awk 'NR == 2 {print $4}') - if [ "$available" -lt 20971520 ]; then - echo "Native builds need 20 GiB free. Set RAT_NATIVE_RUNNER to an ARM64 runner with more disk." - exit 1 - fi - uses: actions/setup-node@v7.0.0 with: node-version: 22 @@ -36,12 +26,10 @@ jobs: id: codex-runtime with: path: .runtime/codex/linux-arm64 - key: codex-linux-arm64-${{ hashFiles('runtime/codex/**', '!runtime/codex/model-capabilities.json', '!runtime/codex/README.md', 'scripts/build-codex-runtime.mjs', 'scripts/codex-runtime-targets.mjs') }} - - name: Build pinned Linux ARM64 runtime + key: official-codex-linux-arm64-${{ hashFiles('runtime/codex/source.json', 'runtime/codex/companion-packages.json', 'package-lock.json', 'scripts/build-codex-runtime.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs') }} + - name: Package official Linux ARM64 runtime if: steps.codex-runtime.outputs.cache-hit != 'true' - run: docker buildx build --platform linux/arm64 --file runtime/codex/Dockerfile --output type=local,dest=.runtime/codex/linux-arm64 . - # Cache a completed compilation even if a later acceptance check fails. - # Restoring this cache never skips package, checksum or native image tests. + run: node scripts/build-codex-runtime.mjs .runtime/codex/linux-arm64 - uses: actions/cache/save@v4 if: steps.codex-runtime.outputs.cache-hit != 'true' with: @@ -85,26 +73,21 @@ jobs: - run: npm ci - name: Verify x86 sandbox enforcement with the pinned upstream runtime run: npx vitest run tests/pi/managed-effects.test.ts tests/runner/managed-sandbox.test.ts tests/simulation/linux-kvm-helper.test.ts tests/simulation/native-vm-prototype.test.ts --no-file-parallelism - - name: Reserve native build space - run: | - sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc - available=$(df -Pk . | awk 'NR == 2 {print $4}') - test "$available" -ge 20971520 - uses: actions/cache/restore@v4 id: codex-runtime with: path: .runtime/codex/linux-x64 - key: codex-linux-x64-${{ hashFiles('runtime/codex/**', '!runtime/codex/model-capabilities.json', '!runtime/codex/README.md', 'scripts/build-codex-runtime.mjs', 'scripts/codex-runtime-targets.mjs') }} - - name: Build pinned Linux x64 runtime + key: official-codex-linux-x64-${{ hashFiles('runtime/codex/source.json', 'runtime/codex/companion-packages.json', 'package-lock.json', 'scripts/build-codex-runtime.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs') }} + - name: Package official Linux x64 runtime if: steps.codex-runtime.outputs.cache-hit != 'true' - run: docker buildx build --platform linux/amd64 --file runtime/codex/Dockerfile --output type=local,dest=.runtime/codex/linux-x64 . + run: node scripts/build-codex-runtime.mjs .runtime/codex/linux-x64 - uses: actions/cache/save@v4 if: steps.codex-runtime.outputs.cache-hit != 'true' with: path: .runtime/codex/linux-x64 key: ${{ steps.codex-runtime.outputs.cache-primary-key }} - name: Validate x64 artifact provenance - run: node --input-type=module -e "import { validateCodexRuntimeArtifact } from './scripts/codex-runtime-artifact.mjs'; await validateCodexRuntimeArtifact('.runtime/codex/linux-x64', { expectedTarget:'x86_64-unknown-linux-gnu' });" + run: node --input-type=module -e "import { validateCodexRuntimeArtifact } from './scripts/codex-runtime-artifact.mjs'; await validateCodexRuntimeArtifact('.runtime/codex/linux-x64', { expectedTarget:'x86_64-unknown-linux-musl' });" - name: Verify x64 native contracts, checkpoints and Pi sandbox env: CODEX_CONFORMANCE_BINARY: ${{ github.workspace }}/.runtime/codex/linux-x64/runtime/bin/codex @@ -112,6 +95,13 @@ jobs: run: | npm run test:agents:parity:host npx vitest run tests/runner/managed-sandbox.test.ts --no-file-parallelism + - name: Verify x64 isolated cold recovery + env: + CODEX_RUNTIME_ARTIFACT: ${{ github.workspace }}/.runtime/codex/linux-x64 + run: | + npm run runtime:local:build + docker buildx build --platform linux/amd64 --load --file testing/native-parity.Dockerfile --build-arg WORKER_IMAGE=rat-things-local:1 --tag rat-things-native-parity:x64 . + docker run --rm --platform linux/amd64 --privileged --init --user 0 --env CODEX_COLD_NATIVE_E2E=true --entrypoint npx rat-things-native-parity:x64 --no-install vitest run tests/runner/codex-cold-verification.test.ts --no-file-parallelism - name: Archive verified Linux x64 runtime run: tar -C .runtime/codex/linux-x64 -czf .runtime/codex/linux-x64.tar.gz artifact.json runtime - name: Export verified Linux x64 runtime diff --git a/AGENTS.md b/AGENTS.md index 17daaff..6ab5c59 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -40,10 +40,10 @@ npm run test:e2e:localstack Terraform requires packaged Lambda artifacts: -Packaging also requires the patched Linux ARM64 Codex artifact. Build it with +Packaging also requires the official, unmodified Linux ARM64 Codex artifact. Package it with `runtime/codex/Dockerfile` or select an exported artifact with `CODEX_RUNTIME_ARTIFACT`; see `testing/README.md`. `npm run check` includes packaging -and validates this artifact. CI caches it by source, patch and builder identity. +and validates this artifact. CI caches it by official package and packager identity. ```bash npm run package diff --git a/README.md b/README.md index d79932d..ebe9a3d 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ npm run console:serve ``` For the full repository checks, run `npm run check`. It includes Lambda packaging -and requires a patched Linux ARM64 Codex artifact, Docker and Terraform; see +and requires an official Linux ARM64 Codex artifact, Docker and Terraform; see [development prerequisites](testing/README.md). To deploy a backend, start with the [AWS quickstart](docs/quickstart.md). diff --git a/docs/agents-api.md b/docs/agents-api.md index efa0d61..8588e37 100644 --- a/docs/agents-api.md +++ b/docs/agents-api.md @@ -298,6 +298,11 @@ for await (const event of await client.beta.agents.sessions.events.stream(sessio SSE is a live stream. Recover missed work from saved Items and Turns; reconnecting does not replay an event log. Disconnecting a stream does not cancel execution. + +Command-output deltas arrive once the command finishes, immediately before its +completed Item. This keeps their text in the order reported by the native +executor's completed aggregate, including its output limit and any omission +marker. Assistant text and reasoning summaries continue to stream as they arrive. Function tool results must identify the pending call and Turn. Successful results provide `output`; failed results provide `error`. Human approval requests are not part of the runtime: the deployment admits a fixed capability envelope before @@ -397,6 +402,24 @@ retains flushed workspace files and setup identity after confirmed termination o worker. Neither runtime restores running processes. Checkpointing is host-controlled; there is no public checkpoint endpoint or automatic idle timer. +Codex checkpoints require successful completed Turns. Before publication, the +host stops native writers, flushes the Session journal, synchronizes storage and +opens a disposable copy with the official Codex binary. Root and child thread +identities and complete public native history must survive a fresh-process +resume. Verification has no network or credentials and cannot run model work or +tools. Extra coordination details omitted by Codex's public history remain in +the host journal. This does not verify Codex's hidden mailbox state. + +Codex cold checkpoints currently support the built-in OpenAI provider and custom +Responses API providers. Bedrock, Ollama and LM Studio are refused before the +running process stops because their cold recovery has not been validated. This +restriction does not prevent ordinary Sessions or Pi Durable execution. + +Checkpointing refuses unsupported startup integrations, external native storage, +failed or interrupted native history, and unverifiable saved state. An ordinary +process exit alone cannot publish a checkpoint. These limits also apply when +forking requires a new Codex checkpoint. + ## Fork a Session Set `session_checkpoints_enabled = true` with S3 Files configured to enable forks; diff --git a/docs/development-and-deployment.md b/docs/development-and-deployment.md index e5bb82b..fce9801 100644 --- a/docs/development-and-deployment.md +++ b/docs/development-and-deployment.md @@ -11,8 +11,8 @@ public sharing. Return here when choosing a longer-lived installation shape. ## Prerequisites - Node.js 22.20+, npm, and Git. -- Docker with Compose for LocalStack and Buildx for the patched Linux ARM64 runtime and image canaries. -- A verified patched native artifact for packaging; build or import it using +- Docker with Compose for LocalStack and Buildx for the official Linux ARM64 runtime and image canaries. +- A verified official native artifact for packaging; build or import it using [`testing/README.md`](../testing/README.md#agents-api-native-compatibility-gate). - Terraform 1.16.6, matching `.terraform-version`, CI and the LocalStack container, and AWS credentials for infrastructure work. The module requires Terraform 1.9+ diff --git a/docs/local-workspace.md b/docs/local-workspace.md index e694930..1553512 100644 --- a/docs/local-workspace.md +++ b/docs/local-workspace.md @@ -60,7 +60,7 @@ active worker. Conversations with **No environment** do not require a VM. Windows and Linux with Docker Desktop, Intel Macs, and native Linux Docker with the gVisor `runsc` runtime are in preview. Set `RAT_THINGS_PREVIEW_PLATFORMS=1` to try them. Native Linux Docker without gVisor is refused, because the worker would share -the host kernel. A source checkout can build the patched Linux x86-64 worker. +the host kernel. A source checkout can package the official Codex release into the Linux x86-64 worker. The [KVM development setup](../testing/local-runtime/linux-kvm/README.md) uses a dedicated VM on Linux x86-64 when `/dev/kvm` and vsock are available. It requires an explicit asset path and is separate from the signed macOS installer. A gVisor diff --git a/docs/quickstart.md b/docs/quickstart.md index 5e690d5..164476d 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -10,7 +10,7 @@ Use the [deployment guide](development-and-deployment.md) to configure the Terra module, model credentials, ARM64 runtime image and Agents HTTP service. Package Lambda artifacts before Terraform validation or deployment. Deployment creates AWS resources; ordinary local checks do not provision MicroVMs. Packaging requires the -patched Linux ARM64 Codex artifact described in the [contributor guide](../testing/README.md#agents-api-native-compatibility-gate). Do not substitute the stock npm binary. +official Linux ARM64 Codex artifact described in the [contributor guide](../testing/README.md#agents-api-native-compatibility-gate). Keep its verified manifest and complete companion files together. ## Automated setup diff --git a/docs/security.md b/docs/security.md index 86defcf..16acea0 100644 --- a/docs/security.md +++ b/docs/security.md @@ -14,6 +14,13 @@ execution boundary. Trusted orchestration runs as root and launches Codex or Pi as UID/GID 10001. The worker sandbox defaults to workspace-only writes with agent networking off. The host-side local harness retains its separate read-only/no-network policy. +Managed execution verifies the official Codex process's effective permission +profile before exposing tools. Unexpected merged grants, unknown policy files or +incomplete policy inspection prevent startup. Agent networking off uses a network +namespace and a proxy with no allowed destinations. Local socket metadata and +anonymous socketpairs remain available for subprocess I/O; external connections +and named Unix socket access remain denied. + The EC2 worker supports connected Session lifetime beyond Lambda MicroVM's maximum lifetime. Both backends must preserve the same ownership, process and credential boundaries. Self-hosted executor connections also require an operator-controlled sandbox; transport encryption does @@ -91,7 +98,7 @@ from actor attribution. No caller-provided URL or credential may establish owner | Superseded worker write | Immutable execution generation, backend identity and conditional state changes | Lost process memory cannot be recreated from public Items alone | | Artifact disclosure | Private encrypted objects, owner checks, saved Turn/path identity and explicit publication grants | Publication URLs are bearer credentials; provider copies have independent retention | | Resource exhaustion | Bounded requests, pagination, queues and deployment concurrency controls | Configure tenant budgets, API throttles and provider-event abuse limits | -| Supply-chain compromise | Locked packages, pinned source/base image, recorded patches and artifact digests | Review build provenance and scan/sign release artifacts | +| Supply-chain compromise | Locked packages, pinned source/base image, official package integrity and complete artifact digests | Review build provenance and scan/sign release artifacts | ## Fixed capability-envelope security model @@ -201,6 +208,13 @@ the same owner/Session storage under its fenced execution identity. Native check harness history; public-item recovery preserves historical facts without replaying tool effects. Neither recovery path promises survival of a process whose VM has been destroyed. +Codex checkpoint publication requires a successful cold resume of copied native +history after all writers stop and storage is synchronized. A separate verifier +runs without credentials or network access; it cannot modify the saved candidate. +Evidence covers root and child identities, public native history, and the flushed +host journal. It does not inspect hidden Codex mailbox state or preserve running +commands. Unsupported startup integrations or unverifiable state prevent handoff. + The EC2 supervisor requires the outer dedicated VM for its privileged mount/network setup. The agent does not receive the Docker socket or host control configuration. Metadata and the local control listener are denied to the guest while trusted root orchestration remains able to operate. diff --git a/docs/support.md b/docs/support.md index c269176..bb486cc 100644 --- a/docs/support.md +++ b/docs/support.md @@ -14,8 +14,9 @@ published release cadence. Operators apply updates through the existing [local runtime setup](local-workspace.md#give-your-session-a-linux-workspace). An update should identify the reviewed repository revision and the matching -complete runtime artifacts for the target platform. Codex source, ordered patches, -companion packages and file inventories are pinned together. Keep the artifact +complete runtime artifacts for the target platform. The official Codex release, +companion packages and file inventories are pinned together; Rat Things does not +patch the Codex executable. Keep the artifact manifest with its runtime directory; replacing only the Codex executable with an unrelated upstream release is not a supported upgrade. Artifact verification checks identity and file integrity; it does not establish a signature or prove diff --git a/microvm/runtime-server.mjs b/microvm/runtime-server.mjs index e197b42..541a3cc 100644 --- a/microvm/runtime-server.mjs +++ b/microvm/runtime-server.mjs @@ -302,9 +302,9 @@ function startRun(run) { storagePreparationDurationMs = Date.now() - preparationStartedAt; run.environment.SESSION_STATE_ROOT = stateRoot; run.environment.CODEX_HOME = join(stateRoot, 'codex-home'); - // SQLite WAL/connection locks stay on this worker's local filesystem. - // Native rollouts remain durable in CODEX_HOME and rebuild the indexes - // when a replacement worker resumes the saved thread. + // Ordinary runs bind this directory to worker-local storage. Checkpoint + // mode retains the databases and WAL beside the native home; paginated + // history cannot be reconstructed from legacy rollout files alone. run.environment.CODEX_SQLITE_HOME = join(stateRoot, 'codex-home', 'sqlite'); run.environment.BROWSER_PROFILE_ROOT = join(stateRoot, 'codex-home', 'browser-profile'); run.environment.WORKSPACE_ROOT = stateRoot; diff --git a/runtime/codex/Dockerfile b/runtime/codex/Dockerfile index 2d8943a..5cf5e7d 100644 --- a/runtime/codex/Dockerfile +++ b/runtime/codex/Dockerfile @@ -2,28 +2,14 @@ ARG TARGETARCH FROM public.ecr.aws/lambda/microvms:al2023-minimal@sha256:05cb9b38d841e7ff1b693dc9e894909612f340bf99ec97d426e8000a5bbe96c3 AS base-arm64 FROM public.ecr.aws/amazonlinux/amazonlinux:2023@sha256:c07ab0773eddf9449c0994a87d8148300db98bdf8d8dad672a9dc26321c104fc AS base-amd64 -# Both builders retain the worker's Amazon Linux 2023 glibc baseline. -FROM base-${TARGETARCH} AS build -ARG TARGETARCH -RUN dnf install -y gcc gcc-c++ make cmake clang pkgconfig libcap-devel perl-core \ - python3 git tar gzip xz unzip nodejs22 nodejs22-npm binutils findutils \ - && dnf clean all && rm -rf /var/cache/dnf -RUN dnf install -y openssl-devel && dnf clean all && rm -rf /var/cache/dnf -RUN curl --fail --location --silent --show-error https://sh.rustup.rs --output /tmp/rustup.sh \ - && sh /tmp/rustup.sh -y --profile minimal --default-toolchain 1.99.1 --no-modify-path \ - && rm /tmp/rustup.sh -ENV PATH=/root/.cargo/bin:$PATH CARGO_BUILD_JOBS=1 +FROM base-${TARGETARCH} AS package +RUN dnf install -y nodejs22 nodejs22-npm && dnf clean all && rm -rf /var/cache/dnf WORKDIR /rat COPY runtime/codex /rat/runtime/codex -COPY scripts/build-codex-runtime.mjs /rat/scripts/build-codex-runtime.mjs -COPY scripts/codex-runtime-targets.mjs /rat/scripts/codex-runtime-targets.mjs -RUN npm install --omit=dev --no-audit --no-fund \ +COPY package-lock.json /rat/package-lock.json +COPY scripts/build-codex-runtime.mjs scripts/codex-runtime-targets.mjs scripts/codex-runtime-artifact.mjs /rat/scripts/ +RUN npm install --ignore-scripts --omit=dev --no-audit --no-fund --package-lock=false \ "@openai/codex@$(node -p 'JSON.parse(require("fs").readFileSync("runtime/codex/source.json")).upstreamVersion')" -RUN --mount=type=cache,target=/build,id=rat-codex-${TARGETARCH}-build \ - --mount=type=cache,target=/root/.cargo/registry,id=rat-codex-${TARGETARCH}-registry \ - --mount=type=cache,target=/root/.cargo/git,id=rat-codex-${TARGETARCH}-git \ - build_directory="/build/$(sha256sum runtime/codex/source.json runtime/codex/*.patch runtime/codex/Dockerfile scripts/build-codex-runtime.mjs | sha256sum | cut -d ' ' -f1)" \ - && node scripts/build-codex-runtime.mjs "$build_directory" \ - && mkdir /out && cp -a "$build_directory/runtime" /out/runtime && cp "$build_directory/artifact.json" /out/artifact.json +RUN node scripts/build-codex-runtime.mjs /out FROM scratch AS artifact -COPY --from=build /out/ / +COPY --from=package /out/ / diff --git a/runtime/codex/Dockerfile.dockerignore b/runtime/codex/Dockerfile.dockerignore index 692443f..31a238e 100644 --- a/runtime/codex/Dockerfile.dockerignore +++ b/runtime/codex/Dockerfile.dockerignore @@ -1,7 +1,9 @@ ** +!package-lock.json !runtime/ !runtime/codex/ !runtime/codex/** !scripts/ !scripts/build-codex-runtime.mjs !scripts/codex-runtime-targets.mjs +!scripts/codex-runtime-artifact.mjs diff --git a/runtime/codex/README.md b/runtime/codex/README.md index c783a2a..9d31b52 100644 --- a/runtime/codex/README.md +++ b/runtime/codex/README.md @@ -1,142 +1,108 @@ # Maintain the Codex runtime -Codex is the default runtime; Pi Durable is optional. This directory defines the -patched Codex executable and matching companions used by the worker and local -runtime builds. Treat an upstream upgrade as a behavior change, even when every -patch applies cleanly. - -## What is pinned - -The runtime is built from the full upstream Codex 0.164.0 source, with the explicit -patches below. The stock executable is not interchangeable: Rat Things requires -confirmed checkpoint persistence, exact provider settings and typed failures, -ordered interruption and output, and sandboxed Node subprocess support. - -Reasoning defaults follow this release's model catalogue. A model absent from that -catalogue has a null default, leaving the choice to the provider; an explicit -saved effort is preserved. Model capabilities remain separately validated. - -[source.json](source.json) selects the upstream repository, exact commit, release -version and ordered patches. [companion-packages.json](companion-packages.json) -locks each platform's npm package identity, tarball integrity, descriptor and file -hashes against [package-lock.json](../../package-lock.json). The compiled executable -travels with its matching code-mode and voice hosts, shared libraries, `rg`, -licenses and Linux `bwrap` resources. Bundling voice resources does not enable voice. -Replacing only `bin/codex` from an unrelated release is not an upgrade. - -[artifact-policy.json](artifact-policy.json) binds the source and ordered patch -hashes to the reviewed patched Git tree. The [builder](../../scripts/build-codex-runtime.mjs) -checks the checkout before and after its locked release build. Its exported -`artifact.json` records that identity, target, build settings and complete file -inventory; keep it beside `runtime/`. The [validator](../../scripts/codex-runtime-artifact.mjs) -compares this evidence with repository policy and companion hashes, rather than -trusting an artifact's own claims. Artifact validation is not a signature or a -runtime behavior test. - -## Why each patch exists - -The order below is the application order in `source.json`. Rust test names refer -to tests in the patched upstream checkout; repository links identify separate -integration checks. Building the executable does not run those Rust tests. - -| Patch | Contract to preserve | Existing regression evidence | -| --- | --- | --- | -| [release-lock.patch](release-lock.patch) | Align workspace package versions in `Cargo.lock` with the pinned release so `cargo build --locked` succeeds without rewriting the lock. | The locked build and exact-tree audit; no separate runtime behavior change. | -| [interrupt-barrier.patch](interrupt-barrier.patch) | Await child task interruption before acknowledging it, so a follow-up on that child does not race the previous execution guard at the concurrency limit. | Strict interruption/follow-up cases in [native-session.test.ts](../../tests/agents/native-session.test.ts), plus nested limit checks in [native-admission.test.ts](../../tests/agents/native-admission.test.ts). | -| [api-model-settings.patch](api-model-settings.patch) | Preserve explicit `auto`, `default`, `flex`, `priority` and `fast` service tiers through config and Turn updates; the provider decides support without a silent catalog/UI downgrade. | Patched config, Session and protocol service-tier unit tests; [native-session-settings.test.ts](../../tests/agents/native-session-settings.test.ts) checks outgoing requests across Turns. | -| [chatgpt-service-tier.patch](chatgpt-service-tier.patch) | Omit `auto`/`default` for ChatGPT authentication while preserving other explicit tiers and API-key/Bedrock request values across HTTP and WebSocket setup and continuation. | Patched `responses_service_tier_*` Rust tests cover these transports/auth modes, including repeated Turns. They use local fixtures, not a live provider. | -| [api-turn-errors.patch](api-turn-errors.patch) | Preserve typed provider failures across HTTP and SSE, including credit exhaustion and timeouts; keep private diagnostics out of normalized errors and credit exhaustion non-retryable. | Patched API bridge/SSE unit tests; [native-turn-errors.test.ts](../../tests/agents/native-turn-errors.test.ts) checks public categories, private-message removal and request count. | -| [checkpoint-shutdown.patch](checkpoint-shutdown.patch) | Add private `thread/checkpoint` for an exact set of idle durable threads, requiring `experimentalApi` during initialization. Use upstream shutdown handles to drain descendants, internal work and persistence before acknowledging the set. The host seals admission, verifies history and waits for process exit before publishing. | Patched `checkpoint_idle_threads_*` core integration tests cover tree shutdown, identity validation, busy rejection and persistence failure; [native-checkpoint.test.ts](../../tests/agents/native-checkpoint.test.ts) exercises capability rejection, the compiled bridge and resume; [session-checkpoint.test.ts](../../tests/runner/session-checkpoint.test.ts) checks host orchestration. The opt-in [AWS checkpoint proof](../../tests/aws/session-checkpoint.test.ts) is still required for actual worker replacement. | -| [unified-exec-output-subscription.patch](unified-exec-output-subscription.patch) | Subscribe when the process output channel is created, retaining early output until the streaming consumer takes its receiver. Upstream retains the completed transcript; streaming still needs the early receiver. | Patched Rust test `streamed_and_completed_output_preserve_bytes_before_subscription` checks both streamed bytes and completed command output with and without late output. | -| [local-subprocess-stdio.patch](local-subprocess-stdio.patch) | Permit the local socket metadata and write-half-close that Node subprocess pipes require under disabled networking. Keep connection operations, non-Unix socket creation, other socket options and other shutdown modes denied. | Patched `restricted_network_supports_node_subprocess_stdio` and `restricted_network_socket_metadata_does_not_enable_connections` tests; [managed-subprocess.test.ts](../../tests/pi/managed-subprocess.test.ts) checks the compiled artifact in strict Linux parity, and both KVM harnesses exercise the guest. | -| [protocol-exports.patch](protocol-exports.patch) | Regenerate upstream's embedded JSON and TypeScript exports after protocol changes. Both exports include the added error categories; only experimental exports include the private checkpoint method and types. | Upstream `schema_fixtures_tests` and `precomputed_exports_tests` compare generated and embedded data; [native-protocol-exports.test.ts](../../tests/agents/native-protocol-exports.test.ts) checks the actual CLI exports in both modes. This patch contains generated data only. | - -## Upgrade one candidate at a time - -1. Preserve the last verified artifact and its matching repository revision before - changing inputs. Review upstream changes to the patched contracts, sandbox, - app-server protocol and companion layout. Record an upstream issue/PR when a - patch is proposed there; do not assume an equivalent fix from its title alone. -2. Update the source pin and exact npm dependency/lockfile together. Rebase the - ordered patches, review every changed hunk, and refresh companion inventories - from the matching integrity-verified npm packages for all supported targets. - Refresh [model-defaults.json](model-defaults.json) from the pinned upstream - catalog and review [model-capabilities.json](model-capabilities.json) against - actual API behavior. The builder verifies the defaults' source hash and values. - Regenerate the protocol exports after all type changes, as described below. -3. Use a new build directory for the candidate. Run `npm run codex:build -- - /absolute/path/to/new-build --prepare-only`, inspect the resulting source diff, - and derive the expected patched tree from those reviewed inputs. Update - `artifact-policy.json` with that tree and the source identity hash; never take - the expected tree from an untrusted artifact merely to make validation pass. -4. Compile and run the affected upstream Rust test modules, including the tests - named above. Then build and validate each platform below. Use the exact candidate - executable for `CODEX_CONFORMANCE_BINARY`; keep strict parity enabled through - `npm run test:agents:parity:host` on the host. The worker-image harness runs - `npm run test:agents:parity` and additionally verifies the installed Pi child - under worker UID 10001. A fixture pass establishes the exercised protocol - behavior, not live authentication or VM isolation. -5. Run `npm run check` with the matching ARM64 packaging artifact, the worker-image - gates and the relevant local acceptance harnesses. Record artifact identities, - commands, results and remaining gaps in the PR/evidence directory. Promote - source policy and artifacts together only after the required gates pass. - -Use the build commands and prerequisites in the -[native compatibility guide](../../testing/README.md#agents-api-native-compatibility-gate). -The [target map](../../scripts/codex-runtime-targets.mjs) is authoritative: - -| Lane | Build and acceptance | -| --- | --- | -| Linux ARM64, `aarch64-unknown-linux-gnu` | Build `runtime/codex/Dockerfile` with `--platform linux/arm64` on the worker's Amazon Linux 2023 baseline. Run packaging, `test:e2e:native-image` and `test:e2e:microvm-image`. Lambda packaging remains ARM64. | -| Linux x64, `x86_64-unknown-linux-gnu` | Build the same Dockerfile with `--platform linux/amd64`. Validate the x64 artifact, run strict native parity and sandbox tests with it, then exercise the [KVM managed Session harnesses](../../testing/local-runtime/linux-kvm/README.md). Building an image does not prove isolation. | -| Apple silicon macOS, `aarch64-apple-darwin` | Build natively with `codex:build` and run strict native parity on macOS. Pair it with the matching ARM64 Linux guest; follow the [guest build](../../testing/local-runtime/native-guest-build.md), [signature fixtures](../../testing/local-runtime/native-signatures/README.md) and [installed runtime acceptance](../../testing/local-runtime/README.md). Keep the signed bundle/verifier contract intact. | - -The [CI workflow](../../.github/workflows/ci.yml) builds and exports ARM64 and x64 -artifacts after their configured gates. Downloaded exports still require provenance -validation. Its macOS job checks the desktop, not a patched macOS runtime release; -do not count that job as macOS runtime acceptance. Caches save compilation work and -never replace artifact validation or semantic tests. For checkpoint changes, include the -explicitly opted-in AWS checkpoint proof before claiming cloud handoff acceptance; -ordinary checks must not provision AWS resources. - -### Regenerate protocol exports - -The production CLI reads compressed, precomputed exports. Changing Rust protocol -types alone leaves `generate-json-schema` and `generate-ts` stale. In the reviewed -upstream checkout, apply all behavior patches first and run its schema writer from -`codex-rs/` for both variants: - -```bash -for experimental in 0 1; do - CODEX_APP_SERVER_SCHEMA_ROOT="$PWD/app-server-protocol/schema" \ - CODEX_APP_SERVER_SCHEMA_EXPERIMENTAL="$experimental" \ - cargo test --locked -p codex-app-server-protocol --lib \ - schema_fixtures_tests::write_schema_fixtures_from_env \ - -- --exact --ignored --test-threads=1 -done -cargo test --locked -p codex-app-server-protocol --lib schema_fixtures_tests -cargo test --locked -p codex-app-server-protocol --lib precomputed_exports_tests +Rat Things uses the official, unmodified Codex 0.164.0 release. It does not compile +Codex, apply source patches or rewrite its executable. Runtime-specific behavior +belongs in Rat Things adapters and uses the public Codex app-server protocol. + +## Release identity + +[source.json](source.json) records the upstream repository, release commit and +version. [companion-packages.json](companion-packages.json) records the official +npm package URL, integrity, descriptor and every runtime file hash for each +supported platform. [package-lock.json](../../package-lock.json) pins the same +packages. The entrypoint, code-mode and voice companions, shared libraries, +resources and bundled `bwrap` must all match that inventory. Bundling voice +resources does not enable voice. + +The [packager](../../scripts/build-codex-runtime.mjs) copies the installed official +package into a new directory and writes `artifact.json` beside `runtime/`. It +then runs the [validator](../../scripts/codex-runtime-artifact.mjs). Validation +requires the pinned distribution identity and exact bytes for every file, +including `bin/codex`; a self-consistent manifest cannot authorize a modified +binary. Missing or extra files, symlinks, unsupported targets and old custom-build +manifests are rejected. The original package descriptor is preserved. + +Linux packages use the upstream musl targets. Worker and VM helper target names +are separate from the Codex distribution target. Linux ARM64 remains required +for Lambda packaging; Linux x64 is used by the local KVM development backend. + +```sh +npm ci +npm run codex:build -- /absolute/path/to/new-runtime ``` -Review the textual schema changes and capture the generated fixtures and both -compressed bundles with `git diff --binary` in `protocol-exports.patch`. Keep it -last in `source.json`. Refresh the source/tree policy and rebuild the executable; -the CLI export tests must use that rebuilt artifact. - -## Upstream, drop or roll back - -Prefer small upstream fixes with the reproducer attached. Drop a patch only when -the pinned upstream source implements the required contract without it, or Rat -Things deliberately removes that dependency. Remove it from `source.json`, refresh -the tree policy, and rerun its semantic regression and affected platform gates. -Keep the regression after dropping the patch. Build/test-only patches can go once -the clean upstream release builds and its affected tests compile without them. - -If a candidate fails, retain the previous verified release. Roll back the source -definition, patches, lockfile, companion inventory and policy together, and select -their matching complete artifact and worker image or signed app release. Do not -relax validation or fall back to the stock npm binary. Check durable-state -compatibility before opening Sessions written by the newer candidate; preserve -their storage and withhold rollback admission if compatibility is unknown. Keep -the last verified artifact outside disposable build caches until its replacement -has passed acceptance. +The historical `codex:build` command packages the official release for the host +platform; it performs no Rust compilation. Use a new output directory. To prepare +a different Linux architecture, use the container packager: + +```sh +docker buildx build --platform linux/arm64 --file runtime/codex/Dockerfile \ + --output type=local,dest=/absolute/path/to/new-arm64-runtime . +``` + +Keep `artifact.json` and `runtime/` together. Select an export with +`CODEX_RUNTIME_ARTIFACT`. Installing a newer global `codex` does not update Rat +Things' pinned worker artifact. + +## Adapter contracts + +Codex settings follow the capabilities exposed by the pinned release. Rat Things +maps its public settings at the boundary and rejects unsupported explicit choices +before starting model work. Provider failures retain the precision available in +Codex's public typed events; private diagnostic text is not used to invent error +categories or returned as a public message. + +Sandbox enforcement remains a prerequisite for managed execution. On Linux, +network-disabled execution uses a validated proxy policy with no allowed +destinations so Node subprocess I/O can work without granting external network +access. The host owns the effective policy and refuses unexpected configuration +or approval requests. Tests must verify actual denied writes and connections, +not infer enforcement from a configuration flag. + +Native checkpoint publication requires completed-turn recovery verification by +the host. An ordinary Codex process exit is not a persistence acknowledgement. +The host must stop all writers, synchronize storage, and verify the saved native +root and child identities and complete public history in a disposable isolated +process before publishing a candidate. Verification must not perform model work +or tools, and its writes must not replace the saved candidate. Running commands, +pending interactions and arbitrary background work are not migrated. Failed +verification must fail the handoff; it must not silently reconstruct a prompt or +start a new native thread. The opt-in AWS checkpoint harness remains necessary +before claiming cloud worker replacement acceptance. + +The cold verifier supports the built-in OpenAI provider and custom Responses API +providers. It rejects Bedrock, Ollama and LM Studio before stopping the live +process until their recovery paths are validated; ordinary Sessions and Pi +Durable execution are unaffected. + +## Upgrade and rollback + +1. Preserve the previous artifact and matching repository revision. Select an + official stable release and inspect its public protocol, sandbox behavior and + companion layout. +2. Update the source pin and npm lock together. Verify each official package's + tarball integrity before refreshing the complete inventory. Update model + defaults from that release's catalog; absent models keep a null default. +3. Package into a new directory and verify its complete inventory. Update Rat + Things adapters for upstream changes. Do not patch Codex to preserve an old + assertion or substitute an unrelated executable. +4. Run the strict native contracts, sandbox and checkpoint regressions against + those exact official bytes. Then run `npm run check`, worker-image checks and + relevant managed acceptance harnesses described in [testing](../../testing/README.md). +5. Record the release, artifact identities, validation and limitations in the PR. + Promote the release only after the required gates pass. + +CI packages official ARM64 and x64 releases and exports them after their required +gates. Cached artifacts still undergo validation and behavior checks. The macOS +CI job validates the desktop; it does not establish signed runtime acceptance. +The native macOS bundle assembler preserves every official Codex and companion +byte, including existing signatures. It signs only the Rat Things VM helper and +outer bundle, then checks the official payload hashes again. Native macOS runtime +distribution remains blocked: admission of the upstream signatures still requires +design and validation on a Mac. The existing installer signer checks remain in +force, and assembled candidates retain `distributionReady: false`. + +Rollback must move the source definition, package lock, inventories, adapters and +runtime artifact together. Preserve newer session storage and verify that the +older version can read it before admitting a rollback. Never bypass checksum, +sandbox or checkpoint verification to make an older artifact run. diff --git a/runtime/codex/api-model-settings.patch b/runtime/codex/api-model-settings.patch deleted file mode 100644 index b17c633..0000000 --- a/runtime/codex/api-model-settings.patch +++ /dev/null @@ -1,621 +0,0 @@ -diff --git a/codex-rs/core/src/client.rs b/codex-rs/core/src/client.rs -index 815ab10..a756599 100644 ---- a/codex-rs/core/src/client.rs -+++ b/codex-rs/core/src/client.rs -@@ -1092,17 +1092,7 @@ impl ModelClient { - &prompt.output_schema, - prompt.output_schema_strict, - ); -- let service_tier = model_info -- .service_tier_for_request(service_tier) -- .filter(|tier| { -- // Bedrock requires an advertised tier, including for flex, which the -- // generic OpenAI resolver permits without catalog support. -- !self.state.provider.info().is_amazon_bedrock() -- || model_info -- .service_tiers -- .iter() -- .any(|supported| supported.id == *tier) -- }); -+ let service_tier = model_info.service_tier_for_request(service_tier); - if !include_internal { - for item in &mut input { - item.clear_tool_result_metadata(); -diff --git a/codex-rs/core/src/config/config_tests.rs b/codex-rs/core/src/config/config_tests.rs -index c45fb2b..bc61204 100644 ---- a/codex-rs/core/src/config/config_tests.rs -+++ b/codex-rs/core/src/config/config_tests.rs -@@ -10317,7 +10317,7 @@ async fn default_service_tier_override_uses_default_request_value() -> std::io:: - } - - #[tokio::test] --async fn legacy_fast_service_tier_override_uses_priority_request_value() -> std::io::Result<()> { -+async fn legacy_fast_service_tier_override_preserves_request_value() -> std::io::Result<()> { - let fixture = create_test_fixture()?; - - let config = Config::load_from_base_config_with_overrides( -@@ -10331,10 +10331,7 @@ async fn legacy_fast_service_tier_override_uses_priority_request_value() -> std: - ) - .await?; - -- assert_eq!( -- config.service_tier, -- Some(ServiceTier::Fast.request_value().to_string()) -- ); -+ assert_eq!(config.service_tier, Some("fast".to_string())); - Ok(()) - } - -@@ -10387,7 +10384,7 @@ async fn config_toml_service_tier_accepts_arbitrary_string() -> std::io::Result< - } - - #[tokio::test] --async fn config_toml_legacy_fast_service_tier_uses_priority_request_value() -> std::io::Result<()> { -+async fn config_toml_legacy_fast_service_tier_preserves_request_value() -> std::io::Result<()> { - let mut fixture = create_test_fixture()?; - fixture.cfg.service_tier = Some("fast".to_string()); - let cwd = fixture.cwd_path(); -@@ -10403,10 +10400,7 @@ async fn config_toml_legacy_fast_service_tier_uses_priority_request_value() -> s - ) - .await?; - -- assert_eq!( -- config.service_tier, -- Some(ServiceTier::Fast.request_value().to_string()) -- ); -+ assert_eq!(config.service_tier, Some("fast".to_string())); - Ok(()) - } - -diff --git a/codex-rs/core/src/config/mod.rs b/codex-rs/core/src/config/mod.rs -index 3f6c1cc..cdce709 100644 ---- a/codex-rs/core/src/config/mod.rs -+++ b/codex-rs/core/src/config/mod.rs -@@ -104,7 +104,6 @@ use codex_protocol::config_types::Personality; - use codex_protocol::config_types::ReasoningSummary; - use codex_protocol::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; - use codex_protocol::config_types::SandboxMode; --use codex_protocol::config_types::ServiceTier; - use codex_protocol::config_types::ShellEnvironmentPolicy; - use codex_protocol::config_types::TrustLevel; - use codex_protocol::config_types::Verbosity; -@@ -4127,17 +4126,8 @@ impl Config { - Some(None) => Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()), - None => cfg.service_tier, - }; -- let service_tier = service_tier.and_then(|service_tier| { -- match ServiceTier::from_request_value(&service_tier) { -- Some(ServiceTier::Fast) => features -- .enabled(Feature::FastMode) -- .then(|| ServiceTier::Fast.request_value().to_string()), -- Some(ServiceTier::Flex) => Some(ServiceTier::Flex.request_value().to_string()), -- None if service_tier == "ultrafast" => features -- .enabled(Feature::UltrafastMode) -- .then_some(service_tier), -- None => Some(service_tier), -- } -+ let service_tier = service_tier.filter(|service_tier| { -+ service_tier != "ultrafast" || features.enabled(Feature::UltrafastMode) - }); - - let compact_prompt = compact_prompt.or(cfg.compact_prompt).and_then(|value| { -diff --git a/codex-rs/core/src/session/mod.rs b/codex-rs/core/src/session/mod.rs -index 96cfaa1..e436ec0 100644 ---- a/codex-rs/core/src/session/mod.rs -+++ b/codex-rs/core/src/session/mod.rs -@@ -117,7 +117,6 @@ use codex_protocol::capabilities::SelectedCapabilityRoot; - use codex_protocol::config_types::ApprovalsReviewer; - use codex_protocol::config_types::AutoCompactTokenLimitScope; - use codex_protocol::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; --use codex_protocol::config_types::ServiceTier; - use codex_protocol::config_types::WebSearchMode; - use codex_protocol::dynamic_tools::DynamicToolResponse; - use codex_protocol::dynamic_tools::DynamicToolSpec; -@@ -1206,7 +1205,7 @@ pub(crate) fn get_service_tier( - model_info: &ModelInfo, - ) -> Option { - let service_tier = configured_service_tier?; -- if service_tier == ServiceTier::Flex.request_value() { -+ if codex_protocol::config_types::AGENTS_API_SERVICE_TIERS.contains(&service_tier.as_str()) { - return Some(service_tier); - } - if features.service_tier_enabled(&service_tier) -@@ -1225,6 +1224,7 @@ fn unsupported_service_tier_warning( - ) -> Option { - let service_tier = configured_service_tier.filter(|service_tier| { - features.service_tier_enabled(service_tier) -+ && !codex_protocol::config_types::AGENTS_API_SERVICE_TIERS.contains(service_tier) - && *service_tier != SERVICE_TIER_DEFAULT_REQUEST_VALUE - && !model_info.supports_service_tier(service_tier) - })?; -diff --git a/codex-rs/core/src/session/step_settings.rs b/codex-rs/core/src/session/step_settings.rs -index b66fb19..0c53160 100644 ---- a/codex-rs/core/src/session/step_settings.rs -+++ b/codex-rs/core/src/session/step_settings.rs -@@ -13,7 +13,6 @@ use codex_protocol::config_types::CollaborationMode; - use codex_protocol::config_types::Personality; - use codex_protocol::config_types::ReasoningSummary; - use codex_protocol::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; --use codex_protocol::config_types::ServiceTier; - use codex_protocol::openai_models::ModelInfo; - use codex_protocol::openai_models::ReasoningEffort; - use codex_protocol::protocol::AskForApproval; -@@ -267,13 +266,8 @@ impl StepSettings { - next.reasoning_summary = Some(summary); - } - if let Some(service_tier) = update.service_tier.clone() { -- // TODO(aibrahim): Remove once v2 clients no longer send the legacy -- // "fast" service tier value. - next.service_tier = Some(match service_tier { -- Some(service_tier) => ServiceTier::from_request_value(&service_tier) -- .map_or(service_tier, |service_tier| { -- service_tier.request_value().to_string() -- }), -+ Some(service_tier) => service_tier, - None => SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string(), - }); - } -diff --git a/codex-rs/core/src/session/step_settings_tests.rs b/codex-rs/core/src/session/step_settings_tests.rs -index 86b8ac1..c8963f4 100644 ---- a/codex-rs/core/src/session/step_settings_tests.rs -+++ b/codex-rs/core/src/session/step_settings_tests.rs -@@ -341,7 +341,7 @@ fn sparse_patch_uses_the_settings_version_being_updated() { - .apply(&tier_update, &constraints) - .expect("a previously prepared sparse update should apply"); - let expected = StepSettings { -- service_tier: Some(ServiceTier::Fast.request_value().to_string()), -+ service_tier: Some("fast".to_string()), - ..latest - }; - assert_eq!(updated, expected); -diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs -index 7bd3a38..327dad3 100644 ---- a/codex-rs/core/src/session/tests.rs -+++ b/codex-rs/core/src/session/tests.rs -@@ -5105,60 +5105,36 @@ fn get_service_tier_drops_unsupported_configured_tier_when_fast_mode_enabled() { - } - - #[test] --fn get_service_tier_preserves_flex_without_catalog_support_or_fast_mode() { -+fn get_service_tier_preserves_explicit_api_choices_without_catalog_or_ui_support() { - let model_info = model_with_default_service_tier(/*default_service_tier*/ None); - for fast_mode_enabled in [false, true] { - let mut features = codex_features::Features::with_defaults(); - features.set_enabled(Feature::FastMode, fast_mode_enabled); -+ for tier in codex_protocol::config_types::AGENTS_API_SERVICE_TIERS { -+ assert_eq!( -+ get_service_tier(Some(tier.to_string()), &features, &model_info), -+ Some(tier.to_string()) -+ ); -+ assert_eq!( -+ unsupported_service_tier_warning(Some(tier), &features, &model_info), -+ None -+ ); -+ } -+ assert_eq!( -+ get_service_tier(Some("unsupported".to_string()), &features, &model_info), -+ None -+ ); - assert_eq!( - get_service_tier( -- Some(ServiceTier::Flex.request_value().to_string()), -+ /*configured_service_tier*/ None, - &features, -- &model_info, -+ &model_info - ), -- Some(ServiceTier::Flex.request_value().to_string()) -+ None - ); - } - } - --#[test] --fn get_service_tier_ignores_non_flex_tiers_when_fast_mode_disabled() { -- let model_info = model_with_default_service_tier(Some(ServiceTier::Fast.request_value())); -- -- assert_eq!( -- get_service_tier( -- Some(ServiceTier::Fast.request_value().to_string()), -- &codex_features::Features::default(), -- &model_info, -- ), -- None -- ); -- assert_eq!( -- get_service_tier( -- Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()), -- &codex_features::Features::default(), -- &model_info, -- ), -- None -- ); -- assert_eq!( -- get_service_tier( -- Some("unsupported".to_string()), -- &codex_features::Features::default(), -- &model_info, -- ), -- None -- ); -- assert_eq!( -- get_service_tier( -- /*configured_service_tier*/ None, -- &codex_features::Features::default(), -- &model_info, -- ), -- None -- ); --} -- - #[tokio::test] - async fn session_settings_null_service_tier_update_uses_default_service_tier() { - let session_configuration = make_session_configuration_for_tests().await; -@@ -5183,7 +5159,7 @@ async fn session_settings_null_service_tier_update_uses_default_service_tier() { - } - - #[tokio::test] --async fn session_settings_legacy_fast_service_tier_update_uses_priority_request_value() { -+async fn session_settings_fast_service_tier_update_preserves_request_value() { - let session_configuration = make_session_configuration_for_tests().await; - - let updated = session_configuration -@@ -5199,10 +5175,7 @@ async fn session_settings_legacy_fast_service_tier_update_uses_priority_request_ - ) - .expect("legacy fast service tier update should apply"); - -- assert_eq!( -- updated.step_settings.service_tier, -- Some(ServiceTier::Fast.request_value().to_string()) -- ); -+ assert_eq!(updated.step_settings.service_tier, Some("fast".to_string())); - } - - pub(crate) async fn make_session_configuration_for_tests() -> SessionConfiguration { -diff --git a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs -index be73c65..baeebae 100644 ---- a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs -+++ b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs -@@ -516,7 +516,7 @@ fn service_tier_test_catalog() -> codex_protocol::openai_models::ModelsResponse - } - - #[tokio::test] --async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_support_it() { -+async fn spawn_agent_service_tier_preserves_explicit_root_preference_not_advertised_by_catalog() { - let (_session, turn) = make_session_and_context().await; - let mut config = (*turn.config).clone(); - config.model = Some("test-model-without-fast".to_string()); -@@ -527,7 +527,11 @@ async fn spawn_agent_service_tier_uses_root_preference_when_root_model_cannot_su - .start_thread(StartThreadOptions::new(config.clone())) - .await - .expect("root thread should start"); -- assert_eq!(root.thread.config_snapshot().await.service_tier, None); -+ // Explicit API tier choices survive omission from the local model catalog. -+ assert_eq!( -+ root.thread.config_snapshot().await.service_tier, -+ Some(ServiceTier::Fast.request_value().to_string()) -+ ); - - config.model = Some("gpt-5.5".to_string()); - apply_spawn_agent_service_tier(root.thread.session.as_ref(), &mut config) -diff --git a/codex-rs/core/tests/suite/agent_websocket.rs b/codex-rs/core/tests/suite/agent_websocket.rs -index 6304ffe..004a06d 100644 ---- a/codex-rs/core/tests/suite/agent_websocket.rs -+++ b/codex-rs/core/tests/suite/agent_websocket.rs -@@ -27,15 +27,16 @@ use std::time::Duration; - - const WS_V2_BETA_HEADER_VALUE: &str = "responses_websockets=2026-02-06"; - --#[test_case::test_case("priority", true, false; "fast mode enabled")] --#[test_case::test_case("priority", false, true; "fast mode disabled")] --#[test_case::test_case("ultrafast", false, true; "ultrafast mode enabled")] --#[test_case::test_case("ultrafast", true, false; "ultrafast mode disabled")] -+#[test_case::test_case("priority", true, false, Some("priority"); "fast mode enabled")] -+#[test_case::test_case("priority", false, true, Some("priority"); "explicit priority survives disabled fast mode")] -+#[test_case::test_case("ultrafast", false, true, Some("ultrafast"); "ultrafast mode enabled")] -+#[test_case::test_case("ultrafast", true, false, None; "ultrafast mode disabled")] - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] - async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( - tier: &'static str, - fast_mode_enabled: bool, - ultrafast_mode_enabled: bool, -+ expected_tier: Option<&'static str>, - ) -> Result<()> { - skip_if_no_network!(Ok(())); - -@@ -67,11 +68,6 @@ async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( - ], - ]) - .await; -- let tier_enabled = if tier == "ultrafast" { -- ultrafast_mode_enabled -- } else { -- fast_mode_enabled -- }; - let test = test_codex() - .with_model("gpt-5.4") - .with_auth(CodexAuth::create_dummy_chatgpt_auth_for_testing()) -@@ -134,10 +130,9 @@ async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( - "child startup should connect before its first turn" - ); - let handshakes = server.handshakes(); -- let expected_hint = if tier_enabled { -- format!("model=gpt-5.4;tier={tier}") -- } else { -- "model=gpt-5.4".to_string() -+ let expected_hint = match expected_tier { -+ Some(tier) => format!("model=gpt-5.4;tier={tier}"), -+ None => "model=gpt-5.4".to_string(), - }; - assert_eq!( - handshakes[1].header(X_CODEX_ROUTING_HINT_HEADER), -@@ -150,10 +145,7 @@ async fn spawned_agent_prewarm_handshake_inherits_effective_root_service_tier( - .await? - .body_json(); - assert_eq!(child_warmup["generate"], false); -- assert_eq!( -- child_warmup["service_tier"].as_str(), -- tier_enabled.then_some(tier) -- ); -+ assert_eq!(child_warmup["service_tier"].as_str(), expected_tier); - assert_eq!(server.handshakes().len(), 2); - child.shutdown_and_wait().await?; - test.codex.shutdown_and_wait().await?; -@@ -716,7 +708,7 @@ async fn websocket_v2_next_turn_uses_updated_service_tier() -> Result<()> { - ); - - assert_eq!(second_turn["type"].as_str(), Some("response.create")); -- assert_eq!(second_turn.get("service_tier"), None); -+ assert_eq!(second_turn["service_tier"].as_str(), Some("default")); - assert_eq!(second_turn.get("previous_response_id"), None); - assert!( - second_turn -diff --git a/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs b/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs -index 8537b9b..3b71d3e 100644 ---- a/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs -+++ b/codex-rs/core/tests/suite/bedrock_service_tier_tests.rs -@@ -64,7 +64,7 @@ async fn bedrock_ultrafast_can_be_configured_and_toggled( - .collect::>(), - vec![ - Some(serde_json::json!("ultrafast")), -- None, -+ Some(serde_json::json!("default")), - Some(serde_json::json!("ultrafast")) - ] - ); -@@ -80,12 +80,12 @@ async fn bedrock_ultrafast_can_be_configured_and_toggled( - #[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-sol", &["custom-tier"], Some("custom-tier"), Some("custom-tier"); "runtime custom tier")] - #[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &[], Some("ultrafast"), None; "mantle empty tiers")] - #[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &[], Some("ultrafast"), None; "runtime empty tiers")] --#[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &["ultrafast"], Some("priority"), None; "mantle unadvertised tier")] --#[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &["ultrafast"], Some("flex"), None; "runtime unadvertised tier")] -+#[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &["ultrafast"], Some("priority"), Some("priority"); "mantle explicit API tier")] -+#[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &["ultrafast"], Some("flex"), Some("flex"); "runtime explicit API tier")] - #[test_case::test_case(AMAZON_BEDROCK_PROVIDER_ID, "openai.gpt-6-astra", &["ultrafast"], None, None; "mantle core requires explicit selection")] - #[test_case::test_case(AMAZON_BEDROCK_RUNTIME_PROVIDER_ID, "global.openai.gpt-6-astra", &["ultrafast"], None, None; "runtime core requires explicit selection")] - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn bedrock_custom_catalog_controls_service_tiers( -+async fn bedrock_custom_catalog_controls_additional_service_tiers( - provider_id: &'static str, - model: &'static str, - advertised_tiers: &'static [&'static str], -diff --git a/codex-rs/core/tests/suite/model_switching.rs b/codex-rs/core/tests/suite/model_switching.rs -index 2fe59dd..7a66c32 100644 ---- a/codex-rs/core/tests/suite/model_switching.rs -+++ b/codex-rs/core/tests/suite/model_switching.rs -@@ -632,7 +632,7 @@ async fn service_tier_change_is_applied_on_next_http_turn() -> Result<()> { - let second_body = requests[1].body_json(); - - assert_eq!(first_body["service_tier"].as_str(), Some("priority")); -- assert_eq!(second_body.get("service_tier"), None); -+ assert_eq!(second_body["service_tier"].as_str(), Some("default")); - - Ok(()) - } -@@ -676,7 +676,7 @@ async fn flex_service_tier_is_applied_to_http_turn() -> Result<()> { - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn unsupported_service_tier_is_omitted_from_http_turn() -> Result<()> { -+async fn unadvertised_api_service_tier_is_preserved_in_http_turn() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -703,13 +703,13 @@ async fn unsupported_service_tier_is_omitted_from_http_turn() -> Result<()> { - - let request = resp_mock.single_request(); - let body = request.body_json(); -- assert_eq!(body.get("service_tier"), None); -+ assert_eq!(body["service_tier"].as_str(), Some("priority")); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn unsupported_configured_service_tier_warns_at_session_start() -> Result<()> { -+async fn unsupported_configured_non_api_service_tier_warns_at_session_start() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -723,7 +723,11 @@ async fn unsupported_configured_service_tier_warns_at_session_start() -> Result< - let mut builder = test_codex() - .with_model(model_slug) - .with_config(move |config| { -- config.service_tier = Some(ServiceTier::Fast.request_value().to_string()); -+ config -+ .features -+ .enable(Feature::FastMode) -+ .expect("test config should allow feature update"); -+ config.service_tier = Some("custom-unadvertised".to_string()); - config.model_catalog = Some(ModelsResponse { - models: vec![model], - }); -@@ -743,13 +747,13 @@ async fn unsupported_configured_service_tier_warns_at_session_start() -> Result< - }; - assert_eq!( - warning.message, -- "Configured service tier `priority` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." -+ "Configured service tier `custom-unadvertised` is not advertised as supported for model `test-no-tier-model` and will be omitted from requests." - ); - Ok(()) - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn default_service_tier_override_is_omitted_from_http_turn() -> Result<()> { -+async fn explicit_default_service_tier_is_sent_on_api_key_http_turn() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -782,13 +786,13 @@ async fn default_service_tier_override_is_omitted_from_http_turn() -> Result<()> - - let request = resp_mock.single_request(); - let body = request.body_json(); -- assert_eq!(body.get("service_tier"), None); -+ assert_eq!(body["service_tier"].as_str(), Some("default")); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 2)] --async fn null_service_tier_override_is_omitted_from_http_turn_with_catalog_default() -> Result<()> { -+async fn null_service_tier_override_sends_api_default_instead_of_catalog_default() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; -@@ -821,7 +825,7 @@ async fn null_service_tier_override_is_omitted_from_http_turn_with_catalog_defau - - let request = resp_mock.single_request(); - let body = request.body_json(); -- assert_eq!(body.get("service_tier"), None); -+ assert_eq!(body["service_tier"].as_str(), Some("default")); - - Ok(()) - } -diff --git a/codex-rs/core/tests/suite/subagent_service_tier.rs b/codex-rs/core/tests/suite/subagent_service_tier.rs -index 74d5592..2af9f80 100644 ---- a/codex-rs/core/tests/suite/subagent_service_tier.rs -+++ b/codex-rs/core/tests/suite/subagent_service_tier.rs -@@ -157,8 +157,8 @@ async fn root_service_tier_change_updates_existing_subagent( - ) -> Result<()> { - let server = start_mock_server().await; - let initial_service_tier_owned = initial_service_tier.map(str::to_string); -- let updated_request_service_tier = updated_service_tier -- .filter(|service_tier| *service_tier != SERVICE_TIER_DEFAULT_REQUEST_VALUE); -+ let updated_request_service_tier = -+ Some(updated_service_tier.unwrap_or(SERVICE_TIER_DEFAULT_REQUEST_VALUE)); - let mut builder = test_codex() - .with_model("gpt-5.6-sol") - .with_config(move |config| { -@@ -389,7 +389,7 @@ async fn evicted_role_subagent_uses_root_service_tier_after_reload() -> Result<( - }])) - .await?; - wait_for_turn_complete(&reloaded_thread).await; -- assert_request_service_tier(&reloaded_request, /*expected*/ None); -+ assert_request_service_tier(&reloaded_request, Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE)); - reloaded_thread.shutdown_and_wait().await?; - test.codex.shutdown_and_wait().await?; - -diff --git a/codex-rs/model-provider/src/amazon_bedrock/catalog.rs b/codex-rs/model-provider/src/amazon_bedrock/catalog.rs -index f160286..643e8da 100644 ---- a/codex-rs/model-provider/src/amazon_bedrock/catalog.rs -+++ b/codex-rs/model-provider/src/amazon_bedrock/catalog.rs -@@ -402,7 +402,7 @@ mod tests { - } - - #[test] -- fn bedrock_models_do_not_enable_priority_or_explicit_default_tiers() { -+ fn bedrock_models_preserve_explicit_provider_tiers_without_catalog_defaults() { - let catalog = static_model_catalog(); - - for model in catalog.models { -@@ -410,12 +410,12 @@ mod tests { - assert_eq!(model.default_service_tier, None); - assert_eq!( - model.service_tier_for_request(Some("priority".to_string())), -- None -+ Some("priority".to_string()) - ); - assert_eq!( - model - .service_tier_for_request(Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string())), -- None -+ Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()) - ); - } - } -diff --git a/codex-rs/protocol/src/config_types.rs b/codex-rs/protocol/src/config_types.rs -index 87ffe6d..38b86d3 100644 ---- a/codex-rs/protocol/src/config_types.rs -+++ b/codex-rs/protocol/src/config_types.rs -@@ -536,6 +536,9 @@ pub enum ServiceTier { - /// selected no service tier, so model catalog defaults should not apply. - pub const SERVICE_TIER_DEFAULT_REQUEST_VALUE: &str = "default"; - -+/// Explicit Agents API routing choices are validated by the model provider. -+pub const AGENTS_API_SERVICE_TIERS: [&str; 5] = ["auto", "default", "flex", "priority", "fast"]; -+ - impl ServiceTier { - pub const fn request_value(self) -> &'static str { - match self { -diff --git a/codex-rs/protocol/src/openai_models.rs b/codex-rs/protocol/src/openai_models.rs -index d3d3dd8..5e174b7 100644 ---- a/codex-rs/protocol/src/openai_models.rs -+++ b/codex-rs/protocol/src/openai_models.rs -@@ -27,7 +27,6 @@ use tracing::warn; - use ts_rs::TS; - - use crate::config_types::ReasoningSummary; --use crate::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; - use crate::config_types::ServiceTier; - use crate::config_types::Verbosity; - use crate::protocol::MultiAgentVersion; -@@ -1016,8 +1015,8 @@ impl ModelInfo { - - pub fn service_tier_for_request(&self, service_tier: Option) -> Option { - service_tier.filter(|service_tier| { -- service_tier != SERVICE_TIER_DEFAULT_REQUEST_VALUE -- && self.supports_service_tier(service_tier) -+ crate::config_types::AGENTS_API_SERVICE_TIERS.contains(&service_tier.as_str()) -+ || self.supports_service_tier(service_tier) - }) - } - } -@@ -1051,6 +1050,7 @@ impl ModelPreset { - #[cfg(test)] - mod tests { - use super::*; -+ use crate::config_types::SERVICE_TIER_DEFAULT_REQUEST_VALUE; - use pretty_assertions::assert_eq; - use serde_json::from_str; - use serde_json::to_string; -@@ -1975,7 +1975,7 @@ mod tests { - } - - #[test] -- fn service_tier_for_request_omits_explicit_default_tier() { -+ fn service_tier_for_request_preserves_explicit_default_tier() { - let model = ModelInfo { - default_service_tier: Some(ServiceTier::Fast.request_value().to_string()), - service_tiers: vec![ModelServiceTier { -@@ -1988,7 +1988,7 @@ mod tests { - - assert_eq!( - model.service_tier_for_request(Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string())), -- None -+ Some(SERVICE_TIER_DEFAULT_REQUEST_VALUE.to_string()) - ); - } - -@@ -2025,6 +2025,12 @@ mod tests { - model.service_tier_for_request(Some("unsupported".to_string())), - None - ); -+ for tier in crate::config_types::AGENTS_API_SERVICE_TIERS { -+ assert_eq!( -+ model.service_tier_for_request(Some(tier.to_string())), -+ Some(tier.to_string()) -+ ); -+ } - assert_eq!(model.service_tier_for_request(/*service_tier*/ None), None); - } - } diff --git a/runtime/codex/api-turn-errors.patch b/runtime/codex/api-turn-errors.patch deleted file mode 100644 index 9edfc6e..0000000 --- a/runtime/codex/api-turn-errors.patch +++ /dev/null @@ -1,462 +0,0 @@ -diff --git a/codex-rs/app-server-protocol/src/protocol/v2/shared.rs b/codex-rs/app-server-protocol/src/protocol/v2/shared.rs -index 65c7db5..3e3f4ef 100644 ---- a/codex-rs/app-server-protocol/src/protocol/v2/shared.rs -+++ b/codex-rs/app-server-protocol/src/protocol/v2/shared.rs -@@ -77,6 +77,8 @@ pub enum CodexErrorInfo { - ContextWindowExceeded, - SessionBudgetExceeded, - UsageLimitExceeded, -+ CreditBalanceExhausted, -+ RequestTimeout, - RateLimitExceeded, - FlexUnavailable, - ServerOverloaded, -@@ -152,6 +154,8 @@ impl From for CodexErrorInfo { - CoreCodexErrorInfo::ContextWindowExceeded => CodexErrorInfo::ContextWindowExceeded, - CoreCodexErrorInfo::SessionBudgetExceeded => CodexErrorInfo::SessionBudgetExceeded, - CoreCodexErrorInfo::UsageLimitExceeded => CodexErrorInfo::UsageLimitExceeded, -+ CoreCodexErrorInfo::CreditBalanceExhausted => CodexErrorInfo::CreditBalanceExhausted, -+ CoreCodexErrorInfo::RequestTimeout => CodexErrorInfo::RequestTimeout, - CoreCodexErrorInfo::RateLimitExceeded => CodexErrorInfo::RateLimitExceeded, - CoreCodexErrorInfo::FlexUnavailable => CodexErrorInfo::FlexUnavailable, - CoreCodexErrorInfo::ServerOverloaded => CodexErrorInfo::ServerOverloaded, -diff --git a/codex-rs/cli/src/doctor.rs b/codex-rs/cli/src/doctor.rs -index 10d1cef..cb024f7 100644 ---- a/codex-rs/cli/src/doctor.rs -+++ b/codex-rs/cli/src/doctor.rs -@@ -2442,6 +2442,7 @@ fn websocket_error_detail(err: &ApiError) -> String { - | ApiError::ResponseIncomplete(_) - | ApiError::ContextWindowExceeded - | ApiError::QuotaExceeded -+ | ApiError::CreditBalanceExhausted - | ApiError::UsageNotIncluded - | ApiError::Retryable { .. } - | ApiError::RateLimitExceeded { .. } -diff --git a/codex-rs/codex-api/src/api_bridge.rs b/codex-rs/codex-api/src/api_bridge.rs -index 98d8d17..fc131d4 100644 ---- a/codex-rs/codex-api/src/api_bridge.rs -+++ b/codex-rs/codex-api/src/api_bridge.rs -@@ -32,6 +32,7 @@ pub fn map_api_error(err: ApiError) -> CodexErr { - | ApiError::ResponseIncomplete(_) - | ApiError::ContextWindowExceeded - | ApiError::QuotaExceeded -+ | ApiError::CreditBalanceExhausted - | ApiError::UsageNotIncluded - | ApiError::FlexUnavailable - | ApiError::RateLimit(_) -@@ -52,6 +53,7 @@ fn map_api_error_details(err: ApiError) -> CodexErr { - match err { - ApiError::ContextWindowExceeded => CodexErr::ContextWindowExceeded, - ApiError::QuotaExceeded => CodexErr::QuotaExceeded, -+ ApiError::CreditBalanceExhausted => CodexErr::CreditBalanceExhausted, - ApiError::UsageNotIncluded => CodexErr::UsageNotIncluded, - ApiError::Retryable { message, .. } => CodexErr::Stream(message), - ApiError::RateLimitExceeded { message, .. } => { -@@ -65,6 +67,9 @@ fn map_api_error_details(err: ApiError) -> CodexErr { - ApiError::ServerOverloaded { .. } => CodexErr::ServerOverloaded, - ApiError::FlexUnavailable => CodexErr::new(CodexErrorDetails::FlexUnavailable), - ApiError::Api { status, message } => { -+ if let Some(error) = typed_error_body(&message) { -+ return error; -+ } - let user_message = api_error_user_message(status, &message); - CodexErr::UnexpectedStatus(UnexpectedResponseError { - status, -@@ -101,6 +106,9 @@ fn map_api_error_details(err: ApiError) -> CodexErr { - .. - } => { - let body_text = body.unwrap_or_default(); -+ if let Some(error) = typed_error_body(&body_text) { -+ return error; -+ } - - if status == http::StatusCode::SERVICE_UNAVAILABLE - && let Ok(value) = serde_json::from_str::(&body_text) -@@ -276,6 +284,22 @@ fn map_api_error_details(err: ApiError) -> CodexErr { - } - } - -+// Typed failures take precedence over a transport status without retaining the -+// provider body in the resulting error. -+fn typed_error_body(body: &str) -> Option { -+ let value = serde_json::from_str::(body).ok()?; -+ match value.get("error")?.get("code")?.as_str()? { -+ "credit_balance_exhausted" => Some(CodexErr::CreditBalanceExhausted), -+ "context_length_exceeded" => Some(CodexErr::ContextWindowExceeded), -+ "session_budget_exceeded" => Some(CodexErr::SessionBudgetExceeded), -+ "insufficient_quota" | "usage_limit_exceeded" => Some(CodexErr::QuotaExceeded), -+ "server_error" => Some(CodexErr::InternalServerError), -+ "server_overloaded" | "server_is_overloaded" => Some(CodexErr::ServerOverloaded), -+ "request_timeout" => Some(CodexErr::RequestTimeout), -+ _ => None, -+ } -+} -+ - const ACTIVE_LIMIT_HEADER: &str = "x-codex-active-limit"; - const REQUEST_ID_HEADER: &str = "x-request-id"; - const OAI_REQUEST_ID_HEADER: &str = "x-oai-request-id"; -diff --git a/codex-rs/codex-api/src/api_bridge_tests.rs b/codex-rs/codex-api/src/api_bridge_tests.rs -index c5504e2..17df58a 100644 ---- a/codex-rs/codex-api/src/api_bridge_tests.rs -+++ b/codex-rs/codex-api/src/api_bridge_tests.rs -@@ -511,7 +511,9 @@ fn map_api_error_distinguishes_http_quota_errors_from_rate_limits() { - serde_json::json!({"type": "rate_limit_error", "code": "rate_limit_exceeded"}), - serde_json::json!({"type": "rate_limit_error", "code": "slow_down"}), - ] { -- let expected = if error["type"] == "rate_limit_error" { -+ let expected = if error["code"] == "credit_balance_exhausted" { -+ CodexErrorInfo::CreditBalanceExhausted -+ } else if error["type"] == "rate_limit_error" { - CodexErrorInfo::ResponseTooManyFailedAttempts { - http_status_code: Some(429), - } -@@ -776,3 +778,69 @@ fn map_api_error_extracts_identity_auth_details_from_headers() { - ); - assert_eq!(err.identity_error_code.as_deref(), Some("token_expired")); - } -+ -+#[test] -+fn credit_balance_errors_preserve_their_category_and_do_not_retry() { -+ let body = -+ r#"{"error":{"code":"credit_balance_exhausted","message":"private provider diagnostic"}}"#; -+ for error in [ -+ ApiError::CreditBalanceExhausted, -+ ApiError::Api { -+ status: http::StatusCode::PAYMENT_REQUIRED, -+ message: body.to_string(), -+ }, -+ ApiError::Transport(TransportError::Http { -+ retry_after: None, -+ status: http::StatusCode::TOO_MANY_REQUESTS, -+ url: None, -+ headers: None, -+ body: Some(body.to_string()), -+ }), -+ ] { -+ let mapped = map_api_error(error); -+ assert_eq!( -+ mapped.to_codex_protocol_error(), -+ CodexErrorInfo::CreditBalanceExhausted -+ ); -+ assert!(mapped.retry_delay(1).is_none()); -+ assert_eq!(mapped.to_string(), "API credit balance exhausted."); -+ } -+} -+ -+#[test] -+fn typed_provider_errors_are_independent_of_http_transport_status() { -+ for (code, expected) in [ -+ ( -+ "context_length_exceeded", -+ CodexErrorInfo::ContextWindowExceeded, -+ ), -+ ("insufficient_quota", CodexErrorInfo::UsageLimitExceeded), -+ ( -+ "session_budget_exceeded", -+ CodexErrorInfo::SessionBudgetExceeded, -+ ), -+ ("server_error", CodexErrorInfo::InternalServerError), -+ ("server_overloaded", CodexErrorInfo::ServerOverloaded), -+ ("request_timeout", CodexErrorInfo::RequestTimeout), -+ ] { -+ let body = serde_json::json!({"error": {"code": code, "message": "private diagnostic"}}) -+ .to_string(); -+ for error in [ -+ ApiError::Api { -+ status: http::StatusCode::BAD_REQUEST, -+ message: body.clone(), -+ }, -+ ApiError::Transport(TransportError::Http { -+ retry_after: None, -+ status: http::StatusCode::BAD_REQUEST, -+ url: None, -+ headers: None, -+ body: Some(body), -+ }), -+ ] { -+ let mapped = map_api_error(error); -+ assert_eq!(mapped.to_codex_protocol_error(), expected); -+ assert!(!mapped.to_string().contains("private diagnostic")); -+ } -+ } -+} -diff --git a/codex-rs/codex-api/src/error.rs b/codex-rs/codex-api/src/error.rs -index ad54b72..035f8d9 100644 ---- a/codex-rs/codex-api/src/error.rs -+++ b/codex-rs/codex-api/src/error.rs -@@ -23,6 +23,8 @@ pub enum ApiError { - ContextWindowExceeded, - #[error("quota exceeded")] - QuotaExceeded, -+ #[error("API credit balance exhausted")] -+ CreditBalanceExhausted, - #[error("usage not included")] - UsageNotIncluded, - #[error("retryable error: {message}")] -diff --git a/codex-rs/codex-api/src/sse/responses.rs b/codex-rs/codex-api/src/sse/responses.rs -index 34d5511..925f720 100644 ---- a/codex-rs/codex-api/src/sse/responses.rs -+++ b/codex-rs/codex-api/src/sse/responses.rs -@@ -1180,6 +1180,15 @@ mod tests { - assert_matches!(events[0], Err(ApiError::ContextWindowExceeded)); - } - -+ #[tokio::test] -+ async fn credit_balance_exhausted_error_is_fatal() { -+ let raw = r#"{"type":"response.failed","response":{"id":"credit_failure","error":{"code":"credit_balance_exhausted","message":"No API credits remain."}}}"#; -+ let sse = format!("data: {raw}\n\n"); -+ let events = collect_events(&[sse.as_bytes()]).await; -+ assert_eq!(events.len(), 1); -+ assert_matches!(events[0], Err(ApiError::CreditBalanceExhausted)); -+ } -+ - #[tokio::test] - async fn quota_exceeded_error_is_fatal() { - let raw_error = r#"{"type":"response.failed","sequence_number":3,"response":{"id":"resp_fatal_quota","object":"response","created_at":1759771626,"status":"failed","background":false,"error":{"code":"insufficient_quota","message":"You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors."},"incomplete_details":null}}"#; -diff --git a/codex-rs/codex-api/src/sse/responses_error.rs b/codex-rs/codex-api/src/sse/responses_error.rs -index 890f45a..8e40aac 100644 ---- a/codex-rs/codex-api/src/sse/responses_error.rs -+++ b/codex-rs/codex-api/src/sse/responses_error.rs -@@ -46,9 +46,19 @@ pub(super) fn parse_failed_response(response: Option) -> ApiError { - - match error.code.as_deref() { - Some("context_length_exceeded") => ApiError::ContextWindowExceeded, -+ Some("credit_balance_exhausted") => ApiError::CreditBalanceExhausted, -+ Some( -+ "server_error" -+ | "request_timeout" -+ | "session_budget_exceeded" -+ | "usage_limit_exceeded" -+ | "server_overloaded", -+ ) => ApiError::Api { -+ status: http::StatusCode::INTERNAL_SERVER_ERROR, -+ message: serde_json::json!({"error": {"code": error.code}}).to_string(), -+ }, - Some( - "insufficient_quota" -- | "credit_balance_exhausted" - | "organization_spend_limit_exceeded" - | "project_spend_limit_exceeded", - ) => ApiError::QuotaExceeded, -diff --git a/codex-rs/core/tests/suite/quota_exceeded.rs b/codex-rs/core/tests/suite/quota_exceeded.rs -index 852fe5a..c02a7ea 100644 ---- a/codex-rs/core/tests/suite/quota_exceeded.rs -+++ b/codex-rs/core/tests/suite/quota_exceeded.rs -@@ -51,6 +51,18 @@ async fn quota_exceeded_emits_single_error_event(code: &str) -> Result<()> { - }])) - .await?; - -+ let (expected_message, expected_error) = if code == "credit_balance_exhausted" { -+ ( -+ "API credit balance exhausted.", -+ CodexErrorInfo::CreditBalanceExhausted, -+ ) -+ } else { -+ ( -+ "Quota exceeded. Check your plan and billing details.", -+ CodexErrorInfo::UsageLimitExceeded, -+ ) -+ }; -+ - let mut error_events = 0; - - loop { -@@ -59,14 +71,8 @@ async fn quota_exceeded_emits_single_error_event(code: &str) -> Result<()> { - match event { - EventMsg::Error(err) => { - error_events += 1; -- assert_eq!( -- err.message, -- "Quota exceeded. Check your plan and billing details." -- ); -- assert_eq!( -- err.codex_error_info, -- Some(CodexErrorInfo::UsageLimitExceeded) -- ); -+ assert_eq!(err.message, expected_message); -+ assert_eq!(err.codex_error_info, Some(expected_error.clone())); - } - EventMsg::TurnComplete(_) => break, - _ => {} -diff --git a/codex-rs/ext/goal/src/extension.rs b/codex-rs/ext/goal/src/extension.rs -index bdc7535..5c55d3a 100644 ---- a/codex-rs/ext/goal/src/extension.rs -+++ b/codex-rs/ext/goal/src/extension.rs -@@ -427,7 +427,9 @@ where - }; - - let reason = match input.error { -- CodexErrorInfo::UsageLimitExceeded => ActiveGoalStopReason::UsageLimit, -+ CodexErrorInfo::UsageLimitExceeded | CodexErrorInfo::CreditBalanceExhausted => { -+ ActiveGoalStopReason::UsageLimit -+ } - // The turn has ended because the error was non-retryable or its - // retries were exhausted. Block the goal to prevent automatic - // continuation from looping and consuming tokens, as can happen -diff --git a/codex-rs/ext/guardian-reviewer/src/retry.rs b/codex-rs/ext/guardian-reviewer/src/retry.rs -index 5740cda..e63643b 100644 ---- a/codex-rs/ext/guardian-reviewer/src/retry.rs -+++ b/codex-rs/ext/guardian-reviewer/src/retry.rs -@@ -180,6 +180,7 @@ fn should_retry_guardian_review(outcome: &GuardianReviewOutcome) -> bool { - .. - }) => match error { - CodexErrorInfo::RateLimitExceeded -+ | CodexErrorInfo::RequestTimeout - | CodexErrorInfo::FlexUnavailable - | CodexErrorInfo::ServerOverloaded - | CodexErrorInfo::InternalServerError => true, -@@ -192,6 +193,7 @@ fn should_retry_guardian_review(outcome: &GuardianReviewOutcome) -> bool { - CodexErrorInfo::ContextWindowExceeded - | CodexErrorInfo::SessionBudgetExceeded - | CodexErrorInfo::UsageLimitExceeded -+ | CodexErrorInfo::CreditBalanceExhausted - | CodexErrorInfo::CyberPolicy - | CodexErrorInfo::BioPolicy - | CodexErrorInfo::MisalignmentPolicyViolation -diff --git a/codex-rs/ext/guardian-reviewer/src/retry_tests.rs b/codex-rs/ext/guardian-reviewer/src/retry_tests.rs -index c33aaff..47809bc 100644 ---- a/codex-rs/ext/guardian-reviewer/src/retry_tests.rs -+++ b/codex-rs/ext/guardian-reviewer/src/retry_tests.rs -@@ -47,6 +47,7 @@ fn guardian_review_retry_only_retries_recoverable_errors() { - let transient_error_info = [ - CodexErrorInfo::ServerOverloaded, - CodexErrorInfo::FlexUnavailable, -+ CodexErrorInfo::RequestTimeout, - CodexErrorInfo::HttpConnectionFailed { - http_status_code: Some(502), - }, -@@ -71,6 +72,13 @@ fn guardian_review_retry_only_retries_recoverable_errors() { - }) - .collect::>(); - outcomes.extend([ -+ ( -+ GuardianReviewOutcome::Error(GuardianReviewError::session_with_error_info( -+ anyhow::anyhow!("credit balance exhausted"), -+ CodexErrorInfo::CreditBalanceExhausted, -+ )), -+ false, -+ ), - (GuardianReviewOutcome::Completed(assessment), false), - ( - GuardianReviewOutcome::Error(GuardianReviewError::StaleAuthorization), -diff --git a/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs b/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs -index 3b7b12c..7356d2d 100644 ---- a/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs -+++ b/codex-rs/ext/guardian-v2/src/async_scorer/metrics.rs -@@ -50,6 +50,7 @@ pub(super) fn sampler_failure_reason(error: &LunaSamplerError) -> &'static str { - ApiError::ResponseIncomplete(_) => "incomplete_response", - ApiError::ContextWindowExceeded => "context_window_exceeded", - ApiError::QuotaExceeded => "quota_exceeded", -+ ApiError::CreditBalanceExhausted => "credit_balance_exhausted", - ApiError::UsageNotIncluded => "usage_not_included", - ApiError::Retryable { .. } => "retryable_api_error", - ApiError::RateLimitExceeded { .. } | ApiError::RateLimit(_) => "rate_limit", -diff --git a/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs b/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs -index 0fc65ad..85da41c 100644 ---- a/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs -+++ b/codex-rs/ext/guardian-v2/src/async_scorer/sampler/execution.rs -@@ -184,6 +184,7 @@ impl SamplingExecution { - | ApiError::ContextWindowExceeded - | ApiError::ResponseIncomplete(_) - | ApiError::QuotaExceeded -+ | ApiError::CreditBalanceExhausted - | ApiError::UsageNotIncluded - | ApiError::RateLimit(_) - | ApiError::InvalidRequest { .. } -diff --git a/codex-rs/protocol/src/codex_error_info.rs b/codex-rs/protocol/src/codex_error_info.rs -index 10928a4..a3bea0c 100644 ---- a/codex-rs/protocol/src/codex_error_info.rs -+++ b/codex-rs/protocol/src/codex_error_info.rs -@@ -20,6 +20,8 @@ enum CodexErrorInfoWire { - ContextWindowExceeded, - SessionBudgetExceeded, - UsageLimitExceeded, -+ CreditBalanceExhausted, -+ RequestTimeout, - RateLimitExceeded, - FlexUnavailable, - ServerOverloaded, -diff --git a/codex-rs/protocol/src/error.rs b/codex-rs/protocol/src/error.rs -index 50c32e3..2811d69 100644 ---- a/codex-rs/protocol/src/error.rs -+++ b/codex-rs/protocol/src/error.rs -@@ -180,6 +180,8 @@ pub enum CodexErrorDetails { - ConnectionFailed(ConnectionFailedError), - #[error("Quota exceeded. Check your plan and billing details.")] - QuotaExceeded, -+ #[error("API credit balance exhausted.")] -+ CreditBalanceExhausted, - #[error( - "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus." - )] -@@ -359,6 +361,7 @@ impl CodexErr { - Interrupted, - ServerOverloaded, - QuotaExceeded, -+ CreditBalanceExhausted, - UsageNotIncluded, - InternalServerError, - InternalAgentDied, -@@ -419,6 +422,7 @@ impl CodexErr { - | CodexErrorDetails::Fatal(_) - | CodexErrorDetails::UsageNotIncluded - | CodexErrorDetails::QuotaExceeded -+ | CodexErrorDetails::CreditBalanceExhausted - | CodexErrorDetails::InvalidImageRequest() - | CodexErrorDetails::InvalidRequest(_) - | CodexErrorDetails::ResponseIncomplete(_) -@@ -491,6 +495,7 @@ impl CodexErr { - pub fn to_codex_protocol_error(&self) -> CodexErrorInfo { - match &self.details { - CodexErrorDetails::ContextWindowExceeded => CodexErrorInfo::ContextWindowExceeded, -+ CodexErrorDetails::CreditBalanceExhausted => CodexErrorInfo::CreditBalanceExhausted, - CodexErrorDetails::SessionBudgetExceeded => CodexErrorInfo::SessionBudgetExceeded, - CodexErrorDetails::RateLimitExceeded(_) => CodexErrorInfo::RateLimitExceeded, - CodexErrorDetails::UsageLimitReached(_) -@@ -517,6 +522,12 @@ impl CodexErr { - http_status_code: self.http_status_code_value(), - } - } -+ CodexErrorDetails::InvalidRequest(_) | CodexErrorDetails::InvalidImageRequest() => { -+ CodexErrorInfo::BadRequest -+ } -+ CodexErrorDetails::RequestTimeout | CodexErrorDetails::Timeout => { -+ CodexErrorInfo::RequestTimeout -+ } - CodexErrorDetails::RefreshTokenFailed(_) => CodexErrorInfo::Unauthorized, - CodexErrorDetails::SessionConfiguredNotFirstEvent - | CodexErrorDetails::InternalServerError -diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs -index dc5c2a3..95b7154 100644 ---- a/codex-rs/protocol/src/protocol.rs -+++ b/codex-rs/protocol/src/protocol.rs -@@ -1971,6 +1971,8 @@ pub enum CodexErrorInfo { - ContextWindowExceeded, - SessionBudgetExceeded, - UsageLimitExceeded, -+ CreditBalanceExhausted, -+ RequestTimeout, - RateLimitExceeded, - FlexUnavailable, - ServerOverloaded, -@@ -2016,6 +2018,8 @@ impl CodexErrorInfo { - Self::ContextWindowExceeded - | Self::SessionBudgetExceeded - | Self::UsageLimitExceeded -+ | Self::CreditBalanceExhausted -+ | Self::RequestTimeout - | Self::RateLimitExceeded - | Self::FlexUnavailable - | Self::ServerOverloaded -diff --git a/codex-rs/response-debug-context/src/lib.rs b/codex-rs/response-debug-context/src/lib.rs -index 97f4024..5f07c4a 100644 ---- a/codex-rs/response-debug-context/src/lib.rs -+++ b/codex-rs/response-debug-context/src/lib.rs -@@ -81,6 +81,7 @@ pub fn telemetry_api_error_message(error: &ApiError) -> String { - ApiError::ResponseIncomplete(_) => "incomplete response".to_string(), - ApiError::ContextWindowExceeded => "context window exceeded".to_string(), - ApiError::QuotaExceeded => "quota exceeded".to_string(), -+ ApiError::CreditBalanceExhausted => "credit balance exhausted".to_string(), - ApiError::UsageNotIncluded => "usage not included".to_string(), - ApiError::Retryable { .. } => "retryable error".to_string(), - ApiError::RateLimitExceeded { .. } => "rate limit exceeded".to_string(), diff --git a/runtime/codex/artifact-policy.json b/runtime/codex/artifact-policy.json deleted file mode 100644 index c268e02..0000000 --- a/runtime/codex/artifact-policy.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "sourceSha256": "be19872dc59c505e709876163d4a66b55ffcef75358889bf723b94c9cc091c75", - "patchedTree": "8c2ebc87b34b0f39f9e783666a53996f89e79402" -} diff --git a/runtime/codex/chatgpt-service-tier.patch b/runtime/codex/chatgpt-service-tier.patch deleted file mode 100644 index 6dbb774..0000000 --- a/runtime/codex/chatgpt-service-tier.patch +++ /dev/null @@ -1,288 +0,0 @@ -diff --git a/codex-rs/core/src/client.rs b/codex-rs/core/src/client.rs -index a756599..30c71df 100644 ---- a/codex-rs/core/src/client.rs -+++ b/codex-rs/core/src/client.rs -@@ -182,6 +182,13 @@ const MEMORIES_SUMMARIZE_ENDPOINT: &str = "/memories/trace_summarize"; - pub(crate) const WEBSOCKET_CONNECT_TIMEOUT: Duration = - Duration::from_millis(DEFAULT_WEBSOCKET_CONNECT_TIMEOUT_MS); - -+fn service_tier_for_auth(service_tier: Option, auth: Option<&CodexAuth>) -> Option { -+ service_tier.filter(|tier| { -+ !auth.is_some_and(CodexAuth::is_chatgpt_auth) -+ || !matches!(tier.as_str(), "auto" | "default") -+ }) -+} -+ - fn session_telemetry_for_request( - session_telemetry: &SessionTelemetry, - request: &ResponsesApiRequest, -@@ -1624,9 +1631,11 @@ impl ModelClientSession { - client_setup.auth.as_ref(), - &responses_headers, - &model_info.slug, -- model_info -- .service_tier_for_request(service_tier.clone()) -- .as_deref(), -+ service_tier_for_auth( -+ model_info.service_tier_for_request(service_tier.clone()), -+ client_setup.auth.as_ref(), -+ ) -+ .as_deref(), - ); - match self - .websocket_connection(WebsocketConnectParams { -@@ -1857,7 +1866,7 @@ impl ResponsesHttpExecutor<'_> { - model_info, - effort.clone(), - summary, -- service_tier.clone(), -+ service_tier_for_auth(service_tier.clone(), client_setup.auth.as_ref()), - responses_metadata, - include_internal, - )?; -@@ -2033,7 +2042,7 @@ impl ModelClientSession { - model_info, - effort.clone(), - summary, -- service_tier.clone(), -+ service_tier_for_auth(service_tier.clone(), client_setup.auth.as_ref()), - responses_metadata, - include_internal, - )?; -diff --git a/codex-rs/core/src/client_tests.rs b/codex-rs/core/src/client_tests.rs -index f929e2c..2d6ab8a 100644 ---- a/codex-rs/core/src/client_tests.rs -+++ b/codex-rs/core/src/client_tests.rs -@@ -75,6 +75,11 @@ use codex_rollout_trace::replay_bundle; - use codex_tools::JsonSchema; - use codex_tools::ResponsesApiTool; - use codex_tools::ToolSpec; -+use core_test_support::responses::ev_completed; -+use core_test_support::responses::ev_response_created; -+use core_test_support::responses::mount_sse_sequence; -+use core_test_support::responses::sse; -+use core_test_support::responses::start_websocket_server; - use futures::StreamExt; - use pretty_assertions::assert_eq; - use serde_json::json; -@@ -1226,6 +1231,220 @@ fn websocket_continuation_reset_reason_survives_failed_reconnect_and_turn_bounda - } - } - -+fn external_chatgpt_service_tier_auth() -> CodexAuth { -+ let claims = json!({"https://api.openai.com/auth": {"chatgpt_user_id": "user-123"}}); -+ let payload = base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(claims.to_string()); -+ CodexAuth::from_external_chatgpt_tokens( -+ &format!("header.{payload}.signature"), -+ "account-123", -+ Some("pro"), -+ ) -+ .expect("test auth") -+} -+ -+const REQUEST_SERVICE_TIERS: [Option<&str>; 8] = [ -+ None, -+ Some("priority"), -+ Some("auto"), -+ Some("auto"), -+ Some("flex"), -+ Some("default"), -+ Some("fast"), -+ None, -+]; -+const CHATGPT_SERVICE_TIERS: [Option<&str>; 8] = [ -+ None, -+ Some("priority"), -+ None, -+ None, -+ Some("flex"), -+ None, -+ Some("fast"), -+ None, -+]; -+ -+fn service_tier_test_client( -+ base_url: String, -+ auth: Option, -+ supports_websockets: bool, -+) -> ModelClient { -+ let mut provider = ModelProviderInfo::create_openai_provider(Some(base_url)); -+ provider.requires_openai_auth = auth.is_some(); -+ provider.supports_websockets = supports_websockets; -+ provider.request_max_retries = Some(0); -+ provider.stream_max_retries = Some(0); -+ provider.stream_idle_timeout_ms = Some(5_000); -+ ModelClient::new( -+ auth.map(AuthManager::from_auth_for_testing), -+ AgentIdentityAuthPolicy::JwtOnly, -+ ThreadId::new(), -+ provider, -+ SessionSource::Cli, -+ "test_originator".to_string(), -+ /*model_verbosity*/ None, -+ /*content_item_kinds_enabled*/ true, -+ /*reasoning_effort_override_enabled*/ false, -+ /*enable_request_compression*/ false, -+ /*include_timing_metrics*/ false, -+ /*beta_features_header*/ None, -+ /*concurrent_reasoning_summaries_enabled*/ false, -+ /*output_token_replay_enabled*/ false, -+ /*attestation_provider*/ None, -+ HttpClientFactory::new(OutboundProxyPolicy::ReqwestDefault), -+ codex_model_provider::WorkspaceRoutingContext::new( -+ "https://chatgpt.com/backend-api".into(), -+ ), -+ Vec::new(), -+ ) -+} -+ -+async fn stream_service_tier_sequence(client: &ModelClient) -> anyhow::Result<()> { -+ let mut session = client.new_session(); -+ let mut prompt = Prompt::default(); -+ for (index, service_tier) in REQUEST_SERVICE_TIERS.into_iter().enumerate() { -+ prompt.input.push(ResponseItem::Message { -+ status: None, -+ encrypted_content: None, -+ id: None, -+ role: "user".to_string(), -+ content: vec![ContentItem::InputText { -+ text: format!("turn {index}"), -+ }], -+ phase: None, -+ internal_chat_message_metadata_passthrough: None, -+ }); -+ let metadata = test_responses_metadata_for_client( -+ client, -+ Some(&format!("turn-{index}")), -+ format!("{}:0", client.state.thread_id), -+ /*parent_thread_id*/ None, -+ TestCodexResponsesRequestKind::Turn, -+ ); -+ let mut stream = session -+ .stream( -+ &prompt, -+ &test_model_info(), -+ &test_session_telemetry(), -+ /*effort*/ None, -+ codex_protocol::config_types::ReasoningSummary::None, -+ service_tier.map(str::to_string), -+ &metadata, -+ &InferenceTraceContext::disabled(), -+ ) -+ .await?; -+ let mut completed = false; -+ while let Some(event) = stream.next().await { -+ if let ResponseEvent::Completed { response_id, .. } = event? { -+ assert_eq!(response_id, format!("resp-{index}")); -+ completed = true; -+ } -+ } -+ assert!(completed, "response stream should complete"); -+ } -+ Ok(()) -+} -+ -+#[test_case::test_case(Some(CodexAuth::create_dummy_chatgpt_auth_for_testing()), CHATGPT_SERVICE_TIERS; "chatgpt")] -+#[test_case::test_case(Some(external_chatgpt_service_tier_auth()), CHATGPT_SERVICE_TIERS; "external_chatgpt")] -+#[test_case::test_case(Some(CodexAuth::from_api_key("test-api-key")), REQUEST_SERVICE_TIERS; "api_key")] -+#[test_case::test_case(None, REQUEST_SERVICE_TIERS; "provider_auth")] -+#[tokio::test] -+async fn responses_service_tier_http_uses_auth_contract( -+ auth: Option, -+ expected_tiers: [Option<&str>; 8], -+) -> anyhow::Result<()> { -+ let server = MockServer::start().await; -+ let responses = REQUEST_SERVICE_TIERS -+ .iter() -+ .enumerate() -+ .map(|(index, _)| { -+ sse(vec![ -+ ev_response_created(&format!("resp-{index}")), -+ ev_completed(&format!("resp-{index}")), -+ ]) -+ }) -+ .collect(); -+ let response_mock = mount_sse_sequence(&server, responses).await; -+ let client = service_tier_test_client( -+ format!("{}/v1", server.uri()), -+ auth, -+ /*supports_websockets*/ false, -+ ); -+ -+ stream_service_tier_sequence(&client).await?; -+ -+ let requests = response_mock.requests(); -+ assert_eq!(requests.len(), expected_tiers.len()); -+ for (request, expected_tier) in requests.iter().zip(expected_tiers) { -+ assert_eq!( -+ request.body_json().get("service_tier"), -+ expected_tier.map(serde_json::Value::from).as_ref(), -+ ); -+ } -+ Ok(()) -+} -+ -+#[test_case::test_case(Some(CodexAuth::create_dummy_chatgpt_auth_for_testing()), CHATGPT_SERVICE_TIERS; "chatgpt")] -+#[test_case::test_case(Some(external_chatgpt_service_tier_auth()), CHATGPT_SERVICE_TIERS; "external_chatgpt")] -+#[test_case::test_case(Some(CodexAuth::from_api_key("test-api-key")), REQUEST_SERVICE_TIERS; "api_key")] -+#[test_case::test_case(None, REQUEST_SERVICE_TIERS; "provider_auth")] -+#[tokio::test] -+async fn responses_service_tier_websocket_uses_auth_contract( -+ auth: Option, -+ expected_tiers: [Option<&str>; 8], -+) -> anyhow::Result<()> { -+ let responses = REQUEST_SERVICE_TIERS -+ .iter() -+ .enumerate() -+ .map(|(index, _)| { -+ vec![ -+ ev_response_created(&format!("resp-{index}")), -+ ev_completed(&format!("resp-{index}")), -+ ] -+ }) -+ .collect(); -+ let server = start_websocket_server(vec![responses]).await; -+ let client = service_tier_test_client( -+ format!("{}/v1", server.uri()), -+ auth, -+ /*supports_websockets*/ true, -+ ); -+ -+ stream_service_tier_sequence(&client).await?; -+ -+ let requests = server.single_connection(); -+ assert_eq!(requests.len(), expected_tiers.len()); -+ for (request, expected_tier) in requests.iter().zip(expected_tiers) { -+ assert_eq!( -+ request.body_json().get("service_tier"), -+ expected_tier.map(serde_json::Value::from).as_ref(), -+ ); -+ } -+ assert!( -+ requests[2] -+ .body_json() -+ .get("previous_response_id") -+ .is_none() -+ ); -+ assert_eq!(requests[3].body_json()["previous_response_id"], "resp-2"); -+ server.shutdown().await; -+ Ok(()) -+} -+ -+#[test] -+fn service_tier_auth_filter_preserves_bedrock_request_values() { -+ let auth = CodexAuth::BedrockApiKey(codex_login::auth::BedrockApiKeyAuth { -+ api_key: "test-bedrock-key".to_string(), -+ region: "us-west-2".to_string(), -+ }); -+ for service_tier in REQUEST_SERVICE_TIERS { -+ assert_eq!( -+ super::service_tier_for_auth(service_tier.map(str::to_string), Some(&auth)), -+ service_tier.map(str::to_string), -+ ); -+ } -+} -+ - fn spawned_session_source() -> SessionSource { - SessionSource::SubAgent(SubAgentSource::ThreadSpawn { - parent_thread_id: ThreadId::new(), diff --git a/runtime/codex/checkpoint-shutdown.patch b/runtime/codex/checkpoint-shutdown.patch deleted file mode 100644 index 1bbc9a1..0000000 --- a/runtime/codex/checkpoint-shutdown.patch +++ /dev/null @@ -1,399 +0,0 @@ -diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs -index b183d6a..e9a898c 100644 ---- a/codex-rs/app-server-protocol/src/protocol/common.rs -+++ b/codex-rs/app-server-protocol/src/protocol/common.rs -@@ -868,6 +868,12 @@ client_request_definitions! { - serialization: None, - response: v2::ThreadLoadedListResponse, - }, -+ #[experimental("thread/checkpoint")] -+ ThreadCheckpoint => "thread/checkpoint" { -+ params: v2::ThreadCheckpointParams, -+ serialization: thread_id(params.thread_id), -+ response: v2::ThreadCheckpointResponse, -+ }, - ThreadRead => "thread/read" { - params: v2::ThreadReadParams, - serialization: thread_id(params.thread_id), -diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs -index a7a7623..1fdd5a5 100644 ---- a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs -+++ b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs -@@ -1705,6 +1705,23 @@ pub enum ThreadActiveFlag { - WaitingOnUserInput, - } - -+#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -+#[serde(rename_all = "camelCase")] -+#[ts(export_to = "v2/")] -+pub struct ThreadCheckpointParams { -+ pub thread_id: String, -+ pub expected_thread_ids: Vec, -+} -+ -+#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -+#[serde(rename_all = "camelCase")] -+#[ts(export_to = "v2/")] -+pub struct ThreadCheckpointResponse { -+ pub thread_id: String, -+ pub thread_ids: Vec, -+ pub flushed: bool, -+} -+ - #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] - #[serde(rename_all = "camelCase")] - #[ts(export_to = "v2/")] -diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs -index e1e5a7a..c84d6b2 100644 ---- a/codex-rs/app-server/src/message_processor.rs -+++ b/codex-rs/app-server/src/message_processor.rs -@@ -1547,6 +1547,9 @@ impl MessageProcessor { - ClientRequest::ThreadLoadedList { params, .. } => { - self.thread_processor.thread_loaded_list(params).await - } -+ ClientRequest::ThreadCheckpoint { params, .. } => { -+ self.thread_processor.thread_checkpoint(params).await -+ } - ClientRequest::ThreadRead { params, .. } => { - self.thread_processor.thread_read(&request_id, params).await - } -diff --git a/codex-rs/app-server/src/request_processors/thread_processor.rs b/codex-rs/app-server/src/request_processors/thread_processor.rs -index 4d104e2..9199094 100644 ---- a/codex-rs/app-server/src/request_processors/thread_processor.rs -+++ b/codex-rs/app-server/src/request_processors/thread_processor.rs -@@ -560,6 +560,43 @@ impl ThreadRequestProcessor { - .map(|()| None) - } - -+ /// Private host handoff primitive. The host must seal admission on every thread. -+ pub(crate) async fn thread_checkpoint( -+ &self, -+ params: codex_app_server_protocol::ThreadCheckpointParams, -+ ) -> Result, JSONRPCErrorError> { -+ let root = ThreadId::from_string(¶ms.thread_id) -+ .map_err(|_| invalid_request("invalid checkpoint thread id"))?; -+ if params.expected_thread_ids.is_empty() || params.expected_thread_ids.len() > 1000 { -+ return Err(invalid_request( -+ "checkpoint requires 1 to 1000 expected threads", -+ )); -+ } -+ let expected = params -+ .expected_thread_ids -+ .iter() -+ .map(|id| { -+ ThreadId::from_string(id) -+ .map_err(|_| invalid_request("invalid expected checkpoint thread id")) -+ }) -+ .collect::, _>>()?; -+ let thread_ids = tokio::time::timeout( -+ Duration::from_secs(30), -+ self.thread_manager.checkpoint_idle_threads(root, expected), -+ ) -+ .await -+ .map_err(|_| internal_error("checkpoint shutdown timed out"))? -+ .map_err(|_| internal_error("checkpoint shutdown was not durably acknowledged"))?; -+ Ok(Some( -+ codex_app_server_protocol::ThreadCheckpointResponse { -+ thread_id: params.thread_id, -+ thread_ids: thread_ids.into_iter().map(|id| id.to_string()).collect(), -+ flushed: true, -+ } -+ .into(), -+ )) -+ } -+ - pub(crate) async fn thread_unsubscribe( - &self, - request_id: &ConnectionRequestId, -diff --git a/codex-rs/core/src/thread_manager/shutdown.rs b/codex-rs/core/src/thread_manager/shutdown.rs -index e622f41..088c650 100644 ---- a/codex-rs/core/src/thread_manager/shutdown.rs -+++ b/codex-rs/core/src/thread_manager/shutdown.rs -@@ -6,6 +6,8 @@ use codex_protocol::ThreadId; - use codex_protocol::error::CodexErr; - use codex_protocol::error::Result as CodexResult; - use codex_thread_store::ThreadStoreError; -+use std::collections::HashMap; -+use std::collections::HashSet; - use std::fmt; - use std::sync::Arc; - use uuid::Uuid; -@@ -129,6 +131,78 @@ impl AgentTreeShutdown { - } - - impl ThreadManager { -+ /// Checkpoints the exact visible set after host-side admission has been sealed. -+ /// Upstream tree shutdown accounts for internal sessions and admitted startup work. -+ pub async fn checkpoint_idle_threads( -+ &self, -+ root: ThreadId, -+ expected: Vec, -+ ) -> CodexResult> { -+ let expected_set: HashSet<_> = expected.iter().copied().collect(); -+ if expected.is_empty() -+ || expected.len() > 1000 -+ || expected_set.len() != expected.len() -+ || !expected_set.contains(&root) -+ { -+ return Err(CodexErr::InvalidRequest( -+ "checkpoint requires a unique bounded thread set containing the root".to_owned(), -+ )); -+ } -+ let captured: HashMap<_, _> = self -+ .state -+ .threads -+ .read() -+ .await -+ .iter() -+ .filter(|(_, thread)| !thread.session_source.is_internal()) -+ .map(|(id, thread)| (*id, Arc::clone(thread))) -+ .collect(); -+ if captured.len() != expected_set.len() -+ || captured.keys().any(|id| !expected_set.contains(id)) -+ { -+ return Err(CodexErr::InvalidRequest( -+ "checkpoint thread set does not match loaded threads".to_owned(), -+ )); -+ } -+ for thread in captured.values() { -+ if thread.session.active_turn.lock().await.is_some() -+ || thread.session.live_thread().is_none() -+ { -+ return Err(CodexErr::InvalidRequest( -+ "checkpoint requires idle durable threads".to_owned(), -+ )); -+ } -+ } -+ // Retain exact lifetimes because tree shutdown can remove a child from the registry. -+ let shutdowns: Vec<_> = captured -+ .values() -+ .map(|thread| AgentTreeShutdown { -+ state: thread -+ .session -+ .services -+ .local_agent_runtime -+ .request_shutdown(), -+ }) -+ .collect(); -+ for shutdown in shutdowns { -+ shutdown.wait_detailed().await.map_err(|_| { -+ CodexErr::Fatal("checkpoint persistence shutdown failed".to_owned()) -+ })?; -+ } -+ let loaded = self.state.threads.read().await; -+ if loaded.iter().any(|(id, thread)| { -+ !thread.session_source.is_internal() -+ && !captured -+ .get(id) -+ .is_some_and(|before| Arc::ptr_eq(before, thread)) -+ }) { -+ return Err(CodexErr::InvalidRequest( -+ "checkpoint thread set changed during shutdown".to_owned(), -+ )); -+ } -+ Ok(expected) -+ } -+ - /// Unloads this exact idle MAv2 child using the manager's local controller backend, - /// preserving mail and environments for reloading. Host controllers own their eviction - /// and recovery; managers configured with a host controller factory are rejected. -diff --git a/codex-rs/core/tests/suite/agent_execution.rs b/codex-rs/core/tests/suite/agent_execution.rs -index cf80fc3..03117df 100644 ---- a/codex-rs/core/tests/suite/agent_execution.rs -+++ b/codex-rs/core/tests/suite/agent_execution.rs -@@ -978,5 +978,195 @@ async fn tree_shutdown_reports_persistence_writer_failure() -> Result<()> { - Ok(()) - } - -+#[tokio::test] -+async fn checkpoint_idle_threads_waits_for_all_roots_children_and_internal_sessions() -> Result<()> -+{ -+ use codex_core::StartThreadOptions; -+ use codex_protocol::protocol::InternalSessionSource; -+ use codex_protocol::protocol::SessionSource; -+ -+ let server = start_mock_server().await; -+ mount_root_collaboration_call( -+ &server, -+ FIRST_PROMPT, -+ "first-call", -+ "spawn_agent", -+ json!({"message": FIRST_TASK, "task_name": "first", "fork_turns": "none"}), -+ ) -+ .await; -+ mount_completed_worker(&server, FIRST_TASK, "first-call").await; -+ let test = test_codex() -+ .with_model("gpt-5.6-sol") -+ .with_config(|config| { -+ config.features.enable(Feature::Collab).unwrap(); -+ config.features.enable(Feature::MultiAgentV2).unwrap(); -+ }) -+ .build_with_auto_env(&server) -+ .await?; -+ test.submit_turn(FIRST_PROMPT).await?; -+ let root = test.session_configured.thread_id; -+ let worker_id = test -+ .thread_manager -+ .list_thread_ids() -+ .await -+ .into_iter() -+ .find(|id| *id != root) -+ .expect("spawned worker"); -+ let worker = test.thread_manager.get_thread(worker_id).await?; -+ wait_for_event(&worker, |event| matches!(event, EventMsg::TurnComplete(_))).await; -+ let internal = test -+ .thread_manager -+ .spawn_internal_session( -+ root, -+ StartThreadOptions { -+ session_source: Some(SessionSource::Internal(InternalSessionSource::Guardian)), -+ ..StartThreadOptions::new(test.config.clone()) -+ }, -+ ) -+ .await?; -+ let other = test -+ .thread_manager -+ .start_thread(test.start_thread_options().await) -+ .await?; -+ let expected = vec![root, worker_id, other.thread_id]; -+ let result = tokio::time::timeout( -+ Duration::from_secs(10), -+ test.thread_manager -+ .checkpoint_idle_threads(root, expected.clone()), -+ ) -+ .await??; -+ assert_eq!(result, expected); -+ for thread in [&test.codex, &worker, &internal.thread, &other.thread] { -+ assert!(thread.wait_until_terminated().now_or_never().is_some()); -+ } -+ Ok(()) -+} -+ -+#[tokio::test] -+async fn checkpoint_idle_threads_rejects_invalid_expected_sets_without_stopping_threads() -+-> Result<()> { -+ use codex_protocol::ThreadId; -+ -+ let server = start_mock_server().await; -+ let test = test_codex().build_with_auto_env(&server).await?; -+ let root = test.session_configured.thread_id; -+ let other = test -+ .thread_manager -+ .start_thread(test.start_thread_options().await) -+ .await?; -+ let cases = vec![ -+ vec![], -+ vec![root, root, other.thread_id], -+ vec![other.thread_id], -+ vec![root], -+ vec![root, other.thread_id, ThreadId::new()], -+ std::iter::once(root) -+ .chain((0..1000).map(|_| ThreadId::new())) -+ .collect(), -+ ]; -+ for expected in cases { -+ test.thread_manager -+ .checkpoint_idle_threads(root, expected) -+ .await -+ .expect_err("invalid expected set must fail"); -+ assert!(test.codex.wait_until_terminated().now_or_never().is_none()); -+ assert!( -+ other -+ .thread -+ .wait_until_terminated() -+ .now_or_never() -+ .is_none() -+ ); -+ } -+ tokio::time::timeout( -+ Duration::from_secs(10), -+ test.thread_manager -+ .checkpoint_idle_threads(root, vec![root, other.thread_id]), -+ ) -+ .await??; -+ Ok(()) -+} -+ -+#[tokio::test] -+async fn checkpoint_idle_threads_rejects_busy_child_before_stopping_any_thread() -> Result<()> { -+ use core_test_support::responses::mount_response_once_match; -+ use wiremock::ResponseTemplate; -+ -+ let server = start_mock_server().await; -+ mount_root_collaboration_call( -+ &server, -+ FIRST_PROMPT, -+ "first-call", -+ "spawn_agent", -+ json!({"message": FIRST_TASK, "task_name": "first", "fork_turns": "none"}), -+ ) -+ .await; -+ mount_response_once_match( -+ &server, -+ |request: &wiremock::Request| { -+ body_contains(request, FIRST_TASK) && !has_function_call_output(request, "first-call") -+ }, -+ ResponseTemplate::new(200) -+ .insert_header("content-type", "text/event-stream") -+ .set_body_string(sse(vec![ -+ ev_response_created("busy-worker"), -+ ev_completed("busy-worker"), -+ ])) -+ .set_delay(Duration::from_secs(60)), -+ ) -+ .await; -+ let test = test_codex() -+ .with_model("gpt-5.6-sol") -+ .with_config(|config| { -+ config.features.enable(Feature::Collab).unwrap(); -+ config.features.enable(Feature::MultiAgentV2).unwrap(); -+ }) -+ .build_with_auto_env(&server) -+ .await?; -+ test.submit_turn(FIRST_PROMPT).await?; -+ let root = test.session_configured.thread_id; -+ let worker_id = test -+ .thread_manager -+ .list_thread_ids() -+ .await -+ .into_iter() -+ .find(|id| *id != root) -+ .expect("spawned worker"); -+ let worker = test.thread_manager.get_thread(worker_id).await?; -+ wait_for_event(&worker, |event| matches!(event, EventMsg::TurnStarted(_))).await; -+ test.thread_manager -+ .checkpoint_idle_threads(root, vec![root, worker_id]) -+ .await -+ .expect_err("busy child must prevent checkpoint"); -+ assert!(test.codex.wait_until_terminated().now_or_never().is_none()); -+ assert!(worker.wait_until_terminated().now_or_never().is_none()); -+ let shutdown = test -+ .thread_manager -+ .request_agent_tree_shutdown(root) -+ .await?; -+ tokio::time::timeout(Duration::from_secs(10), shutdown.wait_detailed()).await??; -+ Ok(()) -+} -+ -+#[tokio::test] -+async fn checkpoint_idle_threads_propagates_real_persistence_writer_failure() -> Result<()> { -+ let server = start_mock_server().await; -+ let test = test_codex().build_with_auto_env(&server).await?; -+ let root = test.session_configured.thread_id; -+ test.thread_store.shutdown_thread(root).await?; -+ let error = tokio::time::timeout( -+ Duration::from_secs(10), -+ test.thread_manager -+ .checkpoint_idle_threads(root, vec![root]), -+ ) -+ .await? -+ .expect_err("failed persistence writer must prevent checkpoint acknowledgment"); -+ assert!( -+ matches!(error.details(), codex_protocol::error::CodexErrorDetails::Fatal(message) -+ if message == "checkpoint persistence shutdown failed") -+ ); -+ Ok(()) -+} -+ - #[path = "agent_mailbox.rs"] - mod agent_mailbox; diff --git a/runtime/codex/interrupt-barrier.patch b/runtime/codex/interrupt-barrier.patch deleted file mode 100644 index 5a498af..0000000 --- a/runtime/codex/interrupt-barrier.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- a/codex-rs/core/src/agent/control.rs -+++ b/codex-rs/core/src/agent/control.rs -@@ -342,20 +342,10 @@ - /// Interrupt the current task for an existing agent thread. - pub(crate) async fn interrupt_agent(&self, agent_id: ThreadId) -> CodexResult { - let state = self.runtime.upgrade()?; -- self.handle_thread_request_result( -- agent_id, -- &state, -- state -- .send_op( -- agent_id, -- Op::Interrupt, -- /*parent_turn_id*/ None, -- /*root_turn_id*/ None, -- /*message_delivery*/ None, -- ) -- .await, -- ) -- .await -+ let thread = state.get_thread(agent_id).await?; -+ // A follow-up must not race cancellation while it still holds admission. -+ thread.session.interrupt_task().await; -+ Ok(Uuid::now_v7().to_string()) - } - - async fn handle_thread_request_result( diff --git a/runtime/codex/local-subprocess-stdio.patch b/runtime/codex/local-subprocess-stdio.patch deleted file mode 100644 index 55091f0..0000000 --- a/runtime/codex/local-subprocess-stdio.patch +++ /dev/null @@ -1,143 +0,0 @@ -diff --git a/codex-rs/linux-sandbox/src/seccomp.rs b/codex-rs/linux-sandbox/src/seccomp.rs -index 67cc724..5c21c3c 100644 ---- a/codex-rs/linux-sandbox/src/seccomp.rs -+++ b/codex-rs/linux-sandbox/src/seccomp.rs -@@ -208,8 +208,6 @@ fn install_network_seccomp_filter_on_current_thread( - deny_syscall(&mut rules, libc::SYS_bind); - deny_syscall(&mut rules, libc::SYS_listen); - deny_syscall(&mut rules, libc::SYS_getpeername); -- deny_syscall(&mut rules, libc::SYS_getsockname); -- deny_syscall(&mut rules, libc::SYS_shutdown); - deny_syscall(&mut rules, libc::SYS_sendto); - deny_syscall(&mut rules, libc::SYS_sendmmsg); - // NOTE: allowing recvfrom allows some tools like: `cargo clippy` -@@ -217,7 +215,39 @@ fn install_network_seccomp_filter_on_current_thread( - // management. - // deny_syscall(&mut rules, libc::SYS_recvfrom); - deny_syscall(&mut rules, libc::SYS_recvmmsg); -- deny_syscall(&mut rules, libc::SYS_getsockopt); -+ // Local subprocess pipes use AF_UNIX socketpairs. Permit only the -+ // descriptor metadata and write-half-close required by libuv; none -+ // of these operations creates or connects a socket. Other socket -+ // options, mutations, connection operations and families stay denied. -+ // getsockname is read-only metadata and needs no seccomp rule. -+ rules.insert( -+ libc::SYS_shutdown, -+ vec![SeccompRule::new(vec![SeccompCondition::new( -+ 1, -+ SeccompCmpArgLen::Dword, -+ SeccompCmpOp::Ne, -+ libc::SHUT_WR as u64, -+ )?])?], -+ ); -+ // Separate rules are ORed: reject either a different level or a -+ // different option. Combining these conditions would allow too much. -+ rules.insert( -+ libc::SYS_getsockopt, -+ vec![ -+ SeccompRule::new(vec![SeccompCondition::new( -+ 1, -+ SeccompCmpArgLen::Dword, -+ SeccompCmpOp::Ne, -+ libc::SOL_SOCKET as u64, -+ )?])?, -+ SeccompRule::new(vec![SeccompCondition::new( -+ 2, -+ SeccompCmpArgLen::Dword, -+ SeccompCmpOp::Ne, -+ libc::SO_TYPE as u64, -+ )?])?, -+ ], -+ ); - deny_syscall(&mut rules, libc::SYS_setsockopt); - - // For `socket` we allow AF_UNIX (arg0 == AF_UNIX) and deny -diff --git a/codex-rs/linux-sandbox/tests/suite/sandbox.rs b/codex-rs/linux-sandbox/tests/suite/sandbox.rs -index e0167df..b718dd6 100644 ---- a/codex-rs/linux-sandbox/tests/suite/sandbox.rs -+++ b/codex-rs/linux-sandbox/tests/suite/sandbox.rs -@@ -1572,3 +1572,84 @@ async fn sandbox_blocks_dev_tcp_redirection() { - - #[path = "daemon_sockets_tests.rs"] - mod daemon_sockets_tests; -+ -+// These compatibility regressions require Node and Python, and intentionally do -+// not accept a missing interpreter or unavailable sandbox as a passing result. -+#[tokio::test] -+async fn restricted_network_supports_node_subprocess_stdio() { -+ let script = r#" -+const assert = require('node:assert/strict'); -+const { spawnSync, spawn } = require('node:child_process'); -+const child = "let input='';process.stdin.setEncoding('utf8');process.stdin.on('data',chunk=>input+=chunk);process.stdin.on('end',()=>{process.stdout.write('out:'+input);process.stderr.write('err:'+input)});"; -+const sync = spawnSync(process.execPath, ['-e', child], { input: 'sync', encoding: 'utf8', timeout: 3000 }); -+assert.equal(sync.error, undefined); -+assert.equal(sync.status, 0); -+assert.equal(sync.stdout, 'out:sync'); -+assert.equal(sync.stderr, 'err:sync'); -+const failed = spawnSync(process.execPath, ['-e', "console.error('intentional-failure');process.exitCode=7"], { encoding: 'utf8', timeout: 3000 }); -+assert.equal(failed.error, undefined); -+assert.equal(failed.status, 7); -+assert.equal(failed.stderr, 'intentional-failure\n'); -+const asyncChild = spawn(process.execPath, ['-e', child]); -+let stdout = '', stderr = ''; -+asyncChild.stdout.on('data', chunk => stdout += chunk); -+asyncChild.stderr.on('data', chunk => stderr += chunk); -+asyncChild.on('error', error => { throw error; }); -+asyncChild.stdin.on('error', error => { throw error; }); -+asyncChild.on('close', code => { -+ assert.equal(code, 0); -+ assert.equal(stdout, 'out:async'); -+ assert.equal(stderr, 'err:async'); -+ console.log('local-subprocess-stdio-ok'); -+}); -+asyncChild.stdin.end('async'); -+"#; -+ let output = run_cmd_output(&["node", "-e", script], &[], LONG_TIMEOUT_MS).await; -+ assert_eq!(output.exit_code, 0, "{}", output.stderr.text); -+ assert_eq!(output.stdout.text, "local-subprocess-stdio-ok\n"); -+} -+ -+#[tokio::test] -+async fn restricted_network_socket_metadata_does_not_enable_connections() { -+ let script = r#" -+import errno, os, socket -+ -+def denied(operation): -+ try: -+ operation() -+ except PermissionError as error: -+ assert error.errno == errno.EPERM, error -+ else: -+ raise AssertionError('operation was not denied with EPERM') -+ -+left, right = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM) -+assert left.getsockname() == '' -+assert left.getsockopt(socket.SOL_SOCKET, socket.SO_TYPE) == socket.SOCK_STREAM -+os.write(left.fileno(), b'local') -+assert os.read(right.fileno(), 5) == b'local' -+left.shutdown(socket.SHUT_WR) -+assert os.read(right.fileno(), 1) == b'' -+# Each mismatching field independently denies, including both mismatching. -+denied(lambda: right.getsockopt(socket.IPPROTO_TCP, socket.SO_TYPE)) -+denied(lambda: right.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)) -+denied(lambda: right.getsockopt(socket.IPPROTO_TCP, socket.SO_ERROR)) -+denied(lambda: right.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 65536)) -+denied(lambda: right.getpeername()) -+denied(lambda: right.shutdown(socket.SHUT_RD)) -+denied(lambda: right.shutdown(socket.SHUT_RDWR)) -+left.close() -+right.close() -+for family in (socket.AF_INET, socket.AF_INET6, socket.AF_VSOCK, socket.AF_NETLINK): -+ denied(lambda: socket.socket(family, socket.SOCK_STREAM)) -+ denied(lambda: socket.socketpair(family, socket.SOCK_STREAM)) -+with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as endpoint: -+ denied(lambda: endpoint.bind('/tmp/rat-network-denied')) -+ denied(lambda: endpoint.connect('/tmp/rat-network-denied')) -+ denied(lambda: endpoint.listen(1)) -+ denied(lambda: endpoint.accept()) -+print('local-socket-only-ok') -+"#; -+ let output = run_cmd_output(&["python3", "-c", script], &[], LONG_TIMEOUT_MS).await; -+ assert_eq!(output.exit_code, 0, "{}", output.stderr.text); -+ assert_eq!(output.stdout.text, "local-socket-only-ok\n"); -+} diff --git a/runtime/codex/protocol-exports.patch b/runtime/codex/protocol-exports.patch deleted file mode 100644 index dd7aa8b..0000000 --- a/runtime/codex/protocol-exports.patch +++ /dev/null @@ -1,12871 +0,0 @@ -diff --git a/codex-rs/app-server-protocol/schema/json/ServerNotification.json b/codex-rs/app-server-protocol/schema/json/ServerNotification.json -index 7d7b7ce0abc945a022aef18ed04050c2b2e68b7b..7bed6fadc842fe1d5605d5b7c742a5649769f289 100644 ---- a/codex-rs/app-server-protocol/schema/json/ServerNotification.json -+++ b/codex-rs/app-server-protocol/schema/json/ServerNotification.json -@@ -660,6 +660,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json -index ba22b80fea07a116870e3c06d8b9b5f5b0d70267..71c5407fd50b772bf9701c519bbd8860aea19384 100644 ---- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json -+++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json -@@ -8559,6 +8559,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json -index 5c590af8cd21c0502f2cadd3fafbf80e15b16517..fffe3a87dbf58be2052ae53a98e070b696e42393 100644 ---- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json -+++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json -@@ -4375,6 +4375,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json -index 108ebe232e070231a3d223cee7b6c1254bf5bd77..ea047a410075434c15249d5bb76cf520445caf93 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ErrorNotification.json -@@ -8,6 +8,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json -index eac1c0ab70fed1a421b29500cf8907134b9e2424..b0212dcf6aa59aaa2d2eee36a977784df52ec3fd 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json -@@ -58,6 +58,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json -index 2b728204ba0c654e5edd4c67efd77360ac7c8d88..88bee8f2940808435a5956fe011e9f96929655f5 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json -@@ -139,6 +139,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json -index 8f1b2483c796ac372b02ce99125aabddd7b70b53..22454b7888183200bec89641d23bdcf131e2a61c 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json -@@ -61,6 +61,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json -index e01baa846e884f63da1287c431951a5421540535..1e6559ccdf0fca6307fd3a804f0aa2a69a05d5f4 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json -@@ -61,6 +61,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json -index a81e27a5362f707c15e06e10bed111ec314e6e7f..28e7c23463840979d3d63e4b1a50afff8acabbdf 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json -@@ -61,6 +61,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json -index 4f4d578780ec4bb4baca4daa900dc2777d0bd292..d3f4dc5bd2ea781cc4977ac63d189407e7dea71c 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json -@@ -139,6 +139,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json -index 56cf784b3479d425562419aff9224ca05258fc6b..b882bd198488ccb3da54e328b615f38a0e0abfe6 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json -@@ -61,6 +61,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json -index 9597b7a900ec90748ea28785a699b268efc606d5..813b8869d4bac0c3456dde57ee75a47963e59b28 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json -@@ -139,6 +139,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json -index d1f288b3e4b7dcec5210aff44a5bfe74aeadb507..6fdbdfa9d08e647bcd88738f48db4c4ca634cec8 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json -@@ -61,6 +61,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json -index fdf532baf3783bad91349e7099903c5dcfc1fdf5..a9f4f542ee29076a128dc69c0c080850d7c316de 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json -@@ -58,6 +58,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json -index c4ba9a866d05b6cad62ac7d0a5534d065a9b2e4a..769287e2072142ccf3732d9d099b75161cf7ebf4 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json -@@ -61,6 +61,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json -index e718e1fa97ba5b5309cbc63ae1b79b7749622623..a48482c2406d8027fbd0a54ee59f5ddc21576abd 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json -@@ -58,6 +58,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json -index 3c47c0d872fa943f8d84b2464a740e06b046667f..f6bd40b46eeaa98dd555ad0644fe41acce1f9754 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json -@@ -58,6 +58,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json -index e395230a4b746bdc0849e55fbfbceb141ba2a1bb..b52207027fa21bf9bbd09efa8300965ee6cc18ff 100644 ---- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json -+++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json -@@ -58,6 +58,8 @@ - "contextWindowExceeded", - "sessionBudgetExceeded", - "usageLimitExceeded", -+ "creditBalanceExhausted", -+ "requestTimeout", - "rateLimitExceeded", - "flexUnavailable", - "serverOverloaded", -diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst -index 3772c1897579f51ae1a3cb167b9868ee28d78f39..d7c678bd6c9d132044d9d2cbcef931fb6ab25895 100644 -GIT binary patch -literal 167662 -zcmdPcs{fZEzlgN~`BK@N|NAch# -z9g{=HT5CK0HD3+8-?Qgqb>Xc8r{)~h)`o=6v>)`nlU -zVXNGA&Y#je=PNsZQK;rT?sZp}O_-ed(P!)QGwJTai`T!a+dBQmqUt)4V@GaebIn*U -zvaEca>cef5XZ=_C;LF2*Sa`{@p8F+{xj85992Is}|CkW4Fm=})qlX92RVDCT&EgZ? -zwfE75PnFHbn^#`CR(j^>^i`akueR)&SQ~CVS68C{>w({1!CU3T9wbC8n4lD^?mFS0 -zNsH9EOO8znUVR0HO^L4JLE_KmBwf258@AP7!F7T}|B;9V7sT_`OG8CXK~6%%C4b+C -z*~^~osfY@_xnI=!;tB@~`EGk4|4Hm{r0#NyMYKiHXY~ -zM&j^wgI8B}&Wnn^;T>2^T|$i-VMhV8#Tc2M-jL7$<6}C{1!vVLYIyba8?bpQr#=J4ZYF -z$%hdYIt9iS>lv?De5~`?*{I|2AtGb?>L2eeaSO1Vxjt`p5px+M^SQrCw*o%SljdZ5 -zeQ?2Taar>_Wx}uLOnuQSP=B@Z@O$s(24= -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 -z8dKku@;3Q!MTkU(DCY^uOVH%qV(zcj&+~8 -zKVGR2_;0<~ec#-TVG|_x`Yu!xTQGUrJ}#@YjsS9|^Jris1-R#($)n>Ng{^hJo(Odo&O!axY+Sc2o?oC{!xY|6) -zn9I|dSnm6uR-SlE?{t5f*79ZQ-(S9J`5D6St9_B{@BB-N^Pl*N><#6;VR*t&DQODh -zW`;;RcCN*&=S3#P_N3oGaGs$`+IM=Y(23eCr?yXF+oxY{n%hxO_R&r`(zDxox#=B^ -z$AQ@^_v$zqOp1JPkFh0bPMfv!ujqG|4)qAcI<2p0+xg~_{?6aw+!%W+#+=*6FnxO9^X3|l=?V|8yiyd{ -zs8A~!yhusAo59{X+4=lg@zc+OWkgqc?BDIf^Yo{egAG4R>uJ5Oyq&{p7o4zt@1I~FFF10Ej(5C(k}ePO3$#O -z>?ngNik>dMKC*owM|sV*cco2z7SnV-_w`a1X7hjTTa}vxpIu@}JpAv|ldaaN+g{q+9FUQdGTV8U`HGe~fB!9d -z-8k*v -zPqwnsE9YH5-TP*_&iOpaz0BozwS+LoCx2>D?2(z>i>nGYXmmiYJK4UlCD1a{k>h< -zJD$Ctd$T=PUQU0d`rgD=ANfn$o?hE?tb5h#i;2lovLaU}ZqkZabTd-q+@&XTm*p*) -zr1gEvpP)zcKV5N~v|IN2;ZI+7zxk55Wr^~go&y~%oj;?#te<>j>ch01FAA2tQ)fKG -z!M&ojp=Y0R&jh(UbC+#9aq&!GtVeTf?m8nu1KU6A4qQ*@Zs-%rmv8b?t5G?9DSZE- -zAg12Uu|J%?iaUNxC@Z`5G^FwWS1oUoNlR9U$ZkD%=bS*tX_as1D^*(-FaF%I$-C)E -zQ+Tm+Luc@z3ucnmLChu2){9$r=kZiX%=KKKBPzoyuEnFbr{$#DDzZz-@Cp_eG&7=mGMD*Q!AV9 -zZ0g`PZOPx=6;yjny2!xcfiekZJZho -z`8{&=Y0o0w`xvb+Gk9O$b)TL2$AZX)BKOeq5kgn9_uM($rFS^6VeDzy&js4eLbIg!Dm;(3lCYs%I6B3!x7k00Kd@7`9UZuNK;zrr`6 -zCA+qMa{d-w$Y#FUam$UE(u7aJ(YqK|J!NsV=xSD+G=2M$J3S}$TTC9A+iiSwct^7A -z+{e~?8fI{_iP!Gsii^N}CD&%l}aY$gA;Fi{$y?pt)%cluUaF5kE -z$|&lX)Y<8Jam6j2spiq_(yjL=J9Y{hMz2%{T4r1utnw%t7R42`kHg!bglTaO?O1=J=-D`J;A`NUF&pD($4Ha>#An0 -zoeBm=PXBA0qT89z_9L+?@N&~T-H4=>4;o4%0`8s3c-6MBd*_d+>eq4>ULEgFmDGIR -zIPdukeSJC6lxdO2q7MbfIch}<2s(f7bt?&)c|CW!w(i7lXFkuqd~8D?Z*ND1+xF?2 -zYBTz0_4+i;?cBO+#T>Rvfw_xs)#-@dvF`L=we9~wpQ9gUuWmN=SWzq-79eS#l)*LS -zMj(UBSL1a1xtkShELNDFHf}$8;r~A7l5=uxGh;s)Fip0YWbxy|`(Pm}$I_O&e&G+N -zo)Hbx5Z!!bwcHJVtv$2mbh`b@akhD$$7|@5`Rh!K+;VY~sws>7cF0XL@&72Y=8%NX -zwZ{H!*Pfc`>9bUvII>Q@NbL25MHVqmQ+K{xfBuJm^D~*|RofHH_AZz(C#3pz(IK{l -zzN@ck-kw!nEp^i8$?jQ`x3F!xTy^EN*w$$_w^prh?s=jXqpjVvL;cG7t=oUE&w4fE -z<)fN@;hY=oW(?5{f#(T=kAG-uCq$Y@d2bZ7EMw(~}$fh1gH` -zPVm@ebl5kZn{6t$M+V2%aO)=vKI?2u`St1I#}8T&zbi8%o&>%S+?a6woq>^}<*yfO -z4=OcVMDgkS#7WE5Em-5T^~1DX5e6q}pY3|qbLX98Q=h;YpSwr5SsR4@VlTOo%yLlC -zY+ui16>q_!V!5QJN4xbt24z}rKRfH8daLklvGmhVe*RPLOZIfzzx(3jd2!EOIj=-m -z9ZXJ9d(j)ZK+f>smOHE$m)$rW^(uyQR#Blj1IM1|uLs0=wk&S?7^?aI)isL=8>0?? -zY`+(^Q;%=b92bUbHEnO>kEW$Pdcv9>f4eo@IiTA0^%DE6vT1@RCH;3{N*1wZ|T6?{^$j@iTpO@Ws94)w>=B|5Rt_46L$v -zYB6i3^gg}65A-e@9!Z+_a@nGd7q%bTcc$5G&EBxxk -zdH4HOecX@N3X3R9Runy2TEV?7L_+g^wav==l1ocvWj=r8Vn26t{aw{||L|k} -zH}{0O+L;N$UjkU&ro>2pk-3|sjEqGUTQo8AO -zTwaW2UZ2*NJ;{$Rbh1yiojkv2&4vWkSarkYwtX(QHf1siX?je))M@1>k@N4v?Y0Bl -z{${goMaOyhEOKs)SNyj8ik#e<;$HD)TkDNH>-)W@IyY*4q>QOt>dn -z)f87Ou2|%>Xkke%pAyT<=`JA!sr%&Bg}>=fw7%2Ybl45c1`=(4z_Ox3JeaZ?qa{kFGmE}6#f<~i@#jz4-=H}5x4Or5wSDDk^&)}dg|kSVTN -z%ZlXoSEzStsZ5WU=C;4GQ>5d}nag|4w%zkvw()br0pUAL95Xs@!ny?pN_P^hBtF^XSI=g3H^3fg3xRO=8LMslgm3WnUOK;bnoqp5u_k|pZGxRj_ -z`C?O%+LYzF`lfwr_qG)Er7ucio;~qBb~y3v_9!VEtBz(9*|#naJCem1L->`W-%ab^ -zaOQdKI<3=BQpL8WD9<(2l)h4%=e^65qvw|oW4|Fv}mrPM)Ex~#n;Ae -zEmEtVpV>BHd;RL-HLq2!Z8@u3e<5E!_3FgQ&xO|u3#^fzG3lQ|eO=0r)v^`A`rp&e -zt?w_MViWQEQRM5;+a-2C1Y3F^zu;zb-}gq*b(zq#8LBX5ZKk-Y$ -zui>NVwm9#n&A(!AtTt)i`|XeCygQN)r`P`6#^hob!yMTXQsic;VG!TG`swr!9_@93 -zGcV;`Th_N#?bNlO8$>qszMG}<{qlmMDr@=WJv`j+IxqVFl3QM67E^ehyEx#;nb#W=*L~V# -zrVwO1;pf*>*E@S%?^!<7JNja?(=x-X(CwE#t+Tr5QN1MO)$?nDZ{5|N2Cu9C&H0jX -z6Z`iE1-XJn{A=D_c=RiE{SoyWQ#pMDJ3}u9XZ@R=VR&xaxuV}|Os1-D3F*%04O)_3 -z!q&uUr+og@%4}cn*(RZCNlvm$)c^f7Gv-QVliPpoJhMvjgo|(4t}(Q6`?wd|*{k)1 -zz7_JD^fN7l=h}6bWAU}0_q{(j*}R%#p5WbgPmI=wryZ)7chYZu8d%4`<$5LN`sW#M -zU+kM8IeA@B{DB2_-sju??GXxkBEI~nj_0%VS5kXtn~Bc9BwjY>Oyi?-O!-@GEi?_# -z=AXI2=TXbE%?tnEGOwAxuUAm$;-(oHmnZ&Z;9XFy@4fMjnql6Y8&`L;8C~SH(tqN5 -z_)tVhj7zYid_-5?xt$f+CoMX@dz|3E&LPEmah~D&|JCM;z6hv$2lu^Wvg`A`XJ5Vj -z`uY%yznLpfUvfFve)IFBnY+R`E994{RbKBr`b+zokD<=(a)}pti+dJ}P2PWbL74Em -zu6+>_8asMijXzfyU1w}K-Ph;&_UMKy3NJ3E#mjD7bH+3J$E(C?_cy#cz5K9b0=rPq -z*_Q>|7xU^d{<~Qu=l3#j(e~42l3GDr*@c>Jt`qJG{#s)6bB-dTs_+5!$17KSsa`!_ -zfbsn2SNCSVD4m(_rJyyle5;y;1eey2d71IEY8b>b%0y-cX6*j&+xl7YV&3hBlX+4; -z2j^9syT5k3%)YelA4cZtN31e~LT{Q|IGJ(1dvEu2?SZo?7v%S7{9LH(li^WVV)^FC -z!`WUE-uYJsOSms_k#c^vwLRG~VRi@)Bj^~IO -z>zp!XT31~0Tg6kWY%b^PSYD-7g7XE99mT{s)w_!KD1SO3`LnRO -z%EvOFUhTJcs%AKKh0Jf$`^K}o#>X%w?CQG7r_{AePWg7ck@PHkU%|O5p!m?$Rlctm -z8~lHiapql$ulrr8_{EAGx5JEf3FUV2`+a9_pKYr}evMeP2^`bBzf|}yjkbxe{1G2k%@<% -z7tUk+&6BUHxXi=sQ11klwKG(ftSL@=;QIZp_UHJ=myYaT%5+1vl6k5_lNDw58f=u -zE#=tFpuE|%1-^L -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 -z49`BOV^J -zrBa>E48C#qn0~2Gn77HqqNVi351#2clZ2a1YgN6h6Jt3$PTs!pRrp#LbHmp4`io_< -z+P2?6bwBZw*pDANUl&?E2zq`;G@-OfN@nJ-{eE*!CU5GBnz7+}&)Iy8v8fR;tM!co3=Ie(67y%=IW;wW%#{2$o7JvSK?em -zmEP>CzJtPi+e0^HFTJU7&i&!GtHCF#z8uS0l5)P{yy;xgeV6z=)`jQ&Iwodd9G^Aq -z*Cr_g&K&DWGTk3{9GMb(@7EODpGS(zIkr{Lzo~OjK51He)>)}TjrAOscPggE6nmcD -z?9exfY2B^uf{v?N9!)Wy%XQlPk+w&F#n~j|8z%(HEq%(a??2=nd2ctne)FD`nF~Hf -zS1(s(ZCNg-rrE(-w{gKjz9Wy8rxmSTU+U8*CdXR0)oJ>Nqk+3N*NO^=RRxBcaR!Ce -zO-h){5PJ3Tg{A4H@9)o=?EXcqbCF-C^_sLx{QFP!*RYvSH}_nUd#x%!qh0-N@^iOJ!61r`d< -z-}FgPwRG{5#p2V<kM>Y!j -zAF1q}*B$PEZKY7e?5C!I@nZjLS*|%pGEO`3MWRv6-EN{qnN6!Q>r{p)iSHG;(GPqL -z`KGVD|0zg|<5Z_>!1A+aniKALTZ)*;-RwG -z2VR@^o2?2hoZr!5#IKif<;D%UtE*SLsY{+b@R;T71@(ynF`}}kQ+Dl)oPFo6(lm9) -zq#bSWbGpZxpt@1-poI4$yR2ZVu7HH5*LIV(@ZX>R -zFYaPN+t;s&S4=No2r^j_vOVc3v(g3egD#Uh39^nK0esC|>)g`W)UX1^xwe`|V{#r50HkGH;CdB&t`a`fz~Lq9KD -zJe_4w_%v9c(7z*8r^UEdj;(h0bkU>zuO^w>bF1ABU%Bw#nu*R+eroB>`BIm&J#5GG -z5QhUMZzjHA-%U^iKd9BU0v=s+DK2~s?*n05D)+tqP=Gsw- -zJ14Y9GSz&k=K7hyk|OQ3`7FP(V9Ne$iw&+k+B=h@Qq=M=U#0J=X_GU9q~3aO)>-wc -zb&}xn@RrsqA9CKd>g?s6azFBT=W<5HM`?3Twq?%BI_1*)Xi;&en%ufoao&r4vJ@)j -zxF6$YTkrBEMnfRB%4x^WE8nt}cc|s6T!|Lsc~NlWKlj?5UN0tIeX{wE>kH*gr!z`Z -z9HYN9vN$EL`VjKc@SgJ<^RU*VyVH}_RqU3zEAqd{`R?UEraab0+SjF>lr$!v<#{qg -zYkU9qX_iyl7uC#qrR&1DQl(|tAI@Nj4@=u_=(0_Gxa;7w*L!ZoZ|FG0{L-`9J^ty} -zBrX%Kxaj(~+j$$^Pd=Bg4?DtGtChsC#M6_Tqwr#}U=ZgK)>}#M;?;MQ9{qiy^Pkp{ -zooAe$om$t^utu7@_So8l{p>F)#J0Mu5a&^sj#(@%p1M`Ctn}rUkOQmAv(q+vF)y1c -zpc1chrOxA!$t9^{LHaB#DYkR84n|rfWVoxbF4>U!;y|&yxAU)-t0qB8J)z2R2fx@A -zr<88AFV)=jY&S>Z;je;^Lz)tI&voAFWVuX6b6)eg%Xg%Fo<&8hvyDan5T66m^GkuzA&M_&m(~ou4_E)BQCtop%ZQJ)TI9PXC -zplqpF)B){jn`&Nn{dwoexjE{b&!1+O3$l-j6}GILUip;6(*5ai)d^fD!ar7JUuJy3 -z^7P!K{(C>u0@<`(UftVv_h58Jvzim@%N0y)as?9N%iiT)u-4dJcCmPgqnv{CjRh?$ -z*X!Nj-RP4f_d@4zi1HMpjHZ`q4cbkoobSJ3)jCz>Bh34Y(_1TYaqT^>SRRk>686({ -zj%LM5@uPw(TJ8CpM0}^4IK+N$ymvjYHRDC`q$MW3rxLDKfAhXRSt!TRJ}ME7q< -zE&Kor$K~B; -zV~;)2y8YxDFH_0y_*JT+Cp~L~<|w2dtQQeyILg4c{Rm?qXY+$g@lgT)Zmd{e9bGzQ -zg7daF%l0U-f10zA?4&)RP>&%Bh1Z1Myn(=0X9p5LgM*B4w_V|Y(xyO4sU$dCHnKbkg)v3Q932fvC< -z@bK-LqO(R!Qb*V}YxW|a$4i$rSg7}y$0!EO+Pm=)f8)kmz2}0zES+{H$M=iO+l;6C -z)jAKwRu+b5CG|x1Y&`9*=RE0&jHYN?qs9HEc{?)WeV2uBE$y7>G`VrgNycdtK26-2 -z$he6+*>cw56}=mSyO-zOj+xPZVp)QBvf=zqT??~U&G9*~Qt-O^OLe{rN4mC6?DTod -z?O7eczx!!!c{op|pv=_9^Oq-km*qKS9Nc-ai`(y|+b3bEBBP33$9ELWS#X)*!Ix6g -z>Ff@*&OJJvrW?-`+n)U1(|1{4dZow24{Z%ft}fHxd`Oh(?t2j9p|$h-+j*>8^X@&n -ze*6ASh7Vi+B+OoPPJ40IF;$oMYu3M)Rcc}U#(JmZ;Jf-ue^L%SSJ=0%T0PV$K~l}2 -zcIl%%PCJ~$pJfPlN6nCN(>P};cf4fVtiA)MC$R_Jm3y|3XPWB2!>>GARi`8rsopJM -zF`p|{yirQ_4v*HZ&Qo#8)4y+gb%gc1qvVMtM`jDPU155_ta?C4>alcCfEKf>;tH*f -zZ6BWYiZaYt{^I}onhQzmYH;Zve{qk-R@wJ=IZv3GB=Vq!($x8jXP8qc> -z%K{&ny42h?d;X+*i{v4RNIr#=6D*2e_eaUQ{B7CRapT@QQK4-Cf}7Zj9<2~NDZA_D -zp@$4AZ_;c3J!Lq&gKc%#MW5e+t3Ma|%r`lyu*zHP6N~-z!1xIlTW0c#YyH3RUn;8B -z{qM0t&fTYGFFCBR?3nUmi5VK=p%1t2e8s?an0=7~>qTiUH`Y^+(zi6S`fU`>?hsCT -zcS8QDi?rr;-lh4{ePUN`_gQd$+Q0l$%vHup3s0Gr$2=ceEE%MqJl2?DIrC!j{a%~u -zx6%x=%$uAPQrLF3v~$apnw3gxFL!oqaQ@J+BsAmn@zOnsCub*m^5pOEyTXvIZGS2B -zd60+5(cV2@R93qZldjXtCDF-w*?u{nUn_Di>n>lVa(GLV-Wz@MwVz%oKULnK`F_QTsw1_< -z#fIF!`80N^e~xjoyy2yx*JRGfbmrN#?+kyf815Rz@GC6+Yst;r`E_}Q?%#$8kqe5; -zv=*e~luzLfD1Kb>mP~N=Pnz&4;N`S!9HGm;9}G^;JRN-I{}&09koX!i_3P&}{0m=Mr+w7! -zve8-4!SeH!v`MDN7LoXm+wI>U)$qKxJK+N3rz177?>~PF)A&*@p5S@7xIMyv^-v%y -z_ms@*?tb$&Y`Cv0aN$U#`ExBTxkyPDZSxiCd^_e={d0L%cxrl`Uul8-v4!)O&)Tp| -zIO*6TV~ysmlR4NV)p)v+p51kN^vHOA^&DZx{^TQJHOD!mWEOJHy{=Kc!&Ty9bk3&9 -zX4UoL+n)T*;>E -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 -zK2ug=u$VAm``%|oa}I6T!u6IVJ)4t<(p$_~mY -zq0O0LvgP~yx#eE_uZr$(4=wqzmUV&dwTbniIl61-y_m4+(!Nd0o~?d&yLRrvg+~sQ -zU4C+L(jT1^Yrcgkf%bJqI~DIb%yQW5$DZgr+wW}s?)QFdjg2#l7_;|D9DB;-d#LnP -z<7d@>dg&ke>|cFVdvZ-AWX_VN2&GW%!#ie$xD;wfu(J1EFnaqg;(pc&KbdEom$&Kp -z{K=Evu0H1&Psz(E{pZ5$TrS*Ara#E23FQ1&r#;JnwOV4ZG -zRu}3&{dnz`IloVD(&JF?P-x(m=AYW&_T-1x^xxM%rN++N6TUd?VCfWY)w_PC%3uCJ -zzqRF;!L^SsUv9c48CQBDd*7xrADT{Vy|;7Gwf!dB4$w#Y^h{Eq)=Z -zVX*W<+&e2yS=RgSS@wwC%{+PW4d9i>TAAqpa13t(uv+$#MS9z*t6~ds&RKcgY^}Fp -zF^JS`?VGsqljo5=A)K4^vv-e_b`c`fx!&*R&%wZ#cPvlH$r{0LrPr&PSh%p{>S -ziMjcd+=HGB1M>~e{*O!wb~;K5NzQ!57e3jRO-}y(we;$0=Z#ttzm#{b_;Re|LY!cD -z=7Y@M=XM#J;$u$k-qq}!yuH1o({9fJUfZkpk_+;s -zB?IqWx|OhcQeFc4snrJ@KFjE_@orkbrC_&_TG26|mYwU?cV6YVF?p4|gu$`-PXAtu -zF%+=`P7f(8`2Qy`adF7|6`vM`cm=JLd&h4c=ezB#xaquEBA0dkscfFs+T@biY7z24 -z|5~|;>4){RpOr0srKeG^p}&9j@%ksWm(v7qo#8y6=YPj}UA@QgVqZt0tw*v&3!k;l -z`TNZ>CE~D3K9lc0oy)z`6jqgZoo{CO^zz2jLf*Zap2dtVN2jj{Yui3;>Y5Ohp!&~~ -z+`Q(ie}3Yxw~T9zeZ{Rkua+sZ=No=MA>`(3`Bav9>a5TiACLYFVLq3=cje?yw+>Hv -zo3V0x+$E0>+3{1AE<_5bnNQAZ<57|Ok}r3G&B2nZe5vl1UJquqd@Z^ASH9c2bGxss -zobm0zMEQq*mZsh|RQRkR_PWxIx#wJNAs_Rx`R}$)+0g!hdBG>P+|tu=g$GM6To7rr -z&{WI2`FH~_$I%0<$rW6)nS}2NH&r}&>i(lMduGt4ls8_kMY4->G;XvMo@98SwUbGU -z@8h9$t=E&kn0R%6Il}OJ#!gnHhl>TL+6OMr_!lwFVv~LRzB@}+-aO`9%A6US)s(Kn -z;-?**)+c4%W!@8c<9dO7R`9Q9@%?L$GKR7>KH*E-rF -zK2KJ)_{s9civNGOQN!M;bLQBnD=qGM9~99XO}{2T70GsDTj_9V-M-YhI~q=gZKzIJow)JUqcb92R0(<(G#k0SL-(7vmYX42s -zJYk>wLzatn2d*q=HF!PC;=N>u|Fjbv#$8Ds?)MLIrD_ie -zFeN}E!DQ1Z(YrJH8)YwDu1fj1UMS?S9sA|^&C=;6<_Z6L+px(!*aq(>S~3)tpyN!8iM_Kd=iqqHXW?|GUB$1}Bl$CikC9t0KQnH4kA5 -zKB95DNx;g}f?=hww6?nAX>bl&^MT -zm!)}M=oBv0>ayPJxWssps^7df8=h@DDSUjQ?i(@n^Ur>3ta-b!Wt;h~?G*))b6+-H -z&0NhTZ0tUBN6!+r32f&&_~W;`?tgKDy>SmGrw^l~g~A~&Xl)XFdZW6HZWprHN*>)hUE}mruC?jj{)#|nzc8-yjgirM -zAD4M!KYGWJZ8F_4DdcyQ?2FIJ -zKEj3SCFc7=pBBxP*?P{p!#t`$ytYp0f|ql7q@jpXNyo~Aj68CVCn8gW9fBD7CV7b+ -z-Ef@mOX$w>%l=Ds{%lNY;}Hz`%Ixqo^2qr^Ds%S!ikYu*YI|h~kNokC4^P_(>2$rR -z=Y3>olNfP%vYo5Px$hEJKb^W)TdLKuVWa-cSrK|-UID9(E++jt<^Lq>Ub$hrX1#NB -zv-Q_cXWLrXn*CO9|NlT}X4&Jm+?Sg&HS)S%HqG26Z{E7F&eBM1rRye(%2!ST0eP2> -zNQ&^DV*J~8VJZI+&nbeYtRAArjP`Ia&-%XZ_DnB*cP$^`+#`SXw0MRJ3$y3N$$5lN -z(r3Q*py%MF9eo{JpFAwO^MvJ~Yj2_P(^gfvIab -zS6m6l7V(eIwEU}?Jfx@kwNp;_(-#H-3Y% -zZ-?(^^E{3{D7xs}S=$exJKuUbHL5PGU%XeTSd(#&(~Hm6a?7^_aAhl{9Br~nnz7_@ -zK*es?1y|pE&po`XJlK{oMkac_J|Hgze6XKdxcr{^Du_%4{Z8O -zOFz7K6A8z|8D|eT^ka@Jr1^(O=5iEBC&ci|KcDk-!2voyVdqQOtVbd -z4hf|7UD2=-%g)(fqP2Q?)a2BdNiE_c7OMht<~$P;@@l%^ks-XaoV)wn*ZF6&ykqCE -z|M%U0U81p#`SVP5iDiQE7Y^*&ZP3yy7e84qb4A<7_7nhti@ruG{ -z?l)FaPwcM!Rjo3v+TS+$8Rs>JzxG=W&fH+-7qsulX+J>&2BryJZ`Gckv*4`R@kMfH -zur@=*_ub6>CJbI4>;L3t%dx*Y=Fzl3IpQ3{amLxND%0M|Wxh|^K277-$3xxQ6-%at -zZQJms-v0Hf*;+pg4Gh+Xo_?#8eVq`Eawb)9Z>{&eJ*{ybez&;9hp=dQ|zz -zeuc9tYqD1?j4Jk%=boC@d0p#kseh=cil4Q?>rGF3V|Vx;Jg8gqVB7Z&vCpUSjb`23 -zI+;U;NyH+u&vF`j|JetpbzJ(So`~Lc+jiUFymXrAnZ}|sSBftDS)rwMgjd96qw*1} -zJx+{Ono8T_@5>Y|uPE{6G5fBt@WT@6$psnx^L!76?aRL`u})P!IA#ueU+SOaLi??I -zp73sXtFa+bG%xVPLW93@9H%avkZ2=I*VwCExFz6!QMb;Ck!Zfy17X@qA}4Y`q>Kv3M`PoYv84BJSy)LSMyt -zo+N$V(ALPvH$%#9Y2wAhT&xV|RGF)1oyk6QGTilLB8U3M2+euZ4%+uih0l1(8+gU+ -z&xhXap6Y66Rk!@PvgOZYp%v$O-$X>R9r{}o!|NJ0{blpM`QNr`ewp9jEZ+HExX7h< -z&9X}xUmL!kVU4$xm6~!qfYIlT^48tk=BZ7w-+JV*Vyd`wLvphJB8#1pj>iiAq$Hi6 -zz}9tqXTpi6(|gT6^zV7Yl(9Hkc){F{56X^RQGfn8Yx;Scl8{508&2NQxD>j3{^Q3C -zfkA&~o;vy7;bx1Jdq}{lWzv2Y*$np1`;sSKfBR(LkGObE-G~T=4H?tp$_>x|p3Br1<;K$0pM@Ua@Q~&z|P~B;=cY#~izm>|>{9@~HfDKPy;f -zZJ2E=sz2eL#p&26p%)+SXe#^P@jhd=S@h<#rQ5|$v-%onEHCSm*fHnXg~|K<+$QzN -zUN`gfTfoD}_CnQK#7^p(YW~WVUERz^p2<8j@)njiyQscB+-&Tttv*e<|6Q?8;O|2h -z^iMmjV>2;1&+P5>K0)aCv%O;ador#b>`31hbv5zT7mgkC&DUxQ+mNUY;ubiIdBzurMWcB4^!J!VR -zjHVxV_`J_w)9@x!so8(s^%TkJE8h4Y)nn(rWBU4I%adnCObwd0s`HyStay0IX?dNA -zQC06>=}D8aI3jwF*sbjKVis9aoZzHBOacjfkD`P=h2#TFXR -ze;|5l@h+#$lXRC<>+N{GFlhy^PXAQBte?vhpf -z`f^WadvvlNU;OIUdH(|`f7vqkvOe+4U1x81Y*}ZpPS-o5YJM?gGlx}KTQ7ZJ^R*6* -zpBtnk)*`p*Xlj#!$k(~A8dpqAvMg3eTfKEBlb_Ts!=A<6m%n-K+!*ljctG?E&Q)2V?}=3n -zhigq0yKenYsadD}Vn=jr{J&Sf7u4C#i(2gPdB@4};Sx$KNB -zujl7XHtS8?e*M4aO?&3$5AQ9Up8fX7lkdGcK3Z}LhgpuzRde*e_-um1)fX$L--_P& -z_tRBDEywWiW9G@a?Ej0|liAgS|NJ}ft5q<*2Rn_4ti2oIhuFNKHIZipZmhX -zGjpXqe~R**Tdx;z{PjM6Tc*Z4FN9{Uzor_hqIN+1*rN^QU2p$)6|S1$FD`cG(FFY; -zl{;-rJ$GhtpV_?IeXY{x2hN#-Kl-+Anke$=80*V<&+1rzI5O>NT>UWFuuJdWrk)*| -z%4>Ko-gjZyAiq0Sa(qSdtenDFWR4^`V!6i?J}y;l`TRcu_e`S}yJ&O0j7P0#kNaV?YCV5QsB`18$! -zxSk#{r*?%cj^D$kO%w2__FXT%AaTu=PtTWqNjYYsZaF6?_{db_?k!w;?X1U_YNSmz -z^l+c_=;$5Ej-|gs_-{`Cck5@6Qt+Aem!`};`qr>@-@WiQuZ>T8lj=TP;(pZi=*>$j -zk9sY+w>bwEu8KVFqU7bacdhBu>mNQ`Fwjd&IwQ2XSw7U`+^Un}FIhreCUPG>?zwa7b-~)SiQAul|GV?7qu}K5?ICX43N4Jb -zzJ3`Ov%T*4`JD@I?Co8(O?`r^)Vu@74wQ3S`A7bH^5SOui5a4%A7ABf>if6EQ-Z}o -zdaa6@+nrt6;#&=c4;h`;e-!*#VWYRM)M9f^(TOpAp;pdPYkrDa29>m}o87MKW2*60 -zA-7If>uC7Q;QeYD-V%%lcK+v{vs*$+`71Z)+wy5X(*n|%PqUkSRJ*INp!9Tg#?#oP -z{wvOG$(R?B)~n=vyxx#^+u0k!FTS&6dw<>e`bw%jE9>iw<3f5I9JLIlF){bWXRMv$ -z`DS0n>bb3_SFXR)*HgZ8;gTxuoBcM`Z{lS|ufN~r_N~cIr(;U`j4Kv<&SY*5nzJP4 -z$vQEa36H8Csh6I*Xd$B5=NhA)EHj0(a{DAt#)_0nKFi*=*E{_!cmJRKdYQS -z#p`;1`v1s8v7SSUeCfT54O!P6^qXei>w0QUe#I8H>p*SX5x -zx4PC6rcdkN%-Zzte#k46dE`QK9{-yzbR)rY -z*NmF)>(U=rpFFwZ3HO~RTFYNlm%el>lRUfV-%hPvcc0cLpS-LV%`D*P9-tQDw&T3| -zhj)#8XBdTxJ~ucK{&Rc1^P10FR5-WAaAtOxN(Z>g{8OIpmZ&v-4>zg_68I8U>$&f?&jk7DXdlb(A&IH&L87IWk2 -z-e#VgGt=K3=5JyC@_pKgWXC7!E;B#on%`FB&-&vuDMHV5i-uY6Jl*0Lf%d-8;{R85 -z?yjCMZW>;Emun)&mL=|ccTCz+l0W}t>y7Vrfot>_mfq6hTG#L08q4>f{E@A=Tfk+3 -zV=rrUcgg-($jWo`K(jBOs^9M2&x30NuSqm!9g7rlnwy?05pw34PprKbGCPvPjfI_YM~y$D3&nlPY57l!|Z8Ta}>IyoEvCOfc+|2g{}F -zDQYWL?pV4`^u-CW(8lPl1D8|RE5*Klx-7B1()8+KohPdugx%xLFGv8{O(xg7t8Uxy-xg$$UBzp}^ZSD;UxfNE^ZspbG#TznM_TRQ%UZDT_1D&;OLYw_ -zk3KkNziyS`x>c{H-8fZr!|G%DDTN6YT<0F|aXYuGeIKGtRPqTCsfT&LvD4NvGq^{Mvb|ZsV7-UvKh1em0a1+IX+2#Pd?@{}~rI -zdnfL@vRc>8qgqwFzdi^2nD}w(OO{Nd=nH1`@8YxGG){W((pHp3Np|Z#wUp$$^AG30 -z{t(eF9(Za!*Y53KoX)RFV)xMUOFVGom*eJlH;Pm~c4iB<}d0Q1Zx8*5MfE#>xLCozj*)%XM07GJ~E_iuslHts24K@|U}s_)d3H -zFDcil$)6w46qfZTBU#IF|Jxre7Uv@VRxZ|5ZHSu6Ch*Pur8KY0CXYX5tRW9K-WN{L -znsh_$!Hnsl8%=Ci+8bZ_9kWnQGWMLtrsLNx=_vCXPd?$=7Iod^$mWjaXR|n;J!q=F -zCoJca?U0fFM*CI4X>+a>zoXZc%z7&C#3*F(QD`eq*}LP1+dMyisW~$1UiU9XM(>YC -z$>E2ixSqw#U)`j9GkE&>2H6jDE^z8?Iw+NLscmDK+|P*mj)f5c@vRLiswkdUnH%?WYR-MdYR!68+puDuosy}}u1OaUtyTV|SG8n=;@wp?RX(#L -zMS}PKPA{x6{CVV=d8@^*hVI0@zg`Bj#qeFIk(@Gn!dnqtO|_J1*AAwvt=Ztm%eHKn -z_X94Te?M-id@qxps9U6Mw`*o%<{5YH>x~gnmb*eedl*>?zsX>^dNs@G|7CIJCZ>hn -zll>Ims}!6HY3)C^vGQR;!7{gUk^5f#LQju!^IfkyaO8J$vTnD;rr9haLh{~y;M?=N!5D?NH5@7eETUoS7r -zuo8a4$$QyXU3kiZidBzyYkhM#!fP+c_(|b*%zwvXllAsFEShRdY!0QGzr3#dpnX&S -zDx-Vb^iQ4s#unzFrf|x|!J_QqaZN|3jawf`7+pRVxGrJOs^C{HqVvW2zBT)m*Bn-z -zs&>2ZvtinGr#~I%eLdwr8hw;oJhe4Z{@dqG+(JjbU#jPvtPro`!JzahRmE&i*Bd6c>(rG^ob-EHMs3ursofbrUv$hC_*r>` -z#b|ZI&+|;xhnlS;k|ewLNPJIxwc%aJvu~^yUao3gs4whr^NC5)<#QUsa>}VCryZH< -zOj}pD8_F5BR3G~~Lpidqh4p=G`+hNjOpTvX((1m~J+tHV-Yw|yyqIJ1TB3qcYf*!P -z%+!klM_O1#E9G`wdlMqFe}dopUCnz;d;b=0+`hs&IbW6cgG}E%Rr$Ybl%A&-WPSJO -zlVJRCbZ>gh+3si2YWEaEjAu$tuoCb0OkQmL-Ri{znaU{-G}y%K=akQU)zGzR;l>n$ -zu4&J=$5z>8*|UFUuHZbk@rmW!M&5M=(<2vU>T><7Q_S9FDfaBNwiJI!+u7znmCv^< -zs=D0V^U@;9PL%gz+$xVaE#=9fPVbWVat<(gu3kJ_Kr!H^T)S+YGrM;CQI#$KLYrKd -zZak5az~9j6IpG&)ro^>f6MuK;Ru{+=YyO(ry~w>Uq@@1)ubA`)tD;^DyJ*{T8P3W* -zDiIM_zr-iHyezr;&zkf1e`iU)Ihp8KB6Vo7sK?jEF9nZ3rQnzrSYw; -zP0745f71un&-brws+pw7aw?!!Vh#KH0}Btme*3cRf!C5MW1YfYC3=Pr&yNy@og>5F8$Ntuw&~qg#**V -zQXg!;_%8p|4^Kw9;JP*aaZ-Y&N+ -z`WDudJX_iLZi)RFMl*&uiPR_kK^>~2Sp>=!~=X!sL7A%>;vAV(dK(D~7NC#G#h0DwO=IrX9 -zq;=Y8Lx91COM7e_&%S$Y-R<>Ey8G(grLhaEucXa(&r0Jx^`uDnUX^&ue&4BY -zXQ-(b#|FOs6&ZM2>UPuk$b)92B*=Dqxsb!C~?aj!1Uo`2s|R!iP|Bv_WunXoW) -zMdJY*vq#)_?(p#y{F%HvSMp@pEZ1Wpu5(gbo?O^hGuv#9`G)RImdeGeUb8cs6<_R* -zT(;(6B)_FYk8_!odDx#LZ@nERiDxg%TfaBa&*)W#l)83kW -z>UUiUyA3a6mMNBTmk2Y>o^qk{VTAqK2|Nlj6PLCvZ^(Y>#S+wC{_E_$iUX^DCn-+a -z!?(F>Cs))GH_dZ*_b&-?W}i^9!$oy==F;mfonIUcIeZl3{2Q2mhO50a;cx!hs_YW| -z{%Gm3Q1Ki0t5pQLrw8Un9(b-V@W;>Y&Vi7y-}n80?K|V(x0jXm+g+h;r;?*&l)h!$ -z*mO9}w%$kT{aX3wTjuwvw_C{^SvULI=WQ(wf%b6ZyY5Pim0C9zaDjqiH7Cnxg^H^n@y -z08dWI+I>-x99Fhd)xPg-y|QW9vZ#XPtT_oA_9iV%4csYn?6t$JFX_u~J~n!q(OnZA -zdsbI*=Y!^|h6zQ+d3OJfE6$yj_U?s>+vC7FBDD`Uyx^Fjm!oLU=kR_1L?5MX1{ue$ -zulIU3>GpvyR>@o5`SUn<^IhpkyM8paW7>lZxrdDvrXH6!B!tcS$Mx{s&bA==)^LXn -z<;v23k6Vd*@jCI`PuZt?>Fef*;FSzVwq?C^J9Ne+lsP5h)bE7$J^7K9sWlq|rMqg+ -zxU2|pXQ|6DUv;fX)v0W6)zyt!QQUEEEHwGazV+!_4H!iHRKpmzu;l%GqE<8Ze|OZQrk`TEv5f5K!F(*LAo@^)?6 -zTz>FI$ae?H?>P%D{=Bw8BP4-2oYB@mWUtA3p@p|MD6&ZJS8I%$!4Q_*9jtNjPKUr7 -zqgjY4Te)R)f(1{HRcbV -z#YZh&P5(`{v)ZCZwHsz%XDw)&!^gcR%|opsnLU9&Z_N|-?<=EUm3;)`H_2q<8bNP^tO$k1XyN?xcUU`sDAqBWo*6b -zOwo|6L+`vaFR&drRW?g6w>iLYhm2s>g)ixumifO{uD6*G&9O=|MCGzd3CE{^kdlUr -z+VkZ8&(r%f@z5^5HNI=s_Fb^gRlnj|k>?q<+)Z?g@QI>N9#@Zs-?M&Nl;d{K|4g3S -z`dw|-9a`CLM^^G19k;)@wrBFKG~v)on<5{~aCC6omnARrOv$^&>C2jVvB!^1w+wl* -zV!~yOrMtr}s7^N9)?`~RU8A;pwXcAIl#JE?-1lj>C(Mv;eN(WchmJGu#iR_HhRs++C4=p?c+i -zYoGHM_xg!n__c5qQ$~_tN9mpKwqmau3x2uP -z_VV2-#Hom(~n(zo4X=Zy}f3;ZU3Rl>!2*5C&U)< -z@~qyByow8_s=393pS+suy7~Eq!nUcVD!yfQd%XD!Q)eq>+U7@pnpEx*^`zi}UC`X} -z_KEzLzUwh_UpKwEym89Uwgp*dFP~y#%=6;SGJb3nopt8hC2a+Pt=&&pH+dXB6tslt -z?G11DL)Y(qVhy-^cj9IJ@WeL_Qjdq>*u8NFru&oazDcjv6=%BS}^ -z&#YYP-?@KB2)h!`a_*{s=Uz4YKDBvY$5U2zgYVglISP|vl2>;cGJo0r@%{(lMYcZj -z3zB}%f0Qq^|K{@Y?g?_1>AzRhYW=ib5n-Bj&B*0KN!`^SPFpy{PB2(rvJ7RI7dt!N -z$D`u*Dod8MMB(PHjq}g!+TVRm>8<>#pDk_oDtas?F?XK4zh_e{&leHSov-@~>|eiY -zib!LdV%6aDQ0V!iJ(H^p^gp+$-fB#+Zep`pHTj#!)*j2Laat^2l4jge-QLu`Dd5ty -zgqL!yGsGHZPn%{weTQ(T$mY-XZz{HI4Cj+(6-Y4S(q`WJ+u^o=`xL(|$@7mLR;#l7 -zfB)h03hsvdZJ}1lX4*m$>VXoGe`ZNqW&ens{UUm-@M`v%j3nb -zCkJ#LS+)K-r*FQb>D2sdrJd`Y1WbPIDCar!K$+vS_6}`(&6T1dm6I~g_h$AlVq7Zl -zR%-oA4$a>;qJ;OpvG2UQU3;klE5~e`&SvlYhd(S{@I3g&)7-})W07pJZ_lUa6OKNp -z>{r-x>$T~F^}ZZd0tR)iHXlr)PjCMB##Sl0^nfm8c*jtB)c`DyjPW{=>`2YRfUUuEOYzg5#0)jJNSDigBdY=1c(9~9I -z$4ssstN)MfZ^;_XouavHhWv6%#g?=imly@oHzb55*LT||JlOm^zWZ?8G+}>MslQu9 -zOlEIiVZO*!V#cQEGmaI!-3INUt_zceUFLlJ#iCUGl&iPvNlAFYUB$BL(Y5Pano~QE -zEaZC?{<_2X;G=rqO^xr38HLX#EZb7WW_jyXKvVm@KZmqR=giqJWPP__f8XwlOovy7 -z7@WB3U^Pv!MMu6^G}l)sA;|cxYw3!sR#Ss#ymC8Y>QrqPx#G!kn~E?0Oq*j)2fP*8 -z!s%(x$Db57eMuhUjOHGVkFQUD$hmdh`PHeoIXfakciDdb^l9O`gG=(x73J>rjax0@(GIzR-R?{woh2VE?Z-BU_#fI@H_ilw^$~}D)MS;lvZqf+5SBW -zw=U3FJqYdw!tIwMr|3iF=tJJDF75+DwzgNBdeevNVMnMgQgapRsiwC4wWaL!r -zBYG}a-+Jnp5f>rtx9IkFAI+T~-%j1cwORahx=%On+|Sd_ceFKTM>0p43$5A}lIDLp -z{KkF*d*$VJyz)2F{~tP37Naq{`$^y()tosR%gfc -z*?uZpa#~q0?N)0kbNwP_JbUTfeH}NLEZsE17z+<|a~_K*zZY~PY{LAr+@E!RFO@zo -zy)eRa$8nzH4WzQ47u3pD -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 -zQoC&?t6BxiQeS4T>r$1c! -zca`CB>!nvjc;7zWb&NgW+JU*|EE{yKvi@>}ay+mt+O=tm9^*O@JL#7%1&%(u8r1qp -z*WBUH+?C}IYxb;Ie~WKVw88b*{oG%_i@ln9rF^c)mj$!l?QaZN8~w(!-0w~w|6>T8Gc{+a(k;MY=9=I^R!-}@`~oS4czy+J+b -zFZ-V}lP`S{OSm)h)NZNMYmTjxpUGLI`BqkHrQLz-bAE~^=1P1Dx-6%EO*QZPoQ2$B -z*Btx!w(x3v-7os-we?b$&3t~`!sPGA{+?J*#uG2+nI42t>)qzp -zu02vxEM&7Lvn6(O!fB$h`&*urV3is}kSn#^7SGw`)OudSAzvVm&&qwaL7gJZVR`in|qq*{q -z^PCRsjmy5)2kP;M`lQYb_}D8op*+Gh|48|%676#Z7pL@QKYIG&o3;skhJihs_-v|Y+ktqis^Fik3c-S9><`%>Ug6 -z0$26;?a!wN^@m$FyM`jD-RwhLX~bIw}xy(Edv -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 -zM-;|4J!Y5eDGDl}J2`OyuL$gq07>Gxa? -z$NF=cE@0~LnIL44XVoPA^jFoM#=}SN7r#GMSu#I^ZSrfcCmZ>uUfbB)(fqXU_?HJ= -z26l{E5;ILj-@ZARtQOBEbNbw@y>ddaoKG)h^2G(I&-XFdtheopqL#fw;}v#>wR^Nq -zUYLJqj^w+^E-w}Lt#PmW(Y$twYkTYC|I^&I#%kO-p`>oW?cmdpv-3HNtBbz+*4jfe -z^%C!d?KwU7;`^gg{EHJ8@>=cudL@6F)SvPbWi_8mJCCKeLOY1ncXK^l4_SpG3)!E-HS2Db%H_b*x -z@i$MwR@+0;_dcz0ejguYzG$A*q%AAwUF8jlPMEoVE>N>}@^6Tm$Rwb8y0@Wb7oX^?A~~~HDwBOu -z&uOXc4XB>H-_ON8w3tab{;}RSUAFn(|NGwgeqUp|=%uD4)4U$XTViJ)B`s;|u<2&L -zkoVygPe(gvPu90`|I=#fKe(@+e>DHf+!On3(>;T{-cRlMEwa4j$+9OK`3ko^`21l- -zrlXwHX1-%L_N;L_>2u}#lrMUBB=3CS_TmH*Z5CKnibciaWb=XyUT`R -z^}w)|TbaJNFTbaCY0LD?RdRu16;n5gosjX;c4`!ws8Y?>CeJ=Lt8cbQMHMymI>jeiQFwrB)}UlOc){ASmK&%2+w -z&YK!F~5D&selvq -z+kLWY9cTS!xNE@SHu=V6w^u5oUr!jy8Y`= -z|8zfnHP=(Y^H=a)TJ^^~=cSf@52sj!z_fpfD*9h;JQIH!=#s(A8Nbu>)U?NZq7xRk -zP1R!f&b4gouL+0ES8Oc%qrpBuyGVv>KdA@|ziEj3Ibr+DwJ$`B8O{(thd{mSn9 -zmp0$q?{=Zs>9_!sUTUKfuUiXmzQn~wJ?9C<({AoLqAax_BT15z!CdF5(k=JA83$dL -z#M!@by=AQXs#!bh@x5{2wdduIY&l2mn#>3^HsVQ!? -z@$~O%X`!;t2#(E;^~|SgL=G*AnD2Q$>#+K)$X6aaP9iKdKjRC&}j@-_daBhP!`7_TtNX?-cLY -ze!Fw;8NSBaUj7wFgxbYlSj}?g`TlL?$*lWZ3sqOHnAUJl>CxHW6O0}#yR|)pU)ecp -z;h)dJULRU!S{5F)Sjeuuyi4|-&Tem3%^x?KlZ12(d7Y%^tGx86GB^G>kI(e=yXf;# -z`zBtTcHvxdo$>Rz-0Qvxo>O($w!!p9+#74}TME`yHy5d0uBePi+<)Z3f3y3qyUe7V -z{JoOGVgy}goZFRH!6d8{{oLS@Ro$vcrmi;zztkZ^@h>8PON+utU}QMz6a0Y5$Urch#ovMTDA-`PsG21>1Yt=NyiFI*;SR -zoPRbg$9BeCk8o5lOjq|2>NJkLsdGyI5c8|0N3X=MzP_T}^2(fvdm7`f%=^eK!!2&X -zm{=q6jgfo8T&3+-93y0wX+7KC$*?8t^z6XRQ940|iw`Z-+xtSuTu0JC -zbXE3sDZeS-odGQYRDb*>A4}NTY -z+xM?jJ$+%>BWp{kkGpSetPo|)ocW|8f3}WD|God_HnSNGZhB-(bWW`e*rhb(7rWd| -zz9q*h3$M4Y-nswaDy8!9udmqC6Iddve7yHe-YzO~W~cF%O>uo*j;j;}D&4FSCk1a( -z@c0p~^!(g2wHxbX`Z#>vMOp1yTQw=Xct_hy>!i0Ar+;gFU|hj$A=a>Km+9?>D>9iD -zC(}f(r96I;?fgifA?Tx)BMUW*EtHMC|CHyh3lmCAC1hb;^Q`*^nT~+t|QVrk1-qyXq_R$aIsxw?hLK)yAK|U -zGVD$6Tc)1Ma`l{lVxaGIC7&BQ2PSRO+QF0IzNw{1B5q3Xq7A)w)rpOn&+P7W4KjdQ>EAF!`!M -zju=n+j@Da|Tb71h&khkh-ApQHLe3uCb}Q;%lo#K%OOZ=uM9w)@ -zC+uGLd*0FiRq|CrcX;>&SsM6WnMQ|P4PPbDevF;DYPFc)-^3glr_F`855N3nC%-}Y -z&866*cb47nus-%^>nq04>!BV}y4)|`USKlcoz-Ypx~-vZLQ84l7QU*GNo5zrnWkm_ -z-5uH8xn3eM-+x8AFh`V(dwAzg8|S+mhdJ)mMcb%sU+_gW_TAUh71!)$9-Fz=rSPSH -z(8)ES`s!bdo_24aYV$dHuP)oc1y7gWJTb?(fwiEE&nj!#u_GV7=X6WRugqr7)@KlP -zD&B8CdtxEqcQ*-zp6oE@zOBdZiGQg5_^W19{*O}B -z+y3v_juZP+Z))k8ujuZZJm(nKgcq&n&hBKm?DJy(nK@Ruvv#d$zvEoPYZK|&rqpI} -zXWhmL@+Y79U1$oq&+FN=czJ}PbHM9v{WtAfCQVu}`-P}sU*^r{yDzcpNBX8`)?_g< -zt$%){*Px8I@W7|-lUP#My>gqr#5yX{==9cwO}nyV)K4{4HI=^;dmRz5B3|PX%M7dX -zD|eTfa@<(-?rV@`>bx^)jawom_8JImynQ_3qY?j0zJ>*}{IgijX}+A2y6o1Jnm5s% -z3-@qHXj}8xr9doDU?)4d} -z@eOu@Y8NW_BoALTzQWF<_A)@)yZ62nSKUi?EmxB|W5*aTqZfzxziO#66y1H?CfT$l -zd09h+@&>C5JT`x(v?@zX&;J(QE|}M|<9xsc28ojs0>2%dvFVo7QGfo2AJsC>8F?0S -z$=FUQ{dm8q#IB?-DB?tOV65OUW@GVsqlz5IUU?@8NjEhgSAYLs;1 -zxYP9DuB`3RV;hvB0$ZhZJ^m}d7Y;}j-+klp%5W%8YKkH7ncTi@>A4S!)S&s#8Q&F6rX -zZ`402@?Efa?GdiN>G=%Cw~I{Iy0J6qyfF53+a7pGZ;ty1PP_H1ejod%Wfm*2c9+5a -zqRyU_Pwy?Fi#08mEYK9};&Cu!y?W~3&P`Lr($_7|;Lp?Q-*@lP@8Hloe?=rtg#@2< -zU9(PSYox}G_?K>-VFeQy{$x+u&o=junB2St@hksZU6B=L5GkL~UKz^h{cFt$jgRV; -zCOZ=Q!>_8{-5+FrO5}p|IoB0ACw^_6oU$fU^zEgFc9!gU%QIH})nd>-DJ5CDT4smG -z{bSOd6Slwmd*-;HpUJ(I!i{@xrfxMqo2EB8E$qSD17S@!3%1Qu-2Evc-RvRvg0&H! -znuS~b$JgHYG568jRPUN;<{7a?&1E|!u0@G0(~-F9a#T#HU`PBmpVZ5ejaGU*9=le& -z*p$xw^X4wi6qy%uPP5FM(3H2qvha`C?1%~6KW+HZrfzq9rSzr#(B3IGqD@8K{fqJX -zlDtGJ!*{l7c;KIeqrWB?9SU4GqxQd7ymb6z!^tf=Gkm_X?quC78e*}`UpeJ`08g?| -z;)dER*N`b1U#1I62ejPII(vOJ&%*h~BPQ?bn^)^T;i=@rha9U~AGm7PtjIqp73Av3 -zC?oKxwMs&$Dtz(xCY^Qvbrv>@Ch<*^yu9F+k^YA2gHIbyRz5%L&CYhEXT#A|Ij@;R -zmx}W2C^!;S@?CQNKmW%IxYQh%vxH6F$E7ZIt$yjtzt^Xzy*<2p+6TAeH&!;iH?-yU -zcMox$o_(fCN#t2!ao{-x(V3a8a}K740bTMP@#`6g_vD&wXebv2UukWon4lww>p$ -zhH#y_Wi60=_2bDI_bocFH8EAlT08H|TzOW5w=k-p-{+su9@aGtoC2!Jk|l?|GHr}) -zGt$+9_-t6bUwm)+bn*M$UXd?v-ITwYCMo>(i)9l@TA8$(E9!b$iLvVmg;_r|5@SOB -zT4ZucVk0&z;*0sc>HN&{qzsn%%$pC&*6n?LI@^a~tzQ4RwdG8^&zGnR=ywZ*E;49g -zXT0RlFj;1%ef^9B{wnu9Rqm^%W-k1ZGD|CC@msB@(=R=~c_>1Azs)+%UtTlkTxobO -zR?cV`{Qd@m;x*X?4(-pxjtSiN5eVKS$yja^srKs7pRR-VSM2#$(e~+1l*jR)IKkGb -z3wI_PFjlKJl^NN5k8aB_=gI9_l$mzpjNSJsTi8EMo$Ybs@%IxutjZr)K3SNfF3U1k -zNiMth@?L{HkLk+(tlVef{GV04U|F@0gNbAL)Dj1d{+x`r`=_KSBo>8TTQ<*Mu5VR) -z$*h(b!C1zOnDj5~3LC`^-LI9H61aO~!xwuQ_xk@e>vm4~C{|W`?+o7~*6&N^d@}Qy -zU{*m7-| -z$(xGIpOIJ9(ilo&li{Q6nvLFxJv1;ZS$lxS~b=6zmu+b -zHn`nC&()md-SV{{;%}b6zfL$q_ZOR;H;#6#azA;p&(A^Y=3A$GxPhy|JL#C5Hx%yXOO`vsp-FC+4}U> -zm%ceK*S|_ODr5*aprb2pe?&_&V4o~+<*g^%T6J!3H??qC1|WK -zW4aeVW%C~m*-w$navvwvD2x -z@;_tSmEjNbKB$Ls|GDYU<{UYBHtWI3iUA8lTXz3wxn(vdTh?hs#jmWD8?ENqy}w?` -z)6rTRt2t}kH_6R;GV_0LW>sIkwBzmfrjy*3PE&tdUtuWL>)>pdz^LS{826a-i_rhn -z>IFX5wFS$5os}(6>`Okuul@U$}@lM2Y$BzwQ>r-#V5h -zTwkU5r{w)DOzS$M+xAjS^rOY%EWx70ivjy@d&OLPC4RL~YJbRr~Ymdo#k{wcP% -zx6gLU)V}wiLDl+&!+pEszx%dlG*nynY>^PZc`PDqpLLqX427g?v&(9oeYBTLuRQO6 -zYP+!c-G++|SEint&~&(*FW_P*XuCT-$?b%_VGl#^0^_X7 -zbFPajYdc+Dw#3AKg~rvno?DHUd3^{z7yXL)*SB36SGeCykiB;<@7@!4?;9NxB6?h3 -zS@HUx>3t_P?MB|zJHMQ5GOli`Y5kSbv+#-lhwSqmb1S5s9egdm_!-|lobxF_u4l_K -zF3wJu#JW9YO75ngves=EH09q=)s&z)u}W{FT-QU}#XghlcXWN4+U-8IRMLoh!O&>%;^*VQz -z>WR*aKP`LRlkMM}V)Lky-eW7@uf8|kX1CeDssmHC1P_bJf4YA2^4k-|B610lUV@eK -zUUK*Cf97X}XPkQ{$ofCv``h=TNxDXC2VGz8Z_QJ(^L)7V!Lm;llBe0W99KA2f9R=< -z_#;`Z499P&C8C+jHh(NyE>L`R_t)!{eqrx>S53chyU2CBd64yrHo=>r*BGLd?p^JB -ztkU}F`-&{L)LUUCvNyLz-xTUisco5 -z-sxuLdb;`Svl=^V37LniCYE~4>S3xGW)Hq>Te2k9Oi22S!6cEzR$+e^YHZW3`sv1N -zgTdKce&qtoGb+Ds8Fv^RyC85cYH?HrUsA>K!wuIM%sXnLrw1&* -zCcbP=R_LR`&&D4Aa_>o;$W{nFD}T3Z8s{2=GZx$49AH^y(zml-X79$8lhpzxC7667 -z@;fKBczhPweIi(zGx1{QYQxC4$0luR>C@A>e`ZE5|1aIgogepY>v$`C+xFM;W-*s9 -zQ-vQroDyJOG-;!z^nbCYhhL<&ob=_a6ytYt6gsgvioYYu^Zxp6IxQX(+ie~;AJ<8` -zl=X4f9Hz->i{#RH?2VHTY_@HWoO6@?=pG**zwcpZb~`kghK6lQ{Ka?0)m))kG31Z! -ze>KH7_Zhx@KGFE|E}MT9%O#oVIw}I&*M3;`=;_sC?*!LRQF6a$#9Db^b(4;xuTqz& -z!8MOo@gJ%J^SGy9I(dHXvwc-F3jN>xKUkKidUAa(`@UnP@+Z>!x{}|f9(RtNJhlE> -zID-e5?YQdo|k@Zf8MI_uHRL{zotkxAO83E=G4|> -zn-tDoR0;gdIh9HCoxt;RTCC4~t~tn5PKf>D_&}lHgu+{qb;7s*?q{95b;87NGM^4! -zvB+a%?g~5fe!ir2{*D`&+?S@>ZDW~Y7tkhe#-My$_WZ=ZUMatCR9&mHVVv@~Y2K;> -zT%PapWL9P?KWpUvGcT^JBQMy)O7Nm5QwG;dJ72?})0fq+^cF_`M&sK(X>ga34Q!0n5J%#D(gD@&|B_t -z)a3+u+dtD}rIt0UHV$Clba>Z)?^NT{-wVGozX_A`vo_hsn-;gXb>g0_b5HkZEHXHM -zyt^j#Q^)(ez4v;bl<`)~@^=V0@vfZ7sBL}Tf{17Lzs=lW@vAbZq0Ha>X~^4Ccg%jf -zz7q0RI5{g~;_j4RO!AKoJIuVB#v*)aQ{J3a_Ey(An6J3(V%+66gU2ADyV!u|umKPA -zrIq}T&%6_HwEiUhdH>Q0V%tN6t}WL)Veuh6u3Guf+VuH11B6%@`L{FdVc5+Oygys) -z^z|~m*q^S3+2A -zmC?!6y6rpW1iqN`uP3uO>B{R|+06K#Z=WB2DRV@ANo|wE-Z(YKH~PEp*t!2W`g7~N -znc{(~FV$}Rn^EI&!r%7MhN6kzn&wKaGFllER9yWbX5x+;ahue4Mrf#o -zebeE3qPXZ=A~bdcx`zzMmo=9``x^^hDR@0{b;j+uU9!@>ngE -zV0|RHUGHyHUTRE=YrxN_GGp7zH|^Ki`)}#nCVEBwz8sS%^TDMLo{9H*u<%;{>i*rM -znvxl-%6(fli-YxC?li+Q1?x25=c+vPQEpvST-YMsv1Mv^i6d`_J$sPeq?+6_K97H= -zYpFIjw@xf-TIu3(=}=JRjw?HZFRQmLd9ZIUpTbue@kL3F>u;!?zO}jR-WL6%UoV=T -zXqwUda(knbvv*PvOd$>GE%${`h)l!+Q7ovCUDw=TrCUzA2HM -z?|qBmz>X6K{`xk1Jy0U`#)GNdwf)A)>47R;$P)&-d`hcbmhfHXAfQG -zzYFfoU6DJFe{$0bmN_}@ObinkoDCQlL<}6%=C?C{%7~beYVXp(B-qC-#oscOg{?8= -zf`$rPKclxn3nQZpBf~Vu2F(XN$_f0U{kQl}KUpecRuy&VtCYFox!+=`OO9rraBg;x -zj50p_qB-EU=&{oIVV+Ffj~DTnUbuMq++@a(Qis}I=dWi4ar6bVRL5P~dQxoL(Y8(R -zIgfT<>W|4v*SMOUCL_Rde1)oWCwB+StJ7W~HKqDfuAG>vx@&RdqPo<=1y7y|GwW-3 -zFPZ1|xrOhvFlTb-Rk4{)XO)h>PwI?F>1WURdCy_#X@kQa7cNgUcxorirM9K7P|r)X -zjzaq9gh7FRA$ -z1=Hyp7y0lfFnn~e;pzEOvii}N3lF{2?zCR+ylbsnIKNh@u1`(x#P5QX=O=&qZ})tl -zvsijT*cE@XdDABE*}i#Mo!H-wo%*YMcClH?oLR&6@m*MQP_wH!hwZ9@gkybM1QoiR -zUpwzK;0f9A*GT+80!PgD<}B8^yh`P=M$8ia7R?!H21Usssk?g>Ha%zHTsl>)M76K? -z{OZ1MmY;sURC-ysbo$n1OQO_mmd*8l;Tp7QQ_;~QhUXH}6-q7N@a$$tmonY8b>`8< -zM|-R9RX5yLSk$dK#ptKcnq%iXjNf}^M(V`Mt0-^YTQxa5m-~=V+r+RPI;lsm{B=1z -z^`+vPpjpMPil1Y?onhIjaOyzkiV52i+1g}ljI&?-U43J<{nz5))G0HU=&t7eCwh+O -z@FS_8*_D&^4skTUcra($<=%Y#+G!o0jow-1Vn;i)Q&S$W%f*JLNZj5o_gw^x60 -zf;?a3sZEIM}vQsCvrMT{%gj(Tl4V?3dqooSj?1@9@T*Z#}09AKLK1 -zy!X!2lu1=?*Z;pR5K!1$aL}yCkHsVD#3KhiGn=0hetqAT*0|kJvWxqd%0GMhogXvm -zo$oVUc)8dx^2xcDiP2%6?y$-=yVpZRw`m@4+wj -zyZKf;>{}}P^Qo7WM##w$yOZp%7xx`+W~+-o#FKI68EfaMLw!fQRUN^e&Tj{|5IPDtd+Yx-KQrZ-Kx8HS#;>rq&1!{9%_1DLSr<3R$Fzfp093U -zDQb6@H{E?#zyj7K_mrY#IX^C8n^Cmt2Ir=y2fuE}zBVUm)?uEbv!wkCVq%5U%oDTr -zy7l_ZSa9^$rTW(kX`Cg+``ZhSazNNd*pD`*wzG2?tgJ+m0xicK>;MbphO#Et# -z2*W1XhaU|CoxYmrF#kO#@YCMw(Tcb3Uz+Fs=qSCLZl-xyqt7n*g>G8KT>Z(XFT}rK -z`Jx-VVu$|Wp8;zUZmhX+Ei~oI;ak&|{xTHK{9^HVkNo`B`Nt|b825-xaS~@)k(9I8 -ztkL(Ir5{hL&G{=%bK>&v&2uh1YU&bVuDCGgPfd8r%tB$)Y|B%T+(M=DUORsF92Nik -zdd=qeyv*EHbLH18^b2$M`R*TZR{llrf$Ntq=L<};pPiPz=_RM_1wZe5GO{&?FBJ>_ -zd$ut!_v=c*nEOR%mbsm@y6on5R+4QiqtJ@=N5ocIgl~3T?A>}v=l|tH59T{hvpQJX -z^T=mbn{L2Lxo44mFOIxp+dtKIxzBuI -zsgsNO=6&UUIg(e}xAYdDo|qtW{b8`@iPQ5ESw4hL|2TcUMdghJ7Z){%II?>++|55Y -z<%GTAth+({qH$4uVFBr74X@@XGM45CJAZn2^3V~%^*8>0*>rzajoId&WUjc>!;TV( -z+S`^@1iQ(&D=bkJ_qLj|;?|Gjb1W7d{pN8t+6`#BRsV(tbRo5@G -zKic23-}4yC$v^DQBEaWXCbZyf -zXrZb7dh>3#+{3kX9rlOccdIen+Ua{| -zXS2%r<`qp1j;is6{nrZB#UuM>9XY15+~w)^;B%*0+pW%U%<_8W&AV_%yRFjQJLXbC -z(_T=>6fJLUm&w$?W^l`k*vRPC(#I -z*uwR`W_JHGR&)r@N-R09=CNOL%7XZNu8&?vt(~-F{Te-qhD@uN&ED^Rzxg%o^5y-; -zANFT={MzoI^C~>=uaT=ie^A%X;=RA>Tw=+Ba)!{x7PCzs3SV9Ec)E5*UalyA -zd{(q`e6DVpLPqMr5_Q+@Z#S=%b}2SoAD{eBYoOYQ;yCsy>n$ksgLGk$4@poSLGM{6aG-H -z=$;w=tS~G9ia_dY2M!zRVR%~0pj>kOO&@1TUTn`pD^}B|zZh6^R%=uT*@qJ=|{4wRf -z&z)3OZQ3_~T47psWEpSc<-M~HiS7K`82<0|7h5$Emd~9HKQzwiUr_Emp?uu-q+aO4 -zw-;J|*7~lDKQ-kXkMy0sR?FR&cIj!HW^wpa81RAr?(g?@SK4&7u0PFw5!&=_$*vTA -z_M3e@9~MjhIJA8ConPz^O-j>6_`2m*$|#<=P-h&JK7F~0%aOuV(;DlB#wXL~UCI~g -znK#RWbFprt-F<^!x6?W_EnlD1_Agsr+Cea6X$W$Kon)8R|L -z^X%FJ=cT@-Hmm;fm9EkIdyLOaThB+e`PF>g#PXdd*se$~|97cLI(+jNYrmb? -z|4z=ek@!x+tu?r^N6$g{qxH)QG9`t2QdNzkqJa5NE -z-X}W)nl=Y2i*E|gm7lF(`Mla_{%n@l9`)1n_wvjRouuGv=5$m3rPI@H1Em*JY%34F -zm^jah?Os^wXScZ`idFt!oD({GGNj^~POq5VaP>RWi@&amyAm`7_o>&UZCzTXpj6x8 -z7Pu*+Dxp(+g+%h*>@{h2i>_5CshwRL{QtGyq?hbnYj16`c<+5UU@MEWWd3oTndOeZ -zmw)Tqdhl1^n#!ZME5ovklvK=K9`h>u_x=ZCR$EB-%GwueUmme9%FLU|CbXvNbn4*^ -z?|-{DTK62@m^DM{%m$0pi-Ms^OV&iftl(kHGdC2Jo(d-8waXCb2nIa7V&f7|^{_{u+d -zj?7k<*zSSHH7_`$QXMs_(fcix59 -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 -z`YW}pMQQU`&zRn` -zQX;;81ZIY0JP0|goV)V>Mh2E|CZ^Gc>NekQ_%{8NBqQhVYdjN7%4TM}d^rF7t7O5E -zwg;I){pr`$*O-dUNRU`7QMfTy_@S(TjJ$oGvigLXN8RJ!Z!+e{ObIx;h{fWHhCRd2 -zHR%pv0&}^JZ)8%A`u=p6$a?WoPpyN8_|I)#uD~$q>wLMh->gpTYhTV(_vOGVSB0gD -zES=l83fDe8qbF1?8J#Ts;Ih&3*tvdLE|1TDskyd6NaJbShC6Lfs+fO@Z~o5nKQ89$ -zhXwCHmDMYn3Lk6c`Ma5kajWK;t|p_DixV2Sd4k*?@a%Y-mN_xP>Bor`Tb;B@*UUWk -z{aL&9KaG_$CWNx@xp3XvYsGt!t(^Bgr35wBzcI7_x+*Q(!L4rF`5U4}Vs}|Z+21&v -zT)z5*lhQHGMphB711?A0jj}G@C|t2l=X^vR89m72== -z_1pTc>e=L9cvSc>r%UhQZfmvxueJ`O&mrB(Fo=9h@O<=ZWqq_IQJ^8 -za{c%q=F^3lrLr@xOq^B8#I|9l*^J|dbiXx3KU(kq`DBD}OzOs`S$SE@Opbob_jaj2 -z_c-i$#nOp)QbIhfil=*+zOvbt?dRvZ+xMgWiLaaA-47~0s%vpgVA90yhP`Pl3WuIf -zZ4mqWdNSMFe|A%hxHLZ~M|tfjvvT9szxR|+{*#iz&WR4!KG=SoVe+x_!2$Ph_Lw!# -zj`)P$m&#c-;o2I;_#Mprf%ZA|e=WP`$*e5=9vW3X3UJm?`I+U_HtEkLcAky*?I-VOy|c{qNuiZ%e(mFh -zh3#3zb<-!?mIyK|US3=Iyr**Zxs@5_)j5A649=*o7rn(69I-fq-@lVJ)YslF>qD&FNJJk|bMSe2$SO^1(f&iSj1>k}7GwtBO9Z$bEG&1iR-qKKDKuTA!y_A)ST -z6tm*@XJ4X73FTaADu1Q@KED)33t` -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 -zw_a6=x}f$|Q#Iht)FhmI*m3(Y?!jC -zQf%gomCKmLuAI4Yi2LaZ7t`ueqeBwT>y|9B5z*crzxA4gQ+;J>#G<5SD!VnOM{PVM -zs4LgGJ*0d_*M8@;O+gF8TNBoC&syQ)%rC0pv$HUa;go!3?I%Xw@N#84sX6HyZB8t= -z;$3eR&ydbAezzp>jn;+jCrVjs6Zd}F5jFP+=c6SyOaI7mD2QK5Jm;7D>VlC+5dZ0Z -zy=PAX+wvdbs -zZm$YfuUu1XD6hFdP3&gJ&K8$nt=n^h1H#r8HHJLmjAOZ|CY0nnF~Br-R@cNu8dvN- -zabErL>4j1J!YLJ5Y(;z4%yrGuo;`m;Q3pq-TCzeBYyR3jKcY=%8Z4g5R;0bv=-I-J -zNB1eppQ%&cm2DjH`pce~)yLPYVy{0i@r$Xy``D2pRIkfmixo4$3Koa -z`yQC=$D;qhDB$w0$Yo*Ij_y7%EtIcYvV;G0yFOoe&(6dU$Cr@~3u0ZhU#m*_J6pA+ -zsK~w!5ZdO>?{j2cgH2?A{@>b(oU2y65M&iuJb(T684o72U)y`{fW>onF*T0`lcrV~ -zNQAf_RiA6t(S6osPN#lKLrSx@-L*$ddM{S#1umWLAjSB+Bw(XvU}rE>-34>$585np&N0akTH^ -zS1(SDWy{aVynJmkqgUkIVZnBp&NtuKIXk!akaVo+_fRvI2&Uc6ZE5wY -z8e319Y6jdqvAa@bMW3yn`037wnkzjl8x>g&P7;z1Ii))}jcJ*}zK9t;XV2W3>&U6_ -z!orq){w!mW3Gtf`NYzPfZZ(KlBydsqYTt#P$7TI5RF?hvE|zHjQAaLt#~to?=I=iB -zb}rf(bDc8Hh4)A__1$1J=JfnAd-9<_Dp5JQPZkw0Z*-fI{LDy_;mfjZ$Ga9z=>Cy< -zBr46IHz&feaF>q9bo=C_BZ+Rp%bhykhd34U7HPk2yT@Rb!CDy4zU9P^uj@AKQ}MC8 -zfBj(>L*(?XJrkzzCHQ8pOU~yD__I*v&dDz!#||XMxV#Y-+&1YcoAJq8^`@r{1YJ4b -zhE;955R&!F^vSW6rW-D;x;9^>P*BkG`=Y%rA5lpUp9!X=wOnlnKTk2}ez>Ocay9pUgNt5@T1z_gjN&)e++oY*xcE4IS%Gb! -z(yfMxO>2ZsaO@X2R_LU%_TZzZ#auEO+dfm2BpBL`dlHnG* -z-kw&zu=ugzA(aw05!YFXcQxKWJ3H&j4(6i?_o941Gqqf1nJVw^z2U*x|5s!$Tz>MV -zH)Q48BVLVu0`AO@WCS#po_5akl44;w+Tg-EVP*{r-v#|C^X$@(=jUuZ^5A#)1c4K0 -z#ctoOJ1L&<*iiG9_ao!oO;ZzpM@vaK9$BKDpe6HYk?dnmiB4bLcDAiM7dAZjvHf78 -z^0AN4{y(@8mlgj0!^2{(_1{)xo#>nY(d$pri`VbDc1al8hcIjK>D)9w93AMS8X$d9 -zDe+TB=7SZ1MFq1N4QC4NYt~EoFh|pKAJ4;$-v3X1>Hg@I`C`d0+xYFN#k$vL*6y0Q -zD>wV&yTU_xX<7Jjkf}e*@-Ev#g -zNeYWfyuOrlzhdP*z@(GTA-BnCQK!)j^9}R*Vy_>R@eDq{=0=O>2DS_vWv-nJoLw8( -zt19mX#CaBQE+_gRe1hpIY0u*_0h*S3h|q~hsZu0MNh6j$=jS1^)M3SlvAaX-;s -zR;B!7!-)k3`!f>yj-1uxT|4tpw3Y3LAYmpy@#~l5pCpXGva}Q8ppL -zoHf+&q|ZdfcMsNeL-@jhgerOH|z}DcPcMwar++O!;z1w -zIUOu+l^!_2wfoYV?3=#RkF7n{6Z_U$XV$BEI!-IqLwj~HHSs7YvPqOj@4LC~ik7jU -zgGj&|?>m1y^0)MEHj_FcboBt2uHuPx44xJ{0$%M7xZ$s^e9kQ(>&-iN1)lS6-ySgY -zJy2cbaqFQdV@JgW&Q0#7+i$x2xHhyUSLEHP+{*oQ`WgSF#fG)yi+WX-d|)C9IrY+pbqE -zVpzA?$mHqXYrJ!2*uAv3IC3n@=)Zy4BG+Qhi%aK;a;=+aFiqpZTX}w`H_x)|ADX=0 -zy;Wn!#Wzxkm)b4uesuiy-WcZ7GF3rz?ed*Fl=7HjjJgjl^M4cc=a$wDr+W%r3+Md{ -zVdc&}C=?;9k@jnD1H;n)HR4?}dw(8Ld|9x|`MlsCp(R^BxbiG)66CowN#%*8itVoZ -zsW~mBM`i?ezPogz?UKeznTbJ(#h!7Ut}l*jMIQV7*oRSe`rIZ1&!;JGW`=ku&pON! -zUbB0)^^=894~DPeX>N+kk+bo6HRabu$Ek~z&ebzG?f04YekW7nO&NnqXUF*${{AtY -zW&Vp@!^F*abFa-(VXs?0dWq6g*8NO4ptgNA&*H=Ttc^Cl3389*==Jcr8|`5^_mjcT -z3YH0;J?XUuhKHSxNQynoe|>~8?zXqkcCr2Oe-kTO_zfm@h%NTsB=hzB@yt-mq>u&E -zq-xBTWwHG>aAB=GvcX#SfQNK!t8Fo0V -zjY)c9BUU+CuA5h5v2)<#9edVZh?@FEE4x9P<+bq)(}doPI?c(dwP{l}2_(-_$drhX -z6q|GS?Ao-YuA0>=9F5t&YbA*#9Flt>JJ0d?qBXDW;x0X6|Ksw2MT)unWnQHvMf}4*J~ync&B5=^gjXnFIT9pHj8?qsqGo5?xJbY -zrm{`k4c4=cf=v4S$_CdD6ia;#Iv_VI -z%uvLriNB(MRWmn>5zEa-UsO+heD%%BY{n!*W6L8P*7jjM&&%)i>o(0~++t|@=)voi -z>`TP|&elC!+^Jc$=FEb0L3TCCb8{!05Ssh_zM<%h33;}PGg$9)cBJ#jpY>ALKjc68 -zp_}SLHn!unufldsFljgeke$%`0PBByO%q_^{>tzawl)0h4QF5B7ZAleBK@ -zg7$=2`$ccr^SG28`4YNr$%5aHKE0JNeiOU(giho_iOo)*ERKau-nM?u$qRxqO_Blz -z0z9*0pE9);JFG6gko!hye_DNYUi$Tm?kQf3KO$VSSyo1J^Jj|j7PqG@oouJwVja<~ -zb2ENjznU;p~H7NBUil8I`gm8a=P8ML`M0rsw+vF -zH@|G#Wc5XO)7wW&*S^$Sd}!jlb22|wc^kg;eMp_McE>W0*8Ze0o`U5kn&QtC9Nn|Q -z;n${@M<=En{C!yH9?MI=xL%8}!cQ7TXFs05-Wz>z>imW)7gX=vo3pWJy^&AnkFYf? -z23&81+SLo$*}v}#%P(VDbN1W6KN^)yU%EV2s -z>o#!Z$|~P~JncxCZzmuAqDRrB1r -zdzeoCzc}rjZ~KnVT4#21eNKz{J!#JSg3?E}9D27C{W~_LEVcgbzBMvap*uqZgYO$YyXgP6Jnp5`@}tt#bk -zow|aD -z)@QcSLd<{Ggg&U_pK|YYgKV&l%;(F(8(L0DxIBNeZ|m({3R$^F?ltOU|6~2a!_+3W -zLb-mPt&mmg$@p`=EepE0ZuliMui26 -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 -z=ZQUv+IV7Rzzj-1` -z^71U6m8%PXTDAQ>bkdApkD;nte$T5C{k>r_=Uv+;J)Y9V$10#Vapz2(PZRbhEw8!M -z(Q+!5`CoX})E|EDR>p-fIMp7IKXF!^|LBZ{X*bp#Nw{A-gZ;?v3L#Ao|Mp8$C+wIw -zeTBW|R;S!metAvjH_mNno3}E7h5t^@x(~tb9&L}WE1y>B@~%j~SaGXOD)9CerJl?^ -z+w_i`7mCy$ea2Jhx!;bbwoV*_Haay7T0fzbma{UH!QHOT`bpdo)vH -zmEbM0_8V$HWbX?#GFT})F$r20M*ZiwdPOo};^f}j*O-=GO1ZF$vF@{x1jCDp9V`Df -z8*R0|`Q?0a!uoR$3%Prn4xI}2yO}nf;g{l#+DN0s)-0>Z+%k`ir_8mIiWQI9E#^BT -z+u^W-aYz3CfD2XGE}6gBj(-(1oLteCW8mlw2ja@60`rcV5mTb1D -z^VEGX(JlJ>*(?>O)!zaI4{ZGR`$*lBUE<%?UcTeRGc{g#(#w>UbrKBU5;z$G+7BFB -zT=R3Gc96ran-2d)HtorXIba|5+UcZ;*F8OhXqE0grw>nJNs{`LqH~eq5tp)Lz;)(5 -zoPB5FmRIU(irzhEuJGdC>%^qAG=AB4tJpqNI|Lovo?l<6n*a6Q&*tiVpRK?7pWm(b -zHUFO3wcE#RbHmpGB{V;sJR_sO3;&Y!D -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 -zbz!D{gvp=G?0J8V_O -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 -z{oDdYZ>vI@=SJQmf@= -z^ZyTII%J|793I^8RwG~Od#O^8lvPIJiY0G0562Qt4k -z?l^DRr#aQ>m)C<@vDFXtt_lcQIC=Z8SDWl5VAnF8fr(96a6;{bKXVkiW%H8Gt0)+L -z=41??rX5@R+Rymx*VmipAMjOs-gsf|j<|I-JnOz%*}CyeDcqjVA!)Fh&sX}||ER_s -zx5;yIb%kD-KeuXWTeG4$-Z+QtvH^!mf`*7>tkXmTUJ=u8%)$o_FeMg9aPT!XDkv#% -zur)O{s0eVdGzv92ur)d`NOp95lu3(Y&sDMdR?P50)_Q+oT*%tOYj7-=^4Fm9vK3%$cgix0084hv4p8tzWfw%72T@ -z*x30)`di&fS8r$ClBg0-Wzj9#9c||?oLJF)>S-y%%*!Ran%~Yk@@S(S!<(w01i_p= -zK~=Fvc1kRVJZIc~{*Grx&JB@jx&RwVcNNPpQs`Nj!Jv%>)LCIhO=u|3CX_$ZyNIRfa__=Y+NO10lwmT&o>( -z@2+5;y-29+0qO%2S-agVi;#Yjam{O{Vb)B&Q`g@lb>a{6DrZnXXkL1)X=UvZlsO_rAICF_j!!zf)tKH$NGKVye9Qj%|alOP&&fUue -zx?S%lCF)d(KDgv$zu<}8JV_tjW%koW9(rxx=-`sDbP?yg%YUbrA5>qOQSQmxv2u5D -z@015dbC+9xxqjqzup^mhP0_#`KGxv%7UfC$nCUy0!dh-00yw07|AMFr&lDOn+ -zr_P&zI**VXGmG}^?*HD!w%+q_igk<&+HgQ=ilHAbFV~8|J2gf;)1z`HTXa423TSSQ -zuoY^UdG(sINQZ%257B|Ow#+7 -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 -zUfg=Lal@Ct@XBU5BPfR -zLl%qm*BiZ;Zb~`d{bwE<9K&DaV*i-oVs^;R?1j1}(kG>&BjmHRZnQ6(KgWCRBbUdw -z5}&{Re0g@;ul-l<hcNx=`6!p9b55K(XyG*Ves})H-7gO}svj+1!o*jlm3KOGrK895!ei1b#fjnUp@E<8`g?Q+|9Z93 -zBRwEeH^4P;T8W|cQ^Rlj1o)2%^{!QE`>x%&@a&YjCjlKhHQj#Bv}_1^kp1qe`q6D! -zQpFsd(}fh*o>Ed_JRhZTG+WX0oYTgq9z7RAIs+B%e`Wj5SIH-_>_TEp-z|R2z{cym -zFTG?X53W?+JoVKHSDnz9IaA6*f1cWKJ#6apguuhgS1qXB-1LWK7wh7!_u?1i6kjZO -z6|=>6{)Jx!*A{fE#Fb2Z@YChBVr)y^vhD)mE3W3Ar4t1?gZ}@sNVYAn=-~~vVxQ!$ly%j1dok;_;1f=9iP`p1?up&e9WjTt -zUAXXGDQ9(eef@@``P~mYLe3>{UzFIwdRtEEBg^fsr#uJ6?pFQ1e_&hR=F>A$;IS4x3FcpPtZc-u)AP8edUJy7TaNEeDI6naTEP -zOjA_L`DV}h_u{#d?-?&%zn++PQs-{66vR*adu@x=snw5TC+n1c(A&TMKKE>k`|IX+ -z$o$m4zP;`5q%$|q@ttQ;{b|PS+*Y;L&&$}e`YXGSb;v4PkykxI`DIK0=0*RLF*b_Z -zylh55?Rl@IzuK;`{I%Qp`E+NK1@GE34=+p$)nXR6j@p*LOi#Up^RSnDP>xkY>@J(+ -z{)4+X{CfnFzxo|~|HVC)|J{D3TMr&dUz|Dp>Ah7(R`-S_r&6#gMCoYv2 -zVNJPk^hMp>0G73U0j@^8e5<$CJ^MWQ%Vdt`S=zbUn=c*jt|>Wtl>K=B_S4xfFZ>Er -z+PWf3|3JoNE3V=>QUxiJvQp3P%H&VbFgw#FsLRuHa~gk!)|D&21NQ%@li<~lnkIE8 -z&?i%$eUISB5ZPBZ{$Ms!WH@uA9ys`4`guaR?8|Q9WC~~j8 -z^vt{heBOEhLR -zp3Gj^aLryQo;UtpmcYpwYbP?Az89YV?tuH;*%HjUThCi%wJq<+y|e4+0oE?JndhS$ -z?DSc`RvI3*TmQab{&cmI%apyk-^Ge&-Z0-{x4ggP-c{klrF-UAMpy5f7NI@sneWkk -z%>2vaFHOU>c%i~C3VizFp$-q~GW<~uX=O`XfyK9)_&e-t>^S8o>&*?d`Fck%X< -zuFG0ls{$vtRULikRPk!<8Ftw!egnCxxz$(S7Pp+&u4t;gHgEUBw;whv3Y%BedRFbA -z&Vw2WFB_j}xzB`q&A3E6t}`^tZL#+)Gb&|T_57B#!Sv!ccaN06aa~#crnEIF+x}bG -z=eS!pH!Z(B(}&sDr=umq=ULRZX$q%0-wR}4*!R2YrNYq(uPjd_y6Fq-HZi`zY4cH3 -z^YWD}wKwi=(uZUOXU;fs;!5)#*LANNOT6rIY-(ohE6n5Ct{}N|8N)7Np5nYC@tH9< -z#8&mhsDI_EaO0|;!OD;{`PGb_cb}B)|9z!)?zg>rFPxge`Gaf5?H<;+l^-v#-N;?? -zb^pD~5i=Pt^rrBXr>CX-&6;n#`J=$+z8V>y{8anvI!WnKclO9Q8Gbz;{yFtYL%9Xx -zlumi!Si7Ffk5WrADi(5Y%IMaL -zlV)CHVJ&f5|2$iJ&vmyz(=R{$*39~0!^~^z!+dsY40CQoE;H|`T)8O#U_QkTZ*xydHwQ>a~-gfHRA#rz^;04*J&mUbh(w@rd -zREb-ryp#zL@-@C1ewnBJ?~#s;nQYQY9DhXKEIqZ&&a5C(!lwNBTuVl-RU$ikOEsLi*Z{gRZOaMNr4y51?5q{MnzG+WLz#YHQ;KXZSsjOw?!Y0UedO_vu+ -zxL)$b8pU(A*NT4*iNvoB~`$jY)= -z#VA?olNaw4_FC`NCBnaUCVhKlv_9_iDd{J2Tl3B)wriG*}!udm!OoQG{yB}4+ -z=_*)wUS8pOn;^5=?iD*vPuI3tzhP!W$K%cKd=s<^wzImK9Cg$V>k-NI@octVo)w}I -zQ*p-Ugq5!9TGc}5)B1uv3%jO#-5|N)lvS7cbg_iPKA)baoVnY0Gla#gs9DU?q*aOY -zya%U)Ns;VB&-3Nayk|79t((73@4^Rfms{p5>i<+n&oI~jd+1usbeZ+D6?;VQpWZN` -zTFqIN^ud>6y3Xo^JbaC?!wWO0eB -zS^f4<>#nyAL+FfK8xBkMmOpr}s;_t8EoWLU$3Ldf -zkCQ4cMsacX)x4-qj!9bSlXr&w*td(5xPNRuyyIn<(d-XB#g-jkMIN$;EjxVkk4J6j -zyTeoY&Rz(=I-sXIR -zvRzesf8YM`;aI^_@%qJkCmDX6`(U^0xp^61a%y%w3F6$H*_Cn5Y -zyR;s1B_#Z@xVl?PVZj8KE*noBcgFXnA$5kng;m9cN7m>c?ox^TUuTtMER*pXrx%X7sN5aDRejQK#(A -zLW8wI7QV{1R?%i~XrG`_S(CN+yrx<*>#pbcS;fWho$`%7iM0lF)mXm+iej4_h-3uf}O{M -z3%t?Mz1y?Jx*p56Bpw0(Z9{$sg>Re$~6gR__4 -zYuL80p?98?w$I7c$*1ZMEt^yF@@V#rdHg;pN0iJ09OMYzMY4cEAu72TfA1Tog8f*vveb)+V?KEx>Ly7tY@wK -zDp4?OUcr?9Clc@fwS1U%`i9SLCiP66nf-!iuVyLFy>xN)Y~|U85B}(wA5VJm@Wb$B%<%T2)4{t=fO!<$|smpAAjK -zybc;}{;95S*W&HXWEH!h)hJ8d-1Bya{oA_3BDbWD_VY7#WHud%x3W)p%aCQb>bR7Qz}>|g -z)1Ga4ns=c!FtB)*T$1#pZ2}#-A9gL+AnuZ~WFgO_NbyT?6-Oey?jK{G{Hu^f)%r`A -zi2 -z<=;M3l6@-3DM}*AYq^X58lFjR@mEDJm6uNWd$hN{Z;n9Os)i3-k9&0BT@c5dzNh)Zj -z=uQ$@BsWE5SHEiO8HT6(mR!(OzGaviRG~V3W8cN#jix=7st>15@1ODhnU(s{_afot -zkE%qcr^-CMp(1Xbx%O*h+*?u6w{1`AmTt&f5q@oA#wR7yQvnt|bI-)Qdb7;4!zI&D -zd2+XLC1*&%#)i|6Pgy!|U*>f0k;At+H`c1y7q5A)ShwnGD668_)b4dwCr)Owh8C~> -z=J`0TpzXEa?BJ90m0WLqb=BChciB@#MV^E^Z>@AcB<5`Dz4&C_bI$kGXEV-Cj}dss -zyQ=DUL!imw4M!KNyQH#yy}kYQ{u4XBzHThhZ?t|{Bzb`$!L)eAqOCTsXZ+#NFz4H6 -zbmf&vNs5(0a>Oom@oW2pIa0KD&b`-_&^;^f=(O;lb-XUK4IBRpO)c=;uCD9aa#r>} -z+j4>5S7z05HD>)$YT*2#YFHqsEUGe{b?pxJg;_fvu^OB1dAB5U5Qu4dG2d3QLi -zUGZT;kguIZgT!uuw)CTu4yIq)c9ieF;Rhjqec6a4-ovXOD6bMKOmS^wEeoEjrT*un -zbg07|yL*d%yc=X7hKJ+&LcnU2~_h{C&N$_TrP1#j9p} -z8ug{_PyT&wUyYi^pSl~hvio;BN}WIY>1M~lXz_K&?2O)W70N!U&KF(#bKee!yIuTK -z&OJD|^`g6uXMtnSwPR0A{dcOd^fs3XOuBGrSwsG_3cFeRl2prg2p`k1GOJ$2zxMv* -z1w0pXde^VqUeC^NKgXfn^%M)&axn+99Pg^mOVgg-Ka?aA@pO{+@0Dv*+P%YMvt##! -z&Ak?{u;|a}SznA>7jMn(&HHrhu;z(0R%O4`6UXbAa~Ry_yRv62vfo%E|I4X{|K0Td -zkI$Vt`+sGs?olfI9?9&=Z*lXTt&VRRkJ4MNsF(Np!a0we+}3|U$4Og-GgqEdiqkb{ -z=XCbY8M^kBJ)anwiy7U2e?D{c{mS+C!jd@lJ({t6``g}6AxEy&tx4WF)o2Z~|Hnh~ -zx8Dh}40|Fk`7d$tqN>A9{Cf{|#@}0O+GE+Qw@!bS^U55de;=c+u34};@o{H-OV@Md -zz<^HvO&bqKPceOFv(D~pb39i^qIH@K|Hrbqy*6iOdEWkhVNLiko}Z-?I#1kv8dq!~ -zx9H!)%@Kiq*}U%_@2<08yD#sT`nuULuJGEa?pgQtwsy|Ddr5~|mNT32rlpQct;ObB -zi&*?V9E$0^$SM5HMKqs>wQY5<(e$lJ_JnMtnx8%C1CHq*{287xeu3`+^`eRl`Xkbq>+bh?F -zPp>i5-3^6S{F -z&9j|b)+BG`iGQ*qXHvzNt6p7`1AJddIK1R?{PSk&nFTkjg=8jO`g&_~n-a@KiAmWS -z&C`7n%rEO2u^8Mjuu)MCV2QiDtm1XlL5{qN-8mwAxA>eo<;=D8>#5HgQ6;srw-ueL -zd-Z##^&I9$S2wB#nH9y(dtef$r;>33syVHmHYLx$U-?W(c&E9#h$Lud% -zg0%~OPCv7M*494B*AMvE9t-8V-)3b>i!8sm?Q6D@4}*gCqQ=Iu1G_f7PpyyN-gz)! -zr+VAG(DZ{IM+NSy7W_G*mT6(m+xx(1x{^}*(W-nEo<`H7%e?1mdkTle&s-iB>M1St -zUH|A}nfX@^D9Hx9D?Z2zWXsD=TlnaFtOM)r>ccGy&1bD(b$c1#w{u3rpQ)T2bC<{^ -zoh~dny?@^(=~odNS*}985AwH7aP(@ur!K*NH+}oD?;kYm9p1BEYP+@PRef^C-K{6t -zJB#0~o|Dsms`Zbq%+k+A5|&jgLFT=SE(Xp~eaJhhE8&b_FK5>q#g^=CD-xgfc{={F -znQ`9X2_J|37vEPt6*(+hb}<;aiHJ4$N;{}zde-+(wD?e(X4rem5Vzkz0=ehG&mi8@L8t9{^QIfRBC3n5`t3%K2+h(mj7`WxRtdmEf -zj8yx{70vOJ_<|J#Iu0->7Vfl>;&W|&D3fBZY|!8!pupACoS<-kgNLc9LBRohE@p$1 -z0!M-b8>5kc@WO?sL#>|MaT&eqIQ8?Qz?>AtORGE1ZEA?;)3Q1m&N%VHoYb>l{(f!d -zt#E2wS&?R#{W$T!?2nDc%$>`QZMqZG_32EQ_Z#jd-ilY89KJp=Hgmn_z1L~G`RdwN -zH!N+t9~z$4*4p&{s+pST2mK3C+h4G1x>sha1~fhBUF0xXxs1hls``YcP1j$kzxlsq -zuYZ7X(Mr*#Y2R3rJ+@X#r}LDrZ(gLDQL*r7zsJ7+4>(%{J(hNDTp;;}v+V}U?n^%k -z9IJ0K?@(i5*SOpLYTovj+hraZ>P%BQSn}$qQDtPgrOTrfzal*7RkEa4rr>5LI6C=6#;bEP^-d%;W -z;vB8iq)gt5KFe;KTo$%2QF(r|sn4H@72Ff*%*^i|I=$+KfDnh(`8m(yHWe({YWFXF -z9bXD7yXTDEXJ5{~HGT0Dt)pEF9d*N>cw||2IQa)m4fk8L&ZB=x%!$bj0ZTqU(7AKF -zLHtLB(4pBeH)B=J)_wn8KU?VJLAUi)7j;X&`mFLlckTK?=UQdga0bgyC(_PoZGCh$ -zrgo2w<*~q>3B^n>o*JMN3Uc-XhHwDjT3 -z4PNWz=lwTR+myKXo8gpq3Ot!tR(^Ti{Q9cWn`gThTig(3-1(xJr^ebM_|LK%uim{q -z6%frH^WLfvnTKOznOw(R6>!@f)+1{_+Ojyj7Rb)!A0zyhH0=uVue# -z{iMY^7R}$3%E53>&O`Fa*){K$q$gH8G!${aeq-X+w{e}^ip>wdBwgs4Ce7{}#BeV~ -z{K4C&oE64f1lz(QzA>o%-+rh)Q{s|)zKCYr-FK@NJmlk95#8c!b9U_=!*!Lv*Jxi4 -zcG>do>+I=16*6M;^+WCd?!1sUCFsg8<-#R?ZzHF6rfiK+?h5lyVcERn@F&H8o(&s( -zTMY_03Pt)(Igl;r_@aosiTdUiWxijhm -za(sh-{1iM?!FE+~#vMbYoxTU#Lh428PDXDEMIOAem)2+wDE`8)ta9o#j;#6aKH6aArU6N7kAxRxh2MG#?jVE9@0&E*GiVn>~r? -zSed-}Lq_vwmm6XfxcZ86YI%4q;x;#(w|n>3H@{?#_B8f??hBr@zjIoapF8KJ?$+N| -z6Ryk;DqbDD$&2HuO-zlv?>X~;Hs#D~*XHt163D!}GAm6^qrhQ*&53uj-`uMF?D}b<52e!`2xenWZ&F%B%C+^onyv8|^F<1w}tTKX7=pEW_K23nuT@$O&0y6Y$vY -z{f0vK!@bt54|X*FC^@X*yj!BVWJTlcgE7}D)wNrh@|7x2@&}nLd@|4a=%kq^`m3BD -zdUQY0dT3su`=s}#i-2dOUyb-3>+YW&dz(3C=3c2jej%q#lIi*KM<181sV|v)qvW37 -z;}YHfxmrscRPRWh;4E)8_-Vs@t1f^?KRV=2>4|H~tyu@^W?SEAiO=JI`>ptBLfICP -z4XZko3!nQk-}Pkp?8NZKBAQ|M&NVTK<@HrOp*yV1p3SdMPu(>=Hfs9I^iy9qr*52V -zs9Sa=_tMQJ{^~4u)J~e_Qc}TOS2y>7Smq7)whdz -z(=utLc3J%SS+@B%65l+vk+Oc2ALb=zlyd0Lk;GqHI7%iTKU#WDZlU3(i(CK8NJP)M -z6j#5#_|SvbdNwt4B_||Lm&?*xVdJRtBJ1}Hjhk{^lk=|5PB#zx`Rru)ORL8<{pGq- -zSQWbXyWb_0uR88>y{gjRa~*@#UKxk)6F(Uy+FjQ#R_iYH6R-|HXUULe_9pcFPM=>Z -zz8u@>r}pF<^M{_IGZVk=n#z3R(u*l>`2w72>kF69ez_}(spn*5S9tjmt-Oqql|KqJ -znZxd8zKi`HB!>0rwbWVMSzkOXlDqfTC9PUDnJM3A|7XqZ0`vL=GP~Aj -zDoTG2%h8AlHNL%Hc)O40x1$}Ki`g7Sj@q6h>^+bC!^612F|aBjGSzu1zp;b{}iVl -z

BP4k~Bc^;*O`LaeoAb_R|^g&|F@kYUY@(SN~g-0#r)88%k8<5*=0P{*VQL(xs=GP*}3jMbLpm+ -z-(Q?u@cet&^~BTfm#$LqydyZV$3gwUWYHUzD^AMHZu;Q+w_wFnLFs^x^%aGNJYmU+ -z5x$AYdXJDa@9$Y&jmQ6A51+KiHFbmjuU4__>Nob4d@oiw -zuz#6j@p}gsles{v{H+49r#YvS#8a@!9I?S>DQNB9NyRLsfyH0R(M(ToK?uszU7qiuGJe;_@J(z8mU8}>Uj2)*l(+OvUEYGG@&kOpg+`!c(*+uB;;M`kac?A9^oQtPgL -zau>UL1sFwMo&4kec$Q_7*+d4Z-yans*uD0PUAfH>DS!Q*@+Ntw^^=R)%O4q7-kh}M -z(|5Hgb~_lwCb4$;&GDEtC2!r9nk{b{4mB{!{hndIUHFRAkc82Y0B5L8}9x6V_X_*r(DSsWN=qP^Ys-* -zEso6R3_n)w`6BYtZ@u#h;qJw?nzJrs)=X_*KEt*pWec~3(xczXgZ`}v0+w` -z^78f-ipyJ0&B={u<1SmI+|WBuYfnhw?B|ahE3VDaxxn=}{WwcKzeDzc)XTkrFZg-V -z@7sA@f9SPWGC@b^qUFCN(fb=NEy&^PmC@gG+vwH&Z!5W#=Qtmz_FH%CcT4x$3C}-> -zcV+H!_$%$iCFn* -ze`l{c;N5#m&Fe?k;_GILuTLi!$!!VV_AfW+d*N&~5B{Qe8&#f9*wM!7TzmC+>b2Ts -zY@fo!4k_G@===Py{vP9v&`ZJvd(TDwPnmwvDLcKlv$f>XK4s3L1u5Rr%??!y7YWX5 -zay=y6?^PjpqD9@><+|;6orepmgDiKcS5158sq$*x_K>@mk67FFM0~gDTWzzaEbNKA -zo7(Kuj=b&zoyFRdY`Z5)U9e6`Tkt_~P4SJ^)_?O@4?gxZoSOgaz=FB!dG?xn{Nb!% -zk7TxBJUTb(!~Zi!*q9yj?=AS~%D?mG*@)K>uc}`>c$fB5vbn12(cE`^@tSOk^&hII -z9XK-Gvgg=alOr|_W$Hn!&q^Dnol2TL*|BQI4Za25r@Nk+6j&TBpLi;*;J#9a?Tz>>8&+C?ue*vl%JRLqonJ*-lTPhTF;+buld4@CI7&h$HFaVJ#A0Q -z+->AA+{U?d;#u22iD#ble3g#;x<}Kc7dbb_h0^iQ;+qv|5Ri{v?edP>? -zx}5oLOM;W)m_Nj9kU3=;FQHp8`Hjw**{lwy*d$pl{5|zRh_A*k?8qNa-q+^eI|1?J^2pG`LUa4{`kNCf~3@`h**)w -zlQvB*TK`~k#ormmGiUGpCRaIs@0qEFzr8mUe%I_jR$KUQLED6g-Ep~6#q*`BAKZ3u -z;mSKutHmL9&rVa7|BhX9s*2)9CJS|OlOOgs)+qbln5xCP(J!3IXOF$PC`Ux!S`kmb -zsdwETKbI&kQ89b)->GnZ!Q1)AYI48YR2O=R3&$*T;&GPyHmlt-?dAXcuaDKG+E%)L -z`!$7m*}K*qz4Q0(xcbNH!{n8^drY$V9FA@JXUcH%<#SE9tYz~{f;FBBZ`Z%@>4JFX -zxwx~_>e7O4ba9!rXI#;`*Ym|!(T7{7Jo!nuP?%-iv9m0j=2*;Y>b$$*frGDt^7%&} -zyHmLHB^p`_s+IQqYzcU?orc0KbqQ*E0g|5nEJgf(0^GkpT<(SYC8{x`p~%j9Q> -zZTWidX#VBbVfF$S*qQDtN!7HS?OY>sZm&#)d(^ITAHNuA|1zujE>(BJVcB7otq%)Y -zlQs!xN%`NLZcrtNoud6hU*qhjPS-x)CeOU5S=1`#LgLmwKggGFZ(IKuWA$iPi)@5pW}JqwPj8_;#xco31~i6ojd14 -zKA(5;hu{CLuat*6G#qrA?y`3`cR&AriOUia_L0W6_G<4c-^^j0$bRklT80g(dC}{) -zA2%AkgtZ<_jlB^~EfQg_{ftFRpC3nx4hGAujSx>)c7X7aznp@3gg@7kq_Dz$oD1 -zdwEZZWfv{u!>rT=wRRNRHd}RH)!=%n{N~Xw6Su#C#ZElu53p89SI#>u9;e64H($1H -zot0b9#%}JJA6Bg1YsqdX;gc`+@XtS^jol4REG2dmCH{O)mAdd^hF5^rsRs*|3WsJI -z8t?w(Yx2U7?b~$MxsL4jYr1P+%S>D$aH`<1)2f#|g_bdAelcFu?9x2-py>V)$<{3b -zhxRz>IaWJ`Pd!@8uO=c>XSP_LD|huG?w8EZGPd2h9(;TH|Cpz>hxMmjUS2jcJ=998 -zh~Ih+bF)|k?~NM2l{#geszJt#?uX0YYRu_j*l;lWuj|#B_oqx{lDeGZJfqujp}#}- -z@4`dPOj-=zy^{nQRJD}@ExydWB+=*jCM)<>%)V`A{wjgxR+F{WroI+hEUvlO;N^=e -zoEucwKM79d-gA$IC2oaj%iHu`7k*oJdFPz@{ZF1d`X@2evURL{w{3!G_m!?SMURfH -zykt?@U~oF_&y4Wv8f^z2>84x#XEc|5<<66EFJigGQdWzH&p$p8`1$^7%7<5zZ@QLV -zd9>_b?!x-s9q|S+nQ?w|D?!@q -z{qTS1f!lXVt{7~VS3I`ruXV*#ZJE1`GO`!e30WVSF+Gu!?Z3Je%Pzxp4V-f<-t1_4 -zJ#V(CZ$@<9v~OM(d0`p}n}6++JHYB-@i;I>*DQePwn|gZe@@-jBV|U}@_Gi-micmK -z=%>8jTzY0tr%K+N9f!ZC&QyAxb0+Z{^PaETafJ_kHb3SF|6#fzsn`C@YQy+SFMZoQPW!_TD6TDC2AZ+lB>;mbVM!r!M9 -z-qkBbPHx^&Df2YLcS7>EU0ixAoo{pg?y<}dcU)<)N2hnehLe`v^Jh7p|DNx-Ql#|CxE=nl -zbMl@m?;lk4PCWR&>(N!Wg6C^1cKxKK*LQzU+xb}hPqn`7 -zn(do~!=kISpXO~`6}x4v?bb{!{<3{r@)Ak{+pTgYKYT0Nc_N=%(uuO>)5&HwEZv(NBT%Bd^*-3!h2&gC-4spo#V{q=&{iinlJ6yCfLEjy^p -z_Mvf?SdYl5kJp7o54*&3W-(_(vlG18 -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 -ze0!I5xB0BY>Q>ux2|@!?@ue -ztBoZ?%n6;y|D5f2P8mD=nc4YWtZSdo_A~#!?VID1oBN@2{?uiPTlejBJ$Lw5qvC}1 -zt+%c-zPNVWG)lts`lN3sf1Rx=tbffrgFU8q>*kO-U-qlki}k##SQhj9z)azZ-X&)1 -zUzOhBo}(^x#$;VUpNZf5<-VWAwASrkvNVs)V_}AFfN*7`Gv@{MCDMF1xDs1`T==+3 -zrJVgm+zq?q?*vXgIMn@dqu^4x@8@Mp*K%L>IAW@#x^7ur?UACQb)P!79n*ibr9Hvq -zpItSt3HSWV-%h;rDV@$2DR#-gRN>(*+rtXW^f^63*VG(KnW?fwi*fToH%+_E6)(9D -zZ6*b@%pAC#hYf4?R%9B6*4jw^TfbiFlXvQ;+ttc>by6WY -z@rJob9yGtQP2 -zXW5B4KbKZ6xYG3BW92uY%8HGf9o%+2ElH})dAw@DZbc@}6JZieH@O_RWjVvI2Hd(@ -z8h$=VPU$7<0^=3I^Y&zw$nMG6a&}+v#D%|OHt5!iSl@ZNc+=vprjJc?RAxkSPW$AR -zcD&%E{sFU8?i;Uf8v`L|5@IuPq*_?ZNB`P^Gpd3g{I5+m*smr$e*SWlKwr! -z_VL9^MMk&!m+yF^^YdnY*&@gN;*HQ9--wTz%ie!a3)yc~UN>2J{+0)PozK;7a(V7( -zFVk!JwfU&JQ`v_id%Y@7jfasuk0Pp0FLQm|9(Jzb_JNaoHm>!Iy|d>e+ZlyB_r>;{ -zj?`h7i|5;u)M73h{YP2(0H;p$=UIoB{;EEe_~yq-?WEkfFW<#Qxi3C{`^5t;>8KZn -zG?VXoxio%dQP6s-+-K-565OZfHd7h=4=3g?(dhfk1;7b>i!`l89 -z+XB5^FSmW>3%lBNsj%soPtYy>;>_e_vbrq>0ngc*?`$&VV%WQL&*LZIIiAt?U;Dml -zicVxmF|;s$5Vrl-#xv86Z2oU>OA6e;23d$8@&V -zMeCegZlZ6q`0DNYW3}A|tG937do|jko8w#FX-`vz{edg0G)of;0$mQMm^}Pv8h*;G -zWK&C_pq;yFcpPp-KY$wen_b9q_mN=|Cl=(>Z>XX7_ -z?{+ZkFc-02f8{qt%af#krYI|Q(ym0N_ -z^WnVLi}MpRr5sjYZDVjTX#EhXQDJ>P@bf&b?{i;g9^TQp!_G_4cUieDqg{rPXM*oK -zkBteFjQcmSRIgu<<|rpsu<|qWO(vf@2BsE1!G>Cg%}<_B74KW56Qg11xPa-0Y40q# -zKSK6B6ZE2%&uS4~=lYz7@wSCaj(qBeJV4qBr$e)>*a{m(vwDByPK?acf!juV>-kmR$Pca3&(7 -zYIgINZ%wjY8wIDn^_&$ecP+~#?`5kH$I>E(y`AT`|5rTNo2G7ih3T&2V~wM_;Y-eQ -zXR0kR`RwR1Ut4jDiQzYq?nf_dl_Z}tt=JgaE0?7B_v*0&^L}*wvpl5f<-%aI)#akP -zL;-{N+&2<73#Fa4OYz}-23 -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 -z?G|qn*O*yZ1;-AmtlJ>ZNyIZgNg*Y4wwwO4!j -z=e?-q(Xrdp;`Fll!cvPDJHA=J{LHqUDJErF%5|@WQ=?flPHwPr5?lK9tj<-Ewbr -z?8|JsZRZq9`Z~TQcd%&3v(K$)H(TF7)tZ^#WxN~@WnB&N>0R+$Ch*mA2W8dvdBTb(c>H)-Z$J3>=iy_QAe-|o -zvX3m;K67$c*aciSaoW1XT3o>_Df9Q0o`2hvypuz^*M8>O_{{sZ>8j6}q8h#nm734B -zN1ir3|Fhx4b*8WbCZ3{>mifvq8JerbiuOg?L}yM8arndb^#8i)_ -z2&0D^%<4-TZNp#bWlekfen;9H?b-XQPQTu|^B{vm{FbJSa@hy(92b8Ss}M~HmuQID -zqR(x5z*YOKTFfj%@9k|T4%A+}EqlvXW7Dx1kL`v0{Hk+io7t>6lHlG|wPK6AO3P=F -z35uGp9(IVNF}{|_`#R^si>9R>6;^u%)QaDJ(=?i<<^OnFK9;Y} -zYx_2%T`Xc-lWv)yYlu7_4Bv#YJIo0urzlo%~Ic!w^`}r -zvF2_Quf)T1W5e8q^%%2!C+}PMS1vQ;qRNIz-a2x&x^JcbN1w9gy=URd`(ep3zRaxr -z5a}JOZr<9nb2abTE5%1mK9){m<#%>zES%y{pTu?QVyF1p3GRO%zx}vr_Jo=Wyx7l@=Kic&($>#EiXTCKOO(}`bwF!J&EeAj#nFgg>ID%-j-f9zVd-9!%uNQT^HY8>?xhz}y -zbkz^$nz-*z&VBv9)plmb~0i`K`U(%GoYa5aN1 -z+;gdZtPtnpSxeq01}iUH8C_v4U2gShvi+__DT*hy1uJR_ZOsic?RXWxc8SBHNe=?} -z&I@?uC9pB9km*~h&%Dg1xNu>6@JAla*RDSwf4#}yShxML@xL#>O+(rqU0pE2XWF%7 -zm5-Z0G!iR4DGED_89w5!2>->nHwXJWw{FYT>;n -zv+7R9MBa1KdSh^6&*dj`wwT*~+x1#x#@s~r-+tY8#>Xai^agm%SY^BC=-sJ$TNfxM -zoVwq~@AtS{)=^yY<;4{nL_aK*b?exW@!{R){G8?I_Dfv+)b&#D(_7W0mn}=m-zCmW -z4k~w+liB*RWaf>18+M-mcUtRIp}E%~@7j48KV+upe0Y18>E5<^h7RTeMO{^smR@4; -z+bd?{rg@0xy8ZLUdeh97Ws+4~)03^Q_-bo~HU;Q?TH>f1;=I;x+r%D~goLX*l_n)R -zmY=ts#C7N9_SN=lLYnrkH{H~@;bW!Clsi#=jpyHr@u}=w67cr4^O=kfC*%~&@&nBl -zEEVo`=v#3AL+`Sc$T(h@SzWuP;ec$r&$~nW?}c7s -zE&oy+>#6K;HpN-x;$SQIfGr?=j{rD>}Zsn{K%4x>pMe=U2H1 -zZ;prvn;j+wSJ+eH86K1wl^H1{#KgqJ_!s9UCg;b11j>w3(@IhbT0(YQUVl`$p}~QH -ziJ9r3g8+x40*3;Jf`ACC0E+;NfCv*8OEbePhUTsZ9KJEj4VU+Yb=3r(^2>^|edDQd -zOZLwi^^jQ`cX%ntN)?~T@LTvsWY*Io6}rpa?ImRNP3H@D7qCYzca66F(bRU)QK5+4 -zmZQgdWrT`=`%?FpH#)LUw>lH(l8`9! -z!1_|m!e_IXo!yx|r7|>w+}4Q8YxHbi>8*T()3E=ZPqA~+AEfS>9GrYur9*k%jB(1)ZKHH&gQ4^aC`TT3gvK`n=?i -zd}n0lq-t9Gk}q(<{=6TXm#VQcy -zEw#?HQ?fS7y$kN@aykoePX4w~qw7h0o5{_z88z{%RXCP^cUe^YA%Bv{Dc{?#`LjQ{ -z3FU05oVEJ4jHQat0K50RNY@;<@7Gg6uYJD9f3$j<#FXfkE*ncQoQOncn7Fo?%rkn7wZ5-9aI?CfU_ -z&8_q7=e%WYw4Km(Q2wLGi?a&4QM+7rD!)5%=nOZH#_~5DbFQ6LnGIF0UMr-|drZ0P^~htBj^SH7i7#)xCIzM{a@B_~UF^>1QoSx)@W_;j>Lr>t -zGbXAEPx^NJ9FNqrO;6vf-lucANpJGfX^CfzgRG}%M)8>`2Tv+mvPF5VDPyXNobNr6 -zSx-)g8%>IsyDWjl-y-Go`AZYMas<|AN_Oq|r&PfsxL09S|IauTO>57C>~<`Tku7Ih -zl8yBat(CXV6j0MSI?=MfOUb99NKDbkPdu7?4o5_bOy0d`w$cXSN7PM^ysj4vcjZ$` -zFE8A5WOCOH_X`HrrGFQidOkmVq~nARzu~qymVatJ6pDO2q@{N{FNsYPn;x~V=a$Q_ -z6H37^HMD$g&7@fG?#)Hq5{yNAR~qmrd{TY# -zPjUark4dKzg*Voxa>UM^aaW!crG+y3r& -zaJzF!6k{gcV%kKqPtDlG -zcuK`E<Z2mPra-6`OL?tvdZT#%;!#3ewvtiPF&u8q{KRJ5zvVXoF;J`EaEu$ij`t3vS`JGw= -z&T5~3a+G1#{TB(lx=!Wz?RhjYc=L^U6-(>B&M=yI>;K&qg2}tT^}o4gKUFfOBJVfP -z9HZ|iLP8}wP48;0)4lZc%mG&QoAL$I#i}fho{hOFCiC)q&cV1pbMMRjwmFgVbbHg8 -zl?mIzP4^TvxlK3kR{X{8D0BGi?Z^+dH;>$1Z_VKncl?Q%$<^j-GKQ7yIVN7WCyMy^ -zF{_C$-?DVtat|esDE05Vrq`)oc=2-9v0Ro_&GR2H1=`i{aO`?<^Xzv1V?QNT-Nc{I -z{Qj2vP$s*ClV8>3;{cW3BE84#|%s=#`$A6-e -zN}uhiC>k -zyZE%pB3|}qj8a0iQ$FlDdcc3VMB>Fuf%*UEUDp3wYop+?L{QA2?&YPQ7j5TRE?}Ok -zU-$LEm*ttuE(h&vw)SxIZR^}DZgo$5m-U}lQo8*6XDxqueD>k@-VrNm}?jm3Q@>z;>a-AqoXS9`=z^*C_VHumZXuLO?j8A$J+ -zn{Yj&ifjIs!~#au$=lR;gPeCy7WhM#?PRd-1m)r85PuP>QsKjke4PtKvhYb?ihed@@6ddf`r -z%A+%^vrK#|rc3Icuy7OKu+2PX%abXO7qdK=;%b=p&b?hIYgg$PZ=<_Q4lBHTywmZ^ -zv4|rN8znQlyIb$^a~Vr^<|s8-XXzhp=PrB2k)4nuE1h=o3R@5NhKO5jPXE+auQt2v -zD_dWB&Gt-W`1-<4t8*4ahW|glAycXUt|QCsH$wB%_Z?cXt5rd3PgCt*4>!5BvgKBv -z<|=0|e)hz5(g~>ojnoOI50vtR7}h;}aG)Ug+-mOV&;MD^zbrFf^3qzD&*J;cqZhkG -z_a$)NIurTCV^xM);gORZeB0yr|J`Bnet%$Y)~$yOy{5$!pU1#BJxj;{uEC8q5(FT)h1ID&AL)e~$0G(e%B^ -zGF!;_Penfep)JB%$9flBERUa2ZF+qspL5ywnNbNZIwPtXtKP{z*pm~Syf@>E2FGQ{gJfIPJ=+1Y`butzibJLdJagS(tx;pmF8XvuP -z!ikq=w2B5b?KrPpFo%2f#N`c(44-TlXYmlaHgAeu#>39*S>l9J%IT`%KjHqLar*W)Uw><^_d~V -z^wGxotq&s8uSGTF2ETFEm|So@eOs&e#`fh6Mov~iVZCoIFHktR!0+M`Ce<7IyEn*6 -ziT5a2DFj7r&dRK*?c#cRT<>i*e}u!@t*@o|W-sYeWYkxT-OqN&;-Og6){|m^`@hz; -zXsWy^yXkS~mxyQ$U+F}B?G1~ZU#nU_d-B3*uliT{oyQJVzINr85f_R1B%Twu@IcjT -zaho;OVq2F-|78l2-0{WhbNbgel6!V6ak}>Q_kvaP#Gb3HGhXgmyej_AdW+WITaGh0 -zxrs>>oM%>$F5H>c5O?dCQS7(JB@vb|BuS5j@A_>|2Y^L -zj2Q$392goOO`7E*#pmwG_v{Z#0s~W16FUnt7ZWR!G@}d$4}%E97e)aF1p$T=3>+Ga -z4GbTQG^X&Zf0|~_@PcE0;{5#ktY!7~XJ3?D$hh#>SA_2nr^4PR=5|r)9+u(COXeJs -z3|hBi^8qP8*J;&-pKaCc$(XVcBhwe -z>Q5{#?$!Od;qTPtddW-^)OY#4dr-N@hwr90tKsD4V;h~C=h+`~J2LN3LdG#h(>>0mF-}1^M*CpA%tMAM?);R5Pz`>s4?|Q2a-qzE6{Gs`N -zhEViUC6g2DlHcUq{wCIG;N(5cGD3dWyXsd48=iCD-Yd7TkN3}E(^(RhT6%7NGcFm0 -z*0i74d5@*>qmv$&lIWUC`##z2TFvnDs!YR;XQu@Nt~)4q#4w*OpI95BpT%U;z`tc) -zd5OoG8UK0$?7Y^6PBdNpc&?VESXh_LN!b>rC(~?R$y@u#hTm{HSMx|F+>?395d*QE -z7f!6RTK8OGMc5VBdWO}VKcl`sJbw9~@V|$5jt2%jeHrfl_=W5hl|x}VbIv5qOYiA^ -zzTj2Q!om}t=e4H(W)a)Ylea}?+VY914ErRvFPbiXLql&q_nU*q4Bj1*v76ZRn8l~i -zq>tGs?S6~ne^sHy`Z0s@14ep^J~~omRC(rRARonLwEL)_Dab@ -z4<5n(zh)2jE_6}od-wcOjmwMuTYjvOf21WVP{1;Vmi;_HieC%$wP56rv$hcjH&WKwqbx~bgD_*Dg>J!X`eURImV -zv)ygQEE`^~GtWOsUW^TxaPa$IZ>2}kk~0tA72Lz#d~5-8#NX8$_P#0z4&-iq@>+k| -zk(E`mcj1Rk}_a$##U9@o<|GvbE^t3F?Xm?W{Pu8sY>lh1qYqlM6Ui))r*1e)D -zhD-OvX5M@pDD;WrVcQf*x8lNx$^Bw!RSfE!57rdVn^^UKUCdHWy(tF+zDor%9=dO{ -zx3ICmW_{w3d5lZmu-AM3-tu=jlhLX6^ldEDAIf}HS1vrJJBeLmrn=db^vTu};@!j! -zu{^O_9K^i-O!V{quM<-AnqoQ^TUGqAn!UN^>O=hs^`Etml})SCt%6sxoca7wZ1us= -z_5UN(dpL@=SMLzgYt3h8zWdC$*0RWN=ZDwx+$vA(xvzLwbi%v;9e=BQdnYaWsT=Up -ze}Ch2#sv%)dC#-wO}oziuFXQ_JDKg&4l6jjD!K;=CvK5;d&I7L?o#dM!wG-YWLX-XuaC);e)Xb^@B6bz -z0j*N!Gj*{Z&a0!R$n~ZxCPXcdd&~DHM*YRbn#YFU*$rdETjF%roL$yB^XmG|+80k5 -z=BVYd-s$-8^TF+RtM;BuY<8=?$9#1;>-UXe?CsiaEerY0k4-4xxFpvi(f%QqUxH)r -zl<#6cvTtoXwd*v)>k1iB&RerrhB8n7?J_U6@KgPd{eDW-ta;h5xgS5@Q}sqSVZVpF -zLm?>=o(Iq3#d -zWxMW$!~g9((wSV(vAE2dJ98$(vf`L+YgnzOoi4igVomu}y@=LC(ZoY$carq)^@(1N -zxS###4%bm1U(L0VTB~Mnk37V(wM${!%nNHTL_cI>T>9^UL(+sRd%pf&#~A(Pn$ZvU -zSqE?H{~w -z`n9_a+Kob?hTAWcOgPu#MJxvBH~el{Ody^~uA8*B7D>pB6`Zzs5Iq{x{+%toC#i*mFk~=bl+cWO_PMo*?R)&Yne;Jwo -zw_bcNemwt+^Y6va*SXB)Nt(D#|L3I*^IpEuQDRuv(QviN@3PvbjY=DOCdO>s)^+%E -zg;bA%*~dMd;&Thi4r_2N@Jl|c^W;RmYgHAwB%Ft-~9i+`v1Jwp`4rClkM%d{o!|i)#-UQpW}k- -zm&A1(zj>~%{ju()TdvDI5aDPME83hC5duubVFeyDaAkOlu+2os<9OLqj9pQbff|G7Bl)ki7=Uw=B -z@&zphX79j{eFm-NKZEjz@j$u&a=Kf^MChkH9Rn%xv7M?$-cgk(>>pP -z0|$pqzxj>ZeH@Kv=9;%$d&I9Ov(GVILEkw<@{69}k>fWOC)w^W(mCxJV#V>YP1`pw -z`|9SYNq&>B9lv|_#4-D7yK>{pt-sg2yB@qq{*(8~FN*a^&1x-;ZOvB2Djoc~j?D>? -zytn7Bz9W6ExoG}^gP&_(q}*Ay|DQup*=(IeMy|KdwmuHwW0;wAi)${&oyq2mZHMyz -z|JOZTD^j5U^#cd5-Jkf-?FHdLs<%E!+#OSS4 -z*{q&MrfGb1oypBtwv1VKU&V#5AN6l;+VDkyQ|eQE`t#x~d~buCCwNcXxJCD_m4sZoS~^5J+eA(Z -z1*vcZsYp&xTDkahV9Q6}sMCQhhXP%WuGTbl@pU{eqa@{;z%_d3xcS -z&jtk?FZo@qE^YeK`z5{i%i*3ci+x`2_4x0;;j=x1`livy<)GCpU$(tPmRq^=yq|pVNZ+Np=;O^p_NJFhPVh>uyz(JTY5BQr -z`K4RDj-&*wf4SiNC6#?0PFr7nUK{Q-Bhym$ars=MhmJW@1#AT0E^^6p*5=jN^ -zuymfwhdZ7u>->~1SavcT^<-IP-pO!Vg(+e(hu@ -z5-el!Z~ym}TV1u>%zP}jckWV||NifF_lJ4a?=#nYzc=?#n9JSf$Td?gZ=5T&GHqsy -zq{_`{Ub-z=h$ -zx|VHLQ%%Z^Td_h@$`6@wW_*cclYYecia$c3>@2H&$w9M@2Iu?BSIG3ZzVOuZTc_%B -zcGfe4AKB-v4v8@IGqD0aOOyJ+E5M};pcbL4K_zumT~V$WCB*8Jz`LfzHACm{m4LVdm#kXeB+r;9x=6ES0pk5Q_KG)0cK`F7YPith+`W12g%zjyPae;fO-)kNpZ2pPqkV#&oiO8y71p5&Zc_w~ -zA3E{moc{^i9OJ7|VtwsG$ysavSsioGaoP`? -z*}X;=qJ&@HyfgFKmPWgblvUSmb=k@UUyf?tYIU5VeDd?NJh3*k4N8XZ49uB?A#E4pf~+WbG)kFR9aYBBen -z|C{5`FNLxaPub^ks#=?0|2!xk*7sPhwl21`Q*p`$M%FVoB!p%JI_CX!Fesb3sqH-H -zrRz)gvU9nHY+D-r-K^uNdYWj!9G$(t^cV15^e$AmbIj%*?~Y#cyH&e$|0KS7x^1KB -zcbD78(zmGIK33e=yJg$P8zw8#xALlWObSZB9R1zn_6BA3hc6E`_wpIEo)0zHDDtl;_}04h+vn$sADit|DH3-o@W+Y=uP2zKmaB-l=5DzE -zNPzk9rn=kj7@|@+F3gpFen;h;E0dr8O@EcG`MYElV;tQb6H^13AMJEvurPUczUe__ -z(}TNaVo4fb+2_4wzt^?$SM39PDQ~k6eDn7w{`vWQZs~_7cC6lc+j^E+rfS~L*30#0THc&mUceiu;ulo$X4m|SUk^^azcFG;{bbqI -zeO@QrqK`DQyiWh4_q)C9{cjPqq<6mElc$-kS|42D*DD-l5PR*-|3{ZsJyH%yCqtx<5|Az85n%1t5y#TGAsIaZfZHt3}v1gt{pv5feEv1 -z)m=Y*J?tjmyx4jn)3p0O9m -z*(&mg-jUj|(&^|&mUAj08tMCQI3B%sCc$LIh6A#OPx+4fKd8HKe)CD2bsQl#j?DZd -zaN&=GjF#X-QR6S$UogFnj##f;_1Wbb*To9W^5Yw`e&_x!o|iOVXz|JotC(Chmhjfz -zeznDNW{jYY!18ZDCkwXh^Z8=`>Q>v!gKE6L>gK(5(|>nyf311yl++U5q-rVCkh1}w -zMD>bxxif|{@4v{B8MNkUpursp#Y-BCmhl;GpL_4~H-GoU{W;ksB1eAAx}n{FHt<0g -zr+wd|x6C2Eq2G50&iLy&;lmlhxfumN%{n#(8mvo6>wRRMdE;D9Gvm7ruf85h6Df_) -zo3*VeJp8vrYs*#vy^j3<$v=Foc7B}wqBc|C_m5hdvD5ykGoGBe=D*{Of^S-!>DIg@ -zC(c~>qO+^(D4-XiaFldF$L~{zN5vmA@^0yQWVRja6L3**U>GlW~#F -z#-q;D*9!kI-2G=tQ=6Elv#++3%n9Pr<2?vx`*LMzx8@K&7ru5EGYtBP39({OLL+dV3FIa3a~ -z&u$cQ{&9l+$mK@$kCWX0ukF`pYo9P7i*L@8PSyQ0)Ng)mR%onvSoq*@^MR)tOXmJ6 -z;5^86u<1n9&$lNl=5e{!an^LQ-DTkTa&6sgtsT36uJreQs#6y_>-w1h$5U(OFl!32 -zKfKxc@B0P@7sdq-1s9yLc3<%+KHzER^VmNje4dVMjmb{y0xeaJWXK&fO@8h2`^_wy -zre@VWE>8qMc=GIL;fsuVw(~;JA7_j7pbvbOJVu4*|5`D9e!n|MmeK0J%aKpNe_Y{s -znc(*S!MQN6!*-hKXXEFttWUXbe`RLUmj`F2rpPI|-8(ja^Qy{e~UevjG -z)2_xo?GuC7j$TK9Glrz(v(l9vyHhkDEB>>;%*pmq;6w8_8N&s|D{@^HEML4ha{dNJ -zw%(Q7E^V$UVE-Q|bzj#f_|mz537=}Wb?0@YPe~13Yx-b6ucF!EAfFs=$#-Fqi-WDX -z`+}?(cpItbDXC}IA++37hmuX=przbcu|CFTA+dKUK`zd$XqW%br|4+5>9 -z#=bn*rQ68#C~2<#x9x3HI5*$w+BRuPhyE9n$JdnhW%&5dtX?=J?@~xnrtQPG31+i< -zwrrbYwWYS`(58rvq=2(u9~Rdy<&MbN@SsNh(cT)qiyeUv?PRhi>`Yl|pnhk8)Hg%R -ztK8k;hXf{yJc`rg`uKRxved1&az9Ef`BE|EU8nmW39lv@=jXZ~Z?ssnz4?FV)})G( -z2Vc_Ccm;pWK5Vk!_H)Mn&Q2fF6GHjqg)+VyIozMH<$53=Pj|uppBbNzCZ^u~EyA{D -zrqQAsp<54pIHM7^URUg2QS=6Fp{w7O`FAY-5V<|2CQ$j0feQEUE&TtMbP9xJluX>s -zv+texCEfkS_IhatPd6xkwNd?%VeFQ0`Q#IM$%?2ApNt#@=Gdn(^>cK`{TKVN`^Ld3 -zr&~4^`mehikg+9v>W0I=bpHPfXI~^zB7A5oL;B;xny$;t7OWIm`1I@x`QLt@E*`d& -zZC}w@R+Xl)ig|0}`HHRIlFBM){<)VaP%N4LeuvJao7ENmZptgGayD+cr+I9`>Gfaq -z3TFJ0ytm4-a;-FfNnG)TKYunqJEzeZS1ta2``gw>P8$!*xxec_Kezu0ssGJ|?(#Eg -za^=haA7Ds&|M|+r6JftL{XXt@Vq5x}{|gWPz5e(5i|E|*OxI#nyccpVef7_~uB9h; -z>#Ny6h1D1A_FyTn_spuN`uCZlaG=6z -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 -zcU|^;WqGb9aQwyj*m3g0;^mIq -zXI*?Fgq2k-7t}F1FdSXtts8gn=Iq{+oTS!cZs_r!#`+&AQ5GM~BM2cXF0w9C+0KNG|2n;;G>} -zbx!vL2BqqQVqrx= -z-&P%;;eSS2qD#$S%D3+~|DLolvU>TN`{;S`tgpwl?r|Sweq|@SERDfk`QtXdkb})@ -z=ZEgR5zJdDuv+p&^19tIYmLKRoU6`1Gdp?x4xQ$*`R@O+4D${(GsVry4=6SadDJm! -zwq}LjvqSG=Rx{1z-njz;l{WTLvEUD!^l5#b_@(ocWvfz?d~bLCTFQYURGoPh0~%hD{0?;bmDXVWrKIA(vbVy}17 -zQr+3b9G42$i=3F~v?WBRK%aB}Nye4p>RT-Kb}7HFh@F$rBoc7KVb2eykglfn*bN#?@4a| -z`u^U8r%xS)nMF+}tc>}6&R6z`*PP1fi4%PoZ%6wYGg++N|4`~phl$h$^R@HUj!qOh -zc3tvnO@Y$lS<_`+YbR`+lY4veHHk}BA17sQ+S=dp?~9&%&Gv+&Pnk^~AL3}4GU>un -z4(DZw@3t>{+?yuxPu`AqdF9OAf(n9Wu@)LLZI703H`Vr8Z!VNN;evSCm2IU?c3aKg -zK6$oJ@2Pb8bne_8w^^K+`k#n<&syU(i))HW=46xFNhXmiJZ6cg_?}Sq?N|0~z34Gn -zY<=#uww|vY*|%FCpWFDfWYyQhIR)n@DFxf#XstF1=3EqU<8dNyM}ozTx_YA^?b-52 -zfA_ZCoTK)K1wZruX!_dmu8>@Tgs&1@9nPy{@m?~o4%ay>?9X4 -zNzYxTr2zr8YZlntdp3i4Nz&W}<_GF}Vv}yodbM;e%LMa^jWW{?bO`h}-SnIOqrU$6 -z`b;&u=hqgwa1^gFVQDhq@fY -zWqS96^I`k6!$lV2zitL-RV4qnIk*2Jd+)Wc9WDkBd>&m}zjw_M(`d^%SELi`uKoH` -zVt!ysR!d~W(|Jc)kA1Dy3HYWSs#)^*g6x0WNi$ALU$XbOu(2@V!-?Y`=3RZVGUMvo -z)_M+=Zx6FoIm)KkU(^u#>{!3Z!!JpQHK6&*G~=T&p&D?3}mUuSIhl2Mz!Fnf>Y-0tazKf8>U#toc8fl6suWxrwQbuf&tG%6CW<}Y -z@i+NbhD58vy6gHbt7IFsIGVWKmVYe#`d#+h%YS@VcUKn7&T3@gJN;qn>NfLxH@6Dv -zA22BS;(4`J;sc}qT>~6;EinC8}!c&#;b?-k%wb>s&JxBIy -zVTt!bFV^FhQ+-p)Cv|i<3o3`t@wIC%>1AWHxN@xTZi8{sjUy5_HVRjKtvZF# -z=D~RZr#R+clAH0{s#t~Br}|BP!qw9FjzZOnbaR|0?M`34?kxyv3_jO_A+~o?a@8YvWvN2 -zequGS5oKWfaimToda=~0oUCv&_LEn5TD@g*Y&WtVyTX3rP2=~Izpsm0PPn4@hAk|_ -zGA6h7;A{UmF1vmD>y+k6b(QNdre&zE-@o_d<_GaR75;taaC++0I#)H=*{3M+|05?} -z5%nE+p6LE(=5G>=t)A=EF(qAUd6gN1mixYb%SWMSeab~e{ys?cSIK#P|Be1FrK+Mf -ztrbc;g4ZyoiN5}|+Q{WaS1AW?RMQoCrK@t!XCIiO>*3p)o5>IyG3VX9jO}F~9&x#* -z8YIe^J?Z{7jjir~xcZ*xZT!)z=kcwWbb6O&->T0Xudf#Fikvq!KtVs_e{AgMg$(kF -z>;00~=r*l*$8f0I=6Pzy!ps3`!Na@>^_dhkxVUP)^)}FF%`=Kh^Yn9qL=CAy7w=?bSpVGAaziQ2- -zGiwtbRnD9Edxq1MugMaPecRS5EXr+VKc2CXD@(g%=C-CBubLFagN8*jr7e%-h)G{N -z5URGN=F-vymHyfVFVZvi9m)SNL*s3QL7iiF${asE8}54BMuo{w=Ol_Ra^A1VAQ-m) -z@^tgZIR`@j2$`}(-8^uPx%9<`U0g+)i@jL$dOM^pb24g*KFHoTW0j}R9+A}6ck>a+6BoDa+sUe+98onfmcaN%E^*|QrQ -z8(ueCs%`z|w^Cy!o9*Jy7rNhOojxzT^k@4)(dj?iKTa^yy(52K|Lnv0k#pnE?OD)V -zuT{pFE&;B`lvsj -zdzJ1{dC@1qbAJfCUz+=%`sayf!eJAQBNFTue$JTI{d?ZD_D^ExiYu<{k(YY%O#Xze -zan!yKH?P~K-dlN)(@0A2Im@fQPa7;8R-fUVBqul}X7XgAg>D%M$4_&v`n+&5{Uf=E6n`>8y=a9L+yoKWdqs -zYN+>cR&|%K!S=-S3ZHuS6!NYvJm3A~p{!rP%{ki>=kEHSwdd;%2LXv&(ZR)BQ!8zo -z_Ut

r9U4wWApx>FLw$3MSo|p2Zf$#u(m^w{@;vK(vz2k!O!~Wa%r09(u~m_-?Va -za8AmD{Zpln)t_s*F^5w^CHm4c^9A=7x`o<2FT5n->#NFn_vhy+Jz2Ndo|r}U2)}PM -zY%|P{UgV+Lc9180pCp#{`&ijy=N;c?tEEzCv+ux+fdY1=NYoRoVBXrDi{yR}(|f -z!vHaT+omT^Pn4A;sc{@#TE3=o>5?SI&%Dj6ecUaq7b~5Wd;}8;3n$Z+`T -zV2_aW*~_qrgZ0}yqiC?Zkox>8v2&;gH}k@nnF?1lGriQf$8%!H2AC -z2yk#TH7-z803EEJ;I1IR!@|_!prFCQ!PKGP(#Q943;SuKi84DLu{&IL@mj|XYyDO~`dYR{ -zHRCMxsjrSY -zR?S-?zFTQ+Kz@u9xAR2@(+tClOEjOGHMlt4GjxzJwcK;S>Tu>^(J5US-@Kg;XKntk -zY{EOu_Rqg-S*pq=vEFM8e(VkiIZ%I7S0iY}-j*^8!|jXWWF-O?3obwLTB+mTIsbao -zk58{}|M@9Q{nU+p-;EE%IzHCjyynZv+kYnAJbGoT-EzrUesa=RoogR3Ob8EH_Ef6> -zdb4-&#&!9gQ}X|@z3QA5d*FBCFVRYkGkcEeHHy#p{%jlDzTgLvy%`7jZwFRPmYwJ= -zZQfPWT%`K%aI#3Z?c#A$QEtnnU+Yh)WM6i25vshsKgVtj>;2Cg -zmq~v-b1zlmQ4IU}g(q`bq76cB6i40?wVfDrq^A5xUj3=XS#LuQT>C1^swJi4R+3JJ9c)J-xlNgpx)p%Q6#P8CC`O~`NC;u -z_H#;=2OR2AbO_EUVcL6OvCr~z2YC*LyGa^yuQZr3amE61>6d;7c|7E{-DqGt*wcBI -zQ7zl?%H#gk#pVi$ -zqEAZa&iIimS|ER4`S&re#}}1#Hfs02e(>P-)5EEmTO@dNb$FBWm9m}InoRiR>hZ~o -z`Ac!7(W<2vSIy|$(!Se7VN$2h_IsBD{yKgWmYWi+GVxyhn+aP*q#vs$U3eT3yGMFK -z`^lt9(|i(Q?yaBH$Qisf{l%$+roP6fZNBWNb~&Wd^Ifr3f_c*ty(d#@MefI(eA^`P -z?^xR89TS=h6t`NgyUeZ`@qlTOWJY#roy@a8D}-48HkK`EUE;WaYabWqw_h0@{H(>V -z8)J4DJ(%Bmcz23Z{?Xeqj!$+>txs09xbcxOMf1S%%TX~mLJ|_b(3V1cU^v!u$=70yX;a9 -z49%BfWi$#lzYqRx$`>+Z{pg@0&(Ue7A&{zOzgViH -zcuKm{nHc5Q!EF4m3)7dYDAYYHU;gj<+|}0?d`jN%XKkI3k00ZSowCQ?>Fh|>P<_n9 -zJ%y=dv3D@T+Kp%T1nqkN`2H@&;zU&-of( -z&4+FO1UUJ>%Rbr19Q~zL%j0kS<0UVQUM$giZ<^zimbPo{9I4!ODd%#p9;%+TKS_P^ -zAMUF^B%s@}_>oWk=HN|-?a%iL9$k8Bg5Klcvk-;LmVyO4dKhp1g( -z@S~*5n;!+pN3T4a^l(<#>6WgUJXQi8k3V~JUJ=aeQgQgZe$kQ*ygOQdr)+C@&OJBH -zfdBlf3DbhVC#X)zd0Vfvp{}qeqKI|V*Zo`~oJ)IUHaG=2?7Q;GO6_=nNQZt#2$!tJ -zl|=i0PVonnT<%D0{;+7(?3m(>FIF3Pb}_7wXJLKvnK9+u)EUeRYPmK)XFqN3^O8b9J?5O(=gLl+vxMclIcmMdIFbX -zcg}S -zhhyUb$Jf&f|1A$YHZjyYXt%}INjb4I?XI#o$g>ReTI@&3xi -z$(^EcfZb?M&wn-T_&yIS-PjiO_*2Su9b#`<*Z*Mox7F={E$2C7smxb9%s*b^n|~v1 -z+3%b+O^;42dBc9{R!+`diPO)-k~3RY*1kT_`F5^^_rV!`{Q0s;MFPhTnVEd^Wb@bj -zC*~cJzftCv?z9=vI@QrS%T~TPFLpZY+}||0SkC#fmizox?rxeQ!56eU=iu)0{oWlW -zItG;wcXwX?@}EB=$Nafd(ck_bJ2qVW8@u^v>&fMpjVw1bIA=txeQ4(PL-hOB8bLP( -z4ofMon}^!&YTqss+h*%^O6tUiNXN257oMckIzLp6s$Na|kaxcM$RX`15fY~#y32m- -zn{d_NirYoo5^VO4Uf7ov7eUQieN -z>-;T+f3vDiehHC}@;#w)q1ZBRVXM<;#wFgyA7m4!y`3n3W|DmQvw7vQ?{1#pn&=jG -zr~dNU^M1$vJBOt_6y3M!x7d1v7>;=t;uAgU9$1DZOpWO4d1NHu+WOa@>!hyFgQ>?) -z_$-{I$CAqBY8skVH|3+&x*5S9E}NDAxmvW&)O@z&^X?lw#$s9<IW4MLo=gi}v2yOe+u5!1H-1cH6z=NZ$F$+JeHLfw;*S|? -znEkYkH=AWGWaQ)u6i$8p?rGTv#t$vL>dj_$idrGItK805-T&jWwBXPwb>B@ZEIsGg -zdZ!kq*OwkWFMBFeC~odvt@*7xb-P%zqnOq=nXQkXIdP?qz}anDZC8F&wIpQUt&#NF -zyDs|ptFHaV(=5xq-8b3KN^dk^%WGt7n$P~&Eo_dU*@ATAqBAoDoT^f`2~N$bsn~IJ -z?q>dmAJxZtzjED>$X;&Vb&V^?xJSNHq-lRY+loV*+f}z@%GQ~| -z-anSK^cZ}6v1{YX7@LRArH9y$a?Vc|w(C}_QJML{vz>Fk+w>2tIuE@=4zcS^`LHup -z$gWwXCS~FWPlbnE{SuIjHF8kGNc&t&Pa8JK7_nzkNFVw=0U -z-;e$G;S#-6^)6=~%jBt>uX}Mvn3(U-*7cEn-WW1j;9v6V$2NagIJ`Q>cDyo6^@237 -z^yeMt9dFy$JreNWa?E!9Lq?kg&o8dDoi4CmbJ7)dO@}G-W7ay_%uKtowdHm1lB1tk -zCRc7_uig39@rh47r|k-!$tleKkWVL@*_%IlJmOgOVMBgl=e^W9)(tLwG))E2wzt9ACo -zjD^oQGvfDvCKY!^30iu-}*`yWr%puW!yg-TsZS=B8!fug9AC -zGCPl5Uv1eERCQ8oiERJBcebqpYaL$;|Nj0rhhw&j^X;x@ajO!R-lz|Mm7y4%^WxB3 -zrHvc6l=`pN()p;V!};KfH}9HwZMob3Sh_41T+R?zv>o0c>j5({klw9Ok=y7hSR~|B>|a9*0LB>wk&-;)-B4*H~KC -z$-T+5pxEu|t)_V6eD%(AN(&Meu)3a~V#Vxr>6M5@l)>Se!&d4go-QYEX1h&Y;IxxV -z&R%2w+BEjLnp;nc9I-uk_wCB&Wlg4A+}b`Fh4coP9^5|f=I@6xMZX`Mo%1I7SD(qm -z23FRocf@*ZEtjjrSU6>Uk#VW`Y&}n9hW$mBUi&81w~rWWxn4y!b(mkB6wfl%pU;E+ -z`Xq&gO^QEU3WO(bV!w4p=*w~C9V;Hb6!CN7V2V9^^{gphlR{%6oAp+oCG%IEUoF<` -z$ZJ(1|FcNu@o7(~c}z;t-yNEaQ%W{5U6)+yYgQR?+1%~uTxlWhV`clT8kQKTti1m_ -z{q@9rOAA$(ogWLk!lX~V-Q(^Qt&u*FTUyG=@^5p|M00&@;VH9g4t+bSy##0m7 -zztEt3SVcVjPYiZtL2Y)6U -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 -z;DLArBlD-*Elb%>=EZ;EcxY)>L4c-@6 -zT^U)w?!+Di&DX|$I>%1_ax1^D*}wa4&6eL$svXhh<$m1uhn|Li*IoV2oA0jut9?@^ -zNId?))D>v+-SlVL;hpRE^SyfG&K~o4v6{xt^$VxWU6iy;UqNpA90!5#PnpA8n0CmQW7+Vox}XAiH#ruCI>-iok_TVSmKN5HSdSl85f*8`d^_g -zrlxlGA~n%}UwS3u;!nQj$#&ZEdiVR5+-qOwreEg_SodD>#MiZq--ND*^Jb}Qd+R?f -z&91FnW_7d9He<>)@m+$S4_b6b-qL#=9h+L~x&Pg-BfqY-e^p&^j(z5vtJg!~YB>-1 -zzB;VY-8+4YXNmf=rG1lh_dE;iiz|EFoymA)O10UMm_zEz_nq{uRlMM)=X@DH(9!cebNSpo6H-F1zIEj -zmxrZgZkkzo>Fb0^d|#DzZnFN}VH+#a+4?bI>q?I45--lr{(8*FlR~Izoce4-^_i-x>-y${f7GVd;x_iu{UpsOkaIZOZ>{K3sL)oReyV(p6;W* -z?~%f^^{P7YO=o4ZFSah-Q}krQYirTuu%D|IFJV$D?^#)MSMjW$yqIrc`92lR@`|adUlP_J{czG1m3H1Dkc7ZWg_14FTW+P_Ta>URi>v8mYOiMH^pui -zpMNO6OlID$XEV8!(jGh$-LNTcQhAirV@>^zZr!8vO^&MbWwNHPzr!CGv4}^#oU`Hn -z+HLmF_LqkKPMK_=eFPfiDU2)5h{l|V&!_w(&%M1>eJy%XXpFAgV+ne?Ob!TZZ``DfQ{PCvL -ziy2YuM>`lVl`-@#SnJMNUin4p?|*Bib-y|+&N!a=Ki}ea%(~WJ+No?qns(P(9^<%+l5k`*&cV>g*!it)MV!9FkX -zA9K=#=Rb~QyoorbaIn5-%iRx~Z5O3is|87XELQt&HfR1T;a3w*PW^fK#L*{Q2D%aF -z8$W3*KeNy4^OETS5k*_qKXJQ1^-hlV&VyzPmCvRV$UmKF$7C^lZvJA3ohUcm3+N#XjC85g+1wH`hO{e_7mOPe70QYE`mczv0QLQ?~0qcR+L5xlK(gRz({$Htl<*$KPe(X^=Lp -zDk;5M!}PP{m3JCH=bYYZb4_7!t*jn#%3=~(w8{(MJV5BE15GzIbxsE)W1Cf;wO1Od|h&}*MZUa -z;Y_J2t4pQN-)G#8uif!3Wyc3+#}iW;4QAA@@NQM%OcgflDLJa7X{}H%@Kf@@uMRQB -z|E}+i`t+n1AJ{nAG?~xp8b_Vt-8&OpayINd#UKzLI@aNq2Pr -z3zn%by7MXO$L}|}-g7;!1vPm_FUs5_|HUx;`@TEJ@1^Z&Iv>4T^t=6%3rkZMmK~^k -zH=}3g&kuKQ)^6Kf>|PtQQBX(4vb;!d3D>!~*Y0dHQ8mcA(`UVQc5LQ5g?kY%&dAO% -z()gh_sY&|glPUj|vy*kIg_;YG$IX0NlzvB_d%;XIVeuO-9Um7OpSgUYOyym|Ifal@ -zbN{;gUikHd?{?{lV`}9}8AZ!aJmK5BGp14f0cWIiza#tBJ^WQ2OLN+1RcRc4%i>jjtm{G9w~K1=v+Y|mJeajqEe{H5OfZ_MCDEEn9yRjivQy7Bk8G46a1cD_VIVLUTSc~(9(55 -zYGav;_#5BA#>?@~{G0Ud?hEYe3$&VbwcxCF@YM4+A8II?F21v8^UO@+U+dQ@ZR}x* -z;`;dN@6|UiWNtQw{`&Lv`nT%#s|VETSf<>ccvDmC-SIaz^Ec#b^L8mQ=}lO1X_p3f -z?Hk+SEKD?V)j6Oufk|$e`CQyNTpO5v)1A{jL8(jB`9XHvr=GLLUdy%U&xUF^hopS4i^ySYp?B{zpOE)q7ciw?1 -z{6{X^{X5L-u&HS0qZJ9K-6xBJ`D -zu%fk$n+l4XZiOazIehplQ7PDY)t%*Fg3Sl34nfX|iyh?}__+h?_b~K^EH>X^;j^Lh -zm%8e!o(>HM!&0Y&jC%o-EE)Z$s->@U;`-X#J6Vd=Xr7PH+)oyUj?=9oN=_t96Z^mD -z^97k!JuCLS>pjeVO)9hRDcn`Q+p$x(u~{U&@=Bu@%kwV@mecZ%ZCL9Zx~{TI^p06< -zO~S*XYn_=NmH(XgN^-h!-_&o;iMLnRyzJw-y?fr#&aIcNm_CGV-TI~NrH;GPBA3VF -zk&*9<*99uCm@ubQp+|FC`h|O|jQnRrK0i25m)UB8&QBlD^4Hwi-g~U3u1*WP)|nmD -zKBbf)#PCtK^^1%Uu9`KQzp|`ca4>JZ#Ot2Vhc$!Jc1ENNEOS*5xgnKuRztyj`|ZT; -z2%Z}^%@Y1-7WJH-m7}Y1t=d3u!?{UqTJtuT)RrFDwnnja&Ws(KKTar1`8Bo6N%)3h -zkbL<4;)8+vRx|TiYc7hNdueuq;n#a-J6B&8*s!|S@mN3|}CuqW!FJ35OwhZF6ILy($lfkp)-_{Ou<3ibIoozM(KYk`n+7+X}IxTL+ -zvn2hwx$pRUCcfB}x^HXR?1aeeZ+G^7P^h2gx_y~rjg1HMO8FD5@t4#k8n@KWxhQ^c -zi`FSky>l!Z^paK`)b4tq`gXR~eaVxq$A7iNvTsS_dG^WaVd%Wa(i&5z?QveRRc~gg -zYwO>yD_B1VxmOj-w;PrCoj<$7XN^EqeJt -zs`tRDZlixLVhfkA+HoLk35)xJGu;2JuC#=Us0&Yt%MsfazDRS`J*SBuGWXdpn~}k% -z{JPiq_wlVIe6FvwDx@Cd2IYSJ7M6KpZV&Sbzp!AjLkWkYH&nED{YZV|x~%Iu`zg8C -zOeMQGSuVT%PP(hB#`)~TyZKXjGlE&G8rN6#u0Qx-D0lPh-fHpTo0b<@`q137=or -zJ8I{}e@}6jKkVO|vpcphphesDzC-Wi0|zfkrSAFfc7AeR|HbAhYCql@$Vt0~Km+P|7(Tj|vF{@%&S3qF@@^__Qpmd$FZ -zyZ83(cHMhm{+$m^Az!+m2KrrTO)^k3U$FYeq}lA-XRTA)8TqF_Uu5Ilrw?B#`97W8 -zAzvE1#rO-ag|PWDzbENsp8~|b@LrI1z9saswc^Ic3tiU2o8n$<44>R@q!Jsw)HpO~ -zsc=|G${Pt1T>ELpn$nAxG8+`gXNNfNhZByL;iZ@U?z5a-qlt<2Hw;bV)8_!y99GhezzwKq_<_Ry7KJ>RQy^(k$%_;d(vzdXJ -z#jJHN0=>okVmv)=+KIpa#K2$f>9l`KrNPVHlUPmWzghTlq1i5{4?dC6;j53xHz_xN -z=TBOdWV~9Macz8_A)i8on`!$4@1$*SI&`_LHXbz)jSAYbb5(=-Nwq%lfOl+*eXSF& -z7HQma$?Z7vdy6W2LfOiro@}8zrZ~)QW7*<4GcG{%5I?uvr)?h>Gz6z#PX6ujEjz90 -zh4d`dbBian&Aip2xxr}G%@Ahe*#~zX5IXZ9xp3j3NBjvpTeRX0mZuiyIX@GLzPY9P -zlyR3PgZEs)cn3~)F=@a2jSf7Q<}5tR&Hd72R=ebT?Nw?Yw9l!0)Mh)`d%f&W*SkkM -zzu2wZ*k8_mWeUR&_tfCvyi5qpObMvSEOE{(F3l-UDTs+FOI2z!dy%Zbp&}q6W#A*! -zv3R0_$m0Te;f4bZ4F?(=6a+Y!6qqLxr`Wyrt6gV6>Kud|67(^Q#iUdUU*U2`B -z9%0E4%l}*4caK4Q$-lyn|K3_Ce|tQuPH|%Wp8oEGwJ{-{^&9%L9~#bD@K5x(p;5-K -z1JM=lC4V1y+0oLh>Y^=KA>74hVz?`&F4Nqnn>VR+wV#8A -zMWl0@lc-%2mN-O`#k6G{3HJj+&73md}a1{^HO=WLx#uYVy?Bz#QOE< -zP85yGymSAL%f~0@e}&xh^!V{V%-SZ==?m+J-`n44yYR@(Uv^KfYt_0#X+P%Lzv+1V -z_uATj^L5RtR)2YYxAK?F*@X?I&$s{I7GzQKe63v*tHPb12aCm?m;L)E_IK;t^38MO -zv*+&@6w5B0_LZN1f8l|Bd~*e}*(NAOIn-RatSa<6)7`Kum|Nd^->)5|?Q2s+qfWju -z^RNGPDDU(hZ@J$6e;ap+i2UT%JQzR8CQgz2!6H7-J!*T)69Oeo!&Vo+bXTWv%N^4ZJ}$KI@P&ROBbFN*WcyOPToc~CU$pPne)VEmbymaeOFveJ -zvOH-$u(xDS3Fm{qyes)!W%sE*is?>@O;AbFPy4vM?C1{B`YG9*|L=TTsCxa^U$%fN -z@4G+x3O&kXI_}E)?ax+235$pm>+%-1%#r5OlPdcf(LU#co4ehS6*EnCurG=g_ALmp -zJ*8+Sv;Fz1vKa*oR$HCgDw_k+8MIrIlT$w5+2I)8@5Qi@mGj%K&1DC9d{ido1jN

}GGj_rLk1X}69!w&ysl`mn`3>=MdcHfbFWS{vtE7LVU1i%8P8(&@B6R3 -z$#A`X@$-p~3mv8vcSRmv;i33hV(o0!eSz6>CNpooOfyV6a6egX5{psiF553hvsR{= -zPT_kzvB`&n_g+j>@-ed)>phOf?|&ix -zoz^tHVq{L*u(qc>?p^n%iD{GeUQXMwa0hpHws@Gm*p6PqSBG|8kG=bd`C622%v$}b -zna`_sow~tw`peO7-H(4CZoDNb-&Jsh;TLc9l;W?ST3ioi{xTAYyTP_nL8LCJe}-?w -zq5Mg+PM%xx&0p~Tth!zU#yKlpy&4x(uidv(bZ_Fn`Q^XV?$7zr^T5Gyu8Z9+KM}^? -zn(H`&Bx6#=wtcU^WAn^t%Ri$$IYItkY!h^|tY<9owY}01cxvyBZIXLMx32yqsw*Zl -z`KP_>GD*W0)4OhySf_rERA1cLIA_<670b`h**RaR%_qrk$^1ID%{TMjr}z|BOpOa( -zzQ^jWcB4z>*P@jf|MqUoHa--2iXmA=diPJiw0SD)!}eXWT0SxSxIw#iY47COaZv}= -zp7gxui(5HqkuyvBo-gg28l+uLY)u&Mh{GERyzE{_&QKpIh2p -z*7siA72z)$&eq+m;gs+Jw>oxi_}f)S9pztKUZ-I7 -z_EgpPl}4A=>B+rawd6whw&t>>f*Ii%rMs@BhtF2ydizA;kHbs_cajxuf1UUjZCWNmVImql5t-t2kD)-~O%6|0$&&CZoSU(kgq -zv}uCmy`PiK3ewLq2)u5uw+{BS-}A@J>!?=l{hYfKmgL-+w%Ep|W$$6tu!-IK{{=6Z -zaaVd-lj-T-(|?OjTK#$3%SiJD_E)}gYj>|Zv0=%%Z%KKnt0R10lvFV$>z6(B`n9QB -z{+F=G`*7VmbE-=e#O|@QWqWSX_j!NDm}J^ld}FHa~Qe<|NRGkdHkK=SkV5pY0d-95Du#yXVZaO_CImcn;ho|{w>XdPJYk%dvRk39Lv9pQa -zUxjs_ZoAQ%UGU90I(=JY-({(dW=~|4cP`#?_QYIEv#R2GH)Zy3b$_~Ba^g?(WRd*S -zYb^5rPqHxGjy)Vcp)fIbY^4=via9!~MXa%Dd}p9P794F#f>D^}ovNSfrr* -zzUmXVOPTIjGyK*%P`x+l56^?O$3pn^(wl-Vns$`QteN%egTao!ygw57k}8^ck_%h4 -z6yy%S<2`?M&(C>tPgz^17F^W(cIMBIrYSLHA+q|N^*quUtur@1IP)cp`*&E>LsJj_ -z{kDF)%MyY=*!-ApuA9Pr^I@9jIZMM$N-OMFKCO3o#JF#@=EsJGkAC?tPW*rJMzY*D -z6P!(?phY9_3!4RP5LXDW#=7tUC@5u&Z!@ZTyM(?{rcQ0yui9b^d8j?tdNVd9{MsQKTEkxOKgF7> -z?&7i?nmj>^le^x@vq|0zblG=7$ILeG^XQs}MFIPOOe)2Wi#477S -zN5#gV5|OHO-K`EQW^^nR2szKThb#E@o&(%#H>vci{feIQ`>0vxn&Kz#7TL_d8L=x+ -zNOXhpov1joFU+SLPO)oUJ-V5-GwH&^TL~_5C0Fb+47eE2Z`If=5F_hx$K|N^7Q6Co -z@d@@JUDFh`*0%ar_sI*VJ?1EHzRYlleNkAp*dEKugEiBac-~gaEHj#K&~ua};1n0f -zg{bTK-FLPv?pWk182Zym;j`x~;p~sW_a}cT^Pl9pIYxDn*(=vdmn%Q>*9m6Yc>Z#J -z`mM}oUQ_#uns@FJm*?!YaH)Kn{rvT$YXQzzzR7k!U2W(R*<7{2`0<|zu|*;}F1$yg -z_V%m0aJp{Rd7Kkueagl^a}HC5fa-O=MLcJ>xbiJ(`Q}|SDd}=T)R)8T>u+!f@=GBW&{2yQeCXuGMH6O^7e1p^uN0>1arzc4T{PEm -z*L681&o(8Q!?KUlE_b(z?dS3TS@S=<-qR(@Tu|#&o5G*}9RWO5g2lR79HNq+o92d` -z5a{yl)Gq5dv-+#8= -zxpsAzuZyftC2dc)db#wKR>eB*N56MWw9I*$uqQgE=H8?98rIkHD>qnlmsrSi=X;B_ -z#J}v@^p6TOnv6w$ch=)7hl~kw(;lcqWZ>f=NHQ@zM;F)i}7xG){|XJZWu@G$@+0w -z#Oncr?2#4o%Z_dM$`$p+(ZW(y(bQ>8MC&XEcAwLWCg;}gllR*z_#$?797~kOd)+O8 -z?-hRT+P5Tg-DV+=xnf)PYvn$C*8l#<`{^}K6WF%su94rsV8FM2itVh=>C=@A6OL_^ -zF1WeVYi6!XR-(;$eudee!cAv``!5kj9WF9%Wag}=2@)r>e4>u%U3Ky8s&tJ97wQmV~9%a -zpYOWx$mWdy_N#kJ54`!gKBpzzy6x1-YAL&YviSD-`~PE|jsDJ8UakG+ -zdC4qars@AxYS-^%F%OFVyJkOkTSDU=Kl|H!$Ijf?9$dt-#;W4T!b{vAe%=f?fBtf? -z+IEv|Gv|MOyzGrt{I}X$b)SkS_D9Wr`AX+n^OH&MIE2NGdguFomYHYZvMYn@#rGQ5 -z14+Feht7+wxz5`b`QYQnsLzUL&OKdm`e)elr0o*iAyv_97R}^jdO9OJ`_GnrM;_ft -z_fdFi$IY>}%o&$Z^y -z_~~~lyZlgt`g`|)rh8w{>^!@#@O{L+<4Jmxx8<*MnD+0(%|6~ujLC($C5N6%9xW=B -ztGPCR#Xh!`YtJ#STGx5@*6gfrw(0eiS=pB#M!vu4ptfIax!Szck}uD$W(bSxF(wBv -za2i*wtrj~j_4C=h&wV>Izso#-bk@8v;PJsNlTPhw+5WutxyLTscsoP(!lIz}jAEbL -zrdTa2Rh`A~dULVLtP@lEOd?Ix#7t?VyuvtnY -zo#kcQv+Cn+0`E)oN)nQ6v&7|}Z;sBmB|Ji2b|ho+vCF6A -zrDk2Iex&=iv!P-Zlf$`-)6{Ges@OSK9o?JSGWT=V$G$5EUuG~02wc6m!KhT^1buz -zq?#tpjCMd0W6k^|c9U__4=Xn3IZDn^6K86fENQLFHTdhJQGA;rccJ?n7nv0f%&V2& -z<~qi+m5Dq~kM*2<>{W}X{c9(q7lz^@DwdgrmYLs;z4!e2o%p`tQkHJOtT*gzmUrK?R^->a -z=%3Tm4t&0x&*hU`?q`>A;;CT3%4Y7OyuQCaz2tCJ#$Ki*{7Qfy_bLZ*I4*vd!C#sz)%z=QglnP -zXjZ;bUDJ~-n{rd`XR|)tB2@nMmEqT{<}0sO-k5!PpH9>2dG)s+ANKyru`u-b8GgO8 -z#iEH?Ym&=uePwCO+9BY6T5QMHr?$Gm+jKjopI7+d`S_BhiowGfyoXKwUv21I&Y0km -zXX7&=q>edv;hXl!r}aZ>7$alNa+{6RjAjP6 -ziCq_8b(|O6U0$PY+iB+cEx*PIc*)N{-`k-UZY?1px^&)-Q -z`OWQy&DZ=*_WjtSo3|iv(d@8adn>ae8&lT5vps2YKA>W0jHSbM&nr6%_ek1#*_^1E -z`!F}t$|G}bVyp9XwffhL7f&ciIJp&Hj0j)P?QR|!Zpr`7W=2qIL%5}l$ncI$>C*2umoa4BwuUvAG -zOe+hR-F%$uWxj^puZ0xtv3{ -zJ~=(}>z;e4*H~|Ji0{uy0sT`VkM#1Zwn({t4wX>&lpnYy_xM!p!s`cg15JJ~y;-T8 -z`F~+X*gCNbeYpoL#Wrn;dvEr%FSqdT_t!Tjc|KcRUAn!o@A%wS7JT -z{Wq5rDld&W%_|dEr<_^6U|o=NmuPNQ-n2DKn0)?;x4u2#ER$RR?0!#E(VXVD&m|81 -z=iM;(QqR*r%7?->-mTrV`J_*eVNQI&Ex~;~4DBz!Jr&y~Y%xQ;Lpi2+`^M~3It{(g -zLN@J?VA^O=ILFHS*xX;sr^VcQCw0eY?ng1k=sPwEXI0nn%rH9Em8f7C)TR1zr)rMq -zw1c-l)I^Of=9K{Z}Z1y7#& -zGTC2|-Btlm| -za4_Dm^xx`f(xC<`1cE+bp -z0YRaKn#_gW#(Vju1^3wN9qq_yi}Q-+{QUm!e5Z>`Ppy8?w_?7r$L9Z6_{BH9*At#K -z)vQk4S8&!`U)S#}3nN!|9+zL-5|Y)bx2o7-dt${GPWF@&tFM1in%a0Ohw*=DxWS>A -zwB=&9A&Z#j -zO-kH!=S}MRRQ=DL5-sZ`8++xOO$rWNu%F`k_RHzNH`^u8G1$Z -zLUPz~*O#Apj~}|VNAPay?9gmk*9AvBu3ox)eDi6qZ-&z^Fuc8}QWkmhh~>%v-jCfc -ze(ct}?Y)%uZ885e!Jqag1eWg7alOSOB6g}eXPFOYNJUdj1Jl8c2mdz3yCoh}5Rfgr -z`hBOkcbnI(OMg;#Pv3AsIrnzhzQUOkTc1r|kemF3>EpSX2e(w*bnbf9V)sQwu46@u -zy_EftHUB!p8ZS-RP&}i@`|85Zu*)5R1vBd^n2x-U1HDndhYfsl$f*Q -zf|pE&v!91@j4XFViRnDU_SEZhADT}OiYWUYt@xmGL(chw*_YT)n_PEzn4qm1;a2)l -z)MQayj*i3z9q~zp0c8iDe9cri`^NRFiMCt7w?|V>bbVjJq-<>bdrHD;(|HN+(hf4N -z7ka<(EQ9FwS?ex6xpc_MQo?6%i_n)N`tnHwN|Tr??(Gu8+vy{`7#~V -z)NRw@6q$dLOPkZDNqgm_29`ZFuYPcey=O_iIzMJvR<Xv@7TS)`boS_U|?O -z_WtLWP5#FOa(w;tHFfz4gESAnx%2ygI9FK6qtjcjD6@k-VorK84E<9Q1c~uUm1uUyoNhdwO6-P!!*jbW4VAciU;qq2iZ56$SZ~eckM6 -z!_xFRf8w5Ri|_M33Eyzv^@F5!D~Fa+{rvCF>z+UOvb)G{2hS|cpVEm(&z~s0Iqy_a -zj@_G2%}zMki=*C)1m${fE>-vi$$e)t&t(L}I!+6<*_3+^O^imcV|u;=wR={xnn -zee1K+KXMLdh8a9QEi)}~#ihw#B&!dm3vT#3vCeF!LcY|I_YGxF76%k*=k&H1)-|#U -z-TUalJ?mfgO*5 -zR+SWy*~cvY@3;x`Hp$jo?rX#tgT9u<^30ITJh{%^-zH~gcYAA{@6jlZTZcCuc~F+V -zOiF)I#TLgSd*u1pxPxa~V2emLP*^pDSn-z)rEsFBq8i~shF48zr(2Oi#9+`HLM -zaMP9-VsXzcxg3u-{HVymVh-Z_514Vz -z=G>$+bNU9&>G20z=X&kfCaH0!Ww!p+g!ID)7VMeus%XI+FCNB+DfTBa%U^YWe{GiT -zvo+#n66c@!k8AkOR@Gl}bMp5&x;nrKPcAxlGVE*U#a>d+&X{y6S80o~kTKi-l+8jHYdjw25&J^$&6V-}hf; -zrsm8jXX8Ig&J8!q{c@6$h*c``^<&WiK;x0AU(c@mq|0jsNg2ee&goKFt?I%9oynO^JU=!(UpFd -zzx)`sshwh&P_a6uW~6o`_Hh9FA_Z98zfUaUe= -zTk5YE-!F#s^ApN1%XVAulyjQOt@i2u*2+nx8rxEZ_0D&hO#B^t>S6Nw5-Th^fj7xAa^ca9#@p~9XBVDRWe7gw`F@d0 -zmH5>Dd#X2H#1>rKU7;mnE8aDg=jb$ES0}T5oIZ~)3takpyZcz>^*QBY%XjbD_vO^$ -zfO~2}t?QDiHqQ8AkoDv!qqxGV-P_KsOO$SInP_w+R`>n>%g1%}-JbGE{D|NBJ;Ww+ -z_4%R=7nayxIFiG3@bb+6S_$RzOeYqd;D5er$3v^#_bhFeb+q)|NDF^@RfBhS>@lX8 -z^FLbIl3DMU-7MV_nwTq_wDx9a(Xm)tmWMq^T} -zZ0_3W1~Uy@%XI%g-db`(Pc`_^$L$5tYpd=xc1Z8uH~X*oleaIv8?17hY|YJP7500w -zlI|CK^T@cl=b2}n*fr%x`oeU(+Qfo6clq@@FJ^vB{_fDeeBQ*<_tocJnQF@S_xg&w -zMCF&K+A94FP89q}60j)UU$6L%KQ`L?<;H*Ev!&<0i=J}D_WlfkeL5 -zAnSd{fno0)Nd|$^f`)%@1lJ@8uuXMp5nx=%?{xG*dgh4-@jrB$QIpE0XN>r;XY7AJUZlv${w2kJ8-o5A*9jJ-EK?)xr1{ -zCiy@2uGszPKJ%mbJ~J0by`q~y-RWlve*|Yb{g`XP`!GLW;9YD7|>Gkhs_@?J-Hm7YL8p{1FY+#PEzwKB150uG$lR%nz{t@%T}}4UeS@1UD7(aZ4#|nQJz$*X{Aw -zwcaVG9PBa=P3XwHkdu^RwQtprnUaYIbVB6?;$2o>b+qnKVJ^S0W0zsY1%`arxcm!B -zlRh#`S=XSG@5a3^LBQnZ@9&cYW^ED3WwvR#_TudR87qz!zj&2lt+DG6NA8||+ox^N -z(%F9M)OD5b0S<>_H&2pS!yoUm>uJ=P$TXJ&R>uMnl=kr-d=FK{^&gph{ -zX+mOb#=T|AJ*DO+t#Vgzzg1pizidG*yIa8TyEo3i -zU~iUcO%wN=H^Yqez&Ddf?ti8CuOGdjkeu=Tc;DUQ7i5e~TF=UAN=8Ln>ql)!PB&eG0?8wzKbF)ZEdtbOrg^2-kweu(hD-9O#pw6nER^dHBg -z@3`bM%^$LFocyZqN`~z9HIsba{7n<-ogwDtaj_fWn;&Qf%knAjk!IjvowIe{@Bi8DFY=()lj;3#*^2$Mn!fi+?UCm@^xH@H -zp8Mtx`vTg&e->!}{?%^JdzD9jb5-w&JAJgf-}QZI%%1n+k88E0-tWI#5$}2YcY*Ca -zb*4}MR7{@ywNQR9ty($1_vCK}|9k$^KH2$C{ocB9kAM2<-y8StSugUeHqGe0^4v=M -zh_k?>OM{j -zcYj;FzIXiTyV@BQ@AqG~hpMLYlzNyE*hdS+B@A|2B`sDYESJup5{`7Z>!TsYif7;DH`@OMfAOEq> -ze@*P~e;4|-&*$Rz;}iDfZ~pREXZichF17aEuYT)<-_O7N%WmPi_s1J+?`OREefiA3 -z_mjW{I*}UbFaQH-dShw^XB`}i*@&3eES`@>;CkY -zf9<3{d~a^se?Rw6?ffV2mmAjKfBy4#=B4}JSN^M${q}w8w*B`{|Nd?C@P4@R|9$6w -ze!qTYKmV0~wKhNA8=tL@KlAUm+0Xm!kN?|U{QvzS%K`g9#vcy_4)||js54{#!0g&E -zzlZ6Mh4=&Z%MA9u>_1LA9OyS@sxuP)@OVjsy(IUK!ngzcYRq-Bq&_r1Y?z;V73Vi6wdvWDxvS^1K8-yf8o2E6l_tN-GQJ<%*6z5> -z{i;FW)%T`NTLcsKOtuO*Eb&53D=O;90@tK~fKD|Hwyg&_n7bW6*OxTfMz5KEVuAkG -ztEG=}?=}W>vd!&GztbeNLufrS_d=_(9+i1_6L&9Bp4ZEDGKY74Kl|(Tnofm_)iPt( -zDl!V%`*La*yzrXB&b{Mx!#O_=g_qib3M#f*Uw3QHtYDMz`Oo)y&1t! -zZw;Pu;m_iO5(RZe^Q1VUnisXRAGcVzDPiuvl|M!Ks#Yj=H3YBzWb(Mt$(EDruIl$I -zdz#D**$ip|`R4oas&3hP_tX7ILB%9oJd_AMz;oq@F52kX5*BgogGfi7p -zW-u=NuHwMkd%JXk&K7s$ir3a_O@lt_Io~=PsLc5D-YR98RRQ&rSEhZM=qmA9bLTT7 -zlXfB5A8FmE3;Z)wzn#4ubLow&q@;_jVyUCP+A`C{Pyc8?w>Vo}8JRyrwj%fNq$`tM -zY>QtUmhpFfe(_C?OpuXa5zojGwe_sQwH -zZ_U5%k@%BvVWYIN?1ZKaX({{bfyshSf`;~Cl9HMo{?|lrO_~<{L^f@fU}#18g`|0w -ze75TrRLR`pJtgz{zDw=Ng-Suyp?t1&KGU4556m@ecU$;1o$qcb*E);#ebQ0Ct=jW= -z1s92bDQn1fN-$i@XUrKKz46K&BQM1x0Vl1#91$&gH!r`$I;O|*b|u0`48FE%=dSy)(mm*A%mm@^{2i0pzB}LiI@iG4?}@#B-*?rPpZu|t -zt~GuC-#$@|u`uH}>#d*a{cZv?q{LXk<%;o9|He+WA7fD?^nX5bV?szeto4Mh<;Ky($kss#{ -z+AR@Y)a`3D<-%ms$9s21tzv7r>b+IqYS)KbH!rsQbSlYMB(~&~K(B;a(0Vib8~YAO -zGpui%qVPkuxw0e7*Zhg|l~oS#uhsWK)P_Eh0mXHM%omv3HH -z?A7>b!P@e6F=MU6`Bgm+kG^R>ncBqBZ}j?i)?vlNXR@L+qn^7j%~lUT&+_cr+=4@; -z!C&^3s?1p=KD$Q!vSn-C@{IY{Ci`CuDBeGRQ8b@$2cK3K>*>|4UDK@BC%d>_-?1oD -z?8f@Ml`C%g3!8`@HSJvbZ5>Zkr}yGC(XWY{^>-KiD!C{42#C0n7 -zZ(MmrW9#%_HhtUsYqGa5QrYxl>E7#st8LyzKddjhu_}D``>)K_7i(O%M!Z_}Q{yO~ -za8cRs?o(AkMs4Bd9~=#}-fqyybFR-iDcF+e-lZif^zR+lN2bR22PbWQ%=57DakAJ^ -zBgOETo=C-ci)?xI*mf}(t~qzyVqxCO_sk8}x>5lZjomL6-6`yEu6@E#rCD}t@sp^K -zG`%_EYKKm3a5arNH^sO6H47&z-;a};D*~4>t-r|nI@*NU%V3L1%$B?T7j^WktedXy -zSn2SJhw+ -zd)6KMUhI7saqg{r@izS^y{7;BGQP2$o%8lsJ@ch_lf{f?OBM*R%We{9c6%?EXLxza -ztS0H^i@a*$+DCsZyeOTxCEB#sFKqQ5QMb$DFGF0~E}rnnIFM+fJz3t3-G94t&$D%Z -zwG6p3XFd9USyEElO}+NdR*APybXUtKZ@Kbjh1BA&=dJU5q%QAUo&4p``@rojj~Lc> -z3LKC#nw8DQ;O2I@H+rVZ;;AR*w4cn#+%VDK?ciS7)RJulXKJ>rKlT0;qfpbYYU@%- -zUR%cOWhV9Sw9>ZxI+@sUYWEI%W2?mnV-COjzGKhclNgZ~Y{>*5%B!ZLCMa-Pom47cTV6xZ=V2@4||cY=y3iZ65#Vbu-`Q -z&d!%9>gf8!?a$~5cQ -zU9B&7WqcNoQa;aJSkDn8-MWxz-&MDl?$Y0N)T7&W7ro%PD)%A7Pki44H)rpaOmEtE -z1adH4J9+<^Tjx~!uHy|U-*wrRxUY5l+8_ST?Wo9;FsXYPAKB%W7E~_Y!GH2(|GgJa -zH+ltbOzcoUdH2K|>EGv%Meh&ndC~ltL#8)M;vCN-$xGYso%p`{s;;!{g;q}Y&MeW> -z)ge{EIToudwbmaFtlfJ-u;BIkr8_lSK4i}dUutnG@P60g+Y`<%{qiV7p@6~BXaAeo -zQK<{we&H>Y$z6DBjRc$5$569}@iSz$*0RaEZeOk}bfHsMI@Zzuwv*Ph}o6KZoTVJd55*t&AX0ge=fRP_2cL5(7!6v -z|5|I6tT1hMU&%ae(Zj%>{$G{lQvY$4_kPr{<`!J)Kj-7c*KMR_{E -z*2x3SD<;o2P5QIgr@6Xa^=Rre@mu2wEj@Z;D2$?U!X1njZRTm%K#ng08oTFVWkct-6?b>$l7a -z^JcMmNWMKH7PYW)!lwSQ+Tvjt4MlYFAcCiUZecC+U#J-ydod()@!wga&Ps)wjA8U`iTkd`Aopw(DUHhLZyX_Zh?e_na -zSXS?pTXz4;r#JsJg>U^`>2|C3((^69jia~zR`bpNem?KUJO2eY-%UQX?e6@XqTTsU -zpUeJ>{CfM(M*N*!XULtunJstzF4-^8lEz>WUXouBp)UpYbboOjIZ^Fkv -zqqgmg9k2erZ8x90`N^4Yda><%nXb>B6&beL!D2fu)_m+|3OKWApNq<#^Q<#Fd}?3R -zp1LM!C7$qp^VaV_6>M6x@@`FcKAI@?L5Jl>q>%Z3#o7FtMp{24)%BkK;9@@|Wo&-v -zBXi&%msr1q%o_2H^L@{UUC*#t?r@s_;CoXW`;Fo)nTMV)Kd!`JZ+~~42=C9Qrv7Vk -zC#`os%$(1)u;Qo7viUv-8rfL`_M|iH`_41t!HT-9aGzB&Zzr5j4CxWf_`4@LY30hJ-u>hh)8asOXa#ewK0m%Uas@z+dvT$Dy!E_s#hqonI?l|2)*~#fGQH=V!Xk^!}H^7kYN8 -zJ!|;9w>&>8v;S?`9(3ntu>V!-?AOA7cXt14nXGvK-KF``CluneudEN4$~Uihii!TK -zm@_9&s~B-9C@svXU$_0QCzsM+y`;lO&P}MddYI6E%3kzB>8X#b_9p*BICj5O+J9K> -z;Mq=6gu|{5C)Sf9a)VtC;vy -zPAyG1W5&Gpby2ly=Od~A%eD8hZ_TLRUD=ZJRw6Nokz!o@&ym@>Qx_<9^Z2_FVVtulfte8$MkU$kbxKwWz!$ovoyL -zZwuR$!a3rm3(gesAr9K=L|UFtN%L03|5mpUT+!*aj^oSzqs)G; -z`zz0@<}b5gTKiVqYVpBEkLu>JL}@R4R?aE%QQdbIr^%H&;_N3lzbx}P>$f1`@&|U4 -z%tzl;e$OiRZ{%9xAR7F?;DFFstpNAXqc3DX_D#}Rp!Aq)=aKj+r}7BF$(sM0b1^mAtNgGWs>bN^@+FsmrN*cW_E?-BPV -z&Z<|dws)+0*VoHXBsS4rTf--oW8<^M>9@i!th&vo#JFHeOm)m;R#C-wyKHXRT=M?L -zt1lfBaJ*_(TZGb?1{pogb>UAn-+5RWYP=O`zQiw=?(s)Ij{T+Ki$4-mq*EBZll%+~ -zw_KQRlo2dBAG7^oxi=%`mrOY -z^M^UkM?-wZyuKJ&n_HyIVG&O -zcRsoQBzfAipvh0TQynI6^F7@xG0))Bapo0<%hHr=Tdb5iCRMl}DAj8H?temQOR{lm -zTj92?MP5w2*_uZ;39}~NIOYE0)2iyZKiyZzDzbUJTzBuo;oi;iS)aDP`f9yn-olny -z`VKV{Z%?@}gHa&mb8G9F18XLg9u(5L$gIL0KljU=1somRdk%B%6;r=*oU`>w%cUjS -ziv@SKi|;I6D7q+B{`Eua6Aqo%#5G04NNv4BbsLjaqJft -z^ISM>w`HvUlW<;*YB9f7rG3*c1;0>d;L8n?IqR)It@EYi@4g$6qL+5QUN&|4(W4(d -z|NmALk6PNg?_P>h;ELbfvF*RzcUyeg{W*4;;D-;|CaimB?sP3NW=-6i^+TuazWDUH -z+<#bj70S|;xl8Nftc{fz^|`;ExOSsF{$S{BK`HMF!=Cu}DO=@l1<#o9F$qEUor70jve}OdL`+TqqUuGI%cqG&*qogqNaYi>A@A9eHZ54nSWM4 -zgl|z{z{z}5j>VGQ1|sZEn6~PwLS8^+|PTR(cz#@!TFDNDWW^pH}3ct_&`sWyP-j?V0lae+l@&q?>0_)FyY{aLt+9f?~3f0 -zPP}0J{*;U9z+~okme<->F@86`^ZdON&yL``eW{CD{+BH{w&Fm$*coXPw(eUqt%j_H{CSyLA;JQ#s%QGyc&@Cm(5o;` -zXtU^W)9CYNbFn>9v{s_Pxc$W{4OJeAUvs#Z?0xK};?fy=*7Zb%->f?~|9;R_nWg0A -zFZlHN>&qgSK5kd)Dp+#;%C?Oid66!yoqbDOzg$<+dg*QZ;P$?feEmg@f-Xg0Z!+E& -zRz9_2fz6J*OB?p4#k*bUEPB1mc+tA>Exf|hQaCP}rf9AdUZ_|yV>bKkax+;~_55z(80|EBrIS*5x>JJN9&BvYW0t?=B)!;P!+pvd -z)n7%m4})bl7kIDVe4<1} -zcm4K%Y%dI^h=^<7*Hq(7widTzi`@RE@Zb`_A#$|c%+EA=h~~Zi@{ER4)llp -zas0pQgQ%cw#hitA-u)?x^@;rt)7<#9HO7DT`(Hoc|0i_% -zqXU;-#=fa$?r^f3^M|eD9LLqfy9 -zW6}R(eu`Qe?QL-6TIxdq!gR$Tb5ZKqVV!pJ(LOIuJ^S5TGZ{wZbk -zMVo~Kxt<(#6m(7gwCvPj(M>YlD_UPUPd&b9?VRovEN?1m*7lYDx$1bb?vJ|I&)I@| -z&BC6)7CFDJ`{unr)?0fsR=Uc3wO*#ob?Msl$4V2e7Rk$Vt$VnCWi;CZZ{0=KJ2IZ{ -z{_@_<=7&rBF}`014$yBF&sgPF -zncN-eT+O%74K8@Kw<~V2>1pJP4ft8;mlSZ(L7h7|bK>N^ZTqEGM1S+kefRTYrqYZO -z=B@J0Cm+lG>yDlk!*~5kW0?LsiLYmFHqLTleY->WPPCjx{P8Jo=gVn)irZ7M&H9q< -zh59+~EbF>w_ct$?%M&1IyIH79ex{Q|dX95I`2IwJb`=3f-`6(zcX+hS-7fskmbE** -zuFmG1ll%4A%{Q5auB6R7zEoOBWbctxrED!KFSaR|_3qd7F{_?l_=M5_<*az!sipCH -zt-mWBWtyCPrbpYoJE4}5C%nZ<{hztx<$@+L%?!ED#mk@HVlTV7>cb03N13y0cNjjK -zzd$J9!b$zRG9n_vTv|~->oqdG8A5V%R_@c#C}jBZAl~21iR+az>)VAh=8Jsc*Niv0 -zC=q<2caM?Sf5Ap4-Vhg+D-JJWSg!`Lr@UD)L-b1Ck=UaSA8FDQ!R<#mzyaoTo}D7J221tMb?7b -zm#nydKTKCS=goI(df*RVfrOtrN?Y$`O^TSB_Mt#!-tuKmp)U1x_11+emu{PFwR~=)&pp?_x}pyROGUIV1-z{dHJ*244xf+H{-0*$ -z+AUAazjH2**)VHON}vWu+Wzx1WgIm!&TZYhV72Aa)s~ZX&APv9mf42YKW|;#axm7n -z{s-@#S*O&LCI55n=&cW$k^XTmhib*u>ix4qx%K{p9$M#5w)m*cVpC9<$kBA -z$$N8rn_X5c-6}4pFZCknAJ30sL5FPL6+VZys%<{cW47PfbY(mH-;!PDZ0y)Y-kg~t -z-+!_&d(|Gj)qySt?neh-+5PtZtZ0QY*_dMMr$O-*JC>Pe&Jw<^Q*j{Eg=zJK2VbvG -z$@_l2=encoX4B|zA#3^<>^rI^y-4#2dy{dL&P>LI8(&_!;p1A*Yy9(}eBQkqcXk&q -z5HzXQ?Z0}UMY8eQnRCL;yzbZIPqWr_OiJzPMznnuqYj7LunZH}COa+3Gdy33!OBWABMvp5ytE~*wYN7LEo+_jfwg=Xq6XEKZI -z*P1pV_tl~o%%^_dJbw2B{{`+1Jr)=KK8xnh_nXT;eYbe1aE#RQzgzb+I`O{rzGi-) -zdj5T@YS~=Y}F)^LVmye{M -zQ`4FAQAhoGo_OzpZ<99*w&^aMBRA3y`H&K=RPgj%iB3Oc=0BqOBR*Fv&?h^ZYk_im_H@>(Mu8UTjA9q -zlUDO2|9UlF_?eAC#^)RCrpHGloX`W&isE}QSP)WC{UMaztKyUkB9IM94t;{V|n -zA%|?$-##?|F~@h+9=i{v1+5#SwR#@-dGBH6^HO{2cK7aiPbQY$C+ANl&v?p_{`Aj- -z#hW7y+~)p2zIt8zlHUxE4<b26z5T5fOo!SgY-8n_U0v -z&s8&+`{e)Ej6XBZ?FjYUA@MD4?n{#%L19VX^quivbN6k3ad^qa*ByUu{ZRkp#-;M< -zl+D~vZ_`)2=341<`qcNG>MMd3^%5i%tfk`j*Bc#h;%ib}QvUUF3jbgI70j8Xi4Lo0 -zbgnnPFh@MTbXus;Kc=4j3O*Oa7tGD(;QlAGmbEwX{*E8N&mFOhEMDw#Mdz-v@jBzYo~K+K;d2;uCKqKsd-B0ybz0)42AfjXBeUBR{(COa`YAEp -zv4hJjV77Rl=l)kE*CY?B*|trB&)BTKY5BWK?f+p-Ij5iYizF=mP6+nlSYa1o -zx#|4FkF{wDjr9xXUha?7dJ*Gl{XV+<7o(r|J^6EQm^WP8Dy(z;)xSn{K`JTYCSUOx^6pD1!;_&V5UoC(;mg$LgjlBSYB-zYF0l%e}3A4hFwh -zVLo%6LF?DOnOSP)d$sC+ocpmqg@O0bC(HA5ZCYI-d|y2NEWLqKaHV0aJ@KctZ{ZI4|K~2*i8L;&VO>!^O-Vhc0*LMjYDQ9^R~Gll$ZK`@n~tKje=muJ@K**SdUp -zmmRCZ|F4HGAG1^0Yi>~SZb`@09p=2}Hz`@nzIMyL&$vkMK70DM4>4k^5?Eiz&5Oz8 -zpO<#+ZK+JgpBecct~ScwJX137S1q>?67qj|?V^q0$3Mm&ZR7-=9@)$^$2923|DWs6 -zraXuYySlEz?Y`kW&MP)r+n;=Xw6lxFB*Cs{tL15}?7vl+^FQ8UUgrMzr%JGs-htm= -z)9zHTg&&n;tGHPDcxi;mm5L3IBWDLZ`}^B8^~(L5s&WO-ini=~A$QjLhUdQ|oohxp -z|NYbsuTFUK^BRN1@9Anh`)~4pD?fZHxX)2vLEucMt|QZfC%;dxC|c9qa;7=qz|)z( -z1&sdQuh0Dceab%-J3IH!UzQbo`Xlzgvux|mqxHY_-%UGPd_Py`-(rVTOBR(ro9{a( -z{YW^gDx3Dd;hn+V -zbNoD^=-wVagO{2Ub{sNhdobbT`bxRu$}(X!ySCmssD8Swf*5zxAGoors8Z -zJFDeMX1kl2i&*n2tNw-iUgNiMJ+piN*YCEWMyx7!jZ1l!$uT|hYPuJ;R4}#4$Zkv5 -z+e_bgo&0uG-8v$huqe}l|JvokB-5Ai60A#;IcF;I@6>z}lW)(nH%o)bQQYN1{P}nL -z=UME2?UQ{?uK^P;T^3GaM! -zVt;IE-6U$f{L|Z=JomW27aAK*iFz{6{0YBY!1_sM29LjqtobOr-`GI#?&Vt>f4%zd -zb7R4Iv-j^L=P{L3?|&C(s5|lc@2z)^m@-{^8By#1G|*!+?}^tM^^+%^EKbyK-W0i? -z=f@OgyUT@J=UqLp-15WB8N70=^P?RfnEcrD>r%KvjoIaD8?M4b%eN<0n9Spvf9|5v -zw6^m?3w|v5@qEtF`5coMzdv+@)A)bIod>;(&UT#__^|HS1c|lX=Z|&!cZk>-*rl&I -zbaLIQk1O8^U*C~FHFVbHlT7ALC$5{G_*b#mck!vm!E+vGx77UlboTC@JEzyK?250j -z+pwWZbw0;ty;&D`%&z%#@^kdxmiHbDS5G^6I6pA1Axk}Tx5f8T|AtNcVVV -zoLBU>ut3(~bEM1XNR}%;pFO8#-!YxPw5LB})6bSBBcWYl56(XKJh1%|Cz2IcsCHkEXxnY9AyX-{|M3^UGw{3uAt_`EL(9OVzerc9^$t!9f+?H8=n7 -zee_nD?W@p#Yrpu4#OR1PLcqrtgmbjR2Lw-BzGgUi -z@9^!?jwz9jJy}*RT6Z!He(+Bf%-=zd80gC7gx~ -zYEnu}Vbuz3(;3+>&(}Y7?|i1gk@HoHpQ?P^alhr`6xZT5)xW>zh}JFKykW_<$akw> -z>1aF+y!k!%)rLUcgJ;8U%XO#TS@a88&N+g!cDBWulsTT3E -zt~L;;-{5wjD6;lTaFumfW3;3H-MHO4?so;H|6j3f|9F>K`M$BVRa9K#g!S%R7N)Zg -zR^N=tS!t;{srZ>B$}e>35Y1V&t_vYA+nKaFpv0GdB0T -zUOe+}UYL-lXI%D%H%Sjvo26{Cp6mEe6KrJda6dfTS)qfWG3GIE>|ypUg{4bE<~tno -zoP2Y~nMH9&Yo0o&Maida`>UFLz<23MwZmdNCYfv&vD(CF@28?_yC>4;QvQagF1y!$ -zaWI|t;GDP8TD#3957gtdbiL9{b))vrXP@P2!y4IAsxILn%snZrC6M=uLeQ+-x?fwA -zx_`6gFmGGB#z#)%oaA)1N$k5;r_B_V+4Vs${_HtMW91TtjcJ+5XVU_U{K9z!Lz&IF -zON$o?%D1;Qp6z0A-SceQ+$~pfxdq?It`JWxXKCE+E@#2vQeypUhuJKH7jszHc^3a{ -zYnjCqSJJ)d?7b41BUenX`z_tEg)5tX((nEbsBq -zE%V?sKF1+?;bF9jl=YGTODkpXgM8oL-Fx$GZ)E$XZL!Qe+dMObzm=u>HSqj(-zvvu -zWxJ+#($yx#edc`T4le|LDg5sJZXfgAiCYAnC?bH+v`Pt#rEoryrTdBx$OtRj#HmPv^HQyIoU$&RqDO(7(mpyCT -z@a31)m2?H`tA*OJnK@5{{?Fa@;K{GkO1H$6)l(RhqqZkLW_)tRzsW0ELwSkE87`-? -z^{3w5Om6>k!{v2?f~((_`12VBE_*)J1#H=F+^h3f(Sfm}ZrQf#=dBxd#`AmKjq;i1 -zw#;Q?#_s)7EV{S-WU-mB!;rP&ciei0>oR*X<~J;SFMhM-;w6T+3q=>F>bt#Gc)N_b -zNOJAwIR9`{A>9WKh1L7pw7*eKp?|VDH*juH -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 -zrmhWf!YgAP*<;EwDmMshm+gq0)5Pd;OSX9$I@ -z`m{76kz;#cqTR-l+eTU{J4+93KJ0P*;>&dY-|zC@OkVz~ng90+!G^90f;Xr9{qSM= -z4#V{L{Dt+lKTB>iB=Ki1m?W{^dJA*XcTK^ZDR0fJ3)S_!vs_dXi;mul)pyDSU(l%bZn# -zVe=={KDzkd^n-s(Qo7yY1)+Reb2V>g%XiJ)d1up-6^A$tSvb2UDJ{(YU*2>gqv+_h -z)YTXNuW9|#ReSGXfb)+ZH$G%X=op20pGryE`1{QILgwwi>KMO7Fa%^)B!?N58K&ly -zHBScB@FF}yUW*k@IEo}q(U%8pKw*(!;c#kDkO55<39$4jfOv`=O$r=N%1k{O$+Ce~ -ztHfM&Z%LmHojr}?&b1}F2ET8;Fh6ixXjf+3I_pVAJNYl2Q4Gyrlx*ZTQSr+UuSZL+ -zY&S^GZz@;dvwf(ce7CjzMY0d)@?0f{Qwlpa-M#Z*$2$L*DLqf>TllS1*uEVNbzxaF -z{p=3?H1B^BsmwksGiP$F+E!IL#(rY=~SZ1zqb&DvNH|yM`FVV>{ZQo=K -z5}xj7`&!UhHCwyo3s30kY1OGtGd7)BBJFcC`*v#Ne|BRhbAer(RpUt69A&l5=cCT6^~D|G`L^zoUs{}hT1t*elTr37 -ztEQxLq5CqHo>@^n_m!6Zb77-!HyhTc)f;ETiG0jzuz!-N7Z|vXIct-YLU`yx)~42( -zE}!3L*gbGx!9Df+xfX?t2YX(6*9-4@b^UVK{(rq(J8lT_CmXg-`1bv=VAR6XBA;B> -z^zVz#;BgD?_<5B*@U*DFwdXaZ{2#Z-<*b;MR9Vyn0Mb&8i7n -zc^=Pp>FoBgexmyG?-V`H35SHa%>K&kYxCUT;=1YkdwId`A9W87e!e-W*7T#tw||%0 -zLSB9DGuy^mJ^!o0^7xR)5|1|S-gLLxF5!d1{|mR$oey2RU%kxxjGw*A73l{djd#Kq -ztTwt{_CH`B3#0w59~zzo6aT!JC}=Oc`Hg*A|E&4{44+^AeuBwsYU4TE*x#?jrbTuq -z-kj$t#CYv4H)r>M2}|YpylXz*7qpz0IjL18&&pK0G0Us#?)=va)c6)GT(#>1Yo%j; -z`Q3jfJmV%?Wj`X6zg(IxfHbmg`? -zUydC1Jj$!+EOU#)YI|(5iv5B+&s6?K3k#*US!!>#+;hQ1c&5sWFRR2~DaIdS^O(-n -z%{!@+S-#2qeNbZD>ACxiCd_K^`xUaHu}6P_UDeEnuZw0DZM*xq<<_ouCnjuP7hu0H -z*wkYQm)8;{%@!_)iLX2+&Js>-5M6ou?_CEC*ITYxUJ}c8vhCH-xG{&ls7v6=nyWus -z=kYA8Zp>OIB2Xds-BY0DSx?$IWmD02OQqNT)#!E;5qzJ47c)%R`KVchsdt5V7FiMCT1r*uk#oy4L*ttO6{><718doeXG`}$WC?>3Er262^N$o&!Yf?Ip?$<)r{4RQB^)sDxg9&L5Esq2emc#|C0nI*9Ffy7+S -zM+u&3v9oT(6iz#wZgpVm;fBu(On+}~Is0MVkN+*&t0WTTIo6id=vZa>-{kNrTvCy% -zxoyr4t)sE`?)aZNq9t}(le;uiudBnLiNW$rp~}{OvW`op{j+niIXr)^cGT>}mD#)E -zwjSBmGkH^X@A9Jk_U#2V?&r2zFE%JDNPO$$I&II>iMbak!5_En0r!*z+hetN -zKkn2}f81rt8Ox#e^;*pV{ol(Sc7|^ce6)OLUjAa|`)-eWT9)(Xg@o=1%=m8OedmQm -zi)87InG2ZIw@j0sdn0bq;a#ei^*m30E19LTf_eHHrNFWVZ@W~_fNd%>HdmeNw32zX -zN6AaJ?@PLLpsMeVBkN{7S|$?0+~3Y%K3VuyeBqxcbL-WW>o!}7S-Q;&omd&Ra`Ccx -zSJ&wE9-Z^MbhnUf$;S)tZb)aCI{x%qQWu!7x8%|5MQU53gk!#Ww1@p~4=bI#H0H5U -z`caMVM~uS^P5gd4_&inokWm_AAW>?&J;&`**2e4J2}?s$A7B5meQz;KT2!jZ+N{FG -zIZ<1srPY^TefiN_({JUDO$@7bc82C{iC(y79&_f_Q>m@1bdUXJSQGkS77Me>$2T2U -z4l}j%9|&_76ZVo>RQ14W_ba7;rnAMjSv~$PC>oW1!zg#jwqL=yraE8ErryfT{aT+; -zy5qmrbcVtux5D1%Ovqr%J)^gLyYlts7Y=WhZ#nP#;f~f*q0*&%WvdsYhTL8owdcmZ -z=+Xyk+gi6*F?C)N`xI8VcZR?5+qH486sK@8*`Cf9<&KE_ksqpbVVelkx_^%=`!siO -zF|mi{Sg;qZlT%!sZJ{A`I>GIn(F!5mV1r#!Qn9j5jX9rIYIIC_E$|}Ps>&xkUhKYo -z$tUfg?{!JS^zf$Ev^deEjO@B^ -zx&fEhIZX`OyMIBUo?i9Xt*umP_;pSD9d~!cQ!<6jIKcwYguFX?ys?7LNma -zU;PW;BepA?*QxX4ul?Jn+x323E&Jx)>Y49D&&)mCI9>Xp+^I`D?jJl7zVXrOS7$$7 -zDKgWKkN4lFrJSp<@zYiJ+cUOkUi@`_U)ro^g$)&IC(L}71U&h*=a#)_;QMv|ezPgA -zSi64Hnv5r}S4XTVd8WW!{w?&(v*#-9f7P8I?~9UHnf|F@m&Sa+xJ9p~u2%_Xt{j -zkH};?RT3!dUSiD>T(;8d(iM%coF9{JJh&Jop!w83EkrLeefh)hlcqNHr_Q!}|NEA5{#8C+XR3BROA$Z$YeA&rB6aP#SKeQ@=9?>J@^9`>_GzM1ImK@*`zw2@ -z|J(I@g*B1V2hZ%=rh8p->WNu}PPVrlt&Q2rCO!|&ub8$~ftCMF@}_%dxZYa3WnVrv -zP28GG+CsbZPhZyZKl(*~uaxbXv$eIse6v5#r!9Y24Y%%>mFtPKKE(XRD~_+kgXwS3z=i{9I6 -zYT?>EYuB$xV$RIidg9halaMVP*P^~H%KKZVeCstw%*&gf|4mJ{v^Z9Atv^ggDC4rN|!lKJ&$GQAgnVEh!+w#1c_S$2Y?TuZ&+<8z?ynNC{tqZ?OPm1l|!uPlB -z^kl=eIs0qGnzpWSWLSK+Qhwfo%&m(uQ!j1Na$;utdw92$nx;(4hVVP@6P<#{i%(Yzh5b~>g%nIm@In!z@AMfUu`;+ -z(=XR^snpR8#Ka8%x7%4-L`APIxEeU{Gghn+huzkHPa -z^-6?~XVH7>eto|%exF6_8~fkOy$CtNv;4*C&@XcjJ&pWwwKF{BVZKp^a|w6$;{J`P -z5$^J}OB*$=Io -zeqN6M(znt(8@GJ)v9^mA@?t;Kr|o~r&Av(2>$ix_ofCSx)w`{nG(0Y^bFI)lTb_L2 -zaCqd!ihVh&`&zWsDL+_FH`LZ9e#LPJq_7`PJpi -zyR>5GZQJ$B!dOa7T<76gx6Lg5J%K+oIhG2D8%$-jW~gVh-}kI_V~NAzqrZ1*&UzaD -zkL~Ukuky*yw{POF?vGy4sq-=6#hs$sO;SsK1~7 -zBk|YUU0t3zm-D6XOkZu}q4!wGQAYjcasMmNxkY~Hec^j0ETZ&WUrx&Lt#ihw<28O0 -zv?Kp%Xl&oJj&-Z$cCX4vd9F;o<7emBR%v@YIs2}kdG^Hp_EKwfxIT7qIHpF%%jHJ7 -zobLRYeep-)?re`P>7~_2xv%S+T6AbXeS5%e;*_5E@83^9f5Xz|M3w@h`tgt1`J4GI -zCM2tF7u&XALo|C4%j`_!EzhkOk~3yMzW8@;mZ_B5oQ0(U`5zXqJ(D6DHr@E}s?KY& -zEOS}@{r&k;>GH3mPiq#;zqUIpvAp4p!tR!J4e$Rd*?u~Ca5vN37`r1y+ph_Tc|A!M -z{9Vu{_I39S^|e=RL*5)!*jI09b63yrGJE2UAd?EH2U$4cc-@L9r%-{)|_?4O+z`QY5Fp$FF^^n -zJv`nmeS3V1|B3}M*2})^oA|rn-h)F4OU?BT8J>5WU7o%>USZ|!n1^?!lqjZ8P4domPIc$A0@1pGNUKf3*L1zw+8gEtt_g` -z6T8wqLDcNQtm%RWCtC4HA6~g>mP63ug~`)bdz@dq`el>b#l0o7S@o+wx=%Oi3!mgt -z?Hc}RjeyD|*Xio#jLeQr@yoe0W%_5^nQ>Q47M|Rxo${qY^En^K-2auCw(-?3)Z4c7 -z_%klZuqrZ{`)aF2#WbRu+XF;e0SnWYUu-oi641Dldc$qIR@b9;?stKf?R; -zMO%=QKjUtTnP>m<9OPB;l!*ya{U%Ye&{Tp!_4FErxT@x+ON`C+t5`A~ENcjk7Yg2W -z*gX17n`5tSv`9418vP^>JFiPO+EUmXX1?}wR*e+xOb-zeST`px#h`xAGR -zj_*9mq^=`BXZ0QXm5-i34t$v=@O1f7?RU>N%l3wb)MXX<++JCK@Ji+9h+VT%4EvL| -zd`d1&`M1@zCG9#3cfHRro5i%b+-si0YOV6?$Aup%o$G#^5WQSiKRso_d7117 -za-m^?)BYQ)PIR`p=xp=s_oA)$PPkdANNckl)q3RB{5^TeX^%Hr)%DAngug1DnB%nk -z0K?TsN6p_&|1xLI|B1RTaqS(d`bEtR -zbGFX7zdZLHFDc#g_{Ygvu1 -zTg-EB7Jfg*bc_i(-0Xh(E3=c49Bu1q9RGTmYVkz)sBjn -z3S27V;k>#pLH@vnzxDf#95YgDAM}eZm~6}X{>Az!vTeT;WXw{S_!)aePrPx8{<-Rb -z{>SQ>JabQfSb9IXtY$)9X5{K{WA@`Fnud|ZCd+>pX3snBQRchF5IhF_hfSh(?OPeMUbn35EO-nZrzD`Sq=rMgBPs9bC- -z>9^VS-1|4%eO)A0o%<1-naH(f%PxidBkZLY?QR1-`?%Hmd8^NV;0d~PXSKdkegX4q?cZwglIGXUziqS= -z=C8Ec5qUo&y*5q2(NSgdvyjz`487)D&k9RgJGtd*<1sl&w#bJ3XN%JL#gEUN;ozNk -z_3^CknyiTm4oj4*P8^b-9QXCR`I53#Oa~5XZ$2R2H*-py=vPIq1MW-RS3R`}bxoMJ -zwEfOP<_kCW1ThKE+1c%6a`r`Lvb?{Xx<1oJ!_P)qhuqE9izvFbm`m7QTON|*xUI)1 -zLghGDjlpB-$u(PM?Ag2G=47qk$9wOs-t2!{<%>^4T}<_%{+KfD)g4%I!8F5urD -zG@r+Qs!Z?;-ZK{;w#j{zQ;KSfuxR8yHa}UN?~C13Az7n_z5d}n>-+Dz983P~aOx|^ -zMf2?oA8xG`@a^Aud!JL>rNyrvZCvgUc2FkVJXUyTwd{@WnTDyqtV%cZ%h*5dk(<)# -z{L1x>_S&_tN?ebx*>ELpgcBa<7Yk>GV4483am#2O-(=`o({y~x-7D@>v(Awtlr2Tlx8uK&*V&iVf$pRX48s -zHo4SgaoN?Sck1+W>Xr2kr|`YM6uWR~f9#2SJDqC|UypvVK29&`sA$jP=xn+9|6O*Q -zDTqD#`Xbgc#WZSVt-HXwrMqP`wAHs1zdPc(p2g+WeHDnVe(YS)b^YFsN8U50?wDe?x^*U(;M>$^-+rC?+5BXe -z=8_^t7Z%Y+ng*eh3S=j~^DNl0iTjrOndRcKK0mLi-^qN$=0X5x$2E=*D{Ob{^EhDaC#2u= -zDc~rp3;X3iFD19~D*0a6F5@T=m-0>c*S5}S53-`$_dOAR7Jlg6hYyS1E4am9U3{tT -zN400*g?+Oc6vI8voG;G(QgHS9_aM)PEzbpRda-J+xVMJkVRx{Py_V{V&4POm+4cSH -zp7_n+?e_Yuol#qRUjKe~U%*jb&ir&u^qRHmOa@nC@Aduu5P@fY2@vi!(9$GKX2C_gPlRwN4Y2(Ld%C|7QBhr3(KoB0D-< -z-f3~Oo;?#+aBoHN^u^As%g?ee6DZ%WRKg -zL{DGvT=V~Fr*BZw#jt}W{O+dVwOh_{y^ok9$D`bR3hTNlO%VyFUi&3MI^~eE@_ptt2EYF3Mmu)MMJT*^C97K5l(Mm9)~?CnTPt?K`u3o8rJv~4+>GNB9@m!7%DGlO -zvEJZAv}CvA+6Q;0FZ{fs)gbxI+x!Qs-p#-5q;q6nPH)1iqKex}a -zt9G*fAH|}gLCSgxm(%p -zG<`WN!Qf>p{=hm^veZ?VziZy)gLhmE)L)!GA-1HXAd>NRpZ2W#M^bC&YDfL9jS>4Q -zT)=wPKx4Y8{?D>lt|NcVCrp&T#>wNRcfG~E-ru@ue~pESTF2|Dm(^K6s?0s|e{-b1 -z;Y_Axi_(kJf9vclmJxZC_b$~u#wUugUGso$)9Sb_Jl+a&7oK(eUvze+@I3|2n+g72 -z(f_p5LTbvt+~nK+qc1N>WygUTtL;8C{+*k6Vj|OnfFre!MSWYCKQD=WuD)f?fko?= -zGIJiueRNVfCYtrR9sA)P->fg?!O@K}iF3H5drX_$|3|N~_RB4ZI&$yi-&M)eUq*Op -z?mo+*y)kX_yTZ=xZ?jWPj|m-6I~V6rkW_Nrt(#-p#JIh0{M*fcC<%OVd;cZt`_)CI -zWpB-7&D!Ia9WKBB;gw%|{GG4m6;T^Pm7?|=tubH-2u@8bO3p6`PV{Yj32w}@a5V); -zu+B8((bRk^(;z;*VUa+mR7;R_J73U~+5f-Jj=XiGz~t)#_ENd1%L@w6H8Uz1 -zm9c!Ybvwi#JYVsKR=7!=a81*~u%tN;1bHP(@62}ml%qA%hf)5A@7#!WzhtyuJbf_1 -z#A(K^AK%w)=i4#oVKei-r!Tt7brMp0EmO1jk; -zht<-&idA|_B3z-e6Q=67rEAvOW*rE+bWW1R<#U(QCAoWjYd>}`zpCF|ZgV2h^7`F{ -ziyGDccy8EUa$ZmO>l#+EK3Ne5hNln0Cu}d4`C}yc`5F7wA4&iGpG1dUY17hXW9?ty -zH%t3yT_~&Jr{B|Sn?I|D|Ni@1Y|z#-{$&&Vg35{lilod -z-uKT?FFPWhu*P=NUIyR2_iPOG8H{xntrkBpzx0abH`Wgee>^#DpTID2QNTX^x$R;N -zyu6-MFECuc<(?GA(t0m;FSq%tYUlUUr2kr%xopW?yKduO@xAH0+&`H;-K#$-hQ+$H -zda=bkp{uWq|ywTG*s=j*K6dT(x%^7Y-y -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 -z<=edD*4SBC}x?2pn=ep -z{^biJ)IKWtg|fB(X}X@5v9cyt;dZTo--gC@su|kp`d`(m)=asaZ=ApwHT#ZHWVN~s -z^Q;*@?CC9MKJnZ+SSshJqS!xm`G?NqM?Cf{@+<2weXDOVt@YSM#l_n#O!s7-*j2xFhI4;q!`drTE7QW_ -zWcuH|o+Q)yYW8P)|Bk&jbu}5Ml$K6j@MxDp-aMuOz}T_>tUPCmvW|t9jhxRN6Iz3DIHMccguCQJ9X)=v0%ay>4m(dCXd-X -zQa#PvWL{}ZJK(u}qh;vMqEi8O30oRAmUxFhc&&Rky)Sy@^KFwiE;?*`v%yFqY^G8` -zNio-H3B7Mzr%y@LeE*Yq#YHF2t3<3=Ni1zSbmuA-^z#U9qvUNu6@-usZHC=gi)Q<%4w-H+g<0Gje1;vKDoLknR%su -z^$}Olye}Qs*l%>6rUMg^w?LC -z-|bN!`R7{|~R!hHhJ(t^m<8|0eCuwiLC5I{^>KOM`D_W`J3v-JU3(Rcn*Dqgh!cnZ*#3?@UyXT&wLiq_nbrJpHTC1FNGfC*RCfT%I`9y -zDOfNH+zW8!Ie6&iKes>I)a@A7pJSf8G$uhfYdzD3<42~-E^p}(-gNuP60MyrbKdPt -zzrDly&M~IP&;RULEm&6L|83R!yW!LGO};qXviQ@}@J4tp|7X8Te5WS_);HYzEY(+V -z^MQG%S4Com`Q)dz)sqb_R30-hZ$4L3_q1@aB-^6&DkeTW -zcJi(D9Ix*+Z{v+fEl&`BaZq$p#}1|`XOtfo-S4_PUu-w`+L^a>bli`6?@ydk!y(>5lG<;!n%DAtp>;1Tlu*|*OQ -zXFRXpn*I0U?zZp;Q}%Q$Dm(pK`sR%5*54PNkyRDQ;bRcUOmAq|@qk~bg0)fLASdI@ -zgx&{c -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 -zE7yjy+*(jBM64(B+vG-%`u? -zc>(Mt<)5B5|Kc%ud2XMBqpYuS>*Aa@=@!}Z7HXX~mu|DWtb4Zn#pgM3#|sqZ#3nyT -zy)1uBKjX-c{eE`*CW7qpuU1JI=zfh9^%T9VegC-Bx;-)Ncet1SmR_)=vqWThpjV-2 -zUAs^Kd-Oy5)UUg)EVi?`;FLd=_uQiY`{sU{zjFPD!ocs#PhKuxzWblG&34NI=BP%#k{vT=1c-}&o0XWQnB_aDBLwAog7{?i*y>9cD;bLzjJ -z<#XB3J$pCTf-Tm`f6MP^`z&?+Xdv1u?eptAV`PvnUwzYy=O6C6Gqx}>7$}q$h2|v+ -zY}l}!(beEn!JdkPZ!G4_53oBElc}Wic9)X-VWB0fBr9GVJ#gKAZELX2dLE712OPKj -zMUBLkN%>7|{|{TtJ&v+`8S -zy?v^-8|E}-*0#;wu;7DC$J0+f92@3w1~1(h{h^zA-%p$VqmEBhm)QK+x^Tv+q@5~j -z!iCQro>lNEbop#6StF){2mAFp8sa+Zd1eYP;a<3E|MM3toH^_4*-M*hL}nXE -zhVK+U@?}Rz7&*|8} -z@38&Ttp!!v9|~`@+J3d~(vKjU3SYnKe_m5=OFIl#ncj|(v -z?tSrm%-o4y^?Tgg?awXQ(AX6vwLf22QTl1x{quk7s*Y?A^wJGrFHvI+ax#>$-}$9$ -z|K0u1MZ7Ku9~STO=iy;3h>DHhJ%7XdjJG0xrX)ms)L$jAZ1Euu+2i(K{lD=3Tlc1B -ziOC#!^ZDydEL&}Em6dmT`FOv46J}}nbb;Kppr*A;x4b?$Wy4aJP7&S%%Mxb2k2s@O -z%9io-dCmcc^9*ZauV`MHwse+or`nD9tD2GN93M8nd3TG)B=<(o9JS>WA{(_T>}$DB -zxE;;g_f}q7YmN}>T%{tz>$j5^&*}8D{Jq$;R4-Vj{4XsVA;Q*E5$@b-;J+oENMF8DRxFuHCgb?1NV+)KJ0@e|Mc -z2<n;ZhUXxYj+Tho*pYbMZXzMnf{=#QJZz_M-uqk7i;=G0DW~932r!p!FEpnVS;kWHE -zm%hXG%f+3a3+wi+crvTrC-iUQft8(_6AUgrnO6C`dD@LQjWsWJ3EsZB-Xg*Nl;D;( -zoLp^lrD~ZOG;(TnYHJlXe6T#g;wz*fdzX1KgQG-L@x~Lc^Lykkl)wC#H_vMMl%VAE -zf(mb^2z{LyCc7$uC(1*ka;=k3F8iOBB@Y#!?&%0(KWUov^YhDq080^Dw?m3bitD0{ -YF4zl~Tt55QD|CPH*A;zBSp2-%09L}i=Kufz - -literal 167476 -zcmdPcs{fZEBjp_Veu&Ta}U;RpC4zJCM@5(&4_x(=iHEVw_Yj9@o -z?uZG?W>0;#f%mU@kWJN};|5O6>T{=QFWi{AW&MNT74d7#PRuB)UL~^R>0*H!p@-SN -z|C&_mDw^K1+xFM9s#8*0zZw?tnVLjYbUkZ%5V2s>ISI4v>~$Ajh(tZKkbJpE$L-=| -zlMk=$D;^h#`BiUJ74p!HE2@0Z=zejh$SZfhZEkZ)zbWUu+LFR6{<21Pb3Xgb(?M-( -zZ4-TryDrw9*x*_0U1PA;zItNZ$+!~EAkIjk?N+;wtejNh#<@^*mxuJ1BK9TC0aM;p -zF+be<`s;@HijLcwQ5WB3wp?Mk#MF9P^JPIJ)BEscrCo=XePqZi7mAl!`R1E`Yr`+w -zuvP9l=TB*#^Oc>yC{%ME_qwagCQQ!!=(BbDnRIvI#p~bIZJmB&QFWcju_HIKxn`^v -zSysMI_2IV3v;M1m@a5q@EWBh{&;63f+?*44jtV=ge@qBin7V6@(Zhr1suFmvX7P#c -z+WY9jr^@Ez%_}cmD?M{``YKM&S6lW>tPQuGt1Hp}^}uhh;H`3E4-z64Oi+qdcb)Lh -zq($o7CC4TOufBr9rbJiqAn|8&lCIs34cqFk;5tE~|477w3*z}|^4uaCDjd7^&Nll} -z{PrQgk^G|D@+X**7Y0TgFjHp>^4j}K@1BN*9`}Bp>-P=jZ=D{oXtIR2ch;<49>3g^ -zl^#5zI{E#_qiXooK3JRYf6?Q6=*SG8pu=CboUyH6TIS(Y72@KcrJlE3f6 -z>}AjPR78c|+_LZ#i>?1czX{jmJ=!j2d9O}9^hGUm`PcHpN2jk8%qroWB;wKA#KdI~ -zBXRh;!K*7f=S4+d@<j|*&Wlsa>2eK6ahzQlX-HRKA*TR -zs9#bmmGhFoyU#a&U2Q%5eWMGz?`Os@Dog$fF)N;I7QQ`~8s9OPhOSE -z;wSz_JD(?lKfCeNRU^Z1zF%&wN;=luspTWbKhNjJZuP|e!qsutVzm?|O_sQ;+gYC{ -zr|vUn)!YqlU*|iE?lqokdh=x>)1-<_=FV?o8cPnBZhh5II49;zR)6CXDfP6H>20dV -zTn;j|vU2elNJvNs&Doo(){|Mg_UODQD_^yjouNgUbFY?GZ@Hy>!d3M$hthO0g9lB! -zCw%dkaYgq1<;drGH|CsqF=g+kt>1Wpa>fU`9_oZYneEk04;eh$2 -zJM65_Jz2cQ>h|qbo6hxZm*Jl-(LZ&~+$*hSs~5KD?uzo-VX*AB%s0VrIUDy^?|%R7 -z!V|4Lx#Z0cw!PQAxp+;&8v%P=>q8xR_iMd8=j`NAUH>68t7Tus(f2B|UR$zPPC2_T -z%>Uy*xe2eWKenE_xZBo4PRF^{A+oe#uGY-vDwgwM)w}pz6Ps%{dpL0I77n^?676_x -zv+X5=^L%HtW^c8fAvjIK@=v6G)Agn`WuA{*iW7K?-25({(wwo*Y0EC=ol%!`UZ_m> -zyPG4{qx$rG($SmBf4_7GtXj6}>E|0qHcw7%=95;tA$}y))GGPLfe`Hlbs7&%4&{4) -z)0}^ZHC};fABOl{&ll`^m4X7w+mUK`CeVdSC((hyCgLo+_`-3d%NhDk2*Krx~o6OO!#+o;k0u*X6)k= -za{e-B_OkF9TSC~+-7v7&A*IIFlI@%n(a)z@w_tU%75vD&1jXXYLPE0;wq-0Xg_-y!yzO2j@j)h+iv1kQ4~_2-I;;hx%a -z`=loBdOT}9RDKHFH&Za3ck@8_mpJSVk($?cnOveq3< -zae8bg={Rkfq3(|OyYnKO4 -zUG!wZ^OsI%djgo#-)nOV+uzXi>TUB@KfF{xr|@HxQJYqe%nr{e-^tS??%r!nZShl{ -zU9p5$g`K05O@f2t!NCfHhK?8NhLQ7^u)I8Tf0?Dlj1P|=ZtzwUR`AQIbg7QF@ilQ+ -z(&?ZEIVWx@D)OTUzY<9XeK`S=9ow4@aHcqednGHa-) -z7>Ee*&FElmJ=)C9F1p$v7aRqI4rChv8uG09(l@@Q=uN2=kWYfhG-Rzfmwe=qt{ -znOto2+`v?b#ly9Q`3Q6CVHOsdu*10rw0@0Pw5zB3qRs>RF-iP$iSkw;jK -zQ(o9@%Ph4sPa3D^b}q_T_TYU=@)Oe?8;+b{Y7ONHcd>EM&{7c;;_Y!^$@lWOtxz66 -zvEtW*fTjL1d>?aF#uC8^>oz-%A*#~9* -zv>&+<^&1pf=Fhfk5VVU(Dq#~_p>ZH&rfTe&U(GYaCpmK6|I+C9wMO#%zG>T+yh-p8 -zuL*ABo!z#W_oTds=k4;v*(cXbh -zL2TD4wynRt+A`UGtmQNgm||qQQ=xdyyL2J8*~d?Yd|r3QsLV7bKTI-lx67h63o-%@ -z2=G=aSNp|2;*OG7)^=o1NUdhE)`P1db0=@?2|CU4Qc3#o_Dz#kr(W{=YqEBG+t~*u -zj%jpeS?@{9GtmR+-Sy1Tb*UCYrh -z)i>Jtucj?|7`9;(Th7$mBI4^eD7eO1+$oG}_P+0U@^b9~;nll&!@F1cF@7!Pn{B)4 -zmQE@AzSlSRNj(lZvc`(Pork%xs48_StAXD?#1D?YThF8-zRVH_e`pE7*bg`>#h6U3bcb}vcXKMMMEbf_Sd~S-uc{X8& -z+1EesdG^}!`SF6q7hl*jMzBe}oN&bS*PTzP_b}zJnPiv!p6YBAd(y) -zkkD{q!psnr2^pJ|>aHAc;TPcQ<7($_VQLaQaIio_hix-sQ$hg85+;pJg+~k>j1+vC -z?(?QgL@kulOZ#0LBG7RAo%9-?=?5>wD_=8OEb6B25pS9i{E;*F8H<-jqs!kN;m>9~ -zVegMsoAvO16R -zqm-%#Ligt!JQ#R<(#^ws|FSwX|DM{hhvmkjQ~{GjgTi}$4=+Y%uG|~O(Z;rEj^pZ6 -z-`sUSMSNNx{bbhN^TyYIx+Z1r>HE)npZQPUl&}dW?}xYubKmjw-tP7FPXC-dFI&y2 -zTx@)nMzeGRY9!m(nC~~+UQ(LE)0h72c!d5P`y7U?TXUNVF8n<_BPiy_x5G21_(jKf -z`k%NSwWD=0PvFClimUEgaUovC@nu_nJgV5S%4yd_bxry6mra}kbo+UA%5FJZwdC3} -zOj%Tsd|6uq=hl}-{$^H -zSZ+5bw(-12{3WHIFJ1nLD|*@BJ6N{;IWi -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 -zb*5ZX#nw|R`_x@wcK -z_q85_Vdsg~rvYDbxkaVJ`Oaua-|(6!;}jc`H&viOFzN9#6^@FpSM&|4lUAhkE}Alf -zrJ=t1XHQvn0;kUO2?bM@o|^Sy>jKqk-E-$eWNfV1+x2!$-Bcm@!*$)wr;pzX3Crb) -zuF1=su|fR6CFZM|2OkGy -zZE`)-7_f!EboJb@-qsyEj?OPEn-Tw+XYZF|oORQ?Mb=8q->Y)E#K7Zv&;{o5TRYxc -z2+%cSdoLF22wx95+3B*9OMi#x -z;h5REansGkUw^tgeb#Hy)9!7Zi~8641o&o}{9c~mEngNVT6mmuuG>kimCF;=_C({!W_kdR|gM0yRk)S)z3XwOaE`0btc5_4a0Rs&UIJS*7W)x?|mydML8x$ -z=Jdkp8!~>)_d6fl5a4}{FG=ylicssV8{cSrSeAFZ|Lfl==W=(hU;pV+hFN)$z`jon -z4GFUvU*0_b^{ijpznhJ-zhvnz{qw4@F7@y#{aIi4NHw2Rmv=n#LS}11!HMb7nZ;Qx -zH*RnRt$xDtIPY*)!XK65W`*Fz3z&Q2>{rJuGudbUWQkX0Ro2w~Retlg+MU{*XLF+P -zz3cT;C*-HEP-{34x?$a~Ne=_g?MylP=8@vd(|xl1zM|pPI#>ugrhNhns%? -zbk)nBxNYNw%o(g3_NM$_cD{`}u1ey_&2$To5Y142#fyvHO?uPOeXIWauJu=2XBE0; -zsvMTFOu2l`$o9{aFJAf8R?`)_j6bJqZTghoW+i;h==OEJq@8VStq)SttyuqTct5YA -zHhjHdYw%jr`9CKJcdoFsD=TZ&eZ^q(RPl`0`ZXFE`B$x%pU_lHjqG4u?DwkbZS(3? -z!6E*=sekX>4bFd3V(0s1@xSHsLaR3LHC%U7bWbXs9Brb%)3h{b-I=MKbM}O)Ew!uJ -ztLvPR-4nUrE8CJ$W$THz5xw7f+7%<((yP|&{GZ!rGWXfZmh}A#f43y9vr_(g=D<_= -z+Uy2-Zlji42e>XMHC8fz4D7pGAf@*p(l@`SJ-0T{=-b--^N(Zq{(Q!NNb=&iYdgaJ{dV%^epI2XQ*FOIJWnGVe!L9b%+(VVD4;ZAr -zr!Gzn*F4r6?7cTzP&hWw-7GFZhv#aSs?`@pHPf2u(y?*R{+3*4{I -zo|kr?lK#=@<$)I>oBA)@`JO)g>#vy>>i;8NZJD6(G0|qR(dC}0bH66$tG(YBv39@G -zTan$VzdPBgDyL{(N#e3rzOw6N=<5zv^&@4J?KexYFe>uXu&^o8MGi3c^0hN>L1 -zcFGM8}_w_6LN@yKda+ysOY` -z{)OvNy$^UgEBKejX%zJQol#kM_)?|V`BJI%aY`$l7B5a*a7E$D)+5GE8o!RGy15AU -zmAm}oF;3Gr)?eb=r}Cxu>7Q<9P~}uj6_tz_ahc$x!R!3!;~HiYLgwoq6-+ -zIiWT-){hR;41}*;e$V|{KKU3+XFbDFv8lElnjfD$`xzzA5wq=kTHDD3XH>2K1k8?9W&S4> -znRRnof@#g>Nk2~NGes_LXg=TcuP$k;ik@7s_r-J9m$!K)zPK!L{L+Ts-J;GW!Z%K@ -zt?6rzi)~_pRj$U$1ztEmQuWAH(K@r|mAs2Q_WFM#Rc`?)O -zbHYTS^iP4!a~x9~&zV2DfBxpGMIK!7#|zV5HqR`bIO9fk -zPXD9Sa!Gq$(E~M4#5Cvgv~u$1xo-TqU2}zl>~@9TVupo0U2JTx68;O6@O)DH#PlvI -zbXjmn<%t-v4Sg@Fr=Gc9;qsO5G^=**udZW$I-H-D2JB>HyyLLtpVG#*oyLBr7uxJy -zopXTg%RR{pVo$erKkIYn6n~J<{@_W>?MMkdrp0;LFXqUr_40LTeTg-mlGLghaj;tH -zg$XN5j_8$a9hNgHw{JT%`uDTt_QcAq=JG83WUS<#*qPk*qehI^*YZSN`y8w3*BV$f -zjhaH$Hf{QNM{@tHIkDo*tDbD%P< -zIK<_l!dI0JeuIYIf36Sy^&Hq4x%SJpU$&gn#g(>(*&d&9@Ialp>GQ4~)t3q{C>KAq -z+Hmq$#Rk64or^!bvSB{Eh%I5yamRr24_QA>aR11=Djjt>A$G6vy`Ntf?UK0=A@cdm -zm%0F+xodl#9P+-d6MW60j=HB{l5U|E;`>jX(M`e0uPh^PYKEU?* -z>c5luzY<+1H^2TK+->8zX#SGsHF{kPTzfiq7#;ko{@w8)qrgp*^+{W2Y@W{hthAc3 -zV!PBl&n+vZ8bb70UvvIwuzb0zd5fT`yhL42$Irsx4(SQ5*JM25%`XslzG6<=gNYnm6a7tIOwHY6 -zBeT4a_Y1>f_uHkvPUn3UUMpT1ZQOD4$BvQ}jF$xY11=lgyTs|m?AXzDJ?ZW0UAK15 -zmtJ{$Zs5V$kNQ+4rpZT)E!#$Rh -z*GGIPsfhm^Q@--YmWi4RKYJC$N*d;VQ7{eqa`lvA>r)Pkf1;;5nhK^Z?a53~yw7q; -zQ(<;^rq?wgrI(gY4VM3zjr5nNb}HQ2)Hwa|?o(ym`E8CfA~tyM{1aGy!N}57_gHy) -ze^9K#UtUhF?xwQJWu@zW7ctLTvV3u(^sSewUKUS}>J&Az<@Pb|;#TcdnRQBHRjGQ| -z&Pm!ivlp}FEnTf_S$d>qSFuxnfx*J>@0LZMnRX>WwlDgtO7w}|r&r3QjGGE-izEdO -z-{k*$WlQvfH7f4;LIy9UC1ft%=%F%yM%<6w$`5A_3F(Ceh9ugqH=6lyO+sqnJ0{%| -z|2965{qnktlV!&4J4(Af7^|LLEDBl3Ca*fJc<)k$PdS<=gwOxww`;TDOW{;xY%@v$?BMTU51KJa_agF7nBB -z@>$2Db5z)`J^jVuqNciQo1eW{=e%P2)##-Or4e5iKbU^!uvJ%4&I6TiY7hKtmgOFI -zZx7ObvZm;2%(i8#I6d}E+_UtzP?jiX>!fg<`~DnEJ^t-2k@u>ieyv$}LAr;R>-Li+ -zsh?OMZgrpd^sYdX^LDxG5r#f1e!l-ONu8aP-*jjtb`g8ptAW_hg^IqRaL- -zS5M??aXbAk;)%D&zK*b;`^LOvkFKp- -zdzxOaF8H3?m%Tmpp39FKQAvgLALYGI(i}b=?fPU={!~flw4k9}8PE26%il&feej(t -z_rl#t@s?HB!MSJd$ojJ1O;D9+IJsi`OeG~Jl>@Cg8vR!9{@&%e6&tqSd>n7dLtfJ}*?h8JeFOmr;4zPa|u?%ZE3QbAAh0=zQ(am$ira!=$fyyk^{G -zAEtEr=kD7s9qsQA3j9q73wv9CtI4s*&)gg|9N$2#Of`#9Yr1s%lJ2@OA3iD -zZ8@H&^yKOBdZG0;lM-3iZwwIMd+79mTjf)WA1t5uC{sCT?OWZt2j^cbHxE*TmA2CbcpD%mu#kLLAe6gwzIE(5IZPQSGxAoqp2?FYhPq?lX -z{@Z)DXhU5{gOrbU<07A$cj5d!EE%N}uUdMl9a#E?`Q5JaUd`OD*QdPio-Cf!$$lZz -zNZ5`^&GF^NJ%=Vt7H7@NSZDFMZfeWXE7$!vTAwSa?+Q8K^M(D{a`U&X!DeecpUM8+ -zwLaDV-((B9SXOT*^XSDv6O>D$)$2_ar->ggkLLdTiKTqO>o~E~n+3OexWtw)uMAjk -zr)%?+#p%!q4a@R$@9v(OjxxW=5$7H)WmkF32{kn?`W -znyI?Nw~wuPeA-8py_?l;vqm}GcF1c5K9C-4Z=cv_$eI3^`fB0|s{fV>iQ;KBs`-ET#F4k@GYFi_Y -z9?8}U=n=1abB;s&)}IE6D#dxLoOV~KiA*!uvY6fF8E>*eK(O$kqVK<>LwJ%-ml@2t -zJXvM&(j5k|TfXz&7VIlJsi3NPP%C)eY1TiEH{EUZZiT&x-6$X=-w}UWXGg7n&+lhh -zCUfS;Y1j#^__ub2cL@W7(`@tJ;Nj7rfncD{bY>Birhom=3Go&YP&M^Io>P+{yLXud8-}2g|%yzN^tQo1>i5 -zmF#W*UDAE-^vX9A_tdTBuvq+zr}#~s^6Z<_6R-7lH%*dXayWI9XUxHqn$C8~O-@Rg -z5vPBgTFg|j-SPY4u-wLF$GuI}{;nxpdS$M3%LP82=gnri`KD1%mI~jDd^~URV;RN; -zdU~;2CK`V6d6E|#IVC_!=u-ckixH)Hp2|Bo%$AjR>|$-P-SQ&h&tC@PNbVcA3b#%2 -zU3z8Xi=S5Uf#+`*M*|fXsqx4KR -z&Y8iu;eVlFkbEe5}N;bN|kiskRr`hoIvD6)VJ-1)~QW*6^ -zhWTRb>SgCnpON>E({Nawxc7H&zk8~ncF`99w;F4H$kxZGADEo|_c>?G%Yu144l{PD -zrOb8{ELoJJdGyxa%l52W*ZrAtp;IjGZgz@%_T6H&>$m1@K67vTF=0mQ-qS7TEY4JHk{tE&A>nYzx9W!UF-d(|4!Iq_BOVw_G4*P155KArv*QH -z-qa;7)@%?E3QB$dy6J;~!`8o*3r~E1l;HV!wfXU7r3cU6UG;&(Xl7Pse)N~t>Bn62 -zmv_&+nsIyL)4nG>C-=x*KEuy*pvXi^SW9#d>z$`_GoSC#>zr<7*}3D4{-<0wpUGj@ -zjb5>?KcjOmT_pIAFZYhU`?WUhW&f0LC@$vU$(LLH{MYo6;FV!FFxhp)=a~rBjw%)3_$UzI5iE4JL-FgZC6fgla>BP| -z{FeD2R=!_axi7`iC12Pzq{@&hX4A0{7Rl1L`7B`%R!o_^E~?D>K}q*w%ZWFI)lwsy -zqYb;;O1Q+f|KYsxGF3L~N&)|BOW8?T-Lvgtxw=lzXt{hd?ZnBy*ZNYmHg8*gY5m0c -z(LW~{|C_CCTkgYP?&`910wd3ot7ah6ZRrtfV@inWK -zC!Q6p*WcDrbfL`j!KaC;K6`z)q~dgS~Fru6VMduuSi3I#=oTe-YL)3S9fYez3?jdUHPN -z$%Q*jN5y_8|1NEB+u(S&^T>qoJ9%esigdPYWvG~SFv{`Q?5pXzl?l9$ZG~@GE;+Ty -zd7A2E>2sg?oIkF3Q1YlZc%7}kaIbUil$F0t%}jDM -z7sxr-L_g_uh?yX9{zb>O74q#I=YxJqIsL1PzAT|1U7W<-;Wk(0$rig=z75WkG=8ca -zZ=bYUW9ILINS(vxkM1wDP*jd_-&G{-b)45`>Dg4fv5?28kU^51SBq -zI~i)i$nZe!{fpv{J0EwR7fr4cxE%9cSzSlnHdADxj-1#t-|%~fcgOE%^p(Ap-njqg -zyjyzr!=DJ*HZ_X8XMFf`p`Yu)*(Wxz?ksFmIhdEM9u_`No+mPVBvP -zYv~W0KvsT>3wm9C0#Yycv)gI!dXcQPcaPDpO%on@m>IC>zi`s|^Z8_H1;@hwPne6> -zRII*|nj6fgyK+l8^W07mqKs% -zv#d70c9mhq+TN|t9cOX;?z~)$zp)xlSGM67;q -z)u{IV#VX_EF6q6CjAI>dKAsuA_7(5FhH8DmBO7lym#BPZ^SK)yS^D(bnWGc#rRZMz -zb0thid-u89GU;MT8aw4mw3nwGQ91oAx9XHRkN4B+4MqXkJMO)+^I~X;yE=XS{pjg` -z&%{)%6AZK1)i!m`?xLv@%$ldJK0Ot9GP+rI<590o`)mu#qqkMQ4lWZBesP%eJ4r5~{N> -z_PU||hpoMAD-ScIEK}HZ_~@D{##a)3D?bUAB{V;Iyxn`N{ETD%=Xw<0+`rM2f8)^N -zos2VYdVkz(^C(Z+xOflG&U>v+kCIeugqpO2{zc5r3A(v1W170_T%E7q4cDlrF3sv| -zF|$0cEQRWH?P{giy=)kC*+#O>TF&S(IQ@}Q>VELD*ZMIwjH(nnH2uu@S=(OYu4O4 -zz2$F;*VbyIyw9H}#;kg{;QHzA4|~3>f2o>dkst9;+UC}j-!=u$;~3`cYQ8Dwm1VTA -zvGMwgg*o<7EOoDh{P*unH9dX#_QXSvr$jHV$=Sl+X!}f|EKmBRMuKl}$oi#xaK7HZk>u*5w(b5HV7Tjf>9-q}_c|2fJ1wl1o*z&}P=^m|+3{WVp#(T5Y= -zI8O?BzR8x<))d?HRy_L1g+@Woiq>Q1Gaq*>u`o}IylByQ$4cGzliRE_(<;55?6E$f -zl(3U8*_kET#4T%zqR;KJKQ$L*TuWxKHjku!Rydu$9l+vgTJj?z^LWUgCUpm~ZT)56n+9n;d2Hif%|c6#RH? -z*?Zc{-6!*+62>3SZuZi(ofmf|DL2==3mrw4A@%o;-p>$0b#Eca+nW>Na6%8E2_>BU8!UM!j3I -z4fuDP^4**exaw=e6KS(1D-|JWBgy2A;!Jke>BmjOkOkm$*e6A -zD-A3R+Lzd^Rn^||Q#VLRk=c+$qu|9ifWAhme^`fTqPg{Ff_H2vrQ~g;T`*FrRF|Ho2N21F*KJkT2V)LAr -zU-Q%>&taV`*Bt-&iQ2z8m*!iojJ^MA$pg_HrR$`^U)^}ODYKiof6uMn>e4H==Q?5& -z-@GuWy3uScyzyYJX<6jy2S+}>JL(vCcL~Sb<4<>5_8ouR{Zwt|BnHk22ln4Se*K!L -zfbvwUSw-`ilB=YIHm8`L+RSr(#f>jPo6bdv9eMe1cEFAXuh+d-t2Xdm&Qtey4AQ$~ -zl^yjaqi^L`)Bj3$?rh!CA)|JN>4t?}&dRnmCns(Wh}e-RcI5W5v$;m?K`(kFGUrq* -z>oI)wVNX9VL-&LLiPIBhTylBlN7PmXx@E!^?VMKy8D -zu~d!)kArol;SmK7wwBWouR8yxS43>sBrBPwXr3d^){^;zQNCBWw526AW#b3A -z$juBF-`<&2JbBJpuDW^hTKZZAv5Td+`d^rT{dI`(OvCb>3C-sYx%yqOoaw}G^rE!? -zNiWCIgEhVa>rNSuMrOom$5{3QznvF8F7Yiq_Wc?PWFzs!sL0vNX0S -zl=?ShX7+t+^Eh^Tha3O(1y8gBcXj{R)Y58o^`LzL3wK4u?Hd*Pw;MGUPCJ`!*0#k% -zHR2AJH1{PzyKgI04g`0-s{gS(xxrGzIn*OY$(}L(f#v&EPJT%mJ(g*oC2PbaMW^$1 -zuZS=_zj)>JHLWMy{hynDWHJji51Vq>+e!7_O(lo5_514NB0k(St_Wg3AJXFBpddfn -zE!}BFbciIw&)=5w^ehcb<{e6oRB^qZ_eQAIb6HD>`-4fYcJq&0?&J>2Ja^2>$w}^L -z-Kx)~rc!!+!JBvQ@U&8#k(DCs`O#(V1HpOceDxI!N<~<9)}}Zg4egYy`R1bg;N;96 -zHD?DF{%sHMYiumqs#W``ZHst_$PYF@goAq$$1< -zE%xB%{WBw#g~d0p?aSiv?vI`mnl7LF*x;|hHo>N3wcIAve_`zW(^DkpwmfZmoqaa8 -z>to;|tLY7Mv{mkCOPhY4SaC#K%H!?oV0Z -z$=w*eiL*M*`s99IE-|G)F1x?J+-7%#H;%tw=kC(YiZjo0y*Rv0Ep6(4yGvY5wjU1I -zT~qFvJ$rGa#QTO_)k6J+)1AYT9xL4vR&dJsx01i_dgeLVtsfbZZ|Ph!c(Kaf_4H-_ -zw2Lq2R&C*Ab+fkcW)w1;#=qY^qUHQj|KdZ>7hkYF%~aOPRnzd`r0+h%nrhi3fe&%# -zo&L|C_Vz=s*2(G0>*oG>z0X>hPo>E0BAaosXV#%t$C$V;YVYFKIJ~+kZsXh-TNBZf -zaxHtGKDA|eb;Nm*rZl5#`pboG&sLnv6XSdQ=2LiDP?Y0Ymy<%5^>#+2MQ^q*HTDgD -z@@=|h{M7uwR7s|8HP-kqD*T!g7Ugw!D`=jTjIkCgvf=&XWPa4C^mzLG!n2K^L`3Y* -z>DVn_aVV*WW0K4qt(H@Z=Kh_U{`+rTR+u@|c&YAuiu$TCkML -zaUA|qnR-T}&3#^RmUBYv;egON`*IiS+kc*V+*0;MVPa0}I}UqiWfR3eR-4*)3gk=? -z2`{|l`R@I;H$oa?OR -zzMdlfVBH*tj2#;oVw_j7TNxakS)TWO$AjlQX)_Yo=>OdFFADU`m5=sr7ETljK6Pv5M9rA;-mfMuIned*G|s;SZ*nyTGm@T -zAyMHC`@}k(?L8+~F5W$}v18`G_r{uUIZi9A;4_cfcu;e<*QLO|$2!+JLxiS0pVQ$Y -zW08706Ulv&LrzIbLTLiKh`^W2tn;$=>+I6*_OmT|%NzJ{V({spE7NNW-zFVUU|7NT -z`tGK?yEd(pSGn?|x9?%T)_R6pNB6%tb+l^#V~_hyuj4g8MLgv_nE!I7?Z=<{UVLC! -zvAZJEIL)N!t1wdI{j&#NU(kAGiGTw>JT -z{^@tf-)GOOov**EbNCT|Y|ZjdmXXJEmaNn0k+PjyXTNUsYG<~1MG5tV0kU%>xo3JF -zusOUVRi$lea>j)OgH`1}kB0qx`etiemImivwSxI`=4h>9(l6LOfBmUj+uOBuhN|^PuWb$s_(KzetR5hQ=CQJq&xcTKwCa-?X{>$ygF@cLe -zo<1^8oM*Q73ghF?9kSeyeg~}o8oN&}(Pze;b*-#F*>@P_{kfe`$@+VT>&?PB-7zZ+ -zA1%*pa@s0${AB6hBjGZkXin5h4VdS|y&XzBvLH^N!CiPFYp-DkElb1nWCzD!0;M#r&SUuGb_wN5=8DZgu)^yA5kqPm~*m -zo}IS!?|-X_TmtK-m-)|rR-~uaGHvbMqm!RHE_~d2IeY7=qh;^5UuWLCG&CdN$@=64 -z|6-P@eLcNsMWWlO1vxGjH7x?|=N>b1rx)H@#C)A|uYSz(N205~2ko_3{nPK)OXa^T -zer9qayWeqJ#{Hg{W-@JQBir%yv)ArFw7&ZHu6L6sv)>ZTl3&8;ob6IKH9G9R&XJt2 -z_YdWtda`k%X~>IT#w&MwTIceg*x*wCIzgW)fkXBA)$np;_O9(>6wL#dgK^ -z&HfqvdhY5uelk4Aovb~W+1?x4h>B*t|Mk!GXiKx?hw3DzV|hH&OSPq6?dz*JP`cGC -zxpw&*OGPHdMpnMn5u14Ka@1Mh=;w0w5L3M4CF8BNZO)b@23`6+XXi=ZIe*mm@Pa89 -zFH8|p52w7;7{Ptn9OCZnPFSAZ7v6hDhEW9)=+4Ia~ -zrP2A^+QirrzAyWyt~uF~l<;dlV}aeX -zC%XiuShsGzALp2Oi6<&XdFobv -z@sHZvQ%}2Qi)O0pZQ6hR!p-!VUb|kd-ds|te{9mJ*t_2<7g?M$a}?QJcZ+3X?TPmm -zeCcl&zjRR9Q*nLg>ww@*tN!o3d^u9;<ZfDijrR@hQ_lP8W@}v1Q-eg0v9%D2yuu+O4hX`FbhxWo6^TRk@b**mIhz9Q?i0o -zU!ny=Izy8YmqxOPA;S-bNw0P78xj`Dulb!hwWn|C^_t}-3}P17eQy|s{w`d6WtM*U -z%kFPhD>)bXcJ0}us=Cla!%(MMV`bjd$$H)zv+suNdA2NUYsb;oYcjtkCp~WwW_$WX -z#d!vU)$}*#t&-()iZ}1>7pUXrInvay@n5jzxwRJ*KZshanOS@Gh?)T#1sdYCiuW&7QAJ3h5-^6gZ-s`}kfeYMEG9UlZWFFNj$ -zcC(u1sk|@5es;mZq(A(}3_E+1FK9;1J;z-0Bjm4`gWIN6>(PV+K{<(x`n65^ -zo&OsjO}W?3zSN@a;cfre^93$Xc77NBF*9p%*8K^c(^6C8Z~T+?{=K3{LGV`bKgF6C -zT|(y+R}@!#(^)qAL!x-#hu?gsEw=4@{e;sh|Ha0Q{cf>A&x&-DMRflr@n1RC<2u>< -zf(XZ}v`^M64WA!w{hzjNzhu@oy>`Y~!hGAE($>$I_+PkkMyp9%VUTXuJ)0l5%GGCk -z&&#&7nQxp?V-$8VVdMW-FUx*93;d5Yk-wTQ$LF)f!#nVabB$lvlzp`cTQ@3V~2Jxg>`zJCi2NdRsS#Wsl^G(~KQGHzb=Z7;4jXq>8K6 -zRTgc(ePqqFCEI5mXS$&qV!QgaQ*~#~FV$Ik8cXIs-=iIA8ry%Xu6p|k+nA;fqA;>Ss!Ifg3rSVvtU3=MH -zl``M9mqKIMZ$Y4?|+|BPh}cCP{w -zU0lU`r7c1=PAF+hc{y&_W%#pAM6k|X{I$83a9j6RuOrjVAANM+=T-5rAl7D@1JmWVQRj??F%)E!mTTtk`%N09%yoBd@Q(M -zeDcwR^ewJ4wu+m4?p25iO|q7#uKdLQ^To<7-g}=adbP6T>vAdzh$baZGbyYrn#6x_ -z>&iRli=`%B*^)Hq6*TcvsH7Fz9(ImF6@W!JuQV#U06?bXwlo;gtM -zmr`@J)l0fNAXCe?z2t8n>*LGuZy38?$!J{W;?5BC$Ul~9cXY-Eo;gb^UrT-5uYEvPEy?1qrGCo_ywqvP+$+?Un;K>ke75i}{?C_CMLuH!;~Sy}#kwyZqbR -zf9clLf0CTUo;~4?&}^k6uP*t0NnSL0-3rept@@wWuWQLq`u@P!oLQzbV`lS}9@l)t>u~@4;%TpJk_bKi-QyqBGOS&+h!uANS5AhcGHH -znsQxR|Jd#gPj4Dro_+q{ZHZ^sH=MmXwOuZ8x9CRSR;z1^q&xp}9B-D2WWM+wb%XPF1O2Zj$*oC^5GMciIm%$w!O21xI0zSdNwy@t(Yk&Q1?*e>6-m9 -z?b8?jslJdjbLVlk?T0;|%UqbPoAS8Km`7!4z2)39fk#$Im#E(V;>ObWr{DVX_Q)0& -z{hvC?=k3pMG3Wi+oEGn~Wy{5<8zyK5o!!`Rr6!*vAu4i1R_H{5-px1mZhJPXt@>)B -z!;$~zwQH{m8&6sJY17T=>>iJ-SvMRwDx}E3rt#V7ca@M#m~g(Sb!e=M3;&~Ud4h}M -zvi0sa$Oq(1%gfQ((v_Q7aCfdiu_0ezCadwvkB|6&zX)l&d_-qY=+dxjJ=+q^Ji~K# -zt~+WbapGH@F#Cil&mUynU^SX1v_y@$o5iK9CE;E~XopnjPV>Ca0crItrgkC^3|Ltv -z_bl%`-h|nB7!iLXL+JzCt>pt2)THP~; -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 -z+kP!x+9 -z%{%D`_tkxeQsda(Y=5ZeeAw6MP{yafMsK%^xTvoAvP3Dye|_x{(^+zDCi@*i;*H#& -zR(VIBOjm3CT^?c5^rA9~`?sR;)HUCmBR^fb(QUrNx3pg;@k)pGVS|8`k*%8A=lo0` -zhBK-m8zq4j%g^+Tpx@e!=pYTLL%rR3y|Jx0`W1T)d$w&*XN;m&i{G -zA65F-&Mw*_Jf)!hCYQv|i`;Qsm&KS@Rc>^goX+o1oEN=cD`9i#dPke;{I~xvqbqsTHDg&(sBP@&zo_2=Om9~TrmvS6m=XN -zWfCXze26*eyP!)^X;)O_NfG~RCbNZazukFOcSEpwmEXUTxs!f&>qt&m>+V7o9YkJMoW&>9!uz13CJ9=4mnUi)&Zx`jY!S>t@uyRgVOUI)Cl*NG*&%8=~_q -z_VdTrm+$gq7vI?SN^XnWkHph!q8l#UxFPUJ_WN3aL$hmtA8Qqe?n|D&$Aiss$ES`< -zKSiA8I+X8Qu42!EZU4r1NnrqUCeUiF+k -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 -zsIw~>7J~wPIGbYIq3$&I^ZqB-2DK -z8B$kR7WUsQko(eacZuDN?^VCaKHLN?B~Xq`QeV -z^p0EV4zsP^k_AWXbf)&Re!p@=HQ&M1y|UHzrHpTyIxh-v< -zZ_#5|CHJo-c#J`T8e)xHu>h6UNmcN&QGC?pWjtK%$of)P>1>D&+r&iuAO=! -z&F3s!Z-^MImc4HvG+*-4KDV&%JXgM6s8tjFKF6cQ@c0}Cp75wG+If35HO#YqE?hH1 -z?@H_E41Xt?ost~9hdy3DKaY`9#J9N7eERkNoICP2e8g{Ey5}9C(sO-|urL?9yv^>I -z?-#sH{DMP^ojh47>;&m!iz6>+2rv3b~(*;KR$PhRYutEuP2;8A6kAkeyoXN5zi -z{5{LeS#u4{l$y7|zPmx>Q; -z+ovvLxKdnpy0T{FQRV4k*BmaF^Xxc&{e;FuW|iZ9i&ibZxm~^PZ&B$_)xXx7A`dzP -zU+rEh5P!?H=KM;}5Yd%J>a&jMU6$XbWl%kD#)H|fP3I=5YW)uW>baGv{A|@+#h(>( -z7_NBxZ-0JEC#$IG!c3dqdy2^q+LpY?;3#vu<&*T}QbY2~J7s;jMl~Jvdjnmc{@E8E -z&c(-9D0t{! -z_Hf*mFYi=cIonRo{;J<}&S`&e>%-%L(>mWy=VTF(;z}3r=<&{+wJ}a%FVh>=(`)8P -zF%>4BO>VgQsKxeTOZ)B9tG5{W8_%j-(KcI`ySGz*+wvm$Sm)rd@R{i=ew|uA^RYn3 -z+AnU8k3URrk}W*;Hfm>Kg7)(_{v0>YR_-scV9l~zm+*9DS^2$A5tj~T-kcdJ0_o># -zf15;kwu$C9dcHq+zPR*D;L(GLYkze;=bpQayqeP(UnWeeqQ-u=a*-AufIGlce$bB?5ihNcP6MBsi(f#ey8;5ng1t(W^gP2Ow_;m -zZC>ZGMTNPCZgwY#e!F8nY2u2h{$+=DH1(CO-h6tkY}tZ~&*Qwyr!KIBXKC@xU#^~hqE@$oB?+S8XkE7|wt*`^$G -z`~BUw?=76eb#&=vhgZ4T%?+1sAMB_#n((R5Y?gH1j=VFQ9~k9d+)%vyKL4ze|3Y~h -z>BXhbX7?ZKdloJ{F{e>S -zLY`%Hw(PX|Yt&hfJI|Ds_mt&ke|w!T;$!oD+uG8MJFFcZYqzPC3SXWlKKG%=+@yqA -zU7jm$xJ}n#c{D*OV$YMSGmiu;*2SGfP~&)F;i -z4XmjfUa0F$+1RruokOvG%3YTh(eAtFZmY8_++%j3Au1}?iqD?yC9{wN>`x?T%9}3>W4l8mfx~yk4^BO+b%NMRs8?pM=JgB<@l#nfDIM -zo}ZT6vTv2qkz|+X#dp-sykN?yI-=fl-=U;DUGc~-k$tKHqH+#_bDu1cD@vO5m*wq# -zj;yktDduMnI^4dta{ZKkwz*SgWZZtPo3686sn`FcsX*+XB~Sl)zPv7Rxbz`|(h?5N -zl(g9@5+8-`On+@ZTgyhvmd`sGXMcI?bqh_l{kF?<4Evfjf7b5ZWN}n8 -z;mUO7;D~~dKc@bV6)zW5nw({}^0^q|d1XP$rCV#Cr@u9mvnY7Td016V^2cE(xA4Df -zJgV2sXqv*=<99UQ$*L_!SNEQL+1Yv0Uo=i-UQZEeF?%ggq1W1e^l4-E^&49szcAwb -zcc9QIA}7Q77u%MtE1Rvjj`iGvCb$2! -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 -z8kiak=?s -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 -zfK1B1NeNGd?m4$R|KC-l`F)wez1k@ -z+V@qyyZ%*PReBG<#+uYA^LWf^cQyQc_~J{Ke|qNxd7!w?f+m&s43F{^uXdVY|$9^B&dMH|9z`a!;3gGf1sWVu^X^dGWhg -zOW)K}#l5Mgj=k#(5iZnxTYGiIzXz3J%Xy!i)2;Mg*~mWi!M5tO7fn-NAGybNt8L1! -z`&^x0Wy6$W)m_TBMaM1WEI!opPS5OA=n@wDx(CY-s4lzvrCRpt>J*#m-d>R+W~)<8 -zTkV4bwNy^!n#}R4$Xe3A;F+eAqHtG=I?L*7$JF0>%@<>xS7Rz~SDSZ`iAPKPmWk}^ -z%e7B@?Efk=GX^oJeV6x)3_AL?NZ{`;XCIG+w{P4KTCv*nskr_M!L)ekl3kXma@Wic -zovRURNttESyMNBvgp=V@oZeS%^U1tCy|#bDe74&kJ|;FhK3u*xSW;<1j^WK2!5SBy -zK1+Ki>0n{f&h~1b!MQ0sS*h}jo3E5J&%C`(%z){Scq!kcGtaGlt(||(o^z6)_nLPP -zUsvcqwpo%E!>`A-eR5*ky#w!k#8s}>eh)rUB=+A(!@g<>SLKw3gB-7mZ7#S!xbVw< -z8mF_Ud!#~0%3`($XG11-{wO=spW@1WS5Lot7r9cq_<8z$ri1$@_^*4l -z=uFb&`#X9X+b_T0{&*p$*{SO8$O)gf9oq4w!1^VhM(c|=EGOC8wJly&wI$~K5X)bo -zeYgJ7pUZ!HJ_a3qdrn*6VVISb5F6iy-wwUY#gnEkK6FFZ_Ibo7^P&iGw`V&=C(ZuE -z_N0TQO3KaLSib6H|2vHtr#ce$eJQ$n$yte6vb$~7hUGuno0m^K^YiXTpRK1ipZ_el -zV!L{u>QV5y$y)mh&j!v& -zOStbT{o)mK%l>EKin$lX;SKlA1=18w!?Z#zbeT1VVx%b*;Bj+{U4Lp)h3%1t<2$mm~ -zwY|4O|1(ckSz-FM~nAH9&eHuOQ))9rj6(-&V*SaDO~O4}*Ro*U}Zj%`o14)9E4 -zsaeH!SVo9X?eFf2t=EB;pKw$Glu^8aJAS7s`AwC!c5iLJ-4I83dOl3x2< -zXYHjGGhXhr`I#1-$%_oSI7D|K_{yJ@aqw3HMniuF0d -zvq}HTm0OpYSiSPz@6&!=Q>{3E^``hP-YStI%b4usDvmFI^YUJ-$l)`o>Fu)F9<6q~ -z=cII>6PMIY%U5itf2^pOb5>|+@x_JOCojazwlbXcJ?7(z6Pnw@w9HP==ieQ3`~I>s -z<`13u#Z2A_gcnZ~oxFUXQCwnf-_6;zFCA}g|GGHHK%VJ&^o71#Ix7}uF01~YW0Vx$ -z9;U&**gE^AlLpJlfUbnDS89UuRCZr{^hI}dC4aN#s>6~S?=IQG<&=Bp!gH;ws~Cz4 -zVkNm03a|fvxFU2x9`&2?U8>twYGmweJJ&N`?DldGj9!+-;tia(X}&XP580JKaqKBasG3j -zLcRKcrwcb-XII@LpJQ9`y)AfEHs_){4Lg1~90`$_rOB~k -z6N^(n1iZVxSNPl~=7(lw-gjn)roMdpD?#w|rjI@a&$ryP5%HP3t8doSyrrzBBG)dR -zTB!FX$vSg+mCQrclef-iajbgwhT|=BhrR8eZx0UHp5(B#(cUS&=WXxp+Zpa=cO9;* -zs(Y~|Uqh;x^}RzF)8`ZRO>qx+_WKCRPLaM9w?_KIx_?C>>=jPU&vu{Yo)9+0t=r&b -zx}1f;RL1h;lSfqA*?t_ota)yMxj}rj=1leVyKLV6%D;JQSBbP$PJw2omCM1ztG#kd -z_{Hz#7KC<(Sg0QPf0KWy%ie^XM7O7tm4rWixfHLP_gs$6{7KuKJOjTSU*^5~`LM^{ -zc+smzjGEpVeJ|N_b?ZXx>};8@+-CS6^!ByL8?JdR0T1VWoocB3y#IXi*%DFhg&*ht -zId(@_M*=jcQd^YLM3|!;OnPJGFQVi-6SN?&)7|O|Pp;j)bLEHg#$wAJ -zL`~-5UcxNyH~GWzt);Erf4!eaJgH)TzeUDmxhgLYvw3#vTG6(Sq?eXcd(AfMA1gOp -zry$KUm;LqU`QD!UgR(XVrSW@6Up?$>&NrN;b+k-wN3_ -z)$L%vcJCJHyPMQt8#99| -z@5*lB|JxmM;6U--wuQ$-9w)LGM)iHI`1kIU!^`=Pb28_(vN-(9^WazWx)RYCb+u8B -ziOItIbp5N{dy=@l%3jToHpuukZj_Fs7zDj7i<$YQ#aaiZwjTuGL -zcDxL*p1JwRA*WkFtu9t^VDH}LEzN!#t+uP3To&;tm8&F8 -zaM4nuNvSTYXFSf0a>=$6xe#2h^}yO|(#$qL=CokOiLX<8FRoktH?LUGzvXJFrs=KJ -zU+)fjbqC-2T63<#REasb&@KGkt5ZdZd7Y1s&QmFooD|;m)_wJptD7}5ABh+{8S3vf -zt~K`P;B0NVbK?HAPtGkmf6rYNUsk^0829qG9Xm=VC^ye}u*mn(vgM6;cv_E~iz~Fh -z%zDxB^r{B40QtafkNM&0&!76MMM*wh7`=M&!dKGqk1Yd#&Rf2Eh576Jth!J|-rI7O -zS7pEdJgoZQN5+m*yzET% -zyD=j?_^o?h_A%wx|4ov&^%gBu^IB}6?@|?a_@n8n4|Q=rvTZk=DGvxUKX>x3ZOFZC -zZ%-fEw296Abk -zq8t(5ubxIVWQck6xxCVyo}w2n{-9VZX3sQJowTp)Mi;g!X>slP<-qF9 -z9xFamT{qF??Ek=XM}&%9Cf}R!=Dy^%-TGOI2yyrN -z9(d`n&JF3XFj>6|eqEKv@-Hs5bDBJn|9Snx{nssK?6)^AnC!LFl4;$3>DQ6Zt#749 -ztL~nl$?IDaj^!3QAd3ObVB%gfW#hU&k?~ni9I+4a;?ZwwF -z)$oga*Cpvb#&~Qv29J0Xh>1U -z6CTqS7PetO9zSEr_ey@>y1wm$lj>IG_OQ=eWNOzfpO()lzenepPrCfW>@`Qze+k?@ -zZTG;p`Ig}_OJzm=$5Q`hocZx>_1qYCiKOMTk~VJpEXABT-DUgAy%B{M{2P8+zkj8E -zdhgwBa<4qz9h2c+u|)BU7xaylT%Q}tWKJ> -z>a7E(yV6{-$QIS?po1^Yu?Aa}YWQq!RrY0gvU65KN;PNAz6TQ8r@xkWh6SCJv(Ztz>{z=iuB{oij8zTo@&@Eq3!o_jY}yWH$Pek+dW -z({-hfVKo=>=4op!RlfC$MR`TV=d=Q?Mvemui#3(pD{bA8kJ@A9mgb7G5=aw!;J@=d*#DlIs^tA+CcEe835|G#4lxGzhBXIfZ|?74@{_XJX%s6LQ&$l_NAc)u -z^ZvOD7qCYy*}87K^~vMcCM=ftoT@hI9LGj4E7_fu-vult%RZQ>EBno2Re$Kqc;P?# -zGL!UIz2x`RUR>X|aBgSe^oVd5hX9t3oIw_z8!bg`Yho>1_1mQXyyq*g -z3H~;}<@?sZcT?^vhw_3e*A73oS!_9T^W3?&!dtIMPmj5%sa2V;p1yBtY-{}HYk>y^ -zt$1(v_%C#kU%{5JoT^Kd-D6? -zg+SNY2TnZS(QVs%aJhNCu>N23Q@O1s`y+Z~lP7F+Z3z$%;SWym@jn;~IxB -z10&&DL)BiX?|st8O4qkq{L&Nox9jiW@E7V{p1$){go>ih>gv9^^FVd=qbQHR`KzXP -z`@KySyVoDXdhbF6w-mdm)R$wbv1dvWw}z%l+FgBSG(k}Qyjr-i!JDg^6 -zDQ~`A-yHJcgwDz3lSJjyuY7XqKDY7o`xi45yw^%rO!;lT&gjn<_2>&)Zzdj-UC_^a -zkYi(2kU(bsVr91L=MS8py5Ont`(~d;$=-U0skMB}(x3S{sANmlg}VhuYCh+gNuvvmRZM7{to3w<+_i*pm-} -zS!ep>pB|t5$(nl?2d62QaOKU-KB33h -zm^b@S2;W|NZ3f*lJ2;=t7S%dhZMC-l_1Wi^%tzlX%c<4-_BDFflW*(AOy&d_w=j4| -z1};$)OgtHF5&vij|dd*$oC_FMbpI?gHOjXM;geEG_x!^u934xVrB -z9eMEf^29G&%-mjdHyx0zpY$TPuy=cMl0)K$Y!SKJ7kk~b;N}QbC#U7S#$J#{s;T*>x+)E@=x?kkzkJzyfHuTfEnAI0Q<&l8FpRhV=Zoa0$o$alr`nt;cV -zo1CXzF8PI-^?#E7&`_0W`1R>4(^rYl4AYgit7~sfzhZT)i`6gThx{?ygv7GrkER8* -zi>R;eiuRCqxSZvb|D{*BJN(Xvf)mrl=N{qJXDw1mI{I+qM~USQiQ$n-f8V{@{<*2` -z`LFDI0*y&6iC03m_n$kortkFsz>0Z+v8S$1ousXnHK{w~m*c*#pJ(YDikp-oQ?8gl -zcgOF$_M2HIAHEr1&Ba_1D!TUOfuoWN^(r?X6#cgd3;FcWSf_};EW2^vbhRG;gxd#& -zW0MkJJDZ#?o0hdp$SXVa^Plj%2EW=HyFW^_vMmVe)?w)Hzvsue|J^>FD-5;EH@ewG -zTJKt~^gu`W>6`1y+(+;K-mkM!vY|lwhB -z-AUWjzGn;OHB|F0pRrH;vRrL}JhPp%O+zqqz;&O^Z=HDC+AgoRaB?*D+f<_x%xEOK -zeo~LW@QS$_vKjhfg7$V&J_;>MzMgy?m3(d1lvL}N;=K{m60X&s$(?E~U}7KVu$gm> -z%dMhlrBB)R4GaCAKaWnEN)74yg~ -zVpV74vP)KrIWo648%AAZT32FWKo%yC;iFIck2lX1#i{vPIuJ5H_BXo)m#+}XML -z*JhQ2_xV40FOXt<@c5pK4%4-tOcr}hA6lH!X3{hN>0@?y!^H%P#pYN1mg$y;#VH5b -zsBg<$&{!jCI(6gqsFWwJ3$o5JcU=3lTw`{!?%Zz=T?)<}YW`AM|0&|{>%IT~lp9;b -z2|OtZIKO7aD(jyPGSc!rZ*Io9sPu0v6Wn8kX|(dAm}tkMa4JZ?35J>;5sEq?p&Nd<;VwUaw+rG*wA -zU7ou1lD6mTV?xTC{%o_T-^u#a`%-GheiQZIY?88Dgf3S7UXq-~n`Qa&%#`*$50|Le -zUCWl*(Ui70P1zv*0qcR~(j^zKNDCjYf25OCV;CbX5y$Y0W8SaYn>QMF-^(^;;JN;b -zx96f%TwKHJ*1+~HE|APi{Oc@Tak=el0%N}@ -zd76efbfuLzK4*G%w&kGF=H0w4})h7 -zFVa1^uTM=)dMOza;D7MyvNf6(73$#|`?$D%C@SePynG(Bt9I7?1Di_x^=pEkoy-wC -z5mkTjX?w?w3(vc!zw~_1z_F?_LcPFml3!%nD&D8b_q}-jwpy&#(D=B`Zq-+d+7*_Z -zT&X*!|9ly;?Q|0R`{VB2$8QIvoxAbF-+O)N!?aJeVzZv~FX*4x$d;a=5Mwy4YRkbw -z(-Vm+IlC8LpZ4K^z02lop>5s^CGNgftO;NeSJ%$d3swj{vqylDsl4eCbF}Tw0v7Gh -zxBe-ywv;N*ljT~*5XUoha_z+ARjxnozg#oFw8?Cyr_{&B#qVRq&wKRka(b@Zb)hm~ -zNp_T-`LaH)ASa)*`E@(kH|t*Ae%t!g<|npn>Ou=+W-*E{ixM#2y*MssmDZxI{Q(PD -zEo)QWF#fGi{`+nEPo`G&oicG{jQo!kr?oVQs;7rJueq}R(z((Jd=oZ?ZZBb4IP1tl -z!PQmSk(L`a{Z_ql@s7H{{=NlU-_GB?e!=}cCI@^r^(_uM>AR-U!u|1@XqUMw&Kok{ -zaxIVQ?fboc!FiRfd52qKE&3m*|2VhmQ}5roaWNC3OB45<&NY~H@_*sBXF+)$jmum( -zj2V)-x~9e!r)tNZi}AlGcPC`u=c?D=mv`-G7BJ{pxopHctYg3Q**S0gUpd*8yquk`x#M5VMpSMO*~G_`vb7FaNGQIENa;`?WROS+ZYOzsH_ -z3+`1pofXu1cEzM+t_nXI*0L;BOxo*Iwsgh0PlvuY25r2=&&Tn3|F3NyfB&#PeeS2u -z=|!b0S>ArqSzBu58yOHH9IB~OQ?Ng0=Bs6!6<+NyaPSl;Og%65X>)1tiHZfr(>aZl -zSnnnjFZ!vwZIgodr^-K*LZ|TtMJ-IPsFn=8n&mO^Z-wSr_JgJuta8QHEvks^`s#S< -z#DW;Z-~XoWGutKhcoE;u0Hc@OMcl7;uh_85&i4GgM&9J0LoUBtm=~_lP?`L3qQZd< -zSHJ157jl~4-=J12Y-_zk;j}T=VZjev2fKql127+k9BUJKh>`L -z-y_~MH9|n=-ZIBu>BR -zT5xySk&wyzSo}n;)oiVXe;gS-oVv-YKHDrnP-hVHN2mS -zR(=egqnIw+Rfqui((%iEb`cvc}U>qBb83`^4!AXJ3VbqZTvZL+WGbVjR&Q- -zDhaKa==^VobiuR#rDi;KqMl*-R?R^h-b_7Rerkorw#w&MLzt#)^;K}Y`jNA#xA0LD -ztHyOJTOQTxL9?}aKOQgWH~A;Dr1krB0}qvC;gZ8)nMr9?2hP<5@%0FLzxdwt>EiR< -z(vn}^x+#CnZF1iixK>ajWo1#eS4fj@#%6~G_og2@hulJ4OXi5Yu&Qu$kPX;9>3m_i -zLB^4g#=J)HI^CB)vuv21PWPQ#7|+zrUZU>1|B#Tag7Ohr=Y0;lC#Oui_^=*7y>S!weml -zgS8SGiwie4RPxI7|ND10rq!T|JGkcA*-e+_-_M-;NlDdX_kEvlQW@P&k41lYG#y>? -z>buBUttZVf+$W3|7I~kOntMRxfuu#`wKdOzW?%2s*m6xQ;YH`=PYYN1#xZ=J==fmo -zdflngvVP_!H)hNJ_np|7aVuld8fNv@daV;@15}GVQp4C2`W9_?Uv$OQSnAtTHWq))1 -z^L=a^Cf3Z4srV~=b(c^=UqkRNvGSCwy;3u0IBk+WZ_Kv%{kB^<#xnL>Qlxnn2vo#n -z7VZjAp4{X7!~fr5<7K`glkA-zPkL7x6Yitm-^%}I(#wBOZ)c^j9%m5$;xSVu`mX}# -zvpn_KN$&F^_s2hMvy8j*kArcJaN`@fitSA%8va_BueZ0pJbe4o{*}j50z7WlOHPs2 -zY6%Wf*dfbXbL+{@R-JdZtLzW@Dllwr{mA&v;kb^vfy;U}rh9=?Hap44Rz)t$f3V=c -zUO@WxmJ>P+bJ|M_bFMB}xTz(EPlZEZqS5#62bYhBS2$%I`)j=SxWb3jtTCioVomTMQv$9o+eVU03 -z*I(IN&HZy&Z=F_O_UFo3p)#j82L&>(QfJov=gKsp_L|Htp0AzlQ}S3#UuhSgK2)OJ -zRWT{hRG=vEV!+kEuk>$6Et@afXnuGqCrc>bESH}Q{ZkBYANO5YB9>o$pz8Yb0~^op -zeBH3Up`lv3XG=qOj=#?8{nlX`GX#>R`B;}Y2d%!)>$6hvscWsY)zOT3PE&SG{WYh&Q_E@B@~(`!3Hn!+ -zCky%b)P4xwx7~!b_h4z@dhtt%%=gZD9er|K=kJAub9#=(TD_e;jPDsV8!voq$9m56e+n_+@|2E(VXV*R<#j8eoLx;;CkP1|@D2*xfl`Ml)&d+o!e -zEY<%KcZOW44Vrt -zrU>3ZM(~#UANJ!wr&zlhCxiwxjn`5F9f90X;a*;=FWqsUa)2et@#kNP{fBLZm -z-^aYo(VP2ERQUGH?W;C?#Uy>LUg!72Z;GqB^Asu+L#|Z*JL@P>%lzT}+37!zyUl&W -zcf|5tM2Y&lT_5@`o?hO2S3XYDIL1ztbw9)UU7NF9ltM(etoh3re{Qv&&HdSnll!cv -z@2s+T{H*hT`^P4&z43?DYkFVXP4MUwJ}+ebLfz_gSLCVvG1K;l9h+2nb5Fy=q-P3o -zvQm*57p7IO|J=(^aCz_A?fFMHhgLFAj&|R<@Y&sn+1~nVvgQ=C3oSjbcU`rVxh*yC -zQ%(7;oNLn;-D=BhTXZU$Cp%}^j0|1gWouscxP1F|F)XM_*12oG;SZj--e>pNEPIgp -zZ}IhJ*~9zWjCSv9bnfuuoAvvipi2G|{eaq6CzcePEjh|Mp}wf~Xph*ErI)5`y?3VO -zlNr~&@CMmNtCjN=8&3I7E>LK5JlOTsV2Q#FPh)rM9S>JN4yf82`e;VNy02oBJ@-^k -z`|gpdXE@v9LWHD%oZ^b-s?S}`A8OyM+?#3lH~qWD3`?mIbKZnS2ZR;PN^y~%MhGjAK` -z{pOfsq6JsZ1t%4;bNlxqD-JQ -zaI@@do4aAIf7Xjn`syoQ+vhQf^~^`hs0|FEhi6-~)SYb5%a$rx@VMsYMimwdWA<13 -zWW_Y=qs=z|G1FUfdf$`Y+YdkVPO5C)GGUhgw(40EMfjGb?0K=tXVJsz@CoIQQ&uy+ -z|H-1#`leo8q2nR9bXL+o^IJk?N;dui22W4cS?aGple=NQhkBxL%|s#h(vvP7>)s#U -z{QU04u8ZG*Ju#HeK#j@?|VI??Q^)xGU+|DJy@ -z+;R8r+WkH2f6S__QBz_#@NqN4P7pMBdink2rJuG+dWV(@lz+j7h{Y=X?r<3g(yo-U8N8L=|MY-%gd<@KHR%bU1o -zXjn|C{Tryr+NAU6$H!`)Zmrp(hHKsbB=U5fo#NQ;S+{=29ACCc|9mpTlde3|>)yQn -z&9+q*lF>V&x7c?tKkF%U_+3KsZ=Qz&&vIjnG`IRGRYv@J?C_vY^@GjHJyM?!VB}yM&M5cRM|EQRNk%=xvRE -zLqB!xec{ypYpY^yvexAbtBxiww^kNvzYEycSZ+ypdglB88-@1UFZ|3%+~BJm2#vOFpoyIPx{y>J|Sq<@sN0r&^R1qpd$i=~b^Uok -zGqzvYEwhLx-C=*i&kT1ann -z6Ti&xHC*n9#L3)br{4GcS3TLTK=ZuES_>l1 -zXuCFUklkjyv{wDr@uNvQoL-tUvT&bmthckZXAE-vdct91w~EV*4F$HX_bmQ}o!vP9 -z@`5iVNkt|yk9K9$+AnzWV8)7!gQq^p>~?Zp{r;ly!)eN=B>6jce;4_+sd}$~#+&Mk -z<=f}E^(SvwUpx1Vn$12M;iapmq_x>3GC$-M9Srg%(IJlKCm??>%9Wm#$Wh|90LGn)TN -z{^tHIZ=Wk;oe~oCg8l0@m)E;&`jRGhtoX7!C7g+20)w*w1A~ZxgPL3i^QVl68>#j# -z4Nd}lJu~@Ornj&g$U+tM9dIDC@>) -z%N25jvGf(;XL2YS-#9ot-1$?b9Z5*94HXM9zcIlQYmyosOhUaVrCVvlo -ziSgSt??rGx%tCL)r%NVqwJ;k!l;~AcKilbefLmBRbTMDirHhh%F3ndaX2ksDnsVmi -z?i2i{W_4ZMFz?0jPaZ{XO@hk71`%IAX1ghg&755veQ7q!b)&Nh!X*<_*3UWHvX67E -z@=@1V&bz;@etlZ6xckxMZ|;k;jON}wGP~!Z;Pb^y=GRQyjGwHr+`74Z%W8$5{}Lfg -zGk29M#4X4@CHzu3_xQ4VMc?kr|8M7gYrVogW$Dr9D#aB>>+ik4`%U*YQ-x`mhN#iG -zidgL;hf8W2*>8@pehln*{G~yr)iPeyf5qopizhDHE91|ubGbc`=hlKp($5PFRs7X= -zteLf0?-E<0E2G -zzu-eG8&c1)G|c#LQ*61b!h7>;SF|EzLw_ua@-$a#XKtA)wtl7QxzvP&Y_Zd5UkvnIR(#CCmM|I+@E6XajZBdr} -z(f01ojhlH}=kK$g@2&Txe|2tZqvr8j^Ny$dKe>EGU7KpS(zy#g8qD`KR>@l_JWMN# -z+AnLw7tb;Mq~#RG73?pgrv;v}Gd47@`*-Gy|GK5&FY6}s?E0oPcTVw>_W6c8HXLG9 -z;$HiXnRohf<%FrNtrh%xlyR|3{-iU)k(>2@e2JfWx%_^S -z&9t3Q%8vZ`ox=U(+|AyHm$Us;pXYp)Dp+toAe&ow&S#4$tD;pKVrLsXD=4o$9g=vH -z<&@cO>4k?)v$nM!pH|j-dTMFF3Zu)CX7c;`qn;Twj5HIerbK_5L2sLhW8e$T@RQ_Gfp`sg&!(w^k&_iW@;UG&UTB(JfCwb -z?pRIE<1uT0y-$*%@#0=*=bcsO8PXTUznB~|OE5?Iu~11$_IY8u+n+UfpD~>hP<_u%zMh(c{xyMxrhCRU$0EU7e&w5=$Y1|AJW&_x`5lO -zIINm`ed{IL_#7_P-$qaPk8-u06^h=|)nlBqy5KDtMKetmYM(jeTf{opQ6PSIcI9bBeuSzEvP*`hf=Cp=A2 -ze07#xXJ2c)u+yKSgW1M8_tJQ4Q%lRT{B$@>lcdo{Lj4lr7_;Pc)nP<-U#?)k32YmcWl -z>j>}9yMC!4ML9?CnoG*5`o6_2B~La^Ib0bk{eP-j&z2qgz3%N__$|z!eBP_|YYx<( -z`{|#@ayHU`cD?hhqW?ed`+R?TmM#5**qyJdbPirwc_~8v0Uy`RJ-@}RPXsHbt4#^` -z^Fk}8KYBKo?z^^yme*fR*vNglLimr^i3kft@5NqC&W$SBj=E`OVMKS$wtsO2Fj_FWzizdr&Ri -zr_|7Iux&E?+jXg{vTFB6^7vWJ&k5PPfa`GTjq077qgVZEFxRi&;&pWcgJ*lq@t<$M -zW^M2Nu>bbV4p)=qajxt3bHD3aH%+1I-{R8FClB4Y{kAcz?mm{sz}($1-G*CrdbzFQ -ziq)wS54J7&y?cc-m#Sn=Y|fPv6F$yaB%HjYJGOPMvhRZ(>msfmTB=rgJKosh;_NwI -ztK?)KGxnXSvE1tN-=uiKMi~R9oz40Q$v@}qIhNqgZ?FD3xAfYQ*={dmOr2&=Ip^dh -z85Co(_r}TC1GR!Gy7O;~wwQ*j5*6E$XZY0b>56o-WoNv2_RqbxC!uo1VV#U!Vew7e -zXKmi>|MblFn1HU4L+|nQXA4$xTwe3pN^$PzvzKdx7rZaqxX($~aJJ8vYSZ|uM@~Gs -z^tAu}xr5IeKOX$#5W05BN6FN~qJ>PxJ(t{@enc;0nfoL*rN;EC*1RuM53@GQiyXcs -zJok9|^?*6^BE_Ab?q;k1Z|2SV^pg0aP6fNnJt_N=US}I0nD}E?n{J4XMl!EtlW<$Y -zGRAe8Ute@@e%)fNux#(tSP_-`OE>eXHZ$&O?)9^1Db_o5*?Xhk`lB{o>Z%d!Q`>}= -z&kTw=W4CIZnA@9g -zWoZkqS?<6wnWI -zbHtv1Wv}+z>vHQX{dwc`*G}R6{_B3JT{pcUcw1ZR<%EqZ#G=&`pI3KW(RaPDAZSHv -zD_?EB^rbn6D?d5bR%x_aUA|&e5@_BlBbUl?fo)n$$wbZEERWwT+&|6Iu0^~&G3#C4 -z+HT)JOV)TPWnDUdF)McalAS;N_hqd5$T@A&`e)CT#n#-BTDtz$6EOzOnmGkM)r(_e -zX1o5YFwGA3n6SO;xY@S!W9N3u7GLyr?A~oZ$z;c;!e?SttGE_j&^U8XO|*hDQs}Lj -z^Y5^PtH}*NT+An%O1>4p^Qvv*#W()0?x(I4xW(uztWSAz`kR5an1xx15chI*#Z@lHK(Dtfp!h!zV3ZL#HiIog>Py}l7} -z<$q-4Lsp6BrVWLuItgjs)>B`dJi_cGwCrMgZX;7+%ue+u>kjS^4$R%XsFP(!LHdpq -z_dC1y%+!6m<4ceH%iiM^sVV|d6E%JO3zNzxFrBKBPqqwcj;oma`0XDSU9X_>wl{Ys -z&J_85=j@vWoT-2&KpesE-q2O(e&GM -zv&fX))7w{kfd?iQ!y2nA8+Q4cx`mZ -z_pCwWJjUxEwOJj)im2-b$Us}le -z9`dwg@$dHSbN_^vimI@L>G&V9urWVG{0)60+hc5XRnqva>I;ms$b#WtO8MOP%&@v>x0Q4*APVegs -zmD;)OctL}cvu(w@-rO9|#Zv1Vme)3)*SuE$@aLuqedXtF+he-wq~>~9iUvlm-*GE1 -zX7|Im6u$zI&-XsQaCj{7pK(&;Q+JoVhtr*yyq{J~GBVQMxo4Xar}9IoKVd2zMJKwy -z>%2BMzZ3k+W0^J6SuY)ine7{%e(jt7!e1j%^GLg=xNL@I==_pNe?Igj9a}eRR_=@? -zhwsg3n%~9Huu`$eZIf$af#03tIKl8qD$u%s%<#7@vpYM -z(ed;nPfuFNay?{gpUv0J(BOPEM8ijNB5Sy$zU$w84rkNijF&M)Ny?e#9X?$=%{;Ek -z(~>#0D(jZho+3?$gx(O|=pBPLeoO>bRFHf34+=*8ajoP*1{ -zi(YGI&H6uCJI7?QY4Sbkr)e3yTZ>a>OW)hmFZ|7FGZ%kVpYB$-iHXx@yE(PqwAgMV -z{q*70Ur*=svTQW=kl(CixpLCc%dNR;N>_Px9B;p1NQgV2GvBR$TS=pIL&#@V6Bb1i -zU&pI)e9{cd*%#~ShxE7cb-$}A*{%OkoT=f>!oH3BZ_jzBeCun!)ysL4nik)XW1Zss -zsnT)rz8#;cxgI6IE7MjHjyf$P#u!#2F)eY%k9$XtpJ$%@^Wo*v-4TDBXK3A@N);p%{+Ae!OE1?Y;Nb?1)mgGXSF@+Qk7_^qx;n$ -z^3~(-hnQ=uYudC9#CY9FSipL4dti5z)$e$rHBM_&;`Q%0Np3p1#UseG*-lPz?j*s* -zeWDAtsD(O;x^W(sHD#QVB_KOr(dFl)FWQG?qUKG~`u@_~&?G7CkKQN4&WeUff>9cK -zq;lW3xg6Tx*b?UU?aa}d#b^7T_~~6)ZK3EPeDLzGOwWHSbB{^%ooxwn|LXpwY}G;~ -zj;NIPQL*O!J?!l>)oZrJmghc|_uG6b%$F&XzBSw2h+9o&q2|XnORW#Km!q?1Ew10+s;_Y;<(3x1 -z-;N!nnRnMIZEOEC_hu>EtLz6)%-kw|wtRcfvHIF=u9bouJ<{zF%SGH8|N3e@E;{p= -z|3hX<*GPG@MsHB7d>9 -z*t!3c?LChxCoE&H7_9xsI#WQVd3WQ{u=*Aj{@kb!wcK|5zt7W&z4_Vp^rp94g-tf? -z{&nK0FGI(LA|!owcq%{miDzO -zoeDl!{z;bA%S&voxY)OOj~E+Nlh*G${)D@V>9Sbadj0ainKxcoxNH{Ac&o50v;9(g -zCGWNU$wNx%yKh*#lON -zk1Un8?VEh%w!k;F*cAm2E~{otx1D4)y>`yM+kGd6oR6QIdhmu*vQ>dk*Gp;6YzyA` -z4?njFA7e* -z$P`&(t-Ru-8edBJ>j{$-qn;KCYc1A(=~PSbu5^5@(&N+1$MyfY{GqxHx$+DCEedS&VX64X -zJLRcJ-kQm379Q_S@)`EE&bXwsYVXPh=O*iPA*aVv4#YL8_^z0+;W+PQ(Tzq+9p~1m#=0BQCFRy0 -zd~IZRqi@OUX)L0`i(_4<2ZS@)nOdLedL_#oWs(+^Gyj?a3%LiOGOmsuQnyHDi4 -zsdzanY7wG&wpV?`miGa#v;jiL|Tr&PfqcJc -zb&7m=H)D&AfBNaHho2uDUX-17t)_KR(~qsK#>?JuF!@>^wcPKg`M<)~Gj`F%{kh-W -z*bm#he^$u&@N{`|)~@hr-gO_nj=F{IxDs8!Wy8MD)95r~U)Y)eo`*Mm_ilXVykthK -zZs0%JC&dq$_3w&IUw-w?zxU2^jJ)x)iQisPl;hXZf*neQDTvC -z)V;@xXU%Z+IPqz3gCEP(-^*UQ3p9M(Qs;l4Cxi8=am$9nkBU#K>Q@=w+I#-;^9AND -zoDZ!fT(|XqTK3p|)4oc9NX83{-dCnx@?ZBXnscG`#&TwfDc5fw-S7KR?^sW*&DAwA -z^Brn-|EOEek?hv3d)z?w^y3qpE%(&7O1(KQz;5b%)lF>DymzKdZ+fQB$p5ffVJX9f -z$F;qO8vY!9FJ~{GxTO1{wwBG}WJT5;T`5P6^!9FO3EE(Fz)dIm)JxHgJ69TR((ju4 -zODS6EpUBLr|D0x_Z>APpG~008fiXjNCi|*&`}L>qIh&kyoQ1i?-)qG|!IF2qD(B>s -z`7VYZ3pGlSbXR}bq#UOyo5FMM?P! -z)178@@!j=)RPj|I%&>0Nk=!l8Z3^|eIl49TJq#S&X9P?-!8dPB>s%F~BhyzNNq@U} -z!}N&H`OA~i*)MIn_$c`KO~t2=g4Vg1wQPI1DS9(|PX2%K=XvJdI*eCRkGpcqa(p_@ -zQlMeDl)K!s#iZ!s_wP?9eGXM(DXCao@J?vO34_@St)GTJXqmDmWC=r3VNF1`#?^~w -zdRQ5^S~wd%zEHpQ%JSQn%DKy*j!pfy`CAJzBIds -z=j4yXojMIchnyBKIeO17CD|do9?A4NHOcj^j6lWTFg*u{H?&KW59hk -zbM518>rbfd`d)iRx|-dKv*Gob&lk@H|LL(|(R=q>UskUD?hPBi_gp8lq+;gmx>h|= -zlkIcHEk2)+r_8Uvg%_`%>e-lHuia-NVLfGnQu0ksM#-Gr)h<(?#Avf~uo~4bSpIEB -zgy4K#hPoGz>ke;pOMGnRv2vw-gye_yt_=an<`+(=3-3{R#ciRrD8Au9&)e}~6FhFxbl*O?_f9-F|ZtS?b>dLM!dxMjF -z`7N8}+Ll)r?X3J*A8nlQc|~!{jvsrx+BPyIhP+rW`Z==ou3yKswH8J{1Kl$YZFwRe -zm0NVetJLX;mMlMO`;9v)#b;V?tnA+r#$Yfjc~8#EtIwBu^oYh(mR~)xv?jZ2;%=U0 -z3w$5FnXPm9Ui$|&?vxvi3{Oqkwi>Qri$3Sh{b#|&ubY(~lrWdxR{t8i|6KQ{4SxHX -zrcUDYf24N#@tK_doJ_8+f>9|M6kr%~;sGM`8Wd?GN9FeYK1G9>IIj^t@; -zA#VchH@a`lUzYRy!jbtR#*-YJPnqRZ?&Ose3``f@#=zZ>z5c0-)vCm~kDRa6E1nGA -zzwPTp@i2)t$%i2;E_BFln8?m^!sPn5uLqX~bSx5Ix0KPjx~9up$X@8e6}_vfv!=*a -z1eMLr+4$j8w5IuKqu_(kWi~ke7X>m(J!-t<%L{y_Xiz{J*>G`UIZK -ztwE=*$#e3}R{y)M?fmK6cg~%9`G19VA@5S9|AGsPW4vanwEj%l=F03Ev8{HG+=(v} -z*ckaHBm{e|Fgs|?{V(15=g}{ZCFP1|J!Zb=ov6(6Vq*ZWQr})xp-FRcLsXNE=RcXb -zareH3W&Z+Ab{bggmWma@NU5(R(o#7 -zE!%?+cBZq;vGb5PmGt}GT$7p84wrEpN@$FXKR!3ud%L9kr$Y;N)SLe@jt@CmuwsVX -z(r+6*TBaVsj^fvgjSmki1=&51(&T!0NNj1H?IE6m -z|AoJnqz9IjvOd1?QFr2c04{xu)wtX;yJ^+esJtnQg7pX8y#TkpI2-?E#0aAHrq#h<#s -z$1_@#nzVVu9=~L|q0T)`C*tG=o81@nE`B?IUDe>2;)95+m}s*ZM-B@cR3p6_P*h%}0@9f>>{{j@*c -z@yMp-={p#EQ>H0!E@6;AaYyB_;k!f4f)X><+zL)zq3x*uNK -zYa46b(kDx<%Qa|MuIz}P_-tp{j_K@q3isAbn|;a5YyG#(tK~~#*-m}^t@&Ad -z+oKZc)HzK%^WTO??3?%gsJ*B{Pt=BeF>0#o^PWs_S*s?&9i5jG*6_ZBscY7^V0O+B -z^NE>P6f@VkuwL?#_t+L@v%P15`=ZTl(ei0Kzpa~-Z;`R##ksHvHIFTN6yr75FqXcV -zDwlELlz{|yy=Snp$yJ5#@&@nbs3(SIJH7h;AmjAq9@Uw*b*#?VoH2C$VRP~|Q}wzj -zw^!&t+vh3erm*E@)r|N>4Pvsv*Vp-;o;#7VlJ&K#!OyT?XS!arN@6vpD!G0A?`vkg4{|51j!H6C$mfW~u3cVp{m+@h2j1FSa>SV3_$Gh) -z+P`9hm3DP6N_yq1>JEzjduRQ9q&b$($Y8WTb*p4x~nC=Ua4WjN{6^7JLVW> -z%NF&$%)L2@S0`;#NK*RmGgYV6UpoiviT*GA<$ax&HQV8RRpC#IEdQ9VX#T)^y?@G! -z*Vi|{jELHBU23r|v(=-;D+TBGY&KZ0-%;pztMx;c*fz0bpA#pSAFnzV8{S;E^o2rk -zTGko;OIL!QZ9gGptLIwy!m3}Xm#kA#67E#ud31wEX%WAvqL$O% -zS!Oxc-dl^9nqT~?CeF{&b0T4V@0R#I3tHO#Oq5You}q#5YhAbC_dySVHELo_66Yq# -zI$T)Y`(uXq(>_b>M(rP$UbE)R2zOZid`9L4e;Hv;GtDpccl49xPv1%W=3Kn7_s`o5 -z4u@u@y2uR4T7`BGvG*Si@@Oyq$R{IuRk-uX+1gkBb2yqx|Ml-`UUBoXcUV!!{8h83 -zD!EPVQ-00*M@H-8(b~(UUmGb3$$7r5|<$ -z=iKy4(yKM>J?1?v`l=ne=ke5eb7Gcmm-+HPA#mfH?K8^XS=>6yT+A-}Ih^G}f> -z^Pa7*ex2}?KlozgKh;;QzH&LvY^~004Sv -zI|geN-_$b_bXQ+q_w9-PB10`k#o#ymzbBnNuzOLt){(H8Ct9Uf%FR#7oWt)lH%{th -zni$vN{r^OtXRndm+4D8#Quvpj`(G@VPC2ggLr38E{0CAW-<}BW-@dD9YvA4Ob;<7k -z-A=?EdwX}s^r!D}Sr+LLi0a}yum{0H_cLf<=V -z{u#S{IkU)>i(k)$8cefx)_VTYzF=*{Uw;2t#m|z;Kizz8c8a^)=Wf#cmq#W~7yDJe -zbK~R*K?Mi-mh!u9eXAZk`JFAx+dRPuAKpHRuhBU!vFpp*Ky9~{i-|QXcKg2x&FJrr -z3ED1}xuZS6v7)r)&a7IO;CFB4ob0GG*xs=!C~aPakzh;5B#~J;nzxqf{rOR?x8cNg -zfq+%>)3(cQtXZ17_|b&OvS}NB+1e$_^L@xXtgw!|Z#}EX^ZKF|bxk%^Rd$9mYKBf5 -z>bvrtEMCN9F85A<;rAtf&4KxoE1cM-d$``Yly|#vK}V?icxn%y+*S&WC-hUT!87 -za=rdtD5v>H)=v|*ZNFN_#bf#DZ?F8`m+F43R!%<@b7D6HinU2m^gGjWBRs^+H#*0-vXd$~C0{45qTk#lsY%v#%W -zIa_a@or1qro9FxgCv^Pf+=Dg?bl%u_?#0BkFZwJ0`#xHG$!AhtinRF36O3oq&&XXl -zHEg+Ro+q#4hc(4kdOHhRvi&8l8M3Gse&6sp>u6$3z0jZM9v_*iZ2N;*?$#%ro?_&} -zKDX_84%fojGx&PkYm&}=35Yqi_FGFZW8SvHoumIw7q?4#iSW}Zv77DR^2^%L_$4u(&lFgagjF_cK?ffcBl2(G2dfLXVsPjoY-Tz -z?c`*|zzbi@OMaa5Ue&A^To;wGuak!%dwZ~Qf@g1NmCdg^%?2TA4`X-jPW<-hE4Q~w -z`|24nQ(hbwj4NIk6eMBY^e%tng8xSxH_ZQSJoQcLZNm$epG}vCwv@Fl$knv?_VL43 -z)_vZ~+m0k{3$)u*<|=IMq9!Wjz4D+}wqLXj1LK<)XZ#YUSF8?reY40&A^fijGuyFu -z`FsEUQ7*7$`?E<=oTq_5X%TY{FH6t{r`5L0W?WOLNZ(*`Ja&7daL0_9i(89$GJK^% -z*C$yrP2)efdi%34TmlSF80LM<(rsB1>-YBECT(_y(&T&Ei*M}}^hw!!_3Y(u_cD$j -z2o9AKwSKc)&}7wuAKw~NYFRh4TCV=ner(-}MKud_EmhyPRZU!V?*`AI_?_pbsX7#e -zuDH4NVKqysD92|@4S^ZC+-9Pd#uFC1$2M*=Z+*6}-|4Yssdwf~6Or>Xl1?Ad>h~^^ -z)>RDJ7Fe?~Fx~ENz;XG-p>MLzHt>FF^v!%?{p5Ddau;pptp#^jd8-z4o~oVLv{uql -z_*YBqMYX$8tSdEnH_fn#&q`oyP3IQ;H<9(2e!-ue)0MVJK2krFA#~CprfuGvIq4UL -z3+87CHdi<~q+gZT$i@9$Ax7#;VzkS2q5GY;W~&6xR^7Lu}7z3Q^MDTP`7H7^2xJAZzoDzg1Vc)HG_T^jo*@mghU-ypBu?RZA{ -zf5PU|#*?4^{B-=7?%D2@8WZCsX5P3u{c!f?2h%=@z4wt&+3mA#Dm -znNpT>k?e<*nJbJpt`8DRnou`m+l%A5Wt9pKdTzO1wpO^asOy+|i9^?NcbNidrtNpM -zSK7OAuJ&ni_E$`DZT&GPzEUf=!Dq$Pa}BI<8-sVBJN;a2mh8!e?#s_GHm+A( -zm$fXrDU8FL^M3xZt0pflIZTv3qM5lwX1!E_oMn-pUZiw&thGp~+ogBgcPBk+xhj0f -z)UhGXp0OjVl7si)rd<=l% -zyLC%0^T`=AKi_s+BXztk@_ZN4Z+7>5!J~Fr0U0K^;o#?_; -z=g4#NA0m#f{iL^Pe~cf8?&9U#PfmE&v9wG&%Izv%;BOrBTl_@R${+s&^`_}2gzK%8 -z$-Gb@%enP%dsFj~gO7H9%y(7r@Bcrw`|`dNt%Zx)-gJJPrN%Q|D?CHmC$V>_t&G{U -z=+gQclY<&ts{4;Dn78xx0k8FUj<1|G@y>daO?USyo5U4{%0At4-sQu#N&YwA2&<&2 -zifbLJ$O)Y{lk-%l&1AlbS(>>we@|;@n{r_3eDRYvYd(HA%DeL@dcv<|pUmp?mC4I1!t|$JOBUF)@!N_dMGM8{iPtt~M1^0>-&~+t^?AKon6d1? -zf9rm-JD*92U~;aQAcZ -z(Q5bETJp`T5W`@``%Bm-%u>AbZlh_7x%|e*o`sB(cS@qa%e@y|7g>|WbY;4_XXA^# -zadrWZ9Iwxl>{xnKceCui4BcBdnZ5;x^9gn>IJ*0ksjo(NiuD1b#3|*c-aHHuzWGqr -z$1iBM`~D6;5%w=r=N9u$U(D)m^`CS7#k^Z3-n(13q&D!m+?W-=he^DC;uWpVB74&n -zO0U+Udqe$d$&~; -zah4@}m@b;`>^`|Jh5gy7pWifg-|}Jj%*e1Lu<_FN8Fz}O-BIV_6X-Z$IrH9OXSdIn -zUp)=ea`86ocr}Mh`(ti%>@}WO+=_QvpKVxm_w4SD%^MtSY7eCFZ8kbtsu7~XzwM*` -zjMQwmyD}ymk&W6D?RQ_EuHG~u<9BgDemWnyOmB8 -zZ-l7tyKT77S6b{q$X8{pC8dY1noqpL<6g&iaE^I{@~KCX -zdQ-mnFjn9hu}83N}sKT-<|g47JnlaPu$RWvR;&Ip^2auGb|JsuN%M -z*%@&DKW>&H`O|S%SZ8h;x6FE%9XcVc^1V&7c%I)|{r^ExjUUfKCNa*VJ5oPrZ=0&| -zwRUa)uCsf~-uy^kxhR?IjV$-U$@TVUAA7O)#y0G_eAV|mhqOY`-PjdMMu&Y4A60TJ -zSpW3nm#%Ux#Dfu5?oc+VdT$oQigYEhJQb84t;Qpxd&vKW=GyO6*Ig+Zl+%~gL -z;Cf+&^P;AyA2yzoXH&c;dcF3wW9*{%ZjJA!?QADMGh4AJ`grB^8`jYgn-1L8nkeO( -zxT;o2W3TwVu1iN-W<1;2aca|x_vOEI3k)=bB&WFiT)i+x^X<_^8(4ZhOJgl>v&0|W -zoW(wKdt#pE)7_H(7uH@Z+`H{lYQO5T)DyBhO{%<4JFI)81)kK*IsPGK!=9A$ -zF-HXwewMUc>ai{pXg|ID+}Gqt&7;c0N=ms8n0tO2wNxLxy!rau -z&~3+)3Z4kbG?t%?G|BeQzG9%XBqO^lMt$ug(Y2w;(T{_oqxgIe1z9O3cC&6gQFgzS -zZ}oAP#nY>P9NLz)^TPL69Qse^7lnj)Z(Q>$TVv-=4uya3O(&H&&CPV{^s95KO^vh7 -zINL1ZWSY-cwEDwp-)+AtO4eMGPmRC5*1KHDlW`^AiY^hOuilBKiCoH_S5_V8YnUja -zxa^b}U+*&MtfxmcF3;?h*tc@&`3Lq7JB%0Hk9W(dFlD)8E@*hnZ(fh@tb-=cT6Vrr -zpFVx3(6)^MA6z#p`T1M*)J7jYtMekJfA4XRJAqF&ek}R4yrU)U?%bJeYEGB$q@1|5 -zAnxUp{SO0O4umsC?I|kI`hHZ$wCWRUUuNXhpsm6ZQzIpfcKr3;Z6;8wAmhjr#N?&; -zHSu(~v&@XN+Mb8&cY5AZJhZ^Toax;OxAQO3wg1Qm{kx&~J$YG$`-{I1gud#m*(tIs -zjdTC}%InJ{)>wb+I{rTBFt78bA41RUeA;>b9GIjZ;TLt>@kQ$D3Td9+xf7b6SH-*B -zkq-7cYH@u2L4z}IC6#zzn>1(XiA23-d-_Kz*67jE&n~t%?@c=UY*|+y)7&|7ALAlA -zCqMA*c_R5M_3XlJT_;MKbhd3Ro?qRr++=kikFW02iFx}coT^~_SJ(d3_s`0QoB94) -zRd0P#$$D{x0_Ro3Rew!BY*%1<{NP8DnXbSd(`NoqiOqp}UJ85_Njvs$R{gq8d}l^e -zPlVO|uc-$o8cE;V?y%!uNzkz+48fe*+MCr~Z*2Y4$sjdZ^4c+;*4`ZInrd-{^)?~@p(7agQ -zwsqT+%|5R;Tit({>ghP=!Hs$5>DD5*o&VQu3y)pqy5{n@%;+2wU_+UXs_vuYUThL;B#veZei@#vI&JuYi>bKS`cT^|+8Cfwcj -z;p))}56#P;50(AyQ!y_-_B%AEu_eXF;mVuOrkbXZJrA6zW7l6rmNB)8$j>JM6~A1ihk|CkbRSm^WSv)5Y{GqXR~ -z-dMeQA7^3K(T>0vfra}N&RxFzFvFd>?Av8yHHlKesN{{a&PW)?CFa^E3+nXm)LnI~ -z(>qD=%Hhnf@0nZjbW6U+@+jy0xOcVECp}~KIlWvllM1a{Z{%fe9Z`9tlJ?@?9FyZt -z+<${VZ8W+1@T8O9qRq^XMx94KS=OJLe`D3H1+zAsKgi@E$j7()&OUpSn^Q_6uT`?V -zV5;bSw4)?SafaHd{d@w)JoqZ6{9bgD^>-5I4BZG(=BJiZoOB;vnmY5JV#BNC)ROCg -zMk~vOSlyC~9o@T^Uo-9QOh`O=@4KF3Y4XRNi>BLee|@m=eaXjWS?4v$1+iyyHt9;- -ze|_!J&)M^1G|OkCceb4SSiDW@>FT$d1GMYb+8g5=|C<=HDxS%dShk -z?<(WfPbG~(j^1Xumz9>Z>NIZJYA~txyOP4ij1(2#b3${(BRqv(?vOiHcj&Z4;RS}3 -z#b08~*t-PmRLnT}qvM@3BBrm|qr-AnB0(eSimKRL*0VFWd|;fnMR2pm;-xx@`;#AL -zPdamiPn7R_djG4L=f#*NoMM?H$mbu=IYW*qQCUKE^#%3^sg4Z}ceYK}PkhlQpgY%t -zTW6A0vG7sRK;>h7Z92S*Q)U@HpXh5c>lwS3q}2!G8`CVd{G4?9K>tx0Nh{{*nIF#`S>uvY -zRr*%JD>nG_Hm|em*iw8n&wKEiRG+y0neP>EYOK}@j;mejmyb!Ad~)(R%ya00&`r0H -zj(IM^jTvrUTxKm@dEGO@{;TOkc2%ENvu&KBl0Ge7?BTnwJ7=Xn?=>;8`eW1o{;@}i -zm{Z|uj~v(dQ}f+YSkhwi7w+hLaYqt -z(y>l?0h%^Pr)sG@O6k2795D6Iz7Q>;!whFy?p<3^T71iORq~u`6U;caTb(+(r8ZE< -zBr9Q^MD6ahgX!O&|CDi4D`~x@IW73JPZ^~F;A -z%?ENH=js?*wF(u?doi`)aOS}q8rKq-{IY&to^yw%^W;%o$r+{gt{*qAdN8Z?5K4_-hxcKyn#3k38%NO1b;do{gygXF>t?lXTwN^{y%=zSO -zHbtI4%kr7WyqW)M>)8-%j(HqDQLBafMSs}e+!=TO!;UDkK>(;Clq -zU$3<%WmMK~yXx3|Pxy55w|TwyR!$Y@QsfHs+t|5$MhK_9=b`J&94${+)&x5-_3GR^ -z+_dtN_MuB1ywNQu-P*q%VmRUxF32ou^LX8bBZprs?dfZKZs4(E=1v!l#{Q}PrAfNQ -zw;o;)5_+{_fy{^FpMD%u@6_X);&G(Fl#gj9?d@pP<6U%BnkS-ix1x1| -zk!rA3mU&^o#0e2L?mznGtQEg-GRh^juw{E7)5R8{gcUb#tDTGBnfS#+FJN~6&hom8 -z4hrrXyDMfTr*UNWGQQq>Xi4ka?T4HtOIP`{-&*04&?2_@jQt9ae>%>wEDu)|ZV9_H -zQ#wS#De>duB@?`YCJ0__k-Ed|`J8`-NRR%+&5nxyoyvc?%qTiDZQ8-6dn?{%7|8~i -zXbE05Ygb)tw8+u=rP!g<{(A)%Zk*ZixN&W`*My4ZmacmmW=AEWS!+3_Cl%)%?Ok?# -z`HnAH^Q>78E=u7%vwouH3&g -zhJBUXj*`$H>D#BZu9#B0Cbs9Df;WRlcxd%neZ9?Nff1qz=pf*|CKV%pz6lrKcsQ9R4GS)wJ7dYhzd~)v)IPDT{M-rE4=RrR<$vz*{-X3x=jZFc -zN;rI(#NjrrarTF+Z|~h?H>{L0yCj}hbUZysE> -z-MnW~#2UG)CQM%+CKQ?KV(&dGbU{Ab`e}CSTL1r8*Ej3frn{RiyZG6xFp# -zeWe-e8BNsBPE70SoOf)ddi9!>C3}ibJLecraM-#ua!Q!@8#~QzOLWzqHxyUUpHb;eq2OjbDpbZesm*G0=OxkER^Ks|H0cf(liahlV}rSdg}YE%1*iqtL%^@v=IR -z(X)b^TqKk-dXL3Q@jSfhd1r&8;l2}dCq`)$yE}WH`q($Qlet+*$hBFa_tf6(Nr|tk -z+Gd|UapdMjuNV#wt{S%GO>2w}#tN=5ow^~&cLIa)`xd2QV-CCKUpq~2#3s%P3o%(iMYk(Rotk-W|Z*rpZ>gApL||u8c)cx -z<8c!ZvGZ-I)053?IM%$!%&N7`X1eL2jcL*5Z1YpN!hJ()R`c;FIxgn;{q(TgLf_>X -zXSe2WXlk9PbmaSTVQZ}y^LI!)OnDnuk!oGy$hURjw~eknN=ggXPb%82UAQ(}vAtzC -ztNxpouddJ67g%|%zj!oi&Fu*yiF{I3(QV#yEZW~L*s-JbhBi};>&pwGoTu$KpI>|A -z*+=yQ3Yytc(Fv@VR$bg!Q2INNyLRrEhe>bJcidXa@r&j0la|M(e>Pq&$@<)yQMY!s -zjFa8AtoQqB9ITRK;?>RKzB2w_&cffg!Say!fxIdFebT!e6`4EkJbJf0U5m$GL?Pi^ -z)rxgni_puz2ha060r-ddiw8NI>i;~k@!cL@$!?DedEN@m0!|0&_4mCi -zek3|;&&~CdPH?vFN_^lJ{x^kF<&*Ha{?Mil-3N;sY9d3eG#$Q9+B|_rlOb1%$KNqe -zr&;9Lx0{Dq_G%i=O_ctt? -zq;R>S?NrAOnZ`?NR24Q0&1&mqFXEZ-IP_!6g^fQPrr+x5H{R0Vw(CBJ-Ve98B?Z2x -z@2|aLtjAt^<4@|0Rl*nfrM9wbYCUsoDKhr1d!XMiwf4YuabBhdwQtuwK5H~HWQ4Kr -z>iFZW_@!U6V}Zb#^*i|=RJ5<=IomzOh>5vpeSlEX=IHs>VjCPbihG;M9gz|`_W#S& -z9f^vMc=`qUbDSEctete){QIrwWDesZmJDITBmO591-2AhMsWA^OzQA{a;{-vl%0Iq -z%Fp(ODpOr0{}{z}Uf-kIJyT5UMT$Igzd~T9&$6WtZ5K=wowiQ$c2oxU`g#-Pu+J+y -z4)Gk)P+T)LmMgqXEO@@9itvayCoZtO`gmXS>=d27_7Xc985wULcqcQ3iTMrdvH$gK{%2m+ -z{N}b{6S89!U|f7}iN=lvj1y*Zt!u07o=~#)#Vr+S`=He=2Sp|bKD>2{wQz-N6RT6Z -zehDL&i};!o0x!3no2&FUe0}P|m<7oKDLMR~9c@jrx41sEEjehgcYj^`+^X9rS@M}q -zeRq2M;fAM8W*c`%k?M~f?+ru?cTd%u+_RATa_ZKQ -zynM}Y0=H2ESB$1qyMc-S!fZA%`v)Fti{!EvG(`Tpz9i)4`pkgtk~cLg0@C)ytdM-_ -zx%Q_({#5Q`%WNJiZ{y0I(*C4;x73lx1-uU4i{A+zV>sY0FBkW$k-e{`l5BXy_T8Th$h=7fn37YtDi8#C7L)WvO@{DpzUN`r6hqN77$2 -z_+xTW<1y#(P1kQsOx4LJ|A#p2v!6 -zT=?^P`fj(z@7=r81J4+wOgJv|a)a$@w%X%7TlKak?{)rm?)$Dy%5vXjb0U9KG5-lN -zpYt_8`TmD$>+SP1%jDK3OfostGq>F>LF(b@b~jC-(qEgVo3x8>^1IwEb6~y){~CV( -z3hqfNbMBV~WNzKE(BrAZsfl_CE1Zt`PK>l%P(N+cmrX(<)i#BuH-EU?N&F};ch0x% -zxV`1Eg(>SjIt`pPu4b@Vxc+4lF*wsWLE5I=NnpQT__s4$+!-4mYBpUxd2RO@DU;9( -z8=3pJos@SKf6iZO@XPzI!$H{#*H=E+5#ibDXKuo&vFK*OE)k0)yD)~|X3yttPHvda -z{92Z?rDAu~lOW@dR*^+((hJ;{E9^3BFnwhdz5ZlGS|FoO1IM&p#yuiAI}cavPi}b~ -z6}r2K@!adTmv;-C(4Q~asV6b*kr!8J`uij4D$At6ETL5o#kN>)sp*gY -zv$`p1^Za|&U+$f`K2QD6b^l+pnVj#nEl#g|}d9=&iK|ynIXIoudNuLr*#H -zHwoPEkWv4Nvr5yHS7FmP{o}A-Am1nYZgIgm?+#&wmW1r(E&slYnW`CRY3yHbv)gTJ -zui?DS5}79dStdO^tdh_qw9SLh)}K{i+8Nb%CS2^-9~^W#FS2vhlf_kwU7~(&6`MYV -z`OrfC&jD{E1ugb@C5i6X_fE-$`Q-uO6m8o=^rj!y#3%wj$5lYg_s?Yl;BDzSo&YX -zG0n9#GGc17sQB02$$pzJ^_{)##Vqx{XOqIpnii%UBX+fdpp8!QfF-4L&S>d8?c -z7J1y{o~v?h%k7fyLdlan1>N-Q4qVY^zPPpLuxzsF;b~$2dutkY{8?hoB+|xksa;Ak -zp_2K7=A_h(SK1~PRrx;f(W-maypP0A0ZbEkdk`Cp)x+l`4weqA}%NnM=YdL?H%cFk7q3}~y&cfSz{O{kL -z!Je`FQp2Q^K3fm&E!T3a%GaIRSf*afuu@`1dKtsbl%VkIpEf7Inwq#U=u8!>*0=Z> -zZ>GiWUU}fkx`i9>Kl2v3lc>K(=Dobu$C$Qdt0epvPO0u#I3HMz6$?rnN-R=?1NHDOYS -zp#S|tDyQ|EB8z4?`?zm%Hny2@>4fR7mra=+dU#!Yk{PF92^{A%gL+drQ9xQiCRQtC}Pc&*q)z_$7b<>~hYWI}8U3Z8>VTP>MwF&zr -zgNqX)%71!_Pj<31PBT#Wl=A7LUytznx$E+L@2%|oud|f(orz~~J6l|HGl -z-IdGJjM}_rYw^ih*=skNmCZDFH_fj!yw>)p{B`+<)*Hq*lyzpm3vJ1cP?)Qo!Fuh@ -zIhHv*>qJaH-B|bRiE^%7x#m~HxfL?!WH!6AT)pEpyR+BMLnUv=gL(1W?JveY5V$ox -z?dy&1Q#7@;>=s*Z>n!J|t*t`u=k0TH -z-pE|q>QuU9o72O2(UA)k8A?UD*yjjpniNej6@7JPcE+2&OUtyG{BFgl_9vwsmvlb1 -zY)WhTkJfL0cF*(4JTAScoqg)bSg-F*QfGuFG?X!zc5I5DvhcCk@(#^gduJ}%Yd&oY -z3&+2s0-;@!i!@vQ#|11^xcV`YrC0gXA@^9FnpW3UbLKcadZqH)eOb4eXO8S)!HStv -zlNGKCuV`5v@MX@C<5y#TO<%jRXwBnQ#rbYl=`DdG%4bb~mMP~M)+Khz;DVu+n_>Pd)sri2{8z``Shnt;2UG6;rDj{d -z%>4fTRFQ`{>!zaRtQmTHcNtF<$@AZ!5whfRM?ij`l$|~I!#hStW@q`b3zsTBKian3 -zeCAy)+a!$CV9=#+h%jqQ=8Nk(Uq7mD^ -zf$w`v#^&lArP#JbTYX{;byzMjPQIi$XUep1Z+F)Qb;)L=O3P1UNX%4FV10PFF(YF3 -zgzB4VD}r6*pA^YU%!yhO?7h1yK0V{(mn&RHZl0G?DvxaV{qg1048uhkpWlAk`*E+i -zNz31JN9W&&e7GY{h%0i==4QKS&rY*EZ&4-94x5!*3T1EGzN)lXQmxZA^Y+$X{onV@ -zVu}tDwikG(J+I)yr}xv6mp49mxW##{!$Ibd6+RMQuO)MT4d_~N?@0%bZivo}sRrFM -z9M^L>+}IFy%r1Fh7o(Wo>s9fe*PlPTchw(t^P7*XPo6m1^{mJ#SnTYlxm@-)aw;Aq -zI@GcsShPEQm#yyn4`IH6Cr>AxTOobv(4@p==3E0fiE6*G47qLeypUx$QqpYl6=<>0Yh;sOUBGmWSxcIWOgBKM~|e=bl!2M|Bf}(YoI2 -za`imR3Qdofgzny*`{v))Tv5YNv0I8_g<(IBKWaa%!Q!l4HFw|ADU?NlknRnro$ -z{%2mde$Ab?GXGM2ON1+AcG*bJkdo|B-Ndxs{jlXRnY=Tid2Wr%E6R>Z)~$(s<@EDT -z>%J|zTaMiGy7BL8{@;zPp%%LqIL!-4kyLszqfYav_KKv(!C#mqZ_9ALFu$uhqv)VS -zkp2I4K`Gxa)thE~dwJ{EEt{CYT85e*vu$j*oc2pB;hVeCGgkMA=KdFfCLc*@%ZSz>Ot_ey9ps7Wiql+qOIwRciaIe+ll7BKXj*m-MdG4s*_p_IphCMw6$;=ebql;dD%UBz7O*L>>Wf9CSL -z$;@ZwEEE>Ho-F@s)S<{CQWkK?ZCmkw(-zL@qLa5SIlJ4I4pAR -z1$!N2@o+?^!0;GyTF^@nf&kQns??A3Bz+vQ1)5d-|E^ -znNuPK)h7skd%~NZ-oIeRCdJjaew&0>duwFp+i&}J?9YP<+4_tb4JX98H;ZmJGivVM -z^t-Ek$&}c2)&dRJO{Yo-i%#V<&3M>rzH9eF+k)8{9BJ!hN^ZGc(0~7GQ(u@gm9P9f{GZ*;E=QXs<-SREf{B6j=H(giUX6#(IyYt!{`?9O= -zEyYv5XYQPuv%b1TwzlfQOS7b0?OmT+WQq(G-HkHdaaI=#=hT(&;hsOCyi=!gyY9(J -zhNpJFPpAwJ44UvsX;SmK)wOT6{j2$&?y+RjU85pw>@?G$CSi@N^TnRsJ2yU2{&x1P -zaK6U6J+n?F@D#c`%sa&L?#Hreg^G0t<~Q97-{vFN;=FR=Ny#l|_kOw>`9i}cO22T` -z<9M6Gl>+PLe{712bMT+m=6l9fsCa+<^y#y+k`Br -zIZr9M9K+Z?ssB*+ujD2Ei2+=d0<#~jkCoPX_(sO(rqu@fCW+@ScL+>a9AG8(xxe$r -zN!u?czb?9cW8)OnyHzr`gpb%oy2P2Ct&rI-znJTD#8Xz2;y*5qCtfBo>`X|zo!WlE -zdfT7yio%&o?#S!E_+T!pb;)X1gxqGgwCV368mGP9xF-8{pF-B=C9P)PK3cdt$^E{` -zF+rAj+u}$Pir -zy=e$Ze$D3b_IS_6eJK_d|L=7juna4?a(!zA+f!e);;&gV7tUAk6_#aWH>qS@cyfb- -zNu{gXWJ89`Pf>MmJZc`#47>W~9@n%92WB(L|DU@_vh~LO1KKTOY*v@O78%~r=FEFI -zbG6Bt1cO-Bz+Sx$9?2*@!H6dl3-+!Q-Tqm&JdO2h9@D((t)AKLE!N4L`sye9_f)8M -zcFWhvKMv(z6L7qH`jdhirz_$YTb4=JFL-cc>hjMIexF+ylCUAJa#{QH=Eq-_w1_ly -zb?sHzt5W0n#rfBymsQjhEC^>;OGB;O_ozRar#Zd?q#z$J7(Rpptn~XmIrv4&s^LvZNbwPyLb1FM0w3nOLPw@i%R=FEo~c9LsD6q -zcVNc0vrf^RZnJW2=lo0Gpc^qa!uXz|NQ9BTRpYmvx@%LH%vSrq_g2&=8@VHwVoV)Z -zs~QwH8vTFXYA00i^1hl=WSTmQ$b|eRrZDl!OVf{8*G`|+wfp*&B%Vt}*DW7@y4B^q -zoU12VI9DQZhFV_8>uE-E=Duq4mbvCn*PeEur2YS{N2kt;zm`}cD7Iu;uCKU;RK?!? -z(%)9hV_FoeeK>Zz&YW{qjc(G77N1pXdon;lcnkF&^c9)p=-n98p -zv%0!`smF>iVa8K>8ujO+7~lPv?>;YK=I?Ed3Z^GFbJfYKI4bM0#?JNmol&13@rCDs -zo787d{(y&jDpe11i(j7kF(NQkQ=@WYK-ZQ&r4|N}eN1&pcXIhBZhkWLl4fg>s_I&W -z-uk>Ft6L`BIAYP1ExxGojr4B575lZPn0Q?G5zalzlVw^i`) -zMdl_|qolZaxpV7%^v+AmE_|1_=KqE0UQxA>H#)+Mj?*tDR~xTs|1M##xb3&eZr;iW -zmLuM)X0obyuseFrv6weqr?#meG?&XMZ|V6xeiBZ~+Amn<-ZEQga9p9|?8Jb6r^y1- -zqvn3RICpLD`Ju<+*Ftn(`C+pcMwx0vL=zo5&>u;D3xQAfwq%b9DJyDGDNnp<(_k7&ek -zTb?BI1GnciFg7%`pMG=wk^Sxq%j!jUXXYN5>l=;seP`m9 -zSL$kt-aTio@Z#R<#H6$|e%W`c*gjM{1RdO-Utg%2|MlL_=IVW)t-tx7->vsG|DM^k -z+sAB;*>l6!I&4*YcJ$l1{Qv*Ip56Ps=XYA^tlV83|I0%C{{1j~y;kf+&*F2R7vEpA -zdfU!*Gc?mzo{e*nyd{x#)I(kAqKKrkQ-{j*9TGy7bKcBi>o~gN%fB^jf0=_BI2be( -z6tr|ieU?1TP&&O)o@D_;D{~WPGh-)XGou&-O9N8_bAu8C6GH=I0|x^G0~<5*0d~d4 -zrVDysb~7J(r$3)n>(k{0O6z{9y*|8>SJYB2P;mE8m;V}Crz93DO|j5&dZ-{;D5t{o -zZGGmAhten7s!UaL{e8D8ACh;QJzGUx>5S0HhsKT>W>bE7JT=t!oY4K`^5%(O7VnjN -zeK#XnW@n#9-mUZYZtgUH{YLS{G0*&6 -z4Ih83{x87lB)END=;AHOrcQS=zx5n3Xmo$?6?;qkDi2V_mTs`xc?)?GgoGn=nf(w1q{nvSAeBYRix%6TTAYo&`z -zu9r?sOB7#u(ERwdc@asHdMnfyao%w0jNB3TXg_QjL+Pt0~IMa{0{o8UUjD`nzl=KT*t -zmt?H)jC$(gZu5Zm(CtemtpAmbKBUS-xJ>srwysQIV*tOB&K|anNeo~29B(M|I4ZO} -z=tBAnh5EKhb#s~W6<_^b;BOq$JJW4jzM`W!{|p)CiNCHon5>Kn-_d?Rp9k`dtQKHaxeT#_QyP!+D -z+RP6eWDcr^Nqb#%lw@5irYx(vzG4B}8793|S|@gzzK;Ftdj6;9-axMMb<9img?CL} -z^PX$7G68s|JWzt;joF4IvnX$%A%fRc1{MTtyf3)0R7-w@m;?mPIxBO0>dSEXiUa|W` -zzL;dghJ|*^13wjSdbG&sf#%_t(@o|m?BQMRdG6BvCPfLirEJ?g9kN6Bp2;$DSgYo_ -z^Xic=2iYSZz#K6MP`?oa=|j8Zm!!W-)x^*tJZA`S9*bSyoREs;yaF -z64dm6`d#~7HYc@j9gJBKKIvcj$2xASC4Z$o+5a2Hvi?y_GWtYp! -zo)r7>sr#&O#)Xi|PfohZ6J86;?X^4G(--?b^OKMQ>%pyCtbRB1xJ_Dk*rOw~ZJJfQ -z`EvJ7PhIElImmM5dctaDj~{b(u3Thobn@EVg#Npn?tAaGeJr|Bz+Ui3ak;W|Fk90j -zN591Q6Q1AaP22gqKf?ReER!pj9#u~6m?8N -z{rR?)a^6Zhq9yk;)GLm;KM0w~HK%Vp -zeF9oCiyB^}I`I7A;aDun!1eLWgk393xGkqH@oi~drXqNvq(1aLf5PQ0j9+zYAM6iN -zGPO-)`_KCFe&-=&pLhB~-AcaOUdnHk36q?<-hEb{b&8_@^@$%}vaVvcEH!w2>8z0I -zypw8I65Wnn-P&;Vn_n$w%kh+16E6B(Ug2{2$ij&nkEDbWWj?%#n0eg$x=2KH)`f}j -z#dkxh>i(D%C+JH)6cb~L5Ur^;i(kZCcBzK*<~8pF%Z{%qu)n)mEck1CRlkXmjEU`u -zs7+nT&(>S?O}oi+?fF9aZqbtg+JdgG3_K0ZoMj3I$uk60n~%yycg|*AXKBzo!~61$ -z;LM8tpCa8mQy&&R{$cyxwQr?*)YQ_Q*Ve4!**qy!Rr;l%;f>P;-W7dv%U3JeE(kq; -zPkP$tiB*ezvQv~#uV#LgeCi{o`_15`4A1|4*}Q1#i~n}QJawU_t1KoK&I(@5uUsRl -zdn@Tg%A#8@{`*_)dtz4qZ*PjoXRrD{UQf5QmB~ah-SUW8tM&5K%ZWRuEXhAF$-gXu -zae1zrV)DZ)hIxJqw;ahgiIgUm9GkBX)3nIlJTGCIi`wu2gUT -zjRE;wrYktq8)J(*Hn?a6txTBc$bL>VMTFu0A*EEkHH=>+_QXcS-P$;DdchCI)DF=d -z&TGs#1-T~+ZA|kP%)TSyzHnFOiH}#pZ|(fW6;Qrd{hapI8O15jk2_S=8KgZ}wTSI+ -z!}UXcj#rcT%pbgo6z%IdPl%8JgGjuYNy -zXESC$n{Ybetf;8GS#qoWan{wz|Jg%B!p@Zh<*v9C+kb|&FMwr1e66e4L75P-fZSzC -zx+=x9inf;R*LcyzG&5>L{e3Chh7CF&Rcf}fyf1g{c5c--oBKAMjp5(I!moD|vtsQZ -zJy?4*>i@;#vR!NV(=JZm+EndgTUp(ec@7a^_b4L;l7*TOuC(m6Dor()8Hd=<~*Av5}JVq@<@eSScPjqot+J -zbWGy(s?Q?+CdcOgjjeCG7P<1~mQ!u|f*<)$t(z3T)bH7hJ=>(1rmtDj>AFwec-g#` -zd%X=SSBY$&v#d9(`%r68fJnU9S>^kO4u5^%G)1#9G1BZ$;-r_;g>;z=R7PF>Gtpt2!^)oidsjt+=zJiAB=)^pqD}Udsh}R|`zlylW@e -z;ndN6AuyzK&9m@|c|OWDs|8OOvaQ_q^R3PkjjLAT>Z;2<=iK3vy?W-V>XWa!oU8L5 -z&U<%}aq^c8u2Tuu7IbdfCOxyvl6l+AgqM1%E;Bwzi5u3uz0H2dm))3u$Fzk#o|mE~ -zyM_FjA130})h^iO!DAUYd!6U@DF!ZwOD@Q?gx=^9xH^?zQRdsTmW4a3KRL-LUQH?S -zeEi^;Yi)>KzSAY$#|>-eq)%MQ<}RR@Eg@vQLe}Q$n-`mw*4!#xxve=c+xdfnxM?+q -zOj6+G7tga5dv9o5u)g}CNXN&+h}ZvH_vdTxO7s4Uuv&)H2=E^fVmx-W^Ew@&{ZW5+$~%GxRH9tL(#TEAb=ck$i3_qxt~hW8#z=btv2rL)lO -z_Kd78H#fRj@3Oh`^|!z(_l)eVd{66~FPT4gz3Jq*;o=XDeG!Wrzn`(1{+}~&YJ;R+ -z?qjjo{3pr5(m5Uv6C4vRYuQepCZoD*$)n_dYGQ#u;tvIRPxfP0HTXXx-SE;u<*Gv} -zdJ=Qn_6VoSY!<5U`e-L`ag~sY`^vVWuCE;{mdoBR5j(3`$nogoie=M`yq$Y}Vzmr= -zt{t!{yi%cGV7u6)X9i2bpCHFAR*W-mFzGOQyZz1e3|hTr@`pUB6*k4b%THO$OjlV^ -zaKNA?Q@2s(@ifnc4uZCw!m6BhpQiOh|9QJ}+p+dNvzA+ac)0mw^0U)Q>*p+5CdSlo -zd(r;gx-K*Oyk+>izw6{`=}26d=X9cx>%r9eQ=cxbm3TR~&tQV~0|C8V`Jq8y>Xq!? -zsacmwoVfDI|Mtqbm3y^4uNiVz@!y%#ZhME}{V8GLGwc_%*K;c?Moi!I;Pvx!rw)k} -z#7|ndyWZ}@+7MATneUI4fHM{q)b%l#X^aNY0+zn1DR^spG -zOxDZjm&=qZk0R47+%c&;lO|NpoCYNlcBQVX`!NZTlW1=W9}$5c5t2R -zb8KV9mjzY(pGjURl>NQcretDuleT@;vG*no-!eDuPB_OKlcwkQ<37&}HdEuD{33DN -zt}Ze^deV(;cEPzVOK;CU6miE}josF8kyBUKg(4q;_jv_k$I$gWtTFBT>9Wdfzc`FXx7&n#QY2 -z{i5OQTYXFO1t+$Yx(%yWk#Q -zqSniK$J+S~C;#bv>ZKxM*ZbsGN0|(x=#sc-qni~|?=^<5jLEw*-S&iOoo(_f?KGqO -zU)i=v-97m{YWMuCH+!{2>~py58fjr7d8s|%827VxcM7IR#yp+yl={d -z+q)y%13F)XG;X_kZ>zJI&%V7HF2D5Eum3n+Ui)pvlCT#?7Z>s$pp -z*`tb%tJo$#MXfF0Y;5pwez)6KV`s>GVzi`9yTPL2305uEwpG -z?YP!)`9;2D2oB;`W{r|HC{h11`|aAiT=5C2?#DPduN}76n(s4dFDp;~X|=oI-8FC9 -zEZx<)+Gnz-n|#}Ma`%gKCqHE5GIj>sXI@smP-6F;yAD??vro=Hcj3PDOV);9kI&z4 -z=$^Y88uiy)Ha_;ze$9l`@)sU2@9PBg$WA`A|K);hnVK#^UFU?_9KV{cOZ;nAzxeu} -z-qnw4Yc3~g{9AT8!u^B!(Ux`7HuLSgFEU~AvL4r@{V&Cym&KNdRjNVA!@nt-*F9e= -z@N)OrTS^r**Bt#bM|~P^RldRL{y9JYKTf^(dcvu7iw;JG92FOQefdFT-|R%0kGap? -zop-cq?f2yCxN%CB%Q42h{l!DJ=64%RViiOS4$A5Hl{}nq^`S3^7H3+Er%5)88bk2h -z2)_3wiEiy&9e+7KuK%PbsVlej+_@F|B+J~pzQ^C)nzXCI>P`StN!&z`6))$X3D1TwwWhd{G9c7Kg$!PiIE!? -ztu<^koh#kjxm=Jz`w)ly%fol%5BlqM)!KZ0rg|bZRV&Hm@-?mPOINlucvx|UhBR&9 -z>(sK{blz%W_u5mb)7In*O<+3L6uXC!zi^2l@7YfD}%YS3#lN@ASXcj>4pYppOSgYA8m|Vx_XY(nyiIs2XFrHcX%8(!GKR~A=fR_ -zT$zP@Ei0DollZxX?Nzhr^Wu=ndoL(hsnySzeL3RTxf4PU%TyQ7XZGEibhqv9r8nQK -zZgZ61KFzS=SI7g8J6~cNOg78r%yhoHP-K!tCoj{+inz5O?q)2=iTXNgM_0m=r!Lzs -ziaE6l3cpwy>2=&b_DZUTz}w@BJ2aQXyo*x48RPDDo;~K&zbBhi7XJ0KtNtLmCbLN3 -z*dMDWn{%~eg5KTVX_k7S>P~C1@3JKl7TY(k&ENFw&e8H*q_cNVf*LYd_Y1nekE=KvUM}r++r1C7jb7kU| -zXROgnUrv$wzBVLBb7Ft&LXUYRa%@jUo(pxwMy{W}ZQ03X)?Xyt1wK_JJd+SSli(Qm -zYRz`f7e1VsHy=OK5miv^OyBAg8FBiVQ65WJy7%MMbe0$5anrb2zsF9Sy(w^m)RjrG -z)%&iSE{vWO&1Cc8VfrNfIm^y`+% -znX9~?6iDj=;uH@QoyMf2;j&t0J -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 -zo}9WfCP9DstU;L3qvt?;=ZM&nG|6 -zaEPV{9E!c)GJkoD7Gje#UuwC5pOAVcad02r>AMBR;P&kHNO1C`X~Q_Det6;zj}T= -zv^D*fT;rE-9lnMAeCMMyw5~K5rZ1fGZj;6WgYGNEd`u$yx-DL-(jVpr* -zQ+m34PG(|Gib76)Kz>1fL1|uTUTSJlenCoRu}fxgaZX}MbNq@+(~nIOU=sFVTO -zyxw$r;pc>@l^5J(XT4vVvH5IvdVEr7`OGs059XBXN&XJl+3-QlWLJ2OMu_QzTNiz# -zW%q_{x~cGxLupB-nN(0tMuDh*hLfvD5a;vH7Iqp%>>`XAPpx*jYZSAruD_8yV^Q}t -z$@zV3S^>q@6OPV*?ht?D=+ox^AOC0gWW8W?6*{eat+v4Czg&I)IbXKLt8Qx@Jq_QZQdM^5Z;8TV=h-qRUSIrEvc*j*{fv^}JT>C{IplO;TH917rz&`fAJd0gmt%eef@a4 -zScEUEn&;z$;NNU5{|}qp>e+nk?DMtHmonzp&;FXWaMcEZOZT->PxfCsQ1nCQl~V4G -z*^B3^W>4}lxfj*>_8^1h&4~{^1adb<9Nt*G&_LpHSD4iiKGQohrhR_B=%S>nA@8Bh -zllJ`W{*ylSY?P(_0RxeZYxKKK>cLPd-kb*%lpsl)FvlvrRY4 -z&cF9HS-A4l-bUIS+REYn$-cvY=kj)2j)gNVKY6TORaMJZXTHE`!_SnvuBQ{+yTtc) -zwW*Z|6*8_V<3GFGREw{uyr%le23{dI?!N{iOMe7^xb5QZS;~3poY&#WDUZ@~`aW#u -zXnQhcfTkI+t*1#_yOdMf08K?doSZR_fNREcgC`Z=baSFGf%%>{^9PLq6OhozdvQY6X}(xu}$;X)B{qIb&dXb}#95`7nZSAyda2H%H`)BQkhzDx!A_b~` -z9IU^pjx;EDawG=@J=!ij@o%E-A~lZ5TCERcmdGu;t@5z&#`{SwyR&?D@hqS4X;y1N -zqwX@ZZXM;xyJ8Lxns6`DOKwweN9m?((}Ll(5J7U0voi)o(@( -zp7Rv)xH2=nSUpu8uP)DJk2@tkaY`=Zi|;ocPd*^!ooWB&R`g>ZtDK9gX5Mp(4DO5e -zeEj0^owEJAMT579P1~MvO-k~}-Y;5>a;~`=8#+#8E@am)4d<93w;^p$BKq#nH=Bd);oGI3+mPHx^~H$2|*Y!YD9+IcDC -zhCi2)o7P5&U!R)UOpM*=Jr)Ycrsu-ik3;s?^UYBYC-i+_Z -zZQ|a2EMQjpsQi%qwypWSJP*~3Y9G-S^ZpKp6?>Jf_m$oKA8>GPZ%oI1kx7C~=8GpU -z{iwgiWA;JEoNtA11wU^P@c$MgbH=lB)@jw4NAE67ato;F-L;>+=4Hn_(V22L;`m)< -zr%hpa>z3YPw~5F7qxYRV%10BXdDcES?wO~Wwd`kG%j&c0`<)-{F;B>A)&DN${o(nc -z-)!8k_e3rEd0$uNeSVy__~)heVloUSr$QewKGTT(n76Aww(&np3v-6x2c|2Yc8N6h;wuh5dbE?a+Ut!afVg+{2;FO%1n|C&J`)Mha -zL+2e`&#vKq@_33&u5N!@$2gG -zKW;O*zi+DVo))?)MOTxxVA|>ygNxS>MV;chc+H*Ruk!KK=SI`kJ-vS_ZQrDLEv|UY -zREYz>GutLDx2R9r@chZO&Z6)B%^jc9)b4tg3$O98_bE*}bW`0avxIYRzzdNg^<_Ps -zNi$cx>6(<;WO}05a`SziSq-wiIc`ByL-u{OQ&@BSja{I3;$lX1p7vSJ^~PT>D?g1{ -z(yH>*N!9zAQlZz8m8CDz;kJ-zf>^*OJ_^NEHrQ55;O%}{l=F^^LW&EdpYSYfW -zJ16PY@8;LcH@`cj@xr|ZIhHGGOq1Sc%(=UKk;LMSTk0f?@9xcfb<6j*_-FnP%b)&v -zf2!?iKx(_e3g`MMe8CC=4hj|#9T{#@PB?i^V2-j^Hdx@Gpuy49(x9+{gM+EDLBWAl -zfP8Ye9xktb5%R!Kx3$S!ysDv$uj-Kidy>h*$GRE{fd@DG<#y_yY<&=_?LNuNdgl5{kpn+F*M>}< -z9HqgqeA<<7oOasB%0edITI!Ku6dY|g$!yuSsts(*#Fl$5(c8MT^;YJ}wPk-gj+_qs -zo6C1~wU(D|%=&9{uFNaArPJ|x;ug8jE8o=h!Z`1*4y^HQ}Esht-)BLfaQb*09-Sw=J5mOa() -zYQ4{X*J0TSlKl6|JO6ZS*!_X!r|W_G`qVwwZq^*1^7cz%d%`4-O=c-GZg{E8nmR?Q -z{-B4Y$NGg2&fS@85Po#`(!ZzIPDr&oeIn&nmCpNB@9Tt<<_Fcr&Cq!8@=A)lT4tw| -z{EpjSTqWLEmGiH^eC}wZpqAY2dcE@11XZ_d3jPP5m@v9C{@>z%D==%_ -z%C%>B`ouS0G!=iZQP-olzLn`^Z^M-pEB7%d^J{CKvCKL)@#vkX8F$ZKY>HVM>(Y}k -z@xY8NH7k~NEW5Y*>e0W4J@mH -z|C~bPlCP$6pOkj~)o0r&>MgzLL9LxM-`aPa9omzZ-VSOh?^XL^(S6$T^0VLVDKn$R -zE>1k2xxL=7exJTt1mgn<&isiYhF|?{YR;|-)A(rm@#AWPrAlVYBj(@!cahWLht+bP -z)eDx+ig3SMA-ZwuZDk4WrCCpS;utbNghe!$cbHW)a^-)RHs}3L@t57T7mjlLRzG^W -zP^)ozWm3lO9qC85K2Pbaeeg$bO@!qG&bs$w{i^naA*54EMXTi7n -zqz|j+->^zj&&@b(xhB@xThU-frZIQLL~d3~)v2zZ1XuF1u^ux0vEVp|waYU5(xS8H -z7s^T;-u21r@t#ji%W9wIHY6D&RGxhP_R-YW^Q|VobZZR0@qm5u%*MT{B0&$?I!vXw -z=j}N;y~?Fl$wT=VbH`l2eY;-!-!aX)RduHQ@9B(ugJ3tcHlt0S74ju>zB*W`+MCP8 -zx%8)*wQ5YzS*Cg7_lku7y+1x4WT|#Ns<}>bFVnV(O4etXJWjf9RL=Xl^DetZsl5XG -z-6PRImoVB(7|mRJV4ca``wY8%Gxw}bmC`nD*u79>@!gr8k@XzsXL^bx{hqkAdC$5x -z&rfB%;rTbK+i}CjA9J(!@f1IhoyM4&bfI${t8(0)p6?QIFBa{(wP@yp^|vFw@i+b| -zJ$lX1;T^YeZ$|^i=I-T9VJbS}McYh07ZsnF*;2_O74&82#c=sc2kyxT+)GHgdsb+| -z@(Y(dnDb92Jd2o7^gBJqW=`z%i;t)EN+vfo)h)RGeIpOs)1VN>Um5B*eQvUqw2AVS -zJc|`8aa%7}()KY~$c%GtZ2s!$Pd$}ljf);XPLP&YJ6|C6TOeu8 -zy;ugmgBF$PVilKf=7w~I&yjw}lyP_Wx}Ue4cHcic-7BIXG^0l2{5I#+rwlWdJb#$_ -z^Bizg-@7r|-MI0tu#dObtpiQ3j_dvIof&Q%(xmf8wl#Bqm#1RDq(pJ9_&^~=ksk{i -z*5^(>v*@0T*fvg+<1>_g>Mgxoc2!QgCIk?B_4D>^|BhD5zYNL9ex9RzaoMdu$!<^6tC#-X9`W*_PW2uifwxPWth)GPmA@|PzBe%` -zpzNZPjpN1C*)NNoe_pmaryG3yuciYa??o60i_rzwFrGsPRX}_$d(=xAa8=QGy6sx%Gl>f%K -zti0FWj8m7+FZRFJD7?U9>4d4@zKK;`{M<3Q{pxMI8G=(%Rzy9~h*N&Ab5uG!=#z)X -z{fXgKdh6Qv6USnt52i1XUG?{W$w5y~ADt+1 -z7H*^MMc3LY(#_t#QV&=p7~{VkGA%ANYwFp$C(v?rDEEBHNKKBU -zD66kxN@rHFdLK49wOo%sV)CGpqzq+w$ -zY|cCCz0CB&0-j$XlAlW-{H~fHvGeK?DJwlK#mme8Xg3|-IO|Jj`auri4<~>9yzAPZ -zz-N2xlV_6o`l4;VTh!10x~jT;o?3`o@4F_2y>r;>J0|;OG*ud(c54xlaD8ylX}^$C -zKuqne2-6d7ZmEf)*W3FV=4W`^-ITPt?v2c1m@kWan{JrqpL{Lool#;Y) -zRNRIRbG7&o8xId(vA?<=#h)uCYHfexCw2bSZHE(On+_SR`F@OXUh$gXgqr(q=L}XA -ziC0N)-6bKrqOV`YC1T(8-A4qpRM|h=FXp@XJ$L7yg%w}&O%n>HuJ%}Tt2gpm_{l$d -zx<+f0-u=BZ<>G?%Uw-LLcA8!obD)kznCDb2Tj`fi8HEPdrmAdu@%{CSJ)4p@PAqPp -z*{dyf>EXEzXJ=cMJ-lDZkhIot+Y_y_$yqre@sEFhFi@0~ihr1QS7^-<>-{ZBH{Sox -z^e`6XTG*WCTv>QsKWxHvi6`OxjI}>`fBt(=-8R=z|HZ$5QuidHEKlv97>w^&x)~ZnWn}z^XUz) -zCD%4(RUKDZQsz?->3-*IlGw=~L0*XoH7iYCKREhkn;z@m6+yGltu31o$(fgLS(~YQH7qAMZE0MV|63xmn{P(#7p~XS9&^|n2~Y~|IsdrQxO;j>Sn4UJ -zn7X7(8?@6?Qa``DAI9+L%e=LlwyrF)JaziG(!!H3bCL`1DxECbvLeq_VOya>RowQK -zuF@PAoszx?vQN+4%U;DUbfa%id(f?Q$13y%Wp>@Uw>m*Fi6hD7wnEaJxh2-E$(Ps; -zE>&2rHpS-p5-pDA<;!mVWqPb8uwkq4B=HyWZJX}YtYoi%k6V{>lFdVilI>_^$UbyVJWJ;B@z7Wqv2jx$Fe8(49Jt`D!wwpb%RJKE*UnWDj+9#p@QQB$q+`csj;?>1g -z*LOT<+GyKlbYb- -ztgjH(xlk=eC3atcahu;R;ng$yf8FuF7+2TzC*$MXsvQTs{cGfxm_|Kvi@6r(?JT*< -z@MneigN|i~Z!fv-e`Q7B>p;&d?;1Gd1Wfh(ci;OKBOz*fvEgF} -zcMeLeIv?bH`?+`;YnYUP&pU12C7YK^9ecVbfSFmPa|&x|mqEV^PhwCq+iR}Rv-d_l -zn(%(PQlO_eYq?Xq=e~`;5GU-7y -zcXF|N)+NdFUli&T&b)4CPtQ=@$kpW4!q=qg^s1m!;P(NS44#B{GdOgQ^*>!UlY@V; -zps}3o(~MrV$Fe$N=RSU!>+oEsY-U|)&RL^C`2@aw?q4^st$Av8c;4P5=j9Vxw#yW7 -z-JCjg;cTClBFR}-HwX78&-682;qgRwna1*nNz-LJG><(r+Fy6((i+VpK`N7+)!t84 -zNjdjr&uxFx&8rkD0xQpkx?BEv<7>+9l$tS5-(uCP)AK?;9o*QwY!3(Tmg^FgCnlb3 -zVvo7b7S>_B@SE|j=PP^7fB%U*;k_=ZUV7!dBQtBn40Cv2tYnUuI`f*_m**DYwbOJ$ -zy&vd4(B&~{Sl-6M75O!VQO!Q)lt9w~o3(Y)RnzjCx2%4f!*#a&P-D*0r1o8pE?&AA -zf32o;@|DJI@CkQ%1+8R6YGhZrg!O! -z$P)!SiPg-h5fU66+FpelSgzjmKa|w)eoxQJ44Hl13tuYbJI6Y$dC{2bzy6_pqxxRG -z_E1CrDO0+qax7jNvt{4i8FMTX+CFVr657V;Z8YzqG8XJD8)U0AAC02zw=T^W%uWsqNZC_ -z@AGgznf>*#)Z_bEQzH(3n<}&-wPsDx4QHRniXZiEGM+sn>)BT`+e%o4<85q$U3u^J -zc{eJi+10jI-EoW&Joe=Lk`>>gj;bBr%z9a_Y}tb($(Wx7O|oLT!Wo4!|I=>uU%9l; -z*lStxWA?HFAJsoGRzmI9lWwJln3T+T6zj8y$@|vL8OIDyFSS>lnY38Mp_j94O4bYK -z9EKY{Zu2$Tqc6-i{Ap+46u|#3eBQ_O&PnoLgD*Zg^5k7G!(F+8fWNX_zHPipZ@a#I -z+9SGN=y_*`{L9FOu#U60OodE>RxK{l@0XpSd%m)VtwFJf(f!5eGgEKxj@w&%M`7P0 -zNAdjo(nnWzEZ%$KSmV@5zU=;$Cz`kKUV3TGi<*>O#>bjo^_tpMw07?+55H!R(^ec4 -zufoE5JK^7*w<{t`*L~?#Kcp9AA%D{4t9{0`Yk6C)&8Up2EpF=)b!%g2EKOUm{k6%b -znrl8D^V-7q7MY94z32$rrdNLUV0FzG{@zPR8ltingxvYsZ1m$_f)Q5*{aP#1 -zz2K*)pZ<-f+sr0Q^epf@-YEEdWA^6T;*r-kM$Og_O1S4)_9rXyk;;yfZrLAIerZhY -z*--S@qriaop6Yq2D3)4d75hL3{h1C@#ZgNX4nzl4oKX3|5I1@Ar-j+E&fD+2-Q@Y@ -z{ZlFSe77mnq+Zree-Mz<7Pi4a{rluS^QABSSii0>mz}Zv9qZcM)N9A)%wvnax9?v>n5Bco=GqMP8&4iX@?ewFtcW!6HQfK?&VDb=lx919m+9lC|2h)kJx_L5w4MF2%k>7E{!S6Cu&@)= -z%3d5gtnXsX!-Y~JOy~Vf58cXj^1+WFKG#p4JF|*gth^-n#7Z}QGv-#kcTZ@4gr1xT -zzmszF^0*y!_q`9KJXk;Nf6@0{cD)C#>+pT=+uL`SBbw#O4u(Un!r~3Nd<#^S1onEG -zv(FfI+cvr;QXJ>*9wpDfY?=4GsbdTusdh -z3MV*tni?AvG&n)$Ssrjw;7E|*X-d&p?SM|aR2fpap9ALMZ++s2@GQeck -zlWChH>h5W;Xi(r^5&z1(o+q^}jaO6AF6?1E_e2$!5}vEyy4X)-Zhe*IVm|GwXR|)9 -zSpxUYC9jgj9;?f-RX6a>o7nA9vH6LZ(u6Yw5lQpYJ+yMT5Atk0H~q-VFv%^u_Bwrg -zsX6=ex$r|JnSm3T7jN6UvY|sglUr0K!&)Ues!?c-c~_Zl-wnZAA=4VZo{W7x%i!AO -zN4~YQCU=K(+}bMNlURDL+9vrzoO{=_1#er^_K5!IW4G7snV@%7oR#;3ddLxxwT_Et -za&x(rbM9ZpCUqfp?z>9s{Z9pCniDjIeAM-)?PL#`&L8woz4~P7dkLGl6QdjWUu+Zk -z(ZF|DGKlve`!9#*mqgzDt-q3ZfKfFn&ORyDVoP%DQq@i07c)&fFT|~3 -zlJ%v;TI=ZYTd)~xN)Rdj6bJ!N^%o6kM!`{Vk5 -zuN-uD+%(^LeooyZ152Zrr4bj6N}m{Y+?d!L@uj7?=Y;2#sb7xvbDME;sG6{4?b^#< -z@xH%YKkRtm9WJp)Ec^a{PcdC*XtYY)T(wp1;^V^Xtvod$e3$mjIcnRVlM}XA@1D%T -zsmJrvg6_OxdQ~1_KmUZ!)Ls4m`b;?Dg#=B#co$5lJi-4m|B3nJl$e!qGnDQe@_ke% -zcstH6<Qz^IYE8`i -zihs2}PujoUIUZ2Qp6Idoh*RyKwR<0)_kHWOa=tc0(M49tAMYRd{PX>|diTYtieC?I -zKUcaSI6uF)W!Gc=s@*&fOS`4_f8XnP{6^ruQFWMMFe}l -z|GMI>7Qk0}etK2i!@|{hj!Rc~wQLETyCQR|vx;_gZ$zB!0i_v?J(KtY-+XT_&{~o# -z{zOBjmUS7!>NY=lmlJHAJ^?GN&s`cc~O^QL$`eL>v-PdVi))p+?eI| -ztXQd~v~8WjjGBa+#OOxf(7$K@d%L+FTvqGLHQ`~<+C~3_Yy7t!jK7$$TJ?KU^RkmO -znky}&GI=^5&Mx%XWXyeY(#g6NbN1hwreglXAb3YWSjj?J1^(OeM-DEm+i8C3?`9JP -z-&Ipj-jVt#n(^>wS;EITD?X!L6zFpXQrqxmrx$flLjFiM5txP^oQ_sey -z*z_5ED>$kcFZFIx$G*$6o4&ADr~JSDp#1g4_fLLttnZohyffRA=TqQ|kLxt|iOsIL -zqq1tfp?&Gm)?4Q_QeP+DnD=p}XnjE8a)0y1w_`RI)RZqVTDMc%b5H4`ocxu(v8D_E -z?Y!!`i*wt@zRLx@r6ISrB$}6b=zV(ym; -zPcD4(Y=Mk*otxk`iAhI~DsSg?;n}n*yPPxNvg~}1;)AjmRfM*^@tc08&Q5FTp^2YP -zZ*2&<8##Yss+8iS4K8=q?JS?R=1IF>dAzGj*?H@U*@hG=)o#0n1D{OU-uvykrFYSE=ZC2!4q@MUd-r|3o$I@5 -z@#K4ZC6-*=$ewoRs+i>>)|7|Ke0I-j6U3w# -zdaLa7{;krNg|8gHpdnB=LGh|zoM*tpYkQaM2>Nf~`17al%rhaCibrl;QWE^NslqGm -z*&eYJ`&z3Sf8iM)?6#j0*DvraZ<}6nsr&u0{Y#1`Sor+#%HU&+>t!v5g4*f=Of$pJn1#p{g_oEZn%C3dcXbf&tiVxwBq`x3C5@Ai9}@`kmZy0 -zZryaoSe(!Q)U_#-MTI->=jJ-;_MO~YeeQLNh6)%Mb9)BN~wxF($c7GdrPd^QGfc0<14<~ -zI;P}1G8@*mEi*na>G5v;9V^XEb6VODv|Tx^x8d1$$BmIY8cx*x`(Y%mZq~dwjzQSb -z^xKz&9d|<;!Z(WWUol%`dF9>oj#>A&DE~UwGvUF7b?;1DZZWt_uKB#M+$!+ve#iB? -zU7S^E1^hi>r6x9t#q4U2{&CIO?vmf8rEHV`d|PhP*%OKHLoUq@D=l-^?CadiWbBZX -zAFL+0ar=Kh<|KV~Rz@8W!IK;zOnIByvg@NPk1rG07a`5J)i`NQ=pX;d7QLmJYIl|f -zIxG>K_m1tGYS6{X!~3EZF1W0}SjYXa-B-y4xBkBl54y9O=bLWL!uXqVzqy1N>{f9x -zoD@ozU%>G|EbvF@xd#E~xBc1uqWWt5k8EDmY{{4NnE&y8Fg&)gXbsab_15P3n`@^q -zH#4Tb+`83b-MosBMQ^V$)-08ESa~zJoI&|huu44R{)v5zcho&x-Pi)S`2t_RD-JTB -zsbaay>3{4~2BzG-(=$z1H!6wQvE1OZ`cf|tkerh&lwi1a)yB0e#O5s%jn6CXxh>Mo -z`jh|Qt^;c$s!=`V)W-#AK -zayYOgak2E-wr2VATZUDWUI_fs|90fR(wC;g_c|=%s;-?|;dsbkWyY7)ALSStnU^sg -zo%WMq4#R@ASuGNW)H*IDoo#ARK45yo$kTVll@DhA!Z`O9Wxgk(OPnS<-A?| -zp=S?fUj2C~c!G6oyMW!coZmq`i;90}75h7y=}o+pcUog-j*DLCdo^d!SW -z(Sp#uGwXCFU9x5J%R!w;0s&<9j -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 -zmuGJ~GdckW14wV82z -zgNs()%q7h$j@k-uf3YQa;*P&IZ9;{&rC5`${}P+Kdt2?DRjb9G7vBDEqv#i(cE9m; -z@U^DnVn^@B-WEH(qqcRwKy%}kQwD+BUj-c=OgL!5H!aHji)-d(_n9}|%zd=>ecZ=s -z3c|D39=#ovzvb113!TF2+Vegx?`N4%S1o+VHoaCu?3nuZBRoe}?=RvnIk|0%@ISqr -z)yuO#x-M>AaZ}BMEBE&$-WZFEJ?v{&H@-f$A=;har>%Cc3j5XlUsKZn?h9JiIVJmOHU?V*av3CB9JAUzHDc80?&HV|aVh)}VqENt3#3%YVIYHZxf` -z%Sy%V*ex}o>FeDV_TMQGcn7#&U>U61f1FCWR-2d(;aUCFttr<~Qy -zc-GA*&8aW%PUKYav;PsaT%v8|+s8`w)jOOo0`eSB_&77 -z(_-3x-}yPi;q|e^d6G6SCdM#*+IDNg()&{W;gcCw1}fx+#f8jc;$IQ+Z3F)U^%vH% -zMpCZLlN^|ozc;Prc@QU{cZ)l9+4eulc@cVV$|d(VTO4Gzry=kEDLUKTK0YUu1NB5>G=>%wHl -zq)86py2a5o@vY~x%`KMJ9o$?Y>sMwq=hm6?Swef;jQ30Nt>08ozMC8eZEgmF*XNr=dBppyaR^-|Po(Vw;>To -z?msdXJC@Ho!>Ajc&iagV&W_bJ3ypX-UF~6<@AjSBxkywsT_mbxxDtF^pXWHmkQ}9-jl7pc=b}By8C9X -zRgC*J)Pi5mw2j$fEWb-?!iHec`SBn0my|K|&b!B^@=tc7=79vu8O(0ylK*k*@@)O5 -zw_;LRREVTk-@e}Xgt<}6nJSx4)-Q2Ztn{9EwCVW9`Kmc`i~g-&dStfGREZhuFRx&E -z=ATmNJ@wH|=H>P)`C6>^+6J -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 -z%Un%Va9v*?@<=-(X<6a*w#n4B6K8H5rP -zBska@E0{P~7+Dxa7+IPe85|jU91NV4G&bk)uqt(4<}W+r`B>zQduvUt%)tLVg7`i(e0_xNB#s{qp;xIZCpZGP$iU -z`HQ76zI9ShRG$^rByw7P!GyP0FP@i5Ih_8+^_ZVwRfEJg<1YP|_ZO+hJIuZ<=GD5= -zPpDR)QFNodeng7!qV0AX2NuY1c{=}RRTbX)j4$+svA~TDTN?wn92fu6x;7`FNzUPn -z56j-A&0oGX+aA5aQF6^=mZ)r&Y4i8blAJ9;yO{U>e17}4fZ!eB_mwkPcQqedD6&1P -z(oXD>j>nZV6D#cO6}MbTdZHP2{G7IueVO8Ro&b3pDoSnML9 -zw*4P(MbEob_DKmKAss5(f -zSqJW$Nrl#J3HW&~en*o}EBhT2m3^*NQ|<@N;8T*BTa|D^{XOGGULOCz&f>W>)0px- -zCKf$pw36k$^XicIKHVi=dNl`@bj(t_(z@iI$)bK6O=csm!sQ?5=T=*pzh^sm_|-G_ -zTVgEvJVlR{-%R7L%ww@XT(rOQ&dMVS_ML^7#6&fFXRv;ndT3Mqv*l@qfuD|Ve#hnY -z(xu6EUTfm+&Djq{amrc@@#x)iB>ZD}FuM@gsoi -zxa*%I#TE?eGu7-^H6H0t;nkLlS1deo#X3p1`;qfo@8ktP60ZF|a#$`xdX98pV06Tz -z;Dw5RY(QVRtIr`c*Q69hL -z9vXl4e%Ptnv7o=FqKYIz=bFTiH-HEvgr%CuC*WS#vf -zpHx-8_m*?COkB4_Xh+-9se+onlk=yVT>HVdpP{k&DW{m;Sq;+zdk$}Dy05TpR&<10 -z>|D8(LF$iW4{^o*5ZS9VBmCjT-O6c&P7QZwHQsy3?RW86cWsue-uuQ1)6|GbT<31a -z>hvT9vnz2etvK(Zv6zv6%DoTs{xYmvANZET^v&*OW6khy?^0eZF6S>*c%#^x#9O}I -zOGx_6mg{Biz7nE~JvVqQ`Ir?H6njYFFQuT-&mawB~W7(W`&)GrKj$W11Te#mLt=9Fb -z!Ae_!r7VBmaISda^frJiPS*eF+3?*bZR8Rv{~i&@_sUFnxbRFylJg^%?k!WpZtFzV -ztN$ay0R&5`jfUoJ5>dRz?h^(y<_Q@mL?D77;1 -z?7Z1WijFQmbab{-oR4$1W}JiGRPGJeKL7?=LZf?;9YhKFB2 -z@K@>XU*|dXQRJQP1&_NuZ?1f8r*ufpZE07`x^}rN|Jwo5Pkz}fyvP)+nScM+oeNvS -zmv(KBPLD9?G*!5v%ICCCAz`&s?Ca|0>2~4Pr-L&0I^;NZtew<;?K6Lv)w&4PtAd;5 -zI)Z}*QkE)AE&a%(WxcFwvg|T*y(ftdeO}IM^hHV*|CnO6Xv-Sk9nP|+!qo$A@2$#c -z5=hGkd!dS|a@mrIkGzrRp1EkGrk8cmCkj-UpX|P2BjZv5B8O?A+&d -ztNdCS6a;MSj@hr{h+C&w@xWMc)XOA47fwtN -zSjd|o`s&P_=~ZsbCMyyx6iYm11rJQ>%P_E?Xk~e**db}jcg6;&Yxb&ByBz^@^z8H -zk%#Xcmx>5B-V+geDwvQJ+)^S -z`_7->kfyaF=0b?aWP#I*RJf)+Fz|8xQI)XI*hg`O9%qV+`=y>+-tVtp=$I+BeAUd1 -zmn@BMJ0thLUWEyYsxK$43|%5T`9`>L^#sEpg}n+bikg|VD;pL~b}flN(XAePfAJ5m -zyp|b1)jTu8#GL~TK1#|89=O-@=YP}0i$_&IxCDEh;B4c1W>NDr?&4bWFLun2`PWYr -zwpA$Ml~L2%Clp)J94#(hD~ -zm0E3K(D>3aAvJbKf~4xgbRQL;7>g63KktY>)qk->o=G`kdDH8c4#!(Ib1@?K7nm@8WMZnY$z^by|VPk -zyEQwbmWF*6+^@~~a?YGYjexK7gH~4>H%!_8SAl2g`yxO6nn{83oTUYGCLdX$-c_&r -zG<1%$xXPN4+M`#(9>@qTmE)FK@~5^qsp-sxD+?25FPR-)Ge@uJvyVjQ?8gUder3(> -zzhv7RraSknYe%n6Z~Ux_A4Q#Rxour(sxNpuCd#kabp9%a%q-EJnRYEv!qKz%TlQb8 -zIqJ>5nxpBN4M)JVld09u?mvq3FxE_sGAVu}zSuVH9`m*KnaTy%WkkN|>kF+2-&pqG -zu`r_n`yxBVnerWZ@0ez?-*UEHcxJ)R;)DyA|L#?P>?~EhI6CRMmx`m#%y|Xo^%ae> -z;jc8Z!cM5KNc-b?CVtP;H&yqU7u&FfD=_;{UtToj!Yx)w)(zb^7+XTcdI1Qqq)VxA(T|3iZr3l?w})uK3XTPXHh1OPixcE?sM+CmvpN -z+^Vgf|5GI677@<)<>Csd>v%1%9$fVKOTcW=p#MK^{yld7h-$LtZ}wFW(yKkgpDGsh -zr#zfFd5*m6Ro=xq4|YtgVOe2YvFUrQ(v*K&KHbvMI`!|@=aX*7YMLtc+&KE#{jrun -zvHaqSNfbv$*cbY^I2z2Uld#y+}}e|~zA^!!4u&&8#U2HzKz-*np*<3HbByZLGM -zy@}y>pSsH4^Sf?*cH;|9-vEzf{VsuLeu2@U+d5IwllQyYExb3Jrq2qC4p_|kFh7Flz>62&;U_NtwD?xR=HsEYC;H4}uc;sOuK$Z& -zQg51Fao*&`l|@^=Wizt}1d%UY`22+9wNNy%RH0wEz9T75fe6#auL7yd?AD;oX;GUj}hYNiF;H=i@=nJtdqj -z(cC02<55aY?83kZyHXIG&D3YG&&dva4;#b -zG%+wWI(!gz5D1vSp&`J*G>4^0Qs&{qmnLl4Def}Y`OeIpFxS}hpR@ChHL?d@M9Usc -zzsh%Hn$v%_t9&{?1y999`W||5#B9NC3+5(2DF^i{dGG$}SgU6>249#H@buj0O6CJs -ziXJ&NpPSXf(rM>s!Rg|zs1VjOxh^y+=hhcynYlZ>GM1hQZ_2*(`4zjL)5Uk+{?9&; -zd8}bI!^;aT&d1t|-uf)e^gDA^sOn2|+{aBKnN2O$H>`BeWaW#S{N-b6wRz>Jw9)g3 -z(pw9C+gZ0}?YZQ!rYQc%{#hlu6K{U&Ryx~wHS?m0q%qga8Ee}3S)XfsN=kJ3Vciw8 -z@Z~K==i|(toBTA_D_xtO7Ax_Jd@=TBOkY==n4P&I`O>N(qe}e_4Y+Z_f!JT -ziA3|waXa23llSjgGV|FP9Dcmtf1Q=_>UuQg#;ZyHm$aWe#}mIMh=nHA@ -z=Cp8S?Ybm;=+OSWh_sL1B2Fu7IcIi6_}D63Sg5A*D?7L2RJ^23o -z|5FYNM&nM?S0C0V7%vY{-LdP_DifonqFNJ=3IAi;{p6lz;?0TopR}n|dUy62K5UvI -zR8VB0Idiext)L%X;;((SH_U0-Dc|~9#fwex%pc1s2UfN{dNuXMPjQ>+kq-~DE-G4d -zYuC+u-WfkHr~aD5QquM*>rcP%eBVcX20ZE^F>j50AFYxO3p7l9Uu*ySeS_x=^)GWm -z=1r;)?(crv8Em}8<51^~UnYV#MBRnlHU@58eRP^iRL7i2Dxq~zTQa9#Hd9dyUpeza -z@af;hQ^|3z+ityL -zoloRbRa%lGtE6^cb}CEaCt=xxbAG;4?kp1i^6T&{$r=`^ -z+<$KW&8%-J`&wPz_3hHKM7f9iXJ;Q*p4hjpVo699)6K?DHQSZ%9Qf??OE&t3pir-_ -zO4+3R=!+B0cXj%g$^L!j!T4$Czte)#Z3FYZZY-%Vo|Lxm!<3TP4NJOu1kO*qmwWRe -z2locWXMeVydMvVUhv1^4AuBp-f);I@xO~Z^;0No%cDkLLuPUCs#Pr;wtC7okw_m;( -zV=TYmYM#lWg#{L8^|Bemn`MiAf2KW=K4s#3)M|pm84vD)qujd6zr8)ZuHMfQkWBQ_ -z&17G*cheI7ppAcaOC;Vqv;OHcJ)<^3i%kL-gq#+N^?V5`b#^!?{6OM~;7mcmV?lS= -zR3~c%I4^1Gv+Z*6E8pRIZj;J^b?OWI*Q+#M6&Lz#y{4q)N!*s_L4t`sGwY3(be!s% -zkf`BVvm|^$%hH^)O5t|9gHyVig1ngj1*SY;(0az+sT4hF(vmyMYb!UZPwH2@FK*tq -z$6YRDA^WAuYi=m4$dv5LS?uyjLP>t1zkI3c#0DM}&i*fwQ;sMZ2=g6q -zbJaD3i;q;^> -z&P4s(a{0`fKl69~)LZf?fzE4|e(u*e-0YLuX~$Taj(7`RZlw8y8Fxm1v3bJ|OJ3!o`{|;^eHxh?)Pj -zJhJmrHr!iddFT6628EdlVb6B3FwT@%s5(V=mWzP>stGeg)JwKI&XL_{YWvXHmHiX1 -zv>g}6G{x(JalJYQ3leH73;xP&*xJ02ZT8IV&DmF@6y_ZFH!T*(O#T(3a4bdo=VFIh -zydlOl&NjBbpXW#igg=~pkdx8o+?6fme`G!O7yEQ~Y@f~$qRw@`x%*pP)Rv=O*?J~= -z7kEx4>rD&^Rn<2!Rlc?Q%XPhigI?Qs@31az2`-+a-Pq{x=cjnah5MDak~7$5uGy!3 -zVJ=VdY`eqVf)=knJ=eceC*W$Zl79-(95 -z<bIy;<;&!)jg`gWWUZL-nP$&%{i+65)b3{v? -zttK>YuA4|zh+JEnOTW;(?KM9-1s3bhD!Ou8{@nv_eR=){;mj7-H*vef>q`35`Cd5q -z-q`yq>epqT%Z!@$9aB^ms~vXnla-SZ$ -zmGY*Th9-4<*!k^}5Z7l1jTE;HOAmkCE){<&Xi3a(Gx2Rx-laYaU|?sSr*SFrTK22l -z6w$TOS6pIh%i|h$XwNbb{>=0?_SK;YbFHrZxEN@e(%+!lKZAWnuY1tex9=8ia~82k -zHp{xfnYGwQrREV|^T#<3eV!MmYHn2P-_3rvprG#C;{_$p7v6dQcH_qluhPBu^HeVD -zTq>0ve1GSMl*8g?yXp_zTF)jjA^Dm08_!wBPyT17-udP6%f9KhV8tV+hBcfuyFW2* -zcv2@NtnlC%>nszqN^J?>85JJl8#uSeZHehl_B}EqSnNqh@N0_7-px5o?;_4=Sc<**puFZtVCk_rOaI(bNNM;Iwf(V% -z>i-b_mDT6ozFB$uLa_Wb3*+$AODl!{#;=Z?;Qrvi+FKulraw<-%GmANyegHcBvXlr -zje+Tk?Sc0`ey>gVbtX-?+)%73yK?YJ -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 -zO)a-(?R$4U;D34G%s*1g<ReFCh+rFqJ -zFYiwLA-VqHCoyr!88dq~zrA)*Yw=aVJJX8iSJ(-1RGr)rcv)!K?IlmUu4()@y-2;| -zqp0cQ3pY$utIsP}`#*@_=qlM*9>4MX>;G#7tL2#-)Ak0}{Oc_IGynUogTe6?+W&5T -z6WqI3hGz%k8?C*Zw}f}-pI!gO*Y{3N`k}9!WiRjD4Xs^Yvgxv5lBxfN#~yobN3k#F -z4oNI8ukl*9?9C2~>+T`MauL$;%wNTRJ14;B?%YEeBTY+jlqb)!YkB8#bl= -zm7W^b-Mqr~E0=CZ^~W`SUwI{`K1i>A5oR)3kE7z!-NH+Ak2?HHz9bvt8R>hmHtgPG -z!|6r^MhDhzToiEgjX2Y!_41~_BK}NOxaL(@a-n6()Ft0UA51PQ=VER+#Ju5OoX+>^ -zk47)!XX!V5n|9}I^e?T~?H232X8f7rR@HiR(~_Cot%sx+ZfUwNt-Z4KQq@e?98<$E -zRkbsUPk7p5qf~RU1_D8UflJoR+IPT&ityg-BfV#o1^~B7ZQ(FJN*2^t#l*t -zu8jKpL*+j0E(mm-m;EhgPHXL~Ez_F8|;(1*(%fk0di*L!fPEY#rc(+B^j4%a{C-n3VF6{e&a%nouXaKCaU@sn^w -z<-N}ZM*W$KL>vm1*|3_(Ye=Tf*!yVGzm#1Gztpb1PPpE4B5IfP`MY-)uGzKcZ=HY8 -zmgPq>jKV@!gk)vx&5tg<)uyH^$bH1Ime2Rd#5;oj`+l9fX3Z1X{BFkcBNwbji|6a$ar+IetG`eZ?E;794289o^10hTd{^5ooWAW`qNMf0`#r6f -zQs)V;liqO6$l6EuMOai=<}dTx5n*}V$(xnNi^DZPMom$3H7jwF8Th4Eum|~-cy7?w`d>6l)i!IvpET{o)NcL^oMwG& -z-Q;^EXUx-FZQ2A=cA80?-}#~X1ZM7-uzdNb(wfHBqy2gD{bA1~0 -zPxwBPtz=KH_3dchDok{0P(EGobULrXMN#kC -zpQS0yYnxTnn8%pYV)^_ -zrOKwwc`d@*&e^PtoLX}~{fa~Qj*ki++t?m$UN%$3#c$I}WyK}upEL!kwESG)DPy?w -z^R;`P3+@LdUt7FkfAg{U=nNyPAI;nvy_&jTLg%H|i_Ogbw#u#}^_0=eYf^VVINHo+ -zEczQ&?2!38A;;s~m!MPA9w>Y=oh=l1#&)AZ=!_f7kALpr-6Xa0U!wDQABV-4eu{N4 -zeHJM_)e?J8j;Z2W+}FO38Am5OIK?bDC;mh?aTZHNu3=Qz(!<*;XBBSeo1O7$`H8~; -zC(Jd&E?xZe_|=NptnN$7rtR8RTi%+qal+{ZOTKz8Td37I#U@MPL(iQJTWhw7x2G4$ -z7g)OgNU=3oer18&J88|U)%}4*j2F!xE;~N^!{a$>N4F;A{p3^0*yG;6|Fm73ayrM+ -zr!T)>dZhI1PyNTYpLTOR_`-IHXXCHgpEVt>yT9qHYFn`6zycY&-x=x}3+_)~xLPkR -z*Ztx5&y4R!lTz>gp2D_frqQB1pECW+gF5I+vaMlni6hc+I# -zbAQ)=es13bQvWxlxy#I`arMusKfn<5{_|3gUWroSo`VdFT7@MVvZWc6b_q|^iu4ic -znZ2K7nIUJho02wTxBQnhgWXaVF^hG?m+ws7)UhNqFf}oE%TbqJDKEzQun5D?h11ZFV(4> -z$;=QvlSAjZ;shrJ*K7w42L;dm6Q!r-GcS<4eSJ;*?3XW3?peAjr1M+sg!g)@HP;@E9m#i6 -zOcIZN|w|2@LS$zBAv8OB29=dz=El&FUPS>5^F!8_o#x{>=#s`+tZf1A< -z{&2k$je6Uze&+LM+tUjzCI84yVJJ=Bw^*oxm%;Ddab5=V%4@}pIdj-gZ(LAo(NX*2 -zpEi49PCL86+^3J@EESS+b{xDSB(`4W%jx$w9=f}$aivfCc;eyaB8gQeG`{3dnvs5O -zSKL%)+X*wayWCy3`0&M4=@>n>}&*e+<51tG>!@l&^3Ds2_UHWFslF5;oHE%=jM60C!V^z!{2cGyJ6kEa2 -zugIt7&h@>brt4(x+jIZ6Il3wT-2XhwW>TBl@4ASfc+btRlVw6hU;nHrN}qJp;)}!k -zo-=C46f>i^<~%6ZSjoJ?zDV&;OZ+$K{KA;9<=z$i3{#D#`-?y5Ja*vq`Fd*!lWDL1 -z_-s9P`{Di6gUwA{9b$)kk5oAP@pIoV5~R}V&Tyl0XXh;kHQ(yXo3s?oT?R!3T -zXXA%g>mm*0pYD2Maa#1}J+G?mRwq2}7JcROc=gU{ -z8h5#veI0FQi7xP35qV{Y!sGh553$TCThp`-?OWJfHDm7OZySy+ydQsU%kFovR`bQu -z0@GOX0vh#2CD@`Ef;xW2O_$)kaxBYdjgOkTWLfBididA9Q0u5$Ui?Xgc9judTq{e`*lsU!30bgvt% -z)iUkvp@d*;x#qIML}kBZt-$WbLQ@}Xe=JmU -zc1fga&mAkh9aih6iLbp}Xe;znvf$SG#=V+9CD%{eX>rx-Wmnjg`HlrKkqH|GcLkVo -ztzI2mHis>_WxrNOH(%z>C`Sdgu>LDi`kR@&WPQ^5CMQ0*{9<+*k}o1vqwfvU*SNc*$p3^lXX8Z?|?$o*o!<5jOb$H{*#N50MY -zy0t-emKA>}clqA887|gp!7rzUE=nvF3yivcWl>I?HqQ6rZSIeYLd#2ANmmE=k2)I>nK7s7ZD0F|VkWl}kj!yrPcoI`0{E -z@A}e|;6IM<1rO?;bQgC&bVGyx^xZ#m4*fW8d~t1vqU1g$(Zv~DYhU-Je_&lJ(dM>* -zE6#NKi`%ta!rU2+d$>hC*)w=Q+|oNAuqSJ&rOS_Rk$m0)Y4fMb{a&*!f60~fo42Dk -zR-Nmbx83RGwR*eNFKfhpwy6BlY;u~h_<`0Fhg-9|52x=vly2C3{#4_6r|%m6KdaC0 -zI#qq`&n8Km|LlD$C*~OXHAuxR2$;Jz{cVr+!h}#hQ>k^UJ=`6-PUbCbp72mK>hz5p -zB{nkmx;D3^mrS48yZB|U&c`)dSJ$?sGp-JmouQ!kwD`XPSgX5{ntGd68@Ir;5g1Iy#3H#UeL+Z*TLK7qNkAUNIh7yFm6bk=wA -zcbdf8zF9gpg}NwQ{QK`?>gG2m-!I%;CO@6UNA%{230@i}mv{HAKOn()t<_}eTUCcF -z$4IZ&>J1epujjn3cz$Hr&D@Ne{9C6@p8M~_i+}8{_ZRo}uytX{}O@y|AOwsD%efvmExRJbvCGJkL-1wgXi~d -zOZ$5Az#)~jX=m$13|B?o*V))TYw8@MjZL#uzg=F_#P5Am%0^L-w%1oL -z^CtXWVG^R}7w+Gv7c;x>hf^B&1KulbrW;RGy?uT4;8fd9?`zH0-OHam|4KOji-4!U -zp1yxo@HjIe$}{R_XVuU4MfbdKNiMV98|XB9>e1Ti_vBNbI4+QT>Z5mEFZ0T3g=;Ie -z|784ZSy#2}#@B@tr^PAOM;!Bb_twJpqTm12tp{S}dEEWPl6Cobs*eALxJsv@QwghW -zE_y%he5fwQ*r&d$p!!(_)A5fk?Mwk-4>{jI`ako?nsp1yEciBe3H;}NvQWRr=*~`? -z9k2Gjcv~iP<#C1D@}dpw591#t7aTC>m$leiqQk$h>3q+c*;Q<`-ci*nGm{P?s-av$;;V`s|AB!AT29H;f^Mj?2%)S!f``mGdNg#vn^DkGAu^-C{ -zJFw$t#B7cCNurjkBT2TzLx?n*v%dH=zJr!#J792St3 -zO{q(N}EMEw!RCF -zoGg=8)|tF7C8Xuq74>V9%V(BfRV`uYeG|V$zm(I3lgD6sz#gIR5*`IMxz}YTOgSR1 -z$yqebJX_)Xn!1?Y45q1Cy-| -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 -ziNy-{ug45;HDk5*4*gDss -zy*)QKJiB4rTg@LS|0Zs#+r6~?y6t6w%Ao7ToT3wAy;RTiT=~UpFja?H*@71uv$EN1?aYlkS`)Ca0c9{0k0k4K(kxwxz6*sP1WA$AQ#2Nj~u -zJH1=L`eiS}B^Q3d1-1{G&K!L^f&F`IWx)l9uLirg55M`hu=n0{%lf)7UD2z%UR*TJ -zFjL9OzoO<|w7%V6zD%R&8C$|;dIwztb>61Na9o -zo6`)^55+B8Wj|GuUo@F{+Ase22jWLWuKMwBa*)ZCT6p$9ccRBE^?6%F4hwA+F;&af -zoK*7IzgpL|D}9#E*;$LY-Yc1KPJXfK3cjXH~sI9oFLt`zv}mS3N6`miiPW?sLMT>)5ZqQdtjUK -zYwGiWANAd}4Ei5lo?UD8;qI)odl#C7!s07_%hu<~<%vWFEuN~>#2$IeX_3Qm`Q)~A -zeF-ts&Ivi}_A}BJ{GYPv+On+zg2!{~e*W2D@aNX?B>f}C%#))n7-dC*<%RF39=y=> -zeAC?1fl6){b7cj^|B1wh+;nVSYb_JMDx&4UZJ|nsJ4s!dZ`Cq^IT|<*G=Ww$0=3Uu(ao{LvTjPqrC?f_ssvd -z>Y(JRME1N3C8t513#>Q=Y -z)4piS-j06^$9i47o)_%8zn~>F<)G0?hSfXz?%5sEvbtVs^sGPBMZf0zA8GC03;m1I -z!=-i}biCo}qUZfMfgv|BGiG<&8HTNw0#52TKbd;$#dD{VE2g=vijoTAFV756;LW^Q -z<OtW<)$6BY5I=!0rOTU+!W}Dp02t%=X5^H&P3F?(aKy|N8@P&mCq*%x^w=%d{^^ -zxxG0zm_z-Dl~dlAf?Z*MQzsuX|L9zLMOJZE^%`E54c*Uf{jg{6sQahiCTA{C+12g4 -ze|@M&M~}zZ_84&vg@}+(QU}houlW*p$?lBxrgq -z)|S8g5nC5+yW{_5UnM`spL{o&74LfPJlyM9Z&5PbCz*f4k?(=ELq4 -z*H(Tne*Ws{vOf|!^{eNzOrFe8ls9vuwedR%tCKep7X~#HtjXYF$XLU={>!`HKO$7N -z#pq-_`Np?#-N9t>^U=Bc+1bi6yT631iyOFYopa-s-sPS$uf;weXWwhyQ}KXXVUb@f -zvoq7~{reAZ{ABm9ul`SSAkQ796+5`k1i8QJdwpRG^ZgAAt)_e`h@Wt`e3NT`Kx(jl -z#s`sDw>crKap`kU#`tWX8eDvK>Y1}^rK-4#e`^KJ?5|8{{fzO41|D$Pet7d98^^sl{gY-5J6cB<24 -zHD)mmlg`(vystQBE@Ex?8~!%vhTWZgwMp9=ggE`QX0RXQ@;Uvksz+2LBlWM#gxbO* -z5k*W(-q}mKI<>jy#U?iB#J}3q=UIB?rii}2mMepZ)JFFDh4~4Ba(Vw^D+FUEXA6k^ -z&GcE+-Lg`C2~*QghFvG8O6Xs(`?}%z{ijV!^VKH2kg=GnI>qkwW`|fAi66n+cL^PK -zU|KTCSM~Vp<=;;|eYZ*O_T1NODGYT9H>I?86-`~}-M_Hg`%!d7#lK>M9Vut6PW#-l -z*nPRBSwAX2lEGB{MU#-g33qYMvf`HxOIL=)2R*$OWN3al`FDBM0-Zh1@-BNeDy3ah -zO1M>1Vvz6D_sr+8ZI$+lqvxKq&CK6WEV+$ihr;!pET;SWv)WHy`0o2d_WmRPJmYzD -zZ(Pt1XLzuGPfzK}?fM%Jxb9+I6~6nD0Q=*V&(ktrEH+MjHGh(!t=E^msm#m#KCeA` -zn=QYhXmM;Ox1qC@itLHp6AwS7wCddSFFBB -zxq4YymQ2`UdgZrmnrV;R*^i93%y_RmmIWnWt*C63XTM#0)xc<8hvwgff7X}sKU}}< -z&)!=~yKg166>GCMeb|r{a*8)fXsXy{qyM+c`0g5JKi6VzJ}pyk&NO-6Nw>W&w%(6Wev|zgSTZqn?WAqYkeK&l`&y8LRp~E}k>xvF(8^>&{1S -zd(kaFIp0%4X->iOJ}~ip?>q4_52(AF4P)@WfrDfdb|9}tv4BOe|IJB -zTfd`!<>#CSEgwGbQ__}`op{-5i$z|1XJN)0ZKip*bboa%cZn~w`y$#V@{5b_msfz+ -zEx{61p6Bm=$<1bnm;AZiZ>2VyrZ#(1Y>l5(`5jdkDV+-e3wLyCSAAtSVVJu#V9~!! -zBTb+3di})@i%wpXp7}y2fh(gs>=(aVU)S%xxCw#`%lnoI25O{!-z8P&htc%RN{7Zalww|*(cBQ{ZqVBf9Ximtn4E=jhE9a4VjiVUE0lPJA2~e^8aj^%{SdbRt4_b?(1au1 -zJEAd5(c`m}{i20QbqTY2xO~1lWL)Sn+c9(f72)>0K!H`|QSVt6%5XjnYFoVf*s`J* -z75Ya$$|XJCYts8&Nb>ztgL~dDAML%PbMJKMp6LrJ^dr^oopyh;H|9unrNH}CxqGKA -z_e_sIT&>ymU5NWV>*q#p-YE*5@&46C!9t#XTkj^v?|!AfZ9$zN|CV=+X?L4X?qWam -zetAPX(ern@5FQ@C0_sGry?EPlT6g2Z0_uROolEuWTnwPaoNZRl25sndBo -zh&je*W}w-zga-4I*^d3yAMJx1FNce)-=AguY=S`%Ysk0KdGDsql>BQyML8|=pty5V -z%jC2^FaBmu2ciU!jW@07&l1f)V?ld2`lWIdf1q~)BIuD-t{#qPZH8P_`|!M -zrXRWNWip%nVk`q6Bw0J4&s>e1b5`?tszkJrox6q2%b#YVVybCN<*$I!M-W3PD?oY4nP`~wN -z-ir?kye~RS-kn$dn|&&6i6e7|5P!I~pnq0asqe#GoSAcN4wl@TyVI13c -zL(hO|yVIsRnM^ppz`@}jw?JE%y3h+l5C2@{00Wt~dWOs&&l~)#bKDVT=e6g-{fpPn -z9cl7!x0T!YV81x`^;=E)t~*qfZI>l{w2eM8v1!TOmHw+Gxr_?ta7FD;x%qv?v9nu0d$l1b#Oa# -z;@0y;9((1&I*u;j&U*D?MyvPbrdMu^yEbi7P;@>mly=bn!U3&i;RVd6ns&9^QBu4r -zd|%+U&YdFf^BO<+X7D>yg&EG<@jB(@&1a`w&9W?AHQQx=?_jyp_{J%8YEVeZ?<>do -z++IYmY}uOaYX8-$Y-8w5CMkB!)t4=^*9J`xUU6PcS7!SIIRnR!#flGF&VHUSzxB*% -zM-kPs=9xEBR5K?3(UmUSp!R!pV))$qci3N~o_8tiZ{Js#vTWYECjwqssjHgGY+mn{ -z7Y*9NR@?t5{?2CAq9FclqG$K5Iyfb%zIHNC907X3VUB%N~}EK7Exl+RC2Dd`=rf?V@4w-!8LdTMfLyTZi%C%ybOvUVz;R96ZyOW^HdT-T9t)^XdT*_+d*Dr>ynF}-E4 -zL&Kk497^*nm;WnvSRL$Z(4_bIY2xn%w_K)p?RE1#WHZZgLsh`OH|JQbE@#)vb5u9& -zzTM5p#Uh)*%COWpL{RZ$WAD6~A0NJX`fXyGUtHd=cl{@%TG_*P=eJo~mTGJ*F%Lu~B6%l?0#UrnBXqn*tq`^X7NpK?fpO&|U76Lm<87Dqw-XUM~NpAMC(_KGqOfXqG -zS$+!dtk`KzS|8xcC+SMc)fjCtWrE&C9OV^S$Qr_v>_~{zrPJ-}f)JaGB^ID`NgydBy69Y!cyo -zpK4gEEp9~iibM&eIB=|<$kqDjTh7w6p}jeKSGm2IqvAZF<~x(o^k-FEhiwdaz1z$V -z+bhI-Xj$%LSGno)(MQ78wtm~n{uZ`N*)eWShf`fd^<5X=wO%Fo?Ns5yU-Cs4W{N-i -zX%rW08hrfmwD$xJr7jB&LW!Z6geRE;(FYSu6 -z>HH0s;sQ4v{A(ZmJoTm(*Sfpm408&_7B&Hi6r{ -zj3Im)N@>EMA8=Q4Dctdno6II3J#~6>+5f<;LHDn)-#bv=CutG3YwhKmb^U&;*g8#& -zzA0;eTz@T8>0#7^(+}D6StlDLZD%=<>dg2wx7L(tyYy8YaniU|rclQ-Q8O?jRYSUXT2{=BWA_TkBi?Gjg*FoYJ(HvTi@R>;Ko@dZ!(SU884w -zUcE#s|D3<viC9;)VWIp1e7i#i)}^JVI_&02n}+gh$oin{E4GR0&1nZ6ZKWq}uy1RbVL{+scA -zo~P-YcLf3mJWB2!e3EIB=WDKY)+0!X|J*-|d9%|Fy0Zn?@833MnPV5fx7M_`XYTPG -z;`a4nn6@T(3d0fZhMmE;bv*b(k2+ma>HaMBI)9-I)8@rC#`E84z1jcRDZ|hHR6xx# -zdCk|Wdgde_Wctn+?z>U1!P9=zq`H!K#{_bDb&fvNco|c>!cx$btZ#!Y6vV;AEe|h7H;b-Rt*< -zD(uhx%5*+c`^@$2DXlLy74Ne#So43UmP(zO*_ry|d`)gW%@!iFHP1xOp_&3Huy>ADnypaPkdRIuv7GJ3!B;foj3A(gj>&)_wyd( -z?2`LmCuXI;?}GDR-y_WZ%3lm}cQr}XNigl2%JKE$%&cR3E*V5jj<_~^!=CkiNzUnJ -zFS;Mu6&#n%UL(3h-N;+#aM6P`XA352PiyUAT4wZkXZk{sDDmluKThgKILws}J}v5D -zbl1n@zpX%gn$+_%?RKY*@f|%po%ibh?H4Ccs*3yfL}SBVmh&B}*=_hQCTi8ozF>WE -zBIl`g4sWaB`@iBHf0Y8-H4~K&nR&$p -zr8%i30YN!AO75v`ANL&I&uiXzN`Lu@1J+nD -za?^_H!y8}ohtFB+bYk5}H=mPxAN;xWM|%s;^NsGW6_@+gq&_&cTdaod)VimuPwG1} -zmuBB``SAIr$0NRHTQ6UHX1e<1%M*vSCx1}tzabyMd~l-6rR^VtTQXX-YQN}w(sY@A -z)#%&BO}8gz&FsCJIVZ}EnPsEO);GeNUDmfph3Tz`-cTL&ZB|#d_mfQ`Clkw?)odQG -z>t8qF@|K+bh3@&HK0i6!Z1^g^ZdoID+jF)1w_b&f%XCe#Vr=YXMz8R-AqSWkDg`>>=gcovbOikYO^jzq+ -zh`C-9!rgizwH|%2Tr+i|!FTBoOW&4-OKQGbd{#U(^svJA-sV#;zJG7}{>Vr2=?tSP -z28R5LQ;oEiO$pr7opaMeGE+3j&3L`-KC@FEj&*WYTg3aP{L{apusg@+#y`f?DOx{Y42S&Vdkckl*tn}e(vLb`(}6AJl~&}E}tnb`ctj*(&*Oz2qUkEbE?w% -zCq3#8ZV-{oZQbGcwrAr_N%d1-q$JwQyo#o|p2M -z{JXyUA`@&q+P3eXu$Q;CIP2CVr39%x9N)QDaxJhZDw?|d0b`$oM8rLjr|CLZRrxxM -zE-S0R$|)*=i)D8^&FTK=`tI1A -z3ma}eGH^T+a7~bZZc^=r!~>OYBCG@M6y`qD(U1sMNpOC)W#^n3O#Ju01n^b%=$&&o -zIM>%uN=HvaZ9&}L&CPNlPK(wr_-y4?swC^$z;;*V(Bw0ZoDR=FpTCcr-Pc*6YNkZt -zudU|0H%xI`dB^{Un!%2Oy?zm9(OsLZ*)A8v#j?A^92ULWI{oupwfMw*%@^7wMb>xI>vurzc3Ve=$v8S|K@h)&$#rqi#Pu77qI*<^z*0F -zm2{z*%>i-Oo;D>qKjAhto|$;z`YgYR-$WUv{_IU#Yr6f#c3A<=`c3ETELVI>5xf2KUD{b40GI~Yp-haD1e^%*(i>x`?yClDzW$JBKPw3GnJ#e>-1&c -zy1oqb_7*VPTk_E4jKC|2%XjO-)P)<~tj*uUV#IyqNI*@e;#;RD79vevD!4iy!f+u!aex76bZriW3 -zFJ}7-Y@hLd4p&{zsnsuL&tH^pb>^>d?e_^0=N2-ESiiau{yF`8+rBAQlOp;a?L6kb -zE1_lInjoX@u7B|kf8swqEnKi(C%AX!r*6JK&wux_U!R}~{0$vm*tvRC#&=yU5Ji^6=_KJmHwla^K~oBR7) -z#_#wa+CTqc%~ip3;SF{V)b{-RRrdMo4V&EX+3%;Y-hI=3_PV(1yNz$!vi5o9Tx`y{ -z$#c2pbJF9)hKn^fm1pVi=e?S~??$|HjB$J;*B`^rr7E&+Cu^pDcYHA8eZ3w#tHLvB -zi!u`sO8bPycA1k@@~pZP%=tZ_D$4MejSl&N%GHfob_KIDfn8 -z#$PG@%5>sW?5T)-It@jMKb01iZIXDobkSC=c-!E)hprdz5B%w5mUK@d-Ozh&(7x|# -zPpkibeQZBPKThL*%)+x*kltS7H0{wtWdS@h>C%}=2-MW>&*{&Jh7!M^`#leV(`RO9~STa( -zp!WSw&6Ntp;uH2wXTQ|(gR`8V61swTShl-Huu0F`^=u}WQrd%Oq8pTU_LN3_ -zG!9zV@%;9J`6fqK^0A4|*;_CFV#^;RpIaLn?#HgtJEQb^Rl?-0W+D^9)6|sDT#)#_ -z@={VvW01)L(L=Rm>QDB{sGPG}*;RKqdET?C`?XERAIozccxtDw_iW)A1K~WbMZIodsxZ)?($NGPoNZq{21_yI52;H6U9{hLnob@d_sd16zZ;BW;SC;Qt -zb7DomuN05JSizk4H*Uw6c5sUCU3KixnL`FeaZ0vlyqx$AW>2zwvh|?){GWg1Q`S8> -zVb~jACZM^*&uZQio@bl(*C}4qkv#CnbKbx6*Crgja$=bT?*ubXlcs%gs*|5iy#M0o -zeZd(ko$cb)gnnJ`-mJgrj<=wDA*0JRZ&?f8hW}0Iv4&Ch1S%x(`^7e|L#q -zb#JNNorJo+$SDTR5v_WSeUHV&!*3ouxS*J2l3@>P8nfabvFQ80+*Q);%o -z=D$!Hu$1S~#P?a#I3LY?zsC2YnN-K}O%67Rb!Yaf><~YC^ja^QEJK9JUKOk4$$rIZ -zqML3@9W+~#yi|tqv*^m4-&1D -zD8l2&!f6rzzW-aEvg7zm^TV^%gzfSSX5O54M{ja!V&dnS&eM`w@)us(xTMooSKFdz -z>5OB)1?7sTet+urt?jYsvHZ8ih5v*5^)`xUxo+Mx+34A=t*6c%yE#G2Ivz*$NOIyP_3egb -zU#7lMw!U4*$vi7_e_`YE770(Q&UtNe-PX0fIbxsH6yjJmVZHNGrcK5?3f3(D -zZ*=Ch)xD9)p7w9XLw8m2RPE2nH@((s96s}2?s0*4=gG`xOD4aqo^<0Q`xb5$0p%ja -zL~*6EMy|5F^Vjn@84J!T)i(FOD>aePdrw4Y+)aZ&wvTGqLF#gt3zVf}Mn -z%vRkrAtCeY*XsGd*7yVkU9XwN*|eFjfJawt`KygFoB7zA_j+1P_&)t7Pr=f6(ocUF -z=mxzKIBxYbeAy$@YZtjWUP|#kn)}yt_C%drr_NN7Gd?fYy>g3i|8~M}8OGQ{6 -zO5YvlW9s)PIL#@PV#-R(m(AoYyZsB!6V7tbCl^Is*avpcm++;e#ZS))7qu1m}^_xhx| -zAadzR!{rm4Jd+=Xhd1@8PL5r^MCH*nRk3>|0((^2_daErewcInobKDE>5R+cCh6Br -zc$aA2b!Xb$=9!!Cyj&2*vOLe4FU4GZ{>vXzvyUy}%3H0sulBFS>El~0IP^nQPb$3G -z-Y=}a6}-nz -zcvor6yyR(pHC5YKJ~&41n)T}46!B|}o>tdZr|r44Fh7WYUCDtE!^hm|7cORSc`V)h -zm1X7HgXgXqkPJVl0+BCl9oL3c-<)?S=d=SyKMA@(`h}Xj^ -z-r{bMXarFbJ%ZK?(+R}$Tf@G -zIVpF|N~@dMe}*=lkYb(qp+ellR!6+faQ+nbPro7->GNG&B@hzxMPSb^j?m`tf`;i= -z@>lho^O$FKO+81j+%(x>y12#qPcru%rfzv6`>VNhWB5+>GmjU4JLdg&`Ptf-lNSsP -z<;(ASp0;;CkbeEQHJ1(xgGl`36KqD$a^hO2TrPJPeN^Lq`OFix8(fxG84?fV>Ny=* -zb3sqawcFeC=!wlyYdLw2*Dj4*KV?qVGWlBuZh?LLybakUEMajIHmYpm*c*0~b(@l^ -zg;Q$W@9PVh_AJtwxu7IrvqH6`&&K1|I=9S!_S?Q|$FmK)Oy|s~zjL>E#e%$xml+Vx33RByajU -zT$4;`iZgKd|2{M$d5WZ+nEby631uVE>n~(ZojYSQlg&YOmP;99wvDyKFQ#|8%(M2o -zBFrAKBW3_EKkvzzZV>X3Qz=av4k?%Uz>-%L1euySJVd~H6j -z0@WYVD-7nFPm5Zt^LhV8=L>H)u2ERR@}K9-@tT-hvH72$o;_u;aP94XAB9~VizK)v -zaQvIR)F@nIaU~P0#NuopH_vsu9w{Y<9h+kG$uKWSQ1bd!w^`qfB!re(-W6H=tKevH -za>)FPmPx@8lUG06RA%Ypmrxt$S@>$n0+y1NxBBkeA9*@hT@bk4d_Ui0>nqh`f;Opo -z*~|a(uwIXUXwCd@MfIn9o&ry{y_u{ -z$v)GnA_}Evo_5% -zN}Zf|>RIfmW1FV*hH1|34KlmABxl}|oHZUdGnj(R-UpgBF3xdVoWtXG^MqKcu}JFV -zi5jyx1I>;t%t`UonsV0Pyj&=D)BlQ^uCxAT?>*FPxuueu7r*S8x1i|WnW-&P-WD&^ -z;{PyX+LDJ$&nl}oXs6Wt-fp{&f2*U$nln?jP7LZkAtWOi@IP(YE7|5<1{Z!U)m_HY -zl&a$5;VHaXR4hW!fq%`7@P(?^Vpeli2$|c?V0?N{@A{P~VY+9Y%yR2E5ioz-3??7B -zuiPgWaLwV0DV925T0Vm{I%Ol{lgSJpf`juiAuux~pdz!xIkUJlr#Ph`CZ;SkS*cC) -zMX~~iihzKWp5LU7=7kO`j@`5qZaC1;aG=3KL4bovfr*2KsZpV!$3ehBfy04AMS?|u -zYguQ=@o>}ms)et=dqmHF -z@$sYk3Es1r?_DwlgoE^owz>whz=ZmVZG7};nrXQamf3X=LL-+J27kW%D06=58s`2BtG9;o -zRWxv2oUW9dTNrs>_|N6Zq8Ux$^P5=(@A;lMKIvA})z#;{qN_u;DNp+@>29uYV?)ip -z&MBo~5pfq4BShGzxzFFcq5kQ{?O(31|I-;?>DIlbcTdDlhsDYqD|$74SFzTuPGnGg -z`#v)^U%g@VJ;|e4mZA}-`#!JCUTb*dR$@o%^^1-D`!@VGKIOgQ*!^{mv0{g>a!ZR? -zUYZ_$V$p?U3B~oE?`4&>k`uE;H&5|Mb})V&DBITeIjmoR|A?@IZt-Cbqe7jX+&q6Z -zg4!6&w>d|D3ubxtuhu!NzS`*edllZ|=$e={Tn=#@XS|PlPjA?}f5xfpD-Iw3uApmn -zjrE%BHzu+FPu59nfBe_o`{(m*7Kh|@m*g|J-rXs2e+j=_Q^5=kpMJwx^BZShE(uMa -za^ba8V)Me)$LycHsK{$!-DC8AXXt?q*#a|;uJl`3u`FS8m?)pH-?!RnPKj}bR}$xX -zRn_$8+_RM4mbF00;mU*uGko}@S2x~N_H;Y7dM)SVg>QV=*DG$g@G3Cr&CBTp-LI8o -z=H7ZK^=h(-j%3sJdfBsGn|GZ4zr(fgf6TRSz9!uFYnxYnTf=ryC#Jxj-{j6F!F3Ls -z-!!C|`ai$grnmh0#^V+@{Bj$o72i&rGUvm~*};ta)+F4Od_7@Zc%06PH8m|$)s-Y$ -zcy<-kUXXYHa$;wopXt(#bF|VFu7wF+TJ-kdNqy7%P8Z9+>=CQcm>@YPDJpTpk_j(c -z!%}MRtw?1%JJU@x@{j9-_ktZNf4!B$_-i*xt=h`F?yrUX#|>$fW2Xm#JP-=PR7qmM)uNU37QJvXx1i+ak7YeJ5JF -zX4Ah-URzpMO0;-AxzO`rw&xpZ3y*uRmW5uPncm-17!cd~@tMUAs{nxHTnZNe3oV(Aa8OkY>oS(lU{L}KBSvO;5i}@SgyHwjdfg$6{ -zBCWZ-v)3_xZn+omXTEW)W|0`r%DHYiC|R -zoqD8s7o$r5q=!OfSC&Z`xa^dc=C}|&@$l3b*Ia=pp?|?gW(lrMe3+|J9$;zvdWnhQ -zgq7XRw`$){mDfzPV0h+o>!rKF@3-guu6-z2U3vCq`RXfs?})z-Teq{#>&ES!`x-u$ -zFfE$j^L6`F9f`ML*Yz}$?}$^ -zi`MS>tir)_tE+~!O}8j}{h5u+Hz@HPl36QrqA{b~YiXLcPv*8&GEd^8S7}c4i`{nW -z(I(M%O4jq8ce#aZJM=IxdzHp3CjPlT+md>(C}*T-UrYIUD!Fyh`n&h8oQ~|;kgV-^ -zJZ#6A1zINCq-Jdt{d%Edo>=tW5rL!z?h!nWgbo}2*mzZ$lhAQTVNBEp# -z75>!BE>O|py1ypx$KIS9?{4$;CBCoeUlG$8|0`2FZC0Dd!E>zhr+yHf#4&B#%gFZ` -zw=aL?UcG6Z%ZB8+ALLJXt&Diu_u?GWvb_z5T7Rz*nqP8S^~`md3fu25ROFo#@(7e+7qR|x9{65cWj&WWgY{|fvx^^X4#;b^Z)N`T@TCS% -z+G=i(fAbFQd+@)F&ukXsKM_~fkUB=bQ~KBD_x!!IS$E~Xty}(|Rh;JN-@t9ZH{FZr -z&*AE+|9EdSimnQZpQ`iw`RAu%F6X_1{|3)GwV}h(?!VWXt)|_&OvX3%fBMd{ug&(^ -zsiP;F`J|%-j|V(&oRPb~Si!pNwDt9l-rx4;#RLAm`QjvcT&!C2bIAU!M}mcaFREMp -zKc7Wx@~`XN_xoNudhMUTLSV@*)^%+>`}NTf -z$4_JoylcYqKTEg#S8q7exN1Z1j_^AUOBdfy&0X^H$E3BoJ&j#L%%Qx7J~21W?VswB -zoD&eV@JimzeHRi9<(Yo1yf3qSVNus&MV_$F37_<+^#<}$<1-3bg`S4<+{&Z{uefG -z{$srM)YP(Q%hpL#gHw4#eC#$ZnfWulVRqfS#$~+XjbB5~`P584?aarVdHe5yFF69& -zU4CsoD7+(3jPKptjmGPv=d8aPzqX@2@6dsX-hAkI-!ik_);y+!T>lq#>-+Bu -z?fPu^y!o;*@2VG4?#=o~z5OdBeEze^%xF&AVc_~W -zymMz--6TcTaLZL zxZGi<4vxlzG*?^XWaVGBMqdGlZVyKUX^hNTaff4G}Qof6xm -zd~TA?vm++18)`p2tgm|%xaWSXOm2(tJhqH*(chCDC9^snY^ZI&?Xly4`>~+j^=9IK -zQ~H{W<=-W3xia&a<>MFcCqMdovR-}Sj)k0e({5&K%o9_0tPu38xVH4Xe(7DSzO~1U -zpB_{2bQgX1c4x`!g8~0C+6=kH!x&6zwPzXMpFd~M8I9*ZTo&7{cL*^^jeVk@Emn7J -z$8Xipg|S{AU_uK)Nq=>-gFUnXARZg83}&-$f)je>O7ly>urky{r0 -z-`WtpPA_!1+JxDUm+y#6ZF~H^Gof6i@nC5K@2npu#G@8F*hcSu^X%4w8xN}GMOtE# -zmVZdpaF5Yux?`0mB6z@IU+b;tnE`WnHH=QFt-8!u(;P3%nz}_(hHLYbUDJ2{c6a>c -zb7jKI8OKfbP269(o%^`jG1abL|4XJ$$?ClHH?`#HwB*jLKhJmWJ1DgDK(A_~j`*jf -zj^=MG7}uX)QK|o7RdLwK{bh2(PwS5M8deHF^pxjJFPqY(F^TI0|8)+1X|IE3@xmWH -zDvw^iX~?g!nu}_x_$&7lkv_)2hQyC-qLkEiRoA>t4(I^!R@YVCHFdRoMgVj -zPn>DC&l1IrV*N=zOWX}7{!#h8)$t*BT-D75-|qY0YAWt*(F@7TPCgU7-0`O7%N47h -zy_VfZ1Es+$7Su?eE8jqIBx1Qd^(=s2w -zooX)4uVJVW(<2cg|3OEdt@UYLrpC$)UbVUZmzg)O{97XbqiGfoo6MJBN6$SABp$H3 -zMwc9Ha@FEZivAxSP<6~*oh|Z`#{y;p_8*Tjb~&Xo7#1%v)@)dKF6Zh5CNqZ5591a@ -zly#f)cFOAqR86t|!N|!J_}}-TnOa}1>uTqG#oT}cQ!i{?aWQ${niH403Z|{=wyQq= -zdfN|Go8Aw9<-d6=>A8MdzTccBv0AP^>H2S<)w@2ZC)ymS_3Heve7<)~qGCf$(xIt| -ztKa4Xf4xyx)x74Bg+-FPbydE?xw@>vO(&o3*6r>KeSTwBf<3F@7qgq)R~KxH+24KX -ze$U$Zd|T^QsmtDar05pJ@R9rH{2nuTwHtB!nPcLPyvXIx)qU>%^UzmmeXl1`sk3?( -zM~V7OyZ-*FM4x3&seu?r*gpq@%$lWNI71?mT+1xvwe!8FoxDF|m&>oihvZ+)+zEjOLGbKJB2(x=}2Jd)yu1v9q=u=dER4SkCYK+H?H5q|V&$7e1f)!BINl`OMeR8-4Cn_SveO -z`JZtm-usqw;Ka_)XP#{opZxBwe{AK;%Na!*dv5>NiTn5`m1}C&$C{)m^U9KMRFwvO -zdAg6O)2~+`RK-F6eE8){7fyPI@XIc5erkEGYUd}Lv(tavSz10}<+;F15$o=-1by$V -zjr}Wd|H1M0=XUOgWMiJ(48GR?ka0nuIKxk#KbsHxzS2vK+3o#4XUQ2urP&5&pDkbJ -zYqwhK+}Cpk(cH%KnA=3zlWds3(XaFW5_H$_igU+7rY;Pp8YCZr!2b7vh-)I@!DqnP7}k|VP;=9 -zNZesdXtA9K=r(v>r$5I~8rW4D=%%x7< -z{<**Vd4gi)qcS&zo|%Rz(I+Rym;UzV^^P7_P=ijg}@V{hDH*t8+G(C?wW>df)wV?Lkek$rJKFTzg?Ad*xb#$@8l_ -zxr!|XZI~MFJas5%5B#^1ujgu|XxQ@?hTG%y&9*Y?|7ANC7P3jP_HN0J<`Sv;LcjF$ -z7xuj`esgRAgZ7EFFIMnwm|FV3)e|u#dMl%>{&Z+r_|NQN!|w{xE3TI)3bk`ye5!+{^yf| -z)!*jW8`f2F3;Zxj2!G)3xwlxaq;HmW`WyX(3497KSC%ZgBj>qNCHae5Zv4Loq0Amk -z$2-qoa__#-_*PUYc>T|(o7S&)ljmTWIAcNJT#qw7S5%+u+~6`(Y;o!dzokbe7jh=N -znf=;#7ZOQ-X-HEDGc9hX>2>z)htp20XR}<6w*E0i{`Cvy0=~48O)I}R -ztX8bJbuXsa)!%W>E@x-fSG%T~p6O!PbeKnQfvrp9b^`;)m&>QrN8GnJVZ1jhzroqC -z>}}oN=P4z^9liS^BpKh7-rsI=y41@4;x?=1*47o9*JttsD+qW99B^1PsZvLRr^T7k -zb*{a#f`fvD1ZYUg;eY@SOA`Z&qc1}vXv;ej2NMqy2U7w|6Z<1Wr=Hhq{>EO&2rA7L -z33Trc{oT3uyJ~~l9x*d1ht0*st*Q>q`y0xaF!%0Z(A|D-TkP5TEgNbUn8)>P%bxsg -z6PpBs{T<842QIGd@OJWGddnimE9AZJFz1%{Kb3Z9iGLBbFO6Zj@I8<9)AE1sU!P)L -zYabjbyZkHP3-%~Zu4?n+`KEF#zL9KsYiBKJFS%WFt@^l|Kz>P{oxxL!toJhMt-2;J -z`Z`g3f-(-)Z;l3Q$8pQJ79_*^fMn=5zs{z=Ext=ASWn4iERXL4<(_sQmO -ziE>-m&)z+*;mBMs%gb^0`xm+98M#ODs{SinY0*ABIn_hSd;T&p1!WVB$!2TzGk%vd -z%;OH9e%t+x@>N;RwRKIoLQ>aHoMSP*H8aSi`2Mykxb{Oh*VB5F{`_}=wddp)pPIrQ^G0&pFZDA^H;KAwn;Ws} -z@hy(!Uo2~KsYBu{_mfANyCrgS0&n$Rv?)m0v+?l#Zy^^HS>@h%K4F-1ZEe3WUs_q6 -z*Q11M2mWpkDXPeoC&bv5XUth5Xzl4-HL1;;#i?l$+pS~&syC{ro-NSNm#f|< -z)v%?qz|mW3scZIG<8$4cch53e>vPcX&&;EF`$CizqYE!}%(Gfi#_=`Aa(;Az&<8K4 -zEu}{`8lTv3XWG(rg5KLW4|;6>V|i-97TX6I(LB>sZ(U!&mGP@N?dL?FT`z*meO|im -zIpzIu-KWOz5?+g1j@Jq^uS$1FIe2Jw@ZR}Ul=j8Y@2mJcJv|fiKT~=)*WG`3d0}Z- -z&D(1#2WxNpwlz!?DdlD6sx*F^9eu}jS>s#xiCwKpPj-EIaQ|D|i&s9?%{E3_r|v&s -z7k~Du`T0Iw&ZemBI}C?=cE?KmdAfb;KaGH`w~Nl3u>P>WsF9T`y`j-9%zW*<&)?kA -znNG#Ye%O*5r}f}>nrm~>B$wUX8pjNx9ywYR@MP|8XFP4*W^b|O=Y`pV9nTmK)>i&@ -zWsYLedQdv~`K*;SH{N-MUj5K)w!C{*#hrBVeZLPJN|?2F;WDkDyguGL)f07gn;Pey -z-tmURnV)4{mRf@DPwocA#K|fJ6ExjV&pVTB8`UDXv1k3Z`TeJ3bJK;o6-(DOT?@H; -z%t3kUw!c5p-ThuxJ`8e;*q19ge}?ggPGL0`r_?70eUlEozsGifZ -z)7m!A-s-*m_3L}$qTfu!rt$ur#xNGv}VaQ>pPuQv3Vogzk#dnUzb{EVz_?u1eX=gJPcP|rCq`bgy#M7Y(M^XA{^{qk -z-Z=Z|Cx5m#XT3xt=P*e7zL@2GLf^6I{ei-pA7e#crTcGKJ<)iwma_lWhMvmS&nmnT -z8G?&3e^|7;2rkWC0VE#s`Q-*8g@m1N60*Hxig-2KH8jTVcB -z3E -zjf{|-@~Z3HQI4Ha>icuKz4kj?yA<;yadA-Jnx6Bb<*zkEeXFCwE^~#Ho}01i&+LBV -zmSoGH_xOLF-eP#y{b)q#xp=diKeuypPS8G7yk%cEgKoE=EWg9K+A|%`y=DIWzcWMM -zxz@3C)$acFaWVX7zF#Rx&^e>5dg&1JY>{tWFE4#kFTd&Y?a$n&dD=Tz7d^|IAFa>5 -zE029Wf9a&Qd9p|Dz4BeNyYtjPk^ZlaJ6SdEH#BH5YpmR6VNt*5=*&3w)0)SQFKv+0 -zf32FjX34gbe-jqI2)bjsJNgJa|B{c}kF+6I>bg5a -znfqCm1TPse$>3WLckbrnNaLQH<}PbgVtV8Id#<9;84GuFdzsJwk+sF^BS%eS*q#Mf -zPWHJ9e4dfbp>+Bc|NcrY8K1nDF_S6>GGDR!p0f?#43H_S3?I07*ukgpCY5A#VTNt-|Iu -zHGKVVoBD8G$eNPQc}CAaPkFk8XZrFtD*lll8GTk4h41f=d@8c^e6<{Rwl(j5P3N$+ -zrE-neltaC1&tIBi_*VJK!n@x)5{y%O+KZ1a5PBpY_(3K3nebGzke6~jN}v88Gx)cZ -z=hqg=7p^MlJj;DJw|r*V*_V}PIOR9*9p}h{3IeNIS6naF4-?e#yn6ivo5Vw=jxAZY -z=Nz$A=KdSk6xKVj`{7Q7ni2n$&fy{k1%zb+u-qdV-3|RQDe@ -z{FG1i)CqBH*=}T+@N?UmZ^3W2&Nnbs+gR9jSmlW5+9Qe5MVkx`8R{oYT=5G_{XH>7ZugU5;>oKM6CzBK<*{|rG*kdPq -z=~CR3X=$f8PQ~eTZm;NP`oL@y8Nnfy-J2emx76JBOc4J*&PK`Nsq{TzH$!BKsMdz8<_xRp*~vlVs6hoHx^P1H(NH -znqW_EN~<`i(%FM)AWU6yoL&i$c^~-)dClrB -zJEbq;qxtcvmHG+4oXYw+&pFNdyblwfMUB}qhaxXhBk7fipF!Hk{DL+2FwrJDW#s%+E_N%WtvZs>4h@Y)vvh?$= -zyVK+{E6(5YZ(p{~u;H{6vzm=o7EiIk|1X8pM4VduNRpNA*z5LHn7Zg9ZK!N=6yM53zT -zk#VxVXyLE7l}p;yPCxVA{d2B*UrqF>!q&AP4IVg8WVj*Qf8@fMv|Oo|6Bt-;w6SbS -z$k994%98b3$5oMWRI~(%&lSseWj2Yi&o`~HL*Y)_@ -z?IZ!2AZ6~Nx*uzg{MWb`{Nh@aShS8`wo<{xZ$BPw37w*2x~uh4C7<~ViwnLXj7pza -z95xu1X)zqzv{>js&sL7dCnA~DdoMjT0{j -zi(6&7bH3`-T_l>i_tAR8ng7@MyUBcQO5g}6I+Xjj?A*ue?`Qv9DgX48<&|K*iM5>9 -zuP%vupSIPjN;+46E6)P&G-1ipH+1CIEnKC(YEivwW#5@SK5G??S12F;9&@Xg{hHeB -z3zsi;+1sq$R{k%e{>%5aACoMl1s~LGJT0@+)3=U$_p>EmvRBUbK6%LOL642Ei`S=} -z%ub1)*otOpUAq6@KKbJ4x?NTTCcxm80bCpx^t-2c}UVZp;qMP~m -zZ}0H^?XeaAc{O9->zy-L+@=anV@p1|-hE#8w$O#EJK|T~ -z?R>{6aAy78`{j@M>q@`mB;L8Vv*f^yFB!o(Y5X;1dds$5GceVVcoS3mF?mtZ^_?%4 -zwLCsms=T)9USZ&(Vo^=!oD;VXzDP8gr*_@o=jCtT)bDQ5_E6P@{RVjR~z>?eApivJk^%WPMo5Q$?D=^*f`G&7IO)EFv -zwT%1x=$q5_YmpZJ^qzjc$Ft6u^V%<`sm0&SYZawbq(9iLetUhUipkG)t`;|+D>(gWA1+}mc3nb{9D|1k^u9qsGaT*2oeD;Ej$~c;U8b>WtzK&M1F8v!(jh<`ZkQdktJ|o^Po0 -zXVG#JmJ-X2&bx77`u@)sRzJ2_b9m~qm!|hNw{EEGs`#e&dcN_yG}B~DiM$)ecRe=! -z*^8*4d+_W!#3`zrgV_4|q%zUFeQ;jc}o -zRb+iV-#kK|^U$yB!q?b0ZTR*KCb_d72A%9(zR{nD1YqUB#J9oFjGWYtpr2?UuVXz?N`bE -z`ylGI_rs|8{OiB`_FenWz0FQ^}-u>13?%MUP?R8Bq`G2!Z@@v<6-2WBx_gXvS4!au%zGm{Q -z+dsXaR-^6pe%l!NiATQP*IMV_Quud&@9W^on0oyuzXDXQzqj7GZ_25!kE7Pz=Xmxj -z#rXR1jXUku&3S$JL(KoT&wsf%U4O2%%Z}&L*NfBEoqt?XyJ^Mi#{seX-@f|g6m|Xi -zt6g>y8(t^(#?C+b=2uwe_3*^q`>x&o8vA5je^_~~+@9By-^R)xfB!3|@jAOpMeT;e -zua^hz*%$u!YpTL}d$Y<~>C>;%Q{(2he*P6X|9ZOM-n!_QUt0s#%Wto$Rlfe(zkBaK -z{rmRGOOH`mr~eEa%# -zMf`p3KfjEgTraoYzi+~?uQzY4=Vz&}-Td?Q>l^X&wg3Mz_;X$Sdws1k -zx!jRBe+|!Xi;NrU(TDB&q`#efw4vX*{cl3~jpY{)+eOHK%VgMiKU?6pQQHl1?<4zo -zmA}c$Z}eB|{CmjjO?G0^{{rFPJ8U+dm*}cB2zs-7Zc@C5=|?Yy2LDhiRu0;=JPvAyxUD1z(IqepSvXzPEIKq`_aCzzcbOi;IhTTVtK42H9i_ -zva@9LMV`Bk~`*U7bCs=o@iJ~S4J-hTGi&Fmjj{$2mfx1&yIXI)xA -z!0x&x#nf)KZH&KHPG!IGkX`V~`PyS$EtdpdWZCb%(x_<7xAm`!`{V-;Crw&hmv(lk -zW#hTE)%K#?I~HkQ7TrJJJ>yqag+-L0#XlS8jII6lk+*DEy-RQi#_X|R<8H>mzQnUa4&PgyYhu%Ulgvs&+%itwTJoK -z`+JGoyqivM@f1Awt%YsowOi}hU$AFAx_VW}g6HGAX$taucaK(XaL8KZpUKG>vR{g^ -zNu|^4uiK{D>AsUpo^3d{mxuY6`mZlhQ@&*H^O?d}nrUMErPlu#zqoyNu*uDaaE>d= -z5sVo*bv3PwSJy5&xiZxDY|B&!ew{|Psn%J?4$kIa)QP`zc)9Z=#;v*2|3rUQmArlJ -z_wvr3hIs`S9z1N`yth)}*wnk1tXlT0*y51Lrf=|d9!rI=MVZ|*wpX2!*Pr=bm+~wz -zKmGdEiooL)n_qEcY1S}Jj`aC-P{8f8W}zTgm4jz!Mf=gEuLW1A=xmtnaOqQDpUy%y -zYpW;X!7@LRs{Z}Gm$!cQ{WYd<9-PTJD|FKHm(Arri8UJ+Jj{6Jx6oeU(fQSkMa%d6 -z=2`ZngHv)v(iz7*$418FnSP~l6B?6usn=}0R2Tl-_@H{4!_K!Q5rLTp7JPqSU=_f$ -z#qODVy3%G=!`^ca!Iv(r+x6CGb6nZG15sz#FE02!Rb;VazvE2x>1`{rq(oFqy|XSn -zDPJHpg>lDJ(+sg+_pdE5TAsjQmhtC8pSsx#r;ZOH0lS&+2nDsgbhVgnz#;0*Yq5BV -zBTvWyN5yr2%*!*KXJur@>q%ZY!?fd9t!Tf#tcZ=z)cQhw|HdCy8tuQbcFxvP;aRkR -zQzUuK=7jUlRI-fgg7>fSeB!v*asy^Nd5) -z7ub%p{I{PJZkO>m<{A4ctC!7OubP|0f)56u-Y_6eoH0Qh>smxH$?7 -zyE)FElbaOj?4%fTrO8rxp`xCA$n|I8JJ)Z#_)aQ@v+MpwZq+NPQtUxa>$w~y!bJrq -z@^{^dY1tw>Wz&=y%Ur_+W1VC-$qD4lH`dMEwD|w^ZDE`<*urbXxNIuUJeaqrO-yLj -z1m>_?tL_vxHMjV=-w!sA!kjb -zM6V07Y%Q=7ReHH^x7xQrhHnWcTR)zESlGPA`K#}VSmoq}2_NUrneOv50=P!vJ -zA14O|EcEeRf00$i_6qN&Tbqx34LH<4@s!-GLX~;nE{H$czf^hae%9B!FHFyDbhj}( -zx<&O#*;HMT&D&Pjtx#NdZl9W_vD42T`5DGM9dX+x{FP2%3f%Jh&9ND^d<(c-{h5>hOx* -zan5V&z3EO@ey*1{O;fDuZMmlJ;%S`Grt#y;_O=!GxAI!LY+lAMP+OsJvt8rP@fL+e -z{d-b#yF0GUo~ziI@op^FM{l`RFI{&u+mcliG%R^Iwk+|LC>*YgKn?o(kq+=U^-{t>NJdYicO%RNCmh -zW7h}qyJ}m{uDMjd=t_0P#@m^dN)^h&S0y_OqI!3Qyyoee=$pdC!TujEAk@U@{aOm#@QXMFBcVjFo;w>pPg1;vQRiR -z&~bmsqF)!=z8#sa>pZjR(Ug07ALbdD|9sIoDP!&=#u$H*hK8?Cm)iweJ=H#%tnfcB -z$>EpMj2AyE1TU-<7ybdwBD%E -z-gbG$d*?@I&RRd7sOa}>_6pXj3t|(L&uz8r>auf+>3Czpv$#CUbV9YWXlkL|uFJYp -zp2}p#-3scOlTmEE;33Bhwg-%2d23&!yNb(CJk1pz!v2$O*P_U$-esTtZ}SISV%z@W-Sr*z -zj34eTnwX<$Q*be)#L+=I+ATXq(#^r*h$OLpwca7z7TP`Z2WXX&)kH;e8H -zcm@Y(#62Rf&+C>A|BAk0;xUbfIfBGBuLi)_o4 -z1J3EsHhOFf-~2D$@7`g=6KlLG6B@v`Ugf4o9x{Fuvlo_UMY%O=b7Q;_k*fY%u&K%GBbt -z=igqrnuNdBo)qYMxk57V$&F*0z8Z`3ww=&eJY)Gj -zm)C60MUh%Z8+nf%P`%-rdHYlr=gK^{!06M-UhI#0R-K-m`-0!qhAH;TC(DamarTS* -zC8u$Auqa)4VcgrgFxlFj@xV24E1TJSS1GU@64AF=6t&gfuy{-K(dSF;X1UorNn6|O -zU6=LI#7mB2k@bcqDPHv}FDfrv=DW)ENwwxqF1(<0RnLE)d2GsB(KUg*HBYWCC>7U_ -zpK#%}#FpviTFaGpnH@VXxbWnKPdR6QJib;|_T)iEu6^y+ceiL2Y~PG9}M -z)-t@Ft!rJ~L$T7YpHIJjwLRz7)&Cz$!{wbD!{rZ}$Nl9#wdYq$c-2>Z$#1W;eeSJ} -zk37LFlg?lfUXouBteg7dkGwl42+Hn0tGBh9*kB;R+JrE{jt#U$V$t+mh=;%$@OoR`flO+y42#hGw+|z -zyVG9Wk=Yg%zvV%yW3{krsvLgOc2i?Oi!beb(m9DK~7Sx0%G6onNQ2@ycx*--47QduA`+XpvL@ -zdCP&yE*(3qIq8~~$1cwBes8lj^JI@(*=tSDgI&k+#s51vf1LJpX&{Sj;YpX2Z}u-T -zUDIE%SS(CmazVJ|2XEfZEsxth4w^g=biF9dn^)&-s;{|g;zeP{J#XJzGoO;W-23$X -zcebU=_Y|2aB=6|>n_9JhSKFgaOnXIH_Aj^pxZ!k`+Uicf++6QjXa9G$ZL})iNn^2v$=vSMQ6j2Ww=B-3FzX(8WNEbb+#c|5=jx*K)*X%;U$6*UKYS;7@ZhvP)!Q7duQb#@!EHF;bk@m6e%U=oD;N{^z~n-Q_Ha -zcP>Pnss_+gFSSG+d)r@o8X_m3RKLq$ -zvGn*+{u`XLWIlgdp?j>Br!qw>XP+a_%S#uQJ`hNGR&4h9W#2Y|`9Di)Evl@hbJ(;P -z7iO*f$#N^>VuD)7tB?)0UE6=UY@OhK=}FDM!~(gX{iX67%I&IoCA)3rzpiw*sj|Cx -zUAxAPwg2_|&y`l^exFazwXOXn%|5r5tyZbOZQepI`*wjv{;zMp?%ez0bIr7c+SN0x -ze|=fMSL)L8qxYRc*S~t2FHslg`SNnvD%Y#t^P}`kSI$s9l<<%D&6ktT$zQ+Byt|KK -z`J&MJ^a7A%YS+WCL-vaGM2)$h8+n!ZXZ1V^knKQohu -z*+l+g)vS$a&1JRMcH3F{|Nn7d(!J~Ii=#?D=T*2H&OU#naHpY?-YHSZ&ntyP9(#Rw -z>esU+{&$7ViAU<4r_W}G|Nc{~HqnITxwO6K=|ge%K1%F(k)$S(EWg9i=acYU&A*Hr -zxdVP_7TB^KNiJWW$EQi`g#sZqGO -z^gS;>_rvpRs-9P`;7W5iC2qr4{h0NK`yP|fA}%I%hGW9vhw3T6KQk*7 -z2I{O~yz0`ODmq2&%Ex)l8N3N`Z8mz5N9|ufn!j5^9cgV=lzr!A9~B2^Z0+I -z^ycf3jMM&py7#YrJ((As_J57TTj#%P?@x34of*9{y2j|_hrgF4{x}`JFBWx&>quMO -zw*Q^XhpeRdjxYFi`|WhKhwuM;DKjlN^K`=dO)vBM>gya?_6RFoS?RLkev(4O4SUXj -z*9Rn4`#Q>d+F2Nj&+yqGAZFBge~ZnVhngI9JPlI9S!t@wC31|n512Qt^M6>szq_Gf -zU#`RM4`;TmTE1^rfWThC=xtL(`8*gy12;`5ejyUD_4dD&JH`K0&p&o^@vL*PM}Nrv -zi8ETDH-qI*=`qO*R~a(4{n|At{D8!yztduZk)4I!+7<6asUT^zDAZ5Y9>h-*SrtjWeThs7pu1W1g{{{b(%mf-r<+2$< -zm?H0I?-6-XYTo~<^_$iO)3axS7he0$Hi>nY5QD#&<`cDG5%Hu0$M(%ED{D!3XLbFQ -z@S~)sw;tNA=IRp?O-N5_UcqXRXRGq&`u-)`tUu~y3nffri)y-eW`(QV>{U6r84tQv -z-sL=Z?(NdLV;y&W^A_xwe?3fcqQU+~v6Sl@e(!wXWy2_IvFFAuealGSZQsthcTC8; -zaHnK^CTDtDn)WHK -zD1MjU$|1#e(P8DYXx7Ml$ -zn^(fo9q}9oSW-i-JNR6fm6%yJ&B%7yQrCc#0~c;jepVH9_mE_#Orz!Znq#^>Gd10_ -zUB!Fm+9cN5ESZtr#^7Q#v-H!kzfUza9tL07xxGtRRHT=yOTxW%()X<|CfX>4onQGU -zV=pWFM7C#P*&PBtW$NBZ-(3f)E0dc1Ew6s?r-rsi%+CS1oA)V -z`qm<6nUdgIy^xjh!NRU@Jg=P`U4Mt44=!ocymk5xpV^|Ajy?(yZ?uBF}+ysT#KGX8gX -z`>Y2(8Wn0^X07+ny!1I#*z149%Ea7FoW8eO-gVj>^nLL{ZOe)2RVmwRduA0meOH#4 -z*Y<|dsA28}vxZMsN`$X|lgpbI;Qh4ByxK`R?{r*T#1z3JnI|p@TRYr*VPML?ug6vG -z`)Tft0ld#rZiS25x&IOBxz&;E5UH@q=dR$4ovQEUkB2UPA0zYCKlWhUq1WvN4#}t8 -zwQ{&BJuVlWxI@YK1*o^#pGYh}Khk;;}A@xK>5kNh@a$z^YQhYNx?GUKN>Ez;Aw -z^KGvmn*xjOOe02_IEkjRiw0Njw+l{bU$9lhic{m$QoXB6EBIfBpIU1y^skd?vq4At -z^h%Z|6D$^OsGF6*BM+{j@Xs|zd29E$jx+Cv~NlK -zeRh|Oq~I_9yq#Vxmjs_J)aU+s+e3R{xstZi?8m33Z{{dn?A_;aP1sHN>7_)^ZJv#} -zp&b$j%3AdPr@a-N6}@Vf{KD9eUKm`DiFi36P$;+WY6B`O8B&@2+l9OXI(wZ -zW43IL;o4QXb8p+Cji3K3Z2B19*R_U`tMw_{E5oAWN)rOLo7;QlFK<**NYNO#dFY -zCuW=Ui9`Nr7Q$h7?#@0fWp6L3Aa*z9W_Po}0>yK?C(L)=&zQj%T>f5-Uo_|Bmv9D; -zg1pQW|7LIGb3S6a<zj&b{3nTPV{9$(S9 -z8h6XFvG&;7IgUHt<%k_9HvZkRr*xS(0}J~r%O)9brt1fOoo%UnaC>H;>*{w|M)~at -z5pCf@7oPrI`LFn-!G|-BYBe9uOv>M8vUK&#mCVf%}d6{ox%c|7QZ&6&G{z*FJIe*-FACJjVZ)S2a?T~W3pp`O%W7fYj9J7>4FC6{o -zlhgA`LSO~&qRdQQPvZ;o=Cv(pcGR(7baFz*J*Rr!*?)c|uT-7Y`u@uY=90bB*l!-# -z_4`0z+VW>1$*ix}uhh&u$ENVWYt|Iiv#$eBsr+Qv%5&w{Oefakg*X2wy$E^kbW!E0 -zPmScp9I;5V(C(JSsh^MDm~ui;?e$UldFe-{9Z}u9)APiOIkIQ-3(c6gTh~cSbd=lo -zyC!`UzV!RRzh}Q*teLv`=R+xmhcD*W3f3@$MKt`r+V^-{#xka#Z)aWT>26YuQ}JZF -z5IHw-b4Ib=EuRI8YRYdvzIO3hE(79c1y-Mxs9kt8O9L!&&HW~CEJaD;I>h&Ad -z+}63waSD9jZ@;NeI6F5=u5!;q2is_cH}j9qEoIeU3cR>*QMO*5T4=>-rk}q87wbhf -z$o-hXk)o99pfTH1q?z|kSe~8lv20e8d$v38&J)d0cNR|D_E0+d`U|za&6dt74|^Jy -z&5n#UVM=_J<|1LVChy&%yPO&86;53EWyrC+)R?)dSMiR-&2yGf-_M@A5vn>tx$v~* -z_g|~|jW)Fv2c^D$cDk&*c%PQmYyIsv&tFhbYs_d~(G;h-JY`j|PG;rXz|Kg?Z%>4^ -z{EDk}GCn_XoM0I7A$%F%bv|K+jxKhYy>;iqU98i-9JyWdnXlsQ^VyHeUb8fv_qe~t -z?QrrhHNUxrUMzJF&h9NR36VUr#Q&d{Bx}Z=+0)8C)HNA1^7AB@@-Gf9WH|TwFhA2A -zk&w#0KZ;hQCvOkwd+^SC4{O&~p^V3`Z6B~Ou!K53NU1u_lfSuWpZmi*K|PV5?e|yx -znP9>p@kSyiqEmN{)%#~BmrmHk{oFZgvACc2gD|#31=A8O1d}XGJ&wt(v*kQ|;jFOb -z@)H+N&0oQBwSbS^X=NL)`U{Rb2k#W5Z3y4@&_rLM@=?LJbxlj}Th3vynv?hcYt0*3 -zzty)+gc;^+x^dXEPjIrLyx&Z_iPzqUUTpVt{_pp(Z{o5?saxhfTIn{Y|Ni<5-J(I2 -zQ$*iiJSwEVZpSwF1J^G`{mbfO5G`_;IAPwR`S1P-clxY -zQ$92^{L^na9V>95BYP>=Kbee!!Pm^|KL3u$nWO9Yv9jSt;E8~^rT@01v7TAH(dCNH -zuK9Q5)cp-N$~*`tWZU4g>hRZRbJ{rOf+@=udwS(?DS`R2nJ -zpH^=%Mzxz+n4m2t9EQn -zJy+xxKE3$f-m`pB8~TgSwI=Okb#Z8s}xlyGS^h- -z^@HauvR2pA+|>3+PIMQ0u$=eu8JFh^%dLM2*WhLmw{7;cvf`4}jW6lSpY?Q~ -zzII!ApLg+t#eyx1gAYtQeKGRk(FuKiLH~a3t}a>k_juu*o}k&Bmm*g!TFG!Cy{%+d -z%9WOPEIe#+fk&RN_;6T=bDGn&t>60FJ7qey@0hvQetN4`1e=l9^Uz!Emw)Wq*cW%U -z=!34J_wo(?NoA8>SzcyJTh?gZ#dx4ZsOhB*f5wrLS6u1UBE9wD7pFOtEL(MU*0~?D -zk8kdu#a`siWjXh3xLwSVB|_Sy -z-md9Mi3{1DyUcZH@qM6wRb+beIpdEBsd`(#dVlBG-#k}D|C)hr^QSAE@^QbHpR;BA -zw(EZOA*Xp)U)H^dpZi>5SHPkKzAY^0qRh9f>#?YdRjHA4`MBxavi8-t`tN;8(>8sZ -zf9QDH&U5jc>i&OUmT!GlWB)h*!O@2st&*RAcqz^lr1ntc)32{LUh~w1UNBFP{TK6^ -zbLZM~C-p`Czn(MEtzu7>D2Mi&lpl5+FCtI9bdNmZw~I~c!@8VP{c&m?Y#|Fg|F^xF -zBBExk_A;>{MV-0g%JY=;C)?G235CVQ*6E2<#o8xCo>+BLv#_DWcGhv;ZO@$S)6+ja -z;JPl+(Cs64_;R6yV&u>FV)^X)PoMueU9@A#NBjC~b-@9eD=K9APMqZbpt)30*Q5EC -zWc)%|`&AlJ%Z(@O{~waCsc?`(``mbGQv;Xax7V85p -z%N{D-J@=}UyM2F&M9I0h6KiZsR!%s(w>2?i#Y1zJ*bR(oux -z`w=f!+XUOY9LHx_i{82uX=VAyqC9J@MOevH+wwlO8=v<5tvxcCxtl9x!l`5D*)=A` -zR$jOw*c@8^jLDmI;pTT|qRN}P55$&#I?d8__vHSli^tzx$vEeH`dyFN?%?#}3`b%w -zwI1AVy*T{RgAo1sjC;SlmcBQ)S%M`u{^!jf8*=72Z>(b|=KrvkJ7(L1NW&_wmvdP* -zEZtI{cc8%N@x4x^dX0d$Qd=5#-hRCC*!ExN4jg|m?_%!L)%T4PlWV`_{_%6*T2c15 -z{N2>)B3{?qL%&?&K0c>TsA8Q$tBIn*`_%tVw*>x&b^2#CEz_;orB`vSVC$b{2Zh%i -zEbifbz&CHVLP7I~FR>oa-7A6~Hd{tr;yiCuRAge$bzbS>qQkA~h7J!qD$ZJRo3R`} -zW~%go;lzKFvlCn|-)~>O;9P0Ghll!+V(~{irzQOt@V|3w?dz#3^L8k2?s>gn)2XIK -zdyE(ya#Bm&Q}Z(O8t=R?QKubfLfC>vQ -zqf>)`0*gV@1d;O@6E02SV_CB1|Dx9AFZpB^ObE{8DH41Ar+Bu&d!^&SWlZOnm2KE} -z)3I&)Q9jSk)s?MRZ67kEZmd*E2xV#sm{hf1_Kwwtzo*K?Z!_!N(!UXOz|rfQcAE3L -z)z=REg -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 -zWR<(0p4Zp=8dslkC@1(FarK=eA -zs+%HKCFoq8Ik`0V*r7S1tUHzJ+O)1MzdLV%jqHqLOMl&I7W^8K__=&#-sdWrFWy_D -zw^_a3R_=DeAhcq}tGTl+46kn8SS}fSR=j@k!&P0?o19FiMf19C7WwtcvMPJk^YsB& -zxsPu?w~TAPTG*e2^L_!fg7)W@_=)~Xs%>>&D7WL&>aQ))xsT_rJ;(7og=ektixjC- -z^RwRhiwdkaJ0@b+u<9)H>g-?TMfDu)ZULfa**cefJN9bXozj0sHL#(6h38)u--Ix2v^oSM@VPV$H-%susV}>-%ZKxg={vj`2yp7s``YB_yN< -zc!fS(kSn=5r1i+>J@11|W7t^@cC;T|)#b1)uAnvIS(E(Moe7>(oPMrd#S(s1khSQz -z`ML#%OqZ|DayWiq-7Cq%-?iuDyE=VZwQp~DtnHQG0kfS;=Zk9buI`fwyDJxV_hrg6 -znX&vUyTYY+!>DJCAy~3h@zj+nfe^F>UpX~o+ -z=Y#EwDozy3raI3$v+PXKfqwNp%R(R5ZqWI=($1pOd3tK&()?8~E<|0;U7MAXtbP9g -z|BY2#3^_@wfAO#wL~rHa=`{J1Hb-*w)m6DyPvl;e%3sY?tS|NZ<+e-J*|RG3D%log -zpPc%)tkCI8!S!<&-ba|S2j=Zu^`|RnqtJ5UxxEK_drBsGJyE{4D{IT7l!>mY^{Nby -zw3jfOCim~Kzy0G>)4|nE+>J7ErZ)@E*6h*pT9In>J^pXu;^I2flQ!$4nD=HK-zmMr -zQTfaTDXH%QFXBQg*3Y^t!{46%`P0|iKUc|J^5J~Bde;Wu31)F2|I>}#?#TXrQmlU4 -zz;fY>i7`_Xv<|g~nSNft=fb#V+9svj467MqUcNtQe2#JT!Dr8xPyXm{WVj*AQ>)%u -zZ0$@LnAlu(CN*bo2bc -zjCQxRwv$fCuIgNCTDrVeZ__0fk@t(3`W0lGG^?YhsyJ@Gnp5M+_$EVFK=Y`5nnFbQ -z(fNziUuWHSn3j8@?WeDQQEaL6uCn$`)vJu|9$h2;H|C=2rnqBkKA7$93jKR&we#hm -z=5O+y>LTma5}cH`q}Ct*;%=7lUgGlV{scQm=~JcWD%SZ;yD+n)Al>YMUQtcfk@N`e -zkFPyyecFzOZ{9Clu`NI6?EJ$9SJ%Jlu)q0c^}nWrF`E}|`lpq_6mqo9^aT4qajUb> -z!rtf$u4BH}9yaT#kzT}k!+8oSY_G*sYg0CSt4a1~zWPA!JfPvbpmgpEDBFbw14bU3&Y` -zyuCrSSA}GmvaY(Xln|BQ-1+3m3+IWiSuZZXaj#LK_QR}u{1f*T$6aDinUXB2u$p1Z -z>SftgB|mTcTq7pDUVrPIpGkkFm{tYo^6ku?#~*&%tNu^TR;M7{n^ktZ1IkZLerPNI -zQ~7iKr_VoKK3itm>tF8vH9aci*Tm$;2{OGW;@ee@PkcRLW5mief0Ob9QkvW|s?zOl -z8_!q$`*Fd~hO<2PZbemQ$gsrxkg>y+cH^YgEzxJu7BZa*_NEZ}2cbKtIk**~h(7Ou0}esjj2mN0Xt -zHcKuI9>Enqk~@Pc9?aCxKOh_bOm_b3ME)lq1D}0V73E0iUoZDFE+kBNL4W`Cn)Ox< -zT_-sHJU-3vq`37t$CKYjw7>kCZGS}bZqdF8{uhnjd~n$(q0l8+x$EcUjS{bd18OcF -z_tx>9p?^%syDFf10@stS^9>L5#pdr~dLUSHy<0-2yd}b8_e0ZomO_qKPb3~H-xhyq -zq1b*w^oskj_hM<*tzbQ&wXpcst5r{VYQwf9XjYoO -zzj*&x?bN4kmNqSFz&72%aWyIMk%Cmb&7 -z34U>TrNYFg6Fzy|dLuaX_?=VTlY|3Vrlv-mNUiRe*7Gwv^KYViq^?v$~5+PYsIjb -zZ}#JhwY#!Rd4+{CWOqsb@e6x4k4yUL8L`~1QcotEM|M|!tNpl`cQjS0I{ta=>O{{f -zAI0DM*EQ(>T=e|?)N8w&zH!_y-?`Y->E;JS2{Jb#hD~qVLP>1vW7O(Bz -z8f%}Q`xSC}_u~S0C5wA!)@7PoU$2sE4{o_O*-Ph#Z{sIXr_>eh_re{k@5r{TJ}+Nx -zRiFLf*19>Rxo7wb4f%SdWRqX82Y3FCy*DSfU3sTKuKNYC^yxAe?%7P4_~+xj2kS&F -z{B@H|^&ctoXYUSlUAE+BkMO>W;d8d~d32wgo^eG;$d>WabH{lOh0BhH^(AvmH2yj{ -zV82KpdwFJI!Sim1o%a^hUEs5;ICyLkD(jt5G= -z^rsd6cMYF)@+LdOv9k;kkxaa;DtsRpl6k$oEM~O)Xo}_av^ce7?~atG@=pqU56_5M -zlqD>4U(YN1$%lj)NftZucjlLUKEFmc>De2bV=2F#KR*2{yzQ)b%G)Uy(&Ea`IqW_> -zU#jwy5!!d4@mE9i87Z<>ih^8dFXeKTT`xU^-iDQ#fs-pj1iac -z8awknQ=2fcQRz&jz^=E^OVr~p|Cy|M`$2G>hv40<9ekT^8C~t@TX6e?V@Qx@p9lMc -zxD)b*C;H3Z9rY04N?25o{#oWfXO_|?mE6gH(6-C{P3XlL@uCyIE39DN)KxJ#lxOyaf&itWo+Vw;Ct6?4I5<&VFZSa7 -z33K;{niOYkGvCx*chKi+nuUvTd{W#j!7s_B@Ahrs)3w;s_I968*JajIVM`cFmj4lw -zSp6y8+~(Tf`#bWE-;jD(A<)Ys^=!t@cY>)`r~21F^Gf*7SM*=+^FEFsb(6=B7E0b+ -z5OH+=igKn2dd^E%&$vEU^v2b8=Vv0itZdW7qV`wnzuft*K1EyUz0x194Ug}wUj5GN -zcJkr%|F&?aWlWg1ptMn|#6XeDQD%O_{%bRjvCJyhUMPO^ng02?+w@#66^nB$d&;+0 -zqB(2Vzg>5(R+YN>PPAJrYci$h-@MfqB8~czIpr2CWK^1bu~BM)>f(s2SADozzMZ_% -z;}+gxGcD)&mS5uAB#&(}c)$41ert{r$J0w%8A6;J4k<_rGg|!m^HV&WVaCHwbNt4eRpQH|gz`54V+4cONXdbKq)@d-JYE+c(FG?A|LUde?4B -zEC2nkQ@T1>e!YFB?mgk&`^a^jZ?4I`U@N`cWa077XqtZJ-KSEw@3+cs?%#1JHYY9j -zdlUc8tB->H4qklsKuYfL?REXfZ&u05Xo@^*U3&d+-i-={s)*h1zCHS9^z})V!r28= -zXKT$Vu`@UrJn39Xo!gzS6aNHFy}HUg@@L+a?1YXTJX)G57W1c?FWQiJ_RFIshi9#R -zuVS|*@$QnZ<(jFJeP_I0@aXIEJ!%HE9{n@+>hE0s;Ko_O6?b1dl;=e$7do83ld;xS -z|BMWSL~2P4Jo5a#=qwS__w$D{8a-+w6VgFk< -z-u_Pa2;wg;`mf(PZ%X9v$}Nue9z41S0kso801{c#YIdSCONzICaca&+93(`^fkq{H-F8kH<^9hvgK -zt=!hzYZ3j;s`N}!qJCw^q6=FtzFPLtmt(Rq@4q98?n&1e1y4@ryL~ub!*Or_&g>;W -z1i!NGu$TKaUCQxT<}GUvj}@XDufF$vUca5aVtv5AxookGpATtO9P)6wH+4@^-SLH4 -zo?(uR>%%-gs_0hQU9W$!H`&AEcT+55o7B}m9!&eZe9i6U8~n<++SbHRp1baQflQet -zBR8Wt&y35gOE$S4%*=nw+tcNJ_I398`kD#T`q#W!e~hJXqes%FV|;$wA77gzmweOo -z*$MIF2j;x`OTHX?DylsFd3LMi!I!aR1@}+1lr5Pmy!p}AMYS8sr};GdSbYCJpJSHo -zhZdgqjk^j{le)g|5GsG5`~OX$;~6_1aUrJfIokY|CzEE@7tYmh;5KM*{PUgl7=zFW -z1}QiG!(9)LY=2O*V!x*H!T!T9-<@BVbY*{+t#k5qSCwn~wE`RR{yxrKyg&B;zME;@ -zes?@Jyoo=llY9PO=yUd%OD#!d?D8k!H_U!|TFH^ezbbeCbd&h}GtMH5fAUYRr@RM@ -z;y;>KP7*v<^S9(#vF($SjEjG2EcuzFro=gM`K;cssS+Z)uU`x0;(gF;$27$@?L(61 -zJq6?QdRyG?s6Uz+&7`8DK-omDXBTR0ZsKQKBe;*39u|% -zkf6Y3*^|^U*}_`LK_EcDL%>17frX<;pL$h -zQ%ZNNNZIzJ%wzUkwF8Uuyt{YaDzMMGd^*;pf8p&3p>yxPRWe*~?(d`94k_jpbJ`Xk -zQS8!IxvQUlxnO73S@8u&v&0+sXvbcCU0&QHX#G@i>)RPdt73Lm^*DUr6tU4e@YUr- -zArsrgzDpL`t-hO;*lTuV=gCu+Q}~-Am#^cy!jqQdm~wb>g6;ddRrBjp_V4nVJ&7-& -zW9PDxPEm#W(9{1{cV+y4+{*HNn4NbX86AsNkjPDKC6-Pq0is -ze|h&J%{4anr(P+%IVHBwV%@{Z+1oEkujg4XdG(@8i;sV1tIGlkACQ0l$<(&MgT*M)N$7akmpNmShLykyfd?c$Y3_qFUvH{G@TO*pUAW`Y05 -zEkyI>7Zo3#6?(d2wMv+xiP6-IrK>ek-;^i+mR=(`yF^02mV0K6%B|^EQQ9Fi -z@P(JE<|mf3rP}KnS4detZ;D=X_gKu957ImiJBo~YZK4Zb#cq2Qs~^Et?{j}*mv)El -zg152f&x*@c$j!SuchQ>=mxhMCU-qGkw>he8`QD_=@xnFi^!Ix+GAyHGzrKBq}F#GfaFT -z(c0j!D`Upd{1eIxCo9|tys9?QWk=7e#+6PFoEBbiePmF&w_xtm?63RocdD}_J;*kk -zb|@|0a{8t}k5d*tJiJ3K@; -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 -zWe!-Ieyh63%$OVr7z3o4ay`r -zC1y0vjC@DP{zF}wJh;jZfHzaezvdabKzgA06yeOO`efAmGE9NHe<;rK-mT)sNFO3U2 -z?wB~~SJ)x9Db}aoHQqA#^_iJ@Da+5jufJVLtg#EE%jbw_Soq}`JvVo -zU7Ofy!;M8XtCKty{(0J}xw{~d-Oc9y3YoKq%Ce6<*Ee=JYBzV*p+$#Vrz|PA&`T9K -zU&6-4KYiV|Z&hzZPQGeh;Spr1`^YIYT*>cb)$zEw$Ga=$2k*BR+>&NLk!i!~sT+$CbtOR5@d_whCugfa9h{4%>-e-YQLQU9d1^k#c_DLYKyn2Mrd5Ciy!U?HgG6 -zECWIXn8T(eR^&Wp(mTB^#Qzbe#2VgnHH9aO9xqO7YY$N6W1ph%_Kq2^^AmHWhIdt| -z-S!&d@m-HQq;@{t#wE-AJYMG4_acdhIqQQo`Q4`2WnS*ubZDJY{?0G&ytavGPn6`3 -zTrBz0IauZB&na(zKK1_m{zY2rMwTgV|1Hjyt=X~d?Vjn0-nQNf46^C2v!1qunVY!0 -zT&yTn<-0!i?mY43(Tw#+Yit9L?tZm_Z|T+8jScOWdcr%`nOstQeQm?TUgP6$w#1uv -zvw^MHxr^npnHtI7*}ceRA3;^`~Ry^a*Y4Yv-)DcI~Y3ou!?| -z&G)Hqv-6}M6Vrqkm<10Vi3yM7?#*gfRVsKHJli8!OWyTVP+z=qt8NM~9h0k6TpVB?5bA#8j;C}4e$!eaRYc^>#q$pZfGS#iU -zDelnYSCp}Aw-ncbhBduEclq?Z73?_g9^5}A=G~Gf)7;A+8Y%A$cqy#-EY&4%QrENB -z&1aAP)S1mMX>2g(YYJU?@=a&=f7Ke3KC_}p@oJWydt>{z -z3(A)Myj45n&I6w3msMZb&peS(>UYUvS4O-kC+`fBK|-vL$`I${tH(;>w@Pl -z`SWP;uGcF6zn4z>W!G1;aPE>{nd(3PHJNR>;~CQbPUWhziuh}5&!d0+KD|B>x!~^y -zm8U}fpBk1-J6a)B+Qa-{5!*hSrzYoqg`Zy3*|%7IWmM}o@h9iEZ%JrvK4bH^O6chE -zSFIN9wIer7M>w0f}V4gW&M -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 -z^QY)w{ETw%;;nVuhCHwZ6Th;ph -zIr~uRh9%RSJvwIIy@hi2 -z*W==yujgGi{xMzHal;PJ&5LRl@}-oEJndd|ar5PswXVN6FX3ce8*36+uvXbwTURZI -zrB-dDiT%R!FRv)Ku|K@D)jg^%>dJSSGwE`cv;Tq;aV`p=cV-eBLg`2PWhWKJ_|F+ -z47`1Jf^D$o3I#S1E&UU}R!7<#)j8}C#COK-@fN1Nk3yJl7zmgOn1^kWOG=)we&$B? -zsP7J~d3eC#% -zuIEHqL|A8OS>$H#uRlGZ?<3zk-nr2>D|YnQHvK74IPEN)cqKnpE<&#$SiV@8PwSwg -z#Bq&7&w7>a`1kH@Zj^R8yQFe2ua3U+lk8=@w?l+a{oK&v>hZNc?(OkAbEX$vxEXiq -zlF}3R6BMmTleAC3?sICWkwV_T&AIaeIHLDV2S7s8Q~j$XUOa -zxlf?thgYMmklWI?Au|MABrLq=w@9-t*5j+nOcyzDX1%P!lU~P)cP}#!pI5)`)1=uS -z(46D>Pip$vOp#F4qTCwMtS_JTwjSKfa53NpXF$!nwO>;YGNtNXS)4wvFu8tr^2DU` -zp0Sy`=l?F+b??cm4<%n+Hu9W4anNnojXR3ZY9pqU^nTwc<@j6duWJRn)6J_(f*+Sy -ziLgcqa_JpveAYUj={2+Ap@OW6TXqI#H=0(K$|3YJJcJZZs^Cp`gHYHV3l*=4R=|7ub3}ffntUK8NBo=JjCu?YLv@K+rMW8 -z{|}+A3{>Elk5`6g1lL<}-cz+zyWqF{u^#07+0A8j|%OBcrsjY3;zT&}gLym(yZk8PafgUrf=&R)YD;43=bUdmO -zY|y33sx@=d>d3g&7ZU2z`ZR?YD-0%`Rk6CB#oMNR>p)xS)_jFS9N!nPo}H3@yI`No -z#3e^rc@GGDb2ATC`mXxrkoMW6NuIs$KixT^!8f}niFu!j%cmz#Nu~B@`#*J7{_^B)=X{cy?9;lZ;y_kQ(1KLc -kld@A^?+;IUeaP5R-}n4Exdn{UjdialG}yXxMuoBh08PE6Gynhq - -diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst -index 145a95a10caecf13da80ad1a3f4311ca893e94e9..40a36a3504e3039205229efb813f6af87f1a5fbd 100644 -GIT binary patch -delta 143973 -zcmX^2jC1mH&JFME>vQfg-fFH9(|)k-7;nZi@@rSvsvi+%@FH#C2Qk -zQbVqNbG-il*Ia{>H!`>O-g>yuLXy2`vY%>da@fk<>%5M!NAm5y7}XUNr2SoIXY%!` -zZ`VrMDoq2#Qj264aQi*Kt-`X_tv-Zp;R<1)fZH#HqNG;1F4(H0?>f!-_Ki0)OIs}- -zERkSh{jK$J(&JDi$A9U^KU#He-g;@l9FfB(+-{l#eLK3uR4S&6Yt@q7mWPh`-8Wyg -z#rm3Okh)i?!!*ZIEyePzU?#2IL1IS~II`A>?ljRkubpgE$Z+*-@V0Bu*MD7mW#_(v -z`d7cpZhri1kkPO$tzTe^O0f8S=lvTd{<>}zwlUt^SNHl7zbL`(&iR)LIctqFcpfdv -zjNZ`8=W?Xmr%o~^?f;s(n4kG8Gv1U4$?TE~eYN3|!L0RHoC7YOm*CiR_51T*ReO$W -zC+)qvP3r8EBNNVVopZeY-gWaiQxx}$UA*S1HFxVCwgpbNJuPRr-S^U+W$u}-{(P%X^C=yk -zmZa~kocG+JW&e&H6SDqMI`+pKTUro=wJ>GkwZC&#&x!?7t<~^-oEZEy) -z)B0hy*h&>Cg%umu-w`+LKc-uIyS}2NN6meE_nC)({N99Jir`w_`no8d^HWmLYb)lr -z`e!bLYxwvO`a@X42zu$Ila;Ten -z_(tg$t&?xP>oO*7=`C^OYn9ipm!6#FELHz)LqN@gUr{d-RjfO{Wd>V*-EUaIo%plYgL7uu$d%3oj3+i&CLNLW0GF8x@c~p;Y5Lsj*@^3 -z*U85|N)k5$uK!+p+-u3Y@BAJn`)7(JX{#TSGG8GqQjoQcZ@Ky93yW>N-)m6bZmLhFhURSJ -zIoI}Kd$h{lm8BgyYc73X%&b_MbX4NteGgtYA5NxE=c@!4<`&GEq17@%xSVh7FP)^%7H4HcpC__P#H{(8ME= -zAS9zvz|bW2>+7^bljN)2+$DnB_nGUf+=<}fp7Twu#YE`VzID>BxBNEWe6dvWj>JRW -z6NYXsW}#K@rR=}8O;$|g`Z;%^V!HjbGl#ZC9qP?psCfP6wx=8ILcZTInD`;#z!9Tm -zI<4Rx(uKl1sNFg|9Uub4lrdYgX_1({tf3N=d*~MUK$BV27AEwE@(&vdd -zt-tK)uND2eKmT&yuD+Y46f6GGI5kmc`lJn2v9G6{JQ#a(lY_~s&MQmeE;^W=-*?t< -zT3Y=t6|?;rRsx&!_AkzU&=QgayO%0pE@cT5R8nIPEv-Cnq%Zk^ewQuRE| -z?1LZIT%7hrg7ds~R)Auz?o^(sVk@@%nlnX`*CBwxnSq1Bp<_jW!PL&jA0w3NN*oSP -z-smb_FJN>+fcXc*_M>|L-0t*x2AJH)5eo6p(YqdKn37`qYN_?t;F?wmqtC(x3mhyJ -zcb&ST+V((azV$-FoE5+u&sEk+?v13PlX151-z;7$%9lhd73+tc%IqMKLMTpyDwp~(wuT)dE -zy2{-{lkDx&Y<~W;byINrX>ZotJFo840Ud`l6PfMXW{6nX%#Ar{onjuPzS3#w)LC1D -zH-{cPYnQ++sJ!L;l%L{|n)Th*ayn18THa5;o70XioPm4Goi2ix8<;3ytyAtL0 -zz2lzm=DcxDhGmA5!xFwkvl;E3|D^&}{E9T5mhD+^|KaU^sfLpI{8>9~mrCEQx;ppf -zsp;`uhlF!2n5`2Q?)g|e(a1k0azb^}@q}M_+;Xj+wV@~9Pq6(ved)yaKg7;RUJqlg -zj|^K=_w-Jl_n*AST8;{4JIgnV1pV}2Ir`;h)q}57`gFU$#WKDZd!H$BVr86D^{M}N -zwlm4;P3G_OJrkSyzMV^s!6V_SmBf0VtyQsyI5RshHv}%86MT1u$E0tCcP4G`pKRP* -zwzs0(A@{eCX6+k=?rqCwF7Q9v81^*TSEu^sgp~RYHmh}Ot{htI66Eap(bOn2Mm$Af -zeV|vixB&JQ|MgrE -zDv{+ps^$vwC&=Bq*zx(>b`!z53nhaL|E=8;6z^;J-&z0klGS@vwrC`j{mf3`S>!k+ -zp)Bdpr>`uH!a?;%nu4_Zs)V+tZ@WMF*FU$(PiCzZKdt0C^Kx~4@bvKdwfA2*>XtlT -zJi*KD<%x%)mrrq(H1E24wuJlMG*v}o0TK6?xqNp&*LXbSeVDdv>Yv2*TMTF2m!CeT -z`9$E78o`^>Pn=q7*|xXE;pfr0kG|e&KD}a}YH|o`{^~5dUNwh+?u|E2>9B24Q7}Ji -zqq*s?+@o0&rMEA={b^0PcIx8#gIw#sEnx{xP!ejoeeg@k`2hCylV+8byMDe^v?bp1 -z>MrfXTQzFY-WMFDu!NRl`iG03CKZG5@h79KIh{*O%V3ddjKP8SdXDp3JS#`Lrj| -zeG{vdel%y^vz?mz4{u;;&r{jBQ2I{y%PQlLy&(lJ?N~B7_;nZ~D)^Efbxn22c9L|l -zS*w}bLti^d-9G&14e(W!ALqhR~hkYGU;) -zISCnaH#7;WIvo*PT|V)a)f-K2v2ce&`=X048a^{*I(@zN?pC!Ex!N^*PUIH8atWhR8(AemFFk(d&{x-)`Wd5d}etSvlvnN6xKX>-5EqL&?kCAYgjYJA8%d%!MbTJ8H+ -zlgv2cR%kz&U*BvYmd?QZ`O);B59j`@7EMWwd7+_`m+;VZ%XI06wbpTpYr{U@(a_-E -zGs{Qpg3!fk*N>Nle*C$2?%-ro9Uqq+lNndbor;(^Q}K?J-qk0)FUlm< -zNvmYqui4)+xqg$5X1v6anG5dzdgF7J=h4ySfzG`CMfyj!mp^#_O)YV;iCxF1ZK-Ws -zQ<@9zo&A4U`rInF&r%8N&pT!Qmti>UYc8^H_l-YWe=jL3+qG^*R$Hdf>?f5;$GC&< -z%s;3knRsi8=LDf3(XNA>3+iuXJ$oI-vg{}Si|LZl{gGdvPGVyBwR(A=oISa7Pi_3> -zUtbQhahU9i;t2Rsa?s9wy0v%fWYt?T-y7C4Sgen+o@QA&i_!h*BoPVe!w$!U)OrM2 -zbde@-2lvZBFcx@*|;IZT~5ck{Q`-xM`IA>Fiu$8WyZ+zWR<>M~q< -z@p0Sp2hBn=N{tOdO?3V|n=M%7oULB36#G2+{b4EQw`VsnC!~0|TWl)n?96+0;oEWd -zhEFChJjKs>zj~Wym1^9iwQa)}t(nfZ{OfmRE^}3HUtr}K_-oR+;^XOy`K}f}{vga` -zZL%q~IOA`3 -zss52>^FPggF3I-hXATQoRC0=G*2prmj(L7uP)s0suSQ(_`-3NUs^32-Gyhi86J{p? -z&2uN~*DXC!H#79*a-o}*%x6PZPBTesKl(d=hOWH-ao5_-+bj2!E!eS9cgvn5oF7k? -zF>Dq}t+aUE2Hks=|)T8>X)0(z5-j -z`uFi@3Y{yQsW(5Zns@xO<;Ez@`eNlpzPVdhJzb@hGvR9W -z^Yfj;8@`=<>HLHF#ls~+(_Jpk|6_NtcEhLJJq~Id@~`dn9>pvY_FuX{L85ww@rfOi -zc8aK3%ZZiiE?aHOIHi93!_Z4kg&g;G%sxG7xz_VJij&`$@fe?)YdCvj^zum;j?3sT -zEqHWW^}Yb}rAFz*4L-a0W^OlG_@&o!Wx!O?)r(v-mwQcT|MPNkWORe^#D8)OSwW(9 -z4O#iKk_%J+h^L-9ee1w-`~8!rsD5<69+X$JVk1-3E!Tww(K}Waxv~lUDX2eY-|=4E -zWHsN`ytacP#bZ_jV@ -zi?*C!BA8NBvaX|Po2SV8>Vj#PFSQr+*Z=G@&vLkD%2S+E@Imd$nRWcUiy7XoIddYl -zukn}vrF!*mE{_ssol=!aW^FX)ym4v48I8tQ+a*qYcBuOPEj8lI&OLiiHaUnK_|3qk -zvz-6=f)y`#SZtnuy`$MPo%ztz)eP64d-vaw+VA0eqWfNHq=Q9VNXhJ01HJB!=OxNn -z^`S579j1uNR(`ZhWsc@}&9nDNejlf`v9@~7_xO;RMQ;PSJmsPszU)uROZ$7wPgq>? -z#4E;@9HsQiyZ>wB1ecWEo~V8^A$CJ#_g}8qiJrG@G`IAL&EH@0;H%1-ig{mdpRYWt -zy}W$?!u1C-ZnJo&m24JRw0JsKr~1wIkbfuJJiAO@ht%KqTGO2N_>WwghGnn5^V@Y@ -zVTv2h?b6|4QPrs2yCr&~g`Lm@OJ@0RyB=mAo6#25XZ+}jK1;MfjN+F?vVQTuw-)+` -zo@(3H*tO=TSC90KnM#vd9#3!%FaPj{Yw50p_Dh;p;prYHmOgwhXS<OXZnc?dnne?l{sD<&JxIw+;0-dw?xWqhK>FigGG~5H(hsOa}8Xx?DFJgHOH>4di={G??(Ql -zlP6;@9TwM?iR!ZN;NEoL`jto0y4(4R<}Pc940K9Lnz=c&l=Y2M)V?$IA2Pn=NG(pB -z$-1xIM>dyF=#az43gwrPHsNm>cXqxMtJ{8Mj!2Z|(OUk04m1Bbt8IT|azjt7=YoSo -z&K`zEXPwqsHJ*I+AavHQnTwphsU(@3H3PJ6A^7(CN -ztT>Mas68&)-y!MEdBS6+qtx@GmmYE2q^NAXeL_-W`?K453@WGIPd0IKy7Xe|ocl&h -z?S8UzoR3U-;IKU3L9g2A<(y;-olo1$nJS)it4w!uFc6;fJz?32xVIjB{}m#I9Bwh1 -z)~B-8O^N!eyxi1wYudD5yMBb8?q1LoW5cd|cuIuL4~dL_Vu6QKzU`X7>fW`ZZ; -z*g3VtJYwsP4fD7vpqLRyxAfq*?GjgBIcmahGv`Hyqi?}*V^azJUwM~xlE%x -zR-ke9_uM(|){>LTUrHIpIdVFkD6y$O8R7b}C+y~N}J=OzAk -z+ZViY`t;(CTKT=VTh!N?fB!h+)U_);4FL@*qWUurNx09&^(&8IQ?cbc!O&kj-h+Mw?H+NKxn+ -zV{VqT{G#}#Sy4hc`Qi(WIBatis`?ujK7Qkou*fz&tBvhv$KUqTpZ-bC^635(Jg={K -z-O0&21>Rh|a-~k~hmi5(J=v8`87 -z9;j++H2HIU<77tVL$(Z7OQ$!U*Y^tiG2{N3qHniqt1=(A_O>#v{A)ZTUL(@#^@A@J -zGnVXqEG79Tt-0~)W(KoROaG=<8@!Lr$`-^a=OE}fp5B03mVfK!m -zRUy8_<bDpTzI?rqdnNIgc~AbBO+T(Rdcy-R)m>%T?Dp -z`$EtaKHVLhZ?`VEdTQa_FKLN&9ouHRR2N*&aR{4!>rvWG-`4V-2g};}B%^dQw|+ax -zJLO2ndUoeaDw`WZqI|TvCfl-KKD^?j+)7pP`qUnF%@>M3H@5X_p1(0|+ee8{XY+SH -zekkcPWA&b*j5XCU3@+kF>}n40+-_fSah<2`X(_er7aE&-cOAIb+jR8)~(V -zDoTDkq_V#LKEv+T-db_SMBbd4pQj#v=YDH~irY2c_PZW6Vnv_k$sa$s^+)@;@|o=M -z50<8v_R8zeKeHiCKi8t`_H~66g+$d%yH{(d;XQzfr@!(QE$(S1C-G?!cQuVh# -z=yl;}ZAlD26!Fik>6(6~zvI?=1OH%~$ubFR7=JF1u@x>0v2)!bY+`!-Q@y~f98TZV -zEi5T6+vjaRE*s-?VEX#4J70%>aNOIw)G}yapygyM2ELOUB}4_80|aVMWs3VP4tw(= -zLMBCCdw=RY>wkCee+{zuAa$~MS|h8B&DWv}ACt9?%6jc93~sv;n;>BLGEHXg%?lQX -zD^EqG_6B~OdW0)UIcq{&gT3<37N_cZ&U(Wecapa%PF&n|WB=K|4<0!SI&$*P<=tqz -zpmpc;tgK_N_6onxxYuQHLix_z#?xlfde7th`Om$%E%(<^?s2WBCd09$UCS@UvXxkD -zj4VvrQJnjG`nme%AY+NVtj9Y!zV1<2{Bv&2wOh^1tR1u7#D2MT`PstFH{-&4=70Yw -zA=6lIX+E8$G=xd3cu$?@`~?qYv~E4TT`{b0Wrf?elZV(R?NeXoaPRw@^ZGBlnVwr4 -zNZFlcFP?WtQnV#ER4kaiCoN#@)<+hLPd*ZTvQs)OF@at1#Z~iJ*ki5aMjOYP1d-fH1nyjqv5|v -zUlwG|a92y2F@3ZDq5r9BNiCeZvqe%~iqvgcc+PzH-SQ0)Qg+iaWWK%oo%mpj=LMCQ -zDJ!y0&fK_n%4K<$%xxdeyxpI^W7gd%Pi5xm6`1bU)A}y;*=J>1oul#ZO?jJn^D^VK -zFNN)F<%^v?{l=lj&U%5ejNM!td+z@_mAq7ULH*^}xT7mp<#66eXbutb*%|7lxNlo0 -z6YnPrkp|V2sIXao1&+0tE?hC)O3HD~rihtg@Bd_YF`v9L_wtplu+AW^nd!FaW%g}P -z7cylWGFbA3YtPIb4Ts`16cU%SE?Q9ZKHc)_G9Tr|vr~F>cmnFU&g>Sg4{Tv-@Ol4s -zLcN-}cu+v&n+tCzf7si+t>#Vq`M5XTdov~r-c1vkFsJgGa%Q30n;idgORiJud!39+ -znzm1SFhOC?s@)eG-(PuSk?s8C%asc)ReJ-!njSs2@qd~X=M0z4J06}(i+ZqhpWWVQ -z`)A=s2QImN`2Q=hW>J^I`-mH+rZqR}J2T4K;(oHPl)U&Q#n4G1-aRnOs2v#QQKeOd1NXZ}t8F`Ua%TAp)H3u-K9cF${( -ze)X(K;Z}acA@}WhpLTzG*!1+o)aL$!KV1TTWi|TUTz|}b$tsDJ3zxE<|7o`o-Bu3UXoYlp*5gBO0g>J_v8+3Rnf>8`l(|Bnpc>8F*O -za~1zjZdo*YQG)u*Wt*J^w%jvZ=da$piFvW=!d)(#>;EZtSZgGOE!rC+%&966!ux5@ -zw;QJq1pc1PDttZhwbq~aXC9o(nH6|puKuj=^Mb_QF@E!U_{_!M#nY+(*3&y(Dm8}h -z)@bcGl45kOeZQbl{cp7kyQChtG5M_frTnAU&(VC%8x9ULk%o@@>`5m>c30m#JFPUm -zz30&1t0IljZ(Q_m8Y(qhIH*x1l9`vb;-QtAhQ;c|ccLARAAUM(>c$Hn9oOUtDcOZO -z)(Rh<&v(T)W!ct7HR)=5gA4WV8e^Q8r#OdX -zwcTxOn`1x|x`Q9ZHyLO1Zt14JG -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 -z)qFFIYd_nw!4X6}@=sx1iH|`O`h? -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 -zr^vSWQC`e}>4FnJ6|ppK_!2N{n-_PMZA-_B1 -zbJ`@&y8-)`S=lk{REcKdJDPF&wqy3s0NuP&vxbMls~gW`ACTQP(NR&3d-{hMsk00# -zn=d3iUgfyBbDxoQT64oHrZ=2#Zk-Krw|cJgbII)`5;bynj~qDLHoZ8lL|W38*VWgm -z-tksv?B4CMjxI~T8d(d(=aEYA%?2`bf@;@Fzi6=V=OSv_GEqI^%GGypH9W+^6X; -zfYrF8t+SH|;lXJ(KSRKE+v8499JL -z-)rLBB`>h;;%To;PL<<)25p6WmM=e;mvDF-pUYdkKi5)4|T0jx8g=)XK! -z{$a!H+5dx?i|gNCKYy#h@s)adln5w$(dvxzwhbK8(t{mvE -z-tjr>OJY0At=}OLLA!a`%CGEt`M8U@c%DFyzw^FQQ|7j|BL^a6Rz^iJ%sGACC^s=A -zGoj)C*{Za3@Ae;|1`#U{KRjTbqcDr9;FrtWC8qaUoImV1xT(LZUh2xc@Qyn1XV-&l -zuBTo!z3nXZDrR|)f9LD^dA{!6IXhN_zO&?>`E8cz^1m*U3k;39x-O<4ZwU$FPH3&R -zKbp<3djFJHRynL6bhy9ly`*Yvdsgz5<4s%n9WI8(mp2(y=^V)@d28+5#}Hf1`S+u6 -zXPop5g$6@zKmNb7H0u)6X4Lz)G_JdH%e`(rs$_`Pv-ea%QVi6YmGTrsAp)q#r(PO!$3blQkWB$FXQuQ{dS@5^(`tpTb*+Lqf8Js#78LcAc@N0d@ -z>XFX4;V8ZHY+Ws6YLd1&}F%7wo^MxjNKE!)+(qcQz~VV3~w0TGl)DA -z6nou0-(o}hCw1oIrguFbr=RfN@Nez!Qz!fW-i(;HHR7NBj(zRrS9_V5m||wVWKf&B -zw>PlX_<#4oGcTr}JX!GX_Fa$39t${`OyvaIIj+oD;{KR%qKQn0jY_8CEENvcq=*6s -zUCGHg7WKZ;r?1TEd9ueV@X5so4a-=$CM#E2DDbZk3RDPuV(2RK;7|C8;CI#&W{Yag -zedfP(Uz2U%MrkJNN8OFT%=k3!3GL)xxA=#~MNgK02VJH1#63P+kZ8HSZr`WMc9CT6=bi>s_S|9OD{`zll8{{5zGOBbwo -zp3t{L%&3%;C3^aAomOtXZwHTWzgCm@de+Vshu^<_lRxAo-+URg`0?h=d=K`npH~0! -zu=F$?`>t7^Z`Co)+?(`Rrzl_h5F4Abaz&}N-)bARNgS$G4pEa-_LNsobt{_?8`Q}w -z{q^2-okt};#)(~}&vzCjyjHNEeeHAIIkKf7t{Vtci*$t!@3X`=FP-kSPp)6WR? -zZ%`39pPCpSm2LRhI4NT7rDJE>Uc3$7$8V4>8{(lUD!+4f{Rgv|=}SLFpH6ZMeWk(H -zd@+BK$shl4hG>b~8V0V}Cx1;6$ojkCfAzz?zv~=7+ljZA`g&KAfUYz*sllC>(VrO8hW&PW?Z!7-CO!rq85K!Uf{a4fV^wL|N{DpCH -zyY=La+pn#;#rh!sWb-ARLaXc1x*qI)x@;le1N2;Nr|x_8>*$&9pLC9fIIi+qyCOQO -ztgru8jMF!b-I7|Re`fpqDLr$AxzDX}5hrsKE33%Kg^E)5)A^XQSZ`-O*!Hc5MRbz1 -z^5OgStxM*#a;;5mzHvC`@fZ0bZJ~(f-`98>d^f${cPeX1*!1+W%x~I-mvnyzcdb|S -zRq4~%x8m>8wQINKsIZ5W+)lUN@pqV}wPG3*Y364Gg|Hl0HbJ!&r -zv-ec|Hdwf3S%B!~zJnUY2GUd3OrBRSRj;D`z39p1)^8eJF&9!;$E90(MvbYy=q>TXTEZ_L)FIKhPO0@kfl5m4p@v2!9t!{b2jWM72}#MCdZ^XrKD4v8)$;em(Sy2};;qYq8(S -z*x-&U1vo05! -zGalpSas0x(uJH-ariO2|IvT!5in_T!9kQJGb6$AJy!yf~KW$#bN=AiEIpz2;<8%40 -zf*8wS<7@77g#u4)OMiZt<#g<)!nQokeFBU%%u6|Ed2Hx3JUU5j$=%Gzdai|GbJ`}D -zHI&ZO*uB|3C-lWd?dmgjOWI65E*SLp+Z@U3FyXG;!1tDE0((eNbCIpwJE9T?#b{xL?`hZ3X -zL-2Jg-^S*dI%x{h34MLfC6@m?=Uig5Sw5qU??Utc7QTot>ze=VShQomsO#y7rL)Bx -z|Lv)dh;OXd{Jf#NP`p_1khONs%v{fia`#Oa*F;Gx=(nr7a@B3rXMM`Y(7IQ_QIK0- -zsw@A>m$MPxZdn>L&i?v%Jvky>RHtByOv1A(`a*R*y{q2EC3yA_qF9*muD^zc7LAAYsS&E -z!S~Z-g?5iR)vh$BqP<$XVvNl`T)gW4srS1+_qFRw_VC;7;nVBXyn8vC$;|wNY9WJNby8U*r9p$*LRIe+tnLu3y#t)OyAp -zxfkoxO5fhJu -z-KI8+9Q#^$ZK6=vGHb>=k2b8BJ}dY}XGyaA)ZWZ90^TRK^a;8;+3I}k+_bm2aQl{$ -zD-Ubettswt-IAYXD)n{#I!~8%p)Q}kN&HMwnZE3AXlH=)^)|6$BX533XHx$T~IQt*cL3u>4y2@cs3*&wiHm%nuY_9nQ1)P{TXc6|1MKUa_CE&thK0 -zdrA4FS-Eu9wV7=9ek_SgKeu>Avggp0Yb8a`_pno>jMQ -zs+U|j;lYzfOV4E-;d0F1GGA_m+W9YyEEPK)9UG^=_xo6Sb>YV~%d#ErznHUl>qe!E -z2ehxBFwU5%c@5RA$Ef20hE$do6Fo_`bb(yV2#rCmS1!LkgTm`%42F -zPHww-*Y=QRl-)mzdgIsK8qPx3?&U{GUd~w>>GgE^-uvb|T5n9uoxNMqUvTp3Pp=~8 -zIRsyj$l^tsvFaQFoUxhjcrA|zIPYc7^>7lu -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 -zJn_&E#|>LLmXu7>%DKrYnYk?8ukC -zxSf4|i7VGv{|(*iht?{^+vzed^cO* -zO_N+>&jL21hO^?kxF$c%((Jgvw8B4V`9;lzV*1eLqV^{B!OA4>DTZ**H8c!Z9Z}^gztFGwe -zn;~{FXxZ6s8@~%hmiUR*nwbl4Qd}=&vB0~uYi^SHy93OrJijw#;yy6hN3mR6>|cNH -z!JUaOD}QeIc6iR5xe*V`_Xy>r#hy3QeOJSgQuM3QWMNrD$&Taly$|~TJv;wie~xv% -zO}*fTWhPupt{vIDpjlksOY#}J&eWSbnmE$4uL-8ja(H_{P-a!kc8gE{Zq8jgM`*`8 -zh2wc_aq-1H-{*(4FEu(|ZJbnjI!gBPN~a5}z3X*0uZUBWxqayiYxC+Wu0I}fm3XT8 -zZ(-Qb{N_T^_VY>H!AAvy&j~wloh@H#wD-(**^5V?hPp>?t#wt44}4d_BgN)osM!$f -zruKiezhC!9;vWxPIzr}F5v9q%sQ-`6)uM7l6D_7@v}Ojt#Kd0l(s!9_949SwNr -z8l)69=rF&Hjh>^y@a5eR=8$Yj6XxWO(n -ze~n&sT2P4c(bS11jtzHaL`$^4d~Mq@OT?j|}X-Z00ewWLL42`?kMz9G<1$_5b$Z*X9RePuo{oeO3I`u<6GE=hXW=@$Un? -z%{Qy>v26dnt2Oh9NS{Sb|L=%b6Pfdz&uQN1I9X}7_Q}_sO6SEEtFGhIIIj71bz2@svW+TChk5Mm- -zjT6=?ed=5jH1pVxGt;aT@9sS<_x!b3!`U>$CTC7ZA8VeIVD{iy`KGFh9S$5f>eudL -zU9v0J+UxC)ssxo~OP-u8Ptc56c;=X+@{{ShHU67sZF0z(mi*k~iFe+W4O70FE?ctc -z?2Bo63zy|{zul+I>a(lW|9iFTf$z*-tlf{aYzzYa9B3<$4%k_j@%7*QxD`q7*&c|u -z9#|xA)9d2PA08sroUqnpi|7;=xwLHGkNZ68qyHZ9En)JVVEKIK(LZ0}-4*gqTsoa4 -zE;{$&Ps96NH7nNK+aR`9*CoSFME5}Ax?tH;_XQU|-Xc&_q5G9_!kugGEvsI8e~4B3 -z{V{3()9kJ3nYt0%ceQb>2=VqfGx?;<;a#g=N-S$wSK{SeVwW)Wdd`&>+4a-@zSL?e -zO}*06d-F-X`4!e>7vn-6DMj?-TGK<8Gtjc+9*LE;uUtVO;nV9C^Ch;cxdSUg{%a4Q4=oH>R{kpvONWX0_Rij>@x?9R0J}e36pz;rjM|HJ-E+Q@y4&9tmSv -zvZvmTQHz&V=3(r-c?nM9vJ8`M2^1L_&$l#S&77_1DBg9wXR3n4U8DK8Is-hXX85Py -zGyH!g=+CxdiJyvnt73MlHXe;LIotj$RA|m65$?DbllA2HZ{>Mu{AI_hV@(%XCgyo= -z*3HPabJV@&d~it=d-0D)G*n=GNOfBU6N -zCLB-7I?DFOsq$Zl3X_Z^$DN52Wr`o&e$KRR$|m>QPq_`1_}Gsoo#*)0xbRi|zG)47 -zCl@&J&0FwOXC?1yC!eRDHS^;o91@+vtW|>LXJ0lp`gvmhpVY_`hk`ZVu2(tnaB{-> -zIa+)V8bjpLE%dTX>L#%|CY=5-$;Q^A!)2LdvcbcBPn5gu?%Yu|deOMYn%!Tln}!li2xK -zhL+^m4!wej)08e3uH_Kb5nwcsQQLko-srSS*{?-MvO;?F4ms8czKz|``E}Q-mZ120 -z`M@OI!}BjMDmbBhGj;m074rX$3!|gt-hKYjQ~Kt|i!d$OQr_U9y(rHy-8IcJs6`l$Z5wIfI;?7Pb^olO;J89qfZ`#^e -zHeS;y+8)e)w}MvKPvRF-JoxTWUlHRBF5@j3Ul;2YDC~TzA|)Hwr^o$~A?VEJuCRT( -z|HoyiZCk(V#_i~PTpO+6 -z%$Ymet12tuS^(=bjp_ZDoexhqT(vZ~v32v4H=loSBtN%((DUzeayM6Q(C4^5(eqcf -z3ZJf5sdKC-FuVKc{`nf=HR0Bodv@{Ygw$JQ{s=uV_1!obl0AB%Tv=GADnSiZ!PB@3oD|Zn -zt_bAqnmnn<=j*%AbHy)o$eb*FZqS{qzqfTm&6?=V(j3c=qjU;ymd~`FIcPf>9F-EKe1b)cK*!@#rlq4MamHH{H5%c-q`uwxAgdVPWVslnpH_xak^RO -zhWqm{jm&FOQOrvjr$}6tNviyJ^tp*^Y`Q{nNGZY -zUbJZye^qcc<0C)ggO`^TGn8g|1zB9Ez8te@mbYh&$Uc?Tm0h567fFP2mhzBRyPKPJ#l906JTp-nsEAT -znt_;h;Woh*w;d}}=Oo{oc%v -zwa%pJ^a`btlp5ugC%oOu_FOKoIm4%Rq|U_PjOFLK?aR7sx?;ka>hF5|b9r6d6jpV? -zY{!KAJB;tJ9lGG$5a6NGl<;T0LBXWRcgMQkHqZTV%xuoeOX7lkzx&Ipz9erfGFtTT -z#HLsey~l5Z4$dgPF1mE43SU8FUc7y~`&$XFwA}Pfx3bdG*FSg|9x20MC&u1o(jIbe -zw<5d0+vVwjFLd807X7LH5yD+xx;>jOD(Cv$1~q|c -zV4dFQs%zg>`p#B&amg`Os6vB -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 -zS2cys@64E;%l)hF77%z -z>hGtXX-xNiW{~`ND|@TSo@Br7ON>lTKbSAgcw%*nM_Fg1u1b(Y -zhoaIPOZVBFD^DdzuDh4~ZL{}^{8y(QX7;a<^i@|en|{dV;r7{!UVc$Ac##qpbl+}c -z6yq}CGfC@A7S=a8ZGLHza@c69=54QeE;Ic@9bcS$eeXp>v&f60T}HDOd28A7PZqf3@tL*}C*O -zaV2t@UrRnsTvWVUfwliw{i{1Ajg{|XHF+N#TJibZXJ-Rv$H$ks>mOA>y>)*c5z5#lhJ^wFfvH4PYrgToI -z$-;Y;1~=Z%eSXtN*VlEeiucrj`(`1lc4p^SCUYh7GVK@PI(hQlS(A|L$w9FRNjqn_ -znk$vgd9BiQJN3jauJyBcRxgdd{QLf&g@WJm0v3pJ&M3X*nRH;0^%gBvjkpJ$Otb2v -zrhoj~;!sxZ!%`*U$nBb5UL!L5RmuzQ35EyEGWr;k(l&CtZjs}4;dr}o`Kp?0*LIjM -zIdJ9SwW#l%olDgCoKIJXs#ryRd)I#aOPI^UttJ^++3*J=+(#A>@iPzS2`n; -z+^hAkwz=&*blBH%=I)QzYn5`d?bEz}zm;cD&z^IkSoMQVgke&BVM|2yb=Iv1XZ?|{ -zmAN}B{G;S7iN!qezp@S$Em)^qcrzQMUSN+KdIG*D1 -zVFvf=qiOq_ShoIhT5|b?kW2k~$x{6X+$PtS&OGlEQ~8kP1<#Syh8OAtpPZ;nOtr3F -zD!=i~D%LfPMp2I=o^`mMvoSKbP_SEHZJqZn4Y$0POi6;9rnIEZ>}D#i^%P(<4GfsT -zDg9)<@Qs2{x$c+O{B}>xxae}?-A1oM2ZqNEHoTKL4yMRFs`pwe6}I!N_S2B7^%lo6 -zml%t?UpT$pQZn3h%J#-<$G2=?`6U*x>0f3*+1r)8$EP`2#Xpnb_*|3Ub)@Y2{uc`v -zGjFn-PT`v(>822A$8tf?;R}o5KTDdnmS0g;undfl2n -zm7a+2SIcL87V&9Czjxh>%$SMMQBG;M8kA>=#BXLWeHOJ{j$sOO+PoQ6c^;eiqF=i1 -z@w~uk())U&pn>nd?Y|n=J&-)CI(>zPmcC@;!i-ps-li`Bf;_Elx4vES6YIIjc6`FA -zqBteLiS_9Wx97R@e&Am^Qy@Ec&F8R_uglgQ&uzQ&)mDh(M5aUFwI|+XPfrLvo^b!n -z$5%?7bDWFP`vVFdM_DVX7*~2;>yh2+vFx?6A)n&a>5s}+ie!A;%zPr>neQxPhq=Vg -z8&`hC7phyGzR=n!`LSY=&-b9tm=uMrCZ`k5sIPd_Jo~Uzz4g35tI{il?^Uaq3r*_~ -zxqCgpPcA?et)47iN|#oc}$&C3c_BfiA20rcZum -ziLo~2$8GWLjc-brySP3iMj+jAt1iRM!_KU&hP!LCYL0|$JN{(v>Cl=rVb&o${<^E4 -z`0wOnkpA>TWS8c&%bTV%Yz_Tf*?nS$TqylomwuOymHXy5*DM}MfyrZc~dTSJ7E -ze@wW1yp(TlLhC}&8#mOv?rxeIP`2UAgNg$OeH>Rky}ELnzY%YO;K6%MVfD_(EvN0} -zci_9GmEzw2EVIaI@iqO29{>DB7MeJ8+g*G4XQ5#2qDM=Ls%#ut~o46I~d>yuib)I6pf4wE8 -zMXtKTZ^h)R$;-{}dzZ+vm)xSmtt!t+V=v;3g@X -zoBLMxuiJ9lsmsPk*68QU_=PX>*+8US44AaWrLe{nCZ&qK;}#VZ3y}Suc07$=kki -z>GK=3_uTw=~+LgSf`s>v*d+P5WPgb+O5qHq^ -z;s3v<-kvFWDI2^eFn!sBl++~I3~Cq8Zg{Z&>y*5g$uA-aJ1JEm=llL*uKC`zXAfjqR6dImdwjEe@3UY3^*6qjJ8>(O -zvtA|a-L{HQrK))gTAJcCRNSHLd@xzA1MQ`p(g -zz~I*bcMO)77d~=Y*x%H#>)2a9X;sdu^|K}w&OH3$LvzsDDj%kM_cyM&{^2gy%$=+E -zCG1`tB^2$#zV3c=t^M|0=DMF05;rO7JV|`PA9*sb-h0D#$>b>?+@qNVKh>$danD}& -zt4=##O^lU)-j%vC=l$NTizL~eWiM^BGR6+aiA`2VBH`hPc$?wjxJ -zVEgT2@qSJn-kESJTi<*yJe+zlq3+DwtnY>_R^`rbT>4ke@XM48erI!jVnO|@?N{Xd -z&wPG-{C@kQTd7;}&kIf8@S}Z4+KPMW@s_HI+vS#)ip~4~^{V6HLe+X97hAuHt}iF8 -z^$DB$Bqs3Gi|~}4S8kh{t(@rW9v@h|KuLlx=GQARMXhzl#_q3wvQ6r`!pvN{x+pnv -z$NV>$YkL$eAN?vX?vH)8XI9$!g?)cc1@rIg(op{+66cnFW0gVw%tY;d>vn7w?=?7Y -z9ee-yL>BAVS+6IgxKEXfeG-wlp+0WUg|p&d(_&nl{TV -z8|&&zn^n&if0<^%V$AN6Bs-(&0bhg7>3Hd`gWqzw*kYHyczu9nH49VXj~TVRcQRYe -zx))73uEw{(BlJteq?Iq#N+vfyI4E#Wq0r%sZQdIpmWZlJrdA@q(lv`%o|a}le85-l -z+3RsqPi)KEoJ7B65`R|u7mGFTToCt8{i$smKV$FK|NX!I#NEtob(xVZnD@B#<>|tc -zk^AEo%SO1?b?{8@59cXm)9};1>?YmMdghI3&iC6hrtXS%)?K~LE56u4=9$U_U%BVc -z_DNrvdX;lW+A)uq$_WoSmTV1J_)5oH)=pJ%WxaO4{Fe*X^J{j!*^7VKA~ -z7yBcgY?_v=z>y>&^p06rz>$H8rHO&FsjA>EOfcR%+k}Wo6J;I_3MRJOIq$C{#{%_e?t`RAF?=FKPzyro7oB_lh=uVCg|zi -z6WPDW+ghtDx{#hvNTAX}5%Y1GI -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 -zvLL}XJ7B(VhXlu};M)R!%!T9Im;~4| -zyzSQ8B2TN${qp>!;`>{gYwC+$q)ciJyL%EvRQ&pvjc>ap9S#5p%r-AKdS}s`dM2edy)? -z4EBsl+g68KdE9SXvi#m3ORZyRuivpti}y=vOi@_2jxF`T;f~DH5J+13f=s`=#gc%I4|mXUsN1f4q7@X>dB{Tagpd-&=c -zvUl*Vd{&=XahKDKE&uSbPk}jS=FMNY(NJcw^uDVChoi4tYL8?#ShMr?)SA`u%uoM3 -zSYNizTDpTLd+Vd+lfK?um2!HY*SA@bC)@6eY?|7WBDr$+9S^6jk0CN)`wbhDC5o4) -z=QJeCr|32GZF=(KsZZ>W*%8%k!nb3EPilqu^?cg?bBk~%cYR~yi=PGZfhAv0E>wN( -zIj=FP;<;A6~mhJU-dmd -zPrJv>d>kCYC7!&8F}cUx=-8FRajNM(H(fe=x@|B8GcBkSch0@X&icJtb(k!Um7`P(ad;Ob(E-`nqXT~j9 -z{3+w3`khDtW6A9qk@?4`RY}zbO;f#7)FBwW@$W>#BVqfwWfU}Is+=eNjf_!jQQrCH -zknZdp*;~iG#p@C;rTMQ;Ta+lF%;hHZcG)k*>x_*r-dSH2k2~g(vFC*EwtD?~gO-mk4UuADPd7TdzoZ}&HF -zjsH*AtF|7ylK#XZsr?=!J9<`2g&1OJ?#8LJmwx!|}(w|dgy`gETS>@x@8X=8|H*1`H6ldL6r^3XG -zXK$%LJx%<@tJBT<+~(R8y-rVU>M>zWQ!blaapu0FtxEi -zt832$NFCegnme!Hm-yeDpDp&$NkOb1?q-=qhCGlyFLsel;qjaQ-#ks69^K>2iCWBx*!ReA0i-TwE#MBlu{!hd_$-TKGT+wG5){(ihO&wkD8vU&0? -z`;(LxhJH7bgju{Mf_%ex0dO?3)Ez>nGo=_;~NJFYkBx$1_dc@4tSO -z8GG}-@x2|2r83g@>*t<0rtJTGW371p?a8(5GhY@iPnmA38K|QXV$&GRDe^Pk1=-1fucWu$CF0Q!u7kRsz^1Djk_Pn=Z{E}8) -z%fo56J|kG>v~KJA#)!|?D^qxypUmGJ8l`DovGGLk|MH24G_3a&YykcsiW66hp#<=Lpt4jrrSI*x3gb6{Qi2Y$Zlp-`*d!HZw}{0r~41*O;ZYc -zG(~33pJpj>p&V(!ZN3txAC*!z7+XUo%^rCYkX&*ky{ -z=6u~hS6yspg0xq++V*fy_0KOctM!}gx=8O(-Zt0xw{c69{Mf^uNZEWV@CtbJCQ-}( -zQ=X8QSESxf(W3f|=L4F{t){#Ew7OP$#?iBL9}67z)mPY|?4IWK^x=JN#mdab -zCL!xye#_tTOWy9{^ZR-1hZat_a&rwc|Ga09BXZ==9{8~MFvG`~FE{IpVlUpb+uJ$& -zr_dJvP1ih^*__dRmA+waj??`#f!03rIxh9Zw&ya^HbK5xyI4y3W}Guy!kPP6B}eHT -z8(X@8W83^Zcf}u>Gg=;oic0K!zEgJFv#n2Ts`D6nnj^YcI@dq_EVn#R^GIgPG^?vt -z2SV4H-c+#>t6#a+sQ38)=9^~B^(<<8C4MI_nYz!i$iwOGe@A(f&qqES@fW|^_hROm -z&~5Rb{+hnj|7bPIeNuWvX2*%=FH5=2ZoX)Kw;l{@}ieY5pKyzZIlWv?~{@aWc*wzefysW`@E^E~gJ -zP;}wO>?;!c`R10N?P{xFIv&ZG@_hl%{fVz@-c508PYx`Y!)1O^{>#*P{VWlClp1oC -zn7EZSSLxr0;J!3lvP96cxBpP=K7QxdxrPBY67?RNS~q-`KH#xSXYDk;#>%Ddj|MBt -zZICQ73l^gFE#@yd3XkUFa%cHYpag -zPnXba7r(QzPnyYs@fxGXBk36@i^UdR{r@|fOK+)^BTLzbX>2?P3$-S{Fi^c=D6!l7 -z0pFs{53fzEe>t^KLgTc|zunpY=Sucu%xDz78SU~>`Mq-|qsM&1$s$e4f{d4h&p2+~ -z&M-~VtNqfCIWk@yQ%pE|R9@cX3ZA)8Q!2_eL}J3}FHYjg*Bq^X*l(*T44=m&FTUw>PS})BrbrAe~sP<1NpL}?vVM#>h<9a=Ta~YBz$wKNpi;f@o -zt!_B2Tyev^gnZLQboII&`h-PB&C7wpaq -z91I2;3Mx~%pIt0)Q9E^upXC4pYcn$^bK?|7=ElB8rY05!riM8TEIbSh3@i*j3=B<- -z4;(#~C>eRLInN-vWUBqoG@CxZQ?@nnGq;?q^}o%>a_`#vS6%%x^~z2h;!I38U%U05 -zXi{VNrv36~WETEW`^#1T^<6IO6+tui(58Ow;MvZ{HnTD&#hzbr>V)f-HReTCqFNg5 -z&u#y`cw?oR^5CAg(}-5K@8c&1KUbHo(EIJxlU7)F>7M2C1-8${{ydLa-+b=3@QaTxjN5;v -z9DHgK+`d|Ue`(c^AiIsv?rV77FOcU^YdtEZ`l&y|X}z%JH>Z8au3hfG+Nj#v4fHH@FE>TB85ei+KV-oOwl{H^1eNZ#wrDWB|S7OYbF -zemQDmaz|s4{6?pWKzobb)0$RqFnW2V-ucYDJeGfM-YG%(*-G9yvT45!7v`k@_9|pr -zzAJdjgss2+eb6YHa!N+Xg4p4K>bPti%S=O$_xPK*uz^)b)GJBibJm!f!_NI`=~-r|F9_k@<(`97JS -z(zsE5z2W(*|6hCVb6;?8@tmu?T~of6&9-+;yLi1NKk;t_srI(1qlBC{8!B3 -zfA;#WSE}Wf@}0+i*wxFI9JyO)zrpm&%=#w@k$a6(lI7eBS;P8;InMtw<9l{bzK%IB -ztLOgCeWr;VZ_d@)2HfW>{d)BHE5F;bYSd>u4SRNO!qT4U|HZ`*>LXmdH2B!?`q&w{~vnLtsx}5l2ovXYqy7_r{(c&*ntefNH-{jVxzZ_@=?(9CNo3q?_CN8UWY5bPdLPAYAN%;nZKa|LCmN>6yxM(q$87tr^JCZj`+w@%f6at#X@TE< -zoIlSsL82>ubwm?nqcXV&z%_`=R{Hfh+n=a4vsh-d2 -zUvtxm{b7rWjX@)5DA}KDPDL$_3BdWU7_2+;--#2OK*-?Kq=g_v(B^eeesT -zKmDIW-`sF;5)64Hz_H@(!T+HJ-kWNhwll>3U!CUnEXS_#xjy`dQn#HQ>Oa*Z=F5Xk|U{3v>^gdSN!_X~xOR -zsy0mTl=^bhQ|2ub-_OhWR||`FOx$JF_hcl?+ -zia8BI@AzC#ocXsk`^$wzn_8G=2A_!7?7old{ml}qbT)>+hkw1gedNj;oApJy{WTy2DDgG4~3ML1CV%&Uk(H+f>gh_XN#{hL6T=zTcTYA1(dE -zt`#9=_CD*1Q|O0;4Ha?m*JTw>+L{~buL+zt>8R{^{l_hP65czuxHrjj|IFU%^=96o -zn~}_W!-IqZOD>$uk-EXB&88*JP=9yhg#{BQB&!G3d+>yo{R&e_a6d4w>A?x*cf$MJ -zOV*y_DzOOo_a`v_(G=^iKRb8HRBo+us6-5g(KPms! -zf4?&EK~%WEI75JFhI(Pm84(?0hqbemgWs$T^qq3E&}{1R!)1X!4~uxZCZiFJ*Dsb=ETC+XMD^cg%UJh!udZ#7Tc8GE>-=sw8fmQz|&8%P`7bd}i@Ui4UhEPu}c(Y5mBc{@A3c57?%B^eT=1 -zaHNti!LxtbyMh)M;osNi>Dum)?d30UjJ*_WP}3WI)yeq)yG)AgoVeK^m-bk`Hasj9 -zc(g8HQGlD-oCQZ~+qIiRCNC;FvP1Imn}z(F`?Q=K!tJ&c%sR_yTm0rp>%F9&S0>KW -zKF@n~?z#DN@t4z_6&5^;+!j*b>^h-nZ{_l4gA@LxwIwr`iE{1?**`ULi_9dc!xh|F -zt%*Lf=KuB&T%d6wRIB0i#~BGJQvctW+ef8d*twA_dqI#Va#5F*i?^6sb>2 -z2`cUVd1=|tjOVtQ(-dmhW2+KEH2wCU@nPRz8*sN{Z~nq7%!i{hgXdLjKKn&~is!N~ -z)4~Eyru0?tGJ -zHa}(V%Fya11pyKdUwL*#~q67>zBRl@iBgx;_aI_ -zS1QZKpkT+u%oU&Q#01(!^sE+k-(b4K6esg_`}+H0%O+>A6gGW2v%WvzUU7{4!6z(l -zJofl9Uwn9Ng}YiwqT1oWy~$4sn+pAZ_QXzzda-%&-@WZM^|g9=8Wldm+kSVXHvC@t -z=}XAfyL|^&7|u;D|J1n5_n_~TRy*~WRSa=8^Eau*dQOacCTRZT)H0P%o7TQcEp3_B -zzkB{XE1xA_Vp|@sl>1i_f4=k#(^q!A6R)MtJ=p!}sPG@bFQ$k`|JWpbQkbnn^&JiE2kFE^|eYw8l%8Qv(eFx2dJ;C2hId**OuA%lFo%Hy<{w`sWdUA<1A_)9)+FLdL%D7Mg6eGu>RDm>laJ -z6sSI>P=>`eqIPekU1?9>-&?$U&r9Z<)-OK7d4=z-am((6IL#e*>Qq(s@yuY$UUuQ& -z&n<5@m+5+(b+ew$Jm+O~x30ro+os6|#*0KQ@~vi5QL!yh=XE^kA3o7&eM`6?Q|rzA -zZ<9kOW~?<0Q_8K@?aZIDszvqR7q1-K`cE(Iw?AOg>SI36#I&~aqEz_d+=ik|osb@V -z$9SCsQ>;F0`FS_mEm(codVSNpqXy6Z@AqgurE6+8v4dfb^n*Lj -zTRG3xYo&N+ZGZlcec|GnOh<33Ull!lH`y`u@bTKRucoOiO^&Z^S0`FO+xKAm`!%fV -z_gd{;o1~TIuiz@obLwSpZ-B}kdlk-qf-~DzG&L)I`Ixrr)Z5qZ?=d^P-_*YFXnXS2 -z6-MfIi9Cm^_TRd^`QE|pU-_My1)i^#D6!#AGLzF#d{oO -zV&j6Y*Qtdax7)u?s^6AaU6bFq^^)BjOQ+|Sww^JX5)+$3Ww(^5^UbT(p7-=S$F#}4 -zAGIIkXq8Wxn)15(2Ai<|x~oc&#sUceQ%k>cCu>e<=*gVjW2Adzt^`}}iA$Zmy&IMN -zJOryY)NfjSZm!Y_=V11dNxx_4>2*$;*vGfv?^n51(OjBrwmW0L{@Gj4{(Iwp(QVBP -zG8eiVME0JxxzN@>r=R)7)ZO`?n^N@ncKnc9I`#j4FSg`|48PuImNsTZsil6Y+n&p! -zwbyS~l5V!K99Zu!E!7b3sCG@5+-0*l;--Ey5XwL+e~ -zJTmV|`{M7P?fgp?E%dyeT4X&w -zF+b%cY*-ym7aCty;9J1CU*`C__va=H+zmftxYd5X{$i8auY+fqz7;!JIK3;}GHFBa -zV>bVrXA6`1s&ii)SJ8M8qGz_P`oolLCvoxh6Myq2eB_v5epBSEk-&>*Hd@K{n|52A -zsn`5gJll<YBj4HON)aqmV3-lyzY9$NzhF7 -z8h7RiMxTm$m-1In1Gc-17TN|WFI5v-ylRO<#A(kjtNv=(Ja-ho6>zC((T+ZWy^}-2 -z^G+Uj=gNJ5GW8CpZB>cdch~Oue}XqAO;ho#xsY9-lq$k>yV>4L`uW8ld9kmhm#*6p -zbzRETu;H4(hf}u?_ZrD{#6EevHpfb9or94&oZr$3V%hV#Rdlm%v`f+^ -z?4D(Abm-Ev -z$Mnmg&PRAU>Swn(tUc4!7T|E&kzFM5mS5;ed8S35+kSgzf4VF**`b){XD=yrb+&O|Io!cLZp~I^Jo2}AmetGV -zX=`1Y^?BI)zO?a2h3Sg7)%cy{mj>?LDB%=wYFUh8y+E_~+6j)+&c9$gX|UO8f?X=(TyeEU -zCqmzddHH&JyySdQb4t+f+&Tp(LvhW!$uoD0%ybuWjWH9bJ6IDIYiA^UDQL>cUkMKC -z+t@DX&JEmV5U}*szP((Y0bkXO`WC+uSry%~+xkjhbvFja -zJvEbF5xL|PN2{~X`-q*{LU(h*CFECfc^2<#d#R~9`~Sut{f1Yy64bahE!cDJqh-;O -zIq(0hZxU!+efrYM>KRJz`{sUT3SeoQbU;PHKjZS*V=BKbAJ+#-)QkPp<=V-c8Q-WS -z%*eT6hR{O$pzy^TQ`AHQFKrck(`q3sw{|uEv-S6#w$=D`$#~~0C*3gSJCM8R-=l=k -zA6E+=-FP0?qBucoV+o_Yte~ux^%a@6q&;t~0^aYO9rLnnUikOr`}1#YOf)RFba^56 -z+S!F8o57r!m%-eL&rh>n$YLvVsltuBFH;*|R;&ql7H?uAK+xoZy|D(4T4}yi=K6z;uj9 -z<84;h{{?oY-1cqTzHu#3W=T!f+-f~s%QR9~bZN2<3}PzV^qxTRH5(7Ta(2Nf%s}{5N)(DRbsli~Ly;zn{w`x9<14aF_Ym -z|A)twPb7=X|292Pq-3E=TUEyv*FV`>s~Y}Gzo@%)j_c;%<9buy2_^9EyD~L@x~N&t -z%F|sRQ}XOL>u^QHE>!$}ebOR{SqJw&2u?is&RE~bil_GhV{6Rc-#zc!=4a-yT-a-Q -zBj-fD{g%Y&cjCNqPuaXKPSJULKUigL)|xrF{}yasTE6RnBddOeP~@%q+;NY%1q -z-|#>CY~jq6lMS4XGlhFS(#o92uD-cn-{!>^RiC(=sc-GrW^=!)U`-O5zUt$p&9OY9 -zQ-7@3EaV?7we|PIqf__!-0sL{c4H_wB3;^U5FsnqpIKkD>Z`!LWgCSRCg#oP-njIo -z`NvKFK0Ns%AD0mrcj@?thm|@;&4-Fh!{7VNlz86kuej-;z~S4?>(;f0PyS}NMvdq8 -ztuuQ9*nZn82-x_aU#ditu#uwZ;X7wn9=mw1e!tac^-axd -zOL$@$3T3l@-QHC?{q3DCS0(R$xV3!=AKSOLcT1SQGkH!aS*py&VEvKdknnlgKT)R5 -z^LSe8jgDMjl`T^$$G>~2JY$rPh-`QL*7WHU4*CmDiYachx&L-=3a4h_+?84xr;Yvy -zap`m&SJhVW|M-Uav%b->T>=t5?RV-E?bcpcwbLzUF4x*C;-YyerytMk=Beju^C~<1 -z+VR=0)s=sos_v%$550TW?@TIh=T=RY2lfeveD=nc@7oe^qw3?Ua@8v@TKP66?yY1$ -zl+z#K?7w)S(1zMF5pO*?H#>i0i5;tCPknOJ)ViYIyKAkO>yHaTZ~yo`@e&pLbopp= -zSiN76i+9qUt?pVHqP$zpS^@;6JY&A(To-m1w9XgV{xWF$xxSQz-8^DOnHM*7U0~8t -znWLR}TJzSC33|(!MJ}I^o~1OweOLSLqG})G-|AhW^Kvv7cl={rtf_4)uzh~PdH47J -zEH6x_wRvAIzGK!$8@dh6%~94u(1c-Ns~p7WW-{- -zWrQsqCTTD{e8%VSV&3ldoyrXt1d_`Ce0j69KI#9p=(W>a&$L#C&to_r#btO|N@;W4 -zqsYWf(pen4&YqasQ=*$JB0ll))J6T;9JWI5%S{4rJZp5^A#|pB+w4Qvx4XZ~$xh=* -zW9dq}DYUCP<a6L_bA|To -z|L?s-!J+%E_YSVki&>F7SOxf6D^AU|wSCi;v+MkcO0g2DsAv@)GZ|SMS5`-C1_DtXsc)g%L}0v<&y(4|+de -zU%EdnaO(k)u1T^F?WN{R-{6|zGiBDC-$wlNc*S!B6pqI1KKiRPbJwvoBAYBUHhWH5 -zW7;C9e^+n)#!{1alZAWE*E>bAXMS0hdu6ijd+Uy#-HmrX<*?~Rx<8oeby#i9AN!Ex -zqkLHc`&yoCYkzVfs9WXAp(D3y+@_UWn`vf|xpuC)NO7Z^Zjus<$#wt7HQKlK{90iq -z&7kR?+h(|EI>V2}ZhpJvKiyXd*>-2c)}0;`^I>I`@XHFRQuPOJXVS5 -zSUEPcj$PXn*eCzteO~b3?}IMKjhWBb7o4jup>lu1MLj48*ZmNc!o+4hRRxnPm7 -zxzF95mkwT2sTMta^T)=3@XVLB{ymREpBUdi9o)nGweOs+ypZz5eWw$@-(s*n`KDq0 -zO!g$(2&Hq9XAcT9Z0x=ksk_iQB*U^;d6weW4S5%j@6?=e_k&x&;V!8Ng{||VudZj6 -zF4S^lF{pRAI^Vs|RH5q}fSuPvRYc0(qMaYwF@ -zXh%%ze7ifr@hY=DE>9`4-_^A$Q@$W+VPWLrvk%HoKk%_M7Mpp%#GdC#=hWt72G0bK -z95UJXdX=ka-wKP>e~Ua^><;M7Wo&3>pZ93RqOi34i~+8f>p3?RwzckR{Fn2aVd1`- -z88@q1Idt96uF2o#!saM?^w#W$`%F@_l=T#T3x958EU}b6Q61jTqA=|Vv%pg+=L)U2 -zk2O!28TM)Kxb9Jq;~`?txo4xP(v#BJg1J8uxb?4GXFD|`UwFxW(HU6*Ml5O&3Q9)-rx2Spvmym)Fcl{bIw=`}S*=APy>du^11rjMsnfSt3uCsA`yQTGn -zb>-jr#@F}E&|3Aw-?FDR@8_M>D|>59qXeqjEv;kDM7r-X<15o`H#^UF&Ti|}-07k+ -zR=!uI1MW?a-@8)q=%4j{y#E=r>n|;R7@n|E{>DDdX$c>TD;+kx;S&EZQ7^%E+Ny{< -z%%O3EL|~Ks*%C$hc`vm%E|zfi&0O|6j{BCeYS7J_YNAeB4J(8@-c8+-%6;$J{Z|3& -zP4#~{xqaK4z0cO{(ve`v)~Y14#M_t8^sZ(#&*%0mIDS@sgX{bZPTfr>8XVZ$T>rMo -zEtK!hlFvQ&SmiR4%v@tG*S&l>OM2^*+2{X}`EzXc#5u1{O-|RIqm@0wVOzmGqixWU!!?%}ml9y25=S5u`=Px9LRZ^s|b -zZ~65#Y8Sghk{gBl*R(Zr`^&QzG}m9N&}=P!Y%Apa-RvMo#F7oS -zgauZvym0u*k5x?%_U`!REjs_w6S2durymcQ($Tf+$F=DDxlTu1szVuH`PB#9s#?^V -z=w;QE1v$m~FJ8@CK -zC -z`eKoDw@T>_->N9HhIP;St}_RmvFoYTJLPu%H16OZmns64;$xJreMH#oJA_xRMyob9`jW1=$0x8G6k@x#hC2Ngq!1q?}!FaD^e -zNfa?md3jdLbiT+`*Me;g`hE*F0zXuHrB)w0sBqQfp18o~mro;u@7wsV`k&}}QsVvN -z4;M9FuX0B^9KlR#w$&Np+w%=!KHT`CLcfz@?z2U3wjg<#3 -zCj7j8$RS69>($=UyXi+OGtC&pp9h?asn&g9vVK?Sb+t)vuNUUdp4xI$*rVyidtHIz -z<9v-Fcft<(7d&!VwD8ZGC*S|iYglno`1h9cCeeMN_16x|&2l`?qnRc|{5 -zHtYZA=9c>!@Na69#m;%3pLDLzPK!4UVtshML2G|p!MiU1O((zYau+Us^QznN!m4w9 -znX&8Z%<5k~j;&qtEH<{TvY^UpucyRH>0i#(Ts7spICG0!`7TVcowFo(`PG)L?A}U^ -zF9uw}GMn$kOFXNO&as)LqaN4Rxo3-NlY`NNP~p!-M{Cj^x0ZB1FIe;XDAObTTT%br -zWc;Gvt6LVb9BkU?^shj>T1Cn$&Ew-Ii-eDJT9&X+_XHeV$G8rX9MpH+WV?Xm;bu6zzn5o`OYNv-TPuH{W?^S^bSI8%%i|*@W^M -z_!mFAnxuf%El`nlBk#SerZiu)FB2yEl5tg-0b`uc)R -zzIk!8TjiUnvdU}oOFo>?@eVIGs4&S>-}bTjwR>)kD7+21sgw6&Tgom#(pG5^}&Hx!pZvjaf}}89M_(e3QYaDHYc^GY4=UW -zFptynofG#+yE89UTJS44um4|2dw}wZpROm1LKaJz^6vIAp26~6#dOsiM%`SNgF0ue -z&&sg;t4Ym|Dr}RLJzvqe;7!r?A4<+UryOA|EAO1_;WOb{k`9l{>J*R9c4k73^&Br4 -zCz)Om2+>e^A0UzU$Ka<*~{JG=HdhcwpS{K~3vEL-*c_DK&@YcBGqmVFezKShjr -z{{j!mNbQ`bE}va&pXIeR?cA08c|qLsIRCqAy5c7a*#1?IN|f_B#q;Xw@#B)I@k*bV -z?b&Oc*Lb{TS#&4P)XeAY>BE{#M$^APJsVvgcW2G%u$wF%SC-CxrkOS6ntYI%kH-{s -z#Ru%tAKxf!ENUM9?QYFt-=3^j>d{o$DII#HOz}|6^&N`K7W%f> -zG;C7xFRfoVD@?re_n+`+hK~;}?VFPNIoOE1P2%%sv;TpABfsXHSNK`BZSLGj8>j43 -z)oqn!3aftjE%D)kGi^~jG>v{r_Oh9ubC~nwvxyN)*Tab+GgcaGJ8RfCkC{)ZEAeYg -zXV6VK7PAjQs`n~)F1lHNBHw%x>%De|m_z37=c1SDt?7GlzrMRz#DeQl#?;*jH*1w& -zzfY8|bz5Wl%WZu@hLle2sv}2AE##}#ZBcEB+@Uz@&58~gtF;$T1l~04*pzrrW@&Qt -zF21zqy;G{a4`PnHBi`z~W}h7T&7)*5RiU -z=cZlw@F!+ku67h>jB{K4bvx((RXjR()1p29_Z|7Aa;@^_5kXG9 -zPn{=w7dGF$F=g+^@_)T1x_@gw&Cl%qcH-Ng-O{!TxC72^V>|otzT_#%Kl75$WchBc -zWGswMF*ud>@GPUw{IAzdRxM(AwWMXX(v}8qGYN(gyQnjX784$y{XM}g`N8-4tt;#A -zY+`d;((hX}n-4-puFVYM|JOH4InGBUn9ol?{&*7 -zrjoz@R`-rl&AJ+UmDgt%zQ4HtxTI5#MUeGF=6Fu8^Z(SgCP%vMIIgoWvT2X6oygva -zB6qH>FYA!kd-=H1=JUzf$zOKdR(tqYaj!SieN%R&Q(qoxspg6`o&LOWg^QHXKBJT3 -z(Tb}6FE4lVJ9kXUUG>URzJqy2hMASuzPq2aUVO}26J9^xb&LJ3BX(u0oPPXONm_gH -zK;RosE2)avLdkM%BHpSddwyRQ@ey<0FIur@+K$;S`Ud=hPxU#&icPA%#4NC57pt2f -zS|9VJv3K($d$!7>7s!7 -z>}v-iG`~4smA=C0`I&w3&Tc)Q|Isq%Orz5$8eG^DRB?gr@VZSYnYTUb-!9;~^r4VR -z^J9gW!Go}t3{!o))ny%L*TbjO_9p)4y*K-Z!0D5MwR6+Av##Cu -zF(9-yt#8*+kvk?fBFhD9`!=T-y*{(MKah8-x;C4qgvuFpi!K*lww{I7Jnt6OY)YEM -z)07-1VF`z?pj`d23*+r*QlILqaOt1Yrhu7du -zz0Ol{2Em_3xzmqSOJ+VT;w#l>?5uJKZ9CjI*K5Ikmfj^(z6i7D`D&h5;CY%aS|s*h -z;T1`hJ9-CK+U2@@vpQfdb42uGln3h{t=|Hcksd9dN{pn$viPP)c%3`fBVZ$X{C=CwLz9IQN>!YC%2jT>h!64?UQ%9r -zmGR+~D;s}3=MHb0YS3Dn(ssK0M2?y+$KnndKHY*sZH(%k;kuYGb>I+Op8+BxY-8oB3R6{#OEm)vU_chXe(&CG;*_l|JfRGR%bWr@7r -z!~E|CTUnD93vrxJn3MdWIBVsPkRmfFk1pnqPS>jYlf?`4fBjFXPJOgLU!nbr#HxKS -zK8tSna_Uup^9ue)6W-tOJ-AqCqwT~${~A>aR&TYL$7!c<)LW^(f%{D%-<}MKM;Wrm -z(mG^~y7~f_FRCqCr#`vroy_fB2$F3`P6GTOi9ftcI;NKc$e1t#^edl^Z3!ac+xhBySY+}x1LJ=vi -zUYzz%Yl|T(8~c}oOC;;pr8As+6Lz9}WpP`$zz>z1hCF=h^tUILHy@0$dt)-RbqUgAr(syDOFHo3)BHMNA5swXbFI5*hv7RA@@yim1pmuTb31=BURR{7UHc=TogB5_$Hv#;2@1 -zwd>%itEqZZL^uwux824vdwT=pnvS^Tr#J1$`X1l5y@oUiJVjcY1U^ZcvxY}Ez99fCGn1m`3uTSO@T -zh?Fy`-*GQaW1Y%JZ(jC#b)Ta#E4G|^DJU0u@2%%F)r+UD<|_ZnDrvaL`LxNZVtOgd -zgx^0;F4=6~n-v$?a!BB{X8gI0At^j9a}HiRz;X3jnn-w5_WNxd3&lR1E#B-_V$`6- -zP&!-ZhIjV)n-i==b<$7dYCL+yb6=^{_=KIse1V&RF-%G7Le^EKHFT!B6_R;*O^>WIRywaa9ED}~` -z61!HD8=xaC&KSv2f4rw@a#mS~pwP6Iy8S0u^R{ap&@S%UpUYdX7x2A$aayg~#$ESS -z3ruFKTh6O>%)1ARKux__!)Smks0Jx{8v>O1vz7mF8X8&X=f -z&k9;}uxyROCy@-vY|~?Tx+mi-gDNJ4$_P%s;@{^{eoocBK=jAazprhS8CbfXBsU6o -zmG_l~DY?rE?AyuP&Slb6FZ#b$)P1t_=ien~R#*JlbuKUA{=^mEd4Iocd*rrWLRCrX -zTm5dyNeO@B_xlv4rEbXo&)wVb?MAwplh6Wr#YC?;e+!yCWI7J%*MH;Pd2ibny-$H# -z#s7VG^t{tEVIFh0tb>>R!H03FIrb4!|JimVvaMvi|0^%MDrRo}?oZj189XDz6d32n -zrZhaM->US}?$5E1e;sosp348%aq3yK+vJDL7kS+4#pbyrmno-n&Un($^sk)Pp=jf4 -z+Zk&)%tcNnbE~Yqm^o{%X>9Us%|tEZwePq7+?KalW!3MuE?Z=zCO*6{|LEx_9$(IH -zmsSppea$>etB_}6M&aYKHkYH%IS)OYXyUkN_Jsks_|}q&XgGNV3uD( -z&pef=Piv>^9{*Z@NbkeO7h5Mg?)BIb#cb@oYLQ~!EvM-Tb9Qlk*(x0y#>}7_94%D* -zTS95+>%DrBOfj1$dPbe~;$7^#L+B0TB72EN%(nNRzWaXq>50WU;>I)GU3ja0R=Qpa -zkDB=Mz2w$2xq5vUF3od^c2u)cF?v?z%6C<&=F1zwuH_})3SzHxWY>!%&0VyRW3G?? -zSsBCC9v^bNo*iI}cych@`pBYL!ZTCf2Tn=3yL|HGNzqSE=-$+;eDmISTHIcH<-<&_ -zLVi;O(nJrsocQy$p{sGBLbp%m_UF6_z0walC+hGQ%gh&HthspMtdsN2FTOK&g-@S! -zLTKO1wI`nL+*hNAx{Py9H=8&sZlVx_F`Y6Z6> -zt;P1QG#QpL#IF#ZEwEo?heFA!?T7p=&l|kE`#JFKIg`-i5@x4dvL0_1S*R-=Fp^J&)FAe|Plw63A9B@FHo|k(FvqTe-v!slCr1FEqMg^EY6v%$rWd%5|?MG~F`^srnvq=;4Ha&vJ72Mcp|5 -zxcPSm8%JCulV|<5|1!^i|F2{}5PeBlvUcvAKf)^)wqAUvsdnh4NqzgA&RSmG+&_#j -zk4lRDH1tunkE?jn&a3ouqhrsFANHEz|N6Za{10yXWgmC(pMT7r|H(gO<=Y_kQ|Ar7?jDVLE=!H0YVq8Dl3!!BE?9Eavc0vD+1c%qo3~WOD@J5# -z+}*ufg?dF9guPuXmCu}5V-8`h7kS*tULMJm*iMBsQsU%W%>73cci_az=UP< -z`rXa%xL0i3c&<%UBN8)a_iJUJYp{*JGLv1eZT^3}2O%{+^58SCCV6Omm%rG5qX -z-x`uCo8CS9f@EJXEp&8S@Edty@A{cxnR}|L3fm -zR9An)?pF4P{@?2l#y^nwAnEC5Z1XR2k>k~?bN)mo?c1{YwY_XzM|18ZzGrPrH|LAG -zIZLMBV&5{y_wmQ)J|CHk(y#3BJYF8ia!FRae9g%a7Qqg+Lwkz#gtfm}nhS3>ZE@)M -zIw42%s6@TdJt2-I{wa(sPSX`WvzMInFxYthjyikBvj0ban3*Q(u-g`DhBv*A+$zFe -z|Kg#>hCc>=NBYzSm?m7Dn|R>1v7^EZCcEB;cV5ZAXKmJFH=Wwmc9ALnMEmAVB{M|W -zS&e>ZtNbxvP_WBs{jAOE6J)k;j90H!S|Mh)I8S|pr1rn;`U91AQ*2i~)D@U6v2>rn -zms6kj80iPCyFM+qF^hY*EVo%l#+2$k@-K~@IfNtj6)Rs;`EyTQAlZ9C>TxHHfW6XU -zZ?8I{z)d@I~mAW?HQZ -z!^!k|hOnz=wr#UJwX~#u*M?FZ#&BlA9bf;S?|L16jyGNZPTliq?_O3^*?#Wvo1;3X -zBHS&Y-7$BDM#72nqLTOL7=4cYIM?z^UXZfnyVT%(JHyy@pRYJ&*uVe(=J<2byRiu; -zvwS|Ov6{@2OjFrAYpQsC+r9~G|Bk-j7aw9RFTPE&gGU9IW%3a0Oiv|`qT+wEt1>$?BX -zMW;$Je)$`gkJ}z*9tqD^Dk$RnCC~AAR{hS9)jH4Ht^a#X*i-Pr=+V@JqGeuk72e@a -zJ7@MY&Oau0U`3;rC7;T}`RCsYmjAM~v642Lrz@)yro3Zov&8bbZaj-OA9+{FHM^}+ -z+H&q;b0a;s_HtK+!s8u@Z=@!7%B5~KPgiVP{PL{jgFpRom)Y^w6s4|J$C+hib%*7AiYB8J>BRHec`&gMIXFWyOlnkQ`H? -z)Bh?T+U&1=k~q`CcV&{Mh)~x(30YauEe6uFn5*3r&eltPwp_YxBlnUMe_3RBAHCDK -z$$ISY!R~!a-<~v?SeDGQ<7S(IE1Sbw7S;bd{9`$H_5R*GO<$>WOQ8C`#P#a@$KUP# -z{&mF*_K?pmPhOq-w28-d{`sbij8wlDoOgx0H46?n&5ilMBm8os?=KeXU(%%&O&@b) -z3N6`p&NXHU{5>%^pnhSQ;%n_i(UDVmQ+`;AVC -zzf3XgU8yMO8uy&RNlYT|xqHq9?i1%+)=zbRl=+vTcJIVh;%$Kvf{p$4COKOx5>)b+ -zggAX(V1DF>`LkZBnms1`#Y>ktaAs_n{^McmYLN%_%pJU2c21E$t~_^-c-UGSm8q)^ -zE%f{PUBOA!W0zM}#*RJ~!(WHXIYctN9$dK*HzULEU!aA@@_!mG@6`Wk*fQj7T>pBZ -zq3Wk}o36##hkZ0OmMrwO_&e>A%i;RKO9hP~vripaXe(0P@4hOTLDB#5EVaeXYj$tS -z-NLv>^m0S=)p=~~%?l1~Prl0hf6mn@^F!nw>-Oyvbv<6?r&Mq;h~-E`<&>ov8UjfV -z-+4AA3#D|dp1-9iWlEUU(GAH(;*4>6reD^G1}xgjG}mL2&f2TCQx?B@_wD1;PcD1n -z_SR1j6g{R%-)?yN9Xh?7ZW!X%>UtFD;J4 -z6-gxr=9lUp;LqMI^r-On{8Z7h-Dc+k^7y3I>;9<^T`0UvXMICu{1(?Dik4p&N|-JeB~0Nu7I@T5qyN+f);P{hcCM~fXOa&(FTc0$ -z*a`y)bHhFQpHhU~4HN99ZP3U)(6e1xE@;>M*;@p-tfzN}A6e9E=U&gPbI@(N%jR_c -zxTUKeEw6j;q^8I^b^ReXN4x!ZogDL%WWs}YFF(apwPSgUkV&ie+?h_BmJ6saon_bh -zUT8dl9^ -z>Bn(kt;PL+vJ!jkUwogJcz505YxTVAM7}>eE|tJwu(7V0!PnM6h?&n`^1q~xLedPz -zhQ5rZB{TXT{${umKF?9pR9bS{6qC6UrpLKnyFO-TPGC!6xSc$eXNhfoB)bUjx)m~e -zd;+}U4%u0mczs&(!oug@=OY3POOH5eK9^`L%9HNo{E?c^qrcXBQD?c8r_x4+7N2@o -zLla>)2Zm4O-1?UbT#vop{Kn_XtTc6>ucbQg<8Cy4c)C_Ws51Fo=%V!2#>wG%v282% -z6zGR&&f-shPjgt&XQuM-)UiXYt>+%>vz7kW -zu2vbUFllPR@nEIzKZVm?)berI2ML|uwT=Jf?D|0QR347y3@`0G#Qu5Cyb_~%yZNWQ -z{u!t8@U8DX*>>)k_Wy2p(vpDhFIi{&Zt6O8W_6p)PqQ<^2lM(kS0p)ROwU-#u=vv_ -zWgpf#Rh>^;ukm01d?;J+pz4dG>4Fb?SDvpak#Z~vGnQ29EeX5)*GMHJtm>OWN+U-Ct?GzpI~YyR;+YT*)adZ{c4Fvez^AJew_gvL`?C^_v&L -zkN&HERf$`Ya(Rbj$hAHZ-jl)W3wLh*bvmsu!||!vi8q_g8|SahtqIB8C-{;jEJO3_ -zW`W9(t{Zvx-X1CrH7yF9rnFcm#_Uwkg}^Y`kAY!wQwu73uLRbYugf`XcTI(NN!F$! -zf1kfbzZ6p5uIxUNR+l0xZhA4`bnBWAX$3qJ`#;|gx_&!i(c1j{sggx=CtaBJq(M$` -zw)!>C{ycfUxGNv@pA@xcPx-Cv{2-5!FSgm?*1WcF4iEk%t5~d^8^JAoKgnOH*RZa^ -z=BL{up=rNTP*dn3fBKWsdqW$109)r128n0O+w$|-<-?&84#om3L+>$C)8#i!tKbHm^<==J-F2)d%vG?=)TI_<2a>|7H8R(KkeA>+XGjB~9hK -zcS3#HonXZP>epyj8+&1sDnetjx$*pgSO -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 -zadNIUi|#G)(@W; -zu5XY@$nShIA@;D5?P4Uk@Ag!|_3Ky1s^5KNujT#MeRD;3 -zlk`9LyHU?Cg>5!ZG-(b!EUx=_zV8e+U3H%AEIz+?G6hb1>Jw)2NXN8aeczl5@^|k9 -z9@}6bv^~;e%G~54t2*JJ2bL=<-qrP3ofP9CvEWhjp6ZnxXJz<4@^3CR5IdsI -z7I>X=;||t~JGGC#y7*n$!*a2LV~nJ2XG(rV5 -zHKE`9!#l%|6$eLhtXt$!{yg12W#5S8a8>hC--z2=uc`cza4wmQsT^e -z_4RUl_8Z&P|CS0CQ_L09JHDy<$gT$_O}86$cHL&quP^`b(SEIX^1kx3LPE>0CE0e# -z^NF#%x~TBOie*vqmh%6uEs-a}WwTW8R!q>yu5aJ(W#6^(;I-|Yx?f73#5K8bzuC{Q -zVTY7|tY47LBxTuW$%%){zPJjB|Gm;4FP*XP*v@-mbyCw8@2cPR=?b6D)Rex9Uv-KP -zuexya2HQiuwdtF!Eaig4%ng35^SycC!~?e)XSS&8QTytHcU;xoY{WA8?!;L3ABu&? -z=LX!joi4k@eZrjWcXFg|njE{~;(No@QUfP!kJ&6XV%|YIk(35s9Z+vjO9Pl%e1Y9k*JS3;jzH0vT!&Sx` -zrt0%DK3N)NcVVlj)9>DtrB^NN&gW$AdJrvhTv4nyVSQh=ot^l%BBe)PSnR4MbG}jB -z8$98g_BYeFkF;ESSvA|NE^jdEPPtpHEEZ||wXv!4*OC*Qo}T-z|5|o}MgH7`dh@!5 -zUa`q}J`Ha#xfU%xvg7Q_H@sJ8EPk}{YJt -z_sL4L;H#*Bg24-<>lnwn~JKWeyKb0APssNAIvyBnbCiCtU)-sxK#jz~@V>G;&WV%-#O>5`7>px_gsCw*qz -z-ag~P8HJr*1xgb?IoQl_DD^(I^&CbuRU2+P31&HNXUD@>@k6rg=1G;|Kd)CY@b`t+V$*jzVC_1U@k0E -z+*2qzt3q~y>~>}$wo0yd>z_E3ICgax@*G&j!|asU*?4Wqtpzm_P7in|J@ijz*l0NG -zm+a4u+buigj@>)H;*w$GH%m$OBlWrUIz=J^%%P@pkN%KfZnAfN>)iO+jXyn-4IbWZ -zFzl6D^Dl)SHA^F~g-H*I2L^$p|acbnyOZZJ7LcRX{Z&F|p3#nbH$ -ztT>ZAjkD=*NxYk-OiFS7(*kei*IiG#E$c5Em~Her -z@UF(w;AD-gP~%hkg%2CCw)KB_@pEm@ilV!(@&%i9h3&U#DaQEKKiU``m^Opsa0a&* -zr}W359aCM8h-|jtUUF7oTU>+N1RbNFQBG`m{n7L41KB6*76kh{E@nURFEsKY&!Vu0 -z@7wqOOJwWWxytvvt>h=4;DvwYeYx%sw6<&#U*67KRo%$W*_)1t&SfvZcFo``*PF(@ -zg52-R6ilXOCsZ-%8=G)_<1>0v=yX_m`-Z(+cE$ZyaLE00ZRZ(=Dn*yoM_m_1Y^bQq -z|KcGYVqaVTYo3yo)x(GPN_xV?j@O@1{@Jh7^*%oQ-(rKpj(m;>YhKJMX5BMg)q>HB -z@$B>h3r5v?1p^iVj)+D!MiwSVhE9bBg$4#?4!%W_D#rd+xurE>8yOyFeEqaOXXUE6 -z!rALr#`UmH5qx!7 -zSpB&78Xr?D<>8ZC=b(R?!zp>ff{}#smwz`1Y~{4!(E9&o;)DlAt2Ipa%t@|%&i%moY?G>8CI80m*(X+a -zi>s~w(R5`_be-t3U9Eebu!dddn^rU7cK`OugIhWloe7lCJ^p3Q!o!m94G(n--kuX+ -zVy$)Wr}pHZM}7+kA5)8~zta5Dt!bwFjop0tt_;PtY=YJoKJ=+iI2-$>sw+`(5C6oT -zGftt&{=D}b#Lqo7p7!XW{D&;1IkP%j?2f88h)+LQezQpESU~(|9kE5-C0_S+vo^Fz -z-z-|TG3xz1DVf(V?s{8){JgG^W#_h6*Mr{)eRE`NJSFJW1s_DS|-Pl_FbrB(CVjbd^KLl9k~30#Or|A| -z{^kYE-o4yJC!%`eeOckmsED -z>QRA5!qGFSial5SA7x2R>yemv=!Eae7FLmxo8mXJQY*7wDqUZiaO!!H<(giB=)maB -zf#F~JL-s1D^=&wyTjRBx>&$A4M|Zkrq-rtjbp4_uF8iiFsx~oT?Y69Uj(e1H8iHyW -zGxPQuobog5Sh45CowSxsY!4g~MT=+hKai3Om0kE{_Z{=eO~%u`%~_8;wJT6~<1Tfy -z@+qH((C_)0)l;>N5<^^idqOLE&BMHGezl4DS2S5)cCJxc`$W!U-+||gSlU%~Ugl=2 -zWGePzw+wDsDSAw_e*J{`EgO4vJP+;rQ0RH+dh*F7uO<4e`9A8s{;IvneBBC1y)7=Q -zS!|_MwDsK=~sPrnVY+2jQE%w>- -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 -zmR?w)Vf10v8;XXu=cP^de&8! -z6^~vxEPs7re&4RfO)6b?vKHL`R#wQzoukHlw|<8irJklqYVVy} -z^Z8e}!iRU>!f~v9C9=zz#5ev7|0T#e?eugfOS{JBMIW}@b_2ctiT-sO(hu*CI~hg#riLFRCmkX`t=3-+DEP*w?%Wj -zTkv{|&+3u|nTtiPIxYz8FA@0s;a-G_Q2q3!?o%7SuQf^1{@SfmyM2Y~r`(-^C5k=E -zUB9OoD4Q*`mbP2+M58G^@yZw3!gUv_bCnkt38o5Z@VSuMV|Zz|yverV~ismGjU%IBk}8b5o!h-;s{Oflz9ZQj9^2lrIWWUebtHe)Ce -zv{9=+yI1Y-^l;5nhhI3B1l;0xdUwd)iQDwoCD}#ia?7PVc291q4wf$4!_{B5TCbRKV8Izb7K5bL<14rCy>No{j&Bkp -z<4;G99n#ioY9enRU-tMO-z0?vvp)QM(6Ie#A$!jrrF!=GGU?FlWBT{*{G4|CT1N9u -z?uFl4Rr8EP6weqe%n~TGQ -z33o`;cb?e5dsA@6vRji29&YtL#-ea;>)n$Q*T2n|+q5LB%e`fBw4yraf0vWzuKsH^ -zczis|KB)KkDeo_5>RJ0wMHuXMaJO7lw##s9Qu3tWfb~mmDjI)T?N%pKr;=-N$YHIf -zMEK;gEy1PAVxgMVlmFh_AG6T*>#Lt3m5&~Mw9#u*_q#uN%G;S8N0)0RT{oI!@VITm -zYxUO6+b?X&-xgGNEu(h&WzAWC+a-y!WXM>a1+$C9@HqJ2IB)`qYR?+n7mwz2ene7X{ -zUU(z>d#+UOrLM^335-e+cuRo*Di4cz_X(z7iIyYKV<OwEyn1?T4txL$vj21sHc)|Bo0gL6Cqn7{IPAPcx^WCkRNw0FE>^1k5)@rQ0 -z!BxLZ`+3RQ|B-BqUvIW#4$qp|_Q20!r`m!oWjjKZ8;=yk_rBiVkbR(Ure{1DA`Db -z?K=YE7F_cUGcOadF+HyE)j(OJXK9(Vw_0N0QzccCdYkC8#ZpuO+e -z^^e3OUxydTt3&GhPk3Cq*}jtDXu`)|?|!g^_`g2xu}VN~?LO9dm9wQZjpKsN)sAb2 -zanE_HXDXYg;G4MkiPzidQYThd-1G>NS9%_M`pRNY58jCiC)T|CbvS9(7S8#s&pMNz -zoJkB_rt5N!Bh-v9d4*~kTT!8-=C{JGeTLlgPCfDC=F|LrX3GB%iF%FF8WS-srmI`d -zBvtw6pX5Gf3~K)ms{N-uzluYuujy_1t5hWFJ2CQd=f|=92;M%xS5i -zilMVAU)nFSu$kg7q&L0pn&6dsl|5I=VmI8`p67nZV$Y?5D51JfZbAjFzqs$+k$o>Q -zeTv(a342ohDc|tBrQw~xa%!@=uT^+(L2yz#)2t=2=TyYjKalx9G4ArjyDFSQv)WXu -zO_IN8MT%Xz7S%Mb#EJEc;(0sa?tMne)h1W&^d$I3UUqWd-*_x>ic!hoi$_& -z?fbn?g?9b3T7GlB%&O$}=T&^*&g&O>{7Ge|n5S?y7xTIQ506s;})k5*g|qc{M=m?sH3DlY1h_4j67h<)ifi?vQ|?PZNO+n1QGsjt?Xqk6)3>r+PkElM2kGsL3${dNAo -z-hArI+Fccl6=A3MwkIQTR3I7_Lsu-tT;;|(wHajrLF7N#--QOMT3)GZr|GS|1swj*)K~r)z1mBzn~b#`96EEpoXRw2H)f@9BaNzY1QLdF)?!2^Je)JE0NS~Di1iL@7*bi{G`vZ -zu)0@u3hP^km;L{$iyZc~e4nBxdPUb{EDf;LB2XR3vSGGSY&@St|x!sk}EoZ~fuPE4FHJ~vZm -z#<}TT627Z01|6}wQ^UPe;r=bwbBn|-trdT+5vZblKfuA^9KY**4k5muYR}>v{IYi4 -zx7jCzTDuF1digI5l!XqN|J|Du_n~y%sfwoeF=AhO -z4ZI|mTfD2@F1zY7Go#VJ2i1pTC#7G5O{<0(-Xkuz&VPfKEU}9u#Xl!I@U}UgjWDsEh -zp$#ljJPZcRhu9wmm279`T#)!|n)IE8u^ZcesChUac^2(bVp;fTqmo)|K!DWr>d5KG -zuKOQ*`;3E8eUa3!D@?+=VILeOPTFi6lTaV5U&bY7amyv^IE(mFUDgmS+jHzPahX!i -z7jl0uaOnN~XXfVHdwbORyuR5;O-bXrbu>X@&%uiflfH@`XjkgrD%a~PeCOJo=z6co -z+}w)`U%D`>toxUGT3*WSNJh_O=f%B8BmC0&&nCW=lgbWridc1BvG;?jQL&-c$C%T; -z+$Ueu?^8@#EiHNaap{vV0XDZ^pX1!;W#3nyedzJ^`zIE}1>5l^&+vW-W -z+NAfJ;Z=ab!u`)LDX)&7BK5Ig4X;V?-%Z!|7>h2N@q_Wf{Y$otLL2iLFSK=s3DqoJ -zI#1%ukF8fvs4KJNw5l9(IK}ZxHS5t|r?f}XItTW!IXHa$ZsfUaOJnT(=dV|6oxUU@ -zQQ}L}^M&Cudw1l{oAjz)&S;10is}gy?`Jpu`zZ6ixq8A?%eQCLKfir=PqBu-BY%o@ -zu->U~-zn=WH103Gl+APMI{%dQ|Jy{iSIs$e;JMtBVB2$hUxlk&U3{R2fUYU_!W+NbPa?<4a{G|EpJ7O#9zsk-t -z%73)=yW3%hcT-<#oNr^c(Rg?DXUBrQY69zbzfIX^a_96SJE@u1KgaqRZ(TS2+p~rl -z*G~QsKX5`J+U)f&DaBy*pD~y2@v>^34qG4Zmc7b#?b*3Z{-yF;cW!!fEOf8i@om>r -zqbK?N*#Fmi!c+Tox0E91-n?gL_O31B+Lf8d>i2SNGBudL{h5sRln;8myQ-Cbvg}X2 -zKlz5_u47$xDPEs+1X-ilm=;JD#$Gs^F`Ywjqhx8!#=Q)tj4vAZ_sSNo7>LUEESReJaF3$wkDd(PRBS-;<(diUKe#w<=%iBDp)P-Y}O+1=Kg0! -zrTHp{TawD#muuT}aqx&A+4fWUyP4WD{yW<;9%cQno$$zW+fCyKn!2ui&*khiCiDHh -z`sZ!d!S8xuwrNJCdg4z5n>K_i{|ycG`w_%CH}Lz^caIc8Me29HI9j-q=~;o=uCz(Z -zv@SgmxNpG5(h&Wx>}+myZ-hg`>?WD-Yi8WJu)Cez|0SrN1 -zrecNbKFQx(_Eb3W!7j&V(+VCoFKSpVz2iQ|tnY`*W7~zUH}I|D~Q&b4qm0d~ShN>s)UAUn0Mqzsb&}_Wy%zh9?SM&Sm@d -zS1)2h?H`4g9`S-=$ -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 -z=BpzW>K>!Oun80x))!X~#(IdtHK -zu0c(4*_^Je%;xd?bsci1iEdasW%b%G7s8_EWTtMKYIHd655q=>9Tf>j`Iq$W?3`I* -zoxb5f%yz!k|Hg;)o?AvgUc8wEXxWzs+H*LzDJ`_uF%Io+@3oS*-XdqU>V(0ay6Z>rMYiU(wc>OL|p -z=H4c0QH|3p94Z1E3tU+_ghelOuQ>20pfS#wbrQGe3EveApBFIgYT}y1Ec$|Xg~N~f -z`AjGOiYQDvzDZ^7@iU(u6f-PqyL6;0F8f2pvs<1_=}Rx3*7O!$R%C5yBC&i6m+*gW -zIn_{C1J&-PoPNd`8~9e+G(KB&{T|=kr&E*895Q>6B=K~S%kM)m6T3G#=yfel)PDT= -zdDN_bN8UN#6Z% -zFCto5pfc;&b8Fw*Hk)LA8DD<&_#$(ab=SuEYZ)dwUsTwdBY3%6X#tW30t6f;ZR2FVpXrTbEgJ4ELPdN=EA%MVU4UoOF|@0p7Q#^#CLJl -zqN10w-ic>8>kaHey*~hL~z5Q4b5|!=7n~A<^N-O_Tqx%E^UcFCB25Z -z4VChz4=mYL-q3L^wX;>?UD&EQ3IBw@6sRhtP31ddRQz=}=!SRIBIzIB4$tSAs4CH< -z_4UE@iCY_0TGpTHe7t?i&9z>QDGS$lntqGhm4De}y6~r&-}lznG9Fbc%)fY0Yu+&) -z2JXnIjrZ?r$OY}%F8zC2qQ!o#hktwwf_?XQ9ckKBS}C&n=9ZP0o8}++all_~f4~2{ -z+C63;&NrWm4&S7FjPan+6o;FB{`VZWJnwLQ7N2eHXzPE->u9vn#Fm{dS;uty`F?mT -zpYn9I@TJ$679MYS6~AriTGjeLCf(|0{F@f*_)dOs-M}TQ@Fw$r+w~Ug|IXdJr~kqI -z;nVd8-sioOVES+N%b)!ZQ@XzJhw3<~J>MDr^SDUgv)q_l&+upZqtEyDzn^w{{qy_z -z&wjkT`0;^h_`iRhMh9-!**iP2t-Bu{IRELz_wnc7cN=JDE(vE+Dm436GBT?wiT}@2_vOuK02J)N2t;k;@JKH*tKQ -zp1vty&14nxjlWkO-r!foIH6a)x%5)V1g6(hOrLI8VEorCc80d5(OxU|%2L0^^&zvw -ztc89r{JwL}QB&TYGt26B3;xr(eemIwwBqooTJ`1j`jM)4MZT0&&x}d*JvdY6Qsa$v -z6GYpObqUv<`&@hO@iC_pm%dmAezA-+Je_Z+{{LSA#x!q3v-?NKv-X~#uhd%SI -zoo`K7pSZvAbfMpcOP^;nh5gD4z9W%R^pjU>+iM|nuS5NYKBwKdM#{i-}LNt -zs*WoYd+6gAhXN;j-xNFdx2#e2gS5|o*RJp_*WPkS@+g=3%>zF}9^U!9q(}ac=fdyV -z2J0m&1RnhB*I>x~ronXbdVQChz<$+^POZLUB!T3I+JC-Iz_bHQ?+z@7Tijy?X`$4U&$MI%zc@|4yj47Mk8$T-?)Fwm?I>me|Hmo}lBca>Zk*TY5_-A%`wO4T^6Cfm -zWftA5|M){ug30jyY}YHZ-1#rOnA^WhxaeuTz^p+Z)!ZN?B3<>#6M@P -zFAATSkTh-e8RkW2e)FH7^1d;R{noiPd-nfP`}O>F)3^K!uPZW=u138#le>Pma7Wg^ -z+^g#!{Z$fLJk!RtW~2K1g)9?u3$Ck~Se9;Zm~&Aj?1jjQLnVh+L`OXS$gOom{$#Pu -zgCk8dgWs#wKiu4NK;iy{70O+g-?sdm(7_utOSka(wFPe&)D1MnobK@E`Is=2%Unt{ -zJX~A;@BhJq>3Y&n4#nozWL7_QYqbtGTsW~{e_g}1#H;o^?}RL5I1m0|`6xGe+r!t5 -z)qbieoOf1FZu@&CrDDtB*Xzyi<)5$L8Mx)m`qc^d_vPzOS(;y;{!`+U^YXMmX=(T0 -zEwv9jBQ&?QPB@!w`ka6r^A^^6OBG~Yy|zttQ>GB(r^riNqGXKP7d205{oP^l>!{H2 -zIqjb}`^m@raoKvnYf)FL(+%#<4bly7!fiJG4_R>}=)v*+=x*;>^Bbf6jLt7Ki#oCJ -z-#;_g_Lk2%-HnMVHG98Ean`^8D#=rRGj9LycN?<4RY^KqNH5@?np*3(zP&qd-L7A) -zUv_D1alWu7_3AR68F4y#>=)nNzaI5(UqN2O_w6@kecS4C`qh5hfPeNgFW>!?&!#ff -zbBX??=RYE{w(MW5Q*N-XJJ0IO_BV=hUShMJh|BEYJQVZBD#j<&X?D`RgFPV^f7E;4 -zdo^j1zDv%-jbG -ze%S+!MpJ$-zjrx1`R93CTcZPFI-UL3Ba6UD|O^if?*c&OczyE|`6nQc|mrAb!e0a=+GvyD04 -zTeepg-7&8J;Ku&t_qls+?zs+38(HM%OAFfMcnB6w4)Ahj(`=WTm6P=UgoanEZ_z^b -zZQ7=lJJPm%=rrvV<`)%;{q8l@^+RcEvuU-3$PX^oi?`nVJaYGb%E4J5ew?x2BwU>P -zu~k>?E?4%~Gp+6sr?P#o^nST@;Y5yaOijO6(b`F~EjcFW*0)>8Wlt7*E^#te@cHYC -zWtB4&&IxnwdLMq$Dt_x>iMGYc5t|R>ZF=2@QuPT*t^v;}}JlBuSefuVSV+Lo3MX~DADJO5vSu=BeLPB4M>Pn%vcB*Z>={KWH -zdju6@Odj6)**S5$%Pxjb(-m_V_3DLIOqnn2%)r6IAmS3@GOHtbqJ@9*34WG@1C5Q1 -zObv`&i~OJB2I -zC0jT8%cLW%V$H0kyty|*!uw20znl_bGR)ze^yU?3+?G8d?~+a?2zh@`75Kb?byo!^ -zPiA(Y%1gVxboHCX$Gp>0vYn>qt$KReeRuxE6^mnot+(qn{!*;<-zMk(>rhY{1u4mC}8_E`L4vnoHNt3Wo}*ZSGvP;(bL|tQTW)3iuWGf -z_l%o;rt>VEzt?N|m+*7v%cZMV2z*U8k}!LbB$DxFZrM41r~Mq=(TD4OTRo*SGW8P1b5}o+ZDsdY5(IzZJVO`y7p}#aHhTtIH2!Ue!Lc`=E03 -zd%>PXV)4$tKCCzt8+boa_y6tT;T={n~LoJFdlB3iD0Qc2s;7@u)w~ -zb*g&mg&j8pdAyFj-1k}hv=pnb=*jlp2Wq!dqtlsclNXC -zQvwv9znFZ=HPg;$aUaw4S6kRtCWh~exMr}sL?CYG$}agYR;lJXjC}U1?QXAedhZkJ -zT(vfF$FUb;?Hvznvt&MNhG+hg6`!ZjvCoK;vHs%Q%b}7reXXo@EHOKeSv7oFc>3ps -z*plQGdcQqp7ro$p@q1N~U?#^iCsxtB3M?TLT0hyn(>(FCH~09wzLHW6g@gXiyDQEp -zKkN7s{?1@|_WKTlQ!)oLog^9+dY;@@?~&^3=z-tsTZEx>asoOoc_s-;9JjkJ$=yy=dH$vaBcFPC|3G -zpa}oRTN_?&|Jda9sb-?LHqYle=C~S8Lz(eOfws;nqpp=4vp$&RFxxV?(uLz1~CZ -zRa%SZ`R*%X*s_gFVeR=TM$4_&ueLnE($Mndz<#}dmJeP`tUvo`i)72Z9*xlH^E-|o -z{d3oF-y<%C$xHLznojj=F!*1v^s~;~tsE{B{NGREyR*bG#f+!#;hN11kM6EXPnqP# -zJL6gMdEP=5^FUvlLbK+3Xa8;ZJ>lv~i%&1i>H}Bqh~nNK^XQT2?5@C%l1bb29?gth -z5|r5Fsej4;@LR1}3l9h+|E@an)#m))?BF>oc`nJ`PVfx*5u`fHyvJtZk3xZeySo;0 -zGn7vXs`z%1S!yw6lbj`Qzr*x^{%u#wHr -zZU67-3)iY7_sr&yUG%?e_wMxn8EpRi@q8a{YwMpjIy9$Z%bXn{R|9oqF8t;#-@-n9 -zedCFgKz{Q=@7|-~JpcFSa<1=G|GaX;>MiS58us~I&v+yxS3hf+p0DE35A$52F2BB! -z*pa}!j-$WPQElFly$4gHU1k4$=cg0>Gdk9nm;Ur(s{Z}(0pF2%-|w8M -z_;gtHz&W3n58K=IbzAS)$t7uZ+TxOy?gh)mo1{gPFgoNR`yzU -zIGBd?{}vClt!2&&RA8TXX>0Sg>X6IAQxDIY7wl^F^MpC)25H;aqxoMvP8Zx><=lUs -zLFuOUw0RrspDcdC)1mr)`xlqs)eDz!rq)+WWkk=j+*_r!F6bcVy~fpdAMP>W6zOw0 -zy1Yf|*{K`(9r`knCyY;jZj-Sr*l)DZBeO%1+7DWRI*(B#9I-b8|p1^ -z#ZGij566Pp!spITtp6u+BHvSUhb71Uvy$uHn5}uw@~+Q~iR-;wz%7{`cbA1{7rH$P -zvN9>Cw>N8VPvG~<@yqp{%9-Qm{b|p$h?=ZPO?fqy$@ynjIu}O&XVBgI>4?g?MROJ= -z-g&XJ_g=w8^TvPbyR)YiimJ^leE)!X$)=|{AOEqMcne%JumAMSIU=)t2Z9bKQDj%GG=J+A5cY;$xa)Aoes;5j@yy5!j}=Gf2kDlA#ibbv$6 -z@NGwZ-hOI37WAZti%sKc??hzU(&dn>5jZ>(c9{hEM9^jk+%;O>b`hv-;})V@2yX -z-I?eX=v&_Z%KnQ>{zC7W9*)fKbul|elo)g{IR_Rc@Z{GWkx53|Pc1E(F -zzWuDAFJ+df?Lj5+oY*E&O)h)S5+C$Te};to1<~i^Humwq;n;ZbVy^7zSbH=SI2I?Z>wZ>gSiyx#2E7&F}%v-iu$~bPfrph6O@cxk6kuiC^2>F4GwPq -z>xy@6U$n;_4cI*G#@hD7X~Je7&sqJo=9HdkyZXw;`n*+9JH-M&9ypfj$iQw^FMZ?8 -zu8T1VlPe8^|Hp1tp5giOt7k&7Yl86%fel<%_qDkLrHVGM+bheQ2v>0uXcwW_%Z+4491f}k6H2_iHf{x+<)x&?U`Se#jQB-VXtHR4(ki~t!+0R -zOm#{PFw^B%XL(&O^=Rjbe-4Fr4#rGhKXKVDmwj%*cNbrh%KR61_+Px^)E^O2xA?@C -z?>**ujp5Dd>2?bR!i8mjA7$5AXL&!-fBiy(+a-qtXZmNJRw)skT+qYEw}ko1x&!-) -zH9pU>`J=3}KJf3`mbq)AnA-I=%(sY9o@2wa-m+!|OHas@35v(pZnm$F<=f|Ev}iN8 -z$IM^z>oN~Uulmoq^y0M%#l1I8kI3(B+K~Mq_vf?p%{zZ5&I!uRP3aD~uEW5Zrv6C8 -zM61Je!yh?&7NfPM>t$_9c$u{rpN3mq-_xhRzdY-dS;LKMFN@xuHr+CfCD*DbeAn6~ -zex?dCEHUou{;lj;axQ2>L-1Lqfcp5C?f;&)++aVo`fJsKQo}FqN-^FF|MPiSpRBFT -z-jcqmCfm*EkJ9fv-v{m&*G4ZsBee34RQakT$?a**cV@Nld28I3>T8u)w)Wv-cgC~V -zJ|rC5Wa?O{aC&af?cl0-Z==r6P4ziuo?MS?*?)g>%i*xTr1W=1m7iQqX5J&qqbZH` -zA!-bBra#+mEyms0u58=>!o0aY_o_?Q{9DD2p>J=_-*j8*ipgHCWXA6KT5Ga9jVI1! -z`?&vz<&@Q}6+b4(Pg9xeJK@W_aNaD3OHU8%l(o&+Ytx`EKH22C2-}8_?z`l~#b0Pj -z6l6;a{SSCI<>P@V6P+YV&;9(W^|gzQd-omJM>6$ElXpxh;xk?F>W$**pLd#*o!X`@ -zG2UpT{(Gm<@zA$dzPDMrc32+2xVAcT)8j*y={aB0iaKLV)A)i^jf&SeIqa=YI>)-( -zE-ilALcW_Y9v(bQk$Nt-t*}A=+2amOr5K -z-B;1`t!Wki-pw)e&Um1^_{aw4g$W5$9+V|&hwk3L@ypbJ*~g#d8st85e(F=PB{W|? -zYMSAetGyagVqb4+-MO}9E`zMd6cvge{weN*J!&9{tKo|u2``Gjh>ebatin#Y;mbBilFkE@-d -z)p>JQh}J1Pp5ynwM86L;xe>tf$^Jry`1xcX!5H0n-hZX*u8FzeS6y9SAieAg=36x;(G>*MEot4^>emD?w@CBfm)&D-l{KZq}Wu|9IXYvG56 -z#mnnB4=Twt-1j@yGfyp3FMZvHXV$8s0sDm-7ReXuZ>`YWR4y?&_}Sb1u3NpL8&%rO -z54_B;5%6?&fS?G-Oi+Yb4rzC3RYoy!c9QoZZGkrZ*yIJ1B -z&>(G|?RQ`A2R=)V>3^TKsy2A;`Od4WzsI^;Z=9*RzDRtLf4R+rc@OH=AAhm^&W)dK -z_Sw-TCv^7vuWjBJ$TV?}=KY9;%5SITuQGASkE%%v|H8lb+Ch^7F5zcb>__pGmT9P#5Iav{w>m<`E~EF4WDB!|JwXH -zZTXa|lja??EL$$J@Tgh&>F1UkP8!;$&(DxPvnnFiX}_WOovD*O>)G?qM6VMvoZD>q -z;>^CBGbxh36Aby2b)o_k!i++%t=jut^M~7}g6@>UMYUozKlv7ApLZ9VAs4yHK4POX -zH}93&7yI(JTK2kdrdF@eiEf;i;8y$V#)E}x-nv!3&|GG>eEW>)eUsj8e^~7&^!Cx5 -zIa@ybYT3>iCoORL`Sou~tDYRI&kb2ETJ~$hg)>{yQ#kLvP4D^X`kzC -zEWXAqx%){aW}hivUXG~Ec>hWZQk|w -zlU>TW1^gHvpG!Nzxrg}^ua^577MsHhtIn|r3LiMO{C&#&RQB(RVi#ZA9#IO3HZR>A -zY@@R6L3tzSPcwooPbPIcarb{79=9=@(ti6(=DgPW}nYX4vm6HYpE -ze&XS-QhmvYC}vT?r0M=Wd$y@gY~1GjsNvJa`WVfeoIBS8H#TH-{`K{{xwl^YVT@$q -zJW2Um4~4bkGldq-jjeyrXIG-jw(i&LW-rD7u^uxKEjQ`CK5o*&{kCarH|HOC%X$P;&4pV)okuP$9Ip}b1vvidYe*x -z&Sc>OmFoKXFSA}vcVkbIW7!uf!_-!|=<$@~Ah%R^lT*BMqW_*q9ChCM>%pat+xOP~ -zQvBkc_hd%~W8B2Yfk#>2_dHIHDHJ`>#29HdS4rj&uYA(7sRH^Pxh{S!H8wXlrskWh -zkK~ZxyMDW~&tt{f+3_yl*Ug$Wuk6#q7N%FXO}8a}%Dj0}t-dkfUG$Opwp^XIT>Ipf -zZk2l)-Y?`E)cYCYWJ*>_MqmrqX4T -z9rulrUoCbxCL!6eKyX7uz0s;5v-`F0&4teFXlqG~Sa~Q~@@>G;f`RKcdHOwCzhcMFyIq0x*B2%wdLD8;=JS2QBimK{DyJStmUk9*m9G29@Y&}>%L9|E -z+E$!1%x5IUYdZ=h+Hy@hWIgf!zdiChuGl|6y{P1tP_{IaKG#O3(%Dy8iVIRU?v*SyPdpMP^3eqMi3oA`F;bD>?6%J(PyJguf7q0H7dy;6ni -ze&QQ;#(xP%wE7bkfB)ki*s#N*FxNS3hy3HPsSCV6dB5;5V+i5j^gu=H_v2EZC_izt -zt}`Ao%Yx)3?={}ve4SBbs#4R8jXmeX>pvYWuVDx>lVWuJu`2qC|J9!*tUG0D-|)lvoh_1y~XS`5fTy}mqa9w@o^tkW7~G> -z*NplN2@hu{JX|r?)%4_ggQxorbxwUP{86;+I~R9-NP*SG*oRX?{W<15bXs!$?fbk> -zENRzc?ioH6PUSe--V!wDuyFmCe@;)D|5DQxz6RZ)N*%`n-;isC0O1_h6~^1&2pht8e=$+_H6h!t9bBFPkL&omc9` -zE%VDEH)M7&EOOx&m{8jin~@sJQJ!OMqy5YN_>Hg8x6Z9dxjsozXy@BGwJ`;yg<)@Q -z#AiJJd+7CE^V}N;>#dEp-@hAn^ZwQr+4i+77TbHWJ1YoyI3x%JUQAHpKh~6~^yC+# -zvO<7@fB;KVi-Upz2MbfPgTf6#4i2V92Zas}CJvUSP6dciO&Ir8ZDF4LNytMfmclWurSHJ(J3O&sD$`oG4 -z{^N}1LU)%d+zeMPH&!_^>^jWor$2*De8I2!vAgQ^%lB-xKad#I_UivPzJxD_L_8vkv!C@Y;b!8|Pq{2{ -z`O{+VU#;wS&pEt_f2JAy!$6p=_4y$|{t(V`xtDIU&$aFr3euisFfZ13_Qii&J;hI3 -z=;wN^pQrnbY2k^!EqzkgcDCKMUci34-uc@JmKceT`&PyTgd}!{&gxWJRj;tXi@Baj -zpx8?5IP%i&`RqV2Mt`?zJx3(RulJL@CN>{dtI$WO0q?OVk$$ig# -zB3quLVqjvB)SM5=e$!Huc{8>zaCqYo?9!Be?uNtx?lWQuY#(}}Bi3oXtu9Uv%A0uZ -z;dblh8%@dm)%n~y*~0s7Gc8@?a#u_vU2t~&PTdl@mJ4Z$QiU=L*R!7es&)I&ue=vC -z_>auC`xk9`qkN~$Ba_MdxcMY3*DPI#p5?wGfg -zVL~?VnLG7oIitcGHQ#V7lwbT`n7Lo0>EH=p-3SL27uV*L27d0J|0?RG>aWgL>f_D{ -z_%3}@l*3Kr*>A2kE0cT`PjSX;UXzV?I&t+LI~JPDD7pVk`CK7U!)5J!zr1>I7UwzX`bRBu?v{Lt)CgbqavE3O -zZ@rqg%Y|R`XMPlv5 -zvuV@9;=171QvHV9;>Sc}O_+C-s-0&@Q#6?WmRT%d+p%T4cE4;5{gABqbrqK$cdOdf -zjj0a~wDE-DbkVy(IzD$YD?IEsJ=DBfCVX1a -zT>koz;E%#TBWB!L9Cb0-QAOBb-@CmV%*AXNtwTkgR88`3m~#C`@@t>s)n_%3{VY^l7mqCVtf7gMp1{JD-#dY%2T+(z( -zFKw8d5p5u}bgjhk`-N8({#DOiwNuT%?U=JiM{CsLeF|a~{(6&+TbG)cwR5-#>oM0& -zTwiv`TqkCi`Iat=4Q@q8qzc%?_=@W}w{sla!XfcG_KJ<5vf7U=H4|5D6i-!?{G)D^ -z%>H1?zs89(g<@}}9SOX&Bl<#Ixk60Q$L13iTiBLQe?Qyh$z;J3Yxv!NIjuB~={wrW -zdvJO8eVy36sEYx=8m8E)98bMlThN}AI?+Jlz}17R{|K!rEIkp>`Fg8GMMlf^m+#U) -zsnzE^=8=5onBrl&_|L!CV+Rzv0@=%!-`b!3ZvB=C^51g)SO)%_b9zYFVY^|ylipXV1Sc?Op)`CFW=V^q(~ -z^sK#Pa{sF}@62BYFv^!6UnZo!)9&n{vT1XU{L<-r7Ze<@tE5FhxG-|!$%Zfa9Dfex -zC#ST%>OH=YM`7-DX`S~uyt#|=3*=2EH1C_r@`&$C@0Rd3jrsX6=jC6EoKVJhf=_z^ -zA7_!`*Y8J@rk<`ZUC3wQ-1M4D!v;c@sQ}ldhMonVJ&xZU3c8Zq^nq^f<$I*cWB4TtF(j`!@^O}|20UWB$x-`%yKF~&7x -zd)J37QODXa!K5`xbHZH%)^^ngcSrJ9vl!Gb2$O14LvkNHVG?3~BI -zux;y=WA%SylBP>uny)Q6-(=po*e~~`OnkPnUpb$?+-dgA-YK^#7tekXs{1F@C-nR= -zWiEqbZV^7rG6$4IJ+5vwYdiQYP~nzc)8b`w%E|?qDuT>sR{Y&48Mo;wmx5|$zSJhIF$r#kDpOe?|yI7%f4@ES7g_!h}SLNwfInQ39DIZ -z;o_R0Yl59F5x+EE7ft5aDl|LrUEiLps5@s4hwO}$TfqE@?b>&(tGk%`6fE{EUL~ul -zl*W4P#>JWMr9#c03NRUX)?Qo|Z$E27x%-Wc2amrm{Ge9WA};iKSLu@%cLIJyzT{B+ -zw%XXqeO`TinV#~r#Y{;;_8nIo+NUr7*E^@%l=W`XS(&X7+=*h@%^M@Ed5xnsPBY(o -zPp0F{qwK(h3v;h-S6CBivcpGY3%99BjKh@7f2&3^QIv+;rgexZ+CfpGpAf(&|jqGd)(nsve)I>y){SexmJbM_lFgv -zzM0qh_+qu=cJYNfZ6-bz`ghDrZp&llQb&nr#8w|!(v+#u_A&BK1t#O$f}e%8%g_QAJqMcC<3<)Zo-O$_ta -z?le0XWo-37{!jT|V<9cQci;AX^NN+#={BsF+9z=`DzLM6(pH-T6Ccg$4~)0od9|mZ -z)$hTH!-u|KGyGSVx-41YTaLT_UhmV}gT4MFK6}4iOq7L9e-?ksn%hz0oyVRiztTI@ -zbxPDg?!j-H)CsjN{=ZJ1c2(Y^b2iS-B$IQRvP6nOrl#!0JykK^j)sRTOk%Z`tgDFM -z74Te7#VU!>Z6pJ`rnuFt)4$7GU4PH0|rlY>`| -za979T(;X*nx1DbftXvT=S90>le{cOx_THDDk=!EjHvBy6wBy@2Ew?WIyLPH{O{SpZSnT2E5rWO`?DMucP~_Zt{DCA@lp?u&?nhqQi=JYF?}aZvOaBKxH+YW -zjcewO{{0u^BUo;k>*(&ua1Vc#5&0!~#uOKx74jBLM&B7#rfP50*in>ncvt0V!At*z -zcx*aM%}sP{UVHm9NwfVswpMSu;e>=0aSBU6ZhK*C{7U4)&F9U|%xn$u59>|3S~g4y -z>TQ@T#i;No`Umg-4tC?}-YT=>>8!7(Eq2sq)(vRujqYKHbJ-^qr?TByp~*$z;#<|; -z?QvbQ#{1^-`9F`jwI@aN%pL1T+DE$u{5~H%y@&H>mAzofj;Xio9}Be3JUp3WMhEW< -zZ>0^f#S4@kwjDZn@to0~qw_zUEvZbZcP`>*nj7y`7kl{Arir^;7d5DU`1QGyrNYas -z@2|_Je>zF^UQ0e{#8m>*zphb1FDZx|+R%ggbv)%6VqOPcMgg=%if -zb0s)#5DgGm@+H(jX41J6PB9Ca&hGfHlCu7wXY=HYc%PKlsoKrbaegpf`7_gS{{rr#-u7xQ&EtUUSd -zw_>FkH$$BMZ)N}cy?-V9+8(Ay%)j#Q*RjsMYZX%b>d*T08S%#TjPu-#f9@|iS--&R -zU%%(S-^xGNFJH8A;{V%4?>^bKiPo8a%C-8e!5yR~$MW<-{mo}jre1O0vfzPpt?E4A -z>2+MKCYt~bhhyxr9=6zz%t)66l -zchWF!?~rq?aHu}K)}V^>SBsQi%dJ}lhZJL%6r8x-c6sMPnGm<@=Au10 -z9+!(vx0GG@uB>U+Qhmwxw8(eSLX$7`>Ame43$1=EPhBc+?fhlY9Ay^ebjek97cPW! -z>^XOAZI^Oj>%8CJxz2VAn%{vY$R^}m)b -z>p9_G|5$wfs|_#mgS;2yA54Gd%DfL{n!cljsghuCoDeM2rvotjzgyAflM@-}_DBUQZ7z*6i5RHNi}! -z)uwt%PS2l32A^(Ed2m_kN&BwTN82^6Ozza5xjoZU*=3q#&cT072YPgU4oY0AJte5$ -z*5G=!uzTT*CQ0TP{U+51J<1jDX0^=Pba|SfzbSW2ip=aseRoeBf6%)4^{(2F8EaN= -zGd;J4@mhoY7FMGjos$;tl8yORx=?7wpR$*&VSyaaKF-*asA50ylJ1rt`MpoCz7e19 -zBvd!`+x`0JJMa7C)AS62eoQ!OwEof2RasJjauajoN^cx2x*Gg~;pyzNJi?w+g_H7o -zGR2*BerI_U^Oac2{@#7z$DV2Nc0r}Vi6U!rCHHL>J^aGMtv$fTaK^pn@1+waXf4|; -zXL(j#KkRMEtvxd8pM=(`&i9&PH?wcnyeZAR@mJS4o$Y%dSO4(Eb0?W!(%M_%+9ftR -z@l6h}x}O(##m;%_lF-{8s~aYSz3mVCDZ6%(c~t8Bi>q#Qhxv-Gtx}6pUEL98S)DO8 -zD`V>33#+DFSoLy2XuMv=RH=-q#*Aw(X-F*l`$qlZ>qhrJ1;=`(R8hU#q1z&+e&{w> -z9-+D@BDF3ll)=6vCMmRD`_RQ7pH6sszKu)_ycws+tFTRL*PGCVjx4J_=PlDLIrBWp -zu*x-Yk!4eX{%W(^pZhX2xxOl|{C&G9ny2^suKrKoL==B2?Uy#%?x4V*tF^|kL#+CW -z@2NjQmOI6>{pBUE?^8S;5P7h|eo>X}qvT%kz`IWiGFp~3cyA1NT4|uDRUf2g`o!pu -zW~5Z_op!FYb6ibN9s1UtcUD~;``2cbbLjU2>T|T!j~-BXa93h)^pmKl!VA3u=k|7O -zcHOWiU$84kyykc2_0GZ~nSSFSiw0wdYqo2zxVXIVl}-3K#UZS(%z4?oA6FjzT@jje -z%)CGQ(T{#h*X0bpzjqhDy`Xt)aivIoYp?f??ZTh!?Mzi}C!M$LeV8e6Ve^HFw$mG~ -zPx&I^B%#2iv@R~l#xktbyY+R{lBNAkoDW!?9FI6~@GOtN#m}`pfr-;9;i}64J61*c -z#&tYQh40s^huNO6Z0&fnO841ZB$M<2CkiR`xWmd`Pz7SqmE}Ed=#5a_U=%y -zsORm{`}eM6(iGNS=ksy(;S(N;8(C{FZHk#ad(WZ%>y9i||E?_boF7_g|D^>F$6&k4ND+{|0k@3KO2a&m)eu2$uQH;$_PK|Ko+m$$Ml(%0%S -z7F_iFX=}4c=za>7dB&P)yOtlMW?)^3PeD$_JQ?&lhb -z+<+kVM`_!?OJ141LiMk1bB3f=eIi?C6WgThPR9icb8hKB^uF+W;fJ+bo*&cBd1<|^ -zRn~@KdE`-h!}7h*xdner;#lO;7K@&{9o`>f^YM8=5W~#nhy2gXkKt!z`#Q;$D{4~W -zB*7%st=Cg7YOPqL?GXJo`j|^sO;3}Cwp)p^^3MRLs|}G`9$&p*-`c@?VSVMDe<5~T -za`b&39T7V_J@0C4B=>v$uU{PU&Kn%RZ<@a7$9gM0zLVFbCh@1*Jq>@fS62Fu@Rw%| -zwY~K$B>~QxeY@TjXYA)~V(MOMRO+R(ZbRt=A(qhd2cu8!NiliBa*)|~Ue>jLEUk9E -zPc%Fp-BFnsJae9u?6oNqE!ye}YE5>md}iucDYu|Qm7BZi#a{c`>wQJF3d@YSS6q3Z -zddjR{z9Vs;)*XjK6Ao}c%Fc6V+U8&u@H4^fjeYk!pVgvC3$6>_xgn=4%&XFRO;f|% -zxwK;y%cU1HD~@c~r1sLU@9IJhshJ&Dw=%hYVp;ifA>TuO`JbIT%o^>lfAO?hP=7k( -z+%q@=lIP^dJdRpqs -z+uT`V=09bc4}FYO^E}SV%*Q`r#-7^(TSbNb9LnUIRIVMx&EDU+JU2p*#s$0|JUd>;* -zq<0s~k>w05^-OslnVG)+A)(=}9&SOwjwzXWK{+|D?y14SnVBg8&YA7PD<0=FLk7hk -zGziXekmz=Hy5#VhUAWn%Da=znsiuZ -z3DrDhH?|282zn4$zlgE#vEcG})sR~sv$Pf--!52X6ye~1)4*vyPad5tD5II)z!yL`LdKR%QV#e -z+WN)m9;Jn!jAk5~$;j$7Dc)4$glAP%t4qIRzQI}ZsefA>{X1sbNQAK4Hms2MDRaNF -zNou|H&z43D4adAm3#ZLdSo{FcAp&YIft>-od^3+fC*zH?grd1?A-?gE{A+rQ>pvUvqu -zu2&W-S+2NfmiE273oOlfZ*Iywaa_sW=11vN&8wGg*`HalTr`7w+Ck;>w;o<$UZGIG -z<@G7|wcWk`93gBj@--98Z2v4w`u{6!Jy&Q=GMCMr`Uyk`+Y?$`1o-0q}Rq$?x -z+*flC8Z5ZB#Ad?Yt6{U%nwd;KUA(8WU~Ye_S0?Kf2JHok4*jxwHqQ*KTem%1SFnKT -z*TWxkRE|3G=`2|L;jm+fh}e;B8(I@yE(&jIUQsV=!SVNS>-}IsKj%jWs?SI;HHY4P -zv~Q-Xs%!Ht$^Bn+xfqU@Pvxj(GK`d6x0K`e1MXL=ZXESF<9{-Hp+)@0T^=_@|GvI( -zRr}MM*gtm~m^X*~k@@mfQN-Ta?~e?FT-sSZ&o;|dn_`z8c-{7YiNsEIS&y0$g?Z8Y -zdcv48#V^>Z)K7ZFF-@cWNIl!X&WCYZkELx5h&{QYkD=;_0Ee5ymIY5ARO)OJZ4TCx -zTYgLU&$7&Ebqcw$hu$nrUE5W8Ijmjn!Q!&kuOhs^?6>%PXUvumToXJ$ZZ()PY>X=z3x3|rEbt5@?ZceBAnIo44+m&9_ACoQ3h&I!l`YrQ? -z@Xn?2Zz -z*JV}Di<@_wgUb1tFaEGNR>q(GRxT?^H=+H8trSo1L;`I(W -zdqSr)qU%_s=8jKm)L)pMz3r5GLuudN-e=r5BfB;ryB?6{|hHSf-sA&61 -z?!75HZ`nsTj|E%Z`)5y%-63;((@n!SGTn!I&XC-V)lD;UY -z%ii*z%W&_8`&6M5pH|6VP2Q2i?$PTMCq0FmMNghF`Df&j*Yo4O82%f`gc_{#k~sd6 -zuBE5FU)t1Odiv<{hlop0PyDZsb89Q%EZSkP!ri!T -z?SXTlN7udBH1~NL&xhqfhI%G%9_z%1-B#aNq59*b=9PjcLZ>pE-nRL_7A-qbDZ2EP -zxoOi1C6>K66c;~{JZIAvA20aY3n4jVqaf{uQL>DZYa); -zsjD${sg^R7~pmDX@5M$COGz&KAMXo12R`>q1|0 -z#XP$CcV^5p*)VSHoo`NWPh6_`g5UZ3<`YcWTtmX<5?HD#Zky2xA~Iq7I9D?j6|ZoVZ>n*tXuVLa25vHg$g -z1Yw`Ek0*=j*zxk2cu$^TwP)#*|Lf*Od?`p#-F?@nEiLlTA+t%R&M{cXgkIBae$SM& -z;e-CmX*)QR)sk)&SSA(UEo{lz$sLfVIpdCy)M*vnUbRB+$~zVz&a-RgfBU`d%8wO- -zR*u}gFO(v4>>+MVFP)6oA%>1XQ-m59fi-xahM@2X;EDSpj-?;c~>;}7h@ -zC*Cf(BC}y?^?#2gj#uk9J%3-nc>h$Tv^dWi=gF1YX1l}BRIbi$(U?_w{>be&w{|~> -zT`%xVI@9{J+LvQiy4<&4yyc9&mUekd$%>hGSNWVi+ZmU2;#X&tLuZ7PQ2r@{%$NV3 -zmY!!dQu6R_X_?0nBdTL- -z-Z#&;X>TvFQQ0zO;T^|}&YwPM2Q0gS%U80W)$;TCDO6QI?R5D)?FT2{%T`)!b>%+5 -zHm&*a<1M?@*Io#J#poFK<=G?cp9zXy&y1b78f0{w7LQAbNK1}bR}wEVEq2xMuMun|5bsU+1 -zV{-jp%Y8oVUHi6ip5b>8`?XbMVx5l3LI0Err+<9w&ClnX9J!+O-|~>s+vFQ<7TkA# -zzi71NvP@eb@^izU7@YvOU3tw+seDo1(v3wuB_$h}Pc33CEvRFB%H8+lnzTZw$|h;6 -z3nCMoGy&{CjM5&%(#I-_Nf1?7u%>s!?@&apf)M -z$In;3b$_jRch%=<@t*7KYYKypOr0CEsfkOC*=?_+%D%b$8c%v$*y^U7xUjG3OJ&ZQ -zg1^iH)hl~M6;DLeKm7iS%SS?c-Vp~4r@Rc=>~$YnwI}boo7nwwozLSVCAV)U^mK^Y -zpVpiupuLUj|MSzwDqoyl(*C(+`xld-MAt7(3*|N}VtmAu;oP@b@!;GAKFocyFHe)+ -zdxG76>c^`SX7FD;_ED0%>(t)8g;Jj~rHa;+@AqE#VS--y-_AFJVS6suZ%OHzQ7qW) -zbY1BFV{d6W$M$13rA~`xTv~KKC2GZvlvo21d7C}1zdRLMzjUqG{whZHaC6&aPZQOd -ztlYfw?an7VeDiVUm{HI(y>$`($Ir%A>)X3ryZ;f-j)XjmuT~#Un#DxN -zR{WK>*W@|c%FJ?T=dO;U-0Lp|?yUd6b_S0|_&#mXU4A=*S;RiD`tduo9kJ5=QG4jh -zv2ech+|Y^ZQ$_y9ubOvCL&#rAhr{Lcueyb~3w|C7emGGqp?0<21dRxZ#IMgr1_#l|v%UP#mes<#O^I|@Ht5SLx{nr;Z8?G+i -zbafNsL5t36R;~B#xw=w+Wvo2S>>l2J?I5w%=3?cMK(-{^r*GvgBHS+(zxPQ@TrIgL -z=0)Bc#U&1}|4-U?|op^ -zVg2K&&2J{R>Rd~==K1+5RRSNS?2PmmF)1}Qrtef+rg*ko&?15Lh{UD5z|~(hRmEn< -znU*JsCM@ZUo~ULa8mum{h*QgclJz~;gbMNE^`7tEJ$kS9%gpda?(T2f5A2lAJsZ0B -zjs5h`I#a$E)QfW-l9sESyf-$czGeHnE=;K3rkA9XWh)>?RA^Fdb&vGUW3JHa;ADOEdgo8a?{FH$>f -zA6_pGtb3PTE&KTPPKzD6ktclL?cb^K<+JAP484EzcS?BAe`Rv!sKlA0foFH`o7VlZ -zBx>G*sojUeH$Qj%{bbRTRlIyT?$cwI>wOd06PzmFZswNJxDfs3Ty#y4(*rH#dylyDH=1aFzPspKZm|Jdy>VdLuA}wh -zFU6Moty`^>w3JI>zLL}bc8BgjmlGS}oCFl7KmoH|R!s^L?Ao{F>N<$9Mw1}L&mz`csc3@Sz8TQTR -zzk)dizZWQ8fMlhB>y_d_`x^frSisurGg5t7*vu!^S`XV;m4|R)TfnU -z^Q0vVYno!T=5Bi+afz2a}kB)rVd$9HV~F^;k7<-uIQq!D%-a`%7)T&-#i8 -zGcJit>($7a`)7qsS1(`P$>#_97O`HnY5pHFr*|jQf=}rke*0Y?vab+{`aeIZe{;Q4 -z@b@Wp4NZYZyGx|fYP4K5j9edUYko}HWVZanVcRPKJa135e?6|w=qo7Ze>A|p@ZYmF -zmj1OHV&k<;<{vbZ>C5vl-PJg6uB#pM;S&Wv68vAxKM?RsQH#kr#hbg)F|>j~XLoLY -zNw;jil_k*`mALEuxU$2*ZPw#AszW(BCF&8iMI{xC+I>x3w>v-_|Dc*s+^Hn^i -zG|Zn>TvN99S{19?<C}s2@DybyJ+lg9jQrxP-E0%Y}az`P)du*Ued3-8J#8>w{pw -za@!>{_OG%zR8pr{duoD&)|=oTLH5sTyXtG!?@VWQyF2Hyz3TbXou=%r@g6M93ol$a -zb@a`Kh4U9YI(=-ZWJtZv!nc~+MJ%%ZY)Nol$0q1MFFrrI)vL>O+swp26Czo?W|17jJ`{23A9ny_O%I!R;LiouPUos< -zrKp-|r1>3mxpQ{@eS-tDRv270S~|(x)pfaET=xD&O2)^Y+w5ER$))jYZvD4?E6&_& -zV|8m~KDyxjQe%c+@{1RJ{Fwam)QSkb#Y~sHmsl-!(&APX>A54i`SLsVg)jV8)%7kb -zH3>8=-uS&dR;wT*(MDf%&TQ?E)4M*g<~UhJ2ret?k86}w-lV+qsn7M_(;vURRT3}O -z^ROe#Z1y>eqNqoc7HnPl=ImmJ#Lg{w^;#d#?B8qXe!YHca3^0v)kn$0@qg}LkDkXh -zPiwtoua(Z)<(C@7OK$yJ#$`8E)o4~0&m_4ZgD$WCvhq%QuI`-J&>6h7UG{ljbjBsm -zrCa6rt~mM5mki~x?cEcoS|hbHJMhRNp{1Lj^}VxS6cTwsZtsqRQaeK=tv_#?uI0Wz -z#4)q}T^+}QQ-8lU&el4xtbF1P18$e(e+3IW*&-Pfyx07=JjFz8m69*h0qHHv^|o&N -z@QGLL(Kn^NtSh-{Sj<*-Wu_cIc)oB-(4@6cKV-IB+Sbst%@x+!_F$j^0LoDmlLuZHPXYhDXo7cZ)!YpZtfoz*vmb1BK9y1{Fc -zr+$o==9qudy@QVbz)i -z)oWO0WqsS&)W}=^)G>^!Q^+yJwOcajUbUOUdp)ZOQBs1!vJA^lUkm@(V=%uy`uqu_ -z0_$nt&i(%rp$^7r=rV&b*y -z5j--LMeObU<{fc!G!(;EG@jY;W%I$jpzSJ-+5YQto(PAn7YqKdr6IbLv0FX-cHYOQ -zJge$l?R?F3e|*`*zJBL~h0}^%*`L;&Osw}bZc69)_3uLs)02)XD_$LA*!M$ov0z30 -zsT;jMokq(_M7A3$M(bC5PgTEasE{CiWah&r?jJT6T9-W&uPwZgZ}l#t+x-<+Uaosf -z{n2cg>Q3XfXTR&e|KyKdZ~3nJUwgCV(bNb<~v00wAXTHURUVZE6zwD`WUfjO&c&lylKEY;J{3dp`Z`Oy>x4RR?uAJC=?G@`HLxD3} -zvvn$f+jFDNaH4ZUW< -zd-5-{W~}Ye+Rj5-3jVt)*JU^b)<3q$_uYDh|98}1=lYJf5t?u5fhP>o<4v1!TXN-*_P|C-<|If#_SNdL@7&L`$#?&f -zc+0JqcHO&u`TEYA^75H)GJQAXOcrRjfNcHeO> -zP>|Wo^=s|D+`CIx{}q#dExnWLT}nnls>5k*?Q@%6X0<`N5 -z+g*({Lhikee^@54?|PHUNAsHf57L(WKf`^s$t|VXSl?c=sm7&(n{_sRK5%8#+}Bc7t8{DMyC2%E^Kbp-XZ4dp{ybZ~+gtu_EQ{$G1D5#}OLsqE -zoV~m)?#sbRwbiRC4jLNYoXt3?Q>n|9Yv)n7$o(H1Yc4N$AKN*DJ}lW@|hpikDkB#V#hfcPSJjcU6=j^ -z32|R|5@&N~|J_dOZ~4Wx$EVD%|J{;Se(JY*naA&~g3C+y%g(vOY$zCUPl(yX~OZT -zw(tK$+tk0;KQi;9Sj+N53pUhOaQ_W@-MPJCdRV*gw_cA8GOrc+Qz};fVLf(Z(uZw- -z)>z%RA@f~Ue8$OygeeOOqpt|Oi2U(!TdT;{RM%bqW1C$ZtmXE*Wy#OHl`gY=le)bB -z9kn_Sw$y*AbB}snTX9r2=Fp2o_8q)dUo&_tIX*sl;c#x=3C3mfuU>4te=R+(m#<#- -z>@KhSVa&C+R~FlT&b@tV``YbI=eQ0mzi^K0(eeFDzoqWYUCAD$vqgHz_N9A2X}+(# -zJ%8t}lGd5ld-x_wvh8F@c)#tg`tD5C_gB{6EtA-=@~+gZ%VuY;J&Y`U{HgVR?yCsT -zw&{DVub+E;>Pw>N)uJhDmWHc+=2kv*@ml2%v$a=6`cM9>>+A?U_Fze}lKVrs}3k_k%)0_RpHM@#TXo{-%Sk -zHoCkyx>_kiqDH_xbSuNnAMZXLW9abSE-3KozW>#>h5mkdMYbQt9 -zs=Qi96(05MtJ~_nJ6||Av-|nv*h!Y3XBWPbQ+uSt@u4t|QPHz=nnC^TiSPDW?*7o@ -zt(pJHETKv(v$&;7e$tcY26I%EI!%w~#ZQ{ca^^<&+qX}*obUFVe0XP;U!D3c?jWA0 -z{%m&wB>t^-zFlgq%lUWlue5-M3v~@;&a-3I&1BuYP}TPD!D|=JEq$N9(DsscBX8Lo -z6K-D{u1gPm*B=pK<@?LA{Xg?O$NJrYD|_;e`5YG1&S_lokFi&~Y09p&=h?Bw+pd{h -zzSNu4r~2saml=9W?Ye$HEltb}C0Lh#@@!c4C%vs;Pgz7j)i3TCoBl(ub#7%p4bo-1 -z{e{Pc|JYL=8@DC{9%^^w%WET;w6{vUaecNSMRaKF+SJc(Ly*Ab&*|A2vVZLi_HY((X -zrX1$`b$!a>L$_4f)~2(l9B$XweZ!bNS>=nzwoCQ;k_OjYyoRJE*JQ4Ju#V)`)}9jV7X)FNA`bJl6f&fe_s6GhtsQq7pv84IYsgnUYi+s -z_uakDoEK*Mm9_Tze>2=$v3~aZT{-54&59MpriR9gZT%1JpZ;|Fsot}R0eQP$6z<(S -zVfmV5+u$GW#&eclGh3^1-F5fV;$y-_X*M6VA9qR_&67#C3B0!BV|~?~2QGOnt4{VV -zl07`ydrhs> -z*ZnJg-0l3o^Mwt&U)ym7PeqxMy*DPWJaNd!bE@H;lr_5Oy)_3Ri%Ny6*B`(~0 -zI6d*5R>3jHi{abmuM&6JvMWsXO8x3f-fw!kmb~TJc1H4}`qrxZJ|XMgWc#&7$jU8R -zuWt2rpWXDO)x3d$MmL&;7HYA#zLR&$-Fqqd_x-rMBfG2@tEW~Z8|~pqouyWlklWCJVLBbx%Wl{QaKxE}u|gq`kjP&6V$nX=?hWon7U}jOTia^RBKp -zv9Icp)#WKMj$wE-`=D-w@PltB2gdKYq&S -zM~&SCt&q)t_Nj&8yy_OL#ETdym< -zKi%X~mdEWalA1du`SH`=+o#Xhxn~oAune?WXqb?vQD6Lu9J$>SMi$cS(`T-PWOy2Xma&tu+GuBR(^Mv{d+ep -zZacG!bEbU_E)Wmk`}KIH+{f;-$M%?8NM|1l_7T&b<V3}d9>1Hu6Ykg>x9A6cu}WIVEbp=Yid~mxypTw=bAPo^6mVAQSOkzy6%@%Bxm-LpeV`qie3Eoa&N -z)Ks#bHN&H5<;ROho=Dlrc{ERaRwiJ>F8SrG$K@V*uf4~WyPvmyduDKvFG1&a`qC9^ -zw+lVCzOuwcy|T3>b5YxM2QkA?IsNomR$AI_I(w83g#YlJyk%a?kxQDcrHUK3UcU0j -z$20SU|NpwF{`JAtdFDPo87sef1O(gr_RpU&VN;ZWlB@5w{OImkQucz){XFN2MZJPJ -z);BUT$uE34ZCjI-BUk8UuYJ=TgQB8CFR$67aPRcej_jDH%YVpxAk%XR^*yhnmsGGII8-kSXRp6H+y%L*-TEM -zEvGzOL|iL^%(mVZ{Nl1OdA>@9#9NcVps5Tuv&w{0^Y`jz_&?59$sDpGqv6{kHVvce40o6D25^@$Zz(Ql -zXfoluaQzvBsD|u<{+ohYxeD@QG#& -zeIXjK>#fhv}%&fRIf|iH{?7UUaB*mt;py4d5NpGx!>S^u_iyFqMuk{xsvM_tC -zJJitT$g?7&oAK;piGY(z%u;-*4!OH|G8E4?9J(rb!C(QSXtv3MNFU}^p;->WiM%VK -z)-%3Uk`B0##XO7Me8Hr*Y$kpA4yoLH84gDnMc-H~$ehC56<+Lc+JXJb#+MD-Hu9~g -z-@J)gio4w5>@U6yv5yUx!sISEy%#^Liq{uR~V8F`n=2VDBae2d*- -z!7^TsE&YuSU%dn}jChzt-#RX+RAJ$YYIXRWz!9>Zw{hA>ffad*Ouij13pUN=FqzQh -zV3;lV!peYYYPQ>g#2l8am_7&NM}jNj?3r|x>s117bg@`*crGZ@=iJgi*}=D4D8nv< -z>FR5*1*uzDPDM?3U~c3L*) -zQ>aeBf{ltID|*_Qc$aAe+>v69;s{!>&zH+&;!+3K(;^u*bC|Zi4PMad!g?xprGxQ8 -zt}FXO8|$YPiLNN#$i&+jw&2)Zt}PSSIm~=5nxT@=ILl1ug55EutvZnlUK(&;*_7UR -zZK9Y)>Q$y#_UHwha=A?=Y0OeoUZS8(BK -zYm9!O$YQRbHc^pHFxkUS$N@C$>cpTJz#+oa(%^64lprJ{q#(g$W_Hh&$LCmH>7GSN -zayJfqIllfE>($=+1g+mJMvSHRLSDXf&ogflIK>x1VT-3ggb%<6Vt*?8@X&@%4_UN(+lGx_^Vnq;SQ2k(5{Y8Be%ig{_%y?cm&e`hlk^QmidvCJ+KUo(dz3f=)=bz6{TGSspzx={~-S0ON -zcfH>9;$oI;zudAfj9*T_Jv>ET-hk0?W=|c5p)P-X+l&&8`5m4wlbZ!6v&fYPdH95F -zw$?D5IbS?7=~CwXX`L(oRe!qXIE{lxj%k6$vb^gT4JRiRnKT_)KI6{W#LQ5iZ>{Iw -zXC)j;k~$Q4Wm3;Kt=E2y2R2VHu79?7_Y51qw9`@EcO<_4sWI57>73kbxU83UjU6{eaZR}&iz&W+?>WmuWm>i#KuQj)4gqZEPH>2e7j)yZ$ -zW~Y9hlw8Chu6W+i_h{XP2~`&_bTt;#6)wK69>8Na@1V&3^5U~h^W(&8nwNaNROM4& -z7Z{sp5wLGtfJ_gEz;2-@*N&S=M4L1ImA85DY}?kTx7$nX_N>00X(M<Q~P> -z*E2b(iz6bgJ`dfLHrHnTq~FS-UdtG#{$HA6WmkWz;rWUj$;zU8+_JZM?@2Fel=oeh -zGRx<}f^4JA2@R!RmiwvYKi&Q4k)T7giGnQ0iIN%_fm0^S6!cX)jpm-8CDvndN`%qE -z=(|EHQ@?0m+YhHV%RcMvNfZ8`6TislqpSRr`cSpUhjP+1&uiWIr1W@qX-&$c3wzi3 -z^vpV5s#+3K@5Ft2iriO!oy#+iZ8%dbZQjjd&hmcei3=Bu9J4fZCkw{jn7lT%h>K|} -z|3s}dEYA%!XG~*=QB(8S;&#;`upsr_zrr}Rm&X@9;++uZ?icb%`Lgh@op0^zjT#mi -zT=tk@saQre}iNaS?^a_ -zowk>1oY4I3Z(C$m^=qG52UlgLXZ@QJ{m$pPpx`&Iie(RlGhI7{ZGUn4F0uI^e}0K{ -zYWn+`?9Sro)eG<3GSYTuV0BsfU4pGxlyjG6 -z+tx)7)91H%>RFq!>Ts%-eGgdlczv6jo -z?tP*sr-iNFUOML=%lCul&rIItulaw~uL*%gGIzp@+)nN|*}7)3m}5rM)LvyXPmPmX -z_~zWQ?+;3N$Nyom3(G};fadK|trySuFWJJeu(fwe%MQ6m9$xPJyg70wIbPmyzF4Ec -z(MAu4O?{D>p4vUwX4$^=Z!6EUow46Fb9QXHJ=l-kF&% -zinEp8p82>XOr>k1aMqcAeoZ&CC32ZouYdK{Pn#~}slQYt>g=zepg%!}jwm+={m2$f -ztYBFam-F-D&tsMvrW=^HwrM2XN@mkKC0FJUe90-eiqD{_#^8as?HQdWWvrc#a;Y#U%9C#bW2Up1O}Vs8Ij5MD+0GnIjW!<|HI|9R-XHr>Z*lHGinqL -z&k^8mWzF>A*FKb_c$am(7yIeeQ&qpp#u}t8pR)AbZZFp9TaE~nUSQWWs25e@(Y`79 -zOp`}5D@=wx&A{ZqIWJ3{K7NT;{GTG;i+in!Ugr5=ylbHTdX%(erK2X-bsHV56#}NAob6DYY~-KOBk)b -z%;i^|bkvzIXjTLt%d9HHRa_5cGq~KZ___ES@f^H0IfP-#-9`TkIbOYZHs{X#>ZAKu -zh4U-?ow!|J?`}2n*n0fek0nhK-rVcH`eZ+ClKSE)x`TOzf7B}frhz~4g9<{Ip&{U&rZ0;^@WZ7`r1s+S(45L -zTQnBVxw=gwbMgH6m1}~w$IGt#d}2jOo5QU@!H%viY_}QjZVcSMi8;FG>EkEaTUv@2 -zrzmdZaAE3W`SmJ`>1#?;>6BR>yLU*gtDKTlXu*8`fBj8G`KA1w?-(_H1eLc>m?W>g -z`>CGYr8-x|z8$BzrhT0_r@&Y9ltTT1woOik@)DA4MKu$DOLCNRgf}H!@?iSN#ean9 -z%A+qE7@wuT5KiK7+0LFDpU=rsmGB~HQyKeC@0Fef?G05^C;bb^vbYfYMZcf@ -z#PZLl&srTWX!utj_F(zEU2Mno=dR83DXQJS^(UT@!GX}0!BQRvn+M{BOk+PCTPJ{&knZ{2t$<6|rWL)^jFz&6EFC<0m!aUhM4E^?zO}{VBR&JhJZG!N9J3d*Xq~ -zQjhnj9&?&8`KDmZh-=nHG -zugUtGQFk-&$*kr--t$||3N2CG^lM3m!nFrHo4h8jiE=ih6hgMZzQ`9T; -zDc!5sc*(T!(xcWntX}K5r)X$jFbOa+_g0dP-eePC<>=k?@Ab?+!6^npQ&wp#@Ck_W -zIknu^M_a@2Wbw}Wql-9R+|TRw{kI^5&8gGCnjy(OSJ12X!kueL=AXFBwrX%VYw{RQ -z*&uamj!~_Jv*#=|Y2B*jizLD_Ho6Ed?J!%n^>H?PSJj*rAJMnlKNf@rO*y7|E3fO) -zgo{dx7Kxl@uU`>d>>D*@)s^t(&CO*CHC0VKX36GrcQqJTJAU!itS>&k`AtRp&2X+i -zJx>eGD)yHN}emv`OW7Ldy -zYzqT=+e({`x~kqfzr?6}lEy^+T~bqJ`qlObimE@3d*)f(Wv`k#*Xwc9QD2YX7vg#v -z;bM%6l17eaibqPkZI=&x(|4XwnfkX=b?IvTg64VwIvN4VTth?mDeeDBxT= -zcj-s%wdpSs50{-^_2uEjU7HiuJ=@>)LqK=qtd%MrKaK=zXKhh&jtyvw6BTkllJeuO -z&Yeho7prAC^}_#opKbCzx5Y$h6<2Q5p_Zm6y@d_zfzK}o*_9MmH3WEfnD_GCcM$f} -z^)%VB;cx$E$E_(Ak5_Q7steKO4b`2Po^q-nTGuc}xAa+ZoUZN^Gyc9qjtQ5K`1db= -zaq;?&-K|=e8&7oUDhA&8D8 -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 -z%k$cO^OL+yp(+d_~CSr9rh_3oRS| -zzEbHay)^Y7%XUAm%{SvzjBn4fUAogFEAUF&3^%8$KXXNPH#91He^~PIib&M4hSZsj -z+v<(ha-P?^`aU7l!~fE}_L);>U74K4tdR7${r`0G}$tyJ=XJ_khsbT -z|5a1wUpeF7^m+1u%Tq6|yER2;6Y~-)yEFSFYo^;ycx=0dS8wa_&@JuimZu7SOl-X5 -zH-p#XKv%zMheqR`+2RNEcI}%I_<>tD^op24cb}8|29D`}nlHJxgttuBf5@m=&!G5$ -zLxjauK;V&}pH;NgU;T>8g?|n2?QCDLb-}|2-Q9h!KZ+M0o%-kTp~q1ly-v-3BsZOr -z!>v+(nh;xUfZXoHORU>MpDa9(=xlRAaPl1AO*`BwDm9kQi2!R`6&Q?{D4YpBO+rX0T;XIi)H -zSZu$By*|5Ob@9!MBHKUL9o1po;S-lUVe>t9r~e|mm`}2C^yI#~b@Sm*(f^58)_zT# -z#Pp>(MU(IL#6yb@sk~5}TqdG%;cCv^#j%NRw>o+iELWWw)~Z+aLHMxt$C`z!BX6Jl -zP_TAYnDXJd2j-+EIc^o2G963ve*gZ4!!oJrx?ph*r#q{))i=TTwNX+5>XJKm5m(cs6RqN;up0Jkq?<=zZ -zuXw#%azh?7&l;ayfAkA7)~+z-k=t6cBOr0dvp?74x*dM}v=ref+LL3;QGH>B-ipPa -z4(3m--MH@J(kmh^N^_SPeY#(mks+>h!D*Md?(s`k^@5(>j`vsOwA#gIx})Cv-rRzc -zecPHjoXmEWGUmoN@bFEtuMt1MF7~e=!f?yHcU9)Ezs`NI#YASRkodJrOXYHQD5M^q -zx`2D)J6@xA>zZPJeUScnICR4z9rsVW-9G3YdB9U!_|)t;ORf0iFf)sdjcGUaP2bOY -z(e~v-(jM-r@cu-T`w?^JMHt=R_+WRAQT@Z+KFpuaFX`}Sy3zab_idS$LsKX3Sf0B_ -zJ@9+1!`_ho*=v_fTXSFZpu?xgTGiL5Tkbr)?YJvwug_LK?~@00^*=X?^9bhYv8=Z* -zkZ6fp-q6zXPL;1n_qxfV*AM1=N%{5G#=as{@&xC@t(~`jzIeyVsr7KHQi=SRmhKBo -zVG0Mo)ZaakIJ-`AU+viief>VQyz7t0UwZJNE68+`!<{t@y8Go$X=`c-=ucuWx!hHt -z9OvS&`>RTvf@<83r6*)~G~%wr`D)F%AKK!;5hX>0v-8}HWL6Q^~xERWLSvB_Dv -zL-%%&2vi(EnDKX -z?o6y-c|(#Zn9-MO*`nQ!GrH6_8;E-M9}bZ*6AUhN(^z(hZ|97zC6{J!{aco-RV6=R -zrG}1jaN(gDK1Yq~HB+_91Wt!|OrO5;hmKM3!K+t%Tpu+Viylr**P5p=f8~z)re#X` -z9m@_)ww%?azt}|dh41AMk*t8=!l}!aJ({#}Ru|(`Q_=T5*;+Ll*00nEOA2;eFvZvP -zbCa3q?95y(wTZVwYV-<&Kia=o=A^oFc9-HJbI~*I_d`Nt8-fL;o9lx=&X@2zsz2F6 -zbZT3nR?pnyD|eVo3U*u=;^(S!a8B3!O_rkjyPt=w(OVd780)e8P^snIF4sj?q6|w) -zwRZ8}SXrUCIe25o4Zov|ldMI}Tg$cHOuxU9L-^s!2fAI$7hQLl*QHu>Dz`bW&m`WZ -zz0;RNInm|8s-@Wp`=mR?m9>7<-wrhRvURQ3v97K;f{qhh>SbG(*qr!qBax?6l_i|;J9TIK$wP&zV$q5YLvySrL;ON{(Pz1WaL`|Pc*+bb2TFR%ZV -zFR6YpsCU`^mGjR3P)_HF^*7_5cdes`Grq$mn1Q4H$|*s%$Xni3yeqqSqkCO+-|TZM -z?7rEn^epvLImgZP@865mWIUHl_w<;w;^V}vp$ofLeB<5j8c?JmYWZNc%&Z0e?3cY4 -zWvE=)*Ww}PtK{%fEp_sW-?!!blwvBsE!Uh|@6vkX!GgIi|7D+9ty{|)$@S!zo2EgI -z*o~8HUra8tng+Jba1Rz{Tyvc_O!(kj)`zP$9sI1(EZD4Fm9{*kMydN?eDq6UM(G;n -z*TTAQgk>{b?roPVJIL5$&Y+N)nOV{#yyDYyB>@&876}oFvxO4OjuI?}bwUmTHyjlX -zDmZXR)HAg-bOg`gA#4KwN0}e21r@#c%jmc3JDJ&no&Bo@bJFEhofh)mCk$ihn0RXkK$ax4O3N -z--5*R+V_m?>f${2Rd7~K<*Az5aba~&dsof&SW~Y)Auf=yGVh7tat7H)UshGl -zyfA;uynT(WLF?B&v8i4gxAx(JlRFmh{M2GT6E6C= -zGiBRit`N6#Ms>%Jm`!fCIPgnT@yNIRoWaZIOk25piH82Ph;7Yo2`80q*SvkTVCIPf -zUfYk(lIY%vS)Z0eQhdMsh>NhSMYppm5;@p4O8~@ -z|6kae`)+f+vVxdU{)Kjn-+Kejv`a}Ovke&%^KyT8A(souGnAGytcsA=ey=K*1KEn0ylnfJ6bf! -zV(K=xM<cYm#C#xAFOmV@bTi;UTl%GnKBGdVtZk`pWv4P(C+1xj)@Y -zOS>LUXK$~%X#Y3V{l2MTScm3S$34;YmP+@Hlb*li`Pa2nzidgtyOOBt28&Y)4>s66 -zl;oCt_rLyF(Cbyd@=T^>u6OR5EZY6ED|MK<3`k$_OtLht+y-Bw%z~+OT0jsrVC}Yz% -zjb{c6`qUI6+f{4-DMngMu1TA|^N7Im(8iM%whF3N^@Y`**9_u!3x!O0mpQHV>(eis -zvPC;<7z$NReUD%hIQgF;shU+};+L=^ibak*`ZEf*e!Q3PYr4=r{r#H+S-uNQ-EF_? -zpwnKl`R?nzZnyQ=@h|Q_8GEpJQ`?J_w-d!qmTrpbkXKc)Qs8*=TYceS`8r;nB2E2B -zmA4O8#l`V1BdU -zR?Q=vH3FrFY&M$+%82P~=@MdjUdQ_Vd=4Y$G4I1a(rmx|m~F;k#B^i!ImxWNLwu4) -zBah7~UB{=W{8)!0>gKF%tLK{(n(lp*W@tO<_{sHOEV-{Xw9iSLCSnbO)jaFTUna*CUte5BZURYJ@&|dQ3pzBw|C4U=Y*^Xye{yM4sZ6ni! -zi&K7Pt(tRZN70v9gS{0;UujGk!zGrGcipb1C%io7zidio?%}>5t+(Y`UB(-A -z>g(OK3$ne{XXUNe4^Wt$andxWPWk#JCL0M8`#0AEHB##QST8^Ftp9;{5}4TNmsSdGmM&Yl^Mg{(XlJ9zSV$T=)7W -zW4;yZOKMMBK7MH}_4tzF7YT(+HtSp49#w|ixU -z$vtb8#5ZQR8J&OoL -zNOdk>eD|%M?{1BBZClTV(rX6<%C^ZVGna9IpX3@-{U-E%is`ZRA!i(SLWQ5z2ebwW+jfE -zgaQYXQ-u<3fgF!NGlLe1veXN(XtppkatJW7ISME_3NW!KY6!A83dkt(G4_^*US&L4 -z@mNHFtIX_DEo14cz~GuEW(M!o{%~zq?q%ruKb^5v`P+j%+|SHb=q|`NHw=-@aaZu0 -zylDP6pX5iP7Oe}7H{IRyXX%zk=ej30jLpFnM$=@gB@^SdZH~py<#1KH;8$-Z@m8J5 -z!BkY~!bYjLtp*HR1Z9B;W0%6?=XN9f#pSuniy1G^XMRwvp!F^6^M{;+)_1RO{TfjENOrnR*cttM -ziE+0t_m=l1YSG8Wv6<>A;k&Kg_UBrMYT6_@$@FV -zy*cA)=B=$eEy^{mZ0v5V{CE5P7e=1{zj<~q<=yz6m1UNrb#CLT!269$R}%1Q}1tO0axyCuknf8%01a_QAtJDsy%EMZd@#lG*FdZ_$YY4~n5ugFS}~vPfk1}Sc^jv?oGfwN|8a`=cLBkw{SM*|ZZp0_s~!=^`=K5- -zMWjkX{>;p2Gqrmf#kp-`U-XEwuTJmkc@xO2_;3GKrpNU!u0Q)`?As}=s4+qMpThh+ -zDF&xm^DDfAH=I4NNlo6eXq9+i>WjkkHQkak{t9k7$YeR6=Sj$Zuk`P(k2md_7<$iE -z;Yr7_=N*$c{mK}BcKEz>e(tx+qfv}`O*Thv^^QC2HywPY`de4@mh(N}wbHy{&9Je233vX2H*>#U5ezxzR_7wuxG+kK -z`Tj$LZNKB@roOxAa_#MI#wRc!W&eRZJtVIzC}iO`oi -zN`VuVD%d*id$Fl8`G+a*Y`5Nb#InVSwLewV=8Vs=KN$x%?_l*mq^vnZwfQ*P@fQ!A -zchA{#aPd*YTQ7uHbQgc%X_ub1f1ULv`F54s2!<)QE;>GPseMyw;*%vL^HEOq=z8CY -zFY13idb#jb`k}qc4)jkFHd~;-?31%?&2j}+}6t#$AI{xkEr -zg~uLVp77TJ)=Yx>T&t#)KaQAN<+0q!S<~Lm)6#q2E3s*tT5~m`qpGeizS7sZF`X~$ -zU6a@MU^Sl0GjE2n>0FD=_p_b43le{PkJ4@j!Xg+@zwN -zapwCfRw!jQ-nh)PwBgWP{V6+Hn?8wo$fVXiWLmk)AZOp(&>e>wX@;Vc`v`Yw91JTJr3A%#N^63*{op*T=Ah_=K&<`q?<0>EL4h2c}j=f1WemPd%kD -zcg~gbS3LLGeO72Xw(&!Wmj2Dq^AUelvi4Rc?K^eyd2L?0V=Y&opk3t(yYu_1Z`*9< -z`xT%l+GxuB`IMJYfrrRs!@DbgnQ?z)P*8mOY~SLUf4@C_y!=qVe0|dTpDdq>pJ{4* -zPVnnoyhlZ4Vo+07h34;+^RYocJ5C;0!5F>a>SLX+Z6YVT({_R$)TBlLu@vdo?+2jK4EoIfy -z8fI)fT33I_d-1|^?2q2}^~bKQkG)@fyl{zIruW@bodHV~zHPNzc~F^qqe|V8x0krO -z{CI8(KABUPab(3kN1d%fd=s}D@tS_WU3YQMTZRVF<7Sg5|6Akzt!Rh$wjF&_vcE4f -zXu840y|Igp`|s6{tnq~lCOmt*@s6Xn=$B*bw}@?hb5O=GBKhH_pdhVN=Ra{Li_HqI -zzcinfF?d^5{WQgYkvhtbx8KeG`qWfidm=Wp!~ot>n9`q}Q^+78;azZWxaJoPqu -zQpl~~ixvxYx1ZwdR@)TXcg$|#(|RYtuuhzre)ig9bKLrZfEI{8a^jAoYlSAVE3c?7pkj!6hEHcc&SQYu_L$o-jb>6 -zQ*v8o&YKjvyQ^g5<}y?EygQcLR)=iUUU*XL_Kr)Bmsj)MO?Pws|1;xP8SAG96@O+d -zwtD*H(&@^+-A>#@2!88_`_k~VJMz53UWCy_F%cNA-e -z3-2slckz!auf2Qy_4}b=%AfWW*qmwzXYj3gc1&dV_xICw&Q03j{z%m8-3QUhFC1B1 -z85$DH@(U_+^UHLKGD}iZONyIzt++Iu57f2gU}1Nu6kyZja6a}NT&Z)gIJP-B3bZ&1 -zw0KSsP+-w>YEahdi!bzV@*W)+s7O~ZFn-$Tlx@Lug#w*t~8CKuLueU5LF>Stgs(P!Ty_3H9v#-iE)xRY=I+9mb -zu1Is{F3P_+`Ji#M(BF3_Rz@fV$R+HG!~Tr0mX+&j&EJ@@6$mtVDR3Fl6|2nnfYGt0LH^B#N!&T35|8*Rys(k&R2`Z>7{<{`_Z8=3%zSl@5xmufyB~ -z?=(5>QC!nlcHb*gl8dpx=b)*9`^F^0TkC``ZaVm|W%0+WH?A-Bdf~Y6u*0Sn9{FUE -zSj&n1{EBkdt=;6$d^0pqYPs-*#j{1O*VEpJ!L6=g%^~e|hOw8IMZc4C**s%kZT4aI -zrH_`MywKcLXz=crLVdn&i=)ESeWKU4=6`7Z;&iuYp3pDHLiw3zAKP?05D&i`lzknWM>aN8Nue_54{Ag7~f0 -z{c`-FrXAO0={9*|I_p+jDFd(T93c~Ssa#1_ozf+z|L|?^hC~OJstp{T|CGa~6iIz4 -zpVCw5C|Tv$&mOu%Jmi3QOZp_l-j%%yUa)`g7E0*f=&XVaY -z*Dl2wn?*xbFfDkwJMOw}m)a4hV!`@JOocWfFLXGoZi%-S8o72HUGSqnKiZo#&)x`mTqUoDRm; -z$F{I~7SB(ujIgqK+^{_C)Q4lrev5Q|P2JRS`M}%gR6#S_$r^pv{yb1&@ReH5KI5yn -zyX$40#|1i5PNl!=KEGT1)r#vrC*#g-Q`mK7Q^U4QA)8H-8Y!wGemfQf9uu_xJvnR2 -z0`A8(T5pg2*3{zq)V<&FM6BU1Bk@Ta_@5Lq2D;X7HQZ;#T@<_F%8QVhrjA*?&-Yqv -zw9USDIW;`+6nAAAW4c9zflHZagg_$4E!PwNsR0_wI|QGsH~!)t1Q_+H_G%d3)dFD+idl{ -zQ!UpWI{xd-T=S*77CWpJ@Gn!`5H$VVqfHNEJ$}djHn=YxI3c!vz4n9L7p|*Y7Dc`9 -z+UwKQ@icFnqD$wUopvv(GYY>-b?n{pi|=S0N7ADBxJz#nz5YMkXs0^4o&BB1f{yLV -zb2`$^f3vHX@Ljg&=q&v_+w61c)UGA^Z^K<%KfK@xpYKv3aDUg#y@#{zuKv?p%zN8Z -z^t}Ft-L;)zEc&UJKO1g-Yg2#HGQ*npNqPF|B@Dk?dX~t&XH%b*IRB07oXQD`b`5Xk -zc5|j&xG3uT(yvOZ;IlX11p{9tl-Q2BY1Jf7QT-gOEc{2clUh^ -zy{;%5*FJCm_FK7!Q`+6U)4ENhKL2iN@=!_-GLLcCWA|iMZ`=22D}Hir+uyu+Yl&^! -zDf!Ccg<@~IH4aQP-+S$Ch){8x&$03eK5P6>Zn??VI`8?{W`#SI)hkb~HWpam7{`A@ -zGh+JdKUp{aeD1bhJxg@Ls?7CjmexKKub9<~yq%CJ-_xVcP}iri;iB6wzB8;>oZc?| -zc;(W}=AbZ^$>*#(idk2EHf7I#ALM8!tHZXV&8Q{()y%ZK6Zk?mboe!iy{&iy8SMlD~i<>*AmGu=jqzOzeT -z;!k$ws8{=cU$!jx^6iKV_W~Z&FP9Mh7TS3`>inmfwmRE`bML;J=ce3jReVP0yG`oC -zDHH$a%z0sZo@KuJpM5V*PV9N{IK}1OhyHKuGX61gJ7dbGcK%8el$cce#Qb9oHv>aL -z0mHm_`}Ou4`o6Dlm~?3SFO`t_OZ@JtE;V`++{T;!qWI*S`Y-zz-b^`s*-Y!`ujplN -zrwYw@UKr#*oZWKqjft$bsh0F>!LXoAv*22jJ8P%pmx|qpoyGQg_R?g*@UM5a-tc6( -zoy27Sw8PEvpOoWYZx7xtSuC+z&aD%SZ9hA4wU2w-x89iY<;u&;|H}Rp*PH6`<5G90y*p;~*gGEzns1@-<^JEx -z(W)8Yq3>TU-Mh$eM?}~l>f^Y -z7Ch?O@$qxPjWAt{?5jVbKAyk-XoAWnk(J@%mRp%zzAdxaX5x^f)q87(S^KgxzN*4C -zz0SUKbn|30ra!BR|Mg$+?e+tu*Y8bc%&}uInEIMYp}s*tMaQv8!J=tGN1BKB>=L%L -zHAUsj>ojlaole`v?&@w?<0K;R{iK1Vn49I#ojL#7&U*E|-hD^R#NX`5@6Q_+9$waW -zT=A9d3xC0tx@#sUK6SfpcaOJcpYf8K!(4Zs7D}At|G7r*sxR}}+==W@b|tf2R4P=F -zRx=XbVtm6-{mS}!Nx$z>$r~1L)QvOw{CjoooF}!nPdTshzk8vBV`WNt)lFU22||~h -zRnwd*PRDW?7?vxjr8y|vYuU(pB=5WSj?T;jot_rYw)3a|B015<<7{> -zToKZtV}AUN(xhjXDo-xkWD;X~T7xl}YZHTI_sx`si@C~smWQ3=)!oj@zkEmi*Ndsa -zp3^&@)ZYKU>@=T5K-N^v5XF75_0xIl6;#)_{8-?qb8Nj#Y=S`57bh!@sWqa9-*<>i -zWn)dfap`2xS*Mlwe-ZJuQ*BHA -zrLNvXb6c{H_|^BnHK}zA*S+p3&|k~0trt<(98>rD?uEG0S0cGSzaDImI=$aM-O{AF -z!u<7~>y0yvg+*ANJq(VhSL;~(PdGX_+^O3l%zpXoi>h`9M2}`fiEw9ZKi56~a;IT_ -zuusUO3gtC7Wh*?C8)a6@xqDTxO$v8ku#h9B-eGo%t6#>=*{i4hdMFgPSHit!!Kqz^ -zTNqbof31sLwPIl7_d-k#5Y3q-orz7)LpD=1zqbjZ%RH%aq$FPr$ut{?KrMJ&4o -zWSL$s_7|#`nHFLEFh|8zKlW~5+>_Y5jjL}Sd1k+6*19QTZ`6P2a=bd%^-!SadZ@r; -z3CEoY3!^{v^Iv(M`rdt!|2EENU*|`dBr}oPIbOfx%x_lbBQG-MNklU= -zZ;5Y=xytoyhi(6Xgrza+l|_0gEbf{@visx(rwW{}K$ZRiY@!02O-uuVqpPUBhKQ&hY>IQAJ^lD9sH65bpUR7@^PAfKaqqK8tX>hpbN-I) -z3MYR{mE>us5?wsbTDHqBY1)47;gxd>uhg&aO7v_`vc8{JmLj(Ij7{F0{L7zTux@z% -z&^4l?f4g3nz+78a=5D^$D!W!gHW|f(hn>=`Jt~{ta0Qe&2fy{?Z9j74JzM)Hhq+0i -zpRKLu9sh0fv+VJrBT^;{G&+u1q_0poaUpxP=b1Sz)rWUz6#lO}l@#;C$iInodTF%f -z3&L;g7yt93I&nMZ%rQWPf -z{i?5zmBlqP^6nN&IHUgFt7qXtt(O@Mm3+zzyV%q`mep_CE^8Jp=e?CJ?x{dj{@fia -zIorLy^DJ4Sx~@gi$JQsFC6KT9<=yI^B7uLdznP|{WH3u`Vv^oWO`X@j`xM{4SKDC2 -zE?ocQZau^Mo82r2J>Rr@g`A)KHz-uwBx!zz%cb&=a4EwSslw}8UG~542Ue9tb)@{r -zcD;EnBHeLPV&%j7inj|i{_p2>>Wi2rQ}|A*E@0K)!>hz+6!k?k`ahZa_NCQsJ-nN->@CNb{#t -z@7xCs8rv;-e~X1~`Tcp0*%keTjQ^aLn+m#JTr%G2xu@AvONpGi -z#T7L-7F*^0E%#K75X#s7pW^*!o``de@$Iq=lk$$J#O<1pQ&CmaAtRE-_G!z7KP9*L -z4%!+oD_gHxbCcb{f00Z0i#11#eCxAy_fHf!=B(N0XwMQ^?{p@3V}NP-&)Ap)c7ZW5 -zvro_FpA-Gt`m(9JvO}$4|CSbqmTS{_%+}3UKcdN0BF7*QoY<)MLXkz8!!6K9FsZ{x -zDDfP}MxVgiQ(i{b+%jwS^b4#pk<1rA0Z2Z?(?x^k3^=W7@le -z{k`@@Q)I8P-q}5C+RFxA_N{MSy*BO>P}Y9B^e2ni&1ut9|C%g+DCWAc`K;Y9ttY-x -z|9DlRretoDj?HOFJF{Foih0HRxn|-0{}#`&DMwSTwa@G60+ -zpOaY=7v8UbxV}Pp(Yyb4L7zJ^b47g0%i7F&POPw=v-vdZc7>IV@8mE3I5|5uWX2aQ -z8PmHCJ38L$D4m{nDyGCX18WS7s5)zSR5EAV?>-tz~x -zk){teg}#Urk;$HY-QvfJu-^@lvd=#DN-kP1_2SL4=j|ppTI=T*=}b~tu>U=?Y(V^q -zy8^2gsyV92>+9A!mu@=Mk{}c#)0Dbz?vx8*iu}nt5*$<438hw5gh@W1CjZ2gZP^sg -z-&$E~o}H=<{;RxFs9~dvfwSgaPvsd5Uu-n&jD+H*FABaPqxb!TZg^PTkqudfE~{3C -zY>}A12K&o(TOR@V?d -zu~J&Te)=EX2fg7hcO4DfZtf@eSIj+TdtHN!o?@u^@vowh=PEAm+T{@@qu=0y1xG+uKx -z-5g)HlcMf=;aScX=X{&9?A2@*EuTGGjz;Ept93VRy|;-$_@0g0L$9WX^Kb5*J*$$F -z#nfPa=xdX@LkFE&;-&vb_u2fEyzI3jqv!RyTa3$3P783aK6%~d>HmqocU%^1yFANC -zo^$S1#R*&Y3T|s?I{ckg+f|AATush9^ZH$^m#+jY<9QX>%rRj$*N=C-1|la@lkAx7 -zAF1m&b6KqoII-ATqx&4kj=ftmn^JGjIvjT6j95a@%-MO8hRH7(q~(qoL>Spw9$gUk -z#q)fAsb%RbgM|+>|FSqdbX)R(Gsw5ERjg&=`V(L0KXgtg*x1*V=CL4**FjS{_>qLt -za*JQGr^RKKar3y9oo7~137#3@X(;<#KSql|A~?0AaryKWJWM+E4+Ys=9gZsAT*7S3 -zS>$v54V;6V9BTQ(pEiy5?Yz+^?pHnC#!ZJKu;XYw9uSaNV*|nRI@e -zgyFfvDL0!NoELfTT)TjwySUDLnbmZ$tdob2t395~+tfRAz2$|p#bvSIe%houf0lO>j9IxMg&QB)1c;|zHo+aG7-h^i|PdsqB<>N9}+rT}QTXHAd -zUp?0{#++e`bMPzs?u4zg8+vc2pJU+M>abbXp~uhiSnSUEjEg*9LGNuo{)9*YB>?f%#WxOtX;45pkAn8yM>y39w4~bfzl#^ty?C^F2)FoO^V{Xa7`}R?o}R -zGlF`PJk5TJPOST% -zu4z7NPN-Y1@V>cPx9@$r+P&+DW9S1b^)0@dE?u{myVd`@a^n7?DYm)amQ0$?Bog}n -zucddK)Yd14F}o(E>Q$yBhCKVM<`L4r@v+>#)3>L;KE8H#`+n*AiFXn|#QVr){^&0H -zbcy$(;fp6r!^-+x_iD?XSL*pFrmP}Y@ocZMl!=O>nW*@+jf2d$X-RWLo -zQ+7@3M#Hpb$=eDym)^2b@-m!Wl#>>%cSMlE;A80gZwwYQ_*qJ<#<Vp36Q?43}*1?ZH#mro=`P59MW1Cy8>lyz%3$D458sltw=FlVag*>4f-p+ef-=eVN -zW5oR6F6)icULNDFdiV0kyzb-dVnoJON#Y6CH|PlD(h}?P3Z95F@^cU&PIzje218P=N-D!p}k5d -zIW6X-^PEe|EtYngZeH)fcW=)I^BZ&ZAI!Fv=qQgrQ0bOBYwPrtEf4=#s)@4Ae3rLK -zrE%-~oE7y>R`QlxT-IehS$)Fr^IOhuY8^*&r(6quzU;+MlMUe-S(p2jPFv_oHx>V? -zdi17PYS#3uz4JF-N!Q#`=-Iq8V>5R~^Ueos!Ix$-=&h?U+sKr;>7DD$=@&dJCOz$u -zDlw2*zO5tk%WNH$Il^_S7lch>fsn_OS4AVXH -z^Z$wN_n|@@3lA{Ne=~8ZqSaZGwZhFToD3Y9o*N$U%a+`!IqDs;J8-}K_e*=`cbs^- -z!fW-Xyl174*M+!;&O3eVXM7R&%EPfmCILQ2&pfvbNIm&pEACS@AJ3J)<~%F?zQ|;` -zo?mr&`MkCNj`60Qzbp`{R_`Sg8r13&<2qH7PqB2J)yaU8>&NBS?^X*9dLGYScg6AH -zqUu#Vp`CZG%WZeDU82QlyV7g@{-mX^)~)in5)m5ow>_e3YUI?;qF(iDa-}PULTAid -zarsMAsE}yl)V}?_A0N&;|K-F={k1P&O!2F|7*pEsP^!MXC(UE+q!k8!o&GiTU*|~d -z4$68mId*DM#Kp}^l3rgjPrdoQEo5K0Y>LCeIf*)7_0O|OvAt{ziK`F!JTpBY<-g6= -zb?0Yv|J$53b7|K^mR(H-{S()Jd&0rM5LCc$y~H&5yJVhyN0!iGu7oq%KGUBhE0iDo -zQk9ilwbE>EMz)rpYuU<`5xY2-uHavD)T;i9n@#SaTgQ$E&Y1IPrj)70{$R!054R?_ -z3%JSh;Y%kYZaa^>pWzHO8JFkKgWJqZJ@?ZRKjFWoqXS7@HisQCRvX -zMDh5K+6y63?EU+Fxiswz9ax!zEni%DpW4v*%YRjy5Yx<^HC?X73x8dBCNx#~Uv+Tj -z4jI*>4EGIEcKy6MMUcTFsJJxOF+HbY&W;B!g#rW|1U#nei7<)RXP(xH^tNMuw@ppL -zdDi@6Q+FTh63_Z@`~Le^40#K9!_BH+gg(2z!TDd0^2zyI!ym1>t-)*&cQx0dV$z<% -znF8iV=iI-xq>|~*f*MYlru -z -z*Y2Ox@LY|_dMaO|mqdSi|7T6lb^e^I~SSV^zu^n6a7l>syI1= -zRJf14TqEq+Zk}npU}weLuRr~g?)^NU+tM}9INIijbyT1eACLI_St;L*%$**#?3s~u -z#M|4;!?455&vQz_fxjzFb0?}i7USe~__#xK@#8P9OQ&;%CNnIJN|ob`k0?L-m3?8+ -z#u5jCde^Lj!WYt>JKqfrWn99_z>%)~L1LGN-a>OzE!CA`sfXE)t=jm}UB7U-kz>$= -z+b&bSnN7TYEHeAytmDBVkuRo(tc}wB*iv=HB{uuK^dg%D_Q#dDSWA7r#AaHEaXnfq -zI&mRqh_toKl5@doJI*S8+B&~`_d=&G^&%0Gp3W=Db2)++vo2IHkChHyzk9`XPSyCQ -z>9<#3_z@TXt?GBF!*lMyP_1nu=3nyNlOM02QTE1t$`p6Qxplvm%-{3d`O@sLRZnFa -zXZ_!NMTEg4v>>IlAf+U+sA11^9&skQ`UMR)LYJnR``mKaQqwjoz0YkK$8k&JYjKMt -z--a?Kwyb}ZF)<{^XNRkBJ;VY`Tt%{bm -zt!u4UtG?d1#&Pq5oy%&u=bTS;UYV((@^ikJ(XMme9RHS25SW^FoS}P$a8p!{_@{r- -z8Oif?UoA`TF%svf5-Z$MocF2l&I7TFvzxV^JgMAv$?M*}-!s>Kp0nW*@A6Mxw|;My -zxb`OZn4Qb#pIcLy-0FY1&FuLRQq97hvFB}zedBW7$b@?1&WXm|(`SC0em{TNybQk@ -z^Vb?dOa`J6(p#rGty5xM`+eH1Q(oq~Kf9^wN&2?uU%BLU($M7d@`g1xvW_3=^JR+k -zoW;ga8@J#V7gN9~#dFD}A~ -zabMXU`(W>ps}J=)DAzZ17_1GN&vCZDZrLo>LoYX;n7U?}-}%Y{y{{YZBnwXP?br88 -zz2mS!Q(L%hYEos!@~NCY4-=h<$L#W_);EKgV&7z_#+ru&+&uCHl1c)k0-q?{9jbA0{JUkb6hjaJu%Hf|4f -ze|UGgfs&9&~){op;9mMqG(R>)sDYh@N2 -z(_RS+Q=ZTGkyQIu2u6VSXvaBmmQs5 -zHf#6i@-v05A1i7+>-FO;P2`jKd|%(qi!aUaS{JfJGrfITi<5ig-Znw`SyEH^&raNO -z-gLHxamTVb%^7v7xgmm!G^YuieII=K5%0yAg2TUKoi=%A%=Oyj{WdE(#AR_z`MUqk -z-zT%1EoXhFbTP)We1GGvK~K*zW!!Z3c}@Rg?j&=Ftzu@K;;_xYxqQLId#B|;o;5Jusm+|V$u`9HwDa=ioRL~J -zQ%b}&7Ylg!TJMtMr$2twJ8vuddIm>bH~i*Mf?B!WRE&ym#Awi -z`lIakft}?Z(ua6G7Tul1$lvy=q<(h)p^E9-=Y{zTxS6)46|J8x`m#aOCgS1R?_z4~ -z*-yLqIU6bjE$x1ICdl4BC{XO3Vv^JGAZMoiR$WQfm`i`MgzO5}dJ5cSwcY%jUtjTT -z`VZ-Jm;8_ge{=ff9A2NViilVHuj;#0*Q=$=#kH1yss79v%dCuiC%(JV^fKM~okRVn -zC-U=Oh_{veYAldhrtr$cbB_T-Q-`EPgFpL~<~hRK+q^C%-PO9`XMAMm0qGgrS;~^F -zx2fOvPkud5cg2ONQ$OY2U(J~CGjc8apQ}QP1qF?KPp{wgQj+he#OHHs6aH}*U)6oJ -zR^RiqyO!;XTVK}O{bqE#ZnHIEo^Y6;>j|dD)%7a^#Z^yBDRML(4ww*hOu&i9$m=ts -zP{Ra+z7&ml4UP&diVXrS4XP?kP8|mXomh?tF6L0KnCxV=qjhP@j6DyhoRYoUJvVMv -zkmTJLbC<~&Ed5l^Wyv*p^ORFlV%hd)pPy%8pSquiWmWRzQ+hsPZVP`3YQ!a-Deio{ -z#OUDPwx`eQkL`1Pd`xZHhF_aDP0R?quvmJkKXc-;UuK@E^S&)O_Cs~0js0(~cgr@u -z_xDNud?)1l4Bv(atIvorn{0^mHCB9Cq`1;&Rp?A7ArGy|K&nDybs -z%c9Mmg<<9{r(_ehcW%F^_hahohy1CG4u_UW#~t5)VN+%P-5G54&%Wj>?l>L#rSE@m -z?@}=b1=;In|DU~OotQcKXEdjWNzKcx3yh*1T7&K#PzzUG7C%}0lj-c3Pv^FsT)HB2 -z_MIZWyH6&?+?;*KXnxgX@4{e@WZCUCy}NY+bq-Yg;?ek4L5{vo -zw;3~kJ8su<+IzL{Ll>XbwBz;j9k?CmUP*Xy<4qV}`>UMfTGiXLrM-8uWb8EvyZXPw -z=XHWw$i|Hl2UQY0W;g!Xp?aW~`yZ+o3 -zJtHBJka>oslUhF~KB!;nUw1m$=E$Uz?T7ewY1WrWD_1{JcHOkG>6FpuTN6DpSSI#O -z`s^ib7@_@J&{X#fhl%n=epjJ?6OZz{^ziSOU+_6-zsl+t$Dbx$_@U=_e#gH(%pYx2 -zCv9Xe{`YZ1#acx&rsKLvJtrI%(3qF3Z^$ -zb)E}J&$_7MawP6*zwqUbj5bZ5UX68JNlH(8r%J_`J(9V4e@1)Cq#S9PUn$An#~4jY -znZN8m{-ge!JWK25TV@*y*;tE@=+3{u@VjMackhF^uhU+ldV>ETvMO7F=WBjFF^&O3c6V_QT3Z2>eoz<*}la3d9?4J -z`RO^!R%YR_16BX?^u+%>)RZw -zH1~fGK0j_KT)$hfYUah9s{&peHz!@;y>LjXq&~|+!Ly&E({z2DZ_%Qqrbnk6z35{N -z{Cet$#*T$7*X?rI&cB^fpZ7#yHJ2&xx(PoPEYn+cxYVd|YWn1w2{UHhc~zZ}e00_| -z=AwhArX*(HeK4c?U6W0`V%Ore;&B@-Kd(nU4#8sECU*@4+ybL8q}{BM6b -zlmB+glAqj9tKzRrIAGZpB)p?hT`~EhgKeC&footMb9HIFn$~t{rSltqeRfQ5c{M>w -zp@r#=S>r@D%h}FTcKv?Bck0fy-h?2Ii^>x1Ct8l=dOon9e7?v3j`U^)2Dj1z)wU~3 -zidJ$P-F1*L-OYYV$Yj%-$}^YCX7eeYsdvA#>x=vPT<(RB3PftBcpNEv9Lly|{GG2| -z@(z)_a+WFQ8@}H1TjVrF>cW{~2eX-rzNDS}tNtJ$OTw%DQrOFqC;W#QJMZ2%yreYm -z@3{=S;aLR#lxG?F -z*B&!`vE3f_b|rhtM}}uQHQEi?R>lU*#x0zih2P!_TDHenP^rk%dsFl*_RAmS>~r!s -zSY|NomQ3Ec_(Vn?Ljgk(gZ4u8L-k)~&(4k(tr2iKbhV!Uc2CudlP!~9XuV7Q+WVp0 -z@Qg~F(EhtiYzjkr7rQEpJo}s&s;!ytK6&~lbuV$_Yp0IQ<2Z65wDR$zz76kNt)G@z -zbS=HD+}VCC|DN5}hqEqu2`bO@68shZEvACUE@}Iut?OB5&n=f*y8r3nx7UmuTG~GC -zV&geG<%#m0Gk@P|uBpGhSZ#s^-?Pb<%lBR8^$=Wf<)g;5eI3^A-1#C~wZl8s+P!-) -z`>5HP2Ui5VOQzlvv<|vszjND>`~DrZSKiH*UZ>!AX?M-xM~@aAQf_^1eod6;(6)Pv -z+OC=_ht%&lc=*lf*80#*;otU(OunF<_NzZ_jqCo&|5j^HU0$L6J)3ny9)Eqs)Qi{q -z9yiQjuhfr5dd|#AnYzk7LQ$+zJR)@V#HufniYD5pbYi&=SLUc)`TT{O -zOX2e43ibOwGRNKA_fI+%{^gHt?RmQht(Q(`*1IPESDqxL;kK7wYt5Z?cly2-XH6+y -zcucVe)6v>Sc}r48{xs6Am0W=&WKq(L|w} -zBSe7fIWx-wMh+qFnXIkSjVw%TjZBS9jEoIR4G9VY3=E744Gc_-4~#S{xcVE*w3s_r -zd(^*bTadc{{A{i-Ygd{^yYendx*qhwZLfXq{dXOaN^i7I-eV1amDHSIz$BL#z*9G+ -zH78L#%J+4dTSDWDuTJ+&CQ85R?f3q5@UDweW=#a=zw^%+pKqSUQX{=Wq5k*|)0lWy -z{V-1B>v5r-esb=``|tgq*v`+M_%NA8A-!;w*Osh$$JiNn|F(GQOloO%k6djR^Lf$h -zVEd9Dr;7K|yH@eUP1-g;L)pTw*%xyfSajv3nV7|M`1zIG*`G@x>=A-3T>~cOhK{O>(T8>`uH|vtj+h -zqSF@@qUJMCeY>^(AG^E3Tus5&+Lna2uPn2<%FdW(XEXQYftn2TcdRP -zpPy}XS<-nkj#ukHEvx^{&dn}R*1M}~;w|UH3lByuo%VTtBE!kXg+`(rQ;jDqi90dp -zjn%&Ln??5-7k=5%(UllXFQ<00 -zP44O|mTZUew~;F)HF&R2{>rR%VXyX-?wHPA-$S)2+r8>ME2{M`CLAffaPi&C)lpH& -zKOVJ)F`x6ea+Rh3#O3Yo+p9}dx1DA^xkYzU)`mW%lZ!!&pA|9yyg+lF$t&52c8N}|pu1}W`% -z|18`rIjl~U^PL7eDXzK=#E{ufWofc -zQqfg{qBHkQ)c7WO;lq7_W*47k{`~D?YhQ^kcr2RvE%=m4qwndOsL0h1Wfo4KzR!}g -z{?fu(mita;N6q-3w!4V+L)*pb=fd8_Z(ZK#r=mJF&h(?EwMUP&o$t9CUTb^lSOQ02n|1CA{m?}P -zr`PP^?z$%_67X#OOJTm0h~?{x-mVh(%D=L>&HbcredlS-cbnV3&7Rkzd^9`AcFBa! -z+1u+5RQn}dJ@?S<_tb?xN8hjYIyRBp@=xE2nxCRFZIZ#sPnmar-XqrWPE?~Ov-N<==5rmwK3NZzxjZ+rIkpS+&PY!z~ih7jem0 -zhCdXZaG=zHZAN;oI}3 -z9e%{_r4nJsbiC!-r(mPr_`Yt%Hy^$R_^7>kX7S};`BTTLEbhnk;lFacEpue{FVd}; -z#5iNN?f%;zXYP7;-*cV}$D{qHx$FdSMI&f`bGVUL+uUgC#RNL?QqpyYPI}pYUA5%M@HwTRzk0A -zA1zkCdUd_xrB%WYif#V#*vH-Kc)y$B>djNLB5VJ=)xMja(bLS8lm5YE&!c-b|E7E_ -zdr}&*$S~)R5$n8(ck_!MTssi1YnZ#X%Evg-i79!9@cZf|QfKFDd9UvmvTbCVlc;_Z6 -zPB?n;>DEi-nkR3XbeXCKL|=>evsAUX@kei+@y(vI$-Jvr*}L9Inq0e{_rc;@^urqE -zsW%ud+jab&xz(s|-)1?jDa@Zw**A0xb7n_hZqU0?uk`o!{QoYy@4Zh6d{_|1DJoRH -zhB2SFkZW=NEQOjT6Zcj1yb&!Alvl*xFFdsJT$Wcs1n0AMeaA?q6&L$U?kGRwSXOY1 -z`(B{N+-FnVrH*&(;n}qQ$gd+h-;;_}S`JP4u>M!Xq&HLfwGU{oI)86nj#;YK?#)s6 -zR&C++lCtGly6jT@nY-LkOA=LH2Y72e;k5eaU?FDS+mfM|*5P#XU;N|7&wiPVmt8*_ -znbz98W2~Dx%~{cq=WDLv%4_C3_pf;8By)v}PhH;U+LYy|BaHqn-SlxrlO~TN7kF-V_Fv+n|t1OSJ17ZoT|6GCnfLp -zGYgYs6R6PM#koaxbyfH<0noAd6PS4w?CMtuySK`!S8a7uH-#a -zeHQY~+x09}p?hxG|Mj*hZwijj*;>D1X@J(PO#hj!Q#JE7ZWy~swd97)_Bgi5^lnqs -zlg--C?+PkikcxH7eNcHp`SF}L1_m0err&usC$I;FS)XBk{aR-M_rIzmUfokOX7x}JMVpF5?$}S=%N0%Esxi>&3P;O{&0G}8&87o|G%5AWS$JaE)i3CCw6Ps -zlKRJ{BFkH>`&lQ67Mov*Rgl#G5&1J9xhZ_>#&(6BH`0}O95+ROQab@r^9mnUPZ)~&o}QZTXbnP!I -z_YJeWu50IAKOCdDx@n7m-g -zo;_b`^z8#A&7Spb4p7d_$@yQusZjHEyv^bA9G}-A!WweY_b;2}oJ~%C7@4$S!jxqx -zD~>JhOxeM+{o~(y|H8*DQhT2=9lrGO&zX#qSHE9YtML}*Eq>g;Vvh7_E{@yhkFPpf -zv**F(**p;wvbKpR^Tb^Kb(ka6BQ#*CihB2|{4CqRM;6?|caFSa)0}WXbE%l+$+KDq -z#h-m>dwS|wHyK%PVR&V@`OcIk{a=&UOl{h8zv$?sDH%>*zn*ZNv|&Z9y0Yx##iyP`J~+4T -zw75a@4-3KhP1>7hIK)KrZu6MqqvZ6+^qSrQrwbF)PI=3=nA=bN6qu1CcaWQD=H^0{ -z9lIMYb_t(9tZ`UwaXi-xOVvkirT^;vj%VI-TKV|ehL4t8bY?o)yZ_#^ui4VwEF#`@ -zeoMZa>$_(!FZa!m-E@d6w^&i5L0==~++J4a<^@mcl@A;}7?zb0+}jfL&T)QAeb|0bjDy$e7e|0k)IZIf2Xc8H&}YXaNT+D -zm-WBg?%U}#Y(G@e`G4w;7krj$Pi)(FB6Ih_*DjkpO-iaJYqPtoSpTU_Vu#*apJ%N< -zgF|C74;O?Ub5E;wVVFN9)lQX}t3Zh5Q#@ystnklcKU-@8y#yFk0}Z{-=u5wn$~3T^M`r*Q_iL**Q?&+G4QrO -z6L57wtFX@WqD`~bzpRq+iHrKv5c0(7rKx1+9?fEZ)@gg+x$}E>avRhv>Dc^VV@lM+ -z%*_A7r)H=J=GAlm(VHr=xb9-p((ML+X9Pb#pxiNGk};=S{c)FqJDI1iznuP*U-s(T -z_c87)vv2))WZx3hzUXHfC+|&bE%ifc;rairCf>g@t(ag)2XK -zO3m31y!Vr*e3nUjBN8Y$MN}a9{jybRvK}UJCwFCw2|rGvH~r6FT=WdACG42nD5|yL;L>1 -zJ3^)FLtk_%8wLtg9JQFGA%C5ta7X(S;p-f6E+?jF6dws~ow`lt+xIEeazcIgI-Ql6 -z?r#2>b#{ySbF-Ts25qZc)^H|osGqRPy=h|8M)gVenEQ|VJ(>AoyU)&fGkka+GB=6r -z%|6E^dW!XM*_TflvXVi+c=?-NKacJ4`Y|g#-ilv&n^BOYd*!Ze-m?u9%zXF#Pu(75 -z!tZ_jaqtrJ^l7P}7lKm1$2 -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 -z$u-W^+$(Czc5SZd`ayq=< -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 -z){h6bCFd3(1NDI2d7cKZ;auc+K`i6`UFoQqp# -zcrbkFS4Fme!dou(anG|GT+Lli#_@3-9gDzmtA4VWZE4 -zW0$6A^#5&s5aV+4{mdx>%>T7JZnHI8<@0OCfBPbKLtg0azIol3>y7>YCm3A!zA-~# -za_F3CMGMZpWcYqc$aP{?h+2t8;g79hYEA9AJ7qa7_OHoGoW-H=UhUBr=XpV@1txFr -zY!rUswKAQVbpglC{9RMJ7MwX8a_;uGXEhy5&F=V=?|Iz0V3&Z|WtRun{jPG%Ziv6L -z@#f=i{#t(JhUyDHD5&JzHx-Gjx4&I>_2Bg8_flS)+Nvg>Sp0Bi?u99P<}EPDnQ}ms -z;m7_S!T-PI=dRTDSQI?<%lrSg6x|Bu6_ssTXwF=<(u+gnr$|+zw(>=$pglW}u99Ls -zax^{J<2_gR?VX*M-?n_%xc~GOiD$D~zp$=JPnTb8vN+k>+-6qg!OflB@*J~HwQ0xK -zN5vm>Y_yxf;B5D|m|w~zW#PifhaT14yW!&eD(+g{J=4I0+>iFw-Ftp_H81mlHBtx8 -zriE4)eGd*We`)_nibbdSMz+Z1^U+85G{;H*-D7=2RHr9R>do`#zK0+F*<&sEj$QK9 -zcVW(gZ&rcxctAG+QLHoTYdNi>UI+duDrj!FIVgrzt7#H?hd2&BwB{_Xhpdc8b9 -zkp~*~vTMYq-q2BAWF2w(Tl($LmuHM8hNlOYSZB({-L`TjAj!=W!(WSV=U+;i_!NutHFGXniid^w%+;*YJUrzo?GR+7Mk -zCoNSG*8gsr*RyVvy8LX)EyF$aH&Sgm^L{p84?JaMA(1?r$$FAp9&b{0>0f*#7WizjI`&p~#_pRF=V^;K9eEVLJ$%-eG3v?&mF)EvKiQD@r -zv!cryUHO>84;N&jQ>HFD>hOF2b1x=mrKKBPCd;jM{8Cmddgx{S+=JhoF1(R=zx&+T -zdn~)=T-~+)ah>Uzgab?eGL+_Mmc5Yom6(1}eGmKYw3?b%bI!Q83V!Bi68)oSEp0pB -zp0hFW+MZpX-0yjPDEh?ex$1OAuhQW&R=@S<^@ZEtZ48Z!cS^B$DM??jW6kw?Rrx+y -zwZDyedrt(f+n)M-cg2Qk-{18wT4pc!t~h6A!kJU|cTU(~;<~mw)xmW_(YN>8ESaa| -zvP{!qZueMod+U}C=OEE-wGT``_vSuH3JwjZzVdCS%mK@UbAq{1b60$@5KR|3v-nco -z>vUeReR4T#TJO}H6@KuaIp^i_o@Zu@mx(Jb`oJr)JtomD$sp;^TtB~#9jg-z_SPSG -zeQa&>E`{-L5S+;ClVy~;G-6kC;KYB2 -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 -z`d$c{oiBKwAATIP{YLT=f*6 -z2~$_;vle)q+1n{v#&|q-rqjoJCs${Qh2NNaxW1w4>8G`kHAa6E#9kWTGV4Ejm2I`5 -z&04uhZl`z_Esz&|cFxCTmfqUKPYz^S>WG!suDKu)d{FC;p7n&YAHCeAJR8+{O#W8C -zZ|dsxne#Uy;@`p9^+zUM|B>k0c_C=FU_jNGiAybB|BPPG?sqz1vE!?o(s#~X`G2uC -zWA@L@SO4s~nr`Y-84_n+Wl`5Mi?`S)tkEbHqbxqt`ADzD#xBJqu -z*B#p?=Gu%%J%l3=UM;O3p($7cd_ufbT0#U -z{Jk~zuDOX=9CUmwZhzhWOwhc2sr(=86)Fw$*tpy-@f+SWZMV={r{B=a$jEZ3d8Hgv -zV&OU6Lgtuzd|#HG*OvIi_4dqzT?$@VzZ-8n5)M=@j6?76{;-LM{gv6- -zGB+uIXD{C-y8iI&H#?T;AE;mZe&dJK$aW{c$HB^C`O8AnSWKRKr|S4^rUD{-!#a$*Jl|N4}QdusR -zYtyywar`MAa`KEzKOf(1esSZhmGhXU6h7uKm^O)np)Yl3=|c0^LLXhtB3r@wQ=#t@ -zf2{cF^H}iru|JESNon$**>*;^Q0hyHM_TLYaP1lO@{TgL`u_IZdn%SpFj{oVHv6PP -zr&$v3Y1faw{TmIAWq2-ddStoKqNA#%*pfL%%U`a{XX(nT-D_<>K4ZH5Xb$6kj)*B1 -z;wrY*JJu`PTHh{ox)`ms=gh&jbyig+EcLH0?!LN9U_R503)8mlD0;E$v3CR{_X12?ul-Flxh~hc;t+8e6zv4d{OnPud5as -z`Tdx2`Qo|<*Qbc@ty=5golxSuJ5k~O&yxvv)~#91{~{vWBq~_$SlA4qE4yC3bOUG#8MPp06No%Y9-dFmzVFLMU6cHB3RDmZOgtMjmW -zlA-*IeAzDfb6#A3UM{tn5F5aD{(-N0?S~nCr&BoWY90v73;mHl5mxoHgpTe$eg_~^CJ*l2ZUZS#5aj%>Vm@8jaq -zh)#Z^tt%gw9q?#~Gp^_J5O?wJtBX-R^;DUE*U!gOq+V`6+B@4s`FhLI-`h{|L|JY7 -zR1^P9l&du|>3jH!eH)MHolM}?$x?KG-VmwMAER!Ub4>e!vazi6x<{9;E|NCSW!h%( -zv0HKt%hL-B7S61l?QuhXio*B)WxwQC6nuYT(JrIZnO>@5WV6@UQAv=u-n^H&B|oK5 -z@6&~PK7ow87t9Y$Q@-M1A+&T?>59z`A8-C!+-+hK)pWF3%;>>|ozocw+8G2M-M)UB -zf6p764Vy1YNNxH*?cV)ET{>NjBF#yE*Y~hloGe%HnkMPN-G0*WW~uG&Wg&;ZKV0>l -zIbzN<_VcPu8qvRtnB6^f-rg!M@L;SzyYTbMn4^c;`2`<#Tx<2nS({a9{^Cq;R^y@M -zyAI}$s`iV`@xCf&F=J_vyTh6bt^XSyU#Sq?WVhzA$b_oqiDAFP56z5ytZE(H6jvqa -zHsfwFm%^k|{d+{yY@Oy#?LBo*zcjA$tXq~jbM}?&<6ha!jh>5mU3$!9_XNdC8XKN# -zsb^;^FH!n)XzfGRti59MzL~j88a~df&slKI%a=XmP`&*7eOB_(b~1M-B|CDiK5Ch( -z+c0C{Hk&79E7xrCJ^X>Uvv1n3bIRfk<_kVNK9P9Od`(2GmCB2#**E-z7kHePIIl08 -zKe2Rmo>N5au8g?IP4U)|wT8AUS5N$YGk(MDNiyH+6_#9FylG?Pjm@VmXZgSJ{AvGQ -z{Kdcim+EupeXk7YOyvJn@A>Wg;X}`(Y#HVWy9sTu7MWdasMKS}ZCf*c=Ya;t$m5Oi -zT95x8{oHu*yy4>aDI{Oi}5&iEbNt3Lcc;%g?% -z|0vnnsdHucQNI)Q4HZ!zB*dm23^{vw=03ZSi#}8MPo0!IvLsICEbENJYdV)G=I&K& -z-~2oI|NPeUc?_#N|F1t|;p=v>|C-L?LZw#j6YF0~D^2^8Zy)!Mnd_R-h0p{085hXj -zpQk_JX~GP{uNu+8TDK2x{1w7fy?FDtALgwLX$jYCtKGJA8BD&Qx^sGcfaBF8Q$2Uc -z{%_=NV8}8~*ih2D-QcXyPsOC}=*g~o{quy*9^?tW)1bt_^JG`SyN^3p&6HdInLShW -z^*#Mn_e#Z%3vD}?`{JA5-TmM6y8OJ3Zk2can;o==ai-?3m66M*e%U_p&C31Uxy%yl -zmw$=XYHZK`SiES9@9zE;|BnTHlXzFJq!{SDcw5t(+`mhmi*$SS&itEH+h>qlHk;dy -zP4C2YhE{%s$p`+p|ByI%RCs2_eFYVM@#Ju -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 -zPN``8pOiWAVw{|?S%=h0#s -z%z^GRR%$Q&dgRL`?FQEemAvm6wRau6U!cG!siC^=L%_UKGh$`dT+MsVB(k@@Vb0Xb -zf|B6kQp@x6dN=IZ_i43bkicwHiMDW8?}yqauDxVvwoAX4J!4j&Nqs__wbFj`kGz7v -zsx^Aw`}Td`9`0A4IQy7e$DZ=CKh^KkF7xj_VDm@o@!|Nra}1f-);R8+x-;;=|DDlM -zktr;hKQ@P2Fh*u{J({!F#8AucfMC1Qk0V_|f1VzeIM&3=Is0yG=$(+a#YXx$0<&YT -zq)lnzdvPx*ps}hjSo*t2VUUgeiaAprxG$=C@>R3h(r=Mx$k#20)atbpP9ztyu*`J+ -zw&M7wz0Dn)jte>FojW6W_lW5He~oK7mijdQ5IE*@<_vf3#Ai&JZ)8k9|2lGk-KcLx -zYW_Q|>5W$H22%{q^zc-Hv8m-*2`lMB2tEv>gz|_C$^AsJ7cL#00 -z>zVOfGD%9G!$9@a{L0oI-Nsjc>SsP@<=??NPghPSYog=ZndYvS=2bpd7iCp_`hiiX -z|Hz~M1*ykxFLh-Rw>KcB>t4Km?fgcdRK)>Z-d`m;W_iG+3Raq92Ri?naF9C`t|RMA2X-Do*P@c -zPHy6v`aMapJO3UHow4dc*23LshC%WtX0JXqf#2?t(p-mz&LeBTi~Ie&2MlL7WHw)! -zb^Wwll7_|ch|BePQY-FRbDf*pCZg|EY5c)Q_<->qH70(8?0pa_V-Y?*8iM38!0<^8cp(?Ry;B;e3EAqK4zvR<#lX`Cm6O -z+Rj-ro2<%up&_(DThU`7tLx>Gqx@^0#kAN*Wp0~tbw|#E7i%hd>ce-u>t!ul>m2ju -zd}nCrC%31cj{l0#ZW7o1+wiEKFSqpZeEV;+xvV4D8<^+((f=YF_uBN|*O`mUADFtF -zi0Ld`a5`-}*X?J*Q}qx1J5aXVX1dVJ%eVPVel?bS>8c7<67&>ivru>|*6DOB@S+3v -zzbiYZM4yd5_GI0Xrt~Ryn;rG*p9g(3s{5X1%o^P$!!(B_!u{Fo{LU-Rdy -z%};2z&JmlL5T@89naF&mB5tDKWgYK7jgg@pr&j2%HFJBbT~IpvzJk@I#JRoItLk$W -z2Tk$S?sjhc^kwqrJb8w&3mbU*em}4TcHuW4R-79n7*Ex6{ -z^XaIy-RIIz<{j~Uw71^m{O+$yt}9g?Ua^()%HD3B;N?}feodbiSiYL=(H9Rcmdj6H -z9J%~owRFz5*^k;YbPH>oay%0QElM7RM{jLdUC-vXTGy`2x4K_g{8xtmY4i4i53e~A -zKiVA#)cm$M^VR;4mH!uN+p6%0PHPPH&o9_o*q_2S<7c$MerF2>vmhVncj->%zf#HmP0y7a~b_Mfg=W^_iYFZEK?I;Q#Cn^zyW -zsJ^z{Fkzt(-Ma@j06XKL()MO8e8taExYm^$inPjBv)`q9(H{6M#P -z_Y2ON|8w15nf&W`X!5TpV4kbUg$bYT*}G=Ni%oK|WOro@`h832M%Nk37fh-Nw*>xs -zy*?%5bk0nXrLR(L{@rCW*Z=7|8_r$MxaQ4my>*K%vO%!cULrjH~pfszO0o0hO)hNYkys9b~q5(xc;t{b;AA73$d#{JGs@p -zTB)-wo#m-x{mCgyAC#{axh -zsnVT^tbPe^cUD?ozxZbH2A1BCUPD=}B!l`UP0`!AE1TWtGhEv6h;ioeX;+`8O$&K@ -zy-Pp(OOLTt`_p^PXRHGgo}X6I%U;V~CorL9w(ZrQK9|f-xlcPEz$h%SxHDeUE^?*# -zJND<*i~RoAE_6-G-Tiyfr?~~kemJr(EB&}}Nd(`;q_zvs(w>SPYus4e{)-xO=S -zJ@ef*&Rb>9ZdO_c|AZd#6r0AUV9+1CDScr;+#X3UCAac=m%zuHtKy71*d>jg-YK;W -ztXuO{li%yE`TD$PyPoZSh8m;I8U`Z>VEcEZ&kT~*><&KpEBzBxdqKQPH&ETa^

-zwlL{=(XDPv6<5fg_Ndp;4ZCRi@RWF#?K}NvB9A-Hc5G<=?z_9}(eLgw_pr)JCRg*8 -zkj=46bl)x3|5x^Ki_X-{} -zDQ?565c754dIhG+v)@o+b}l(1{<`H`eOF2Ng#vA!-KtwH5{p+jD|wWCO8vWq|6&s3 -zk{Yeg_r+Q6Sk6khaZ4_2#k_TE{%1FST97_x-Z7E8Hc}1CIxnkp|4QLWda!u$@^9R4 -zt;Al}OkVwmJ@`wu;!N2|O^Q#7N@Nv2zgIR>VO`8@pjWuc=;Wu$1!pSuXx5$x)HN(f -zG&il^^s4yebdxEj*UmbbOe;V5>Ub>cchv(~sv#VYyeCCn*c!i0vP!aOLRZxLSK(^v -zFA`q=aNf}?dTZ-q+27h(4u_e16OO)~cK=ZGI%mP7zWX*Ws0ion&j0;!p?8(?yc2~w -z*I&Gm)i}IW{6fmEPp958J5Tr;b^K~*j<=y`c*KdK>gV+@Hk?iOKC^Frx092Sz@~cN -zaxKO!54Jp7o|selZgpPfQjq2~DH%(#OC?@L^An^ZNz;|_qo8E3qCcnJY(%jTx -z<=dlgarl@n`>74xpJO)6xqQ=c=94}8|7OKU#Y(?2=eFANC+(o`#?{s -zH~szW8|zb69~RTRcCLQq#<1PSjp->{9>NEBxX%eX*b5B$0Va -zK{Pk&b^V)&B~!y4SN7cS+YlcoR{A3KK!pBj3Bh!+3)V{2n|ZUNFFIt1tvDn$W7)}u -zuYz0e$Gz^Zx@&jNpTkRiQ@GcP)RI+ND&nX05_hG1yquaaxiaL_n~bf8>n&$#hTn;{ -z+K}t@&~Ne5OJ7qf;?9XlO;GxyncDgH&hz6FFI{}!DE3k2MD`!PhLa){T$6T8OPgpC -zFZNLFUKd^TU>7T2~F!doBv?7PKqakEX$ -z-^p)8CK_;D4;6C_^6U5|#Pe-Qyw|4s4wEZ=@pszf1ldwf7#a}Y}hV3E#`f) -zg09MPrCk9B9TKNLw~{`v>_k`jngbh;AN^pQvgyY6oFxf0Yb$qHcDMeroz(u4MReiU -zn17t7PO)Zb+>M)l(L9aiptsuVO=neoRM;58PM>1lywOw9Zv{)}(u?7qqWX{SZdVYO -zcd5_Zrt>q@X%9zyk>{IJ2lgCWHtWO@!aVbpYq(zsQ(>$-*@8@odEd-OD7g?E1ATs -zvRr_zirFfcBhlQ<;dl0byX7(YJ3=S)UY)yYhL{@gd>spD*h -zut`6ct;t_s{62Z|g*RJ&SwDOfCv`2L?Mq(46V?KK$9E_9&E0wD-lNI&=RXE-sM##d -z+BsiVPJQRpSv9wXGV_;S*f(PtV{-a|Lk2qko;t6ej93vhRQQviXQOn^fxV -zKh4RyI(s@z_I}!BDca+xXqNl+`I|iF!sMiz33;>Z!^Ml9J?k%Dc|gpw`lx}T(iPr- -zX3zVl6Q{m%5_ehc{YBBF#W;ClLCUm5J+;6^!8N@sTCbjPE7|_C@vyYe-2C!e$}_`* -V{M9ECTbEAFInGnxB(k`Z5db@_kMsZl - -delta 143922 -zcmbRIob%i>&JFME>)+gEeAQebru|^uG2W!p9kHD`dh?I$Yt8;N-FVRncf*d#Wh+f~ -zRL=To&b#-B;2DF%Jkr9UjIoSyjO+U3>w6O74!8-QFiGY3RJCTRm3rSitBmFp-lhdx -zH!S{{z5JM*A^*jYb*|pRrHxW7QKvr%rPyxi -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 -zgtBLcA8viqCGw=Q6TKy` -zYu?mGSYL>f-L0bhxcrGS_mqfIW4TlHf0#7pH_!X>Aiy&>@0sR(B@c0K-AT;JDeKUUK2Ukp0p{}FL_$iS%I#b`Vrp`_3ldi{eng6QL(ZukD#vDqwtPJQJddc -z+0We2u;zOAkzYbQY3BkzF+TedqI05~ugUPyoC4j{^HU<5>t0QrYo6mXHQh70EW+kr -z+wD&uOJYKls^=cx&fG2iyLqnb9E1A#x$P#}S|RMbyBDo8I{E#Box@MQCewuG@_Ely -zCQplhxbxtqzT1;;Stu_)aQ8;Y%t;H5P3|r-i*Oe8dn -zm+&r-Fnc{=!L6|4myF*0VPdfEd(-kXIBt{Ko?klt_G_kB{LKu@2%d1Ku=%*t`hacI -z%IjZM)^H20Zu@lITrP+zzot?k)c}$AU3?{v5j&`vy5bt#VJ1y@%gVzRS+O -z-|t -z6w1)}7~1)%;j^9PR#pp@OE;Mrv_qdWulTmivg`Ka{npFgtmw7+dvp2{$xize?XAb! -zckwKEs>k&<{*dofZKDYR?Z)bjKl~QXEYqkl&ROPg+()RiA$Q%BbkWL*OLQ{7ZnXO~ -zVn=wwKns9smDY`tURE_#@jZ6z}n@na<4p_PEyXRvw-Esh1voP%+?SyBoIf -z_47>=BK{~yUOM{AWR=xFL9HpNcJpigXEOcvk#aoNcW$ai#w?eQduOLx>Uwir|8lKj -zHCsyPVS!_8{P|ADF8^XM<+^b0)R~xPk{W+S{>CTyPcdEA5pzh_OrYK%v0*NcRg_Ri -zt#`jAe{=bH-8NOr>6^`Op6YPg-=B6ssI7ocNpx;w!}FbT)~>r`IOi9c?yxI;Ig#5? -zjMFL3EA~0>p@ZF8)516osJhHKueIo#YAc^h# -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 -zT_o(5tJZ6)`c_jfS>@(c?e!NQxV?LF -zt4@&5(sbj@rT1B{@SQXD>JA7~{d~S+`)UG0C|F5hl{b!PiGL!~vNsOwQ&m6B-b|tk -zw0dSOe#&!u&eUJt#-ArITb|eS`F&2wl^Z{bZf`t!&x_S8u5tZ=W}}e8R%_GAzueWd -z<-+n0$yF?gHhfyW*pgvym)Wi^cIDt#Pcpt}^xOEjDtun7s6R8mn{|o8(O=(e0vy)v -z(iNx=C_i{-@;2GGy{kG7DlT2pc;SLfPEb|5(*7w)i>BGWyXg=nb~&+q+a}E$@^4%o -z8$35Y<-}$V)IWO_7?51~$^^S%@ -zuULwV8UJ$~@7w4a_xYjOImx)g3f>=cKJ@DJ8ooR2a&pB4ZVo|f=bPcbnD#x3mkGS9 -zT4u5Q<=3SeCz2*s)Svw}ktwE4Yr~dB-d0XK+$Yc3X}CQ~?&SQvZE^WiiW)tco@}4A -zVgB*1v~}rUq@7Ic(?d4qzn%7hSFU(Nl44jV!|%T1%UAKY+^BvNKFfvS5|ia5hs-Y_ -z|E_GP6J;zCA#psxqsi;Gjn`VE$>i1eccoW0Av%XtzS1+is{#U!(H`U!Wqc7p}oR;XDr7{U$V|CB` -ziu+-CFoIXUCQ~v-Gt+uaudHmwy!z=pj)!~WOUmD5?7lLuc)D278tEIUtM+Q;G>h)_ -zSvy1L9NV?j&MyrIm(0D`Fh~6QPqSxBx1D9RA4>Ff!ab@0j56Bh$EsPmQ8ozEzn5X9qFIB^q8{i{nW{!EY)ZcX^P_2&a#V}(|u -z$ddM)KBhwX=O>n2dl{OfQe?|aKr{RIh%iV*YHS!Wy4m -zZiV(OTZ+UpXB?kK~ufY -z#M~{I8N$0jWX?&4eRGGH`qRpyW`D$ -z`*NaCefm?k -zZrvrZmNRq0zN9ycTrMX(-s)P+TA%FT%+zphd&GXhs|Po^$&2;wtDB%v89$rVR=s7t -zy-5ic~;dgWs)m=?pe?`hdK0JpvbAuS@i%6&CW^V3;sMS9OUcDdr%Q+p39?ZykNZ}na^&6T(=C(_n#_-3u5n7%aQ -zdgeR3=4OfZyueSPBfAiq_#!NT!|2@*z -zJ{X7e1)V?r;HI|ZN5{KuesdRea%9%b9Y!V+*;6Gx6#>B%(MOwKhyj-kqVb1b*3C>)RvQ8eIRQ^*t|)y0jf8vf_|&- -zuy@)Sohub<$!lz)uuxLuuA9ozmy32hI=MOE{ysH>kA@FaLR|!z;!-(9ObS@0{5WH& -z{NQ@vnfODl*XouF&6uR@YtJ!jo$2yNtKD`fZmajb>)y1t?DT1a#}Bg242l<2*PmgW -z@YSfF^~8#{tNT};{dQ0P<%2urH9NoPU6C%oYp>B2u=DqOla0*#BQ=lZ2*l~EWoxQ^ -z`MJgaMiq0<)j|j5UXDPsz^j~Dy{_8Z{^u`Dn`7F!FLqi)UdN?ej-`#O*f?!kECaSB|NXH{JgK1}@k=;k#ZA6Gm(7za-2^|GY&knuX3v_= -z6^y?<9-WIg|0Cd~fz$FJhKb*-!{iiCxvjLiZxi(3bJ(o5il6)EUa;cQdH=LP`)b9n -zpKDqLKi40v&{5mLf$M`^GuUUEx8}eWLI@1%lbUYiah7-Qr~R-dd=BA?>+bNPEoSu -zzQ7Wa|M|fqlZof=temlNjr=sr;3M7DzvoE2@KY9l48GEbVx@L8V6gG-8r -zw@y_wR&<~8f1Ufeqwt^OpM>LQCPo~8dywfX$Ay~625Aes9`+fE -zF7F?;Y0bVR>%`C8`>eM2>CvOp#HGBAw~P23i11*`jxr7Xxc7^Jd}Q!cX%OmaGpuJujlf -z`csxh@Uv}kKk7~LXFvL|{#@Rv;5YIwmhZ0TO!+7uEWOI_=SLZJ?LA5h(`#}9nU}vf -z_i2i>nbJa`(^nRBr1pJkT|Z4{YqznCQ^}{-Yc~oy)SUU-meA((EU4i6YypknZ)O5D -z)3?>k@VKk2%WEHc-(H?!N2%z`8NUrf-^ZWqIrpdE$g1$ss&1pd$IO-sxpb2Ct1Y*q -z+BH*@zy5gYbw>Z+wA236xYu<>FOj(Y@1e{u)70o`XT5npELP48n|fmRr<7%ndVMGT -z`|ahtFjHG+$-Z0zjyH2?T7YPizU2uY!Iw@Fh92Hx$E?nL)8i)J5%4|Ko5S_M!|&CCIlo@%zju3`Iu&9z125X;lnzZN#R$@MuF>#WqQ -zUL>6{2$DNw?I6!Aa7+D&Ro9Y2tq@z;&c=YllakrrO#jv!ytzC5v6hgX9pfBlu37(s -zH5zPBb1Zg`{yE|A?3wR_7FW;yHZg3<3)k4Wteunf<0^j!O?Y(sn#1Kk|8E7bw7GKH#qd-_GaNL -zr{5ZGn49xgu7kC%Vsq%G8;U*-*QD;Hl>grL>c*iNzW38j-^Tpf*sL~ZxhhfA+WO*%Tkfk9Z$W0}xiZ)Wo=hqO1YNMbuEG&L>B|MT^YTf#Jz -zORrU|n>DqlWPiiiN3UxNSMFW7@$rS(Vu_VJCATFvWUtjY;fi6Rbg>f -z+0rT+FB+% -z$LD<%Sd=K9&&5-C|Nb-K((=SvUtPR+Wjx@uYN}lkll4yRl6I=Fk?pdc2D(7vW@B8A-BGm`|8dzEohoNW3{^WZ#Id!0=JiX -zN;Kq1xt#i|`1E0+)Y6%(pB#RMH1zb{mp3ipY&K7|4p@<_`IDJj<5s=C=EUEd7O;wO -zo?v2N-SFh%y1Xb=<2wEML3=80G=#ToS=Q^mAm#DF#uIYC#hed*ec9~4e@3>Ryy4Gj -z_udpOoe|1;*{z4`i*8sF4DC}l9bgfeA#!ZaXWL24S0}b_kYK)cu5DeIRP-JrKGD9#&MziZ -zpPR8(^8EUc`u`IiJXz{pwnk@f;*xJ$tA$vmoHXoOSyFUkQb|J1JZ{mgu_kTWD>?LD -z)r*`w$x(N{XHCFODecKSgC|UtRI<*-M{@^-hEZhDfwC;xq4>Gc1z -z=`{8J4%;UsH7UzdpZqw&bG>`-iTJ0lChsY3kL_@r`}|6S*y*EdtJYXH%{s6h -z*qo~?9Bu2KW_G=j7nZsf`lHA%KC|uFwRiUQ?3;}oB=Uql?>v_}an3y-&MTh+AAhyI -zcXYY@k@*g@wYO}pUo8IeC*yt{hrR!VBDi#oMc23p3%mO;4UJS++!KW#Hqlkz1E8v9PZf*`<)8{QPu9 -zbj_z_^BPtpFRsampK-X!XV;TA*%=}n|BLoMkYSN5<5*;=y1aRZ=>a8);|nxTR6KT4 -z`*i6-VAv{&L+plI%nyWfg#6l8wsls^JU0>X$IP{dW*lGe+hW!G75m;k?TU!m+BaJ% -z(^n)XDdKoU;mc+w*(HmPSWC`YXI)=7!R+9^K2hsZy>FUbUqP4Eu!^%E{81lt1-7Sf|pLXu1=T*H8 -z)&X8yI+Roo$nWK?kz#cBe0wFr?dnC2iLST&D|zcf6qnjL$N$f4ciOgtY2(p?_1ag? -z&SRYvy2?J`^2_B)e!o)x$%Y>6mOQc9ZnLR-NJNoy;@&6KYkig7`qLMD(lK8acF#@i -z&#i;Y!mmBGkJ~FX!Tp8wQ|={fDqG8#nD=`94=Qrl@O)51xueVI)34>#G`}H&C4VGqW<@8f7Oqsjb;lS;WaZaJD -zRJe80H+UWSU? -zX%@RYI?GWrCFkj{lDjRRtR?Qq@V-8_#OkfU=@-``r^j!85yswCS^p!_hUc%1aI5J5 -z;$rVfvjr}&2&`XzTHRLQ)3O6svOH#`nC^|gKAFu@!M3OER%JxYPSb!*5)=AZ8)h)y -z2;^{{vh(1C*vK7+Z8W}_d91i`uIb*5-yP?tePN5d9sBLIMD}AZGm(nmw4}t@t;e^{ -zJ9S{{ly{0PsZT$rG}iUpIeO({eTAUjt4nUN3m30B`}F)QKJV0H)*75$Gn&s&v-`4t -z;;jR7cz2!g(3&^7`?8HgPeM`&qwUPttFzQ(4=>=UD7{nObcTa{{&(g|9Wje8d0QzB -zt!?q5YJ7V?e7GOIZJlMs(@CrNZ=PA>;(m`UXlhk>?+5lb@zWD@8l0Ra#Qu4ee7LH< -zk>LR2g{^KeOQ$9sy&rQa!sgd=WinTvN~a$TGo2>#9Bt{r_Wz3yzs>=>#*Uh -z)z^0M=w!~zsHjgV|72#mb*j3k$OHMh8&Qf9>=Cw~U&d!l>7MOsW%T*!t5Yc&QAa9X -zw3x+SzQDO*MRn7H-R^-r*CnnA$XCAGdM0+t1CCXZ8-4~Z`8cirbkwAOy7zcpbwgdV -zZ`ZD1d%4utVYY(3HRIhI2hT0`soVN>`;@q4CoJxY9$Rg_^Mt{HGxe7OmDY*`{W2Cx -z7rH7Yy*gcaBSTGo!CU9cCtTt>u1Rc&wy$!H-}V1e)3pEbA-*iFIxLQB|--`$Oi4nH>Ey1%vZY&x_5*RTi0nN7MRP$JLVhJ}r*U1_Pl_4wt5Udu-+JG$Fk~>9bEw_0=PFeA)5_ -ztxtDvNxUR^RDHq8bfe@&b5oz}O7Be*g8b -zd99o*vTU*cRCx}?BqSCX7k=1rdbh=j06~A5Qs2i(B6r-rUJ*?(UYS$6){iIUlS%i| -zcuArB_3x|{w=geUrFQweY~I}Gs)d^;?U)x?pV;*=YGd+Joy1ob8>A{XeF`Z!R9r0A -zn7p2yUxnpkp~WKZo!6ghCKPYlTr93|^guLk -zePpHMuV#@zc7o-tBT5Xt4 -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 -zg#Y5lGj)3;tsMC4gsmQ2*v7K)ShhopToOqLy -zaGJ;a&}QpNYkmiYI*VEAh-m)!^&=?2L{|5W4QE$G#l@VO#mn-KMHvM-AI!Pdzg_OL -z)#`-C#Y>osm)A}73C{@;_|6r*t8`(pZrhb7rKj@Gd-80RyL-b+NXJwl<&Crz;)tKcwEw -zo2j91xG~|bpLpH!TRJV@XZR<&_Q-x)-_vi;owe@KAA6SKO&K@OUaNX?cHeZ*8D16P -za;*w$ysQgu$JqTSI&|a9jP9sCoztWjS9_ao6mLFu()8G&AD>uK!%U?ZU)t{cnw{ad -z%cJe{f`&Cr^~I}_cPMxFo_XqTIA3bX^c@nF!M0bQ>xS@Y_uM_6sjPZu#yZA=?!$}X -zviuU&FZIs#Fk5EmyhiD=sB(YHw+%;^r|dp+^zEffwe8<`Z+arpozXS3G~r79t~5c* -zFhS4z$xn7qjG6T_DEu$>tyrQkEZ>+#rW==aOb3cbBIq-tL}pW|>`- -z{k6LPzs`JqD`D@fH*KLrS}WsI?tpN8?+LXP`z-7t-p{o8)>+ZM{b^)Zr|Mim1u8IA<3#*?!ZrxPcIr+hpo5klcj&M2VZ<#-D -z$(M6q8d)lKIyyE^fA9CP^lD=5v}M@=_jk-+ywZN+ii6tIPaAJOBmMZYwU~ypsoCw! -z1Azvc-|Mlr+_q3Sv0rFW)GYIi?&4p{q3<;m7JbJ^M{7I-N--@?y@j+C8iW57Tcwjd|yl -zW-FA&z>qSzsXjxgiz$u$@2WkPZo+S$-dnhSQ?NyS7hfMEwVFkIi239>^k|+rPcet*B%h4zccHpkA(C4>HeC{ -zOw!R|Y8$RzW9hDXKGV6xPUTR*?9||S|AN(1RkwEDFIXcyK{+%|TD)=7wW-yaHff^e -zci-^p_=_9qJwQ`>+Ac0!X4XO -zuI&z4rs3tZbUEjRM;jG?+q_z%%v$o$Uq*vd>OlE{#7B3W(=JDRx@{(^cxv^-6|$9W -zq0OvQ^%viD{`Jo@cy46!1>N*@x4wtxUb!x*a(Pc1^XD$sP9aOS&2AT^ZtW^MU;koH -z=%=ZZw_ebS6#jiMaGu|X&&*N2eP1?p#^q`8+l$rjTOnd-(KfTjLu7?p%lX%{vjx9h -zSa(b;*Q_#2fq|_saoy}djg1`4=`z`yH9sxAURBt6o+&WlN!jv=3!g}^G`>8ve&s6;*g^eP1r8X7mE;*}~;* -zMfXFqxt=MtE?97}ejk@;(f5~DcA4SU4+1hS+?H5c`8n{P!>ohfepux(KhaWr-6tQr -zwc^s3^9}W%uYUW+7m;1Mp~W&~Yss_1yyU&irF(oFCtff6_4Z_T;>R~a)9e>({L*{= -zX*Qd|&o^D4_%E;Dxg-Dj#zV{TT_BxW@zraaQ1P%#I(tm*11n>;?Vxn -zcP0EptU%M&7OrTsu*LH2wn;+iyNweMDa}b|Dm^8AbWi)|Nvq}WwMs23oG|(H#vjXf -z%qbSkOFL9^Hg|qfT&dzphWQ`%JXQRzp1sX<@?3u2*E{!=tDF`*H&I)-Z$0+J%~!W2u70X_7TYrAUB{a2kbta>FRnSSuubePy}f_E@uc#439GE| -z?HRF8_T=OTO52FPe%O~YyRUar(~S3;D#yjGwu+W+nH@Eyn|n=nwi=U|xnbHlrXMcq()G)y -zAKP={?xL3kThmH^JnvU~6U1Ly@^Zz@8Im`<*Kaks|F-y6XY$wlQxkkmJZ8VSv1;No -z!LabvM?|BiuobObD|Np7YpVPL>DZ6Y(mDl9*c$}QHZ9q^Z)vUkCwKW2$E!1?sxC$+ -z7rv9;up!g;?@q2*vAlQFoOh>rUT@;n*?Vu(i~8>MoQp1=>0jgVJ^aV!kchpe3zjoj -zTsyaag8X^O=BK&QhC3?u%(}wIuX!Tk>urt_@%BltWAEwd-1>2^X?=G1l9wG0EQq<;e)|I#U0S_l=Hg`6+VA{YG86as=3lvRuPJzfg?N39 -zK+MZ$8fUiLtZ%Z_-goTiloYvpExX+{Wkmj8Wfxp@{gm*XH@a~fPhDL4_-gY0Q%YQJ -zKNsz|Ah6~5Ha!VF)=-s%Xt9XN3nqWNbF2AKghJ##(>Ij|7VUh$v+l{~m)v>54^uOu -zw41m@)PoGZ+`F88zn*2z&%bP2#;~`-gRyO603U?dF)-P9AmitZCcFfRy*&VJ(GPSIej`hr+&H4l$CW-Xy;_k -z+2tJ))eW@dXHGuBc`ozYr0a2!XFVj7@;`k% -z;eR4y2P;qD5{tA`-?Z+(cw(ebsrqD1T=?>y#cesOI@CJ3{T`i+I@EgVJ%jPzxiZl~ -zCuDSQ3l&yRs-9A`J^1|BnT`vz(>S*FzI?t&SY?s@#!@kf8990D6x#|GuX^FXNVvX? -zC1Kkff1`gniELda9j+(%PORek6?B`)DWEsojbrKK{>k&_=zj{kXEJNYvqUbp?=L>h -zmfv$a(C^k9ut31EI(-d@;SW0J#@7Q|gv1-)TLyJS_ -zACK<5u~GGpO8fE)U6X>B%sBDnPVXDmXnU3)TJ3Jiy<%ZwyO-(lI -z-^q16+(D`IX2tUKc9+&?v!1xj-Dq1Ik;_sgeSBGYjSF*`So+OR`+5JoXpjxe_@y+Z -zS~cot@|x&RDc+6Ia~QH8x?37X)F<+CcXS@UWVWIF4!`S(V+)Rd3Oll@Ecy1VAEB${ -zW*q$QkeAn9UwLo0qQHd+)|Zn@VxzR?|YtlILj;jrOTG!t8Gh`P7&NxC!Dm2 -zMf}B5N9#}3tOd@CD|dYU*LAu0j^(jrf8h@w58qrwgZRuc<2z`4VHP~N9Ex%I6 -zfuhqdgQl%Ka`k(5?Sz=_oO{@C|oWr-DM+zK}ZTO|inbSb}V!%IBnSlZU^D&guX(_gIb9B`8Rh1myjKh|a4 -zYZm^r_^;UE6O`&dQ^@FNzM|J;=XVPf`1UV*S1Z-MAv#lruXd5qMcvA@$@ZLX5J}& -zQ99u5MZe>3bsq2hKY4S{H@gWpcE6h7^J2;0U8c&XPrR*PdAFq`e!ZYkxb%L>6|);Q -zPkEWE+`U8~Sms_-&+hldldj$pg9o#4}9UeQWkAfuabAoQ0BI= -zTh*$Ft64MeKl}WZd)>kL^P^Y2G&-`t^JD*q$WP3EAI$Em&J9h9deZW2?E`QzZ;)eAT1mRsDpc&tg^@$!z&NB5U7wTXL0mINQo>5Dq-zv%3zdGlOu3QxFk -z)ZyaFu%`Bz3EopOw?<6$)%YH=jEnhmeQ{IVn)S~vS6T5sdhti1|Jc8<%S{}wYbrb% -zs@5L!wt4R-k(4asI9Wz~`SO+K9CPFslwH(YGS#3l^2&z!hAf6AGPP-S%yRDHj9%`) -zbbhudo$PqP^!z!)W6Q+VGyGar#IE^o{_-fApII|u5yQOoS)mde>`%>0I^3z9k-_&^ -zF}!{^>rKsR!Nu!VNBb+5$fU;_r`^yf<;$*cPx6?i@@iYyqaz3QW_>vol;d>1M}#Z4 -z<%n?tirf;}5rj -zEm0GBe;ha5^;WF3k;^IV9H+W1!-K`n4eO^lM+a?rUGHtfc0y5+v6yk%6OH;K3El_Z -zZ{*C~e)s-=o>sjk1d>Q;2=fjL^)R_^ke -zpFFfy3N+QE-F+BS!|b%F%Wg)$=#Ad1S!Xs?Xg{~ -z&tu%b>f!3QUiUi=9Vm9);%B2B@uv8bXGi+~W}#S@THfloboCj=yRN%F3VtWG@!nf~ -z<;>`|MZTfCf)?1ZeKrW{=zYWWA%2PQo0qE1abFxY^ie3F9m08%O>$IV7)6DLr{2*in6JzP_D( -zZ~xLOvVb8m24v}>ax?`sQu+51#-nOvu*3>64nQ;zRrx@K;w%Pgd -z0{@OT?K(VH6S)$n*Z=IYUUtjojE>e()+7Jybjw>TOv7H(Upaap;nws&SJ;ITR$p8a -zc~QgBkW1;~hv0uD?G@gWcdIoWeE76OYT@kcr*gKt?LQkmDtl#ApZOuSGV!XD!8iW( -z=l;C>w!>wkB?sS?3(jY+);`lckdl&r=GBT<=4UoVOc#CN!DnA;`*-G-`j<-_y%?W4 -zOwxT&{9;*Dp0k&0;9ftmN15hpx@)2xbQgJ*bj!aKkr$|VrOL6lNb1}7lKAUv4)Z%# -z@LdSM^rz|0yt=?j%e)1T4o9k-l`|>lSvbRN@w)tt*IoLqL>%LOw~kFls3mRh?Z;R5 -zXeH0w;X3oZ{T;pEq3+2K%c^fX@Hy1`^R(TH&8pR&0>+O#ujen`E3-_-5nQ;H> -zG@Io|o~PS?TJhvs`m~(AOh0mR6~D_K6Vck;Z6e8kw8iu2&iu=X=PPe8=I&aRDwmos -zo+dnR`h&Np1oWot4P{-wRw@19+%SpOs8g@@1jNP(&NpDvp8QJD$J3_&uiE<>J>QJ@ -zta^dquCphWP6~XJyGvvCO~%P9t}VLilmFq*t&F?OpQ~ivE{_P`zN}%#(MB2X&^-OU -zIqM{O1^92uN{W`1F8?jJf6_Zc-Nk&T1g}@+rM)_1k=?oQW2?cc&R&h#iofk|Bqz;Q -zz4d=@?!EBFJ11s(3!geHUhsp*-k@d4`gfj(?=G2>QGe`TjI7W+vvu3{PBc$kd}$re -z>!ZDnhMqF~w>#oO8Sk069ex>DwzYC{?ynptr&VmF>V>b^m=wkL2VLi#m0PeeHR;mq -z-k`#=p1Z#kEq;o;_;f75^wysL8b2<2KPzVr=$pJxc+K=Me}{(x3)@Tzy~OIum^@9E -z?4G_bgTqQiiOZ(`BwumI`bg!zWe(x{2xh57k_^>c{TycR1`LY7+=C!YiBjeRync5aVwou)2gG)2o{%VBPYX-4gmJ;H2}3lJ87P!X?L_CD!|$-=`%Ok*QvPu1J4fdFrvuQ%@NeO7#Y1 -z9Y67Jku{IM_<`+L7gipU{xM&z)_c?YcQd9P5a@R(vu6;wG4Dlq!l%|9Z@bsI`D-x)&ic+LlU{jWf3~dprS`|{s*j?-#%XTceyCqLXVKPWLKTej^o%kRmw7l9?>Tqm -z{qe#GarWYqPGy#__I?S}FI74_eP*xj#$&AC`IOl@ni&20AAFNPcP&du=w`Kkx=j77 -zx4(HhH$P*niD`3bTX%A&&AykssZR^NGY(CAxx70vTxXtBvDS2+SI1JcjT0Bup6zjy -z{IkLFH3og0% -z*5}RqzVC8IRMpl?MkY-T#V;$LRvv1b>>c6pv%WO^*u57l(Nl}}+rKb3n{1_VEA}ea -zB8NW`31>}L%}P{06c)T+XLfP1WP9$F>tD|wz0$JdLYK{&Z(J{z+edi%9>c63TogAOAy$ZSMH{G@3L0q6%r<$dd;-b~A&-Xai -z*PpK|krscgdCgq$18Z$Vk2kLk!))sk{^V7cg1Q#SW^6QAyVk3*E~G$|t@4VAx3ly? -zGf_w3dX3bySD!yc>3Ljk`k~wu_2@d6HIy`O4J>@5=2D8d7&t^Zg@;YR)N>ONWrrZ}xgWLwrg8~BI-G$pi7TjVMc$Lg$ -znD+3(lpfPzsqTP{Sw-tMS -z986kKFePvD9EFR2%w8{AY*6!Lg;L%0V17w=<*2C*m-k2{#rpG@B(AA{*T|c5zW$f* -z`=|wfj#?Ohj#k@$X -zDK+-{3=emo^;6<7ZPZw_bf($S<8f+I7cIYjmb~M0qHT}YgNAQcG|Rf~?qKGhVyLsM -zFzX=qpA5l>e!EKN;^S9}pB$dRU%aWjzUuJ%9V!yDN^39p-TBGI@#+in%Z^)&_Z;Qw -zzcktJIy?VzeEGXSAODvn`(}!Gtm;f>WM3UO#pn!wgx2Q5sRHY+tkGLz+&HOGIc3G> -zyuv46Hd}W;@OZGEzwa(j%>2g^@9kIi`55&-&;!U(w@tXFqQi>3Hw8uxjS*vX-vX*|Moqe`n3C -zS$OA};R|Vjt$_>$l9eaT&5F9_cxV2o^VGQ7a`U0@t%Ljl$|au;P5NZa})-os7UYZvad+E#)1@|s*rI(Ejdm6VJ$X&i%&7rEvApJaw$#tvWx7|lf -z%F8Rn{k`~tf)}TLu5UWZ{zx_Gm~Fb$>^Gv46AHiSY`!sJeyRP<=GXU|qEGY7zP=Lv -zCGZqelljzI*bF`wHxu1@2DqzVJvRKa#(w>1M<1 -z`zIege8`}fu>F_Xgjd_%YHWS{x?^Jfj7gK!?>D9vwHisY_fCj6`(WFdbBbwYWZzt6 -zLA{-Uhl8$Nn^APaOnGxj_pE&)2Y$0@3S83NbGu)=>5jRE=oFD~#m2@Y#@PpQ9aO(L -zU#R~5rAg$sY(u;zOIO_!6Cq98KZ`C!G;h6hVZ{QQPqxv;UDK83zFKZ>$Z78Q%<{Zo -zaQ)@`g^Y!c)8e*;t$4w8{``NrPa8K?HE-3(Rdo8e(1UT^4!@-u;_gpkE;Btm{Q4^U -znGA#3b@Sy9=QiFaY -ziIcreo;S}1Ulf_NQv7h{lJ9BhWhpMXK!+; -z{%=5s>o4O93(%zJqGxU9(6!mWy#=Xqx2bcrPkToC=d{$5Ad86J7N -zX$CU{!nGpVgrWuOCw%(%lVyd;68l3NZOWTCYpoWjZ)KczQm4l4;FP7gZ7#7IvyAPU -z5@Jr*XsM_5XsOSiw4u-K%Z2VN@@6{v&-!fpzfc_u)$iSSFU%6Zpmvu;JUU8C-`x`TV7*o!wt=U=ogJMbcE|Ek4&AL|p2+ONS -zE?@DqrEfB;?!4Cw8OIYAYV3EFb5%IjsN}Wb0Aqq>O5S4slRT53q_}kM3^bg?!Tu#_ -zd-*|u?ANP=!fO83x^!;ksrTzXq}ZQQ7yD~*)t~cC>6wu`&ObK3Hgoaol=z-wkF=*Q -z72a*TJ?-Gm7iW^$7Aoz@^0J=L{LS}VckdLoZS|X!HTF0kn=d1(G$rZdUE$8OiK%{* -z%Ma>2c&a!6fSF8`TeJ(88BtQ2+b(+*t<1H4u5654&84$A#_k?}uVVWruW}~td%fF^xn99oTaoO;P1;N55pOgl~%{SR6NA1 -z5qy2U!p8^sdozQkYtP&EE%eo&UIFh1f4{d2?BFCw!SJU$1=H;N78rRgw%{ -zb3Jz6^^MfN!`V3drH}LemwsNSf>(V%6CUeeU8Hio_JB^`-Y;T@K5blnCQoIK@Z{Ws -zlTF^mOw?;q-@j9;bQLRF$B>e?isRxr -z*#sf`2cJ)0t59GLmHc7U!8Nzu`S}csO&xlD2YyeuWE14hTdCA_uTd=S$N}Xe2TyQJ -zUT!aL$rRw%=^L;@f!oj7oVl-7+&nUM0mE}Axyf%oOh4Kz9;30~wOW_fcX^*Q_ap2N -z-m-1pw}^k;J)`1F+kX76ZC{>v@827D_2>WQ?7O?*)ZdfSA7=`5di_1brR37YKe0Z` -zRju)db;qeZ7o)jc4^0#&@o0yZUss>6WP0)Dc}d4m&Z^+e48_YM*)Gp0W{A!5(v-Qecc*@2?^4TBhxe~F^<0~_ -z*3LPx(lKVU(}CNJ3Ia10Y`NFowf*y~~rrp5{GGT1k9`3YxtTe-spN@rw!I{!)-T)Fvu?(wCkxSy`o -zW<2Zh$@PA5nUJl9j86TD`klr;Y)LOv6#_h_G}-(Qm#{dgQ=aVl{h(N-vP50TOXZgQ -zzy0L`-#0#3VYujY%FPx}y~n#kHoU&`)tOVXfH}rtL;v}Q%ic1uY@RoB&1MtswDk{u -zhg-5Y$R2GBGIM@))VjG@ee=uHCLX7)4Kn{|)~sqhb=#CtSL{WeLGte_^&Ia)=B%ro -zva~N$^D3}W@1uN# -zHg`1F-2a@pBp!O#-UA=W=Tevp9Hc#Tt*y{*1K0rx);--I%y7=cej~OA=2G -z7?mn{icBxnvCJzxGu_h1>G6~|c8pG@`L5;HmP?7K*4H?=npbt&tvaE#d1uuOnUjSt -zCW*V{$~9^+Txl=OT*mbM*~7T5|LGYm&cf4Qv}{NZ*t_6>@_UcpEH7_H^-tksS^uUX -z*i}uR{Jx*8GMEKbTAO3dxcI4-3t)ZaVSw>UZa6~n4Db -ze-<9Qmi~C3$qMzqcHw)uOFxtg$rft{P*4GY&CRE+v{6iGplb7 -z>EZd5dcXG-S6}BN55qUICpBbF?zr&h602Rq;rg_kjAL?jH&-rwwIgGB$yVjrIB!Kz -zL4exxLmBR>{vr$J{1D{nisWinD(&^K-E&oY)^3)G#-~s25$O>KxcKDc%Df5c@0Gkb -zcb4-6E4iMmH#vW49^=Y$J4(H*z8^fs*q`Y#FhycZm?*SylLfH -z-|lzE>13kp3%?_?WkcSswp;K!%I?n+jq?WkTKvq_wI}=&3l9_Nm~ec$)76#gQyylo -zT6X$WLdpthFVhhDUEgIhT3@qu7GJxTr8nPUTGPEf%O3CVJGuDCySJGePrBTdD;G>l -z4^Hk4R=<0Bfmz$c&9!a6_7~TCr8A_gK2^zCv16_F@ud%^2X89e%%vOK>bZEkNn^cZ -zcra7^1JTD!E(Q~m?ZTfNp8Zbu2OE#@j<)E<$9_KB#rb9SNT77I|KUxGKq7B#e -ziSMR<@|3AR-~8EnW%P>`n?5^T`@Rz8o&SJ70_6$sxSmC+Ap1htF@Dne~5yZ*YA+d0(?|rtbBL -zO4a_qZ@HF~B{i+hIiDsSE*4giqQ)`(z${Uf@2WDfiSHxK+e>oX3pkg -z&xJi7IAT0kO1d9jwBF-jK{$J3f1n-%M|XI^qm_)OJL;Ncj&9oNq$JXQ%F&WPt|fBA -z-xo(N`=toJW$3NmRTf>(Z)PnqUq0gIox-UX6w||x+`PHZ(%JO0!S5gLB~>kVjRlWB -z^bA)ndG@GPFU62)#ms(Y!^niL^T%|=9aepr(RDLQd-k#p@ytoN(sA*MjMLs8$Pw}G -zULvyN=Jo{7RyVDt?7*6i=Gkl??jJc+F=Okm`8yR=Ek4b8KP}96!K4Y@y7kxd!=@Z~ -zbM5e&xktVPe|svpthPLUTA8I1o9LV7kDpDwzY6AA9?*{$J@WA}N0ifqRLK`_7=F1j -zv`DU%^B29)|4u&t(e|AuqlD`H8KypM4=gZqxT(>9PV({p(y_^-VipuFc9^I@#y%*1A3$jgYhJ3ij}A -z315_`JNNrjo`Q3W-5-`-{xW0c?4EY3=QkkCbm( -zc%604b%<&Hu(AAxXn)+X2^%Ed9y_p9&;PftS@sm|hI=>JzL;e<#vPS^v3G&)n?;)s -zAA6Kkf2DfKgaEeb++VITMcVN1b9LFme)ze;+TgFtL|sZ3Z@(Bc<<*8gVKdK&Jw5eJ -zJK{}*hVtz&C6)%QSF^VsDVn6D#g}R`Q;Ab5GSxv^Md_@Y#T-Va24=}E4#9tYWXcx> -zb$`6QNmk(kubrd9*Ujmdz3*(Z4Q1vyVLH9>(cWW%;tcgI;*wolS^okq&$@PFnnmcP -zjfYn;`+>_+2z3dy_Y -zxjb%8RA=CrVt3!Feb-f!fFs+&ls%4H`WsvkR9tu@L6bS-98dfLmCV1VJPW*Z_M3jL -zKFE^q;p(m>cgp`zeR0qSe$Dr{6dF!?RJdgNo$A%mOjx%mUZ-KF=NH!k%TR48R_8Te -z7yA7>r=QsHYR-7t@={f>$7f$=jtQ7pm;6YYlc*9<)nY&p0swe55 -z=D9b=uI;wYuIeMzqOPjCKJEKF=IpCfw(5#}^6RWBqvXq5s{eGiSM=0-OWtljd&57* -z=5)Zzt?`M=Y(DSVE|`(b7SZ2bFDG(1v+36|@9mgV7QAq&-HFAIHzu*G -zJ}HbS{A_Y?r{U^$3%w0u7A7D5d$RQ>M9RJGU#f7%?$PG&TQv{x9!|Y0zTUvhG^Y01 -zCy80&pL-*}{haz|5#w8B7xUh_zIu&4PY*7+op$q%OZofV(wZ78Pww{8O#9k-!sGM* -z-(q{Wa%fDSet;uCS-|%0M6GR1Pkw7Sp6GBi%lR(1VA{GFCi@SqS-dF9vbnuAR^#xg -zCJsfvImzF`!d5j+mrzrjIl*_&f>X>|(%(MzGp=~}y+Ff7Q~SpLiE9~H<{mS=zxZ9< -zqk63t(*-xzUwQ8JDN{>SaHiUCJqMmc7VR#DbN63fkZ@kGtI|KENZBqS+RausN!O4Ia6nCe(> -zdUd!RFc9tPmOkjs$a?F?oWcpt+oNvmFrN5cTK8jW$=UPGSN=FTsD@rVXt$o{{WbaG -ziG{Bg3GXxE(5j!tAZ@xSLN?Uq{E2=Q{XJIP-?OjO+x2^~W*g33X_3fg+j3~r*9X0i -z`S0DowWs~NeAk(I`;SfypVqy^jd`V;slu6fM~>Tvm+Ca#b(j4j@?7<`e@~&#mA!h= -zkpem!6@LA5I{1{i=YmgPfKR??-BQ=4?>81WMY_E=zh9`K6wsSm-#TIWrA*tcHs0GJ -zehbE2c3ANJvuk?z~iyLh~qXt{JoYlfZhsh{N~f~y+1 -zK29;yWSm!Ys$ip -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 -zOLbhCXV20)65pJ?a2#z -z!(G+}DQ@=iz8iK>$u9F}wu&R`jZlgBI|&ownECGgTDq&@;rm^_4Xa*`~^7Zyt-%1H@Vy%1mA=(1vQfyb@Lpc%)C)|k#N>0M!ax8B|Tq5EIqcT6|R -zIrueg6cstjMFZcmi)U}U@1Zoeao0qN@JXM!m~LDxXuGVd)ldXqH|alQ -zSn=r9qUUEHKQ>@pKVy;TZsy*k`X$=M$I7<;}a$c;%9(o+r1g6|`)B -z6j_n9YG-&iSHyC!_&jP<`omt}q4btlqFsXG4Dsvn#ZH+&cqrG?|#9zNE+ -z*7JrhZraj^+XBRvL?kYK{6OR8rXTxQBYdx^UfwQk`?Jlq@4IyWNuOHdJiiZ)ECx^O -zn^G3-Puafz4nw8l=U!EA!Kr+`mACv1{X(*2r<(b(w5;W77dmYrEM~;@$n8`f)AK}` -zrG5X4cNwjVJYZ+2v?L&YdcfuS)#pU-Wtq)beIj;mO;@B6^OYk!vh(%sH2j?~Q(P%$ -zrFF?_uRHD1uiU+-S6q8DGr3XWu>8f!6(0W|2GmE&ovmIT+-1V!<#2k1^uq3A56<^m -zl)jpLX|j|<=Z)fxE>a)7;~p*%)O;~9VS}zsZt~iC3GqpGXSTR7Z&jJZmA4{F!l2%Y -z?*tTU&(Hh0hNCO!V?H-hFjPgF`^N->=m@3FW0@RJCcL@r4QP0PLd%Q^I`mM&-P -z2tHvx!Mdehee$}HJ#yZ`mk+ZoGjRy@n4#J$-K_G-v#p}5&gG}`yhrsnc`g(zIdQN{ -zvi*47gY~SxS24NoShHmRHE+%X_5ZsYE>yQ`_dNPi*&}*+^V>+PZ^=d7hWFP@5nF!h -z`opU=UQJ0Yr)}?KFzmcmvR1~r_<+uG|4EJlf&IPiW-0elI_h^{T#zTs)RPr0Tg}Ct -zRUsDkZJi?L->DgA*PDrHFsi#w|7W|y`TFFjV;SCxjCmCdSF0XtuL@FlrMSbQ!f?X1n`Lw)RuJ04}%X1wiHl1MqbK5YhH>f6a&rR#G~%l^p< -zOf_G-f-iTmaDr~{%+0d(QD?Saz0K0_eJdB+uHucxOaUquNk2O-weo7az4^Z2(?#6~ -z+qb1$52fN3>2^i^z7W7;xYt_vudMqb*UD!~Ojb_=O$&<>JiKOQJ@s?Fs8KOT@Ws&u -zQchkSJugz?60M%ZFur~H{PP7vPmf7^IUW1#B|5)l-I8CXez#-N@rxI~pRAw2w%e}k -zpy9@^N0cZ`I2DW5G*T?@h8w(Gxe) -zxT;?#r8ZxDnN!uaGl3?@xu3nBcrj>f*z4WLVq)jd -zWE6Sj^T9hpEp4~+$-G%7r$%>s7H=@W^U9;~!~!AKBgS`YPkx%EeDY52&#nD&sfNpH -zS7{rZawt37cs29r7QLT}C2Lt1|2J8foik@!gzluf7cHhNt(WpXv1QHIyseEl=6Ga< -z>HHM2*|xpZUa@Oyt&t&HKuy6@n~)gmhnwYRzgix7fKiNT9^;AU7k*rO`}TGF;<^py -zG14J>O1CAlxh875e0{HZch$pdSr-agBPRx2jQshh<-6R=iSAQd{rJ!s~d -z$nO1W)A=Tt&+N|({dGg`$;Dr@<~@HQlCb)JX@>;skz4ciUIvDAeeKwGCF81Q*c&N^ -zYP&_!m;UYW_$O_*ad*l4`;3(VsqMKB^8Ct;LPJh%mEy8GQ}dHcR))#!O0msGn+vad -za;SFZ!JLA)=jgz|?HlC4PnOgtNwklne4?1$_&MA&1^RsVe6qR)+DpahJ+Q8pF|BAxq -zZ-=Jb&2gKSEaP!9{Q5$dJsGpACktgfdeM7v!nL1!J(@OFT@%$YinDPtx)#D9loh>Q -zZ)(Jz`jZQU7OD!p<@s6OoXR89)xS*h&0T)}wq+d)^@UsRTzepu(Xp|7lE|x?2tG!; -zuT5na*0-55{1$As?dm>q$u*HhGuZLsi-0*@t1G7j^aMVaIabfs(H$M3s3@~*uTsv+ -z$49KJCH`eze=C}HeetW1nyv?FN97c=SDn*4E}kx9-&YS~^6%5!!YoD4Emw#lv1EorTmqh;Fu~m9-=%o6!vY%yVW_mT>y}##__>1qJ -zJtsakulJFyvP_WZ+&VjUTF>>(=j{tuiwE;hun2zXQCGZT`Q;|{-3f9lKYcy7F*0)vtM%6f=DCoV@nD^yE|LbLw4I2WAU2}&mRriEMK@LZg%e<-_&OpcYkvG`qWONcvU@j -zKzvovaal?Am*+E;+~R*8;&IdLy_r1kZi`!M@v2^v*`5)86V)ev$&5|f-^n=lRmA&~ -zdGBq1u6(`kr?ew)x4Ks1zL!pyW^SsPSTX77pFE$2HHwAL{pQwe?Y*H{d)5C@Z~3gf -zuF+eAkFPgb{?4hSq$w>TY#x_y^_H1ZF&n=us1Lq>x${%?q?P;C?@C^K==k^M8`Jcf -zl^P1icc#qzTRiVe)|;OylkMl?3x;KP*-mg&FmZ;PRovViGx&~9OO*dtK?A~!5*r -zVF4QI_aeM?>hE*@KlnmYjzjFjamEdI?lxbX_sztv%hJ_!8Y}l=7LTroCWFrsts3GC -z9{;W!UU6j>n~v%Pi+A?B)+sLJ66>_RV;+8g+gk-Y7Pi!5D)(RQd~)Ktx`w=A=qj;A -zRa&P1N@p!x8DtSMb(3u0l2d*r*Iczfie%im`|qV}_WYDO-tMOQcC*mEPtU8ie4W+u -zBPM3q^beCNHGL-*7BqG5*RX5gF4+|Hr;dN|UH0Go;%&Z*&mZ#qy61;1>+fSl^Oq<6 -zy2e?-a%lIDJ8cGx9XgMr_MG{Ae3Gfrvl&)7(nVLzx5u%E3r;jzGw1rsxW7q)he}0f -zF}ygKHKjVGSo5>7sMhP~mG1STuOC`IIQ4q5ntAzW5Ng`92y1EZWuDS6vXmQFr?n_5S_#fZ&`n2y_zN{y&S9VnMrJF3BjSEz^@_wy1 -zzGx)VaLR1L-p_ds`!f=^Onq&B+bG8nu$%id`aYlOjx{egV`3F9jXUvq_AG;@V*$)?g -z2K~+RRd(+^^Mv90g7-}-bC$E1)HbLWSgHpsULd|?O-;|IHZFN*naqtklm9UEq~_^) -z{|J7gqask5dP2aoAWl-4lSwMYD^kW_-^*|Prff5=ALP&B-CnPFRfkvK`rxr=xi=*2 -zx_V!JHa0Q)mfUi9yM$9kchoO~Y=*X(yJO#m*Ya%n-0Z(~^WB>c$0JsE+fDU36Q=t3 -zi2xQ;r_2AHI7-YXF0m%Qdp#n;Y!A3 -zmXD8Q-O0AF+?c*oUBuJJB5m@s5Wd5o(s#2b*t-2s=9yXJa^A*Akb9@ZXSNjw -z^53*9lh?>)_gu8NZ}Ek-`pK38PqkAXN{14hbL!1+>^)aDUW2DZ{S93D_(DT{@c^?o@sw$9zA?{XyP62Evk7coEES+VGu -z@a05V0sAJqGs4lTx6TE;n#O+Xl>N!OZzrE&{cz*p#H|NYi!W*a_ZRG(InUcn^1tEQ -zMLE6VAL_f0`5$UCZ)SPPn!ByGeMf1}t#BK;-2UwPh>LUcrNky)yUsi1Z9&SPx}2bl -zMw@HBK`vFz+at9#9nv@by)Y~1_DlnFvp;V?I8J(NHs_F~+cVZVQkTuzgmN_MGaBbd -zE9^X%>>FCKV3p7G`64Ezsq-2BuUns`m~rjZ$%QgXr_2=V)0i@+FP^^XRdd5Ww~w~h -zK5jN@>tS7(8eF!x;>`U(+bxl&RLVv6PJ6U<$s(V?|EmkNZ5N$6Aa!h|Ywo;)U(-M2 -z{7A8xop6cug|AVxj@I|yQ+^lRCcOMsf7{bE&A4OLY)SsFe;+dZ6E|uSGu?D$-+}GD -zbLQr;ZawOK`%86NE>lN+$lX^LS4G<;m44nBW^VK3mD>6Klkpq(Us&~P^Y`Pb>^C+Y -zXjfkDy3gUO^ujJZp2be9lS>cpReDw?S6rH0$8`DXzx9!)(yTk*sxA_-jGN}SHt+2I -zoyN2O37Pzed44O_v?=0^gVyxPODjJfIqu5)QT}nesr%j6k6dGKUNxS#Q?ayOTKfE) -z6W^5mAHS@*o`3pu&GDHp>zAjjx7AdPm=MC%xcZV}fuJgre#0B)P!_u=w+9S=U;SGD -zn8ht&$wJm(2h$JbJeRi!xh+(bO4SJ6@p?N~6wgYBeb0~Fvx&W9XBcUHF5un6wwSXk -z_y5nE@UOt;-J1n60t~BCcm6-SCo=G`>$&=$21-d~YX!qU9~SQx{Tu6HZtlKNfpeGN -zl1ItH|1~eGasOL!rp8|1NC2i*yW& -z4G&$7+F^I?`?>8!bp{=i5^LvY>SjLT(^&Rj+wMWct)&ivuTtF=ZrDo*{|Vdv&@$|T -zklk$O`h~kA4kx8tnst6pspHG8Zl&<->_gg*gqM3>ewC-GaO3RfPW5Ju|3z!F1us2* -zJbjMZgY(Hf7ysQmCmr=SM3i+;+#+eS(z_zBZpqv?WqNV;+b;>By10wW6sJXd#WU}E -zw*Jov2@X$-^wnD;@;)R@yz!4;acSI?ZE0F1(*l=0IQmk!UdVOn@^$mgx+mR;=dqOG -za}+c?cO*s1RJW(&wcyoX(+y-dv-x~IS26ph(4vX^4%q6t>KxS6jM$p{zA5wNveV}A -zxhBivPH7&UHgAE=wkJK@mFus)HvhJFyR0zh#{*ucMW_GD)B7fTp}$Z4)z6gKZry61 -z!e7q#S(DSrT`}X$x&FTT_r2oonUhVXeG%cdKO0;bQT*V~$FM!g-&OU)t`vmZ1Q_K_ -zo55WY-8bK(lv}tct$yj*RbIA2uG$}Z{A(Y%I!k6LNjkcI3*%;h-J8p$mU$U=`&tYd_=i9Ms*WYug -z_bu&CY3*Cy)p`4RK%-Y-anYR91(%sP)}1)%v&+V&ST!*&U8eO^cGdsbwRQdeQ~uuG -z=n%l~X*`?p(}H}vbBD?%@JiN+NGRN^ca>MXu3+W2+`P~xUg_`2s<$gwsuw)|Wx029 -z*M$o_b_*Z#HZ^IS`Jn2)!(Df>k>1C-Hny1AbhN2^TK(?vlAXM-1sdJXVsK= -z*^|}nTBXVMYjwJFv*#HzJx=hRXz-hx<9%VOR+@}6$1)8}LMIS2b$iESF1UZF8Nr?t-)0dX-N%KJGi!GUZ{X?V6-FrS^NX!%U6{ -zTljG>>}F5R=!pq0UM?af(|zf2$d3Mh3)X+BQ91BPlrcwGFhZg+AUE)6)#Q6;7Ib@L -z)riddlr0gM-`!Au=zv3zjzsl-M)yrAw{JZUI1^kOVo+PMw;_L1?uD%~d3*Jl=zw_%+FxRJI>7bV1{{2mPKOcI0{d>{xtN$bgju#pY -z3g>prkl8M?=HJPEPx&qdDo=A@+uz_IBeQ&yuYYi(Z1cw5EbkPo#Ow29XWo-)m)-Q_ -z;r`v;z}`!@z1ZP_Q}*?Dp4+{uoP6DKJ( -zPEfIpOSG^w+1uvU!NpuS)9YOln{_t(|LMAscdoiSL|h4UUUX-nexlabU0$u{y0%?# -zUMg^FGaEdBwb4ht1D`E5Y5%ryA0saZg0P1&&%Ja-o@ -zC~6JecI5)YroPEq_qH~CaZVr^h# -zn8(1v!@$76!eqe6z`@$Ut~jylgw986W{qnFD-_(%$9k%<*mYp -zZRgglW0?7Ji?f)ip!M#FA+KX?`1VW+|DQ0AjOgaS9kRV7>6o8u9$S|kLdY_ -z^&A1OtE6<4Ll&jR&b_>SCA+1~^AGO%S3MP1SL;8$wVSWENx=Sr*OB}wGG|47bYoEpc_}RadduDwvJlFNX -zgO^Ppb5G>`$j`Ip$e#;6y8eY%{iWi=0u@O-`nSsK*In3OtSwzJuSWIQ1PlAddzSYv -z%`2YquXx{G$LDs!FBCr+w*H(_Z22mPeW`lRT)9U@-ED{sA*i``6>)hglgYj2o$HWp3Ybm)KJOpD!S2fnV`Q>OJ@VDo;d#_Jb^ -zI(>t5%-JL1d`SNrwI>#g4(=}pQo5p|lp{MS{9UD4C8m21EFyXURPj*c&lg1tGn -zpRQmQIMlzmqEt?C!f=lgqf!>`gEA&NJb3Umr>zgIf7yZrJzm9R~V -zXMcOB%EZ3nshL#G6T!e=nQH%4WM@==l6oFv>*8N!%k)+MRAk~pkDE8&PT~wwtK#N2 -zRpPY{I>h{PYo%#(=m-1xd5m9#t3yL9pXl8>5!&;9pHKS@+i%Rbo#y{!<`WCtU1#>J -zK3UW_;j2XJhLrrr39tSJnm?G=`*QBZ%*qywaBL2Bx;?S}vE7kdS6VJ!<*}|0-tl=c@4Wew -zrI&{5&nP{dkbm0MkD=xzXG23X(~8Fv4!xYf`%zQ)>Hk-r>r&fn4^=Kb@Q9<~sX$V~ -z*UK8mzWk4O%t`z*ztu2ib^d>mpdbIQHgx&^IiocBbLQ*a&3{)OW%FZA*rd;AclA@N -z;2MSpwyT!Cz45PJx-sgwK-Gf9EJq$rVNeU>6!_r2DxII9?(OS#2R+_rciTnyGEO{X -za98}(TXEQ3f@RL06G3Ww7=>3f87QmFN?gjwWSU$ywQr8FY=i9$#uf8cA9|;r_>gS)-`^MPtRgl52oasRCE`$F6PPZ1HkYSu~Mu@@nR(+XyLqe&hZN)PyyeSJQy`4TTw87(Px!avka+L0bL+L5o=v#*vp-JPct$n*%Fu-+n@z;) -zkGg(%-z|2T@djJhS+i?wM|m7_4W#3QHcD-DHk`kB!{z-4TKL&l9+x)yR_T*^<66eV -zxwq0^HJd;1dSukxvBJLi@74>c2kg(4-`Lp5<2vD}qF})7=7*~jbWWPF%y)^5-bUU*7oN -z?xv!1($cf35$vg7Lz?tFo|OnPv_2~oS~F*IfqbX!s>v6wa-5Z)Ado8dbiU7t+E*<- -zGw<_HF>1Bh{g_{Gb@;+lkEL8+nyIZkF3BUjrZgdDr;YE%hK5srQ2`mI7T9?0%Q8x!An;lu&hwpQF-Qxv!xW>6c&5 -zl4SVLpS?PtJJ|T+p0K2=!5`Mz-COK&;9!Z(fOkAB{ZDOcEY=k~-(MZ2fQI`1^< -zZz?{C|F%lWCg-ol`P)}-ZmecXO6T3QebS_kN6miomN&kwFq*K{;nVBBcDCLlY_>g4 -zNi3(o;Oq(JM1)`C4c#8O4#b@*DilF+9Q+j -zzIstxj77zx#wX?Z94k+FO%{In<&&Hk^L35y(;16HWi2}oCoOx>!I(8gcBa!IsoyR$ -zV>5y)jk3g9CI4kKHJ3}h_jn%*7l -zX|XwNT8Co4$$8cL3QI7oSd&utm&2r>v8;7JaLcrF@u;J -zUVJq^@j~r}ENfVJ7xd(=l0LEdq2&Wb+fy&<`PxNio!I-0<7LUMiyK(8OIJQ-ns|N3 -z1~I9nb`NS^94O3XTV!<1yoa=gC&YE&qaB)_T@nX9ki&Y#S -zV}CjvN;Owsa%S%&@pWR!70V?*&HWytYp{Rkw@G<78K-B?YYi+FJM!}SY;)O`#IGUE -zi@n*_dR(htTD6Wx`FO%DiMAyNGFUFsLpH?33ca!1aC6`r)Ffc?mf+NcIiV8Nn?dqmt3=LcviRM804?b -zlKiFDv0v#pzi01C8HqbH5ArGNhl;AnPd#fnen#f%+u&Dj -zFKfBa%1Oip&i-^{cJ8wJg+8B_ZkK5GdS_9j!@w8wcXn{g@`!UYmE^VIsw)b$vw!}S-^*=NBKe#u` -zlKbWB4>AXAF0sFxD`tP^a=p@9d)`{Kf)A?$ -zyHgL=2XJ?G&wRac;nY>5v#a+C_WGW@rri2DsioiT-d{8K&g((F|L&=jUHRsH -z!2i;dRe{US)?Zn*QqE@4>50{omo2R7)aZ)bV$}Lj>Zh-B_yid@-lsSIzO9&7Up7Zp -zSaD8@r|RQC2R^x(+azZ?T{*dI)*&m?D-{6`8k9c=Jm08c@Ks|@iPQ9rtQFiQHm}yF -z?O*%ZZ_7E;rAastV&xy -zB)MzX^8b|MxfAf%(D%tZ&T(1ARB^NR -z)VvZ!*Q(RXg%eiid!~eKdnI>Lu+Qe*G~3dM#HCv~Zux&@S^B$WWwO`?`vMoaEDMhN -zQ-%E}>|YRmPTcK~sb1>AOXug7eBRQ1m}}~<&)@EQHYYX8 -z(_QD^Yl_9sL~~BRzrN+jbjIL>vo%&0lc&{QTF3hH){BJV8OF6+ZZNTgyBCP29s92I -zYfF|x>k{^LR|Tf*c`3E%j5hyq#}D)WUaM3R<-8I#UnS_}b)zSDgQxl_^~YVi_V~xY -z&mQZXjtV~cVqY*{;`R=yz4dILyp^vX{ZaJps3gx~X8+lb_quM5{bQt=`+)EE`-Wt# -z4|6(>T{%)R>l{PCCC3+AvdcxfB_}!ay}POZ-MaB`Ohf0zU2S5;wua(fk27VY8`zdS -z`Eo?7W0%CdU;l;IeAuznLioKDLkV+Z^$TB(*w%ePyZ?T#zrbX!`9baXlH83w^%`PR -z;(q+d3V#sf_Dy1oeL81O?mO+eSb7?YxZX3(KYK0}C4NMew>ZMLA!(CLei6 -z;HRv}LV>Vl{<~{=KPNE=#C~(w`ont7ETiH_?Z*x3-iPnDeI1*(`@3U??V~_Z=H-cn -zX^$5QImwGZNKtEUQAK=^=N@k-;%GAdzT!|?=RCS@VIrHss8yM -zU;j(Wru9xs4yf2@?WW4+Q-O)V?iuKHS -zd)+b*{I6FDo@Cyz?sshLf=$yrJ@?*ElsZ_sesaa$=*^qTM1a&5fqE -z3K9=izIu_Q9d`Rb&B6=y=Ip*+v$v)ggfOi6!!I$9X~EMSGcyIIUzid+nj?NETVc9od?u6{IR{1dTb=JlS&Ayp0jC_L_)b{8uvi@D9al5%|2j4x9l?#uo -zm=mP%ra(wC<2&d2iVaM;Wm^|01hl)pXIZPA|M{b%^KRRn%I{b<%gsGrdvWCxzHpx% -zsuxx4B$h?QKRNcT!CCXY&8^F8mB016iPnohKetGYZIvmD(^JnKfe+c46o1~xneD^9 -z;F?K}=Hq+afor^4J-x2+sc1+APtH#SVauvJN*&9dIlJ`y5|9nZ -zE1CAaCZYC-P}2S*Ep7^me=l=x)SoAC=JJ}wS8mo^71+pFc3B`p%lo1LS7z`9M%Ugg -z!Tz7>+nZn5Jo$IYr!Fe#NwBxc%abbSrUcZK*QKq8C@+;-2``oIZbQ_HSl( -zY!hPE+%RQcZd~SmrryGgXx3o!J4V({Hk*H)H4zp_)70$hyvADcc^*RqsLxb&m{`FoEUCeRZOGOk1d*2`axdGq9e7?`9-TUs#WMj^? -z2Oq1?J8>-NdcW#ck%a}9S^sQI-=3UeD`3;?Vk*UEekP;;L)iO;F6@p9-HKO< -zzgYH7=F9(^Jc!)d5xOAmwn~G)|eS}cGPDx@Ro>Vu*dz? -zS;_pCb*7Hzt`ApQH{ZR`x54pDsik!jM`%3DYsZMfiMI+4JITK*dU5;Qyl+ayJcj=4 -z>&_^j?T&NZ6Ud_X){d2Tn#%6n-=Ay`#w*@(W2{{#abddV?REAG`WFS>-5{Z+`*dB5 -zqDHg-S^>4wmtUwIHn{41$*z*Iey+N(;*;<YdpyeEa1JHGj%@ai-pShVwc@2MZ>pkO*1^i;p*oTAMx^v%9XtE19B@*tt#Hd -zeL2`>_Wun(_}^T;-#D`(#j*1CB5Bf>mN13tFc}_@s8?kwT(ZMW`J~UQ4Jp~mZ#Wl9*lbuQ -zc1B*CJL~5J5zEO=LzBb@W9r|>o&J924aZHZpV$~Pj5#Om+69B(^&r&VrYbOEp6?X`?|cuW}Xw7i-<&*Q-zz7vfPb_Y*k -zJ^T2eQ)j(p{eKfh&6^r`VzM@sFmwBuFI-sWWqeoQx=D!1k{p|w;>FMFj56Ry)j!?Vdsy;j%w+p_^@HRRGvTja*6L1p)HTzkNpxbZ<>A(QY5tlj -zy;m65wmGey$itQF{9)6vEeB%$=^kIyEvfW2%j$naPS&@&16%69ty*5plIpCxRdn8_ -zj~%P$w4G>=hzhm|uGfp-FtMO~yYTIn>HLWcZT`*8X#UFlWPNDX1ktTJA2<4(ar`*J -zZ)t1QOndeiQHkv}39Bz~MD}*f*RM&|DH6|KZQIKKu3+k_Kl_i(%jq*~h;U4OuyYR>s&U2mL~zjnb3vp4?_$Hz}#530Fky*S~;yh#jS1zfv7T%OX$ -z&~JF*@AY$H++0@$7pjfS45Q4!nTdU}K -zsOe^U+>>O9Sx1?-@Fp@T5kUSKG>a -z3iv1f`(Cd&E5bTCrGaCezx>KQzyq{e&vYjAOy -zRPb!QlgYCDH!P-keTP&Y^v!-J8wpuAa;l7S{+(Q-yZT-6m5;V>{OVa43?oZ)K3tub -z>m+33>QN*r^+{%Pxte!|TIsS^$ELM@_4e4OAv9g5$HsLt|Kj}`60e(^(C1=EU;NoDz&~d|2YzqvfO@AyBw(iSF`_G^brgvI`C<`)711$iED`GxeLH -z?~C~yt`$O_lCHnS|EyVarD4b2!?xG2{&Oi?AHhJ}FG6vpTCahAvplDzdgY8r*Xqv8a~t-Cyq&u-t|~`I$%G;Ca4daysQ)4fO9oJo>xk&S$%B)rQZrl=3n9-GTDq^Bau)(4IEFl{` -zWPj+m_oUu>w>U^_-~a9u%YvrsS1mvL3ukxvFWQ`kB~^TLt&ooSEHZ~irZ -z>B>vj8rK)U;VI%1YgW|T_$eoT>vcn+W0Kz|o{tI=U=>-(Ak;b8J2|IK!c{vJDq(%lV7l85SxYdG}-GP4D`> -z|JH7g(mg$c`|~;*##viM;+C1Zr0qSj`A~}a6@il36SXB@Mjg}OQtA)yk_{KBT5|Kf -z$0CEX%*}a^=f8pO~}TEEh2-ew=woXoA4eYsT-2*Vn&MHLB7vau>GcybRiS_SUBM85!ay!aJ`?3LM#Z#3MN_P@v$BPz&=9 -z-ndmcJCqJy{4Y}NyYZigNj`hE@Sf2B|2-TVcy>=O6Rlc&_0vw)39?+Cr{>zG-{8Gg -zcz>d>&I^Yb^=Hkt7|-ZSULr51=zW_IQqL=9$Ym|A{Um9gR0 -zyYaxGtMZN5>+4radLv(^6b7VCR*B5!P>$ObYnS{w>5jU(Nqv2j3D>0;zPDGXN8c+K -zkSu53`Sd1_%cgY)c6%LGd%{`2>R6ZT7lj($lWX}-F5E8WX_4Ay`a?(O<@(LJ1(%|% -z{WYF3^+p}>;mEL?f9zn`7RRrFZ;cr)wcX+=cF|`naP5`ZDSzv}!j-(8iP_2%lj2z< -zBQ&)eIj^vpCsft>@KyWPI~^@@UhW_=?fTJU1=l)1&A9k^1;_7cXZAMUWtvwpp+rsG -z$7ZwALC2jQ-ZElek3E(VZTq|{rTOkO6Z0F~UGj4do(zkuE#_#sYqaK0RiKrF@$t|E -zRevL)=^M|!ec$`@RoIuvSPp}2J8WccB)pDt!EF_b<()w)*lZRnZJAA=VrEnWJ(SK{c>6Dj++{SD(@ -z$xe;7E9r6h)p7V;CG(plEzJAUmGG&RBTYL!dqPO+SWD_aB))GKHk_uE}Nz`_+8Z0W3I%C&6G;!B-xyEboc -z-m&%HCDEmk)2n7BY+k|oV4G)%LXl|Qzk>SOi8*S%v8Voi(3-d`^FSx-(bTDC&4+cH -zlb@ck_*9iyDRH7$gS|iTjN62Nm$I&xiYZ$ZJz697WP-*|haDwsEPQ&A?Tg*lo~dPb -z60NOQ&v}&cD_F6f -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 -ze|fK&IK{*M**w>svz?7xj(;fHzngajSy -zWjnS_uzFrJNpHQ~o>=~CtK~Y5ap%dQiT -zE-;CkmNiwCf3T69UNN^h*;4W2+l}4MzpOqRdmgF3Z86!oR=smo!Gl -zKKbZVz!9G=hJGt0)<`r+dw-eM2JP$UWjBniV -z?c`)}v42lY)muMZP_Fs9^{HL(pRDMXvw5Mjr>ziA-yd3fLNh9%zkhkwX}gl|JfEh{ -zowNPywt3!9&i41S2IRZ%?%iaxD&I(DDZk#f;&gN2ut*t$lCLuLjThhDXH~!PW$(e| -z<_{TIFLW6hMn#G*{=YAfxl(m!^V3}ke3Tc=OFzI?~I -zfV+(g=FG5|afZ3`V`;SOv4>vUWjCueEo;{j=MsDUMEBs;jbFl33(v~0^tL)!;~B4P -zeg0L(w~01utGC=>>M{Hve`{m?q%UH6u7>X-&kJho4P{%Jx+LJ2<%QMeQ~sG2-t?_d -zIw;n6Xv@(T+cJBuY4u;c{;t^A$?dsY^sm(y`ZNncfPTOVPw(Os2-)E-(_c`7#y(#BPs~cO!UA_zLGH)|m=6jx!FL8)2cCY{6 -zaan0;^xusa5?16o(z)D+5iJVI% -z+8#Arb4yn!Un;BU_F3(!nd4<4{o%>Ap3sMM6>CiS+Cx4HAr0> -zTJ`^{%I0fK`!0Q&rEl>rG1%Ym(#7nJ5&wUjtZ!-EKQ-SfTs%j3=`o#o7T)W3_nItO -z!eHbsE>V!rw;*Hbgp@ER*{tk}tY^WZ&e0*E>1=-;B`s{r?oBx&?Yg${&ckbB)?44H -zb|vn5{hPn0bj_g%Gwy)NU(fG2d87WE<`fZ*O$O1E)<$n|aBKQn8+py`UEAr5e?@I~ -zRs`qIe&}4UAh6VPYtY0d%vHyf}Rv*WV -zpW1WtT)nm2j!()OMl3sJ@#uvMw@hJ7QK(E| -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 -zsTps{@S(Cot -zi^=?7OZLbK2(92>c0uX|ugJlxJFEV>c>6qO6piuO{ZA&9a}npo>xt`1z8eSx?ESwr -zWshR4@%+!hk$L(274Ob@?)_N5cB;nx=+AL|_g##ow@>annJ7|a(G}gmd6jF1Xw3$< -zuG|Gpd?)?}WiFXHLpn~vOGY^1M`52)m*Q-@sjQpA4*Ycxp0B>bhW}xayL|nL=k5pR -zs;u~QxG3`qql3Qs;$mcQ1tls9g -zo_$Sk$nG`H6KYxZC0qYwxOm{Cz05|L`d`1Ts{h8^m9mY~bKZWqMeh34=?|Tq?u*;* -zyY%<#jjlic7WLZiK2TM4ckYn|&+GQEHOhxBzQSCum)YwXvtau9btVO~`qzhDjY}|g -zDO7C#xA~|149WcR0)e{heU1SVDI2u^^aSbEADA9CYi@SK-*zqD7s48GHRqbeFP#+^ -z7ZcaLCB8huQ;l!d>*k0hep-LnnU!WHZalU*V`jnD6=xVO{}jG^fbHNp*&iS3s~$C9 -zc+>J}>3qYf5#Q|IeR-u*uIZq~YRSsOclQP-3&#(of=SPPemJYE)ZaOwx~u=!Qi+FV -zNs>-B*h+kY3oRNp?o=bDVY?YYDM+rx!-p4mJlHpr}X+07q6 -zcu)NL7TurdR2H)Oo_dh%GhO4?oR%Vs`X?>*k@f -zb@SI|?S1aF-i9S~eTT}zUA8ltq$mEi-x>cwyd#0p;6Oltzrmj8y>0t-ZRhfa@O(3@ -zk(7%IZ%|L0aA9s;3JI!&8P6 -zN(;>z7ax0ix!QJa=(!}57v4PT3ual1+I_ome7j>^VAC)z8V4OfVO(zRi2=foF^1BE4U_ofF>HcO;r9yFFhT_+8iWyQRD4>in4= -zcj8W!y`5md^L%6SX`dSTUWv?h$L~dDe{xtJpHlx9^Qg(ScJsGmciyqD5BS7-Y2Tji -z<#sCP!|r@rwD~;y^INCt4#{!yd3A1mbS3la^GQeVFxS^!(_8%GfnjoLf#ex$LD}nJ -z`|FdQ%;}jdXu87qd2^Yx=dt%o-kxT#?Ftk7+I*U8s#5KzyGaMa#5BAFgurq;OAE0JFW>sO -z-r4?jn@ZcmHJ80+SzdJ)$Ws0J#Uei{`$kUGD3Gz=qI6M69&(-q&2U`|ZY%SR=!RnHIkz+EWh_^e#w%TLh92M -zk5^X|Nk~8SNlrEHZ?0t9*>p~N23vjTvF%z%r>d1c3eLKA#J;eGzchLK7w*-;`lYiM -zW^G__IQ}q?O|1U#qDz^F{jM979b?aQ*W3D8(K^Sb=GuEkxeYC6j%5a%HIm}v&JQU{ -zTs8B^4HJ)V1}(2t4H>^3*kL}~KVZ50MT=txJ4xgV-kIs6Czivr(E^&~W|oU7d$aUs-M8oyb_@tfKELwz7&#`Rmo@=8DGr#yJJ2 -zHQhLrwy!=~cGxRg;N@FxrJxIkTn{NGYUo_Kx{FnDkCZUC40l6%z-?R2>jBp9oxNt& -zE)!bne(PEFo#4X-Ki$_l-c*r1mUm`BhPTU^f(`W%R%b7Wd0m>uoF@M#Xt}ntQ^Ws& -zP7(1JDogs`FZi7LWydj3g?v_xiStZrIZBS4nDoC*WfRkB10|1Ax9C;oA2;oHI4DuL -zRYmZ=l}Gi#%d-Ow(R^Tg(h2<;TX^2gJtF#TZy1^hM@f10-xyb$liU|NVdAy%*D}-cJ+SD$=JWR(a`2 -z&dvGXW|=T`wX9&<;9%?6)bwWFomyvpjr)gqIxKQucRnfkT{=(UmhVEQz#_TsV!`;= -z7m|(Ft=;}1TFSxWYFn9!x6SXZm(F~ga;W~t<y4F|QRG=@#`pWY@B*evq$`MFB*@7aun -zGkZ>jPrKJp{h&*F<^Qf5zA=?^)0Y)?NPTH&l$D9xaJ={Pq#LDoYixqWe@|Q{@b8&^ -z-{f7s^_p|6euqdUNt?8qTwWd+7`Sx7t#_)T1)D0@R`{8E{Zn?0Uhr?PxzmzOGT#MH -zg)Hj4sT?(4AwT~WSJ*6#g;MST0@-563o -z8f`r|zd&@e>EhOAZmXYn*V|a0n<7-HIJq^oYFhKZ8yAD>W!3t`Prv!ipT-;Xng6tw -zT-fzpe!H&LhD_VjpY~DgsrkPCXwSch3B_nCnQ? -zv`K3mj#OsJ&Hu5frv6Mxxs3jy6LVt~HX+4KY&~6fV0PV~U_%y_GI7gXN!uUwZFlNJl%G^x3~o62zb4dwo%^x!l0+MK=FS4mygSTm%YB3I@cmI*Y5Qwi -zA-nw7%ulT`|@`mge-Ii^GW7w8qW3P3VgX_XSU-1Bgc%pOu_G*I>jX9@?6AH64qS{ -z`feT@c~@1t`NetJYo!{?%dDTYRK3rC(_qVVVvlOcx)Y~TdhTkPTX$``_pLbY+O0e0 -zDGPs`;Jz6gcx9mmqX=uB#aB^&`;1x5&*#O*GVuSZ&o`U@VD6ek3gdyC`5CD#MP54uSTk5-<39;eD$%s#*C%@ -zT{5jxo>Z^R@A^`I+gbM0G5&<}N|$&Iuw=rvJuU)mc*-(2LaZ*1{?^G1&M@(x-~w?%^=xmB^AD4X^AcBXsT#xu{XHZNp! -zs8fB@a4e47b3t-N^yT(owgboBtlYKosL+FdTmRP-mFI16JKDH-k$$~spZttB(fOe^ -zEbV_+yM^#Bx9It?;KmnYC*FFw|LI4CBIBoBlnqzRIdS)W%j)$`2~ztv&3VAEChzE1 -zd8zWdUh)$e*y6Zl*1G4Msd0;2c9SoSyQWz5aD;I6%j`|xR9D|$*(($7v+X8}f!9S= -z$xF|f%hoZ*+}rP?oaTR+(bV`{eXdcstKDwyqO&I!O8)9;sNTrT{gJ^>z5Ce134GOi -zvi0RYhHmuVA5!_YH?HzYjhJgj?2CQsa@SOUZWQ9bzfzTJf&80?U$*aRUso{Y>xYBC -zO|B_cR4At@y6r~Yb*OY89jXf8L(OmwnRq%+9Un -zSiREYzD=LH%Qxx%zK@^H|Fe9M+EZP3rC-20XI<(NH(Ljt5AFQ>#hv90_ij$&$U1#C -zRcPaer6<1HecxL2l|wv#mXMU={9+&0hSb+QC!RgO`n;}@RjVmM<@1x{nVU~BOz+@W -zUgl9C^H%ZHh6#(J%WQ<^Pj%|^^HwyAC*H^P$?8i)wF)*a+IHXmB9F=fmj9YxBU&P+Ejy~gu~3vp-iTr00W${AC4Z+* -z?bvgyW8$9~50-zP`~F0-!Vc~WpF=k`_c9tLr#O^3EPe3R%UVWECE~(yhA-m&4pBNh -zZL<_4r|_Tqx?9`mk3O@)A(zQ@Qu2bc4X)q2A#IjWVsqi2Pfb1JMyK0dzZnlXg!*p( -z@OSZ4x%sJ$pR_-#$={Gr{~^MACjI}mx?i*Uowlu!Nd4$=?7QLl9qz7+6(?o)S3c_r -zKJU!>`@mJ3rkOW4Xl|~2aH-w!;M0q#oAT^;X{&_u7=19?c}(cSl#t#)|IgVo9-P}* -z<-H)J@5(uQtw{IfCRRtx*z0p||44pSEwb?4agT&|J3d~L)!iNyV(dFzN_x_(8%gHA -zKHvQuEL -z>yzVQsj;UFee#TzPkj&#l*o0|OjN%2-E3{gj72f&bGJkuy2gDWqt|uiy_QqQ>V0#) -zy}}Y^vF1GxNvUf15-+QLKp`vi&)+kzx1VYF7~c4DmiozaCPz75oIEb&5u`siXQA%o -zwM!JW3xlW4STy;;xdv08xp%7)GLFRE{kNa_Y0!*$4IDhZOdZWUiB<=9_ekH3D~VaO -zUtobn-IJI!lf42Uf_U$gF*$X6pH`{3!_RCLlXm2w}FL= -zu}j*#63^Ain`f~~R9x|{OBLq+%60n-^VdiE3wj)$E37{D`f|j>?;ewrCR|xPIqsCx -zbLq0eeF=LtJz2xH+I@K!_`>Jh?aiVVk3XN2n0>{t;)BG8J!cd+dJUUiX-5l`eqN;E -zqnNPi^so9Y&z`QFkR9{$hJ9lkCVhBVyz=SIog@s3uC>k -z)MgZzxP>QpL)(;)J?bsu%3F3iU7XWgaeckdg7$KEAM3J;dO`Nfy$qY>675CqwJ|)a -zh;hl`eJDH2!EE`BFCxvd75qw)e_K}_ljGQPP-o8Re4T^MtM6Y`o->QBv$kvfZ#}){ -z_nV%oFgVxxM(4PTYv$~Y-g8jOZ_~+{Y>M}6O)a|W%Guv8xfh!(@Z{FE_@#GRL+|!> -z7M5{;^`3od@$Tt|jOyyI&6zdxyilEu^O7yEs-l+c@Sc?T?#A^yftj_>U#cHSouOmm -zx~%>7*69U}4e47aiO8*wtzzz#4nC8qRJxTr@_q*(IkXWpe5yO*2FZ2ZP_aMxe1`1O^iA}9PRRj;pesJW|o -zF|Ir+u_jaNF=xEB`FlInhtboQJ}P;=Pn1VB=IQB`zLC>=BwF>4*iSsX>$ywwt&XHM -zOon&)l27H&R$H}eht7k?Z-YZxxME)|vk)u#qp7x3dr4m8jHmg9nt^NP?QwF_QOaAY -zvnJ@#uaeB4mwm-n9Mrp8*UZD%IMZLZe$ynqAJL))m(F@dc9f(aQk$k8lTvi_h21gL -zx)0t{r@lM5B(XD3g;ltF*2X_oj|w~#49`4O=(*yNlr1%_M`Gfk6TT~31m73m6u*&` -zTAB4y>H5+DhV!XbYjOpmFGf!e4FA#}Vyp6uIk8c%#%o8`jPQ>)?sUvZ)jv?oyB`-oE)hDoH#h&=Q3ojiOGq{Kq|0=8|s -zqd)l(_cU)4)~cubN)_ICO1bJkBj*8ZYo><(n(N)aj(7V%xmJeUgezG9@ -z$1z#1k9xmsE-asKyp%Z5j7MlVFqP2K!3 -z_0c(j9o!vTChagdbnPH(@6G=OqHiUucX+ki#BAj}-?v7{{oSVR89Ii4^m9`4KltpJ -z%u&PC7irN`aIjvKM>}U`@9O1}F%ChXut!)yEZ*LX|VqMqNIMt+Bx+C-%*A|iKPp8d2DBu|Q^xWf)dcpF> -zyLPo=9UHoI1U9MeDQXjED>z->vBF&Dz1@nnPD}>bGxk;PY?rVToV@<2VvW1WthC@y -z7k?NvPyA@GZsS@H=g$$zN+NISu5A0kYZo6?#**ESvc=C72`F|T$9 -zlg-}=0_R-{y5>ngZPw@IDQSCpK6`#+&#gwY-@%IGAHzuX@-lTahW!KJ}Mt)MkTk69ZpHR3+%T -zE9{n#b(qnajcjn5IBR#+FN -zqqtI_`@+#v=ekTB7!w1he(8<+#B%0B@zF(#zR5KIVGTQY#7k%eZ%5QKHWBglzqfQG -zUVp@0pHu(z#TH}1?t2ZBug-P3b)ewXibJ9y8`E!jET6Q}=eO$q?C(78t*c8Mr^b6n -zcLZ%?P3m0qHG`FVzF44zkk;cRb2|g4d@o+=5bb$d%r7=H!|FOCo|q#FP6~d~fi -z>c`8w@yMjZjai?+i-#01{TR6TpWX4scYiKy+xzsebY_#~f771eS1imXWmY`9AMAfR -zP3!oQ#I_9^VolDRREwU)*jjhjdB^=z6AU^Qawl5)ZoehxH;?60nr*u%>tD49MQ2^V -zC-&zp?9{g$5OkJ^*V$HFKf$hfr?t1)bKAWkN)jpct15No&)u~rQgwc_fuKao$7wzP -zf3tfv7%cL1|F&fE{|!&hJ^Z$OF;hpZ*L;qrtqi5nHYa!cPd=l0xHR$N;=<4T7iXkA -z6YfnjeRy=ec|C(&!kFSOg>S+_g!Fy -z`i$69J(CTE4rrVyu1Q}$;l+n_<-8R)i~>zv-KFA`6s8u(Ukyk)&vGhjruwIx`&)e$ -zDle)#WumHiaN&LzFBZSeD?RQt_#Cuzwd&%S*vrLsGNpybIq -z3JBF(&D33ze`(c=rD0;3Nz>FZs8UMP^(7 -z_d4}GtBpceEsp1Ich79j(iPbsC0CU3D=&0)^{i5}%J^kLhx-*KDtQV1IN`IdFS#fB -zqC%v%ioAzgkI=z)vmSOaKHIXz%&FAXW3lN4HNLBrzv`~tFf@CRc;q+t#`zx6Ng|AS -zTXxqkx|@4Nbz;xPojO&0g2AsH1ge*^{j`v3d)=kiDs{8Z^5=v6+f#BcD7)_d$9^}| -z;85jJfmhOLmJRKn3+&B~R-S13786;xsC;dK(Ur$uvR)D^2*Cr?~&{1st|E{!i -zF3*Rv3+Fyu)IR&NRC6!y{fO$MQtSC*F8`GKW54lhUuzX@joS1v;+NsS1#hx_zRzE8 -zed3nT-6f)z*yAHNmCfJ9Hq%-9gWw;vjhmUu)ALS#op$5di~pI;GlUI(2Y7Y(9;)mJ -zF#F5?>eJ+AC(b3o^#>f}FHGKe>&qeC1+o6h^5vf^PaU~?lj)sU?Fvryf-5Qem6RXO -z*uBf=yvmo8`imD`_^kJ%Njv0sOZXO1c`MJgQyte#s`Z=mC-uhf+@4>8Y0QRIONx!$ -z78(YLA4ujp8u*Cmoc04YuZ{U)(@$%?PUM-AG-XA{q`2RgzI4vZxAYCHZ{~S?g-t}` -z&D6s$MN59wJicOjW716R*V=dg{mkkW=J$Q$e>be8G&b^-;I#EQm#P~goH&v;O6YZX3e0K`%M?8*9Ju113H!oxmd!2-9jpo-XWX8s)VUwF^b;ye -zP=DdG+(?Gu%9|Xkh?I8|qR%Zk`@vY?_D)TigT?GJj7z(l^<*vL#AB@t*8H+*l(_m> -z;6i=Zl3VK{@04Y5*;Fpw{Lrc7#@66F9?o5w3)!<)EaKY34(L9 -z84;`#E4B8C2=yNc_fx&g-}Oj`b$&p;@6TAd&Tw+Y-?qHX%4rvz -z&uE11e{b+P;le!*~e8FV=mG>Rvgs&Z$jk2*Py)V4j+vfGKa;EYw -z7WvhWKUYt9wr2i=&HsECI6XdpR`1}dhRweozn|tg-LrUC-r=7f&M(z2H)MqR)=yJZ -zUby_V*8jr?4{e?Gu)cfoh1#e|*ZmhPxs<|YsOnymzx^(Eb`&d -zc8_-Z>e9xn+~zp}oX$d~|Bs7I4<)bO -z{ipxfO4G0PAFta7_g#HoCM!wtEq`}f=&MJ+LWHnLzTL%Z+CPMzl-Y=yPpW!5VROW4 -z&d+9t860)q`}98*Pq*+=SXg`M*#VX=?U3Z@3T})FjIGlh-5BNS6$CiAm>e4%85$kb -z8xlZAsIg375#nG`bSz+V@5q{a>`GSY^rDU@wY|#xvsAV`o@?LC>N8hJW7A35+h?22 -zH>$r6kXv$tGvbKq*QbZK@9Es2dGl4?TcqGY08A}ui*3OF5Y4A46e-~%>X6BskJGC(vSKoWbQMsd0HLM=e9?Yea$jkh3$XT -zuP~HR;k3E*X_KN{e&3f%FaEOJmTEeB`n!eql3Q2xwky2;!JDC=$a-@Asq*@IOP$sA -z@+Jvir|_J*s+4k}De0=5;g3h#7M$+Bdd$LB&s{e3pGa1&xQ_F#FGr#$1RdiH^HZ}< -zKFAgJi~VB3r59X$5mz3s<|;aRPUm{SwvB1#H=Sp%EV`+9KVUGS#*%3M0Pr#lJS -zHMSRhtk1q-A};nxR%MM^c4K$G&rx%Bp|f+hi2FU5@@sGW&d055Zk>96Z>iLiwWcZ= -z^S@p5T%dT1u~M>{J2aE?@*VzwU&#>*wL5lafh{L&-V#JPo4=2G6+AOnBaWWOD&i2(~5{Y9WJWDFP*t|xbSIAfAQ`0 -zl060OU7P}^Ub#3Zullg#>o$3*tqs+Fx#+1B@qqNQ^M$`!Bg+jAt>MbwGUc@^73{qKz&fp2g9v#60} -zKetJJ`SE@GLe8C;bk;01ykS+ZPol}TyA@2l$@&u|w>g%vY}5RrqO!;A?2H3Pc5bt> -zJhpZ3W#?@no*z4Qlt@2OdFwyrP0U+oj{4%i5pQ*`O03)Ba(?%NixR?{xl2^subeYK -z78c@D#r0^WNp(tF-PJGs&OJ+X-6c9qSs!KH>nmHG*Wy}w>Rw9yxA);0{d=nRY5Duu -zikRQIPBh&iYG!up -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 -zC;wqT$FuB1Pq)fik0VS -zw{LA4&!Y48*V#t}%W`Gw$yTiLUiYlylwZu*>=L)?!rN(SSN`+Pug!T;_(kmGuZC|z -z8|w|t-)&wNC;fJ9zirdWJ*JA03)`kg2wVximA+4R?Yw!Xo@;6UdJsA3Ymm}~?E(R3 -zJoxM0-PIG!J@V{#;k_?R6IgyTGlr*x?6nBlJM&cU?e!t~GeYtmH>qmbZ?0c)CO$P) -z#qpQP57jN#Yi;};Y`cDzKFO>|vCQvfuVL9aHROv#{o!lumyVeSZNFW8^>xp)cyHy% -zwKI$wZ`8S))XYwsoipEk?w>gOdkjmmd2W_CcI`XWo>V<)&%*Xtx$bq=5$qB10t!3b -z&aIkJWXExH(ahIBwkvaqME*FRz_les=KOhIe>W+)^#^ZVWr$x9akuEC$c`AFtj=|E -zkzFfq^`AX$_M)f$srWJO0+FjvKdioPv3W<{1qSNM{PzxRrBb1>9#-ZTw2H95w} -z;LfFVXLFLCbH2QsO`rL~ITLrT&5bO5u~YiT)nhN-bZcp8~e8&d-3p+wbq-DyVDPDyXg39VqFMN=3h0{m8O_eJ8AGuG>XHompH2Lwa -zZ@-!DNMHY967+swz>@6}0dJ&w_PVb-8L{|nw0NyTjdz!3k$hEMdW^t^*M}|y*Y|9$ -zt#2)Hd?9#Q;*DT&=d53Ry*5W;c$8n>W-(+EoDwbjE5y2U4MXKcNu9*Ua|Jyw2yItv -zGpT+tPs4J7VX_BX+N4F3WV#m4X6TBTWpd32O8J+>;2JDX$=iYI;mQ}(qMzkzJ<nHEaE?HqDF11&1#L_KE8-ubykb`OBi)|KO8i2J;{MiA8_r@W2bUaMGG!v8_Y@TkH(US3Qo)xuSzMhk -zIqSvu6`|fQ?`!q)G;tr3s9(jr;eDk9Z`SSxUz;NvgoXC#$bIPF{tXQ`wlj0? -zKU&cD?qtW@X}UL!^G`BKXl -zk|%$-vfWFu4V_+mTCu2#WkQM1(^U)Jm`I1b_^CPlSK`OL_ZRhC(9QX@NpP)!aZXHZ -zaQZIWg5cx#`fJ%fYH09j>}&r1cry>vL57F*>T5boU+wXW+g14Z#4^uSyZH69-^s_R -zg>1X@bM-+ZjXe@qLKIpbq*&j2`Rl`k#|DpM4hPhxo4R-W+xMrXe`#XEii`zQLO1pF -z6;65X`1_Fh?i)$EnEO<-E|A|DEHm7P-D*oA?~h=?>xmf&M(O=bP?ZjJtMj=>#xSH!dnhU^Nnww -z{eE+ql9T%REf-FA@2fbPopgO!Kt;*Co#xM*w*5-%tag`te#51H4$G2+{la?|Kh2J= -zZdvCivB)&xqR!<%|E4EBn(cEa`tkM2`yMS_=9y^4(i9Zjy>Q*{u3u^Kr^A*>u6Vn2 -zV@kZR%kAkK*PnIVdd${VDKe42!P_#{viGULPNkrxqfVUD3jcF{dvo>8o6;pWUryhf -z^?%wey(ZE8_ecI;^%RiZ@19lP#>;R%VX12GQD(-5g_pkb^<5OVy6j?bAjnE|X9$Zh -zD_>W0Uel5QJzk!dhJ4NsCvX`)F@K -zFo^f*C;q!RBkcUeX623c!7(atWi!~OZ&)CEfYn4Wt!UGSSJ4)>!Mb0o3||(0spl3t -zs1>x~!g`emvm__cjNC%5T{kL1jGwKY^#9#v*O|Q;r5`6g;#HW^`OBE)a#WdApVmjV -z_jRk6dW(1N|CX#P(e$46vCD&Ji^Ps?HcsGGW3gN7`g)P|(`7~+`b8{Zt?GOB-?=!a#aHBxn0(LUTN9=0HFN_eYfbN7P%`0e3t#Jb9xhJfHV!`< -zcO!;Vr#?llKl06~E&gYTZpy+x3l>FpJBZb3O<%*hxy{Cd`83BLt(CVTnsqK)t&i+v -zcmFG9+2gDqwxRArn`||Y)4iJK%NvT{msK8lli7G^#)iN0^U~CqFJG$N<2+%8o#mff -z=gU6VzO6rA`1lVt5#M?;3zIYn8w{f{L+ -zy}0T9g8xTf9nB7Y&mP_IyR&WUtB0%G=u*K`8!PHd9Y5UF_j&4S<6l-1@=DU7tnqPS;xEIM^%-mS%dFy8{#$d0_v#Mb -ztAFpO#X6TB>`Tw(_$&2rY1;RYS-Fol%zMD0_*vn1vg_X;>)(bxbiI%xUjH|D&AH8w -zot4ixcf3oIjl9yyf2C8xe%8S&9HL*WuD-D{HH-Sc-S26?U(U;&+gBJjKDqRjdxMF{ -zd7pPp7fy0I6>m}4eEHb_dQs=+5|h8b_R14}b$`F}YlnrOJ{~$YJ-WmBBAb+faH7Md -zd&ySY9kg~bU0$`Sd39sDnHNfJ*WN1>WSqCtwA#*TS+esA{@TB)3JQRREXY}@wy -z1`pF8ilz%MzUuO_Typ8IAphizFZCX))QQa7JHe_@@vFFvQHN*{cZkQ-9eY#kgo0jM -zsY(1(>|Mealy> -z&U|YQpU52!X+N%(;_q`romtK;Ir>WKc-OUJz7SN^(2B+-+{8%-MX99pfNS|*(eC}-@LT&ePPSG!5B@(=TOMpX%R -zt0Uz#JSQ_;JTAj);r`&X6Vrx274QEsM=$oe-p_gUM*Xz=I+m`+lV*v@2TF?6ctn>( -zufLZRXgZBYJUptS;_S=&CqB;%KmV?^Kuqt#-Ioo_$}MIF`%F}oKkN(H)N0oGLeL7W}$F>1(~O -zhZtW+n1=I=VLQ#S=M`3lC^X@}}|W}jPggi-45 -z#uV4bEL&N11h|(TYU*9nqV(XxE={fC^&3Nu)z4vgyg$k*>l#m_;F^Yg(>KKZ)MB#s -zc>5t@Y5e~KM=w8Mlby5U%t8LfNW_$Zps!Z^ytv@+1Y}4|P*}v8&K9o;|+f!}T#y3H1 -zbC&I%BT%!e{{1`d6;hqu-Y-@~NEts^8xs1fzI>}i*h@LzH?w)>{VcWm{JCLfk6e(- -zyotFpXGLsZ>#KU{lgcW#+9JW)nos+WWj9;#XDzupL)Ma)Lu_G-+8dKSGAh-5{B?hJ -z?+~7HTICGmS>+((9qvo4@*J<Oy)8KGvFiWwfuE -zAMsbW0_|4CJ6m)`r7UwEhPm5*C$XSDEkI(<%vxzRvCA#^5gi?mFT@u$lh+&#B^1cOy8a37yZBnP=R&^8W+N -zPVN`Q=epHD-tZR*1J{Xd*} -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 -zUvcX8Bv -zHuUKB?337-k#O^m`t>=?+;0qCS}xF2UdHTN>h{Q|?_1-C74{8xcZ)~}Z1$87^o)Ez -z{XqSXdktr!Kkc%a?_^pO#n+bQ>2&ZXQ~D+IiGPk5e(f|qqJA#HU&g_IPUJibc7K@? -z^>gAoR2@nm6&wydXTeebO}S7w-EXRiTf(xNZPvoa!zzwmYkOMLG2>yJLaOQHR{rqt -zn|$*(-F*FG8j1*-fu3Z2ew-NuaKv(mciGtYjx={_fERpteSU-kye?{plF -z`h9@&)#)7JOX~{_9xYj&tJuQ6DQR6TcblW@lDC43{(5)jSJ*>pN{Y!CBc}CQkLColHWw@zZzvz3t`*$)CI1eXZKU@CLt{ -z<=giQjPCKLEvipGF2cdz-ZsVFqPYDq`*dy%*Q;9=@GZT$S@MkXmOBc&mOC%i_ptEV -z(>mp%w*aH-61_u;FQ%SlIsZ3&b<44$wVUpAxN-WHhiXN?=q&m+`$~@VJbnM|56o;B -zPa6Ff(LGVRzpdP1^R$ZhFWv^9sHu!(SKR9B)WT`V+S$9CoObems|I -ze&^uPiC1|KJ(_EADte*DwVkg27!MhLx@>sc)^pLJTT4!6=mh+Jb!OA=Pv5TgJZAK4 -ztTmQekt-s%X8AMgE4Am$N*ZP`uv9wl6D)O3$&W~)bBqNsQ)j!KbJR^++ -z)_*VFAeA0!H8C!$GgvF!OeVMfLEbkl>DToUQ+Y%E7r3V;x2|uTzv*Vlsb@E*@Xpqp -zU9CBLN03=skXh)GoHgz@UG8W|rw5u9F3P!6x;(&a!uGj)H0v6kx0LIgtUh|=^Nke# -zCA%}{N1Z%ul%`~~RDMdjn&GRw8!g=Z-(+m#U$958`fR>-*S2-@GETE?b4w>hv(!t^ -zwEca3V_rwpPerBO``OYw9sZi8e7W9H`uJeH@m>AT$+68>r!&4d6TN@giuliSCT!)h -z+8HjEAXl_8ruy=C({sOPt^7UfXf5x8cP$U}f6rq4W-8Df7W3Es$qa$coH`RtwMag$ZDCwxowm>7nRMFJ!a?yqqXp|mu8UGX{`}#0yp!RZSzZ(q+~{@S_w^&D$&XLJ -zpDVSQS7Gbk9dmjMdUvQg&hEQ2HP78L(6{$9L;J+l|MirYZ5FBD;u5l%IVAp9<{wMP -zUk;2pd*yb-`uv&5@jxgdIr?(Lp1xbN4$gGDB{hp@e};1O;@^QHN3Mx%cKNWCZSJRt -zinWS2x3XPM%-6l0KujH7$ZaW#yE@O0M^>J=Hee`qqC|&C_w( -z^Mv?&9lVL|QA^}G&!248e_1bUz1%2LA%%nC_tKqj-yL--c>L$w%im`e)~&r&bbI^v -zmyQ=w5@RBwSTJ)Ms$~0 -z6;wI&C;n&o@Z|6HhjXqlZ0qq-fAXlRifi8OTXi2ry}LFQ7^IePho8%gS3m{gy5 -z{m+Kk!ud@T*v`xNI%~x2Oq@l -zQ8}gZb1Hjv#w>&KcTsZNRylmR_QZY0;%_gEy*50582`!e^#SwASDzGpl1p6G&8>NM -zA#+gq(AS<%lhSLBBN1m=yw`@@R3`}t?d{or=yZqBjN=o8#&b>ja4md3>n -z<@sl`gw46?Ws;fuZdU)Ew|C*o$DbdxKM#xl9+UCz8UKvWn_FJ(5ucJ_J%L}%k@Jq; -z=Af;wrEkY_ZjH>j#&%iF?#h)G_vo+R6jLOfqw_nIQUd3%J-pU;_N!`vEgIL}=rljx -zTqh^0bK>rY6{^S5mG|rOyUy0Io855W@zi4de=GLz`)qt|Q@OUj%=NgmuF{N7TYbC9 -zU0+|;^sRsXD7*6PtH_FD8f$x=wyo!Iw=iDqv2@Y1!wmm@_}47k`=GK> -z)2Q^p%tQMRX0Y14S3PVnpD+I3j#|^-HltW+3xwct#0uw3pKOp8jh1TrTV4Zc@wMmcu&2h -z&A~e@echU}&8L}HC;sMmWw}CZ#nzY7M;WJZC!5^!y&u4wzE8cba_^KEv;X~!@#(2N -zU$iB7R%DlYyW+2!<0bDj-yN^I^LN_xuKXM6YtM1c^!>iF`mr>tf>Y50Y3mXeyC2JX -z*s6TH&#&qFCwaZPc;l2$ocEqE-xX&P_OyA?ThGXJB>1bqm%uOQx7=HCN?XHTko{U> -zS^gOxfqzbpNzW7-PP{kz{J+QfVd2Ek*?$zfs#bhsUs%}wsdsx~?S@tfmCf-j)9j3t -ztv5+^t$CW2vTpDEP^Yw`;qv9@4sO}9V9!d8RMS%@66C(w2u?^#&SSM@->jc@;bwYH -zbGE2H}J)+!?8mH<^58V2?_SApp -zX{*|Gq_><;j^CGE@-p^>Q<@_82Y#=B6Pp-H`!b5`?Q8lC7R6>w4%cz;ub6i*I{WaZC-sthL#D<&XTNINdcj18 -z)i_tev$^(%WYRx*IbJETwf9ukc17IN3hGiSlP=yeyTdWL>%im=*ZQ40%1M77r7myx -z6V;r!zj%_bZjRix!$M1X95r~03XUqMuAaD3(M_$(Z`0BqMYXS`_7e~6y!Yp}Q_dkS -zx9K8z+YZgX6}o4`+u#_3Vpiyjb9#GyeT+%^MOT=_ev%G1P4D~ -zbLCqGf1GD$HlIEHu6Ix81}hQkMLFzuO)oYbdRkR|QIKF3pl?!62azT9Wm88Fpn -z*Dq!*v}-GAwBKX{2rC%XE(n8>(+kr -zz=R7Q!&eoAyE&|^SRtdudTx)n%O>qVnioZnl}`%(f3jX=d(HMqFS&wk0wyUSy+$)=wRkf-&eq?igvrxrD>5lusNqOpz@6Z3ab=r~V -zbD~5}2PPFdR~RYsEy&wGYYKmt&bI4{KeMg=t~1>G`%r)5+|3>F&wO@#J<%=Ywd%3@ -zj(pXP)oflbjnlMm*w>rid;b1;v))Nn>COa6ZO&`!lh+)P>^~y;)lJtvu(s|$ufcw) -zySi&kzuP#8zsVERslA!P8gS&(W7Ga438g!JIDX&Xx#O(ziWj#3KX5SksjquHA?91| -z9WG8TkAJ47Lc9&%o@=vooKnh{%{)Exu$zybP}9l_ifzdcO7>Ywd|&dQev!eq&-bRD -z_|d~taGFV3;mE2guul62~FwR4h48HIfy{yz%u7WwQ -zw{yB*vH8LN-Cs@n4%;tN*Sw7z4*As|XIi|;PVSjj&GFERjP#2xhqUH=4^2#Zs-?90 -z(7#oOn(Ub^w7Rrv^sdS?rAL&!D1N$o_L-+QTBmp3`F2KJ|6|s25q5ta`QH71cdV*9 -zx@YP9<;h(YH72*_zhDj){#icb!C$5qSrfmOg&UueO+H?>(dz%fWe;CgZr9JA%GP%G -z2t)leoef8veg*$Mx;^m{W8Xx@AK1o@-`}jUTroHZu>wT&sg_}#N=^1sFMR?^E#Il`7nu6cj$Wj*`X$tUCDzir)bH-95b``Q(Y -z?LFC@6$CsS0t6f{CMfYAYsy^oNT^6CR(ERn6o}5o9Tf)w>x`(?H}oV-`$s;tgCh6u8HfYc(cdU>$|9) -z$E%x_jHef77-|Ht9DXycFOE_FO60E#dltOO>99NfUtO@@K>tljdEogTp{k6CN=8px -z;i=+g4&`bLPg~FJVDL5H-rIGlnj^G`FSV07Pt1GZr{^$r!k<8|$2ae9kt|%d)@ozV>iFO{SEpCT?C5%9 -z@M=ZkqwG(6nZG4y=bzA%E3fBH$=}t@?JT;jeJNw0ODGS^2NQ*cYx4O`^V+$Oi61IH -zVz7m~x;k#%xs<9OzM=~ktrc9eFtp{-i=3RrrcUd8G&m2>Fns!LMTvvG#u5=V)#rb7 -z%qDK+`N4fl%3IEWwvT$# -z!{%7=tEbLc8#mz-jbusGP};~P?F454e-d|n&-p4#C37J -zE{o;L#i27q14`#?=w8YC?}WfV@o1BdZJ+BKPdDz9>v{FKY<}yN1!9ki)-ul8ZRz+z -z%iyW3;+JHbx};NrI}L8sUOM#C#Yx6$0`G@J#h3l%{>FWJ8D-F`c$VnXq>O;#IbJ_uPo`@oH}XH2-0pU%1&bTId7E5D!R!kII~ -zx({9c_||FNUp*!EJ?-HiJ-2V#F8)jQLxnE4(TC97ZC~!yrMOi--g`<(JK8GUXzRL( -zjH!;dW;{|%3)p_@ndmGXh3A{&7`RV`9WNHN -z_JxZpOcG8UTEZFh`QW;s{}Csedp|76czE22aq^Mc32AatM=v=f=-o~X-I?pK>tN%t -zV3pe!61J6jW=!B0kBDb~T_G)|CT96;Q^7Wo!=2Xl{I}f0Y?pq{cCtHi;J9jy*1V;n -z+)m$Dh^>g|IM32^zgl0nzOyyxz&TOYo$HPIWIc=mZ*5xCEup|p94Ri=l>mZg%N -zL1xD$R>hbe`X9SI%k9K`=VZM{35lyGW;M5-o!q_U(OWyI+5Aj`GSeCN-&$QSTg<}! -z`hD;EM_g+fWm;M11hyQGIi>4ls;k9wSZ~)HjTlb5(tRx^XS%<8vQ3qH7!h1{sxG0$ -zr&DfwWbqV}uVTBe%hnjhd{HQp(>?g|`){>{HC617zAC!KPx#8SJ-M*Znc?Ll1Mlh5 -z;U-JuCtPZO60m+ZzueJE9VH&Ng0By?>ib)=+^th)qkH9JsBg`Scr|QRdZu$DK$=laqq3zvwb=HcLzHC)at;~Dt{%*T=!Y?=T&J|2^ -z>Vi$D-U-~1<5fQCwTf;}`iZ$~{a?S(GiF^{tlTo=Lbs?U%aUhp2ju>kEY=InFXKyP -z@LYM1p&~u|_|cl?p9>nFd|Io(k*j;(r7Cqt*iW|LpY_MiH>s35Y)fU-^iYspxmfR7 -zjb)fP7pt_#hIKw{LTRV2`Zy{$HWtOFxpkageBJfODfI~jD@p?j8<*`lsN7KMVtPZf -zd3)m>dlkE~cdnv~! -zFTq7#f_J7UZP0LSPqz}!+yDqZ*FBVx5-Mdchpbt -zoL+y;eb=dqU8NV-*I$@%R&Gbk`~TA{gnrvp)T)Qr(A?OCdjhC1>9`agAqBYKGgkzilUSA~+5(u<4g7 -zzI1H(!8P%%WJiurRii~~j#b@grsl=E6 -zbso-kS@H40ms@35LN6<%$fdPauVS=fFgvl&aix@SLCB%qvaX?p{zrO(#AK8H#V#)8 -zlQ|@*)_Q{D>~;OfLvJ-K{2m_<=UWaiQwZljB*K{tM&cogvS*Xj*Bjx^M -zT92tQ+w{)GWvi^(CU^e&anPx1cI4upb%8tDbTT&Fj-L7_GW`4If9e++cx2xuB+ohV -z@WW1t`ZaGCnP1<(%ea2K2Ra&EN~({&Z~@@ee+PdTHw4zDuG~lvX_W&VAsXe!-Xb_3uT^eywD( -zo8cTu9}B;T{+T>Y?es%!mEWRXTJZSZRbI^>rkKrN{7*Pj -zP5MoP)rGfVZQqvg_{L4CztX_7b;`9P4tKeh?yTASJ&CvVa#;VieMU9&TNnS|%W$iE -z)lQv>j|Km!dB525Sa4c4yL`I28?W)LSC5joqje^p$gGemYn@+oc-H6Fc6zS7OgA+= -zw_Ul`^n2q>#zX@av8x;`7f*P$uY2{^DDENizkt8ofy!^}%vc$7;)`>i@fp`2`nf-1 -z=MBlD!7(z=_t{O^Wu;|rcxtP}$&f(J#z~&`2PVF=>J^N(-uYgFarJzOlZTmZMc@Bl -zcf{wuZ%?lK{-Wt?@|S=4nD}gCzV0fPU3#BnIcA>C)cbUIiLXuUlHOCI5qbyst4|qR -zu$s5P`;co^h2B}a;*3kSQ#y;z^|b;p{n^?r(zSPP8a1S~39C{b|nOJVQY -zN!fR<+NZ5haF%G;%d*w%e^;hmYW3fXxl63C?wd9H!}o8&$zSIF*m(AC8t)PJ{2Mh> -z_pv*EyvcoG(YGCJ_c(jn$|fEwdT6S8?NNK?hq_{ZA7SgKkG8G&@OVbg+o+I#_2xId -zV!XQS-0N9``7?f8S=?fL?_=D;zLPw2{brx`Rqi|x_H)~F&Lvaq7Iyf=xERGG -zQSZv*yH5-&*C`bJ`FCKyZ^y;WRo4y|{WarSUUu<*)WyTo;}Q>FSzwV=#mBC?>td$M -zw6&R`!cBKW*;OZ`&bj5igfA)h3WG=e)e^4ThjsV(3yTYw)>q5Mv`TJ%buDO#&82AB -z%)7NpDf=z%O`XFh^q;>^NioVLFG2B-MA*}RGj1%9ddX$ttC_eUpy%vQ?ncILp^wY% -zwTi#&_L99T_Lo_$aiZK;=6HvSS_aJ`RW@;g27$?}#ExvMUz -z2i|c$Ju -z)Sox)?wL7@w}opca|Ez@Zl3P>O`$&PM1{#ac8}B@ZT1{qSth3UQXG#>G&3$e!yY~7 -zZmRIPimg2N7ctFP#5B)^)uU>a%~A!{EABhmtemY{(%*OL|88bBlRwOGHC^*;yx-(4 -zVmdzJT4#FRt20*c-km+kB{ykObV;=2mw+;tyk)Y2aa*@rFBP;k{PQC2{TT%=ua+0MY`2yPln`xrU-`O8@Mkz+ZlnM5ymbvKHlFkUH{YKU+1@qu}gmT -zU|w`5If&h?X?K+J0{5oREqyu%i#6BZd|r9d=X>HMmJs=wCf^@#H{*^f{PVv4vAxhT -zwO>YDp7W2@*Uwm?ZBhFAf`R(c`q0CFX7PR4qSf&K$N#^^-`>mLyZ`^p{rdKcQG#1qbFS7n} -z?{94HPq!!CaZO5o%+s7UZ<}P#>*%y|{SMYki~%n*et5P=mFd?DGg>bBs?nL>a5(+x -z8sYx}`(DW}o*tl{lBaa#TH9ORr;Dnc-x=u_U9L^& -z@Z8Q2d`CO&e86)*cK)c=SJ&oGTT%DsNWP7wC5PKHsa3ZXRRQw`Z}wNw -zTTN18VP`*ftl)Ib>Gw^TkW*iH|Fz&m`>Ki;=eIc9zs`?(wRD-cU|Zcw@%gh77uc_# -z_TV~8{vU1LnN|hbtZJ|Q7|px5gG5BPFE!k<)!^Y;8!qp*XD{^Tro2$u+3h-0DAM(< -zwsW*ef5)*Er!E9{O?>;u#Ozvv&NhahEb&VSxynHHNBTKfLp -zePPFve{t^`vV#*&gwK|)N!Je9b$Pn5llU2hWd3{JpB=T1pDSxIn!n`0mcw@^KeG^A -zoWb_<#lre8fGa;NsJrqvkL>j| -zOsgZeE|0w0pEk8BZR*`Ks}7`w@v3irWt%oN=*%iJ-pyXxGeW=VuXfU3{VX=DcITR) -zFVjMObyusL+jPq9puu-z>(2Om%OV!ezn)#8)i?F79?<$2U+0h5L~lh&DY%X -z)pyxMx>}dKd-7Dquw-+&)~VaN7Ed16o2T$FH`>fzvEkSa?~gBLPWc(T@1fjQ+r5U9 -z{;)MVJ#8+0mTyW5(#X6vfHpLZ(?@r)ib(I*Q-VS#T*4?Iw!EkOxV0U -zw&lQNg&Xr^-$~44{Pk^B@Z?OV8Lt@Ds>f||+VI7&_Hl6Id-w28$;iSboR916XC0e! -z%Jl6uH&%n?9=*>3vvbZI-#eG%|Bu%ba=K%_>$EM;aPW6}{we0tzGY{0Iqo`6c@)3a -z(WWx2bZN_L$tA5lO(*mIIIh;H7x=t9Tt+@5@gPf)MZ(HfjUNn7xy<~M3ku%r=lWCx -z)V}K7vNC?l?jt^*&!1U;z>#BZ&f0mrS@nJUzLZOtlv(JsJKm40iGIUlC0bwJvn1Nl -z^Xlf;?xI_Mx1M>@zhuGwGL`wCL#-}&_MW#cNl(2JKQ)kRYT#VW#U>sz3oobi{w@BX -zqPDmwcu~rf<&BQDK@(S;J1SDJK4r4ktt1@lL-yQvO#34iV`|sY6<`a+ieQEN2ae`;+qZSD^ -zSE*um4d!j98su!RPPo*=Z!BWQB)r$ZbJo(bSg#PK)$vmgze>{FKW#NzsFi^E#J{H$ -zj=1ZxU6*h;R~CL1-k#luauvvdnWXYb?@tih+rG^C9r-`!_1rZJjzlfl;Wb08^4yFC48HI7 -zv$Sqtx*m4%w8O%J<4OYcsZZN=jad1Y9#l*?Q1<7`-IY-@{$|S^4L-G6Z}tk$gcYuz -z&$2c?Up(i1`3iqAqm;JF=j$wm<@c|u6?Bv1cAIzm=al$PnI{`>PWas@ld#;;Z#~fJGkxqjW$PE&=>i;sF!B?Z&P -ztCsRLZe%~w==-TwW5L^?0JhR1O=F0o3*H76V*MARxZ#F0DjCOR{t!r)E>%qZF{U=w07Odgq;zWyPh -z;jSKTLBWnGMfo|Ic|kcj?y14SnVBg86`3W@ne75AF55$f#}ghj2rhCF<91Op4fw?< -z+;G5wfr*K!(UGBXfr0=B8&l%}wT1)%2Y~=30S*?X?t}*xE-bV8FFl*``c|^a?8zzb -zZJ8$+%==#Nx;%3K4f~^o-dnq*7Tior*_d|8C03u~pnbLQ+nE_(B(HjToUnf`5_J2C -z?b4z}$%p+eW+wH -zeR&{w*L&+H_PP*dy}ygqSeut_Ti7Bl{c`#VNEp-hfB)~w?%VCQVpCN5^%Gy><6h3rR;k~ -zW@C6A(_v+1MV5O%)j1Bc$`zJ4IR#q>imFWcW7g)%#`eO~OyL6ioY;q&p_Z5B!?el; -zV#I&zwpc9=x0~q5a^O&X+>ye}|5^ImbY9#G3g$m`U>@g9$I};rJ1V*-*&K8<_Psjs -z+3OWNoUwBj@bp{6EpX`g63gal<>|j;LWM!IpxUoxo3!;-@GhMEpvi9m`-LyfH{W$^ -zZ9SG~Y{#jb-x;I15wBtm9u;`VF*r<6;r?j~&3tzOIURN(M;dkXN -zhr@j$SN<%$!OHU2JXVxd^+E7-ZcjOpY5wQkw==Q!`t?0lU$OEf6LVyocF~7xBB=*B -zf1Q)O!{WQgN^991POcN{ugK5+yCzM0;lGap-T`|hHmqe){r_bZkLrr4-&H1I&~*1YWK96f6lTqlQ6HS{@rQRKbk#!!Fp#{RHx&I`G8#l8mxZER2z-CM{X>X856o?&*&uWD%r -z#jp7d!WYCe`Bn0#UR|~;h=I5M%OQ>zzcy~rY-_ls!6L%?!m)GuWaFIkH_O(lHdr~N -z%FM4Xb}>6Kopp<;oLNWLA*WMf+fHc5e(K7e@P0en%YOxt^^Xo^M$1I>@j5?93f+Ff -zygtzLV(jf_)Av1PYM8v+Ym1#@u-MP7CC8@K91N3vt@P%HXQl3mv(v+`D_!^eZ}p_w -zb>0(Zd-(?k)-c-3SDA}EST5Kwzk`Y2I79X11HaJ5)AcGJb}8CvMtqN8UKr1Nq~!GU -zi(U%FjBDCmg8a4%-I}mro}>N3`;u!nMtZK&7QEW|L{^ZIrCvbzLXn2{x658fHO2pL -ze>1brJ2TCG!VbN)--1F`ue-k`bmz)%f$ZjA=dgX}&n*!W_+Y+b!bLgPgkAG0*3FGj -zDV})tEBl=lQ*Kvz)dwCplN2{=i{t9&n{OmX-`?!PpJr6%5__@!abLlfwQW<5)oR+l -zklPXSw{}95-xJ0788^x{u}+dUdaryj)AVwI%suz-xh;&rpWZS5nsac4?X`D{IoS^G -zm~!{{^hIg&b*WhwBdLuH~F)af3S3=%DnuodyYek@m1pQM}6e$-a#`tRn(T-}YIE!BhE4jiz3#qy3Z -zvx)zK+(Z5KXL)9nwZH!1@9H%D-4=naJpNhtL(J7PI*&>{muhW_u71JLGV51TTQyIh -z>EqB>0V2Jdg9@G&%b)Mw(B8tu>snI!%)h3b$?(=6rV6eXzxV$U=iRnyg52|IQ3=)c -zU+Q19FXeg8y}j|-{%aF|uAZ%6Ep1!%+nR5c&*I|~SLyr^&^zzEVTs1-h|P)zWUAK4 -zzn5+=e$(aVq43FxUr(Jo;b-mXN6GIjw{>vXI%ye)#qd2g-?$6YWQ#9vnpYymxOe( -z^s^1E3kr%BznCg5c`V#ze|KwZ*paWFHm2mCl={0g&_b{-V)cSuKI>ZM?D}$N_DPw; -z?Vc|Wm_G2Fr1*G2z`Qr#W`5vxH(RqPKW5%EJ;}S<=C5Dq!rJXSU-{6!`i$g~%4=r& -zOJ7WqFTBR>QnHh={^C*>;nz1cUrdU%+Rs#y`SZp17w4b;sn`Ggb?1^>W85G*+k#u}IllPi?&-X9o3O{-dNB_9V-x)L -z$;;1imb})>Fxk5%!hRJG!}RHwe@6YE&+1jsu{_!CNIAP|YMhHn;m9X*?lX9O}-JUiKXdd|iwo4kEfdKY9J -zulUO`y+Ba!wDqR9*(VP^eZw~W(We=bG3R=Z&KEq@qu#gL{D(Kw^vJ%6?>>1lGV0~} -z9J$nBp!8oi)QsJ;xcT3-MK5zL3un!6YT9QL-MRA5A<6d-ZgRT!t5@Fk)Gm*2)xy|){=dVbm(^Th -zocrLU)4r1DCn8fHF-_m{^s3EjVeW~`Og8?U`{?SW>E{pJG9oI-Nc5otD+@dgNaV$S&W`=l>YvGK)amBiA7HH3&1N>b;68KLy{%9DLzgPPe`w|0s&L}_)eed4 -zoAU21aO#%O-=C}dbl$sU6B7m5>j@i|@XlNG`+4{>G3JL$%HuI~NrHa3n`FBpc -z9AEZsr-PcwmY#_hgeR|lw6RCc_L5Y6`7Q~$$FmxBjG4H%g!GxN`V*NZ8~8N+r=%yoaMFCPz-=bRpIalH{_Ov7y;=2G^V22TB^yctZ29IK -z&8(l@`1DHa(I-4BovI(%$=;q|+-3R4E4wMabGiTZ>Uhoa_?@dSRz%$u_VeG>xbyEf -zckx9p80r+Qr~cb3#kBuzul%}gnje~Oh<}^M+Ld9+%4a&+pIM$O&IEIRWnZUz -zFE96Efc}ZC?TKrSTRgkb?!7ZJMCaA5O@cO=aXp(Y>;F~i9;phLQ-0!XN)xmB1apIh -zdLP^s?wqWXiEm?yU7O2vWO1+Sg{ZDGref|7)a|Sk3)`>Xy=$(Vloj|##&Y5*^EHld -zoU-kz5+qtxcmmEUBcu8(b1oxS@^DbSoS-qvD^VEwN4LMC?JAK*Ti^C-* -zpFefLwma+8|EzCIbUEsuic5YB`5F4An$@qubf3i@uiUJfSGAw(Km1sG^^x|3QE)-F$YY(VN_DyLWSOcd)bYYBsbTv2>KImYE{VWL|Yx -ze`Z$s48=nEMZKSm#ipFzTTx$Zq>^Tova~$i=jQhbelPxZz7Y-Eb9swTr^F{Ev8PK_ -z=e_Y3x+g3vmGtV6TjZfd=VL4uENUw~AF!gTqTBsuL&#-qrMIgtztCapU7;=*VdTwh -zvc_)yX9h`Q-oo~R9=?~w_G~9SpWghbUc=V2@XO3uuHl;>z1fpsZ85pD;jmdu{fp9v -zsrZf}yXT^AC*s%~!3%tIUv{T8+fmMUSH2jhj8S=Bt% -z$zEMm^Kj9N|C7G#aeY`J6zLcfbuG0!rTM(LT&sH)#&01pd@bL-{-D9P(zW14Lw@W0MMDv`L+j=Va*e|Wk@^Y`H -zZ+_0o6R_y%PN_5Zn_ql9k)3%Y!iDt+2b-I*X<%o`(OSeF07?PLXh90_~Vp&K1ZFODTSp-6w2{#;@Qal -zPgDHk^L<~gJ^Z6C-hO-9lshtZle*RH=kJnzqGUgz+yAAqUun#m;uw+Zdmg68uq?m4 -zi8(&z%l=umI#D9x^5MAw3A|p99#x#4ob4R5ho$i22FG^=hJTr)B=z)GeXft)vEx?S -zwXe&M@}KBQFZh_OZQ#Hx-p{I+v?XPy_Jc)rzX}+Oe&0`e_uA$D8UCw<9*Zt+uV9;c -zv{K{#!R-?FqE)thWm&TQ#)9n{i_fKVKGMC{vR#8MPpoD}&QCtRnJ$9dhddQ;UN*h5 -zQ?RdBe;3<~fMdV5FdpxEAg1_0jQa}Pj{5Yn=rtwLH8Ykz+-C7*o2|s0{WE#mwjOP{ -zD(0@fxmqzPmQ^5M(doBhz)?{psSR7STr9NH+avqR!#-uU%=qc>)u8?PudPx4kM7?a -zXULrExiLFeOKJkI;Ip$tbAyfQj-R;U=z5NZl$7B0V9gc_cQ#R&m>`Ri~G($fn@ZCMemvIqavji>n@R=X4 -zu@&o_b*|*j)^Z)b1-pFa&o<$5(D$ffICYih2y;ra!=d^`=dItW#B+yi=;U4VoaxUg -z;nw8TW4RLT?5@)Pw}{T&T*iILT(U_lqU1YwOQHRum;Co!e?2;7sLo0uiqxq`fTpHq8)r2dHCeNJ(&3Tgh9^nhHdtG8`P$*`&x7{Wht-w -z4Q=D8l3ER`Y#CAoBfILDZ_Uf#pC)Xg&pz#dmEcGJf|>iSPrFlGRp+6^_oK=2=PD+P -zt9k4Xn528{3l&69oM_w=Qc(vH_KE9hK?k*B&xpcY0 -zdcTX!J}UFiyzuCI5GSCe<)ZHI`!Vz0`qOKsP7?N=#dxy#|DAuaw>Dp?StP-!aMn4? -z<;As=^`{&&8#wUsTB)Y{w3Ex%9)-0TeH6H#TQ2rdxxbLp7Seyv&a_o_dm+4 -zAtAfR<7VQqEZ(0%W5q&FKV#<7W)70&6pJr`j -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 -z&0(Rd+3%X^-rrF1^WMwV8$AwVe5u -zB*9p#f2g_R;{`!=oudu*cON@ez4`ZJThl{@9(5*b;~p>XErAb~2BaV5H*#yZt8zlP -z-{<o|I*rVf8jw_2HpH87N=LKe%GmGzp(!2_UijP>i1mmI;oYz*S)M@#UAs* -zsdpTI=&=et%>Ti6@N7q+mi}IDDM{WHd*&?RxK(({yE$cX^u`ZY*S-)uxXR*|%-XoG -zT}u}v88@8EkqBMKI+@*BaGG$%Lazs`TXjPX7!?1eo^4TNFH`PZGudWG-qgL~+tk?J -zHLeV-UiUg{>9!Ahn=Q)g7yel9kH6WzU`zk0*7F8!o*HlHu-s68EKV -zzpX&?qx{u2$4%J(g>jxecj}$_w&hQ^3m*5c^PY2w=|Ju4|1;-Y+4od9gY)fe$q#a; -z*~32kU;lvV>*Vfz#viLqw+9qlRPIcEx9PLv30-|Imgl?IJYMis=yYfKCb>s1qq+8f -zpMF2_!?gNY%MTTC?Xmq6By%A8^7Jrumfy!p6ZNk-pPTr8+8@?qF>A|jKVM^&m^1IA -ztoWHHG6q%);-aO5Uql8R+`5!utElVe|FO#39aQA@yQRp_{N=BjH_@LjV8>cr4~Eof -zsdJC|t_bYjy|X27YEgdmlPila7N2;2^5VxivPT$8=3jm3d9VK3p*^!CtfF=b-Mgk) -z5xpdM|NY#*Kl7yTtvb);?6=TZyJL5~_utp0(f{RUYzQz}lb4Mkq_~T# -zEA*9&1&SOUPv@TYFT3S+Z}s~fZ%q<{cjsiR%bl_I@#a^@pK^b{JtcG!kA8Ley4Lwq -zIQgYlJt(g&{S$iMZqATBbh -zSo!{P)PMiacy>cp;LR_&$Cfj;h;F;E)Na->(ZJq_%`ZaN%-m|)ytQPpO?v0$vUfh> -z6IY5Z|8quS_K7~T;Dvq-%XGLGKd8`+N~rqP?P*hY=(SGUnkxO|Z7c47;rSp}bXu}v -zrN=IjEABym=O12b+I>twB^1&B@LC-nl9(-!s&Uw31 -zM=)}W*28;SxEiOv=UrF8xX-K2!{gUht-ZYs)*{urQkquGy3xq!cy85+Hu*358t$!g -zy?JiURh+=XxX)*1`_lTeCJUe6$jUm|5GYh>STNb=WN+Dvtb;%NFH1Qy#e@V@r&>jX -zPi^?H@>*PaNUtxm+Do402OE-{6fgF#{Pr(&E2sRM8*x`_R%EM9Z@RECZmLzTNB!&B -z$)DCwo?dq9X052xGsezkUA%kid_PL=*zdOWcGm)*N3Bche81>liPv^rTfgHPhw{{q -z4gY>_kK#Fq&>|+B^}+yi+A0%mAiQ%x6ZvJ -zcfL+i)uuS}#icj%ve=rxr1>YMRfNt9sL`LCKUMm6LO`C}^~Y6%4ZWrZ%gKOW6cYIXGFFXP!pAUPV#%9fhhp4PAE>*d|L0Sa%6a9$s1c##uvk -z$$`o19`SHb(5lNkzF08phv$@CT)#i@{Q6Mpa%7-rpLY -zuO6;gF6FFvz`u3dyZeuSJf9}L_T7`k>Qnb8a_Bb~cueNoVCL)De>rV;f8d{dAs3zr -zO{!|5uOEf@6nd!kE*JQiqGzA0wnfIn>};Bli|G3!^_ORz6y#l;@p)dNpG!_*f34`VyA%4eS)=Q%fz)Jx`VuV3ERb4tCmZEl@W^rAZAQoXXk$J{i39tWq}-VG&+~wnABZwH&14Tr_72+ -zvma)3=q#KqBV=6UapjdhN5-v%o9~`3iZ7VeC1xaY?Z%bzyNfF4xoNGFpPeyF{8Mm{ -zcn06E<{mjk&C=db<2O>x{mT#7g_*pRWB7SWHssrb`*}GZ7rKT$d-IfYv&vKP-v?SI -zZBw1%a76svl$J^NT@pRNsjk0w_)Pt8d7G9AWd|e@Tb#Rh-ZIKa-!-disfpna#|6uN -zPPA~{P$~2F*I6rH;nj=hsj*qlbvzXy{CkNVbJ8Yl!(P@!zb8CdoOJ(SyK$Ju)!B-! -zLYMY4-}uU+dUkf%=J1bQLYE%d&7W8M|3+)9e39J@!v^`bNF{w@Q&VAc5 -z0Rxq@rC)X)v%YP&Jop=@%HQ)mtlnF8^+`O?U@x-W+P|ptz1sRkNA(#e+3l0q%{q(a -z&h+pDjJowb8U@Oi?>J>mpVykGr}Jr3xN*^*y354#^-ouwxj`Y#g3?C5XU|WW()Q=fyZZ1eCR?AE=^tsC7S(^> -zp$pS-Eu=tY`aLO!-`okQf2P~-^jQh&@1+To0AtJ -zy2e>z^7RML!kcdiC+=#xRv++;^(Sj~l2hrK9eYx*S7={5QmPQKr}=ZT?+eB3N0(f3 -zRl}ET+qCSa+0iZ2^A@_9HQigC{rq#3@Y{ -zwu^E?s-doZYtz&Nzm?r=`X-XJuggOwAVT~*XVFo8p@RZl(YJ5p25q_hWlD4X&z4W= -zE>kKwA4;h^-K^Tg@T;49!NnTJFTz618d<3fZ=2Zyu3ux2njr0Pajiwez9q~WIpqv< -z{rML-ePuL}S8!;RV#&~VZcv)caUr*dVe18D2kYr98Xi*_YI`{Y8qFAg-4I@Ip@nIS -zk*32|OV*6ERSd4nMHet9GHPAdaR^tdk8UWM!+oK655v=s;tM8nGK&-&I(%1T7V+E6 -zbK%|`#x4!11s7K^uDW3Au-y3;gX?dwA -z60BFYEol%-;?jumXXI5D4cNGfX%?&Yf~Z_p6Vdezt3<^v=%p~SzSUV!d4)+UGTPzs -z0oIUhI~&+i!~+g~Vw%;azo6nT>z1Ab2U%^N4C(qK4OZEP3pQG?U0HLYA#EX#M(%V* -z-6fI%kFA(*ahNPv*2`uhf4O1Tbg2sgYZz7Enl7kKVa|%mb@=^&EoA-O2DQi10T-K? -zXSG`_SRl)8(qH88HH$Ap@s*+n+LZ&;@+7qIgbvlN@{f@5ph -zO_aYkyb_hKzhLx*vGuLpg61#GS>^Q(zZp2LY+-DCmaGu4SBNF5&2hmRTMm;6Ee@@# -z1u~R)8o9PBUg)r4(TeGC5T3{(vQ4;=El6-hoGz0tvvR=EG!`jo>BdttlrJRMFdcpC -zzM!>*#~!N$++M^I)#0_^PAsR%t73HXc{zHnX6rxaE2u- -zW|o8WM$Rca%^Te&39ra3WqRAJ9&q{_%dEcn4!YbT8M01|L1h{jN<~<;q8B?bJ933= -z^lVH^)(kjl#46Puyr80%YfH}x2T^U&4C#E=vt=e7k5r;_;V -zdz7~a9$&g?>-r*t#QxV;SmvIR`Eb_9pmvJE-q(>C-!^gvD@rWd=r`k+Qu%y?wdKe8 -z6TW|yvJ+i4w`}gowA+7g|N0m;qh3J#Tw=xjdnCeZ&7`}299Oun5 -zH=|6VVqv+Gr6QZr)7FB9>Ho~w8#!ibEj3pZ77W?5^SzVW^7G&B_@(jO?r6PhzB)wJ -zDE9f*n0k+OC+b7my8esJ{NXPB<%n8z+tRafZ)9g)$mnfv`#-_QUuov72I-S6ij1$n -zuzRV!I>q1DEnK-R!@=rxpXSGk+LK#+9j6Hy&6Mz;DCT$}rHbd>#=WL9e;t={ORZJB -zcKgktQ^n>DUp|j+uza2QNoH++U-s;yAJnfg -zWK=OMRB3d1Z5^n8L1gbW@fjMIwmsi=ca|&H`gcAe%NL$ee6nQs8_%b^0>oOqYr+{c -zV!})E3z}PZd`jmLa!?T9Xkuw*P;?MrVsR9ho_CT_uwHplsFl%_{4|Y46Ii}YlF|@e -z#n6-+WaGQxv9|(S;+xlL>D3+o*S!pj)7G0d?|S04um>94Gw;gwt?*bd=aia=*Zav9 -zd>J#ZDjm4zwDOCDTal>Y-IBwz79ZSv@1T#awRry2E8@GI^EJNOuRqJyQBkTf^^BRQ -zkJrJ_#a5bgDmMDn*EOb!wtX}3=5Wiq!e*~}qlV>O^Zc2|*ZbT3UnS=j*d=qP+}l-i -z*U3T?b-|_!8R6SLW?r&Xzsyvawbs~c%TD{E-bpMj$_}FUvaa-{U6x&1%)xtOF-za; -ziT^Zozh4k2UGl_Jy`SfE>jTqEGwvGe{mpU3Orde_c}i5se(K6QVeTN03+z?#jgdPv2X=gWk>Pu?uO@?q%{ -zo&*=Oj=xLu^6i7B*e!58BFK{LT`xKHm5cU0vtFrJ_Lt6oI@Hd{HEn)s?{mkt`Ksn0 -zr0>^G`x&Rek}^Nli;1~G_iFme5H-G=jiP@Vo^Af~#6v;(r_Ov45eEN{k=G*RLOw)p -zTA)xXUUfdmc6+i~^{2V1nKgWe=Lm4OvS#}5|G$`|IQQsMFV@q_lT^RT#%?%ar{rB9 -zl{$6aw2(s+iY~Al8;Ghs*P3d4hFxOOl{FT8bK)}?x~CRI$h7Mpk$#LE}GolSK`GS5f3z$DAn%7KU6?Cqr@m%eMW3VJe;_0nfXL1%>t`kB0O -zX=j?wf~UsB!%4W27A -zEWaD?cq5>fc|fI^=AY9~xhDCJDP${?{nsm|7Im3PrO8#-zpvq4Ze28W -zQqj~oOM0^}ggRXcb^2S7tiCdPKi8xWtG~>%&uy5h^z~8U9+9BF -z{rB2tdhuv`@@<`Gzs5!J>P8Q-riiLO@qZq^OvdZ&TLc5cUKNElt~y$CWm5gVP016! -z@7wWIZ{`ox4e!1%T=d$vZ|<=J&I=DMnfgSSS8wf<&QqONTjR}Q^ke5wUlql)%g%c0^u&7sn=b^{G;y(|e|Tc%E=cR=)b8RvD+0~V{>FA6?OoO1X_Dud0h>7qLCW+q;CJtpY?>sPOm#SLkH -zr#0F)x -z+g^NFKj}mLBt}*(hWe#Pm-O6VImxh8snTbghseP{;yD{Vd8eF{*5KUCY*coH#c`#; -ztgNUfZs(X(b(tyxq!zO;UDjr{+(*16plR7ki|%_XCEAum>S#K@T-59OcEzp6Yc-R1 -ztXy>Qo5;Ig?UQ!89A*wQN(p(S;AK(o!nZLa?^lOV+^?+IvI~9sOWWD%H*Q*->&R8G -z$@s{bDFyF#Oq6|P@Y|~~e}m4sZ_0;j-L3fMTw=J=;uPMU!sJ}z%K5h7#i`@Xtj&*p -z309kbU-j|8$%3;V8SZ+PJG*NH9=6K%4Cp*##QAj55}!|@Yzu=rF8(oI^gQLyV(XPY -z8|OXYUOFj!!#06Cd%m;^p8BiwL9Mx7{p=izsRBh>JD==2n_W5iPUDQ}2PMSkvrqk% -zFaC7J|Rq)E*xFB9|Oo@^4{LbHR&Mv-b*zF!3zZDag2)p7hC}zEPFSq(8W|-^vk?va&w);E5nU71uL{ -z`a)`vO3k+prEoq@H;FtYqxU;SleJa+RM5VsJe_*}+n)dAovO;L(NW}R%dx?SBkGKp -z`|*ukI|STg+-|l@$n-|8DoMS`^HTas)w9J%`~2py7L@)Ay%C?zxqarVh8BODrAfBl -z23M3*UW6*n^r)}lIeoUvTD#dJeM;_|`z3m>mpFU7x=b}#wAAl~_B|>0Vu4ag-Gzr$ -zma~^^Nx5_G#TQ;H$4f#baonu`1@C!z-)eQ+8?f;Er6A_ZmsH%Aoxi!|$lWb1Gx?ux -znG(Fk#zN5V@2s%8st?xuGmquyE}6u4W!lywfr(qPwE_*^22Gn`RKKW2=Zzz$d+=k+ -zLeAU`N3H~P&AM?RXs(Q@`jQh{d!(KR=m>`??&_Z5UAeGk;j!{>B0M=K&&BA5I{n-0 -zZN5f7;nVEW%p#SJ5A(QME=ci(q=j)cPp|lQ!S&FqS2MlybmyP2meb$5t)XGhlmp9j -zQmih2^^5y;k88u8mf2r+?s3tpPcF@Vw$yKf&eCT~gU)5Qeimw9npVutuz30hHya-H -zy(!n7L^pm*T++IwZOIL9-+(=}dMU2wt~31Dw7>df$Vx}P1?v1)qx(LH%4x~2>9t(? -zHp)26uUCKJ(p=#$EzxVw$!u@z{rE9tuU!qJly&@sUqKv`%xm82Ur=+}l@pP?XL7w} -z@{d<+TFJ>BHSx3VH632?n4@V*drzRk#vcxs`@b0W9{kn4{qF1=E&H!zeo(t=+%~)9 -z%%YqRv#L~h^>)~`Ii@q$&Hi}$|I!m(2AlR}EogJ*zru2eZ3|;a27^IRL0*w@QH#}z -z$MxXT3lknZIN>4F=c2UHg6{*rvVwwu0aHCYQzK|gW`cl&!VOLZ2@aMf2VqBsMu!4H -z4!PD&h2&dn7%yI2x;<=egQt9NSfi}?5`89}QoUblnum{E-&rD6^LzZ!kn -zx0}D5`p2=*jXUn{#%=@N)dp2Qzo&hf{;<#0iuvb$Us3lJFDK0NFX3QzVgIkU>PO$k)#@ -zE_dHnpqHU$vGcOh7fq`@zg-KwxqJ3&2+hm9QT5zQa-OSvcRAKL91ICP -zU?duOYMHEd$ZY2icIz+Qy649yRBLd;$c($L{8isxPj3fpIi*Y4)g@PM8b0d`b8@@; -zA;sA(t907wn6D2foyc%My!eEMw;E67)jK-d68|?TNGA5^*gaLtPyW*y*vL88KJog! -zDJN!Zy+3covDEq}H9Iz+*4VSK#^b2;)U7%vD_=1euT?5#RowRRe~;we=lh&jcJJXb -zzIb}mxt|gX1*MW#{j`sJSe@bDFKw{-;4&`{lU<1twP9Uqu8W(loal0UdZ9JSKx(H% -zubZ24+9ZAX@Yo%DvM$@i7(DJclJCRRX3{k2*c8dkDVE;)5uS^!>c0g|b~9jo(tJrn -zv(zens@rL=#V_kkj_)!lij$gap031{B6ab|w4HM@OCCSJ95GM(*Ov;j%NmngH;8HM -zG?9G%kNZ^5iit7mLCgQ$U+#8Tep%5G0W -z+_!L(+lC&m8MEq(*GF%4+whvF{*OFUdBfJUpL-szb8OZ&Ul%z4Xk5l=^;Hq7_q~?x -zekdK0EFt~YhaoB9#y`ZhH-f;Y+GF~bb2}+uvhrXd{^V_|CIWL -z|EeWI?q;0jWp26K5whEPLAfN?lDl^~){9-b_@K8UqVCFFsmzHBqV{}pn;WSkdEdt| -zQs{r2m2GLh$nS*#GCO}ueAxPl#cT1I<65j+O<%p2KASenq26lJtIKEDbe1TwFj-{X -zn!?z3ph8uopyX+E<>3Ppf7m>J9yFNK)vqSI%i#rS5*(AFKqj^>(_x*6%3Z) -zKWsHr!h-)h&O71gT+YA0phZM4Mfsd$->pmU?B}kPer<8drIvr9lT09^$a?eXxhd5Q -ziA)9VoGp(u%(@mIX_(Qq*s!q9bK|eWZy$HvTd|_+tcBJl;kKr%c`-VHR(*ONs}Fv< -z@qI-sTSP+rRrTr<6Il`rCMwT}D-2~wxyr6#$rbU`PUlm_j>m%9PAeWNJk4m`VBsrh -z(#mwmv_R%maDzB5BAAk6g)KL?DfDG?EX*Kb0p?p|JiQ7@8;eM{F{`6q!gE}3Y9pu -zMft_E`lp?eyGlIvd}O#<@px+Dv-ZiHi&RA)M0eT!-hbv<>{JcCjn+xbazFQ4ANr*x -zzfa_!a_FtJSxGM*o^i_GU$6WqSUCEi;QoqE6ZS@T+ecipjT7Q|+DtY-j%G<>otCGW -zFgI=MgQ$(`8J4nYYb0~2vIa=IGg(G5%3oaeQujgEM~_`h?U!-|m;G>aTlsF^#p!#4 -z%xhHhwzIbwFxXDj?{`?^5$}_)xc9+qah{J-1>Q*vq6MEdzCRP({{B}~;Pd)GrZTyk -zieV974}32%micYN^w%cJ>gIz6xvSA1SHDOSs|uNMpnJ)=S{FrjXRZ{7Q^(Bf7tYwz -z^yA9LuDNmt9p<)NS}0c;*uO-1|CPlHXWm#Lrx~vOX_Y%?Z(_!3_l2w7=Q{D+*x+57 -z`1RW2N2Wpu(C3BA_4ixn*H -z8UCDoY}GABJE>dpK58Owr9F0wwwmsHTh4Z9arLW*x6&USJMQ;jbJo+vcerj`3oL#& -zHDAtGcB$AFf3ABkmwpvYyEM;${gclrrZg8D&c93N@2GgUtAE{H_tY5OyEXE?weq&v -z3jB2<^$dP+Z?dm@@~JTLQ})k`Jb5}B=l`7eW$TIwbs-EI>vZ{w&n;TKb?KDY -z)!Ul>9DbNKdCj*+{a$Ipe9nukKD%%Dx!5`D@ALixVRLr#+>+=0$*A@*GF4E!N92Lq -z4kqCbB7Pfhri9EqwXs`{>AUhY%Zz`bKi7IT2`uF+eW}Gz?|Ej8@W~g+j4C3Z>;kXc -z(HGvbDOLVY&nK=|{$aO{?t8{C-Hl~-^4|~rj~lLp?)2lD{(|2_fMW^U4H2f3oiWXB -z3YxB#=am{=W*c34Yn8{8>Ff|7H230}DL(xr!5{aRP4Ay|`o;<&hbm$Jt%jvxsOxwSd$7WKk>5nge3>s|+L3qStl;*n1g -z+AVpk@^g%~Sbumud!x3;Z~na#SYP(Gv+H`Ke!iIPBJW!Nms{v-@t>BbS#}3@woO~H -zSf8!qAlu20+jEZHdb+r&@2po$2J4qcY6n~F9tgmn)TY&kqT1ujhtTJPjB^U0arle>MLn${e>F}G}C`dd!U=}T0d -zD$jjO;BCFbfADaC;=?KIGoQq_E?GV^mgNqYXK|~`|7i^sMNuhoT9ThNoB6~q1A -zYqrh2?tH0CXL~yf@8yMwEejL&DGHd&@l^d)ocd(D>Gx1Sb%{8pJ`Sb1hIbxZ+5L8V -ztFBv%8P}$Zo%`+jiyB?0@Ijv-Ue%UC(>2mdl`is=AB^g~T6OPPd*P8T(WknnRE@hV6w!9OsG?<8npRqLv -zd3CPjlG{P0zk*_%yhkQwd}`~oJ>}Z;AmMk(#Hz!_^^50no85Kw68=}CcJi>B@|UV* -zFOr%L?VlUlqw?Q5Bl|?M$`?bSdq3h%dh7~%Z_GG-BAX=p8IOedcYNYQ&#Q{GXiIE9 -zvn%Dton=;m7Cmm4&WO9u+?M}+-tUx0XL^@hYbi8J^ycmknc*`x@_fJde2tdc$G_$) -z|Fyhyck;GH%B9`)g*MBxm@7Xh$8P_;-S~6Hk0T~+x-Az~N~id-&X7H(EXbR2@|^0w -zFTNQQ7VbF^+VZi>`QCC?=4unG-xG^O<~06P{`*V$?Zr5i{~o*RmwZ1w$GSy2XKUrO -zy&Hc!F6O-F$9lcF)8W$Z|Bo{I6jmyWXVjMNsb5eqVM>Nater-0#nk-K$8K1_Aes!#)8BCE*-_UFLjtmxcbJFGlmxun`=Tj|Gaz0X5la)YQC!I -zpJ^dB1}5x9(=9d6&1qRL?>c+(w464v%wyYr`Eu$6758j>=dum8ET^MlH1h7-BhK3u(|JM+@9$^YsZ!i);1 -zcW9jqdgOHEy{Ey0$q^qs)oX+Tb{YK&o&7`Uz5S|=^KWjqo&U)eWb^&jgP`nCSM9Q( -zW}f!`7yhUCH#2fZeBH>lQE0`N%DI1=9(hZ~>=#%NmN~`IDy(OE_(Mj`dId)g3#Qfv -zR{?=Xf__%fR)UUqKP~#2yr-DkG28L*LGj~K*PpyU*=7CH{ll@VkN-~Iu4t*pB2f9M -zPFI!3YK~3S;ceU-^`AU!JKR<=LpjWHw|(K-4+23xX4-uhi$#iev^s9&3A<-#?FitXlWeQ&cuuE}RRCT!f>zc5FvYjez-neW(l>J@})Lfp^%~5x`pv&>3+ef9WT|%lwg7TBzTov~)%L-Lo%XUMiYX)~sVRLOn -zJ^wWZp68p~m2aQp6x}THz^Jl!=bTwI<;oa0^t$K0;Ystj}{!8LIgBsUeoMqJJzID~j -z5T0zWs$4|RKg$m!c# -zc_eq&kK|oH>M!km8T5Zyc9-VkYeEkd3-n&ROe>JwDE!bkw5!nQxqzJQ{BoiaVSF-;Pe$)xtN4eZSuC -zMfon%b%H0zKii^m^@Wv5{T;pi*5_W_$z>O2 -zNiO;S==44VBLvyxBw0)V8 -zWV5q8yf0Aqe#G295AFN5=XR^qZ#uX84AZCc4ITbWF})vu-Rre`rA$Fg70D* -z_Hgxczg#p;;=brXhfk5Us;^IX_B_7rzbojj_g21TDTj3Xm)46<;V?f|f8F1b$EhjU -z;Sle4A@-fqvZX#+S-9K!*Hz2$?s>&lWc4A+pUnVGpFNt5@YQ381zV}*83N1SMQzR`oL;gkBU$!&ih+W7js-L-^OLq6-_Bio9 -zqU){HSe^5N(t_enrJYzkKjQC>TZ=-DT70U1COue*Ta{UMTO)hguI!ixbi?~ -z&l07aNlO+9B~9Yef8nXcHepK07njhWK%PWT*1b0;afKc8*6K@@RTH&r@zJ_6(Rk$! -z$*ds8*;_naOPSS0ebfB3-1_H+#F$kEeRTV=j)~05L^1F -zrEp4DeQMB>kUI)qD<{P2Elt{-;l&zuSyS{NYlzmg(V -zTB~~2glsV18WgzVp_gmut*Kq^$HKMLRwS&9NIw#^uvymIHA2&ywe^yY=w0qDAwJ78 -zSN`Z+v-DBH$!T4`4(f{Po!lP6BUrf7!S2-3MK2wucWtTPs3-cpb9cxaqmMxoO}+#r -zzP;mpbos^UTue*jwSEaTtem0A9K3OtgwN5}lMF;JwN -zE{+9JySB|KQ@*CNsQyvCHCNxhZJ}vvR{YRYS}@_oqQ!1z%{(7uj|HSnU`({}?&0`x -z_jEQxfR59-u()Cd!+#0NMn~O3T+Ea*%@)OM5tQ93_%}`ZqHG)JEOJZNU -zJ@HgAStN04?W*KL7y0cI53?1l$SbZ$+2nTPf?(!FSJgMa7Z-0W+6J2EQee)K2c&g9dw|>5g))_YS#VTFz4blp8bx#B-xSM!2CK_+|GgFw_ -zxo&Ew(Gi=cMuG-=`?_a#ypv%JpUOMWUdrcB^hIN9(|y8`od0gQ+6dlBkTsb1LdM_3 -z^1XNd(zi{_XUrKCGBYzvnnYK8dafkEBE%vgB5}4*g4t1m#j#GvLEwg?!a)TGj(Q2E -z7KRQ11&&50B^Itu1(#-%m?XDeMy>bjJUFiEKIcB$Ww|kM1K*3o5?N9Uq;oAlYPCO_ -zdN!(b=E~Kg>yuX3SAO)$6g%#J^nOoxsO4|%nytQU#v*|q1p|6C9?k6qb%q7N58@OIY>RzxvX)1A^DKbQ(CO -z{Ehv=sMN8~T~v%KS*~O4PaRek?YRL(TRxuaX;7PIcXe)hviOeAezs}{QX+QWpZ@Q{ -zA+eV?_r2un?k|6Qxc{$R#>2xMKR4(d{4J#={bb?))N=ma^|7u87)$NqBz|^2WlKrA -zyKejcu2~V+yguAGvPoH4P<`4_!OfN%*Qi~wZ&nxE@0ze&U2O5Ys6BQYUFwqNPPUlZ -z=C0LrZN^*8GpUd-zyOt8s99UwzWmsT+N!ZTvTFW5a22-as3sLn`w9rqWF6 -z-X5El&A2Mrc1*pGdkv%d_Nld{Jr^#R@a$*5`Mo0fNa>O)k9p$DSNRBj+ -zabyUExESj7iVJEf!_y2bSAB0T5){w -ztiw@Ov!YWPr+#^vl=9W*Q*d>0vf{P1x9Zg%E1G+)IAW5LoWHqu7D(&1_Z0Hv3Cb5>GC9 -zZ?cN2?+lKXQFxxz9h|xYkG|{%d5_N~L+K$D5n#TR!%tJJvlqacN(@K>y1~ -zu4OWc8y2d#z0BSaR^O}rC)8rOXy5Nh*H?TBlh>>2ywf}5(wgEhUDD-$d5qF23)erU -z3yvm|z%&EeILH*Qf> -zp7!}_h~>`0r!RIVRK<2p4OGh32-NwvgmcA~;~in$FWY`Ep7P+9+YHzGm0tH(YA7aI -zuIUmhT`N27#ooPf3luaiPRKs`$3>+giUf9}MK2X6hds%)w0%n4z2EewtvTuEWO -zwq!B9f8u^Il1IaI=8WfFFLrCq{~fpD@~hY*caCqK$l848`!SofGI0Xmd*wB?8NR!o -z_s^br_paTel^R!X+fC=sDy+7>eZ8h$ZP$;j`G-29)YgapX6R?&o&U{rOW^C>oR{nz -z#p8P!7`OD_Pu{!vq)8a})1U+UuDzWwp{7=Rn_N`pIB?w0d< -zWs?MyL9D*r_*M%By -z&RZl~Wi{*3-KDDH2XaCuvPkScXPoM}Pw*^0DVSR4gd+&h#PM7X=kvbeeM -z{m-a4@bScHWpVjf)iw8Q8rD8-o?>}a_f&27(cfniopdJGZoWIOQuSf@D%on*faCjl -zJo;`lSL;PwU|?me{VlcdRl;|+!dW7wTaQZ!uRn0NweN)4i>LJ_OLW;MPWa5i@AuGi -z!hjFV -zkusm!KlV8`EMKattt0sP-q*SF*3M_wb$j`XIqtqp^Gv~S?7vE$pWWT?ax>Eh+b4(Q -zS}H9n4qCrdzgZPBw<4XdyCkK+P$?Qr-1)txg-`UaQyX -zyS}gl{9t<$pfclV+0nW+OwECj)n;j>v&wSSPR4fe-DkJHTL0O)mf_BSyR&(j&NXjY -zS!Q`!=Qgei+|BH1Te_WhxBI4r+jI8@94j_rv@6dbDzTxn8)ehdB6X(vz2x3dDsZaM?bVjbEr#T|y>YUB@3T3L)PH9MOUD$Cw -zPxttYucqOjB!VBgonXCmSl(roG?T-L51rPRPh|^xo=>rI_w#it!B=N3YqMVYgbk;_2L*4u0`JWHOC7PUgmq4fEvKeM=U-sAp&ikaL>)OF5z@B8Ty%tlAz&^TMj*Kfmy0 -zB=ULfWwt5p+=YwBBbZy)yo1JUedYI=2x#h)8pNMP)X -z^@wP6wwRQ=WgXYz*r~Jm#7)+px*PRHC|r-}ORVPC`qi6$hO-_y*4-Ft5bK`e_xa@c -z8HrOl^vXvL|exrG^wfuN8=X<9)s6*1wC^n^P?Idh%9uRQ$|w -zkgDB$W4A+N`)sCuvy_D;4NAp!Z@29c3F)^-w=$#~eKX08AZ_{(hCiPgg?)%CW -zk5mpmu2or@wB$kIKk?k}7tRIgRmd^)=>1SBR^*ZU_^j>I>s2zp>q{mq;rDF2#AM|$ -z=SA0Ey_S={O}h6MPx+CmT(n`|w=WldMHa2+{jfNPOZvx|9`H-|T`SW%L -zZQ9VA>HYdbqK2rE;kQ!_PmZmqKVV&$7_ojPuf!Ykqgi`3E?7oqiYRVaqy6(^Sew9p -zA#I5pzfT!nW_Mg6sjFccH2I#lY1e;^&z%}wHU~}}i#yGt^H(=fP%k0y58n;ZE%F79 -z!dqRlGpwJ+96$fP{cLw;fvnEH3KqfD4yV^Ll{p`AFDsH -zeJz)~UBHRJ$A2EoyzFpacFJ}g_hSZ((Z390{+{_Wi~Ew7-OI-Jcgs&VaD5igs;%31 -zNvy((DK5L2=l|A+yK5vVXCC&9u_bIh%$=xc*2>h`Z^{R?qh{>6J=Z*ZV4g<_5tfMt84Iy6GRU -zU01Q;hvN5F>D}{L<~4n|a=O#vRJhY8&D2?KCl;tnPxSH<*cjI%^`@zX_oz^-(?*NS -zm-kq_5W7|R_0Xv!#vFXf7b34MHeTzk9V-xD@36L7A^G($mtE3FZMN`iGGJVteErA@ -zZ8`Zv@pG=#dkLLuzUDShmBlgV;yeF>i^f|@70m8@+<4`dq0RRonU#08U0FY;B2+6= -zzj^Yhew`x%KLoSAPX@RocHEn=xyM<+&7D7~dFms9ood0M#rxmp&)Ro21HhtG@n1v{>mD4(a-x8Jnm5 -zcKx)}ZHoS*@T^laKbP2Pb6u`7{k10W*BTZ#rM%VWySCb$er31+M*7Wrt2j3nr!?J- -zt)1VxNA^ae>(dg~Nk(r^%Bz1-2-+F3XovB)&v+vqkpnfuar%JuV3)_Pkt4mGKY+1)rB(r0kSYhnKz6)ncSzj#Ob9~Qt -z-L02u0+z1iY7c(#O3sU`Dct{5YwXi9MgHBZIPzjn-4MNbW9qe(yV-xf{P3LE{q$#W -z&aBfBm+4pk?6q7~Z|@z?E!r!tzjnw9{}mzFb#G;xe8<~YC(D*TPh0f%R95{O -z`@G$YjvqgxpY_~iM-ah8=jOu!KzI1PJ`rj2Z -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 -zt^0Cx64$zKms*&8#yi5 -z^nA%0e&odkn?kd9to6zJnN}u|w_dps3i#CK?m{9o2I*}_3a -zp3&*xIte~gSL^kbW?_zZmQ6Y0DYxv()-6sAZ7FKU0>q6Xw(P%=d*_V9?q4F#)#v2a -zHfbH6x#FLa?4d5PQ)b7X{+KHLQ#>r=fLw4>c3H#I)nDcptV&(eq8-3d|7^zOS=qs? -zS8p`>eZArL>{qDko<~b0FFuIhKBp{nd%zL>U^|g}5jzBVwnV=O?bxUi#bj$bLuF&M -z+Q)wDw?+#COE*4k*d4dRU`X>qBi)eyC>XmmAeLOmqy&UMaWOT_M^{A)~_j6yqve^=Lkmm($&K -zZ7=wQ%k7hEDC7&8m2b}`<|NZ~;*LTGUu#R}k64{wm$T*LjNUvfH@w(o8yI(|iPf?A -zUt!#n4SPkD+w$KDg>){T(_!fS)Ie#8+l<59LC1}sZD=`@_-cEXqC@+Jx$nOj8tsUy -zPm?o0xBX@17p4uLE-339IUX(U+Hr24R=sPx)8~1cB$%}n9g`O>mQAsBEMwK!wQ%LP -zC2h`0kFM7_7cB5g4ShaWw)6P!DK)``fksj`3#PPxTaxCXa6%wuwda{REx+gP&?x+0 -z_aZUohmn61>-5rS%f~aBuCeWyaCal`1Ir#(9?^Q`55*PkJe3X?6qjwXeYAn&f!j6f -zJ(swx^)J0jO(~x5SiYoqk&U2{Jj>Zld!4d(H?LlPP}a#ic#(><)F-y*SEg4RPo4Gh -zljx3of9a>mZm*q=GRfP&)+>v9%*^{+AmPpA^3-|f3#ONBIXLsM?+T}8&fJxsa@kK$ -zy&M$De7uO`V12ZDp45TF3%2v8Y&kNWyZLSV%kIf*4D9z>>sKlLt3R9PqQvF4nLFr= -zs&Q*-?R~=~fA6wPd!F#9f6s6J2d32%6)Zac26Vov+!Vj+YFW>T`W}s6ey>!OyVRAx -zMb&;x|8MQp@5eonr+%%*ZOPX<9!5I)GV5hU0{@3MWh+m+?e?cW_OPti*7}IAOu^>_ -zwLf(3*<@>*yo0xsOY_&3rR+I^2Xg8;=1fr1sIe80+<016Q1q~ZLgkU8_G_LCX7fy` -zO}@PD^|DzMr)}m7`}B755npi+-gN(S -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 -zgsKLL&k>scC!7Fw(rt -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 -zduY+ZOAO3LL*LzOkzR*N#(bk -z^;~;xpO`)U;;eT_wCRNIXG?*dAx5pU#GjwKy`x&-DpTUp;|)pqVOw-B?%lZ}{q3`j -zZ|WY*$Y`5c$#lfW^-ev@4neuVDN8^G?CiTI7Y5Ar&=F1BypwB6a)a1f -zr>nldkBjk#*$7Kd6s%ypc8EnqiM492l1kg^_E05`^Sbk^{p&KFg+rG;x;jI?dv}L( -zfAxi*td=TUrJuPdZQnkD{ha7e`@pcNO-lN#onNO+P>%k3j!DueJCXH3{mkdOTQ-`1 -zIQC_A=|sn64F7x{Ol~>UZvOZ1&z?Oh`;>KNuF;UW^zoVVb~#%`dDBUq@rtM2U%AO0 -zWjWJq=NafPO7rK7zNLKaM8QnY4F#-jdytwzHH^{oluFS`JYTJIekG_1=EFwWzRP -z@74V)1iy=_345q^Y?LEmbzZ-=PT;${y0B(@kx)@3W1?b3BTSQ -zy0|EWw|#YQOS|#fZ9EgF->P7j+E*v3oNuJE(^N}$uR!PL&*#%sjOts8vo}s%d+hdQ -z=5rb5^M2+A{GM?>EbgnSFz1(~3zm)hDus=viE$i>|9`Y%`CB>BH_qQPZ!4{^y!)JY -zOS^^)7mHJA=*?@kmlPz6<22>``yK}0mgZDjDsS6V$T4BUhG|EBrf-`0y8X90FUx@y -zd}7BwObyX1bzCOhF+J(KBWL4>`iZvvemC-rWm$gKgp2=~v@th!#f-ka?#EqRBqEa= -zs%OfbG@kPLe3^T|C!Q5OZ;gH#uVhrSVNdz5;l&?#r{3x8lD36;YPpAYxrHQ8n6&QC -zk3~^}yS`h0{3-K$xBM~P#s&4|=hcMTUp_TFCgfhvz;tg)?*fgKhv!xZ%s=kr{oSPA -z@~lqH`I>b5zym+_h#FVj@jkfRlxxmrmFC|sOa7f}I`K96?VVj84Bva*aM*tT8QYZN -z>&y(rUFNR~87_tet^Rg}dC3=sX*$(f6SQUj|Nn3Q`(t)?wfD?-ew_-6xtk{6QSp6z -z@JjT@S{-$Z_4iGA*CeYKNNyJsJQ?~^VdjDkc5;wkf>ew9Cq!+996c*~g -z+5OOOr=s4cl4=vdi$BiZUTzoT9;Nwc(n^tq^{MCEmOo&BRr!mZeZtGaJuK$~WRANX -zUz_swcf#h+=jyw^L~*P*;1VZ(aN$g;AFZ=@?yqert-it*v}9q;re{~mcQJ8JwTgT4 -za`KMm86VsNcNewZc=cFlU#>H!AMZw&@Rzb1m5=_NobCPRZ_5q$xBGrRxO`DNL>T=V7)YqxhKem%=^RW|K|LABAt_^EHE*4FELIjx`Z(tg%P -zvA=%5)~^eh_h{;!^`ZxM***w$i#O+G36gm-cSVZVaZTe*Ma-*1Y7<*;eA3&n%1rs| -z3*(@Ku#m`IVs4*L1h8->zF59#x%_vVv)}F|{+$}KZ_)GjFRRNA1$l}G)yen%{U591 -z8qigx?h&ywcBky?=SNmNbDH`(x}G6Gruk3t<9m(e(+b0Wu}D=a?!5F^!T0lz+HJhf -z7IFE{rHch-uWZ%fNtB$lJh1U6*Eg4=2Oslv`mHdzGpT2rV*rCOgTRCX2M#*37*8}& -z=sA%r!1bJ&<$xoHP?scIt8^m^6I&xwBU1xogMfpB00UbCgMb4=BSV3ph)nBohkEO& -zjHQ2U{@q$pfBeYwR?gm#;c#Kg%*I`^Ze|zU>URVln|t=b=e^hSIHdm9cGP~m_c(g< -zl8Xv|c1^R%zaq|od(uLi^Vr3 -zPm@~l(eCc14`q!VOFkNM{+RFkqxBpY_mBLYO@E>vUrX5A6t`y5kv+#&dHH;@kot4$ -zgL_HIpP-2SGtaV2rEdxvTdzuD1*egfP;@U4z};HJ975$6MYd!#gJcl5;J#QYT(waHMXg^ -z-TU~Cbm@zJZBE6dmQELA#Fw`|VmX+))W9tu&EOhyWUMlGc1=#bWkQFUZ9qx=TJOmm -zNfFXXGx{f7E3kgDB*E9tfB7>j*=UV*O6yd`*1TS{_QCNZvsp#iPR><6AZ}{j_i~QX -z-Xz{5E{oUg3jRH_;9kPos%JGqJPJ4YLe$nVKJQW0%(-z0v?$)ZCttRO^K_;ye^I}d_ei-Tdu{7X$;a;|A9pko^4Pj*&5MP{tHLB6Onmn- -zE#q%opR)Id*P9f^qF3Uax%0IJ1-2gBb@eJopU=G~^}kF?e&k

&xXUAEiv4wVqBpuq@SX?V79g1$_>u)%RKQXNsPkBlYxZ*NpFJyVF=d -z^j)0&RG4?CSpAKF4t9ANi#gTx`?#xHV{fv|=6tn#(re`~|GD|@Q~#XT{gluy`sn<_ -zb5EjPzGVJ>@6oLMjTgO(FMSoQ?Jt?0v1IbYnPyksYHh9Q)_Tu+)WY@1`9HPAhl2ON -zIu@$OCAz4-PUoxHSB=|KcE}!;z4YRq>EyY~DlV>Qk1&}z$%#MVyzS~+R(CeUOU_>T -zV`u2eik%Z$_4iHLUB`OaJzjIV{f5HRSzrIg6&{+AX6U2;RLQkgU^3tF(}|KF|Hg0Q -zS9Cgf^G-(;?{OwY*G0#;HIzH=Y^&LI^TysU>o|4%LKtU9f3U3&Pf96}&fC6L^j278 -z>&)Wa2hY?-SQHzUMuiK6?w`Z>Na8|i#Z3MK#kcq+zvR}&O6=>N-YOLEneDmBhBM2B -z?n%e(ia7Fog-g%RX*~~IKNM%D_vMx5y2S>rV2~EIn?EID`90;*`#!f`Kh0D>E4FrH -zWzE*5tt`jCnxBz6JxA>%bG?Y}l41#=I+d=eVYlLMFMpa`v$yk$q5B$(g}ybX>UU>9 -zj_r({F)w3seT{T~#@D>tHcQ!BSCyaqX66%@_}F{Pk5VIs&5WmZ7uW^={k!{H=Ofiu -zcbk5AUOOfzoT%-xD=yzI@QHex>O9 -zYjx!x0$bf2zA~JCWntPCwXDkbwO3!?vKtF{r)E!zu3q52e&y=!ymN-|V){l$sb|IRsB@b@&|yop@<&nl`t -zS(9~s%Us6xh^Bp8k6u%|r#$gh^4AcF_57zl)|c&n(YAPs%k+;YN^e)r&UA9QypSz~ -zNhEGQzY(+f*@eF!_DO9@I4`}+c+;e(3+jWTJR2g!ESMMWn0+y#b^q>|lQYjADUw;C -zJ6}gh;OL$|D|?nn-89*&&AW<~{nF9RG8@v$U+bgHicFupdJX*HFj!{la -zq(b{YS~!ZbZ&2(c&KK!ny#IrQ_7V% -zpZ9T_^o!W -zhJp8q6_zqiiP=A<-+!lU{VDP4hpw8`_ot1mXL`vUIyL*jqJ#CT`tLccJZc(T;^>_r -z;i+}yq39+)Sv`S$ZL^OpnZcduve4n*`iU?8MBMtKda-GS)Lyyo5iUzzXR5R%?&5WM -zz09X9vE5pquP@YivcKA?rO*YuA38!hB=S&8|RsoetK!E9OX6 -zZ{O&(rfA|6J-?5dUK(qf=HEK^e|Cv@uI0UDU+Z{W)=B@X3W)RgX -zd2su7mA7+df1;s^vq77hR-Vj3+l@8rFBhm^(-x_&(iUvBD$P2mD%ZWS?_Yeq)u!u> -zeU`UZ?A{dO#cNy7t*x8?Vz#jxKgaF986MX{vza)qD$Z|Nx+~jz!QU>P(+5^J$#tu3 -ziaPLMPX4?1Q8C-&Bj3uNzdJF2!R3@4qIp -zfn78|b?V!_tK{t-8zfy|_`7RsV7f~D|Jn7vPj$;plb?i2EnM?|>ose$Ps#5Jx1Mk- -z6$|otlHJMi4#FJv(TYlMSTfy>;#WyP!OgOkSrQ=zBp_7qM>uryl$uW<$wx)QS -z9X5LPCo|*c8u@ENx!i(^agT$RRQ2kz&N*}5U8MV`#jDF7coY?`ei2rFvQO>JVUE)t -zp%<7u4|Q>6arLd$% -zLl^b_)=A5w;~zJ1)j#Vi4T!!cvG?%8t^Q#g``O&|AJ#lEOpYO?EYvB=HY -z`jal?eYKic5yU!|@2u!?!Jn)4JQQEISz~f#;=dHp&{;XFL!*}pn)=I?XZO5T=PSrz -z2@2+%C-Adov2|?qLcu4qWgXXN{ukodWT0* -zrrtlG>VPWmqg`o6{?4-|&)<8C*C~H0lR8i2_s?G6Qd*3Vk -zWzOtba@$4u6T!mTf*M -z!=uu0{qAJ#$NTHIaGnyrRjszGBDZy_+F};tu$dZJ49)DPTQ1h-2QPb~xAB42$E92I -zl5f1R4>PFM~qwxA8ml3QcL3{@-5Rb=Cn%))z1S(ra|zT0&9n#`SvlipwC -zF21wv_0!U$k+yXLQnM!sbm`R3%rQU5@_k})x8bh^$sG&th3@Z*3CXDf}an8++)cF~{88oF%J3F+6j`Bj2V^K))7s8q~2zE;83aLIdZXFHh_?Oc!U -zY5w;6!RgN2(YRbUqkHPs*fSTW{ulW-xm1ZU+&Gl2!1nsl4F636uJ`VQ#5%YfuHPXW -zpKd4Vy*q-k_X&Mrb-2%=T6fjXC%e987=2ZjSd`v&`-W$#MM2)x#+}Dx -zd`d+x{B~Gc7;^fn@Jb1Dv(%#W)JI%lb9)TxC*>XrXtaE5W6sj=ka8g-j_EG@y55T) -z<Vqg8r4Y;74n!VxEyW2X3ep4Ta-dOTO=H$D>N4m}gZL57Y -zTO#e&wdwQfnKv(UTpw5H`$Mp{mvi^hR}WS?nY)NpmX#S=t=#c`6GQcslM#h3zpA<) -zi|jh(mon$F$oa4->kg$ySWE6WR=RQP{pFD=DkokT^0G3#31YZ$=-|Vh;kVAH_boYO -zT>3i2$#PfT_QIV$PurK2KeTgU-nC!b=ug!AsSg+XIOs9CGqlt<&e4u9`SIYaH!F`p -z{miBZviaRt4n5SK^eZvQyeWkFz3009@fjyfc66>~p21sk@A|}({nu^8m-QDJDJ45D -z;F!FhIscLHFa2KgV_MUB-nE9*RcUzK5>n3Y&{;M2Yxt2VzE*|mbEfB2J~LSC^LJmv -zzqOnjL=8OJSobAuU-xTcOnv)O&76qMSL-a!FjOt(Jsz#g?%utFWgVlN2Y>L9?6p^` -zv>z~yVAAc_U^2jpPd+(1sM}I$>QX9up&mNn4 -z=AB*soUciJuHV+r+{rur*olS8*+~-X{_~Y3HJ|U1pUug)=E@JbNCww=P4}A81?Tp4 -z-F~myd|}?<+Oz2nUWzmI3Jy8<|K?IzY!IH>QR?&S;^C@Wayazx;>O*+RsFAT-znzzOI##GC+y}ud%aJVpZBUEr*<5ebTo(a%~&KhyOYon379Go<3dg_0ve_PfSAebhDP0@LO|p@=xp6>by~I -z-+J_R{jBSodbpo8>rDO`TXbaEr(f;4PaT6aO&*@)sSQ&%`&c`Uv1#p+Y< -zAM$_W&~5e#lKOi2Ypaz@Wc>slbDf6A9sKR=yHY33T|U*}di_+@JO2_I`>$Ecp3a!Z -z=zOl^N67M3oPJZ3=JqPh;x=_#IIA{uV)-+x!xPrt3f*S;Y~|j|9GP`>#5js(6xxOaO8!`V*Qn{`#wN>@ZmT%8JDeN!x@y+?sR3+&{lLFE(uYvtWX`=}hApA7zp!e`k-h -zf9xA8rh2Ne)Mi8bicY)eD_iEN9B`I%7xbzB{h!O}*6zLg59j>~_@Z5)b42LD`R0Wu -znVjOEF79CGj?j1;5jSH-WbS)W?vO(VxbK8T{s>;V(c{b`wg!v3rue`!;<~+!t&w|o -z9f(s1yrJ;iuX=S$Z>j4x>w7!?FLC*m>gALXmdO!6Pb_;H>#pxsp2AZybwP(+7^H4goL17SHZv6?&q3)$hbKUDibjF*dinr8uT8 -zRDNT5_2QY<$qr}l&FPykr*zZW27{}2KghwmrajrrxtaL0@DvNX9Aq~%!N>|xq{!ai)Z-sK*Fgv-WpC)*axom9Sn -z{d{Tm&mRW->~{{fakuZ;kmh65R(Xqi@%|gj1nb>-=e+zyY5Y~33z+W -zW5u+~txN8EnLU2lVKF(V-s!=udtU37_bd^8zUANST~Az2)wSmbPt3pCX7Twz@tzy1 -z(acez@_Ju&6q`#Lq(6TU(JbuPHeY%Q71Lm&DzdrW46itI?F;1IhN0FB~Ko2TNWI?@z0G*zLzF?*L9h>9QPMY -zi9W6*5FVP;7PsPv|1;Tdb3)d%7lmkc32Te+y*&8nf%VeVYZDGFJgxYdwQbA2j*L0~ -zpC*2Lc;SGJ=%0LLy{unihu)ljaL6O{&gA+6)L;kXOq@T@lXo*;?Oo54%X4Qh**i}~xbdWGOjVxu>Xl8I`wnfp8}?3RO5^hu -zb*IkLFXr>c?3upcmt`QV7p1OcP -zaO#eA-118%9Jnex`;h4|v8e~Xu4BnQ$?OrBtlGF|WsBV3z|8uEcZ`*mUSNswU9YEi -zq)}4RTWFnf9arkh`A!qVX8f>Ad&e>*|Ht+@GEY-us~A~oEYhylnkz?RWP+-hAF?bNTavEy!T=;waXPa;MxH9a=`FeR3cYTY)YXZ6Jd1N+oNE|JktN!NDv4d9p -zD}R_R7BKyK!&oIG>!@qh2e!y7`wD#XC5@Me_^f`Wwe-7SdcCIpvdpK6lRXyc{4y)> -z0L_{FD{o>eq6jrDzR`LTUPA)U9a^yUHk%@tweslK3B+m!&@#%HnmN- -zf0ju7f{WW-y#4yWGw+WTZ)WfE%L&s^F7Ef$StYgk^n&VxEe-;cXyt_?uTJ( -ziX(ro(9$WNq*lAC&tSrDn`E!lGZKHyYlL$ueeOM8|F=u!^h18J^>4TQ<<}|r-@CK2 -z`djFfQ?*O{&Z)-aOp$qHw8ikzvyPd2H!EwtaZB+NJzifU?(s%ie2Ye0?VQNHGdE_u -zx+5BseS1myu^qAd*^W|e_Afpgpx1SE*}IJAbj+ -zB=}dQRq0`vPuuMIKN`hs0(xImKd--e_p3sgu%>3_>e$V{Q}axur&&4j|FOF3qIuz? -zz@`^0v+M7v9@{%EaQ< -z)p|C~16+-cX$9H~*?oVmT9~hrt1kIb$*9fBr&W~yd-hkMpNqRVYqdomPK{zpcl-N- -z=X;e|-+`;0k|kSb@W=Wtk@Mz!|M9+T@XA#`j;AqRDM|RP!}_km^xgNnA@hWb54RQ0 -znPXuSHRB#rS;TZFmPb#nC0_c*cXt1Ix22NDeeSZ>UuO`1d%@$H!c|xPWwMvJvzAqV -z4cWpv^J3FVftRc1-Db7du-(E;gm%$ -z_BLco|Ln=j6ZEaWcyWWFeN-Zoko2e4#tkl?d=~45o_KLOo_fwvEYfMtvq*}T1@4xS= -zX{VFYm-K$A?RPD7OkhZ02xsUuuCLP;oXj%A-Off;YI}qAZRTw!|5wetle0(c=Ch=2 -zEC<;Hrv`#ok-)Z(Z^(BxpiagG%G2iqvw8CGKGb;R^gsjg9O} -zY$eTHH~H1I3q6i(Jf*DVDxk(SnZ46mtZK_6xtoy-in~w$y?T(R?C`nk-&XJz-mG8b -z^>4=1C5wEQY3<*Vs>W46@3zcVrlYChb?f?KIWa(4D|&Cx%e|j(J$0X2%;4Rc9l!0_)8j_w -zMaQ|$R{e=7n%>-Ac`4zWGw;rt$eH}9vG=pOuGY7Q$#O4e;7B>ZxKpQ2Xnp?O`@grH -zzItQp=7VmNVuVj$S&?X^dugN1M<$LJk@ftAo1cE*k<)lCkX-g_NkZ53{8=XqEsHu> -zR*1yR?qXvUF=h~8NI0P2m}E55M27psqb5POC;Ti82U~@N_1XFLS=gBQ7+4v&7#J9A -z8Wtm|d_emJ6Omw+0_>#jY?*VUIQE@nLIcb3U;AC!Lh?z6(J2R+}89aLG&J^$R+ -zoBu;%E`FGI{Qk-2o=N}tCkUo>EoR?*Sx3<0S$6qrhsL_k#w{-VxiV6+ERX6#3>8-d -zCd#O8+8Dg?6!W?Z)k%C4CVFIDUu@HB#IR@6hvF^&xE6{l32H|1E6)4!yO8@|+@H#4 -z)BXhPdSL!ynO~*6ef4##*7Xh-`E2wf_eK_Ledp5m+w@!GF!N#_cg+azkKxM99*>*z -z=Y6!cN>=2zcCVAv3ZDM{;fr*GLN*XL;qZ^}{c`P3fj#8x;(ERMM>Ez>ZRO}Zsh -z)tFm1oO9dJ#C%2Hg&6f#h?j$)4b=)+uf0y)y>v={Qki^>!xcPs`@JWoi1N+ -z_Hsl0ms5&d`WIKIlxal&F%4hUn4YW2+xWlEGB0r(!-eY4pGsWjd8xIVOntdh&0|VX -zDto{J>zQ48+3wXd+HZQVc&q!>`OQ{C;a&1aiWiq~=BSAa23m*SHw)gsWAUxWYL*xI -z?n;$3U-I|3k-AVgvUXeU@8gZYei%GYKsIa1qY -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 -zj+M7ANM3mC^7`%FFVoCtKXRKTxSnZ- -zL4z~j>$@x`!uQTTv1X$~;1>5AnOQm0v^dv`+z<73m~zvc?P~n%iygN;SoJ~{J(auk -z=Kp5Cdq>4~-;$r6Rv*)_wn2I|`^pDhx7wLXHrlBseNbQe*~IkGKlXV)WVP2mnzfuQ -z+*s7lQw4G+E!@l-KeVmfaRg@(}vi; -zu6tt^YkG2@op5fh?b&Fqqs_DStuA!WfB50Vo+r=OTnyqbE@khZq4193Kz)+bkXZ{77~o6yN4+u!^vn;pJL?Vjr?f%gYuzop+P`13-> -zyx`_)#s^#0y;}HBJ#&NFgL$(|cIV&duXjmZ>35l>KDgTH=)t+GBNmsOo -z4_h+ok8%Xz&BL6ygnt{XJ9hq^@VnBxKPId@_;udz3A>iB -zz4YL*milVn0N$yq9vo-9cj(eCd}*-q7;n|E7?&-%Mr -z`mxD=#fGxY0c;EIUX4k~G2)39S?HN~??~!_hO*P=nQqnA^S9l|sky6h=jDHqkZETh -zd1#s`q|OTnFOAS%#~VCb>}+15hl-Hr=4kKe*11`;?!IN^x6Ufl<_#!{H{HGSOjEUL -zcf}&l0TOKt} -ztKkOX~sce_N)>+*B;7=YN-J?B4IW -zUys>=saE*#I_?>+M`x`5pyv8nXI-9kd;7^#cfT*R`1E!0O|^3w+WRX)>Q4tH|JZd+ -zxwl4VhE2ZK8Qzc%J=^nb_Yb}d)0tRUd+&6_b|$Sq`%EWHy{qcp;!)%;5xw?%Uejag -znGDZwDF3rJd1k1-{$rr{)9p)V2S!${F%iS-}t$D__8wJx0>5nF87a!61*JHUzTgScS -zh0mwnaOW_kq_3Ck_q<)}z5R>JVXZCuOMfYRHqHI^aN?d=2kj({>APghy_A(T4!h3| -z4X*ETKFhsMyz=LQkH>8e_1Ya~IK{4#3?um#ys&>9>~KINxPGoR)2I6lMvD$8vb;=cy*5i% -z|91*^>`S@QY|Wm_*RvNMPAN`Z!dnv+(f#U1)P{#EX3u5rH)MRwln~qS<*e|LHIn($ -zn`G*Di>oS5Ilj6f=-0<}{i>_;Qsz0N-ieUo37_@8zRWX>h!#P$-)Y`Fu*UvDgb -zUCv*>kWDVbeQ8Ji+J2|&9+nAaU-LNcElA&Teoesotxd(hIdU34UizcM(dqta{@s;M -zAGLP+ZMl}Z!-`9=if4_XTPsV#KR>IZj#o72oHk8R|MX;LR>QKe>YTUT(v#Xz -zGESYWEmPa9qF?B@SxF!EaXPLc8rQbdDOxtwg6a6B=R1;CjU#_zNo8H@Yu)3Bm=1x8Ah8=MmHP8EkD|M -z@A}n%oji77cPE-WSUyEOziMrViUHGt*i{Pmf8I^Fb9BvWF{^8Nz1y_;Z-(6vx)S&O -znshXCfv(CP*;6{!U0U2)>szAEpP$CsmtolE2w^MYT_m7oWtWUX{u1A~dDZ`$Mm%{FOh8`;A(BYiIQGa~@)knQBzubb|4L -zvHiYF+a9-t?E7%d`0|$5QDS#R7v(k^UNTBH(tp>u4f-&`W3Cq -znkyI0xHrF|b^ak8j_={w_aX}PKHg*E_EB^XZ#p~Kok{rd?2nua-2K@3+kf4A^{&fy -z_I6#rCnqjNa>`wtws2->uF9MKb!y-F9si!6S&&y`;>PFOb=_LX)Alcmqtb`A*)6Px -zwrdvZc^)dP_v71g@5Sp4tgKmAT3uFNiZBdSDBh<3-FnsmeZ>z8T60QX@SI@qh+{bM -zR`%1UW*zJP8#mc_cnxzuKHmOWDS3zD(XzDn!DWndREz{#E%F!VzPL3*Ter1i^1ctI -zTVB<&Gb~S?|NN8vs?7LR4=k*_y}!yx1Rbb)QS)qZ$=?Tpu@?18tco_#tJ~~1&w08q -zYJtiI<_o=Td*WSRZfH#Yb476dMb8;(EA5&6dao+Ic2@S24thUXU`oxCGy66$Sj({N -z^%XqEvb%vr;AF~5dEtH1cP%GN@0EL4e6RBCu_ANfFKX8pyu7Bi&~uTt3y*?j%2F$% -zG}Uu0G4es81o5wqtRE@m}iVGbRZ7aAOI -z9GBZ4vg~d5bKOOgJ7-EdYjq#W|Mx08apB3t&ahd}?rEK^*URGHylX~q#g6P_o9az` -z&2Ebx5q5BrT^XM0e&T_OZbe*V1lxkcleOwS;$l|zI=A3{ks0RE>Sjm0cDdP~`p4{b%_w2jmmKCI -zYuEGQHKx2Xo_~#rst(xZ9{M#?sCxD`wg0oNSk8QT{o7Vqq;UqPc-HNBJBO>UPO0qp -z`e%V$Lw&;KZv~t?-C|NwH~v=Kc4V!h%U=Hzr>4iJiI{6}G#EVDUl=Fj3!>vgqxy55#|eJ&TIWH(bYsw`^x%U`z>em>d9t;qag -z?edVW -z=7(;CJClgrtH}p>hlvBBOUU1uwGmegW -z8}d&|Oi(O}`Se=7>Uh?h>h(WOX58pGARW=)R{gJ_UL$0u(lPH1Ctdt%f*GDpS|{*J -zyu97hYPs%_w)PvVEsE>+PpK>u%ZgT~vaS5Dtuvgm{VZ0l+FZ>#nQiif8#VPWLz_Ug123eUxV#c -z*}n%Xk{7X>S6r!kQqUvmX!bAqRd;Q25U;y2f4BO%w~>E!C07I=p8r0fyWZ$cK0 -zkNZs(Oj&=+a($9u`}TXs%{g71T*LymWo -zQ7nHZqr>LJTg@M5{NT5|-9D#bn~2xZ`Z&$C^BSTOuH1M2%)TXCL~@htl#A^q59IoD -zk68REm{7nVIbnO@`d>d6&zbsQzP-WWvmyoi{_89~!RFJ#WZe1r^K#pdC!93D{?Ps* -zD86X2Mt}M2J+oX+uI2o3`tJ1plF}%7?eg-hbH_FwZ%N!|b?MXTd39fJ6f}u_4Jl)t -z9mP{-DjlG||DDyzQ2(HlI>n3&t!KRzYjpjr-x$$fW1S(Qw=ms&cHIpJ{_7TU+H=>joKnyiToaST7F+r}_O)N=%Ebv(52R3+=u9pa^5w|u*kRlKqG-I4TG -zCMLQ0T3yk`KfNyBiDG$hy=>mBm|uVYRJn&e{gs{6rI59_bIRj;8eanLtEh1b@=x6s -zv+!t()5W*COS1yHnAb8n9z0Ny6PNvpS#;vRx)@gfzpN{dY5tzFAxF?mM^Nx_){3VV -z<^d{>o8A>Z_F~>Rv)nL1r}|M{vxd2O{~JZ5Qa%du;99C!Gu*RMROwV+3!`mnEXSxQaBgr1X=T;0zt_{be)|CxjBe9+wT -z4NvR$D1NNp$yqhQLO4&kZg%&$_cE3MVDhBscJPLLCjCl@hD4lrflxM(~X7QiTXZk!hwDA4qv;Mj)&+g*qURU-OxBolp -zu*Fh3X$kugH-Yn&pMP;O>+jonOT>G2Y^FxeL-t!CX@*|Y%IfDB^55IM{)VK9`;O}y -z{s?UAp3>(&`*}lsV)P!}mo_uyzim0qSQeUbcY{Udf=^zVtzqivH4MkwSd!xQH7Paq -zecXGYo6U3b?6ixopUb8oi>4lW&{VxSs -zYp+icX5B$sF?F&;WOUae=)49`F60yYldG4**bM`UD?B59)Av+cz-+Q#=#kz^+vj0 -zXj9*onx96J&O84!^v;sJ(5>7sGbvkV!KK=z?9N)Of9@>cSyCKTdVP=Pj6-dbJNPp< -zPj=q9;r9CNyS!dBUeNUueetj*McwqD&fbI -zZuK2Y#dXv7iuFsDi#*~wsGl)CK$!bhti<(&Ne%T?dkx*6XiQ~4JNu0LqR4w3n~RiA -z%{k4>dtl|qE$_LyCFZ<~-g?@#f;(pC7uG7-oKH>jOdNzK@+NocKR9Ty&n$gLbxPgI -zb8{2QWA`buWgisSdq%a>)jvW!zqOk6_IlR8AzWNeWqFfNiC^&U?XR?`+M#n|*ZhQl -z3q5C#vah@8RG%ZVgFAFL@AeaKGneh=t$J}@GXBDsOC_a!@9LQpwBk309J&-&c7aXU -z<=y6TjY$kWfB(6iJ6yE&?8y$VsqNMmCf#`*<~4yOdFkfBd#}O{o|0>4p0@B}hWA4u -zOXWJ&t_hM1&-Q=Xqmk7fJda1-Eqda2Yv#?{eDAzU*|ykTmGkV&`dfW=>N?F!x^7=| -ze6zHoh*SJLihEl$0!ZzL~?~OJ08bOqLz{Q}~T;X)ioJpXc_AnG0@Z=A`YMY{R5) -zFqy&NaMazSJvS9^{yFiB??^{|vgl5WH%oGoxb}H%mp*wYMt`;_J@(SG>7- -z{Q}nmBlaJ6ye~17`kkw&?K$VHc#~)CN+vZchj_IWr!Oy>cyIm2Q>&WFYBHUhL?vCA -z{TAP7dMWVip3zc=Lu(w$l(;4GO67Igb49*rMNDXS?GT#1ih++;`n8At!=vl%_3H~} -z^Sytb^diPLKj?R9w?ewG)@G4t^^ne>5-vW?31QE!1ztL{fcwXby^dlpq^=u0ei}2O -z-@e~M+h5AcaBr!tNz_}l$upVHt#fs(4s5vesjx&w^PbE8yw1ZXtG>Lina%t!jJs>;({LaKymBzE^UHKrlWs&q>S@wkX -zg8`3Ti9TIfe&gwxsELQ994`KD?~1(1%U7Nnbp6nqn|7yPXYZA2XEprdX!L27fM&>< -z{dY^|HU=2QSNr&COW7J6mYaD0_E%n>zqLn>eRs1fe!J)U!FrQ46H?Piv -z`PoBbBfFZ@PnGl;K78Gqc}a@(dgJb|+TBq+&Gtbv_%;YuXoy;PtyKh;`Dx>%o!yhXmrv9wI@PIS= -z!NUg!okS($rtAzj;ySasI!Z%hrGk9uM-Q71f?Fb1oozO}-S+54OkHkf+3^$QjGGo& -zEVuq6cX!k8zw`coYd$Xj-0^&-+twBL93K3L+4h~=w<7FC|4tt9Jie=|S4uC~dns{C -zZuS4$vW$JR)i3IPKGFW*V)*7~&zL4O@ouQsj6Um{kN%Gw?H1bwI -zzpnSI@`2)0Ur*Js{7_a)H1W_{<~&houfs}q-jC0|POZ?E-8yqw@ck#E3Fjr66T37w -zd$BV&oIRQvF-1H)?ZL6fLXDq|?>wkHXLWs9>jk^ZfeIDDat7`RN;@7OU7XqS?8@8+ -zf9B{MaIa5cnZ+PGbAjUO_pM#>_IztLA2@HyV!8cz>Kgg&`=eSl1$jOeUvw~h#ZwvY -zHdAl;39S;QeqWWK8{229Ic|{#E;^rMwzGFjhMfLofwS8zUrQ~`s5h(Dzh(BFNpAOvQ?n1I -z-(s1kIGe+UM{fUD&xza4J)2~7){`l&=lfJ8i;W(?Zr=84p2f$pdcNN7sgX4;*6h)K -z8sFZmLrb^`Z_i-^j*&HU0PXOyTZ%5=IANJU?olJhq!__odEL_YeJR*bp3d;Msf5 -zhkPct?g>?W-lO%RV~ISQMMGJ)h|?{})AKuPU&%~}KC8j}Y+cDg<5O3f59-%H-}KQa -z@B6lyO}ZU(82p+d-LngXn&fM_)LbgLq=gvwFv{#Gc{8y<-*Lm_H~jqaKW6TdYN&NC -zFVp&Q!}H;Hp(1B&`3H&ABXm -z{jvGEPUZ%S_U+G{g(FU#?9sXAT3qwFVOhlSms^>{=N_K)R?xig`@gR?@1J?T?|8wx -zc^_jyjd-q&ue**^`l1Y5ruN0*!F&Xi@kxt_cI=naPFL2LS!?ffsa~lzbe0^ -ztoVKH_vKx4bJrW3xH(_GWYT2zwLy{neb?UfJe*>|F6dWQFUU3D@%7}!5UV@2PdsN7 -z98bBor16xw5bMb(`}a0k2TDtYxqf&Y;7}KKe$!vp^~m==huGpx%pCI{Jic6I_y1G# -zqX5^%TUIEFe7#Y7KIGH7M-hf=e~K2&Df`7$A-rV0y2sI~^$pokCthk8F1r_R+@B$E -z(Dg8D;F{^jf^MAb@HkL^F2e8M)dPuw>}y=vJ}y$%{v|Hex&4Pi+V&qOwx)>%GB|Nn -z|MzM88|rcWevHvk!#DZb8#G&rfAXnbd6n?1`--S~%bjB?5;0}RY<4ToTyMa@5uf|@ -zL&MqpbF;gCOk2=k=c6?#OH*OBG`G`o7S3~Ry0UeLyV#ChzS&gkuu|!jPd)!0&8Rc+ -z-uIoVKkfUSt8znRZc!W8v-Yc&SGSq{s__^8AkZ>7@9~Pw%+nefJdgWYGMt?@+hD;? -zUjvtQE{C&DSIt~eKao9l_3;CY_YZIzE?8E7Pvg{yOFOwGZIUK!U$SFOqbI{+M@6UQ -zH>b>gb@Qp{$HkXU*uHGCSS_Ibu&`qC^!lP5EkE~6z9oFO=6n^0Xi@Hd75OU9EgFtD -zv%h4UzL(=LIwx19yJm~>oQAyQpy{nWpI4L@Y*bY``Q(pAu-LZC2id~5wJZL8_I7C> -z--LVDgZ8>{oI2*@(_uHILZDie-9s|YqgHrZ(PHV`hb-T0%mtrYZK)NRwqW8a!)4B{ -zJZ=W{s-Jc#mVS8hTS{t8g~H*!O)u{FOj`9f{bTB)V*Mtkl(#Po -z&n%d*VE6Ln^E|h@@oxE~A5zcs*yH2sqt7)<+kYP{)?0D4{(kPn)wkbW3fWh1u43xN -z_RPSVGmTUIqbG7(Esv~B^9h-=ATdgfYr|}#=q^?p^=-}dDlbpGvUno;v)qioENaG! -zw{watpWaNCk~?uA@``tD`NX{m3xC@symGy+bNINz%{_OoNJrg%;$?pS$?fC3{>fr{ -zFCW?+B_RDklHtC>pQ}37R>HblE-{}eU#^{cea-K)va=Rk&pYMeuG+Z6;ZM5A%RS}p -zSDrfmOf)&_?b>^7uXRgD8=X+gI(&Kcg#am~UyYKSOX~x*774HW -zQ?z#a|0KUgZpQ|W+aLC6W~JBGuhgm1+^!yA&@jR7HtV9JwHXcfL+4FfYPv?^V5ao3 -zyN0JC^0)Aga-QmW4dGiknO_F%{?~=xb7m0S|+ct5X*P5v; -ze^@T#A6MG^`1Au?jT|ooOz#tDn;K_YFRCVD)fE&LUei;lHGS8iifMOOzBDYHd0LEl -zL8Faa(OKi;+wV!l&VB6T^PZ!7yOB}jM-_>T`zDTD?Aa6eRD(`z*m22+`-RYw^bXfW -z{5Q_+wY|N9IqN(lt90@1y({bvDg+#FzPm18=ZhGR{?*tC5z3j5+?m5BHL6*q9kp`w -z`dXi;eP{Q@!|xn)&oF*|IkV&H+?tznzBvZEH)zg3rSX}Gv7AMXaqBkQZA{DMuhnmL -zho?TJ-{#-^SxdsH$1U8r -z;agqKr^P2^8idvS-cHx~pLXimA?YRjmWu^H>%N(%P_Jz=y{5HoQ`+j#juW5sW)v*b -z{>b|${Jtrd^In0;tg+)%@I|Z|UliYfPyED-NdHgvV)~KfoZdgUG<1~3u -z;pt~C*gLqkt7&xXv%T||+u_@!BQFwmnLJ#eu*gsNG55I*g{K>h-aN7qpK_q2ELctR -zefRcf)2}V!eb~x6_xA1$4;HUm`bucJXON!qiL&Q6Z_NI>JHIr-vukT^ebyT8clUG} -zdJH1Z+m(hsPiXwNcgfdtwIW|nd(Zoq9>k$MQ(}ozT=w~X+3qc$v^1s)-sapkb^1~3 -z9cRQ}a~cZ1Nnn(1ds2{dJFw;A2Y#_FhopRNrZnVt73EpK>DIezSG_!TsqoKL-Y8L7y%@}A -z`LH-c-rZ~Y9p;J8EHB*qv6gw6iU8xJ43)D^4{9`@stGm(WjVXAdHeT`+mD!O=Qibp -zeVP8@L)uT(gcjb?dl$rndG`2;2)WgGGPkU=Ig-?5HQzTpJ1Nx_1#D;O4R(8`+2n-HAk`YO2L -z{Nto&l17bhs^8Tn#1yQ!t&p-Xt^diMrR%+J>ISKY-g=#P=crtZ2nm+B -z-IVYtZ`(EjmCNC^xq*u!r)~;rOkQ`>p*#7de0A>P$tNpSOb*+BzuUvuyEZYObMNc< -z&kHZI^(9OeTlR+c`@;=?uFVhC^H$kCL&-X&J3aqzx~X2A(1zfOm3OCqx>;7_X?ypg -z?e%X)yAECGom?Mp`a{IKi}4k+i>cAMMSevG9*HrPPjV%BLa~3l9=0AUIUM}tPtt?y -zSq$eVOsa^E*Op5ySjyGyucpAF6111AcT#-oq>Q~K^`d7*w?_3&dGBxM -z{rT8amfzEMI7LQmy|y_?htJH!uyMwXZ643elvZ}`*Nx7I>0j`7db-joTU*H>$&Zy& -zi!aBgFK16*P!pZ@uk5+ww|*M -z$0xl!wCmZ_P-9=MRWsIH__w{?@#^W6uKHz;n+uz5+Dvb4`xl-+Bkl37H-bF{8*=Ik -z9S`mhG}y93@y)3X2UnHz$5jgb`_?X?y!(rU+Oap;YY$&p^8a8(eS*}>v_ICJ8~?wo -zH)nmd`9y!q?lnKuXDupPeqZ|Q-DKX*^$aFn(qYWU)pSgRGxvPjCDAUtSivke^_=f% -zw({hp!$I#J*oTX|Jb&i+E+|pdv$`j-$zp}{61LgUK>MPp -mf+CYUuWnrH# anyhow::Result { - #[test_case::test_case(b""; "no_late_output")] - #[test_case::test_case(b"late\n"; "with_late_output")] - #[tokio::test] --async fn completed_output_preserves_bytes_before_subscription( -+async fn streamed_and_completed_output_preserve_bytes_before_subscription( - late_output: &[u8], - ) -> anyhow::Result<()> { - let StreamingOutputHarness { -@@ -115,17 +115,23 @@ async fn completed_output_preserves_bytes_before_subscription( - drop(stdout_tx); - exit_tx.send(0).expect("send exit"); - -- let item = tokio::time::timeout(Duration::from_secs(2), async { -+ let (item, streamed_output) = tokio::time::timeout(Duration::from_secs(2), async { -+ let mut streamed_output = Vec::new(); - loop { -- if let EventMsg::ItemCompleted(completed) = rx_event.recv().await?.msg -- && let TurnItem::CommandExecution(item) = completed.item -- { -- return Ok::<_, async_channel::RecvError>(item); -+ match rx_event.recv().await?.msg { -+ EventMsg::ExecCommandOutputDelta(delta) => streamed_output.extend(delta.chunk), -+ EventMsg::ItemCompleted(completed) => { -+ if let TurnItem::CommandExecution(item) = completed.item { -+ return Ok::<_, async_channel::RecvError>((item, streamed_output)); -+ } -+ } -+ _ => {} - } - } - }) - .await??; - let expected_output = String::from_utf8([b"early\n".as_slice(), late_output].concat())?; -+ assert_eq!(streamed_output, expected_output.as_bytes()); - assert_eq!( - (item.status, item.exit_code, item.aggregated_output), - ( -diff --git a/codex-rs/core/src/unified_exec/process.rs b/codex-rs/core/src/unified_exec/process.rs -index b3ddb02..ffdc5f4 100644 ---- a/codex-rs/core/src/unified_exec/process.rs -+++ b/codex-rs/core/src/unified_exec/process.rs -@@ -99,6 +99,7 @@ enum ProcessHandle { - pub(crate) struct UnifiedExecProcess { - process_handle: ProcessHandle, - output_tx: broadcast::Sender>, -+ output_rx: std::sync::Mutex>>>, - output: OutputHandles, - output_drained: Arc, - interaction_lock: Arc>, -@@ -139,12 +140,13 @@ impl UnifiedExecProcess { - collection_finished: CancellationToken::new(), - }; - let output_drained = Arc::new(Notify::new()); -- let (output_tx, _) = broadcast::channel(64); -+ let (output_tx, output_rx) = broadcast::channel(64); - let (state_tx, state_rx) = watch::channel(ProcessState::default()); - - Self { - process_handle, - output_tx, -+ output_rx: std::sync::Mutex::new(Some(output_rx)), - output, - output_drained, - interaction_lock: Arc::new(Mutex::new(())), -@@ -188,7 +190,11 @@ impl UnifiedExecProcess { - } - - pub(super) fn output_receiver(&self) -> tokio::sync::broadcast::Receiver> { -- self.output_tx.subscribe() -+ self.output_rx -+ .lock() -+ .expect("unified exec output receiver lock poisoned") -+ .take() -+ .expect("unified exec output receiver already taken") - } - - pub(super) fn cancellation_token(&self) -> CancellationToken { diff --git a/scripts/build-codex-runtime.mjs b/scripts/build-codex-runtime.mjs index d611a20..f9b919f 100644 --- a/scripts/build-codex-runtime.mjs +++ b/scripts/build-codex-runtime.mjs @@ -1,114 +1,32 @@ -import { execFile, spawn } from 'node:child_process'; -import { promisify } from 'node:util'; -import { readFile, writeFile, mkdir, readdir, statfs, cp, mkdtemp, rm } from 'node:fs/promises'; -import { dirname, join, resolve, relative } from 'node:path'; +import { cp, mkdir, readFile, writeFile } from 'node:fs/promises'; +import { dirname, join, resolve } from 'node:path'; import { createRequire } from 'node:module'; import { fileURLToPath } from 'node:url'; -import { createHash } from 'node:crypto'; import { codexRuntimeTargets } from './codex-runtime-targets.mjs'; +import { validateCodexRuntimeArtifact } from './codex-runtime-artifact.mjs'; const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); -const definition = join(root, 'runtime/codex'); -const source = JSON.parse(await readFile(join(definition, 'source.json'), 'utf8')); -const digest = (bytes) => createHash('sha256').update(bytes).digest('hex'); -const buildRoot = process.argv[2] && resolve(process.argv[2]); -const prepareOnly = process.argv[3] === '--prepare-only'; -if (!buildRoot || process.argv.length > 4 || process.argv[3] && !prepareOnly) throw new Error('Usage: node scripts/build-codex-runtime.mjs BUILD_DIRECTORY [--prepare-only]'); -// Resolve host compatibility before creating a build directory or fetching source. -const targetDefinition = codexRuntimeTargets[`${process.platform}-${process.arch}`]; -if (!prepareOnly && !targetDefinition) throw new Error('The worker runtime build supports ARM64 macOS and ARM64 or x64 Linux. Use the matching Linux Docker builder for worker artifacts.'); -await mkdir(buildRoot, { recursive: true }); -const marker = join(buildRoot, 'rat-codex-source.json'); -const identity = JSON.stringify({ ...source, patches: await Promise.all(source.patches.map(async (name) => ({ name, sha256: createHash('sha256').update(await readFile(join(definition, name))).digest('hex') }))) }); -const previous = await readFile(marker, 'utf8').catch((error) => { if (error.code === 'ENOENT') return undefined; throw error; }); -if (previous !== undefined && previous !== identity) throw new Error('Build directory belongs to a different source revision or patch. Use a new directory.'); -if (previous === undefined && (await readdir(buildRoot)).length) throw new Error('Use an empty build directory. Existing files will not be replaced.'); -const run = async (program, args, cwd = buildRoot, env = process.env) => { - const child = spawn(program, args, { cwd, env, stdio: 'inherit' }); - await new Promise((resolve, reject) => { child.once('error', reject); child.once('close', (code, signal) => code === 0 ? resolve() : reject(new Error(`${program} exited with ${signal ?? code}`))); }); +const output = process.argv[2] && resolve(process.argv[2]); +if (!output || process.argv.length !== 3) throw new Error('Usage: node scripts/build-codex-runtime.mjs NEW_OUTPUT_DIRECTORY'); +const target = codexRuntimeTargets[`${process.platform}-${process.arch}`]; +if (!target) throw new Error('Official runtime packaging supports ARM64 macOS and ARM64 or x64 Linux.'); +const source = JSON.parse(await readFile(join(root, 'runtime/codex/source.json'), 'utf8')); +if ('patches' in source) throw new Error('Only unmodified official Codex releases can be packaged.'); +const inventory = JSON.parse(await readFile(join(root, 'runtime/codex/companion-packages.json'), 'utf8'))[target.packageName]; +const packagePath = createRequire(import.meta.url).resolve(`${target.packageName}/package.json`); +const installed = JSON.parse(await readFile(packagePath, 'utf8')); +if (installed.version !== `${source.upstreamVersion}-${target.platform}-${target.arch}`) throw new Error('Install the exact pinned official Codex package first.'); +const vendor = join(dirname(packagePath), 'vendor', target.vendorTarget); +await mkdir(dirname(output), { recursive: true }); +await mkdir(output); +await cp(vendor, join(output, 'runtime'), { recursive: true, errorOnExist: true, force: false }); +const manifest = { + source, platform: target.platform, arch: target.arch, + distribution: { kind: 'official-npm', target: target.vendorTarget, integrity: inventory.integrity }, + upstreamPackage: { name: target.packageName, version: installed.version }, + sha256: inventory.files.find(file => file.path === 'bin/codex').sha256, + files: inventory.files.map(({ path, sha256 }) => ({ path, sha256 })), }; -const checkout = join(buildRoot, 'source'); -if (previous === undefined) { - await writeFile(marker, identity, { flag: 'wx' }); - await run('git', ['init', checkout]); - await run('git', ['remote', 'add', 'origin', source.repository], checkout); - await run('git', ['fetch', '--depth=1', 'origin', source.revision], checkout); - await run('git', ['checkout', '--detach', source.revision], checkout); - for (const patch of source.patches) { - await run('git', ['apply', '--check', join(definition, patch)], checkout); - await run('git', ['apply', join(definition, patch)], checkout); - } -} -const { stdout: revision } = await promisify(execFile)('git', ['rev-parse', 'HEAD'], { cwd: checkout }); -if (revision.trim() !== source.revision) throw new Error('Native source revision changed'); -for (const patch of source.patches) await run('git', ['apply', '--reverse', '--check', join(definition, patch)], checkout); -const patchedTree = await verifySourceTree(); -const modelDefaults = JSON.parse(await readFile(join(definition, 'model-defaults.json'), 'utf8')); -const modelCatalogue = await readFile(join(checkout, modelDefaults.sourcePath)); -const expectedDefaults = Object.fromEntries(JSON.parse(modelCatalogue).models.map((model) => [model.slug, model.default_reasoning_level])); -if (modelDefaults.revision !== source.revision || createHash('sha256').update(modelCatalogue).digest('hex') !== modelDefaults.sourceSha256 - || JSON.stringify(modelDefaults.defaults) !== JSON.stringify(expectedDefaults)) { - throw new Error('Resolved API model defaults do not match the pinned harness catalogue.'); -} -if (!prepareOnly) { - const space = await statfs(buildRoot); - if (space.bavail * space.bsize < 16 * 1024 ** 3) throw new Error('Native compilation requires at least 16 GiB of free working space. Source preparation is complete.'); - const target = join(buildRoot, 'target'); - const jobs = Number(process.env.CARGO_BUILD_JOBS ?? 1); - if (!Number.isInteger(jobs) || jobs < 1) throw new Error('CARGO_BUILD_JOBS must be a positive integer.'); - const build = { profile: 'release', debug: 'none', incremental: false, locked: true, jobs }; - // Keep the exact upstream package's companion host and resources. Patching the - // CLI alone silently disables code mode when its sibling executable is absent. - const packageName = targetDefinition.packageName; - const packagePath = createRequire(import.meta.url).resolve(`${packageName}/package.json`); - const upstreamPackage = JSON.parse(await readFile(packagePath, 'utf8')); - if (upstreamPackage.version !== `${source.upstreamVersion}-${process.platform}-${process.arch}`) throw new Error('Install the exact pinned Codex companion package before building.'); - const vendor = join(dirname(packagePath), 'vendor', targetDefinition.vendorTarget); - const vendorFiles = await files(vendor); - const bwrap = vendorFiles.find((path) => path.endsWith('/bwrap')); - if (process.platform === 'linux' && !bwrap) throw new Error('The pinned Linux runtime has no bundled bwrap.'); - const bwrapSha256 = bwrap ? digest(await readFile(bwrap)) : undefined; - await run('cargo', ['build', '--locked', '--release', '--bin', 'codex'], join(checkout, 'codex-rs'), { - ...process.env, CARGO_TARGET_DIR: target, CARGO_PROFILE_RELEASE_DEBUG: 'none', CARGO_INCREMENTAL: '0', CARGO_BUILD_JOBS: String(jobs), - ...(bwrapSha256 ? { CODEX_BWRAP_SHA256: bwrapSha256 } : {}), - }); - if (await verifySourceTree() !== patchedTree) throw new Error('Native source changed during compilation.'); - const { stdout: compilerVersion } = await promisify(execFile)('rustc', ['-vV'], { cwd: join(checkout, 'codex-rs') }); - const nativeTarget = compilerVersion.split('\n').find(line => line.startsWith('host: '))?.slice(6); - if (nativeTarget !== targetDefinition.nativeTarget) throw new Error('Native compiler target does not match the requested runtime.'); - const runtime = join(buildRoot, 'runtime'); - await cp(vendor, runtime, { recursive: true }); - const descriptorPath = join(runtime, 'codex-package.json'); - const descriptor = JSON.parse(await readFile(descriptorPath, 'utf8')); - await writeFile(descriptorPath, JSON.stringify({ ...descriptor, target: nativeTarget }, null, 2) + '\n'); - const binary = join(runtime, 'bin/codex'); - await cp(join(target, 'release', 'codex'), binary); - const sha256 = digest(await readFile(binary)); - const manifest = await Promise.all((await files(runtime)).map(async (path) => ({ path: relative(runtime, path), sha256: digest(await readFile(path)) }))); - await writeFile(join(buildRoot, 'artifact.json'), JSON.stringify({ source: JSON.parse(identity), build: { ...build, nativeTarget, patchedTree }, binary, sha256, - platform: process.platform, arch: process.arch, upstreamPackage: { name: packageName, version: upstreamPackage.version }, files: manifest }, null, 2) + '\n'); - await run(binary, ['--version']); - console.log(`Native artifact: ${binary}`); -} - -async function verifySourceTree() { - const temporary = await mkdtemp(join(buildRoot, 'source-audit-')); - const env = { ...process.env, GIT_INDEX_FILE: join(temporary, 'index') }; - const git = async (args, environment = process.env) => (await promisify(execFile)('git', args, { cwd: checkout, env: environment, maxBuffer: 16 * 1024 * 1024 })).stdout; - try { - await git(['read-tree', source.revision], env); - for (const patch of source.patches) await git(['apply', '--cached', join(definition, patch)], env); - const diff = ['diff', '--no-ext-diff', '--binary', '--src-prefix=a/', '--dst-prefix=b/']; - const expected = await git([...diff, '--cached', source.revision], env); - const actual = await git([...diff, source.revision]); - const extra = await git(['ls-files', '--others', '--exclude-standard']); - if (actual !== expected || extra.trim()) throw new Error('Native checkout contains changes beyond the pinned patches. Use a clean dedicated build directory.'); - return (await git(['write-tree'], env)).trim(); - } finally { await rm(temporary, { recursive: true, force: true }); } -} - -async function files(directory) { - const entries = await readdir(directory, { withFileTypes: true }); - return (await Promise.all(entries.sort((a, b) => a.name.localeCompare(b.name)).map((entry) => entry.isDirectory() - ? files(join(directory, entry.name)) : [join(directory, entry.name)]))).flat(); -} +await writeFile(join(output, 'artifact.json'), JSON.stringify(manifest, null, 2) + '\n', { flag: 'wx' }); +await validateCodexRuntimeArtifact(output, { expectedTarget: target.nativeTarget }); +console.log(JSON.stringify({ directory: output, distribution: manifest.distribution.kind, version: source.upstreamVersion, binarySha256: manifest.sha256 })); diff --git a/scripts/build-desktop.mjs b/scripts/build-desktop.mjs index e55f8d4..30ff462 100644 --- a/scripts/build-desktop.mjs +++ b/scripts/build-desktop.mjs @@ -1,11 +1,63 @@ import { spawnSync } from 'node:child_process'; -import { chmod, copyFile, cp, mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises'; -import { dirname, resolve } from 'node:path'; +import { chmod, copyFile, cp, lstat, mkdir, mkdtemp, readdir, rename, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; -import hostCodePolicy from '../runtime/native/host-code-policy.json' with { type: 'json' }; -import companionPackages from '../runtime/codex/companion-packages.json' with { type: 'json' }; +import { validateCodexRuntimeArtifact } from './codex-runtime-artifact.mjs'; +import { checkedFile } from './build-native-release.mjs'; const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); + +/** Copy only an admitted official macOS artifact, including its original signatures. */ +export async function stageDesktopCodexRuntime(artifactRoot, destination, admissionOptions = {}) { + const artifact = await validateCodexRuntimeArtifact(artifactRoot, { ...admissionOptions, expectedTarget: 'aarch64-apple-darwin' }); + await mkdir(destination); + for (const file of artifact.files) { + const filename = join(destination, file.path); + await mkdir(dirname(filename), { recursive: true }); + await checkedFile(file.source, { expected: file, destination: filename, mode: file.mode }); + } + const runtime = { directory: destination, files: artifact.files.map(({ path, sha256, mode }) => ({ path, sha256, mode })) }; + await verifyDesktopCodexRuntime(runtime); + return runtime; +} + +async function verifyDesktopCodexRuntime(runtime) { + const paths = []; + const visit = async (directory, prefix = '') => { + if (!(await lstat(directory)).isDirectory()) throw new Error('Desktop Codex directories must not be links.'); + const entries = await readdir(directory, { withFileTypes: true }); + if (!entries.length) throw new Error('Desktop Codex contains an unexpected empty directory.'); + for (const entry of entries) { + const path = prefix ? `${prefix}/${entry.name}` : entry.name; + if (entry.isDirectory()) await visit(join(directory, entry.name), path); + else if (entry.isFile()) paths.push(path); + else throw new Error('Desktop Codex contains a link or special file.'); + } + }; + await visit(runtime.directory); + if (JSON.stringify(paths.sort()) !== JSON.stringify(runtime.files.map(file => file.path).sort())) throw new Error('Desktop Codex inventory changed.'); + for (const file of runtime.files) { + const filename = join(runtime.directory, file.path); + await checkedFile(filename, { expected: file }); + if (((await lstat(filename)).mode & 0o777) !== file.mode) throw new Error('Desktop Codex file permissions changed.'); + } +} + +/** + * Outer signing must leave every upstream executable and resource unchanged. + * @param {string} bundle + * @param {{ directory: string, files: Array<{path: string, sha256: string, mode: number}> }} runtime + * @param {(command: string, args: string[], options: {stdio: 'inherit'}) => {status: number | null, error?: Error}} [run] + */ +export async function signDesktopBundle(bundle, runtime, run = spawnSync) { + await verifyDesktopCodexRuntime(runtime); + const signature = await run('codesign', ['--force', '--sign', '-', bundle], { stdio: 'inherit' }); + if (signature.error) throw signature.error; + if (signature.status !== 0) throw new Error('Desktop application signing failed'); + await verifyDesktopCodexRuntime(runtime); +} + async function replaceExecutable(source, destination) { const temporary = `${destination}.${process.pid}.tmp`; try { @@ -15,47 +67,40 @@ async function replaceExecutable(source, destination) { await rm(temporary, { force: true }); } } -const metadata = spawnSync('cargo', ['metadata', '--format-version', '1', '--no-deps', '--manifest-path', 'desktop/Cargo.toml'], { cwd: root, encoding: 'utf8' }); -if (metadata.error) throw metadata.error; -if (metadata.status !== 0) throw new Error(metadata.stderr || 'Could not locate Cargo output directory'); -const targetDirectory = JSON.parse(metadata.stdout).target_directory; -const result = spawnSync('cargo', ['build', '--locked', '--release', '--manifest-path', 'desktop/Cargo.toml'], { cwd: root, stdio: 'inherit' }); -if (result.error) throw result.error; -if (result.status !== 0) process.exit(result.status ?? 1); -const name = `rat-things-desktop${process.platform === 'win32' ? '.exe' : ''}`; -await mkdir(resolve(root, 'dist'), { recursive: true }); -await replaceExecutable(resolve(targetDirectory, 'release', name), resolve(root, 'dist', name)); -if (process.platform === 'darwin') { - const bundle = resolve(root, 'dist/Rat Things.app/Contents'); - await mkdir(`${bundle}/MacOS`, { recursive: true }); - await mkdir(`${bundle}/Resources`, { recursive: true }); - await replaceExecutable(resolve(root, 'dist', name), `${bundle}/MacOS/${name}`); - await replaceExecutable(process.execPath, `${bundle}/MacOS/node`); - await chmod(`${bundle}/MacOS/node`, 0o755); - await copyFile(resolve(root, 'dist/console-server.mjs'), `${bundle}/Resources/console-server.mjs`); - await copyFile(resolve(root, 'THIRD_PARTY_NOTICES.md'), `${bundle}/Resources/THIRD_PARTY_NOTICES.md`); - await copyFile(resolve(root, 'assets/brand/rat-things.icns'), `${bundle}/Resources/AppIcon.icns`); - const target = `${process.arch === 'arm64' ? 'aarch64' : 'x86_64'}-apple-darwin`; - const runtime = resolve(root, `node_modules/@openai/codex-darwin-${process.arch}/vendor/${target}`); - const descriptor = JSON.parse(await readFile(`${runtime}/codex-package.json`, 'utf8')); - const source = JSON.parse(await readFile(resolve(root, 'runtime/codex/source.json'), 'utf8')); - if (descriptor.version !== source.upstreamVersion || descriptor.target !== target) throw new Error('The bundled host Codex must match the pinned runtime version'); - await rm(`${bundle}/MacOS/codex-runtime`, { recursive: true, force: true }); - await rm(`${bundle}/Resources/codex-runtime`, { recursive: true, force: true }); - await cp(runtime, `${bundle}/Resources/codex-runtime`, { recursive: true }); - await cp(resolve(root, 'runtime/codex/licenses'), `${bundle}/Resources/codex-licenses`, { recursive: true }); - const companions = companionPackages[`@openai/codex-darwin-${process.arch}`]; - if (!companions) throw new Error('The bundled host Codex requires a reviewed companion inventory'); - for (const file of companions.files) { - await chmod(`${bundle}/Resources/codex-runtime/${file.path}`, file.executable ? 0o755 : 0o444); - } - for (const policy of hostCodePolicy.filter(policy => policy.role !== 'vm-helper')) { - const executable = policy.path.slice('Contents/Resources/codex/'.length); - const signature = spawnSync('codesign', ['--force', '--sign', '-', `${bundle}/Resources/codex-runtime/${executable}`], { stdio: 'inherit' }); - if (signature.error) throw signature.error; - if (signature.status !== 0) process.exit(signature.status ?? 1); - } - await writeFile(`${bundle}/Info.plist`, ` +async function buildDesktop() { + const metadata = spawnSync('cargo', ['metadata', '--format-version', '1', '--no-deps', '--manifest-path', 'desktop/Cargo.toml'], { cwd: root, encoding: 'utf8' }); + if (metadata.error) throw metadata.error; + if (metadata.status !== 0) throw new Error(metadata.stderr || 'Could not locate Cargo output directory'); + const targetDirectory = JSON.parse(metadata.stdout).target_directory; + const result = spawnSync('cargo', ['build', '--locked', '--release', '--manifest-path', 'desktop/Cargo.toml'], { cwd: root, stdio: 'inherit' }); + if (result.error) throw result.error; + if (result.status !== 0) process.exit(result.status ?? 1); + const name = `rat-things-desktop${process.platform === 'win32' ? '.exe' : ''}`; + await mkdir(resolve(root, 'dist'), { recursive: true }); + await replaceExecutable(resolve(targetDirectory, 'release', name), resolve(root, 'dist', name)); + if (process.platform === 'darwin') { + const bundle = resolve(root, 'dist/Rat Things.app/Contents'); + await mkdir(`${bundle}/MacOS`, { recursive: true }); + await mkdir(`${bundle}/Resources`, { recursive: true }); + await replaceExecutable(resolve(root, 'dist', name), `${bundle}/MacOS/${name}`); + await replaceExecutable(process.execPath, `${bundle}/MacOS/node`); + await chmod(`${bundle}/MacOS/node`, 0o755); + await copyFile(resolve(root, 'dist/console-server.mjs'), `${bundle}/Resources/console-server.mjs`); + await copyFile(resolve(root, 'THIRD_PARTY_NOTICES.md'), `${bundle}/Resources/THIRD_PARTY_NOTICES.md`); + await copyFile(resolve(root, 'assets/brand/rat-things.icns'), `${bundle}/Resources/AppIcon.icns`); + const temporary = await mkdtemp(join(tmpdir(), 'rat-desktop-codex-')); + let codex; + try { + const artifactRoot = join(temporary, 'artifact'); + const packaged = spawnSync(process.execPath, [resolve(root, 'scripts/build-codex-runtime.mjs'), artifactRoot], { cwd: root, stdio: 'inherit' }); + if (packaged.error) throw packaged.error; + if (packaged.status !== 0) throw new Error('Official desktop Codex packaging failed'); + await rm(`${bundle}/MacOS/codex-runtime`, { recursive: true, force: true }); + await rm(`${bundle}/Resources/codex-runtime`, { recursive: true, force: true }); + codex = await stageDesktopCodexRuntime(artifactRoot, `${bundle}/Resources/codex-runtime`); + } finally { await rm(temporary, { recursive: true, force: true }); } + await cp(resolve(root, 'runtime/codex/licenses'), `${bundle}/Resources/codex-licenses`, { recursive: true }); + await writeFile(`${bundle}/Info.plist`, ` CFBundleExecutable${name} @@ -66,9 +111,10 @@ if (process.platform === 'darwin') { CFBundleShortVersionString0.1.0 NSHighResolutionCapable \n`); - const signature = spawnSync('codesign', ['--force', '--sign', '-', resolve(bundle, '..')], { stdio: 'inherit' }); - if (signature.error) throw signature.error; - if (signature.status !== 0) process.exit(signature.status ?? 1); - console.log('Built dist/Rat Things.app. Launch through rat-things console to inherit your API and AWS profile settings.'); + await signDesktopBundle(resolve(bundle, '..'), codex); + console.log('Built dist/Rat Things.app. Launch through rat-things console to inherit your API and AWS profile settings.'); + } + console.log(`Built dist/${name}`); } -console.log(`Built dist/${name}`); + +if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) await buildDesktop(); diff --git a/scripts/build-native-guest.mjs b/scripts/build-native-guest.mjs index a83725e..b91c684 100644 --- a/scripts/build-native-guest.mjs +++ b/scripts/build-native-guest.mjs @@ -71,9 +71,8 @@ async function nativeGuest(options) { const definitionRoot = resolve(options.definitionRoot ?? join(root, 'runtime/codex')); const artifactRoot = resolve(options.guestArtifact); const artifactBytes = await readInput(join(artifactRoot, 'artifact.json')); - const artifact = await validateCodexRuntimeArtifact(artifactRoot, { expectedTarget: 'aarch64-unknown-linux-gnu', definitionRoot }); - const sourceDefinition = JSON.parse(await readInput(join(definitionRoot, 'source.json'), 'codex-definition/source.json')); - for (const name of ['artifact-policy.json', ...sourceDefinition.patches]) await readInput(join(definitionRoot, name), `codex-definition/${name}`); + const artifact = await validateCodexRuntimeArtifact(artifactRoot, { expectedTarget: 'aarch64-unknown-linux-musl', definitionRoot }); + await readInput(join(definitionRoot, 'source.json'), 'codex-definition/source.json'); await readInput(join(root, 'runtime/codex/companion-packages.json'), 'runtime/codex/companion-packages.json'); const kernelBytes = await readInput(join(root, 'runtime/native/kernel-inputs.json'), 'runtime/native/kernel-inputs.json'); const kernelInputs = JSON.parse(kernelBytes.toString('utf8')); diff --git a/scripts/build-native-release.mjs b/scripts/build-native-release.mjs index 344ba36..6cbe5bb 100644 --- a/scripts/build-native-release.mjs +++ b/scripts/build-native-release.mjs @@ -26,9 +26,9 @@ const manifestPath = 'Contents/Resources/runtime-manifest.json'; const signaturePaths = ['CodeDirectory', 'CodeRequirements', 'CodeResources', 'CodeSignature'].map(path => `Contents/_CodeSignature/${path}`); const limits = { entries: 4096, fileBytes: 768 * 1024 ** 2, totalBytes: 2 * 1024 ** 3, manifestBytes: 128 * 1024 }; const guestArtifacts = ['Image', 'worker-initramfs.gz', 'archive-inventory.json', 'worker-dependencies.json', 'worker-notices.json', 'worker-metafile.json', 'worker-build.json', 'build.log']; -const jitEntitlements = ['com.apple.security.cs.allow-jit', 'com.apple.security.cs.allow-unsigned-executable-memory']; export const nativeExecutablePolicy = Object.freeze(hostCodePolicy.map(policy => Object.freeze(policy))); const executables = new Map(nativeExecutablePolicy.map(value => [value.path, value])); +const upstreamSignerBlocker = 'Native macOS upstream-signer admission requires design and on-Mac validation'; export function parseNativeReleaseOptions(args) { const options = {}; @@ -112,6 +112,10 @@ export function nativeCompatibility(protocol, machOs) { } export function signingArguments(identity, policy, filename, entitlementPaths) { + if (!isDeepStrictEqual(policy, nativeExecutablePolicy.find(value => value.role === 'vm-helper')) + && !isDeepStrictEqual(policy, { identifier: 'dev.rat-things.runtime' })) { + throw new Error('Only the Rat Things VM helper and outer bundle may be signed.'); + } return ['--force', '--sign', identity, '--identifier', policy.identifier, '--options', 'runtime', '--timestamp', ...(policy.entitlements ? ['--entitlements', entitlementPaths[policy.entitlements]] : []), filename]; } @@ -229,9 +233,8 @@ async function guestEvidence(directory, readInput, host, companions) { if (inputs.codexArtifactSha256 !== (await checkedFile(join(directory, 'evidence/codex-artifact.json'))).sha256 || !isDeepStrictEqual(artifact.source, host.source) || artifact.platform !== 'linux' || artifact.arch !== 'arm64' || !isDeepStrictEqual(artifact.upstreamPackage, { name: '@openai/codex-linux-arm64', version: companions.version }) - || artifact.build?.patchedTree !== host.build.patchedTree || artifact.build.profile !== 'release' || artifact.build.debug !== 'none' - || artifact.build.incremental !== false || artifact.build.locked !== true || !Number.isSafeInteger(artifact.build.jobs) || artifact.build.jobs < 1 - || artifact.build.nativeTarget !== 'aarch64-unknown-linux-gnu') throw new Error('Guest Codex evidence differs from the admitted release definition.'); + || 'build' in artifact || artifact.sha256 !== companions.files.find(file => file.path === 'bin/codex')?.sha256 + || !isDeepStrictEqual(artifact.distribution, { kind: 'official-npm', target: 'aarch64-unknown-linux-musl', integrity: companions.integrity })) throw new Error('Guest Codex evidence differs from the admitted release definition.'); const archive = await readJson('archive-inventory.json'); if (archive.format !== 'newc' || archive.sourceDateEpoch !== inputs.sourceDateEpoch || !Array.isArray(archive.entries) || archive.entries.length > 100_000 || !Number.isSafeInteger(archive.uncompressedBytes) || archive.uncompressedBytes > 1400 * 1024 ** 2 @@ -253,8 +256,7 @@ async function guestEvidence(directory, readInput, host, companions) { } for (const file of manifestFiles) { const member = members.find(entry => entry.path === `opt/codex-runtime/${file.path}`); const companion = companions.files.find(entry => entry.path === file.path); - const descriptor = { ...companions.descriptor, target: 'aarch64-unknown-linux-gnu' }; - const expected = file.path === 'bin/codex' ? artifact.sha256 : file.path === 'codex-package.json' ? digest(jsonBytes(descriptor)) : companion.sha256; + const expected = companion.sha256; if (file.sha256 !== expected || !hashPattern.test(file.sha256) || member.sha256 !== file.sha256 || member.mode !== (0o100000 | (companion.executable ? 0o755 : 0o444))) throw new Error(`Guest Codex member differs from the admitted package: ${file.path}.`); } @@ -263,7 +265,14 @@ async function guestEvidence(directory, readInput, host, companions) { } const infoPlist = version => `\n\nCFBundleIdentifierdev.rat-things.runtimeCFBundlePackageTypeBNDLCFBundleVersion${version}\n`; -const entitlementPlist = keys => `\n\n${keys.map(key => `${key}`).join('')}\n`; +function requireOfficialPayload(inventory, files) { + for (const file of files) { + const path = `Contents/Resources/codex/${file.path}`; + if (inventory.find(value => value.path === path)?.sha256 !== file.sha256) { + throw new Error(`Official Codex payload changed during native assembly: ${file.path}.`); + } + } +} export async function assembleNativeRelease(options, { repositoryRoot = root, run = async (command, args) => execute(command, args, { timeout: 180_000, maxBuffer: 4 * 1024 ** 2 }) } = {}) { const { hostArtifact, guestOutput, definitionRoot, output, identity } = options; @@ -277,12 +286,7 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru const builderSources = ['runtime/native/host-code-policy.json', 'scripts/build-native-release.mjs', 'scripts/codex-runtime-artifact.mjs', 'scripts/codex-runtime-targets.mjs', 'scripts/native-guest-inputs.mjs', 'scripts/javascript-notices.mjs', 'scripts/native-build-files.mjs', 'scripts/native-guest-archive.mjs']; for (const path of builderSources) await readInput(join(root, path), path); const originalHost = await readInput(join(hostArtifact, 'artifact.json'), 'host/artifact.json'); - const sourceDefinition = JSON.parse((await readInput(join(definitionRoot, 'source.json'), 'definition/source.json')).data); - await readInput(join(definitionRoot, 'artifact-policy.json'), 'definition/artifact-policy.json'); - for (const path of sourceDefinition.patches) { - if (!safePath(path)) throw new Error('Invalid trusted patch path.'); - await readInput(join(definitionRoot, path), `definition/${path}`); - } + await readInput(join(definitionRoot, 'source.json'), 'definition/source.json'); const companionInventoryPath = join(repositoryRoot, 'runtime/codex/companion-packages.json'); const companions = JSON.parse((await readInput(companionInventoryPath, 'runtime/codex/companion-packages.json')).data); await readInput(join(repositoryRoot, 'package-lock.json'), 'package-lock.json'); @@ -323,7 +327,7 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru }; try { await write(join(evidence, 'host-artifact.json'), originalHost.data); - for (const path of ['source.json', 'artifact-policy.json', ...sourceDefinition.patches]) { + for (const path of ['source.json']) { await checkedFile(join(definitionRoot, path), { expected: tracked.get(join(definitionRoot, path)), destination: join(evidence, 'definition', path) }); } for (const path of ['package-lock.json', 'runtime/codex/companion-packages.json']) { @@ -337,14 +341,13 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru } await write(join(evidence, 'native-inputs/main.swift'), helperSource.data); await write(join(evidence, 'native-inputs/entitlements.plist'), helperEntitlements.data); - await write(join(evidence, 'native-inputs/jit-entitlements.plist'), entitlementPlist(jitEntitlements)); - const machOs = []; const unsigned = []; + const machOs = []; const originalExecutables = []; for (const file of host.files) { const path = `Contents/Resources/codex/${file.path}`; expectedPaths.push(path); const copied = await checkedFile(file.source, { expected: file, destination: join(bundle, path), mode: file.mode, capture: executables.has(path) }); tracked.set(file.source, { bytes: copied.bytes, sha256: copied.sha256 }); - if (!executables.has(path)) staged.set(path, { bytes: copied.bytes, sha256: copied.sha256 }); - if (executables.has(path)) { machOs.push({ path, ...inspectMachO(copied.data, executables.get(path)) }); unsigned.push({ path, bytes: copied.bytes, sha256: copied.sha256 }); } + staged.set(path, { bytes: copied.bytes, sha256: copied.sha256 }); + if (executables.has(path)) { machOs.push({ path, ...inspectMachO(copied.data, executables.get(path)) }); originalExecutables.push({ path, bytes: copied.bytes, sha256: copied.sha256 }); } } for (const name of ['Image', 'worker-initramfs.gz']) { const path = `Contents/Resources/linux/${name}`; expectedPaths.push(path); @@ -362,13 +365,21 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru await mkdir(dirname(join(bundle, helperPath)), { recursive: true }); await run('/usr/bin/xcrun', compileArguments); await chmod(join(bundle, helperPath), 0o755); expectedPaths.push(helperPath); const helper = await checkedFile(join(bundle, helperPath), { capture: true }); - machOs.push({ path: helperPath, ...inspectMachO(helper.data) }); unsigned.push({ path: helperPath, bytes: helper.bytes, sha256: helper.sha256 }); + machOs.push({ path: helperPath, ...inspectMachO(helper.data) }); originalExecutables.push({ path: helperPath, bytes: helper.bytes, sha256: helper.sha256 }); const compatibility = nativeCompatibility(protocol, machOs); - const entitlements = { jit: join(evidence, 'native-inputs/jit-entitlements.plist'), virtualization: join(evidence, 'native-inputs/entitlements.plist') }; - const signatures = []; + const entitlements = { virtualization: join(evidence, 'native-inputs/entitlements.plist') }; + const signatures = []; const preservedSignatures = []; const mappings = []; for (const policy of nativeExecutablePolicy) { const filename = join(bundle, policy.path); const prior = await run('/usr/bin/codesign', ['--display', '--verbose=4', '--entitlements', ':-', filename]).then(result => ({ status: 0, ...result }), error => ({ status: error.code, stdout: error.stdout, stderr: error.stderr })); + const original = originalExecutables.find(file => file.path === policy.path); + if (policy.role !== 'vm-helper') { + const packaged = await checkedFile(filename, { expected: original }); + preservedSignatures.push({ path: policy.path, metadata: prior }); + mappings.push({ path: policy.path, kind: 'official-unmodified', input: original, packaged, + signature: { action: 'preserved', signerAdmission: 'pending' } }); + continue; + } const args = signingArguments(identity, policy, filename, entitlements); await run('/usr/bin/codesign', args); await run('/usr/bin/codesign', ['--verify', '--strict', '--all-architectures', '--test-requirement', `=${requirement(policy.identifier)}`, filename]); @@ -378,25 +389,24 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru const signedMetadata = await run('/usr/bin/codesign', ['--display', '--verbose=4', '--entitlements', ':-', filename]); staged.set(policy.path, { bytes: signed.bytes, sha256: signed.sha256 }); signatures.push({ path: policy.path, identifier: policy.identifier, prior, arguments: args, signedMetadata, signed: { bytes: signed.bytes, sha256: signed.sha256 } }); + mappings.push({ path: policy.path, kind: 'rat-things-signed', input: original, + packaged: { bytes: signed.bytes, sha256: signed.sha256 }, identifier: policy.identifier, entitlements: ['com.apple.security.virtualization'] }); } - const mappings = signatures.map(value => ({ path: value.path, unsigned: unsigned.find(file => file.path === value.path), signed: value.signed, - identifier: value.identifier, entitlements: nativeExecutablePolicy.find(policy => policy.path === value.path).entitlements === 'jit' ? jitEntitlements - : value.path === helperPath ? ['com.apple.security.virtualization'] : [] })); const blockers = [...new Set([...guest.build.outstandingDistributionInputs.filter(value => value !== 'signed runtime assembly and installed acceptance'), - 'Complete host and guest Codex linked dependency sources and companion notices', 'Installed runtime and application acceptance', 'Notarization and Gatekeeper distribution assessment'])]; + upstreamSignerBlocker, 'Complete host and guest Codex linked dependency sources and companion notices', 'Installed runtime and application acceptance', 'Notarization and Gatekeeper distribution assessment'])]; await resource('Contents/Info.plist', infoPlist('1')); for (const notice of notices) await resource(`Contents/Resources/notices/codex-${notice.name}`, notice.data); await resource('Contents/Resources/notices/rat-things-LICENSE', firstParty.data); - await resource('Contents/Resources/notices/NOTICE.txt', `Rat Things native runtime candidate\n\nThis bundle contains modified OpenAI Codex ${host.manifest.source.upstreamVersion}.\nThe source revision and ordered patches are recorded in provenance.json.\nOpenAI Codex LICENSE and NOTICE are included beside this file.\nThe guest retains its packaged license files inside the initramfs.\n\nThis signed candidate is not cleared for public distribution.\nOutstanding distribution inputs:\n${blockers.map(value => `- ${value}`).join('\n')}\n`); + await resource('Contents/Resources/notices/NOTICE.txt', `Rat Things native runtime candidate\n\nThis bundle preserves the official OpenAI Codex ${host.manifest.source.upstreamVersion} release bytes and original signatures.\nOnly the Rat Things VM helper and outer bundle are signed during assembly.\nOfficial input hashes, preserved signatures and helper signing are recorded in provenance.json.\nOpenAI Codex LICENSE and NOTICE are included beside this file.\nThe guest retains its packaged license files inside the initramfs.\n\nThis signed candidate is not cleared for public distribution.\nOutstanding distribution inputs:\n${blockers.map(value => `- ${value}`).join('\n')}\n`); await resource('Contents/Resources/provenance.json', jsonBytes({ schemaVersion: 1, distributionReady: false, reproducibility: 'not-established', - source: host.manifest.source, build: { host: host.manifest.build, guest: guest.artifact.build }, - unsignedInputs: { hostArtifactSha256: originalHost.sha256, guestArtifactSha256: guest.inputs.codexArtifactSha256, guestLockSha256: guest.build.lockSha256, + source: host.manifest.source, distribution: { host: host.manifest.distribution, guest: guest.artifact.distribution }, + inputs: { hostArtifactSha256: originalHost.sha256, guestArtifactSha256: guest.inputs.codexArtifactSha256, guestLockSha256: guest.build.lockSha256, guestInputsSha256: guest.build.inputsSha256, nativeSourceSha256: helperSource.sha256, nativeEntitlementsSha256: helperEntitlements.sha256, protocolSha256: protocolInput.sha256 }, definitionInputs: ordered(sources.filter(value => value.path.startsWith('definition/'))), assemblerSources: ordered(sources.filter(value => builderSources.includes(value.path))), helperBuild: { swift: toolchain.swift, sdkVersion: toolchain.sdkVersion, sdkBuild: toolchain.sdkBuild, deploymentTarget }, executables: mappings, deployment: machOs, outstandingDistributionInputs: blockers })); await resource('Contents/Resources/component-inventory.json', jsonBytes({ schemaVersion: 1, distributionReady: false, - codex: { source: host.manifest.source, patchedTree: host.manifest.build.patchedTree, license: 'Apache-2.0', notice: 'notices/codex-NOTICE', + codex: { source: host.manifest.source, distribution: 'official-npm', license: 'Apache-2.0', notice: 'notices/codex-NOTICE', host: { package: host.manifest.upstreamPackage, files: mappings.filter(value => value.path !== helperPath) }, guest: { package: guest.artifact.upstreamPackage, archive: 'linux/worker-initramfs.gz', files: guest.artifact.files.map(file => ({ ...file, path: `opt/codex-runtime/${file.path}` })) }, companions: Object.values(companions).map(value => ({ name: value.name, version: value.version, origin: value.resolved, integrity: value.integrity, @@ -408,21 +418,23 @@ export async function assembleNativeRelease(options, { repositoryRoot = root, ru notices: { index: 'opt/rat-things/notices/javascript/index.json', sha256: guest.inputs.javascriptNoticesSha256 } }, nativeHelper: { source: 'runtime/native/main.swift', sha256: helperSource.sha256, license: 'MIT', notice: 'notices/rat-things-LICENSE' }, outstandingDistributionInputs: blockers })); const beforeManifest = await nativeBundleInventory(bundle); + requireOfficialPayload(beforeManifest, host.files); if (staged.size !== expectedPaths.length || beforeManifest.some(file => !isDeepStrictEqual(staged.get(file.path), { bytes: file.bytes, sha256: file.sha256 }))) { throw new Error('Staged runtime payload changed before manifest creation.'); } - const manifest = nativeManifest(`${host.manifest.source.upstreamVersion}-native-${host.manifest.build.patchedTree.slice(0, 12)}`, compatibility, beforeManifest, expectedPaths); + const manifest = nativeManifest(`${host.manifest.source.upstreamVersion}-native-${host.manifest.sha256.slice(0, 12)}`, compatibility, beforeManifest, expectedPaths); await write(join(bundle, manifestPath), manifest.bytes); for (const [filename, expected] of tracked) await checkedFile(filename, { expected }); await validateCodexRuntimeArtifact(hostArtifact, admissionOptions); await write(join(evidence, 'input-inventory.json'), jsonBytes(ordered(sources))); - await write(join(evidence, 'signing.json'), jsonBytes({ identity, team: 'PB8NAVKU57', toolchain, compileArguments, signatures })); + await write(join(evidence, 'signing.json'), jsonBytes({ identity, team: 'PB8NAVKU57', toolchain, compileArguments, signatures, preservedSignatures })); await chmod(join(bundle, 'Contents/Info.plist'), 0o644); await run('/usr/bin/codesign', signingArguments(identity, { identifier: 'dev.rat-things.runtime' }, bundle, entitlements)); await chmod(join(bundle, 'Contents/Info.plist'), 0o444); await run('/usr/bin/codesign', ['--verify', '--deep', '--strict', '--all-architectures', '--test-requirement', `=${requirement('dev.rat-things.runtime')}`, bundle]); const finalInventory = await nativeBundleInventory(bundle); + requireOfficialPayload(finalInventory, host.files); if (!samePaths(finalInventory.map(file => file.path), [...expectedPaths, manifestPath, ...signaturePaths]) || !isDeepStrictEqual(finalInventory.filter(file => expectedPaths.includes(file.path)), beforeManifest) || (await checkedFile(join(bundle, manifestPath))).sha256 !== manifest.releaseId) throw new Error('Outer signing changed the payload or generated unexpected signature files.'); diff --git a/scripts/codex-runtime-artifact.mjs b/scripts/codex-runtime-artifact.mjs index 85bd96d..ec80ad7 100644 --- a/scripts/codex-runtime-artifact.mjs +++ b/scripts/codex-runtime-artifact.mjs @@ -17,20 +17,18 @@ const readJson = async path => JSON.parse(await readFile(path, 'utf8')); * @typedef {object} CodexArtifactOptions * @property {string} [expectedTarget] * @property {string} [definitionRoot] - * @property {string} [expectedPatchedTree] Trusted expected tree, never taken from the artifact. * @property {string} [packageLockPath] * @property {string} [companionInventoryPath] */ /** - * Validate an unsigned runtime against a trusted source definition and npm companion inventory. + * Admit only the unchanged official runtime and companions bound to the npm lock. * @param {string} artifactRoot * @param {CodexArtifactOptions} options */ export async function validateCodexRuntimeArtifact(artifactRoot, { expectedTarget, definitionRoot = definition, - expectedPatchedTree, packageLockPath = join(root, 'package-lock.json'), companionInventoryPath = join(definition, 'companion-packages.json'), } = {}) { @@ -39,24 +37,9 @@ export async function validateCodexRuntimeArtifact(artifactRoot, { const manifestPath = join(artifactRoot, 'artifact.json'); const manifest = JSON.parse((await readRegularFile(manifestPath)).toString('utf8')); const source = await readJson(join(definitionRoot, 'source.json')); - const patches = await Promise.all(source.patches.map(async name => { - if (!validPath(name)) throw new Error('Invalid Codex source patch path.'); - return { name, sha256: digest(await readFile(join(definitionRoot, name))) }; - })); - const sourceIdentity = { ...source, patches }; - if (!isDeepStrictEqual(manifest.source, sourceIdentity)) throw new Error('Codex runtime does not match the pinned source and ordered patches.'); - if (expectedPatchedTree === undefined) { - const policy = await readJson(join(definitionRoot, 'artifact-policy.json')); - if (policy.sourceSha256 !== digest(JSON.stringify(sourceIdentity))) throw new Error('Codex artifact policy does not match the source and ordered patches.'); - expectedPatchedTree = policy.patchedTree; - } - if (!/^[a-f0-9]{40}$/.test(expectedPatchedTree ?? '') - || manifest.platform !== target.platform || manifest.arch !== target.arch - || manifest.build?.nativeTarget !== expectedTarget || manifest.build.patchedTree !== expectedPatchedTree - || manifest.build.profile !== 'release' || manifest.build.debug !== 'none' - || manifest.build.incremental !== false || manifest.build.locked !== true - || !Number.isSafeInteger(manifest.build.jobs) || manifest.build.jobs < 1) { - throw new Error('Codex runtime build provenance is incomplete or incompatible.'); + if ('patches' in source || !isDeepStrictEqual(manifest.source, source)) throw new Error('Codex runtime does not match the pinned unmodified upstream source.'); + if (manifest.platform !== target.platform || manifest.arch !== target.arch || 'build' in manifest) { + throw new Error('Codex runtime distribution provenance is incompatible.'); } const lock = await readJson(packageLockPath); const packageLock = lock.packages?.[`node_modules/${target.packageName}`]; @@ -68,8 +51,10 @@ export async function validateCodexRuntimeArtifact(artifactRoot, { || !isDeepStrictEqual(manifest.upstreamPackage, { name: target.packageName, version: packageLock.version })) { throw new Error('Codex runtime companions do not match the pinned npm package.'); } - const expectedDescriptor = { ...companions.descriptor, target: expectedTarget }; - if (expectedDescriptor.layoutVersion !== 1 || expectedDescriptor.version !== source.upstreamVersion + const expectedDistribution = { kind: 'official-npm', target: target.vendorTarget, integrity: packageLock.integrity }; + if (!isDeepStrictEqual(manifest.distribution, expectedDistribution)) throw new Error('Codex runtime distribution provenance differs from the official package.'); + const expectedDescriptor = companions.descriptor; + if (expectedDescriptor.target !== target.vendorTarget || expectedDescriptor.layoutVersion !== 1 || expectedDescriptor.version !== source.upstreamVersion || expectedDescriptor.variant !== 'codex' || expectedDescriptor.entrypoint !== 'bin/codex' || expectedDescriptor.resourcesDir !== 'codex-resources' || expectedDescriptor.pathDir !== 'codex-path') { throw new Error('Pinned Codex package descriptor is incompatible.'); @@ -88,17 +73,14 @@ export async function validateCodexRuntimeArtifact(artifactRoot, { if (digest(bytes) !== file.sha256) throw new Error(`Codex runtime checksum mismatch: ${path}`); if (path === 'bin/codex' && file.sha256 !== manifest.sha256) throw new Error('Codex runtime entrypoint digest does not match its manifest.'); const companion = pinned.get(path); + if (path === 'bin/codex' && !isExecutable(bytes, target)) throw new Error(`Codex runtime executable is not ${target.platform} ${target.arch.toUpperCase()}: ${path}`); if (path === 'codex-package.json') { - if (!isDeepStrictEqual(JSON.parse(bytes.toString('utf8')), expectedDescriptor)) throw new Error('Codex runtime package descriptor does not match the compiled runtime.'); - const expectedHash = target.platform === 'linux' ? digest(JSON.stringify(expectedDescriptor, null, 2) + '\n') : companion.sha256; - if (file.sha256 !== expectedHash) throw new Error('Codex runtime package descriptor differs from the pinned package.'); - } else if (path !== 'bin/codex' && file.sha256 !== companion.sha256) { - throw new Error(`Codex runtime companion differs from the pinned npm package: ${path}`); + if (!isDeepStrictEqual(JSON.parse(bytes.toString('utf8')), expectedDescriptor)) throw new Error('Codex runtime package descriptor does not match the official runtime.'); + if (file.sha256 !== companion.sha256) throw new Error('Codex runtime package descriptor differs from the pinned package.'); + } else if (file.sha256 !== companion.sha256) { + throw new Error(`Codex runtime file differs from the official npm package: ${path}`); } if (path === 'bin/codex' || companion.executable) { - // Only the rebuilt entrypoint can differ from the trusted package bytes. - // Companions include shared libraries and data with executable file modes. - if (path === 'bin/codex' && !isExecutable(bytes, target)) throw new Error(`Codex runtime executable is not ${target.platform} ${target.arch.toUpperCase()}: ${path}`); if (!((await lstat(filename)).mode & 0o111)) throw new Error(`Codex runtime executable permission is missing: ${path}`); } files.push({ path, source: filename, sha256: file.sha256, mode: companion.executable ? 0o755 : 0o444 }); @@ -112,8 +94,8 @@ export async function validateCodexRuntimeArtifact(artifactRoot, { * @param {CodexArtifactOptions} options */ export async function codexRuntimeEntries(artifactRoot = process.env.CODEX_RUNTIME_ARTIFACT ?? join(root, '.runtime/codex/linux-arm64'), options = {}) { - const artifact = await validateCodexRuntimeArtifact(artifactRoot, { ...options, expectedTarget: 'aarch64-unknown-linux-gnu' }).catch(error => { - if (error.code === 'ENOENT' && error.path === join(artifactRoot, 'artifact.json')) throw new Error('Build the Linux ARM64 Codex runtime first; set CODEX_RUNTIME_ARTIFACT to its exported directory. See testing/README.md.'); + const artifact = await validateCodexRuntimeArtifact(artifactRoot, { ...options, expectedTarget: 'aarch64-unknown-linux-musl' }).catch(error => { + if (error.code === 'ENOENT' && error.path === join(artifactRoot, 'artifact.json')) throw new Error('Prepare the official Linux ARM64 Codex runtime first; set CODEX_RUNTIME_ARTIFACT to its exported directory. See testing/README.md.'); throw error; }); return [...artifact.files.map(file => ({ source: file.source, target: `codex-runtime/${file.path}`, mode: file.mode })), diff --git a/scripts/codex-runtime-targets.mjs b/scripts/codex-runtime-targets.mjs index cb4a8bc..1fe7106 100644 --- a/scripts/codex-runtime-targets.mjs +++ b/scripts/codex-runtime-targets.mjs @@ -4,11 +4,11 @@ export const codexRuntimeTargets = { vendorTarget: 'aarch64-apple-darwin', packageName: '@openai/codex-darwin-arm64', }, 'linux-arm64': { - platform: 'linux', arch: 'arm64', nativeTarget: 'aarch64-unknown-linux-gnu', + platform: 'linux', arch: 'arm64', nativeTarget: 'aarch64-unknown-linux-musl', vendorTarget: 'aarch64-unknown-linux-musl', packageName: '@openai/codex-linux-arm64', elfMachine: 183, }, 'linux-x64': { - platform: 'linux', arch: 'x64', nativeTarget: 'x86_64-unknown-linux-gnu', + platform: 'linux', arch: 'x64', nativeTarget: 'x86_64-unknown-linux-musl', vendorTarget: 'x86_64-unknown-linux-musl', packageName: '@openai/codex-linux-x64', elfMachine: 62, }, }; diff --git a/scripts/ensure-worker-runtime.mjs b/scripts/ensure-worker-runtime.mjs index 695c52e..7ab0d84 100644 --- a/scripts/ensure-worker-runtime.mjs +++ b/scripts/ensure-worker-runtime.mjs @@ -7,7 +7,7 @@ import { validateCodexRuntimeArtifact } from './codex-runtime-artifact.mjs'; * @param {{ root: string, artifact?: string | undefined, run: (name: string, args: string[]) => Promise, validate?: (path: string) => Promise }} options */ export async function ensureWorkerRuntime({ root, artifact, run, - validate = path => validateCodexRuntimeArtifact(path, { expectedTarget: 'aarch64-unknown-linux-gnu' }), + validate = path => validateCodexRuntimeArtifact(path, { expectedTarget: 'aarch64-unknown-linux-musl' }), }) { const existing = resolve(root, artifact ?? '.runtime/codex/linux-arm64'); try { await validate(existing); return existing; } diff --git a/src/adapters/codex-environment-files.ts b/src/adapters/codex-environment-files.ts index a769457..1b10063 100644 --- a/src/adapters/codex-environment-files.ts +++ b/src/adapters/codex-environment-files.ts @@ -5,6 +5,8 @@ import { CodexRpcClient } from './codex-rpc.js'; import environmentFileWorkerSource from './environment-file-worker-source.json' with { type: 'json' }; import { isolatedCodexArguments } from '../domain/local-codex-arguments.js'; import type { EnvironmentFileOperation } from '../core/environment-file-ports.js'; +import type { ManagedCodexPolicy } from '../domain/codex-managed-policy.js'; +import { verifyManagedCodexPolicy } from './codex-managed-policy.js'; export class EnvironmentFilesCleanupUnconfirmedError extends Error {} @@ -13,7 +15,7 @@ export async function codexEnvironmentFiles(options: { registryURL?: string; environmentId?: string; harnessKey?: string; workspace: string; operation: EnvironmentFileOperation | readonly EnvironmentFileOperation[]; binary?: string; signal?: AbortSignal; - managed?: { binaryArguments: string[] }; + managed?: { binaryArguments: string[]; policy: ManagedCodexPolicy }; environment?: Readonly; temporaryHomeParent?: string; identity?: { uid: number; gid: number }; @@ -33,6 +35,7 @@ export async function codexEnvironmentFiles(options: { }, ...(options.signal ? { signal: options.signal } : {}), ...(options.identity ? { identity: options.identity } : {}) }); try { await rpc.initialize(); + if (options.managed) await verifyManagedCodexPolicy({ call: rpc.call.bind(rpc), policy: options.managed.policy }); const started = await rpc.call('thread/start', { cwd: options.workspace, environments: [{ environmentId: remote ? 'remote' : 'local', cwd: options.workspace }], ephemeral: true, approvalPolicy: 'never', ...(options.managed ? { permissions: 'rat_managed' } : { sandbox: 'danger-full-access' }), selectedCapabilityRoots: [], diff --git a/src/adapters/codex-managed-policy.ts b/src/adapters/codex-managed-policy.ts new file mode 100644 index 0000000..79780c9 --- /dev/null +++ b/src/adapters/codex-managed-policy.ts @@ -0,0 +1,37 @@ +import { readdir } from 'node:fs/promises'; +import { dirname, isAbsolute, join } from 'node:path'; +import { managedCodexPolicyMatches, type ManagedCodexPolicy } from '../domain/codex-managed-policy.js'; + +type Call = (method: string, params: Record, timeoutMs?: number) => Promise; + +/** Check the running executor before any thread or tool can use its merged policy. */ +export async function verifyManagedCodexPolicy(options: { call: Call; policy: ManagedCodexPolicy }): Promise { + try { + const config = await options.call('config/read', { cwd: options.policy.workspace, includeLayers: true }); + const requirements = await options.call('configRequirements/read', {}); + if (!managedCodexPolicyMatches(config, requirements, options.policy) || !record(config) || !Array.isArray(config.layers)) throw new Error(); + const inspected = new Set(); + for (const layer of config.layers) { + if (!record(layer) || !record(layer.name) || !record(layer.config)) throw new Error(); + if (typeof layer.disabledReason === 'string' && layer.disabledReason.length > 0) continue; + if (layer.name.type === 'sessionFlags') { inspected.add('sessionFlags'); continue; } + // Other managed layers and project policy are not part of the host-owned envelope. + if (!['user', 'system'].includes(String(layer.name.type)) || typeof layer.name.file !== 'string' || !isAbsolute(layer.name.file)) throw new Error(); + if (layer.name.type === 'system' && Object.keys(layer.config).length) throw new Error(); + inspected.add(String(layer.name.type)); + // Native network_rule grants can widen the proxy without appearing in config/read. + // Refuse unfamiliar rule files instead of trying to emulate the upstream policy parser. + const directory = join(dirname(layer.name.file), 'rules'); + const entries = await readdir(directory).catch((error: unknown) => { + if (record(error) && error.code === 'ENOENT') return []; + throw error; + }); + if (entries.some(name => name.endsWith('.rules'))) throw new Error(); + } + if (!['sessionFlags', 'user', 'system'].every(source => inspected.has(source))) throw new Error(); + } catch { + throw new Error('Managed executor policy could not be verified. Refusing to expose execution tools.'); + } +} + +function record(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value); } diff --git a/src/adapters/codex-rpc.ts b/src/adapters/codex-rpc.ts index 36855ac..7b5c680 100644 --- a/src/adapters/codex-rpc.ts +++ b/src/adapters/codex-rpc.ts @@ -23,6 +23,7 @@ export class CodexRpcClient { private nextId = 0; private readonly waiting = new Map; stopStartupProbe?: () => void }>(); private closed = false; + private checkpointDiagnosticFailure = false; private closing: Promise | undefined; private readonly spawnedAt = performance.now(); private readonly processOrdinal = ++nextProcessOrdinal; @@ -39,6 +40,7 @@ export class CodexRpcClient { const category = /database is locked|database is busy|SQLITE_BUSY|SQLITE_LOCKED/i.test(line) ? 'sqlite_contention' : /disk I\/O error|SQLITE_IOERR/i.test(line) ? 'sqlite_io' : /pool timed out while waiting for an open connection/i.test(line) ? 'sqlite_pool_timeout' : undefined; + if (category === 'sqlite_io' || /failed to (?:flush|persist|shutdown (?:the )?thread store)|error flushing (?:rollout|thread)/i.test(line)) this.checkpointDiagnosticFailure = true; if (category && !reported.has(category)) { reported.add(category); console.error(JSON.stringify({ message: 'Native harness storage diagnostic', category })); @@ -48,8 +50,8 @@ export class CodexRpcClient { this.child.stdout.once('data', () => { this.firstOutputAt = performance.now(); }); this.reader.on('line', (line) => { let value: Record; - try { value = JSON.parse(line) as Record; } catch { return; } - if (!record(value)) return; + try { value = JSON.parse(line) as Record; } catch { this.checkpointDiagnosticFailure = true; return; } + if (!record(value)) { this.checkpointDiagnosticFailure = true; return; } if (typeof value.method === 'string') { const event: CodexRpcEvent = { method: value.method, params: record(value.params) ? value.params : {}, ...(typeof value.id === 'string' || typeof value.id === 'number' ? { requestId: value.id } : {}) }; try { options.onEvent?.(event); } catch { void this.close(); return; } @@ -82,9 +84,9 @@ export class CodexRpcClient { this.child.once('error', () => { console.error(JSON.stringify({ message: 'Native harness process failed to start' })); fail(); }); this.child.once('exit', (code, signal) => { if (!this.closed) console.error(JSON.stringify({ message: 'Native harness process exited unexpectedly', code, signal })); - errors.close(); fail(); }); + this.child.once('close', () => errors.close()); if (options.signal) { const abort = () => { void this.close(); }; options.signal.addEventListener('abort', abort, { once: true }); @@ -135,17 +137,18 @@ export class CodexRpcClient { if (this.child.exitCode === null && this.child.signalCode === null) { this.child.kill('SIGKILL'); await exited; } } - /** After every thread acknowledged persistence, require a clean process exit as well. */ + /** Ordinary EOF with drained protocol output; this is not a persistence acknowledgement. */ public async closeCheckpoint(): Promise { - if (this.closed) throw new Error('Native process closed before checkpoint acknowledgement'); + if (this.closed) throw new Error('Native process closed before checkpoint EOF'); this.closed = true; - const exited = once(this.child, 'exit'); + const exited = once(this.child, 'close'); this.child.stdin.end(); let timer: ReturnType | undefined; const timeout = new Promise((_resolve, reject) => { timer = setTimeout(() => reject(new Error('Native checkpoint exit timed out')), 30_000); }); try { const [code, signal] = await Promise.race([exited, timeout]); if (code !== 0 || signal) throw new Error('Native checkpoint exit was not clean'); + if (this.checkpointDiagnosticFailure) throw new Error('Native checkpoint observed a storage or protocol failure'); } catch (error) { if (this.child.exitCode === null && this.child.signalCode === null) { this.child.kill('SIGKILL'); await exited.catch(() => {}); } throw error; diff --git a/src/core/native-checkpoint-planning.ts b/src/core/native-checkpoint-planning.ts new file mode 100644 index 0000000..65a930f --- /dev/null +++ b/src/core/native-checkpoint-planning.ts @@ -0,0 +1,61 @@ +import { canonicalJson, sha256Hex } from '../domain/json.js'; +import { nativeThreadHistory, type NativeCheckpointManifest } from '../domain/native-checkpoint.js'; +import type { SessionRuntimeState } from './session-runtime-planning.js'; +import { projectSessionItems } from './session-run-projection.js'; + +/** Native disk data alone cannot certify that acknowledged public work survived. */ +export function planNativeCheckpoint(state: SessionRuntimeState, histories: unknown[]): NativeCheckpointManifest { + const expectedIds = new Set([state.rootThreadId, ...state.subagents.map(agent => agent.id), ...state.turns.map(turn => turn.threadId)]); + if (!state.turns.length || state.requiredActions.length || state.turns.some(binding => binding.turn.status !== 'completed')) throw new Error('Native checkpoint requires completed Session history'); + const threads = histories.map(nativeThreadHistory); + for (const thread of threads) { + const agent = state.subagents.find(agent => agent.id === thread.id); + const parent = agent?.parent_agent_id === state.agentId ? state.rootThreadId : agent?.parent_agent_id; + if (thread.id !== state.rootThreadId && (!agent || thread.parentThreadId !== parent)) throw new Error('Native checkpoint parent differs from the Session journal'); + } + if (threads.length !== expectedIds.size || new Set(threads.map(thread => thread.id)).size !== expectedIds.size || threads.some(thread => !expectedIds.has(String(thread.id)))) throw new Error('Native checkpoint thread identities differ from the Session journal'); + const agentIds = { [state.rootThreadId]: state.agentId, ...Object.fromEntries(state.subagents.map(agent => [agent.id, agent.id])) }; + for (const binding of state.turns) { + const thread = threads.find(thread => thread.id === binding.threadId)!; + const turn = (thread.turns as Array>).find(turn => turn.id === binding.nativeTurnId); + if (!turn) throw new Error('Native checkpoint is missing an acknowledged Session turn'); + const projected = projectSessionItems(binding.turn.id, (turn.items as unknown[]).map(item => ({ method: 'item/completed', params: { item } })), undefined, { includeUser: true, agentIds }); + let projectedIndex = 0; + for (const item of binding.items) { + if (item.type === 'agent_message') { + // Raw inter-agent payloads are omitted by public thread/read. They remain + // in the host journal; cold evidence does not claim hidden mailbox fidelity. + if (![state.agentId, ...expectedIds].includes(item.sender_agent_id) || ![state.agentId, ...expectedIds].includes(item.recipient_agent_id)) throw new Error('Native checkpoint has an unknown coordination recipient'); + continue; + } + if (['create_subagent_call', 'send_subagent_input_call', 'interrupt_subagent_call'].includes(item.type)) { + const call = item.id ? state.coordinationCalls?.[item.id] : undefined; + const activity = (turn.items as Array>).find(native => native.type === 'subAgentActivity' && native.id === item.id); + if (call && activity) { + const kind = item.type === 'create_subagent_call' ? 'started' : item.type === 'interrupt_subagent_call' ? 'interrupted' : 'interacted'; + if (call.threadId !== binding.threadId || call.turnId !== binding.nativeTurnId || call.recipients.length !== 1 || activity.agentThreadId !== call.recipients[0] || activity.kind !== kind) throw new Error('Native checkpoint coordination recipients differ from the Session journal'); + if (item.type === 'create_subagent_call' && ((item.model !== null && activity.model !== item.model) || (item.reasoning_effort !== null && activity.reasoningEffort !== item.reasoning_effort))) throw new Error('Native checkpoint coordination settings differ from the Session journal'); + continue; + } + } + // Legacy rollout hydration synthesizes display Item IDs, while preserving + // native Turn IDs and content. Paginated history retains its Item IDs. + const semantic = (value: unknown) => thread.historyMode === 'legacy' && typeof value === 'object' && value !== null ? Object.fromEntries(Object.entries(value).filter(([key]) => key !== 'id')) : value; + const index = projected.findIndex((native, index) => index >= projectedIndex && canonicalJson(semantic(native)) === canonicalJson(semantic(item))); + if (index < 0) throw new Error('Native checkpoint is missing acknowledged Session item content'); + projectedIndex = index + 1; + } + } + const ordered: Record[] = []; + const pending = [...threads]; + while (pending.length) { + const index = pending.findIndex(thread => thread.id === state.rootThreadId ? thread.parentThreadId === null || thread.parentThreadId === undefined : ordered.some(parent => parent.id === thread.parentThreadId)); + if (index < 0) throw new Error('Native checkpoint parent identities are incomplete'); + ordered.push(pending.splice(index, 1)[0]!); + } + return { rootThreadId: state.rootThreadId, hostJournalDigest: nativeHostJournalDigest(state), threads: ordered }; +} + +export function nativeHostJournalDigest(state: SessionRuntimeState): string { + return sha256Hex(canonicalJson({ rootThreadId: state.rootThreadId, turns: state.turns, subagents: state.subagents.map(agent => ({ id: agent.id, parent_agent_id: agent.parent_agent_id })), coordinationCalls: state.coordinationCalls ?? {} })); +} diff --git a/src/core/session-stream.ts b/src/core/session-stream.ts index b2f498a..bc08959 100644 --- a/src/core/session-stream.ts +++ b/src/core/session-stream.ts @@ -62,9 +62,10 @@ export function planSessionStream(previous: SessionStreamSnapshot | undefined, c }); } else if (output_index !== null && item.type !== 'message' && item.type !== 'function_call_output' && 'status' in item) { if (item.type === 'command_execution') { - const before = old?.type === 'command_execution' ? old.output ?? '' : ''; + // Native live output can miss an early chunk. Only the completed aggregate + // can produce an ordered append-only stream without replacing prior text. const output = item.output ?? ''; - if (output !== before && output.startsWith(before)) events.push({ type: 'agent.output.command_execution_output.delta', session_id, turn_id: item.turn_id, item_id: item.id, output_index, delta: output.slice(before.length) }); + if (output && itemFinished(item) && !itemFinished(old)) events.push({ type: 'agent.output.command_execution_output.delta', session_id, turn_id: item.turn_id, item_id: item.id, output_index, delta: output }); } if (item.type === 'reasoning') { item.summary.forEach((part, summary_index) => { diff --git a/src/domain/codex-managed-policy.ts b/src/domain/codex-managed-policy.ts new file mode 100644 index 0000000..a310dbc --- /dev/null +++ b/src/domain/codex-managed-policy.ts @@ -0,0 +1,52 @@ +import type { SessionLaunch } from './session-execution.js'; + +export interface ManagedCodexPolicy { + workspace: string; + network: Extract['network']; + credentialProxy: boolean; +} + +/** Public network intent is enforced by the proxy; its empty allowlist denies all egress. */ +export function managedCodexConfiguration(policy: ManagedCodexPolicy) { + const proxy = policy.network.access !== 'enabled'; + const domains = Object.fromEntries((policy.network.access === 'restricted' ? policy.network.allowed_domains : []).map(host => [host.toLowerCase(), 'allow'])); + return { + approval_policy: 'never', default_permissions: 'rat_managed', + features: { network_proxy: { enabled: proxy, credential_broker: false } }, + projects: { [policy.workspace]: { trust_level: 'untrusted' } }, + permissions: { rat_managed: { + filesystem: { ':root': 'read', [policy.workspace]: 'write' }, + network: { enabled: true, mode: 'full', domains, unix_sockets: {}, + proxy_url: 'http://127.0.0.1:0', socks_url: 'http://127.0.0.1:0', + enable_socks5: true, enable_socks5_udp: false, allow_local_binding: false, + allow_upstream_proxy: policy.credentialProxy && policy.network.access !== 'disabled', + dangerously_allow_non_loopback_proxy: false, dangerously_allow_all_unix_sockets: false }, + } }, + }; +} + +/** Validate the merged public configuration, not merely the flags we requested. */ +export function managedCodexPolicyMatches(value: unknown, requirements: unknown, policy: ManagedCodexPolicy): boolean { + if (!record(value) || !record(value.config) || !record(requirements) || requirements.requirements !== null) return false; + const config = value.config; + const expected = managedCodexConfiguration(policy); + return config.approval_policy === expected.approval_policy + && config.default_permissions === expected.default_permissions + && record(config.permissions) && equivalent(config.permissions.rat_managed, expected.permissions.rat_managed) + && record(config.features) && equivalent(config.features.network_proxy, expected.features.network_proxy) + && equivalent(config.projects, expected.projects); +} + +function equivalent(actual: unknown, expected: unknown): boolean { + return JSON.stringify(canonical(actual)) === JSON.stringify(canonical(expected)); +} + +// The public config reader serializes absent profile fields as null. Null adds no grant. +function canonical(value: unknown): unknown { + if (Array.isArray(value)) return value.map(canonical); + if (record(value)) return Object.fromEntries(Object.entries(value).filter(([, child]) => child !== null) + .sort(([left], [right]) => left.localeCompare(right)).map(([key, child]) => [key, canonical(child)])); + return value; +} + +function record(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value); } diff --git a/src/domain/native-checkpoint.ts b/src/domain/native-checkpoint.ts new file mode 100644 index 0000000..6e9d7f3 --- /dev/null +++ b/src/domain/native-checkpoint.ts @@ -0,0 +1,50 @@ +import { canonicalJson, sha256Hex } from './json.js'; + +/** Evidence of an observed cold continuation, never an upstream flush acknowledgement. */ +export interface NativeCheckpointEvidence { + kind: 'codex-cold-native'; + threadIds: string[]; + historyDigest: string; + /** Separately persisted public items, including coordination payloads absent from native read. */ + hostJournalDigest: string; + historyModes: Array<'legacy' | 'paginated'>; +} +export interface NativeCheckpointManifest { + rootThreadId: string; + hostJournalDigest: string; + /** Parent-before-child order. Runtime-only fields are excluded explicitly below. */ + threads: Record[]; +} + +export function nativeThreadHistory(value: unknown): Record { + if (!record(value) || typeof value.id !== 'string' || !value.id || value.ephemeral !== false + || !['legacy', 'paginated'].includes(String(value.historyMode)) || !Array.isArray(value.turns) + || !value.turns.length || value.turns.length > 10_000) throw new Error('Native checkpoint history is unavailable or unsupported'); + const ids = new Set(); + for (const turn of value.turns) { + if (!record(turn) || typeof turn.id !== 'string' || !turn.id || ids.has(turn.id) + || turn.status !== 'completed' || !Array.isArray(turn.items)) throw new Error('Native checkpoint requires complete unique successful turns'); + ids.add(turn.id); + } + if (JSON.stringify(value).length > 32 * 1024 * 1024) throw new Error('Native checkpoint history exceeds its bound'); + // sessionId depends on whether the tree is loaded. Callers validate it separately; + // updatedAt/status/environments/canAcceptDirectInput describe the current process. + const fields = ['id', 'parentThreadId', 'forkedFromId', 'ephemeral', 'historyMode', 'modelProvider', 'model', + 'reasoningEffort', 'createdAt', 'cwd', 'cliVersion', 'source', 'agentNickname', 'agentRole', 'name', 'turns']; + return Object.fromEntries(fields.filter(key => value[key] !== undefined).map(key => [key, structuredClone(value[key])])); +} + +export function assertNativeHistory(expected: Record, actual: unknown, sessionId: string): void { + if (!record(actual) || actual.sessionId !== sessionId || canonicalJson(nativeThreadHistory(actual)) !== canonicalJson(expected)) { + throw new Error('Cold native history differs from the completed Session manifest'); + } +} + +export function nativeCheckpointEvidence(manifest: NativeCheckpointManifest): NativeCheckpointEvidence { + return { kind: 'codex-cold-native', threadIds: manifest.threads.map(thread => thread.id as string), + historyDigest: sha256Hex(canonicalJson(manifest.threads)), hostJournalDigest: manifest.hostJournalDigest, historyModes: [...new Set(manifest.threads.map(thread => thread.historyMode as 'legacy' | 'paginated'))] }; +} +export function sameNativeThreadIds(left: string[], right: string[]): boolean { + return left.length === right.length && new Set(left).size === left.length && new Set(right).size === right.length && left.every(id => right.includes(id)); +} +function record(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value); } diff --git a/src/domain/session-errors.ts b/src/domain/session-errors.ts index 72d0c62..dd6415c 100644 --- a/src/domain/session-errors.ts +++ b/src/domain/session-errors.ts @@ -22,32 +22,40 @@ const messages: Record = { }; const nativeCodes: Record = { contextWindowExceeded: 'context_length_exceeded', sessionBudgetExceeded: 'session_budget_exceeded', - usageLimitExceeded: 'usage_limit_exceeded', creditBalanceExhausted: 'credit_balance_exhausted', - rateLimitExceeded: 'rate_limit_exceeded', serverOverloaded: 'server_overloaded', - requestTimeout: 'request_timeout', + usageLimitExceeded: 'usage_limit_exceeded', + rateLimitExceeded: 'rate_limit_exceeded', serverOverloaded: 'server_overloaded', flexUnavailable: 'server_overloaded', cyberPolicy: 'cyber_policy', misalignmentPolicyViolation: 'cyber_policy', internalServerError: 'server_error', unauthorized: 'authentication_error', badRequest: 'invalid_request', - sandboxError: 'sandbox_error', executorVersionIncompatible: 'executor_version_incompatible', + sandboxError: 'sandbox_error', activeTurnNotSteerable: 'active_turn_not_steerable', }; -/** Preserve typed failures without exposing provider bodies, headers or host diagnostics. */ +/** Preserve official typed failures without inferring precision from private diagnostics. */ export function sessionTurnError(value: unknown, previous?: TurnError | null): TurnError { const error = record(value) ? value : {}; const info = error.codexErrorInfo; - const variant = typeof info === 'string' ? info : record(info) ? Object.keys(info)[0] : undefined; + const variant = typeof info === 'string' ? info : record(info) && Object.keys(info).length === 1 ? Object.keys(info)[0] : undefined; const details = record(info) && variant && record(info[variant]) ? info[variant] : undefined; const status = details?.httpStatusCode; const publicCode = typeof error.code === 'string' && Object.hasOwn(messages, error.code) ? error.code as TurnError['code'] : undefined; const nativeCode = variant && Object.hasOwn(nativeCodes, variant) ? nativeCodes[variant] : undefined; const transportCode = variant && ['httpConnectionFailed', 'responseStreamConnectionFailed', 'responseStreamDisconnected', 'responseTooManyFailedAttempts'].includes(variant) - ? status === 401 || status === 403 ? 'authentication_error' : status === 404 ? 'resource_not_found' - : status === 408 || status === 504 ? 'request_timeout' : status === 429 ? 'rate_limit_exceeded' - : status === 503 ? 'server_overloaded' : typeof status === 'number' && status >= 500 ? 'server_error' - : typeof status === 'number' && status >= 400 ? 'invalid_request' : 'connection_failed' + ? nativeHttpError(status) : undefined; - const code = publicCode ?? nativeCode ?? transportCode; - return code ? { code, message: messages[code] } : previous ?? { code: 'internal_error', message: messages.internal_error }; + const code = publicCode ?? nativeCode ?? transportCode ?? previous?.code ?? 'internal_error'; + return { code, message: messages[code] }; +} + +function nativeHttpError(status: unknown): TurnError['code'] { + if (typeof status !== 'number' || !Number.isInteger(status) || status < 400 || status > 599) return 'connection_failed'; + if (status === 401 || status === 403) return 'authentication_error'; + // Payment Required cannot distinguish credits, billing setup or another policy. + if (status === 402) return 'internal_error'; + if (status === 404) return 'resource_not_found'; + if (status === 408 || status === 504) return 'request_timeout'; + if (status === 429) return 'rate_limit_exceeded'; + if (status === 503) return 'server_overloaded'; + return status >= 500 ? 'server_error' : 'invalid_request'; } function record(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value); } diff --git a/src/domain/session-model-validation.ts b/src/domain/session-model-validation.ts index 351994c..edef018 100644 --- a/src/domain/session-model-validation.ts +++ b/src/domain/session-model-validation.ts @@ -5,6 +5,36 @@ import capabilities from '../../runtime/codex/model-capabilities.json' with { ty /** Provider aliases do not change the capability envelope of a known model. */ export function canonicalModelName(model: string): string { return model.replace(/^openai\./, ''); } +export type NativeServiceTier = 'default' | 'priority' | 'flex'; + +/** An explicit standard tier clears a prior per-thread tier in the official protocol. */ +export function nativeServiceTier(tier: string | undefined): NativeServiceTier { + if (tier === undefined || tier === 'auto' || tier === 'default') return 'default'; + if (tier === 'fast' || tier === 'priority') return 'priority'; + if (tier === 'flex') return 'flex'; + return invalid('The selected service tier is not supported by Codex', 'agent.service_tier'); +} + +/** Admit explicit tiers using the running provider's model/list, never another provider's catalog. */ +export function admitNativeServiceTier(tier: string | undefined, capability: { + model: string | undefined; + provider: string; + models: unknown; +}): NativeServiceTier { + const resolved = nativeServiceTier(tier); + if (resolved === 'default') return resolved; + const model = typeof capability.model === 'string' && capability.model.length > 0 && Array.isArray(capability.models) ? capability.models.find((entry: unknown) => record(entry) + && (entry.model === capability.model || entry.id === capability.model)) : undefined; + if (!record(model) || !Array.isArray(model.serviceTiers)) { + return invalid('The selected model has no verified service-tier capabilities', 'agent.service_tier'); + } + // Stock Codex accepts flex for catalog models on Responses providers. Bedrock + // additionally requires the tier to be advertised by its provider catalog. + if (resolved === 'flex' && capability.provider !== 'amazon-bedrock') return resolved; + if (model.serviceTiers.some((entry: unknown) => record(entry) && entry.id === resolved)) return resolved; + return invalid('The selected model and provider do not support this service tier', 'agent.service_tier'); +} + export function validateSessionModelSettings(agent: AgentSession['agent']): void { const models: Record = capabilities.models; const model = models[canonicalModelName(agent.model)]; @@ -13,3 +43,5 @@ export function validateSessionModelSettings(agent: AgentSession['agent']): void invalid('The selected model does not support the resulting reasoning effort', 'agent.reasoning.effort'); } } + +function record(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value); } diff --git a/src/domain/workspace-checkpoint.ts b/src/domain/workspace-checkpoint.ts index 7830443..4609807 100644 --- a/src/domain/workspace-checkpoint.ts +++ b/src/domain/workspace-checkpoint.ts @@ -1,3 +1,4 @@ +import type { NativeCheckpointEvidence } from './native-checkpoint.js'; import type { SessionLaunch } from './session-execution.js'; import { canonicalJson, sha256Hex } from './json.js'; @@ -8,6 +9,7 @@ export interface WorkspaceCompatibility { sandboxId: string; setupDigest: string export interface WorkspaceCheckpoint extends WorkspaceCompatibility { id: string; piContextId?: string; + nativeDurability?: NativeCheckpointEvidence; source: WorkspaceExecution; rootThreadId: string; lastRootTurnId: string | null; diff --git a/src/runner/codex-app-server.ts b/src/runner/codex-app-server.ts index e6a67c4..f9c85a4 100644 --- a/src/runner/codex-app-server.ts +++ b/src/runner/codex-app-server.ts @@ -9,6 +9,8 @@ import type { SandboxMode } from '../domain/contracts.js'; import { emitMetric } from '../core/metrics.js'; import type { AgentSessionInputMessageParam, AgentSessionItem } from '../domain/agents-api.js'; import { projectSessionItems } from '../core/session-run-projection.js'; +import type { ManagedCodexPolicy } from '../domain/codex-managed-policy.js'; +import { verifyManagedCodexPolicy } from '../adapters/codex-managed-policy.js'; const CODEX_INVALID_REQUEST = -32600; const MISSING_ROLLOUT_MESSAGE = 'no rollout found for thread id '; @@ -59,6 +61,7 @@ export interface CodexAppServerRequest { prompt: string; sandbox: SandboxMode; permissions?: string; + managedPolicy?: ManagedCodexPolicy; persistent: boolean; modelProvider: string; model?: string; @@ -334,11 +337,14 @@ export async function runCodexAppServer( version: process.env.npm_package_version ?? '0.1.0', }, capabilities: { - experimentalApi: Boolean(request.captureTraces || request.sessionConfig || request.dynamicTools?.length), + experimentalApi: Boolean(request.managedPolicy || request.captureTraces || request.sessionConfig || request.dynamicTools?.length), requestAttestation: false, }, }); notify('initialized'); + if (request.permissions === 'rat_managed' && !request.managedPolicy) throw new Error('Managed executor policy intent is missing'); + if (request.managedPolicy && request.permissions !== 'rat_managed') throw new Error('Managed executor permission profile is not selected'); + if (request.managedPolicy) await verifyManagedCodexPolicy({ call, policy: request.managedPolicy }); const skillInputs = request.skills?.length ? await resolveSkillInputs(call, request.workspace, request.skills) @@ -350,7 +356,7 @@ export async function runCodexAppServer( // Never ask for a mid-Run human authorization decision. approvalPolicy: 'never', approvalsReviewer: 'user', - sandbox: request.sandbox, + ...(request.permissions ? { permissions: request.permissions } : { sandbox: request.sandbox }), modelProvider: request.modelProvider, ...(request.model ? { model: request.model } : {}), ...(request.personality ? { personality: request.personality } : {}), @@ -416,7 +422,7 @@ export async function runCodexAppServer( cwd: executionWorkspace, approvalPolicy: 'never', approvalsReviewer: 'user', - sandboxPolicy: sandboxPolicyFor(request.sandbox, executionWorkspace, request.networkAccess), + ...(request.permissions ? { permissions: request.permissions } : { sandboxPolicy: sandboxPolicyFor(request.sandbox, executionWorkspace, request.networkAccess) }), ...(request.model ? { model: request.model } : {}), ...(request.reasoningEffort ? { effort: request.reasoningEffort } : {}), ...(request.reasoningSummary ? { summary: request.reasoningSummary } : {}), @@ -515,7 +521,7 @@ function appServerConfig(request: CodexAppServerRequest): Record; + close(): Promise; +} + +/** Reject ambient effects rather than interpreting arbitrary configuration as safe. */ +export function assertCheckpointStartupSafe(value: unknown, sessionConfig: unknown): void { + if (!record(value) || !record(value.config)) throw new Error('Native checkpoint configuration is unavailable'); + for (const config of [value.config, sessionConfig ?? {}]) { + if (!record(config)) throw new Error('Native checkpoint configuration is unsupported'); + for (const key of ['hooks', 'mcp_servers', 'plugins', 'notify', 'apps', 'browser_use', 'computer_use', 'desktop']) { + const item = config[key]; + if (item !== undefined && item !== null && !(record(item) && Object.keys(item).length === 0) && !(Array.isArray(item) && item.length === 0)) throw new Error('Native checkpoint does not support active startup integrations'); + } + for (const key of ['experimental_thread_store', 'experimental_thread_store_endpoint', 'sqlite_home']) { + if (config[key] !== undefined && config[key] !== null) throw new Error('Native checkpoint storage configuration is unsupported'); + } + } +} + +/** Only the dedicated Linux worker may stop this UID and bind exact native paths. */ +export async function prepareCodexColdVerification(options: { request: CodexAppServerRequest; stateRoot: string; manifest: NativeCheckpointManifest }): Promise { + const { request, stateRoot, manifest } = options; + if (manifest.threads.some(thread => thread.cwd !== '/workspace' || typeof thread.modelProvider !== 'string' || !/^[a-zA-Z0-9_-]{1,100}$/.test(thread.modelProvider))) throw new Error('Cold native checkpoint thread paths or providers are unsupported'); + if (manifest.threads.some(thread => ['amazon-bedrock', 'amazon-bedrock-runtime', 'ollama', 'lmstudio'].includes(String(thread.modelProvider)))) throw new Error('Cold native checkpoint provider is not yet supported'); + const uid = request.identity?.uid; + const gid = request.identity?.gid; + const home = request.environment.CODEX_HOME; + const sqlite = request.environment.CODEX_SQLITE_HOME; + if (process.platform !== 'linux' || process.getuid?.() !== 0 || !Number.isSafeInteger(uid) || !Number.isSafeInteger(gid) || !uid || !gid + || !request.managedPolicy || request.executionWorkspace !== '/workspace' || !home || !within(stateRoot, home) + || !within(stateRoot, request.workspace) || (sqlite && !within(home, sqlite)) || !isAbsolute(request.binary)) throw new Error('Cold native checkpoint requires an isolated Linux guest with durable native storage'); + for (const path of [stateRoot, home, request.workspace]) if (await realpath(path) !== resolve(path)) throw new Error('Cold native checkpoint paths must not be symbolic links'); + const identity = { uid: uid!, gid: gid! }; + const binary = await realpath(request.binary); + const bwrap = resolve(dirname(binary), '../codex-resources/bwrap'); + await access(bwrap, constants.X_OK); + const directory = await mkdtemp(join(tmpdir(), 'rat-cold-native-')); + // Root owns every staging name. A live agent may traverse the preflight + // directories but cannot replace them or plant a candidate symlink. + await chmod(directory, 0o711); + const candidate = join(directory, 'candidate'); + const disposable = join(directory, 'verify'); + let closed = false; + let attempted = false; + let rpc: CodexRpcClient | undefined; + const close = async () => { + if (closed) return; + closed = true; + await rpc?.close(); + // The UID belongs exclusively to this stopped worker; this also reaps any + // verifier descendants after a failed protocol request or a clean EOF. + if (attempted) await stopCheckpointWriters(identity.uid); + await rm(directory, { recursive: true, force: true }); + }; + try { + await mkdir(disposable, { mode: 0o711 }); + await ownedDirectory(join(disposable, 'home'), identity); + await ownedDirectory(join(disposable, 'workspace'), identity); + const args = namespaceArguments({ binary, home, sqlite, workspace: request.workspace, disposable, identity }); + // Check namespace support before sealing durable authority or stopping Codex. + await checkedProcess(bwrap, [...args, '--', '/usr/bin/true'], identity); + return { + close, + verify: async manifest => { + if (closed || attempted) throw new Error('Cold native verifier is unavailable'); + attempted = true; + const custodian = { uid: 0, gid: 0 }; + await ownedDirectory(candidate, custodian); + await ownedDirectory(join(candidate, 'home'), custodian); + await ownedDirectory(join(candidate, 'workspace'), custodian); + await copyPersistence(home, join(candidate, 'home'), custodian); + await copyTree(request.workspace, join(candidate, 'workspace'), custodian); + const candidateDigest = await treeDigest(candidate); + await rm(disposable, { recursive: true, force: true }); + await copyTree(candidate, disposable, identity); + await chown(disposable, 0, 0); await chmod(disposable, 0o711); + // Never copy auth/config/rules/plugins from CODEX_HOME. This complete + // replacement configuration disables integrations before process startup. + await rm(join(disposable, 'workspace', '.codex'), { recursive: true, force: true }); + await writeFile(join(disposable, 'home', 'config.toml'), verifierConfiguration(manifest), { mode: 0o600 }); + await chown(join(disposable, 'home', 'config.toml'), identity.uid, identity.gid); + let activity = false; + rpc = new CodexRpcClient({ binary: bwrap, binaryArguments: [...args, '--', binary, 'app-server'], cwd: '/', environment: {}, identity, + onEvent: event => { + if (event.requestId !== undefined || /^(turn\/(started|completed)|item\/|error$)/.test(event.method)) activity = true; + }, onServerRequest: async () => { activity = true; throw new Error('Cold native verifier cannot perform tools'); }, + }); + try { + await rpc.initialize(); + for (const expected of manifest.threads) { + const result = await rpc.call('thread/read', { threadId: expected.id, includeTurns: true }); + assertNativeHistory(expected, record(result) ? result.thread : undefined, String(expected.id)); + } + for (const expected of manifest.threads) { + await rpc.call('thread/resume', { threadId: expected.id, + ...(expected.id === manifest.rootThreadId ? { cwd: '/workspace', approvalPolicy: 'never', sandbox: 'read-only', + config: { 'features.goals': false, 'features.hooks': false, 'features.plugins': false, 'features.apps': false, 'mcp_servers': {} } } : {}) }); + const result = await rpc.call('thread/read', { threadId: expected.id, includeTurns: true }); + assertNativeHistory(expected, record(result) ? result.thread : undefined, manifest.rootThreadId); + } + await rpc.closeCheckpoint(); + await stopCheckpointWriters(identity.uid); + if (activity) throw new Error('Cold native verification attempted activity'); + if (await treeDigest(candidate) !== candidateDigest) throw new Error('Cold native candidate changed during verification'); + return nativeCheckpointEvidence(manifest); + } finally { await rpc.close(); await stopCheckpointWriters(identity.uid); } + }, + }; + } catch (error) { await close(); throw error; } +} + +function namespaceArguments(options: { binary: string; home: string; sqlite: string | undefined; workspace: string; disposable: string; identity: { uid: number; gid: number } }): string[] { + const { binary, home, sqlite, workspace, disposable } = options; + return ['--unshare-all', '--die-with-parent', '--new-session', '--cap-drop', 'ALL', '--clearenv', + '--ro-bind', '/usr', '/usr', '--symlink', 'usr/bin', '/bin', '--symlink', 'usr/lib', '/lib', '--symlink', 'usr/lib64', '/lib64', + '--proc', '/proc', '--dev', '/dev', '--tmpfs', '/tmp', '--dir', '/home/agent', + '--ro-bind', binary, binary, + '--bind', join(disposable, 'home'), home, + '--ro-bind', join(disposable, 'workspace'), workspace, + ...(workspace === '/workspace' ? [] : ['--ro-bind', join(disposable, 'workspace'), '/workspace']), + '--setenv', 'PATH', '/usr/bin:/bin', '--setenv', 'HOME', '/home/agent', '--setenv', 'CODEX_HOME', home, + ...(sqlite ? ['--setenv', 'CODEX_SQLITE_HOME', sqlite] : []), + '--setenv', 'AWS_EC2_METADATA_DISABLED', 'true', '--setenv', 'AWS_CONFIG_FILE', '/dev/null', '--setenv', 'AWS_SHARED_CREDENTIALS_FILE', '/dev/null', + '--setenv', 'LOG_FORMAT', 'json', '--setenv', 'RUST_LOG', 'warn', '--chdir', '/workspace']; +} +function verifierConfiguration(manifest: NativeCheckpointManifest): string { + // Keep built-in OpenAI intact. Its prewarm has no credentials and can only + // reach a closed loopback address in the private network namespace. + const providers = [...new Set(manifest.threads.map(thread => String(thread.modelProvider)))].filter(provider => provider !== 'openai').map(provider => `\n[model_providers.${JSON.stringify(provider)}]\nname = "Offline checkpoint verifier"\nbase_url = "http://127.0.0.1:1"\nwire_api = "responses"\nrequires_openai_auth = false\nsupports_websockets = false\nrequest_max_retries = 0\nstream_max_retries = 0\n`).join(''); + return 'openai_base_url = "http://127.0.0.1:1"\napproval_policy = "never"\nsandbox_mode = "read-only"\ncli_auth_credentials_store = "file"\nnotify = []\nweb_search = "disabled"\n[features]\nplugins = false\napps = false\nhooks = false\ngoals = false\nmulti_agent = true\nmulti_agent_v2 = true\nresponses_websockets = false\nresponses_websockets_v2 = false\ncode_mode_prewarm = false\nshell_snapshot = false\nshell_snapshot_v2 = false\n' + providers; +} +function within(root: string, path: string): boolean { const part = relative(root, path); return isAbsolute(root) && isAbsolute(path) && part !== '' && part !== '..' && !part.startsWith('../') && !isAbsolute(part); } +async function ownedDirectory(path: string, identity: { uid: number; gid: number }): Promise { + try { await mkdir(path, { mode: 0o700 }); } catch (error) { if (!record(error) || error.code !== 'EEXIST') throw error; } + const stat = await lstat(path); + if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error('Cold native destination must be a real directory'); + await chmod(path, 0o700); await chown(path, identity.uid, identity.gid); +} +async function copyPersistence(source: string, destination: string, identity: { uid: number; gid: number }): Promise { + for (const name of await readdir(source)) { + if (['sessions', 'archived_sessions', 'sqlite'].includes(name) || /^(state|thread_history|goals|memories|queue)_\d+\.sqlite(?:-wal|-shm)?$/.test(name)) { + await copyTree(join(source, name), join(destination, name), identity); + } + } +} +async function copyTree(source: string, destination: string, identity: { uid: number; gid: number }, root = source, budget = { entries: 0, bytes: 0 }): Promise { + const stat = await lstat(source); + if (++budget.entries > 100_000 || (budget.bytes += stat.isFile() ? stat.size : 0) > 512 * 1024 * 1024) throw new Error('Cold native candidate exceeds copy bounds'); + if (stat.isDirectory()) { + await ownedDirectory(destination, identity); + for (const name of await readdir(source)) await copyTree(join(source, name), join(destination, name), identity, root, budget); + } else if (stat.isFile()) { + await copyFile(source, destination, constants.COPYFILE_EXCL); await chmod(destination, 0o600); await chown(destination, identity.uid, identity.gid); + } else if (stat.isSymbolicLink()) { + const target = await readlink(source); + if (!within(root, resolve(dirname(source), target))) throw new Error('Cold native candidate has an external symbolic link'); + await symlink(target, destination); + } else throw new Error('Cold native candidate contains a non-regular file'); +} +async function treeDigest(root: string): Promise { + const digest = createHash('sha256'); + const visit = async (path: string): Promise => { + const stat = await lstat(path); digest.update(JSON.stringify([relative(root, path), stat.isFile() ? stat.size : null])); + if (stat.isDirectory()) { digest.update('directory'); for (const name of (await readdir(path)).sort()) await visit(join(path, name)); } + else if (stat.isFile()) { digest.update('file'); digest.update(await readFile(path)); } + else if (stat.isSymbolicLink()) { digest.update('link'); digest.update(await readlink(path)); } + else throw new Error('Cold native candidate contains a non-regular file'); + }; + await visit(root); return digest.digest('hex'); +} +async function checkedProcess(binary: string, args: string[], identity: { uid: number; gid: number }): Promise { + await new Promise((resolve, reject) => { + const child = spawn(binary, args, { cwd: '/', env: {}, ...identity, stdio: 'ignore' }); + const timer = setTimeout(() => { child.kill('SIGKILL'); }, 10_000); + child.once('error', () => { clearTimeout(timer); reject(new Error('Cold native namespace could not start')); }); + child.once('close', code => { clearTimeout(timer); code === 0 ? resolve() : reject(new Error('Cold native namespace is unavailable')); }); + }); +} +function record(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value); } diff --git a/src/runner/hosted-environment-planning.ts b/src/runner/hosted-environment-planning.ts index 82084ab..e7c4db7 100644 --- a/src/runner/hosted-environment-planning.ts +++ b/src/runner/hosted-environment-planning.ts @@ -1,13 +1,16 @@ import type { SessionLaunch } from '../domain/session-execution.js'; +import { managedCodexConfiguration } from '../domain/codex-managed-policy.js'; /** The hosted discriminator is the upstream wire name; execution remains in an isolated AWS worker. */ export function hostedCodexArguments(base: string[] | undefined, network: Extract['network'], credentialProxy = false, workspace = '/workspace'): string[] { const arguments_ = base ?? ['app-server']; - const domains = network.allowed_domains.map((host) => `${JSON.stringify(host)} = "allow"`).join(', '); - const proxy = network.access === 'restricted'; - return ['-c', 'default_permissions = "rat_managed"', '-c', `features.network_proxy = ${proxy}`, '-c', - `permissions.rat_managed = { filesystem = { ":root" = "read", ${JSON.stringify(workspace)} = "write" }, network = { enabled = ${network.access !== 'disabled'}, mode = "full", domains = { ${domains} }, proxy_url = "http://127.0.0.1:0", socks_url = "http://127.0.0.1:0", enable_socks5 = true, enable_socks5_udp = false, allow_local_binding = false, allow_upstream_proxy = ${credentialProxy} } }`, - ...arguments_]; + const config = managedCodexConfiguration({ workspace, network, credentialProxy }); + return [...Object.entries(config).flatMap(([key, value]) => ['-c', `${key} = ${toml(value)}`]), ...arguments_]; +} + +function toml(value: unknown): string { + if (typeof value === 'object' && value !== null) return `{ ${Object.entries(value).map(([key, child]) => `${/^[A-Za-z0-9_-]+$/.test(key) ? key : JSON.stringify(key)} = ${toml(child)}`).join(', ')} }`; + return JSON.stringify(value); } diff --git a/src/runner/hosted-environment.ts b/src/runner/hosted-environment.ts index ffe3ef6..c714442 100644 --- a/src/runner/hosted-environment.ts +++ b/src/runner/hosted-environment.ts @@ -14,6 +14,7 @@ import type { ManagedSandboxGeneration } from '../core/managed-environment-plann import { resetPersistentWorkspace } from './workspace.js'; import { workspaceDigests, type WorkspaceCheckpoint } from '../domain/workspace-checkpoint.js'; import { verifyManagedExecutor } from './managed-executor-verification.js'; +import { verifyManagedCodexPolicy } from '../adapters/codex-managed-policy.js'; /** Map a private persistent directory to the standard workspace path before guest code starts. */ export async function bindHostedWorkspace(workspace: string, visible = '/workspace'): Promise { @@ -126,6 +127,7 @@ export async function prepareHostedEnvironment(options: { }); try { await rpc.initialize(); + await verifyManagedCodexPolicy({ call: rpc.call.bind(rpc), policy: { workspace: executionWorkspace, network: launch.environment.network, credentialProxy: Boolean(options.credentials) } }); for (const [index, command] of commands.entries()) { const execution = await rpc.call('command/exec', { ...command, env: { ...hostedProcessEnvironment(configuration.env ?? {}, plan.environment.PATH, executionWorkspace), ...options.credentials?.shellEnvironment }, permissionProfile: 'rat_managed', timeoutMs: 600_000, outputBytesCap: 64 * 1024, diff --git a/src/runner/local-managed-environment.ts b/src/runner/local-managed-environment.ts index 5b71030..1fa4de6 100644 --- a/src/runner/local-managed-environment.ts +++ b/src/runner/local-managed-environment.ts @@ -58,6 +58,7 @@ export class LocalManagedEnvironment { environment: { type: 'self_hosted', id: session.environment.id, workspace_directory: '/workspace', capability_directories: [...new Set(roots)], remote_url: connection.url }, }, connection.harnessKey); return { ...result, permissions: 'rat_managed', binaryArguments: hostedCodexArguments(base.binaryArguments, session.environment.network), + managedPolicy: { workspace: '/workspace', network: session.environment.network, credentialProxy: false }, sessionConfig: { ...result.sessionConfig, shell_environment_policy: { inherit: 'core', set: hostedProcessEnvironment(configuration?.env ?? {}, '/usr/local/bin:/usr/bin:/bin') } } }; } public async initialize(owner: string, session: AgentSession) { if (session.environment.type === 'openai_hosted') await this.ensure(owner, session); } diff --git a/src/runner/main.ts b/src/runner/main.ts index 4282161..791026f 100644 --- a/src/runner/main.ts +++ b/src/runner/main.ts @@ -56,6 +56,7 @@ import { planCodexLaunch } from './agent-planning.js'; import { codexEnvironmentFiles } from '../adapters/codex-environment-files.js'; import type { EnvironmentFileOperations } from '../core/environment-file-ports.js'; import { WorkspaceHandoffService } from '../core/workspace-handoff-service.js'; +import { prepareCodexColdVerification } from './codex-cold-verification.js'; import { WorkspaceAdmission } from './workspace-handoff.js'; import { workspaceDigests, type WorkspaceCheckpoint } from '../domain/workspace-checkpoint.js'; import { canonicalJson, sha256Hex } from '../domain/json.js'; @@ -229,7 +230,7 @@ export async function runAgentWorker(): Promise { }); launch = prepared.launch; if (!prepared.sandbox) throw new Error('Managed sandbox generation is missing'); - environmentFiles = { execute: async (_environmentId, _reference, operation) => { const result = await codexEnvironmentFiles({ workspace: '/workspace', operation, binary: plan.binary, ...(launch.runtime?.kind === 'pi' && launch.environment.type === 'openai_hosted' ? { managed: { binaryArguments: hostedCodexArguments(['-c', 'features.plugins=false', 'app-server'], launch.environment.network) } } : {}), ...(plan.identity ? { identity: plan.identity } : {}), signal: abort.signal }); if (launch.runtime?.kind === 'pi') await syncWorkspaceStorage(workspace); return result; } }; + environmentFiles = { execute: async (_environmentId, _reference, operation) => { const result = await codexEnvironmentFiles({ workspace: '/workspace', operation, binary: plan.binary, ...(launch.runtime?.kind === 'pi' && launch.environment.type === 'openai_hosted' ? { managed: { binaryArguments: hostedCodexArguments(['-c', 'features.plugins=false', 'app-server'], launch.environment.network), policy: { workspace: '/workspace', network: launch.environment.network, credentialProxy: false } } } : {}), ...(plan.identity ? { identity: plan.identity } : {}), signal: abort.signal }); if (launch.runtime?.kind === 'pi') await syncWorkspaceStorage(workspace); return result; } }; runnerControl?.setEnvironmentFiles((operation) => environmentFiles!.execute(environmentId, '', operation as import('../core/environment-file-ports.js').EnvironmentFileOperation)); managedReady = true; if (launch.runtime?.kind === 'pi') await syncWorkspaceStorage(workspace); @@ -258,6 +259,7 @@ export async function runAgentWorker(): Promise { }; checkpointOptions = { admission, + prepareNativeVerification: (request, manifest) => prepareCodexColdVerification({ request, manifest, stateRoot: durableStateRoot! }), begin: async () => { checkpointAttempted = true; await managedHeartbeat?.stop(); @@ -267,10 +269,10 @@ export async function runAgentWorker(): Promise { stopRemainingWriters: stopWriters, flushJournal: async () => { await sessionJournal!.flush(); await stopWriters(); }, syncStorage: () => syncWorkspaceStorage(durableStateRoot!), - commit: async state => { + commit: async (state, nativeDurability) => { if (abort.signal.aborted || state.requiredActions.length || state.turns.some(binding => !['completed', 'failed', 'cancelled'].includes(binding.turn.status))) throw new Error('Session changed during checkpoint shutdown'); const root = state.turns.filter(binding => binding.turn.subagent_id === null).at(-1); - const checkpoint: WorkspaceCheckpoint = { id: checkpointId, ...(piContextId ? { piContextId } : {}), source, sandboxId: prepared.sandbox!.id, ...digests, authorityDigest, + const checkpoint: WorkspaceCheckpoint = { ...(nativeDurability ? { nativeDurability } : {}), id: checkpointId, ...(piContextId ? { piContextId } : {}), source, sandboxId: prepared.sandbox!.id, ...digests, authorityDigest, rootThreadId: state.rootThreadId, lastRootTurnId: root?.turn.id ?? null, lastNativeTurnId: root?.nativeTurnId ?? null, reason: 'hibernate', createdAt: Math.floor(Date.now() / 1000) }; await handoffs.commit(sessionOwner, environmentId, checkpoint); diff --git a/src/runner/managed-executor-verification.ts b/src/runner/managed-executor-verification.ts index 2a2c5ab..2f7b0f4 100644 --- a/src/runner/managed-executor-verification.ts +++ b/src/runner/managed-executor-verification.ts @@ -6,6 +6,7 @@ import type { SessionLaunch } from '../domain/session-execution.js'; import type { CodexLaunchPlan } from './agent-planning.js'; import { hostedCodexArguments } from './hosted-environment-planning.js'; import { verifyManagedSandbox } from './managed-sandbox.js'; +import { verifyManagedCodexPolicy } from '../adapters/codex-managed-policy.js'; export async function verifyManagedExecutor(options: { plan: CodexLaunchPlan; workspace: string; @@ -24,6 +25,7 @@ export async function verifyManagedExecutor(options: { onServerRequest: async () => { throw new Error('Sandbox verification cannot request approval'); }, }); await rpc.initialize(); + await verifyManagedCodexPolicy({ call: rpc.call.bind(rpc), policy: { workspace: options.workspace, network: options.network, credentialProxy: options.credentialProxy } }); await verifyManagedSandbox({ call: rpc.call.bind(rpc), workspace: options.workspace, home, ...(plan.identity ? { identity: plan.identity } : {}) }); } finally { try { await rpc?.close(); } finally { await rm(home, { recursive: true, force: true }); } diff --git a/src/runner/pi-effect-broker.ts b/src/runner/pi-effect-broker.ts index d7d0a71..48f6e0c 100644 --- a/src/runner/pi-effect-broker.ts +++ b/src/runner/pi-effect-broker.ts @@ -15,6 +15,7 @@ import { hostedCodexArguments, hostedProcessEnvironment } from './hosted-environ import type { ToolExecutionResult } from '@earendil-works/pi-durable'; import type { PiEffectTool, PiToolEffect } from './pi/protocol.js'; import { verifyManagedSandbox } from './managed-sandbox.js'; +import { verifyManagedCodexPolicy } from '../adapters/codex-managed-policy.js'; const Ajv = AjvModule.default; @@ -39,6 +40,9 @@ export async function createPiEffectBroker(options: { launch: SessionLaunch; pla let threadId: string | undefined; try { await rpc.initialize(); + if (launch.environment.type === 'openai_hosted') await verifyManagedCodexPolicy({ call: rpc.call.bind(rpc), policy: { + workspace: plan.workspace, network: launch.environment.network, credentialProxy: Boolean(options.credentials), + } }); if (managed) await verifyManagedSandbox({ call: rpc.call.bind(rpc), workspace: plan.workspace, home, ...(plan.identity ? { identity: plan.identity } : {}) }); if (launch.agent.tools.some(tool => tool.type === 'mcp')) { const result = await rpc.call('thread/start', { cwd: managed ? plan.workspace : home, ephemeral: true, approvalPolicy: 'never', diff --git a/src/runner/session-launch-planning.ts b/src/runner/session-launch-planning.ts index 137b86c..d39ea51 100644 --- a/src/runner/session-launch-planning.ts +++ b/src/runner/session-launch-planning.ts @@ -6,6 +6,7 @@ import { sessionRecoveryItems } from './session-recovery-planning.js'; import type { SessionMcpRuntime } from './session-mcp.js'; import { hostedCodexArguments, hostedProcessEnvironment } from './hosted-environment-planning.js'; import type { SessionEnvironmentCredentialsRuntime } from './session-environment-credentials.js'; +import { nativeServiceTier } from '../domain/session-model-validation.js'; /** Translate public agent settings once, without changing the requested model or widening authority. */ export function planSessionLaunch(base: CodexLaunchPlan, launch: SessionLaunch, environmentToken?: string, mcp?: Pick, credentials?: Pick): Partial { @@ -23,7 +24,7 @@ export function planSessionLaunch(base: CodexLaunchPlan, launch: SessionLaunch, ...(launch.history?.length ? { recoveryItems: sessionRecoveryItems(launch.history) } : {}), model: agent.model, developerInstructions: agent.instructions, - serviceTier: agent.service_tier, + serviceTier: nativeServiceTier(agent.service_tier), ...(agent.reasoning.effort !== null ? { reasoningEffort: agent.reasoning.effort } : {}), ...(agent.reasoning.summary !== null ? { reasoningSummary: agent.reasoning.summary } : {}), ...(agent.text.format.type === 'json_schema' ? { outputSchema: agent.text.format.schema as Record } : {}), @@ -31,6 +32,7 @@ export function planSessionLaunch(base: CodexLaunchPlan, launch: SessionLaunch, ...(launch.environment.type === 'none' ? { environments: [] } : {}), ...(launch.environment.type === 'openai_hosted' ? { permissions: 'rat_managed', + managedPolicy: { workspace: '/workspace', network: launch.environment.network, credentialProxy: Boolean(credentials) }, binaryArguments: hostedCodexArguments(base.binaryArguments, launch.environment.network, Boolean(credentials)), environments: [{ environmentId: 'local', cwd: '/workspace' }], executionWorkspace: '/workspace', // Keep credential placeholders in the app-server process environment as a diff --git a/src/runner/session-runtime.ts b/src/runner/session-runtime.ts index 2a11ae5..84b7cef 100644 --- a/src/runner/session-runtime.ts +++ b/src/runner/session-runtime.ts @@ -1,3 +1,9 @@ +import { verifyManagedCodexPolicy } from '../adapters/codex-managed-policy.js'; +import { admitNativeServiceTier, nativeServiceTier } from '../domain/session-model-validation.js'; +import { nativeHostJournalDigest, planNativeCheckpoint } from '../core/native-checkpoint-planning.js'; +import type { NativeCheckpointManifest, NativeCheckpointEvidence } from '../domain/native-checkpoint.js'; +import { assertCheckpointStartupSafe } from './codex-cold-verification.js'; +import type { PreparedColdVerification } from './codex-cold-verification.js'; import type { AgentSessionInputMessageParam, AgentSessionInputParam, Turn } from '../domain/agents-api.js'; import { CodexRpcClient, CodexRpcError, type CodexRpcEvent } from '../adapters/codex-rpc.js'; import { bindSessionTurn, initialSessionRuntime, reduceSessionRuntime, resolveSessionFunction, rootTurnBusy, stoppedSessionRuntime, type SessionRuntimeState } from '../core/session-runtime-planning.js'; @@ -6,8 +12,9 @@ import { environmentToolConfig, sandboxPolicyFor } from './codex-app-server.js'; import type { SessionModelSettings } from '../domain/session-execution.js'; import { checkpointWorkspace, type WorkspaceHandoffPorts } from './workspace-handoff.js'; -export type SessionCheckpointOptions = Omit & { - commit(state: SessionRuntimeState): ReturnType; +export type SessionCheckpointOptions = Omit & { + prepareNativeVerification?(request: CodexAppServerRequest, manifest: NativeCheckpointManifest): Promise; + commit(state: SessionRuntimeState, evidence?: NativeCheckpointEvidence): ReturnType; }; type ToolResult = Extract; @@ -18,6 +25,7 @@ export class SessionRuntime { private readonly rpc: Pick & Partial>; private state: SessionRuntimeState | undefined; private readonly requests = new Map(); + private readonly terminalWaiters = new Set<() => void>(); private readonly started = new Map>(); private readonly operations = new Map }>(); private readonly earlyEvents: CodexRpcEvent[] = []; @@ -75,9 +83,11 @@ export class SessionRuntime { this.checkpointActivity = false; let transitionStarted = false; let threadIds: string[] = []; + let manifest: NativeCheckpointManifest | undefined; + let verifier: PreparedColdVerification | undefined; const rootThreadId = this.state.rootThreadId; const assertQuiescent = () => { - if (this.checkpointActivity || this.requests.size || this.state!.requiredActions.length + if (this.checkpointActivity || manifest && nativeHostJournalDigest(this.snapshot()) !== manifest.hostJournalDigest || this.requests.size || this.state!.requiredActions.length || this.state!.turns.some(binding => !terminal(binding.turn))) throw new Error('Native activity changed during checkpoint shutdown'); }; try { @@ -88,9 +98,22 @@ export class SessionRuntime { // Empty native threads may never materialize a rollout. Reject these before // beginning shutdown so we cannot publish an unresumable checkpoint. if (idle) { - threadIds = await this.loadedCheckpointThreads(); - if (!threadIds.includes(rootThreadId)) throw new Error('Root thread is not loaded'); - for (const threadId of threadIds) await this.checkPersistedHistory(threadId); + if (!ports.prepareNativeVerification) throw new Error('Cold native checkpoint is unavailable on this host'); + const loaded = await this.loadedCheckpointThreads(); + if (!loaded.includes(rootThreadId)) throw new Error('Root thread is not loaded'); + threadIds = checkpointThreadIds([...new Set([rootThreadId, ...this.state!.subagents.map(agent => agent.id), ...this.state!.turns.map(binding => binding.threadId)])]); + if (loaded.some(id => !threadIds.includes(id))) throw new Error('Native threads differ from the Session journal'); + const histories: unknown[] = []; + for (const threadId of threadIds) { + const result = await this.rpc.call('thread/read', { threadId, includeTurns: true }); + if (!record(result) || !record(result.thread) || result.thread.id !== threadId) throw new Error('Native checkpoint history is unavailable'); + histories.push(result.thread); + } + manifest = planNativeCheckpoint(this.snapshot(), histories); + assertCheckpointStartupSafe(await this.rpc.call('config/read', { includeLayers: true }), this.options.request.sessionConfig); + const requirements = await this.rpc.call('configRequirements/read', {}); + if (!record(requirements) || requirements.requirements !== null) throw new Error('Cold native checkpoint requirements are unsupported'); + verifier = await ports.prepareNativeVerification(this.options.request, manifest); assertQuiescent(); } return { idle, threadIds }; @@ -103,31 +126,33 @@ export class SessionRuntime { }, shutdownNative: async () => { assertQuiescent(); - // One tree shutdown can also stop siblings and parents. The native bridge - // must validate the complete idle set before it stops any of those writers. - const result = await this.rpc.call('thread/checkpoint', { threadId: rootThreadId, expectedThreadIds: threadIds }, 35_000); - if (!record(result) || result.threadId !== rootThreadId || result.flushed !== true - || !sameThreadIds(checkpointThreadIds(result.threadIds), threadIds)) throw new Error('Native thread checkpoint was not acknowledged'); - assertQuiescent(); - for (const threadId of threadIds) await this.checkPersistedHistory(threadId); - // Successful shutdown may unregister captured threads. Their exact flush - // acknowledgement and readable histories remain required; new IDs do not. if ((await this.loadedCheckpointThreads()).some(id => !threadIds.includes(id))) throw new Error('Native threads changed during checkpoint shutdown'); assertQuiescent(); if (!this.rpc.closeCheckpoint) throw new Error('Native checkpoint shutdown is unsupported'); await this.rpc.closeCheckpoint(); this.disconnected(); assertQuiescent(); - return { threadIds, flushed: true, forced: false }; + return { kind: 'codex-eof', threadIds }; + }, + verifyNative: async () => { + assertQuiescent(); + if (!manifest || !verifier) throw new Error('Cold native verification was not prepared'); + const evidence = await verifier.verify(manifest); + assertQuiescent(); + return evidence; }, - commit: () => { assertQuiescent(); return ports.commit(this.snapshot()); }, + commit: evidence => { assertQuiescent(); return ports.commit(this.snapshot(), evidence); }, settle: () => {}, }); } catch (error) { if (transitionStarted) this.checkpointFailure = error; throw error; } finally { - if (transitionStarted) await this.close(); - this.checkpointing = false; - if (this.closed) this.finish(); + try { await verifier?.close(); } + catch (error) { if (transitionStarted) this.checkpointFailure = error; throw error; } + finally { + if (transitionStarted) await this.close(); + this.checkpointing = false; + if (this.closed) this.finish(); + } } } @@ -145,14 +170,13 @@ export class SessionRuntime { return ids; } - private async checkPersistedHistory(threadId: string): Promise { - const history = await this.rpc.call('thread/turns/list', { threadId, limit: 1, itemsView: 'summary' }); - if (!record(history) || !Array.isArray(history.data)) throw new Error('Native checkpoint history is unavailable'); - } - public async initialize(): Promise { const request = this.options.request; await this.rpc.initialize(); + if (request.permissions === 'rat_managed' && !request.managedPolicy) throw new Error('Managed executor policy intent is missing'); + if (request.managedPolicy && request.permissions !== 'rat_managed') throw new Error('Managed executor permission profile is not selected'); + if (request.managedPolicy) await verifyManagedCodexPolicy({ call: this.rpc.call.bind(this.rpc), policy: request.managedPolicy }); + const serviceTier = await this.admitTier(request.serviceTier, request.model); const parameters = { cwd: request.executionWorkspace ?? request.workspace, modelProvider: request.modelProvider, model: request.model, @@ -161,10 +185,10 @@ export class SessionRuntime { experimentalRawEvents: true, selectedCapabilityRoots: request.selectedCapabilityRoots ?? [], developerInstructions: request.developerInstructions, - serviceTier: request.serviceTier, + serviceTier, environments: request.environments, dynamicTools: request.dynamicTools, - config: { ...request.sessionConfig, ...environmentToolConfig(request.environments), web_search: request.webSearch ?? 'disabled', + config: { ...request.sessionConfig, 'features.fast_mode': true, ...environmentToolConfig(request.environments), web_search: request.webSearch ?? 'disabled', 'features.default_mode_request_user_input': false, 'tools.experimental_request_user_input.enabled': false, 'orchestrator.skills.enabled': false, 'skills.bundled.enabled': false, 'features.goals': false }, }; @@ -232,12 +256,40 @@ export class SessionRuntime { // Cache only attempts that cross the native boundary, including ambiguity. if (!this.state || this.closed || this.checkpointing) return Promise.reject(new Error('Session runtime is unavailable')); if (rootTurnBusy(this.state, this.starting)) return Promise.reject(new Error('The root agent already has an active turn')); - const promise = this.startTurn(turn, input, this.state.rootThreadId, settings); + // Reserve admission while the read-only capability lookup runs, but cache only + // native attempts. Unsupported tier requests can be corrected and retried. + this.starting = true; + let nativeAttempt = false; + const promise = this.admitTier(settings?.service_tier ?? this.options.request.serviceTier, settings?.model ?? this.options.request.model).then(serviceTier => { + if (!this.state || this.closed || this.checkpointing) throw new Error('Session runtime is unavailable'); + nativeAttempt = true; + return this.startTurn(turn, input, this.state.rootThreadId, serviceTier, settings); + }).catch(error => { if (!nativeAttempt && this.started.get(turn.id) === promise) this.started.delete(turn.id); throw error; }) + .finally(() => { this.starting = false; }); this.started.set(turn.id, promise); return promise; } - private async startTurn(turn: Turn, input: AgentSessionInputMessageParam[], rootThreadId: string, settings?: SessionModelSettings): Promise { + private async admitTier(tier: string | undefined, model: string | undefined) { + if (nativeServiceTier(tier) === 'default') return 'default' as const; + const configuration = await this.rpc.call('config/read', { includeLayers: false }); + if (!record(configuration) || !record(configuration.config) || (configuration.config.model_provider ?? 'openai') !== this.options.request.modelProvider) throw new Error('Native model catalogue provider differs from the Session provider'); + const models: unknown[] = []; + const cursors = new Set(); + let cursor: string | undefined; + do { + const page = await this.rpc.call('model/list', { includeHidden: true, limit: 100, ...(cursor ? { cursor } : {}) }); + if (!record(page) || !Array.isArray(page.data) || models.length + page.data.length > 10_000 + || (page.nextCursor !== undefined && page.nextCursor !== null && (typeof page.nextCursor !== 'string' || !page.nextCursor))) throw new Error('Native model capabilities are unavailable'); + models.push(...page.data); + cursor = typeof page.nextCursor === 'string' ? page.nextCursor : undefined; + if (cursor && (cursors.has(cursor) || cursors.size >= 100)) throw new Error('Native model pagination repeated'); + if (cursor) cursors.add(cursor); + } while (cursor); + return admitNativeServiceTier(tier, { model, provider: this.options.request.modelProvider, models }); + } + + private async startTurn(turn: Turn, input: AgentSessionInputMessageParam[], rootThreadId: string, serviceTier: 'default' | 'priority' | 'flex', settings?: SessionModelSettings): Promise { this.starting = true; this.startingTurn = turn; clearTimeout(this.idleTimer); @@ -256,7 +308,7 @@ export class SessionRuntime { ...(settings?.reasoning.effort === null ? { collaborationMode: { mode: 'default', settings: { model: settings.model, reasoning_effort: null, developer_instructions: null }, } } : {}), - serviceTier: settings?.service_tier ?? request.serviceTier, summary: request.reasoningSummary, + serviceTier, summary: request.reasoningSummary, ...(request.outputSchema ? { outputSchema: request.outputSchema } : {}), }); if (!record(result) || !record(result.turn) || typeof result.turn.id !== 'string') throw new Error('Native session returned no turn'); @@ -302,7 +354,29 @@ export class SessionRuntime { public async cancel(turnId: string): Promise { const binding = this.binding(turnId); if (terminal(binding.turn)) return; - await this.rpc.call('turn/interrupt', { threadId: binding.threadId, turnId: binding.nativeTurnId }); + // The stock interrupt acknowledgement can precede its terminal notification. + // Observe the exact existing binding before admitting another public Turn. + const stopped = this.waitForTerminal(binding.threadId, binding.nativeTurnId); + try { await this.rpc.call('turn/interrupt', { threadId: binding.threadId, turnId: binding.nativeTurnId }); await stopped.promise; } + finally { stopped.release(); } + } + + private waitForTerminal(threadId: string, nativeTurnId: string) { + let timer: ReturnType | undefined; + let observe = () => {}; + const release = () => { clearTimeout(timer); this.terminalWaiters.delete(observe); }; + const promise = new Promise((resolve, reject) => { + observe = () => { + const binding = this.state?.turns.find(value => value.threadId === threadId && value.nativeTurnId === nativeTurnId); + if (this.closed) { release(); reject(new Error('Executor closed before interruption settled')); } + else if (binding && terminal(binding.turn)) { release(); resolve(); } + }; + this.terminalWaiters.add(observe); + timer = setTimeout(() => { release(); reject(new Error('Native interruption terminal notification timed out')); }, 30_000); + observe(); + }); + void promise.catch(() => {}); + return { promise, release }; } public async toolResult(result: ToolResult): Promise { @@ -424,6 +498,7 @@ export class SessionRuntime { private publish() { if (!this.state) return; this.options.changed?.(this.state); + for (const observe of [...this.terminalWaiters]) observe(); if (this.closed) return; if (this.state.turns.some((binding) => !terminal(binding.turn))) { clearTimeout(this.idleTimer); this.idleTimer = undefined; } // Connected environments receive host keep-alives between turns. Only an @@ -439,9 +514,7 @@ function checkpointThreadIds(value: unknown): string[] { return [...value] as string[]; } -function sameThreadIds(actual: readonly string[], expected: readonly string[]): boolean { - return actual.length === expected.length && expected.every(id => actual.includes(id)); -} + function checkpointThreadPage(value: unknown): { ids: string[]; nextCursor?: string } { if (!record(value)) throw new Error('Invalid native thread list'); diff --git a/src/runner/workspace-handoff.ts b/src/runner/workspace-handoff.ts index ee40d68..9bd32f5 100644 --- a/src/runner/workspace-handoff.ts +++ b/src/runner/workspace-handoff.ts @@ -1,3 +1,5 @@ +import type { NativeCheckpointEvidence } from '../domain/native-checkpoint.js'; +import { sameNativeThreadIds } from '../domain/native-checkpoint.js'; import type { WorkspaceCheckpoint } from '../domain/workspace-checkpoint.js'; /** Shared by native starts, tool responses and file operations when the host enables handoff. */ @@ -35,11 +37,12 @@ export interface WorkspaceHandoffPorts { admission: WorkspaceAdmission; inspectIdle(): { idle: boolean; threadIds: string[] } | Promise<{ idle: boolean; threadIds: string[] }>; begin(): Promise; - shutdownNative(): Promise; + shutdownNative(): Promise; + verifyNative?(): Promise; stopRemainingWriters(): Promise; flushJournal(): Promise; syncStorage(): Promise; - commit(): Promise; + commit(evidence?: NativeCheckpointEvidence): Promise; /** Must retain an already committed checkpoint if the commit acknowledgement was lost. */ abort(): Promise; /** Runtime completion must be held until this is called, including on failure. */ @@ -58,13 +61,15 @@ export async function checkpointWorkspace(ports: WorkspaceHandoffPorts): Promise await ports.begin(); nativeStarted = true; const acknowledgement = await ports.shutdownNative(); - if (!acknowledgement.flushed || acknowledgement.forced || acknowledgement.threadIds.length !== idle.threadIds.length - || new Set(acknowledgement.threadIds).size !== idle.threadIds.length - || idle.threadIds.some(id => !acknowledgement.threadIds.includes(id))) throw new Error('Native shutdown did not acknowledge every thread flush'); + const cold = 'kind' in acknowledgement && acknowledgement.kind === 'codex-eof'; + if (!sameNativeThreadIds(acknowledgement.threadIds, idle.threadIds) || (!cold && (!('flushed' in acknowledgement) || acknowledgement.flushed !== true || acknowledgement.forced !== false || 'kind' in acknowledgement))) throw new Error('Native shutdown did not acknowledge every thread flush'); + if (cold && !ports.verifyNative) throw new Error('Cold native verification is unavailable'); await ports.stopRemainingWriters(); await ports.flushJournal(); await ports.syncStorage(); - return await ports.commit(); + const evidence = cold ? await ports.verifyNative!() : undefined; + if (cold && (!evidence || evidence.kind !== 'codex-cold-native' || !Array.isArray(evidence.threadIds) || !sameNativeThreadIds(evidence.threadIds, idle.threadIds) || !/^[a-f0-9]{64}$/.test(evidence.historyDigest) || !/^[a-f0-9]{64}$/.test(evidence.hostJournalDigest) || !Array.isArray(evidence.historyModes) || !evidence.historyModes.length || evidence.historyModes.some(mode => !['legacy', 'paginated'].includes(mode)))) throw new Error('Cold native verification evidence is invalid'); + return await ports.commit(evidence); } catch (error) { if (beginAttempted) { // If this fails, the durable lease/tombstone remains recoverable only after diff --git a/testing/README.md b/testing/README.md index 1595543..5b95912 100644 --- a/testing/README.md +++ b/testing/README.md @@ -29,22 +29,22 @@ The worker-image harness runs `npm run test:agents:parity`, which also verifies the installed Pi child at `/opt/agent-runtime/pi-child.mjs` under worker UID 10001. That packaging check requires the image; host parity excludes only that test. -The ordered native patches and exact upstream revision are in `runtime/codex/`. -See the [Codex runtime maintenance plan](../runtime/codex/README.md) for patch -contracts, platform upgrade gates and rollback. -Prepare or build them in a dedicated directory with sufficient free space: +The official release version, upstream revision and full package inventory are in +`runtime/codex/`. See the [Codex runtime maintenance guide](../runtime/codex/README.md) +for adapter contracts, upgrade gates and rollback. Package the installed official +release into a new directory and test those exact bytes: ```bash -npm run codex:build -- /path/to/empty/build-directory --prepare-only -npm run codex:build -- /path/to/empty/build-directory -CODEX_CONFORMANCE_BINARY=/path/to/empty/build-directory/runtime/bin/codex npm run test:agents:parity:host +npm run codex:build -- /path/to/new-runtime-directory +CODEX_CONFORMANCE_BINARY=/path/to/new-runtime-directory/runtime/bin/codex npm run test:agents:parity:host ``` -The builder never resets an existing checkout. It records the upstream commit, -patch hashes and every packaged file hash. The complete runtime preserves the -matching upstream companion host and resources. Source preparation alone is not -verification of the patch. Build the same source for the worker's Linux ARM64 -baseline, then package the image inputs: +The historical command name packages the official binary; it does not compile +Rust or apply patches. It refuses an existing output directory. The export +contains `artifact.json` and `runtime/`, including all matching companions and +resources. Validation rejects modified bytes even if their manifest hashes agree. + +Prepare the Linux ARM64 artifact for Lambda and worker-image packaging: ```bash docker buildx build --platform linux/arm64 --file runtime/codex/Dockerfile \ @@ -52,20 +52,15 @@ docker buildx build --platform linux/arm64 --file runtime/codex/Dockerfile \ npm run package ``` -The builder defaults to one Cargo job; increase `CARGO_BUILD_JOBS` only on a host -with sufficient memory. Compilation caches are disposable; retain the exported -`runtime/` and `artifact.json` together. `CODEX_RUNTIME_ARTIFACT` can select another -export directory. Packaging verifies source, patches, file digests and Linux ARM64 -executables, including the code-mode host and bundled bwrap. The image has no stock -runtime fallback. `npm run package` and therefore `npm run check` require this -artifact. Run the image canary after each accepted artifact or runner change. +`CODEX_RUNTIME_ARTIFACT` can select another export directory. Keep its manifest +and runtime together. `npm run package` and therefore `npm run check` require a +matching ARM64 artifact. Run the image canary after each runtime or runner change. -For an x86 Linux local worker, build the same patched source against the Amazon -Linux 2023 baseline. Keep this artifact separate from the ARM64 cloud artifact: +For an x86 Linux local worker, package the matching official Linux x64 release. +Keep it separate from the ARM64 cloud artifact: ```bash -docker buildx build --platform linux/amd64 --file runtime/codex/Dockerfile \ - --output type=local,dest=.runtime/codex/linux-x64 . +npm run codex:build -- .runtime/codex/linux-x64 npm run runtime:local:build ``` @@ -92,6 +87,14 @@ local model fixtures with Linux dependencies. `MICROVM_E2E_IMAGE_TAG` selects a different worker image. The container enables namespaces for bubblewrap; native processes remain unprivileged and receive no model credentials. +The image harness also runs `tests/runner/codex-cold-verification.test.ts` with +`CODEX_COLD_NATIVE_E2E=true` in a separate root-controlled disposable container. +This exercises the production cold-recovery verifier, writer cleanup, isolated +filesystem copies and corruption rejection for both native history modes. Its +agent processes still run as UID 10001. Never enable this opt-in on the host: +writer cleanup terminates that dedicated UID. CI runs this image check on ARM64 +and x64. + Local readiness also requires `npm run check`, `npm run smoke:local`, [native console checks](native-console/README.md), LocalStack and the ARM64 image canary below. The native gate covers worker behavior; API compatibility and live AWS wiring require their @@ -175,25 +178,19 @@ in a paid tier. Its current [official coverage data](https://github.com/localsta does not document the Lambda MicroVM APIs, so `RunMicrovm`, lifecycle hooks, managed networking, and isolation remain live-AWS-only checks. -CI builds the native artifact on ARM64 and caches the exported runtime by source/build inputs. -The cache is saved after compilation so a later acceptance failure does not force -another cold build. Every restored runtime still passes all acceptance checks. -The pinned companion version is part of `runtime/codex/source.json`; ordinary TypeScript -dependency updates do not invalidate this native cache. -A cold build requires at least 20 GiB free for source, compilation and container layers; the -builder itself checks for 16 GiB before compiling. Standard hosted runners advertise only 14 GB -of storage, so the job removes unused preinstalled SDKs and verifies free space before setup. -If that does not provide enough space, configure the repository variable `RAT_NATIVE_RUNNER` -with an available ARM64 runner label that does. The job's 240-minute limit includes the cold -native build, repository checks and actual worker-image tests. A cached artifact still passes -source, package and checksum validation before packaging. +CI packages the official ARM64 and x64 distributions directly from their pinned +npm packages. It caches complete exports by source, package and packager inputs; +every restored export still passes artifact and behavior checks. There is no +custom Codex compilation or Rust build-space requirement. The ARM64 job uses +`RAT_NATIVE_RUNNER` when configured, otherwise the hosted ARM64 runner, and runs +the repository checks and actual worker-image tests. After the native worker image passes, CI exports `codex-linux-arm64-` as a downloadable artifact containing `linux-arm64.tar.gz`. Extract that tarball into an empty directory and set `CODEX_RUNTIME_ARTIFACT` to that directory, which must contain `artifact.json` and `runtime/`. The tarball preserves executable permissions and hidden companion resources. Packaging verifies source identity, companions and every digest -before writing Lambda archives; an export from a different source or patch is +before writing Lambda archives; an export from another release or with changed official bytes is rejected. Cache presence alone is not native image acceptance. Host-native sandbox checks require an OS that supports the pinned Codex sandbox diff --git a/testing/aws/README.md b/testing/aws/README.md index 49622fc..abb9bb7 100644 --- a/testing/aws/README.md +++ b/testing/aws/README.md @@ -70,7 +70,7 @@ thread after worker termination and verifies fallback to saved public history. T tests ordinary replacement, not adoption of a committed workspace checkpoint. The cases delete their own Sessions and preserve the supplied Agent and deployment. -Build and verify the patched Linux ARM64 artifact before packaging (see +Package and verify the official Linux ARM64 artifact before packaging (see `testing/README.md`). EC2 deployment additionally requires an immutable `AWS_E2E_EC2_WORKER_AMI_ID` and digest-pinned `AWS_E2E_EC2_WORKER_IMAGE`. To exercise prepared AMIs, deploy with `AWS_E2E_ENABLE_EC2_WORKER_AMI_PIPELINE=true` diff --git a/testing/local-runtime/codex-parity.ts b/testing/local-runtime/codex-parity.ts index fc36f17..19c5caf 100644 --- a/testing/local-runtime/codex-parity.ts +++ b/testing/local-runtime/codex-parity.ts @@ -20,7 +20,7 @@ import { nodeSubprocessStdioProbe, restrictedNetworkSocketProbe } from './subpro const { values } = parseArgs({ options: { directory: { type: 'string' }, 'timeout-seconds': { type: 'string', default: '300' }, help: { type: 'boolean' } } }); if (values.help) { - console.log('Usage: CODEX_BINARY=/absolute/patched/codex RAT_THINGS_LINUX_KVM_RUNTIME=/absolute/assets npx tsx testing/local-runtime/codex-parity.ts [--directory EVIDENCE_ROOT] [--timeout-seconds 300]\nReal KVM worker and patched host Codex with a local Responses fixture; includes broken-sandbox refusal for Codex and Pi. No live inference.'); + console.log('Usage: CODEX_BINARY=/absolute/official/codex RAT_THINGS_LINUX_KVM_RUNTIME=/absolute/assets npx tsx testing/local-runtime/codex-parity.ts [--directory EVIDENCE_ROOT] [--timeout-seconds 300]\nReal KVM worker and official host Codex with a local Responses fixture; includes broken-sandbox refusal for Codex and Pi. No live inference.'); process.exit(0); } const timeoutMs = Number(values['timeout-seconds']) * 1000; @@ -146,9 +146,9 @@ function safeError(error: unknown) { let text = error instanceof Error ? `${erro try { assert(sourceAssets && isAbsolute(sourceAssets), 'Set RAT_THINGS_LINUX_KVM_RUNTIME to the real prepared Linux KVM assets'); - assert(binary && isAbsolute(binary), 'Set CODEX_BINARY to the actual patched host Codex executable'); - const artifact = await validateCodexRuntimeArtifact(resolve(process.env.CODEX_RUNTIME_ARTIFACT ?? '.runtime/codex/linux-x64'), { expectedTarget: 'x86_64-unknown-linux-gnu' }); - assert.equal(await hashFile(binary), artifact.manifest.sha256, 'Host binary must match the admitted patched x64 artifact'); + assert(binary && isAbsolute(binary), 'Set CODEX_BINARY to the actual official host Codex executable'); + const artifact = await validateCodexRuntimeArtifact(resolve(process.env.CODEX_RUNTIME_ARTIFACT ?? '.runtime/codex/linux-x64'), { expectedTarget: 'x86_64-unknown-linux-musl' }); + assert.equal(await hashFile(binary), artifact.manifest.sha256, 'Host binary must match the admitted official x64 artifact'); await launch(normalProfile); const outsidePath = `/home/agent/rat-codex-outside-${nonce}`, escapedPath = `/home/agent/rat-codex-symlink-${nonce}`; const content = `Real Codex remote workspace ${nonce}\n`; @@ -229,7 +229,7 @@ finally { if (previousSecret === undefined) delete process.env.RAT_CODEX_PARITY_SECRET; else process.env.RAT_CODEX_PARITY_SECRET = previousSecret; const passed = completed && failure === undefined && cleanupErrors.length === 0; const evidence = join(directory, 'evidence.json'); - await writeFile(evidence, JSON.stringify({ version: 1, status: passed ? 'passed' : 'failed', fixture: 'deterministic local Responses fixture; real patched host Codex and KVM worker', + await writeFile(evidence, JSON.stringify({ version: 1, status: passed ? 'passed' : 'failed', fixture: 'deterministic local Responses fixture; real official host Codex and KVM worker', coverage: 'HTTP Session, remote commands, confinement, cancellation, graceful restart, and shared startup refusal; no Rust UI or live inference claim', phase, runtimeObservations, turns, proofs, restartCalls, refusals, modelCalls: requests.length, piModelCalls: faux.state.callCount, ...(failure === undefined ? {} : { failure: safeError(failure) }), cleanupErrors }, null, 2) + '\n', { mode: 0o600 }); diff --git a/testing/local-runtime/linux-kvm/README.md b/testing/local-runtime/linux-kvm/README.md index 2a9244c..e04d1d1 100644 --- a/testing/local-runtime/linux-kvm/README.md +++ b/testing/local-runtime/linux-kvm/README.md @@ -17,7 +17,7 @@ requires usable `/dev/kvm`, `/dev/vhost-vsock`, a user systemd manager, and enou memory for the runtime's admission checks. The preparation command does not change host permissions or install host packages. -First build the patched Linux x64 Codex artifact and local worker image using the +First package the official Linux x64 Codex artifact and local worker image using the [contributor instructions](../../README.md). Set `DOCKER_HOST` to the local engine socket and unset `DOCKER_CONTEXT` when selecting an endpoint explicitly. Only the immutable image ID resolved at the start of preparation is used. Every @@ -64,20 +64,20 @@ harnesses. Both use the actual default KVM runtime and preserve evidence in a new `run-...` directory: ```bash -CODEX_BINARY=/absolute/path/to/patched-artifact/runtime/bin/codex \ +CODEX_BINARY=/absolute/path/to/official-artifact/runtime/bin/codex \ RAT_THINGS_LINUX_KVM_RUNTIME=/absolute/path/to/image-HASH \ npx tsx testing/local-runtime/pi-parity.ts \ --directory test-results/local-pi-parity -CODEX_BINARY=/absolute/path/to/patched-artifact/runtime/bin/codex \ -CODEX_RUNTIME_ARTIFACT=/absolute/path/to/patched-artifact \ +CODEX_BINARY=/absolute/path/to/official-artifact/runtime/bin/codex \ +CODEX_RUNTIME_ARTIFACT=/absolute/path/to/official-artifact \ RAT_THINGS_LINUX_KVM_RUNTIME=/absolute/path/to/image-HASH \ npx tsx testing/local-runtime/codex-parity.ts \ --directory test-results/local-codex-parity ``` The Pi harness uses a deterministic fixture model. The Codex harness uses a -loopback Responses fixture and verifies the host executable against the patched +loopback Responses fixture and verifies the host executable against the official artifact. Both exercise managed file and command effects, same-UID writes outside the workspace, symlink escape denial, disabled command networking, cancellation of command descendants, and a new Turn after restarting the local service. Pi diff --git a/testing/local-runtime/linux-kvm/prepare.ts b/testing/local-runtime/linux-kvm/prepare.ts index 91f4698..6c30869 100644 --- a/testing/local-runtime/linux-kvm/prepare.ts +++ b/testing/local-runtime/linux-kvm/prepare.ts @@ -171,7 +171,7 @@ function meter(limit: number) { export async function prepareLinuxKvm(options: Options): Promise { if (process.platform !== 'linux' || process.arch !== 'x64') throw new Error('Linux KVM preparation requires x86-64 Linux'); - const artifact = await validateCodexRuntimeArtifact(resolve(options.artifact), { expectedTarget: target }); + const artifact = await validateCodexRuntimeArtifact(resolve(options.artifact), { expectedTarget: 'x86_64-unknown-linux-musl' }); const endpoint = !process.env.DOCKER_CONTEXT && process.env.DOCKER_HOST || (JSON.parse((await execute('docker', ['context', 'inspect'])).stdout)[0]?.Endpoints?.docker?.Host as unknown); if (typeof endpoint !== 'string' || !endpoint.startsWith('unix:///')) throw new Error('Preparation requires a local Docker Unix socket'); @@ -275,7 +275,7 @@ function options(arguments_: string[]): Options { } if (process.argv[1] && import.meta.url === pathToFileURL(resolve(process.argv[1])).href) { - if (process.argv.includes('--help')) console.log('Development only: prepare a Linux x64 KVM worker from a verified patched local image.\nOptions: --output DIR --image IMAGE --artifact DIR --kernel-inputs DIR --qemu-evidence FILE\nNo VM is started. Existing image generations are never overwritten.'); + if (process.argv.includes('--help')) console.log('Development only: prepare a Linux x64 KVM worker from a verified official-Codex local image.\nOptions: --output DIR --image IMAGE --artifact DIR --kernel-inputs DIR --qemu-evidence FILE\nNo VM is started. Existing image generations are never overwritten.'); else prepareLinuxKvm(options(process.argv.slice(2))).then(directory => console.log(JSON.stringify({ directory, kind: 'linux-kvm-development' }))) .catch(error => { console.error(error instanceof Error ? error.message : 'Linux KVM preparation failed'); process.exitCode = 1; }); } diff --git a/testing/local-runtime/native-guest-build.md b/testing/local-runtime/native-guest-build.md index e027eff..5b2b67b 100644 --- a/testing/local-runtime/native-guest-build.md +++ b/testing/local-runtime/native-guest-build.md @@ -1,7 +1,7 @@ # Build a maintained native guest -Build the Linux ARM64 Codex release artifact first. The artifact must match the -source definition, patched tree policy, and complete companion inventory accepted +Package the official Linux ARM64 Codex release first. The artifact must match the +source definition, npm lock and complete official file inventory accepted by `scripts/codex-runtime-artifact.mjs`. Capture an initial package candidate into a new directory outside `dist`. @@ -14,8 +14,8 @@ node scripts/build-native-guest.mjs record-candidate \ ``` Use `--definition-root /absolute/path/to/runtime/codex` when the checked source -definition is staged separately. That directory must include `source.json`, the -ordered patches, and `artifact-policy.json`. Use `--kernel-input-directory PATH` +definition is staged separately. That directory must include `source.json`. +Use `--kernel-input-directory PATH` to supply `vmlinuz-virt` and `modloop-virt` explicitly. Their locked checksums still apply. Otherwise the builder downloads the two URLs in `runtime/native/kernel-inputs.json`. diff --git a/testing/local-runtime/native-vm/worker/README.md b/testing/local-runtime/native-vm/worker/README.md index 1e7a03d..f23b1ec 100644 --- a/testing/local-runtime/native-vm/worker/README.md +++ b/testing/local-runtime/native-vm/worker/README.md @@ -1,6 +1,6 @@ # Native Rat Things worker proof -This opt-in Apple silicon experiment runs the real Rat Things worker and patched Codex +This opt-in Apple silicon experiment runs the real Rat Things worker and official Codex executor inside a Linux VM created by Apple's Virtualization framework. It uses the same `LocalRuntime` port, Session service, environment relay and remote file protocol as the container path. The production runtime factory does not select diff --git a/testing/local-runtime/subprocess-fixtures.ts b/testing/local-runtime/subprocess-fixtures.ts index d888974..edfc7fe 100644 --- a/testing/local-runtime/subprocess-fixtures.ts +++ b/testing/local-runtime/subprocess-fixtures.ts @@ -1,4 +1,4 @@ -/** Exact programs shared with the pinned Codex local-subprocess-stdio regression tests. */ +/** Programs exercising subprocess behavior in the official Codex sandbox. */ export const nodeSubprocessStdioProbe = String.raw` const assert = require('node:assert/strict'); const { spawnSync, spawn } = require('node:child_process'); @@ -27,9 +27,9 @@ asyncChild.on('close', code => { asyncChild.stdin.end('async'); `; -/** Require precise syscall denials; missing Python, socket families, or sandbox support fail. */ +/** Proxy isolation permits local metadata; actual egress and named Unix sockets remain denied. */ export const restrictedNetworkSocketProbe = String.raw` -import errno, os, socket +import errno, os, socket, urllib.request, urllib.error def denied(operation): try: @@ -46,23 +46,29 @@ os.write(left.fileno(), b'local') assert os.read(right.fileno(), 5) == b'local' left.shutdown(socket.SHUT_WR) assert os.read(right.fileno(), 1) == b'' -# Each mismatching field independently denies, including both mismatching. -denied(lambda: right.getsockopt(socket.IPPROTO_TCP, socket.SO_TYPE)) -denied(lambda: right.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)) -denied(lambda: right.getsockopt(socket.IPPROTO_TCP, socket.SO_ERROR)) -denied(lambda: right.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 65536)) -denied(lambda: right.getpeername()) -denied(lambda: right.shutdown(socket.SHUT_RD)) -denied(lambda: right.shutdown(socket.SHUT_RDWR)) left.close() right.close() -for family in (socket.AF_INET, socket.AF_INET6, socket.AF_VSOCK, socket.AF_NETLINK): +for family in (socket.AF_UNIX, socket.AF_VSOCK, socket.AF_NETLINK): denied(lambda: socket.socket(family, socket.SOCK_STREAM)) +for family in (socket.AF_INET, socket.AF_INET6, socket.AF_VSOCK, socket.AF_NETLINK): denied(lambda: socket.socketpair(family, socket.SOCK_STREAM)) -with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as endpoint: - denied(lambda: endpoint.bind('/tmp/rat-network-denied')) - denied(lambda: endpoint.connect('/tmp/rat-network-denied')) - denied(lambda: endpoint.listen(1)) - denied(lambda: endpoint.accept()) +with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as endpoint: + endpoint.settimeout(1) + try: + endpoint.connect(('192.0.2.1', 443)) + except OSError: + pass + else: + raise AssertionError('direct external connection was allowed') +proxy = os.environ.get('HTTP_PROXY') +assert proxy, 'managed proxy was not installed' +opener = urllib.request.build_opener(urllib.request.ProxyHandler({'http': proxy})) +try: + opener.open('http://example.invalid/', timeout=2) +except urllib.error.HTTPError as error: + assert error.code == 403, error.code + assert b'"reason":"not_allowed"' in error.read() +else: + raise AssertionError('proxy egress was allowed') print('local-socket-only-ok') `; diff --git a/testing/run-native-image-parity.sh b/testing/run-native-image-parity.sh index 94b3ad6..7a66b26 100755 --- a/testing/run-native-image-parity.sh +++ b/testing/run-native-image-parity.sh @@ -16,3 +16,8 @@ docker buildx build --platform linux/arm64 --load \ # native child processes run as the same non-root UID used by the AWS worker. # Fixture HTTP servers are local; no model credentials are forwarded. docker run --rm --platform linux/arm64 --privileged --init "$parity_image" +# Cold recovery is a trusted-controller operation: stop the dedicated guest UID, +# synchronize native storage, then verify a disposable copy in a fresh namespace. +docker run --rm --platform linux/arm64 --privileged --init --user 0 \ + --env CODEX_COLD_NATIVE_E2E=true --entrypoint npx "$parity_image" \ + --no-install vitest run tests/runner/codex-cold-verification.test.ts --no-file-parallelism diff --git a/tests/adapters/codex-managed-policy.test.ts b/tests/adapters/codex-managed-policy.test.ts new file mode 100644 index 0000000..0a4fe2d --- /dev/null +++ b/tests/adapters/codex-managed-policy.test.ts @@ -0,0 +1,31 @@ +import { expect, it } from 'vitest'; +import { verifyManagedCodexPolicy } from '../../src/adapters/codex-managed-policy.js'; +import { managedCodexConfiguration, managedCodexPolicyMatches, type ManagedCodexPolicy } from '../../src/domain/codex-managed-policy.js'; + +const policy: ManagedCodexPolicy = { workspace: '/workspace', network: { access: 'disabled', allowed_domains: [] }, credentialProxy: false }; + +it('keeps no-egress intent independent from the upstream proxy-enabled bit', () => { + const config = managedCodexConfiguration({ ...policy, credentialProxy: true }); + expect(config.permissions.rat_managed.network).toMatchObject({ enabled: true, domains: {}, allow_upstream_proxy: false, allow_local_binding: false }); + expect(config.features.network_proxy).toEqual({ enabled: true, credential_broker: false }); + expect(managedCodexPolicyMatches({ config }, { requirements: null }, policy)).toBe(true); +}); + +it.each([ + { name: 'managed requirements', requirements: { requirements: { network: { allowedDomains: ['example.com'] } } } }, + { name: 'missing requirements response', requirements: {} }, + { name: 'missing policy-layer inventory' }, + { name: 'unknown effective grants', extend: { permissions: { rat_managed: { filesystem: { '/': 'write' } } } } }, + { name: 'unknown policy layer', layer: { name: { type: 'enterpriseManaged' }, config: {} } }, + { name: 'unexpected system config', layer: { name: { type: 'system', file: '/etc/codex/config.toml' }, config: { features: { network_proxy: true } } } }, +])('refuses $name before running a command', async test => { + const methods: string[] = []; + const config = { ...managedCodexConfiguration(policy), ...('extend' in test ? test.extend : {}) }; + await expect(verifyManagedCodexPolicy({ policy, call: async method => { + methods.push(method); + if (method === 'config/read') return { config, layers: 'layer' in test ? [test.layer] : [] }; + if (method === 'configRequirements/read') return 'requirements' in test ? test.requirements : { requirements: null }; + throw new Error('Execution must not start'); + } })).rejects.toThrow('Refusing to expose execution tools'); + expect(methods).toEqual(['config/read', 'configRequirements/read']); +}); diff --git a/tests/adapters/codex-rpc-checkpoint.test.ts b/tests/adapters/codex-rpc-checkpoint.test.ts index ddd9599..5302b7f 100644 --- a/tests/adapters/codex-rpc-checkpoint.test.ts +++ b/tests/adapters/codex-rpc-checkpoint.test.ts @@ -51,3 +51,12 @@ it('does not treat a process already closed by normal cancellation as checkpoint await client.close(); await expect(client.closeCheckpoint()).rejects.toThrow('before checkpoint'); }); + +it.each(['storage', 'protocol'])('rejects late %s failure even when ordinary EOF exits zero', async kind => { + const source = `const reader = require('readline').createInterface({ input: process.stdin }); + reader.on('line', line => { const value = JSON.parse(line); if (value.id) process.stdout.write(JSON.stringify({ id: value.id, result: {} }) + '\\n'); }); + reader.on('close', () => { ${kind === 'storage' ? "process.stderr.write('failed to flush native thread store\\n');" : "process.stdout.write('malformed protocol output\\n');"} });`; + const client = new CodexRpcClient({ binary: process.execPath, binaryArguments: ['-e', source], cwd: process.cwd(), environment: {} }); + try { await client.initialize(); await expect(client.closeCheckpoint()).rejects.toThrow('storage or protocol'); } + finally { await client.close(); } +}); diff --git a/tests/agents/local-codex-selection.test.ts b/tests/agents/local-codex-selection.test.ts index 76b27fb..e677ff0 100644 --- a/tests/agents/local-codex-selection.test.ts +++ b/tests/agents/local-codex-selection.test.ts @@ -6,6 +6,7 @@ import { createLocalServices, LOCAL_OWNER } from '../../src/app/local-compositio import type { LocalRuntime } from '../../src/core/local-runtime-ports.js'; import { AgentsApiError } from '../../src/domain/agents-api-validation.js'; import { developmentLocalCodexHost } from '../../src/runner/local-codex.js'; +import { managedCodexConfiguration } from '../../src/domain/codex-managed-policy.js'; afterEach(() => vi.unstubAllEnvs()); @@ -28,7 +29,12 @@ lines.on('line', line => { fs.appendFileSync(${JSON.stringify(log)}, JSON.stringify({ method: request.method, binary: process.argv[1], path: process.env.PATH }) + '\\n'); if (request.id === undefined) return; let result = {}; - if (request.method === 'config/read') result = { config: {} }; + if (request.method === 'config/read') result = ${JSON.stringify({ + config: managedCodexConfiguration({ workspace: '/workspace', network: { access: 'disabled', allowed_domains: [] }, credentialProxy: false }), + layers: [{ name: { type: 'sessionFlags' }, config: {} }, + ...['user', 'system'].map(type => ({ name: { type, file: join(directory, type, 'config.toml') }, config: {} }))], + })}; + if (request.method === 'configRequirements/read') result = { requirements: null }; if (request.method === 'account/read') result = { account: null }; if (request.method === 'model/list') result = { data: [{ id: 'fixture-model', isDefault: true }] }; if (request.method === 'thread/start' || request.method === 'thread/resume') result = { thread: { id: 'fixture-thread' } }; diff --git a/tests/agents/local-turn-admission.test.ts b/tests/agents/local-turn-admission.test.ts index 9b0e343..a03756e 100644 --- a/tests/agents/local-turn-admission.test.ts +++ b/tests/agents/local-turn-admission.test.ts @@ -9,6 +9,7 @@ import { SessionService } from '../../src/core/session-service.js'; import type { SessionState } from '../../src/core/session-ports.js'; import type { SessionRuntimeState } from '../../src/core/session-runtime-planning.js'; import type { Turn } from '../../src/domain/agents-api.js'; +import { managedCodexConfiguration } from '../../src/domain/codex-managed-policy.js'; import { LocalManagedEnvironment } from '../../src/runner/local-managed-environment.js'; import { LocalSessionExecution } from '../../src/runner/local-session-execution.js'; import { developmentLocalCodexHost } from '../../src/runner/local-codex.js'; @@ -26,6 +27,12 @@ vi.mock('../../src/runner/local-codex.js', async original => ({ ...await origina emit: (event: CodexRpcEvent) => options.onEvent?.(event), call: async (method: string) => { rpc.calls.push(method); + if (method === 'config/read') return { + config: managedCodexConfiguration({ workspace: '/workspace', network: { access: 'disabled', allowed_domains: [] }, credentialProxy: false }), + layers: [{ name: { type: 'sessionFlags' }, config: {} }, + ...['user', 'system'].map(type => ({ name: { type, file: join(options.cwd!, type, 'config.toml') }, config: {} }))], + }; + if (method === 'configRequirements/read') return { requirements: null }; if (method === 'turn/start') { await rpc.turn?.(); return { turn: { id: `native_turn_${rpc.calls.length}` } }; } if (method === 'turn/interrupt') await rpc.interrupt?.(); if (method === 'thread/start' || method === 'thread/resume') return { thread: { id: `thread_${index}` } }; diff --git a/tests/agents/native-checkpoint.test.ts b/tests/agents/native-checkpoint.test.ts index 72b57dd..d555ca5 100644 --- a/tests/agents/native-checkpoint.test.ts +++ b/tests/agents/native-checkpoint.test.ts @@ -1,7 +1,6 @@ import { createServer, type ServerResponse } from 'node:http'; -import { spawn } from 'node:child_process'; import { once } from 'node:events'; -import { mkdtemp, rm } from 'node:fs/promises'; +import { cp, mkdtemp, rename, rm, readFile, readdir } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; import { setTimeout as delay } from 'node:timers/promises'; @@ -12,49 +11,18 @@ import type { Turn } from '../../src/domain/agents-api.js'; import type { WorkspaceCheckpoint } from '../../src/domain/workspace-checkpoint.js'; import { SessionRuntime, type SessionCheckpointOptions } from '../../src/runner/session-runtime.js'; import { WorkspaceAdmission } from '../../src/runner/workspace-handoff.js'; -import { rpcClient } from './codex-protocol.js'; +import { assertNativeHistory, nativeCheckpointEvidence } from '../../src/domain/native-checkpoint.js'; +import { syncWorkspaceStorage } from '../../src/runner/workspace-sync.js'; +import { createHash } from 'node:crypto'; -// The private checkpoint bridge exists only in the repository's parity artifact. -// Model traffic stays on loopback; no credentials or AWS resources are used. +// Uses the official unmodified binary. Model traffic stays on loopback. +// Host-only copies prove native continuation; the privileged guest test covers isolation. const native = it.skipIf(process.env.CODEX_REQUIRE_PARITY !== 'true'); const binary = process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'); const sessionId = 'native_checkpoint_session'; const agentId = 'native_checkpoint_agent'; type ModelRequest = { input: Array<{ type?: string; recipient?: string; role?: string; content?: unknown }> }; -native.each(['false', 'omitted'])('requires experimental capability when it is %s before entering the checkpoint handler', async capability => { - const home = await mkdtemp(join(tmpdir(), 'rat-native-checkpoint-capability-')); - const child = spawn(binary, ['app-server'], { cwd: home, env: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home } }); - child.stderr.resume(); - const rpc = rpcClient(child); - try { - await rpc.call('initialize', { clientInfo: { name: 'rat-checkpoint-capability-test', version: '1' }, - ...(capability === 'false' ? { capabilities: { experimentalApi: false } } : {}) }); - child.stdin.write(`${JSON.stringify({ method: 'initialized' })}\n`); - const threadId = '00000000-0000-4000-8000-000000000001'; - let failure: unknown; - try { await rpc.call('thread/checkpoint', { threadId, expectedThreadIds: [threadId] }); } - catch (error) { - if (!(error instanceof Error)) throw error; - failure = JSON.parse(error.message) as unknown; - } - expect(failure).toMatchObject({ code: -32600, message: 'thread/checkpoint requires experimentalApi capability' }); - // An unloaded but syntactically valid identity distinguishes capability - // rejection from a handler that ran and rejected the native thread lookup. - expect(await rpc.call('thread/loaded/list', {})).toMatchObject({ data: [] }); - } finally { - const exited = child.exitCode === null && child.signalCode === null ? once(child, 'close').catch(() => {}) : undefined; - rpc.close(); child.stdin.destroy(); - if (exited) { - child.kill('SIGTERM'); - await Promise.race([exited, delay(1000)]); - if (child.exitCode === null && child.signalCode === null) child.kill('SIGKILL'); - await exited; - } - await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); - } -}, 15_000); - native.each([{ paginated: false }, { paginated: true }])('checkpoints real root and child histories and continues them in a fresh process (paginated=$paginated)', async ({ paginated }) => { const fixture = await checkpointFixture({ paginated }); try { @@ -74,10 +42,11 @@ native.each([{ paginated: false }, { paginated: true }])('checkpoints real root await source.finished; source.assertSuccessfulShutdown(); expect(checkpoint.rootThreadId).toBe(before.rootThreadId); + expect(checkpoint.nativeDurability?.historyModes).toEqual(paginated ? ['paginated'] : ['legacy', 'paginated']); expect(fixture.acknowledgedIds).toEqual([expectedIds]); // These host ports record ordering; this proves native journal handoff, not // an AWS filesystem snapshot, host journal implementation or worker replacement. - expect(fixture.order).toEqual(['begin', 'native-ack', 'native-exit', 'writers', 'journal', 'storage-sync', 'commit']); + expect(fixture.order).toEqual(['begin', 'native-exit', 'writers', 'journal', 'storage-sync', 'cold-verified', 'commit']); await expect(fixture.clients[0]!.call('thread/loaded/list', {})).rejects.toThrow('unavailable'); const successor = fixture.create(before); @@ -109,7 +78,7 @@ native.each([{ paginated: false }, { paginated: true }])('checkpoints real root } finally { await fixture.close(); } }, 60_000); -native('rejects an incomplete thread set and a busy child without shutting down either thread', async () => { +native('rejects a busy child without shutting down either thread', async () => { const fixture = await checkpointFixture({ paginated: false, holdChild: true }); try { const runtime = fixture.create(); @@ -123,8 +92,8 @@ native('rejects an incomplete thread set and a busy child without shutting down }, 'busy child with idle root'); const childId = runtime.snapshot().subagents[0]!.id; const rpc = fixture.clients[0]!; - await expect(rpc.call('thread/checkpoint', { threadId: rootId, expectedThreadIds: [rootId] })).rejects.toThrow(); - await expect(rpc.call('thread/checkpoint', { threadId: rootId, expectedThreadIds: [rootId, childId] })).rejects.toThrow(); + await expect(runtime.checkpoint()).rejects.toThrow('active turns'); + expect(fixture.order).toEqual([]); const loaded = await rpc.call('thread/loaded/list', { limit: 100 }) as { data: string[] }; expect([...loaded.data].sort()).toEqual([rootId, childId].sort()); expect(runtime.snapshot().turns.find(binding => binding.threadId === childId)?.turn.status).toBe('in_progress'); @@ -138,6 +107,7 @@ native('rejects an incomplete thread set and a busy child without shutting down }, 45_000); async function checkpointFixture(options: { paginated: boolean; holdChild?: boolean }) { + const historyMode = options.paginated ? 'paginated' : 'legacy'; const home = await mkdtemp(join(tmpdir(), 'rat-native-checkpoint-')); const rootRequests: ModelRequest[] = []; const childRequests: ModelRequest[] = []; @@ -175,13 +145,53 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool const create = (previous?: SessionRuntimeState) => { const checkpointPorts: SessionCheckpointOptions = { admission: new WorkspaceAdmission(), + prepareNativeVerification: async () => ({ + close: async () => {}, + verify: async manifest => { + const copyRoot = await mkdtemp(join(tmpdir(), 'rat-cold-checkpoint-copy-')); + const candidate = join(copyRoot, 'candidate'); + const parked = join(copyRoot, 'original'); + const count = rootRequests.length + childRequests.length; + await cp(home, candidate, { recursive: true }); + const digest = await fileDigest(candidate); + await rename(home, parked); + let verifier: CodexRpcClient | undefined; + let activity = false; + try { + await cp(candidate, home, { recursive: true }); + verifier = new CodexRpcClient({ binary, cwd: home, environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, + onEvent: event => { if (event.requestId !== undefined || /^(turn\/(started|completed)|item\/|error$)/.test(event.method)) activity = true; } }); + await verifier.initialize(); + for (const expected of manifest.threads) { + const result = await verifier.call('thread/read', { threadId: expected.id, includeTurns: true }) as { thread: unknown }; + assertNativeHistory(expected, result.thread, String(expected.id)); + } + for (const expected of manifest.threads) { + await verifier.call('thread/resume', { threadId: expected.id, deferGoalContinuation: true, + ...(expected.id === manifest.rootThreadId ? { config: { 'model_providers.fixture': providerConfig(address.port), 'features.multi_agent': true, 'features.multi_agent_v2': true, 'features.goals': false } } : {}) }); + const result = await verifier.call('thread/read', { threadId: expected.id, includeTurns: true }) as { thread: unknown }; + assertNativeHistory(expected, result.thread, manifest.rootThreadId); + } + await verifier.closeCheckpoint(); + expect(activity).toBe(false); + expect(rootRequests.length + childRequests.length).toBe(count); + expect(await fileDigest(candidate)).toBe(digest); + acknowledgedIds.push(manifest.threads.map(thread => String(thread.id)).sort()); + order.push('cold-verified'); + return nativeCheckpointEvidence(manifest); + } finally { + await verifier?.close(); await rm(home, { recursive: true, force: true }); await rename(parked, home); + await rm(copyRoot, { recursive: true, force: true }); + } + }, + }), begin: async () => { order.push('begin'); }, stopRemainingWriters: async () => { order.push('writers'); }, flushJournal: async () => { order.push('journal'); }, - syncStorage: async () => { order.push('storage-sync'); }, - commit: async state => { + syncStorage: async () => { await syncWorkspaceStorage(home); order.push('storage-sync'); }, + commit: async (state, nativeDurability) => { order.push('commit'); - return { id: 'native-checkpoint', source: { runId: 'native-source', generation: 'generation' }, sandboxId: 'native-sandbox', + return { ...(nativeDurability ? { nativeDurability } : {}), id: 'native-checkpoint', source: { runId: 'native-source', generation: 'generation' }, sandboxId: 'native-sandbox', setupDigest: 'a'.repeat(64), policyDigest: 'b'.repeat(64), rootThreadId: state.rootThreadId, lastRootTurnId: state.turns.filter(binding => binding.turn.subagent_id === null).at(-1)?.turn.id ?? null, lastNativeTurnId: state.turns.filter(binding => binding.turn.subagent_id === null).at(-1)?.nativeTurnId ?? null, @@ -196,7 +206,7 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool sessionConfig: { 'model_providers.fixture': { name: 'local checkpoint fixture', base_url: `http://127.0.0.1:${address.port}`, wire_api: 'responses', requires_openai_auth: false, supports_websockets: false, request_max_retries: 0, stream_max_retries: 0 }, 'features.multi_agent': true, 'features.multi_agent_v2': { enabled: true, max_concurrent_threads_per_session: 2 }, - 'features.paginated_threads': options.paginated }, + 'features.goals': false }, }, client: options => { const rpc = new CodexRpcClient({ ...options, onEvent: event => { @@ -212,12 +222,8 @@ async function checkpointFixture(options: { paginated: boolean; holdChild?: bool // Observe the real subprocess transport; never substitute RPC results. return { initialize: () => rpc.initialize(), close: () => rpc.close(), call: async (method, params, timeout) => { - const result = await rpc.call(method, params, timeout); - if (method === 'thread/checkpoint') { - order.push('native-ack'); - acknowledgedIds.push([...(result as { threadIds: string[] }).threadIds].sort()); - } - return result; + if (method === 'thread/checkpoint') throw new Error('Private checkpoint RPC is forbidden'); + return rpc.call(method, method === 'thread/start' ? { ...(params as object), historyMode } : params, timeout); }, closeCheckpoint: async () => { await rpc.closeCheckpoint(); order.push('native-exit'); }, }; @@ -266,3 +272,13 @@ async function until(predicate: () => boolean, description: string): Promise { + const hash = createHash('sha256'); + const visit = async (directory: string): Promise => { for (const entry of (await readdir(directory, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) { + const path = join(directory, entry.name); hash.update(path.slice(root.length)); + if (entry.isDirectory()) await visit(path); else if (entry.isFile()) hash.update(await readFile(path)); else throw new Error('Unexpected fixture file'); + } }; + await visit(root); return hash.digest('hex'); +} diff --git a/tests/agents/native-item-events.test.ts b/tests/agents/native-item-events.test.ts index f4d7d8d..95965d3 100644 --- a/tests/agents/native-item-events.test.ts +++ b/tests/agents/native-item-events.test.ts @@ -27,12 +27,15 @@ it.each([false, true])('retains native Item boundaries with interruption=%s', as { type: 'response.output_item.done', output_index: 2, item: message('answer_fixture', 'final_answer', 'Done') }, { type: 'response.completed', response: { id: 'response_fixture' } }, ]; + let requests = 0; const server = createServer(async (request, response) => { for await (const _chunk of request) { /* Drain the fixture request. */ } if (!request.url?.endsWith('/responses')) { response.writeHead(404).end(); return; } + requests++; + const holdOpen = interrupted && requests === 1; response.writeHead(200, { 'content-type': 'text/event-stream' }); - const body = (interrupted ? wireEvents.slice(0, 7) : wireEvents).map(event => `data: ${JSON.stringify(event)}\n\n`).join(''); - if (interrupted) response.write(body); + const body = (holdOpen ? wireEvents.slice(0, 7) : wireEvents).map(event => `data: ${JSON.stringify(event)}\n\n`).join(''); + if (holdOpen) response.write(body); else response.end(body); }); server.listen(0, '127.0.0.1'); await once(server, 'listening'); @@ -55,6 +58,8 @@ it.each([false, true])('retains native Item boundaries with interruption=%s', as if (interrupted) { for (let attempt = 0; attempt < 1_000 && !runtime.snapshot().turns[0]?.items.some(item => item.type === 'message' && item.content.some(part => part.type === 'output_text' && part.text === 'Working')); attempt++) await delay(10); await runtime.cancel('turn'); + // Awaited cancellation includes projection of the terminal public state. + expect(runtime.snapshot().turns[0]?.turn.status).toBe('cancelled'); } const status = interrupted ? 'cancelled' : 'completed'; for (let attempt = 0; attempt < 1_000 && runtime.snapshot().turns[0]?.turn.status !== status; attempt++) await delay(10); @@ -81,6 +86,16 @@ it.each([false, true])('retains native Item boundaries with interruption=%s', as expect(done[1]).toMatchObject({ item: { phase: 'commentary' } }); if (!interrupted) expect(done[2]).toMatchObject({ item: { phase: 'final_answer' } }); expect(events.indexOf(done.at(-1)!)).toBeLessThan(events.findIndex(event => event.type === `agent.session.turn.${status}`)); + if (interrupted) { + const thread = runtime.snapshot().rootThreadId; + await runtime.start({ id: 'followup', object: 'agent.session.turn', session_id: 'session', agent_id: 'agent', subagent_id: null, + status: 'queued', created_at: 2, started_at: null, completed_at: null, error: null, usage: null }, + [{ role: 'user', content: [{ type: 'input_text', text: 'Continue after the acknowledged cancellation.' }] }]); + await expect.poll(() => runtime.snapshot().turns[1]?.turn.status, { timeout: 10_000, interval: 10 }).toBe('completed'); + expect(runtime.snapshot().rootThreadId).toBe(thread); + expect(runtime.snapshot().turns.map(binding => binding.turn.status)).toEqual(['cancelled', 'completed']); + expect(requests).toBe(2); + } } finally { await runtime.close(); server.closeAllConnections(); await new Promise(resolve => server.close(() => resolve())); diff --git a/tests/agents/native-managed-policy.test.ts b/tests/agents/native-managed-policy.test.ts new file mode 100644 index 0000000..359d037 --- /dev/null +++ b/tests/agents/native-managed-policy.test.ts @@ -0,0 +1,41 @@ +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join, resolve } from 'node:path'; +import { expect, it } from 'vitest'; +import { CodexRpcClient } from '../../src/adapters/codex-rpc.js'; +import { verifyManagedCodexPolicy } from '../../src/adapters/codex-managed-policy.js'; +import { hostedCodexArguments } from '../../src/runner/hosted-environment-planning.js'; +import type { ManagedCodexPolicy } from '../../src/domain/codex-managed-policy.js'; + +it.each(['clean', 'restricted-uppercase', 'untrusted-project', 'inherited-domain', 'inherited-filesystem', 'inherited-credential-broker', 'private-rules'] as const)( + 'checks the actual official executor policy before tools: %s', async mode => { + const root = await mkdtemp(join(tmpdir(), 'rat-native-policy-')); + const home = join(root, 'home'), workspace = join(root, 'workspace'); + await mkdir(home); await mkdir(workspace); + const policy: ManagedCodexPolicy = { workspace, network: mode === 'restricted-uppercase' + ? { access: 'restricted', allowed_domains: ['API.Example.com'] } : { access: 'disabled', allowed_domains: [] }, credentialProxy: false }; + if (mode === 'untrusted-project') { + await mkdir(join(workspace, '.codex', 'rules'), { recursive: true }); + await writeFile(join(home, 'config.toml'), `[projects.${JSON.stringify(workspace)}]\ntrust_level="trusted"\n`); + await writeFile(join(workspace, '.codex', 'config.toml'), '[features.network_proxy.domains]\n"1.1.1.1"="allow"\n'); + await writeFile(join(workspace, '.codex', 'rules', 'default.rules'), 'network_rule(host="1.1.1.1", protocol="http", decision="allow")\n'); + } + if (mode === 'inherited-domain') await writeFile(join(home, 'config.toml'), '[features.network_proxy.domains]\n"1.1.1.1"="allow"\n'); + if (mode === 'inherited-filesystem') await writeFile(join(home, 'config.toml'), `[permissions.rat_managed.filesystem]\n${JSON.stringify(root)}="write"\n`); + if (mode === 'inherited-credential-broker') await writeFile(join(home, 'config.toml'), '[features.network_proxy]\ncredential_broker=true\ndangerously_allow_all_unix_sockets=true\n'); + if (mode === 'private-rules') { + await mkdir(join(home, 'rules')); + await writeFile(join(home, 'rules', 'default.rules'), 'network_rule(host="1.1.1.1", protocol="http", decision="allow")\n'); + } + const rpc = new CodexRpcClient({ binary: process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'), + cwd: workspace, binaryArguments: hostedCodexArguments(undefined, policy.network, false, workspace), + environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home, CODEX_API_KEY: 'no-inference-policy-fixture' }, + onServerRequest: async () => { throw new Error('Unexpected approval'); }, + }); + try { + await rpc.initialize(); + const verified = verifyManagedCodexPolicy({ call: rpc.call.bind(rpc), policy }); + if (mode === 'clean' || mode === 'restricted-uppercase' || mode === 'untrusted-project') await expect(verified).resolves.toBeUndefined(); + else await expect(verified).rejects.toThrow('Refusing to expose execution tools'); + } finally { await rpc.close(); await rm(root, { recursive: true, force: true }); } + }, 15_000); diff --git a/tests/agents/native-process-lifetime.test.ts b/tests/agents/native-process-lifetime.test.ts index 804097f..3082601 100644 --- a/tests/agents/native-process-lifetime.test.ts +++ b/tests/agents/native-process-lifetime.test.ts @@ -49,6 +49,7 @@ it('keeps an environment command process alive across completed root Turns', asy const runtime = new SessionRuntime({ sessionId: 'sess_process', agentId: 'agent_process', request: { ...planned, binary: process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'), binaryArguments: hostedCodexArguments(['app-server'], { access: 'enabled', allowed_domains: [] }, false, home), + managedPolicy: { workspace: home, network: { access: 'enabled', allowed_domains: [] }, credentialProxy: false }, workspace: home, executionWorkspace: home, environments: [{ environmentId: 'local', cwd: home }], environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, timeoutMs: 20000, persistent: true, prompt: '', sandbox: 'read-only', model: 'gpt-5.4', modelProvider: 'fixture', networkAccess: true, diff --git a/tests/agents/native-protocol-exports.test.ts b/tests/agents/native-protocol-exports.test.ts index 3899b25..4495a07 100644 --- a/tests/agents/native-protocol-exports.test.ts +++ b/tests/agents/native-protocol-exports.test.ts @@ -20,9 +20,7 @@ type Schema = { $ref?: string; }; -// The CLI exports embedded bundles rather than reflecting compiled Rust types. -// Check the actual parity artifact so a successful build cannot hide stale bundles. -native.each([false, true])('exports the compiled protocol with experimental=%s', async experimental => { +native.each([false, true])('exports the official public protocol with experimental=%s', async experimental => { const home = await mkdtemp(join(tmpdir(), 'rat-native-protocol-exports-')); const jsonDir = join(home, 'json'); const tsDir = join(home, 'typescript'); @@ -44,37 +42,19 @@ native.each([false, true])('exports the compiled protocol with experimental=%s', for (const errorSchema of [notifications.definitions?.CodexErrorInfo, flatBundle.definitions?.CodexErrorInfo]) { const errors = errorSchema?.anyOf?.flatMap(variant => variant.enum ?? []); - expect(errors).toEqual(expect.arrayContaining(['requestTimeout', 'creditBalanceExhausted'])); + expect(errors).toEqual(expect.arrayContaining(['usageLimitExceeded', 'contextWindowExceeded', 'other'])); + for (const privateError of ['requestTimeout', 'creditBalanceExhausted', 'executorVersionIncompatible']) expect(errors).not.toContain(privateError); } - for (const value of ['requestTimeout', 'creditBalanceExhausted']) expect(errorTypes).toContain(`"${value}"`); - - if (experimental) { - expect(checkpointRequests).toHaveLength(1); - expect(checkpointRequests![0]).toMatchObject({ properties: { - method: { enum: ['thread/checkpoint'] }, params: { $ref: '#/definitions/ThreadCheckpointParams' }, - } }); - expect(requestTypes).toContain('"method":"thread/checkpoint",id:RequestId,params:ThreadCheckpointParams,'); - const params = await schema(join(jsonDir, 'v2/ThreadCheckpointParams.json')); - const response = await schema(join(jsonDir, 'v2/ThreadCheckpointResponse.json')); - for (const value of [params, requests.definitions?.ThreadCheckpointParams, flatBundle.definitions?.ThreadCheckpointParams]) { - expectObjectSchema(value, { threadId: { type: 'string' }, expectedThreadIds: { type: 'array', items: { type: 'string' } } }); - } - for (const value of [response, flatBundle.definitions?.ThreadCheckpointResponse]) { - expectObjectSchema(value, { threadId: { type: 'string' }, threadIds: { type: 'array', items: { type: 'string' } }, flushed: { type: 'boolean' } }); - } - expect(compactTypeScript(await readFile(join(tsDir, 'v2/ThreadCheckpointParams.ts'), 'utf8'))) - .toBe('exporttypeThreadCheckpointParams={threadId:string,expectedThreadIds:Array,};'); - expect(compactTypeScript(await readFile(join(tsDir, 'v2/ThreadCheckpointResponse.ts'), 'utf8'))) - .toBe('exporttypeThreadCheckpointResponse={threadId:string,threadIds:Array,flushed:boolean,};'); - } else { - expect(checkpointRequests).toEqual([]); - for (const text of [JSON.stringify(requests), JSON.stringify(flatBundle), bundleText, requestTypes]) { - for (const privateName of ['thread/checkpoint', 'ThreadCheckpointParams', 'ThreadCheckpointResponse']) expect(text).not.toContain(privateName); - } - for (const name of ['ThreadCheckpointParams', 'ThreadCheckpointResponse']) { - await expect(readFile(join(jsonDir, `v2/${name}.json`))).rejects.toMatchObject({ code: 'ENOENT' }); - await expect(readFile(join(tsDir, `v2/${name}.ts`))).rejects.toMatchObject({ code: 'ENOENT' }); - } + for (const value of ['usageLimitExceeded', 'contextWindowExceeded', 'other']) expect(errorTypes).toContain(`"${value}"`); + const methods = requests.oneOf?.flatMap(request => request.properties?.method?.enum ?? []); + expect(methods).toEqual(expect.arrayContaining(['model/list', 'thread/start', 'thread/read', 'thread/resume', 'thread/loaded/list', 'thread/turns/list', 'turn/start', 'turn/interrupt'])); + expect(checkpointRequests).toEqual([]); + for (const text of [JSON.stringify(requests), JSON.stringify(flatBundle), bundleText, requestTypes]) { + for (const privateName of ['thread/checkpoint', 'ThreadCheckpointParams', 'ThreadCheckpointResponse']) expect(text).not.toContain(privateName); + } + for (const name of ['ThreadCheckpointParams', 'ThreadCheckpointResponse']) { + await expect(readFile(join(jsonDir, `v2/${name}.json`))).rejects.toMatchObject({ code: 'ENOENT' }); + await expect(readFile(join(tsDir, `v2/${name}.ts`))).rejects.toMatchObject({ code: 'ENOENT' }); } } finally { await rm(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); @@ -85,12 +65,6 @@ async function schema(path: string): Promise { return JSON.parse(await readFile(path, 'utf8')) as Schema; } -function expectObjectSchema(value: Schema | undefined, properties: Record): void { - expect(value?.type).toBe('object'); - expect(value?.properties).toEqual(properties); - expect(value?.required ? [...value.required].sort() : undefined).toEqual(Object.keys(properties).sort()); -} - function compactTypeScript(value: string): string { return value.replace(/\/\/[^\n]*|\/\*[\s\S]*?\*\//g, '').replace(/\s+/g, ''); } diff --git a/tests/agents/native-session-settings.test.ts b/tests/agents/native-session-settings.test.ts index 8ec9e28..2a2c254 100644 --- a/tests/agents/native-session-settings.test.ts +++ b/tests/agents/native-session-settings.test.ts @@ -8,8 +8,7 @@ import { expect, it } from 'vitest'; import { SessionRuntime } from '../../src/runner/session-runtime.js'; import type { SessionModelSettings } from '../../src/domain/session-execution.js'; -// This contract requires the repository's patched runtime, not the npm CLI. -it.skipIf(process.env.CODEX_REQUIRE_PARITY !== 'true')('changes model, reasoning effort and service tier across Turns on the same native thread', async () => { +it.each(['auto', 'priority'] as const)('changes supported settings on the same official native thread from initial tier %s', async initialTier => { const requests: Array> = []; const server = createServer(async (request, response) => { const chunks: Buffer[] = []; for await (const chunk of request) chunks.push(Buffer.from(chunk)); @@ -26,19 +25,26 @@ it.skipIf(process.env.CODEX_REQUIRE_PARITY !== 'true')('changes model, reasoning server.listen(0, '127.0.0.1'); await once(server, 'listening'); const address = server.address(); if (!address || typeof address === 'string') throw new Error('Missing fixture address'); const home = await mkdtemp(join(tmpdir(), 'rat-native-settings-')); + const provider = { name: 'local fixture', base_url: `http://127.0.0.1:${address.port}`, wire_api: 'responses', requires_openai_auth: false, supports_websockets: false }; const runtime = new SessionRuntime({ sessionId: 'session', agentId: 'agent', request: { binary: process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'), workspace: home, + // model/list uses startup provider configuration, before thread/start overrides. + binaryArguments: ['-c', 'model_provider="fixture"', ...Object.entries(provider).flatMap(([key, value]) => ['-c', `model_providers.fixture.${key}=${JSON.stringify(value)}`]), 'app-server'], environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, timeoutMs: 20_000, - prompt: '', persistent: true, sandbox: 'read-only', networkAccess: false, environments: [], model: 'gpt-5.4', modelProvider: 'fixture', - sessionConfig: { 'model_providers.fixture': { name: 'local fixture', base_url: `http://127.0.0.1:${address.port}`, wire_api: 'responses', requires_openai_auth: false, supports_websockets: false } }, + prompt: '', persistent: true, sandbox: 'read-only', networkAccess: false, environments: [], model: 'gpt-5.5', modelProvider: 'fixture', serviceTier: initialTier, + // The host's explicit capability enables a later admitted priority tier even + // when inherited settings disabled fast mode; it does not select a paid tier. + sessionConfig: { 'model_providers.fixture': provider, 'features.fast_mode': false }, } }); const settings: SessionModelSettings[] = [ - { model: 'gpt-5.4', reasoning: { effort: 'high' }, service_tier: 'priority' }, + { model: 'gpt-5.5', reasoning: { effort: 'high' }, service_tier: 'priority' }, { model: 'gpt-6-astra', reasoning: { effort: 'low' }, service_tier: 'flex' }, { model: 'gpt-6-astra', reasoning: { effort: 'low' }, service_tier: 'auto' }, + { model: 'gpt-6-astra', reasoning: { effort: 'high' }, service_tier: 'fast' }, { model: 'gpt-6-astra', reasoning: { effort: 'high' }, service_tier: 'default' }, - { model: 'gpt-6-astra', reasoning: { effort: null }, service_tier: 'fast' }, - ...(['none', 'minimal', 'medium', 'xhigh', 'max'] as const).map(effort => ({ model: 'gpt-6-astra', reasoning: { effort }, service_tier: 'auto' as const })), + { model: 'gpt-6-astra', reasoning: { effort: 'high' }, service_tier: 'priority' }, + { model: 'gpt-6-astra', reasoning: { effort: null }, service_tier: 'auto' }, + ...(['medium', 'xhigh', 'max'] as const).map(effort => ({ model: 'gpt-6-astra', reasoning: { effort }, service_tier: 'default' as const })), ]; const turnRequests: Array> = []; try { @@ -56,13 +62,30 @@ it.skipIf(process.env.CODEX_REQUIRE_PARITY !== 'true')('changes model, reasoning turnRequests.push(requests.at(-1)!); } expect(turnRequests.map(request => ({ model: request.model, reasoning: request.reasoning, service_tier: request.service_tier }))).toEqual([ - { model: 'gpt-5.4', reasoning: expect.objectContaining({ effort: 'high' }), service_tier: 'priority' }, + { model: 'gpt-5.5', reasoning: expect.objectContaining({ effort: 'high' }), service_tier: 'priority' }, { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'low' }), service_tier: 'flex' }, - { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'low' }), service_tier: 'auto' }, - { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'high' }), service_tier: 'default' }, - { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'low' }), service_tier: 'fast' }, - ...(['none', 'minimal', 'medium', 'xhigh', 'max'] as const).map(effort => ({ model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort }), service_tier: 'auto' })), + { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'low' }), service_tier: undefined }, + { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'high' }), service_tier: 'priority' }, + { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'high' }), service_tier: undefined }, + { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'high' }), service_tier: 'priority' }, + { model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort: 'low' }), service_tier: undefined }, + ...(['medium', 'xhigh', 'max'] as const).map(effort => ({ model: 'gpt-6-astra', reasoning: expect.objectContaining({ effort }), service_tier: undefined })), ]); + const count = requests.length; + const rejectedTurn = { id: 'retry-after-admission', object: 'agent.session.turn' as const, session_id: 'session', agent_id: 'agent', subagent_id: null, + status: 'queued' as const, created_at: 1, started_at: null, completed_at: null, error: null, usage: null }; + const input = [{ role: 'user' as const, content: [{ type: 'input_text' as const, text: 'Continue after a rejected setting.' }] }]; + await expect(runtime.start(rejectedTurn, input, { model: 'custom-uncatalogued-model', reasoning: { effort: 'low' }, service_tier: 'priority' })) + .rejects.toMatchObject({ status: 400, code: 'invalid_request', param: 'agent.service_tier' }); + expect(requests).toHaveLength(count); + expect(runtime.snapshot().rootThreadId).toBe(thread); + expect(runtime.snapshot().turns.some(binding => binding.turn.id === rejectedTurn.id)).toBe(false); + // Admission made no native attempt, so correcting that same public Turn is safe. + await runtime.start(rejectedTurn, input, { model: 'gpt-6-astra', reasoning: { effort: 'low' }, service_tier: 'priority' }); + for (let n = 0; n < 1_000 && runtime.snapshot().turns.find(binding => binding.turn.id === rejectedTurn.id)?.turn.status !== 'completed'; n++) await delay(10); + expect(runtime.snapshot().turns.find(binding => binding.turn.id === rejectedTurn.id)?.turn.status).toBe('completed'); + expect(requests.at(-1)).toMatchObject({ model: 'gpt-6-astra', service_tier: 'priority' }); + expect(runtime.snapshot().rootThreadId).toBe(thread); } finally { await runtime.close(); server.closeAllConnections(); await new Promise(resolve => server.close(() => resolve())); diff --git a/tests/agents/native-tools.test.ts b/tests/agents/native-tools.test.ts index 26ac534..20edaf6 100644 --- a/tests/agents/native-tools.test.ts +++ b/tests/agents/native-tools.test.ts @@ -64,7 +64,9 @@ it.each((['fixture', 'amazon-bedrock'] as const).flatMap(provider => (['programm const model = provider === 'amazon-bedrock' ? 'openai.gpt-5.6-terra' : 'gpt-5.5'; const planned = planSessionLaunch(planCodexLaunch({ version: '1', prompt: '', agent: { sandbox: 'read-only', capabilities: { webSearch: 'cached' } } }, home, 20_000, {}), { sessionId: 'sess_tools', turnId: 'turn_tools', input: [], environment: { type: 'none' }, - agent: sessionAgent({ model, reasoning: { effort: 'high', summary: 'concise' }, service_tier: 'priority', + // Tool conformance uses standard execution on both providers. Explicit tier + // admission and cross-Turn resets are covered by native-session-settings. + agent: sessionAgent({ model, reasoning: { effort: 'high', summary: 'concise' }, service_tier: 'auto', text: { verbosity: 'low', format: { type: 'json_schema', schema: { type: 'object', properties: { answer: { type: 'string' } }, required: ['answer'], additionalProperties: false } } }, tools: [ { type: 'web_search', mode: 'cached', context_size: 'low', allowed_domains: ['example.com'], location: { country: 'US', city: 'Seattle' } }, mode === 'programmatic' ? { type: 'programmatic_tool_calling', enabled: true } : { type: 'tool_search' }, @@ -102,9 +104,10 @@ it.each((['fixture', 'amazon-bedrock'] as const).flatMap(provider => (['programm expect(JSON.stringify(requests[1]?.input)).toContain('tool_search_output'); expect(JSON.stringify(requests[1]?.input)).toContain('lookup'); } - expect(requests[0]).toMatchObject({ model, ...(provider === 'fixture' || process.env.CODEX_REQUIRE_PARITY === 'true' ? { service_tier: 'priority' } : {}), reasoning: { effort: 'high', summary: 'concise' }, text: { + expect(requests[0]).toMatchObject({ model, reasoning: { effort: 'high', summary: 'concise' }, text: { verbosity: 'low', format: { type: 'json_schema', schema: { type: 'object', required: ['answer'] } }, } }); + for (const request of requests) expect(request).not.toHaveProperty('service_tier'); expect(requests[0]?.tools).toEqual(expect.arrayContaining([expect.objectContaining({ type: 'web_search', external_web_access: false, search_context_size: 'low', filters: { allowed_domains: ['example.com'] }, user_location: expect.objectContaining({ country: 'US', city: 'Seattle' }), })])); diff --git a/tests/agents/native-turn-errors.test.ts b/tests/agents/native-turn-errors.test.ts index 2b27f61..4fab553 100644 --- a/tests/agents/native-turn-errors.test.ts +++ b/tests/agents/native-turn-errors.test.ts @@ -8,7 +8,7 @@ import { expect, it } from 'vitest'; import { SessionRuntime } from '../../src/runner/session-runtime.js'; import type { Turn } from '../../src/domain/agents-api.js'; -const cases: Array<{ code: string; expected: NonNullable['code']; status?: number; patched?: boolean }> = [ +const cases: Array<{ code: string; expected: NonNullable['code']; status?: number; native?: unknown }> = [ { code: 'context_length_exceeded', expected: 'context_length_exceeded' }, { code: 'insufficient_quota', expected: 'usage_limit_exceeded' }, { code: 'cyber_policy', expected: 'cyber_policy' }, @@ -18,21 +18,23 @@ const cases: Array<{ code: string; expected: NonNullable['code']; { code: 'server_is_overloaded', expected: 'server_overloaded' }, { code: 'rate_limit_exceeded', expected: 'rate_limit_exceeded', status: 429 }, { code: 'server_error', expected: 'server_error', status: 500 }, - { code: 'credit_balance_exhausted', expected: 'credit_balance_exhausted', patched: true }, - { code: 'credit_balance_exhausted', expected: 'credit_balance_exhausted', status: 402, patched: true }, - { code: 'invalid_api_key', expected: 'authentication_error', status: 401, patched: true }, - { code: 'model_not_found', expected: 'resource_not_found', status: 404, patched: true }, - { code: 'invalid_request_error', expected: 'invalid_request', status: 400, patched: true }, - { code: 'context_length_exceeded', expected: 'context_length_exceeded', status: 400, patched: true }, - { code: 'insufficient_quota', expected: 'usage_limit_exceeded', status: 429, patched: true }, - { code: 'access_denied', expected: 'authentication_error', status: 403, patched: true }, - { code: 'service_unavailable', expected: 'server_overloaded', status: 503, patched: true }, - { code: 'timeout', expected: 'request_timeout', status: 408, patched: true }, - { code: 'gateway_timeout', expected: 'request_timeout', status: 504, patched: true }, + // Stock Codex deliberately collapses detailed quota causes into usageLimitExceeded. + { code: 'credit_balance_exhausted', expected: 'usage_limit_exceeded', native: 'usageLimitExceeded' }, + { code: 'credit_balance_exhausted', expected: 'internal_error', status: 402, native: { httpConnectionFailed: { httpStatusCode: 402 } } }, + { code: 'invalid_api_key', expected: 'authentication_error', status: 401 }, + { code: 'model_not_found', expected: 'resource_not_found', status: 404 }, + { code: 'invalid_request_error', expected: 'internal_error', status: 400, native: 'other' }, + { code: 'context_length_exceeded', expected: 'internal_error', status: 400, native: 'other' }, + { code: 'insufficient_quota', expected: 'usage_limit_exceeded', status: 429 }, + { code: 'access_denied', expected: 'authentication_error', status: 403 }, + { code: 'service_unavailable', expected: 'server_overloaded', status: 503 }, + { code: 'timeout', expected: 'request_timeout', status: 408 }, + { code: 'gateway_timeout', expected: 'request_timeout', status: 504 }, + // Unknown provider aliases remain opaque; do not parse diagnostics for their names. ...(['server_error', 'request_timeout', 'session_budget_exceeded', 'usage_limit_exceeded', 'server_overloaded'] as const) - .map(code => ({ code, expected: code, patched: true })), + .map(code => ({ code, expected: 'internal_error' as const, native: 'other' })), ]; -for (const scenario of cases) it.skipIf(scenario.patched && process.env.CODEX_REQUIRE_PARITY !== 'true')(`preserves provider failure ${scenario.code} over ${scenario.status ?? 'SSE'}`, async () => { +for (const scenario of cases) it(`projects official provider failure ${scenario.code} over ${scenario.status ?? 'SSE'} without inventing detail`, async () => { let requests = 0; const nativeErrors: unknown[] = []; const server = createServer(async (request, response) => { @@ -50,7 +52,7 @@ for (const scenario of cases) it.skipIf(scenario.patched && process.env.CODEX_RE const runtime = new SessionRuntime({ sessionId: 'session', agentId: 'agent', request: { binary: process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'), workspace: home, environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, timeoutMs: 15_000, - prompt: '', persistent: true, sandbox: 'read-only', networkAccess: false, environments: [], model: 'gpt-5.4', modelProvider: 'fixture', + prompt: '', persistent: true, sandbox: 'read-only', networkAccess: false, environments: [], model: 'gpt-5.5', modelProvider: 'fixture', onEvent: event => { if (event.method === 'error' || event.method === 'turn/completed') nativeErrors.push(event); }, sessionConfig: { 'model_providers.fixture': { name: 'local fixture', base_url: `http://127.0.0.1:${address.port}`, wire_api: 'responses', requires_openai_auth: false, supports_websockets: false, stream_max_retries: 0, request_max_retries: 0 } }, } }); @@ -63,6 +65,10 @@ for (const scenario of cases) it.skipIf(scenario.patched && process.env.CODEX_RE const turn = runtime.snapshot().turns[0]?.turn; expect(turn, JSON.stringify(nativeErrors)).toMatchObject({ status: 'failed', error: { code: scenario.expected } }); expect(turn?.error?.message).not.toContain('PRIVATE_PROVIDER_DIAGNOSTIC'); + if (scenario.native !== undefined) expect(nativeErrors).toContainEqual(expect.objectContaining({ + method: 'turn/completed', params: expect.objectContaining({ turn: expect.objectContaining({ error: expect.objectContaining({ codexErrorInfo: scenario.native }) }) }), + })); + // These fixtures explicitly disable native retries; this is not a retry-policy assertion. expect(requests).toBe(1); } finally { await runtime.close(); server.closeAllConnections(); diff --git a/tests/agents/session-item-events.test.ts b/tests/agents/session-item-events.test.ts index bf529b1..e2a5b6d 100644 --- a/tests/agents/session-item-events.test.ts +++ b/tests/agents/session-item-events.test.ts @@ -34,12 +34,27 @@ describe('native Item updates projected into public events', () => { const f = fixture(); const item = { id: 'command', type: 'commandExecution', command: 'work', cwd: '/workspace' }; f.emit('item/started', { item }); - f.emit('item/commandExecution/outputDelta', { itemId: item.id, delta: 'first\n' }); - f.emit('item/commandExecution/outputDelta', { itemId: item.id, delta: 'second\n' }); - f.emit('item/completed', { item: { ...item, status: 'completed', exitCode: 0, aggregatedOutput: null } }); + expect(f.emit('item/commandExecution/outputDelta', { itemId: item.id, delta: 'first\n' })).toEqual([]); + expect(f.emit('item/commandExecution/outputDelta', { itemId: item.id, delta: 'second\n' })).toEqual([]); + const events = f.emit('item/completed', { item: { ...item, status: 'completed', exitCode: 0, aggregatedOutput: null } }); + expect(events[0]).toMatchObject({ type: 'agent.output.command_execution_output.delta', delta: 'first\nsecond\n' }); expect(f.snapshot().items[0]).toMatchObject({ status: 'completed', exit_code: 0, output: 'first\nsecond\n' }); }); + it('publishes the canonical completed command output once when live output missed its prefix', () => { + const f = fixture(); + const item = { id: 'command', type: 'commandExecution', command: 'work', cwd: '/workspace' }; + f.emit('item/started', { item }); + expect(f.emit('item/commandExecution/outputDelta', { itemId: item.id, delta: 'late\n' })).toEqual([]); + expect(f.snapshot().items[0]).toMatchObject({ status: 'in_progress', output: 'late\n' }); + const terminal = { item: { ...item, status: 'completed', exitCode: 0, aggregatedOutput: 'early\nlate\n' } }; + const events = f.emit('item/completed', terminal); + expect(events.map(event => event.type)).toEqual(['agent.output.command_execution_output.delta', 'agent.session.turn.item.done']); + expect(events[0]).toMatchObject({ delta: 'early\nlate\n' }); + expect(f.emit('item/completed', terminal)).toEqual([]); + expect(f.snapshot().items[0]).toMatchObject({ output: 'early\nlate\n' }); + }); + it('retains command output across a sparse terminal snapshot without duplicating it', () => { const f = fixture(); const item = { id: 'command', type: 'commandExecution', command: 'work', cwd: '/workspace', status: 'completed', exitCode: 0 }; diff --git a/tests/agents/session-model-validation.test.ts b/tests/agents/session-model-validation.test.ts new file mode 100644 index 0000000..4cb1b7c --- /dev/null +++ b/tests/agents/session-model-validation.test.ts @@ -0,0 +1,50 @@ +import { expect, it } from 'vitest'; +import { admitNativeServiceTier, nativeServiceTier } from '../../src/domain/session-model-validation.js'; + +const catalog = [ + { id: 'catalog-entry', model: 'gpt-test', serviceTiers: [{ id: 'priority' }] }, + { id: 'standard-only', model: 'standard-only', serviceTiers: [] }, +]; + +it.each([ + [undefined, 'default'], ['auto', 'default'], ['default', 'default'], + ['fast', 'priority'], ['priority', 'priority'], ['flex', 'flex'], +])('normalizes public tier %s to an explicit native %s', (tier, expected) => { + expect(nativeServiceTier(tier)).toBe(expected); +}); + +it.each([undefined, 'auto', 'default'])('admits standard tier %s without a model catalog', tier => { + expect(admitNativeServiceTier(tier, { model: 'custom-model', provider: 'amazon-bedrock', models: undefined })).toBe('default'); +}); + +it('uses model/list identifiers and does not mutate its provider capability evidence', () => { + const before = structuredClone(catalog); + expect(admitNativeServiceTier('fast', { model: 'gpt-test', provider: 'openai', models: catalog })).toBe('priority'); + expect(admitNativeServiceTier('priority', { model: 'catalog-entry', provider: 'openai', models: catalog })).toBe('priority'); + expect(catalog).toEqual(before); +}); + +it('accepts stock Responses flex for a known model, while requiring advertised Bedrock tiers', () => { + expect(admitNativeServiceTier('flex', { model: 'standard-only', provider: 'openai', models: catalog })).toBe('flex'); + expect(() => admitNativeServiceTier('flex', { model: 'standard-only', provider: 'amazon-bedrock', models: catalog })) + .toThrow('The selected model and provider do not support this service tier'); + expect(admitNativeServiceTier('flex', { model: 'openai.gpt-test', provider: 'amazon-bedrock', models: [ + { id: 'openai.gpt-test', model: 'openai.gpt-test', serviceTiers: [{ id: 'flex' }] }, + ] })).toBe('flex'); +}); + +it.each([ + ['priority', { model: 'standard-only', provider: 'openai', models: catalog }], + ['priority', { model: 'openai.gpt-test', provider: 'amazon-bedrock', models: catalog }], + ['flex', { model: 'custom-model', provider: 'fixture', models: catalog }], + ['fast', { model: 'custom-model', provider: 'fixture', models: [] }], + ['priority', { model: 'gpt-test', provider: 'openai', models: [{ model: 'gpt-test', additionalSpeedTiers: ['priority'] }] }], + ['priority', { model: undefined, provider: 'openai', models: [{ serviceTiers: [{ id: 'priority' }] }] }], + ['PRIVATE_UNKNOWN_TIER', { model: 'gpt-test', provider: 'openai', models: catalog }], +])('rejects unsupported tier %s without exposing capability diagnostics', (tier, capability) => { + try { admitNativeServiceTier(tier, capability); throw new Error('Expected rejection'); } + catch (error) { + expect(error).toMatchObject({ status: 400, code: 'invalid_request', param: 'agent.service_tier' }); + expect((error as Error).message).not.toContain('PRIVATE'); + } +}); diff --git a/tests/agents/session-runtime.test.ts b/tests/agents/session-runtime.test.ts index b82eff5..2270b16 100644 --- a/tests/agents/session-runtime.test.ts +++ b/tests/agents/session-runtime.test.ts @@ -28,6 +28,8 @@ function fixture(lifetime?: 'bounded' | 'host-managed') { initialize: async () => {}, call: async (method, params) => { calls.push({ method, params }); + if (method === 'config/read') return { config: { model_provider: 'openai' } }; + if (method === 'model/list') return { data: [{ id: 'gpt-6-astra', model: 'gpt-6-astra', serviceTiers: [{ id: 'priority' }] }], nextCursor: null }; if (method === 'thread/start') return { thread: { id: 'root' } }; if (method === 'turn/start') { const id = `native-${++counter}`; @@ -70,14 +72,59 @@ describe('persistent native session runtime', () => { try { await f.runtime.initialize(); await f.runtime.start(rootTurn('first'), message); + expect(f.calls.some(({ method }) => method === 'model/list')).toBe(false); f.emit({ method: 'turn/completed', params: { threadId: 'root', turn: { id: 'native-1', status: 'completed' } } }); await f.controller().startSessionTurn!(rootTurn('second'), message, { model: 'gpt-6-astra', reasoning: { effort: 'low' }, service_tier: 'priority' }); const starts = f.calls.filter(({ method }) => method === 'turn/start'); expect(starts[0]!.params).toMatchObject({ model: 'fixture' }); expect(starts[1]!.params).toMatchObject({ model: 'gpt-6-astra', effort: 'low', serviceTier: 'priority' }); + expect(f.calls.filter(({ method }) => method === 'config/read' || method === 'model/list')).toEqual([ + { method: 'config/read', params: { includeLayers: false } }, + { method: 'model/list', params: { includeHidden: true, limit: 100 } }, + ]); expect(f.calls.filter(({ method }) => method === 'thread/start')).toHaveLength(1); } finally { await f.runtime.close(); } }); + + it('shares a pending tier admission for the same Turn while rejecting a different Turn', async () => { + const f = fixture(); + let release!: () => void; const blocked = new Promise(resolve => { release = resolve; }); + let entered!: () => void; const waiting = new Promise(resolve => { entered = resolve; }); + let first: Promise | undefined; + try { + await f.runtime.initialize(); + const call = f.rpc().call.bind(f.rpc()); + vi.spyOn(f.rpc(), 'call').mockImplementation(async (method, params) => { + if (method === 'model/list') { entered(); await blocked; } + return call(method, params); + }); + const settings = { model: 'gpt-6-astra', reasoning: { effort: 'low' as const }, service_tier: 'priority' as const }; + first = f.runtime.start(rootTurn('first'), message, settings); + await waiting; + const duplicate = f.runtime.start(rootTurn('first'), message, settings); + void duplicate.catch(() => {}); + expect(duplicate).toBe(first); + await expect(f.runtime.start(rootTurn('second'), message, settings)).rejects.toThrow('already has an active turn'); + expect(f.calls.filter(({ method }) => method === 'turn/start')).toEqual([]); + release(); + await Promise.all([first, duplicate]); + expect(f.calls.filter(({ method }) => method === 'model/list')).toHaveLength(1); + expect(f.calls.filter(({ method }) => method === 'turn/start')).toHaveLength(1); + } finally { release(); await first?.catch(() => {}); await f.runtime.close(); } + }); + + it('allows a corrected tier retry after unsupported admission without a native attempt', async () => { + const f = fixture(); + try { + await f.runtime.initialize(); + await expect(f.runtime.start(rootTurn('first'), message, { model: 'unknown-model', reasoning: { effort: 'low' }, service_tier: 'priority' })) + .rejects.toMatchObject({ code: 'invalid_request', param: 'agent.service_tier' }); + expect(f.calls.filter(({ method }) => method === 'turn/start')).toEqual([]); + expect(f.closed()).toBe(false); + await f.runtime.start(rootTurn('first'), message, { model: 'gpt-6-astra', reasoning: { effort: 'low' }, service_tier: 'priority' }); + expect(f.calls.filter(({ method }) => method === 'turn/start')).toHaveLength(1); + } finally { await f.runtime.close(); } + }); it.each([false, true])('retries a follow-up rejected before native admission, with start pending=%s', async (pending) => { const f = fixture(); let release!: () => void; const blocked = new Promise((resolve) => { release = resolve; }); @@ -148,7 +195,21 @@ describe('persistent native session runtime', () => { await expect(f.controller().interrupt()).rejects.toThrow('intended Session Turn'); expect(f.calls.filter(({ method }) => method === 'turn/interrupt' || method === 'turn/steer')).toEqual([]); await f.controller().steer('Current input', message, 'second'); - await f.controller().interrupt('second'); + let settled = false; + const interrupted = f.controller().interrupt('second').then(() => { settled = true; }); + // The fake RPC acknowledges immediately, but the public state must settle first. + await new Promise(resolve => setImmediate(resolve)); + expect(settled).toBe(false); + expect(f.runtime.snapshot().turns[1]?.turn.status).toBe('in_progress'); + await expect(f.runtime.start(rootTurn('third'), message)).rejects.toThrow('already has an active turn'); + f.emit({ method: 'turn/completed', params: { threadId: 'root', turn: { id: 'native-1', status: 'completed' } } }); + await new Promise(resolve => setImmediate(resolve)); + expect(settled).toBe(false); + f.emit({ method: 'turn/completed', params: { threadId: 'root', turn: { id: 'native-2', status: 'interrupted' } } }); + await interrupted; + expect(settled).toBe(true); + expect(f.runtime.snapshot().turns[1]?.turn.status).toBe('cancelled'); + await f.runtime.start(rootTurn('third'), message); expect(f.calls.filter(({ method }) => method === 'turn/interrupt' || method === 'turn/steer')).toEqual([ { method: 'turn/steer', params: { threadId: 'root', expectedTurnId: 'native-2', input: [{ type: 'text', text: 'Work' }] } }, { method: 'turn/interrupt', params: { threadId: 'root', turnId: 'native-2' } }, diff --git a/tests/agents/turn-errors.test.ts b/tests/agents/turn-errors.test.ts index 71399f3..9703723 100644 --- a/tests/agents/turn-errors.test.ts +++ b/tests/agents/turn-errors.test.ts @@ -4,29 +4,43 @@ import { bindSessionTurn, initialSessionRuntime, reduceSessionRuntime } from '.. it.each([ ['contextWindowExceeded', 'context_length_exceeded'], ['sessionBudgetExceeded', 'session_budget_exceeded'], - ['usageLimitExceeded', 'usage_limit_exceeded'], ['creditBalanceExhausted', 'credit_balance_exhausted'], + ['usageLimitExceeded', 'usage_limit_exceeded'], ['flexUnavailable', 'server_overloaded'], ['rateLimitExceeded', 'rate_limit_exceeded'], ['serverOverloaded', 'server_overloaded'], ['cyberPolicy', 'cyber_policy'], ['misalignmentPolicyViolation', 'cyber_policy'], ['internalServerError', 'server_error'], ['unauthorized', 'authentication_error'], - ['badRequest', 'invalid_request'], ['sandboxError', 'sandbox_error'], ['requestTimeout', 'request_timeout'], - ['executorVersionIncompatible', 'executor_version_incompatible'], ['unknown', 'internal_error'], + ['badRequest', 'invalid_request'], ['sandboxError', 'sandbox_error'], + ['creditBalanceExhausted', 'internal_error'], ['requestTimeout', 'internal_error'], + ['executorVersionIncompatible', 'internal_error'], ['unknown', 'internal_error'], ])('projects typed native %s as %s without its private diagnostics', (native, expected) => { const result = sessionTurnError({ codexErrorInfo: native, message: 'PRIVATE', additionalDetails: 'PRIVATE' }); expect(result.code).toBe(expected); expect(JSON.stringify(result)).not.toContain('PRIVATE'); }); -it.each([[401, 'authentication_error'], [403, 'authentication_error'], [404, 'resource_not_found'], [408, 'request_timeout'], +it.each([[401, 'authentication_error'], [402, 'internal_error'], [403, 'authentication_error'], [404, 'resource_not_found'], [408, 'request_timeout'], [429, 'rate_limit_exceeded'], [500, 'server_error'], [503, 'server_overloaded'], [504, 'request_timeout'], [422, 'invalid_request'], [null, 'connection_failed']])('maps typed HTTP status %s to %s', (status, expected) => { expect(sessionTurnError({ codexErrorInfo: { responseStreamConnectionFailed: { httpStatusCode: status } }, message: 'PRIVATE' }).code).toBe(expected); }); +it.each(['credit_balance_exhausted', 'request_timeout', 'executor_version_incompatible'] as const)('preserves richer explicit public failure %s from another runtime', code => { + expect(sessionTurnError({ code, message: 'PRIVATE' })).toMatchObject({ code }); + expect(JSON.stringify(sessionTurnError({ code, message: 'PRIVATE' }))).not.toContain('PRIVATE'); +}); + +it('never infers a code from diagnostic text or ambiguous native objects', () => { + for (const codexErrorInfo of ['other', { usageLimitExceeded: {}, creditBalanceExhausted: {} }]) { + expect(sessionTurnError({ codexErrorInfo, message: 'credit_balance_exhausted: PRIVATE', additionalDetails: 'request_timeout' }).code).toBe('internal_error'); + } + expect(sessionTurnError({ codexErrorInfo: 'other' }, { code: 'usage_limit_exceeded', message: 'PRIVATE' })) + .toEqual({ code: 'usage_limit_exceeded', message: 'The model provider usage limit has been reached.' }); +}); + it('ignores retry notifications and retains a specific failure through a sparse terminal notification', () => { const state = bindSessionTurn(initialSessionRuntime('session', 'agent', 'root'), 'native', { id: 'turn', object: 'agent.session.turn', session_id: 'session', agent_id: 'agent', subagent_id: null, status: 'in_progress', created_at: 1, started_at: 1, completed_at: null, error: null, usage: null }); - const event = { method: 'error', observedAt: 2, params: { threadId: 'root', turnId: 'native', error: { codexErrorInfo: 'creditBalanceExhausted', message: 'PRIVATE' } } }; + const event = { method: 'error', observedAt: 2, params: { threadId: 'root', turnId: 'native', error: { codexErrorInfo: 'usageLimitExceeded', message: 'PRIVATE' } } }; expect(reduceSessionRuntime(state, { ...event, params: { ...event.params, willRetry: true } })).toEqual(state); const failed = reduceSessionRuntime(state, event); const completed = reduceSessionRuntime(failed, { method: 'turn/completed', observedAt: 3, params: { threadId: 'root', turn: { id: 'native', status: 'failed', error: null } } }); - expect(completed.turns[0]?.turn.error?.code).toBe('credit_balance_exhausted'); + expect(completed.turns[0]?.turn.error?.code).toBe('usage_limit_exceeded'); expect(JSON.stringify(completed)).not.toContain('PRIVATE'); }); diff --git a/tests/pi/managed-subprocess.test.ts b/tests/pi/managed-subprocess.test.ts index 629a548..8fb5265 100644 --- a/tests/pi/managed-subprocess.test.ts +++ b/tests/pi/managed-subprocess.test.ts @@ -10,15 +10,15 @@ import { planCodexLaunch } from '../../src/runner/agent-planning.js'; import { createPiEffectBroker } from '../../src/runner/pi-effect-broker.js'; import { nodeSubprocessStdioProbe, restrictedNetworkSocketProbe } from '../../testing/local-runtime/subprocess-fixtures.js'; -// Stock and non-Linux runs skip the patched artifact contract. Strict parity +// Non-strict and non-Linux runs skip the installed runtime contract. Strict parity // requires an explicitly selected executable; missing prerequisites never pass. -describe.skipIf(process.platform !== 'linux' || process.env.CODEX_REQUIRE_PARITY !== 'true')('patched managed subprocess compatibility', () => { +describe.skipIf(process.platform !== 'linux' || process.env.CODEX_REQUIRE_PARITY !== 'true')('official managed subprocess compatibility', () => { it.each([ { name: 'captures Node subprocess stdin/stdout/stderr and preserves failures', command: [process.execPath, '-e', nodeSubprocessStdioProbe], output: 'local-subprocess-stdio-ok\n' }, - { name: 'permits local socket metadata while denying network and socket mutation', command: ['python3', '-c', restrictedNetworkSocketProbe], output: 'local-socket-only-ok\n' }, + { name: 'permits anonymous socketpairs while denying external and named socket connections', command: ['python3', '-c', restrictedNetworkSocketProbe], output: 'local-socket-only-ok\n' }, ])('$name', async ({ command, output }) => { const binary = process.env.CODEX_CONFORMANCE_BINARY; - if (!binary) throw new Error('Strict subprocess parity requires CODEX_CONFORMANCE_BINARY to select the patched artifact'); + if (!binary) throw new Error('Strict subprocess parity requires CODEX_CONFORMANCE_BINARY to select the official executable'); await access(binary, constants.X_OK); const workspace = await mkdtemp(join(tmpdir(), 'rat-managed-subprocess-')); let broker: Awaited> | undefined; diff --git a/tests/runner/codex-app-server.test.ts b/tests/runner/codex-app-server.test.ts index 0e9d4e0..e1c2dbb 100644 --- a/tests/runner/codex-app-server.test.ts +++ b/tests/runner/codex-app-server.test.ts @@ -2,6 +2,7 @@ import { describe, expect, it, vi } from 'vitest'; import { mkdtemp, rm, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; +import { managedCodexConfiguration } from '../../src/domain/codex-managed-policy.js'; import { runCodexAppServer, sandboxPolicyFor, @@ -123,6 +124,47 @@ describe('Codex app-server notifications', () => { }); }); + it.each([undefined, 'other-profile'])('rejects a managed policy without its selected profile (%s)', async permissions => { + const directory = await mkdtemp(join(tmpdir(), 'rat-app-managed-selection-')); + const server = join(directory, 'fake-app-server.mjs'); await writeFile(server, FAKE_APP_SERVER); + const events: string[] = []; + try { + await expect(runCodexAppServer({ binary: process.execPath, binaryArguments: [server], workspace: directory, environment: {}, timeoutMs: 3_000, + prompt: 'Must not start', sandbox: 'workspace-write', ...(permissions ? { permissions } : {}), + managedPolicy: { workspace: directory, network: { access: 'disabled', allowed_domains: [] }, credentialProxy: false }, + persistent: true, modelProvider: 'openai', networkAccess: false, onEvent: event => { events.push(event.method); }, + })).rejects.toThrow('permission profile is not selected'); + expect(events).not.toContain('test/threadParams'); + } finally { await rm(directory, { recursive: true, force: true }); } + }); + + it.each(['start', 'resume', 'fallback'] as const)('keeps the verified managed profile at every native boundary (%s)', async mode => { + const directory = await mkdtemp(join(tmpdir(), 'rat-app-managed-profile-')); + const fakeServer = join(directory, 'fake-app-server.mjs'); + await writeFile(fakeServer, FAKE_APP_SERVER); + const policy = { workspace: directory, network: { access: 'disabled' as const, allowed_domains: [] }, credentialProxy: false }; + const config = { config: managedCodexConfiguration(policy), layers: [ + { name: { type: 'sessionFlags' }, config: {} }, + { name: { type: 'user', file: join(directory, 'user/config.toml') }, config: {} }, + { name: { type: 'system', file: join(directory, 'system/config.toml') }, config: {} }, + ] }; + const events: Array<{ method: string; params: Record }> = []; + try { + await runCodexAppServer({ binary: process.execPath, binaryArguments: [fakeServer], workspace: directory, + environment: { FAKE_MANAGED_CONFIG: JSON.stringify(config), ...(mode === 'fallback' ? { FAKE_RESUME_ERROR: 'missing' } : {}) }, timeoutMs: 5_000, + prompt: 'Use the fixed managed policy', sandbox: 'workspace-write', permissions: 'rat_managed', managedPolicy: policy, + persistent: true, modelProvider: 'openai', networkAccess: false, + ...(mode !== 'start' ? { resumeThreadId: 'previous' } : {}), + onEvent: event => { events.push(event); }, onTurnStarted: controller => controller.steer('Complete'), + }); + const thread = events.find(event => event.method === 'test/threadParams')?.params; + const turn = events.find(event => event.method === 'test/turnParams')?.params; + expect(thread).toMatchObject({ permissions: 'rat_managed' }); expect(thread).not.toHaveProperty('sandbox'); + expect(thread?.config ?? {}).not.toHaveProperty('sandbox_workspace_write'); + expect(turn).toMatchObject({ permissions: 'rat_managed' }); expect(turn).not.toHaveProperty('sandboxPolicy'); + } finally { await rm(directory, { recursive: true, force: true }); } + }); + it('bridges events, fixed capabilities, and steering bidirectionally', async () => { const directory = await mkdtemp(join(tmpdir(), 'rat-app-server-test-')); const fakeServer = join(directory, 'fake-app-server.mjs'); @@ -281,6 +323,8 @@ input.on('line', (line) => { send({ method: 'test/initializeParams', params: message.params }); return; } + if (message.method === 'config/read') { send({ id: message.id, result: JSON.parse(process.env.FAKE_MANAGED_CONFIG) }); return; } + if (message.method === 'configRequirements/read') { send({ id: message.id, result: { requirements: null } }); return; } if (message.method === 'skills/list') { send({ id: message.id, result: { data: [{ cwd: message.params.cwds[0], skills: [{ name: 'test-skill', @@ -308,6 +352,7 @@ input.on('line', (line) => { } }); } else { send({ id: message.id, result: { thread: { id: 'thread-1' } } }); + send({ method: 'test/threadParams', params: message.params }); } return; } diff --git a/tests/runner/codex-cold-verification.test.ts b/tests/runner/codex-cold-verification.test.ts new file mode 100644 index 0000000..4a13984 --- /dev/null +++ b/tests/runner/codex-cold-verification.test.ts @@ -0,0 +1,134 @@ +import { spawn } from 'node:child_process'; +import { createServer } from 'node:http'; +import { once } from 'node:events'; +import { chown, mkdir, mkdtemp, readdir, readFile, rm, writeFile } from 'node:fs/promises'; +import { join, resolve } from 'node:path'; +import { tmpdir } from 'node:os'; +import { setTimeout as delay } from 'node:timers/promises'; +import { expect, it } from 'vitest'; +import { assertCheckpointStartupSafe, prepareCodexColdVerification } from '../../src/runner/codex-cold-verification.js'; +import { CodexRpcClient } from '../../src/adapters/codex-rpc.js'; +import { nativeThreadHistory, type NativeCheckpointManifest } from '../../src/domain/native-checkpoint.js'; +import { stopCheckpointWriters } from '../../src/runner/checkpoint-writers.js'; +import { syncWorkspaceStorage } from '../../src/runner/workspace-sync.js'; + +it.each(['hooks', 'mcp_servers', 'plugins', 'notify', 'apps', 'browser_use', 'computer_use', 'desktop'])('rejects active %s before shutdown', key => { + expect(() => assertCheckpointStartupSafe({ config: { [key]: { enabled: true } } }, {})).toThrow('startup integrations'); + expect(() => assertCheckpointStartupSafe({ config: {} }, { [key]: ['active'] })).toThrow('startup integrations'); +}); +it('accepts absent defaults but rejects unknown native storage configuration', () => { + expect(() => assertCheckpointStartupSafe({ config: { hooks: null, plugins: {}, mcp_servers: {}, notify: [] } }, {})).not.toThrow(); + expect(() => assertCheckpointStartupSafe({ config: { experimental_thread_store: true } }, {})).toThrow('storage'); +}); + +// Run this in the disposable worker image as root, with its dedicated agent UID. +// It must never run in the user's host service or against their native home. +const guest = it.skipIf(process.env.CODEX_COLD_NATIVE_E2E !== 'true'); +guest.each(['legacy', 'paginated'] as const)('verifies real root and child histories inside the offline namespace (%s)', async historyMode => { + const f = await guestFixture(historyMode); + try { + const stages = new Set((await readdir(tmpdir())).filter(name => name.startsWith('rat-cold-native-'))); + const verifier = await prepareCodexColdVerification({ request: f.request, stateRoot: f.root, manifest: f.manifest }); + try { + const stage = (await readdir(tmpdir())).find(name => name.startsWith('rat-cold-native-') && !stages.has(name)); + if (!stage) throw new Error('Missing private verifier staging directory'); + await hostileStagingAttempt(join(tmpdir(), stage), f.root); + await f.stop(); + // Invalid synthetic auth would fail a verifier that accidentally copied it. + await writeFile(join(f.home, 'auth.json'), '{"access_token":"SYNTHETIC_DO_NOT_USE"}'); + const before = f.requests(); + const evidence = await verifier.verify(f.manifest); + expect(evidence).toMatchObject({ kind: 'codex-cold-native', threadIds: f.manifest.threads.map(thread => thread.id), historyModes: historyMode === 'legacy' ? ['legacy', 'paginated'] : ['paginated'] }); + expect(f.requests()).toBe(before); + expect(await readFile(join(f.home, 'auth.json'), 'utf8')).toContain('SYNTHETIC_DO_NOT_USE'); + } finally { await verifier.close(); } + } finally { await f.close(); } +}, 60_000); + +guest.each(['legacy', 'paginated'] as const)('rejects a corrupt stopped candidate without removing its source (%s)', async historyMode => { + const f = await guestFixture(historyMode); + try { + const verifier = await prepareCodexColdVerification({ request: f.request, stateRoot: f.root, manifest: f.manifest }); + try { + await f.stop(); + if (historyMode === 'legacy') { + for (const path of await files(join(f.home, 'sessions'))) if (path.endsWith('.jsonl')) await writeFile(path, ''); + } else { + for (const path of await files(f.home)) if (/thread_history_\d+\.sqlite$/.test(path)) { + await writeFile(path, 'corrupt'); await rm(`${path}-wal`, { force: true }); await rm(`${path}-shm`, { force: true }); + } + } + await syncWorkspaceStorage(f.root); + await expect(verifier.verify(f.manifest)).rejects.toThrow(); + expect((await readdir(f.home)).length).toBeGreaterThan(0); + } finally { await verifier.close(); } + } finally { await f.close(); } +}, 60_000); + +async function guestFixture(historyMode: 'legacy' | 'paginated') { + if (process.getuid?.() !== 0) throw new Error('Run CODEX_COLD_NATIVE_E2E only as root in the disposable worker container'); + const root = await mkdtemp(join(tmpdir(), 'rat-native-cold-guest-')); + const home = join(root, 'codex-home'); const workspace = join(root, 'workspace'); + const identity = { uid: 10001, gid: 10001 }; + await chown(root, identity.uid, identity.gid); + for (const directory of [home, workspace, '/workspace']) { await mkdir(directory, { recursive: true }); await chown(directory, identity.uid, identity.gid); } + let requests = 0; let rootRequests = 0; + const server = createServer(async (request, response) => { + if (request.method !== 'POST') { response.writeHead(426, { Connection: 'close' }).end(); return; } + const parts: Buffer[] = []; for await (const part of request) parts.push(Buffer.from(part)); + if (!request.url?.endsWith('/responses')) { response.writeHead(404).end(); return; } + const body = JSON.parse(Buffer.concat(parts).toString()) as { input: Array<{ type?: string; recipient?: string }> }; + requests++; + const child = body.input.some(item => item.type === 'agent_message' && item.recipient === '/root/cold_child'); + if (!child) rootRequests++; + const id = `response_${requests}`; + const item = !child && rootRequests === 1 + ? { type: 'function_call', id: 'spawn', call_id: 'spawn', namespace: 'collaboration', name: 'spawn_agent', arguments: JSON.stringify({ task_name: 'cold_child', message: 'CHILD_INPUT', fork_turns: 'none' }) } + : { type: 'message', id: `message_${requests}`, role: 'assistant', phase: 'final_answer', content: [{ type: 'output_text', text: child ? 'CHILD_PERSISTED' : 'ROOT_PERSISTED' }] }; + response.writeHead(200, { 'content-type': 'text/event-stream' }); + response.end([{ type: 'response.created', response: { id } }, { type: 'response.output_item.done', item }, { type: 'response.completed', response: { id } }].map(event => `data: ${JSON.stringify(event)}\n\n`).join('')); + }); + server.on('upgrade', (_request, socket) => { socket.end('HTTP/1.1 426 Upgrade Required\r\nConnection: close\r\nContent-Length: 0\r\n\r\n'); }); + server.listen(0, '127.0.0.1'); await once(server, 'listening'); + const address = server.address(); if (!address || typeof address === 'string') throw new Error('Missing fixture port'); + const completed = new Set(); let childId: string | undefined; let childActivityDone = false; + const binary = process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'); + const rpc = new CodexRpcClient({ binary, cwd: workspace, environment: { PATH: '/usr/bin:/bin', HOME: home, CODEX_HOME: home, CODEX_API_KEY: 'synthetic-loopback-fixture-only' }, identity, + binaryArguments: ['-c', `openai_base_url="http://127.0.0.1:${address.port}"`, '-c', 'features.responses_websockets=false', '-c', 'features.responses_websockets_v2=false', 'app-server'], + onEvent: event => { + const value = event.params.item as { type?: string; agentThreadId?: string; kind?: string } | undefined; + if (value?.type === 'subAgentActivity' && value.agentThreadId) { childId = value.agentThreadId; if (value.kind === 'completed') childActivityDone = true; } + if (event.method === 'turn/completed') completed.add(String(event.params.threadId)); + } }); + let stopped = false; + const close = async () => { await rpc.close(); await stopCheckpointWriters(identity.uid); server.closeAllConnections(); await new Promise(done => server.close(() => done())); await rm(root, { recursive: true, force: true }); }; + try { + await rpc.initialize().catch(error => { throw new Error('Source fixture initialize failed', { cause: error }); }); + const call = (method: string, params: unknown) => rpc.call(method, params).catch(error => { throw new Error(`Source fixture ${method} failed`, { cause: error }); }); + const started = await call('thread/start', { cwd: '/workspace', modelProvider: 'openai', model: 'gpt-5.5', historyMode, approvalPolicy: 'never', sandbox: 'read-only', ephemeral: false, + config: { openai_base_url: `http://127.0.0.1:${address.port}`, 'features.responses_websockets': false, 'features.responses_websockets_v2': false, + 'features.multi_agent': true, 'features.multi_agent_v2': true, 'features.plugins': false, 'features.apps': false, 'features.hooks': false, 'features.goals': false } }) as { thread: { id: string } }; + await call('turn/start', { threadId: started.thread.id, input: [{ type: 'text', text: 'ROOT_INPUT: delegate one child.' }] }); + for (let count = 0; count < 1500 && (!childId || !completed.has(started.thread.id) || !completed.has(childId) || !childActivityDone); count++) await delay(10); + if (!childId || completed.size !== 2 || !childActivityDone) throw new Error('Native fixture did not complete'); + const threads: Record[] = []; + for (const threadId of [started.thread.id, childId]) { + const result = await call('thread/read', { threadId, includeTurns: true }) as { thread: unknown }; + threads.push(nativeThreadHistory(result.thread)); + } + const manifest: NativeCheckpointManifest = { rootThreadId: started.thread.id, hostJournalDigest: 'a'.repeat(64), threads }; + const request = { binary, workspace, executionWorkspace: '/workspace', environment: { CODEX_HOME: home }, identity, timeoutMs: 30_000, prompt: '', sandbox: 'read-only' as const, persistent: true, modelProvider: 'openai', networkAccess: false, + managedPolicy: { workspace: '/workspace', network: { access: 'disabled' as const, allowed_domains: [] }, credentialProxy: false } }; + return { root, home, request, manifest, requests: () => requests, close, + stop: async () => { if (stopped) return; await rpc.closeCheckpoint(); await stopCheckpointWriters(identity.uid); await syncWorkspaceStorage(root); stopped = true; } }; + } catch (error) { await close(); throw error; } +} +async function files(root: string): Promise { return (await Promise.all((await readdir(root, { withFileTypes: true })).map(async entry => entry.isDirectory() ? files(join(root, entry.name)) : [join(root, entry.name)]))).flat(); } + +async function hostileStagingAttempt(stage: string, root: string): Promise { + const victim = join(root, 'root-only-victim'); await mkdir(victim, { mode: 0o700 }); + const script = `const fs=require('node:fs');let blocked=0;for(const target of ['candidate','verify/home']){try{fs.symlinkSync(process.argv[2],process.argv[1]+'/'+target)}catch(error){if(['EACCES','EPERM','EEXIST'].includes(error.code))blocked++}};if(blocked!==2)process.exit(1);fs.writeFileSync(process.argv[1]+'/verify/home/config.toml','notify = ["false"]');`; + const child = spawn(process.execPath, ['-e', script, stage, victim], { uid: 10001, gid: 10001, env: {}, stdio: 'ignore' }); + const [code] = await once(child, 'close'); expect(code).toBe(0); + expect(await readdir(victim)).toEqual([]); +} diff --git a/tests/runner/managed-setup-admission.test.ts b/tests/runner/managed-setup-admission.test.ts index 5a6bdff..5f1513b 100644 --- a/tests/runner/managed-setup-admission.test.ts +++ b/tests/runner/managed-setup-admission.test.ts @@ -6,6 +6,7 @@ import { prepareHostedEnvironment } from '../../src/runner/hosted-environment.js import { planCodexLaunch } from '../../src/runner/agent-planning.js'; import { publicTemplate } from '../../src/domain/environment-planning.js'; import { sessionAgent } from '../../src/core/session-planning.js'; +import { managedCodexConfiguration } from '../../src/domain/codex-managed-policy.js'; it('refuses an unenforced executor before materializing input, running setup, or publishing readiness', async () => { const root = await mkdtemp(join(tmpdir(), 'rat-setup-admission-')); @@ -23,6 +24,12 @@ createInterface({input:process.stdin}).on('line', line => { appendFileSync(${JSON.stringify(invocations)},JSON.stringify(request.method)+'\\n'); const reply=result=>process.stdout.write(JSON.stringify({id:request.id,result})+'\\n'); if(request.method==='initialize')return reply({userAgent:'unconfined-test-executor'}); + if(request.method==='config/read')return reply(${JSON.stringify({ + config: managedCodexConfiguration({ workspace, network: { access: 'disabled', allowed_domains: [] }, credentialProxy: false }), + layers: [{ name: { type: 'sessionFlags' }, config: {} }, + ...['user', 'system'].map(type => ({ name: { type, file: join(root, type, 'config.toml') }, config: {} }))], + })}); + if(request.method==='configRequirements/read')return reply({requirements:null}); if(request.method==='command/exec')return execFile(request.params.command[0],request.params.command.slice(1),{cwd:request.params.cwd},(error,stdout,stderr)=>reply({exitCode:error?.code??0,stdout,stderr})); throw new Error('Unexpected inference or native operation'); }); @@ -36,7 +43,7 @@ createInterface({input:process.stdin}).on('line', line => { try { await expect(prepareHostedEnvironment({ launch, workspace, plan, stateDirectory, artifacts: { getBytes: async () => { throw new Error('Unexpected artifact read'); } } })) .rejects.toThrow('Refusing to expose execution tools'); - expect((await readFile(invocations, 'utf8')).trim().split('\n').map(line => JSON.parse(line))).toEqual(['initialize', 'command/exec']); + expect((await readFile(invocations, 'utf8')).trim().split('\n').map(line => JSON.parse(line))).toEqual(['initialize', 'config/read', 'configRequirements/read', 'command/exec']); expect(await readdir(workspace)).toEqual([]); expect(await readdir(stateDirectory)).toEqual([]); } finally { await rm(root, { recursive: true, force: true }); } diff --git a/tests/runner/native-checkpoint-planning.test.ts b/tests/runner/native-checkpoint-planning.test.ts new file mode 100644 index 0000000..c8f1673 --- /dev/null +++ b/tests/runner/native-checkpoint-planning.test.ts @@ -0,0 +1,60 @@ +import { expect, it } from 'vitest'; +import { initialSessionRuntime, type SessionRuntimeState } from '../../src/core/session-runtime-planning.js'; +import { planNativeCheckpoint } from '../../src/core/native-checkpoint-planning.js'; +import { projectSessionItems } from '../../src/core/session-run-projection.js'; +import type { Subagent, Turn } from '../../src/domain/agents-api.js'; + +const publicTurn = { id: 'public-turn', status: 'completed', subagent_id: null } as Turn; +const message = (id: string, text = 'acknowledged') => ({ type: 'agentMessage', id, text, phase: 'final_answer' }); +function fixture(items: unknown[], historyMode = 'paginated') { + const state: SessionRuntimeState = { ...initialSessionRuntime('session', 'agent', 'root'), turns: [{ threadId: 'root', nativeTurnId: 'native-turn', turn: publicTurn, + items: projectSessionItems(publicTurn.id, items.map(item => ({ method: 'item/completed', params: { item } }))) }] }; + const thread = { id: 'root', parentThreadId: null, sessionId: 'root', ephemeral: false, historyMode, turns: [{ id: 'native-turn', status: 'completed', items }] }; + return { state, thread }; +} +it('allows only known legacy display identity normalization while retaining ordered content', () => { + const f = fixture([message('live-first'), message('live-second', 'second')], 'legacy'); + f.thread.turns[0]!.items = [message('stored-1'), message('stored-2', 'second')]; + const planned = planNativeCheckpoint(f.state, [f.thread]); + expect(planned.hostJournalDigest).toMatch(/^[a-f0-9]{64}$/); + f.thread.turns[0]!.items.reverse(); + expect(() => planNativeCheckpoint(f.state, [f.thread])).toThrow('item content'); +}); +it('does not match two identical acknowledged legacy messages to one stored message', () => { + const f = fixture([message('first'), message('second')], 'legacy'); + f.thread.turns[0]!.items = [message('stored-1')]; + expect(() => planNativeCheckpoint(f.state, [f.thread])).toThrow('item content'); +}); +it('does not normalize paginated item identity or native turn identity', () => { + const f = fixture([message('original')]); + f.thread.turns[0]!.items = [message('replacement')]; + expect(() => planNativeCheckpoint(f.state, [f.thread])).toThrow('item content'); + f.thread.turns[0]!.id = 'different-turn'; + expect(() => planNativeCheckpoint(f.state, [f.thread])).toThrow('Session turn'); +}); +it.each(['text', 'tool-output'])('rejects missing acknowledged %s', kind => { + const item = kind === 'text' ? message('message') : { type: 'dynamicToolCall', id: 'tool', callId: 'call', tool: 'fixture', arguments: {}, status: 'completed', success: true, contentItems: [{ type: 'inputText', text: 'acknowledged tool output' }] }; + const f = fixture([item]); + f.thread.turns[0]!.items = kind === 'text' ? [message('message', 'different')] : [{ ...item, contentItems: [{ type: 'inputText', text: 'different' }] }]; + expect(() => planNativeCheckpoint(f.state, [f.thread])).toThrow('item content'); +}); +it('compares persisted coordination recipients while separately digesting host-only prompts', () => { + const f = fixture([]); + f.state.subagents = [{ id: 'child', parent_agent_id: 'agent' } as Subagent]; + f.state.coordinationCalls = { call: { threadId: 'root', turnId: 'native-turn', name: 'spawn_agent', arguments: { message: 'journal-owned prompt' }, recipients: ['child'] } }; + f.state.turns[0]!.items = [{ type: 'create_subagent_call', id: 'call', turn_id: publicTurn.id, status: 'completed', agent_id: 'agent', content: [{ type: 'output_text', text: 'journal-owned prompt' }], model: null, reasoning_effort: null }]; + f.thread.turns[0]!.items = [{ type: 'subAgentActivity', id: 'call', kind: 'started', agentThreadId: 'child' }]; + const child = { ...f.thread, id: 'child', parentThreadId: 'root', turns: [{ id: 'child-turn', status: 'completed', items: [message('child-output')] }] }; + const planned = planNativeCheckpoint(f.state, [f.thread, child]); + expect(planned.threads.map(thread => thread.id)).toEqual(['root', 'child']); + f.thread.turns[0]!.items = [{ type: 'subAgentActivity', id: 'call', kind: 'started', agentThreadId: 'different-child' }]; + expect(() => planNativeCheckpoint(f.state, [f.thread, child])).toThrow('recipients'); +}); + +it('rejects reparenting a known child under a known sibling', () => { + const f = fixture([message('root-output')]); + f.state.subagents = [{ id: 'child', parent_agent_id: 'agent' } as Subagent, { id: 'sibling', parent_agent_id: 'agent' } as Subagent]; + const child = { ...f.thread, id: 'child', parentThreadId: 'sibling', turns: [{ id: 'child-turn', status: 'completed', items: [message('child-output')] }] }; + const sibling = { ...f.thread, id: 'sibling', parentThreadId: 'root', turns: [{ id: 'sibling-turn', status: 'completed', items: [message('sibling-output')] }] }; + expect(() => planNativeCheckpoint(f.state, [f.thread, sibling, child])).toThrow('parent differs'); +}); diff --git a/tests/runner/session-checkpoint.test.ts b/tests/runner/session-checkpoint.test.ts index f1cbcfd..3288886 100644 --- a/tests/runner/session-checkpoint.test.ts +++ b/tests/runner/session-checkpoint.test.ts @@ -1,17 +1,23 @@ import { describe, expect, it, vi } from 'vitest'; import { SessionRuntime, type SessionCheckpointOptions } from '../../src/runner/session-runtime.js'; import { WorkspaceAdmission } from '../../src/runner/workspace-handoff.js'; -import { CodexRpcError, type CodexRpcClient, type CodexRpcEvent } from '../../src/adapters/codex-rpc.js'; +import type { CodexRpcClient, CodexRpcEvent } from '../../src/adapters/codex-rpc.js'; import type { Turn } from '../../src/domain/agents-api.js'; import type { WorkspaceCheckpoint } from '../../src/domain/workspace-checkpoint.js'; +import { nativeCheckpointEvidence } from '../../src/domain/native-checkpoint.js'; -const checkpoint: WorkspaceCheckpoint = { id: 'checkpoint', source: { runId: 'source', generation: 'generation' }, sandboxId: 'sandbox', setupDigest: 'a'.repeat(64), policyDigest: 'b'.repeat(64), rootThreadId: 'root', lastRootTurnId: null, lastNativeTurnId: null, createdAt: 1, reason: 'hibernate' }; +const checkpoint = { id: 'checkpoint', rootThreadId: 'root' } as WorkspaceCheckpoint; +const turn: Turn = { id: 'turn', session_id: 'session', agent_id: 'agent', subagent_id: null, object: 'agent.session.turn', status: 'queued', created_at: 1, started_at: null, completed_at: null, usage: null, error: null }; +const nativeItem = { id: 'message', type: 'agentMessage', text: 'durable output', phase: 'final_answer' }; +const history = (id = 'root') => ({ id, sessionId: id, parentThreadId: id === 'root' ? null : 'root', ephemeral: false, historyMode: 'paginated', turns: [{ id: id === 'root' ? 'native-turn' : 'child-turn', status: 'completed', items: [nativeItem] }] }); -function fixture(requiredResumeThreadId?: string, initialTurnId?: string) { +function fixture() { let handlers!: ConstructorParameters[0]; const order: string[] = []; + const verify = vi.fn(async manifest => { order.push('verify'); return nativeCheckpointEvidence(manifest); }); const ports: SessionCheckpointOptions = { admission: new WorkspaceAdmission(), + prepareNativeVerification: vi.fn(async () => ({ verify, close: vi.fn(async () => {}) })), begin: vi.fn(async () => { order.push('begin'); }), stopRemainingWriters: vi.fn(async () => { order.push('writers'); }), flushJournal: vi.fn(async () => { order.push('journal'); }), @@ -24,288 +30,94 @@ function fixture(requiredResumeThreadId?: string, initialTurnId?: string) { call: vi.fn(async (method: string, params: unknown): Promise => { if (method === 'thread/start' || method === 'thread/resume') return { thread: { id: 'root' } }; if (method === 'turn/start') return { turn: { id: 'native-turn' } }; - if (method === 'thread/loaded/list') return { data: ['root', 'child'], nextCursor: null }; - if (method === 'thread/turns/list') return { data: [], nextCursor: null }; - if (method === 'thread/checkpoint') { - const { threadId, expectedThreadIds } = params as { threadId: string; expectedThreadIds: string[] }; - order.push('native-checkpoint'); return { threadId, threadIds: expectedThreadIds, flushed: true }; - } + if (method === 'thread/loaded/list') return { data: ['root'], nextCursor: null }; + if (method === 'thread/read') return { thread: history((params as { threadId: string }).threadId) }; + if (method === 'config/read') return { config: {} }; + if (method === 'configRequirements/read') return { requirements: null }; throw new Error(`Unexpected method ${method}`); }), closeCheckpoint: vi.fn(async () => { order.push('native-exit'); handlers.onClose!(); }), close: vi.fn(async () => { handlers.onClose!(); }), }; const runtime = new SessionRuntime({ sessionId: 'session', agentId: 'agent', lifetime: 'host-managed', checkpoint: ports, - ...(requiredResumeThreadId ? { requiredResumeThreadId } : {}), - ...(initialTurnId ? { initialTurnId } : {}), request: { binary: 'unused', workspace: '/workspace', environment: {}, timeoutMs: 10_000, prompt: '', sandbox: 'read-only', persistent: true, modelProvider: 'openai', model: 'fixture', networkAccess: false }, client: options => { handlers = options; return rpc; }, }); - return { runtime, ports, rpc, order, disconnect: () => handlers.onClose!(), emit: (event: CodexRpcEvent) => handlers.onEvent!(event), - request: (event: CodexRpcEvent & { requestId: string | number }) => handlers.onServerRequest!(event) }; + const emit = (event: CodexRpcEvent) => handlers.onEvent!(event); + return { runtime, ports, rpc, order, verify, emit, complete: async () => { + await runtime.initialize(); await runtime.start(turn, []); + emit({ method: 'item/completed', params: { threadId: 'root', turnId: 'native-turn', item: nativeItem } }); + emit({ method: 'turn/completed', params: { threadId: 'root', turn: { id: 'native-turn', status: 'completed' } } }); + } }; } -const turn: Turn = { id: 'turn', session_id: 'session', agent_id: 'agent', subagent_id: null, object: 'agent.session.turn', status: 'queued', created_at: 1, started_at: null, completed_at: null, usage: null, error: null }; - -describe('native Session checkpoint integration', () => { - it('keeps an empty unmaterialized thread alive instead of publishing an unresumable checkpoint', async () => { - const f = fixture(); - try { - await f.runtime.initialize(); - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => { - if (method === 'thread/turns/list') throw new Error('thread is not materialized yet'); - return call(method, params); - }); - await expect(f.runtime.checkpoint()).rejects.toThrow('not materialized'); - expect(f.ports.begin).not.toHaveBeenCalled(); - expect(f.rpc.close).not.toHaveBeenCalled(); - await expect(f.ports.admission.run(async () => 'open')).resolves.toBe('open'); - } finally { await f.runtime.close(); } - }); - it('does not mistake the gap before a replacement admits its accepted first Turn for idleness', async () => { - const f = fixture('root', turn.id); - try { - await f.runtime.initialize(); - await expect(f.runtime.checkpoint()).rejects.toThrow('active turns'); - expect(f.ports.begin).not.toHaveBeenCalled(); - await f.runtime.start(turn, []); - expect(f.rpc.call).toHaveBeenCalledWith('turn/start', expect.anything()); - } finally { await f.runtime.close(); } - }); - - it('holds Run completion until every flush and the durable commit have finished', async () => { - const f = fixture(); - await f.runtime.initialize(); - let finished = false; - void f.runtime.finished.then(() => { finished = true; }); - vi.mocked(f.ports.commit).mockImplementationOnce(async state => { - expect(finished).toBe(false); - expect(state.rootThreadId).toBe('root'); +describe('stock native Session checkpoint', () => { + it('publishes only after EOF, stopped writers, journal, sync and cold verification', async () => { + const f = fixture(); await f.complete(); + let finished = false; void f.runtime.finished.then(() => { finished = true; }); + vi.mocked(f.ports.commit).mockImplementationOnce(async (_state, evidence) => { + expect(finished).toBe(false); expect(evidence).toMatchObject({ kind: 'codex-cold-native', threadIds: ['root'] }); f.order.push('commit'); return checkpoint; }); await expect(f.runtime.checkpoint()).resolves.toEqual(checkpoint); await f.runtime.finished; - expect(f.order).toEqual(['begin', 'native-checkpoint', 'native-exit', 'writers', 'journal', 'sync', 'commit']); - expect(f.rpc.call.mock.calls.filter(([method]) => method === 'thread/checkpoint')).toEqual([ - ['thread/checkpoint', { threadId: 'root', expectedThreadIds: ['root', 'child'] }, 35_000], - ]); - expect(f.rpc.call.mock.calls.filter(([method]) => method === 'thread/turns/list').map(([, params]) => params)).toEqual([ - { threadId: 'root', limit: 1, itemsView: 'summary' }, { threadId: 'child', limit: 1, itemsView: 'summary' }, - { threadId: 'root', limit: 1, itemsView: 'summary' }, { threadId: 'child', limit: 1, itemsView: 'summary' }, - ]); - expect(finished).toBe(true); + expect(f.order).toEqual(['begin', 'native-exit', 'writers', 'journal', 'sync', 'verify', 'commit']); + expect(f.rpc.call.mock.calls.some(([method]) => method === 'thread/checkpoint')).toBe(false); expect(() => f.runtime.assertSuccessfulShutdown()).not.toThrow(); - await expect(f.ports.admission.run(async () => {})).rejects.toThrow(); - }); - - it('rejects busy checkpointing before durable transition and keeps accepting work', async () => { - const f = fixture(); - try { - await f.runtime.initialize(); - await f.runtime.start(turn, []); - await expect(f.runtime.checkpoint()).rejects.toThrow(); - expect(f.ports.begin).not.toHaveBeenCalled(); - expect(f.rpc.close).not.toHaveBeenCalled(); - await expect(f.ports.admission.run(async () => 'accepted')).resolves.toBe('accepted'); - expect(() => f.runtime.assertSuccessfulShutdown()).not.toThrow(); - } finally { await f.runtime.close(); } - }); - - it.each(['flush', 'exit', 'sync', 'commit'])('fails the Run and never publishes after %s failure', async failure => { - const f = fixture(); - await f.runtime.initialize(); - const error = new Error('injected failure'); - if (failure === 'flush') { - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => method === 'thread/checkpoint' ? { threadId: (params as { threadId: string }).threadId, flushed: false } : call(method, params)); - } else if (failure === 'exit') f.rpc.closeCheckpoint.mockRejectedValueOnce(error); - else vi.mocked(f.ports[failure === 'sync' ? 'syncStorage' : 'commit']).mockRejectedValueOnce(error); - await expect(f.runtime.checkpoint()).rejects.toThrow(); - await f.runtime.finished; - expect(() => f.runtime.assertSuccessfulShutdown()).toThrow(); - expect(f.ports.abort).toHaveBeenCalledOnce(); - if (failure !== 'commit') expect(f.ports.commit).not.toHaveBeenCalled(); - await expect(f.ports.admission.run(async () => {})).rejects.toThrow(); }); - it('rejects a descendant that appeared after thread shutdown began', async () => { + it.each(['empty', 'busy', 'stale-items', 'missing-turn', 'missing-root', 'unknown-child', 'duplicate-loaded', 'unavailable-host', 'unsafe-config'])('rejects %s before destructive shutdown and reopens admission', async failure => { const f = fixture(); - await f.runtime.initialize(); - let lists = 0; - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => method === 'thread/loaded/list' && ++lists > 1 ? { data: ['root', 'child', 'late-child'] } : call(method, params)); - await expect(f.runtime.checkpoint()).rejects.toThrow('threads changed'); - expect(f.ports.commit).not.toHaveBeenCalled(); - expect(f.rpc.closeCheckpoint).not.toHaveBeenCalled(); - }); - - it.each([{ remainingIds: ['root'] }, { remainingIds: [] }])('allows acknowledged threads to unregister while requiring their persisted histories: %j', async ({ remainingIds }) => { - const f = fixture(); - await f.runtime.initialize(); - let acknowledged = false; - const readsAfterShutdown: string[] = []; + if (failure === 'empty') await f.runtime.initialize(); else await f.complete(); const call = f.rpc.call.getMockImplementation()!; f.rpc.call.mockImplementation(async (method, params) => { - if (method === 'thread/checkpoint') acknowledged = true; - if (method === 'thread/loaded/list' && acknowledged) return { data: remainingIds, nextCursor: null }; - if (method === 'thread/turns/list' && acknowledged) readsAfterShutdown.push((params as { threadId: string }).threadId); + if (method === 'thread/read' && failure === 'stale-items') return { thread: { ...history(), turns: [{ id: 'native-turn', status: 'completed', items: [] }] } }; + if (method === 'thread/read' && failure === 'missing-turn') return { thread: { ...history(), turns: [] } }; + if (method === 'thread/loaded/list' && failure === 'missing-root') return { data: [] }; + if (method === 'thread/loaded/list' && failure === 'unknown-child') return { data: ['root', 'unknown'] }; + if (method === 'thread/loaded/list' && failure === 'duplicate-loaded') return { data: ['root', 'root'] }; + if (method === 'config/read' && failure === 'unsafe-config') return { config: { hooks: { onStart: ['shell'] } } }; return call(method, params); }); - await expect(f.runtime.checkpoint()).resolves.toEqual(checkpoint); - expect(readsAfterShutdown).toEqual(['root', 'child']); - expect(f.ports.commit).toHaveBeenCalledOnce(); - expect(f.rpc.closeCheckpoint).toHaveBeenCalledOnce(); - }); - - it('rejects missing persisted history even after every thread acknowledged shutdown', async () => { - const f = fixture(); - await f.runtime.initialize(); - let acknowledged = false; - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => { - if (method === 'thread/checkpoint') acknowledged = true; - if (method === 'thread/turns/list' && acknowledged && (params as { threadId: string }).threadId === 'child') throw new Error('child history unavailable'); - return call(method, params); - }); - await expect(f.runtime.checkpoint()).rejects.toThrow('child history unavailable'); - expect(f.ports.commit).not.toHaveBeenCalled(); - expect(f.ports.abort).toHaveBeenCalledOnce(); - }); - - it('checks descendant history before starting durable handoff', async () => { - const f = fixture(); - try { - await f.runtime.initialize(); - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => { - if (method === 'thread/turns/list' && (params as { threadId: string }).threadId === 'child') throw new Error('child history unavailable'); - return call(method, params); - }); - await expect(f.runtime.checkpoint()).rejects.toThrow('child history unavailable'); - expect(f.ports.begin).not.toHaveBeenCalled(); - expect(f.rpc.call.mock.calls.some(([method]) => method === 'thread/checkpoint')).toBe(false); - expect(f.rpc.close).not.toHaveBeenCalled(); - await expect(f.ports.admission.run(async () => 'open')).resolves.toBe('open'); - } finally { await f.runtime.close(); } - }); - - it.each([ - { threadId: 'other-root', threadIds: ['root', 'child'], flushed: true }, - { threadId: 'root', threadIds: ['root'], flushed: true }, - { threadId: 'root', threadIds: ['root', 'child', 'extra'], flushed: true }, - { threadId: 'root', threadIds: ['root', 'root'], flushed: true }, - { threadId: 'root', threadIds: ['root', 1], flushed: true }, - { threadId: 'root', flushed: true }, - { threadId: 'root', threadIds: ['root', 'child'], flushed: false }, - ])('rejects an incomplete or malformed checkpoint acknowledgement: %j', async acknowledgement => { - const f = fixture(); - await f.runtime.initialize(); - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => method === 'thread/checkpoint' ? acknowledgement : call(method, params)); + if (failure === 'unavailable-host') delete f.ports.prepareNativeVerification; + if (failure === 'busy') f.emit({ method: 'turn/started', params: { threadId: 'root', turn: { id: 'active', status: 'inProgress' } } }); await expect(f.runtime.checkpoint()).rejects.toThrow(); - expect(f.ports.abort).toHaveBeenCalledOnce(); - expect(f.ports.commit).not.toHaveBeenCalled(); - expect(f.rpc.closeCheckpoint).not.toHaveBeenCalled(); - }); - - it.each([ - { data: ['root', 'root'] }, - { data: ['root', ''] }, - { data: ['root'], nextCursor: '' }, - { data: ['root'], nextCursor: 1 }, - { data: [], nextCursor: 'more' }, - ])('rejects invalid loaded-thread pagination before shutdown: %j', async page => { - const f = fixture(); - try { - await f.runtime.initialize(); - f.rpc.call.mockResolvedValueOnce(page); - await expect(f.runtime.checkpoint()).rejects.toThrow(); - expect(f.ports.begin).not.toHaveBeenCalled(); - expect(f.rpc.close).not.toHaveBeenCalled(); - } finally { await f.runtime.close(); } - }); - - it.each(['duplicate identity', 'repeated cursor'])('rejects %s across loaded-thread pages', async failure => { - const f = fixture(); - try { - await f.runtime.initialize(); - f.rpc.call.mockResolvedValueOnce({ data: ['root'], nextCursor: 'first' }); - f.rpc.call.mockResolvedValueOnce(failure === 'duplicate identity' - ? { data: ['root', 'child'] } : { data: ['child'], nextCursor: 'first' }); - await expect(f.runtime.checkpoint()).rejects.toThrow(); - expect(f.ports.begin).not.toHaveBeenCalled(); - expect(f.rpc.close).not.toHaveBeenCalled(); - } finally { await f.runtime.close(); } - }); - - it('accepts paginated identities and acknowledgements in a different order', async () => { - const f = fixture(); - await f.runtime.initialize(); - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => { - if (method === 'thread/loaded/list') return (params as { cursor?: string }).cursor - ? { data: ['child'], nextCursor: null } : { data: ['root'], nextCursor: 'root' }; - if (method === 'thread/checkpoint') return { threadId: 'root', threadIds: ['child', 'root'], flushed: true }; - return call(method, params); - }); - await expect(f.runtime.checkpoint()).resolves.toEqual(checkpoint); - expect(f.ports.commit).toHaveBeenCalledOnce(); + expect(f.ports.begin).not.toHaveBeenCalled(); expect(f.rpc.closeCheckpoint).not.toHaveBeenCalled(); + await expect(f.ports.admission.run(async () => 'open')).resolves.toBe('open'); + await f.runtime.close(); + }); + + it.each(['exit', 'writers', 'journal', 'sync', 'verify', 'commit'])('retains source authority and fails the run after %s failure', async failure => { + const f = fixture(); await f.complete(); + const error = new Error('injected'); + if (failure === 'exit') f.rpc.closeCheckpoint.mockRejectedValueOnce(error); + else if (failure === 'verify') f.verify.mockRejectedValueOnce(error); + else vi.mocked(f.ports[{ writers: 'stopRemainingWriters', journal: 'flushJournal', sync: 'syncStorage', commit: 'commit' }[failure] as 'commit']).mockRejectedValueOnce(error); + await expect(f.runtime.checkpoint()).rejects.toThrow('injected'); + await f.runtime.finished; + expect(f.ports.abort).toHaveBeenCalledOnce(); expect(() => f.runtime.assertSuccessfulShutdown()).toThrow(); + if (failure !== 'commit') expect(f.ports.commit).not.toHaveBeenCalled(); + await expect(f.ports.admission.run(async () => {})).rejects.toThrow(); }); - it.each(['native', 'exit', 'journal'])('rejects late activity during %s even after its Turn completes', async stage => { - const f = fixture(); - await f.runtime.initialize(); - const activity = () => { - f.emit({ method: 'turn/started', params: { threadId: 'root', turn: { id: 'late-turn', status: 'inProgress' } } }); - f.emit({ method: 'turn/completed', params: { threadId: 'root', turn: { id: 'late-turn', status: 'completed' } } }); - }; - if (stage === 'native') { - const call = f.rpc.call.getMockImplementation()!; - f.rpc.call.mockImplementation(async (method, params) => { if (method === 'thread/checkpoint') activity(); return call(method, params); }); - } else if (stage === 'exit') f.rpc.closeCheckpoint.mockImplementationOnce(async () => { activity(); f.disconnect(); }); - else vi.mocked(f.ports.flushJournal).mockImplementationOnce(async () => { activity(); }); - await expect(f.runtime.checkpoint()).rejects.toThrow('activity changed'); - expect(f.ports.commit).not.toHaveBeenCalled(); - expect(f.ports.abort).toHaveBeenCalledOnce(); - expect(() => f.runtime.assertSuccessfulShutdown()).toThrow(); + it('includes a known unloaded child in the exact manifest', async () => { + const f = fixture(); await f.complete(); + f.emit({ method: 'thread/started', params: { thread: { id: 'child', source: { subAgent: { thread_spawn: { parent_thread_id: 'root' } } } } } }); + f.emit({ method: 'turn/completed', params: { threadId: 'child', turn: { id: 'child-turn', status: 'completed' } } }); + await f.runtime.checkpoint(); + expect(f.verify).toHaveBeenCalledWith(expect.objectContaining({ threads: [expect.objectContaining({ id: 'root' }), expect.objectContaining({ id: 'child' })] })); }); - it('refuses native host requests during checkpoint before running a host effect', async () => { - const f = fixture(); - await f.runtime.initialize(); - vi.mocked(f.ports.begin).mockImplementationOnce(async () => { - await expect(f.request({ method: 'currentTime/read', params: {}, requestId: 'late' })).rejects.toThrow('during checkpoint'); - }); + it.each(['turn/started', 'item/completed', 'error'])('rejects late %s during EOF before any publication', async method => { + const f = fixture(); await f.complete(); + f.rpc.closeCheckpoint.mockImplementationOnce(async () => { f.emit({ method, params: {} }); }); await expect(f.runtime.checkpoint()).rejects.toThrow('activity changed'); - expect(f.rpc.call.mock.calls.some(([method]) => method === 'thread/checkpoint')).toBe(false); - expect(f.ports.commit).not.toHaveBeenCalled(); - }); - - it('rejects raw response activity even without a matching Turn notification', async () => { - const f = fixture(); - await f.runtime.initialize(); - vi.mocked(f.ports.flushJournal).mockImplementationOnce(async () => { - f.emit({ method: 'rawResponseItem/completed', params: { threadId: 'root', item: { type: 'message' } } }); - }); - await expect(f.runtime.checkpoint()).rejects.toThrow('activity changed'); - expect(f.ports.commit).not.toHaveBeenCalled(); - expect(f.ports.abort).toHaveBeenCalledOnce(); - }); - - it('never substitutes a new thread when a consumed checkpoint is missing native history', async () => { - const f = fixture('root'); - f.rpc.call.mockRejectedValueOnce(new CodexRpcError({ code: -32600, message: 'no rollout found for thread id root' })); - try { - await expect(f.runtime.initialize()).rejects.toThrow('protocol request'); - expect(f.rpc.call.mock.calls.map(call => call[0])).toEqual(['thread/resume']); - } finally { await f.runtime.close(); } + expect(f.ports.commit).not.toHaveBeenCalled(); expect(f.verify).not.toHaveBeenCalled(); }); - it('rejects native resume that acknowledges a different thread identity', async () => { - const f = fixture('root'); - f.rpc.call.mockResolvedValueOnce({ thread: { id: 'different-root' } }); - try { await expect(f.runtime.initialize()).rejects.toThrow('different thread'); } - finally { await f.runtime.close(); } + it.each([{ data: ['root'], nextCursor: 'repeat' }, { data: [], nextCursor: 'bad' }, { data: [42] }, { data: ['root'], nextCursor: 12 }])('rejects malformed or repeated loaded pagination %j', async page => { + const f = fixture(); await f.complete(); const call = f.rpc.call.getMockImplementation()!; + f.rpc.call.mockImplementation(async (method, params) => method === 'thread/loaded/list' ? page : call(method, params)); + await expect(f.runtime.checkpoint()).rejects.toThrow(); expect(f.ports.begin).not.toHaveBeenCalled(); await f.runtime.close(); }); }); diff --git a/tests/runner/workspace-handoff.test.ts b/tests/runner/workspace-handoff.test.ts index 53de987..0326dd4 100644 --- a/tests/runner/workspace-handoff.test.ts +++ b/tests/runner/workspace-handoff.test.ts @@ -75,3 +75,37 @@ it('holds completion while journal, storage or checkpoint commits are unresolved await operation; expect(f.ports.settle).toHaveBeenCalledOnce(); }); + +it('cold verification follows stopped writers and checked storage sync without pretending EOF acknowledged a flush', async () => { + const f = fixture(); + vi.mocked(f.ports.shutdownNative).mockImplementationOnce(async () => { f.trace.push('eof'); return { kind: 'codex-eof', threadIds: ['root', 'child'] }; }); + f.ports.verifyNative = vi.fn(async (): Promise => { f.trace.push('cold'); return { kind: 'codex-cold-native', threadIds: ['child', 'root'], historyDigest: 'a'.repeat(64), hostJournalDigest: 'b'.repeat(64), historyModes: ['paginated'] }; }); + await checkpointWorkspace(f.ports); + expect(f.trace).toEqual(['begin', 'eof', 'writers', 'journal', 'sync', 'cold', 'commit', 'settle']); + expect(f.ports.commit).toHaveBeenCalledWith(expect.objectContaining({ kind: 'codex-cold-native' })); +}); + +it.each(['missing', 'mismatch', 'failed'])('never publishes a cold checkpoint when verification is %s', async mode => { + const f = fixture(); + vi.mocked(f.ports.shutdownNative).mockResolvedValueOnce({ kind: 'codex-eof', threadIds: ['root', 'child'] }); + if (mode !== 'missing') f.ports.verifyNative = async () => { + if (mode === 'failed') throw new Error('corrupt history'); + return { kind: 'codex-cold-native', threadIds: ['root'], historyDigest: 'a'.repeat(64), hostJournalDigest: 'b'.repeat(64), historyModes: ['legacy'] }; + }; + await expect(checkpointWorkspace(f.ports)).rejects.toThrow(); expect(f.ports.commit).not.toHaveBeenCalled(); +}); + +it.each([undefined, null, {}, { kind: 'codex-cold-native', threadIds: ['root', 'child'], historyDigest: 'a'.repeat(64), hostJournalDigest: 'b'.repeat(64), historyModes: [] }])('rejects absent or malformed cold evidence %j', async evidence => { + const f = fixture(); + vi.mocked(f.ports.shutdownNative).mockResolvedValueOnce({ kind: 'codex-eof', threadIds: ['root', 'child'] }); + f.ports.verifyNative = async () => evidence as import('../../src/domain/native-checkpoint.js').NativeCheckpointEvidence; + await expect(checkpointWorkspace(f.ports)).rejects.toThrow('evidence'); + expect(f.ports.abort).toHaveBeenCalledOnce(); expect(f.ports.commit).not.toHaveBeenCalled(); +}); + +it.each([{ threadIds: ['root', 'child'] }, { kind: 'unknown', threadIds: ['root', 'child'], flushed: true, forced: false }, { threadIds: ['root', 'child'], flushed: 'yes', forced: false }])('rejects malformed shutdown acknowledgements %j', async acknowledgement => { + const f = fixture(); + f.ports.shutdownNative = async () => acknowledgement as Awaited>; + await expect(checkpointWorkspace(f.ports)).rejects.toThrow(); + expect(f.ports.commit).not.toHaveBeenCalled(); expect(f.ports.abort).toHaveBeenCalledOnce(); +}); diff --git a/tests/scripts/build-desktop.test.ts b/tests/scripts/build-desktop.test.ts new file mode 100644 index 0000000..c9e0aa5 --- /dev/null +++ b/tests/scripts/build-desktop.test.ts @@ -0,0 +1,80 @@ +import { createHash } from 'node:crypto'; +import { appendFileSync, chmodSync, writeFileSync } from 'node:fs'; +import { appendFile, lstat, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { dirname, join } from 'node:path'; +import { afterEach, expect, it } from 'vitest'; +import { signDesktopBundle, stageDesktopCodexRuntime } from '../../scripts/build-desktop.mjs'; + +const digest = (value: Uint8Array | string) => createHash('sha256').update(value).digest('hex'); +const directories: string[] = []; +afterEach(async () => { await Promise.all(directories.splice(0).map(directory => rm(directory, { recursive: true, force: true }))); }); + +async function fixture() { + const directory = await mkdtemp(join(tmpdir(), 'rat-desktop-codex-test-')); directories.push(directory); + const artifactRoot = join(directory, 'artifact'); const definitionRoot = join(directory, 'definition'); + const bundle = join(directory, 'Rat Things.app'); const destination = join(bundle, 'Contents/Resources/codex-runtime'); + await mkdir(definitionRoot); await mkdir(dirname(destination), { recursive: true }); + const source = { repository: 'https://github.com/openai/codex.git', revision: 'a'.repeat(40), upstreamVersion: '0.164.0' }; + const descriptor = { layoutVersion: 1, version: source.upstreamVersion, target: 'aarch64-apple-darwin', variant: 'codex', + entrypoint: 'bin/codex', resourcesDir: 'codex-resources', pathDir: 'codex-path' }; + const executable = Buffer.alloc(64); executable.writeUInt32LE(0xfeedfacf, 0); executable.writeUInt32LE(0x100000c, 4); executable.writeUInt32LE(2, 12); + const contents = { 'bin/codex': Buffer.concat([executable, Buffer.from('original-signature')]), + 'codex-package.json': Buffer.from(JSON.stringify(descriptor)), 'codex-resources/example.txt': Buffer.from('official resource') }; + const files = Object.entries(contents).map(([path, bytes]) => ({ path, sha256: digest(bytes), executable: path === 'bin/codex' })); + for (const file of files) { + const path = join(artifactRoot, 'runtime', file.path); await mkdir(dirname(path), { recursive: true }); + await writeFile(path, contents[file.path as keyof typeof contents], { mode: file.executable ? 0o755 : 0o444 }); + } + const locked = { name: '@openai/codex', version: '0.164.0-darwin-arm64', resolved: 'https://registry.npmjs.org/@openai/codex/-/codex-0.164.0-darwin-arm64.tgz', integrity: `sha512-${'A'.repeat(86)}==` }; + const manifest = { source, platform: 'darwin', arch: 'arm64', upstreamPackage: { name: '@openai/codex-darwin-arm64', version: locked.version }, + distribution: { kind: 'official-npm', target: descriptor.target, integrity: locked.integrity }, sha256: files[0]!.sha256, + files: files.map(({ path, sha256 }) => ({ path, sha256 })) }; + const packageLockPath = join(directory, 'package-lock.json'); const companionInventoryPath = join(directory, 'companions.json'); + await writeFile(join(definitionRoot, 'source.json'), JSON.stringify(source)); + await writeFile(packageLockPath, JSON.stringify({ packages: { 'node_modules/@openai/codex-darwin-arm64': locked } })); + await writeFile(companionInventoryPath, JSON.stringify({ '@openai/codex-darwin-arm64': { ...locked, descriptor, files } })); + await writeFile(join(artifactRoot, 'artifact.json'), JSON.stringify(manifest)); + const stage = () => stageDesktopCodexRuntime(artifactRoot, destination, { definitionRoot, packageLockPath, companionInventoryPath }); + return { artifactRoot, destination, bundle, manifest, contents, stage }; +} + +it('preserves official bytes and signs only the outer development app', async () => { + const f = await fixture(); const runtime = await f.stage(); const calls: Array<{ command: string; args: string[] }> = []; + await signDesktopBundle(f.bundle, runtime, (command, args) => { + calls.push({ command, args }); return { status: 0 }; + }); + expect(calls).toEqual([{ command: 'codesign', args: ['--force', '--sign', '-', f.bundle] }]); + for (const [path, bytes] of Object.entries(f.contents)) expect(await readFile(join(f.destination, path))).toEqual(bytes); +}); + +it('rejects altered official input even when its descriptor and manifest agree', async () => { + const f = await fixture(); const changed = Buffer.concat([f.contents['bin/codex'], Buffer.from('changed')]); + await writeFile(join(f.artifactRoot, 'runtime/bin/codex'), changed); + f.manifest.sha256 = digest(changed); f.manifest.files[0]!.sha256 = digest(changed); + await writeFile(join(f.artifactRoot, 'artifact.json'), JSON.stringify(f.manifest)); + await expect(f.stage()).rejects.toThrow('differs from the official npm package'); + await expect(lstat(f.destination)).rejects.toThrow('ENOENT'); +}); + +it('rejects staged mutation before calling the signer', async () => { + const f = await fixture(); const runtime = await f.stage(); let called = false; + await appendFile(join(f.destination, 'bin/codex'), 'changed'); + await expect(signDesktopBundle(f.bundle, runtime, () => { called = true; return { status: 0 }; })).rejects.toThrow('checksum differs'); + expect(called).toBe(false); +}); + +it.each(['binary', 'resource', 'inventory'])('rejects outer signing that changes the official %s', async mutation => { + const f = await fixture(); const runtime = await f.stage(); + const run = () => { + if (mutation === 'inventory') writeFileSync(join(f.destination, 'extra'), 'unlisted'); + else { + const path = join(f.destination, mutation === 'binary' ? 'bin/codex' : 'codex-resources/example.txt'); + if (mutation === 'resource') chmodSync(path, 0o644); + appendFileSync(path, 'changed'); + if (mutation === 'resource') chmodSync(path, 0o444); + } + return { status: 0 }; + }; + await expect(signDesktopBundle(f.bundle, runtime, run)).rejects.toThrow(mutation === 'inventory' ? 'inventory changed' : 'checksum differs'); +}); diff --git a/tests/scripts/build-native-release.test.ts b/tests/scripts/build-native-release.test.ts index c1c5d1d..6f3fa17 100644 --- a/tests/scripts/build-native-release.test.ts +++ b/tests/scripts/build-native-release.test.ts @@ -46,17 +46,15 @@ async function fixture() { const write = async (path: string, bytes: string | Uint8Array, mode = 0o644) => { await mkdir(dirname(join(directory, path)), { recursive: true }); await writeFile(join(directory, path), bytes, { mode }); }; - const source = { repository: 'https://github.com/openai/codex.git', revision: 'a'.repeat(40), upstreamVersion: '0.154.0', patches: ['fixture.patch'] }; - const sourceIdentity = { ...source, patches: [{ name: 'fixture.patch', sha256: digest('patch') }] }; - await write('definition/source.json', json(source)); await write('definition/fixture.patch', 'patch'); - await write('definition/artifact-policy.json', json({ sourceSha256: digest(JSON.stringify(sourceIdentity)), patchedTree: 'b'.repeat(40) })); - const builds = { profile: 'release', debug: 'none', incremental: false, locked: true, jobs: 1, patchedTree: 'b'.repeat(40) }; + const source = { repository: 'https://github.com/openai/codex.git', revision: 'a'.repeat(40), upstreamVersion: '0.164.0' }; + const sourceIdentity = source; + await write('definition/source.json', json(source)); const paths = ['bin/codex', 'bin/codex-code-mode-host', 'codex-package.json', 'codex-path/rg']; const packages: Record = {}; const packageLocks: Record = {}; - const manifests = new Map(); for (const platform of ['darwin', 'linux']) { - const target = platform === 'darwin' ? protocol.hostTarget : protocol.guestTarget; + const target = platform === 'darwin' ? protocol.hostTarget : 'aarch64-unknown-linux-musl'; const descriptor = { layoutVersion: 1, version: source.upstreamVersion, target, variant: 'codex', entrypoint: 'bin/codex', resourcesDir: 'codex-resources', pathDir: 'codex-path' }; const policies = nativeExecutablePolicy.filter(policy => policy.role !== 'vm-helper'); const allPaths = platform === 'darwin' @@ -74,7 +72,7 @@ async function fixture() { packageLocks[`node_modules/${packageName}`] = locked; packages[packageName] = { ...locked, descriptor, files }; for (const file of files) await write(`${platform}/runtime/${file.path}`, content(file.path), file.executable ? 0o755 : 0o444); - const manifest = { source: sourceIdentity, build: { ...builds, nativeTarget: target }, binary: join(directory, platform, 'runtime/bin/codex'), + const manifest = { source: sourceIdentity, distribution: { kind: 'official-npm', target, integrity: locked.integrity }, binary: join(directory, platform, 'runtime/bin/codex'), sha256: files.find(file => file.path === 'bin/codex')!.sha256, platform, arch: 'arm64', upstreamPackage: { name: packageName, version: locked.version }, files: files.map(({ path, sha256 }) => ({ path, sha256 })) }; manifests.set(platform, manifest); await write(`${platform}/artifact.json`, json(manifest)); @@ -136,12 +134,13 @@ async function fixture() { for (const path of signaturePaths) { await mkdir(dirname(join(filename, path)), { recursive: true }); await writeFile(join(filename, path), 'fixture-signature'); } } else await appendFile(filename, 'fixture-signature'); } + if (args.includes('--display')) return { stdout: '', stderr: `Executable=${args.at(-1)}` }; return { stdout: 'fixture', stderr: '' }; }; return { directory, write, options, repositoryRoot, run, calls, guestBuild, archive, inputs, contents }; } -it('assembles an exact signed candidate with untouched input provenance and hashes of signed bytes', async () => { +it('preserves every official byte and signs only the Rat Things helper and outer bundle', async () => { const f = await fixture(); const original = await readFile(join(f.options.hostArtifact, 'artifact.json')); const result = await assembleNativeRelease(f.options, { repositoryRoot: f.repositoryRoot, run: f.run }); const bundle = join(f.options.output, 'Runtime.bundle'); const manifestBytes = await readFile(join(bundle, 'Contents/Resources/runtime-manifest.json')); @@ -153,11 +152,32 @@ it('assembles an exact signed candidate with untouched input provenance and hash expect(await readFile(join(f.options.hostArtifact, 'artifact.json'))).toEqual(original); const provenance = await readFile(join(bundle, 'Contents/Resources/provenance.json'), 'utf8'); expect(provenance).not.toContain(f.directory); expect(provenance).toContain('Corresponding sources'); - for (const mapping of JSON.parse(provenance).executables) expect(mapping.unsigned.sha256).not.toBe(mapping.signed.sha256); + for (const mapping of JSON.parse(provenance).executables) { + if (mapping.kind === 'official-unmodified') { + expect(mapping.packaged).toEqual({ bytes: mapping.input.bytes, sha256: mapping.input.sha256 }); + expect(mapping.signature).toMatchObject({ action: 'preserved', signerAdmission: 'pending' }); + expect(mapping).not.toHaveProperty('entitlements'); + } else { + expect(mapping.kind).toBe('rat-things-signed'); + expect(mapping.path).toBe('Contents/Helpers/rat-native-worker'); + expect(mapping.input.sha256).not.toBe(mapping.packaged.sha256); + } + } + for (const file of JSON.parse(original.toString()).files) { + expect(await readFile(join(bundle, 'Contents/Resources/codex', file.path))) + .toEqual(await readFile(join(f.options.hostArtifact, 'runtime', file.path))); + expect(manifest.files.find(entry => entry.path === `Contents/Resources/codex/${file.path}`)?.sha256).toBe(file.sha256); + } + const blocker = 'Native macOS upstream-signer admission requires design and on-Mac validation'; + expect(result.outstandingDistributionInputs).toContain(blocker); + expect(JSON.parse(provenance)).toMatchObject({ distributionReady: false, outstandingDistributionInputs: expect.arrayContaining([blocker]) }); const signedInventory = await readFile(join(f.options.output, 'evidence/signed-inventory.json')); expect(result.signedTreeSha256).toBe(nativeBundleFingerprint(JSON.parse(signedInventory.toString()))); + const signingEvidence = JSON.parse(await readFile(join(f.options.output, 'evidence/signing.json'), 'utf8')); + expect(signingEvidence.signatures.map((entry: { path: string }) => entry.path)).toEqual(['Contents/Helpers/rat-native-worker']); + expect(signingEvidence.preservedSignatures).toHaveLength(nativeExecutablePolicy.length - 1); const signing = f.calls.filter(call => call.args.includes('--sign')); - expect(signing).toHaveLength(nativeExecutablePolicy.length + 1); expect(signing.at(-1)!.args.at(-1)).toBe(bundle); + expect(signing.map(call => call.args.at(-1))).toEqual([join(bundle, 'Contents/Helpers/rat-native-worker'), bundle]); expect(signing.every(call => call.args.includes('--timestamp') && call.args.includes('runtime') && !call.args.includes('--deep'))).toBe(true); expect(f.calls.find(call => call.args.includes('-target'))!.args).toContain('arm64-apple-macos15.0.0'); }); @@ -207,7 +227,7 @@ it('rejects changed source inputs before signing the outer bundle', async () => return result; }; await expect(assembleNativeRelease(f.options, { repositoryRoot: f.repositoryRoot, run })).rejects.toThrow('Input changed or checksum differs'); - expect(f.calls.filter(call => call.args.includes('--sign'))).toHaveLength(nativeExecutablePolicy.length); + expect(f.calls.filter(call => call.args.includes('--sign'))).toHaveLength(1); await expect(lstat(join(f.options.output, 'release.json'))).rejects.toThrow('ENOENT'); }); @@ -223,6 +243,20 @@ it('rejects an outer signer that mutates a payload after the manifest was writte await expect(assembleNativeRelease(f.options, { repositoryRoot: f.repositoryRoot, run })).rejects.toThrow('Outer signing changed'); }); +it.each(['helper', 'outer'])('rejects official payload changes during %s signing', async stage => { + const f = await fixture(); + const run = async (command: string, args: string[]) => { + const result = await f.run(command, args); + const suffix = stage === 'helper' ? 'rat-native-worker' : 'Runtime.bundle'; + if (args.includes('--sign') && args.at(-1)!.endsWith(suffix)) { + await appendFile(join(f.options.output, 'Runtime.bundle/Contents/Resources/codex/bin/codex'), 'changed signature'); + } + return result; + }; + await expect(assembleNativeRelease(f.options, { repositoryRoot: f.repositoryRoot, run })).rejects.toThrow('Official Codex payload changed'); + await expect(lstat(join(f.options.output, 'release.json'))).rejects.toThrow('ENOENT'); +}); + it('rejects staged archive changes during helper compilation before sealing the outer bundle', async () => { const f = await fixture(); const run = async (command: string, args: string[]) => { @@ -281,11 +315,14 @@ it('rejects missing, truncated, and non-macOS deployment commands', () => { const platform = machO(); platform.writeUInt32LE(2, 40); expect(() => inspectMachO(platform)).toThrow('not macOS'); }); -it('limits JIT entitlements to the two Codex executables and virtualization to the helper', () => { - const commands = nativeExecutablePolicy.map(policy => signingArguments(identity, policy, policy.path, { jit: 'jit.plist', virtualization: 'vm.plist' })); - expect(commands.filter(args => args.includes('jit.plist')).map(args => args.at(-1))).toEqual(nativeExecutablePolicy.slice(0, 2).map(policy => policy.path)); - expect(commands.filter(args => args.includes('vm.plist')).map(args => args.at(-1))).toEqual(['Contents/Helpers/rat-native-worker']); - expect(commands.filter(args => !args.includes('--entitlements'))).toHaveLength(nativeExecutablePolicy.length - 3); +it('refuses to sign upstream executables and limits Rat Things entitlements to virtualization', () => { + for (const policy of nativeExecutablePolicy.filter(value => value.role !== 'vm-helper')) { + expect(() => signingArguments(identity, policy, policy.path, { virtualization: 'vm.plist' })).toThrow('Only the Rat Things'); + } + const helper = nativeExecutablePolicy.find(value => value.role === 'vm-helper')!; + const helperArguments = signingArguments(identity, helper, helper.path, { virtualization: 'vm.plist' }); + expect(helperArguments.slice(-3)).toEqual(['--entitlements', 'vm.plist', helper.path]); + expect(signingArguments(identity, { identifier: 'dev.rat-things.runtime' }, 'Runtime.bundle', {})).not.toContain('--entitlements'); }); it('rejects unlisted executable files and links in the outer payload', async () => { diff --git a/tests/scripts/codex-runtime-artifact.test.ts b/tests/scripts/codex-runtime-artifact.test.ts index 7702650..9f64d24 100644 --- a/tests/scripts/codex-runtime-artifact.test.ts +++ b/tests/scripts/codex-runtime-artifact.test.ts @@ -10,7 +10,7 @@ import { codexRuntimeEntries, validateCodexRuntimeArtifact } from '../../scripts const directories: string[] = []; afterEach(async () => { await Promise.all(directories.splice(0).map(path => rm(path, { recursive: true, force: true }))); }); const digest = (bytes: Uint8Array | string) => createHash('sha256').update(bytes).digest('hex'); -const targets = { linux: 'aarch64-unknown-linux-gnu', darwin: 'aarch64-apple-darwin' }; +const targets = { linux: 'aarch64-unknown-linux-musl', darwin: 'aarch64-apple-darwin' }; it('rejects missing native inputs before replacing any existing Lambda archive', async () => { const directory = await mkdtemp(join(tmpdir(), 'rat-package-preflight-')); directories.push(directory); @@ -20,17 +20,15 @@ it('rejects missing native inputs before replacing any existing Lambda archive', await writeFile(archive, 'previous archive'); await expect(promisify(execFile)(process.execPath, [resolve('scripts/package-lambdas.mjs')], { cwd: directory, env: { ...process.env, CODEX_RUNTIME_ARTIFACT: join(directory, 'missing') }, timeout: 5000, - })).rejects.toThrow('Build the Linux ARM64 Codex runtime first'); + })).rejects.toThrow('Prepare the official Linux ARM64 Codex runtime first'); expect(await readFile(archive, 'utf8')).toBe('previous archive'); }); async function fixture(platform: keyof typeof targets = 'linux', arch: 'arm64' | 'x64' = 'arm64') { const directory = await mkdtemp(join(tmpdir(), 'rat-runtime-artifact-')); directories.push(directory); - const source = JSON.parse(await readFile('runtime/codex/source.json', 'utf8')) as { repository: string; revision: string; upstreamVersion: string; patches: string[] }; - const policy = JSON.parse(await readFile('runtime/codex/artifact-policy.json', 'utf8')) as { patchedTree: string }; - const patches = await Promise.all(source.patches.map(async name => ({ name, sha256: digest(await readFile(join('runtime/codex', name))) }))); + const source = JSON.parse(await readFile('runtime/codex/source.json', 'utf8')) as { repository: string; revision: string; upstreamVersion: string }; const executable = Buffer.alloc(64); - const nativeTarget = arch === 'x64' ? 'x86_64-unknown-linux-gnu' : targets[platform]; + const nativeTarget = arch === 'x64' ? 'x86_64-unknown-linux-musl' : targets[platform]; if (platform === 'linux') { executable.write('7f454c46', 'hex'); executable[4] = 2; executable[5] = 1; executable[6] = 1; executable.writeUInt16LE(2, 16); executable.writeUInt16LE(arch === 'x64' ? 62 : 183, 18); executable.writeUInt32LE(1, 20); executable.writeUInt16LE(64, 52); @@ -50,8 +48,7 @@ async function fixture(platform: keyof typeof targets = 'linux', arch: 'arm64' | const bytes = file.path === 'codex-package.json' ? Buffer.from(JSON.stringify(pinned.descriptor, null, 2) + '\n') : file.executable ? nativeBytes : Buffer.from('fixture data'); file.sha256 = digest(bytes); - const runtimeBytes = file.path === 'codex-package.json' - ? Buffer.from(JSON.stringify({ ...pinned.descriptor, target: nativeTarget }, null, 2) + '\n') : bytes; + const runtimeBytes = bytes; const path = join(directory, 'runtime', file.path); await mkdir(dirname(path), { recursive: true }); await writeFile(path, runtimeBytes, { mode: file.executable ? 0o755 : 0o644 }); @@ -59,9 +56,9 @@ async function fixture(platform: keyof typeof targets = 'linux', arch: 'arm64' | } const companionInventoryPath = join(directory, 'companions.json'); await writeFile(companionInventoryPath, JSON.stringify(packages)); - const manifest = { source: { ...source, patches }, platform, arch: arch as string, sha256: digest(executable), files, + const manifest = { source, platform, arch: arch as string, sha256: digest(executable), files, upstreamPackage: { name: packageName, version: `${source.upstreamVersion}-${platform}-${arch}` }, - build: { nativeTarget, patchedTree: policy.patchedTree, profile: 'release', debug: 'none', incremental: false, locked: true, jobs: 1 } }; + distribution: { kind: 'official-npm', target: nativeTarget, integrity: pinned.integrity } }; const save = () => writeFile(join(directory, 'artifact.json'), JSON.stringify(manifest)); const replaceFile = async (path: string, bytes: Uint8Array) => { await writeFile(join(directory, 'runtime', path), bytes); @@ -93,13 +90,13 @@ it('keeps the packaging wrapper Linux-only and includes original provenance', as 'codex-runtime/artifact.json', ]); const host = await fixture('darwin'); - await expect(codexRuntimeEntries(host.directory, host.options)).rejects.toThrow('build provenance'); + await expect(codexRuntimeEntries(host.directory, host.options)).rejects.toThrow('distribution provenance'); }); it('admits Linux x64 explicitly while keeping Lambda packaging ARM64', async () => { const f = await fixture('linux', 'x64'); await expect(f.validate()).resolves.toMatchObject({ manifest: { platform: 'linux', arch: 'x64' } }); - await expect(codexRuntimeEntries(f.directory, f.options)).rejects.toThrow('build provenance'); + await expect(codexRuntimeEntries(f.directory, f.options)).rejects.toThrow('distribution provenance'); const otherArch = Buffer.from(f.executable); otherArch.writeUInt16LE(183, 18); await f.replaceFile('bin/codex', otherArch); await expect(f.validate()).rejects.toThrow('not linux X64'); @@ -108,57 +105,62 @@ it('admits Linux x64 explicitly while keeping Lambda packaging ARM64', async () it('requires an explicit supported target', async () => { const f = await fixture(); await expect(validateCodexRuntimeArtifact(f.directory)).rejects.toThrow('explicit supported'); - await expect(validateCodexRuntimeArtifact(f.directory, { ...f.options, expectedTarget: 'aarch64-unknown-linux-musl' })).rejects.toThrow('explicit supported'); + await expect(validateCodexRuntimeArtifact(f.directory, { ...f.options, expectedTarget: 'aarch64-unknown-linux-gnu' })).rejects.toThrow('explicit supported'); }); it.each([ - ['profile', 'debug'], ['debug', 'full'], ['incremental', true], ['locked', false], - ['jobs', 0], ['jobs', -1], ['jobs', 1.5], ['jobs', '1'], ['jobs', null], - ['patchedTree', 'a'.repeat(40)], ['patchedTree', ''], ['nativeTarget', 'aarch64-unknown-linux-musl'], -] as const)('rejects incompatible release provenance %s=%s', async (key, value) => { + ['kind', 'custom-build'], ['target', 'aarch64-unknown-linux-gnu'], ['integrity', 'sha512-untrusted'], +] as const)('rejects incompatible official distribution %s=%s', async (key, value) => { const f = await fixture(); - Object.assign(f.manifest.build, { [key]: value }); await f.save(); - await expect(f.validate()).rejects.toThrow('build provenance'); + Object.assign(f.manifest.distribution, { [key]: value }); await f.save(); + await expect(f.validate()).rejects.toThrow('distribution provenance'); }); -it.each(['profile', 'debug', 'incremental', 'locked', 'jobs', 'patchedTree', 'nativeTarget'])('rejects missing build evidence %s', async key => { +it.each(['kind', 'target', 'integrity'])('rejects missing official distribution evidence %s', async key => { const f = await fixture(); - Reflect.deleteProperty(f.manifest.build, key); await f.save(); - await expect(f.validate()).rejects.toThrow('build provenance'); + Reflect.deleteProperty(f.manifest.distribution, key); await f.save(); + await expect(f.validate()).rejects.toThrow('distribution provenance'); +}); + +it('rejects a custom build even when it declares matching official files', async () => { + const f = await fixture(); + Object.assign(f.manifest, { build: { profile: 'release' } }); await f.save(); + await expect(f.validate()).rejects.toThrow('distribution provenance'); }); it('rejects incorrect platform and architecture', async () => { const f = await fixture(); f.manifest.arch = 'x64'; await f.save(); - await expect(f.validate()).rejects.toThrow('build provenance'); + await expect(f.validate()).rejects.toThrow('distribution provenance'); f.manifest.arch = 'arm64'; f.manifest.platform = 'darwin'; await f.save(); - await expect(f.validate()).rejects.toThrow('build provenance'); + await expect(f.validate()).rejects.toThrow('distribution provenance'); }); -it('requires exact source identity and ordered patch hashes', async () => { +it('requires the exact unmodified source identity', async () => { const f = await fixture(); const original = structuredClone(f.manifest.source); f.manifest.source.revision = 'unrelated'; await f.save(); - await expect(f.validate()).rejects.toThrow('pinned source'); - f.manifest.source = structuredClone(original); f.manifest.source.patches.reverse(); await f.save(); - await expect(f.validate()).rejects.toThrow('ordered patches'); - f.manifest.source = structuredClone(original); f.manifest.source.patches[0]!.sha256 = '0'.repeat(64); await f.save(); - await expect(f.validate()).rejects.toThrow('ordered patches'); + await expect(f.validate()).rejects.toThrow('pinned unmodified upstream source'); + f.manifest.source = original; + Object.assign(f.manifest.source, { patches: [] }); await f.save(); + await expect(f.validate()).rejects.toThrow('pinned unmodified upstream source'); }); -it('admits a staged definition only with its independently supplied expected tree', async () => { +it('rejects a staged definition containing patches even if its manifest agrees', async () => { const f = await fixture(); const definitionRoot = join(f.directory, 'definition'); - await cp('runtime/codex', definitionRoot, { recursive: true }); - const source = JSON.parse(await readFile(join(definitionRoot, 'source.json'), 'utf8')); - source.patches.push('staged.patch'); - await writeFile(join(definitionRoot, 'source.json'), JSON.stringify(source)); - await writeFile(join(definitionRoot, 'staged.patch'), 'staged patch bytes'); - f.manifest.source.patches.push({ name: 'staged.patch', sha256: digest('staged patch bytes') }); - f.manifest.build.patchedTree = 'f'.repeat(40); await f.save(); - await expect(validateCodexRuntimeArtifact(f.directory, { ...f.options, definitionRoot })).rejects.toThrow('artifact policy'); - await expect(validateCodexRuntimeArtifact(f.directory, { ...f.options, definitionRoot, expectedPatchedTree: 'f'.repeat(40) })).resolves.toMatchObject({ manifest: f.manifest }); - await expect(validateCodexRuntimeArtifact(f.directory, { ...f.options, definitionRoot, expectedPatchedTree: 'e'.repeat(40) })).rejects.toThrow('build provenance'); + await mkdir(definitionRoot); + const patched = { ...f.manifest.source, patches: ['fixture.patch'] }; + await writeFile(join(definitionRoot, 'source.json'), JSON.stringify(patched)); + Object.assign(f.manifest.source, patched); await f.save(); + await expect(validateCodexRuntimeArtifact(f.directory, { ...f.options, definitionRoot })).rejects.toThrow('pinned unmodified upstream source'); +}); + +it('rejects a patched binary even if its manifest hashes are updated', async () => { + const f = await fixture(); + const modified = Buffer.from(f.executable); modified[63] = 1; + await f.replaceFile('bin/codex', modified); + await expect(f.validate()).rejects.toThrow('differs from the official npm package'); }); it.each(['name', 'version'] as const)('rejects mismatched upstream package %s', async field => { @@ -180,7 +182,7 @@ it('rejects a changed companion even if its declared checksum is changed too', a const f = await fixture(); const executable = Buffer.from(f.executable); executable[63] = 1; await f.replaceFile('codex-resources/voice/bin/codex-voice-host', executable); - await expect(f.validate()).rejects.toThrow('companion differs'); + await expect(f.validate()).rejects.toThrow('differs from the official npm package'); }); it.each(['linux', 'darwin'] as const)('rejects missing %s companions', async platform => { @@ -190,13 +192,13 @@ it.each(['linux', 'darwin'] as const)('rejects missing %s companions', async pla await expect(f.validate()).rejects.toThrow('companions are incomplete'); }); -it('rejects descriptor fields outside the permitted Linux target adjustment', async () => { +it('rejects descriptor changes including the Linux target', async () => { const f = await fixture(); const path = 'codex-package.json'; const descriptor = JSON.parse(await readFile(join(f.directory, 'runtime', path), 'utf8')); await f.replaceFile(path, Buffer.from(JSON.stringify({ ...descriptor, extra: 'untrusted' }, null, 2) + '\n')); await expect(f.validate()).rejects.toThrow('package descriptor'); - await f.replaceFile(path, Buffer.from(JSON.stringify({ ...descriptor, target: 'aarch64-unknown-linux-musl' }, null, 2) + '\n')); + await f.replaceFile(path, Buffer.from(JSON.stringify({ ...descriptor, target: 'aarch64-unknown-linux-gnu' }, null, 2) + '\n')); await expect(f.validate()).rejects.toThrow('package descriptor'); }); From 0997c9dcb442c42914b0664c300ad2be87609365 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 22:10:16 -0700 Subject: [PATCH 08/11] Keep subprocess fixtures stable across Node proxy warnings --- testing/local-runtime/pi-parity.ts | 2 +- testing/local-runtime/subprocess-fixtures.ts | 9 ++++++--- tests/pi/managed-subprocess.test.ts | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/testing/local-runtime/pi-parity.ts b/testing/local-runtime/pi-parity.ts index 4e5fb9e..06aa203 100644 --- a/testing/local-runtime/pi-parity.ts +++ b/testing/local-runtime/pi-parity.ts @@ -60,7 +60,7 @@ const catalog: PiModelDescriptor[] = [{ id: model, name: 'Deterministic acceptan api: 'openai-codex-responses', input: ['text'], contextWindow: 100000, maxTokens: 10000, reasoning: ['low', 'medium', 'high'] }]; const requestOptions = { maxRetries: 0, timeout: timeoutMs }; const digest = (value: string) => createHash('sha256').update(value).digest('hex'); -const command = (program: string) => ({ command: ['node', '-e', program], cwd: '/workspace' }); +const command = (program: string) => ({ command: ['node', '--disable-warning=UNDICI-EHPA', '-e', program], cwd: '/workspace' }); const proofPath = '/workspace/parity.txt'; const proofText = `Real worker Pi file ${nonce}\n`; const deniedPath = `/home/agent/parity-denied-${nonce}`; diff --git a/testing/local-runtime/subprocess-fixtures.ts b/testing/local-runtime/subprocess-fixtures.ts index edfc7fe..917b8f4 100644 --- a/testing/local-runtime/subprocess-fixtures.ts +++ b/testing/local-runtime/subprocess-fixtures.ts @@ -3,16 +3,19 @@ export const nodeSubprocessStdioProbe = String.raw` const assert = require('node:assert/strict'); const { spawnSync, spawn } = require('node:child_process'); const child = "let input='';process.stdin.setEncoding('utf8');process.stdin.on('data',chunk=>input+=chunk);process.stdin.on('end',()=>{process.stdout.write('out:'+input);process.stderr.write('err:'+input)});"; -const sync = spawnSync(process.execPath, ['-e', child], { input: 'sync', encoding: 'utf8', timeout: 3000 }); +// Newer Node 22 releases announce their environment proxy on stderr at startup. +// Exclude that known warning while still asserting every byte from the child. +const nodeArgs = program => ['--disable-warning=UNDICI-EHPA', '-e', program]; +const sync = spawnSync(process.execPath, nodeArgs(child), { input: 'sync', encoding: 'utf8', timeout: 3000 }); assert.equal(sync.error, undefined); assert.equal(sync.status, 0); assert.equal(sync.stdout, 'out:sync'); assert.equal(sync.stderr, 'err:sync'); -const failed = spawnSync(process.execPath, ['-e', "console.error('intentional-failure');process.exitCode=7"], { encoding: 'utf8', timeout: 3000 }); +const failed = spawnSync(process.execPath, nodeArgs("console.error('intentional-failure');process.exitCode=7"), { encoding: 'utf8', timeout: 3000 }); assert.equal(failed.error, undefined); assert.equal(failed.status, 7); assert.equal(failed.stderr, 'intentional-failure\n'); -const asyncChild = spawn(process.execPath, ['-e', child]); +const asyncChild = spawn(process.execPath, nodeArgs(child)); let stdout = '', stderr = ''; asyncChild.stdout.on('data', chunk => stdout += chunk); asyncChild.stderr.on('data', chunk => stderr += chunk); diff --git a/tests/pi/managed-subprocess.test.ts b/tests/pi/managed-subprocess.test.ts index 8fb5265..31d9446 100644 --- a/tests/pi/managed-subprocess.test.ts +++ b/tests/pi/managed-subprocess.test.ts @@ -14,7 +14,7 @@ import { nodeSubprocessStdioProbe, restrictedNetworkSocketProbe } from '../../te // requires an explicitly selected executable; missing prerequisites never pass. describe.skipIf(process.platform !== 'linux' || process.env.CODEX_REQUIRE_PARITY !== 'true')('official managed subprocess compatibility', () => { it.each([ - { name: 'captures Node subprocess stdin/stdout/stderr and preserves failures', command: [process.execPath, '-e', nodeSubprocessStdioProbe], output: 'local-subprocess-stdio-ok\n' }, + { name: 'captures Node subprocess stdin/stdout/stderr and preserves failures', command: [process.execPath, '--disable-warning=UNDICI-EHPA', '-e', nodeSubprocessStdioProbe], output: 'local-subprocess-stdio-ok\n' }, { name: 'permits anonymous socketpairs while denying external and named socket connections', command: ['python3', '-c', restrictedNetworkSocketProbe], output: 'local-socket-only-ok\n' }, ])('$name', async ({ command, output }) => { const binary = process.env.CODEX_CONFORMANCE_BINARY; From efe2a5e992f763c9bb3c141801493c07084d89a3 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 22:21:57 -0700 Subject: [PATCH 09/11] Keep Pi file results separate from process diagnostics --- desktop/tests/local_pi_e2e.rs | 8 ++++---- src/runner/pi-effect-broker.ts | 10 ++++++---- src/runner/pi-managed-tools.ts | 14 ++++++++++++++ tests/pi/managed-effects.test.ts | 11 ++++++++++- tests/pi/managed-tools.test.ts | 31 ++++++++++++++++++++++++++++++- 5 files changed, 64 insertions(+), 10 deletions(-) diff --git a/desktop/tests/local_pi_e2e.rs b/desktop/tests/local_pi_e2e.rs index 489881a..317bdd6 100644 --- a/desktop/tests/local_pi_e2e.rs +++ b/desktop/tests/local_pi_e2e.rs @@ -412,7 +412,7 @@ fn saved_pi_agent_runs_managed_tools_and_restores_in_rust_console() { &mut app, "Task", &format!( - "Perform this exact managed workspace verification using all four tools: (1) write_file path {file} with content {first}; (2) read_file that path and confirm its exact content; (3) list_files /workspace and locate that file; (4) exec_command with command array [\"node\",\"-e\",\"console.log('RUST_UI_WORKER '+process.getuid()+' '+process.platform)\"] and confirm it prints RUST_UI_WORKER 10001 linux. Then respond with exactly {first}." + "Perform this exact managed workspace verification using all four tools: (1) write_file path {file} with content {first}; (2) read_file that path and confirm its exact content; (3) list_files /workspace and locate that file; (4) exec_command with command array [\"node\",\"--disable-warning=UNDICI-EHPA\",\"-e\",\"console.log('RUST_UI_WORKER '+process.getuid()+' '+process.platform)\"] and confirm it prints RUST_UI_WORKER 10001 linux. Then respond with exactly {first}." ), ); capture(&mut app, &evidence, "managed-session-form.png"); @@ -471,7 +471,7 @@ fn saved_pi_agent_runs_managed_tools_and_restores_in_rust_console() { }); let guest_command = require_operation( &first_commands, - &json!({"command":["node","-e","console.log('RUST_UI_WORKER '+process.getuid()+' '+process.platform)"]}), + &json!({"command":["node","--disable-warning=UNDICI-EHPA","-e","console.log('RUST_UI_WORKER '+process.getuid()+' '+process.platform)"]}), |text| text.trim() == "RUST_UI_WORKER 10001 linux", ); show_command(&mut app, guest_command); @@ -499,7 +499,7 @@ fn saved_pi_agent_runs_managed_tools_and_restores_in_rust_console() { &mut app, "Message", &format!( - "Continue this same Session. Use read_file on {file} to confirm the existing content is {first}. Then use write_file to replace its content with exactly {second}, use read_file again to verify it, and use exec_command with command array [\"node\",\"-e\",\"console.log('RUST_UI_CONTINUED '+process.getuid())\"]. Respond with exactly {second}." + "Continue this same Session. Use read_file on {file} to confirm the existing content is {first}. Then use write_file to replace its content with exactly {second}, use read_file again to verify it, and use exec_command with command array [\"node\",\"--disable-warning=UNDICI-EHPA\",\"-e\",\"console.log('RUST_UI_CONTINUED '+process.getuid())\"]. Respond with exactly {second}." ), ); click(&mut app, "Send"); @@ -541,7 +541,7 @@ fn saved_pi_agent_runs_managed_tools_and_restores_in_rust_console() { }); let continued_command = require_operation( &continued_commands, - &json!({"command":["node","-e","console.log('RUST_UI_CONTINUED '+process.getuid())"]}), + &json!({"command":["node","--disable-warning=UNDICI-EHPA","-e","console.log('RUST_UI_CONTINUED '+process.getuid())"]}), |text| text.trim() == "RUST_UI_CONTINUED 10001", ); show_command(&mut app, continued_command); diff --git a/src/runner/pi-effect-broker.ts b/src/runner/pi-effect-broker.ts index 48f6e0c..1bd82e8 100644 --- a/src/runner/pi-effect-broker.ts +++ b/src/runner/pi-effect-broker.ts @@ -3,7 +3,7 @@ import { mkdtemp, chown, rm } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { Type } from 'typebox'; -import { PI_MANAGED_TOOLS, parsePiManagedOperation, piManagedCommand } from './pi-managed-tools.js'; +import { PI_MANAGED_TOOLS, parsePiManagedOperation, piManagedCommand, piManagedResult } from './pi-managed-tools.js'; import AjvModule from 'ajv'; import { CodexRpcClient } from '../adapters/codex-rpc.js'; import type { NativeLease } from '../core/session-native-store.js'; @@ -88,7 +88,8 @@ export async function createPiEffectBroker(options: { launch: SessionLaunch; pla }), isError: response.isError === true }; } if (!managed) throw new Error('Managed tools require an environment'); - const command = piManagedCommand(parsePiManagedOperation(request), process.execPath, plan.workspace); + const operation = parsePiManagedOperation(request); + const command = piManagedCommand(operation, process.execPath, plan.workspace); const processId = `pi-${randomUUID()}`; const invocation = AbortSignal.any([signal, shutdown.signal]); invocation.throwIfAborted(); @@ -108,9 +109,10 @@ export async function createPiEffectBroker(options: { launch: SessionLaunch; pla try { const response = await Promise.race([execution, failedCancellation]); await cancellation; - if (!record(response)) throw new Error('Invalid managed command response'); + if (!record(response) || typeof response.stdout !== 'string' || typeof response.stderr !== 'string' + || typeof response.exitCode !== 'number' || !Number.isInteger(response.exitCode)) throw new Error('Invalid managed command response'); await options.flushWorkspace?.(); - return { output: [{ type: 'text' as const, text: `${String(response.stdout ?? '')}${String(response.stderr ?? '')}` }], isError: response.exitCode !== 0 }; + return piManagedResult(operation, { stdout: response.stdout, stderr: response.stderr, exitCode: response.exitCode }); } catch (error) { shutdown.abort(error); throw error; } finally { invocation.removeEventListener('abort', cancel); } })(); diff --git a/src/runner/pi-managed-tools.ts b/src/runner/pi-managed-tools.ts index efdce11..1c8a86a 100644 --- a/src/runner/pi-managed-tools.ts +++ b/src/runner/pi-managed-tools.ts @@ -1,5 +1,6 @@ import { Type } from 'typebox'; import AjvModule from 'ajv'; +import type { ToolExecutionResult } from '@earendil-works/pi-durable'; import type { PiEffectTool, PiToolEffect } from './pi/protocol.js'; export const PI_MANAGED_TOOLS: readonly PiEffectTool[] = [ @@ -12,6 +13,12 @@ export type PiManagedOperation = | { kind: 'read' | 'list'; path: string } | { kind: 'write'; path: string; content: string }; +export interface PiManagedCommandResponse { + readonly stdout: string; + readonly stderr: string; + readonly exitCode: number; +} + const ajv = new AjvModule.default({ strict: false }); const validators = new Map(PI_MANAGED_TOOLS.map(tool => [tool.name, ajv.compile(tool.parameters)])); const FILE_PROGRAM = `const fs=require('node:fs');const [op,path,data]=process.argv.slice(1);if(op==='read')process.stdout.write(fs.readFileSync(path,'utf8'));else if(op==='write'){fs.writeFileSync(path,data);console.log('Written');}else if(op==='list')console.log(JSON.stringify(fs.readdirSync(path,{withFileTypes:true}).map(e=>({name:e.name,directory:e.isDirectory()}))));else throw Error('Invalid file operation');`; @@ -33,3 +40,10 @@ export function piManagedCommand(operation: PiManagedOperation, nodeBinary: stri ? { command: [...operation.command], cwd: operation.cwd ?? workspace } : { command: [nodeBinary, '-e', FILE_PROGRAM, operation.kind, operation.path, operation.kind === 'write' ? operation.content : ''], cwd: workspace }; } + +export function piManagedResult(operation: PiManagedOperation, response: PiManagedCommandResponse): ToolExecutionResult { + const isError = response.exitCode !== 0; + // File stdout is data; successful runtime warnings must not alter its bytes. + const text = operation.kind === 'command' || isError ? response.stdout + response.stderr : response.stdout; + return { output: [{ type: 'text', text }], isError }; +} diff --git a/tests/pi/managed-effects.test.ts b/tests/pi/managed-effects.test.ts index 08f337a..1ad9717 100644 --- a/tests/pi/managed-effects.test.ts +++ b/tests/pi/managed-effects.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { mkdtemp, rm, access, symlink, readFile } from 'node:fs/promises'; +import { mkdtemp, mkdir, rm, access, symlink, readFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; import { createServer } from 'node:http'; @@ -34,6 +34,15 @@ describe('Pi managed effect boundary', () => { const broker = await createPiEffectBroker({ launch, plan, lease }); const signal = new AbortController(); try { + const filesDirectory = join(workspace, 'files'); await mkdir(filesDirectory); + const file = join(filesDirectory, 'data.txt'); + const content = 'exact file data\n[UNDICI-EHPA] is valid file content é'; + const write = await broker.execute(effect('write_file', { path: file, content }), signal.signal); + expect(write).toEqual({ output: [{ type: 'text', text: 'Written\n' }], isError: false }); + const read = await broker.execute(effect('read_file', { path: file }), signal.signal); + expect(read).toEqual({ output: [{ type: 'text', text: content }], isError: false }); + const list = await broker.execute(effect('list_files', { path: filesDirectory }), signal.signal); + expect(list).toEqual({ output: [{ type: 'text', text: '[{"name":"data.txt","directory":false}]\n' }], isError: false }); const marker = join(workspace, 'started'); const child = `const fs=require('node:fs');const path=process.argv[1];fs.writeFileSync(path,'ready');setInterval(()=>fs.appendFileSync(path,'.'),20);setTimeout(()=>process.exit(0),3000);`; const parent = `require('node:child_process').spawn(process.execPath,['-e',process.argv[1],process.argv[2]],{stdio:'inherit'});setInterval(()=>{},1000);`; diff --git a/tests/pi/managed-tools.test.ts b/tests/pi/managed-tools.test.ts index 98b38db..3577295 100644 --- a/tests/pi/managed-tools.test.ts +++ b/tests/pi/managed-tools.test.ts @@ -1,5 +1,5 @@ import { expect, it } from 'vitest'; -import { parsePiManagedOperation, piManagedCommand } from '../../src/runner/pi-managed-tools.js'; +import { parsePiManagedOperation, piManagedCommand, piManagedResult } from '../../src/runner/pi-managed-tools.js'; import type { PiToolEffect } from '../../src/runner/pi/protocol.js'; const effect = (name: string, args: PiToolEffect['arguments']): PiToolEffect => ({ kind: 'managed', name, arguments: args, callId: 'one', taskId: 1, conversationId: 1 }); @@ -23,3 +23,32 @@ it.each([ ])('rejects operations outside the fixed capability envelope', request => { expect(() => parsePiManagedOperation(request)).toThrow('capability envelope'); }); + +const runtimeWarning = '(node:2) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental\n'; + +it.each([ + { name: 'read_file', args: { path: 'file' }, stdout: 'file content\n[UNDICI-EHPA] is also valid file data\0é' }, + { name: 'read_file', args: { path: 'empty' }, stdout: '' }, + { name: 'write_file', args: { path: 'file', content: 'data' }, stdout: 'Written\n' }, + { name: 'list_files', args: { path: '.' }, stdout: '[{"name":"file","directory":false}]\n' }, +])('keeps successful $name data exact when the runtime writes a warning', ({ name, args, stdout }) => { + const operation = parsePiManagedOperation(effect(name, args)); + const response = Object.freeze({ stdout, stderr: runtimeWarning, exitCode: 0 }); + expect(piManagedResult(operation, response)).toEqual({ output: [{ type: 'text', text: stdout }], isError: false }); +}); + +it.each([ + effect('read_file', { path: 'missing' }), + effect('write_file', { path: '/outside', content: 'denied' }), + effect('list_files', { path: 'missing' }), + effect('exec_command', { command: ['false'] }), +])('retains stdout and stderr for a failed $name operation', request => { + const stdout = 'partial output\n'; const stderr = `operation failed\n${runtimeWarning}`; + expect(piManagedResult(parsePiManagedOperation(request), { stdout, stderr, exitCode: 1 })) + .toEqual({ output: [{ type: 'text', text: stdout + stderr }], isError: true }); +}); + +it('retains successful command diagnostics', () => { + expect(piManagedResult(parsePiManagedOperation(effect('exec_command', { command: ['true'] })), { stdout: 'result\n', stderr: runtimeWarning, exitCode: 0 })) + .toEqual({ output: [{ type: 'text', text: `result\n${runtimeWarning}` }], isError: false }); +}); From 22b30e76e14f52d5d56e4bdd58b9a592c99ce569 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 22:37:58 -0700 Subject: [PATCH 10/11] Accept authentication-only Codex requirements without widening tools --- src/domain/codex-managed-policy.ts | 30 ++++++++++++++++++- tests/adapters/codex-managed-policy.test.ts | 33 ++++++++++++++++++++- tests/agents/native-managed-policy.test.ts | 24 +++++++++++++++ 3 files changed, 85 insertions(+), 2 deletions(-) diff --git a/src/domain/codex-managed-policy.ts b/src/domain/codex-managed-policy.ts index a310dbc..d399d11 100644 --- a/src/domain/codex-managed-policy.ts +++ b/src/domain/codex-managed-policy.ts @@ -27,7 +27,7 @@ export function managedCodexConfiguration(policy: ManagedCodexPolicy) { /** Validate the merged public configuration, not merely the flags we requested. */ export function managedCodexPolicyMatches(value: unknown, requirements: unknown, policy: ManagedCodexPolicy): boolean { - if (!record(value) || !record(value.config) || !record(requirements) || requirements.requirements !== null) return false; + if (!record(value) || !record(value.config) || !managedCodexRequirementsSafe(requirements)) return false; const config = value.config; const expected = managedCodexConfiguration(policy); return config.approval_policy === expected.approval_policy @@ -37,6 +37,34 @@ export function managedCodexPolicyMatches(value: unknown, requirements: unknown, && equivalent(config.projects, expected.projects); } +// These public 0.164 requirements can affect execution, startup or persistence. +// Absence is understood; an active requirement needs its own policy review. +const inactiveRequirementFields = new Set([ + 'modelProvider', 'modelProviders', 'cliAuthCredentialsStore', 'chatgptBaseUrl', + 'additionalDeveloperInstructions', 'allowedApprovalPolicies', 'allowedApprovalsReviewers', + 'allowedSandboxModes', 'allowedWindowsSandboxImplementations', 'allowedPermissionProfiles', + 'defaultPermissions', 'allowedWebSearchModes', 'allowManagedHooksOnly', 'allowBrowserAndComputerUse', + 'allowAppshots', 'allowRemoteControl', 'computerUse', 'browserUse', 'inAppBrowser', + 'featureRequirements', 'hooks', 'enforceResidency', 'network', 'application', 'autoReview', + 'models', 'sqliteHome', 'logDir', 'modelCatalogJson', 'checkForUpdateOnStartup', 'allowLoginShell', 'feedback', +]); + +/** Authentication restrictions do not grant execution authority or change the selected profile. */ +export function managedCodexRequirementsSafe(value: unknown): boolean { + if (!record(value) || !Object.hasOwn(value, 'requirements')) return false; + if (Object.keys(value).some(key => key !== 'requirements' && key !== 'supportsIndependentSpeedModes')) return false; + if (value.supportsIndependentSpeedModes != null && typeof value.supportsIndependentSpeedModes !== 'boolean') return false; + if (value.requirements === null) return true; + if (!record(value.requirements)) return false; + return Object.entries(value.requirements).every(([key, restriction]) => { + if (key !== 'allowedLoginMethods') return inactiveRequirementFields.has(key) && restriction === null; + // Upstream permits an empty list (no login), and serializes known methods in lowercase. + return restriction === null || Array.isArray(restriction) + && restriction.every(method => method === 'api' || method === 'chatgpt') + && new Set(restriction).size === restriction.length; + }); +} + function equivalent(actual: unknown, expected: unknown): boolean { return JSON.stringify(canonical(actual)) === JSON.stringify(canonical(expected)); } diff --git a/tests/adapters/codex-managed-policy.test.ts b/tests/adapters/codex-managed-policy.test.ts index 0a4fe2d..8b2bbed 100644 --- a/tests/adapters/codex-managed-policy.test.ts +++ b/tests/adapters/codex-managed-policy.test.ts @@ -1,6 +1,6 @@ import { expect, it } from 'vitest'; import { verifyManagedCodexPolicy } from '../../src/adapters/codex-managed-policy.js'; -import { managedCodexConfiguration, managedCodexPolicyMatches, type ManagedCodexPolicy } from '../../src/domain/codex-managed-policy.js'; +import { managedCodexConfiguration, managedCodexPolicyMatches, managedCodexRequirementsSafe, type ManagedCodexPolicy } from '../../src/domain/codex-managed-policy.js'; const policy: ManagedCodexPolicy = { workspace: '/workspace', network: { access: 'disabled', allowed_domains: [] }, credentialProxy: false }; @@ -11,8 +11,39 @@ it('keeps no-egress intent independent from the upstream proxy-enabled bit', () expect(managedCodexPolicyMatches({ config }, { requirements: null }, policy)).toBe(true); }); +it.each([ + null, {}, { allowedLoginMethods: null }, { allowedLoginMethods: [] }, + { allowedLoginMethods: ['api'] }, { allowedLoginMethods: ['chatgpt'] }, { allowedLoginMethods: ['api', 'chatgpt'] }, + { allowedLoginMethods: ['chatgpt'], network: null, allowedPermissionProfiles: null, modelProvider: null, hooks: null }, +])('accepts absent execution requirements and authentication-only restrictions: %j', requirements => { + const response = { supportsIndependentSpeedModes: true, requirements }; + expect(managedCodexRequirementsSafe(response)).toBe(true); + expect(managedCodexPolicyMatches({ config: managedCodexConfiguration(policy) }, response, policy)).toBe(true); +}); + +it.each([ + { allowedLoginMethods: 'chatgpt' }, { allowedLoginMethods: ['saml'] }, { allowedLoginMethods: ['Chatgpt'] }, + { allowedLoginMethods: ['chatgpt', 'chatgpt'] }, { allowedLoginMethods: [null] }, + { allowedLoginMethods: ['chatgpt'], network: { allowedDomains: ['example.com'] } }, + { allowedLoginMethods: ['chatgpt'], allowedPermissionProfiles: {} }, + { allowedLoginMethods: ['chatgpt'], allowLoginShell: false }, + { allowedLoginMethods: ['chatgpt'], unknownAuthority: null }, + { allowedLoginMethods: ['chatgpt'], unknownAuthority: true }, +])('rejects malformed authentication or additional requirements: %j', requirements => { + expect(managedCodexRequirementsSafe({ requirements })).toBe(false); + expect(managedCodexPolicyMatches({ config: managedCodexConfiguration(policy) }, { requirements }, policy)).toBe(false); +}); + +it.each([{}, { requirements: [] }, { requirements: null, supportsIndependentSpeedModes: 'true' }, { requirements: null, unknownAuthority: null }])( + 'rejects an unknown or malformed requirements response: %j', response => { + expect(managedCodexRequirementsSafe(response)).toBe(false); + }, +); + it.each([ { name: 'managed requirements', requirements: { requirements: { network: { allowedDomains: ['example.com'] } } } }, + { name: 'authentication mixed with execution requirements', requirements: { requirements: { allowedLoginMethods: ['chatgpt'], network: { allowedDomains: ['example.com'] } } } }, + { name: 'authentication mixed with unknown requirements', requirements: { requirements: { allowedLoginMethods: ['chatgpt'], unknownAuthority: null } } }, { name: 'missing requirements response', requirements: {} }, { name: 'missing policy-layer inventory' }, { name: 'unknown effective grants', extend: { permissions: { rat_managed: { filesystem: { '/': 'write' } } } } }, diff --git a/tests/agents/native-managed-policy.test.ts b/tests/agents/native-managed-policy.test.ts index 359d037..8cdc296 100644 --- a/tests/agents/native-managed-policy.test.ts +++ b/tests/agents/native-managed-policy.test.ts @@ -6,6 +6,7 @@ import { CodexRpcClient } from '../../src/adapters/codex-rpc.js'; import { verifyManagedCodexPolicy } from '../../src/adapters/codex-managed-policy.js'; import { hostedCodexArguments } from '../../src/runner/hosted-environment-planning.js'; import type { ManagedCodexPolicy } from '../../src/domain/codex-managed-policy.js'; +import { localCodexArguments } from '../../src/runner/local-codex.js'; it.each(['clean', 'restricted-uppercase', 'untrusted-project', 'inherited-domain', 'inherited-filesystem', 'inherited-credential-broker', 'private-rules'] as const)( 'checks the actual official executor policy before tools: %s', async mode => { @@ -39,3 +40,26 @@ it.each(['clean', 'restricted-uppercase', 'untrusted-project', 'inherited-domain else await expect(verified).rejects.toThrow('Refusing to expose execution tools'); } finally { await rpc.close(); await rm(root, { recursive: true, force: true }); } }, 15_000); + +it.each(['chatgpt', 'api'] as const)('accepts the official %s login restriction with a separate guest workspace', async login => { + const root = await mkdtemp(join(tmpdir(), 'rat-native-remote-policy-')); + const home = join(root, 'home'); + // The host harness has no guest workspace mounted locally. Policy verification + // must preserve its remote path rather than substituting the host process cwd. + const workspace = join(root, 'absent-guest-workspace'); + await mkdir(home); + const policy: ManagedCodexPolicy = { workspace, network: { access: 'disabled', allowed_domains: [] }, credentialProxy: false }; + const arguments_ = hostedCodexArguments(localCodexArguments(['app-server']), policy.network, false, workspace); + // Keep the final override last: the production local arguments intentionally force ChatGPT. + if (login === 'api') arguments_.splice(arguments_.length - 1, 0, '-c', 'forced_login_method="api"'); + const rpc = new CodexRpcClient({ binary: process.env.CODEX_CONFORMANCE_BINARY ?? resolve('node_modules/.bin/codex'), + cwd: home, binaryArguments: arguments_, environment: { PATH: process.env.PATH, HOME: home, CODEX_HOME: home }, + onServerRequest: async () => { throw new Error('Unexpected approval'); }, + }); + try { + await rpc.initialize(); + const requirements = await rpc.call('configRequirements/read', {}); + expect(requirements).toMatchObject({ requirements: { allowedLoginMethods: [login] } }); + await expect(verifyManagedCodexPolicy({ call: rpc.call.bind(rpc), policy })).resolves.toBeUndefined(); + } finally { await rpc.close(); await rm(root, { recursive: true, force: true }); } +}, 15_000); From b75947e500fbbc025f41554d7f2e4e04e6622489 Mon Sep 17 00:00:00 2001 From: Greg Pazo Date: Sun, 25 Oct 2026 23:14:44 -0700 Subject: [PATCH 11/11] Resolve isolated worker hostnames locally before Codex startup --- runtime/native/init.sh | 4 +++ testing/local-runtime/linux-kvm/init.sh | 4 +++ tests/scripts/native-guest-hostname.test.ts | 40 +++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 tests/scripts/native-guest-hostname.test.ts diff --git a/runtime/native/init.sh b/runtime/native/init.sh index 4012883..28d7fc4 100644 --- a/runtime/native/init.sh +++ b/runtime/native/init.sh @@ -9,6 +9,10 @@ if [ "${1:-}" != rat-root-mounted ]; then exec chroot . /init rat-root-mounted fi mount -t proc proc /proc +# Resolve the guest's own hostname locally before executor configuration discovery. +printf '%s\n' rat-things-worker > /proc/sys/kernel/hostname +printf '%s\n' rat-things-worker > /etc/hostname +printf '%s\n' '127.0.0.1 localhost rat-things-worker' '::1 localhost rat-things-worker' > /etc/hosts mount -t sysfs sysfs /sys mount -t devtmpfs devtmpfs /dev mkdir -p /dev/pts /dev/shm /run /tmp /workspace /mnt/rat-disk diff --git a/testing/local-runtime/linux-kvm/init.sh b/testing/local-runtime/linux-kvm/init.sh index c2ee9c0..8193255 100644 --- a/testing/local-runtime/linux-kvm/init.sh +++ b/testing/local-runtime/linux-kvm/init.sh @@ -11,6 +11,10 @@ if [ "${1:-}" != rat-root-mounted ]; then exec chroot . /init rat-root-mounted fi mount -t proc proc /proc +# Resolve the guest's own hostname locally before executor configuration discovery. +printf '%s\n' rat-things-worker > /proc/sys/kernel/hostname +printf '%s\n' rat-things-worker > /etc/hostname +printf '%s\n' '127.0.0.1 localhost rat-things-worker' '::1 localhost rat-things-worker' > /etc/hosts mount -t sysfs sysfs /sys mount -t devtmpfs devtmpfs /dev mkdir -p /dev/pts /dev/shm /run /tmp /workspace /mnt/rat-disk diff --git a/tests/scripts/native-guest-hostname.test.ts b/tests/scripts/native-guest-hostname.test.ts new file mode 100644 index 0000000..92f8f5a --- /dev/null +++ b/tests/scripts/native-guest-hostname.test.ts @@ -0,0 +1,40 @@ +import { execFile } from 'node:child_process'; +import { mkdtemp, mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { promisify } from 'node:util'; +import { expect, it } from 'vitest'; + +it.each(['runtime/native/init.sh', 'testing/local-runtime/linux-kvm/init.sh'])('bootstraps a locally resolvable guest identity after archive scrubbing: %s', async script => { + const source = await readFile(script, 'utf8'); + await promisify(execFile)('bash', ['-n', script]); + const start = source.indexOf('mount -t proc proc /proc\n') + 'mount -t proc proc /proc\n'.length; + const end = source.indexOf('mount -t sysfs sysfs /sys', start); + expect(start).toBeGreaterThan('mount -t proc proc /proc\n'.length); + expect(end).toBeGreaterThan(start); + expect(end).toBeLessThan(source.indexOf('exec python3 /opt/rat-things/native-guest.py')); + const root = await mkdtemp(join(tmpdir(), 'rat-guest-hostname-')); + try { + const files = ['/proc/sys/kernel/hostname', '/etc/hostname', '/etc/hosts']; + await mkdir(join(root, 'proc/sys/kernel'), { recursive: true }); + await mkdir(join(root, 'etc')); + for (const file of files) await writeFile(join(root, file), '', { mode: 0o644 }); + // Execute the actual boot assignments against an empty disposable filesystem; + // never write the test host's /etc or kernel hostname. + let bootstrap = source.slice(start, end); + expect([...bootstrap.matchAll(/>\s*(\S+)/g)].map(match => match[1]).sort()).toEqual([...files].sort()); + for (const file of files) bootstrap = bootstrap.replaceAll(file, `'${join(root, file)}'`); + await promisify(execFile)('bash', ['-eu', '-c', bootstrap]); + const hostname = (await readFile(join(root, '/proc/sys/kernel/hostname'), 'utf8')).trim(); + expect(hostname).toBe('rat-things-worker'); + expect((await readFile(join(root, '/etc/hostname'), 'utf8')).trim()).toBe(hostname); + const addresses = (await readFile(join(root, '/etc/hosts'), 'utf8')).trim().split('\n').map(line => { + const [address, ...names] = line.trim().split(/\s+/); + expect(names).toContain(hostname); + expect(names).toContain('localhost'); + return address; + }); + expect(addresses.sort()).toEqual(['127.0.0.1', '::1']); + for (const file of ['/etc/hostname', '/etc/hosts']) expect((await stat(join(root, file))).mode & 0o777).toBe(0o644); + } finally { await rm(root, { recursive: true, force: true }); } +});