Skip to content

chore(test): align Bun runner with the 1.4.4 security baseline - #7627

Merged
lidge-jun merged 8 commits into
devfrom
codex/test-runner-role-verification-20261023
Oct 25, 2026
Merged

lidge-jun merged 8 commits into
devfrom
codex/test-runner-role-verification-20261023

Conversation

@luvs01

@luvs01 luvs01 commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Align the test-runner default with the Bun 1.4.4 security runtime introduced by #7606. Both runtime and test-runner roles select 1.4.4; role validation and CI trigger policy remain intact.

The layout test uses explicit caller/runner fixtures to check version rejection, isolation arguments and the working directory. Production resolvers are unchanged.

The buffered HTTP/1 upload fixture uses a draining TLS origin with explicit response framing. It now waits for the first request-body byte before sending its early reply, rather than accepting a header-only exchange as upload evidence. A separate TLS regression sends headers, waits for the origin to observe them, verifies that no reply was sent, then sends one byte and requires 413 / "early". The existing buffered test still requires incomplete upload, client closure and a successful subsequent request. Deadlines and production relay code are unchanged.

The recorded dev integration preserves zod 4.6.6, body-parser 2.4.0 and GUI happy-dom 21.0.4 security pins. No lockfile was regenerated.

Verification

  • Current candidate: ba67ddb501cc9ee2871025d8a6b812074afbdd08, two test-only follow-ups to 8b4c34c7e6103314dcb061f0f82a8eaafdb4d386. Runtime and configured runner remain Bun 1.4.4.
  • Official Bun 1.4.4+38afee6c8, Windows, on the final candidate: the split-headers TLS regression and buffered unfinished-upload case passed 2 tests / 8 assertions, with 21 unaffected cases filtered out. Command: bun test --isolate --timeout 60000 tests/claude-integration/claude-picker-upload.test.ts --test-name-pattern "^(early-fin origin waits for the first body byte after separate headers|h1 early upstream response closes a buffered unfinished upload without losing the reply)$".
  • The direct test connection is destroyed before fixture shutdown, including assertion failures. A controlled throw after header observation exited with the expected nonzero status and output EOF after cleanup; the diagnostic change was restored before final validation. This is failure-path evidence, not a passing application test or proof that every socket was absent at the immediate cleanup snapshot.
  • Final-project TypeScript and changed-file privacy, size and whitespace checks passed with native exit 0 and output EOF. Focused checks were used on the shared Windows host; the full file/suite and other platforms were not rerun locally.
  • Previous head 8b4c34c7 passed full-platform CI with 28 successful jobs / 6 conditional skips, and PR CI. These results support the unchanged transition code but do not qualify the new candidate. Skipped lanes are not counted as executed tests. Earlier f011a94be local role/upload/layout checks passed 88 cases with 3 skips using an older installed dependency tree; hosted CI used frozen installs.
  • The original native macOS journal failure on 8b4c34c7 remains recorded. The maintainer's diagnostic addendum reports the ordered batch passing 3/3 on both HEAD and base, plus the journal file passing 3/3 alone. It is currently unreproduced; the precise cause and preceding-suite dependence remain unproven, and the original child diagnostics were not captured. The journal blob is unchanged at those revisions and this candidate. No additional repetition is requested.
  • Current-head CI is pending. A successful exact-head full cross-platform run and explicit maintainer workflow/dependency security acceptance remain required before merge.
  • First-byte receipt is not packet-level FIN/reset proof or a measurement of bytes queued at response time. Bun 1.4.3 remains historical comparison evidence only. No live service, global environment, certificate trust store or runtime installation was changed.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Summary by CodeRabbit

  • Chores
    • Updated the Bun runtime and test-runner versions to 1.4.4, while retaining independent validation for each role.
  • Documentation
    • Updated setup guidance and promotion criteria. Promotion requires a successful full cross-platform run on the exact candidate revision.
  • Tests
    • Expanded coverage for test-runner selection and version checks, and for early responses during buffered uploads.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the chore Maintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature). label Oct 23, 2026
@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 8b4c34c and ba67ddb.

Files selected for processing: 1
  • tests/claude-integration/claude-picker-upload.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

Walkthrough

The testRunnerBun pin changes to 1.4.4, matching the shipped runtime. Guidance and tests describe separate validation for both Bun roles and the full cross-platform candidate-run requirement. Upload tests add an early TLS response mode and check request-body completion and response flushing.

Changes: Bun Role Alignment

Layer / File(s) Summary
Align Bun pins, validation, and promotion guidance
package.json, tests/test-layout-tooling.test.ts, tests/ci-workflows/*, .github/actions/setup-project-bun/action.yml, .github/workflows/ci.yml, Dockerfile, CONTRIBUTING.md, docs-site/src/content/docs/contributing.md, structure/runtime.md
The testRunnerBun pin changes from 1.4.3 to 1.4.4. Runner-selection tests cover matching and differing caller versions and an incorrect override. CI comments, tests, and documentation state that the runtime and test-runner roles are validated independently. They specify that promotion requires a successful full cross-platform lane=all run on the candidate head.

Early TLS Response Upload Tests

Layer / File(s) Summary
Exercise buffered uploads with early TLS responses
tests/claude-integration/claude-picker-upload.test.ts
The fixture adds an early-response TLS mode that records whether the request body is complete and whether the response flushes. A direct-origin test checks that the origin sends no reply before the first body byte, then returns a flushed 413 while the request remains incomplete. Buffered cases verify that the origin receives only part of the advertised 32 MiB body.

Priority: Low

Estimated code review effort: 2 (Simple) | ~12 minutes

Change: Other

Possibly related PRs

  • lidge-jun/opencodex#7606: This PR updates the testRunnerBun pin to match the shipped Bun 1.4.4 runtime introduced in #7606.
  • lidge-jun/opencodex#7420: This PR adds the same early-FIN upload fixture behavior and checks for incomplete request bodies and flushed responses.
Merge Risk: Minimal · up to ba67d

No actionable merge-blocking risk is established by the reviewed changes.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 4 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title accurately and concisely describes the primary change: aligning the Bun test runner with the 1.4.4 security baseline.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@luvs01
luvs01 marked this pull request as ready for review October 23, 2026 14:11
@luvs01
luvs01 marked this pull request as draft October 24, 2026 01:42
@lidge-jun

Copy link
Copy Markdown
Owner

Triage note (2026-10-24, against dev at 2494848).

Needs fixes before this can land: resolve dev conflicts, preserve dependency repairs from #7642/#7644, then refresh required CI and lane=all on the resulting head. Obtain explicit workflow/dependency security review.

Still needed on dev: partial — runtime 1.4.4 already landed in #7606 / 7416f18a7a; testRunnerBun remains 1.4.3 (package.json:43, :85).

Exact-head CI at triage time: a9c3d12 — aggregate/Ubuntu PASS; cancelled enforce-target attempt followed by success. lane=all on exact head: yes, run 39960640535: Windows 9/9, macOS 3/3 and control, Ubuntu 4/4 passed.

Please refresh onto current dev when addressing these; heads older than dev need a fresh exact-head CI run before review.

@luvs01 luvs01 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Follow-up to the triage request

Reviewed f011a94be1b468b7b785cb54976d4cb4a9b6a563 against dev@2494848f56e8a4f283722b2ebd816977e828c7af, which remains the current dev tip. The existing writer has already completed the normal dev merge and started fresh CI. No duplicate source change or workflow dispatch is needed.

Merge and dependency preservation

  • The head has parents a9c3d127d3728f50533df32504b787823b5220ee and 2494848f56e8a4f283722b2ebd816977e828c7af, including the repairs from #7642 and #7644.
  • bun.lock, gui/package.json and gui/bun.lock are byte-identical to current dev. The root package.json differs only in testRunnerBun: 1.4.3 → 1.4.4; zod 4.6.6, the body-parser 2.4.0 override/resolution, and GUI happy-dom 21.0.4 are preserved.
  • The resolved tests/ci-workflows/install-scripts.test.ts retains both the runner 1.4.4 assertion and the zod 4.6.6 assertion. No lockfile regeneration or dependency-policy rollback was found.

Workflow/dependency security review

Security-focused static review found no newly introduced privilege, credential-handling or dependency-policy regression in the reviewed delta:

  • Both changed .github files contain comment-only changes; their contents with comment lines removed match dev. Event triggers, job permissions, checkout credential persistence, immutable external action pins and frozen-lockfile installation commands are unchanged. Docker changes are also comments only, with the existing image digest retained.
  • Root dependencies, overrides, scripts and trustedDependencies match dev. The runner resolver and layout verifier are unchanged; wrong-version overrides still fail before test execution, and resolver probing does not download or install a runner.
  • The updated role fixture exercises matching/different callers and wrong-version refusal through the real resolver, retaining --isolate and the working-directory assertions.
  • The buffered HTTP/1 fixture remains test-only and retains the 413/early response, connection-close, incomplete-upload and subsequent-success assertions and original timeouts. Its writable finish observation is not packet-level FIN evidence. No production relay change was found.

This records author-side technical review evidence. Maintainer security acceptance remains outstanding. @lidge-jun @Ingwannu: please record explicit workflow/dependency security acceptance for this exact head; the existing reviewer requests remain in place.

Validation still pending on this head

  • Required PR CI — 40051221633 and full-platform lane=all — 40051232056 both target f011a94… and are queued/running. The latter has the Ubuntu four-shard, macOS three-shard plus control, and Windows nine-shard jobs.
  • The full-platform run skips its docs build; the required current-head docs site build is present in the PR run and still needs to finish.
  • Source/lockfile equality does not establish a successful fresh installation. The earlier a9c3d127 full-platform pass and recorded Windows focused tests do not replace these current-head gates.

No additional corrective code change was identified by this follow-up review. Keep the current draft state until the outstanding full-platform validation and explicit security-review requirement are satisfied.

@lidge-jun

Copy link
Copy Markdown
Owner

Independent source review (gpt-6.1-sol, dispatched by the triage manager, 2026-10-24) at head f011a94be1:

VERDICT: MUST-FIX
LANE_ALL_REQUIRED: yes

Reviewed current head f011a94be1b468b7b785cb54976d4cb4a9b6a563; all 11 changed files.

  • [P1] Exact-head validation remains incomplete — package.json:43, .github/workflows/ci.yml:583. PR CI, lane=all, and enforce-target remain unfinished. The runner promotion affects Windows and historical multi-file isolation failures. Fix: complete the existing runs successfully, including aggregate ci; address failures before promotion. Earlier-head passes do not qualify.

No additional source defect identified. Explicit workflow/dependency static security review found no new credential, permission, or installation-policy regression: workflow/Docker changes are comments only, and dependency changes relative to the integrated base are limited to the runner pin. Maintainer security acceptance remains unrecorded.

#7642/#7644 repairs and lockfiles are preserved. Existing test registrations remain valid; layout stays 1,999 lines, runtime documentation 600 lines, with no ratchet violation found. Regression assertions remain meaningful. PR template is complete; unresolved review threads: 0. Branch is mergeable, one commit behind live dev@ceef4889e4, with no overlapping changed paths.

NOT RUN: tests, typecheck, builds, or repository gates—read-only review.

This is a read-only source review; merging still requires the gates named above (exact-head CI, lane=all where marked, and maintainer acceptance where required).

luvs01 commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator Author

Exact-head validation update for f011a94be1b468b7b785cb54976d4cb4a9b6a563: lane=all succeeded with 28 successful jobs and 6 conditional skips; PR CI succeeded, including its aggregate ci; and enforce-target completed SUCCESS on 2026-10-24 at 06:46 UTC. This resolves the unfinished validation identified in the earlier source review. The PR is now ready for maintainer review. The earlier author-side draft hold is superseded by these completed results; explicit maintainer workflow/dependency security acceptance remains required before merge and is not inferred from CI.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review ✅ Completed 2026-10-24T07:42:55.788372Z f011a94 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@lidge-jun

Copy link
Copy Markdown
Owner

Addendum: journal failure diagnostics at 8b4c34c

Original FAIL remains recorded; these authorized diagnostic repetitions do not replace it.
Host: juniui-Macmini.local, macOS27.0/arm64. Bun1.4.4 (1.4.4+38afee6c8) for all nine sequential runs. Base: 26598df2c4c07d781e344ac6119953fed77ecb27. Pull head re-fetched before posting: 8b4c34c7e6103314dcb061f0f82a8eaafdb4d386 (unchanged).

Run Exit Pass Fail Skip
HEAD-batch-026-run-1 0 235 0 0
HEAD-batch-026-run-2 0 235 0 0
HEAD-batch-026-run-3 0 235 0 0
BASE-batch-026-run-1 0 235 0 0
BASE-batch-026-run-2 0 235 0 0
BASE-batch-026-run-3 0 235 0 0
HEAD-journal-alone-run-1 0 40 0 0
HEAD-journal-alone-run-2 0 40 0 0
HEAD-journal-alone-run-3 0 40 0 0

Exact batch-026 command (same ordered 12 files for HEAD×3 and BASE×3):

timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 tests/codex-integration/codex-history-lock.test.ts tests/codex-integration/codex-history-pending-wal.test.ts tests/codex-integration/codex-history-provider.test.ts tests/codex-integration/codex-history-writer.test.ts tests/codex-integration/codex-home-owner-lifecycle.test.ts tests/codex-integration/codex-integration-record.test.ts tests/codex-integration/codex-journal.test.ts tests/codex-integration/codex-legacy-config-keys.test.ts tests/codex-integration/codex-log-guard-coderabbit.test.ts tests/codex-integration/codex-log-guard-processes.test.ts tests/codex-integration/codex-log-guard-status-zero-write.test.ts tests/codex-integration/codex-main-rotation.test.ts

HEAD-alone×3:

timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 tests/codex-integration/codex-journal.test.ts

Used the original recorded batch environment unchanged: TEST_SHARD=3/3, scope=all, batch-size12, parallel1, batch-timeout300s, test-timeout60000ms, OCX_TEST_NO_QUEUE=1, OCX_TEST_FULL_SUITE=1, the original transpiler-cache path and private0700 OPENCODEX_TEST_TRUSTED_FIXTURE_DIR. Git environment variables were excluded; only checkout/workspace changes for the base. The existing transpiler cache was retained, so its contents are already warm. The original private toolchain’s lack of a bunx alias was reproduced for these runs, then restored for subsequent CI jobs. No repository code was changed.

Failing assertion text in these nine runs: none. Original shard3 batch026 (234 pass/1 fail, exit1):

tests/codex-integration/codex-journal.test.ts:515
codex-journal > removeCodexConfig reports damaged managed-default cleanup and preserves the ambiguous value
expect(r.status).toBe(0);
Expected: 0
Received: 1

Assessment: the original failure is intermittent/non-reproducible in this sample. Repeating the exact batch order passed3/3 at HEAD and3/3 on base; HEAD alone passed3/3. Fixed batch order alone did not reproduce it, and no deterministic source regression was demonstrated. The precise cause and dependence on earlier suite state remain unproven. The original failure did not expose the child stderr, so its exit1 cannot be diagnosed further from that log. Original comparison classification and overall FAIL remain unchanged.
All nine requested runs completed; NOT RUN: none of the requested diagnostic runs. Detailed per-run commands/env/logs: /Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/diagnostic-7627-8b4c34c7e6.

@lidge-jun

Copy link
Copy Markdown
Owner

Local CI-equivalent (Windows) at 8b4c34c

Historical-head evidence: the PR moved to ba67ddb501cc9ee2871025d8a6b812074afbdd08. The manager explicitly requested finishing this run at 8b4c34c7e6103314dcb061f0f82a8eaafdb4d386, followed by a separate addendum for the two test-only commits through ba67ddb (touched files 5x each and owning Windows shards once). This comment does not attest full CI equivalence at the moved head.

FAIL under the owner-approved real-machine rule. 14 BASE-IDENTICAL observed test failure(s); 0 INTRODUCED. Raw nonzero exits remain failed and are shown below.
Reason: a primary/attribution process hit its deadline; its test tail is unverified despite all 474 selected batches being attempted.

Host MINI, Windows_NT 10.0.26200 x64. Test-runner Bun 1.4.4, runtime Bun 1.4.4. The pull ref was re-fetched immediately before posting and is now ba67ddb501cc9ee2871025d8a6b812074afbdd08, different from this historical tested head. Every Windows job used a fresh detached scratch worktree; no PR source, branch, approval or merge was changed.

Scope: Windows CI legs only; the owner supplied the already-passing exact-head Ubuntu results. Before each shard, fresh host-pressure and native-process checks admitted the job only with non-critical pressure and no other suite. No concurrent heavy suite was started by this verifier.

Environment: CI=true RUNNER_OS=Windows TEST_SHARD=i/9 BUN_TEST_FILE_SCOPE=all BUN_TEST_BATCH_SIZE=6 BUN_TEST_BATCH_TIMEOUT_SECONDS=480 OCX_TEST_NO_QUEUE=1; OPENCODEX_TEST_TRUSTED_FIXTURE_DIR=C:\ocx-vwin-r2-20261025-cfc56eaf\trusted-fixtures is private (owner-only NTFS ACL, the Windows equivalent of 0700). GIT_DIR/GIT_INDEX_FILE/GIT_WORK_TREE were removed and explicitly unset; tests ran outside hooks.

Windows shards — counts are pass/fail/skip

Command per shard: bash scripts/ci/run-bun-test-batches.sh "$TEST_SHARD" in Git Bash, with the head-pinned runner. The unchanged original script ran first. After a fail-fast stop, every remaining batch was reconstructed by the exact same CI construction code, checked against original membership, and executed with bun test --isolate --timeout 60000 <ordered files> and the same 480s process deadline/15s kill grace. No primary failure was retried into a pass. Native attribution counts are separately retained in the command ledger.

Shard Original exit Original counts Remaining batches (counts) All batches executed CLI help exit
1/9 1 5185/1/60 5 (328/0/11) 54/54 0
2/9 0 5845/0/65 0 (0/0/0) 52/52 0
3/9 0 5949/0/135 0 (0/0/0) 54/54 0
4/9 1 685/1/0 45 (5242/3/81) 52/52 0
5/9 0 5883/0/143 0 (0/0/0) 53/53 0
6/9 1 1774/3/86 35 (3230/0/42) 54/54 0
7/9 124 812/0/2 49 (5440/2/68) 56/56 0
8/9 1 805/1/8 43 (5048/2/161) 49/49 0
9/9 0 5185/0/158 0 (0/0/0) 50/50 0

Install/build commands

Windows job bun --version root bun install --frozen-lockfile GUI bun install --frozen-lockfile GUI bun run build
1/9 0 0 0 0
2/9 0 0 0 0
3/9 0 0 0 0
4/9 0 0 0 0
5/9 0 0 0 0
6/9 0 0 0 0
7/9 0 0 0 0
8/9 0 0 0 0
9/9 0 0 0 0

Each CLI-help entry is bun run src/cli/index.ts help.

Other selected commands and base comparisons

Step Actual command Runtime Exit Counts
setup-action-resolve-runtime bash -e -o pipefail -c 'node <<'\''NODE'\'' ⏎ const pkg = require('\''./package.json'\''); ⏎ const role = process.env.BUN_ROLE; ⏎ let key; ⏎ let version; ⏎ switch (role) { ⏎ case '\''runtime'\'': key = '\''dependencies.bun'\''; version = pkg.dependencies?.bun; break; ⏎ case '\''test-runner'\'': key = '\''testRunnerBun'\''; version = pkg.testRunnerBun; break; ⏎ default: ⏎ console.error(`::error::Unknown Bun role: ${role}`); ⏎ process.exit(1); ⏎ } ⏎ if (typeof version !== '\''string'\'' || version !== version.trim() || !/^\d+\.\d+\.\d+$/.test(version)) { ⏎ console.error(`::error::Missing or invalid package.json ${key} for Bun role ${role}`); ⏎ process.exit(1); ⏎ } ⏎ require('\''node:fs'\'').appendFileSync(process.env.GITHUB_OUTPUT, `version=${version}\n`); ⏎ console.log(`Using Bun ${version} from package.json ${key} (${role})`); ⏎ NODE' 1.4.4 0 n/a
setup-action-runtime bash -e -o pipefail -c 'declared="$(node -p '\''const pkg=require("./package.json"); pkg.dependencies.bun'\'')" ⏎ installed="$(bun --version)" ⏎ printf '\''declared=%s resolved=%s installed=%s\n'\'' "$declared" "$RESOLVED" "$installed" ⏎ if [ "$RESOLVED" != "$declared" ] || [ "$installed" != "$declared" ]; then exit 1; fi' 1.4.4 0 n/a
setup-action-resolve-test-runner bash -e -o pipefail -c 'node <<'\''NODE'\'' ⏎ const pkg = require('\''./package.json'\''); ⏎ const role = process.env.BUN_ROLE; ⏎ let key; ⏎ let version; ⏎ switch (role) { ⏎ case '\''runtime'\'': key = '\''dependencies.bun'\''; version = pkg.dependencies?.bun; break; ⏎ case '\''test-runner'\'': key = '\''testRunnerBun'\''; version = pkg.testRunnerBun; break; ⏎ default: ⏎ console.error(`::error::Unknown Bun role: ${role}`); ⏎ process.exit(1); ⏎ } ⏎ if (typeof version !== '\''string'\'' || version !== version.trim() || !/^\d+\.\d+\.\d+$/.test(version)) { ⏎ console.error(`::error::Missing or invalid package.json ${key} for Bun role ${role}`); ⏎ process.exit(1); ⏎ } ⏎ require('\''node:fs'\'').appendFileSync(process.env.GITHUB_OUTPUT, `version=${version}\n`); ⏎ console.log(`Using Bun ${version} from package.json ${key} (${role})`); ⏎ NODE' 1.4.4 0 n/a
setup-action-test-runner bash -e -o pipefail -c 'declared="$(node -p '\''const pkg=require("./package.json"); pkg.testRunnerBun'\'')" ⏎ installed="$(bun --version)" ⏎ printf '\''declared=%s resolved=%s installed=%s\n'\'' "$declared" "$RESOLVED" "$installed" ⏎ if [ "$RESOLVED" != "$declared" ] || [ "$installed" != "$declared" ]; then exit 1; fi' 1.4.4 0 n/a
base-1.4.4-install-root bun install --frozen-lockfile 1.4.4 0 n/a
base-1.4.4-install-gui bun install --frozen-lockfile 1.4.4 0 n/a
base-1.4.4-gui-build bun run build 1.4.4 0 n/a
base-service-status-json-144-w1 bun test --isolate --timeout 60000 './tests/service/service-status-json.test.ts' 1.4.4 1 17/1/0
base-picker-routes-144-w4 bun test --isolate --timeout 60000 './tests/claude-integration/claude-desktop-picker-routes.test.ts' 1.4.4 1 8/1/0
base-picker-windows-144-w4 bun test --isolate --timeout 60000 './tests/claude-integration/claude-picker-windows.test.ts' 1.4.4 1 9/3/0
base-codex-shim-144-w6 bun test --isolate --timeout 60000 './tests/codex-integration/codex-shim.test.ts' 1.4.4 1 93/3/8
base-cli-help-144-w7 bun test --isolate --timeout 60000 './tests/cli/cli-help.test.ts' 1.4.4 1 16/1/0
base-native-profile-startup-144-w7 bun test --isolate --timeout 60000 './tests/codex-integration/native-profile-startup.test.ts' 1.4.4 1 46/1/0
base-desktop-first-party-144-w7 bun test --isolate --timeout 60000 './tests/claude-integration/claude-desktop-first-party.test.ts' 1.4.4 124 n/a
base-history-ocx-compaction-recovery-144-w8 bun test --isolate --timeout 60000 './tests/codex-integration/history-ocx-compaction-recovery.test.ts' 1.4.4 1 3/1/0
base-sibling-home-client-sync-144-w8 bun test --isolate --timeout 60000 './tests/cli/sibling-home-client-sync.test.ts' 1.4.4 1 32/1/1
base-picker-startup-144-w8 bun test --isolate --timeout 60000 './tests/claude-integration/claude-picker-startup.test.ts' 1.4.4 1 9/1/0
keyring-install bun install --frozen-lockfile 1.4.4 0 n/a
keyring-smoke bun run scripts/keyring-smoke.ts 1.4.4 1 n/a
base-keyring-smoke-1.4.4 bun run scripts/keyring-smoke.ts 1.4.4 1 n/a
npm-global-node-version node --version ⏎ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } ⏎ npm --version ⏎ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } ⏎ if (Get-Command bun -ErrorAction SilentlyContinue) { throw "External Bun must not be on the npm smoke PATH" } bundled-1.4.4 0 n/a
npm-global-install npm install bundled-1.4.4 0 n/a
npm-global-build-assets npm run build:gui bundled-1.4.4 0 n/a
npm-global-pack npm pack --json > pack.json bundled-1.4.4 0 n/a
npm-global-verify-gui node -e "const p=require('./pack.json')[0]; if (!p.files.some(f => f.path === 'gui/dist/index.html')) { console.error('missing gui/dist/index.html in npm pack'); process.exit(1); }" bundled-1.4.4 0 n/a
npm-global-install-global npm install -g ./bitkyc08-opencodex-*.tgz bundled-1.4.4 0 n/a
npm-global-help $resolved=Get-Command ocx -ErrorAction Stop ⏎ if (-not $resolved.Source.StartsWith('C:\ocx-vwin-r2-20261025-cfc56eaf\npm-prefix-7627',[StringComparison]::OrdinalIgnoreCase)) { throw 'ocx did not resolve inside scratch prefix' } ⏎ ocx help bundled-1.4.4 0 n/a

npm-global, when selected, used the workflow Node 20 line (portable Node 20.20.2/npm 10.8.2), no external Bun on PATH, and a private global prefix/home/cache. The bundled dependency supplied Bun. This did not modify the user’s global installation.

Failure classifications

Classification File:line Test / assertion
BASE-IDENTICAL tests/service/service-status-json.test.ts:460 service status --json CLI preflight > the real CLI leaves every isolated home byte-for-byte unchanged; expect(json).toMatchObject({ schemaVersion: 1, installed: false, backend: "none" });
BASE-IDENTICAL tests/claude-integration/claude-desktop-picker-routes.test.ts:266 without a running picker controller > gateway apply and native disable remove a leftover picker row; test timeout 60000ms
BASE-IDENTICAL tests/claude-integration/claude-picker-windows.test.ts:311 Windows management enable binds the dormant picker after preference changes; test timeout 30000ms
BASE-IDENTICAL tests/claude-integration/claude-picker-windows.test.ts:311 Windows management enable binds the dormant picker after desktop-integration changes; test timeout 30000ms
BASE-IDENTICAL tests/claude-integration/claude-picker-windows.test.ts:311 Windows management enable binds the dormant picker after gateway-mode changes; test timeout 30000ms
BASE-IDENTICAL tests/codex-integration/codex-shim.test.ts:1189 Codex autostart shim > Windows cmd shim restores the caller token (missing); expect(result.status, result.stderr).toBe(0);
BASE-IDENTICAL tests/codex-integration/codex-shim.test.ts:1189 Codex autostart shim > Windows cmd shim restores the caller token (explicit token, ensure); expect(result.status, result.stderr).toBe(0);
BASE-IDENTICAL tests/codex-integration/codex-shim.test.ts:1189 Codex autostart shim > Windows cmd shim restores the caller token (explicit token, bypass); expect(result.status, result.stderr).toBe(0);
BASE-IDENTICAL tests/claude-integration/claude-desktop-first-party.test.ts:59 POST /api/claude-desktop/apply defaults to gateway; first-party is explicit and carries the account-risk notice; test timeout 60000ms
BASE-IDENTICAL tests/cli/cli-help.test.ts:378 CLI subcommand help > recover-history repairs one explicitly selected ocx1-compacted thread; expect(result.status).toBe(0);
BASE-IDENTICAL tests/codex-integration/native-profile-startup.test.ts:525 native-main startup journal gate > marker-only restart remains blocked after a malformed journal is quarantined; await expect(f.manager.recover(true, true)).rejects.toMatchObject({ code: "RECOVERY_REQUIRED" });
BASE-IDENTICAL tests/claude-integration/claude-picker-startup.test.ts:286 default, off, and disabled integration remain credential-free through status, refresh, and off; test timeout 45000ms
BASE-IDENTICAL tests/cli/sibling-home-client-sync.test.ts:432 a lone custom-home start still syncs Grok and prunes its own Claude roster; test timeout 30000ms
BASE-IDENTICAL tests/codex-integration/history-ocx-compaction-recovery.test.ts:108 OpenCodeX compaction history recovery > backs up and atomically repairs one database-selected rollout; throw error;

Base comparisons use detached 26598df2c4c07d781e344ac6119953fed77ecb27 with the same head runtime and suite environment; each failing file is run once for that runtime/environment. BASE-IDENTICAL requires the same test and assertion in the recorded base output. A base file failing elsewhere does not excuse a new assertion.

Runtime failures and interrupted output

  • windows-7-9: exit 124; completed Bun summary counts 812/0/2; observed primary test lines 863/1/5. Interrupted output is partial; attribution observations 68/1/1 are separate and do not override the primary failure. ::warning::Bun test process timed out after 480s in shard 7/9 batch 7/56. ::error::Shard 7/9 batch 7 timeout failure (exit 124). This shard has failed; the sweep below only attributes it. ::warning::Bun test process timed out after 480s in shard 7/9 batch 7/56 attribution 4/6.
  • base-desktop-first-party-144-w7: exit 124; completed Bun summary counts 0/0/0; observed primary test lines 27/1/0. Interrupted output is partial; attribution observations 0/0/0 are separate and do not override the primary failure.

Selected smoke failures

  • BASE-IDENTICAL: scripts/keyring-smoke.ts:56, head exit 1, base exit 1; Windows ERROR_NO_SUCH_LOGON_SESSION; temporary-entry delete returned false. Smoke attempts pass/fail/skip: 0/1/0. Actual remote Windows logon-session failure; do not describe this as a signing failure. Raw exit1 preserved. Readback was not reached after storage access failed. Matched normalized log SHA-256: 83bedf508985d0aa50229658bc9b54f5b97dc2fa9bb2fd63c111ed20115b5b8d.
  • windows-7-9 unhandled errors between tests: primary 1, CI-native attribution 1; counted separately from test-case failures.
  • base-desktop-first-party-144-w7 unhandled errors between tests: primary 1, CI-native attribution 0; counted separately from test-case failures.
  • remainder-8-010 unhandled errors between tests: primary 1, CI-native attribution 0; counted separately from test-case failures.
  • base-sibling-home-client-sync-144-w8 unhandled errors between tests: primary 1, CI-native attribution 0; counted separately from test-case failures.

Each remaining batch (pass/fail/skip)

Every row executes bun test --isolate --timeout 60000 <ordered files> with the environment above. To fit one GitHub comment, each row's complete literal command and ordered file arguments are preserved in the full ledger below.

Batch Exit Counts
1/9 batch 50 0 3/0/0
1/9 batch 51 0 77/0/11
1/9 batch 52 0 81/0/0
1/9 batch 53 0 113/0/0
1/9 batch 54 0 54/0/0
4/9 batch 8 1 82/3/0
4/9 batch 9 0 73/0/0
4/9 batch 10 0 103/0/3
4/9 batch 11 0 79/0/2
4/9 batch 12 0 180/0/21
4/9 batch 13 0 103/0/4
4/9 batch 14 0 115/0/1
4/9 batch 15 0 162/0/0
4/9 batch 16 0 195/0/5
4/9 batch 17 0 81/0/0
4/9 batch 18 0 252/0/0
4/9 batch 19 0 213/0/16
4/9 batch 20 0 80/0/0
4/9 batch 21 0 103/0/22
4/9 batch 22 0 101/0/0
4/9 batch 23 0 109/0/0
4/9 batch 24 0 102/0/0
4/9 batch 25 0 152/0/0
4/9 batch 26 0 79/0/0
4/9 batch 27 0 98/0/0
4/9 batch 28 0 74/0/1
4/9 batch 29 0 69/0/0
4/9 batch 30 0 192/0/0
4/9 batch 31 0 174/0/0
4/9 batch 32 0 71/0/0
4/9 batch 33 0 75/0/0
4/9 batch 34 0 149/0/0
4/9 batch 35 0 59/0/0
4/9 batch 36 0 211/0/0
4/9 batch 37 0 173/0/0
4/9 batch 38 0 201/0/1
4/9 batch 39 0 301/0/0
4/9 batch 40 0 161/0/0
4/9 batch 41 0 22/0/0
4/9 batch 42 0 34/0/0
4/9 batch 43 0 106/0/0
4/9 batch 44 0 66/0/0
4/9 batch 45 0 51/0/0
4/9 batch 46 0 55/0/0
4/9 batch 47 0 90/0/0
4/9 batch 48 0 122/0/5
4/9 batch 49 0 27/0/0
4/9 batch 50 0 64/0/0
4/9 batch 51 0 123/0/0
4/9 batch 52 0 110/0/0
6/9 batch 20 0 146/0/0
6/9 batch 21 0 51/0/13
6/9 batch 22 0 101/0/0
6/9 batch 23 0 109/0/0
6/9 batch 24 0 82/0/0
6/9 batch 25 0 98/0/0
6/9 batch 26 0 35/0/26
6/9 batch 27 0 109/0/0
6/9 batch 28 0 120/0/0
6/9 batch 29 0 231/0/0
6/9 batch 30 0 154/0/0
6/9 batch 31 0 79/0/0
6/9 batch 32 0 51/0/0
6/9 batch 33 0 111/0/0
6/9 batch 34 0 119/0/0
6/9 batch 35 0 104/0/0
6/9 batch 36 0 150/0/0
6/9 batch 37 0 201/0/0
6/9 batch 38 0 190/0/0
6/9 batch 39 0 78/0/1
6/9 batch 40 0 89/0/0
6/9 batch 41 0 58/0/0
6/9 batch 42 0 99/0/0
6/9 batch 43 0 104/0/0
6/9 batch 44 0 88/0/0
6/9 batch 45 0 46/0/0
6/9 batch 46 0 100/0/2
6/9 batch 47 0 106/0/0
6/9 batch 48 0 24/0/0
6/9 batch 49 0 5/0/0
6/9 batch 50 0 5/0/0
6/9 batch 51 0 2/0/0
6/9 batch 52 0 41/0/0
6/9 batch 53 0 65/0/0
6/9 batch 54 0 79/0/0
7/9 batch 8 0 175/0/0
7/9 batch 9 0 78/0/0
7/9 batch 10 0 94/0/0
7/9 batch 11 1 224/1/0
7/9 batch 12 0 139/0/0
7/9 batch 13 0 3/0/0
7/9 batch 14 0 8/0/0
7/9 batch 15 0 168/0/0
7/9 batch 16 0 138/0/0
7/9 batch 17 0 90/0/0
7/9 batch 18 0 81/0/0
7/9 batch 19 0 160/0/19
7/9 batch 20 0 156/0/0
7/9 batch 21 0 171/0/31
7/9 batch 22 0 27/0/0
7/9 batch 23 0 17/0/0
7/9 batch 24 1 127/1/11
7/9 batch 25 0 113/0/0
7/9 batch 26 0 20/0/0
7/9 batch 27 0 94/0/0
7/9 batch 28 0 33/0/0
7/9 batch 29 0 101/0/0
7/9 batch 30 0 126/0/0
7/9 batch 31 0 133/0/0
7/9 batch 32 0 117/0/0
7/9 batch 33 0 18/0/0
7/9 batch 34 0 207/0/0
7/9 batch 35 0 93/0/0
7/9 batch 36 0 53/0/0
7/9 batch 37 0 314/0/0
7/9 batch 38 0 175/0/1
7/9 batch 39 0 384/0/0
7/9 batch 40 0 152/0/0
7/9 batch 41 0 70/0/0
7/9 batch 42 0 77/0/0
7/9 batch 43 0 162/0/0
7/9 batch 44 0 114/0/0
7/9 batch 45 0 286/0/0
7/9 batch 46 0 75/0/0
7/9 batch 47 0 80/0/0
7/9 batch 48 0 69/0/0
7/9 batch 49 0 61/0/0
7/9 batch 50 0 8/0/0
7/9 batch 51 0 64/0/6
7/9 batch 52 0 1/0/0
7/9 batch 53 0 133/0/0
7/9 batch 54 0 118/0/0
7/9 batch 55 0 121/0/0
7/9 batch 56 0 12/0/0
8/9 batch 7 0 148/0/1
8/9 batch 8 0 267/0/7
8/9 batch 9 0 113/0/0
8/9 batch 10 1 192/1/1
8/9 batch 11 0 124/0/6
8/9 batch 12 0 108/0/1
8/9 batch 13 0 152/0/0
8/9 batch 14 0 53/0/0
8/9 batch 15 0 68/0/1
8/9 batch 16 0 119/0/2
8/9 batch 17 0 177/0/2
8/9 batch 18 1 305/1/0
8/9 batch 19 0 212/0/59
8/9 batch 20 0 132/0/1
8/9 batch 21 0 210/0/4
8/9 batch 22 0 80/0/0
8/9 batch 23 0 30/0/0
8/9 batch 24 0 96/0/2
8/9 batch 25 0 110/0/0
8/9 batch 26 0 73/0/0
8/9 batch 27 0 151/0/0
8/9 batch 28 0 141/0/0
8/9 batch 29 0 106/0/0
8/9 batch 30 0 42/0/0
8/9 batch 31 0 148/0/0
8/9 batch 32 0 181/0/0
8/9 batch 33 0 90/0/0
8/9 batch 34 0 159/0/0
8/9 batch 35 0 103/0/0
8/9 batch 36 0 65/0/0
8/9 batch 37 0 113/0/0
8/9 batch 38 0 122/0/0
8/9 batch 39 0 61/0/0
8/9 batch 40 0 65/0/0
8/9 batch 41 0 109/0/0
8/9 batch 42 0 53/0/0
8/9 batch 43 0 42/0/0
8/9 batch 44 0 88/0/69
8/9 batch 45 0 179/0/0
8/9 batch 46 0 74/0/5
8/9 batch 47 0 28/0/0
8/9 batch 48 0 112/0/0
8/9 batch 49 0 47/0/0

Assertion details for the cases named above (shared assertions shown once):

  • tests/cli/cli-help.test.ts:378: both head and base fail expect(result.status).toBe(0);; expected 0, received 1 on both.
  • tests/codex-integration/codex-shim.test.ts:1189: both head and base fail expect(result.status, result.stderr).toBe(0);; expected 0, received 1 on both.
  • tests/claude-integration/claude-desktop-first-party.test.ts:59: both head and base fail expect(result.status, `body=${JSON.stringify(result.body)}`).toBe(status);; expected 200, received 500 on both.
  • tests/codex-integration/native-profile-startup.test.ts:525: both head and base fail await expect(f.manager.recover(true, true)).rejects.toMatchObject({ code: "RECOVERY_REQUIRED" });; expected RECOVERY_REQUIRED, received EICACLS on both.
  • tests/claude-integration/claude-desktop-picker-routes.test.ts:266: both head and base fail expect(gateway.status).toBe(200);; expected 200, received 500 on both.
  • tests/claude-integration/claude-picker-windows.test.ts:311: both head and base fail expect((await enable())?.status).toBe(200);; expected 200, received 409 on both.
  • tests/cli/sibling-home-client-sync.test.ts:432: both head and base fail expect(await ensure.exited).toBe(0);; expected 0, received 143 on both.

The history recovery case fails on both heads with EICACLS at src/codex/ocx-compaction-history.ts:225, called from tests/codex-integration/history-ocx-compaction-recovery.test.ts:108.

For the service-status preflight failure, both head and base expected installed:false, backend:"none" and received installed:true, backend:"schtasks" at the same assertion. The host registration was left untouched.

Known remote-hub case: this head’s recorded result(s):

  • (pass) connected Desktop uses hub IDs across a cold restart (stored profile=true) [51285.58ms]
  • (pass) connected Desktop uses hub IDs across a cold restart (stored profile=false) [50966.25ms]

Shared-host observation: shard 8 was admitted at 22:46:40 UTC with normal pressure and zero other suites. M5 started another suite at 22:59:58 UTC during later successful remainder batches; all three shard-8 failing commands had ended by 22:57:24 UTC. At the next admission check (23:04:44 UTC), this verifier held all new heavy checks until the other suite ended. No passing or failing test was rerun because of this overlap.

NOT RUN

  • Tests after the cutoff inside timed-out primary/attribution processes have no completed-run evidence; later selected batches were attempted separately. Full-coverage PASS is not established.
  • Ubuntu/macOS jobs and hosted Actions orchestration/artifact uploads are outside this assignment.
  • Conditional remote-helper Windows job: not selected (no matching native helper paths).

Complete exact-command ledger and batch membership

Brotli/base64 UTF-8 JSON below records every invocation, ordered file argument, exit code, counts, native attribution, deadlines and classification. SHA-256 of decompressed JSON: b04c6d3519852e0152062ba7f0220b093d9bb904ff9158a2fce050fa68733de7. It is evidence data, not an executable script.

Full command/coverage ledger
WxOMNeHGyMPGAZCH0PtsRO12ABWo5HkHZF4LnbsdNLftP7YTqscDKUeYprsq8EthKgxXhohpzOzE2jojXDLXoVcPzUCiUatKW6gMbhAWkN6G7HPtZo449WX+uuFjlV72xMOvmFoPwzvDtywyZGaExQ4DuviSRyt/6n/9rkkRTBCkVAh+pTW5wsnRQ5SRhDstErOF93KMTNmbFDCZBaxQVWXHwSI/FIuOzonnpaGLUTB3BdJlQ60s2897SboSgT5bD8cgeWMVD5HXfOVBZUYujAh8skQWN6eStvH4+5ndAR2mOvqvrKzV/bILcUBoncE34wD74PPVxMrq57i6HpZG0sS0wEeQznoJVkekTbKUdL/x/d9apb1jF3Dk1DEKE6Hipj9U7TXMLMHMBpC6+ndV7wGyTNgiCYcqNkLl+UjdHZxeN3ETd3JlXPx6f762Lt2mTNfF1lOAmiZN5XfP3jPRE8xE/kHJRJ+M8K5295r+d8hmhRC6TMpUPXHn+P/v+2mWyrhQUaiVGwei5WykIJSChP/uc/daAkEZAKolsQqQAShj3Dtvn30euNAomTJdEupX2yo5krLgODazibOeCTuaMNBMON6vfC2VPI1N09sGumrxWVt14LyWCRFekJBHA4aSz1KtGj2o0h55VVp5OkkrDxmXBEFD84M3jDAhQim7UBZj0wWumqeesOqciUyrz5Zrjc17BAjb6oEr8O/7c/fpLqB/7jQH6g5Lx9D+x9/D0ButCpLQeyaSap3v8k0u+ZYQ1ErawoIBBqCbUBBAwhf+Eh0lKG191J89sWY5jQX7wFKHHpKlFHVY7yEBAVKxDWuWtif2qyXdABdbUYaf0c6XLrmRF97QVymGTJbp2xCYUdYcYHjgBPXYvZ81ZHFY4Rtn/5hv9rqr+lsbMl9rKOCcuTeFI5Cu6DYCCVz6GWtBZGB/T9E3J9OMdWjKBF8euFmkT8Mo/mI+e7nvOWx4bb7/gLFe9n7o+vxzDvXfwst7T6RVoxHAxU0Kjjiy7mtX12SedjX57WdNmtSw6WqnJxwfK9XadYaOP+azRIgmX/NfK1Xzb+eVgAyBtE6ZX9meSfHMmc46Kri6E6wXlo5nRpN/PZbzKLkFSe/shkvahGR1r9dtFa7UAaMq9ZtJHSi+QCtcDTLeyLXpYEMQlOhJCpHL3PP5rP/0z19RWErdgS+BESqI3yV3tKk0ZijsAvqtoPd+bKqCwnitPu8r2J16+JsNAP2Tr1kR6s9j3VaZAY3a9ZVI/dIW6k3/tr43/5Odcorv5fodtPMu27weSF37MY9LJ7X9T36uFZP2oi49J6w5B9AGnmd7l740TFV84RnUmYdOUFMcgp2CCDom9GjcUHoTN27krBI77sZu1Vdfz1+ygZ/fAvMame6vEb9/uFtw8rCsgOv+Uh2lTfNSCMP5dWhGjQ92SnMF88jjaZz8tNpUmuJ4MsQ51hPmzikzPUyC5Q5jKjPi1sq+mH063M/2y0d9yO+ChGyRpcom6PrJFLRV67iytz03wTgxO2449SIVjO92mCnEuTRtlDZlqo2YyAKe5BWFGMkH+m6AbuE/OZ4rYEXjEWxVBhdUFBhPD8C+GbE2MS72ECg9hJAPVorE0e367NmmFNbh7WUciM820k7fl0Ws09onz2n+dAnTGyar1ERmJL3QRzi6oRY4difoWB3Ef4eZ+DE4bKS0/Sbz1rAENjmGFHd8Fb2jZdrsTBgypSUDUs761TU1xPEOJ19qISepkun8baJJybHC8qmPyfL/VfCO567PvZGMCP+J+H8Cwv7IFy41rAS9aMVymSIW753muEzXXQN8qF2V6YeZKLEnBJWrQgPs8NsqPWH1ZTIlvDvkiwiBTcNPPwCXGR/5foWeW2FTZNgs3rsTN+VE78yFj+r0aiJ23TTXi/xuOieIOpfrW001rtDpH8n8NAot/1KZyRHXw73UGd5gEzrE21a3A2c+0myAR40ajZ9lD/hqdIdYxqbtZaYQHePJ1hBSbAxAH2t0wIoB+e4ZXpF1Za1EUThPcrb2U1kls3UqDDHbO5g343JuPsEUihOsVZYRM604ZEarzpR7BbwS79hDNDo5YzPKOTeWmi8l2q+t6UnY7DvYKG4LMcXV97cMLJbbje0z7HYjJIkhZCe2s61HnAiYbXG/rXmcSpdT9kP33DTyC0ot/5oGkxMabD8frHT8JBaAyrdCRELiutKlso4Re97ddPB+8JkkHd+DfIp3/PCu+EAyxsR9Yfs23YwnpzEcQyqOFWIQeNewL4jnezVsCDeP8z1UDtvtPs2Z3fWAOTv/NdtgPdqu7iD6YmzQ0bMiZFf9KpEMbCogKlX4nx4VODmXNdCHxvUKVfiYOuY8XfuB3HdleGrWaJMe54f1ZcNJ448htYZpuz9DCOQiEBxmk/R4jPbHGLHmDXfSuP198jWkK2OH0k8Th97d0Rw7PNOnQXYcfz38m4YD0JSTbOTJBZrcF2CFYnRNIu3dkXBiAizOyzae0i4OTwqPHJTE6xm6+lkip0ycw4cll0+8dhV/1SdD8EQmUeeuKXe28ezmQQ9aDlvjSHzJQdo+Tozt0dcChYpowesKY186wDWXc4+Toj4/p7DpNoZW8Pz6IUggqk3wIM/aaftfalmVB1sGnPYNo1VpRnwhz/s3w/JEVZdUzPiZ5w99fCIhaPwtDcxmf6qmcwPPm0VYMlNNmoSjPN8I20lcZioyj9VKEozBNPSFoyQzkBcc+jQOFUIqRxJs8ZKA/VquFAKWLpfs8NtxDy4bGN8sBWNtkk5FZPKx4rm3r/D6v5hRuInHndqOGMcwRU9QEUqcJvBE54VT28zyXaJcHUspeRXMuLMfRAiozteY+ZINLWCHaX8v5FdQE5En110QA5MSqrNtBJG/oiWR6K5qi8O6vRq3nAiniFkTKEb+uFOmtrEJmY5AYUWo0oNDZ4laT/Cqtzivms7AQkKCnzXbqouZAtFK3zYgZBo8FKbm6xYbJ3COUeHRH5blOd1CiCA/IhHvb+UvNV7taFcPckJ/HSGOkxiC7RLMNfBoESUZxKi5wu3dU9cqrUY5sBJNlt6S/K76HhWZajrWW6f9cnvT9kuPh+o76wK/4Q64zI7M2cEGZ2y5S8za1lrylYJeIk5eiZtbxuNijdQ6bQoY2+OZwgiR+Hll8iZG/jkt2JAIoz8IDid9T/vEaWtcxQJfDGhLTqo3mdC8GWr6p+fDx7qWMCTsRP4NnGvgC1y7EBscaiRZ6Otk0kmbbIgeJ38/frUvlYk76ndNDdDbhPSZnQDDSQnRm1p1mTBtdL5mz8gkIpqpkx+LBiliIU5t0N/WqJY6ltrpdehrWR1ONAytXTp5ciBiCkxlKTBi+eWEUzO1Ijl3PRuCsY/JuSc/MbcGtcC2MgqActZGkoq5eV0vfy3oic1BXZzBkglj+VQajds9lu8fEp5GNoyr/QH1lcJbbGGer4BWgNuUpdMYGHUlgUL05GTfJ1tC/8FWStTW0XxonK6Fi+i5EzRDAneEcYJTfyySn9ZhKSHqR9LThBiLGTnbSzkOqoF9RXHUKUxkyc2bFLI2VG4aJQegF5n8mTLUJ/Y830WPC6lYmXCfibciUxb7lbkhWeBI3DOw9vKhYb+7HZ+JvaLbl8IjDyxosGu2tZOdlgWK5Aetbj7fVwaTn0czdX0uE+wwpjQeF+WDhZGl8SWz71NELU2qk/Np3ZRp4Ta6E/x0TkCp/MFSkpxCF8gxF7Ihc4CyHILb4xseB7GYDLwrKjuXp4uP1Kzm4f1fe3laQ6CcNQP6zF+jPIeLwA8K+ZwzItWdGH4kMj8jgWwo5HcaeFhUSSvqTEHpPh15bwB8FuhSboxXK9eREg9FmM8PkizjSbhsOmuYaYM3zUriwE6F9ZFYa+BpQYPF95yPFlSn3K/nQl1ZUwhSrq2fhyPLSA42jr+xtV01U/dlKU7TJ70/QZ28MqOB5XCK2rB2K+Ck9blnlJ74cfHj8dYdEwbVvbWE6WIBqFxMLvDiawnuFZ/9qKEmGdv0u/iQYd8YV3O1X+5V04XO0aJx02+o7Ic79iNjd/Nb1ytlB23P6pA0CivktcZRHgudOijDMKrhgDKP8QPeOj+588tWBHnoQbLgygRHuTKlCbkRargp9kidzn7LuSz4YAJFr2WaZ5Pqa6qljBZKPCaB2YB0NTIyFU4fsORsw6XDJOm38cJixs1Z4Lpw3xFhF0dSqB0nxyymA2Cw91nZpTqTr87gpxgKEgas9NxZt6nGYalpGNvujeBh/PGHitWKzS5McePGU96H8ooMIJrUsdSEvh0/iaR/vItndqoyYotXMlrpopfCP6sY+EZoqATq0F6U3xuS//PCFe8HqzhEYYOFqqTbMUpS/B+WAQx7GjROJCWEKNQSJjdwuHmqwKqu1TJFEX7qmfueZB6CAT1q2jKTGFcqHGqF6tmZqACapHlX6ZIZPtiy6qznguuMxmW12CSiiultDuJwUT7unf6pNGT/hocoNTfmUdhpHA2mhFgylyR4KMFLcb7/yiJGRnsJE1KWiwV1BLFD1xqGJ3fIUWoIDRxrIKARFr+fiFhbcJcTJC02CtFsK5cbraA2pV/zKww0BSaUsse7gShJMchXDEgljTjNstBhcpxCfeJQTmGxgZmLU5KR2jnKZlOxDjFh7nkmkl0HmQ2RQ8Q8KFPLEKuQLh3qGU1tITnrCRS10s4sKCXRT2dWIQNJKq2oozS4KwlLNkDPowxdeX6ikPaITDjR8D4zmiJZdYm+HR+au3q+Yi9xchLARhpyKMjrQo4Nl+tke9QMHlWdOAl8y8pxdW1zY/NQzwvKEvMfq3p9pzZHrkitqQmDJaSxQzoubEnnag8apVeprQfTd+yDUu+/kkOlHbalDGSEWD1qgRwb033XV7EDSMzZ2hXQpiKI96rK6eLhGGA2hQtfQykvcwa1m6TShiJm81hY465PklPt0D0bSn/VIRslCMkix3BwxAxWUoFsWT+RSQK+vvKrD0iV9PSH0vYmB4BKZPEIRkV+nRUGU/tTaDQdeRX0NDiZFFQroJY2M/gH1rKSympLqJuQ0jFQr3y3NIR6sPwANCdY4JIDY+FWA6qTgFL+CEIpO05vnfwO8+kXyQKxtJXS4ZCqiAGBGnUDAgsxS6BjV5oYyuLtELkayC6PORD8OwZuFWGQMk2D0BplqcV088zCzirSqbiF+3v51lM8SkIHBo+Y8DQPPdCBjYcPEN/gQM3RQygqUW3LFHvBuK9FSJCLn4QYyq2TjeHLOpCHnBbrHO9V7fj/dPnfkBVSNWEzLs/c9Me4G4dMUoViVj65LhaMC2nMyTFBz1jRAodpPsbzas9+nGTbf5ajwkL8g+pkvWc2BN2ULjgnB63IX7rzK88fWEh6NBpK6h93EFBpNMGwFSmtnXTxkRKEXQY+OZPtijsEufi/jWnYtEqmG9YCXXRmHkjNKRl68sGcRjGzdkjL3MQcTisrJ2uJWyvWPCIMbxHbDdNYBfmcVb3N6fCHAk/5DhqzlMJSoNIgAJkJu5K7I2vtAoox9AHzxq/rOorWT7NcOQGR/JIY7jox495bycIYokDPsAQ9oXpQnBtmmvplwmC2J5QNIpUJrozR/iixX9md5tK5r2TprzjvIS209k6qJlDj6U0sMZk3oUO4AVJF168r63lSJUNiy2g/b8Gfxh2g+s0IpE+i1/IJUyRHG7kNe6itU0Ht0GuY86U4vdYuyv6YEsR8vwvIUM55l5/B1i8yVF19AYSizshiojtW4WbsBLhW37tyAz9NxK9Jg1hBLKcwfv2LM+P/5R9rPmyYCedqKRdR4+hz9QoxHYT6vfa77p7Tni4WO20kATRvgxCZIyPTABSbkBrqtV7lvmG9rQhB2Cp0JUFb7uC6K1GGkayvRgfZmjNo/T12hHiIvZXPSPAsso/QcNwgnGwVmpFS/94qwp77wVynhTeS8oD1ZpYadndNXU83fbDQqcsGRwMzaXZ2Ka+LslpZ9xSCBr8hU7YgBYhcTAPClTNBdHEZ6rRzCjwPft34fXMa93zu9stOmTvA8xUgD+jo0hwYo38ekf9N6TxXB/oo6oTTj3jKXSymVtc2vex0PzsUBb4kaD8M1wcX4ooN7am55X8LEvNvJXX+CYd1GxjdmMfSN23Vtjsfjjx6TcwMKt06BRJwCAUbq0vIYBz8HDV8GAJRw99pgu3HZQUCywxuEjErt5DoroPM1ASl3GkLCD4lpPgEriZyEHSLNqYr4WuctCkxupXcAHo8cnhldMsVXWDCnQ+s+HyuHsKqQ91qowlyUJ7iJ/3ZO9yoW8oZDDtQf624p67CwpWc2WDDUR5R+Dcq+hmItoAZdyFHowf9uooh7jrfoDHRm2wzgwUKyPlARGFT8Yf/rHbOPgmSTOM4daM2nkNWIxJrh61fR6rEDWnnBsbCT9CHQgXhZlxjvo25KKc2j1DtAf0yENUe3dFTGFcBk9tObKQPN+F+4U9zaXzt+YwlYSQ8NQHRA/zSTsT7ztW37e3Bn1mSqWXLgHpVKiLLiGPvceEQwIY/z06astiuDaSG4Kh43ZXuIPN912Ixpp3oEmPbHMVOcLsQrnbFWF5PHPx2JYijlifNbCH97X4pcPqnk8UUsI2MURrJ7u8okIHIjwo8+bIaCLyYYCm14ItBVDUteOsp5pyP5aq++2V5UukLEeCXXcycxjcoVoRzMpMJzTuK6htCFM5H8sClgy2c4VZvVkLFiTbVoBu8I5Q3Qg5bS+BG+QiI6UOkQ2EQKZIUdY912ijhwHPARmTV3BtIjqf+xIDS+c/ZVCTKEg58TU08V0Ku0qy4URvKLmst15hKCmXpMG9TpIgnJwTpCHHlfc2lbgI1EFzY/fDc81J5STKrbsTKpG1cWipSzI3KC8Skk/JHA8WkOetCEwMZHis+hYlYncEhZrHARnYFW71uDI8+pSGo0VCP8z4SDe/IwJ8PHJn7cva5sE3EGLIvfmnK3I8kxdkhXVS1MKNgV9WS0RG0vxNOhKz6Rm7VCLihEGSwb3R2ZYkR9L50aDNBjzhVcWCZcaQXneRKCFcRlpYHBKlKooB09j6+oSN1fQ9v7eT9a81Eh51m0sHzHfHVSsKWzoGjSe0BJ2XjgL++kjRxc9vR9eRB1KvCVFSkyQIOTqhPUMJjZgAHJwqp4CO+KozuOreJ6SF0on34sitAcsJzSn4lCER7MPz4mqPeDlOBHd/gv7J3zqor8Tdl17U2OOnI+hfucPdS7L1nMoQuO3q5fo4z3GnWf3GjkPp6hPMd3TjyiJ2NOfVJkmOyyk3QIn2w4zjAobO2y+6TKVCu9r5rFto9Ge/gM9FIVk2MSHKk8ZEMMY+QQ0r39GigFOKUI+1PbfPxq3FIZkL7D2N+LX+EKQKnRlKcyg2XEA61pXwYlNWSK8UqXHlVJ5Kpr0uA5T8NzUcg77DB5iUKNYLro5LPoZDl2I80RjUCC14Ml+S9je+3596UJmih/I3yXHMvduwgiPlVSGawNCYhW8vF7FDRzIOuM6urGmTDHuLAMfMsFnK7hPDYnsn/BvOqZRBLv/klJlJ7sdYRGeFjc3ihoZ+DIaYvsLCtgFA+jstK7PGsEFnDJ4lZ+jHAHFRz3J5HM6abkZwe02rcEhS6Vebz+Zm7iiBcRiRKpr3mhnus7VuoQBgqMX3bRPvgSRq3glcdiNsMBiTIdky0SFDzoyUdhssmzATxiVPoBjEfA0clD+f7kNQae/J19oblOO//IVqs2JVt3Ag7f77c3HsO54o9H6ikdUFMLJ8KwD42wIf3VtVk1PQmbzpx5ZMYjodQzTC0AzDU1hSc6t9mCAMSzxJjiTHMfryccIzBNYMpKYM6ltR0y1Po7GtLEgbbkpzHowA1RpNJtAeNKQdtGKl9TBT20FtheL1Lz50Mh2ouDC+RT2PCZ43hKdslQFwDN4XOGmdriOmBxLF0gkBpaw6V1r4lv7oHp8PqegsrJRxEI6Y24OSOlQBUs0AmE0ee1ynKWrgBb4lIPkVZ27OI/PBMKbZGH43Lk6NDqUT7beY0rnQcItgpO/nWXRzrrATiC0doi5HPz8dGqTPsiETF3jtUzb3UnkfLNX8hsen3oDSQ0f2Gz4+14gyD/QX7EmC5L1qVwOMOYn/40vCOLj0JzXZeL1xqUbzv1OGNpeO0Q7vEcM7WpwbKfGhZCIkbNhB2w5S9Z7uJ1PKpE/9tBHxZCJnsQsmFG/QVaL7r91l1fcU4LJePHOyqS1q+gojmL4paR0T/dDlo3LseZyxPxXuLbI4luR+LeB9S1QpHakLbE2GaMjGdQQESKDww19teTQ+hKJtjfcZt5jQj4Txn2hpaED4H/i7lw+9Swbtg9NYiGxwZXHNGcwnfsndradPzbx0oP22wwplxFo/z8O5e2MelkqdC6l+umKXyR7wC4b6/79R0rxwtO/1LW8dZJnD+0CNlQDNy1yPhPJIxOfCkuCWun0NVZ/ffQB4na5MbsIHQjybhISsh+DZm9QNGyz2ZA9/g5bWCjg7tYouv/hklZMsfXCmt1mpsdBvTzTUxb3hHF4Cu3yXG/09WT/zzB5kw+yHKaenIlEDMrpOdToLTl2gxWN1oBhNp5gv34bEceZMzJ5xuzhyVxLPPsPcZ64acj885NzQDWFueyyg64FAle98/7awj7toJUaAgeiK626ZW5WZtlvX0/20uvcNyvhCvfZsu5GGulzZJGxRVxj5w8xaHXd+YaQbB8lNPl+BHluWai1NEDPPw3UO84mnjKt0KmKdLh4q/BAHWJgCh+hUxmv5xOjzVtuZwxpB7wC75kmiCVB5DJj9oLDC8n/z/2zi4D43JMUHturY/kn2hiqTlXt8PvuqzlJHaYxb3fC7c0vOXDRng4t8CJ452kPwnfP7DjXZh05VbQaiwdnsanxhWbIN24xAjXE94gLNw4WPKgMrMXfL9sPDlfret9/pJZ6Xofc2HmZMfQLs4xoCCW8zxVy33R3wzN8nzjBreY1uECWqHR+sJOHJNGPj1gqSK2B4LI19EQ8MzLAhSSEv4And+AZUNsdoboMTyeGGpxNXlByHV0ukQn/UcfODiUjtRUZLKRn+/tp4ACGbuAC8+UdXR5f+46hdLvf0KFy7wg+vSXfjFdP4jW/QcoN/SfU1MxqArY5ULdS+wnpkOoB05Dh5ZVAl4ao9Jh1pR4Go4amYbEChxEdB3MwH2k8vNfcENpw4Wv/Opcjk2taSio0XigcS2zA5NYqUhJBUsH4cV7rogw//J/VwPm/le8/lXWFBdDqpOIj/WdgSTHk7VOCLcg/ii2RKmb/6Tv7+0RB0oPxsMfcYJWJ8y/aDunzj9II61zT8fyb52FB59niSnd+zS78+kWHI5PjgD2qGNEsQbzks0XsBqcKejJ2Hc3Uvxwa14OPfUp2oOeRXLXqI9XcfVsdwXaJVfnnPKI4zTJ4zNgHlSUTvsa8CqOilDCsVaQxw9zHFMvFsU6ZJ+Ewz3/nxTydHe/uiGj5Trs//3AJuNNor3E/4cnzNtHNhVYfK8ZP/cA7UDs5hKdNbB1y9YtbV+4DpDU3JNfwK4dAcWVY2MCzhjgD1nU64Fk4fVewdD9vUsEI3PTnifHIzf8GLbIf8gc5br3wCjguz8Z8MbrT0Z1AYseU5pblQNaTi0wfoDEwliYGL410PpR/bFW+XADs1D1fv1AeV7s1hBlgREXnVKnmx09i1cPgmdEfveJN/NyGDO3wRDs78mYIfbf9n8nn+wIiH6jQbIHAMUwcRNK5x1odQNPLOBBMc0oH3W1aDuOMBa3qsQoHMiobnxe2QlsCE0fMcbjLSKHw4qvINVCOk88PCC9SV9nGV09OMRwF1OQw0FjBmTVmqPZOFBgYUx1oT5cR/rDdQxEZAfWzGb1+WVzwxkTnaSTqUNnjy086y5JgJza+artM98QJiWlxLXIz3ByIvodg42URjpwH2zNuB1j+gz+a7bCdlzfpg/iPnxynYSoEzjQU5RPBe+W/7P8R5hoNPDwlQkRKU9sG+Cm3dXEBjKjgrzwPKwLIvnpVIoD5mw10YtWS1HdzzwoHWJEC+61KQ+VQ3f5fx4+ofeIlv1Pu674FEfA4s8jRf04in94MJ5OnYpjGmJ4spjflzSLyc8P4iyRnnMrxgoSOohs+NLU/imGFGWE0DtwcJFbb/0tyizTTGNWVXv/SUGSSWPmxnkjSsqdSJ7XLQvzX5YaO+MJ45Z3x4Rurx04OFGTdipeNz0bEDsOjezFE3sNxmpMteFF7SaxpnjEZzsI+9API62pf1KfmSBx2NuORKs+54JTEMVQK8LCOz3dBFviY0AHZO/F4jTe3RHxYSAn1SeTfQkf9w7eqSwTtsDqOb5BBwsq7dgWYlGceeNygStkHLWYpoPYOnYyAUTTP9vuinjesw+J/nlKRucPculf7tn2r7s9NsMCo/EVDz9DjMP2p7FdzrWpkX38vO82xPs2590aAp0arnNRg2GJ0qJEr/wAAXudu/V4lLWjRaPxs8QW6it21u0bGY02dyg/NL93FklGTqyIWS0JnXtNQN4awKbBUyjERfOusjZzqUYQDGo0LCNb0jtfnEvgSxuGTAwYNG+/2gKL4jDxhxsHLY+ZLzkaButT+PebTTiAqacD9Z3gZGS5EBTFwfJKYf5MX9ejFKrChAJEePjxA1kNppA9gc3pQ2brXvi2pk3bOqFlqKYMynDZImbx8gJ5iyOp+F6BcApOZRuBpHz/6xqQmYeoj7Iut8LNAxf4q5hHIIqDHYVJFqGWUNSPXWlXZ+oWhLEM44y2OSN8OQ8UH5pxRyxX2kFXS0feInZ6yH1nIa/Pju8HY3JfgXAP42U3P9EbaCp6C7ldpP9BL7wy0ePa7w2/pKOsT+2vmHVAPaGdNadai/ZCDuFsTXFESBKLFkNT63LSXKBt5rH7tW4hVBJFGoFlrPO+ZyqBloZyP40D6QsQ/T6MzgsWPLDndTOgh7YbpdcR+GKLCObN43i2RqghTz38fQloOPsAoIRdKkgKoUi9+V9Aab5AkrTIVVA9+cp/D7UFnHSbQSQZ3qA17GE7myYS3+iFRgUMtqlITchkSfcOX0noPGEtZll8aB5jjbK5wuzgwc3XJ6PbbwJzSiU/Z30jvMHC/c0ThLC4P1MajRpR/LR7wubpZfremUxhfVmNEurkRNaWiZ03zi51IQGF7zRDAMAQ095jMv9PZAKyrol2TnXHSnmqT3TQDVDP2OPg7LkICpONRAHwJ6wPdl4gXEN+OrqVJx6X5LiiqwCJ9mxLw8f5dcNxi5kI9ofGy2spgVVbUduSfcF1oPo+dyQJfQAZy3qEfYwDeBcnNaAJNj6YYVnJ6mw3wr6RoPBusGe6xg/xuCYJYIDY6+Id2F4Gk/0z12MuK7r6N5NMYddVF3ZKwkHBe6D1A90/Blv6fCd3GWbnb7vIT/dvBOBwuIWmnzBtT2GTF2xfU7ugvdU5/TMIcsUafTvPunqPoe8oydLuHGtKYuwWVQshAnoqj0L8Jgfg1Xj/7GB1At1px9U25d7xr/P7vTPWB5yYKMvXllsVbV8n+jza279meK/2nd2KYy+MZc3fGgWQp53g0GFGpR8QMhxnkpmztvduQ8y+zup4r2txpsHr/KWACzuc1Dkg8kIQptPURcd/z9J/+GD1ulgoxOv7pNozx+ufak2WDkPEpNvPD1FWIWFpaHx9DYi4lmfckVZxqzDhjGnX7VY5lgQu3EM5TX5NZ+gu19p7Y6Wky8uZnVNKfChh/En6A9sjHXH+KBB09JxBz5a2Yuh2KIdl3Ye9Tw0uurCJe1qVJREz5Cwujxz3l9HtMZtzLxfr7E568fbp8eyLc1bgvlTN+eaY/x0pT7Ez+i77IzIgqNxDnAc1oXCtXZYbC1NWz9faOcz4ArXQ/uf0VYqPsQYuzCkMjD+F0ilmsR2oO7z8Y1QNNpB7osHdvXY6St9d0N3BZryOVd7SMgz/2HKOuXDQb10zl9FLmsVgCbP5hyYa62CnVEbeO2DyMegsvIX7VfQiz+PKRlqNJTmlFzQ+PmyxGiRtFe4jni/XTc9aX5f8IZW5YPyqPPCsOye4YZfJ9E/o7jR+tMg9mK5vHdOpfNWjHdArAhqLk1YrPs5/5Sw8ukJZhD7IpYVUVQBzekss/I5gJnG65IHflvR3YScRywu44xduTcgP8vNGJZdOmB4+5pQt58QU2O7fliCUGiK/T8y0mW/ewu7GnrxHcbvkvciU1+y9kx0nzulgU/O/tM7XJs/+P6CQhsb6Ulgh4UirfaGbiK1CQTvfxvjw4vgdYpv2ciKgYLO2GnYNqqV3uNysJ4nqPqvYPDR10QO58zZLRwpvczm/8X6baFJaaLuWZy82Y/xC4IVRxtMtx+K5a6uFX9N32MzJKFjYh0EQx3fQJafoNYB274GpAKXfB3wAM1UmqfOaj6q/IpsNX8bGPylxHHcQIpxRvgHo+WuL7qKbqtjU1B3hL4l9U5MUDCvKT2yn7x606C4Cf2N2J7i6t9Tgb6ad0F7k09cF7nt12772dVU6m/MUiGIU2T2tgpbl411vFbTyHPwpG1niQZ/3oj9x7x/p0d17O7s+zhIcrfS3udyoEjRhZZ8El02+ODvW5rhsLDL4NtIVctO8eNqD+aE7eJVn6Qo/l1FqFxE3WsbdRaGGjGClfww+B7Vu3HYr7ufpx6hRbhcOKMCZN/1cmNWIqnf9OPshQZdG58EKDtqJfAaxDyO9N5PNL0JPu6TjrObD2/OyPIZxxh++Nh6JxaA2qSs76mc8IgucbbpqLXVLv+yjWwe+vvRxIxJR+8cNhI9BpnnuKkPsbe9gbsbM/R/6bX1pVMC6UwKc5+ibILAl8mfP09JD/ujLhmZLAc88o0xZ8QfcBj/7dDk/uhHV0j/ARy4+roCeDxOJsub8qdEGToef6I62enTxXL/8cQKRhMsvku0w9GOVy844BTJ+U9aJDufCNtcDdYDiPOfQMa/p8AewwfJGsDqXIZ+O+SQaWNlbEsg+i/nEvqegHoYrkv54LCEOB+qlN98MwGsbE4qXKvm+88dx8BHAcD/BreueAct/A3zVRMCaAXUHAKw6IwO8OfBWlWB/jYoub4bEeNb0+zfB4Tc0bUvr/AZdY/24QTHaA1kikW8Kb8tzoecOATX/8rO0mN8t6DKl+H4BJgVSO1oH+gPufwjhtLKchyQiDutRvPwtbj2b45T5/H6F+c+O+nXJ2d8p5+WP1qVECnPlXQG2msj4hZvenof6jUfwMYbetieL1jN/P3BKw0PcurvEH6cQgWt2ImeP/H6O9poIfs/Ob7zO1/qc4uvkwl87oS6o+U3Y45LHxUh51qhEO4HOLx9LRfCGQJ+n6KuC4+uthge0A58meEuRJB2Oo4MD9S3Cv863ZojYkJOMCW/S3Yh/QM+KWm7BwLB3UGMFU9IIjxkyZJaYYWfV40a+ZM2CLSDax7AYFhu2OVwvH67ghWjaz4Andr7rvQAxKowzQSPccO2wnMTDPv+4STqocrqmVzJwhAb+5v7lVot9geG3sjX/8wWhnsJYr2G/41+dlLI72bzAFf26Dy5HT24w10Ddi/Jl1eEJLx8NLSXm3atEUgwrhARQmnIN8hJpTTPNkC5TvNZ1bB2+k01yvNX2OpVkjYm3kLS5uIvELwvXcai53GVVsMAycMy3GXtuoTpuBgjraHGp0OrrBBoL3rF0Q7KheZHmdD64Hte/OSYCClXn/3exgAsBDzOcjsTSjCfMeVHOLIFAnkGzH06uV7Ed1sY/jV4ss/Z/9IomceyvZ2du0IG99sKiLB3jyzHM4ZsBDqI/RHPjOGAq+gQHac1uiFsFkbku/7fc5eSTQ1fepW1eoOtAJ/9u78JGOr/pVRLF5SpRy4mjh/N3kBdfgWaLIZtKwCX+TbJv3ghUSCohGMzjQYDcvzFQc7gKnyLgzu6eyyuLQ2g4033e73WBhyjngq+ryGBEoFP9xndHujhMPnjGk2n9zObgPwYeE+qaIgkuUW4VJQwe9rFeAFO4Bcch/C10i8IN1/Yje7nX0/nP9Kwlyi+Nj9fuBG7j/YSjbLJjbtVYhexDbCe3aT4xgMwMDz7paXinJe9H5q/mBkgdu4DBw3d1AtW9fprIuYP9Nceb0HLE8XnYdRNIP2nSY1qUiGtM5ze9BeksfHGU7lmkTbt9+b28Ww5dl34GXJR4x9zANf4rwkx7EWvp+4KjZ+6m4ADZ1ivHa9DNLXjqXXkd7Mqdj9sulUcLyEmrMqP9xaNqPg2uDWF46JrbO361Yfn+IJgBB1+CM5/P095cQeytgiFo0BM0KIZy94hOXg7ojhIesnWZ1PI4l4k0D+UMGuQeQYqPhiMvc2aI7L4dTp02Q/AkDP+/2Tm5khNgdG0jZzjXvBwcw2bEKuP8PIjFIh3TnxdX8+UZmQRVC/NJGh37uFfbDiH15pRgcVBcOkOyv7965ZsxKXz7LuJf5/H+0XFO7nYJwPYlofxTN+eJm8s/vKJNq8pYFhpyp/ciC638DQJ8GeFhMjaYPx3gjtwk6rHaQbaYoshGweVPw4Nq9iuVH6Pp/gP3Pl2zt17PdoTMcyxOU8MCnwNxTkCMhpZDWJWDybD3+/XP2si1AJwwe//K5E/BDMSTxrnuNF66RNFS4StwWZhJC1ADWT51ZA+9FUOpzDI28TyyP6ph2P4zDhxcoFt3CycBqdbAfYnG+v5DEBwq3jVl0kOq451rkA7Si+z5ogT0ybBoxEYSIpD13ZW/5LuDvkGoK9WcDIUX0YRvo/f6ZGIPeZd4YrZxehkn5iCTq70NDKAZ7VRTkRovjW9+uW3D4BLhx7/a/ajcjighWFzgVvPw7sYc7WkdKdBQNIfhwHNYw7DPx/lIPNQrEAa2/HwSInCY7RJDUOlOapZwD/9m9lXKMiZksvRgdkce8Y6lMvx1v9FhsfcPnFNv7wAxieuEWM73bD8HBa9cbfwUM9Bq0bn9PGrK0pJG8Hlm2QT/3UdS4cXzjxbtBH60f8XfwqTHpcOQt2at61LCK0HmM2OGLWaXgGOpXf7Y+ckOgkGtdbBCWnfwgHh8iMfEgWA92EYDImOkzNe4XFHnvN4mkc138Ix6m78WMWhckmH6IbARD71eY/HsTuHIov30gNNWwffXypklqLx9meV0TcJuH9NR3qNt5Ewi1bbAjOo2jdaw1Ba7V54HRjVeiW9uPzphaJapsyXiJD3h1k1eHQXaHKbNYEMiw+DnoV45On6PZw5HEcwqS9aC9Z+1qHBqXRHZPz4Big/w/eJqm71Ac9aPIfrLE6n3OJWx/LjtfDkkDaOd07EHFzk6SrUge1nDEJ/wPQBrWMYyNfxIeH6U5o6jMLVuHx4o3fCS2pFjVSPHNYHNKxGAP3nmDeT4rFtuPQPubxbdTGeB/mR5SrNdXAfP6LsbMNBWMyUIsg/TFrOXI90CePkFJdtOvWhxcumysbBvtJa3Ng9PD2nfhivcmwbbfmI7v5KPfRPNL6aBGmCndk07LpXgnWltVXTjkEM529oUiDZ8VGHqRcGvhEkhmMNAe6Zm56zmUfEpyf3IkCFpUVy18l5caLNs2/A4L/+bVgZaA1aPoFke6OPf//UQDpOsGlxIPlAFDD/4Ia4FTE9jS83VcTWGC3YuxYGfOB5NUIrvwoB73PfEd7LQGRdTa6SZCbRsSsw7Y9boN+7ZLd36I8uRxNX/+mAemjWN1z3Ru5cfsn+ANWsujMeR+MBW77NORnWX4Gk3MmKTOy5xaL81kGjysM0oJi6MrytJ4vpH3jPfNRMYPMz9HxAKcoe2G8jYUb/BGeI2xFdXB5UF8PEznv8EAzYvbCDbNdB0DxH4TxhDr9uS4eelVVQOXXDAJwqP2tKEMpLk85/EbGfiU6iNxuzHnLsvWQlwKC0n2QETGtcKz0su6xvyeVGhUmjhSIvOHTuMUZRKmJjqCJm9NDD/y6gOxkIAKZBfnCQhZ0icZZl+VV1V+i4joG7Ls7zy5DhAxCmWc8T+h9BhWm2cNk+QOm3VduYb3cfPZ9jJH2A/rj3I8EptXs40oi4WM1ZDtDsstORMfs4FeEwM/6McRCDnDx2UEyigKhuK1F5WtB4mmR7810ITCf9Hy6Xe1rd+zYHZq85hek3GAII4LiexBYQ/3aG8nTfjDHrspXRBLx+N9cqySk9TrE8M9Rk7hlQ3Y57oMDq1amJiTvt82zqkP5euXYRGqVY+XDiaH/XcXZffx/WR8UeZfi/7xFY8q5rFIN9gayqtyFl+T+y5mMoWhihqn68vJHGMWIfIhQ/5u7j/Xq3zpJCKo2eIpNG3o/5Szjjukj3nBufdu/yzzsRw06c67vSNPuGtjNG4gxMmmHUgOgJ64aDbbeFHK/2JXnV6XU9f29mI8ncseinHmc90+U84y6rljVCfzX90gP42iIIw9uxGBBkX9wJHWfTUhLB04YOvOch+8ufgR/uY0oq4iNOCrlUMfsEB5C8lX3jNwanvsownhfzZq/y5K3oPU20MAC/xLRRaEtRQeY5krfAh/ekZEag0Um6tWityIP4Eyff7z4+QuRkpNTi+TAh9OxTuvJH2KK4QcRZUQaDZHd2r+AG6oovTJ+cW4VAjR58Gd15q4Zh10WiqP51mTlz1Q2ZroKdIG1NsO7uPvQo9ZnOJxz/FDbHOiJjN12eE/OVvXoC6ro593ieHMyNIDssszjG3Ql8NmQSVo2xFJREXHLKGnFMPv/Rr8tTMf2o7uhk0DW4DOnX40MP5C10OzvFuae3vX0+n7H8C5gO/mf2vVxZmgqg8u7Zlehu33IAPFfYN5pR+ZjSJFVf8+j1awkdojCTzUk8X5wpAliN23kLZvYLYIYtiuYUqc6SkqsNFdd1BigHKQurbsS6+jPPja4lmYN7G2qA++g0DlWB6bfB8gngnGERlwuj3ZPOvq1+46MVGGlO++Rw5xiDFgQolYb7jFCgBdyeqTqzClObqN87Py6ZYYxT2ny1/egXXTR/TdK1hUU2XhM8ELxnRCDBvyzA/kjzWbz5Qgn3W8HAB66O0V+VBBi6JbujlcIYSd0C7w41Khl/vipJZvlTpaoukKJV34OIMOKX9Eh15PEW133dmjaR/T9PldNTkgdp96rjWAWpBrRti/S+7Au7sH+6C397dPXck9AhIqI8He8VHPoTJzwt3W6UPM+DGZr1LLrv1ZJdfOuz4Y0y/D8lxMoQSH7TRIBRdbr2O0RC5rUbCVgdvLlLHvNQoQPrx9RyYPC1EFH2jjWKOeEyxuArAfuy/GrgAeM1vOQRgqPHHDbeTCsBvk9+6EpuAqbnpGh1s75FgVYu+cyh03MVup4nZxiWsgRgTpq0XgOvY/m1R4ztTrmb11d/udYnwdGT5K1pJcRHIlWlCT0fF/7lbJTrW59cjy/PSkA7k6TH5oUXTnziXtfua/8Xis7vgqO6jvRr1tT5cy0JHZjqZcpjDDz9eFSvgcFrgJ4PlHpgo8dGdEimARYM6tj++LVb+Ti5zMzyeX7fcQi+CfXGIJShG3pA+P+16D+uKFf8YOzsIy1+tErbcvO54XXluY4tBkteK9OwadRXCVpXm+Ph93GdHti16J0fVjm9zR/HlUldftltbqJNj8mVf/yoxDPR824kEv8LIpwNBX+UKxIasalzeFLWvLn98LtBv/X3n/AzamIFw0lvWyV5ZpsNVb8GjMYz4YQZ/729L/ay/avnT51z+PwFFX14v+jX3Y1ogLZLMpodbVu6aStWEPM2p0n6ZmDp3MjFVctkd58N87TjrUdiD++SCUaXIf2R3X+GekILzZD6LfG9Ygl3++eycDiGLLRDkbycnThx7orQwWhhxgi9IQdWRXfQPI176vcCP3q7QbbAZsP/X6yRaeU5PaDC2NKitoZC0A8t4CLbQgGlf4vyw83++9ntb0OqP3lR1sxA+kBpG6S/yPVj97/O+fOjHEb+uQ1ddaTQ/gBd65KfJzPdxPc93k9l4KuskDd4P1Z57Vi6yxc/QQUNNQib8zVDXq6T/M9px3a+IpghG+6ZpJwXGj0fbhMqPNlm04agJAF7XlGbbnT7jWZBUeKgHIOBnriq4fVrRR/JyayTtHqeh3K7ET88Qfn/6qWGlTcklLLygxnf27U2Hdc7z2YmS3V3K98cj/wezT9e7yX7+jwS6MtwEElmZk3A98v49LufxHnMlBYg3ZfiRzFzeob6ketm/sH3lw51KyoeB3NTtvLwTHTJxCsUZjfCKIoDW+frSYXPWvGkFm1gxp0c5JUcgZbR4g/tvakTNcnF4HgbXXao2cb4TZdoUuBDWI22PNUn8mJ3zWGvTb3Ox3ZtFMx5Cv31XGsluK4dmqpN3fnCiwUIOM8kFph4as5EboYJZ4xXy8Nqsep5fc8Gfc4jtaE3xK0Qv5fJe6vzTyqHwHl365/m6+Zn3W5LTDhtQd0g3CJ4d1aQsPL+nk9kN4+af7eC+jP34308Lc3Hr4Fmt+JQZ9wdMenmwcO76u/dRXj5O7g3UsqBTft4dR//68STLvISZ34upwSQRzhTmOBtt/Q8aSAltxdKDlPPHBrtbc4IbL6CZ4BORA5+m60RF+ncjwv33e2zsjkNfmDEi5BlfVC59ORuQ8cbUcr0R14ib+xTad+e6DvB1jCAWYpj2q8ERjSkgfsq5HliIDlU6QoPYh+7/2M3yRZY8PNrdrvOQdcUOYIPC68jry2wdSjy4epFt9IW4vpvGVvIinmw7XVEB9i59OyzeIxoM7su59Bb4Wx2sz9LerAIhaej4GKdVr3ow0GUU7hsjjTZxb930xmPd2JLlS3772JDFz7UPyLa2M2z8SNjEtdFfwGCy2uV6Vl9eownMsGQECkf0rdrGM3dp+O0u0bGuM1zORKcOLBy4mlJabm74FUn6XJZ+Ksr/yRgepG5XCJBan++tlA/sL9SID4fSXO5QTDfiHCG2xvTSNAB1Zny1BzrQQwfQ9JrEpq8fHI3YYs8oy7HDpyc+lJ1QZZqhYavufav3w+1T6I5/TKSdGWJ1ZOMN7oWv+2Ct8L7vKTXK4jVJ1v8z0+K6hmkvsjobzcYfP8y4KFM113K1cWutKCHpj30cZC94Q4x3N3M2cOJEm9yKx92i+fqaGCywG6rY1MIeJ5B1qwi/CqOzvpoqbeGA09zUi0/yY/tppzozzg5fY8TUKcneVry6ASNs0Kc+yoZD8giM82/nGuJKRubv/gHIdHqEptsPQSWKQ0z7UEGht5ih+8ZQ6Du3jaM5Qd+xXqEGnsPt06RB2tfmP3C5MjEFeUOp7WOylmYM+DIgk8AQUWteHKC6qFjBgUcqa2ieALA6r94Fovoes7FVKVe/fiv5GbD03KOB8r3JYjG/00Rw/3yHXjMPxHkmcDtO+78/rLQ7ymZlOJtwvEZqr/OkMFPmFwOA4PKuKjleOvvSYvXlw8Szz7kXNdCzHRPbukIv6VxflcKDzB2lk+NK5cgWRUc9JvkWK106rldJD611+DR0Y8kHrCpGG33oeeSvkC9Jcf9eJXDNZqBbUG/05esdQuAO9Mn7bPSn7cH2NxBHZFkegf6uOGjuRtnHkhbw5FnEiHguBnAj8vqkrJ+P4hfd7Rr+P2xv7HPllNyVKykHGVzMyKdkHsozQb4djaF2gOax47CdLrYlcBX+rjYuhIV/x1+rPMw8C/juPOil6d7rM2w6E84sXs+60Nx99O8p5eVRUT8F+N0aqP8eujeO3K258vB2c0TgB32LQ8NB/3PSBzYYnOw5261GErsC5ifHrDWMojRJg7GXocGCfh2b2KE1BX6SyOdgf2fMnQQH6beZzTB35qgOHHYFUkD74tCIZ1aOXCGPa85fH2CZF3RnwZxPH0/6IdaW3oEwLOKxk4MGLtrYIG9Fc+IT5YldpNOnk1RvHHr3zY4a3uxfxR7HAZhieNCYwmFC/GzJ7+CoguSWXVgMXrR3izu8anE8SFcqBmJAsCoc+0d6Tn/lzDBQcmsSFNB0NwDnPgKOLcvPgSTAw/XXw5RYBrYNyMbIGJIROrimD4g6RH5HimklyMILIYM6hCD7fC2T5TCsBGdGP6Yl3xmxNGqLRTgSQ2tg5bk6GE+hm73R2raSzLQNZQs4F3rA8B/jAS6t4nyGEld6T4sP9JUdRDb/FiRdQAumV6UCHSs8EzS+OPHlS9m1G2S/sgdFe469mzr/XMWyr7uTaF2PP8iQe5yDsy2nWAc227W85g1B6eSFPhRS5z7MyH044ijTGuY+iSM2p2UvaO3TksVlmELiiyPDnretYLTj1+JFqK2wOYbKSCU3ZAM1W2mLoKq9f3WDVJOgHotGyDJP9yo2Bhn5uBzYjL1N/DxZvz5U1Xj6tTFTIAx6zv2EBArOwnjFp3wEzft2B1gd9YtnnveJhxeVxXp4f9BS9593ZYAE86lefbDSj3eexj247cYPW2nKDO412R64GNqiVHiu8z0XUb8O3XR/DItDZClLQ8nEbyDG+l9jsbPNVLwP9/5gxnL+0u3GNZJpavkmzeg85C+CjDcF1oCM9X9hFm0Vbapn/r/6sdrxxNiYOMqcIBDUHFzkwWc8dzAbT7N0gYU6vhUAQ/QeH0rHTrlcD8ZnG1hjc88AsTlI3Jmh/5+dduP4uy92QlQXSzLgG3fwLDRwLxdCqpZrvxiHQdgn140qkvEATqoANA2xKf522uq0EVKP7vQJ4kQXyDG7abmxXbO+5M6Bl68ju1Ihh9oRr/TFAZTXkfH+W01kFYDmxs94sv2ueK0ZFeS9SRLJj77jU7wTpJ3nkNRCr4rHz12MMYLJk7lZZMS02+XGUIAoexG0ZIZyPUAA37b7Ai3NbZ2+xNMC8BeWXl7I71oH0TS0ZfL5eDKijjv4BXLtXlhxCwtE7Z3Tz4VCI/vx0amBswImG+IoppN/vMME+l+IOQrOpO2vYQSPrQxe/zdFQCMuVxbiKZa0n2jaVWM/Pq4l1ABtIewzBTGh2V1oZmhwpstOI96MaXt16IHm31ZksPfIpYB2lvd9J3pHruX60np2hicazhP2CWs0uDZTzRB6zz4dcxO94Pq41Emi4Mnk1uM4/earNgn3FLS3xTbi7RvQTnzxqT3lfMjAMLWS9sWxYT7c8iz01LFgD3V/nKMIWcTFTutBaMPXsoAoPxCFUBHgO2rWtkVAFh34vz2y3gvZQBmqHKW0y2pN8ps/8+rXiAJdPEzZO7AK2N9TFmPa4uiZmCDF7AYSilUeDtEjKayltuiYQ7VMBKyl+KgpnH6fe2DOPzI6z7zRLiEqcvthgxSiFZPJgEey+mIVgEsng2FwAck9YeunAdqewz1pR/wimcjJUlb02HYwGeSdl189H6uw7gbxq6AXzLeJlyzyTyIDh/ENScyZ1+FrJ1PAI5peAB7r2K6LkfsCgXWob7JErbvOsMVIE78SamR1nKvPFsmybJ9ZzVsBBCs2VfD4cJy6YtL2ZamBrIPwJ7NiVeGuZNslMS1OFq90lScw2MhupxLVHB7DaeNCqjQJ9KA329hhO9XC9AilpSlZat06p19YR5NVAq1bynp/2vHRlsABkjZXTmuI39VCHw7DaZRmVPtD3PcDjkH9HeXITgcq/8NySJozeRfzwcNiqiRX18yuuHkTr+RaQb0U/BbMJK6+6RMTjuVADSHTUtpSXLryN8kF6RIUtEy9S2XYDyT+vb9bvVJYuFLDsVUxT4vYMMCfsb4aNHzc/IR2x3m/2INL7t/cJzT/8qB9RiJN9J/qpxJG7FCWFERFF6LV6pibIEb0JO3vYoXwLLdkdZrOs5gxUQHZrMaGSN2+pVJ1zv0p/sOfMZQSvOsINAExnhEYPqi+hQs/tMiXcuhwynJJY0NR+iElf224kIBlHJ0mnkUFPUXWRSKLfe26ZTRBVjhKfo6XVoHesb6UbH98b2LKnYPuQ5QWoGlK8v+t8jBJkzgcE8cLR9rITKCg7elvaC//dLzI03k8MI1g6CzNvA+Vpz/AvfybKeXOCCrdrgiXKefMsOATO8gwCRxIFYlyHx9sQpALakaMLJVYJhIEPWhQ6izQMdcDzADcqdQFhtdrzPFthYCGP0vGQJjSQCJoPUjWD+xaFpCA7JaZfyKjmkDViQs6Hu2SOagrTaAT6MZMcMZcWmPXy7qUORAEkR594NT+V55Orz0zRHkOnA2UmGvKtMfeAp8yxsNEFhKUHfP/MhWPXoy60fCCo51AaOivz/pq3Me0RCN32mKIGFOnByPC+XGWItg+slLdoc0Dv7ooLfkzs5n2wA9o0Kdt0U4vyRye++LsqfQcrsQTUi87uPogBZgZ2G3W14W/gw7CK45joCXcui7D3jvV7/Nti0AUQ3UFHLuMX2hF0yegQFZgk0RQ0D7J3yktacx/wIVwfjYJ41VXiFnnEwMgXayKq2AmGQZXr2fuWJT03jw3PM9hH25IjxTkpdfWZDD7JhtlnLa8gPIh00lrWOSKKzyk5NWj2y1LCkqODFjPG9E7QAOCjobHtpGxL2RWUizMDvzqVWuQIiY5AFi24U5P2A39vGMihe+zPggu4V1QfEGy4PKqTjLERM+B/8dvVkKDzDfTJSDH2j9VNTTEGMhafMt8K1LsBIi9DpR7xLX9GBf/zQAvWiTbpP+u8ilxZj8bMm3/Ywe5+hm61pUtOPrYRnEWOqJcu9ZXlAEnOUzge9+jdAWEFdFz2LCZkYGIA6EH7VgGuUPFyqXwMebH35K+6EqxOBfNkK6r9hfMZjJ6kqyBfhk9NKWz+3Ztpz8O3SNfJA9ppm6hAE3u2ZSFLN7q76fCam8I+KI74tH4WiomefhbmBKLoBQKsnb9jnqMxBbpvq1bOG76OgO4gJl0EfIChlsdixWx7gjiXV2SgfUNUvD/hcI++INJykugUmtbMCN5gqbTaCHI8ISBucDl73BK1RYuekLo0AQuJBhCuwh7gwEMM5fKkBmqOKUbBAZoAWwNoz8sgozbRM16Yv57lwraKjQkiQbgZRqKds4AA1m1OKsYwVhXA4GHoxoGGh6sgkmDzsYzKQbY56vRUYAMCBAAmmOy7c1cMiIr0ULJC6pRfgYerLUwGkhBmEdubi04Um+QvgPCU/6/9yHDaf/wjuZ4/8/tN3YytMCJ+wPJb0WlDow8Skkp26/++z9GWB0Iwt8SSeTEIBWiD8gId4bXonl+skVhYIeGD2/Gbh5PzJ+zjZ9CmH0qfLWuDUmACjM0ACGA7vnXuonWp9gsAq2fTcomc4uN0N8Y0XsbNy4hu0zUXuiH1KTwtgKzhymRBnCz1M8RnocuD15WrVh8uuWjc8SjZRf98VlYZzOWigH8DR9RZchdq8GwY33AOdDrT49kP4R9XZsF/PC/zVMVwQVz3nxcjH+H+L975+FgANo9pOe9wK8te+4DAK6Pe+vBXm1CfUA3xqAn6g9TM5uT8z/krkixUo+J38nEH0/qP8+6ZxMvL5bYxz7ub1uuJ8x4fwVu0090fvTMkEy7tD8ZwVxa/HlV+wMDfQ2IU7NyPK/ZwSbguq3Yf7tMfvvEuXx+vZtKFranMJqkhU9fI0o/57Vipq/CgUHH8qWsSqIm6R9L1tTtD4pCLAOuO67Ekhs6VvEyq3Ux9dE+WVE975QZZkTvAzq3S0VbyJzDLy+VS8VEtuQsVxWquOfbP1pX1vwAXPlQy7OMcMZU+uq3NW47LQkJG9bov7RFJ6Nkn5cMabdSA61pwqSs/okXTXoa+ic5olyAt0LEftGMezVvLUuWx52RVrGPi2WA/gJWCT07n7s+4EjVI7nmBjhl9S8SYVXZkTBjrP6dAuX2I2c/DE5o4f8WMrM13DGLycwuvU2DZniumIUH98iGka5ViA7u6wcHbCw1JQqlcHekrMMVrAZtp5vvejsGvvH407VGZU8tcDsU0vMNdiHzKu/0eCFj22v5lFP3KEm1s/VvOT8bln2eLBkemf6/lJqGRc9wDx5+IqyHtR2uaSaRG538vn/V85gNlnfzWhbDmTrt0VSANA8NNc8D15UjCdX4GhrZXc9KOpbwXL/uYVvervCc2QDgj4m0JhZWI7EVI47A807tpW2kppk4WJdo6NckCqW1XMrkCyNyTffPfG1Rhb9jlEgslwArt5Pcmc/3pJ+d3Ni150C9cIeVSezgcOKiRnbClbLHsWGzBCgvFsKGcvOwh0dSftfWMlSIxIllyNA2OxvFm7EdI7zQ1zYfLsPbWwCHH/+fjVc9b1hpbEX4PqScEcEkZ1aHAdB0yGHsbKYfmgRXPKTfEGuOuK24oawHtQapmgraoIWgPe3hKeHajCvRZg4Oh3gPz6bSOeHjtdbV05VN6rwvEznp3d9XzUreoAMOrb3JybaSvDjcIRbmGAQhLzn7P/FQ9qI8e2vJPaNaWeEtEw8kxRO3PYEutXIF9qsB0pqwD5hgqsG+9+L5q38CnYHuJVowaOLQdroI7Q/jFEkQDzY+ffipvVjcLjaPxw8jJudm0y5hPOZMpvOoSkH5qwwoL6BCY2UPkPODwoloupsblakYnFtizGsMEB8F/K7+yXpYO0FFEO+kz7lr0nKAx+Ii8HLId8pBqmBUF3U5UK558ViMQvPLPTTqtsKkLSED1sAWi1sWNt1TENodPGuzSURk0y8XnY9JAvOSkwf/RLUTrIUQppBSznQ07T0YdDA5WgAnNN8iL7hiyIGWMM+KTND4/9UuvRccxAdeL4uhkM2rdYu25BKQtHD1CVHN2rJcomRRHpGKFTs+mt3opN7L4kbsDTQ2PhASj4aeBS8QCsOF70OeYT0VovvvgKS5puPKKGf3Tz2LdXGwVxAbJyRXD5tyaZEfZ+QzXv7c87TDNKbiGUrSesaUXqBeOpJ+JYmvHWv49nXv7EL0yR002f275niu+9x6spUFfUJZ7aAfW/4YT3RtyeQGrP9exz6eyGIk/PmHkVZGm52SLnHqhb/QnY19NBFpuO1LMnhGNHGm6hed13+vrnMiYLjQTvzxdKTjj2AZy4rPD/vjGfnR2wfP/unJn6fXQBs43VeiEoka+Jk30z34fozux6qTk49TiV0fdFaAyZ+TNw2ZgA6zpxk+cJzj5dRvvldezFpCzSTeKCqN923Sqi4G/E+X0hHkPN9VlTymB89LXbSHLTT9LUF4+mQe6OBx0+eHL55DV3d6FWZLO6v8YEmRhqSGMlTLHzKcAcsCyKxHcAzjLlmAz4mUbhMuN1fwwj0XlwGuG+x+KUHSeENwKi2XTauC54Mz4ouultDgfOUkIUHptP0uJTy0zQi4sFk7Y3IxEnobrObefxiObK7cjYPJvkz0fRzC3xpUizAn10oyXFmgmUS0jb2jYqYKF2uB4W/LeGb6sclRYL+wdseDkczRb4aPOkr9Ewn7dzfeZbIgH2/kow/F8nXas9WAGauE4q1K+X59DYnAv80M7t3AnWWb6Yk571g0+P6I68p/zOLDWsSN+eutrMEbCS9Zq1UIfbA1roAsOC9hc87PiBYe0UI8IWLAlBS5cmz5qIbiM/secNA6zKOonJ5zofNZe7uMFHCavRCCXJ9QA1+99L3sbC65mVsTzZSfXiwFNH07c/Qzc2dtubiCTGtlmgksR+SJn/SfzgNnJUKz4fsAChxYcJONhGrpeJc4uI6+PjozKli45kbqdK1N71KU1WNpPNj3kNoX5u5zcv54Gherjmq2bmfCqaAvdQUl3l7CuUg39qIrjYe/ZUSX7w1M/zryq2ZbzR2zAp5GUeOlPFLZQZI+u7/6iytCQ2gOWDMe8mXTacC/6f782+sOTvP5MZXNkfJOGEsuZ+c08LmjzRZaumar7C8oieLSdZP6qzTrDsMrb/j8MBmDURXepCpzc/RTM/PeZcD+JwYFq/ob26CzEDKiFkfM4R8SwCoaub4G4oonk0PkeE9mQFzlsGRNy6YpyuXIwOJ5fzsZWjK8ryBMMesgBHUl7Nqdk2Zw4fj8n1v0ciHruzy7mFPmiIPT0RM+W9Xh6cK03MnfrVc+iAzf5xkGd2QkT08DW5o+ba5Dx1NPjT8JMV/KcQ+wegaImw6Q2YZ4+MZI2LFT309V+AIDMdFBuKc2jCeWQ+FRmf7tSkffEOJ9LUdF1y9LHwvx+Llv7ozyocVpwhNlgsJURSKDtEZ+/KXfyNmAnMFOtIPE+PGz8iGy1rcqQ5gv3ft74wFxkvYdJHwb2Nx7rBaaJ41EF0TsVMcD/Bzmu9i5T8E9z8gZ/h9uGz2I8nqvk9+8Y0GECbF+j5LDZcelDzhi/3vFwwnQ8N/7eULH3gmzAeXs7RnksI3nLajrc/+d5806BYXhgQMeDIGYtOY5PGpBpzODND2h1a1FcnlF7kGje9sgWLROY//1OpPij6JAF7zuDRKcmisAE2TScVj4+YDX3sCUOtYD4M9EefZgfx3e/DXpD/Cb+ZVrXSkSeJfFDNjZMbt0cUvwyMNUG1qlJ3RCO9+fKcCMPNHJuC9B+gtPl33341yr4/10qZLmqYq0lBMs9Nv9kAJoeusADhGKM1ti4VH+0B3WH3h6jRFGy167XfFf6vmIcPPcB7b753CVEGwUfH+qtej667JXbY4zKa3n7YqDEMxq9j4BxfGC52yyCiRGdc9Y1tuBMLnGEvGwKANvqcGtVM0PVWN6P49mzaZzEofnWw1HFbM314jNJ4LmF8aqOYbLRSaBgC0x4BsH8Bgt1/8/Z/JkSs18504eG2TchXR/odovQ43Ql6M8hz0NlKeHx67OepmfFInqZgoL+3luhyj/63hwVJosML4mix9OU8WoiWXF37p+Zli1dVF1hK8PCOqa8lfPvvOPm5d1iL2aon4F+sNb4vZcRVnWSMoe8MQgCcSSuLR4PCx7J4VATSiMYpsbUKOT0nbHdGWBfxc9mFixiiG47IGY9BJwCcCoDXYgKuYs6cH3/jOCnDKL1E+PWJEVPR8aJV+03RCF1jcz8PfPExuTMgVXv4VpwnH1MTr/zaLb/TpGqxLeqjvvqD3ntlFvwp4jQZYt9ar8TP1x6cwx8q3KcB8cQbCvt5q24E1rMZoYddCKw60PET6zo01RFdXyNkGGY6Jn7x+015LPb16t8fnd8XEW/nWBRIbZvr8Lp2qPI/dnU8Go0OYmNwrPVHR+y/unVHP+e+hBBjXQHKK9SDktqGHVjg9ZePKhAN+PJ0tPxiE19BekqpFfnLxMQS1gXTjNkOJAqvrNUNU2JLpALmngXBE3xYxwAOEPMRPUYFt0KE9U/lXl14vGR3/nF8D1ksrpyVy6ygUsvtuW0YGTuxXIPOCV/Ulz+/JC5IVbnNHnxu58/uhwpelG3odzn0/oYHQs+v1bU8X9I/+oXQyDTLsPZYlWl4/5c3akLPsL9DtfGctNP2w1aL9L4+fLVzYs9uJHksFfF32A1+z/KzNMTTZYWhb4yB6cZ/7xu57qKl0wOJpeABVkYjLh8VQSSmDqTZdIuUeRDLMySYLHnrkjt/4WlnD1xPLAqvaVWdfJ+Zd2xpIe5c0AZ29jsvLjuFpnPENOG/3KS1oOkUH4FmZR7AkYVfkRrWrIksY7ZV4ietmDj7Hh9SbbxUnSli9VvuwMCQLx5wtHodoPgkf5aoIY0EgSJAzZz0p8j8ijv6E+pZqUDYKsM0xhil/jq78zE3mZa3lCYP9gPBj62TRT5pdFwnpX6623TIRVN0J7vPWY4oS4htaACyDDZHkt9RY2f1aDv20yqE2RMCHMc7+lat32aAAO4YGcN1zau45nc0o99lT7hGJ9nfjMtQH0JjxB3YIHlx7HoB6blzssCsmnih17RMdlyzhG8EQj3m6EZBck7typaLiv83T05XSIk0By+8lkrLsm89DRMiI1bs2Yet+7v9Uy7GYeACrqHcwgI4hWnnwY8KElmxjJoGkbs7fHbvAX5tYz4T4/wBPYlaEB8zuvoETNxIBKA18WrYVXEaJOgp96/vGIQt+Z9zCh7IbhPjbl/4OcrQlYEl3U9h/abQ1l15xRHHJa7cdUwAXIX6rpdT7bRtuCg8KzstYdmpeIgfkxePPzoAjVrIrr/2hw/pAnKQbOI8n4tH8dfaifFh7Jdh/gyelFDYVT7TzdSZxotTj9O00xKBwB0l96Z9N2zHIK8HbDFtXHWp5zPtrF+97CbbCox90O+QKIzblZk8P//TkQb9XcuEpMyKG+NP6oNcBjh6Dz2IdYQyW9clJdKcwh98KvoZNQwct/st5+GJQ3Ezgv/EtTdCfSD+d2oaqy3Jg6NCp6pFDtMWPsjls25UWScnoSrQg7QmI1L/ZcvQzOr73X3ywe1uG+Ar5ahI85Z+Iw+H8nmVxLfFWR0SMj5x2EKM022yn1sirnsiqPUe+fZA7a9IZt6vdsV6FWCc9/Ni4GHb1hTIB9dM98tOJrDwXHcycjmKXhwEf+m6Fvc+bt/x6TAnBaWGAdFLTdIbRk5WCvAw55bLG+p3zk6kKP8utFcO7JSTreit9+3oh60vv3EUMnPnym0tmPOpLHYCl6cg81viE/X8nUn0rzvZbIs36PtsIbDZuwJnPhrWlZ5Ry++JVnscjVKPoj6xNmFeX8Rza9ztxhQKS1YlkX46XdhxVyFwSnWyfR2YK+SsFlzTNU74CHAr2FwpB+NkXeqgVZ1sC7Wzcuq4wBRGmGhJaVu+eRfi4MHbQYzWACctOhbRn9wsanoctCDtUhq005B+vLjY9I8Ov3+Dw4p5kRtzyyE4UgC6JtMpZ3tGZULsOL+r3p0zHvBugZoOw54TrkfByBYP+pr76y3w9gZcG9B6k6oXyrCnnovSpjRZQABONrh3Fk/Swh9Y2Ifn/Ahr7TKbJSvAEjZ3ZiByfur9lCSP1iFYA+IaRea8GXlTqRnW+tvRTsL/P3A/P8AodHHWWIe8YFl/8Wrk4vvd1AqTbgKNXG9Yhi3hXnCzqvzJgwIq/oTnUG1CzK+p9H18/D+xKjvhmriNFIzifOAjYDv+SEE9MiiX7L2wDTLWWqp4UtRus73wH9gGcwBu0bknOlAbPwdAUhPt7JgRjQHLHz+8v6ryprUP7tUD2pymIsjtFH5Dq4K/9QarkNhNNQjUOheLX7U9/fJwgsN0je6omh5LNF+5wxPuBQE/06b5pNAXYiRrIZQn6s3Pwq5/o0ItMTkPc7cm5IhvNO9tUU53BIgd9LSI6/5EIUgRXbSI1Z4wb02zBrDEOmTxp7gaRaQivs9XwNQKk3nA9TxqZJneOlZzx3uWpRyZel+Bwd5umfspcVKx5ev9aOf9M4oBe1LDz0TbqG2TWJvz84LeDsd+T8AVWpyY/uA4O4jHthcXJMxF96r0cIwuIVUSB36RyBiMArNEQI8xpgpnnw3C4K2nTQ8a41NynyY3Qh6G1nkgb7BjTQjf3Umn6tnnl/pNfvfn++sfTyX/+cm2KlLi+w524oxeiNlm5aFA3ixwBQYY2jNECOq9k10S+C4JAYOyBOOev4lujNbzPGKSVgV0fhl4QNMn0BDi420s+P13PWkvFN4JhaNx2ILXRjjj1GZlZSwyxFz/faEvVXu+aoun4X8SrfbfhM8Wvi24WUulUBXn1gBeWUl0M4mxR+QOJspSuuUvPVK2xBzLhHfqJ2whvIXSSVs3yClXCvVOUIyUbYtpydyA8MRuX2IiH510N3v0bkmBXW6E0U9umfvTBR/rK2uClQkr6T0L1UEnlDj/wWkc67blWhvY4lMQ/ql0NMk36RsBPv6lapvz1TC/cohr0KoezFNKheO0ps72FPCto6NXxJ16E+TNrYXldKLPUlMkpS8HSN8MCBSk8GxH7d+x97qPkti9YCO5enTVDM8OrGVoccnntE6DVQIV2qMRU75eR/82cKEeM1aPtfepvTeM4zPL94MvVvudD0/ZF0xDHJ2K2AMtMDhSP9cfpdaf20P1KZty/UqWpZZoJxTlTr64PrXRxvctMDckcsfo/ErEhpNBuLshVdXe5G46lGGfOPnmsO876XGK90or6oxXG42Tzf4Pt+wPDWZy1bSZhi7lmJrtML9JS+YkBXN/6MFjTb3guaY7EU/UPsm90hXruJ+twZB/KdmD1HuiePF7TBioHh35wN7qLmBNeDjmapkh3K4aeZmAzmTDZk3BneFDRGAEZOIrKidfQUp1/5wUZjhUUEqenOKwDb+w4SuAD2uh+ug+jeWubgPaFy7LRtfXWZfh9FE2sTOJYgo9p+W2f2McwvFg3aDosp28roBIGM5DAoRQoRNUkDNb/AvRPEj98RpwwIERo10FAbvgW5oQUGAWDAwcAYMABgIyTpTXlG2pRRWxXRjx8A3NSevJZ9cAACAOgAEQ2L2/Qt/esAFWRmhhhEN/XnJKCgyiFIJDNEk/VivZQ8SBydjZFfImdicUQ40CtwMzJ8rVxurLYJDeGBXNaZvdqeXtlSVrbmO5A56NXFvOXLbavm7tPWb+S3loDUpqnQBlj/5p6XrNBv8reemNkaxQjF6QpgeUNXM9+X1zaN+0zkbFsA606++7dHHAT+YtchWlGYGdXKWvxstLXbmyn1Jb8vZy8D9+75Ufx3n7vsOsSinm75jkW+Nlb/cjnrijQjk5kWqEw5rcuANgnm64N5YBFJ7+d7RXsipPsO/Tuzb3n297emnfSD7sgtR4DS5t/9cjnTxyMdfcPcrdtmCNuqDTVcr9W5uM3ba5PyuH7r/o9+Ga7zytMvUltkU/OjyXWqiRH0x32XeKlnX51e/vr5nj1emY59FCGZRwdW1Wsx6vdmaHrrxY6FvITjaL9e49y5jV12CwGHsABNHGGGSJBfvPvX+oY9Oa41fGk+loc0nwdte7wWAb48KlYNvAsbhwFTU0M3L3uBFCCxSD1g0337/D+5ztNaL0M0AkNxPPgx6iqzpgz64VAI5ZKXXZIFiMP4SCa7M1e7VnhmMy//6U+O8Vxq+NJ9aXPAVcsg3yEjTzLC6cmB/bRCaEkS+IFeBAlP+6b+ktYOVfLIJ95ildRWz/zJY/QArbAwgIGeI+09vhOJgdZ+jff+Z1l5ZO89rbTPpXzSW4SrwWWbXc1UoYY7YvnSBEADBAoBAahYFD/Q0M38iN/Xei2bRaB0pKZcvQ9S3m6AlSlhD1CUA4MilCChBb9KtDHLajKK01CtV+aJl1LniaqKiCcLkoAQIAAhgKkM+ah+8Wbct77iFlEaMRMYfru5IRU6GcsEwgEYMACh5xT0fdjz2+Xb50wUUVs1gx2+ibmpHQUz6QnCBCUAYcCpHTtX+F+r2Z9iS2R2jGTor5LOSUFRzI6agcDGAINI2T0/ib/yVyOEEMizx55QnUjCqelkD3mK9UaFrCBAar+MyqHmvrHb9zeTr35vF5EmW+y4+qGIM5Is+NZejUAFlbAwQYpg8y/FP9z18svxJGo54y0z7pxhLOlMPXTT4uGIexgByiSboQ41/Qe7HNbRDPP5DnXjTycI82N51vXAIawARZWSBlwDgm/q54VwyraWSWjv26k4VzpXDyzwDYwAxKWQCHrbIy7uncNIeKuopszUlXsxhHK09Wz4ikzBgIKE6CBR8IIcsifh6WgnkqTWPNE7pW9yHGaLOkingNmGxjBBGDgkTWY/CTSO1qfMPkUYTbJMLQbYTghLcYzHW0AAEwABgD5dlPZlJ/aoQozHyI2elqsff9zUgqqk55rIMqAARAAZFslcbszJ9DVWVukFk3TtmtbTknBgXRxg1CMMiABQdKp8MH76K5dUSI3Y7rAfZNyWgoJpy28HCiUAwME0pW7/up+9RWJ0oxJK/cLZ6TQ1ZJnjgACMICBQc5PYbj7LvY1M8KBW9smVd23NWdLYSoldx0KI6AAAhApPwixhntD3ZpdNO2eCng/BnCOFLZeSuItYAAg8AAjYWzYUH92Lh8TQ6KdIRJb78YMzpXWxRNsjwUUWCABQc49gV+zIuqrFw5E1+zJ2Hf9T3m6AlU0KfxAQGEAJADIuX/MuuN1dSvzJqkamxwA3/CnqZIa4gQDoIGBCVAoQM7V9iunRhprktDSiAv4RueEFFgZtQEgYEADDQzS7fzqfhdSV7Mzm0ytzmWB/+SUFFSFDwMUkEADDCxSrutbd5euEgJEaneaEPw7p6TgmlQjgAAHHCDAkPJ5kP6YPdqH8j1FbnkOFvwnp6WbOI8LMMBQDCAQSLiU73+db19xuyjtS2mD72nOSKHr0+JgA2tYAQ8gMs4Q3Jnfd1iOrnAT9QwDJYQbdDhb+hOHI8IMFsDDBDAkjDIvod3vHewLdZJmDqFuwo0rnCO9jdM/AYYVsIADiZwHWH7NCs45sbCTokwzBEQWXuGUFFQNZgsM7ABDOQDI+DGGVTNjqZZZRNfOrGP4Jqc8XYGrGnMZYMT/5h3+0vgPCABIt4vC3fO3v6vlqJ6TXE3M44bv7tN0SQFhLjggACDfBn7/9BJGIssk49ih7Ai0UE5Il4mPsHqI+NlNw0PJDWip3I6ewNvLSSkoDvAHBmCgUQgU8n7D7Mq+rrp5B0rzwh3iu5tTUnF9yEQMUAwjwABASucf2E9n6KsHkWcANEncmMBpKaQqIiVGwACAtG59alYUhgokSssgb+L7iDPS7jePrZFziej967O/q12lLN7+CIo8OVuK4wOSggYCKOBRgHwN+iVwhT3UlUTTqLCs+PblHGmuD+0KCBiUAQockj5eh9yIHai8FbvEkWiblN8W37ucK4WrxpELDhgAsf27/AJAyp937q/eINPVSHRNShSMb13K0xWk4mTDQFEEFHAoQL7PSq1SjdTWpFQzgi1z3aWpz11MgXHAZiCAogzFKEA+W67x5axAVRFajqga34ickAKrkF2DBQZYwAFAxj2RVuTOCijritjW8N/4Zs93kgVqXIAlyXY8dSHmOgOo67jBvXnmN4+Dp9NTm264/KfYc5DCx8kGEO9999EcPrue+qN1a9rczebN2JH1fh3rpo7CYR4EO59j4ouWN2DgfXvM9atO7So/0Yqr/b1WnxkdvxYTj+AQmjpDXSNRfvPvX9o60yaPWx1Pqi999QiWIT7BJp7VhUtTA8/QiaAUi+nR0wcXm/jvsmZXJ2mxDNEFNS2kVwJ2LBYSTViqH6sLmwO2Wcw8hsNo+gxDIXF+8+9fyn792KnZ6nhSfSn7vxG/mmWYz7CZZ33hVvQZu5ZODKV5fO6Di5foWwC9edHv+3LdSW6XNZfhhB+4J3CoU+Fxdm8BALaH/csKeOz8aWA1/wjj/j4dA/5S49bpdtLMMl74r7ViEodHpeK9j59+AxjACGAgkbJt85f7y/uVzBOGkggzi/NCIMAtnJAW66MYYAULgGAAIOLBpf6RhgbndahK7JkD7wE3mnBSCgpjRoAGHhggAEDGqPBk46fUFSux25hAA9/cnJKG4yQcFAIDDAAoQMIp+fv/4illHdVD5NajH8H3I6elkBCFCSjAgEIpAEi25P6kzh+5kzfbIkozMrjgW5QzUugdWWAAAAMMAChALjfeWb91QN1754TZRdQtBn2DbzzOltbE4XOAAQcA0ChAttnX/wH3pWVO0TQrixC+hzlHChtlIgKLMuBgAACSrk9eeR6KJdG2LysTvqs5VwoXY3YCDCyMYIj4PyPpCmP/gkCcFYUiujmA9Qo3LFCerkZVnzkLI4CBBx4wJF1ZfXP393uk+D5JNXdwjHEtnCTuAZWe4zxl2AAGOKwAQMKlirP1qEek23a0U5kBMNxwgwInpEofBw4L4AEGDhAknXE416G/k2R7E7HRyfHw3c9J6SlOsEc5oIABBihSmv5987mk0BeKSG3NOIjvdU5J1XHWQvCwgCGMAEC2sHBwv8Ta1Unk+YLcETeEcFpqiRNEAgUaEJgAgKSzDbfr9iXoyndRmp03Ez8EcEYaHefeBAgs0MABiJS3r7l3YQ2VkqhbnZIU/wdnS2Gq0JoCgg1MYAkQcsaGp/ChsuiyUP4imhmC+hU3anCOFLYyfSyWgAEAS+CQ8nlY+8GTyO2qimhnCY5d3CfnSuHq8vQChjHAsAEYObdf3lnf2Y3h3ksMiW4uYTXGDS+Up6t3xZmRsQEY21KzgAFEziMP3vq5z/VIe8Mk13wBIM21CJK4H1cqrg9CjREMgYcZMMi5qLPD+aYMlQ0pIswomN24MYYTUmYc9xs8DIAEDBAk/fjXmhb7urkREWcBTHTcuMBJKSqOqw4IMICAQgHSOf2Jz6d614pJVpuiy+O7l1NScE2EekCAoAwoAJDtsOFratnXztqL3Jwc/fiO5bQUEuT5Bw4gyoEHHFm3JvhXSPG4vnVkktPo7Af59ueM1NpnUAgGCExgBQAyev7g/Z6Z+753EVOibmlIiXyjc7bUJg5LERqWgAEIOFIGg8M7v1SPa/IvmtkBuSM3YnCOdDaO/hEacMCBQ0rPH+gvcxiKHkTbngAo+Z7lXClcAESllIfhvtHbmo9qWPRioynwjlOerioVh4Yp6ft/5oprvE9nNcfa7s3hNFMiwcU6T7qR2D9DgK74xi8D/vgJvMWckBrjUD7BAUEBMAAg62fJ1rC3Kw+TwmZFNMq3MCeloCAqUts/g6UEeKABRdLDyq0hpq+eKxGpjSGi8r3NKSk4DDPV9hkqZkAh5yT1Sa8/hQO8Topbg0gr3zB07nqPmhfwh7i+YeCzFjJV9wXuey55z5s9VXsM7gdc5HL6HEXf3+7k7xt+sArXyh+hlfr9Fgd4MF9T+IlOD4weby6ga4fQYuGJOKJP5PT1TZL8o3//RTtn6s5rW47nVr8sHnF3ioSIvBcpfBFb9GwuPJoZ2FQnEWW0pLwv6OWpu6o/nx/RgvuLBVduvgt0wWgZ4RvR5Bq6xinGMoYpDGACPPyVCXo5LP/ZDkh1kee2Ce5U5hxutq5Fn7wX2lU7cX63tqV+MYMhzABAuojz/vh7lS662ofo5hEyvLzIQnm6AtSugHphAUYhMChAxPj1D3lwkXvybRKq/cAEu27L1JcEVjnXAQkrRzlQAKAY9U24+2VivvXz/l2y9gCJ0FwcjPme44R06PM4BgUAGJQAgHyTwA39kz0r6KqIbYdgmW9GTkpFcRTMUrblR6jNOF3psSTFR1mgIXBKPFbocyiauQBd7Zuv6Z0K9VyzU51Uwy2tDEUAoxhrkXWl0829iruvbr6iNBxfa74POSOFjnC+BgAEGJgBgFwWPaT7x6EvSdRtinybb17Oltr46LkVoxg4GACOlC7esJ+Doa4G0TQujXC+mzlHKlufijhjGMEWZsAj57z5hvpYDrUYRDsjQTnnBinOleLF4aCDwxRmsAQYORdDvtrP4PKuE8ZV0c0xFNq5cYfydCWs+jTcWQANaxgAhpTx5l/y/hrXkdLzPpNYcwpueV6cOU2W9BHHPs8McGABBxopo8tT9GdlLh+csFBEmD9o4nNjCiekxfpU8xnCBBZIunF+RXMkTp1EtiHOfr41OSkNxbH6y7rJfl0Jx9WkdeSPs0BD4JQUXJ+HQFvgYQwTAJFzd+8N/Ht3f3CYMSco8myD36AbgjgtjcQxILQEHEBAAUC6SfGd81PDUFARpe3JMfSDAWek0GGCDZEoBA7lACDlMuNt07WrkqgbE2JE362cLY2JwZSIAQBIFKMAydy5ZrFDnSWaxuNn0Xcj50hja3K8iAMcMGCBQkozb+DnaihJom178hv9WMC5UrgwgY5lKEYxygFASiOvwpwVClV0DUccpG9DxhOcqhr5kGWAAgQQAEhmz0P4W1NHYmuSqj0RmPR9e5oqKSCE4mQ5YAABBwASPt5Zq5ShJInQnEBW+g9OSIFVwbDEAQk0TIBDSqtvyq/boTAScT7ACtMNEZyUluJ4Yx7RYXS6Qn2lUs2xFmgOnJKyw2RqwmEEGBAwQs4Fuh0OBXJWrLmJPDvgzekGDE5LIfUx67QFEmgggMAxHU+zr1uKFGVOoPTTjRKckVbHaQHFoRTlQACAhD+fworGUNEg6sYERtR3K2dLc+LgioKBhwEAACCfrR9h+754VoKfoml1zEn9CMA50tk4bqUIwAADBDjktPrvwP/uW+V4IZmaF8JT39KcK4WrBwOqBZCAwxIFSLkW733zt56V1hLdbICSqhshKE9X5IojrWoGLOxgARyyHgd0zU7OCWGd5Jo1IGn1IslpuqSC+rC2msAIJoACgJS3O/LJYaipQYQ5g/1X98YJabE+g7BGwAMMC6CQMphs4qeuq5GIMwjZsm5M4aTUVJ+wWTjM8RkUgEAi5+trqlZkzgrNKtI8Am+t++KUFFwTIlsQAMDhVQODpHsvrQFxToDrJLtNecL1zctpKSTINS4UxXi1AACAfC59B60531lxW6I0Hsy6vh85I4WuDdUuHEBYAYI1SPt1vyvUI02GSe7GBq/XtztnS2FiAPgCAYYBwAAg6QbENQaH2hpE0+CgAPu25xwpbABYYBxQKEDCD9+suBupT5O8/1mREvbbOudK5Xy0hVM2tU3+m+kKWtL54yjwTlOeriLlM0ic9fPwznBUwytNRceP/yafZkr6iINiDAcSAORqjT5JLv6FMyXuBilCkxB/7DuHE1JgFfKQs35H8bo+H1XAXAJrjbRAY+CkFBRiRhkIDAB49QAg3XLEJwIPAzcpaj1SmH1HckoKrkUsMwwlgKAQMCRd/lpT5ljA3LnIzcmts29ZTkshQX6eC4EFGqUAIOFr0/6DhyIkSouCFO2/OCOFjgAdnTJ+nr2xvnqOarWEjtkqkPN0HUu8WhbIu9DqjH1koVANb9/Km7VGnNgX0w9f2rvvN8MgyS3ffIGw4UNxQpLOZv//VfeY6fX+xzW/Q9wh/dswm7CZ485Rz6zZHcefTR32eKg5Tzxkcx0/nu6HJKN9TeckMWPHfae2cTM70E90e01AtR32arHyFI6i2S6DpPnNv39pd8jo6Cp/qq/Fu0gGJFlG+QpbebYXXs0O3EMnhbI8xorn+uIBgO+9FVuUq2WUb/V01SdOwLYdTFAILIDwV+SpddP+rmX2dVzwWtNOZTbAp/taVHibxc+c8UFhwxh3IwFAOQAAYO8Gj/PX8ovZU4hHom1FiL99h3Ku1M6HCRyDcmBQiLVI6cInm/XdfTV5KNG1FC7ivtMoT1eGilMrXgAkYIABgP168gL821f/ZrNP2QHmeieh2hRhct++p4mqCgiiVG6AQhTBABZIOZV9GboJ9XKatzUJaGnYzn2nc0IKDEJ/XgQoCgEAFind/EDi5/XltcSQiK2JfrrvWE5KQftCUN0AeBjCBBZIGRn+b2d+hK8ieCiRZhvg2d0IxCmpOg5euwngsAUYJki56nxNHYeKAo7I8wnV726E4bR0E6cLHg4jWAAODJKuotiQX76+erFGlNkCVXk3gHBGel0fmXljfMYGaKBhg5ybGp/Khb738VKT0HMPpvVuOOJs6U59XOwtYAVrfMEKAGR8PRwjlyudrua+W5mBMMV3oxLnSHl9XPItAIAlLGGClLt0vKRZcX1/VYhLop0v6Nt3YwjnSunqU8BvAjisYAAwUs7BvGaN1PcneMK5Irp5BTR/N9ZQnq6SFQfeHw48oAADgHzRY9XNCogXwyRW2ysiSYBfDk6ThQIqyRoARTkAgKAAKU81XaOZ+xPFa2RsSl8H/KxyAgXGvCEoRBkwsAAKKSP7RPOnfAeqh1cRW9QfAz+3nERB1Tw2wACJYqAAQLr0bsCfSl9CpHa1GsHPMKdQcB27EgAoAwzFACBZWg/wQ9MvvyYmIregVgt+MDmNUny9FyAAAAEMCpAzjGsSjgVsOUVpNZkb/ARyBoWuJJUDAmAYAQcUks4e94035+vhVdTtbiCEXwI4G4WpZkIEEnhYwAIQpK8OK4KzQtBFM08oNeFWDs5BbeNqTxgABwNAYIaUg4FN+UcPZSDaWUEOC7dScC66F5fUAgUcrIAHAikrxCPMs84PVf0V3SwgN4ZbFxgPOFVUsgwzWAEDKADIdpjtlpo2kskkVYvLuOEH/zRVqCEuBQcaIAABBggp14dAt/GWs4K3i9DoAnn4KydQYFhkDyzQAAMPKHLWgrXzOdQCEWcBA0LcwsBJFBQ2MQQAIEBAA4ushxtv8faRrpgkNbSoI37KOYWK48KQ2MASJjAAEDknBj6Af71mP13dT+TZQ0MTt6JwGuXEdTgxhQmQsAQaOQvMXfVHbagSoswtyqW45YYzKHR99VPggMMIVkAhZYXZcH95Q3WaqGcQoVjcmsLZaI4vNgsUCGAAAgD5pjTP//fcbXGSpjHldvHjyjkobFXJXiwABQ5IFCBhpjfpszMUiWhb3MYYP/ici8JVtEIGgWJgUIACpDzbcEXNSI0mU/OZQOMHkvK4ElfcSBoDQGEIG2CRdff73F0cfE9yzRmC23hV5DRdKCEu2g0YBgCjAAXIeQxxXeKuiklG+wqY46eaEygwLoIOFGBAgQQSScfoTzp+Ye+VOMlseHF4/DLASfQUF5gHinJAgQIGOWP/su+CHspEpIYW3MePOadQsi/aTyGMYAIcIEj6UFA//uYvVjjVvk9gaWIHg/x0cxqdxF0QQgACGDAoQLarXn+V/t6xMMNvUZrRBCI/opxBoSsZSQQEBiiAUICU8+Zr6nz5mDiIulHlNPLTy9koTC1JjgAAAYliFCDndTP891+mp10meRrTkyQ/rZzDcjfoaxIKCGBRAgCSblpv1I7wUOAxEG0zzq1LvjgXhasz1zAVIOPPv9/qemG2q0F0mWfDJt+R6C5wc7Uu0A8+mALIyFS1UKmWyP+bvxlBNEvD+47c5jHE+X1X/faaWKpp+IoBf9efxe9IO9dOAeftz6tiwezld6BHydjlZFacgzHz1vOd2oEBZpwQLa7Huc5ZObHEJ9YD5/5Q+RvfwCkW26v2RLMsdZ/Im7qjFxvP4BiaGzGFZPnNv3+pb0AIwbI39fXYN3zqR8SxjPENtvHsLnyaGzhDJ4NyPM5NR9xfdf7dGmxOMssyRneobbHJ+4yPYaGxHApXv0p11eJcKat8mQPLrtWxfNDKDokUBhf047lJikw14RIlXqdH5pOh1pEB7fe8t3GobeP5oQjm60+ugpuvSpVe1zywr0O750Z7ceNS00eqP8MTzN905GoWXIwYCIOHEFrD0hFwo8hs8A8ei1WVSYtH/EPjkQCmRwFsPM7zeU04DbADFzaBh990vajrtgoC/Nz1ihxH5lusuiPwDBPGBAffMMivX2+gcxhCg57Rd68gPCDKBS0ZASMcdYg5AONw6D6kLti+rVOLgj5B8M5lSiCN+LGbgueFe0WwL4nLZae0nDYk0Xhe83lCJuaJ8Ax1yor0a4vpJdQyiBz/IlGdDo88Qq3ZZNLrSqqf1EgzY8DcYusxVYTS0qJIbICROpLJD/f3gM+QogfDO/zoIzNGLLXGldWc+U0iRoHor3agFsi4kK3dRRCeKn/oj5C94VfAgO8WsqCeQQvH9GBadR4nkQ0hraVTR/YebAMYHqSsQz9mnymgStJXxDAnV/JyNxQgHIdmQaqtIx0Xtp8nIXOrEw+aWDiZXQXMm+iedFnUl4AvEH3mypWb/DQW1ObNt+Y3o1psuTO3MjGzJaaTiVQkDql2Cc2X2qEWjBglw9U1fV13aQuQsDS7NXgMI2ttQDiuDZZOamtZB0NHEZbbIo/r1zxFwdsYMCLfMUru3EdThx79BvNGADCRxwTlUZ91pEKWW+oegnB/hufUEK/hs5IveIDYZyZccyvQQlkycRJ/cypSoIMypoZXkCrKUJe40lmCaiiZ/LxpUJn4Pc/ev8Hw9d0YGgcFeIxABhpBejcZc48BMXfr88fBTR9cr6PDlBehOVDtX11gscIPd99/sTuCqBrITyZrvRnu4BSaDf7gATgL1cKEIQ2eBxO8PYHwZnQE9ZyBINViOYDuZKhFTwJSnii4uCdTVQeWICkaVm71MF/6/zlBATnMA92fF1FJ1/hNZhJtwDhB1LgliXAP+Lfgqfqi7QBub+0z7Ts4+P8+JJHbg/NGEC2NEboMoMDkZ9OAv+MNRry3dAOAPTPBbC/vZdkQZhdFKSSOCulQJivBwgEizIEgdvVxi8UayCzraJOorAOZbdbfZpHxQdx2iDf5mLyRJETBHW5swjSE3sEInKiY5gTF8ulUHdMRv3djB6Czwmvc1JIw54v1x4hyvAQRWAdGnCX0UKpe868DEJ8zchxhx/+Rxsv+QSsPnIvARG//GEoV0i4Er5AS+M8ergFD/3w8cRRDyEQ9/y7u7TXAczTtJkZEtODIb4jYgqCoyetzQ9hNr++5vSBjiqCnfkr+aQnyZMTId/exrOngLDKHzWMhchYrqTnb/YZUdDlQs12lu8IQW63/QBYLWgLnP5BOGajxvUo7AKGFYdLZSR5pW2lVsdAao3ApLOyYIsy7oQQ5wSooY5G1VkTAurIlpmA7rnbuRvMt2/jTH4AhnOvfWbxs7vaA5HMGzC3Iq3erJQKaqBp25vH28bwGhhjDR41hRPigfYJFAwwpV4g4A42vfWfVTlwSVvDZli/SFSgOwx5vcqyEiuUyeOwB4vskbylEXts3Qs2bOVpZW0kM4tvlOcLzGAmUIRmoY4gNIobAyBNhXYhCEI/h/ptxFlnvK98I9sQvhoEfiaLhz1CSmAUkkqZGiO1WNGI0MVzpCwJbUZTcDArRh/ZNZac1qhODpCE3dq5BSZ2SUpC9dVDSpSP5xyFx80GsR/GRTwwO+7c3uwwzFAUpx/EAWdbGYrOcNI4ho7Wgqyq0hLEYFgSaOvfZ/eVVi+cCCCGqLnOeOdosMT6EXGx5vtmOEiiIwvAMOnPhOT+DF0qKEJiQwd8TLF6ZlNzFjc3LCBwePGNDiNndOG7eXHthso9KVYdmk/nMBUyO8gO7bUdFtTjbjzgsCAHgxTXUanf4DR9VFECUzx4M+2XdYdGlLOAKFUEVxiyjKOiKrvEP6INyqKZz8kG9ZXHQjMRMYj0ghNsok7CsC0LMZYw/4aSEYYewTI6z9o3AsJyot+v/ox4=

Raw logs and JSON are retained outside removed scratch worktrees at C:\ocx-vwin-r2-20261025-cfc56eaf\logs-7627.

Ledger codec: Brotli/base64 UTF-8 JSON; Node decoder: zlib.brotliDecompressSync(Buffer.from(encoded, "base64")). The SHA-256 above is for the decompressed JSON.

@lidge-jun

Copy link
Copy Markdown
Owner

Addendum: macOS test-only follow-up at ba67ddb

PASS for the requested scope. Full CI on this new head was NOT RUN.
Host juniui-Macmini.local, macOS27.0/arm64; test-runner/runtime Bun1.4.4 (1.4.4+38afee6c8), exactly this head’s pins. Fresh detached scratch checkout; pull head re-fetched before posting: ba67ddb501cc9ee2871025d8a6b812074afbdd08 (unchanged).
Commits 967a8851ff2841686c7716e458c793a23b6cdaf5 and ba67ddb501cc9ee2871025d8a6b812074afbdd08 both touch only tests/claude-integration/claude-picker-upload.test.ts. Thus one distinct file was run five times. Its authoritative shard is 3/3, batch 012, derived again using this head’s literal batch-selection algorithm. Workflow is byte-identical to the earlier 8b4c34c7e6 head.

Focused run Exit Pass Fail Skip
1 0 23 0 0
2 0 23 0 0
3 0 23 0 0
4 0 23 0 0
5 0 23 0 0

Each focused run:

timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 tests/claude-integration/claude-picker-upload.test.ts
Full macOS shard Batches executed/planned Files entered/selected Raw exit Pass/Fail/Skip
3/3 81/81 869/869 0 17729/0/40

Same CI command form for every full-shard batch, with its ordered FILES from the head’s script:

timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 "${FILES[@]}"
TEST_SHARD=3/3 BUN_TEST_FILE_SCOPE=all BUN_TEST_BATCH_SIZE=12 BUN_TEST_PARALLEL=1
BUN_TEST_BATCH_TIMEOUT_SECONDS=300 OCX_TEST_NO_QUEUE=1 OCX_TEST_FULL_SUITE=1

OPENCODEX_TEST_TRUSTED_FIXTURE_DIR=/var/folders/2q/sdhzjp713hs8rb0b1gmjs44r0000gn/T/goat-threads-9Fo5iz/32833e82343f3c3e/ocx-round2-trusted-kipu2m_9 (private, mode 0700); GIT_DIR/GIT_INDEX_FILE/GIT_WORK_TREE explicitly excluded. Fresh scope transpiler cache; one heavy suite at a time. Original 20-minute shard deadline retained, with all planned batches executed. The five authorized focused repetitions are separate from that CI job deadline.

Setup and smoke exits (no Bun test count unless shown):

Command/step Exit
git rev-parse HEAD; git merge-base HEAD 26598df2c4; bun --version; bun --revision; sw_vers; hostname; uname -m 0
setup-project-bun role=test-runner resolver + installed-version assertion 0
bun install --frozen-lockfile 0
cd gui && bun install --frozen-lockfile 0
cd gui && bun run build 0
`brew list coreutils > /dev/null 2>&1
literal run-bun-test-batches.sh selection prefix for3/3 0
bun run src/cli/index.ts help 0
git rev-parse HEAD; git status --porcelain 0

Failures:

  • None observed in the requested new-head scope.
All full-shard batches: exit and pass/fail/skip
Batch Files Exit Pass Fail Skip
1 12 0 271 0 0
2 12 0 353 0 0
3 12 0 214 0 0
4 12 0 333 0 0
5 12 0 343 0 0
6 12 0 367 0 0
7 12 0 309 0 0
8 12 0 286 0 0
9 12 0 216 0 10
10 12 0 197 0 0
11 12 0 333 0 0
12 12 0 283 0 0
13 12 0 165 0 0
14 12 0 288 0 2
15 12 0 381 0 1
16 12 0 426 0 0
17 12 0 363 0 0
18 12 0 246 0 1
19 12 0 234 0 2
20 12 0 221 0 0
21 12 0 225 0 0
22 12 0 205 0 1
23 12 0 321 0 0
24 12 0 191 0 1
25 12 0 250 0 11
26 12 0 235 0 0
27 12 0 293 0 0
28 12 0 280 0 0
29 12 0 238 0 1
30 5 0 80 0 0
31 1 0 17 0 0
32 12 0 159 0 1
33 1 0 8 0 0
34 1 0 24 0 0
35 12 0 196 0 0
36 12 0 170 0 0
37 12 0 71 0 0
38 12 0 139 0 0
39 12 0 103 0 0
40 12 0 121 0 0
41 12 0 223 0 0
42 12 0 227 0 0
43 12 0 211 0 0
44 12 0 170 0 0
45 12 0 283 0 0
46 12 0 319 0 0
47 12 0 230 0 0
48 12 0 292 0 0
49 12 0 207 0 0
50 12 0 223 0 0
51 12 0 268 0 0
52 12 0 175 0 0
53 12 0 232 0 0
54 12 0 183 0 0
55 12 0 270 0 0
56 12 0 221 0 0
57 12 0 189 0 0
58 12 0 277 0 0
59 12 0 235 0 0
60 12 0 343 0 0
61 12 0 259 0 0
62 12 0 568 0 0
63 12 0 169 0 0
64 12 0 199 0 0
65 12 0 212 0 0
66 12 0 203 0 0
67 12 0 192 0 1
68 12 0 268 0 0
69 12 0 180 0 0
70 11 0 205 0 0
71 1 0 61 0 0
72 9 0 86 0 0
73 1 0 4 0 0
74 1 0 212 0 0
75 3 0 100 0 0
76 1 0 1 0 0
77 12 0 186 0 0
78 12 0 186 0 2
79 12 0 138 0 0
80 12 0 231 0 0
81 6 0 136 0 6

NOT RUN at this new SHA: macOS 1/3, 2/3, 1/1 control, macOS native/app jobs, Ubuntu/Windows and other full-CI gates; they were outside this explicitly requested follow-up. The earlier 8b4c34c7e6 full-run FAIL and its 9/9-clean diagnostic remain historical records and are not replaced by this limited new-head result.
Commands, ordered files/env, exact exits/counts and full logs: /Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/evidence-7627-ba67ddb501-focused. The verifier made no code edits, push, approval or merge.

@lidge-jun

Copy link
Copy Markdown
Owner

Windows addendum at ba67ddb

PASS for the manager-requested additional scope. Historical full-run result: FAIL (record); its shard-7 cutoff remains unverified. This addendum covers the changed file 5x and its owning Windows shard once. It does not attest all nine legs at the new head.

Host MINI; Windows_NT 10.0.26200 x64; runner/runtime Bun 1.4.4/1.4.4. Re-fetched PR head: ba67ddb501cc9ee2871025d8a6b812074afbdd08. The two commits 967a8851ff2841686c7716e458c793a23b6cdaf5 and ba67ddb501cc9ee2871025d8a6b812074afbdd08 touch one unique file: tests/claude-integration/claude-picker-upload.test.ts. CI configuration, ordered shard file lists and the batch-script SHA-256 match the prior run; the new-head manifest confirms 3/9, batch 8.

Both fresh detached worktrees ran bun --version, root and GUI bun install --frozen-lockfile, and GUI bun run build; every setup command exited 0. Before each requested observation and the shard, pressure was normal and other suites were zero. The private owner-only fixture directory and explicit unsetting of GIT_DIR/GIT_INDEX_FILE/GIT_WORK_TREE are unchanged.

Requested file command: bun test --isolate --timeout 60000 './tests/claude-integration/claude-picker-upload.test.ts', same Windows shard environment (all/6/480s, OCX_TEST_NO_QUEUE=1), Bun 1.4.4. Counts below are pass/fail/skip; five separate requested observations, preserving every result.

Observation Exit Counts Seconds
1 0 23/0/0 1.228
2 0 23/0/0 1.102
3 0 23/0/0 1.007
4 0 23/0/0 1.052
5 0 23/0/0 1.133

Shard command: bash scripts/ci/run-bun-test-batches.sh "$TEST_SHARD", TEST_SHARD=3/9, scope=all, batch=6, process deadline=480s and test deadline=60000ms. Remaining batches used the same ordered file arguments and bun test --isolate --timeout 60000; no original failure was retried into a pass. CLI help bun run src/cli/index.ts help exited 0.

Shard Original exit Original counts Remaining batches/counts Batches attempted
3/9 1 738/2/124 48: 5210/0/11 54/54
  • BASE-IDENTICAL: tests/claude-integration/claude-desktop-remote-hub.test.ts:99, connected Desktop uses hub IDs across a cold restart (stored profile=true); new Promise<never>((_, reject) => { timer = setTimeout(() => reject(new Error(label)), ms); }),.
  • BASE-IDENTICAL: tests/claude-integration/claude-desktop-remote-hub.test.ts:99, connected Desktop uses hub IDs across a cold restart (stored profile=false); new Promise<never>((_, reject) => { timer = setTimeout(() => reject(new Error(label)), ms); }),.

The two remote-hub cases both hit Remote Desktop apply deadline: a 45,000ms wait for the real CLI apply at test line 245, reported from helper 99. The one baseline file run reproduced the same test names, wait and exact error label for both true/false profiles.

Base 26598df2c4c07d781e344ac6119953fed77ecb27, same Bun/environment, one file invocation: bun test --isolate --timeout 60000 './tests/claude-integration/claude-desktop-remote-hub.test.ts', exit 1, 0/2/0.

NOT RUN: No batch in the requested shard or requested observation remains unexecuted. New-head Windows shards 1/2/4/5/6/7/8/9 and other jobs were not repeated under this bounded manager request.

Every remaining batch: batch, exit, pass/fail/skip
7 0 65/0/0
8 0 205/0/0
9 0 139/0/1
10 0 163/0/0
11 0 73/0/0
12 0 62/0/0
13 0 114/0/0
14 0 81/0/0
15 0 389/0/0
16 0 126/0/0
17 0 20/0/0
18 0 17/0/0
19 0 104/0/2
20 0 317/0/0
21 0 85/0/0
22 0 14/0/0
23 0 82/0/0
24 0 63/0/0
25 0 56/0/1
26 0 116/0/0
27 0 46/0/0
28 0 135/0/0
29 0 60/0/0
30 0 170/0/0
31 0 56/0/0
32 0 102/0/0
33 0 117/0/0
34 0 80/0/0
35 0 145/0/0
36 0 84/0/0
37 0 39/0/0
38 0 219/0/0
39 0 247/0/1
40 0 89/0/0
41 0 175/0/0
42 0 78/0/0
43 0 105/0/3
44 0 134/0/0
45 0 157/0/0
46 0 120/0/0
47 0 4/0/0
48 0 209/0/3
49 0 1/0/0
50 0 1/0/0
51 0 66/0/0
52 0 176/0/0
53 0 61/0/0
54 0 43/0/0

Raw logs and exact command JSON: C:\ocx-vwin-r2-20261025-cfc56eaf/logs-7627-ba67ddb501. No PR branch/source, push, approval or merge was changed.

@lidge-jun

Copy link
Copy Markdown
Owner

Integration evidence (owner decision decision:e6895606, approved, including the explicit workflow/dependency security review): independent gpt-6.1-sol review at 8b4c34c found no source defect (action SHAs, permissions, frozen installs, Docker digest and trustedDependencies unchanged; #7642/#7644/#7647 pins preserved), and a delta review of 8b4c34c..ba67ddb (two test-only commits in tests/claude-integration/claude-picker-upload.test.ts) passed. Exact-head PR CI run 40140422865 and exact-head ci.yml lane=all run 40140464158 both succeeded. A real-machine macOS run at 8b4c34c recorded one codex-journal.test.ts:515 failure that did not reproduce in nine targeted reruns (batch x3 at head, x3 on dev, file alone x3).

Static merge simulation on current dev 5ab431b (this Mac): dev=5ab431bec0f438c397cd5c424adbdcd38f2f07cf base=0aeaf0cb6b0a7c2f117d8c75f8fa396cf2ea6e39 pr_files= 11 overlap=[]; merge clean; install exit=0; gui install exit=0; tsc exit=0; tsc doctor exit=0; structure:check exit=0; privacy:scan exit=0; layout+ratchet guards exit=0 54 pass 0 fail ;

Merged by the triage manager as maintainer integration (MAINTAINERS.md, dev only) with green exact-head PR CI, an independent review PASS, and the owner's approval of this bundle.

@lidge-jun
lidge-jun merged commit 0929e6e into dev Oct 25, 2026
69 of 75 checks passed
@lidge-jun
lidge-jun deleted the codex/test-runner-role-verification-20261023 branch October 25, 2026 01:16
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…native-audit-utf8

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…t-rejection-lifetime

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…ream-fragmented-buffer

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…-signature-persist-batches

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…owner-resource-lifetime

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…e-aggregation-bounds

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
@luvs01
luvs01 restored the codex/test-runner-role-verification-20261023 branch October 25, 2026 01:38
@luvs01
luvs01 deleted the codex/test-runner-role-verification-20261023 branch October 25, 2026 01:41
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…upload-waiter-lifetime

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…ncremental-response-lifecycle

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…-connect-header-buffer

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…rsist-starvation

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…-unchanged-partial-tail

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…tation-rewrite-for-third-party-gateways

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…k-preflight-no-selection

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
…ws-close-grace

# Conflicts:
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
# Conflicts:
#	scripts/test-layout/layout-adapters.json
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 25, 2026
# Conflicts:
#	structure/transports/byte-accounting.md
#	tests/claude-integration/claude-picker-upload.test.ts
lidge-jun added a commit to luvs01/opencodex that referenced this pull request Oct 26, 2026
Resolve tests/claude-integration/claude-picker-upload.test.ts to dev: the conflicting side came from pre-squash lidge-jun#7627 commits that dev already carries as 0929e6e.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Maintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants