From 240a16aeecb37736affe5cc76f803bf704352c83 Mon Sep 17 00:00:00 2001 From: Ankit Ranjan Date: Tue, 18 Aug 2026 16:35:56 +0530 Subject: [PATCH 1/3] fix(browser): add btoa/atob/TextEncoder/TextDecoder to the run sandbox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The QuickJS sandbox for `browser run` exposed working base64 and UTF-8 codecs only under private-looking `__webcmd*` names, so programs reaching for the standard globals hit `'TextEncoder' is not defined`. Alias them to the platform names in the existing platform shim. btoa/atob are implemented as latin1 binary-string codecs rather than composed with the UTF-8 helpers, which would corrupt binary input. Buffer stays absent โ€” it is Node-only. Co-Authored-By: Claude Opus 5 --- src/browser/run/runner.test.ts | 81 ++++++++++++++++++++++++++++++++++ src/browser/run/runner.ts | 41 +++++++++++++++++ 2 files changed, 122 insertions(+) diff --git a/src/browser/run/runner.test.ts b/src/browser/run/runner.test.ts index 9a93928b..7f6653eb 100644 --- a/src/browser/run/runner.test.ts +++ b/src/browser/run/runner.test.ts @@ -562,6 +562,87 @@ afterAll(async () => { await expect(run('return fs.readFileSync("/etc/passwd");')).rejects.toBeTruthy(); }); + it('exposes btoa/atob/TextEncoder/TextDecoder but not Buffer', async () => { + const output = await run(` + return { + btoa: typeof btoa, + atob: typeof atob, + TextEncoder: typeof TextEncoder, + TextDecoder: typeof TextDecoder, + Buffer: typeof Buffer, + }; + `); + + expect(output.result).toEqual({ + btoa: 'function', + atob: 'function', + TextEncoder: 'function', + TextDecoder: 'function', + Buffer: 'undefined', + }); + }); + + it('encodes btoa/atob as latin1 binary strings, not UTF-8', async () => { + const output = await run(` + const binary = String.fromCharCode(0, 128, 255); + return { + vector: btoa('hello'), + roundTrip: atob(btoa('webcmd')), + binaryRoundTrip: Array.from(atob(btoa(binary))).map(c => c.charCodeAt(0)), + binaryVector: btoa(binary), + }; + `); + + expect(output.result).toEqual({ + vector: 'aGVsbG8=', + roundTrip: 'webcmd', + binaryRoundTrip: [0, 128, 255], + binaryVector: Buffer.from([0, 128, 255]).toString('base64'), + }); + }); + + it('rejects btoa input above the latin1 range', async () => { + const output = await run(` + try { + btoa('caf\\u00e9\\u20ac'); + return 'no-throw'; + } catch (error) { + return error.name; + } + `); + + expect(output.result).toBe('InvalidCharacterError'); + }); + + it('round-trips multi-byte UTF-8 through TextEncoder/TextDecoder', async () => { + const output = await run(` + const bytes = new TextEncoder().encode('cafรฉ โ‚ฌ ๐ŸŽ‰'); + return { + bytes: Array.from(bytes), + decoded: new TextDecoder().decode(bytes), + fromBuffer: new TextDecoder().decode(bytes.buffer), + encoding: new TextEncoder().encoding, + }; + `); + + expect(output.result).toEqual({ + bytes: Array.from(Buffer.from('cafรฉ โ‚ฌ ๐ŸŽ‰', 'utf8')), + decoded: 'cafรฉ โ‚ฌ ๐ŸŽ‰', + fromBuffer: 'cafรฉ โ‚ฌ ๐ŸŽ‰', + encoding: 'utf-8', + }); + }); + + it('round-trips typed arrays through the Playwright serializers', async () => { + const output = await run(` + const length = await page.evaluate(bytes => bytes.length, new Uint8Array([1, 2, 3])); + const returned = await page.evaluate(() => new Uint8Array([255, 0, 128])); + return { length, returned: Array.from(returned) }; + `); + + expect(output.result).toEqual({ length: 3, returned: [255, 0, 128] }); + }); + it('rejects absolute artifact paths instead of touching host paths', async () => { const target = '/tmp/webcmd-browser-run-owned.txt'; fs.rmSync(target, { force: true }); diff --git a/src/browser/run/runner.ts b/src/browser/run/runner.ts index 6dcf9b4d..ba4395b9 100644 --- a/src/browser/run/runner.ts +++ b/src/browser/run/runner.ts @@ -381,6 +381,47 @@ export async function runBrowserProgram( for (const byte of bytes) encoded += '%' + byte.toString(16).padStart(2, '0'); return decodeURIComponent(encoded); }; + // btoa/atob are latin1 binary-string codecs, not UTF-8. Composing them + // with __webcmdEncodeText/__webcmdDecodeText would corrupt binary input. + globalThis.btoa = value => { + const binary = String(value); + const bytes = new Uint8Array(binary.length); + for (let index = 0; index < binary.length; index += 1) { + const code = binary.charCodeAt(index); + if (code > 255) { + const error = new Error( + "Failed to execute 'btoa': The string to be encoded contains " + + 'characters outside of the Latin1 range.' + ); + error.name = 'InvalidCharacterError'; + throw error; + } + bytes[index] = code; + } + return __webcmdEncodeBase64(bytes); + }; + globalThis.atob = value => { + let binary = ''; + for (const byte of __webcmdDecodeBase64(String(value))) { + binary += String.fromCharCode(byte); + } + return binary; + }; + globalThis.TextEncoder = class TextEncoder { + get encoding() { return 'utf-8'; } + encode(value = '') { return __webcmdEncodeText(value); } + }; + globalThis.TextDecoder = class TextDecoder { + get encoding() { return 'utf-8'; } + decode(input) { + if (input === undefined) return ''; + if (input instanceof Uint8Array) return __webcmdDecodeText(input); + if (input instanceof ArrayBuffer) return __webcmdDecodeText(new Uint8Array(input)); + return __webcmdDecodeText( + new Uint8Array(input.buffer, input.byteOffset, input.byteLength) + ); + } + }; })() `, { filename: 'browser-run-platform.js' }); await host.executeScript(PLAYWRIGHT_CLIENT_SOURCE, { From 3ea0fe508a29cccbd6ee9dce32fd6f644b526f53 Mon Sep 17 00:00:00 2001 From: Ankit Ranjan Date: Tue, 18 Aug 2026 23:01:53 +0530 Subject: [PATCH 2/3] feat(browser): expose writeArtifact under a public name and document it (#345) __webcmdWriteArtifact was the only write path out of the QuickJS sandbox and its dunder prefix reads as private, so programs would not call it. Expose the same function as globalThis.writeArtifact, keep the dunder as an alias, and return the receipt instead of swallowing it. Also accept a null contentType, which is what JSON.stringify produces for the two-argument call, and document artifacts in the browser-run reference including the download path and how a receipt is redeemed. Co-authored-by: Claude Opus 5 --- .../references/browser-run-playwright.md | 58 ++++++++++++++++++- src/browser/run/runner.test.ts | 36 +++++++++++- src/browser/run/runner.ts | 18 ++++-- src/skills.test.ts | 3 +- 4 files changed, 105 insertions(+), 10 deletions(-) diff --git a/skills/webcmd-browser/references/browser-run-playwright.md b/skills/webcmd-browser/references/browser-run-playwright.md index fdb2ac31..ec6a5b5b 100644 --- a/skills/webcmd-browser/references/browser-run-playwright.md +++ b/skills/webcmd-browser/references/browser-run-playwright.md @@ -6,9 +6,63 @@ `context.newPage()` is not available inside `run`; create or bind Session tabs through Webcmd commands so page ownership stays deterministic. -## Artifact paths +## Artifacts: getting bytes out of the sandbox -Artifacts written by Playwright must use a relative logical filename. Webcmd returns an artifact receipt with its locator; it does not grant host-path write access. +There is no host filesystem. The only way to get a file out of a run is to write it as an +artifact, using a **relative logical filename** โ€” absolute paths and `..` are rejected with +`BROWSER_RUN_INVALID_INPUT`. + +### Writing one + +```js +const receipt = await writeArtifact('report.csv', new TextEncoder().encode(csv), 'text/csv'); +return receipt; +``` + +`writeArtifact(filename, bytes, contentType?)` takes a `Uint8Array` and resolves to the +receipt. `contentType` is optional and defaults to `application/octet-stream` for anything +that is not `.png`/`.jpg` โ€” pass it explicitly when it matters. `__webcmdWriteArtifact` is a +legacy alias for the same function. + +Two other calls write artifacts for you: `page.screenshot({ path: 'shot.png' })` and +`download.saveAs('out.csv')`. Both take the same relative logical filename. + +### Capturing a download + +`download.createReadStream()` throws โ€” Readable streams do not exist in the sandbox. Use +`saveAs` with a relative name instead; it routes through the artifact sink: + +```js +const [download] = await Promise.all([ + page.waitForEvent('download'), + page.getByRole('button', { name: 'Convert' }).click(), +]); +await download.saveAs(download.suggestedFilename()); +return { saved: download.suggestedFilename() }; +``` + +Do not scrape an on-page preview as a substitute for the downloaded bytes โ€” it will not match. + +### Redeeming a receipt + +Every artifact written during a run appears in the run result's `artifacts` array, whether it +came from `writeArtifact`, `saveAs`, or `screenshot`: + +```json +{ + "artifactId": "artifact_9d1f6368490aa37a22a18426", + "filename": "downloads/out.csv", + "contentType": "application/octet-stream", + "byteSize": 12, + "locator": "browser-run://artifact_9d1f6368490aa37a22a18426/downloads%2Fout.csv" +} +``` + +Locally the bytes land at `~/.webcmd/cache/browser-run//` (under +`$WEBCMD_CACHE_DIR/browser-run` when that is set), readable once `run` has returned. Hosted +runs use the same receipt shape with a `cloud-artifact://` locator backed by the execution's +trace artifact store. The receipt never carries the bytes themselves, so return the receipt โ€” +or just read it off `artifacts` โ€” rather than trying to return file contents through `result`. ## Errors diff --git a/src/browser/run/runner.test.ts b/src/browser/run/runner.test.ts index 7f6653eb..bdf91037 100644 --- a/src/browser/run/runner.test.ts +++ b/src/browser/run/runner.test.ts @@ -1,4 +1,6 @@ import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; import { createRequire } from 'node:module'; import { afterAll, @@ -16,6 +18,7 @@ import { type BrowserContext, type Page, } from 'playwright-core'; +import { LocalBrowserRunArtifactSink } from './artifacts.js'; import { QuickJSHost } from './quickjs-host.js'; import { runBrowserProgram } from './runner.js'; @@ -42,10 +45,11 @@ function sessionScope(pages: () => readonly Page[] = () => context.pages()) { }; } -function run(source: string, options = {}) { +function run(source: string, options = {}, input = {}) { return runBrowserProgram({ ...sessionScope(), pageId: 'page-1', + ...input, }, source, options); } @@ -643,6 +647,36 @@ afterAll(async () => { expect(output.result).toEqual({ length: 3, returned: [255, 0, 128] }); }); + it.each(['writeArtifact', '__webcmdWriteArtifact'])( + 'returns a redeemable receipt from %s', + async (fn) => { + const baseDir = fs.mkdtempSync(path.join(os.tmpdir(), 'webcmd-artifact-')); + try { + const output = await run(` + const receipt = await ${fn}( + 'nested/report.csv', + new TextEncoder().encode('id,name\\n1,caf\\u00e9\\n'), + ); + return receipt; + `, {}, { artifactSink: new LocalBrowserRunArtifactSink({ baseDir }) }); + + const receipt = output.result as { artifactId: string; locator: string }; + expect(receipt).toMatchObject({ + filename: 'nested/report.csv', + contentType: 'application/octet-stream', + byteSize: 16, + locator: expect.stringContaining('browser-run://'), + }); + expect(output.artifacts).toEqual([receipt]); + expect( + fs.readFileSync(path.join(baseDir, receipt.artifactId, 'nested/report.csv'), 'utf8'), + ).toBe('id,name\n1,caf\u00e9\n'); + } finally { + fs.rmSync(baseDir, { recursive: true, force: true }); + } + }, + ); + it('rejects absolute artifact paths instead of touching host paths', async () => { const target = '/tmp/webcmd-browser-run-owned.txt'; fs.rmSync(target, { force: true }); diff --git a/src/browser/run/runner.ts b/src/browser/run/runner.ts index ba4395b9..e8e89203 100644 --- a/src/browser/run/runner.ts +++ b/src/browser/run/runner.ts @@ -264,7 +264,7 @@ export async function runBrowserProgram( name !== 'writeArtifact' || typeof args[0] !== 'string' || typeof args[1] !== 'string' - || (args[2] !== undefined && typeof args[2] !== 'string') + || (args[2] != null && typeof args[2] !== 'string') ) { throw new BrowserRunError( 'BROWSER_RUN_INVALID_INPUT', @@ -440,12 +440,18 @@ export async function runBrowserProgram( globalThis.__webcmdTransportReceive = message => { connection.dispatch(JSON.parse(message)); }; - globalThis.__webcmdWriteArtifact = async (filename, bytes, contentType) => { - await __webcmdHostCall( + globalThis.writeArtifact = async (filename, bytes, contentType) => ( + __webcmdHostCall( 'writeArtifact', - JSON.stringify([filename, __webcmdEncodeBase64(bytes), contentType]), - ); - }; + JSON.stringify([ + filename, + __webcmdEncodeBase64(bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes)), + contentType, + ]), + ) + ); + // Legacy alias; writeArtifact is the documented name. + globalThis.__webcmdWriteArtifact = globalThis.writeArtifact; __WebcmdPlaywrightClient.quickjsPlatform.fs().promises.readFile = () => ( unsupported('Host filesystem reads') ); diff --git a/src/skills.test.ts b/src/skills.test.ts index ea19e4a8..ce2c0cbf 100644 --- a/src/skills.test.ts +++ b/src/skills.test.ts @@ -216,7 +216,8 @@ describe('webcmd skills content', () => { expect(browser).not.toContain('page.snapshotForAI()'); expect(browser).not.toContain('--snapshot-diff'); expect(browserRunReference).toMatch(/sandbox boundaries/i); - expect(browserRunReference).toMatch(/artifact paths/i); + expect(browserRunReference).toMatch(/artifacts/i); + expect(browserRunReference).toContain("writeArtifact("); expect(browserRunReference).toMatch(/errors/i); expect(browserRunReference).toMatch(/snapshot behavior/i); expect(browserRunReference).toContain('--snapshot-mode act|tree'); From fb70a27ecf2c03ef0ad7246c613853552775ca52 Mon Sep 17 00:00:00 2001 From: Rishabh <33702025+rishabhraj36@users.noreply.github.com> Date: Tue, 18 Aug 2026 23:44:13 +0530 Subject: [PATCH 3/3] Feat/evals (#349) * benchmakrs added * fix: removed missing refs from readme * feat(benchmarks): support OpenAI as judge provider * fix: screenshot upload * feat: added cost support * docs: design benchmark-specific judge prompts * feat(benchmarks): split general and stealth judge prompts * Delete docs/superpowers/specs directory * chore: bump version metadata for 0.7.0 release * Revert "chore: bump version metadata for 0.7.0 release" This reverts commit c69011fafacc32337fc599f63aaf8bb6490b6d20. * feat(benchmarks): expose full Webcmd skill pack to Codex evals * feat(benchmarks): clarify stealth captcha handling * fix: added support for webcmd browser skills only * feat(benchmarks): run eval attempts in parallel * fix(benchmarks): isolate parallel webcmd sessions * test(benchmarks): cover parallel webcmd sessions * pi support (#313) * chore(benchmarks): pin webcmd 0.7.1 * refactor: disable concurrency in benchmark evaluation and remove integration tests * feat(benchmarks): support Codex subscription evals * docs(skills): improve browser diff and form guidance * docs(skills): sync browser skill sources --------- Co-authored-by: beubax Co-authored-by: Tejas <48682479+beubax@users.noreply.github.com> --- .gitignore | 10 + benchmarks/README.md | 275 ++ benchmarks/datasets/BU_Bench_V1.enc | 1 + benchmarks/datasets/Stealth_Bench_V1.enc | 1 + benchmarks/datasets/Stealth_Webcmd.json | 184 + benchmarks/package-lock.json | 4271 +++++++++++++++++ benchmarks/package.json | 14 + benchmarks/pyproject.toml | 18 + benchmarks/references/dataset-provenance.md | 12 + benchmarks/references/judge-contract.md | 83 + .../references/stealth-judge-contract.md | 17 + benchmarks/scripts/agent_browser_runtime.py | 82 + benchmarks/scripts/axi_runtime.py | 239 + benchmarks/scripts/dev_browser_runtime.py | 174 + benchmarks/scripts/judge.py | 181 + benchmarks/scripts/libretto_mcp.mjs | 81 + benchmarks/scripts/libretto_runtime.py | 35 + benchmarks/scripts/pi_controller.mjs | 191 + benchmarks/scripts/pi_toolkit.mjs | 32 + benchmarks/scripts/run_controller.py | 1518 ++++++ benchmarks/scripts/run_eval.py | 551 +++ benchmarks/tests/libretto_mcp.test.mjs | 24 + benchmarks/tests/pi_controller.test.mjs | 141 + .../tests/test_agent_browser_runtime.py | 77 + benchmarks/tests/test_axi_runtime.py | 74 + benchmarks/tests/test_controller.py | 2856 +++++++++++ benchmarks/tests/test_datasets.py | 75 + benchmarks/tests/test_dev_browser_runtime.py | 126 + benchmarks/tests/test_judge.py | 366 ++ benchmarks/tests/test_libretto_runtime.py | 62 + benchmarks/tests/test_run_eval.py | 1152 +++++ benchmarks/uv.lock | 936 ++++ package.json | 1 + skill-src/webcmd-browser/SKILL.src.md | 44 +- .../references/browser-run-playwright.src.md | 2 +- skills/webcmd-browser/SKILL.md | 44 +- .../references/browser-run-playwright.md | 2 +- src/browser/run/runner.test.ts | 43 +- src/browser/run/runner.ts | 26 +- src/browser/run/types.ts | 4 +- 40 files changed, 13997 insertions(+), 28 deletions(-) create mode 100644 benchmarks/README.md create mode 100644 benchmarks/datasets/BU_Bench_V1.enc create mode 100644 benchmarks/datasets/Stealth_Bench_V1.enc create mode 100644 benchmarks/datasets/Stealth_Webcmd.json create mode 100644 benchmarks/package-lock.json create mode 100644 benchmarks/package.json create mode 100644 benchmarks/pyproject.toml create mode 100644 benchmarks/references/dataset-provenance.md create mode 100644 benchmarks/references/judge-contract.md create mode 100644 benchmarks/references/stealth-judge-contract.md create mode 100644 benchmarks/scripts/agent_browser_runtime.py create mode 100644 benchmarks/scripts/axi_runtime.py create mode 100644 benchmarks/scripts/dev_browser_runtime.py create mode 100644 benchmarks/scripts/judge.py create mode 100644 benchmarks/scripts/libretto_mcp.mjs create mode 100644 benchmarks/scripts/libretto_runtime.py create mode 100644 benchmarks/scripts/pi_controller.mjs create mode 100644 benchmarks/scripts/pi_toolkit.mjs create mode 100644 benchmarks/scripts/run_controller.py create mode 100644 benchmarks/scripts/run_eval.py create mode 100644 benchmarks/tests/libretto_mcp.test.mjs create mode 100644 benchmarks/tests/pi_controller.test.mjs create mode 100644 benchmarks/tests/test_agent_browser_runtime.py create mode 100644 benchmarks/tests/test_axi_runtime.py create mode 100644 benchmarks/tests/test_controller.py create mode 100644 benchmarks/tests/test_datasets.py create mode 100644 benchmarks/tests/test_dev_browser_runtime.py create mode 100644 benchmarks/tests/test_judge.py create mode 100644 benchmarks/tests/test_libretto_runtime.py create mode 100644 benchmarks/tests/test_run_eval.py create mode 100644 benchmarks/uv.lock diff --git a/.gitignore b/.gitignore index 3263178e..2145d335 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,13 @@ sitemaps/ # Database files *.db autoresearch-results.tsv + +# webcmd benchmarks (dataset comparison harness) +benchmarks/results/ +benchmarks/.venv/ +benchmarks/node_modules/ +benchmarks/**/__pycache__/ +benchmarks/.pytest_cache/ +benchmarks/pytest-cache-files-* +benchmarks/datasets/*.json +!benchmarks/datasets/Stealth_Webcmd.json diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 00000000..323a7e20 --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,275 @@ +# Browser Agent Benchmark Comparison + +5 agents ยท 99 tasks each ยท 5 categories ยท accuracy, speed & token efficiency + +## Summary table + +| Agent | Accuracy | Avg time/task | Total time | Total tokens | Tokens/correct | Steps | Tool calls | +|---|---:|---:|---:|---:|---:|---:|---:| +| **dev-browser** | **75.8%** | 162.1s | 267 min | **4.49M** | **59.8K** | 1,710 | 1,504 | +| **libretto** | 73.7% | 141.9s | 234 min | 6.10M | 83.6K | **1,452** | **1,249** | +| **webcmd** | 70.7% | 188.8s | 312 min | 7.11M | 101.6K | 2,936 | 2,709 | +| **agent-browser** | 63.6% | 151.9s | 251 min | 6.39M | 101.4K | 2,815 | 2,614 | +| **chrome-devtools-axi** | 62.6% | **136.6s** | **225 min** | 6.10M | 95.3K | 2,317 | 2,116 | + +**Best in class:** accuracy โ†’ dev-browser ยท speed โ†’ chrome-devtools-axi ยท tokens โ†’ dev-browser ยท efficiency โ†’ dev-browser ยท fewest steps โ†’ libretto + +## Overall accuracy (% of 99 passed) + +``` +dev-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 75.8% +libretto โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 73.7% +webcmd โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 70.7% +agent-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 63.6% +chrome-devtools-axi โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 62.6% +``` + +## Avg time per task (seconds โ€” lower is better) + +``` +chrome-devtools-axi โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 136.6s โ† fastest +libretto โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 141.9s +agent-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘ 151.9s +dev-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘ 162.1s +webcmd โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 188.8s +``` + +## Total tokens (millions โ€” lower is better) + +``` +dev-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 4.49M โ† leanest +chrome-devtools-axi โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6.10M +libretto โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6.10M +agent-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6.39M +webcmd โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 7.11M +``` + +## Tokens per correct answer (lower = more efficient) + +``` +dev-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 59.8K โ† best +libretto โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 83.6K +chrome-devtools-axi โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘ 95.3K +agent-browser โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘ 101.4K +webcmd โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 101.6K +``` + +## Accuracy by category (% pass rate) + +| Category | webcmd | chrome-devtools-axi | agent-browser | dev-browser | libretto | +|---|---:|---:|---:|---:|---:| +| BrowseComp | 75% | 80% | 75% | **90%** | 80% | +| GAIA | 55% | 35% | **65%** | 60% | 40% | +| InteractionTests | **100%** | 84.2% | 84.2% | 89.5% | **100%** | +| OM2W2 | 65% | 60% | 45% | **80%** | 70% | +| WebBenchREAD | 60% | 55% | 50% | 60% | **80%** | + +## Steps & tool calls (total actions) + +| Agent | Steps | Tool calls | +|---|---:|---:| +| libretto | 1,452 | 1,249 | +| dev-browser | 1,710 | 1,504 | +| chrome-devtools-axi | 2,317 | 2,116 | +| agent-browser | 2,815 | 2,614 | +| webcmd | 2,936 | 2,709 | + +--- + +*All five agents completed 99 tasks. Time and token totals are cumulative across the run. Avg time = total time รท 99. Tokens/correct = total tokens รท tasks passed.* + +--- + + +# Browser Bench Eval + +Run a controlled, sequential browser-tool benchmark. Keep task data and local evidence private. + +## Workflow + +1. Confirm `uv`, the selected controller CLI, selected browser tool, and judge authentication are available (`GOOGLE_API_KEY` for `google`, `OPENAI_API_KEY` for `openai`, or a ChatGPT-authenticated `codex login` for `codex`). AXI, agent-browser, and dev-browser runs also require CloakBrowser. +2. Ask the user to choose a controller, model, benchmark, and task selection if any is missing. +3. Start with one task unless the user explicitly requests a larger or full run. +4. Run `scripts/run_eval.py` with the explicit choices. +5. Report selected task count, overall accuracy, category accuracy, terminal statuses, controller time, steps, tool calls, token usage, and the ignored local result path. +6. Compare runs only when manifest metadata (benchmark, dataset hash, controller, model, and tools) match. + +The legacy `tokens` metric remains non-cached controller input plus controller +output. Task results also record the controller's ordinary input, cached reads, +cache writes, output, and reasoning-output detail. For `gpt-5.6-sol`, +`estimated_api_cost_usd` applies the documented API rates to each completed +controller turn before summing them, including the long-context multiplier. +This is an API-equivalent estimate; ChatGPT-authenticated Codex runs are not +necessarily billed through the API. Judge usage is excluded. + +## Commands + +```bash +uv run python benchmarks/scripts/run_eval.py \ + --controller codex \ + --model gpt-5 \ + --benchmark BU_Bench_V1 \ + --tasks 1 \ + --tools webcmd +``` + +Use OpenAI instead of Gemini for judging: + +```bash +uv run python benchmarks/scripts/run_eval.py \ + --controller codex \ + --model gpt-5 \ + --benchmark BU_Bench_V1 \ + --tasks 1 \ + --tools webcmd \ + --judge-provider openai \ + --judge-model gpt-4o-mini +``` + +Use the signed-in Codex subscription for judging: + +```bash +uv run python benchmarks/scripts/run_eval.py \ + --controller pi \ + --model openai-codex/gpt-5.6-sol \ + --reasoning-effort low \ + --benchmark BU_Bench_V1 \ + --tasks 1 \ + --tools webcmd \ + --judge-provider codex \ + --judge-model gpt-5.4 +``` + +Codex judging runs ephemerally in an isolated, read-only temporary directory. +Its token usage and cost are excluded, like the other judge providers. + +Pi uses the pinned SDK sidecar from the repository's Node lockfile: + +```bash +npm --prefix benchmarks ci --ignore-scripts +webcmd skills add --provider codex --scope user +./benchmarks/node_modules/.bin/pi +# In Pi, run /login and select OpenAI Codex, then exit. + +uv run python benchmarks/scripts/run_eval.py \ + --controller pi \ + --model openai-codex/gpt-5.6-sol \ + --reasoning-effort low \ + --benchmark BU_Bench_V1 \ + --tasks 1 \ + --tools webcmd +``` + +The Pi sidecar reads the resulting OAuth credentials from +`~/.pi/agent/auth.json`, and preflight verifies them before creating a task. +Its `estimated_api_cost_usd` is an API-equivalent comparison metric, not a +subscription charge; the manifest records `billing_mode` as +`chatgpt_subscription`. + +For AXI with one dedicated CloakBrowser process and profile per task: + +```bash +uv run python benchmarks/scripts/run_eval.py \ + --controller codex \ + --model gpt-5.6-sol \ + --reasoning-effort high \ + --benchmark BU_Bench_V1 \ + --tasks 1 \ + --tools chrome-devtools-axi +``` + +For agent-browser with one dedicated CloakBrowser process and profile per task: + +```bash +uv run python benchmarks/scripts/run_eval.py \ + --controller codex \ + --model gpt-5.6-sol \ + --reasoning-effort high \ + --benchmark BU_Bench_V1 \ + --tasks 1 \ + --tools agent-browser +``` + +For dev-browser with one dedicated CloakBrowser process and profile per task: + +```bash +npm install -g dev-browser +dev-browser install +dev-browser install-skill --codex + +uv run python benchmarks/scripts/run_eval.py \ + --controller codex \ + --model gpt-5.6-sol \ + --benchmark BU_Bench_V1 \ + --tasks all \ + --tools dev-browser +``` + +Use `--controller pi --model openai-codex/gpt-5.6-sol` to run the same lane through +Pi. The Pi sidecar mounts the installed `dev-browser` skill and enables only +its `bash` and `read` tools. + +`dev-browser install` is required because it installs the daemon's Playwright +and QuickJS dependencies. It may also download dev-browser's Chromium, but the +benchmark does not use that browser: the task-private shim always connects +dev-browser to the task's dedicated CloakBrowser CDP endpoint. + +For Libretto Browser Tools with Codex or Pi and one dedicated CloakBrowser per +task: + +```bash +npm ci + +uv run python benchmarks/scripts/run_eval.py \ + --controller codex \ + --model gpt-5.6-sol \ + --reasoning-effort low \ + --benchmark BU_Bench_V1 \ + --task-indices 0,1 \ + --tools libretto +``` + +With Codex, the harness injects its pinned stdio MCP server per attempt. With +Pi, it registers the equivalent native Pi custom tools directly; use +`--controller pi --model openai-codex/gpt-5.6-sol`. Both expose only `browser_open`, +`browser_exec`, `browser_snapshot`, `browser_status`, and `browser_close`. +`browser_connect` is disabled so the agent cannot leave the task's dedicated +CloakBrowser. + +Use `--stealth-view official` only with `Stealth_Bench_V1`. Never add a parallel flag or publish `results/`. + +Webcmd attempts use the dedicated `benchmark` Profile. The harness creates one +opaque Session per task before starting the controller, passes that Session to +the controller, and closes it only after the controller exits. The agent does +not create or close Sessions. Its browser surface is only +`webcmd --profile benchmark --session browser tabs` โ†’ optional +`bind --page PAGE` โ†’ optional `snapshot` โ†’ one or more +`run --stdin <<'JS' ... JS` calls. Profile-level cookies, cache, and storage are +shared across the Webcmd run; tabs and browser workspace are task-specific. +Removed browser primitives (`open`, `state`, +`click`, `type`, `screenshot`, `wait`, `eval`, `observe`, and `tab`) are not +allowed. Do not run `webcmd browser --help`; the allowed surface is complete. +Run programs must use one quoted heredoc; never invoke `run --stdin` with an +empty stdin body. Avoid shell-fragile JavaScript such as +`$`, template literals, regex end anchors, and mixed-quote one-liners. The global `page` is already +available; do not call `browser.currentPage()` or `page.snapshotForAI()`. `run` +returns a snapshot diff by default. Only positive `--timeout` and `--max-output` +values, `--snapshot-mode act|tree`, and the boolean `--no-snapshot-diff` flag are +accepted: + +```bash +webcmd --profile benchmark \ + --session session_7d8f2c10-4a11-4f3e-9c22-1b6de0a91f45 \ + browser run --stdin --snapshot-mode act <<'JS' +return await page.title() +JS +``` + +The separate `snapshot` command accepts `--snapshot-mode act|tree|read`. + +BU Bench loads `datasets/BU_Bench_V1.json`. To skip a task without shifting its raw index, set its optional field to `"enabled": false`; leave all 100 entries in their original order. + +## References + +- Read `references/judge-contract.md` when auditing judge decisions. +- Read `references/dataset-provenance.md` before copying, updating, or publishing datasets. diff --git a/benchmarks/datasets/BU_Bench_V1.enc b/benchmarks/datasets/BU_Bench_V1.enc new file mode 100644 index 00000000..e7c93af7 --- /dev/null +++ b/benchmarks/datasets/BU_Bench_V1.enc @@ -0,0 +1 @@ +Z0FBQUFBQnBkLWIwSF9RRE81NUI0LW15NnQ0bmIzR1JTOEYtUG42Q2o1ZW5DSUdDN0dFNWt5UWgtWGVhV04zUUsxeFhENlZCbEdOc3JZVnluRng5b1ZWaUVjNGt2c2EwSTZiTUdkcmUyaVk3YnJmM1BzYTFkT2VEMjBnMUhUME5iQnVoaXdUcVF6cGc1NGZ1b0FuVXdYTjc1WEtDV0ptVUlKZEtJOVd2VHFyTTBmOWxvTVU0cVZTeEJTbVNfX0xHSWJwWDYxRkY5TVppV3dJRmctbndVdFFpMUpVelJmcG1tbmtpRWl4MXl1cE1qQngxeGpaTjJ4bVZkUXI0UVlCcVJJX3RhM0VIRC1iaUdBREh4cWNuSnRzYTgtdUFObExRUWdrOGVpWFEtRzVYb1l2WjlqUzVTbWl1UkpkS0czcmlRV0lLZ0dGX05Zd3gxbEpYb0RyaWlqdXgtZC1nempETDNtZWpqVkZCMDhXaHdNSGRxQ292SERGTWtuaHJlSkNCTEJ5cEtMRzBFY01WWUd3aVVIeTVSaXdjeVFkbmxiaG5wald0MHNJTjh2UTNRR3puX1RadEhfTEJ5UndTdE9tV1hXU1pGNFE4V0ZHZmJRZU9wUGZ4czR2Ymt0cTRpRFNVdnE1U2xIZDdJWDhwdTVKZkVPNXE5Qzd5eW9HNGxfVklGS3lZelRkS3BpR3NERzBseWJHbU56RF9remd1RTRZZHpqZXdSM3Jwc3NaU0RMYjAzWFYzRTNiMTZhd0RGdE5hdWtVaV9TTDBJalpIN2U4cGtLeVBMTXpGdG90cnJ4cU1FZW1RTlRLZXJMbktleWxwa1ZjaUxEdWtnM3hiNEZ3OEg1NGdlZzQ5STVHVl9NVEpGQkNYLV82NVhnbFFTR19LVktZbUdMZ1g3WTd2ZjljeUE1NGZZLXRTVVRGWURTWVhqY1BoYnEzQ0JOR2s1ODNnY05VZWJoYmVDaTVsUnQ2RW5TLWRBZ2psLUhwSEtYM3hTZTBnMHBDYjRPZ0doWEhXN2YyMnpHbmZDRVF0eUZzZVhIdThHeHlnOVZvblVhSnBOVXpaU1F3czlnYnJXMXhwRk9CbHN3OW5KY3VTSDlVQlVDajN6U3lqN2VsXy13dHVqTE8yUENyWDdELUpGbGU3emxGY21TMUhST3VpLVhPUnEyWVMyMjNyRkFKbXFlVjBPT0lGZXhsbDlUb1FIZ1M0RUk4TWw1TEx1SGdpZ2VrVHkzbmlRQ0lVbVM4Mm5PX0xzV2J2WkhtWmFPWDI4MFlBTnVHeGYzOEtLeXZmRTlhVmk2b1JUald3b1RyaFByUGI0c3J6UjFlNUFDNWgxNWw5Y3dnXzhQUkJmUW1ubWJzNFcxT0ozTmF5TUJRb2VGazRVMjV4MjFXR2VtTzhsbmUyT3RPYjVEc1MxVEhpMXEybUxWR0ZOZURTMXdxbGdIcko1TTRXRWdnZlJBWFpjbXlsUGVXZ2oybE95U0Ftbnd5UTJMR0gyX05uZHN2MkFMeUJtRkhLeThxaFRpNlUxOHIwTXZ5eVRfalhQMFJnWkJmN0hFOWIxcmVEd3Q3bFlIUGlGSnNlWGUyTEZyRXQ2aXA2aUlMMm8yMkRHYnhORDdOUFEzdW9nV1ZVZi1NNnJ2OUxSMHdqWmR6aEdsQi1UZ3FsZVJMS2R4VlNCcnA4UVFBcTNXckVONWg0MzdfREQ3SUhLaTVIc083MjM0b2ZwWWZjRVJaS3Z5MTY5cjR3VjY3YnhsU1lhRjFhMXg2TV9NQzRPNDZqYnhqNTBFWjRaWElQVlY3WC1lVWYzSUp2SjhuaWt2SmJUNE5UOXE5dkhZMDE0UnhBSG1vMmV2MVQ1X0dZVnZ0dk5HeUhPeHdXTkwzZS1tNUExdG9HTXZRMEw4TW1aY1AwMzctWmF6eEZiOGxwTUN1WmpLajY3ampKREljbVA3TmVMS0FFcldWWFRGQ3ZrbGJVSWsyN3VuSW1VWTVucURjSkRaZ2QwZmNudlVnOU5yRkdRR1ZXLTRBYU5WcUVfazRnQ1JBOHBvSVVzZ0pRMm1DVGdzLWFKSmgzd0JMVWd5X1hrNEtZVXlRSWgyWFFENWltMHMtMXl0elpQNV9wa3RSUnEwR1FmRFA5X2FlWXNQRjRJYjFrejdPTkRxVURxOW9oQkp3YzRndTZVVXFFMHZZMVpDZ1c5XzdNZHpEendQTWFKRVBJLTJCcjZoc1ZyY0ZTdnZBc1FCMGZrdC1fOC1yM09RN1Bkc3NpbWZvWkVLelcySXY3UGJxcEl3SXp2S2Vka1RMZUo5WHFrNF9EX1M1U3picGF4MDZuc1FCSk1xU19oZUdVQzFESG9GSXVjam93MlR3SkZPbGdQZlZVSWVqR3U3QmFLYXhDUlBkWGFHWl9VX1NxN3lJN2FlbWttbWh1RW9HdnQtVTEzTFdqaC03aHpIQmtnTEQwV25YbU9lY0JqYnc1UTVIdkRqSl9MSUpPdGZad3RzM2RnRG42Z2xGcW5vWThlSDJ3Y2EtTUhrLWhONTBRVTZIenBBNWVwV2VzM3VpUE83NndlTFBVT2xlbXNkaGFuRUxIc1pXM2dIMll1YlV1NDQ1MmVYMHlLQVVhXzRFcHRnRXJwNDliSFZ0aGNxakhRT1k0TDU3YXVMRDV0WVVkT0xzbmtDTzJqQnBrdTlZUjRsUVZmbVVOajhMVkYwSlowTkJpWWJZdXotQThDZThlTzl2MmFuamV1aFJQZXJRemxTWW16WlBzUkV5aXVCSTFCUUhEX0pfZ0hka0dEZlVudGpCRHpCR0NOVFFqcEtwa2RMc3hua1h4b0w2MkNRenI0SUd3aGZDVlpqN3U0NzZMb1pUV0k5b2Joc0YwRlF1UzZGX0FLZHRNOEl4UHRNQ1puYXVsRWZRZjNoNEtzUWo2TE05RVBBOE9jY0o2ejdiaXRIYTVBUnNwbjlzUEo0VHhMMFd5WXFRaDlfWkw3VF93cWUyLVBpZGNqbWV5SzBJSmdpTmxFZHhRRHpfVVRyZGw4bW5CZGliVFUyUnZCcG44dGxrRTd3MDVIWFBxNzdOUXVOOEdnVkd4N29aX1dIY2hBOHlWTG14RkxwREw3anpVdmo5VmNiTThGVDJmOFlwYl82TjZiS3BtdVhrZ3E3eG1rLUE3enMtQUhPbFRkdnIwVGQ5V0cxV2U1R25nMHF0bGVQRXBFT3pRRHAtakJXSURKNXo5eThld21GZWRhVDM3bnkwUDNmajJ5aDJ1TzQteFpnVVdSc29PbkpOMjBaaElBMGxiWGxlQjFrcTA3XzBXRmpwMUREQVlsczRtRWV4aWZ1TXRhRVBXNWsxUlh6S1ZQd1g3b2l4eEtlWUJSdXQzazZiN2kydTliVFprc0s2UFhySG1ZLU42NlJqTlQ1VldhS0lCVVRRTklnVjJyejZXVUFQMjktQU9hNGRZVUVxVkZwZjRhT0l2ckRPNGRtbWhnajBUSUM1YzRsS3lxdkU1dWVFRm5kOWlHd2ctRmZoSzZhODhTYW9FYTB6bDVCNkxObkFMQXBNdzJlNmpZMFFBTUVuS1ZObW1XLXBjelBSMndJR2JTc3Z4Y1JwbTBlbTJaR0M0SWFzdnNDY2hqWWVMbllINld1QWRoMXg3ZzBIcHNUeGhyQWktWDBhSDVianJVYU9BbEI0UXdHckdsTVY1cjRzXzlNampSamJ3TkprT3JES18wUmZwMTFiaDloMk04eGgzdy0zU21rOVVPcE14VlVVdV9fNHo3NXlJRzRqQ2Fvc0QzclZVQl9PSXAxWHpZRzVmSVpGTnpEV0Z5eFIwaUFaQW9WLUI4SHJFakloeUZQWEh0dC1MUTVvZlFZek9vMG9wZ05qN250MDVLWnN1bXc1SDI0TmRBRnRGMER6UjRHYkdNS09vRjZ0ZFhDVG5abU9Kc2s1VUlQS24teXFqMl9zUlpaOGRXcTRNdlJEYXRNU3dhODBSQVMzc21KaU9yUzFQbDFhSzVoOElsbzdqWm9nY2sxY3JKaFBmdER4aHpaS3NwWVpWcVJwYjBsVEFVODJJLTkyai1wOXFSaGE5eGRhakxRTWhHb2dUS0hxYlkzX2RpUFJxNlJwTDE2QTZRZThpbDR1Ym8wcENlTVNjMzAtQ3lxZDBCeUZaWmlYRTktaXJzNnJBTkRBdWl6ckVPSVgzWktOcGdOREEyVnd2cmc2b2ltWE9rMks1X084LWc4WmU0b1VielVTQXowdzYzTmliS2JWSzhCeEZWWnFlZmx3bEJjTmVSR0Zhb1cwcUljQTFwZ19NVHJLWkx0WHd6SDE5UklrbVlKbzhvR1VmZWpGYWtXUTNUN1dfcTVpdUozMkpfVUlUc3dFY1pOTmVaLWhwVkRRTTVMNE5fS2twMW13aXBFR2hPa2oyU1gwZG82d0QxY0ZZNXdTaVM4RFRlQ1dFcHpiNlFrSWhpTmpjOUM5ejVnX0tEWkhiajJKV2lka200ek83UndsOGZyeWh4Tl8yRTF3UWYxSHBMeEtMNklkYnlkc0RHTlFEOHFSSzY0b3NheTdQMkVXYUx2bWVqWUU0c1dPQ2w1MXZTTFNqOEl4bWVYRkpIY3pQczRmLUo4eDR0V0ZJVWxJdXFXNUtwUVgwSktTUS1aZS1mUmo1a19CV2FJRmluS2tPY1pZWDdJNEJ0dGFicGZRTmtUd1RUZHZoN25iYlBrLUllLS13RGp3X1c0TFl5cU9abGFub0FRSUJCcmxqbGJZeXowWi1FakNObHdSeHlnWHpsaU1PTHptUEpacUpsalp4TnVSaC1oZUhmRURZSFY5M00wN0o1LW02TFhFZm5aOHgwem55UnZoYVdDTXNaakE0ZDJ4WHlVRUI3Z1g2UXBHaWVYN0dUTG0zNHdPc3l6eExrQkpzZE10ZVJmQjVjTC1hTTl3eXVzSjZnMEMxNEo3ZXpHYlN5Qm9WLWJmVTBtY1Z0M1Q0YjI5ZHJoZU5tWjkwOURJa2VQN3BQcGdDS2ZsUGZnTkVfN1g2c0Q4TTY3VTVUQXpTYmhBV2I5d1A5Vi1SWHZDdW81cVRYRnpXZEd5eElnNldoVVQzUTFBSVlqNjhySVE1NkIzcW8xc0NXSTlaaHFfbUk2cVByUEgtQ1FiVGhBQl9ENVBhTzN0d25VcU9jdVJKdjZ3ZlFmZDROX0RGTXJmM1BUS0lrRHJwc09qamNKcUJRcnlMQ3N3U1FhYlJUM0NxeDYtcndUSWlEdHg5Q1NleWtEcGd1Wkdhd1hUVnpYTWJDMEZzZ002UDNlejBUaFlkSFZzUHo0b0psbWdncUVmRmJYSGRfcEQwd3h2eWE2NW5DOEpPMjhGU2Rma1JrbG92R1Q0SEZpVHJTaWc2SUtJcGRHSW5mUkVfcFdOajNvbVNpUV9TOWV3VkltSGJPT2dVejRaMzN4Y1FkSFJCelc2UHhyQ0kxN2xObGZkaGVldUd5RDJNNnFkcHFnS1YwbTh1ODYzOTlFd0NkUTY1bE8taFpvYXdpYkJodmgzMjExUEdEanU3Skh1TTBRSlRhX3kzamRmXzhQQVJCb1Rrb3BFYTQyTVBDNnowT1M1ZExJaGtYWUpFOGJvQVZzZy1FaFBpb2tzTlhGY0N0NzRqSUNkS0hPc2VsOGszQmdHcUFFc3c5TThtc1dob0YwaXpVU3E0LUc5UXRTRm1neXY1aDIyd0xYTnpsc1RSUmR6eEhBTHNNRTVfZGwtekNzb3BWYW5sNExiUjBka0JqUHZWS2xtdHg5cHhIM1VLbFJQZGpqeG53U2NBQzF2ME94VElYbmtxQkpONUFzUkZiUlUyd09mcFVKemw4Nk8wa241bjlNMkRycnI1VFFEV25OQ2txV0xiRnN5WkQ1Ym9wM0tSZEY4bjdLSkhvT1FVY21qU0pEYnJSMFVweXFXM05VRHRyc0V0Rm5EU0FuZWNZeGREQjZCRkFjMGtEUmpqV29UVzV6WXFYUEJYX01QemVkMTF2LVdmMnhPQk4zQ3Y1ZWQzYlNkVjhtRVJ2dFcyckhsZWJHQTBVUEdsSzYzemhlOWJjQlYzbVNiSDRWeGVOS3Q1UWI0dUdTY1hyZUozYWMwTzFwbGt0dUI3aUFkT1plUkcxVVBtbDF2TFY1T2lodjNudWxySGhZUnl2OUQ3QkRMRFBlbUVBM0VWWGtPMlptN1cyRFdtS2ZWcXFjUjRSd2VRUThwWDVZSTdxXzd0bDlJT2kxTkxHNVlhWkNSUTNKZjRSTlBBQWpSOTZLSi0yWndiVGx4Zy02U2dPNzJNeVk1WHowODloMklzX3lXUk5yUERwQnhXU0VrM2pyVHRjVjYtdnhzdy03MFhvR0tMdFpsd1lxbU9haUwtdWxNWmo2bF9jZUVYN1VPeGFqZmhGOE1zelpGbW53T3I1MEZjbUQ2WUNNcHRucHB5NDVpQUVPZTh4Q2ZZVDVwTDItalJwRW11QVZyWm0wX0RWZTdSTkpDaUJiSzZNd0cyUld1MG5obFJGcUg5ZWdzcEdTT0ZWdzg1YS1qSmpOTWZzMVU1dWlIX0FhY1g1dlNlSHJRZmR2QTQ1V2hHVUdrN25qSFQxUlFpMDBtUzdNZ0ZHd24td1VWcDhKaW5mRmR0ZnBaNUU2dkRiSVhGdXRZT25JbVpRU0hGYmlMOHNCWkJxSVpPRVNXNllTbm5IekVZOThwek9XR0tBTlRUdXVucDBPSVU3em1KMC02RmI2aHlBUjNuYnBPYlNSb0RCWEJiY20wWDNJcDd0T0lYU3pkQWc1WDVhZmNQRzVnNmNNNE8xNmZqUlM0S2lBNnF3czdjM0NSM0xMekxlT2EwcXFqNDNjaU9JTmd4ejk1aEtMVzNTNWFZWDBFalpyWExFM3B4V2tWQUtaRWFFbFZqbHJRaU1rM3VaRXV1RXR5NXpiUmY5Y3pyRmFnMkxxXzR5MXN5MFloYjRrc216ZTBEdWhYN04xNWNENU5VODlyendPNEt5UUdJWTFmcUNhc2JTR1hrbWlXMk5fT1o2NXZTT2tQSzBWUGlUTkNSLURGdU84bWdqdWszNFI0MnA4aVpfdVZQS2ZEMVZJWmVKaXVfNVZfZnp2clNySHp4NHl0VVdsdTBXRmlmYnhrZWFacFRNYlJfSTNRLVhGZHU3ZWZaSzVlTkd4WWR1ZjdwQXdWZWJqY3oxOHVKNUVDYzRTcEVabmdUZVI1Q1FVb1JoRE4xTXlQUVlkNW9IZ0RnaHVhNFZzdEJTSl9jR01ZSVJULWNVTVdmUFZSY2dMMV9hUHFOczNtU0t4d0pzRm1QSkJNM2dsTDZGTUkwRUdLWXpseFFLdEc2V3NGVzZfTnl4NlRzMGtuUkNlX2dOUzR0ODQxS1B0aWZOWU9Ba3lzeUQzQk5oanhUQ29WQ1o5SzYxUE4yZUhTWjhYV0pNaDhtZTlpQTMxRkY2UkZUYVlaYTI2WWw2VmF0cGV2VXpsdkl5eHUtd08xRjUzRzNiUWdPeG1CNGJ2YWZnb3RJdGlkeFdWWHAtd1NUcjV4ZXMzUUV6OExXNm1DZUk4SnVOS1B2dW5TT1A2X0t3SnY4MU1JMzNBdFhXM1pjREJPdDF5UmJxaEJkenlJUFB6X3B1UnlYZjlVUTUwNXVxWkFqcmFlZG1zaXM1eF94cW5SVGROX1R1Y1pfc2V4WjdIY1hlQWN5UGxhUllCUHpWU285eXphemJhZGY1SFFqT19xVDYwNGlTTUpweVUwMWhyRm9JZlkwdVNvb0dSRml2NXNBa1hxdDc3MVRXRzJKbktIMjBfd0R2VTJwLXBtbGZndWFOV2FPME1wS1B2ajluTjVkU1BjSzBJMjJPckViYmtuNWNTSzdXODNMbWhqM2Fzb25SUWExMmF6X1h1TDFlZkVhbW1Jb3ExU1ByQ01kN2p6Wm15Z0UydXZpRnMxaHdpbHlXLVEzUDVYcGttTFFReDduR0otQUZCVUItUmkyeEhTanJrVTZzN1JnTXRRR0FtOUZVbXdIbzBWUGdKNEN4cWNRV29jRlVTSVNzWlJHR3dqUFNpc0Vxc09qbWVXOEItSVQ3b05IZHg4ZTJjOXpXb1k1enYtTk1Ud0JPVm95WnNpQTIyekNJYWVPYVdBVDBUSVNqSDF3SG9aNEt6Z3RCSEkxT2dFRy1oZXU3SWNHVGV2UURKaS1RVV80YmZKRGJyeFZPdEZHYkZ4RjJZejAwSnE5UnlRbnNla1ZGVlVXTU1VWXNpNFBpSE9wNHdNbXZqZmdBZUs1S0tmQzV0MFFuY215NTFLLVVaanZiT1FXOWtXQnNzenMwMXdJTW5PY3NGeUx1MjhzYVlXNWc5VmRGZzZGTFVYaDRhYkY1NWllZGY2d1dCcGVPV2c4YlAteTV1MzFTNVMxcEd3d0xjRFFPQ1M1WUVqOEF1dkFkU3pzTkdVQk00Rmx3WXIwdGZwY2lKcEY5eGdGUkxYblVPZENEbDNWbVVRUy1zWmNHbHZONU96bFEzSmMtSGVibFpLRVg1cm91RTg0bUxJT25kSHByS19zRFdSMFFoam5ZN0lyazl1YU1pZzllUHJNODJrN1hlbF9UM09HRVkzMU9EZm02dTd5TTZfSG1UODlkWXp1dWlIclpIcmJHLUJYZVpsb1NuNXdBWmpYV0ZLeDFtRGd0aHhlVHZTNW9OdU93MUFCS3JhVHI2WkpuUGdpS2hDbjdORmZNQlM4bzc4QWVmeVNDVVQ2M1dJbUVqaHBxTHlIUnEwVWRPbmZhNjBVWTM1dUtEenE2b1Z4bkxuUWVRYUNwbGZrUW9na3dMV0plenVpV0Vqbzh2YWhkYjdYblVCazFmWmJVUXRPMVB0ZWJDclpZSDRBVjJRMVFIdEdhYXlhUHVGczc3a2QxbWZYc3dheFhxVHVORXYxNlEycG8wcFBqNkZIVUVCSDJzWEdPaS1DUmxFQVB5QUp2VjM1ajFiSko2cXVIMllnSUs0UG92MExNWG5BamN1TGxtbm1IR094ZEtMNzVPa0ZLSlZlQVcxX2lxekxRd0pjMVZuYUg0MnIwenpnTnF4N0JhT1hkTXNKR2dOWnRHS2lLcmhRcC0zeFRMXzFFSGRoNWJoRG4yY1E1anpzSGsyam4xZmxkNWZSU19la3RsZEJibzZZX0RhMi1pSFNJLVcwczBockZJVWhiUUhGd01IeGpSUzd5RVZZc3k2NVliNjRpSjl1RFpwYXg2QnVxZEN3WFlRNXByMFhrYlVpUFc3c2N6aEpfa0N5ek9CYXFMckpJZGRRM25QSVlNeEhwZVZiVjh0S29XOFQ3OXN2SEVjcUczSV83QTM4dDNxcWQtQWNCY19LdkllSFFGc0FvdnRKX0pFT01NeDVHdFdqUndYazFUdkxvT2lUbFdUU3B0Q1ppeTdOb1p2bmNzU1BiMlJPLTF1T1JsdnVGenJjTWNFcXBiWE5tWnJaMC1tYjVmVkdzQ2pGWHNSemplZmlxQmozOUstZnNsLUdHOUl2NE5xSnV5QmhtWXFaU050bDM1ZWE1T2RncnZTcDA4MlNoV1VUdHBPRXNfVTZhXzV6cXRTbmFpRVFBb09CTlp2SE5FNnRSZVVlQUxGRkw4cHdOeVN4UmRkdm93dWliNmxCWW1QS1EzNjJxTkZwbW1TU0dtZXBXR2dOcDV5MHBWdW1wUjJIa1V1ZkM3b25YV2Jjb2tCYjVNdHh0TGxYNkNtckJpeVB2MkxubmlaV3hQd0JJSHMwQ2xudjN5dWFWNlgtMmgwbGdmWTl3Mm1WelVNTEF1VmVkdDNpbjJndnlWaEVIMmJOLTRfekFNb044eFlfT0NZTFFOM1VHVVpHSnI3cW4zMnd1WldRSXpSYmdhNTlzWDFCUTA2TllrV2ZrLUlZUXR4Zmx2MndHa1Q3MTFmMUw4S2hfM1dKamtmZWlxaXBYT2pYaEFkTzludnFuQ1RDN1diS2hzN2dpdWtyc25mSUY2dUtOeHdXVm5zRUVmN0FiS1ItNW9lNU5GUmZuWmthaU14b2E4d0pYNEF2akl4WWJCNU5XTEF2dHRLMGxPNHNKZFFqemdSQnlGcmZ3dmNOV2RkY3lrNlVJSkdtRDFFOV9QQ05ueXFTZU9rdkFUajlld3RWZGlGT3d3ekpRWmNGZU5VS0p6YjJkZklmZXNHMjVxMGc5RWZVMDdidkhIX0M1ME9zUmxnaUZGQjV3ZE5GQ0dfaEh0bGtTekZkRXBOUjlDbzQxV0M0MlBtZzMyWDdXYl9kYUhkNFRKR0NxWnVLV3FRMlJXQjhESUNWMmFMQ1VyM08zMTZVZVZwdndIcms0Z1hpNEhGRzVYWDNqT0RVbmg1azVSTi03RElvb1NRUmhOeDJ5d25fX0p0bDQzY0s1RERqN1VGbjFpdlBpVkw0VW1fdXVoajZWZ3lFc3RkVFVma2RVWkY2TExQbVgxeDYwZ3llN1RRcVRiTk0xdzdIelZBNWxVYmNVZjNsM3pBSFYxai1BaXBWem9vV2w4VWpQV1JwTWdFSkZlbDg3OXJ4WHlpMHpuOC1FakhaN09Qd1JSR194UkZDTnp4R2c4NXl0MWhaQWlmemUyN1NlZ3ROdkRpXzU4cWxpSTFOWXhqdVdjaTVBcG9hcHEtbXZFQzdKN3I0S3BvVjBFenJ6WURIdnhkQklidlVnYWtqemJRdXVSOEpnN3V0aVRhaUtQWTQxZVVKcVgxd1VLSnEtV2dnRDFFTVZfM21BbUc2dDg2SVdtMFdIWTNjd2hYY3RIOFFlZ3pVSlJtLXQyUlVzTmtVWDNkcVlGZWxHXzNGa2x4X180UmVMeTVXNTY0U2NiczloVUt6NnBuZ2RQcHFRTktoZlBjbTB0OHAxSC1JOHVZUGh5dnFlQTE3WE5KVVNMTGp6enpXMnEweGNNX0VwUWJPVGhLeUZ3cFJNSjFfM3h6Y2pTdHBZY2c3bHI4UzFuM08xYWxoZHJiNlJGeHo5aFM2ZXJyWk9TamdIS1FrYXIzQjZiNmxyVlYtOHI1SEEwV3NUOE82MC1IakRSZlNDS1FLZDEwU2Z3eHBnQkM0bHhZdnQ5Rzc3S0xBOEV6cFdJcVM3R0UzYWNYUGJYYnk2X2FnWG9YYXBYa0p6bk14QTR2bDlhczlnRlJZdzVLQjI4eXNmOVQxQjVtY0tqc3JzYlY5cDZsY0t2cGVMNS13WmVCck5zRkxsTC02UUxuMFhkQmgxSDZUalQyLVBObWNSRkJQOGtULWp2dUI5YjRoWHF5Q1lIVDNTZ21VMnZLZWlSZ0VxUGpYbDNZUG9XUi1lbzRPZFU2ZWhyclZPSzVMbTEtSDBucTVvUEJuNEVPN29rckIxcVlnbkR5UFNKYk9mTk42dTlTLTBDQ2ZxN3hGQXQyaVFRbjZpN2RWZnRJeE9jU1YyYlFVdW80dV9DZ29PZGxTWnpiQWZSbzZrLXRJS1UwbnVQTWtUdTFBaEVzcEdZcGs5SmVQbzR0R1J2cTJrdnp5dGhablZEcm9ZeFFGcnF0bjJySmg3LUlGZnNnUXBSSjBaWnJLaGxQVjgwRVFZOWJmenlydUVkSzRxMHpwZVJ4U3ZnVlF2cTRSNl9DTHl6VnZkbDMzbjR5T0lEVDBwam1NMnJUUzNiOVo1NnFsM1J0b1liZnM2V21jQWQyd3NaaG5Wc255VWRZb2hkMXByX09HMjNkQVBkZDNFd2FkZ3RIX2p6bXhfY0ZNYkM2by13S3prQ011RFN6UHNXVExMT2Q0a0dDajBjZDMtcFhBNDNoZWVTZm00SFlzTjBKWmRiR3NtTzBqa3hVTGdtWUtESkIxVzFNY25TYVZoVHRtWDVReDdhT1VRRW5UQVo0UXBDd2ZEeUJfS2hScWZNWXFXemM3RUthSFRtcTlRVGVsb3RSSDFiVnR5UTlqbjQwLWd5dEdKMVQ4bWNvRHNPbGVndE9POHJVUmthQjE3LTVvVXJYc1FHSjl6MnQtemk5TmVlRzMxRjk1S2RvNGEyaUJTUVVzSTFSUVNWZ3ozaUN4M0ZUUlNJb2NPbkc4V2pocU83Ym00QVhsOUhDd3VKeElpazNVQ3d2TGQ2UUpuQUNUS3FLeGZJSzROb0pUdlRBeG5qTF9sQXJlcTdjdDdiMl9XWmJoMmotNVktTVdxMlVya2hxZjFxS2dpWTRIb3g4TTBUVU9iNnJvTE9PbjVQQnNmWW1wZ2dwVExqWk91SVlPVWZRNVJDZV9DUVJVNVZkRWVPYmctM093UGxRTFAyalFDelJiQWpRR3J6bmEtSGRzSHFPVGtHbllMUWVzVFFTNUZMNDBCb1VSckowZXZGVkMwQ3gtY2xmUzFVbjE3YlVCWFB2Z3F3a01rZ25rbFhQdVBNWExQamJJMXN5cDBDaHFnRWxhajZjLXdkTzdPLXdtcENJY01ZN284WU9VYmd4d1BPR25yZ1NqQXl6dDVpek9taUxWdEx1MDNDQXZPcEhjalNNNDItRFlhQXhjOFJQYWpRMTVxQ25mYUpYUWtDOHlQTXU3U2xhc3ZXbUEtWk1GMnhNWUd3Z01Icnp3TDNtRlVjeHE0Y2tWLTEtZmx3bzdYbW5aU2JzSllzSDI1LW1mdTk5Qzk5ZDZ1djhkVUlDZlJtYl9BS21PZ3R1UFNTOTVkdy1iU0NoZzhkT1VwbEdQUlJBZGFra1pxWnREdTdXM09pX1pncGk0eENCdUZ0d1M0aTgyU3BNcV9SaUFFM0xJdG0taVR0RF9MQzFnZFAwWm41NWxQVGdyam9FWHV2a254ZFFiY1dQMWwxZ0R6cVgyckNCVlRidWlMZFl3bkUxaTZfY0lIbWtlazF4Umk1TGlmNm1uVnE0VV9Sdk5BMUlXMklHbTZTMEN5emYxdk5fTWhLX1E4UHFBTWpTQzYzY3h3dGQtQVVGZ002UExUbVFMelkwSjVrYXJaOWZsMUhUQ3VaMTdfdm9YQlk5N1hGWDlUbVdnYVFDeWJQN0puUWdhNDFVbGhtaVp2RUU4SXpMTktLNjNOOC0yNnVEbktZU09mOGhCblludzJBNGx5dEFhZzdybkgzQUthSU02aTUzMG9NcTdRTERpSzNyM3QyOHlGRUl2dFJZcDVrMk40UEhmaG1FWnp4RlBaYlc2YnRIMlJKQU5tMVlkNzlqRXVZWlgtM2lTZUxEd045ZGpBejFCYUV0czVyTlJ3WG9rQXFVMXkwN2lWLWg0Y09jMXZxeDRuRzRQRVNrUWt2eDVEbGd4TlNIck9FUnFpUlprdWJ2SUlVVG5kNEVpc2hfMGhXLUVCcE1sMUFRcjlhYWp2eHNsVVd3OUoyWFV4V25wTGdUbW05dl9zRmVmREtBNUV1ZmhreS15NEYwWmMxVDFJVFRSSmlPMmowSWZEbThYZUszVFJKdTI3VDBSQUxFRTBsaDRzZ3J6MXB2ZmFDX3UydzM4NDZwTVdNd2JlUlZnWFVBODVJeU5LV3AxZTBjcmhSX2VCMUtYLVVPSnp6Z0NONWRuZnJDMV9VM2haZ2RMMnpkYmhsR3pYT3Z4OTFIcjRpX1JTamJyZXEwcExzcXFPRkRqMzRvS1NOUXh0TW1TRU1tbm1LWHkyZ3VXUExNcDlUR1p4YUwzbWdTTXFpYzgtMnVNQlVGWnZSSWRCSHFXUDMtbnNRRGVUODAtQ2JSUzlJeDdraTBoWTdxQlpXQVJlSUM5dEpfWnBJYnM0MG5FWTRNc2kxRlVGQV9RZ2d1SG41Y1dDOW5weUVCSGlrMTROdnFFU01nRmNpVEtYUWR4cUE1ajViZlhta1dyMm51RWpycElra1JqOXhDOUt0QkJHd2J1cDZxaS13ZWQ3QjZ6bFZfb1k1SzZyVU14Zjl3OXJVODMxMlRvRGJEcVh3R0FScVNnTUthbWxsRzNQaWMteTIxYUhyeTlCd0hfSzZHMVZxZkI4TW8wV2RDT3BaZFMtZDdYaU1hZWJPajdVRUtQVHBiVnl1UWRqa051M20xa1AzTTNvWmVwb3QwS29FZzNQa3M1NjNoak9Qc3ZHV2o1TTRjT1E2czBTZGZjNjM1Q3NSTHF1SWNqZ3RlT1JjamZWTUg3Z3lVVDFSbEZZMlNDTlVqV3EtSnRSRmpBdXVqeEZDV0xvdVVDLW5STWQwbUtNM0dJcTdFdHVKa2YtT0Nyc2hITXlqN1prdkkwQlhrY3hyVjZoZHdlLTdwczh5MDZ5clhwLU9FSnFlMmdhLThEUzNnT0hyWmpjNDNHV3E2NExjMWJWcmlMTnJFYVItZzRrZVo2aXBCMjRqcmkwTF9ISVF3eXgzVTJGZkJYVUI0X0M3ZDYzY1g3VVN5VE1jUkFsT2lxVUQwS08tQjVnWEoxVml4aTR4SDdJeHRoanNkQ3lDRjBuWDBRSmtFSl9TbzNHMHlJUXRXT1RZX09YbDY3Ym8yTHI0MlFQWWlyM0xQRWRHUDJDSTNzdzEwOTNvRHRIVkJUNWtTaTRDd1JwQnRJZ0RvNUJKQ2hlMURyQ0QxR0hyLW5STHA3NHVMbmItV0pDMm94SjBFRUJaVWE3T3V6LXVZVnpTT0VhNVJmOXV3di1lZ1VUM1RhWHRFMUtKc0paMHNqbWN0VGlUTDY4ejVCU3RHSlNRN2NTR0RiU0hEcFNtUGJaY1NOaTN1UXJCdXMzS2RvZWtFZjk0bl9GdnNUWEV5OVJkUEtvUmZaS29hU296MHBwVjJoRm5oZERjVElEanR0UldfQ2cxdlRFaTI1NzhibXRXTlI5b05TZ053RGpMRkI3VGF2UzNpTDZzWTdSSXlCT2hSdno3NFY3aVQteGQ4dFN6UkpweVNRdUZ1cHJmNTE0WFZaM2Q1c3ZzV0tabXJQYUNqRDlycU9qTEVoRTNKU2RUdm5FRi1ZNWx1RktCYXhNQTZnemVqVjNxTGNDZWdTR0dLVkk0Q3ZRRXRIcUdMMUpHNDViUHRJVWtrLU1yaUpWdFVJSDBHZWE1X1NPcjc5aGxSVG5vUGs3UG0ycFVxeVNJaXNNTU1aQWh3Q0U5bDNDOGVZdGhPMk1haHp6TFpQR1d6LW9OT1I5a1F0djRmVjVINkY3TTA3NEc2R0RRRDh3R0Vkb2pjemxmcEpERktHUEZJMFZQSjBPd19pbHVfWU9IbnJDMTZUTkQ2VDd3RG9TMWFxR1YzblJjVGpENjhGeEVUS3UtczB5QXNWdzc5QkViQ3RrOGtHVGY1VVpPMGxQVHRBQW1CUm5lOUtvU1ZVM3M5UFFRNkZOMnV0WUhlcmQwVVBTcW8tTm0tSm1ROGZNSmEzNzE1NmdtR2Rxd28xNTQtNzZvMmdvOGZQOEQtMUtRWVVWWmkydU5VLUVjWWdFR0ZOdTJLTzR3cGJjQTZrSUlRTmFDN2haVWs0LWJtbURPdEFwMUR2ZzNOb3FHRzJESzg4NFpDNlRweGF1UXBjOXRtMExkSVJOTGhURkw0NS1wN0tDc2FWZ3J1OEk1LUZVT1NFMkZQRjFkSDZzSEFpRlUtY0RxN2tydmxUM01ZS2VyMDJwbXIyUXZoaUp0ODBHaEdxMkpzcEdMLW94NHhmSXd2b2tJXzhtLXcyNUsxdkdJQXBzcFdXNEFxOTBzaGRKUkF4bHZSaE1EemlVVzQyNmJYWTlZSURQWDRWNHpaaXJ0eElTejJLQURfc3VDcmo5MWYyRW1xWU51MFJIMjRGYXNLQVhtX0xILWlBTFZlQ0hpcks1TTdWdlhPc1oxdkJsaUlaZ3g5bk1pSWZLYlJXYjVVdElGblpLVzVnR0ZWeTlJNEVGQjUtaDlLYmx6T3NlTFZLSS1NNkxlY1lrVEJjRFduSmdpQk1WLWhVZThqNGthSTRNY3ljQjNfVHFmOXRQNkt0TWtfckNKRUdVR01nU2JxeTlNdkFtNXlZU2dRcXU5bXk5RHVmSEV6RjF4MnhMYWgxYnk1aWtqQ0VPNXBtY0RiQ21qUVA1YWVPejBxaWxWNDhfdUE3eUhvTDdNZjZsZHNSVGNVb1pXZEwyS0dDbnV3NWU3ck95SmV0NG9tTjZZbjgzN2lZRUU1Y0hsZXlvem9vU2tQMDNacDZHcDYycVBUcWtPbkpZOFZRVFVPeEZ4VHFXMC0xazBrc1k1Vkl5VWxUOXlodTVQN1dWZ0dRZ24ycHFDZFNJU1RYSUZtdnU0Vmc5Y3p2Q0ZLUGVsNVJwcS03TUFtanRfMUw0X1NBc0NhdUU1V1ZjNF9uU1NpWGVhLVExV0lnRXk3M2hvQVhjUEJJVEdUVUwtV3pOVnNYNnRWUmh3Tnp2RjhLTmNoaEItZmlUdUo5ckhFbDFGaEhpdkdVVmZHNHRTRWNWV3F3VmdXQVdUZmJpY0d3RzRDRFNkamNodG9ZOVJZRGVDUTFqWnE1RGM1NUJXeVl0RkJjSnJ4WkpVUmVmQmlpQ2Q2UENaUFM0R1pQdHNNVEpHT3ZJY3g4Z2FsTWg4a2FGM0lqV1c5eWFpM3FjOHVacTNJN2liTlpTQnh6TEhpdE9qNTdWdjA4bzRNamRnOXJ6RDB4dXU3LUxRQ2p2MEVzX19uSGxHdVhFLXY5WHJoVFpBdldianNGcTFXX25CdHR6bXBoMDBjc1QycGR4QlZaX1N6Rk1kdHBZVTN5Umo4bWlTZDNSRmZJTm9uUmhSMEF6aERfVURINjlPNHo4d3ZMQXoyel9HWjdLNHRFelc5VUllNURqalMyVnZKaE04Zjg0UmZjUWtFd3VfQm41RFlZVnRsQzR4U0pJTTFRRmJuNnNEQk9CZkNjSzI4UmppbndmeFQtcnYyMHRRTGRFTVQ5MkRaVGdvU1M5Um5nV1NYYXl5UVVZYzllREx3Y3NXcnhBUENNSVltQ08ydGRIcUZQZ05HU0M4OTdIMlVIcGJRckRwNFlkZUl5YkRuN1ZGWUhsR3F0eWdTMzBaMkZQcjRUWjR0Q3dHN1oyNGtwVUZDcHdlNldINTJIcXdSZGNYVHBvM21EMzZTRWdXbThpRlZETzVBZ0d3S3piU2pGZXlsSEZDYW5NeExBb1N0Z0FCdnF1NEowUXRlc05yeTBPNlpLaG9MV2czUk80dkF5aDFuUjctUXV1M08wT2hfdzdDLXZSUXZvTjlEYjNtS1lnVkVoSDZUVS12LUh4OTFxM2pHazd3NU9MNUxpZFA2QjI2eEUyd2tKOS1ldko1SGRJaG5XU1I5UWlxWHZsbU40c3BaWk83TDlkeFZmbjY3NjBVd3FsWVc0WVBSMXh2emhXNFhVREYyNHF2QXFveDNEMDBPUkdETXZ5NTk0WGpoNmN5VXZvM3k1TlZkamI2S1hRVjd0Ym9GQ1RnaGdTRHhMX2x5ZnYwME1UemVvVU9IcU9COFN4ZWZEYWV3R2NNaGo1WHI5WE0tMW5OUE5sdzZTRlR1bDZ5LWRXbnY5M0RCZWNQQ0J5bVV2UE9DT1loM2FkaUljM2tVNDY5b1FaTkFzSjgtcVJ4ZUZwN1hFeDhUSFZEeFh1SUw1RV95TVE4cmtyUEpHOEx4WGRHWkxKOG84NnpFcUdQNndzMVpDZEtiMDB4Mm9tQnRLbHpDU0pfbVpqQ3kwZWxQdHotZmJ3eTF4NzgweG5vbnkwUi1WRGFfeE54TWRsMS1QMDZyM2U3Tk1aSkJuT2FUck10aGtiSU9uRXd3SVZGWTJMcUV2TkhLYXVpVm9vWEdyNW5pZTdHWjVaXzYxdWJBZzAtakJvREtWd1NOOHd1Y3NqdU9lVVQ1YXc4SXpQX1JfekdNaVg4azhOZTYzWFR6ZlRyZDFxNFUtcGRsdUNBTHlPc1RsYXVNaFZEd2VfbVNSLU5FTGJGaUtTcjlaNUs1QjFWOG9UdWlIcGMwV1JaUFhNOVBUMTdUd25LU2FUa1lvRkotVmEzT3c5QWRmV21NbHZibEdRYW1jMXVfY2xwSF9xX01LR0R0RjBKaV9fYTdOUFlOREEzbEpULTA5cGxjY1FhcjhPWEQ3WFp3Qzg4NEVJRXlGTXgzbGFDUS1IbG1oaEo3ZXVVWUhPc1A2MVI5REY3bGx3RjVzWWdUOUN6amtySUpHRnJMOXBWSHhZY3laTHZJeTBzR3FuUHBvVElTSWZoSjVuYVJPdXRPbTRhUlNOay1VaHpTQWdrbW4xMU4tM1JYeFh4NDZDc2dVZ3FyZ1I4WmxEWVFOQ0JteVVYcEhGZ3B2b0NpaG5kMDBSXzJhdy14aWsyRGV3a3ZYandDamc2bFBEVWJfQlBNeHEwLTJ1TThSM0hQRFRrU2psNlE3V1ZpZmlueW03Y1VaUHI0aHZXRmRFdzBzR254M1p3VXVVUVVMbHNrejlCT2ZqekZEQ2R5M3lHVmJFVlFtZDRfRzlvamxqMGlVUG0yalN5NWQ2TFVfVDgxRUVyTFBRc0hkR0NEM3B3NnM3Yll3SkR3QlVwX3FzX2lGZlpzd2Z3bFlnR0xlRWlLa2ZRa3J1aHBBOXlmVjhETmhvZ3R0VzJjM1JQZFNOZTgtMXUwb044ZFdwa0dyNVc2ZGhWLXJjWnBEUDZIMFZ1SnBQaTVqT09oazJxVTYxakl4NVZJeVhhYWJyNmJTRmNxNHlESTJnUk0zRXh5ckM5SUJSazluSG82MGRUQV9ZMFF3LW42TVlEb1FGdEtxYTN4bi1JNllrSEJzZEJYUFRwdGVHUTlxZ3NSZFVlMzh0NWNPZDE5dTdkdjRFYWM0clV0S1lHa2lvMUNvcG5NSXAza3pnMzlwY0xJV29PYmVlY1JPUTRjVlc4MnNWeng0Zm16bVBuSWt1V1Q3bDI1SUhGanBQQzdYd0RfMlpwZnZjdHhrQnk5cWpzR2xLdDdaZFFFTUoyN3hYSzJFbF9YTWdKNEtCQ0R4OEZuRkE4dzRPZU02LXN5Q2F5cjN1amZzdWplUDVLYl81RkVWdl95TkZZcTRkNklubGxtOUstZDZyR251WjlxV281UEs4Ym14Zmt3RjNhTEtuWngtYnVEREJOTHBnQUxVWFJvNi1pcTRWWXFCekZXOGRYeE56SGNxeEJrYlp0bndfY3dsWmFtM2EwZUg0alZIYnpyX2ZZUm5VQU5FVWRKeFhGNzR3SVJEeTVMRjA0WVpnOFFZNVhDRU9ROERySDQzalI2dlBXYV9XcmgzZ2kyeDkxcEdTYVFQUC1mZWVBX29TMkJjaUg0NHdoWkVrQ0NFN3NxaFQ2Rml4RmJkM2t4cmZqN18yRmgxdjVaMy1yaG9KbFJCSkh4bTRJY1BTcHpmWTZYTm13VjhqS0k5ZGFVdWFGbjZqcy1zMno2VGVZVVVSb2s3MDRzV3VqamhHSUxtTnU4X2JhRlRmME1vN2t1R1AwcHVXaWQ3dUt1VHVORjFEQ09lQ0ljenZXcno3bE9NRzF0WkNfQTV2dXJQVjBuNzhPVXFIaU1qdV9QdWN3T0U3UlJ1bklmMWRUQ1ZQeFZrcXNucHRnZlMyUGhzU0RSZG54d2cxdnlKN3VVZ3gzUGZkaVVlRkxRNS01Ui1KekhWSG5HMVZFVl9qWWJkTGFyY00zR3E3SnJLdWdLUFhQa3piM1hCRHBUUU82aHhKT29Hc0xhdVZaSUhNSWVQUk9pdWRuWnJfc2Vhcl80a2Rla2dBdy00VXFpR2N2RUh3WEpEX2otZ0dWTUF5Rk5kNXVRczZ1RTlOUU52c3FBYnR3aWpRQmI0NjkzVzVrWkE3eFBtWGxocVFOcm9QUUFsVThqRm81WVpyU1FkT09mdnRpYmMwTm5TbnJESE45TU9xTDA0WnJfUmoyb3ZnTnllb21zSkFqS0tmUEEwNUlBS3FEdmhGNVNLNXJLVklyOGt3bHVwSnllS1c5Z1kyUS1vcURqNm45Z0ppNVJWUXRBWTViaTAzYjhkTy15VUQ2c01PQU1BVlEweFlNc0NaY3RrWXA2aUNacHgzZExCTUNTR0tWWjF6OWU3Um1hTm8tU2RHN3NFcV9fblM2cFBNbU92aGl2bnRKSGZIZ2VQMEI1VFh4ZC03dGJ4aTZGZUp3R3drR2pDeFZnaWtRVWwwZ0JrbTNHUFdaUUMzaXdfc0dsdGtXUDN6ZmJvRzQ2TERpM3kyOGZhejk4dExuUDdHSVdiZ2dYMllfdWtrcElPVW1DdWFWQXkzYVlGMkpZTGREUXlLZ2c2TVhtU1NrYWdQNHRoUHB3M29KMTZxeE1hRjFYV3BQT1FJbVJyS0N3eWtIOThleTc4a1VRUUhxdmtraThNZDBxMkI2SVBSc2lPejZRS2xRelZkSmNJc2NvRHlYWktSUnRqR1lqc25Zb1ZQdl9GYUNRVG5pcGxGV18tT1pyX2s2ODFHbHVIZGtuZHZSYjJJaVFwZnZvZHNoYkNZMFZYUHh5OGI5M0xNT1lJVGR1Qy1hMWFaQTRtQmMyMU10YVZuVHZqM2wxZ1U5UGh2ZjBIVVhDVXlGZk10UXlfNkFpVFkzaWxUVzdFWDF2X1dOY3N1NHdQTDFJOGxvV0p6ZEtoQUtqZVg4TUkyeFpSREdNYmM1bTgtY2ViYmk3dzlYQXhYWk9vaXBKSUlUVTR4X3ZBTDV0eWl3bUI0eHlqVW1NLXItQzR5X28zLUZKNVlDaHUzU3RkQVpLM2FScVoyYnpHX21kWHI1elZDdDZPdnRNVVlianlkMlRNbFpNallOcEpkNmdYa1hwc3pRU1RFY202XzUyN2Y4eGgxVHRESmh6TXhrNHI4N0oyYmV6eTM5c0s5VE43Z1k3NjBGbVpsb1lmajZRNW9KbXV3VlJPSXRsbHJoc2JMZFJLSWhLNXN4Z1Vic2l4U3BMd0p2YTZHdTk0TmJDb0NSTUtSall3LTF4NXJnc0UtOVdDbnN3QlN0aU9KYXR6cEpQV1Q5LVk1bnVQTkFTWUQ5M0hmcXJJZTFwQTdwZkNadENmcEZEUXlKWElQdGFwVlZaU2dfUmlnTUNrXzlJOE43T2VTVmlENEY1X241cmZxV2dYSlpCNy1vMEM1X3BEeTdMYm9zU0dMeThQRkZKNHpYV19pMzVCd2JubFoxeGdHTGxpWjZ2dXN0RVRSWllpS1B0UnluWFJweTZienZiSUZUdGh4YmtNRmF2QzU4c2FMdERseGJMYl9ISS1Ud2UzTm1paW8tV1hfMWsyR3UzSk5MUUlrZ0R5QTBKZlVURHRfb2ZvTTBuS2lhNGtWZWQ3Umx3UGtXbi1ScHZESkI4c0FXWVFhTVdBLUlid01yTHJpNVhtcXhZNkdqdGplN0xxd2kzWDBMSDBWY0FVdW5hWWdQVjV6WWh3clltMGpTZnVBX25QbkMzVEtST0NQX29pX0dsckw2T1NweFpFWW9SQTFzMkl0d3JYVHdpXzVOX2Q0OF9QY1ItbHpfTUdGWXFPSXJQVFA4Vk1zRk9QV2xxaDRsWnZSb25vWDNQM25fQUVlVUp5WVIxUlBjU29lSHJBa3BOTHJHRnpmMnMwdlA1Ukl1VXN6ZkRGZW5jWXVxbUd3TDVBcGx5UjFGdVpXUzdyNDN5cVBkVG02Z2pkdFhFMVg4dTNONldsLThXVlE1QVRjUFVEdjltY1VUS010MmZQcUZYWTdkOTlLTWRsQ0s4UE1JZ0txQnNKMnZGVEs5V0xQR3poTEs0SVdxckEyN0RiZTBYa21KTUlhRzdBWlRZZHpuRGg4SkU3NkswU3ZvOG9iX280Wl9pdU9jZ1RWblozNXhHNEVIMTR0ckVyRFRRVlFsSloxZkFnRWtWSS1ZOXhtczVhWWIydnNxZ3QwbjJsT24xeWl2QWg4SjdmUHcwRXo1S3B2Nm13Ql9tNE9STDFUTDk1Q3YybmQxSENVWHFvWWZ2RFZXeUF2OXJzMExXZm1haDdPMGR5MVM3b2JqVUtjTHg2SXRja0FTU3ZNenFKOHBPZW9PQW92TFg0aGh3ZmNFT0VjSlc5dl92V1BMNU1YaUVGcVNMRHdVVmJPRDc3TWZ5a1NpZ0IxWXloSVkycXVnQVEyTWlGRUVuOUg1ZnBDMXBVU3BpdWc3RUZBeXZKdS1qaWpiRmo1eTNyOFJpeTFJeF9tM0pWUll5dnEtX1lCaGdhRFhyUGRRLVUyQ1Ywa3RZQjIwTDZwYzRuaFJDbzR1akluRWIyLUFDRjgxVDR3UmMzMlNPVHRhUUdIQ2llMmNPd2twby1GREFTUUs4UHNrSjlab3luVzQ1MTI0MVQzTDFTekhaMDJaS1Rxc285RjE2eWthZmFNcnBZeVlpRjJxUnFSS1BaUExEQlVUd2hobE9iSnlqLXJuSjZPZk5GN0U1SVNJbUxYekxEVEFONnFJQzJkejRyREs5QjZNb3l2d0NhZmx0V3V2a3JYemg1bkdlZm5DajhpeExLaUptOWlqMTJfcEE0OHBUWlB4X0N1a0pMd2ZjLS0wb1BxRnlDUlkyZ09fY0NETU5SV29qZzkxdS1yU3oyZFJZRW15VTZBODFyajU4OXlvTHBiUWNjZkdrVXYwTjFtVXN3cGp6QmNjdVh5TjF4YWg3UERhN05vR1ZOYnBINFJ5VE1VZ2JzMGhDU2J0bHVhOEpxRjBUMnVHamJzZWcycVRXQzdiQW45cEc5eFNIZTREenNjQ1cxTGhpaFV3UmpQLXJvV0F0VVdQZWNlMTVjQ2I0VWV5Ym8tUlpyRFV5dWxxSXpOc1VTRjRZbzlDMnh2Um1oVDZKWlRETjRjT251TmhnY25LaXJpdjNQOFpXRVNlQmltYVB0c09acEIyWVJvZHVNYnVoOWxyZkMzdEY2VlN3eVc2ZGlIZ0lOdGUyWGRkZkFNc25CVk9XVm41TnNkQjNPNVZzalRTNVhVLVdyR21XMGlCR3M2UUlwNXZEZW5DQ0VuYXJJZk51blI2d2lFenJmZDdwTnctZzNxanlJbXlkd1RRVGFBOTg5bVAtWWduNEdFcEJXR3B6UXZfMTUxZG5tVEdSc19VRjJfTURpeEpBV202UlVaaVRPZzRUY3YyUnVBdG5tVVdIMGxCaXp2SXZJOTZDVWZQa19Za0NCUjNBTzZsejNJX1ZnNEh0WUI2ZHY1X2FUaWRPcmpHQ3JjOEZSRVR1OHZyd1Azc0dtSVU1NlFIZWR2UmtWdXpmaWdRVnJLMUF2YVM3dGhVdGxUeUNuODhLUlpaMlV0bG5LSVdweUNaUzFjamYtTFhqcGIxamczR1BybGk5bFJCLWZsUUZoRlRVSkxIb2tCaE90U0lhcG9NX3Q0M3BnLUNmVFlvcGsxeFFuT3htVExXZmxjOC1iLVlHTjhEYzA0UmoweENFTjY1Z1dHdGdtdWp2ZEVBcklFSkw5ZVFwdkxXMVFJMFl4R0FEdjJrRTNLdzJpY0p5UlNmNEgtTkNMSElXVmZMa0dOcU43SUVIN056eElDZkFNZjVGeVZEN2dxTjJuVmplS3p3Mno2Mkh3UFFWZlU1VGFxRzZYaVVUR2JrdmN2VG5VVFdyaUc2SG5WSlV1WFd3cmR6MV9uQkw2ZFBEeXVDVEVhVXJJQnJPeld0WmpRLXA1emNUZXczcm9UeExrbjY1N0R3T3JJUEJvcjQ1WnFab3ktbDRlclQ3MHZ1VEtxTExrVjBzODhFRDNBcnJHdUcycUE3Q3JJMzFIWVozcjY2SnQ4OGw3TGNhM3lUZXpUVnJRMjZOTWRmcm5hVGc0b0ZmaTBlM2ZOcWV2Nnpfbk5PNUNHOTBTNlVoR1doZW5iT1RUam1HTVhmUmVPeU1lcUZqbnc5Y2FaN2c3Skluak1FakhhaURLcEE3a1U3R3MwY01NaGxUUklGbjZVNGhiTUllNDdCaG5GVkEwVjR4SnYxVkNYQ0FFSW5wR0N6U1JqWExlOGJIbzRWWVdScGNzNThFeFF0LV9TalU2UjJkeDV5ZDFhZlNncGpYWGMycWJmVl9NeUVJTXV3Yy0zSXNqYXRvcUl3Q1hSdUJRa0xQVk1UdzRMZXU2LVB6eUtKWDJBQ0lYVHpscG4teElDU05jT1pZZGpPRlR5SGpoSVN1UWhhZll5dm9DSUFFeWtnM0V4cDlVRkpvZjNMOGxkX1IwWVd0WVoweWdJbVFRcUplTnBEdnJ1V2cyNDhvbDVoNE9fWVM1YnlrYUI3LV9DcURGRzZJTGZXTEphbFI0X3p2X3VCQ0IzeEktcXhOZXNFdUZJRmlBSE9QaUs1ZF9oNkRIM0h2SXRmUEdFOUF2c3NFS0dQQ253NGFHanhSZmlpOHpkd1pGczhVN09FWHhlWU1IZW0wZGF0Q3FSWG9pVHpnSkc0N0RSb3NWTldJOGdRMmFheVBQOFBTZXVzeVg5YXNFSURmS04xYXBCdjVES3lYTEJJSlV4OGZNZXd1aGxrUHd2cjVvNHhfWUJUVjU2LThoNkUwbTIwNkI0ZzVRQzdwLWZTbFhQaGp2WmdDNDgyLS1nSWNWdGE2aG5pbktsZng1TnM2dFVac0VmOEE0RFpWWjZKMkRLQU54RVdyajhPQzlhNnFndjg0N0R4cTU5X1BoZ2lqZjY2S19FYjVFcWJndnBMM04zRXpIcHVoTkRDS3BTSnQzRkZLR0kxRXk1OHhoV01PaHgxY0Q1eDNHN2xNbWFNV1VFdk5jdEdTRlVYRE5jMm9FREhzR3VjdEhCMGU5a25LOElpTWNaLU9WTVFQRk0tS01WSnRiT2tvaDRYS1VhTjNTMm45VWVqN1JJRzRDVGFMNG5zem9WMW5vMERFMEhZUWtxbndxZzFKUmE3bzZFS2toLWlzWlo0N0FDZlpoUy1yVXB6RmZRUURycmNvQXA2MkpaV29yMG1VSzBvdERsa0s3OWtENTJxcTJMUmlHc29Ic3FXZ2gzdldkZHRGR1B6REhzNG9jSHY0X0E3TXdkRGVTRTJQX1ptbS0yVkhxcGJwc2ZIejJvZWg0b2NfcTMyWnVKYmNXTnZvblZSYURxN1JxLWVBM2FmMko5UUEwUVJ4ZXUtT1JKQWpyYmhmN3RFYWFCVTBoa0NTcVp3aHA2akJ5Z3pkcWtudUg2SDRDc1BuYzJsVzhpRE1XRlJILU9XNDB2RFRMUTl0SVRORzBpMDRVX1NMZEEyMDRuSmxRRF9LUG5tN3dHWWpQVjNBQTY4Znl4Ukw0ajhaYlM3SkdPc20xVHI5el9wdHY0aS01aUctXzU4alkwaXdrdzFkSUZzMkVYOVZQNkR4NTRFWHVyLXBjUVdTdlJYNEdHeFZfU3J2MWVfWkdkMDYxSVJCSlpEUVVfaG9wdDBSRVdPUUVlQ1piOUZGbUkxYTBxM21tekVWTUlaSUwySGk2NXF4UDRvaW00azRHS1BJZGNXd1dpLUlvUktzem9oUXl5dTBjRGJGRk1IaFhrTjU4c2RlbGR3YXQ4R19zMzNqYWFJY0ZBajlmX2VaaG92cFVFUTg3bEdZY3hFYWtHaXhHeEVqQVV4WkowcXVjcU4zX2tScTlVaEtYMjJPamlTY2lQWVBTVlJDcnV0eHJJRUJoM3pUSnBXS3FsZEpHUVZiX0Vpek9ONHJKYW9BYjFJTW5XalFSSFk3VmNmeE56d0hrRlhtejFEQi1jN2t0TVJVOEFCczZFNVFWVGYtSGFTR1REaTFENWMySUFYSzdNZmZEdXlWUi1IelVfa3R3N3NWQmhKT0RKYTRJSzFEbnZuVFpkRjBFenY1am43Y29TWl9CM3RKRnkyLVI1MjFCRDV5amZ3UUtHSHliMktia1lFRWVFT0tyal9qd3kyeEJQLXFPU2hPQ0g1MlVMUnFhcTJKWlphWk9WcEFsZU92UXUxS3dtaUVlSGR0RlpOY21oY1ZZTmd1Xy1YSmZRSTVmN3BwcmFUTzBQX0dPRHdiY2M2TnM0SG04djZta0U3N0VfUmI1Y1kwS3BLYWhaREZDQklISEdNLVFZQUtMS3Z1X3hua1lyZE4xaS1rU0JXa0cxdF9vVXZaMlBzbWM4cGU2LTBiZDdJV2ExQkRfQjBKdmFNYlNJYXE1SGwwS0ttS1NNcUZnMUNSSkZWeFNMeERkb2RYOW9qcXpWU1hRVzdMWGxjTWxPU2ZJTFg3NGpiQUpkUFBVcTJ1SHp4M3lwdXBENDBOQTd0M3VOYm5QQWdfeXlIVkdKTlQyeEhxSzFZeWxjYlpneEtaX09qX285TmxsSXlCdGROY2tCRXVlc0VYc09UVWNZb21sSElLbVp5NmE0Ym1CU1VGUHJGTmlsYWhfR1dfcVJiRi0wclFuZ2lyNFRUaVdWWUFKV3pwNUdZVXpWQTZFMTdZY0NfZXZjdmZTMXk2TzI3UWVMb2dWbm5nN1R2a0NxTi1Vc0FORVN2ZExfblVsZWZJdDJhZlZUREozeklvdU9IR1NZa2c0TVFPNEhfeVhGTlRPOVpXcDBydDhFeldNX1Jqb24xeE85ZEdPWjdwckhLdjUxZHRuV1l2QW9HQUJvQ2dvRGpWSDc5Z1VfQ1NyWDVzY3dlOWdKMFdDUTBxSlA1XzFkQ1Rydm10SEJyVFIxeFBaaEs2b1puSHBOWTJaNTRVRjlybzRzNks5LUs5VU9WV1M1UVg1b2ZNVTN4eHV4TG5jN2VTTDNUTVl1Zm8zTzZhUEIweGlqVnlCaWVzRGZKamRNeUhXLTFaRzQ2RUQxWkt0M0VFdDhQbXFvbDIzNzlNeEZ2MEVZaERSTmVRX2pWWV83anpOc2JoMzRZN2FNSlVnTGp2UnpRVHFxYklyV0QxQTJzanl1aGlUdDRTX1ZUUU9xQU9yd1NacmhEZVY1WUw4VzFfb2pvakkzbGh3RktzRXlBMFBkRVNIOVNubHJHanlVYkJUOHRneDR1RjJESFhhQktlZE9iZEJFem9uVUpxR21rV1VJaHdPSmVDZ3Y0NnlfY2NFUXhNdTFxR2I2U1c3V1Q1dHkzNHB4c2NQbUxwWUNQLU1hb19Pd0kwcmZFRGpxTHl1WDBjU2tkdnBOQlZqNWN0LXNiNGdsSHhrM0ZiTzdPdnhTakhkczQ1c0p6NUtPNm9mdnFDNlY5d0FYUWVFTnBid3dlU1VUWmN2TERwR3RXdW01Y0NWZlgyWUtLSi1kOXJMY21BTjU3TWp5UWdFUVFOMkx6eDliMEtJbndyR2djS0puYUlGdDBNY0RaNWFSSnFtYXJ5VHJzLXBIelI5RFE4dnpNdXlsSE8zZDZsaHBDZGlzanVpS25WUExaU2I1MWdCanllUVJOenJOUnhRWlRMOHZtbjV6NkxGc3llSDBMc25yWUJvblZTX3ZRUmw5TDd1U29EVVdhLXBwVkJ3NTgzQzM5cHhrYXBHSUJ0Nk1jN2JCX3RoeEE2dGJNN0JHWUhXTDEzendWVXlDdDRYajFWdml4VTZNOE55WHN1ZFM2cDdOcDNHWmpnNW5nSXA1UGxDZjA4aW93b0NJclBxaU9wOGMxMWxkLWVHTDY4UExMaDNfUTZIclNxQnY0di1ieGs0UjJWX0lnaVh1YTkwMjhpQnZtMlN2dm1vTEh2TmsyNkNrN29mbUFldU1XeElEU0JjTEFETWFJblZQNGhFVVBrUnEwTjFodjRHaHJ6OV9PUDc3TGdvUkdoWHJOR2hYVlctN3J5MUhQRm4tZFpSa0x4ZWoxd2V3d2FqN3dodWZJTmNIMTM4TGljcDU1dDBZMjRqWldEcVg0NmN4eGZveUdzc0F0YVB0YTZMdjZGNl9XRThTbDk5QkJnblhsZXZIc0k5SlJvSVpfSHgyR2UtZk9fQ0k2WFEtS0Jfd1BtNkZVemlOYmJDaUJpMGRiMm9vNlhkZi1JLTVkbldxYWJnTzRBTU5sM0t2dXB4YXNxVW1NVEpVOHZVTmpJRjBRRkRtQk5fXzVCQWJPYkIyVUJMVmxVekpKaTdHMDdGU2tsY1BpcnRvdDFyeFJPaE5uVmFOdzROd25YNkJyMnY4MmlqUjd5c2JBMVN6ajllZnRFbVhGV2FMRFlwR0p3Z3NHY2hsU1pEZUt2UTc3NDRHRjJqLUpER1lsR29VY3pHMjZheVhJYUw3V3ctMDY4YVRZbWlaaVlnRWFfemExRW9sTDJndmRoZEhnMEI0QklGTVJEMkdnUGVNdkh1N3NROHQ4a0k4eXNtLU16TG8tZy1pQmVwNlVwTEUzOGRMR19TaHBpd05KM2VyVEVtVkY5ME5qeFJGeEhRY19RNmpFVndhRTRCQkxneU1jQUVOOHcySFlpVEp3YnpncVg2VjlyS0VOdkxfV0FuYm5MWDg4eXVwU2FFeFBCakwyV1ZmNF9USXRSSHliYVRseWdXUWRfRzVnUXk2U1lYQmt4eUVOSzI0ckFvWlM3S2FzV1l4QjYxWUExbC1RbkFYT1Azd2kydXZtS0huNTRYTmNkVzA3Z01TOEhHWFFKNDNmdld1QmhrSF9paGUzUWVnNmtscVBrZ2ZyMThTRmFhVUUtSzBhNDhxQ1BGRnU4Ty1pc2NtS1ZzOGk5aXZ4a3JPVUxueGxveVhlaC1CQi02S1ZIRDVtZEZqZW85QzJTdjRKempFTXpyU3dBTlIxUlhjeUN0YlBHYUN3N0JJOGpEOTZmSG0wWE9NSWhTS1JjeG03TzFmQm1jN1pDZ0lBeDQxd2pqYTJidlRSSE95LU82M3h6U2F6a2RnLXBTdnRIalM5a2wxWUhVYlBoY2g2SWxNdWFHNTVlMUdpc1dmM0ZFcnZ6UnBybXl6cDVMWUl6aHlGU3dWSXhFR05TSkUzTHQ2NFoyNU1taXUwZzFQZnR6Ujg4NHVQNEk2VUFrcmtCOU83Y3FHZGZrQ25JRUxyOUNhTlVXQU41Nk53NWlueHZBVWpCMWFpRjJCcmlHd09YcFR2S3JqNVNBLWpwVmpyZWtHYmJ2ZEp1cjlFc2ZwaDFmNU53RTB3MUhWYVBwajBPd1JwRWY1UkdZYlVEWmR2V2JPRU5abFZGNWVVemREcGJ5RXJhQzlObng2eUlBejJrek13aTZ3WUJnY0I2NzBQZ29hRVRXRkdnc2RIRWxPcTFjam1POXA2VU9HVFJucXcyUWZLNjc5djBsNTRGNGxyVzl5UThTNk1JMllaazgxbG9PUzdQNXdRRG5CSmlOZTdOYVFJUTV0d2J1YjViNDl4Qmp4VmFCM2RjU2RKSDlxQXFlMERsRHdyeUF5Rk9paWdNcTgxSVFPcVZwNDFYVzFXRlhudFBrUHR1bUM4ZG9QVVBpalZEVnVCbXhtVVpUXzN2T0FibVplbDdqa3FsSDl6X25JX0pMTi01N2NxTm44SGUzNXVITnBYV2YxekNrcXZYUEI4bzhKd2F3SEM3Q1VRRWlqRDJLMFY0WFhFT0NIejJaR3pySzBiU1BJM3k1aS1oNDBCYW5ZYnNVb29BRHVoQnJEZ2xNWTZXQmxUdEJ3d2I3eXlCTmVTOWlvR19Xa0RFT0xjM09WeTVtUWhfQU5tY0dmdW1ZY0RRbnB2RV9xWHhBMW9UQzBJR3dlSGd0M1lxY0ktZ2J1dDEwRGd6UGw3VUQyRDJZRUZaVUZ4eXQ0Vy1HdnNKTFJtZzNmcVlPVHZXVFk0aW13NTVLQk14cHhKNG1sWGxtVVYteU9uQ3Flb2JucWVWS2xhMS1iR2NBNE5nZnFMcEdmODRfeGc5R2xTbkl1ZENYc0VHM0Q4X283bHluTkxyVF9QOXM5UlFFZEZyYl9rbnFsdXd6bDZoaDZ0RXByMUZRNjM0VzFyOTZ4Qi15WlZvaFBrdHozaDhCeVVvRXB1aUo1cEV1NjNSWUxqaFFjRmFIUmJSVGtqVDF0allQanlkYU1tZ0FVN3BOM09UM3lKRUdwMWpKakxLN3VKYndDVUl5X0gtYUpmZHdqY0l0eVdLRGpyZEJZa2pIMHgwZlBKVlVjWnJra0I0YWdudk14OFhDd3pjQk5tcFZ1UUZhTE1taHp6eDRTcThNYUpFQ1d1V05JYXlUZmpZbnUtYnlEd0t1aWtiZExZV1FGeDhBRk9YOU9LQmNYcHN2ZjNWazF0LVJVNExzTGVvWXFFbFlZUUlfQlZNQ2Fvd01hSHBrbjhRUDJFWmNxUTY0OHJjWUVmcFhRNUowdFB6TUZfN2hQdi10c3VCZlpHQ2lwVXRNamRJa09uS1hRQmN0RHlIcHVfUHd3X3ZkTmtQNTc2OFFDbmU2aEMyaHlLSHRsSUhxeTg1Q0V5MThxbnl5dTVkcmhvVUxLVW9hcHh4X0JpRVJNeUE1d0xaQ0xJOTdNOUFEaGN0bFZIR292cVJWa254SHdSek5DbEI3MU40RW5xeGJYUFhmX2dHdnZwUTNCZzJ5VUx2LU1XUWZGNURyWi1scGJ1ZzZ1X1BIU1UyRklWMTJlallfM1V3ZGxuVG83WG5NRlhTZlpSaEY1akNxZ3BCNlVfM2FWQWtPZlJnR0VJQnJLOW5HZV92c01FNkJ3WjM1SkRhNXRYc0FjeTVFbGtwTllWeTMxNWlhOEJ2Q083OEdrZ3VucG1CU3JMUVdlZDRrVll6dWFCOXdPMlBuWk11Yi1sdTROQmhSREs5cllwUnZjUWpUX2xSZVY3RWVJeHRDMHdMTnRiLU4tb1NwUG14eG1NUzdXSnRzb2lQaFo1Mi0ycndDRURjRW5heUZoeVl4T05BbjItMm92Qkw2ZGtqeWhNaHViaDFlVjFoOExJNXpzU3ptZVp6X3hySzctR25LZG1TNU5WQ0ViSFpCbDY5LS1INFNwNVpxNGljZzk2WEIwdGlGdWJub1M1d2cwclpuUGNrM2MydDh4ZWpmbGNtZDJoTWVKNE5Ka2NJMFBxV25TLS1WTjEtdHVFYy01SzJvUGFZeEJkWXhRVkZQYVhEdXBmWG8xcmFzLVllSTdzOEN0eEx4SE80eWJhV1pvcXBscEVieTZpdGhSY0xmR2N1dWVEVjRlVEJHckZKa3RqQlRVcThwUmx2MXlfaDNkRk5CRnl2SVliRER2SDF1aHp5Z2huNlBaTzItUVMwYVpLdGhDVnFZdklHakZrWmdsNnhHZDE3b2Roa1RfWmt6bUg4ZllWanRGanRlc2EzQklIOHhDWDdXekk3OU5IQmNaRU1PaERJUVI1QTAyTy1rNWJoVkljcDlGNXBENkRHa1RUNm01S3htaEE0QWhmdHh2dThFeGEwSWpNR1AtNmRCU3kwbmxzUU5lOXpDaUZfMlNRYW1QWm9SNFRBdFZFWkw5NkJBSVJEZXRraE50aVFhWktKNGhhUTdnLV9xWW4zbUZXWlY2ZDVGZTRFX0NiWmpWSnc3OUxIU3RtcEIwVVN1bVhaaHVoS0JGMkpMaWFycUlxSkd4NVJ0ei11VHRnZlVJNmo2bHQxZG1xSDVOdXN6ZFZlSlVodjNJaGJIck9zUEZCUkJSM0dVY1ZENENsVmxaOE90QWtlY2RVMW0zTTdrVU1SZ3NrMmRuU0pBTjAzUXFCUk9kLXlrUFlDNVdYd1F6VjdBbEhaU0o1cnh2WHQtT01LVm5jdnJQMDExOW4xQXZOZTRkWGVZQXdwd29SckVKQVZTcWtQWThzZ0lLZHFOLWE2YURlNVpiLUVCX1JLNzNRekxoQmNMLVlSZWV4dDl6ckVrZ3o1UGluWDBJVlFLa29JWEZNbFpIWVhoZG1KeDRoZmh3U3BmbkpObmgtNndoYnl3QlBTR3FqOVpqdWR3U1FhZlkxY0lfX1N3QUZoaEh0Vzh6cC0td3ZSRHBQUlYzMFY3Y3BUbkNEZ1ZpYjMzYmYyUTdKdjZUX0lGaXZSVkNEdFVGck9WdUpWWWotbXlhYlZydnlfWXdoV3V0YW5WeU5WZ2tnTHlkRkx1R054U2p5NDhURUZ2S1ZzR24wNUNSNDJDYmtlcHZmRHdoSGFiOGt2amU3bWNvcjZ0V2FEQzMtNVh2aHFha29XV0xFQjlhVzZzekZaODdqZnpQcGtrWEgtOEU0OXROUHBNcERvYk51b2tWcE9QVFozdkVCNDhUQ2N3X3FlSU5Cck5aTC1nWV9KLWZidnlGRlJsVHNZeFhjZlFJb2I0dm04RjNOdmZLaVNjZV9XcGdkZnpJemxSeFFNWnM4RC1MZW93aTFwRWllREwxU1l1YkgzcWJQWENZNVNPbV9xazdjYXY2dFJ2V1VyUFBSVUVxVV9RR3hFUXJvdnE2RzVPaGllQ005U0FDRzh0ckcxN05XRTdiSzRBVVItMTI5U0JOdktOdHF5NExJRG80OVR1QWt3akpnQXlCS1gwbW5iSEJ6T3hFZFZmS0NkaE9nMmdYVkNDMzV2X2gxNk94ZmdDQ3NWazYxa0Jwa2NYMTkwUDM0LWRxUC1wLXkycmphUVVEbjBIaDcwbjFnUGg3WkdSU3NQbXdxZ3gwQzhWNGlpM0hNS0k1Y1MtaDhWdGx4eGV6Y2VhTkE0dG9JVGtCNzNNUGV1Wi1mU3F1T2x3Sm8xRWE4SEhuVXM2Q0RxcWlMUEU5TmZoOXk4Z1BWQ0R3Z056WldsQVc4dEQzYlVCTldZVkk4eW4wOVptSzJPVkFzOVFOa3NteDgwODZ3UnNuN29hWFl4Tk8zVUJyMldwT2EtNGRLOFNwMWw5eFZUclRQY29OdHNVYy1qenFCMTNfSmFZRXhua0NYVTFYWjV0VUZldTZIS0p0andzaWZTSzB2SGxMTDBLZzhPeDhoSURCVExib014WHlOS3NXUzg5bEhBcmI1V0hEUkF4Vlk2N2VpcWZDT09ocW9RdWdYMEdGTVVPWXpOU0VmYTAxT215VnNjVl9zVWIyVTFUWk9lTmJ5SjEyZWEtSGJSUC1xRHliR0ZwOXgzUTF5M2hCQmpsZ1h5QTc5bnNUVkJIZUQ1V2d2TWNGTU9kZ1FoVDNpUnROQXRjTVhaaFVJSEdmU3pKMmZMUEVlRFpVZVI5WG5GblJ6c1cyN0VJMFlFbVR3NW1zZUg0LURLRmFFSDRsTnJTMkRxZWpRa2xhQUJ5OHBMMDhSSHFVYk1SWEZ2ZHF1S2ZBQlZnUUFMaGJYbUd6V29nUnl2NUM1VGUzV2RnS3ZJVXhtOFR3Y0tMc0pIRklWVGlmZWp2ZDR1bVlhUEhMZVBTTmpQUnhmUGpvUTRObXhwclRtSUFYR3I1NmI5R1FDaFQyRXRHTkdFSGVYLWVlM2JYbmhwWVhuTEpLaW4zNnhwZG1hTV9SSFNRbzBkdXlGYXJsOGpVRENZNDlSdWFRSnQyRGR1LXdUTF9YTmNnRy1TcWhYdVlNeEJxcDFlb3AybC1Fd3oxRjJnbDZDVTgzVzFFc1VvdzBVNVhIRUxIM3pnQ3lGWHdpLXhBa0s4UWtEanBYSEJkMXk4OUhWbzB1bmxqZjBLR2s4aUJOT0xnTE9PMmJCMHlMRjJkd0k2R3BlTDdVY184bWhhWWlubUg1dlIwaURLM0Raa1p4Z0hWZll0ZlNCc3JBYllNMHBVYzFwaEk5T1ZFQldVR1ZJRkdhSGlaak1aRWdzTEszTkE4R1VjaU5sZ2d4UzhKRVlmb04xOGRCT0ZIR04tYkxEdTZXQi1iUmxKeThYLTA0c01laVhLWkJoYzBHMDZuZnNhMC1tV283Yml3cmotVXk4UFU0dU5mVUdGWWFOY0FMSFgwTTMwN0pUa0VqWTJfT3NOSmZ5T0lURFAyRU5iaVZ6Mklici1RU3poTVhoV3BPNlFYeXN2ZWpJRjhZVk5ScG02VjB5c3NOMmY0aFJtUkoxbjZHb2tfSTJISHZ3cXVoN2Q1ZDB3blpCMHhxbVh3WFlNOEpuOUxZelRNSlBSd1UtaXFlV0t3MGFLRDlZdHBfTEFkT2xTaFc4RlNlQ3hfdWlXbjV2QURTM1pzMEVfTEZCLUJFaXBGWkVmcG1seGtWdzBfM3JpeGlYWk5GOVNjSjQ1MHpZRkowWm9Dd1NKeklYU1AtVW9vanNWc0hrQzR0MnZaSFhFYmRaa3A1ZXAwZno2Y1RGQUo2TFFVTi0yWFpoYUpsUGF6akNqdFRfOGNrazJITjhMYkV4WE9LRl9fa21tdzQtbWU1REVHVnJzOVN3dHpZSE9SbmtZcXhfUlFsdDBjRi1jcGo3eWxlQ0h6M3pkaHlSMlBSY01IUDNxWFVMNkh1SzBlYUxGQkhKOENBYV9ZTHFCM2hMSUItaU1Ka0haV1pIdlEwWFRpTWUxenRKTUhLOHlYZ3ZGZXIzVUthcFFfVkxZVFVnUmlITUMxeU1OQ0c5OTE1RnkwRWlqRkVia3BtWlZtZzQ5WktzZmUwZ2hjSHJtOFdNNVZETExEWVpQRGotdEp4WlRPX1NMRnNqRl8yVlpvbmsxbTZKY3hwbkgweG5uaGJxZEY0Y25GOEoxR0xkOUZGc0dGOGItV3Vtemxlcms1bjBsNmdrQTdITWt0Vm5Ib1U0MjRRWDFEM2o4X0JWNFVKLWVWSEJ3ZkNyRzU0OUdZblVwdWNSbHlTcXZwWmgxTHBNX1ZVakczUE1STnFnWFF5YzVoYWJVNXFySHFnaHh5NEp4cmxvdlRtZ1RUUzZNUzNOZ1VRLXRLT0gzMnQtdUs1STlEVkR2UG5zOFdsU3NWOWJ6ek1SNmhOdFZOVjlrREdhbzFBTjQ4U19jTnUySnBOd0FHazAzSWZjLXhnSUgteUhwRDRPNTRCYXZRZ2NwUG14X1UxaElyclQ0b3Z1SnlsbXpRYkp6U3JwVm1hNGpsejVNbmFsMW5vZFF5eDNYZXFjOTBPNTlTdVVVeVFudXFDMHRtUXp6MHFVanZfbjNPQlZvSHhDdnFCdzJBTVJqekcwZHgxM2tGd3JoaGFJV3ZtUVRMVklVUGVOeUNlaXJWSVNtUmU4SzZXcGgwdER5SGF3cjRZNjAyZlBNRU5hal92SEQ3bldqQUZqUmc0d1E2UUVJV0VHQkppbEEwemVNVm0zVEdraDZkLUVmbDhyS1o1bzlrTlN6SG5EM0ZUYmlCeC1UTFluaVZEdnRUNWZNdzJCOW9lQmZhSzcwS25PbktTaFJGcDBJem9pd1k0VVJjUUJ5SGtRMGxNdF9QTjhqNFZlYXJMbUR4V3B2eU0wcnFiOXdiWFA1eUZ4X2VSMnNzd2tFS3VaZTJ1OVpNQjJSWjZ5UGNQLUJMckFpT1BTc2QyQ0JCOU45VE9LZEJfai1zV0VvY202YjFmM0F3MGI0R3B5TWpZS0tYb2VIUlVmSEV5aWR1WTFTcU91bVNUVWVBSmpzQWZXYnMzQi1jTnFVMVBueG1GUE45V1dEaVNlRS1aQ2IzanZaeThfZWJGaW1fMDdTcHAydkdtMHBZRHh6TnE4MUFWZzQ4SWVGcVhuVDRkX3FTeE9SUkRLUG1UclV4QVh5MmtLMVpYZW45Z3dVMktPa0gzd2hsTVR1ZUc0Y2RZTlVac0d1SzlWSm4zell3Z0YtS0FpTzM3TEZCRVZrZExPbWtIMjlNRWlCNEFDLUJtQXVNbDUzUmFkS3QzYzh2ZVdGXy1lY001eW5vLVZhYnFjVmhlOFplRU5zUHFvOTdQYlpyTUVGV21yX0RIemV5YVZUOFpIekhjQUYyOEVsQngtSWhwc2kyWW5pMnh2bGgyYVZuenFEM0JBaU1ybnVQaTVDTTNKRFRISTZJYzNGanpIdC1oNmJkT09Ud1cwY2xURXFmTWRTLUNUdEI0ZHFvOGl6VU1hcmVpaDhoc2hLZnY3eFhaZWhtdTd4NjNSLVM0Q3VIMVc4MXBPWXNUZzFRV0w2am9uc1Y0dVFtR1R5YXNfOUNuYWllNG5NVjdzeFlyYm40a2NXczFMYWtuOUtGQzZaX2M1bUI3elVXU3NaekJmb18ycTJiTkRhLVlGc2pxQTZvVkpIZF9mQ1EwYnlkTEdPR0NlbVlGekVZX2JhM1FRdWtEaDY1dnY5WFVoNmoyVktNV2h3MHlncVVZd3VDY3ZRTnFtRkRtQTJkOXNIeUt3TnpHRVhzY0RNRFBGQVZ6YnoyU2x0eFFqX2xRbUFLaFdCVFZuU3hUNGsxREtPamZrRkxsT1VfM3hMN3FtYTB2a1BINEpSLVFfZU9zdGRuaE8yMEk5RDB3a3FmY1ltSF9TNWY5by0zS0k2TTB4QlRRUjluRndKMzh0MHQ0RGxhdGstY3l6YUlqbUJ0NW5rN3BKSXRQTkowbHd4bFBrLUxfNmtXbm4wd0NlMERrQ0NjXzJ2VmhFbkRWUzNzTTVvMmJaV1NTd0VWNlVTaWtOZWI3a3RKa0FQb2dMWVpFdldBelVJNEc5RlNXcjU5eS1uVDNGR04tMExVX25fd1hQYnBhQUZWLXhRMFZwUF9tb2hla2cxU3R3dkhBY1R6TVFrbFduNVlfaUlJMnlhOUIxSTFiSWtKanZYNnEwQ2hGSHdNS1Vvb3lINVV5bkNDNmpNa3FMTFhBU1c2RGJXMnFHbk5vb08tTVFFdWVxRXBENGk0RTBhX2xTem5pZmxGZ3JOMkFwamZzY25FNWFoSWhGY0xxcGRuRER2TGxaeGhMSjREX3hEb2NnN2l4dUJmVVdxQWtoSW5hSnkyN2VMN2tBWkFPOWFTWFprVy15SVJya29HV0N2QmplMS1UTl9NdjRqYnVnb1plcXA2UmE0YUNRazdrdkJHTDR3a281YWpaTUo3UG83eTdjb1EwcGJFdk9BZzBfVHlVYWl4clBZSU5hb2FLV0tnWFo1b1pKVW5YOWhQUUx0dkpLMmF2X3Z3aWpYbFBUQUZhVjQwZkhURDRPRngwaVQ4cXVpVm03aHJhaVNmNloxeFcwYkZRQnpGVFJjZU5EWXRzTTJyWUc5X3JmczBIbU9xZmR6MGxaQVRvSHBITUR3WDVvNTBjWko4WGRqUnVPaUlzaUU3YVN5YXJPV1pQVXFZUEJxMWIyNkdMTjQwSnpBdk5hbnM0TTloVkROblVuaHdZY3JiSnlkUkZWYXpYX2kwMkxheDFOTFdfMEpjTkw0enAyLUNvcGRQR05zZnFEdEZ5d3kyWTltdklYREFIakxKS2JoZEZmODJaSC1ZUnhyWEdnd0hnMkx6Yy04T2x2TXJRZFBLWkdRWHNuekNHMXdaQTZjS3N2enZuNUpfa05SN19ZQUhBdmlkWHVCNGh0UHRxdDR0S2ZTV01sQjJRMTdGdzAwQXdQaXNyY2Q2dE9oa0hDUUFjMWVMSUQtRVM4VTJrakprSGtRMExSV1U5REMxdGNYMVdRMlF1bFo1TTlBYnhpMlJoam1ySElZNTJoU0VPcEQwWUxmdXFYOHlNaXNCYmk4WmlYR0o2U3hoNE02aW9PM180WkhTTHF0a3NkOHBLSEsxZVlpeXNTbUVJX1RpNm1UdDM1LUdCeWNpS0JpemRqeXFsQmdUQ015NzlwNEpqd2hEaE9oSFBpR1Z2azFMSGxNVTdXeFFDb0E0cjdKU2JpeU5UOUR3NFY4MnlMTG1TQXh1T3c1LXNDd1lBcU1ERWt6Rk5mSkMxRVZpOXFncm1qWVV6WjBCenQzaEhsVkdJdmUwbTJOOWkxSnVxekc5bnBiaTNhTFVTcjU3N21CeWRqbG05TEJ6MlJtWU0xajR2WDF0T25zNktFSWtLNVNzclJ2dENNUHpTeERjLWV6NDNDc3ByWm5xU3QwWVJ3UC0ydUNQQzFFQmNkMmVUU1JiWmtVQWdmUUVwUl9vRHhlMVNKN3ItbDdtc0dLNkRLV1JkeVdQbkpvLXJIOHBIUXJzTnp4a1BWc3p2X09FRkJ6eHpqeTVraGtwMmczTmtCaWFCZEJ1TnFCaDQtVklNcjNfNXZmV0duUDd5Y01IZTluT2s0SmxQa3ZYN0phM0VwNmJSS3c5Mk13Q1BhTFJiY0dHSVVUeWVnZjBGMldtc1hsUmZPemVFd0lrSnVXU2RHd2VnbGtPNmo1alVUd0ZBNHRkNExYa2FOZ2ZXeDlHRTdmYmNzN0VINlJuRXhwb3Bldjl2WlJlckxmeVZqcU1KeGZ5WXNlcHNmUF9TRGRPa1lQYUZabUI2S0w2MWY5aS0xOVl0N2dUU3FQU1g4SUs1azUtVC10Y0ZyOUljNXRKcnBDVnNFTkhBcVRZTDVQZWpFRE1qNXNkUExhVFA4WDZVRFJKUXFGVkVNT1daTnJUTElrY3cwaFh5Ul93RVJGRXRDbkpjQ2NLdjE5UDZXNzRTcXlKSkduWlRSaW5Bc0RYMTNjX3BQWUVPVnNUVjEzRWlMNV93NUhDMF9tbHl4b1IwSzczdEtCRjlJYXBFa1pOZEg0aV83eW9hRDZGcGF1Y28wVW9DZkJydFZjNUVzZXVaaUUyQi00NFNOMkVkN0pkWGplRTROa3pxNE1PMFFJc3NPaURzUDQtOW15eHljUlJsSm1Hdm5zS3RTVE9ick4xd0VwbGt1Yzc3WVRubHRZeTh4dVozV2tyQnZMQmJLSFRPMHlNNE10YjMwNndodllYNlgwbG1iQno5QWgxellvNlk2YTVjN25sWnJ0NU5qeW9lZkpNT1d2SWRxdGFBZFVhZ1l3RXZDSU05c0c5eGVXSmRaSmVOVTd2N3pFSzgwcnlqZUVmd0VfNkk2R1pMOFdtWkhjT01lTlNKOWhvRThTZ21hakNCazdWMldOa2FVTi1VYlh1ZERBdWFZbnhOdHdXbzZxZ015NVdOcWdNZ01TREhxUS1BZUNxVllxRUtDT2tlZmFLQnNfNF8zc0Q5aVN1STdrVmVURnV5WXpCelFZNEtrcl9qYWptSkNaaEROM1Q3ZkQ0dUU3UzM0RndHX0lVR3ZjeUoxdTZUc3RnSUwyUmhVSXV2c3d6NmgwY2ZDMFBOam43dHZqbzhGaS02TWJ5eTB5Vzk1UmJpdWNpbkxvaExlVDB6OTh3V1dneHFxT0hsTWdjVTNVeGdHdnBhNUE4MEZHOExLZ1BuNE9Va1FyS2c5aU1LaDVPakRoWlpoQWdIMnBRRVVRek11MGM3THYtX25MUHdET0VrTExiLUZFSjJDdF9kcGJveUdpX09GU2lybEFnSmJuN0cwanpZand5QkZhTTNZT21PdlpraWhGNkZST1FaN1Z3dl9aaDEwZTJJb2hKWnpwWG5oS1pDY2ZnWlNqNlR3cGZNYkxralBQMjcwMEVON1RMaUJQeHc4MTZSUXB0THUwZl9MM283aGVmc0ktLTZmbWhBNEo2MGh5TFA4bkt0VnZQalhPN0RMZ243dlJhZkNPMmkwTjVVT1dUdnpLMTFvNFlfalBIZjByUmVfLXZRbDJGOS14YU1QUS0wVEFIMUpJUFlSeEx4QXB3OGhoMWx0MnVnNmdEMjNxQ2wtRGtMbFZQZURYYnJzMVJQejFTaWs2el9yRW9BZzFoLUdmbHFmVmV6MVphYVVCSGRrVXNMUnZDY2YxWnZ0Y0hZQWNxSHFWdU4zbVBSSFg1Y1ZFY0VZUU5xZl9WelFHdVlNRXV1RjIwZkcxVmxxbm1wVUo2TkFuSDdYUU9IN1BUcXVLSklEdTBzanpHNTF6TGVCb2V5Y280YWttOTIydWIwVm1fRGFNU0sxZXM4X2EzUDQyako1cHZaQXdTcG9PT0JNVHZ2T3F5emFZZ1ZBX1o4d0g3bS1fSjJVdEtBVlhvOVJEcFpkdmQ5cEVxOXZ1TWFkb3Uxc1F1TXBvNGRJemxoZ1hQRnVFME9BZDZrNjF4WE1INk9MMEdnaTBPakEtQ2liWWVjZkdWWmoxNXN0dkVILVpGRHp1eG1hZnZXWTMyR1p1TlVEVndPU2NIcjhpaWN0TnJYWjN5SWNhNTZJOGhjZVY1MXdLd2V0VzV5NHZnNkZ6ekRKbkRvb0tpQUNNaGpQVHlYSUZnNkk0M01jUHFOYVJISnRuVUVwYTh4TU81ZzkxdlZyN0pzZXRHcm1IREZPbkZ2S3dEa0RZLTJrMlhvSnFFb2JMd2w4UVk2djlVQWR5bTllY2tJV1pWSkZEdTZyN2xDRVUyTHNyNFg4V05ZWlZZdXFOTXhXZUw2RllqZ3ZhbTN6MmlwUWhCTEdSSmV2aEU0ZUZBSGd1b0FIX0lsYWJMYXh1bmRTYlhBbFVsX2hhMGRlYlYzNDRob2k1WC1YbVlaRjFmY2g1dnN2Sl9FcF9OeW1VVkp5TVJNaGRWWm56R1NYdmlxSnZ5UkVYd3g2TW1BeGYtVGR5OU5qQWNjOUFObGRKeVgyNWwxdlpzUUNJMVhheGVmZE5hV1BXU3Z2WUFLakhGaC1TTk0wcmttQWZ6V3FWNjhWVk1XSmU4bThQNUNtdTlUWmZyTjVwUkxVTURlSnlPUXVtYThWMWNTMV9PZlVfVkJib2w4RXozTXVNOXdyS0pNZEF4YjNKbXlnQ0VVWmJTRVFpYUJ5NTV5MGxsbEttOVNmLUoxMEdNYklmUjZqS21rYVNaRms5YUVuMlo1cmRlWDQ0WGR5T0FjRW1FNjVxWkp2U2daUmdmbVZPdEw2WFFPV1V6VnJpc2tHVGxDNURNTGp5MkN4cDFVUUtDbjJWdzlFZU16d3NVLU0wd1hTak1mYUxmcWZEX2VFX2pudlhlOWhvMmtRTC11b3Y2azJyU0Jid3BnVmRPR2doQ25VaHI5WC1kU2NicHFpV09WSHhBQ0NLMHhWdkQ5dXJmZTVxaWpJWjhybzRPTnRNb2hFY2VWSHZWZkt2Q3JUTTRsVEtYdUZuTjJfLVkyaVdXNnhIQktWQkF1ck9LbEZCQmo5UnhrcU94MGZjdHFvbi1wUEM4Q3RrLUxvSmo2NHd6X3JZUmhPSnJ5Mnhzb3JmYnRTUHJ4R1FxbzJ2UzhQZFZtY1pEdERzOThtQWoyU0VGMlNWcV90VVJOVjlfVDV0V0QzTkw2azhTN2V1Q1hjRTdLeUJ2aHM2MkExV202SFZkWko5SWhsQjQ4Q2hsNk1JN2h6YWNoSC1HSDRPQS1MSUc4OURQUUlXMXpqMkZGdkxiUlBGWk9OMkNJQ0puOHlScHRaRlo3NkZxS3N0cDhkUWc2ZW1ydko4WXc4bzk5U1RyQlgzX0Y5YnBuYTlzWXVZXzVHR3ZHZTJFWGk2VkxLNTAtZnczQ09wU3lWdlE0VlhDZklCOXE1Um1obTZCVnBGUVN5VnlqcWxEcWhwdWdFQktQMUM5cTVSVUZhWDJaemNoZDg4R2NpM1NXdlVxblRDajV3aGpBU0pVZVhzdlVENUJfRUFZVC1CdjdGOUN3U2RyLWkwYU5DWER3MWxCUDFqajRIMkJqVldkVHZKZGdYSDdHRzRfVE1paTFQYUdvNDdOaFdjLTQyV19CMkYzZnZUNWJzS19kbkFXeFo1ekQtY1lVdUF3UVdaS1Zqak5tUmJaZVY2Zk45amowQlRVMFJXa0dYeHRTMUVteDc4X0ltcTBsS0U3SWlUN0tyaHFPMTVyQVJtZTVnUjl4dlRJVlNpOE9Bd0JEa1dlNzh5UjI5cTM3TlV2NDFaR0x4OVNNdWc4SXBscjBoWEJYUlhfaWZuQmVXdk1TWTlNd01hN25pSjRMQ2VOUUNBa0ZpenpVYnp2NDZGWUNmYzlWZDhkbTAwTll5c2szZFJVamxGaWE5QWFhVllPWHIzYVM5R29aSUhMa2NBaFd5azEwX05MVnh0UkVhUnA2R04wSXliTzd2X05SOWFUNnBMZ0pCblFKSFJTemhiSE1YOGV4TmxyR1c2Wmg5aE9HNnNzYk5nZTUwMnVpeV9FaVJXNVFiMjBUeU52QkEtOHRIR0VJOXc0SWsyc0hBLTNCbmtqMDJXX1NDaXI2aHNQV2pVM3hiSk1xSjVYYlZLX1dkdWg1ZURpNEQ4UHRXZXhyRmV1ejVYMVZXUDZVRFh3VENKOVZIdGlfTkNBQWdGVzlmWlpDSTNXdk5KaHhRcDNCakJLVWFzR0JJNlVvd3NzUEhKNm5HbF9HSFI5NTFSRXlfdHpDMHJ0WXk5MS12bXZHOXlIT2gwZDJHM3B1WlJ5U1RSdFJRWVBjVm5fSG12R2lEdGlxTzZhSW1FTWV4Tl9RZU1BeE9pd29LWVNNY0tFcEIxS1BnT25qb21LMmd6UURvLWZEWWdVZFlpNEdYdWZzc3VhVUxmWE5KRUVQS3RiYlZXZGw3UWU2a0U5UE1KYVNJa2h5UzlQRjAtTE9ZbEVTVlBoekRENGVralVGQ2dSMjVmclFIWm15M1RIR1d5bmtfMWpYWlYxUTlYWGtjSk04eEZ0NjM1NllEblo2SGxIc3FHcXY3Q3R2dF9XYVVSVno4Rm8xWVBOSDBGVF9WQzRvZkpJVm9IUzFpR3lONkZ0bGpUa0dFQXNqQ0ZPLWhxS0VLRVdTYjRZOE1hUFA4QlJVTDJZNG1jRUVwZ0QzSzByLVNHbEgyVXFfdE50bEM3aHVXUWhfaDF3dDNvcHY2MzRYYmVwMWdfcDk5S1ZjZXc0OHVSQXNJRUU0OWEzVDg1TWt0VTU5SHhjVVpTMF91ZEdKUXMtbGZ3di1UeVMwU2E4Rng0LUlOYUYwRUZ4TV9KLXA1anFobkxvQWRVV0Q3SFZBc3F1N1BWeThLR01RTHdEeC1MaFBwQm1IUkhrc0xEWm0xTmdDQnRpWkJkMWpTZVItdmhuSDAzY0paN2xUWTN4bVRreW5uRU9ySF9CeTdDTV9WcFQzWFpYanJnWUx5bGZ2VGxNZ0tiWFNJdTJDOXFDYXV4Wjg0QUJERFJ1ZG1WUTB5VGNITmNsY2lsV1RBQnZZQXMzTVl1UnZvNHhpWUFrNlhiY2dtQW02ZDJJTERNWnllTnJJVEtJZHZMd3NEQXo1eXdpeHB4dGNOdHVfM1ZCWkVoeDVUTnZzby1xLTNYbG9iMlN6WE1UbFg1aXFmb2g4MzBXZ1dsTkU1dF9RNktlcWRONGtJZFpkYlZPck0wWmpreXIyTHNnY1Flamd3QUlzbFJMaS1nRWgxVWxEaXBKRC15QnZTUU5XclJLdm42cnhzU0FwY2xyVER1ZVdqU0YwNUpiaEoxNmVqRWt2V3dMdTJmMG1GT1RMRHhzM2trX2VrZ0xFLXg1UFdrbWtVT1RPVFNLVnJxdHAtMUd5RDhIbTI3R2dZZUd0RVlsc2Z5aXhhQnNCOVBwbEJyTlhFV3dpWXZySkYxc0luQ0VOWm1NQnA4VE9JZU96WXlab2p0TmtjT1huck1RNWZqQTh5dUdSaG9GRnA3NkRrU29GNjBab3JXT1NwTl80clRqYkFoVDgxN3l4SVFiTnI1ZUItSnNIYTJncUx2bjBjSEZ6Q3NmWlVYS3pqS29YaVlHMDlQazRacmp4SU9PVmp5TERlRHh5RDZtdzJEVmxmbTNiNHYtUTRuQjd5eHE1cndfT0hHZ3FpazE3UjlqUnhmY0QtTWtIQzUwVUFIX1JaRW04YzVXVkRaQl9CWVFSOEpuTW0tQ0dXTVptZmNKREdXWmNCZm1wa3pqeThzWmVsdUpOT0ZaRWRQanljMG1GOS1aaXU3REROMmRTdm9oN2JCRkNGMWo4TnhvTm92NzJUc2pzS3U1SWhQTWZZUTRKTmxnekd5LUNqaWJZMGhZQmlENS1EOUtDTjkyQnRLMkpqSDN1aWMwaHpPQi1lNU4wZ0duX2RhRzlnVC1LZzY4TTdrNjRfOXdrUHgyeUV0VXczSlpsRnBsR1BQZC0yR0V0RE9Cb3NBNDBoeDE4NUc3S2ZCMnRVQndfeWY3TGpnU2RhUnFxMEhCUjRCRzlfT2hSMDl5djN5N01VeUdCTnA5OGk1Q1M2ZXhsaS1Jem5VQk43LW04S1gxTTBUVzR2TDIzZWpXSFJUVjJId1FPTGctOXdRazR4X3dXbDAxbWdNSTYydDdOSHZvSkNmN3JaZmt5NmdJT0Y3TEdxTEtzWUJFYU92VlZPY2FSbmg2YVFBaUtkc0ZNdDhqWnRpQjZWTnQ1eDA3TFhwQWRDMjhXa1hMdG1DZmluaUQ0UUpPMW5CX0VXR2tNWkZLdXB6Tm9GT0dCSmd1SnhjYXNReGV2WFMtLXBuYjBsSXZSSFI1MFdNZTdPRGdEdDBxX0hQeTRYZ0FWQkRTbWNmamVyanZvUndDX0YwYlJmUjJ0WWVSNjFQUm1NUXJMcVd2Sjl2cUN0OGhURU9zbGtpUXNrLWxPM0Z3Q25kWnhQUHVvbGVtZmlvTmItdG1XNlE4QWtaVC1BQnJlVmhFbFhUeW5vekxFYzB3WF9ZTFRlTmVqY2diLW1SWkJQWGpVZXpvS0VMa21tVFZWWGRoSFlJVmgyMS15Yzc5SEFKeHRZWWpwQTBFUXF4QVN2elRoMERTb1kyTk1kVDI4c2V2cktCbDNpSEJoajlKOGpfcnN0cXREelVGUHQ3MmJ4U2tFLWt5bm5ucXhmakNqZzZFeXRJOXRqYUNmSnlEcktVOUJ0ZXVtLW8wcXlQVVYtUzZVYUZreFpwZk1jSi1LOWFhOG53OXVURnhWb1o1SncybHFpdFBGZFNPMnJUeGlscmpNeGZPOW4xMVFXbWpfUmM1TW9tSVRFSW1DR3NxeWF0OV9LMUJDVnR3NGZGeUhWQ2VXbVVJN0dsRmM3aFZrbVFXQ0VGRjAteGRoMndtVmh4NEFjQzQxZjNWaVpRN1Vsam5Sb2FqNm9UczE1SFRHZ2hIdzFPamt1Qi12eVBISlRBN0ZNbzlLTUZCMXNYTDJlR3ZhWDZmdml3cUxjSTR4TkxBRXZTTnVoYmlUN1VmYTlIT3hiMWQzYWhZZ21KbTBad0ZHZUdBMHVWeVJRcU5palVaZzNwTEQwbWZiUU53ZGdTdDhYMmhuaG45Q0hoeUxWaFowQ0JTRjJaMXJiYl82d0pZWGxiMzJaVFRDY2RTOUlKdVZvZVFIendTX21nVVRLTXR6NXRyQzN3SkkwdG5jay1XX1JrWmRPWUZpcTRnUmN6UGtkNENvZUxwNjVPb0tRbGxWSjFjNmRtamFMdWFRenhyZGkxLU1iQ3RNbUFfLVA2a0NUNzJwU082QXFscEsyRzNVaWN2cTZPc2VBOGF1TUJJeG5tZ2R4VFFqb3dWbUNfUUN3ZU1jWThfaVdpdkpjOVk0cFJvbl91M2hxNXd4X3d1V2tHSkhGOEZXOEZSVG5CazVkZGVBYUlUeklRV0s1THYzbVBNRXFjSEdqMDRUWUtmNnlMVGhlcmY4OFRsVzZGMEI0STYyRmZOLXlYd1R1eWM1QVRvVnpOdXdMWl90UEQxNlRsSU1CNWlBYXRvci14azhGRU9fY291ZVMxSUI4MDA5aEctcUFYMTl4YlBLbkxvQTVxUjJJLWNiQjlZTmFRWXM4aktsTUp1c2owdUdPdHZYVDNTMzlLZ0hxZjZDRy1Jc21EQ2phMzhDbWdGdWhkWUEwV2ZhSzkzUUZjZlFId3B2S2dQQ1d0bk1lUWtrVjNqV2pIWlE1TmpxOWlCYVp6cE96bjg5UnYwUGNXNUxFMWRlRTcybTZhek4zNnYxWGtnZFNLVjlxSjBzd2IwaGRvQkJzWUdZRWVXZkxwZ19wQlZMQ2FNR0xOT0JMak1wbEFyb1VjMkhpTEtyNVlLVk1Gdno1bFBwRXRMTnk2RklhRW1MSGNLLU5ncGRPYUJYSk5xbzJiUFMyS2g3eWFWY0wyWHNaQ0VheUR6X2ljcGVIeHNlRk1WbW96VHJGR1BLSE84Ql9vcW03UXpTWFhmcTY2SVljYTd6b3VyMGtNWFVvVWdpZXk4a2h5aF9wWUlwUnpqMkczV2taQnB4YjBZNkxEb29zN1ZubVh0V1EyU1BuWTNqUGVaMUFQTDFUNnljODBmQkZQc1ZPYlFyekRVeXFWam1KS0ZjNTZxUEZ2LVBXN2dLRFY3b1BPRFdONGtSNVBFZFBBcUpUWFdUTDlxenpjeFhXWThHaXlVTHMzUVZGYU92eUJiTzZRQUN6NzB3UEVZbkFGQ2RFYTFoUWg4OFoxakNvSEhLMm9OU3pNLW5pd3JObzJfOXdHc1pOc05HYUlZci02Z3Y5Sl9BRWdSeGNYamNjdHN5MkNVd2pKVGkzSWoxM0J2ZllRZ2hvMGplMW5EWExhazdteHJQRE1tNURBeTlDbHloTG44WWpCNkJYdTFNTy1jdnUyZHhuM0dyc2YxNmkxcGVwYXBXbGR1aVJ4a2x3Z1VqWVNCV25ncTVOZ0tUaUdNaElzcmdTYngxaVE5bU5WTG1yVzIwNzhpbGZ0YWlXSnA4c0wxcWpBbkRna2lmY2FucEV2S2k1anBiOVhNSzJLSFJIcUE1S1UtNUZFbVZaR0dRQXlfdGRrY05TUDhBdDBaUFpuOUwzMkxCTDFUTlVrWjUwMjV0c2ptYzJMaDdWeERJSXdxTlVGaXcxYndISjk1cGZNNmFrYm9vd0Uxc3BINVZBZnZLRC12YzZaTWw2SzVIVnAtdFFTX091TngyQ28xNXktcnRjRTVtTlV6S0tRMThYQzJmYWFPdGRxb2R0U3lYc3JpQnl2M0NRRWN1X3h3QUhvaXRNeDExbGxWUGIzdi1mc0I2b3VqS3ZWT1QyYlJJUGh0ejVDWG9lRWVzUnlFNjFoYkwtcEE3TFZUSWlsbHRhT3ZSaTEwZUVUVlRKM0pjU3E4OHhhM1h5a19qT0JBb09IcTk5cU16VWFTdW05dzFyV3BwV0IxMmVUdGxQU1QxZTB0Njd0NFVNR0ZvR2Y4N0tBM29HeHNTX1B6S3VJQXNXM1JvMmNYTmdHMXRFY3RSZ2h4N2dUZEtwZHNOTzBNNkdpaXBkcnBhUXBhV3M3RWJ3dWVnMTNZMWdOT0dPYXQ0Z3VaNGNwWmVuT1NhVW5tNkpPcjVlNzlldWFlVEsxTk84dTQ0WnY5cVlGNl9VWlRIdGN0a1RwRmJ5MF9YWnVpUHRfRVlXRHhEZk9xWm5iSlptZ3lockFQZFpxTmVjdXZya2k1S3p5bnpZQUtWV2E0bEU3dnNvcmJmbjVWY3pab2tlQXdDXzRqU29ZRl9BMTBCSHBIQ3k2WTB3R3h4QU1fMEtqRl9JM1FUZnlkVkJWbUN0dTJLOXNwUzg5Ym55aGFwc1pMSmI1NXJIOXNJdHpEbVVrNjR6SDZIOGQxS0ttbngxWldKVnRaSnBjYWZVeU8zc0hqQmZlV2NsN1d2eTNVSS1oSm9RTDM4MXcyVVdqaHdTRTFtUjRWaU1ONG1uQkVaRVN2TmZfelBMSFg0bk5sekFuVGFhUnJPUE9tVmotUENQYTc5c29LOWdsOUF3eWtmNVhzbmVpTzQzcWMtdzNrR0s0dThSaGRUa1BwYS1HNmJObURUQ19ZSFg5VmVLLWdDU0NDbHVSVUQ5YjRjYlNvTVU3MlpMLThWY2FhS0hMRWs1d2U5QTVDSEdORk1JNVZ4NWpXTHpQc1ItZFRORmlDTlJna2RqR1ZtNVpmSkJHSlQtUDhXeHFxV3J1RXR1Uk1xdmRELVZBd2dZN2pMT3RRVTA1Z0hZMGROaHBwcHBsQjNZLVNYRjc4eGtuWEp6S1Z4eWJKdEVkUmFJcmRFY2dtWnhSQi1Sci1CakJQc0tPYVJBQ0xHWFpQQzB5d0hBY2VsTXpMVXZDNFZuTEsxUlNNSXNWT1R2eWo5b3BmZloza0JOMU1Db214cUhPV3pib1QzTlN5QlVoZEpjTVA4VDc2dmw4S05NdUpZN3ZLMDVwd0lacUxPWnFiMEZVbDBKejUyNWNkS1FycTlxbTZRTi1rRUxDR1BBa053RFlUOGF3eDZVb09oYkdMaEtYR3pVSXp5Ymw1RGlLVE13dXRTYUh5ZTk4U3d0dVo0RUZHSEVsb2lqeEVXcXp1ZkhaczNsZWM0alZzOVlQbGc0Q0NodjN6UG9VRFFnaGF5Skhkb3BKZ1J3OXZqOEszbWZ2Ukd1aWZIZWtyWnBLQUY0a0k4dHZ0NWtLZzhqVG5BRy12UkZLbFJCbU45T1NraHZKU1pMeGhSUjJ3YzdMeXhyb1FiQlNMOFRRUDBRSjF2cGduM2ZtRkZKeVRPeTlOWXN0NEUzSzFhY1VkZDhWSmVDOTF4WTZhSjBCSXctbS1xVUd3aGNiSWw1Uk03aE5PMGpoUnQ2cEktbVRxdklVc3lkenBxNDVjZ1FfcnU5ZGdLTzBQMmZ6RUxZMWZCcVM1SlJxVVFZVEY4b2x4NmFMQ01OZXlRQlhkaFdxci1Ec3hESnJ0eDdVS2JFWmJVSVRQc0RwZVlpNlg1c3ZQdUN2N1MwdnhVWWdWMzVyUHRiOUxzVFIzZHA1UEo4LWFJLXVqNHI3YWRYZ0pxVW55amt3MklFWlR4TGVqNmNnekxJTDVOSVkzWlp5U2t5UHVMYzdFcHlkYjlOZXIzVGVJOXBjWmNGTHZjMlhYVFp3UnFBRzRCX3REVU1rV3RRdTNqMUkyTk93eXpCSUpUX1p1QmhlQnR6ZWo5cmtQTDJXUVBvUUlhZmQ0aFlkWDZUblFGOUZvQjM2ZU02QTRaLVBVNGhGZXpXUVk2NnMyNHNfMFZkVjF3dF90NXlXdnVKdnhucG54aHR3emtSNFgzc0I4MFVyc3Y0cjB3eVNWcGM5R2EyRXYtMXozTUxVWXBIN19SdFI1WFFVSVhobmxmMXg2a2NoSFFPMjdiakNZOG90R0xqRW9YelA5MUFxblpTSVZodVY0aDJZZDBlNWg1VXNiRVlMMEJDendULWptRGVTOUhLQ3Faa0F0OF93bFMxZkFZRVk5MjFsaVRHNGw5QVAtYlNROW1fTkN6U1ZudmhCU0lWNWZJT244enl2dFFnSmltQm42cnlIOWRXTWZmYjlSLWNWUm8tSURrbnpCeks2Y1lnTGhtRHRITHFaMW9uNVVINXU4MGstUERuM0g0ODZabkVBTk13c0plZFVaVm5kd1hWQnVRemRDSUxCNG9JQmYtZUNKQ3lXcWcwa3lUYnl4VVVOX0VmX3hiUjg2eGJjbEJVM2Fyc21aeUR5TERrNnoxX3g4Nk91bWNlNFZqVGRpUFdGRTlEVXNNdHdYNmV0RS03eDRyMnNwaVFQN1Z2amlmcjM0V2J1WnVwQVdpb05NeGxnN05SR1JPaG5fX3AwcWFPVGN5Nm5SMkxSN1JOTXl1b1RKcmhXMmswNjF0czRNcXpDMFJBeHR2d0k4LVg0elI0V2l2b2RYM3FkMV9KTEFUdzVwUDRDWWNiU1JFelJVOW9MbHJUdFduTHR1ZHpMdEd6bFdvSGN6cmZ1NjcxbDdvLW9sMnNVRHhEZ3JiZlVMbTB4LVFwSmc5WHJLNnhlQjZOZ1FwcFhqNE9tQ2RYdVVPVUIwQlNETHJBMTZLc2FSakVtQldfZjBFcmhIdTVMaEZ0WEltRWdTZk5mUUdJaUF3aEZEWkVDR0FjT251WHNIT2VfTFBaT0xVNTZwTE85UkNodHI4Sk04c0JkZktuZ2wxUTFBa3BqcDNBclRaZHZFbUMzZGhoWlJCNnFtd1pkeWFBSzhVd0w5RU94ajAtSzNuMzlTQnVlUjRfMnlnSXo5bXlVemhSWkczcGdZNWtvMlNETnF3VDYteGpaSGluSk5WOEt0U1VHTGhjR2ZXSG9SM0xFRFhtR0ZuQjBRUUVuM09OMktXcUNUTWFpWUI4eld3Wnl4WXVHUnUzSXJzUEZIb2h1NG5WcXctYUxtOUZKNHJKaXcybldUVnVySWtuRVNfQVU1eEVsdHRuVnZremtjYmlHSmF1YnN3VFpVdWpCY28yVHd4VDB5ZHl4WU44elhtdFpmSjYwOGVocDBEWFVVeVgyVkxtQmg5UWZLdjMtTUV5Z0JiUTlJZWRkUnhuY29BMXJHMHpBVVYzMHNTZlVLYVpvdmNkVVpwbHhNMllXMzZRNlE2ZnpTc3YzNDBlek9xNHA4MVU4Y3BiNWo5ZEdSX20yNWFDRjlqdk14cmZyeEE4Mmp1c2hnUlQwZWYtb2dZVXZFQ2lQbTBCYkQ2Q1Y4R0hiMmJNRWx3ZURsVnBkWU9pQlV3U2ZYa19UU2RUejFuZ2JvX1haRW1XeHVCTDl3VVZjVUxzdFBQQ3JzR0c4bjhmYnEwbHpBUjR0ZzVNOFctQXRjRGl3ZldNX202OEpKa3dUeS1USU1KaHZ0UXJ2dGxTckdWc2dvMFUyLTJoMnpnS3QzOVNKcHhsaFdMdTduTHRCUVBubUJ4d0ZiS2xYYnhabHpfLTB1X244Vmwzc1hkZWY5R1laazRJMWlIWTdBY2dpNFc1bmlxYkpyeFdWRnVLakc4dFJvdVpnTV9odHdUbVVPWjA4dmtVd2VXR1RCXzlzWXBlSGRmRlJzTWk3amp6M2hBRW5ra2JOV0pFM0tHanVBQmgtNWNqODBFa3hMVDB2V3BKcHBKYWl2RlJRU2NwNGtmdy1SWFpRenVaaW5vU1VkVDQxWGZveERPTEZ3M2N4dTgxWWFHWUhxemwteXExdnE4bWkxR2VPUHVGMGlBN1lxUmtjajVaUXVZTHFxckd0bmFaUklySTRqazJMUjZMNy11Q1NFXzJnZTd4Z012UzJXam9ZeHc0RThIVThScTljZkgyRE1LY0RESjN0Nnpoc3NnMEdjUzY2NmxCU0w5d3Y0NzcyTU1jN0FxMkFWbm41eGlQelBGOThmbzNISnd0TFlKNmJVQUxYNDVVNERseU5fd2VuZWRBc3ZqR3NWQnFielJaaDBXZ0hvMy0wN2hqNm1sVVN2bE5hVjZaZ1B6azBlbWJJRGpFcV9UdlAxUGkzd1p0Y3FlQ2V3WFFYZzlCblRUbWdROERycDBTV0IzVEVUc2lFSllGNS1RcVpLeUk4UEhXTnZlTFZETXM0OUdLRlY1VkE0c05GMG5RQlI1RlJYbTZNZnNHeC1fdTR0Ulh5WlBwSVp6RE5oRUpHWElfdzFJemNRWWhOdVI5Z1c1WFd3bU5DbDQ2dFpWOTh4TXBtZE9ycFdjeGlnSUNGYW1wVW9JYmRHXzdaTS02OHBWemx4cHFBbUgwV1JQOXNXd1lraVJldklBX2hGMEFlT2JVcHVaR2Q3RFRKd2JBR3ExSnZCTVRTRkVha19QZlNzNmtnOXJwOV9SdHdhSWFiTjNPN1JMQm16WG43WGlHU0RKQzl0N1JoOEpQQ2lpQ1M1QzR2Ykp4VGk4WnVzUk81dUExRzI1VXd0YlcyVGFmQVRfNWZzQ2tsVlpLWXdtNWNwelhRdWw1N3RSVHRlR3o4VnpzUmE5T3BqNkhaSW03X1VpVXlqcUFiRDNwQmxjV0M3enNfT1pNZ2M0RmQ5U2RPclBKaGVHNDJ1QWFWWUNWTXBKMXduaWNUbGpad09pZHZuZTM2WVBaOVJiYXhnd21CRnBlaUh1S2lTNzJHYzg1TVhtNUFwMWhPeGdUeWJFMjNfdDFUUGI2N2VSWHR6LUlwbVFINFpoYzRmS2N1aFcwU2JTN3I3cW1jSTZyQkNFZW9HQ29mamd1T1lCNXc3UzhHaXcyTkdNdzhibnJ4cXFZaS1Yci1aRFlJNzlFRXFtMDlxNHhfc3N5Vkl3Q0dkcFNoNDFWaGVLR3dWQkhYZmdKQnFDa1BQSGJMTkJWbVZnTWQ1ak9rcnczazZ5RC1Dd3hfZmFWeXVYaV91THdaRG9CaElMSXFSdEZPNElaR3RDaVFJQzhwUnFTcWZUTlpDN245Q3I1eWVHSGRkZFVtYWNYemhjcy1PNk1ILUJQanZJZ1hMeG1HZHZpWkh6WFNGelhZUUQ4SllmWXJmRmkzMVptd3ZCc3l1SzZKcFNjeHRnOFdMR3Q3Zi1vQmJYYXkzZWpCUjRpNDhRYnN3VnVNMzRpX29JT0pPZmMwTUZHd0pUWkdxMG4xeHFkXzVDSVpVMzBRQk80VnQ0U1puNVhwWE1uTWdiX0ljZUlyVktXSXp6ZXB0MmFQWVhKeTJNLXktejhOR2hnX3RXbjkxeUlTQnp4NlZGZXowOEhUSXpIcGQ1VUxkTkZQU3VQYmNwMXFDS2tuVlgzWXppZU1DM2pQZmNzTGNOMnFsSFE2NG11V2xucE0wOVhwM0M5dEpPUFp1WEt1R0xqZ2d6b3BwS1d3bWc0ZGU2Vkw4aDFEd3l0STNyWjh3Mk15ekUwNm02akYzV1ROOFZGV3VsemxCZXNIUmZ0SUtzV3dsckVjSmFzejV3X201OXFYT2xYYXp0T0N2S2cxRk90OTA4WGVvYzdQeHpWdFlRczVZbW9WQWc1WFVvY1Vhbm5JYm00bXNaT1ZLRWp1cDZ0djRfZ1RwZmJYc196b29YT0I3XzN3bWhwSXlMem04YnFNamtWQ2w0a3k3czNvNkx4dGdrMm9nZkdCUFBWVlZxRUdaclFzRWxocktoQXlGdjZMWHZQOW9PVU5VYmhGTmd6TjE2aVIxendTZUhOWldSUURQVGtvNndKcGg0NFJuNGViaE80NUJ5NDZhUFdUUzBKZ2RiOGlwQnV4UWpJOUQtZmpSYTFFVFN1UWJwam5OWnQxQkJBNTJkTFg5Si1JZDBLVnpYUzBWenpKUzRjZ0praFVRTXBOTkVXMjVTOXZTR3BHRVk2SzVoSEV0ZHFOZGV6c1g1aTlWYVBSeGxiR2w4V1BIYkZzemloTGV2NkhHWnlpbVdTOFFRdVBmdjFnMUp4VndreEFNbm9Ddlg1RWJUX0lsajd0R1J5REdEVVFZUEFQUkM1d2M0cEcyNWNDMm5XaHAtWkQ2Rl9DWUhCaFg3MUlQLWlMODhpcUk3X3pscGZjVlpsbGZSVGZNc0hOWUtyUU9RblQtTjRuUkVTNzZnVGlNUG5RTmFPSHRfbE9CY1diXy0wYWgwMWxXWng3STk5clZaUmJxRDlkV3hLYnEzRmxrQWVVNEc1MGFVZ2JraW1NSFdCM09JSDdHcGZCS1NRWXFrYjdVUDVDXzJpX0FtcUx5SWlXcDU0bTNBNnByRUF1cG5tcDZxRjNTTkhaR2M0NTRVWDY3Y0wtQ1pvV3BlZ21hMkJHcEt5QkF3WERaaUxNWmdrZkdKaWJSa2Q5aFNmeEthOXljckI0OTlaNkJoOU1IcjdCV0VoV3ctaDZQb3hUU1lxRllWdHZ4WElNV3VlbjE0NWdjcDZlWjdmWFB0MTJWTUZzQkJlU2FJVmt3Z3BkMDA0RmJtbENEeHgzQk9TMUk5SGhucEpxZy01S0pJUzUxeVM5YVlZX2R1LUJGQVF2X1BKTVJjRFc4cllHaDVqdjUxN0Q0S0N1ZEhOMnQ4b01IdXNTSDdsd0s0UWhfVVBNaUJLNHBaR2pVNjE1eHVZYlhsOVFJN01hdi1GRzMyWFVkQVRzYkw4YTQ3QU5Uank5d2VfU2lUbkRXT3g2NzkyaElSS3MwU1JWa0lqU2N4TG5xWmJ2UVVzQV92RGk1eWY5cWZCMTVzdUpkbEtDTWRKRXZNdmJ0TmN3MldjSGFvUW5lWXlVbkJWZDFPVXpDZ3lmVDVOYWFoZDlHLWkwWUpqbEZhNGhmZmRlYi1lM052N1V3SjFXX1JZQUZweVl3ZHRfRjZuekNsSkJSc2N5dlpENldPWEtmQTRoWW1nZDQ4VUwtaXdPcmd5aEhlN3pnSlZkLVR6RjdPVW5ZOFlhNXd6YURxQkdZZk04UXpnMVB4VFFHSVlnZEIta3FQNFB1aHBJVmlxZmZZMGd0RU4xMFpuV2oweS1zV2ZMWkNNTHRVdlc1b0xiaHdlMEdGQTExN3AxMV9weUZ2akg2UWZvNkdWSTN4d3NVUGpjVXFlUnZBSFpCX1lSbjM2NzRSbHFhZXZUa0RIQmhFakktejlaVWFwdm8tMFRkZVdjTlo3SXAxYnRJR3pFU3FuUFhjZkxwcWRNT1RwOXNJeEVXS0VGRVg0MEJSLUlkVml4eEtXM3REV3NxS3U2Ymd0ZzNCU2hGWDZSMjBfcXlzWUZMNG9hNEJ2UDBRLUt3YjFJekQ4WHRjcG1XY3dpN3ROYW44bDVhMS12TnJOcWRDREVJY0doMk11OVBiekwyZzdHOF9hQmNqa0FRSUxPVEdzUlpSSjlXeUtCMFdaeU9SZndIbDdGYjdrd2dpMXVETUVRak4yQjlkeWE4TWtUSEZzX1pMcnNFOW1qSGloaW9OTlNpNXIyRDR2dlRDOXVxSW9Xdi1HeG95ai1ueHNWRkphZVdrQTBnU0JZN0FLVnJKenl0ZnFpUHgyY3hMY2JtU1o5WnBEczZaYmdJMnhuT05VM2FoVFdXN2JadHE3dndxMlF6dXRlTjhMNGYwdVNpLXhnZ1BiYmM0c3JjVmFEcF9iNkpJTE95RXh3M3NnRWFEVnFXOWtmSXF2S3JXbWFPZF8xTThfUVVFWmdqMXpUaUNuM2xzVGRacTF6aXZDc2VzSHpTTEc4eEk5aGd1MDQzOGd6dG9Ca0RSQ21hTVp5TllBVmphTmxkZ3lJclBta3R2TnZxM01fdWZDNGhQOEZOM1pRTEl5a01Mam1sLVE1dFJVcGVSQzd5Y2ZvR0JlZlFIVVRtbzN0SWg0Z011VlhBMDhYV3AtTXItQTJIYWFqZlIwaVJCQkhKSzJwTU9Ca0c2LTNWQUFZd2taeUdETDgxektlN1hfdzJkQlhrVFNjRUppSUdYMEVOLWZTcTN4bENTUUFDc2hqYWhsbi0zelZJM01XdHpCNy1sZ0ZKWHliMl9oQmZWZmFBWHNxdk13V1RNcExxdFV6MnJfZThnYWY1OVZ0d1hHM3haUEkyLW1LdTR5bl84VHd6a0p1R2hjQTBYZ01TcE9DMTI5bGtIVWZCdVY2U3VyaXpkcVdKd1gxby1Lc0hHcnlJck9hWXd0aS1mMjExWG05Q3JybGY1YmJSZk5PbndZMDhXT1psUTZvek9wdF91RGtDZXhBSnpnd3VGNnA0eHBCZ3lFUTREbTcxdUpoNmNNb0ZyVThTcjhULTJucGNETzcwT2VGbmRxSElGNEJ4NGREcEJiSm1TVGtsZUZRRjZpWnNsaW9VV1BOeEJnTVhELUtySV9GM3JpNTJKRWR0d2djUVZUMERkakpBVVJXSmlYSTV1Z1ZwY01pRHZiWjdaWHN0T2ZZT0lhMk9HQUlpVWpxOC04ZmUwSVlnVUxFUWl1Njk2VVJMZlIxMW1kUVgwRm5ySmUzQ1dyRTB0eV95NHl6b3ZmdUc0S2VKSDFhYmpjeDdmTldTcDVQRWEzbzFmZjV0V1pUNEFPQWRHTmpBcXhGVVRyUWpfQ250UXdoT3lmNVlNRmphQ3NfTlA2OWRreHk3dnB2dnhCMG1fd2pQUEdIMi1odkNMOVBqX2RqR3owM3dCRXBaVEE5aWhha2ViajFIOTdCcHNsVW1BYkx0cUZTNWg5LWVDR0k0ekZRZFR3b1RCQmlMSElCZFJsM09fVmlPZGlPOGZLcGpMX09QNWRwaE1RYWNpb0Q2bmNrMW9rSXdaSk1SQzBqclV0dFZhYjI2YUVkX2FsaUo2NjVDd2JSUXVkT3FyT2JnNnkyUU91QzZ4Vjh3WGtiU3FtdEc2dlE2VTFjXzljeS13bXpSYzFMajAtMWFuNEU5cDFLYUtOSnRMODJZYzBaNEJ4TnNaN0ZlVlE2QnpycE1iT09Ub3dNYlowM0NjTFFCWmxqRzk4OVJuRnRORnpZYVFXeXZ0Z042OXVsMkNvdWdZUEs4ZkNjNGo4NXF6ZDZPZk42cm01Z090RlpVWVdaanNYU1poRmU4UHJ6VXFsVExXdDFEaDVEOVVQamFpakdMaGlsUEtaMHRwWWs0V2pRYnJrNVBtUHpzNmREeXk5NloxWG5DTEJDc180WHdtRzBRQjdaeGZ1cGUzYklYWGxjX044blVWYlRWNm1DQVNfNUFIVlhJQ09ma1lHNHV5bENneE5fc1VvZG8yWHp3S09uY0tfZ2J2bmgycmtBLVBpUlBTQUUxZ2Itc1JGcWRpX19FUE50WGVabUtYUmgyV2U5Ni1KZDQ1YmVBMUVqejk5RlozN1lDeXNUNDVSanY5emxUbGFZUzJEQ2RCR00xVW0tTHhrd1JjOW1fM0pNMWpKSkhEbHBodi1OZ2t6RHJLcFZxODJaQmhlSjRCclU3Mmc5TzB2RURQRFd5Nm5FZ3NXbWxrZENQaEkyYW85MzJWdWVuXzdXbXdhNVZld1dWUHJ0S2d6RC1lclJfaDNkcDZ2NXp6eVFaNXFkV1FtakVFbzRraE9OeVhwd2V1aDVqUVktSE0xQ214VWpFcS1QZkJJQVR1VUNaWDc3X0FiWXpobVRLOWM0bldSVS1Sc2tnZk9UZ05vdGFKSmt3UnMzREdWQU5XVHpQU2U0UE5jem5oNXpiZ0tTQTJfc0hMU3NZYzl0U3YzQTJ3OUNucmtFM3RBYm1oRXUzV0ZqdWVFLXp5em1XampjcXozTUZIWkVQOHpRZF9VTnVDUjh3dVpWcW5kNF9rYk5jV3Bodl9nMGV4Z0lpbTFMQi1RY0Fic2o3d1l3dmNlaFhVSUxZRkQxWjR2UjdtU0N2WGdMbGsyYk1ocFI0cTlPNjlsdHcwbUFmWHk4MkdhSUY5c2p1dUNzQnBUSk9lMWZqLXAtT3hWQmJwdXlial90NnFxbFlhYUZ1clJGeW5INm44eHBZSnZYLWg3S3I3MjRNcXlkR3kzT3dqc185TUEyamVsa1J1bkVSN0xra3p3TjZmeGttN2d1UmFfb195b1hFaVBmcnAyUGpRZjVpUFBNeWJISFF5Q01pYXpiNFJfSlJzUW90R3RZZE1QUkZvaXB5SW1WT19ReE1UMThSV2NYSHh5Q2hONHRYZnIzMkQ3Q2c4eHhUZDhzZUlrOXBHazJpNHpHR3duc0ZORUVnZDc4dm5yMXNULW43eXlZd29ieUVhYldVdW5qelpFbV9za19wRWYzMTlBYXhYV1pCYk1tN1gyQ3BRVEtlaGdIbDdGbFdSbk1SaVQ5QzZ4LVU2RVNLd0ZkWkloeUowZU9iWHVobFVObllyRVVTNUJJdUhWeXhLRUNqb2dDa2Nna3NKa3lLME5IS3pKZEdUY1RWTENKcTg4VjVUR1NpYjl0SC1WVVgxM1ZwNmdSUVJydmdNdFRYLWhJRktUQ2Npc2tVX2hxOV81Z0RCSnJfcTV4dGFZQTdwZ2psc3doaTk1dHhPZWpZN1ZRWWJod0trNnNKU2Z5WThRTnU2aVRxNUFjMzFtamRyVFBVdFJzQjExcE5wMkcydjR2b25WTzNaOHlyY0hHU0t1Yk5CNkJtamdUdmY2YjdacFdyTVhfY1JZY19MLUxLNmxQRUtBLVM0eE1VNDhYWXJqXzJwV0R3SWpsQWFQdkhDeVVON1k2bUd5V0QtX2VCaUpCd19qUzZuSXRFN3Jpd2s3alJpTWVDWnBFUWdacVJJRGFtWTlTbnlNT2J0M0Rodmo1TXJFNGQzVzl6OGNQRDI1Wllwb1VNQ255dnVWbWNzejEwUGpVcFJkd3pRMzFvZEpUYjdJcWE2cFVWV04tWDBqT3REbzFaT1JNME8xQWYzVUx4aXRIVjBVUnYxdThOZHR0Ni1Nai1GRC1sUjFoMjJ0UzM0aVl5TUlteDlSOTZCaDJuXzFTVi1oYnlsTU1qeS0yU0xfdzNlUEVjTHRjcENHR1Mwcjk0bFIwZzMxcjBMWVZXSkRHWVR3WWJXRWpLUFY5UVVYTXFFbEstWjN4a3dyMUhDXzVuTTRPZmU1dG5IQ2xQeGdVeDRyUGFjdlpRRlNjOUdaZGduRlVIRUZGc2ZOalVQdy1fVTI5ZWdNcFVxYlVfaTFPNVR3bm9CdThJYmNiaFQ0QlpiQUhFTjdULXRacElzbGhVX0RUcGxWbkRGZDFTdG9vNmZzaDZWbFdvMHRlSFZ2cWJnenA3M0FxdXBPc1c1cEJlTjY1MktKVTJHX3JwTVZ4SUJ1cDI0WG5QaG1GMUx4TmJweGtVSHZiNE9QVXdQelFYdHpaMFU2V1BBYzZQdFJTN0I2NUQwMC1jNVNRcWNfRG9qSlhKM0piemN3SkluNHluSE05ZW9QRUdnWENyV3FzOWQwSXVQMEN4MEdWQjdtbkY2WFJiY0FfT29hcDdnNEFJYjVGM0Z2d2lHaFZFcnNpMTRlZ0Q4SGVDLUY2T3hsTlk5NmVqV3IzT01XblZYTTRlTkJ3ZnFUaGJlSzFOb1JoczlBM2I4NVROLXRPel82TlRHUjNDVWUwWjNFZ215Z2tBOW00b0VheFltclVFM1JWa3EzR0FQRHZvODgza2gzb0szQjNYa0dMNFQwVnQ0YlhSc0trTjR5Z0xXQmRUMkpBUW9KZDJDTlpJaEZsMHNTelVMUjMzSmxKUTZZSzZUSnN6OXc4WVVJeHhuTUdBdFViWFJWWUNuNy1FY1FPRk5TUEtLTVZXeTJqYjMyYjVqbFJNTktUZWlMd0pqSXRGRjlHdzlsMk9Dal9lRnVMSUZUNENReld4VHFlbmlpanR5cktwUjVPT0NIbEJ4XzB5TW1pLVM3M3BlME9NTWM2QWRVUjYxNmp4ZUlTNjdsVXlaX0NybXVveENJdG4zaTBobHRjWWNsaHV6TGNUN2djcXk0d0NxX1N5elpqbzE2UnFKenhLb3VLU045Q2xTRUZDSml6bzE2cmlKeWk1WmZlcFBxcDI1aFNqVHN6Qjh1NE5GQ1ZCNGxPWEZ1SDRod1ptZmhEQ3FiNjJRTFhCSkJyckRIblRWNVF4NXk2QjZQS2RRQnQ1ZmdWMG0xQ0x2RnZ6RWlUT09iWk5SdGlhOUNLalhFT09OaUpOMkVNb3Qwdy1LeWRBSEtheEVWSUFQRGdLRUJCNjNjX0ZpY1l2MlpRVlJxQV9CRy1oZWk5dEVWTWF0NlNrcGxQZnRJT3d0Qml5eU1qa0x4NWxWdS1nX09rQlZ4ZVpETkRqbFU3ejZvTC1zRFpmYUxQdE1ra3pSSFl0cmNmVkp4a09sYkgwek03U2laM1paRkpGY3FUeTZaUWJNM0NhUkhTY0s1TFRUWi1iVjlnNExES1FRTnRlc3BNcEhYVHRNSWxsejVLMTJZeWVNTVBBVDg1WlFtbXZoRE1GWG9kRDhwNjd6dHVjWnk0eDNPWXEyTDBFM3BSOU9ocktLb1JGMUFYQ0d0blNiSkc4MVN5bGUweEt3WkhRSFBDaVNwUFJJNzhwNVROcnFHOWp4WjZCbllLVThYcFNmcUs5VW9XcFhxcHYtQnJjdVNVYzBqUm1tVlNxc3AwYjIxUFp4bjhJVk9xNlhPUG1KYkpqY3pGOVBlUkhxdUw4SmZ6TWlGSndQRzNHQV9vQlpRaDYyakJuUWcyY3B2akRhUDhQYkM1NnNTNzFLRWtncnRfbkNRU3FFekM1NTZxUE9YbXFhb1BIZ0twTVdzZVdRYi13d3ExUFpXc2M2TFpTc0lHd3FCbldjYWtVbHcwcU9CN01Tc25BeHVpaWY0UGMydUJJcms2bEctV0t1Y1NwTE9NaV9hN0FiWTlWcnhkN0tuMVpvY0pJYnZZX2RBVFlqdUpCZF91My13bmluYjZ5VGNUUVJHbi1YRU8tUUp6VEsweUVRUTk5Q29zTHRkdnF3VnQ4UDl6alJtaURnbmF5dGZXckFhQTNhQnFYX2Vza2ZWdDlKR1JCdTZQRXprOTdVSVFLek5zMXFjeDdrMDdPeTVIMU5yQklVZmJGRXZOUWhFbE4xSk43Sk05V0diNXJsbHpaM3czYnB1NjRmSnlTN2NSMTdQNGZQd0liZG1vc2JFTjlzODRHTzFoSEpBdGc5U1Q4ZmpGMjdOV1MtV08tTC1tZUhPMEZJNzNjR0JlaWI4a1lpOVBYMFF1VlJnM295eEtVeEl5ZjVfRW90Z1pGZDIyNjk4RjNRbHRyak1KQS1QaXlPZWkxOHQzbXpDTzhsSEh5ay1EUXpyd1U4ZkxfNm5PX3NVRlE2VDg0d1A4ZU5Wbl81dEViMEhYY0FwelJwOTYwNlV0d1NMQ015ejIyem1ubU9vZ3JzTUdGVXFYS1JSd2pmcjl5Y1lhZmxEeVV2WXVRUU1MTjRIX050dUx3eDluajJKXzZvVmdsWkRqdkhhUEFtaXRoZ2lsTFBCTW9KSGVLN3V1eF9rcUJLMDMwUEtKQXU1Yk9Ldm45WlhpSEVPaTllRVU1UTlWUEp3SmJxUEVub1N3Z1MwLVo2WWlSNTFBNjVIajVrcllJVFJTczdpX3dkQ2JnSU9wSWtUbVpQdElwNUpqZ2VxS3JqQk1oOE9za2NJNFVUSFFSaWZ5ZzlDeTB1U3U5VFNEYk9Qc09odzFMNF9HS0I0TDlkV2N3TmlzdnFSUFVtRlVtNGw2V2g3a3d2QU1DMzhKNklpSkNrZENDWEk1MFZURUVrT3EySnZTUG1yYzlfQ04wWjkzVzRwYTlNd3U0Y1lQZjJTY0QyTVQwLXpxamV6OC14VW1MSzBaMHc4VUs2SHl2YUJsUmx0OVZOdy1GNkNqaEltYl9feEllVGFVU3V5X1Z6OGx0OFJGbkhINE1fRjBSQWhmbVdxWThNVDNNaHlYajFoS0FLYUVHYmhVTTNhdFlyYjZwLWFQcmNMd1p3MkVuOU42d2QxWnhLSjhEdElCU0Vfcm1vYldrbkhDdTQ5dFEwM181NTBTeEoyaGswM24wTkZCN3RBRG5fTjdOLWFSYXR0VXM3MEU0ektFajZDVWRtdFNfcGxIYW1qWE5ENENrSkoyTUx1alJrekVQblJRa0lMR29RXzR6dk8yWDJIU2FNOWUxTzlydy1BY185SzkzVGNSMU9rWk4tTUZDT3pVd1pwUjBxQkxKeDloMkhzejFsY29EV1M1TUVhVXRjQVNmMlF3U2FmTE5lNml1RWQ1MHR5NHgtLWFqdnhrREpDcnpNZGFwU0hYX1RDRFc0cTdBLW5kS0JVLWN2QUpNRG81LUZ2NUcyZnhjVl9jY2FXTnV2Um11VGFvaHJ1bDktM1ZKdXdNcF9CaDhfRVRDWGo5TVlEb3U2N2J4cWRtUElIbjA4RGZqOHhZWWoyN2pmVGQwNWNONHBoTXpRUDlMb09UOHFlY3dPRnk4NGIta1k5Ukxhd0ZWMWhndjBudTVxbHhNdmtDcEI5NThJUTFjTmJVNmhXamRYQVBQZ2t2WXdpSWV6R1B4TzFfa3QzejF1b0pDT01tT0l4Vm9MbjFnMXpWZzdkTlBwZVBORDZ1NGg1b2JkZDFBRU9fbVNyT01YMGswWFBsMlRfS1RtRmRCX0dOTGppOWlPVTJLeDZPM0kyMnNNUEJ0RXZwSlBvSGtKblFKcV9zLWIyNThyejJMdE16TlAyRzNXZkctM21IMkpxYnp1U1pXcHFsOVp0Z3RoQXNnRXgwbURSS0hhdXM2X2FuWExCQkNVR0RyV3IxdGtKaThDLS01bGgtUnRaTnNmSFFEY0l6SjhYenVkRnQ4ZU9fT0MyTC1JZy1BNjFHN3ZsTGRxd19VWExpREpUVUJSWFczSnVmYkhPRHpIOEt4VXRucFB0S2RiejQyc2tiemxCSUFmOWI0ejdyRzBjVVFtU1F2UUVOcmpaNkROb1FqcEtLMFRXUFFMSjNMb055c1BJWDI0cEFMRnhndHI2Wm41cjc4ZmtYNU9hbUM2bDBGbGxsVDZVSS03VkszWXpQX01TMWNvWTI3aXIwR0NFbWVLQy1FTi1CRTN5YVJBdGZQNTR5ekgwUHA1bnJhWXBVWWpFNG1wTE1SbThOSEVKV3ozOUtMcDRrZHVydmUyOWxRNGJDTFR0TWZmMHp0UmFFVEo5VDl6dy1Ma1o0bjlpQkRwNWRaODd5aDFpazVhNllsd011X2xsSUpScHhOMnhLUk1ZeWd4LVRZaWpzMTdvdzVGSDNpMW9BN0VIRzlyQ3EwTVFqZllvZU90M3BacndDamoxX2V6a0tqa2NxNHpjaVVRNVhJYnZVb3BxZVkwOVgtUFVRX0YzVzJ3MGd2Sjc1MW1ZNzNWSEo4N3A2bjVWcENCVlpQUDd6Y21DNDhJV0h3Qk1LdExveWktRGZ2YUNRRWlpbFNtRTFQandsSm1jZWxTTTk5S1FwX3VodEU2LWl4bzF5ZzU3eFgwNmlfTEtLaGE0V09FUzdlb2ZmWHNjaHdrRmRIc0Z3UUNJZUVRSDNla2Q3ZUt5V1FVRGJpdW02VzVJYUNOT3FHQjlubEt2TlVJa0RzUkgxeThzYXktLVVzNDhzQlBGMEJEVVpXQ0tOMmdkaEZudVhneW1OSzJGd3hCa2NfdXBvQU9Xd3M5SHpXZU5XR0xKd09lNHhRR1hsRUtFYUxzR01fcXkyeTl0WmpDdFVNa25EcElhb1M4dUIwVk1vU0JOZ0IyRW41MEkyNFJFNFpSc3VWZ29nTlNqcU1FdHNHbnI5RkpHSHpNNHl0MzlrSlBSSXBlYnBpeWJiZklfOUFERmU4WERFcGx0ckYyUEhCdFJreER1dzNVeXh2SjZOcUJtRi1GZklXLUlTclh2MGZydVBtZnlROEdEWjR4WmtmZWg3VkV6bHh4bjhCQnpLQ2R4ZHhjX09lSVg0OTZzOFhGT0lmX2RXRkt5bmgzT3NMeUp1bTZ3d0Q5WEtLcWtWLXVkeWx5cGpSZm5GZm1sZUVJSlpLYXBJU20zODZ6VXVnSmo2cEhpMXd4T3Q1c0JLTG9GXzJmcW1KLVk5ek9yV0t5YWFVR3FOYWFuV1otRlprekR3RHpDZWkyeGVuNklnSkpBcXYzNnQ5X2VObXp3Vl9WTm9iWHJFYlhoWDc2WFJvVkd0YnlfNEpfaUtPX0d5NkdMZWQybjlCSWdoaGpzaERSck9yaHFkQkFPc3JDN0tZc1B2QWlMdnduaWYxcWZqZlFPOXFaT0xlUkxvdkVzdGtZTXZTMXlYSGxRZmVHcGVadUJnUFJOMFVzWVNSc1V0bGdkX2JlYnM1VUQ0eWc1eDVLMXlUNXFOclRRM1Y0UkJ1bjhHM29aNmhKdUtGTGRRZU9HRWFnc1ZFVWZwZG4xbWlia0ZpVnB2dV9YOVpxNm5zNTZaMmFQOE8zUW8zZm1ILWxzR3hsMjRBRnJnckMyc0pwSVJXcFdfcWZ2eGtWcExkQ21MZnk4bUQ0REllWUtEb1c1bE5TU3RMVFl3Z0tIelQza1ZpN2t5U1Y2Y3V4M1JCcC1IVHJ4Q1NJTmtzZS1rNjZuVlVEUUpaWnh5ZV9zZFB2TmstMXhxbVIwaEhlc2pjVXpudDQ0MDllMDhSbXE1cm03dHk5d2hSRGR2UnNucE95bHNKS20tS0RTNmdPUW9aUnlZWVI3Q0dWWERHQTBtaDhjOHBvU01NUVIzX1JDZnh1QnVjMEdnb1poeHZDYWZBaUtGcTEyRWZ6QUdIREdXbVlNczZDcDhsZzRvTm9GUmQ1ZlV6Q0RtREhmRG94NkVHRHdlU3FUeWxsRW5aOVF0NTR1ZWZvUWd0WGptdFgzYU5ZRUlTMjRiS1UyU2pVZVI1emlsbzVPakJXQUg4RUVNNHMyLXhiN1g0MEhOc2llTXNSLVpXVlU0V1o4ckRkUXpfc3loYVcyY0M4WWExdXBWOUpCdmdqUzRWMHpndnV4STZRQkNMMnlzUVRjOGVyWlZTRjRUbVNFc1RDQjRrRUtFd084NDJ0SmVYclhLZ0VablJaQzZMUC1IWVE3VXVMVHpfaGVGckxiLVVnV1B6T1ZCZVhUVGNqM3M1UFc0WVlKcDZPaWFuMGlDNWt1UnRJcE45TEtQVHVxMUNHLWFSS3prd1VVbUw5MTkwTHFONnVCMzNVeWMxczFkWC1QYWVtYW5WbkNoS3ZDX3ZIbElkckxZakNaOW5RVzdZVGRZX25KZkh3c045VkdxNEJIcTk4a0JFblRGaHFwOUgxWC1PY0JqcDIxS1NQRDdHN2ZrTDkxTFM2elhnbDdld191Snk5bkI1a2d5YVNwS0FPUklpaU9GcmFHUjdoSjJhRnJuU19hcWhtcDhZcWMweWhwS2ZnSXZhTDBkdFpkbHV4WEtCdkpMdTh5NHU4b0pnNVhxNUNhTksxNko2MWZRcFpoaEp3U1RWUTFSc2tYNXhWMUFmYmNnd19TbFRDejJNQmNkTi1WR1liR29rQ0ZzMTlJMVNNWjNtMF9lM1Fnc25mQXpiQmhydmdmU2tMTzBTaTJDWkppdDJVWW4wVWZqVHZNdEI3bi1fUjlzSFlKUm9XQVByWXVVOHZsMEtIOFFDOWVjOGNwWk5sX0k0cVZQZS12cDFsbS1zSlkzS0JRZDBTYUYyYXc4OWUxcklWak1PWll0eld3OEhJOW84dzJiQTBUM0QzNnlTczBFNTJ4RFR6dzBueE9fU0VYMl9fT21VUElHWGRnUWVIeFNpSWZ6MFhVTm9Mb00zSUlzVFp0T1JRcnFWcnlscHlqUk9hZzE0ZXJGcEowZDJ6czhHeFhBcGZyS0R3QzRZbjZJRlhiNm1XYnFxU1daaTBfMDFTN0lsUU5OYi1MMDNpNXBfZmR0UVNHelo1amhfMDZaakdRUGg0bWxjQjJkMzhkOGREVkQ3TWQxbXlDN0NrdHlfOFNmTWtTZTVhMVFQcUFEUmVPa3kwa2t5YlFRR3pDaGdvYWZlOVlJNFFRV3RwQ0tDekEzUXJCYXpnOEpMYktLUGI3cUtmc3JKRGhjSURzeUlCUnRCYTNtSmgwQzlHakJuSFJJckF4c2VUaEl1YkFILUlUVVhxYndBWUJLeHlXcUdXUWxUcG8tcEowSzZWLUFGaDlYYkNJcTc3M1dSQnNsbWhPN29ad1VnNkdleXNWdkJlYVRIUmd0SFVKcHJMSDMtUEYtZG1fcHd5YWdqbzNyRXFVTE4xS1NIVlZGRjR0T3VqUWZsdFVnWWFueDliUUFpVjMweFJKcnRkM0hrclRyNmFPNGplNW9yODhJXzZ3X3dKVlJwNFJ6YVJsZHhoa3A0dVc4X0ZzZ2M4Mll1anFzNFBOX2dTdkh2bzBveDdZNUYwSExpQTFaQXR2RW5qTWRCTlRCMm1KMnVrdzZCbmNUSkM4Y3hubFJ6ZG9sRzg4UDdtdzY2WGFUZ0NsaUhCUGo0cEFSSEFBdTdVTk5jZGZDdHFtVjljN3Z4UE4xTEo0TlhzWklwcjlFQS04aHE0ajFLWElNS0E5eHQzcGYxdGpnc252dWZxaE9NdjNFWWpyTXFybENCem1UdlFvZzRjcVZuV3JTT1ExalhrUzZPQ19QalE0YktrNmExNUltSTl5SG9OemgzcUNSeWtEMHdHUW9vRVdFT0hYWFU1RHgyTVdDRVhiVktDRVlza0tlbVJ0d3RXczY3OHdfTkU1RFl3eHY2V1BLZ1lUN1JOOEVab01rd1JmajE5ZkhYN1ItUHVJWWtwVzVNdnU2TzNiS0ZPVkttVk9manFxYnBVaVdXWFZHaU1mN25IOGlhLWxhVjRYZEswUHl1VVVBMnRCSzJEMGl1d2xXV3pNUzlrbmRsdjNvVDhMLTVVM0lLNzhpMjdYckozaHhGVXMwajM2T19yRE5waGQxNXl2eFhkVkNHdWMzQjdaZHhnektXNm1vczVoZVJ4YXVsX1RtYmo1X2Y2djM0QXFGb1FGZEtOcVc4djg4NlE0Nk1BTW5mMVpySUI1bEUwSTdPOEZ4RlVMdEZtTmVMX3BxWHpNYUdMd19PMC1Fa2tTMzBTSlVwamlSaWpsWlRldWVjRG94LU1JdW5BQVpMRmR4alVnTHVSTndjNVZOT1czVXBhNjJvUFJ0NUFieTRTeC04U2ItNE9rWG5ZeFZFczJJMllWU3BvczVseVVMY0JUSnduTXMtdnA5aXVHUzk5VVB6ZDJuMThDeEFGdGZoWS1ac2ktMXM5VEpYZC1hTXNSWXNmbDBfRzgxcEJSM05KaWh6SGVxMWxJR1pNMjBramlvOEFfR3BvNERkbllJX2tRbFJwZTR0bGt3ZlJZbE5Wamw3RlE3MkMxVHQyMzgxVGx3M0lSNEFhLXBCc0owdVVVZjQ5bXp4cFd0a1pJNDltNTVhQzVDWnRncXZpUi1TYWFsYmRscDZidkNBRTJKWHd0MEFKWXlZbHljVWhpSDBHYTV1WXlTNmtIYVk2SnZkNDBNeHNJd2pmNHlaNWFTNlRhWElVRnB3di1UdHcxRkxiZUk0ejlscWZuYkZDTTlNM1VscmRxSmJ2RmxsWE05Qlc4QUs0UkEwXzJpNVFXMENPbHBzbTV4TTl1X2pucWktWGpkVnlXVy1hTE9pa2VLcHQxWVpCWlBIX0JZZXpSa19lNWdicXotNi0tX2ctNDY1QlNjRTlJX3NOa1JnLTlMMFNaSVJGRzFrMVlPTGZOQW1NY19zTEEzdlBLSmpwYUxBTGM2LW1LRFYtSW93aE54cFNxTHhGYTNnLW54eVdObWZBOUUtcVk2T3N5S2R0WF9WQ3lMcEtFZGhmN1Jic29ROUtUMzliRlB3QmtXNG1jOUlQZUlXQ2NlbjhGM1FKaUd6MXNJVDBJSUxQeGF6SGlOSHpaNDczRnhJblNXbVBvV2tWVXJCbHh1T1hTYW5KbDAzUFFDdVVYbEU3WXhnZWdmVWhfcjA2Um1LRl9lQnJIT1lXcXMwNGNfNWN5SGtielV0eXZvX3d1WEREVjR1cXR0Zjc1cjY5Mm8yNVU5ZGF4NTNNRmlrM0oxUjJLYkViNk9oUmpYYnRpZU1GZkQ0MTlKdVdUS3JQZmtRNW1DM3NOOEQwZEUwLWRoaGFIbXVBSFJQN3FqTjI3Yy10SG9Ddk85d0NpZWpqM192UnVIdG16MlVLNk5kbjh0Q0N6MVpJMFMzcDNrZFJZWWNuS0swN0pVdEQtZEZocnNub2gtU2s1WjZjLW5DeUlJYXNnRVEzS0dIRUpfbGU5azlLRXppdFl6cWtRQWdZbHZnalBpZ2dIRVE4SUExY2xNcXRhZ1p1SVdfbG0yUE9oTnk2V0NyYlFYSEtPQkxRX1lOc2FZVnRZT3ZkMlZIOEZqSmFwNk90cGo3eldfTURXN3BfZ2YxYTBpTHVvSkFBbW1sQnhBWEVRTkdUR0xKc05CSms4OV9Sc1FwYzl4U0FlWlZaekMtczg2ZDRkZzdwclM3bktRYm1nSTVCUUJDdEtYbjZVSmQ0NkoxWkFRb0NJUWVHYzVQQzk2RDgzbndieVQxVmJfeEN4TlFmN0xUNVd2MHZLTkhodEpHdXA4YkVfd3lRR3l0TjNneHhaRkZRWlJncDNfTWh6R3J0eXlRekthUjUwbHJNd1lvMV9pelBxU0JDdDNaZmRPOTFJNzB2ZkdWbXhYa19Cc1J3UGNaYzN2MU93a0F0bTNSbG1rQWdiUjdMdGJsTmxuaUtwU1ZZSE5LeUpYeTNsbi1EODBvSHFpWEJOWll0REs3b3pEd21jUTZuSTNBN3IyOHRlZ085Y0dFUTdKM1pFWlBDS2hsaFloaUhKNjB0TkYyMlpZem1wd0ZRSC1Kd21lcjlFeG5JVkRvb3A1MHZiQWl0N1lSaHlPQ0E5MDVCc1Yzbk5YMGxGbmsySlNRWF9na29YTUtXcWFLQ0U3OWVFT3N4S2JQeUZEU29xNWhxcTVUeXFrVUlJbFQzLThCekc2N0VpTDFFM242amFJX0FTVkVHOEYzWXBGWE1CSENoVEhlNDRZQkFhZzkyWHlCM1VBWHZ3dmh2SDhoMnFxbXVXM2hZYU1KN1dYYWtRN0NvWFlaZnZnaDlFcEVvQUZRQzd2aTBzeWJDZlVGNFpxd3hKQVYwekQwMjktNzdoOG5FVndLbm1SbHRuMmluUXFoMzNQR1gyYUtfdW9fdEhzTFdZcEs0MVF4WmM3NDlpQ1VJd0tVNkxHYnp4MGI1Y1J6cnR3T0ZhWG9Dd3ZIRkdJTjJXN25xaEJzbnB2Vi1ld3MxeklRNnd3ZGNHUFhrY0h4OGxrdXNUU2xhRzVsbXQ2LTI0bnJqQU9uRTlxeUVDM1FJeXA0c3BSRnBFWkV1TndqUERvZWRvTXBTSVBFY1FnZ0NDWWo5YV80X1hNVjFhYVNWcFZyYThMLW5VaUNia2RuMVlIWjhGNVRUdW45N3VmVlMya242NkZtX1doYm5tOENlaDRHQTVvZmY0NTdxOFlXNzF0MW1yWW5lNkJobGhUZnAtaFYzWm1Ka28weU9pcldFNlZnZGhkamFyVS1sZFhhRkRPYVo4cVJCUWJPYkp1TjNhVzl2dVhBa1ptQW13TWt6cjBsRWVicmRzZURzck9neEZ2b21hejAzSkY0ekF4S0M5S0hzc21SX1VNMVgwUndxX3hfT2t3bWszLTlrQW9NRDExZnNoSmNiNV96bEM5dFQ3UWdPNDVLU3lrMERGWlFtV3FRVndvcmhGdG5ZbmhPaklhZ09xMUJKVElJVjFJV0dBOVZURl9YOVhCRlYzckhOSWlCazhNRlRIOVUyN0F0Nkt0Mzk0WkZ5MEF6TGhfS2hHbHROUllkMWRSM2pFaDZFTHJJTFFMWHZFRmViNzkycjlPWi03VUVabUI3QXNqYWZXOXZ4bmdNcks2TkJoUnh6aXNXRE4wZWctdXVwREIzd3UwUDNTdkN1eGROZXRyN3JjTzU0R3RaQ1RkNkYxeEtjbDVJOFl4WXg3Z2pFUnhEaTViUWFzZUxQWTJKME1EdFJNT3R4VDZUVkR5c1VqaE50WlQ3aHJoRHBaVWtPRk15SzhpOWdtQkFEX29rSUZXTFRmdUI1cjlycFZSQlNCMjJwT1AzRkZ0cVRMZVA0bEE0ZnpjRlAxU05hRTByNnNLTTRVcmxGOUx5Nl9SdkNmRVNna0s4NnEyWE5aemc4eVRLc2gzbkZ0V0ttclV4S1VnOFMxc3BWMFI4bHFkMno5RGVaNGxKWWE5S180cGdncUZlbTJmdGxKNXQ5ZUR0NmZaMV9oSE9jcjFYNFJ3Rlh1MjhEYUJsOFJ3UEE5V05KZFR0QlA0NHM2dTd2Q3FzUjVMc0hGQ3lLeTRoR1RNOXZmYmVCT2U4RTRLU0dOQldFN0JKaWpiZ3FVYzNCS1pORk1nNFQ3T0F5TmJFeE9WTVcwenhyV05aMEtyZGZOMW1wTDRldEthWm03Z2V2aTZVMHc4V2hubDc2ZHdGdV85a1RvU0FGTG1YczRYd1NzMUtYeW1pMkN3NXVJRGFwSmRYcmpNaHMzc3FNUDdsT2psVVMweWs0S29oNFRmT2RTX2JOQVotcXp1Q1NPNDdyWHRDaHJaT3drUi05QThzT3R3QUpVM3pZaVdiRUJVM0Z1Qnk4ODlpX1FVWEREd0YzcmhYZ0hMUTN2ZmdtZG95aVVrdjBTdzlydGxobXhBRmc4VmFTWTVLOXdhdWtXT3ZtdDRNSmVQcngtZHFTMGVwYlg4SW5yZVIwODhhOG83OFlPOWZNdXM1VTUzTXpOOTZJNnJnVHpnMzd6Wms1RlN3c1V0eVhVOWkwRzFibnk5TlVqMGtKMl80YnVCMVN3S3JWbk1DZGw0c1lHOXk5N1hxSi1wVmZxTXd1Ym5TeWVHaWwwT0lrNWFzY1JQMUdtNHp0SnlLY0RjQmphSWJYak1YY0Zld090ZUVmcmYzeTVKUFBHMDctcTRqMUw0azYtTmhaeWs5c25odWZCdkpjSUVzWi1ienEyR3JYTi01NE1yMXdfVVdldHBOSm1raldyeWdGQ0xJVUhSWDZFWm5EVGRrUEw2dE9VbERkRHRxUmlMTkR0S2pTbkpDZm1DUmRZdTFYZHY5dWN4U194S0s4cnhnN19WaFppVzdzTnM4bzNhYjBlcUpyQ0JFSjRwZDVDdE9ZS0R0dWc1X3FmdEQ4a21RVXJ1TzM4RjNFLVRXc1ZTQkZZMHBHSS02bC1aa1l2OEtaRWNURnQ3N2JRQTdGLUJ3c3N5aGZ2OU15Q1VsT3ExN2RNMS16blR5bzVvbTVaTUM2NlA3bmFIR2M3czJ1dGVpZW94NF8tUEVNV2lIZk5HTU05Ymo1YzhISWZLVU13c0dEa1YzdE9fTjFzRmpDZThwOS1Xcld3cS1LQVRqZTkxdU1BWExDYTl0MFF6ZXVUT1ZvbFctU045MWc3Q05nWFFudDd1aFpibm1mNm45VG1yVnRQZXpMSk9odGtQem5mNVI5M2FQU3Z5TkNSTjdiYjl5SkhiTzN1Ty12emtCZmEtZGl6WGtmdllSVkI5eEVjUUpmdm55XzAxd3llRzFNc1pPS2JXY0d5Q3dZVmxaamZnSDNkNVNNdFZBYkVtMXpOVUh4WENtNGkwNjdHZVF3b3dac0J4b2czV1dRdDBMQnZHQnlEV1I4U293a2l6UlhRdmRIakdMNEFxZTdOQlVndFc3cWgwenFSTERXcFpXd1VlSXZnV0ZQVkptd2RnQUZWanl6aTNiY2prSHRXd3VIajhQSXloYmM4QzdYb3g2bmZDbXJGdWRMNHZnY0drR2ZaUThZQ2owRlF5Vm1pNU53eHZfYmp0MzVVcWxwRU5nZ1VqZzJxLVdMM3BodzJyeFRxVE5zYmJ1SHIyVmFHWWVtX0h5SC01TUcyaXFob3dhRDk4OWtNbXBTX0JmaENkc2U0YVUwbTVUNWZ2aFVuLVBQUWktb0hsX093UkFBNlQtaWUyV2c2MXR2NE41UGpvYWRmZ3NiTklOSG9lU3dYN2ZzQzlfQ3Q5WHRQSGdsRlhpTWhOVzdic2JJajZoSGlYb0g4dm1qV3NGaDRiQmJPeXpSN0NSQ2ttNVA0MU1YbEZIdEpZWW1zeVpuM1pUajh5YnVCZW9pWmo1R0Vkc2g0Q3ZGVjA3UVkxdHI0QzhOdU5veDdQdUhtRUZLRXU0RmgtTWJDUXIzWEgtQk8yT21mNHFsLWliY2wtdVBWOEdqOV9qNVdaUDYtWjV0bl96YWROZXlodDI4ZUJRNjRyeF9BbUJMbkdFMDFGdVVRVjlLR3pTZ1JVRG05ZzVWeTRxUUp1Y1AyRm5mLXdFVVQ1NFJLVUhFUmc5d1gwakdDd201bUV5ZHFsd0NTbmVCWEtqaWk3eTFybzlndnN3V29oZ2ZoMlJwLUhxdWJSVG91UFk0ZlBSZkVwelFhNm5MOWh4SzVBZHZySURDdEVHWkF0a2Y3V2lqTUlnenYyWm14eXhTd09ieHFhWjBHLWtnNkZVeGI0ZGdUTWdVQzg4eXdITmthMUpyXzVBZXJ3RktOZDJ3Wk1ONGt2ZXNTTnBsRzhRSzRzY2Zvdl9FT2dqalp2NnpJelZoTVVDSHZxVThGbXBqTGhfWndzSlB4dXU0d3Zoa3JTeUE1WHNiZndYRTYtaXJ3X0tNYTVGLTZnOTUwNjM0UEdnbXV5SFhzVzdHMjM1WkR3S2w5UmZJN0R1YVpsVUtUZjVMRnBoTW82R0dvaG9yMDZwOTBER1cyNFdFNnNzUEljeVRqOW9ieGlTRE12NllYUTdpb2xkeTJpN0stdzd5djY0SFo0bTlSVzVoVm1rOW5kOEJhWlpLQVF1eFdta3RVMmxHX0tvN0lIRE9oRlFseXZJSTUwaWR6NFZNa3RRNlNCb2F3RGJJdXdkNEIwMHRHNEQyX2MwNExIMGtGOE5YLVhWd3pTNzB3VG9FWGtlRW5XdDlWdnpNSG5hWjdmenp5eWw2eWVvNXVBcEgtekdYZ1RycVI3WDFwcHcxbDJVQy1BV1NPbk1FMHh6S3FmdUZ3WEFKeVQ4SHdjako5bVRHLWE5SUFHRkk0eUJSY056NElTVkc5aUlkMUpPSFBiNk5VYzI4TVROdVRxVF9yak9hQ3Bid2djdWNrQWpWMHhuWExGQVg4SkktMkVVenBROEdLbHZDOG1QRVdTRHpEbTFQRVZaZHRscU9IT3pCRWpyb3ZYZnBsa2huZFFkY0hRN0d1UHQxQWN6Rjk3RFYzaGtVa01fUm1hYVI0UGs0eHpoZ2tOVmdqelIteEI4VE1wNkdTNVNoOUlZSWNmOWVwVE1UQjlmQ3ZxcnV1OGdpWEtRWVpzdS14ZERraHo1QXgyU2NnTXhiMmFSajlsVnEwQXhTdGVJZjBVZ2RPRnd4VkNyQXdxN09sdlZidmFfM21ONDY0YjI2VHA5amJoRTNObHdaby1TX2hqQnBkajVoMDdsd3VueGg3cExfdE4xQWd3ZHVZVUltQnI4MTltSGVIZHRQUGhUbFJLQVRaOGRVLWRVQVYzcjYzcUhwM29iWlItaEZzNlRhbkM0dHkxU0NnM1hlWEZSaURnRGdiWHNVMjlKMzU5N01JbGdObGxZMl9lREJwek5yd3FTS3otWWhIUXdiVHcxWDNyWVZKVlcxUGNXYnpUQTlULWlKY2V2X2pSbDZVZm00Vk5RS0twRjJNdVRlZVltejFucXAyTkJ6cVQtdFRZcTlQRTlRMXhBRHUxWFVQUndWcmxiWVBMWVJkM1dTZlRLa0JCeFlCTDRJRllHdXYxVi0tRDhnMURScFBvN2x0ekFRMEU4SFVvMWVLSG8yUFVBUlk2bF9ReGJhLXA5ZGJSWGg5Z0hVUzBxZFIyNDVYQjBKRmJGZ29EX1dEQWk2blpneW1NbEVGZG15dVo5eWxHMVU2RzZ1ZnlyWUt0U1BoMmRQRUxxbTItUGhELXRVZHRxcUNCWkZpbVA1S3B6VXNSR2VuMG5wQ0ZHcXJjSWU5VzBxVzRXTS1DVkJMWFdySGVjQzJ3TEFBdmdDRmJZd3JjTEJCVlR2a1laVFpkNkdyamFKRlAzbTJwZ1NJbzBKTFh2TG05MVNOVXRFVnRxMTJrdVpubjRnUUVVRXZZWG9NMUxuTVVNVWtUUlB3b0xPRjQ4M1Bfa19NUGtVaC1OdUR1MVUtSlJCUUE4QjhGaFFFSG9aWlhFN3RrUU1zc0lPRENBU2hkdF9RMXkxM3JIQWJ3TW5fdGE5S0p1Ymg5V0NoY1NsTWppOHVOQVFQRUpwdThuTmhLX3ZxbnhGSGY4eGN0cUw4Q292anVCbVNkd3VGMlhxaVpaVC1pUU9adVFlak10bVBGQkh1VDhFb1ozOEV2NmxmSi1nS2ZybWtEMUhTUDlzYjNuZ0U2QkwwT0RBUVhvUzNiWjNRWmhiLVg0UVpRel82bE4zYWp4UnlvREJwVldwcFpCZGhEZzZhOHQxX2xXRjJFMUVjZ0FIdjQ2bE9zTWNrYTFQSVotRjNwUWhlUVJ2MEVuVDdWTjJ5S2dpVnpWMHVObWNsOG9HYXRSbkhrODRqcTFCTTNRZXJxdl81aFMyRnRZQlNjVEVzMzhJTmdMdGVscDY0ZnctcS1tS05KNDNFUWFSWndweUdDNVFIWkx0M0lsWEVPNktXdWpyX3FpS2dRYnQ1aC1VUnBRc05FS2RoLWFWcHFhdktBYmZrTDZhV2NicjQzRS1VejYwWUo3bjR1aFU5NUoyYjhCUGFYRS10bDN1WURrSWROMWlUSGoxS3NoZDNDa1pEZWJIOTlxZHJnTDlsbkRKSnpvclJYODZDLWFMMkNiSUJNbWZsZUdnSTVQWUsxQmJwWi1hYzFnMlA5WGtuU241RXE5ZVltX1Z3Ul96a3NXZTZvTU9wVHJ5V0prY1psMWVnc29RUURkTUxlZWJaUzBFY19UTkJ5cE9ySkl4c3pQNy1XVm91NFc0WGFNSFdlSUluZXNTUmJfRzkwNDBjenZnQzlsV081clhWVjhYUEd0V3VPRVBQZ0lXZmFYYXdSUGVBUjZocEwwa21JbGJYS3JnUkFMaWI1dFEtTUVHLXFQamhiMjRjVmI3WXVzN0NRalR6OTc0aDVPTUlsWS04cEUyN2h2WURjYWsyYXcwVDB4aFlzQW1PVHRWZ0stYU4wU3VnTEphdHNKd1dlUUlNQWEtNG1zR3ZWeVVYWUh6UVd5X3YzbXZPaEFubW5iajhlUmNyQ0xKSHZlaklFQkh4VUg3c3lKUTVJOGhHSnNsSmJIVFFQYzUxZm9MRDNFcWhyNlRqSl8yZFR5S19ZN1V3aWZiS05WTUFTVW9ETzNXOUZRQXp2TU93a0NjbGFEYUtITkR2Ri1RNVVFOTJ2UzJvYVllYlA3Zm9lTm90UXVzQ3k1dGlrbzZhSGhhZnlGSU5YcVhBRUp4ZGZQWkM3M2JHTXlVdlN0ZC0tWTlyNTl1YWxNU05kbGc4QUNuWDdhX214Q29qQmN6VnF6QmV6a3N6QU5HZXVHRE9nUHFsb0Y5OGQ1dW5TRXdLazhROG1FcnF3ZnQ2ejJsT0RqZGdubDZZU05rdTZ6SzlWYlpLU0RTUllpeEtsUDRDbjlEWDFYZE1zRmF4RlhOWmtlem9DWEYtdWsxczFmMkR6QS13REFianpmNWlqZzZHMmh1a20xWEQ0YmZsZzFhZUpzT2tXdGFJNTBZbk5ZeFFTWnAyb0pzOXpHMUlqUnJHR3BIOFE4YVJTTUhhOU5uMUtiMGZmS3dndlphN09HTGFxUzU4aE1IZzZrbHZXbnlBWmFaUEQ1b2dhZmZMcWJ3YzU2NFphRkoyWTg5VGMybXZhRzJPRFUyQi1wSGVMOGRHSGhCZWZfOURsX1VBMkZRWlpmVGphU0dzQUVJemdCSTYxTlFycmZiOXp3bkVpR2NySTJueEhLVS1BbG9hQUpZa3J1eUZ2ZDNjd01yUHJnbGw4cUlnemVUeXRKa25JMFlnZExCN2s0MldlTTA0NDVXLVR6NndHQnEzMHV4ajBwUHpMNjlfVGd5cGdNcWNNMUJCMHpNUmJLTDVsRV9pbjFzSnRGb1BxVFJiV2JiUklueXNsWkl6UnhjWFVtbGR4elVfRXpKMWpZN05rQTUtTnRpNEtxMnUwU1JuM2VISXlVN0RpMHZMemVNcUdrSk8zTFdIOW85OXM1N0RuODZCMHdZOVhVbXpiNUQ3M2xVVndLNzhLZ2ZlMW5LQURad2tZSG1TTVVKUFhqNGtFYV9jamRldmxPMmlheTFFd0xvbFZ0YThDYThJTFo4WHBZX0dyYjlzNGw5d0w4bGhBMk02a1h2Z3daakRBQnJtZ1J1NTc0c2JUWkdTMDJQODFXUk12ZjJISmZWMGFwUjVINXQ2NGpOTlRtdU5wQTJjWExSRlVDQ25FVS1KdVF1MXFvREJOYVYyZzNaQlMwUTdUd2wxR1ktUzE2MFkzWk1XdTNIS3RlR0N6LUh6VVZqc2lhWlpIWU5tVjlrc0NjVEhEUUdBY2stUnBmaklzdHhYTThIdWFGaXZMNzJfb2hvZkRYdHJlWXB3UkJiVjFoQnlaS25zQ2thUEZXandNa3ZHbUtubXBKbHFycExxd3ZENEV2dDJlc3lxUkxqYkFTUEktUldnMXQ3R0hJWE1SLXM5WUsxRjBHTDhCUXViQWp5WlJuMDFrNV9GSl9VZ0R1b1h0SDRhUWJBTVhyWFgwdkpmdm8tSHYyM2xQS1U2Qkt4RHN3aFZMN05RWWlLN0ZWZHZCLU0zYXlsZG5tY3NLb2ljTHdpTmZEbTRVVnkwNGhNTl95Yk9hbFlhNWFtbTRxQWwwTXU3UlBPeWVrdUg1WnZ1XzZVQU9mcF9pUVRUZFlHTFJ5S1VQZDdndGdmM1N4NUw3N284XzllZWRlR2xJQTVqdkR0QlNlNG81RTlEeVpGSGRvU19JQ0dlNU11UDgtLU9TNkJ3dmViLVlQd0xLYmxLYTA2bnB0a1lkYWVxaTZQWExoQzhLYk1WeU4xREZoNnA1MTM4RUV5Y1QwSXdCdms5akc1MG9vMW9Ob1ZuSW5QMnZYcXNkeWg3enJqQndkNUVxRmMyXzlKbmt3ZXR3d0xjSHJYMTFqWkR4NlpEMjMteDFaMC00dEF5REpyOVMteHRQWmZwQmpwUHIwSWpGcEJOUHdRMU4zbXJaZlViSXY4bWExWFczb3R6TVdnanVWeGZIdXctbTlERWJpdXUxYS12RlhuYm9hZU5PUFgzVFJkZVFfcE10RC10ZnVKUFZ1d1pNRmlfaHpkWWhoSXBzUVVaMU1GNEprRGRHNWsxbG52bGJ2cFRtbmpNd3pjaTAwY2F0WVdLYXRIazlyaHY1d2h0SnRUQmFxNEZvZ3djX0pQX2N2NmxyNkZ5QVlDTXNlbVI2amV3R2FGd0hnUWRWQ3JqRldzemtHTzd1Z2F3QzRKRVltQjRGMjRmamVhRkc1VzBaU09UQ3Z3NmtzR0ljX1IycnBSeTBwSWVvV1IxRFdJWkM0UUV0M0txcG91QTdQMmpCazZrd0s4MTUxY2hLenNNWWtTUWNqU1pnLVMxQkQyMTM2RU1BN0k0MWs3WGowMkpBOUxEOWRqTE41dXZpbTUxdXQtU1ZiTEZpTHVPOEdwYkVEX3JOeEo5UzJqaVN2ZFJfcE9hOEx0UHY0ekhrWjFvbHo3NkV0eGE0RjNWRGM2TVpNYm1GaDJqTVNoVW1ZM3pLQ2ItemtyVWZPZGthTVFLRDVLSFpmR2ppZjdteU9jaWVwUm9lR3Z3ckliZkRieFlRRlIxdk83TG40Y0p1ZDduQWljOXRMaHFtdmVRQ0NxMGhKaFR6dG1TWXpoek4zZmhySm8zdnY1aC1Ud3JZSXBfcTdROEV3b1M5Z24yXzB2UXBVeFlrNnFOVUxrblJaRTd2ejFUZGNNX25qelkwVUwyck9KUkpwSG5IVjhGZHNGU3RjVzNfdFBlTXVXTDhRWElqMzJRU1gzOXMwV3QwVGFiRVJibU9fdzRGNGNCTlRqZjFzSHR2d2xraWlkUTVYUEVSUWE2UGdfeEt6SzFXd3RWMkNEeWJmLUdnT005ZFdXZW9SMXdodkcyUVl2TFRtS3hsM0FiOUJ5dHhOS0RoeGNPVUdjVWdnUEJwX3lVM011ZERZWC0yb3JfSVhrN01yMjIwbzZqcHVlNERMYVhFd29GX3R3NkZNLUJkWWgxVEE0ckhDdDlFaGl6aEh1TjU0dFJUMUd2OFBsZXpBRC0tRDBxUW5RRmE3ZE9GcmwwSndhcThfTVdUeHRwWGhYNjk4RjhvSXhOZlFWOE5ZUDdweUdWYUxjU2NTTFU0MFNtWkcyMzRtaWFTYkxyemJTbFR0N085dVpDY2NiZFEwVmtDUkxoN0tpcHFQNUp5QlIwdXdKZG1Zand6aDkyVURrQmRzbkxvM0c2NjlxQXpVcFltWi1KSk9oVUVnMXJ4eFIzUEl3UHBUX0l0REQwRzhZQTFROWVBeHRwWVg1TU1kUHNnckhIbnJDbTQ2UUc5WkUtSGlJTUdoVnZCOEhUeUdqU0tFakptbW1DWDhNSEJBeEVjQ2JVWVVGNkc4VFlZNHFBVEc3VkhaV2NQdUJJQzZwMTBtX3I4a3Q2ZU0xSDhrdkJka1VsejhVM29uOS1abDNzbExLZy10RjJxU21fMDkxdTJRU1VGbEpuRlZ3VGVFWUVUbG55Y1k0VjN6SGxEdHlEQkFxS1JZM1gyYVVzc3pNU1h1bGxYd3ozLU1qX2ZqZjJTSlN3bDZLSEpaY0lja0hwQXdubGU0X1Y2YWpoZXRzX1ZCcEZMVlJ0Z185Tm9PT2JmYjA2NkVkZ1pHY3NkS0J2WlhNZ0J2cW90ZndoTWJDRm85R1o2TkxJWDlXSFNpSHk5TmF3U2p5QlV0WkNvcUdpb0JhWE83SktBMUYxQ2FVeTB4aHNIN3JocHZyZjd3aDVET25mY0Q5M2g4THBtejNZWlFBY2RPTnFYZzBOMUthZWgyV1MwZTV0WnlQX3FBTnR3VEVxN1ByVGlTT0pESEJqaWQ4RVZyZl9FLTljTV9BbmhpRmt1WVBzSFRWQmVPaXZZREJmNWJuUmJSMEpRUjZRazc2NjUwM1FkX3JsbEFVaHgwb3ZIOHBkZW96V2JtYWg0dHdTeHZ3b2dqMnJqeEl2OWhNd3l6RzFoaTJaalBiZmxJS0V3M0tJd3hLZFczbHVxNTJ3ZkY3SVJ3c2tIZDY4TlNrZTdpejd2YWFySG1UMEtyNlZiVURNTUZ0c0VGRnp6U25PUzVraUwxSk1TVkRyWDNqbVgwakRPSHN5TDh6eW9pMkx2aVlTdDdJeXBqbnlqOHpuUWtONnNDQndfUVBlTUVQSnpiWlBJNkl5bDdYRVRnV09sVmhpSW43U0JYbzBXc3l0MW1pRm5IZHFzZElIWkdfcU80MmU3YlJ1a09DZms5N1RrME4wclBfbkZYM3o3NkE0Zy15WGdhSTRsQ1JnZnVfZHNFbldyY05iTHJKRVFHVGV4aF9qcGV4b19wa09jUDNENjhvSG9zOWVKQ29kZ2UyMEhlX2NuV25fZHUtbVpVU2pUQ1E1UmFIOHZxS0hMeVM1Rm90ZTVNSURpMUhWdGE3TmlXVDFuQnFQcHJXeG9FY19wWHdlVFdIeVlmVHBGT2RXMFhuaXhyR205OGtaWnk4V2FJWmMwakhkX0xBQWxCQlpBeExqV2pRZzd2bHRvUV9wV2VxWTZneHZfSWhOYzdaWU9nWlR3aWlTMDZwTFJXMGlvUnBmak9SdmFZcVRzbjRidXNqNEIwQUsxVXpVbXhUU29JY2ZudGdLMzZUanF6eVlMa1JyM3RCRVpSYXU4WHFaUUMxRVRRRnVlSWhrNjY5NnY0OU5qbjUxNHFhNkJpcjI4UkxELUpsOWk5MV8xcXp3ZmtjcGtWdjd3MzRuOXY2NHVGUHR3Sm13MkVkTThkU3NNYVJWRmpudTdnRUYweWxPSG96NnBNRUdHQjFWN3JBcHhiTXhzaU9DVklnZGJUeWdTQ1FfOTBVb2YxSzlJVWNxdDY3RTRHS2pUQVk0S0YwX2dUT2VOYzRmcmNvRG9ITjFuQVNocE1pTEJ1eXdLZDhvRUpyVy1QY3VWMGc2YV91TWhRcVhKZE1fXzgtUWdxSm9BZG5UQ1dzXzdKdGxhQnhrWU1USWRkMVFCeTFTZFFTQ3o5SnB5MW5vVHZkZlJ4WmtPZjA4bmVqV192VUstQ3locVBrQWZJQVp5TTJTdGEtUU1JOV9aMTJNd2QxODZIbkpzREFrTDNlMlgwS3BlUDVXcjczR1RCTjdOMVdiSUtTYVVKQld5Q1hWOEFwQXAzTUc2eTJ2Q0ZHTDd3R2xVeDFBOXJZVFZ3Z1h2cm5XdDRvTFNOZkdsWGF4MV81SnpzcVVHbjI5Z2o0NFk1LXZrX19sbkZ3VXhGbWE2V2N3REhiaGNRY3NwMGk3Wjk2ekJPOUx0QjZtdTBBXy13RjJVVVo2amE1cHBUWGdCNmdtbTctS0RiMzY1b3Z6UldWVlZJVVFCVDZ4VUREYmFsLU52VEs5QXBETl9Wd3JfTGxITjRnaGNqSHZ0ZFZZOERFYlpIQWZjczNyRHdwNHV4VGhiNWlnVFNFdjBnUWVrOGRUS2xLaU56Q3ZqZlJCT2U1WWdDUDVZLVpsRWdmbHZEeW5TTHNaVURJVTA2VXRpTS1NVEhCOHY1Q20tdEVjVDZBVkpNeW1WR0xKT1o2dkUtem1mdXB0dTBtLTZwSGkyYWNCM1JVSjE2OHJyaEppOG9zYnY3SnEta3lmX054OUhLUjEzOURDcGNmdmMtRUFIMk95NDdRaXdDclp2eno0SjVRelFpcVR6YVFsTnd0VnpzZFk0M0Q5azJpem1JNlNNWUhjLWdUVkl5YmtkS1N2bWNfT0JiRWxOdFRERXJRZld6eTM4REFZLWZ2S1VObU1laWVET2ZST1JiNm1UdFczLXRMUGxsSmwtM3pGanVIbng4Tk1rbzhzS2xjMUN6M0FvOHg3aGRxaXp4dmkwellFbE9QLW5BUldNeE9ORm5CMmhURVIzMHFVYlB6VGtuQkQ5U0ptMFBicUpmUTBxY1pxeGFhX3lOUmlSY2NXVnd1UTBUZ29FSUJtNXBBNW82NVY1QTB4bDY0QmhlMHVmUXBaajBMaVJ2UGlGVHZXdWJyX1MzV080YlZMS0ZRbjVkSzNTQm5pRkdLbUxIZEhaT2tsZTlTUFoxeFFoTlpPWDRYb0hIaHNtNnpKZzVCWS1rS05QZHEwaEw0dTRabmRZOU00b21odndaaWRfQzg0VHlKdllldHhjaGpDel9aNFpBRGlTNWFFbE9TVXBveGJsY0hvVjZCdEZzZ0x3emxldUNENWZISHdGYk9oNWJxOEk4Ym1lNl93OXJGVXJLN2ZJM3lmQ0E4WXVybXVibFZnMjJGekZOR2tzSzRVbk5wV1BHb19MRjhCMkJNVkFSTEZreXRLNWlwQndSRHRNb0Ywb20tQ2dRSlVha1hfTUE1TnNQUFJxWFBHUjdrTlNKZF96eWszam1BSEs0MEZ4cGt0amd3WURadFlrRnFHTDUtN3RYR2xLV3hxT0VjYjMySmJUVXpCaUxPclZHR09iM0w2WWg3Uy1tZDJRVk1QQklCQm0xRFBIaFlvNzdWU0lPZ0ZNNFpEOVpsdHNCN0o2ZGhHYWJoNVJCc1lHc1ByRHNVWjRMTlFtekdzbDZEeElpMEtudWlieVhvcjlncXVna2VSRE9hQlIzV3c4bVR3bm1WREdJZDdBdXVTdFJEWFlqNXRyS1FZOFgwaWdBT2dQMWpjbWVpRzN6MDNyUVNTeXU0VzdmbVFESnFnRmk3RjRFSnh3c2NYdTZ6MW4yVlZTNWNzejczUDBZTjhYYWIyQWh2M3pLS0hOdmlfNXltRVZ3S0ZneHpnVm1Sb0xJenpSNVJDRGJ2clZqZTMwSEhZejBBbU5FZUtMeVN0UXl4ajhoMlpjZk9DYlAta1g1alh1ZkZiclBjeFVCNUE3NnNrWW9Yc3JUWVBvdlJUSmptU29BRDh3SE5vcXBuakJGcjlCUVB5X003c0o1NjRRMWg3T0lWc3czQllmUnE5Q3htMVlhRnNnMUo0VXNTZXVXdVl5MkpKbDNHQ1JCTWZTcFdRR1A0N3NvSEUwbDR1QTlOd0NCSFVVQVdaUXJrZXBnYjY5dU8tQWFHMTVjOVpuTW9yR0txeWROUlVBcEp5aEZHcFpjSWJ0aTRJd1o1ZF9oSHpBRkVXaFh4b19EUkowY21pbDBBRWRyeVprR3RLLTdUS3hSc0ZVSlZ0eGQ0QU1LVFRGVGd5U1V5UVJQR3JvWjl6RmNwR2ItWFJEODRLSTE1VjhDUnRVa2J4ZnNnWlBqRkdtSERiNDN2OXpJOE40Z3dUcHRMeWZ0Qm9kZTk3TUpBNzkxRUkxVHEzWE1yaGpmVzRlbm9YNTJwckdsYVoyV1BUTTlrWHYyanQtWHFFTnFWS1JOeTk0NTg3UmhFLXdMUDdtT0ZndmdCTWYzZVNkSkQ2Uml3VFZHY2JiRDJYQi1tVlVfSmdaOC1xQldFa2xTbVJSR3lhQ3JJR1gyNDZXWUxXTlExODBHVHRPYkZvdEVkY3dFSHBINnd0bUJxTkJ5UzBVOTNVZ05hMkhraGlJSU9BNVRPN25heTdFaDJBbWhFMmxHSGc1bF93aTFDTWJLdEpMYzBTc3VCWmFiZkd1Q0VSVk0xeEpsZlRhRVFHRVk4YVNrSFJkZ3RqenJiMW90Vk56Yl85eEtPb3BrbDI3M29qX3NJX1Nkdm5WaEdueXAyWkxMcXdLTnNxQVh3ak85WGZtekpXanNESDlQbUJoVnYxMDRqSDBlY2k0VmtVMDVuYzh6VWM0ZW5Kd0g3M1RBcUhuOF9SeExOcWNrWGpFN0ZJbWRGeEk9 \ No newline at end of file diff --git a/benchmarks/datasets/Stealth_Bench_V1.enc b/benchmarks/datasets/Stealth_Bench_V1.enc new file mode 100644 index 00000000..dee10449 --- /dev/null +++ b/benchmarks/datasets/Stealth_Bench_V1.enc @@ -0,0 +1 @@ +Z0FBQUFBQnBwcEFOc2NudlBZVlRreUtyWEpqLUxtYTV0cFZSd0NhRHNJSHNpV3VMVkV4ek9kcHpNRHdTdXdBM1h6SEgtM3c5U3EyWkJ6VnhISEF6RDRkWHFxamhyWmZKVExZNTg5MGJyRzJHV0ZiaEFIbEZNV0QwZzJwdHgzdHhxR05YdmI0Q28yWXNHVVN0Q2dXVFhia2ktc2lybHByaktzY1JnbEdsOWNKUTRkUzYzM3E1SFZBVFdHU2FKcXR0SVRUVnRxVUZudkVuX3NEWHdZb1pQZnh4QlBVOWhhQ3dhNlItTFMzM2lLR09uWUVDMGtxRE41VnpMYXpadWp2SEgySTIyRmRkZFJQZ2l1WEpQQnZqR2RKai1zNW5hN3BOblk0aGFkZGgwdG9zUUpQRldybEtfTGxCcmFGWGl4dE1mTWtTV2k4QnJfeFFseWZ2WUVWaURDLVhVMENUVFpsaWdzVzZ3RHNMalMzTHhvdHhValFxMGJtdkczUFQ0YWZaelo4bzJPZnJGSG80eXNpdElOOXRnM3E4dzdVQ0dYLVRhR0ZMUXV5TWc1MGtzN191MzIyWGFjTWlNekpqOERBWUVINDRjaExTckVicngweE5vZm1Ld2plVm5yNG5IWDRMVnNhei1DRlB2M0NId09ka3k4RTR0TEgwWUdaS3BOektpQ1NmU1VJZU9FVWdfRTNJWjVMdFA3N285YjZ2QkRvXzl4NnB6VlZhSnBkVTVmRGMtbVd4SU5jRWQ1bkJCbHlHazZBdkRxc0V0Qk9GbGdqRk4yYy1ORFZEZTA1OXVwSEFfOTBxMG9idW8xZ290a2Y3OFMyNVpzUkNfTF8xUzVGRXc5bG5Lc21ZelZBcXVCVUR1RFNzTjM1Z3lXcTRtV0FvN3NMMTJxUldrWkZ0NlZDLTliVFV6V2FSMXpMZEF5dElZMEdZdXZuMk8xd3B0anZUMTAwLWVkdGxBcXNoNnIzcTRzeTRjV1d1eG1HQ1gtVEU5cUlNbmxqbE10YmFXRGRhS2RIbWZKakt1dXd0Sk5OdlpmbG82QV9JOTJYakNVdzhUSTluSHNFQmxjSEZad3QxVFBlSDVydzRud01SZU1sdUpTNkpnOGhURkJ5U2RFdDFzWl9LTmZVdTRGTENHOGw5R3dDYTFibUpPRmk1aU1sWk5yTzNFUVh3SGc1Z01MYmxwN3JYS20tbTI2NE16bkxUMVY1aVNaMmV6U2NKdTU1RjFvNkMwaEFLU3h2YjFONmFZRlhacDA3Y3FyeXlqOFBHakNNcEc5dXFQaHl5V3l2RFpPMHE4MGFlMzY0aUtmWXpYMDI5VDBGZEQwcFVxVDNaSXdZcm1JcnRJaGlKYll6YUU2cEE4d3dmN2xQMmNOYUNlMk0xRnFaQXY1QWVMenEwTmxkbFN1OTcyZFZQZnFzMi1YYkt5b3JQdUFYYTRJc09DQzFFUVYxWjliVDN2RHZDOWtmM1g1S1JqLXhIekNVZjlLMzBUTmd6dHpBbnc1RDVEV3hNOWFnUjFJLUVMR1JCWmFIdkxmanRFbDMzVHJJeVMyclBRbTJycVF1b0VidEp6bGFpZmxQLVEzMTJTZXY2TkRDc0U5U19kWmNiUmdzZm5rMzFHRndRdXVrQ085bkw2cmFLWVZGVnBXQ2p1NXFRd3p0RjJWQURkX2tVdm5ybk9GVElMVzJFeWFtM09qbHFSMkRjR2hlZWMwaUlNM1pBY1JnUExyNGlCZ1F4MkNqUHJOYTk1RHJZU2NHcjlsS1pRdDBQbzhhNzFGUDhfUUo4ODBsQkRVaXo4dThKRUR2dDBUTDNmMjloVTBCbWgzMUFHcWRuYVJyd3NtUTNaV0RFcGlYdVRXUG5ia2NEalI3NlZEbzFKazRudXI3bl9Yc3pwRUxIU1BocVl4cE5RNU02X1cwR3NPX1AxZG5UbUc4eklReUdxMjdhVC1uYVVEMWdTenRhY3BVV013QTVvRlpEMWctWHhXT1oxT3daNFpVQ0lwSHRsWWIzeEswNERYS0x1ZXNCM2J4dk52Z0ozVnR4NzZDbDBYQlZNdnRTcGxTUGh2RGktQjBzR2tzVGxESnlrdzBJR3gzc3pWOHdNYVBXck03TVJuLUJCT0tleENiMXNtMXNoak1weFdNN0pOdXdiVFNVVGNmQzk2T1d6dnk4aVNPRFV4d0g3MFZIUWdvQVB6ZUJzbEFHUmlFSE5INU5WeFAxLXRRb1c1ZHZ3T21Ya0hCR1N2Mkpvck43emozelU2cmowS1FNYnlWOWNzWnc4TDBHNHVXekd5QUNySGgydE1JZmZpSjhyNXFWZXlZTFRweXgxSktIUTFzb3Q0YnVMQ0FaUmR6ck1FMVQtOE41ZEJfUnJlcUoyNVVMeVpPTzBQSW41S2pybWNMd3ozMmV3UzZJVlFWOVlkbDBnVHZ2MDVDNjFLNXluWk5YaDJJTUJRd1lNYmppWUp1RGpIamRYVVkxZ1J6bVlXeFpnYzBCUUpnQ2FnWHVXdk4xNnB3MldJSU9CcGh1WjhibGc0NnQ5LTFuY0Y2X1hhMnFpWUtFLUxudGF2WjRTSDFXall4YzFlUEQ1TXpiTTBLTmFDd2FONkIzUTZhbGgyMHFLVmdGWVUwcWxIaGEzQlh0SzlRUHd1dEtzRjZrN29XalJhc1hpZHlRdWdMcDhSNzJQWlg2NndwTHU0RkZ3ZktjbTJPblNaQkoxOWR2THVmUVJDRXJ5bW1GWFFva1hkeGtQVE8xbnVnZ3hSZW9KbFU0LXpJOVg4WGFCXzEwdHpoNXA2dlNrdGJnODJJT3dQbkZ5WHE2U0lMS0JDWWhaRGhPcXZkVXhqbTY4UExzczRSUDhoZG9xbFdoQ2NpSTAwVE8taTVrVWZ4M1BHN25rdnU2akFmNDhKR1g1RDJUU2lDXzlVQzRyN0RvdDJWeXhhbzQ5dnpNTy1PZG96bUVVVGFoQ19RRGhFUG5GLUY5eXI0eWluV3VlaTRma2NqdTl1bXNPTmU0TU1fRUdZR3hKREpaaXFxSFBETDUtYUpuWFZGcGFYdl9ySkNtUXFpem53ekhKTi1GdDY3TlZIWEhOVUNPOEpKQ1k2YXh4UGJ2eklkVnFZNzhyeVFSZ1JaTTMweWlONWJCNG44Y1M4YjFJMzNKVW5maElpaUg5aDQtZVVfdThLaHM1WE5xVDhKb1dEOXJzZy1fX093VUxIT3dDb2FXNlNmYjdjcnk0M3FjYlliU0hFYWkycE9haXRDRWFCREZyMGFXLW5CZTlvTXZ2X1dTMGdpM0MwVDk5RlJFYjZqUDFZR3lyQVl6ZE1Gb2ZMZnFXT2pDVDhaNWxxaGVTNGNUU01QQTZVN1phM3BSU2dsV2VGS0xRUWdscWotLVBZb3hqZ1VIbDdCaEJTSEdaYTdycU5xc1BxYzBOa0V0bzJwc1lKRUV3aUpXZkg1cDA4RkxpMjAzeW9DWDM0TzcySkg3bFB4N1NPaWVIR251U1ZEdFlHUzRmbVJQUkZ6cm93azUyZjloZmw3N3A1TlNlRzQ2Ymo1S2g0RERObTQ0MEVDTUtyZnl3a2tPamR4bXNYSjY5OXlwN1Q1a050S0p3ZVlBYmxJRjRkTTdUaXpYNHpaTXgtdnJCR05pSy1uRlBKNWM3ZnJSY2ZDbzB2MXJkaElSeTlwTGNyY1JvY3J1NUFGS1IxeUZ2VnFrTnVUeGlVSEJlakxXVHhoQnNhN3hyX0tPOFZXbXdVclZEV1hxNkF2Zjl4a19NTXhnc1Z5V2dXbk9fNjBTX3Z0VXV5Z0VONnI5WDNGSVNPS1E1ei1aWk9sYmVkM2Y1WkpfQ0lNVHk0MEVEcVhnc0NjeG5RcEMyc1Y0NjlYMXA0OTh3X04zNWFMTXpxcUVUQkZjcG1TN0ZlSEQ2czFRemxicFlGaW12aThBTDNzNU52YkNjbnVIUXhmTDU1NHJGdTVQSHVFMzlQeWJHUDg3aDJCWDV2NVBWOUNzYmlGUHBvMTdmR2t2cmRKajV3UGM5cndyWVhrdkRBWUpNS05hMkhPQUVBTkliSGpCRGF4WlRENDhiR09pY1JnRVA0NmFPdE1JdHFvWGhha19NUU9hZjZYZXh6SDJuel8wOXNNQlRCM0JreGQ4T195NExLWVdxNW9XRUtzemtQZG9ITHFpSzROWVlibVY2X1ZLeUVrM2J4MGJMSGh3Uy10UktFRGdRTWNIQlVaRm8zdFhHVVFSc2dBRW56cFRPRFZzRFJUVDgzNENBRkkwWTVod0RSQ1RMam0wN3RUVVgzdlNTZDF4bFF4VHp5Q3M1VmVTcDNydHhDRURuQnhMTjlYV0g5VmxVbmZlczZKRjJaMlFLVlRTVVdTLWFrVHNKNnpuc0QxV2lkakZackFka01GMWVJVk9JVEN1bzhUM1ZYS3BRSmJjczEwQ2ZmX1RPTVVvdDlfQ18zOEVyS2xHYk53ZzVneXRZcnhzanBJRVZUWFpqSE1xdXB6LUpqRmtRMWF6em91ekZHaS1kelZoVEZ4LWVuTF85VEN3c2NUd2Y2eGxQejd6YU5qdDI2NUF0U1otVldxNVlRQmkzdXpMNEEyOTlZV1ZnbTNlVjNMczgwNW1tRGNqTENpUVU3MW82NF9qNUVBQnp5aWlKWHdWLWpsYUl2bmRuVk9DR2hkZTNBYVJncWY4RElwNVZ1NDlES3lLUUV3bXVIbVJoR2NvZmlqZ3Raa3ZadGlkSUplYm5xVUVFQzc5NWlfXzV4Y3BBN2RRaE1RSWFDckRmTTItWlVqUW9VdXpFbkEwak05TWRhZjBqYUVkOEdlUXFHSU5ybXBmLVY0SUU3bDFnQklVN2VPMUdZR1ctNUVNUDUyZ3dhZzVPdnZ0anhBV3F3YWctLVYzblMyVGpaQllSTWRab1dpQTlwdGctblJrUVJKVmphZldTeEx1bFFEM1B3enNzZWpjTFpMMzI0WlRQSGRiLTNKcGpzZ0xNVVdELUtHZ2hkbHVIYlVqVWpJRjlrMWtYT1ZUcWVDYVJCVzJ3eDNFNEkxTjE2SHB5Z2owX2lwS0NGaGkzYk92UXlYWmJDNl9zWVE3NG9wbUY3a25zSlFsYWhPMEQ1X25WdzRUbkt0dDdsMXRwRDB4QzZkZ0JkX0RtTmFGUWVFOFhRZDdHbVVaSUIxa0U2UThHdFUwXzBqMjFIWDB0MmFQZzdsY0RZdHpoS2VFUEhiVDRBdkI2Mi1icEFoTzJsbUd5ckJCZWNQSEFMRm9sYnFmN1V4TlFkX3owbXEwNnNoNVY3Mk81R1hrLUlhMGJxeTAtRy1MalRLMDZ1ODZnR0ppZjdHSWlaSU9iZXkwQWhVblNiVkMwaEdiYWFPNHcxdEJ6ODFKN1dJN1NVckczdUFMMjZPeGFaN3lvOFlSbFNVRUhfRE94dExCZFNlcEFoVy1YV0N6RkE1RmVUcFY5d2pFS1BJSWdCN1hURG1oWGZmZUhPendGRjlCLVRwa2QtTE1lM29vRlBDckJrLVkwT2RCVkswZHp3WmVXcW1FTU1QMERiR0VsSEhJNUFfaE1UZFZVNTZYT3dDZVUtclJYVjBHVHQxdDNyUGMwRkF2a243bEZydVNwVVJpMnYwQUdtR0dMdUE3QnY5eHRGalVXVzllbDZNN3ZFS1IxYTdhSkVhRlFTTzR0WW1kRGF0a0kwR1VUUlBDZjlZN19WakJidUhjdGN2VWlldTA5cnZEeUlWUk5sR3N2MEJjQndqRXU1cGYyMVpjX2ZWUWJjd2NVa3AyS29NOUlrMHU4TERZb1Q3bFJtdVNFbDdfaF84YWd0RkR6UG1sY1FWbUExbnBvdUhKZUNLaTJIN2VHcS10emRNMjRBakFDNl9admRob281Wm5kVTQ2ZFJRSGZGUHZXdEpyWE1hX1oxN2lWSlF2ZFBEU0p3Y2FRYnFJdmNiUGV1RGhRNzdEX1VheUtUZHp5YlhhemYtQlRDNWVfSVBVZC1XTzBPNk1CLWxXS0JDcFR1dXVRbWt0Rlo2ZkZvczNxS21KMU55bWg4WUE2MkR3NjRHamxLa0tRekJFWUpjSXNwTERhRTJsQ1VkNURJM2RYVC10emxsUGJ4Q3BmQWladmRkRkRNem4zNWRLVV9mWnV1UGhRaGxsRWp5ZXJTY2lPUXpGaE5oVGJDcDJCS1ljT2dKUVBPVFlKLW9JZ3RqV0hidUFQZUFMTmtfdXBZbW5VbHZWLWk0cks4cDNuVmdMSTBsdW1jMEdPLUIzTWNPVW5nOW83Tm9pMGtYVzBYalowSHpoVGhUVERQN1RyVjQ1V3FvSGVhUnpxSjlVbWFib2hoeGFQZXh5elZxNkpWTTBfbHNjcWoxdDZkMFVrOXdOY1R0cnZ0MGVzeEV1WHlOYzlEVUJseXp2dFowUXJnc2x4bkV5dmQ3aC1HMlVDUVhEbnlDZVNmRnJFRVlTLTQzclAyaGlPaTF5Mmk2UEJLLTdXYy01V2xyNERLMTBDUmU2T29xOHNERmVadW9ocFB1TFh1WlFlR1VfUzU5QWplWXd6RkpUMU8zc1UwZF9PTHU4cWZJQ281V0hPNHhDUlpVNDlrMXJENUIxb2psTG9OUnVRVVo1MFQ3bTl5OTRkYl9yY3hUdFFwVjJfRWM3NFFlSWd3ampRc0NQSncyLVVvZGFLY0laem9Qb3dnalBhSmRZamg2ZDNPM1MzOVJxVXU4YlhlUHlKUnE1bUw4V2FPd3ZRLWluRF9jbVMzcjNvODFJRGI3RGhXYjdYUzJpUVQ2bUVWR0ZCWlc5OF9VRWxTX1QwdXU5MkZaV0lfelJtVkZoVzhpVTJtSjFkWjU1WDNMVEhzNjhRSExVNE13cDBDY0diRENrWTJwSDJ4MzJqeWFSWlo2NGN2cXZXZWVWS3RCNWx3U0lTV2x4UGlMelFMWU5zRk5uZmY2SHZhU01jRWlyR1pZRzJZdFdTYTZ4LWRyWVJsZGZqUG5qbkFDaDZzZ0h1dkJVNUdneDJpMjJXWWVrMVRuZjcwX1djSklvM3FTR0ltTDc1ZkFYRWRsQ1lURWk2dWJLMGdseUNwMVVJUTJqa1pXUlYwR0RlNTNNemU3QUVWMjRVNVd3a1hzcUtIbTJlWEhWLWJzcGpUbG5QZm1sRzFERGF1TzVXR3dXdzJKWlpiSm8tbExiUUt5dXc4eExxVWRRbExNTy0zNFZsdjZKQUc2TThBYkVaV0xXUVZzWWtkckZOam11ODYxZWVCdklLb20zeDRRN21rRGk5RkNiNl9zYzk0TmxLb2pMWGRKZ2pIT3hKb19oMmozTURodHRzTVFkcENndkpXdDBaTkMwOE4xWDIyUmVPekExLTJpdDNmOGZ0V0FiQUFUYkZPX0hueDJ4cldhMV8zMnZiSHZwOFNaVVFzZXBLOERIX2doNENGS084ajRDUjVVekpPc3VqNmVEdXRiczItblRXQ1pRb01TOGdkSi10ZElFeFFiMGt1QjI5Mk1MUk9CX0p5VVZ6eFo3c3dEOW5tZGEzWFhQSmNIZGttWEZpSDlzTTJ0RHJPTTdaRi1kV1ByZ0RGZjNINkFnQ09jTDROWjg3Szk4bWZqZGJjeVZPM0lZMXNjUjFQWjFjWk16RS1mdmJPb2ZxUEJDVFVUVjYxcnFwUTE5aEpSMFdISlhzZllqdjY1ZjJUU0o1M2RXOWJTalczVlliMGVJdmRHTXZhVDFTU2lFNkVBRGVvUUg4NmhpTTlQYk54TXlVY0Y5ankyS0JmS3hVZ2VwWkhNYTQyUnRvc0RJcFc0ekd4aUQ2NjZVeHFCWHBVTlF1QkFHSTdaTWdVQnhwVHhOb05yRGRCc2JuSFNfQ29fQnhiY0hNVzlhenBlMHFPNDJqWDJld1FxRU9oZFFpN2M3M1d3cXJzd0huS0xVREdUOFRqaE03eUZTU05vLXpWY0VaeEFQcXNiOW1WdzBaNUdVMm5JY3RJXzl1UDJHM29jUHQ1MHU3UTRyZXV3Z0pyaUJjNTRNSHU4ODFWMzRidHozTG42alJPMzBXbHR4NlNIQllyOVl2NlVZR1hlU2VLSHREV1FiSThKRGo1eWx4T0dCX0RMbC1VV1Y5bTE2d0d5Tl80am9JLXgxSXMxUFVEOEM0anBaQm5CdHdtc1JlaVZrek9Na0hSQ0VSWDJBWDFNZ3hHOUg2MGFBWjJTbElUYllnZzI4WW5sVlJza3F6anVBNldVb1B6UGlwelFHMEhITlRyZi0yZy1jby1sSFJaLUJleXMxek1IN2hheld1ekJ2U1BWSlVMeGNRMFhKRXRDVG1SSEhBOGllZ1I2ZjdkeURLMVVsWFp3ZFZfeUZmRzVLeWF3azJvMkNDN0xKVEVURmZ3Y0tWV1VDa1V1YWI5Zms2bFNUMmVRcTYxTjI2Z3lQWGxJbEFiaFNCa29KSUhCUDJ5VEhfNGNPdVc5a1BhZ0U2NFhwZTJSX01rcHpyU2lvd0FGeUcwRHF1VEhWQjlnQ3RhaU1oLTdRbjVJNlk0cVhseUlEOWk4QWZtSHlLRkIxeTRKaUE0cmFSUVlzek5Ud0VybDl3OHdxdzNEN0JsY0dkc195OVN3bG1SblQwd2puTzNvcElFU0o5clhYWjg5YjVoa0F4bjhkMUpjRDdxcXV4cUFxVjM3ZXVyWDZVMHVOYTRKX18za0oxakt0dHBvRkV3YmNSdDdhMW00YUdwQk13MDdRMG50UmRLU1JRZGZCbXd0dU0ydmZHemxOY1FHY0phTWxUUnVnTW1NYWZVOVN4Yi1wZEdjRmR2ZWp2Q1VMWmhoVWZ1bElwQWc1TVppc3Q3WmZIdzhjR0FIT25URXZaWHA5bmdCdkY1cXdNLXFJYmhSOUk3aGVFNVZaZmNYUUo5cXNINGh6QUdTbk1xMjNwY01sQzA3bkNxcGVmWU5BQ1IydVYxbkU2RTlBZ25uVE56UkZqMEY4X2E5X0NMNm1yRm5jMGVKRFludi1jbDg1Ymt1TmM4NlJRbFdHRTNEQVktQXJBOURNaVZHNWxjZ3RpSU5NM2xRcHlTeXBhd2hGNTFHc193cEhTN2RQdmNiUkZPUGppRnQwT1VPNUZCaUw4V1Vfb2VpM3lmOHNINFNrMGd5MzNRV0xLODJkWG1YTk5GRzRHSy03bUlEcWpRU2NrV0RHUUkwRTJvaWllTmU1MnFIMXRMRkdfS2llOF80cXVTdURCd3ZieGUxSDZnQW9CanIzcVlMSE9wRDRpZG5SMV84RTRHeUF4ZzlaS0tXUFlEbVdkckxPbjhKM1pKT09nZ1pFZGhjSmdFRmRtd1NFOHRITktsMXJTTU1yZlZTRHNFRjh6Q2lYU2NwQnRVM0pDeWZxQl9Hd3lUXy1nZU14aWpSdF9wN0t6VkFJcFpkNUZJVFV4SUFjdFYwLUdwY3ZNS3pIRWRfNkVlc2NvdDZURjZialdKelBFbThKMHNtV3EwVFJMbFU1QmlMbnV6bVF4cTFNeU5zRDMyaHhGWnlKM282Y1dtc2Q1TjdlbV9VelpUQWNmeE9zdXZTOW9HY2l3SEh5c25TZ1JNdWQxM3FyMGdjdlI2eEhRZ2JMSXhTQWdJbUNmR0pqQlB2bFIxbXBlZFl3SVQzaFhqSmhiOUlsWkxxbGwwc0Vvb2cwd2NqWGtuTnpfd2hKalF2bmgxb3B2VVkyVE85QTA4LVFWN3F6ei1iZnJRaktPYURTOXVaOU4xNXZPYkZkQmpvR1NEREFkeFlwWENGd3ppR0dvNExlVW40SkthVmd0MHlHNjlWb3M0S1otZkNxUjRhVHd4UldNSzFDN2lMOU9oV1pvU29Fd184Y3hMdXZfRTIxenBoRWlUSFM3ZFoyZGdRWHR2ZzgyMzZod2VfYTBNLV9mdFRqMVdMdl9YQ0VoX3JQZ2NCWk9LWWlBaHF6YWw2Q0NhUzF0bW5MV2dLRzRYNEhzN1NXWkc0V2VvUnZ6NzI0bGlJdm0taUI0SFhHS2lJa3YyX2U4RzlwSXV3NmVRWnlrZkh4N19KNlE4QW9YX1RaMVk5TGZxTzAzOW5WRkY1VjFjbUVmc0VIYWJ6ZlQ3RUk1ZUswWjF2NmtlQVR4YU9wQTZYemxFVUI4TnB6SHlMMUV1MzJ1aW9xLTBGbnl3cFRJckVjaTZTeUxsWUFlT2Zsc2tSWjRwSkJ4Sng1YUdOSjMyMTJjUHdjUU52ZVpzcjRQeFNxUzhyUDZEZFdXQVVDdlZSV1V4UjNVeHZzUnBDZ3BEUWliX1NINWwycnlJaFhlVHA5U1JqZjNSN29jbE1LNWFiWngtN0V0cTlsTHNpSlJzVHBJeU05SlFKbVYyRUY4b2hFTVZlNWVHbHVqX2R6M2l0dTE1V25QOUZ5ZVpHcUFsUHZnTmdFRTNLdzVjUG5QY08wdFhQdGVmYjVUYmlxbVlxTzRLQjdhbjl2SjBxLU9BS1ZYY2lrZTZFVXJ3OHFjQ19maldhT0pINUl0SEdhQWJtSXlSZ3hQZHU3cnBNM2ZsbUVYNVZEZjQ1VFBXaGxkVzFBbDNVdUV6bXoxUlBmS3RLeFoza3g0LTFDdG02cG9XV1JLT3YyYWJhbVlVZ1ozc2pWQlRyclpaOUZUQTBUVzRlVndWRHYwaHhHdmJ2cGdUUy04TlI0SkNsR3kydEJpWGl0MWxYb2JXeDJOSEF6SlExWlNSdHh1NFVGT0RMbWR5bGowYW8wMWc5NGZ4TEE5Z2dRQ1BHMmQycUpYOUNRYVRlQU11NEZ0QnVucWppcUo1QlhlWFcwMmFFa3Z2VWxRSGxGNnNYTllCYmF4Z2ticGh3UHU3OGwxbktqS015aVBrYjFZX080SkUzUkR1d0JtNXBJMXZiaGdQT2hpMldRY0lTMVZTZHpraVVQZUJUZ25HQWNacTAyM0hTOENXYnV2UkVnUy1CcWFPQkxZWnVLS2RoUFotdkVOYWJhOFN4cnNEeG91SE1kQ0Nzajd0M2hSR1JnWVdXVlJ6UEpiRWpXUFBVXzJtVGZvTGFfOExhUzRTcmlON2U3NXo5Zl9YTE5jcDNEdmdkRGNSQlV1RGxNQ2NHSFN3NEQ5TE1ZQm5PYUl3b19tVmh5MUdsMTJacGlpWU9aVU9BNGpHcTJURE9xeTV3MEpkTzRxcGVGUkdvektLM3Jid0llaG9ZU0tld0tlUWxHODIwdW03dUZhWU1DSkNnd29kQXc5TC0tQWRFVFlwM0h3VGtCaHdmVFA2b29Bb1Z0cld5Y2lvbEllMUdYLXRsSThSSC1kVS1FU1ZoTkNMWWhUcjlzV1FFMWJYN2VlZWEzNGtMbG1mLXh3OVlzbUZJb3piODVBOVpNS0JZTmk2ajNWSWFoQnNjZ2Ruc1g4ZEJVZ3JuUjhDX0ktV0VWaFVOZUtiWmczQnUtRWJYdnp5TnNPajZSUjdBUExYTVJkYk1EU2hUblJvZkFmRks0b18yRXV1VVZ0aFMxbThDNlNiQzRHYnF1TjgtY1BKYkt3ZEMybFFpdjZRVGltNG5QLUhoQUtrQUhoWkFBYklQRzYtWmJub1ludnFvUlJMY0tfTlRwTlg3TG9CemVaemhRYWVWTXRhTGkyd0x3aGpJaXNDMjV2dDVZcDZJVVlyZXNBSFI3LWt3aU9uU0tXNlpjaGRsODZIOWY1VElQXy1Ta3hGcnZuTk1NNVVsd2dIME1CcnlZR0VrZzNFdk8zM1FaWk5URGh5c244MkI1ODdnOU91T2lTdkNHY1BhaEJlMTMyNC1WeDdVbTVTNW9Zd1RER3lldkxkWUZLY1JtYThWYThzY0R6SFBmb3FKTTg2NE93cHJzajI3LTVpajRxbzRGNjdWS0RsM1V2bUZjNi1pbHBQRTh6dXZWTWhhN1Q1ZEJmV3BRdHk4V2hrcU9LVVdFNF9nUGE5ZXdLV3dPUEItdXNZMWR3Qkh1S284cjVxUkkySWttalBheTZLMV9idmVCWEx5bFpHblBrX0tLT010cFZVTnZWcWdmV0VxSWgxeElUU0pMbWlTeFBrV2JzQUh0MWpoc013ZEpYT3pnNkRmT0lSQUltb25jbWJFTTVKRmN4cDh6YnRjYVlfSE5PcnpOY1QwNjB6Qy1oMk5QT2pqM25laDZMUmdqaTlUYVdtQjQ4YUFuYmpyaDg5UmkwODN2d1dEb3p0SWw5cWE5bzdjeXpXZVA5NW1EdmFNc0VwTE5OcmVGdEEtSWEzTjU0VldmSXFPNVdHRm9mVnFQdVRkNEJYVy14ZHhhTUNBeTh2d0Y5dE5hOHRJaGRvRFBnWFVfRFlLNEFKektObVRONGdQeFBYdGVpb3p1VzU1YmlBYU9RYmU4aUd0WG11QlVmNHpjWlQtNks4YVdCWVhiaFZWVmNEVEt1UXc0eTNZd3ctRkdsQVpkeWZvSGRQM0wzT1NXX244X3k4Wm5aLTBtWWRwVFlRZFh1YUZoRzA2VWY2dFIycndVc1ZSdW5GV1ppSkZ0MUc5R092X3pTZmpaWHQ3MmwybUpkRkdjVkFfdGl2ZWZqWXR0WUZJUnhCV05QZGRzUGVkdkFhUTQ2YnFZazR5VFFIYmdfOXE5aFhUbHVtNGw4UEN6QnV2REk4dU44TjgzYXYwZ0ZHUU1kVVZpa1dCeXp4TWQzTkVZQ0o4cXlyZjFlVmhIVlVubmJyNGNQN3B5Sl9Pd2FaSFFVb1d3c1FLV1ZyOWxKay1hcFMyTWpkNG1sajRtWFh5QTRWNlUyRFVKR0dzYWEtNmJ6aWlOaVBUYzFEVXpfaXRzSm9sVVRHbUVNNUlsVmdleVZZdGhfV1pwUXJnV1hMa3FWOVhHR2s0YTR3eUpFaE11Q0E0enNfUG4tN1lKWTBzR01Xb3ZmQi1GR2tVZDQyaWtROHFQamdyTE9EcXQycG1TYWtzeUZPVlVZd1ZxbGdZLUZPQUV5MVV1Ql9vdENrNjFJQWdiTFk0WnoxSFBaMEREZFFMMUk3S2M3cEJMZmNxbmZMQzN2R3dOcFgtczBFMFZ4azJYYVUwa3FBSndlWk0xNVRPQktOWkZvQ2gxUUVBSjFCNDFqeE5HeHg1YzB6SVNQSWxfTFhnR3l4b3cxZ3hiYmJwWU1JV1B2Yll6UmJpNkNFX2Ryd3V6XzVFRzIzeHZfWUJiQUV5WGpwNTYtLVc1Y2h5WnE4MWdsNl9PQ05qN0otZjM1QmJMSTdaeW94THUwaVVxM3RyQ0VFWUxEWWhIMWkwSmNkcEVqS0wza201eDJXM29CWWNPTVBxRF9LSUFvV0ZkRTNjaHpKalZzODNZYkYzUlZxMm40MXBxVU9oSHhTaFBWbVVBenVVQ3h5clV1allfdGhIeFBONHBTUFIwQzdjZktUb2I2ejdnLTBpYVBiZEpmM0F1WlUtaS1xYm9mUjduWEdMeW5wcElZOXEzbXJ3aHB4cm0xNmpWODlYTlJwdk1uX1oxSXVPRXJXVHV1bTFYcmdlcXV6cWNHbTRod1Z4SmtyUGVQQ0Q2dkpCLUxINURxaW1IMDlubDhmLVlRX0lxbnVza0lOcWh0dkRRVjh4cjNMNmJzRHRxLWNFOXZOVVJIdFFaMFcwbEoyclc0Z0xNMDhyeFZ5YnlVNjhKc3V1dzRCdnBYdHhrZXZMNlhhS25vcEI0ZUVqWVhFSkFnb3RBOExWZXFCaTBrMURzM1FnSEdOZFhfeFMydTRpemlKYmhnVHdCMGFrcXdqWjA0MDRzamk2VHVJWWJiWGlrX3lnWFk5Sjl6VmNIazBQbjR6SVotVXFvQkFUeENjNWhfX0FuVnRzZHdMUVBGYXVUVHd6Q1RqN2tKd0FNSTdIMDBpQlJIX1pJMWdLTk5peWx4Vjh5bnktcTZ3V2R6cFpsR19KOEd4bkl5UXZ3Tmxja1dKN3BhUTcyZ1R0SWx2alhmNUJaOUswRmVBeDVPZGtGZEpZWDJpZDJaTkd6QzlMMzRIMnp1eEhKWlZSZlJDOGNUdE54eG1MdXdTWlI1TWxqNXM4ZFpCdkVtNmNYZUNNaFpJVkViMDRVQkR1M05LUVVzYlduVE91MzhPTk1UMGFHeXBJbTA5OFN0dVFpMmw2djYwRGk0WGgtZXM0NnBQSTZhSnp6M1gwUWhPWUNCUGFQMFpNOEs0UGdRZE5NVWpCTFh3YWxPdTBuU05zeUo3SHlqSW9rV3dfS0NZVmYyeWMyZE5ZNnJQOVIyeDR6NDBXMmNCSUdBbXNHZkFpTUtOeVljUzBpTHp6Zlp2d0JFd3lXTm04TVh3em5fdmNzMU1rVGlSRWJlOURLYThTdk9FcnF5UHV1cjBaenFnZDdYWVIzaXl3NFJ3U19mcWpkRy00c3lFY1d0N0h4T3V3NE5xSnZuM2t2YkpSdGhKSFFwazZ5Q0FiMHpCRXFBcVZORGVqU05fdU1HVkNoSVFUZC1RN21tTU1QdG9ZcG1NaTY5S1E3SXdYOGUwTlVNOVg5LS1LSE9XRkNkV1pyQlRYaXROa3hCTTRoaGpKQl9NVXc4b1V1cTFXcGpPamk5WU9hdFNZRW1VYUxlMndEdmhBY3d5VE11b1NxcV9zTjZVa0lmcG9IbDBxbzR6bnZaYW8xU1VtMEtiX0ZFdzM5U2VYVmtsWUF1SElmVFRLOWFNa054MFNKNTNVU3FSX2VwZG45bTl5SzF1U0t2WGZRSS1xVnh2M2VkQmxaMWJ2TTdKLXpCSlJsSG4wTDRENkNLUnpSXzdSc1VEVUhkUTlnZWQ1Z25JYlItelV6X2pJSGNUdEVfUE5DT2tLMEpvOUtYYWVRZnk0bzNtSkFxR093QVlkUWxhT05DTFRxNEE4MmhBZHpwemhRUXRsZHBCV0VtNEpuWTBybERyRGQwNTdjeXF0SFd1MXY2b0NxeVp2TlFGaVNyX2haY2hUNWdaUEdIdGNPYmhqYmZGaWFSUTE2NHBYdjZNRTdyRmtKRG0zUjVTUGtmYnNlNlhoQTZ1cG5ERloyU1lNUzcxZEVlejBIYjdGanF1bHd4RUtTTkozVW03Qy05TUJ2STNnZVh6eHMzeWp0THZKQkNUS05oQVBNb3JwVmNzNTQxLTRaSzN5bjVwODlJdU1rOTAxS2JQa0FLSDVxd01YLTRiOTdYYUZLVTZ2RmFpYTZTZWdnSWhqeTZPdXhGZzhJeUFlQ0dNMUVCWjM4QzhhUlFVTm1URHlXQzNnM1EzeTdMUG5sZWotbFIxZ18zdnQ2cXJPbDkySjJzMU9UbXEyeURqeGxQMzktRHR3ZWFiY0dsRThnOXVVVm9qTkxROHExSmk1YWNNbm9wX0Frb3NZaTc4U3dYcDhOdGYtbldxZG1tZjF0bDNkbk9NRnZOcDdwRnBNRHB3cTFJVzctRW9JYTJxTnY3c0lNWlMxTm1XUHdhWXQ0ZWt3OXdIV25QazBLZVlabkpfaWFKYkZmeTZBcHQxaUo0bWZWN2lGTDE2M0dwbS1zUXQwQkFlTTJWcEtTUjU4bHpZa0JENmZCTmphd1VoN0l6RUZpaTlpNGRPa0pGTkFqanZ1Qk5lZjBDYjlLVlNjYVVqUTd5WVZLYlhqMC03ZkRYZi1FbC1HOWxpalJ4ZkxrZ2lkaFlIX2x6RVhxeHY2Z21xVC1XSTZoRzgzNkRhVkF1UnAzNUU0TnQ2ZnhBTV9TSjJzMnZsZlpraDBFOThOSmhGNS1lbnk1Q2pzQXAwZWViVXQ4aHo5c19JdVktMEk5ZGY3dWdfcHBVa2YxeTVuZW1MZWZQdUl6eTRDekw0VDhlRWpYc2hyLXh0YTBsR2wzNHNJb0ZVekhfRzEtZlF6aGpRWTRweXFra1lnZlcwTk9yT29XSHBNbnJET01HR0N5MzR2ZV9FTEVqWFVaXzZLSDhGVVB3eXpHbnFaLW5XeVg5VEFPZUtncnlUVDdCcDA4VzJ2RTVyNno5SDRpUkR0V2gzdXMwamtUWVhjQm5BOHEzbHdpOEVNYnFtNVNsckhVYnFLVlRHVXNJT25HWHJwMU1zWEFGNlZwRTJrclpDeU1xaXZNU0hjd2Z1Slo3bm9HazI5bzduZlNraXFYdkZiakN1QVhHSXhta2xQcFJkV0s1dV9nOWM1c2x0OU84Z2o4OHlqMGFCMDZ5NG5EVUdMSHZaQ3VScENGNkNjRTMxZE9zbmh3ejlmamlUVDFCdWFCTmVELXpPbTh3OUhTdVJxY1VCdXBaSTF5Ymw3Z0VUUjBnTjBtSXpEZ0lZWDdDNFk1eXQ1YUhyRmswd05WbXF0QmxheWZybDFzRS1kTWphV2ZyVExJc0trRmVCMkFlVXJ3RF94VU5teDBBLXR5VUFmOWlTbW15Zkt3U3hDYzVhZnpHY01UZFREY094YWFoY3pVdEhJZWxac2ZDNlRMc0dtMHYzUFJENHp3bG16dVprLTRJQ25iRVJBMkE5WUtRdENza2VZX1hlRkd1ajk2MlRJcXdFWTUyaUc0Q0RldkswanVuSHVkT1libHo1dF9BME9Ia3kwMmpHT1FpN0NwTEctdGRva0o5S01wa2hPZWFPVnJTRTZ2NnRqZ25uNVh2UjVwSzh3TkxseFdUbjctMzF4aExXWGFyUHY2eHVON1JMa1FRbWM4VVdtOWdKV2Jpd3REM0RzMmZKTmlTWUx2bkMtUDlwcmE4cUotQTZhMm5wOVdjdjZHWVJSclBRLWt5Q0ZTdFMtY3BRLTJ5aHprQ3hXRGxFaEdFT3hTOTdNZmh5U3BKM056ZjFaVGptWk1WTWFwLXNyQXhyZ3NDWWdVOWN4WmgyMlBMLVJQU3FBTFF0eDBhRGVtdktsejNyVEdGTE1mZmpyNl80X2tFekQwNWQ4bndkbWV4MTZ6d2N3UnFuNWloQTF5M0hidnY3ZHQ3WDlpUVNxSy1VRDNuZURHcEpoVmI5Q3ZSOHllWnB2VGdRRlF5TW9jNlJ6RUxuZy1XRUtZRVFOQnZjUXV2Mmd6NkVPazllRWJEZ3RCM3pVZk1WaTJLUlpsX2tqc1lQbnFNXzg0cUdMUVNJcEpjT0NleGtKR1hxWXJDbmQ4ZGZ3N1lNcVdPTHE2RDJCTTM5YnFmTkFqbkRRRDg3TDJyU0hOSmdiV1RscVFmdE9yRnUxZXF2QXQtOHZDOW1nakRrVHZwRE1HejBwMFkyakswQkV0NUY0YlNJeDVVNl95WXdvT0ZzVW9NdXd1S0dOVEpmb0tPTnVIYnNmYUlxTG5EelJrN0dXMDd1T0cySjlfWEZvU1F1b1VFRnhOSExva3dEVHhDTEZ2UWVmWC1wR3prc1pOZjVoY25DdmItWmNscVJpc2czdFRqa09jRkpNaWZQYXJnSWd0QVhTMFF2TnlyUXNYTXhBOVBOdmtSTjFHMzNNQVdLa0g1ZjZwTDY5WE9sQTM0VFJLMzk5RDBmeGlCODFEUVYxWUF6ek4zUExYazNfb0FFaDFKT1JRSVZoQnc3VDN4LThNTFN0NmNPNXp2cjc5S3JFYngxU2NrY3lyQjFrV3NJNHN5NlNQTUd2WFhDajFZeHctLWpWczBNZjFXVHIyZUpUcU4zOUgydDh3LTRRZldrWGRLWEF5N21wRDVhMDJQOHJmMExBV2VfNFRVVkpFY2U0TXRpREF3TTJiWEtESnd3eGo1VkVZaXZPTmRYWUhxRXBLa1RpNlZIOXFFdWxWX0Vway1tU19pRUxCTGN6TjRWeWJTdmh1X1FyUks2V1JmQlJQTjVXVnNNSk1nUzVjNFhwYWNtQmxfLVN2NzZ1VV9PRDFscHR3SGt3U2kyQUg3cDVSNUhPRlM3MHdOSEdXZk01QjRWeGRyMmxhQURqQ2JzSDRJOFdRQXRpd0NiY3JjbVp3cTBSSF9VSERab3ZZQ1VHa3lVZEVZbkNWZDd5bU9SdnljWjVwWXhHSGc4V2luNXd6NGFUOU91Y09odFF2TUYyeURCLVkwU1lER29BMmxPbGtGUEVxRUFlc01KaEkzTS1OQ0dzX3g0bjlhdi1uLWZ0dG9mSkR2VkEtU3Z4RnV4X2NlZlVqS0xLa3FmT2dOcDBUWkJaelE5U0g5UGdBRFJmQjhVdVdmb3RkaGFUT3p6N1JlMWJWc1B6NmNMUFVjZjV3ZE9FQWMxckVVYUZfaGNXWF9JYTU3WWxfVXBJdXRkbG5sVjhuWjNyZlZHczZ4QzVGWnA4bnhNT1dkOWVEeTMzNlgtUnNzWmNsNk1fRTFlcUhoNTFSRXZnTnFyM3ZNNnhUM2ktbDFpSkhQWUhHOEtzZzI4NC1tLUdhTmNCMkpaVmdlS2NfTV9BcWlNV045VERBeU9LM3Zweml3WE1xcllYNXhfcnFpRkE2ZTVqdVppSVNNajNyd0djNWI1LXQ4V0Z2LXI2Vy1XcElrenpOVmcyLVp1SlNLZkNoY3JpbGVzZjZVbUsyLU0zLWNDcWM5NzI1WmNpalNKMnVxMHZiRV9PdEZEVGJTSWpoenBXeHFGRU9EaUNMS1hwTFJ2VlNlU053UWNQVWM4MWp2WllsZHlZcTJGdUtQd3htUFZKd3drRkczSC1Hbjk5Y1ZkMm92TVRHdm1ZMWhrZUtUZHZodF9CRUdId0UyNkNYeG1uTE1RU2JlVGczRHFkVGpqbDZkZkFON28yX0w0S1NqUHFPWmUyRk1VRUhSSmw2SERfTUptc0VUcnlYX1FoQmpuUjJtSjJkbGtnVHp0MmxaLXl2bUtiaU9XN1k1Q0p5OGVBVE56dE5nWWRtVExqdloxVWkxUnRDM1I5Y3I3Tkphc1NZampoYUNqX0RWb3lCelhOSklvcmZySVZPMUFyZUE3WnRJV3JCNmdJZlI0ckFzUHRQZFUtVm5CMGtEc3hkbHdER0tCN25DREJKWURSaWlVMEpfc0w3c2NoZDkxV3FHOTNDMGJUMGFBNzFVNkc1dTZyb05NUk92MHR1RUdlSmFpNTdZREk2TXBoSFZsdjM4aVl2LWp5R3NBSkF0T2p5XzVoTExfS1F5U2E5THQ3N29KclpCUU9lR0dDdkU5TWhucXBRSEREMmFPSENWVjgya0RFSXU5NGNrMXFpWHJzS0Vob0wzX2Y2UzJZWE01ZnE5Wm1PNGEtcDNsMDZfUWZ1TkF0S21MdktBQ0x1UG1nanZKd3N4bmRZMFhIWkphc2dCN1Z0cHZQRXBLZFU0c0xKN29ISVZROXIxWDk3SXhkZEZxd2tKakh6XzcwZUhoRk5MLUJvS1YwX1Fjc2N0MUtTa0xKa3hlX1lXOVp4TVktZUNyS2VSR21ULUlvenpqNGpBSU0xdWFFUWgwc1o2RTZ3LS1yM1UxX21Sd3N6amR5LXN5SEpqakRadmg4Q3YyQk1oZVkxZngyTU9FRmNZdGJkV2hkUEx1ZGZfQ2R0aTd6Z21zRVlnLVhybnZhcndLQ3N2Z3VwbjdkdEdSUWxtNnJHUENiVHFiWHN1U3EyTmhGX29ZM2NFRTJoQjQ4cjJFTUFqU0VDVl9WdHpaRnZ1amNZbGxwYW5ETjF0bER4RjVTQllKVjRjUGFDdFpGWkdlTW00WlhMTkotVThoQ1h4U2JUNUg5cHlDYWEzR1BVSkR1ODFZWnBzN2tCaGNvRWZtY0RoU3I3Q1RIb0tnUHJyNnQtMy1WMUZKN3dUN21vYzhuMW9GYkZRc25yYUVwa3ZMb3RGNUEyUWFtV3lkMDhvZ3MwdzZadkRKMmU5aXZjWXJOTmJSZ2VISGt2SndmZ2Vkem1aS3hPaXpoaXJNcE9WTDQ0aW84VXAzM2poVzdYLUJWVm04UGdjUGJLeU1XbGJKcTFuU3dXTmYzZGNUWkxkWV9BX2pEMTZFcE91dENLZkM3bERCaVlsUUpxZ0tlM1A1eFpzNXJ4eVJ4c19KUTFQckVQb0pleVkzem1lQmhjckhDTzU2X3N0cUhHU3lZNTd4NFlNV0VESVFUWXZoOS1UZzVLc0NqRVVsZHlmbnNoWThLNmtiblJNTzlkUTFDU0ZBQ0VjWGl2QVk5bXdQU2oyM3o1eGJzS0pnTVVfRHF1YmNjN05SdGZpaHhoTEhpLVoyWklrajVyY1UyOG5iNDBVa1BQaTVsQ3J0OFl1UTN5d0c1bzRQaFpxakg5OUd0QVN0VVZFTGZOYkF0UWttaGdiUWU5aDJqLUNBdXI3bkdDV0ZoZ21McFdaY3ZkZzNBNXVBRTExc0k4dTdWN0RwWGZxdmxfaUdfZ2RESHE0X2FXNHdHdDJ2ZUVxQ3VaMFhkY3FaZ3YxcDNPbjVCbVhxZlNHZm9HUW1GX3ppY3c0QTZmUUE2a1ppb3h0dWstNncxcUJSMkNGRHQ5WF9qNFVjUkpwZ1dnakxqWEFVMUZoLVM0YVVVS3pmcDNwUWR1Nmk0bUEzTlJLS3U2a09sTlJzZjdTcHc4NHN3am51Qk5wTEVpdExlWTJrSGZsYV9fdnJwUF83c1M2bG8yYTRmMFlrWF9QYlEzVjBFNlBrcEtxYXZvcWlkVEl6U21tLW5tSDNCeG00V2xHOGVZNWhBM1dwN1pPQnMyeGQyY3RmRGVqVDlYblZsQ3gzM0lRbGV0QXJtQmpCZWpNZ3lfQUhKb0RhY0FNSTVsOFNxZXc2cTJuWU9NekVoTVlOdHVyT1VIejlwbUZzWTFRakppbkltWXpqY2YycFNfMVEtbjVTeGs5Y2tZMU1uWnF5V1cxR0xnMHNJcmFySVZJV0c3VHpBaXpYT1FpUE9zQUZLVk0xTHY3Nkxucm5lQTE4M2JHTlRBR3d2clZLS0h2TFd3SFprcUZMdzlSTGM0QW94Z1MyRUhpWkJxUVFxaXdtR2syblZ4eTJqRjhGdk5RMUlvZk1IQ1BqR1gyVmpqcWsydTJrblFCblh4WjVRdmQzdUl6Y3I2OGpSUnFmTk9qYlFRTEViUWREaEFXVjg3SHkyWjZ2M2Rnc2YxbmxYTG5KV3ZjZklXb2NrWlhtVDFibFNQLVdVZkplam9RMXlUSWtYWGNDaW90WXR6T3ZTMHlDaWtzYWFhM2hZa2hvcUxFVjZSRjRGdDQzQjZMMVNsOUVMLXhKNC1BOWhjR1l3RkZLN0U5bzhJRWdpMWFHMUluZmZyTnEzOEdjUW9kQjNvVkxzUmQzSnQzUGRxSjFYTmwyamhlUGxPcm5DRXVXbFFuay1scEhOYVVEdW1pek1YZFptbjdWamhNODNUNUZkdlMyT3d2a2Vva2pyVzhMeDZpckdpdkowUS1oeDc4OVFNclMzVTd1bmFfRzUyeTlxWGtZZV9sWURuY0szLUV2czBhdFpnUGRUWWdvbEZIZHB1SDlFWkN5TTNyS1ZZUUtPTHZ6c3NXbUtOUDdYelcteGx1d0F0VzNxZ3ZPQmYxQlJVQ2VMOXFPSlZKeUY4Z2xmb0M5X0NpR25BXzR1Z3RhRXVfUlhTYTZPNjRMaGVZcFdwZjVXYmVHN3NnakIyWVZYUnZ4clE0U1hoVnprbUZLWVNEcnF2SWJxOFA4SDQtZkxGb1JFR0JDOENnRWRJYkxwYXpjMzhNNVZWcllyUm9ISEphOWNEb1pFM1VaTFhma2tHSVN3YmlUMmZVMG5xaGpQODB6YVU5c3h2QkJtX1NOTk1jODNhVDZFTTlwZWpNeGhfd2pjSXJKeno5b0NMbDBCWHBMdlZhczF4T19ORWFDVk5waVBSZldaT2YxZ2xUemZGTDhueFFRZHJabmtiNjVaM0xfXzNDMWE4czNHZGFGc25HeVpOczQ2MnhRTW9ONkl4U2R3a2RiSXpHZEZnYlc2VFVIU3lJWk14dW91UHdLdUt2czF3QlRsYzZRczVYbDRHZXQ4YVpMc3ZLeHZPMnpIOE91WWtsbkMwUmgzQzRHOERDYzc5RGVZQzQwcmxLS0ZaM3ZrN0hLRl9aYWZzdXBCOXpMNmlQdjc0ZlhrbHNWY2s5WXhmanVoTm02R1VDSHc2ZmpFU0NKT1p2THZGa1RFbVY5bUQxNURlbGtHaUZZb2JpWG9jMFJSN09XWjU4Z3BjZ25kZkluMjJkbDFFYUtlUVVxT1NYMFk1N0FBLXF5OEJNc3pYOHhzQ1lkOVhqMzdPbUlJZE55VHJBT1RRckIwQ0NaTDdpY3lWOVhzR0I1bTd5U0prSDJOMmZCWGpGTmJHNnFUbW1NR0c2amVoR3dIZjctY252eDJCVXlQYUhmLWhjenJOSU1Ca2w4STJVSHVmVHJCOVRDbF9jbTVfSGFxYWgxajZTekZtMGUyQ3NkOVJTUmowTEFpSU1EM2ZYaHo0SDVNU01qRGtVSmYwMWhwLUotNHl1Szh6MUpidjdhYjVEYTVqZmpBUmRHR05KUDdMYlV2SzUtekxMYjV1MTlWUUlPMHRJa1IyVHNZd0R0X2pIQmNlaUdGbHRXTUpDaUhwNGNkaWFZNDlmTVE2d2pEN2hWampqRWFSVWp1MmpPdjM5WHhBY2hFRWxJZWFieUZjbFpEVVFpUVN0MURqLVBEalluSmU5aFExelhaRUcwaGk4aWp0bFVKREg4Y1RvOEFMUm56S1AzeEF5V0c0LXV0TVNLSHVEVHdGYmhMUGwxYzRQam1nV2FnOG1fWnUtOGw4VTllVVRjbDkxb3A5M0FQbUp2V3N1bHdtQjRFaHMtNzdPYldoVXdLUm5YeTdYcXN1S29GcGRZbnJiaTI1SlNjUnVYeThDTjFqOGpKY3VxTnRLUU9obFlxY1J5R0FJVmk0UVJQYkJSM3lKSkUxTjdWeGdfVUE1RzdYc0FpQnVrcGxieXdqdXFoY2Z0VUZYeFdIelB3V2hEQlBsQTdVRjJIR2N1UkQ3N2hjUjMzbHJUV3NxVXhUOHlaeEFxeDg5QjMtbDdkMjB0VThvTnRXbHZONzNZdlZZbGZvdzZXMEpYa2U1YWlPS0U0RFhFZWp6Y20xbkdyQ0FCaXNSb19FRkk3ZU1ORXR4QUthU1lYbXpYa1hVZ3ZuRzBOYkp3clozWnMyWU45MkRaTEg4THZGd01xc0xzUzQ5LXBGcHBJTjRGM3BKRVB2a043Rk0xRmNLRXU5UnRhdUY1TlhWSGNCZVFSV1dadkpBVWJ5eTBpRmJMS1djVkROY1B4WVVBTVIxNlpOTnAzZzE5TWwyTUxybGR2V1JXMnVoUWZYZC10QWxCeTREekxpQi1nQkVGVkZUR0dxVi1SMGdYVHlZWHNLLUhoVnVLQ1g4S19SeWZVM2VmX0Q2OFhEblpqcHpNeVJyekxwY1FWcFdRZ1daR1diT3c1Sm1CU0VyLXVPOVpqaGIwREhKUzZXWDg3RVRxZk5SVnV6SXFGMlBQb1Nrd2lDQXNFeWk2RmQwclVjTHhwN2NkTWpMVGJGNVRWMFdvRnp0MWdTRF9ZZTJLMFVWSFpPRGxIZ2NmT2g3QnIxVFZ6U3JMaVd3bnotZjhtMWluV28xMms2bkRxYldpRm1oYW91YlBuVFdUOUtxbDhjRmRYRUpXVUpvRVJYYjU1MEkxV2kwUFV3cS1fR3FPSmUwSmZxcWVFV2FJbmtfa2pxWU9qQ2hJbkF1WUZZU0FJUEJpQXNkb2w1NFpZRDFJbWxlOHZlLVNTZmtDNEZ4azh4dWVtcUxqclh4UU5YN3RKSDRaYlp3UnZkemp4LVM4eXcybGpCV3pvcGluTDNUaVgzTG9YN3N5eE9Ldjl4NHhCMlNGZUxNcWJIVmpaeUJxSzlLQUQ2QnRPMjFqWENGWW95aUdQU3FtYndhb2FJYUFIUDJLbHZocjV5WWx3VU41WWYzOFBJZE40YXlwdnllbHJJellTa1N1Um8wUWRWZGhnUlQwamxpVEduTlNjd0RsMjV3QlhpYnZSdjhXWFhtdGZyZk11d05vMkd4VkpJY3Z6cTNFVDJ4RnNlRWFES3FwYkNUSjM1MXQxaHZyUnYyek90M2JKaWd4SmVFUEpZZ254alJldXhaa0hPOEdWcmNoSmpwc1R1QTU2TktoWWE5VVZzb1p5UGppTkRhT1Nxd0x2NEhQOWRZTzFEdHBaWGlNOGtDU0ctQ0dudEM4WW9tdzlIYUNibFZ1c1V5d2xNd3kyTDZmcU1HVkpaeHhQNDhiWkpTNXUyOXVSY3pCV0pqdTEyQ2g4VU4wNFRDQ1I5bTNuZHdpM29iUHJYel9yTHNNY0hTUnhWMDdXN0tCbmxjSW51c0VjdWFSZXJLRWZPa21TY3REUnI2c3AzNU02X0lMNDZTbDUtamxCRWxZQ0xiTkxmaWZYTEV1N0tnQ3NjTGZBbWtuT3gtdUNveFNneE0wMEQwR3ZLQ1hBMVJ5Nm1VUjhib0o5TjBBNkVCOHRHUFpYb1Fpc0VIQ2EzUHRIc2s2V2o3d3RCQ2U4SmZIcVJ6LUJCbGFPVElKS050U3lpZ1ROajc1WkdhODVfRU1wRGJ5X2lUX3d4WTl5aTY0MFVYYzViYWFnTGVzUzNZNWJ1eFlSLUpfWlhhczQtZXVLOUNNaEJ1MEhtbEctd3hOLXdwSjd0ZlJOM1IxZDhTRnV1TlNPeE8wV1FMelM0R0lPT2hIMXlIRlNNd2JJZWFNRjI5bVpoclQxNGJtTGwza05KTDlSdmx2UXRfZUd1SHNneW5CZndSQTVVME41dkpsRTNyZ2FZaHNCZ09rLVBDQy1Id1pUMXFSTjdCT2JBWmZQbnhTNkU1TFVRSjFYMXR3a2ZBamFQTmxpd0N3Ry05RmpkWkVSdldVQzcwZ3pad2k3eXZWME0zRFFTcjlDeFlWLWI5bjA2czhyRlBXem82bk9lc0xvVXcydDNYRG9MNlFqREppbHdzbjczX05CQXhrbkkxZU1UWFdCektlcHNuUGxid1NrdTRkdlJDTDM1MlI0OEw0TlFZNEFMa3J4cGhweGRxZWpmR1k0Y3c3Zk1MaVRCVFIyNGZFaWRqR1NQSG9sQ3ZLa1JqcHJvdXM1eDlLaHRSNW1kZWppQ3BnZFROa0RwQXVpYXpfUW9UNFp4eERtTE5ZaDZLclMxelFGM0lieVVWbl8zYWgxRXhFOEN6b1lGY3BrYmhOWEZmVU1GUGxpX1BILWpjQTlWWHA4YmxUS0IxbmQ4ckpPZGZ2X2JOTUNab0UwanlYUlY5dnFrbkl4VWhjM3VsQmQ5a1ZXTW40T0I1ZUg0OHhfY3ExRGxXTXI0RjhpVjMzdGotcFlmS3g5Um1oTk9UcUhObjVpelQ0TUtCR1I0MU5zYjB3Zm1Ia09tMG9fbXpFQUtwNk5uNWZsZXBDY1h0bXI4YV82ZEV4YjVrRUxmbmtzQ1I4ZXBzd3Q3NTJ5NFJoeHp2M1BMd1htaEc2ZXNoUmp2VzE1amcyTjV3R2FqNFBhMmRnRGRGVXMyM3ZXYm5vcGp4UDcxcy1uOVZuWGEtSC1hTFpSUzd3Nlo5bElKaGNXSHJnNzg3RkI4M0pHOGotbzROMUZMZnBTNER4dktSLU1vd3RlRGpBbzJtZ0JhbG42MHdnMTB3VGxwVjdBc29QdzEtUUMxV1FWcDdQRGZCbENadXhqRU5tQ01GLXZ0NWFBVVJnVlotT2JiemFLLTZUeXJ0eXJBWVNxX2lUbHpmNEk5LWl4LURCR1RGZVN6bDEtTEppakVBUWtHaURVdkdiUWhsQkZDTkZkbWRsUEc3bGgwUUxiS21GbXFydG5iV083RDkwaE82SUtvZXhPM0JFcU8teEZtOW9ZdktJYVRBdEFhX1lHRkFmQ2pYaHNHdk9uUC1aWHJNWlVmaDlJWTFLLWt4TnlkMHVCRDJjVmxqMlJJYkc2MkdxdGRLQlBoTmQyUzVMYnd6SDNQNnRWa3NEeFdtR1kyRjN5dGc5LTRaSDUxMTh4bG9CZjRNRi0xRmZYdVQwVE43Z3piLVBLNGtxbEpabXZsTFNPVkQxVEl2ZzNzZnUzaDJsZm0yYjR0Uy1ISTJzdWs2cXdlZlRkOFpDbU40QlJfYzZOSU1NOXh5NUNYamJMRG9meVNQZ21qcGVtcEtDZ1VtSFQ4eDVuTzJKamNjZENxNlNwLTdveWJ5cTlGem9sTXNNMkdueUF2RmVOcHJkTko0dHRxNWpmNFR3SFM1cEVVUnd6TThNQ25jMEx1MkZRRFJVMEJiNkxsTFo4Y0dWenIwdEc1c0xRR1hSVjltbWIyazlBNGU4aUxIZkdVZTN2eDVLMFN3Y0FLNzlnMC1VbDV5R21kVHpVa3BVUE8yQ05jTk9MUHhGUGJVbFQ3M3htWjFrckdBQkRkNUtyR0tQUWUtYUZhVWpMLXFWZGlrcWhhcWVaaHR1MGZMb05oNFRPbjliVzdSdkFOSmhTMi1aRTdJd0JrR1RPZ0VQZnZhNnA3Q29FOGF1ejNIdlExQnRPVDBxVVVFeWszSlhzN2E0Ul9XSDBTaDJHLU8xZ1dmT1lWeUw1WHpvZXlqMldzQU5CamlFT05kVDFLZDV2MXUyVXJXUkF1WXpSVDZ0cjAwZVZkb2VvdWNMLTMtSTVpN2w0QTdQOVE0YklJTXVJNDZTWVRVNHNHMDRycW5ySVVHQjRQcDEteWFJa1lvTTJBMFFTeVVaaURwTmRrWldpUTRaTGxKQmNTTHBoS3NOaGFDb2dwMTZFbF95VzUwMllJQXBybjZqcVQwd2NOWWU2Z2pndFNGSF9KNTgzeEp0dVpFSXJSbFNPQ1poN19RRFVESkliMGE4Z3pNQVJZa1FEbnVoV2w0RGJ6eGU4eWR4Y2ZmbGh0MU1sZkxhemRnMGc4WnJ2UGpONWp2UkFoN1drMTZGdGRWdWR3N1lpSFBhU0hrSUtsUG5HcjJmWFY5M2lwSHhoSFNoaEU4bTRfUVptZXhiN05SVFczU2FfcUhDWHZEc1p3a1ZaQmN1Y0xNb0dRb0oyUHVTZmFpWXJNSVpXMUpFTTh6LXNZZnhTZG9Ka0hYSWxCbmlDZ3NyUGtIcFZHVC1QZ1NEZ09nX3Fsd09EMHFzY0VWamdMWGozdFhvcFNCMVhMb25mVW4tSE5MTzZnVkt3Mml1WVBjcWFrbGRkZ2J3UTdtaVFLSVlPWjVrYjVZQlVSTmhXY3BnbnZzbGhqQ1QtVy03RlBBRmtxaU1jblFsZ1ByUnJNMi01RGlZR0R1Vjh1Z2pEUmMtbmRaQmxZQlRZc0lyUUdSRXVFbjByU29XeUtpUkVMVzZRSENua1RLSDQ2dTBHVzRVRTUyZEVqR19ObkR1dWo4Skd1VXM0MGIteVJzTUVHRV95NTc4b1BIdzhLNnhXNjNWVE4zNnU2ZHg2WWtUXzRLR0NLeVY4OHByb053V1d0SWdrNU93NURQV2xieVNQU2QtNWsyWXBZcHBhUk5RdUFIUmlVbDA1THc1YWEtbElRVVE4a0dEMTJ0TXlhTHh0d3NaOXB0OUlDZksxRmd1M1dWamZHMGxqYlpYX2djUzZkdTlvOEMzZW1xTlJLQTJUa1NoNlQ1Y3dPbjFqU0JjQXQ1T0lLcldkSENuMXhQOV9CQi1SUndpSEg2eFVCVnJuY0Z5X3JHSmZTT3AzUUJpWGtrdEo4NVM1QUszT2ZkbGt5dW1la3labk5iUEtMU0dxOE4xSDFKMjRNWjFwZDNxek1WdHNWZEc0MWFmMTg5REU3N19wZ2pLcHA5MzRBQUpfOTd4Z1d3dzM1U2w2eVhWNEk2ai1CYnFfWjkxSFphWTZybzRNZWtRTktvZFh6bVFSYjZBdUhyLXl6YnhnX1J0eUtOWlVRcmdqRG5tLUVQMEl1SThiMWNJdmhOUjhXams5b1FJNklKaUk3X0NGX25hSGhJc0Zaay10Z0tkbXI0cFp0b0pYS1ZSV3dQcFlhcldKZ0tQdXh3bmRlVVJTRkc1UkVQamY3RnBFZ1YybkJUcFVvYWlFQnFodVdWX1FoTXZ5Z2hWaVUzbE5fODA0NlZ4UDNtNDV3SF9Fc25HWFN5ZjIzRTZ2YldOLWtCVkdKeXAtaXFVUVd2YVdUSFlVWG45Z05sZFBRM2R4MUo5RXB2QUlJei1wbEY0eXNfMWNsTURVWlZGVm1qTHRUTVBMOVJQdE44NHVyTWVsUDNqekRkMjlCcEZ1RlBXSGc0aURjTTVOeWEtVHJQdDRGNENaU3VDWHpSSTBwUmJzZTR4WktQaXpwbVJ0dVQtLV80UVlGczFhdGZMN1d2TVdCemdua0lUSXVJQzl3R0NaSVowUW1NZXN3RndxTkk2d2lqVkdCemM1WmZQY3J1dzUzUDRhbm1HXzNhbm1WVG5HdVZpeHBHRzZnVmxFb0haaHQzYVAzbzdXSFR0eFM2RkJCQmZTRmlOVXBXVFVmWWppSHNNby1VY0NpQ2xobXE1X2R4aXptSVpGWEprczlmb1UtZWZNMjFtWDMtaHlmQWxjRHlEQktRNWtWRHFMY25VYXBVQVpWOU9HR1U4Z0hMTVdsWHM4OUFSTlpXakpqQmM2UXVSMWJ6bThETHZsd2c0TUY3S3BYeFpadmNnWmotV2VPVTIyTUpqcVVEUHdqN2I2bE1ycFV2RFR0VWpRU2REcVpDR3c5S0RJSmxvYWluU1RMUDdncHRvVnRPUk1xZXl3RlZfUG9Yd0lheEdNSUpZU1MxOU9EemphVlZtTWVuQldRR0FYazJlV3ZVeW4yTzBPdzlsdXdPME9NZDY4cnFhUWVVVEdBdWFIcFh0dzNMQ3YyOXRPbHg4Zl9jQUwxaEctUWZfMUZrV21aVXFxQVlMcnFYZk9CemRSblFleHhZbVhxU0EwMHV1UmhhSFhnRi1iLXJyVVhkZXlaWDVVSHRaNzJjVFU4bDQxcVJUa1lmVXctRG52MlBETmZBc3NybDFWeWhXcFN1ZmtyZVl3N0IybWx4U0d3QWxJSWFrNHpoZV9lbjdwMWJDMVFndUF6TlRkeGxDOWhfdVhQelhabDhqbTZHc1lOMW00QzdxMmQ5Zk00UlBkVHhjNUNLZ3gwS3BTR3ZjR3Nla0NTODJ6UHVGTWhpaGduSXNpMzVtWUhONkdCWHU2dkR5VXVEcEtSaXR1VE1PX3dWWU9lMnpQWnpaTmpDN3pvS1pqNS1PSFlTRmtEbEI5S3AtR2c0SE9RZU5QbGhmRHNoN09BUU5URUp6WDB4UHR0ejBkOUQzMjBLeldzRXNmbWRBbHR1R1FUcDZyY1E4SERjYURjM01oNkZ0dEJHOEN3cDR0UndmQ213bTVJd29VN25jNUdGUGN0NFIzQkFXWDBEMEtQX2dhOHRxcEdDMDc3d1o4Rlp5d2JSWkdRc1lLQktoMGlCZkFJNVhnaWczTGRmWnRDcVc4Wld4NGhFNHkwSWNpbnBjQlZ3TWZNVlkzZ2R1aTF2Qm1qUGJqVXlHMm1INHhZZlZvRkZfbGJLOVZkVWhNX3lUejhNYS1UcDVFTzJ4NlVHMHdUcHdzVU4xblFUcVE1WktYdktPTHNmb3BqYXY4bW1oRTh5aGtBRTlOVUt1NkRuRmdFSzNNaGhXMk5oMDlXTG94UFUxYWJEbE9iN3ZjaXV0WjIxb18tT3YtcHo1UkNja1BxRFFGam9iamRKR1psQzc0MjBBdER6bGRTenA1NEVLdjVqOFk1YlB0dDdtN0JqcTJjNXJRRS1Pd0RKc3NhYk9mblpCS2I3RmtDT05BUW9zSlZ6Zjc4N2VRaG5TNWNLM1U3OTQyZ2NtVmdWLTk2Nlc2Rjc3Wk1uNGJianRuSnBCdEE2a1RveUNmMXNRaXFwcUtXWkdGbkg5SUYtWERXN1JTOGVZUlVHcVlObmxyN05zSWJFdklTMFYxTXRXUDZxMGV1WUpBN1JPeDJaYkF0TDAydlRNTzdUQWUzeHFjQzlxNmFYUGlhRzQwU0RXdnZUMHpFbkppUWFlMkRBMmtZNU5aemg3em51MFdvR2ZCZWViSjd6RkNuOGVBWnhMeURhQXJaZmlVZUt1WWxLeUhRaURTemxXaE5hVnVfaThVUmpCU0M3ZW1hVjU4eXMzZjJlaTVSeUhqaXd5TjZOM2VGWEdqZ1pLVjVVdHRyekRTWHFRN0haRWd1Yzd5enNRaTVPX3h5Q2RGeXN6ckdDeDZNWjF6RGlfZ3p5QWUxd0w4M01SSEJZQ2hTWE9mVmNEVl81NGJqSWcyaHoxbzJ5cnU0YnV0QTR3b25QbnRtMnVjSDVPYmZ3TlgtYzZnZ3hCS2hJMWRHS01qNEV6U0lBUFpFUElQRUFZR1g2eVRCcU9rTnhwTU95cTlwRjNuaXFJd0RMRU13d1ZJMEUwclVBUU92Vkd1VXJDODNMSjV3eHRNa3NjVkg1SUVPM3V6NnpiR1hPR1NzcnA1Wmd2OXVCaGJMY3ZWamM2QllOS0lxa0p4SkY5bkZ6MnhDd2lWckhLX0xLOEhfR2dGdTFOWGplam1QU2FCTng2cnkyWDluVDgwR21HeGYzQnpYZVVia2ZvbTVPRTItbDhKYzltdDBMZUFqeEs5Z2l6OWJkQ296RWRHeEZXUldaX1NlWXgwaExEY2NiQVlkM0liM1ppZTRjNnoxVjJaTlpiMGRTQ3NjN2VrQzJMbzBYQ3AzQ1RZT2NVN2ZrUzhibmRhcEJCbndCR19wbXJLbEVCN1lEdnVBdF93VTNwRjdncnAwR1RGXzJRUEdOUXdyNmtRZE5aelJLM05rYktMQ3AzZ1FqYWxQdHkwRThaU2dGVmVGcGI1ZWs5VWg2WjctSEVjVV9jM3dpWEc0UzNOVFU4UUROQ0U2eEd3MHFzNHJudTl3bFJ3cXp4RnhjMHFvV21XREZrbUhGbWFlXzY5Q0NQZFZjXzlJNGZFcmtrVmgydVVNZHViVllfTWFDWlpDelJPUEQ4NThORTBzbmNJZWwzUWFORFBRdzM5TWQ1cFlHQUJBZUNrUWxhTzI0SXRmRjJlOWhJV3Q5cG8wZlJtcDF2dm95QVoyb0Fidms2ajZ5SmV0MVBTNmF4c1M3bmVSclpKS2k0eTgzbXUyU2VmYVJSOXBqZ2Z2TU9Fc1J1ZHlJSWM0WmxfMTF5YzJOQlJHUVJJakZyb0Y4LW5wQ0kzMTBPNHpIbGpmNmhhM1JRdkxBbGtGTU8zanh5YUdqU0g4OTJYU1JfYk1xREQ2U2V3TlBSVHRkMW8xdjdleFNhODFJc3pnUWNzSjVoT1RINGZLMlNCX2M2bk5XSkFkVFA1SkwxcGhVc05qVjh3RG5OTFM5T0NfZXVqc3dzS21QaEh2MFh3bmV5T3kxTXUzcTl6ZWlqcTJsWUd6bXlkMW1OOGF4SVd1ZE9JVktrQVoybnY5Tl9uVkl5Sk5ESGhiLU4wUlhuUnJGbWpwczljdVB4MFE0Qjh5em92WmJOYW9zdE92ejZJNEZYaWRQRlA4MEFJV3ozdFV0bnRyX0RNU2FMTmtESTEtZVllS3p4RFdLYXNMRGJhUUh4a1JENWtNUU9BNXduWlVXb0xUYXpQQVY0SFR1NWMtX0pBNjZMY3Ata20yckhoeVZRZTdoYXd5a0RMTU5PSVcyMk5DOU5aNzFaSHFMaGtfUU12eTVVeERlUFNOT2tGQ1dBNXJyYjY1ZDRJQlZhTzdVV3J3TlMzOE91VWlzN2tOSzVkWkFPTTE5YTZWWDZZSEl4b2ZONk1YV0NLU2hwMWhFa09na1lWNFZ0cGJYZkFhMUxSc2Z3R1RlZkdkUTJKS3p0dy1EZHR3WkMwSUtERjBlV1hqZUs1TzBjU05VZmVNNXFwOTJNLW9nVGxodjNSMjlQaGdydU9qVlhmSEFCbVF6LU0wVVNZaTJZeUJiaGl6LU1INmw4VE0zUWdsZ0dBQk01OHB3c1M1QVZZeDJrZHdhbkI0QXVWbnphay0xd2xFSnZxUE1tY1Z3ZWZEY2xIRmVQUlBHRHRQd3FnempwX0toNExfa0dhZ2ZTMHVYVnNTOW5waVNydjEyZDNyYnBKZ29XZFhuS1pLNENnMERuVDA2d0ZQNEg5dWtYdmR3bWVweWtUVEUyblZ0MXAteFNaZzFsQ3NxVmhLQ1VVTjdrR0FLLVN1LXRRY0daWkNuZHlfLUwyZXdGUWplTTl0N1dhYzNtT0VFbEMxWTdlOTZLakdOLTduZWlERzU2VWNHTDRwX0dBZDVjN2Nna2p0WEZqOTNaRWRoRjc5bDZHR2ZZS2tYZGdEWld0U0paNUVyZ0RQRDJCRnhQejR0WVJpcl9LOXZnb2R5OU04NDd2N0JnTy1sbFJadXo2RVFnNlRORndlcGdmd0dUZGJ2akNSNnN1LXpIU1pEOWs5MlNFWjNPX2RHZHRRemlfTG9KYk9XeVJFM3FBWjQzcGFhQ2NPdmoxb2RNek1JaEtfQTE4SkhOeDB2Tm5QcnZYSUxGRWY0Q2dZME5wX0tnQTd2ajBWdllrcmxOdTNrd2lMd3EzSE5CQVY4VTF1TTU0UVZBdDRSTmpDbWJuQVJ6d0V0MW0zMTcxeFVqdDI4T0VRMS1aY282emc5VXN5SVBzLWdqczVDWTUxSF9kVTJ2WjR2cUI4VUJfeHBYcTZaOHZxeDlzQnRjc01vUjFscGs5UW9DUkExQXp5ZDl0UERqT25Eb0o4VXdIUDZrcUljS3N5Q1JqenlUMUwweW5XVDkyMDBWaWtzUDhMNU9fVFIwWEdfaDhtc2MxQmVsbWVLQjQyR3V2ZlhXZ0ZIVnQ3c1NndW45X0lRakZhRUQyZjZvWW5qOXNGNWJ3cGdaZk5odkdqSnNaSEJmUlBRWVMwaGZLM05CMldyeGU0OGhiQXVzcTJZUkxpSmM2WXpONTJQcXlvaURVS3lRWHRKMEJYZTk1bGxrdWY0YWtqcGdTVk9OeWxSajY0R25TS1d5VWI2TmhtdWJSNnRGdTFqWHhkOHFHdDViWFRiVEw0b3lodWRHQW9EcHotSTZ0al9vVmd4TVluaEJsR1pOZGtPdU8wODZkb1UydkJEcHk3LXNMNkVZS2FJLXRhRW9sSUFFVzd1N09pZFZzQVRmakZKNXd4RFZ4cTBydDdCeDQxWmRHTlozV0lQRGs1OFRoakZBdUtWSUd0X1FrTC1MaDZFWktkbnMxMjJqVFJ5Wk1RRjRYQ2JxRGc3R1lLdVpzSVdOdWpWMUtmV2pLUEZxQjczemVVTzNpSTVpMEFxX3VFeDgtTzdreUFPUkk1ZjN4T1RjSnMzWGxfb2sxNFB1TXh6d1NBRzA1VzhUR21XNDUzWG9oNVVHQWdUcWU0Z1kxWjYtUzhrS1RRTU16c3lKdkpjX3Q1dUdMTFpjSjluOVlQWURpaGZ6VS1IRzFOczV6ZktORDl5TnpQd1QxNVduTWlVc0Fkd29yYS1kUFBINVZKaGUzaHNHODllb0VlRkQ3UENUaEdEVFl1MWRJS256ZldVMHFCT2hRSFVQLV9kQlhPOHJVUkI2VHNaNGNaTHF3Qnp3RkFzemRWdXhMa3FieThVdkp4Z3NwSkJrUjAyVDRTb3ZmM2k4X3pZV1NkdE5TMDdqcVlROHRpbXZVU04tWVY4U3N3ZndlakdyZktiSjFKd0Z0OFY5Mmw2S3l5a2laT05QMV94QlYxM3Y4Z2lBSm44YWZlYlptd1BFVkZfdkd6bTZOcV9aa3VJakk1eFNUY3ZZY25pbkc5eGZaYWhhMXdiZU13RnMxSTJfSk9raVJfSE5BUE1hT3o5cFVmT0NfRmM4NlVaSi1KV0E4SFpaRGpvXzRMRjF3MTBBMVBxV01GRTd1MlVfenk5eHdoVU9wYy1YdVJsSGhaNE1GSTA5QlM1NEZ1RlhOR3p1bjNSU2ZFcHdYeUlkRGktbVNUalExdnN1c2FwMHdrTll6bDNLSjZNSW1Bcjg4Z2otdXRyRDRKS3BiUVhxVkt6YVVhQU1Wc1YwZzZjYXNXVzVSUXRrSmxZbDlISUhJV1dZVzNFc1VLQ2VyQ0ZnUUdrbEtaYjhRbmlUSmtfamZyd3dmcHFMdzBRVVc4RGJTUXFLTlRsYnM5NDBCWER6ZXlaNWNaY3JqZzE0bDBQdzE0Njl1eFNpZERBb2tvZklma1paNFI0WkJSMTFGaVpaUGdOUzJLbm5heWZXWkVlTjVfMmhkTF9aTDdkS0ozNDU4SGNyXzR6VWljemRTQWRvbVF0RjJuUVJjbzlPYnBnN3p1Sm44M05UMEhGczJydDJfX0VXa01oa0JlWnBUdEtTc3F5bGhBSDhYQklkYWQxY043eExSajg2VmpzOTlrc00ycmh2MWlEc2lvLWJmdjZsTklvdnZUQUdQUUhsZG1WLUxZRm16czhKMGNrOWwwYlJHYkZ4bGViMi0zTVlzcVIzYkEwcXQ3ZlRMZEVQb0dQanhWcDE2Z1g0eVJiRjEwdnFaRlo5V3lxdzRrN0QyOGdURmlLOWlSaDdoQlVjdTVXUGM5Y092NVpaSXVKNDk0VVh3ZDlKSDNfMnNWYnpTdmppUUxzczluSlRjeVBMMjdlR0xzcGROVXM1WGhITl9JVHgxc0hXRXNnQmRzNmpEX2YwSlJJNWpZS09DRkpJb2Vjd2pkOU1LLTJFemE2SDAzNHh0X0ZCTmRMT0xNSHRiMi16am96MVpzNi1Rb09SZTFWOFdSMFJuck9VNW5nYklORmlHeTVJUG9nb25oQW54WGNzQUxVLUR3dDZoU2JfUHBWZXo4R1JTYS1iR09FSEprVk1qTVVnTnVDel8tMzRDb3BveUwyLU5sNVdjRkcxS1p6VDhaVnVBQWtNTEN0d0lxZTNhRDhZa3BXck5DMjRiYUxydE1iYzNaWXZ3NkdMQXdiMmg2S2tPV0g5UEhmVkhkcm9pVXN3MFRDMTlTdlQya3AwbldzQ0dKYXRkeE51MGNoRUJscDhBZUZ2TG1WSVl0OGZNUkMta1JSd0pNNEp3MkpMMW9FUkVDUTRURXczdklCZXVnNHIyTENtNXcyVkJObGtBVFJPZkNGQ3lXS2tSbzdJRUhzUUVNQU5KLUR0LVJCX1k1NExoV0lJZUtYeEpCbEU5dmJ5LUhtTzBJUzFoangwRWVtTkNnUktSTEItRlRJclp1WFF4QXM5czZjYjN4c3hNYm8xcG1GZTFsZ1lVaExmTnpmdnF0UmVET3loMkR4Z1FWWVpSeE9FcnlKOVFuWjVlZFgxODlLT1VsanN6YzZpOUw0NHVWWmJmRDJBTVY3UU10b3NXZ1AxRmNmT2Zwa21wUjFWcjBaTUZ1dVhGQzZqamlRbEtacUo2bjFkcXlmTmEwSS01NGk1aEZSa3pRXzJKZEZCU1VWYlctV1ZmNEcyZzFwN3BFX28teFVJRTdlaEVEQ0JWTVU4Wmh6MDZmT2dyYVRFUW15MGxoRldRdFF6eFc4S2IwTWhXWDJ4UGlhb1djWGtKdXh5NGFhMUdLdGRIV2ZqOTFrQVRlb2lOejBVWDBEM1h4RW5BaW1rQnc4bmhLQXgtRUo3LWtXcWVNcmR3d1VyUXRTTnl3NWlFdUQ1Q3V6eXM3azhqWHFTUWlaQUc1d3BfSmNMUUtJajhaY2VLYjd4Q3ZBOWdXZ0ZsRGdOTVYyNU1VMmhKTUxIYWUwUnZ6V3U5Rk13MUF5NHVvY0t0dVItWnQwdS1mcE50Um5pS05uYjhjN1hiX21qTkZ3X1hXakRTRnRDNzl4X1hsLWdUekdnaUZMUnFSd3RCNldJb054TG9FSzVlVENmbjhQRElPenU4MzVFVFlOQlRuNmFHQU90b3lUai0zbGtmMVQzNTU0VnJaSjB1azV0R0NRby1GVTdoUlNsSmpXemRPX3pOdmpEOXB4SzQwMGdsT0lwX0w3d2Q4dkl5YmdZZTBKM1FReTVYQVZCakhsdVhsX2p0WVpfcTkxWEhiVnJGNWZNTy13NEd3T0tNNXlwNXlpYkhZVWdacmlsN1A1NnJJbVFMSEZvMnpnc1k2N2d4V19fTU1YelJSbTJBUGlrd21YSTdUWm1KNFk4S2dxYmZiT3VUTmpWRjdjTW1QS2VPeklNLV82Rl9tcFZ6cUladnBpQ0Y0M3IyaVd4Q01BWWM2WVc0dGtBVWlydXpFQndlMlk5QVplNjN0cUd0bUNvRmxOQXBvZVUwMHVOQUdFM25NWmhsdzdydE54Z1hZS0ZDQnBWTkoxUnhsVjAtLS1Nc01YWlRsUGJJR3dpNE96MzZSYVJtV3RFUkZKVktNUGwtZXBJdnZ6ZUhCaWp5NFpLQVJWb2prOFk3QjFCbGluNW9tdDIxandCdzA5T3pXVG1mQ2hLblB3bjVPZlFHSzItRTNSRmhOZnByM0JzUEpkUHloRVpsNnRlOHE2UXZqalExWm0zcGxqbzYtSktQenprb1J2N0ZweXhsTlQ0a2RQQlBpcWljcXFTY3BhemtoMC1pSkhBQlVZQUpDSEYwQ2stMXduUTlvdmFEZjJKMGI0RHFBNm52M1ZIOEp1V1I3UHJzemUxOXBEYjFkVHZERFg3dkhKR1RkVklHbzZCOFMxaFBtdl8ybURoOTVlc2pKcF9ySnZPUTBBYU1iRkdnc0ZPX05MVTVTRS1LbjVZeTdzQzJEZzF1Q2ppT0VDTkdEMVFVSV9NLUNqT05BbkJHQ1JKYUE0b1FLVUZDVzdNZEdlMWRYWGZ2bm1WUVJoZW4tSk5MaHc3T05LT2tndHBKc21JSWYtV3htcVB2aHh2bXcyV1VwY05Kdl9mXzh2Wmo2dkZsOWo3bTBqQVA0VDNlWmF5ajNNUVJ5dVFnb29UVnBWNXRpWW5aNFVDS2VMOXlhc25BTS1SYnRlSkJOY0RyRXJjU2tOXzhjeFFuUDBwQWZCa0VTRXZnNGk5ODVvd1RrRFp3OE9WQTBjRy1EMXo2ckdXbWVpcnlTcXdvWlg2ZEFocEpvUFlvdWtVdEZqdW9OMTlIam5PLWc0bFZzQXhnbTUtWUhmdWt0azlmVnF3SzgtdXNvVUNiMEJ4ZVd1STJIbTBuY3RUS0RLZGUzc18xOUxFcWJZdGJ0R29YWDRGZDZlanB0NjZCSmY1ckpPZkpmUzRlU0RnMDh4NU8yZ0V0VjBoajNMMjFETzc0UmNNSUlSTGxzZDhqU1JxRVpBS3MwWlNLS0pEN0VWNlNVbG4wbEszWWlVN2VDVFUybUhKUnlwY1lGcll4S1VFZUhXU3NFa2NnX2FKT3lna3ljNDV3SDk3SmtWZGVfUkJScU5hcVhWNGNMc0JDVUhOTmRRU2s5M0tRbHZuVUNmclR6WVZOR3FzalVXck1maWQ3Q2l5WVFWYXFXZ1ZVaElyb0R2OGRTc243Ui1MTkt5OE9UaERweVdfZ3BLZjZUeHBsZlVrWkJBZG4yU1RGczZvY0xrc0QwQVMtb2hsM1VOOFlLcG0xaVBCZGROYlVOcTBhM3pWaU8ySDNndFVmZlA0NFBZUlBBb3Fsd0VoWjJqUnlhS3N1RkNLbjlweG4xVE54Nks0TnAwRGNMT3pPTThscnRpQ0hQMGJSM0dDSzItYzJHV0lqdF9YamdZRkxLdFFJOW5OY3dUdUNOb2NnSDZQdF9DZ2VDS1FiOFFDa2M5TF9PcVNBMzItcWNBLUJGTnBxNEkzSndhXzQ2bHRSWTF5RFZhaTBnLTVpaTZPd3FQYTI1Ylp5d3FRSjJoWmk3R1JIQlZGSklCNUxWclZHV0hlakNyd09BNFFiUVBnNGVOZm53elNQaUM3VHoxVTJhTUdMWlRHc0lFVXlQS2xGM093MV9IY0RmWWRQaWtlT2RXeVRkTEdjcGs3RkJRcHJLN01xNnZabHBMOGFFZTBDRENuQTFKYTdra21aOFVNVHZBOHo0WE41OHYyTHNRQnZoSFljNl9xNEwwa0huZnpmNlgtemRFbXVodUdzRDlQbW9iUFBZVll0czZWMUpETWdNeGNPb3Bxb0RBaDdMWC1hWmpXdUQ2YkVmai1kN3ZXNTFPcGdTTHl5WUpNcVRmZ1cwa3R6NzFlSkFkOUVseFQ5TDhtOTlySVF4ZnlQSXVnWUw1dG1kajNqaEFZdGxHOENYT0o4ZXJaZVcwRFZaWE9URUg1cmxuOTZZb05peTFManAyaEU1cXVwZzNIUG4teVl5Rnh0YjBqQVd3VjVlVE12VjluRlhhQlB3WlBJUV9KSmVvZ1ZzM2Jhb0pZRXJWY0J2X0lKWEUyV01xNTgzQmphMUlnQVN0U1VYSWtmeFJIWC04SnFTOWxvbzI2NDM3d1ZQWWV4ZHFhT21mMnpKbGwtRDJVeGQzM3BmWFRhRXFDcmh0OV9GZE51NXpiejh6RzY3d1F0ZEdEckxQU2JQU3R5cmNPUHZjYW5ESWJXN2p1UkoxNG51T1hWTGJCOUVoSVgyMlVqblRndjZKV1VjN2h2LVowN3BIRDJhbHVlRGN6VUp0TFRNWGp6WE12eTVFcHNFUkZwY1k0TVpRUXdVbUJ1NkRsbW9mbmJRc3JLVmJWZzhwel9fOHN4VVBvME45em8wS3hUcGNHOVdYYmd2RkRLc0NtUHJhUm5NNTd2NUU3NkVPamY1b3lRWi1fU0dwLTk4ajRWYmJGTlhhcFV3aVNyUkRKZnNQdmwzNktTVFVsZGJ6YlpXa1MzUUVKdnloRktMVjJHVnlpamNfQUFOWjNTTmNyZEtGMy14S2JwYmdTanZ3b2FuQjJFV2xPSWM3N3o4THFOeHNZekJUYkpyN2EtM3Y4ckpVelZxdmNYT3hva3lwV1RDS1p1dWNVVjQ5X3EyRzNWYTJRQnYwVEI2YmZGMWdoUmFOYUUzeVhmRHFIYnBGQndkWUoxcEFyVko4SWNDa0czU3ZvM0VKbzVVeTFlajBGdDR4S2FheWNqbkJMekpydDdRM2hTWWFaNldnb0xKQTlNaEJMNk53VkNOYzJTdDhENjN0elhVMXR1c3BzYkVLSWRvVGI2aHp6RkFHQVAxTE9aUnNaMkw1UnVrUkJnVlAwbDFRX3ZKUkROb1ZhQzdOUkJCallIZUU1Z3NPcWZPTG52cXphLVhreXpvYWZwdlowUGJqUGtGYkpSVXBPaTcwb2NhdVhhbWhHbGFSc0NKM1RpcURTZXdRanNaRE1Lc044M2F2bUJBRUt2SnFzcXo5UjNqNEVaWUxmVzZSRENlaGJUMk5WYzNGbG83TXBDenQ0dlgxX2lyZGF4YldLSzlfMW1BbDdVVmJUS2FwZW5TVXdjR1VHN1RQdGJUbjkxV2l1RnR5MkZJdFBZcHMzNzBIQ2t3RV9EMk1iN1dqa2QzNlVOZ2pYdW1yNUhCR2t3TGxNWC1aMWZfUThTMDk3SDl2UTNZUnlrTy1GYnhZNm9GdU1OTHd6bmdVemo2MTF2RnNVa3pEdnRMRHlKSnREYlZVWnUzd2RZRElEYkdwNmZjRVFSS2ExMnFidVUyY0RWUmtka0Qyb0JEQXhxRHJMY2M5cjJXMjlRNm1VM2tBMHRfc3FLeGROUkRhZk9oTVZEaG0yS2NfTU5YdUdYeWdaM0huakgtSzhEcHJESVRHbHRuRmR1UjZRTWJoYURlLVVlb1FsMVdyOGozVmZ1NHdTaXR3N0p5ZjRNMkRJX0hjNjBSMldpaE1UODhlTzY1SXBMbUhsd19YcllvTV9OUHRMSjJpbHBGT3oxTTlBbHlxX28tOHZfcWh3cmU2MTVFeGpSbTdPRm10Vkkxc0pKTG0yUHFUeXFqbXJ3ZkdBUlJWWDJ3aFpoa0VnVC1LdmpWUllVNnNFR3hYakxZcDVVM2pxTm1RWUNOZzhZRXpuV1JQU3Y5MWlLN0ExTkpRZDlKOVozYnBTaFhheDVuanp1Y1JsY1NpS0x3Zm5DV3BIdnZGX1BDRkNzU1FWYWpZZnhOQ2hjNUlDbE9oeWY1a1dtOUxQZFh3UVU3OU9FUzR4Q0kwZXdKa2lKLTc1ZnZFSlF6SXNyX3M2anBNN0xfZEkxeDVxQU9HMHBvRERaMWZCcVczUHBhVzZfcUdzUHFndHR0amNhaVhweUZQZXA2UW1mSlhXbTNTQkNOQnBOVmZXeWNQaWRySlktRkZkenlpTGlGdEg1Yy1KZFJpZWc2TXN3NVpka1JGOUtqSzdzQU5RQXhqWU1Ncm83dHdTWlpaREYyRWRITC1TaVI5X2sweDJnSWpXR2h4YVpwX1ByVV9pNVlESVhaZ2RTLXV3VGY5VWVvZzc4eWxMclJlYVViOENiSUo3SThsZW9KekgtRDZRSmI1V2s0OExQT25zci1tYlMtVzJIYVNrMWhPZGVhRExnN05hSlJCWnpoMUZ1bGZZc21GR1c4bVZNMmZwemU1eVdaWDNCUnJpaEdTalhrRzlZRFE3QXpSdFpxSEM2ODQ0VG1UR2RmMTN4MnF5d0NOOUg1eGI5QTNIQ3hGTUYxTkVwRHdJd2tQRzFVbVk5dVRETE5hYVg1ZUk5RnRhci1mZVBXZzBleHMxcUVpcXVCYzlyREdxMHY0b3FxamN4OFQ3azIzd2JCX0x3Ykp2cGQ3a19abUdxTmN5d1NYb3pCd2VXLURCb3Zkd2tYT2RBdkdNczVUSmhaUkEzZHY0MXBQb25KdF9zbW5rX2FqZjJQRnJlS2VTaERsZnctWDlfcFRkREx4eDUtU05VUzlaTktSTlcwaTRMWmo0blJWcmUyUHBtT0FOUGUtMnM0aU1KN3MxamNmc3ZJMVNZZmxBaWNfY2lNdVgyUGgxRTB2MXBmemhIZ0diQm5zVDNDdkVudWFTN1FTVVgtNUhseGRfRDkycXFkblNCQndjYzJOTkFmMUIxYjNnT0k4VDlKbWtoa0EyNWN6MWRIdlVHUGJMTmpHNkRIMDlmRGlpaHhQUWRScEF1QTMyOVlfUnJ2dTUtZlVleXlHdXlCVkctemlROFE4NTFlZm9TX1EtWGdvdVNGWXRvajl3U2VTYVhyNk42b2R5WWJfM1FLcVZ4ZkRHaWJqd1dEOWwzaW5YUzJDRjdSM2d6dkpsczhGeDRDZWc0T1ViMG41eE90NXM2Sm1JN3JQckFsdFF2Zk9oODgzblVxTWFMWWR2R2hCeG5sdjVucWpfaDZGaVlSS0NJMmNua1o3N0o3encyd0hYM3M5Y3hKM0hJbEwxWVcwd05fbmFrMGFrNXdCYUsyajFxdkNPaC1BQm9zcEU1dFFaWlhyTUlMQWlsNjVrVmY1S2NUQ0o4cTJIUkk2bHh4bXBlbGpUc2xUS1BRN1dGUjRiOWR0YzE0SUZ6Y2xtZkVKVHVhWHM3UHlSZnpSODN5dlJ5TmhMTXZFYnZOcVlyTjhVc1hCaVdITE1xMi05RmVuZHdpaGd5SVB2Vm51ZTg1bEI3eWN5Q3JBZkVfLXUzWlRjOGRwLXVNWEk1a3VJczZISGRHTHFIYUJ2cS1pZHlxMGdzelRxNmdyTDFOdEFVendSMFF1dERfOEJnQlU0YmowVFhZSFYwTGs4Nl9sUkFtUW9sdERCejdqV2d6MmFjbVg3Z0lqTDJEcDRJNUR3WmFOcXNyaE0wMUFjbnRaazZEWlVDX2puV0t4VW05bWZ3Q0NXN18zSWRtOThPSmJ6STVtQ2h4OXdiZ181WUdaT2Z4cDVEbVZ3a05La01wbTExay1DY1BDSnZudzlIaVdURGNSMm1Kb1FSRlhJa0FKWWNUbVIyMDB6RmNmanJfV1FhWi1sbzh5MFU1SElaTDJ0Und1YWp0X2tNMU5OcV85c2lmQ3B2UFRQVWF6cUQ5czd6aGlfdFlHbzhHb0dKckJ3QmJ6N0JNTmVSVXpBWHlqSnlabHFiTUVaLTZaR0YwaDdPcWRJcU5IZkpqc3FPcUNaQngzV0JnSzM2aDQyU0hOTm5WWWh0blJwRDlDNVd0YWJIZmxUVFVMd1N4TnFJMUI5V0s1Mm91OFNZbEQ0VXJKTTBmQTltcmRKNkl0LVp0S1N4d01yamxOZ01tMmVjREs4MUNYS2s1RjFTMzd6MThNREtTU0ZPWTVSVkFUS0V4Zk9iczhtX1JGWVdlMHJlbHZZNnV4NW13eEllTmpHenk4M3NnUFZYcUlJeVRUZW4yOUstdkVoZTNfdWVwcG5vRHB1X0l2VXhESnF6U3JvUnRRaWNKRDNEcTUtZEo2TFU0VnlwU2JvUGczcll6ZmY4d0Y5Tm02d3FJcVdycjAyM21WX25NY1BReENaa3dzVGZmNXE1c3R3c04yMC1BaHJqQWVyckczZ08xUnBVdm9FTDVfVlFFWHpSYjc0QmxKMWpYc3NDN2VCOHBOU3o5a0trUHRXNTY3OW5xR1o0OFQ3ZldWNXhqd2JGMlU2U2tDOFVPMXdNLWd0UHVRZkFlVFVoV2xnT2Rfc2I0SldkcGw4WkwxMDQwSjNwcjR1NS1PSTVpWnhVUExJTzJ0eF9BNmtuQmJQRGwyUU1RX2lUSHJaUl9WYXRkUkVqX05xc0t1Yzk5TzRqQnhqRjZnbFE4WFBTc0JlRVprYUhZYllVN0NVSUxFaXhzb1IwOURTLWd1MDNwX0g3SzlBNDZrYVNHaDVBeXB6Vm56b21iVmV0U3JSb2l1U2VZMlp6RWtqbHNveG9BUUoxUE5YWHZvVDVSSzJqeVRfLUp4dTVrdkZ6ZnJ4UGxKVzRrNk10RTZ6MFlWalpMMEo2dk1iTXdoa3RfbHhTLTNEWjluU1dPSEkySHVSYlA0aDVPRXhNb0JLOEIxQmgtUVRjNy1hVHZycmNUbGt0cVNwSVdEc0daVkZFMEY0X0JsSzFEUGlpOHp4Q0FVX2tHVDg2U0xNSWMwc1VvMjl3TTczX0x2QjRtX1A2bmVvWjBYQjRIQU5aOWxLeWsxalZITUJsNTBpeURPMVFNMzZLd2hhX2NEWTJWME83Y05UVTBOeTQzaGoxZEVQSUNBckYyMUNUNDR3WDJHNDduS3g4djk3bFk1UUVtbUNQZldIZGdXWVBkc3JGT2FPb3didFV2cHlnV2dCRG0ydUFJZk9tVFl3OHpreEsyY3JtYXBvaTRiZlZVVkRpZlJYUk9HVWg2Q3hTS1lONjczUzJMS3Jmeng2cllZY0Z6S2xaWnFMZzgyelVXTmVCZEFyZ21MQVhsR1FSNVVHWGV4UjJ2YWU0aDRjZVozcWYwalB1Mkhfdk1STVlvc3NzRlRRNENrRFFKRGFzQVp1TkFqQjJsNnh5Q0JlOUtnTlhEeGlSeUFOaUdKYTlySmZ0TWdwSXBCcnlDbUZCdFNYd1ZtUEFyOFV3cndlQzlYdTlncWkxNmc5MVpOY05WMXhXbUZIUDc1akxaemxNSmNreDFKd05CNHRSY3BhMzRqNUhtQW1yenJrcE9zbExyLVBJX19DeG5fVGwxcHhTSzl3aE52UEI3d1BCa283TzRKVGNITWUySUx0cURlWWRFSFozQTFFQjdVZ1ZxMVNjSHl3S2V0d01pWm03dGN5djFpbkVEbVNqTU43ZmgxUzBmcXpDV2V4NmxETXBwR2FyNGh2MG5XSHhvNnRwcEFKbEtjMUZIOGFZYkpod3ZXTTJEcTVvTUd3Y2dFR3FySk1WTWFkQXdySC1YN2tBOXloMFQ3TFR4cE9NdjBDcXM2QzczeXAtd3VqcG1NYzhkam5PWlV0TjBkZ0xnck9EeUpiTHNrZ2g3MEFQRktnSm5RckRPR3VtZFpMcUE1U0YzWVJIMDJ6YTJNUEQzRHQyQW1QM2pJMkdBNnJGZ3hiajFMNDJBZ0txcWlEb3FJd2hLYWtVbHkyNmdfV2ltUENCbXBoV0plbWNfVFczczUxMjdWamxhdlJndFpsVHFjdWlEcUF5YnBNeEJaeVl3ZUF2cWU3azhnRlNLSGVVeC13QVJmWVE4VGpyUEIyWmV0ZTNEZ0J3cEktWE00cUNlN2FpcGtlSjQwdFZDT2dQWFN4eHY0TEF3aGxvelhnc3k4aUZMWmw3bV9vY19Hb0V0ZGw3c21uV0c3amltV0xsT2lzR2ctYUxEUktDWTZDVGpyQkxkNTJSYnBZYTJZd01KTDdnLUlub3ZyRDBBbFhVcmlrb21nckRvc3pnVDJmRV9mRXZPVGpacDBKeDk2Uno4MTE2X1JKeXkwaXhlS3Fqcm9jMnVTOWtpRk82Y2tSTm1xTDU1azV0WEpfajA1TXFnWTl4Wm8xMTV6YUk1MUl3bWs1d2ZWR1FMUzJfRWRzblJyQjF2ZlRseWFqUnp2VWxRWWNCVXhJTDJHa29udkZJcWg5aVUzUnZyM1FDSTd4b0doU21ubTJHNW8zcjNDc2hudFAweVctbnp1WjNFRXI1QkRNX1V1MUREVE93NHZtd0h5YkJhbm10b2tZM3VvZmVCRDllWFBCRm1LTzlnMFNlM0xGcEdfZEpSNDI5LW5ZcFc0aFRNVG1WNzdDQWF2anNyRG5pdGVHc0dKNGVWdFdjbnBHRllDTXNaS29oRURTdkpjYlpwWExOaU00RmhaVTBJTzRCQlNrV0ZNZ3JvRldLNE8yQXJpSkpSaFd3WXFXbzhvRzdFVEhqY1dWV2d6cFpDWDluVWVpMXZydlJyT1pyR25FdTVPU2R2eHRWS1lzY2xqNzBEaFVWX3hCa1ZlRnpzNWZEQ3JFM081MVlTMmxndGRnT3ZBWVV1VU5seGRWdGdwd2oxUVZNS0U3V0d5aDZkMHNyRUdHS0tIcUJkM0EwUUhNbTR5cE93a1dES1U1VHFDZXJmTjlubENqaUhnb2NCUDBZU0IyTnctY1BLUmhZdWxBN213NlRYN3ZJQjVDelV0Slp6dlFyMzVCdkNOQUpfMXdQb0x5Yl9FeW9BcTJibDNLamxZNzZwR29TeHFERDRENGpic3ZFa1JVTlhleUYzNHRISThWd1J5Y1IyeVNCZUpBaWpuVUxUdFYyQlM2U0NCcWFfc3d6Vk5QMHdzd1pfSUhlRGVWU3BsMHdOZFVQNzZqa3ZxWUFQTEJqVUttNTBLcmcyRW1BdS1YUlZDeWZaWjBhME9oczJvZ2hVc21iaXJGRkJTUXNSUVcwR0xDU2FtQVMxYmd2d1dseUhOS2hEcjNxdXRIaEVnUFdyR09YVmNMWEl1UWxiS1NkWEhyS2hiNjN0Nml3alQ4M1lyc2ZYazd6MWVCNHJ2MkNxMUlMWlk5ZFNUYUEtNHI5RVZnbjJqZ3l6RkpOWjJRcHBtNHFuNlJoTHplUGh6ZXRPd2UzckhmZzlLZ2RCZkR5R0RCQ0JUX2pqYk9ZOVdmNzJkVXFwdkRqV3UxSGNKR19OUVJMdDZDempjNDZYYzg3QUxpQmFhY3BkUkdQVTc1T0VMSzRTNEdKU3dmX2t6bWVCYmhhZEZDNTNldkVqeHZydHdLcDlUTTRMOExpaGM4RlA0YU80cjBncTFTTUROQ0lqMWZtdGkyVlNqT3FwTHdPT3VxckpqUEYwVXVpMW5LdGx2TmFXSUlqZ3VUbEVGOXNXYThSWmRVU0xpM0drcFZscDZHWXJKdFQ1aG5mbXhKWE8tWEpRemhyNVBVdDZEak9hTjR1VUJsTkdwWUxpbDRHQk0yZmNMYVBOQm9keEJiZnBZSXk5bFVyZkY2TnNueWJKZE1Wd25mQTRycFBNR3N2UGk0bFZsMUlSREZkODVzdTZBdVdhVncwb3phbWR2MTVEczZCaERZekp6S0RoRHJ0c1pibllVYlJIWkplNXRLdUZ0eVFsVFI2UVdIdnRHc2oyREVsUnI4VWRsNTlrdmg2Y0xEbmZkM19jWUcybkFmRlNTbFBFMjc2dWx1VlJQY0xjQk55NnkydkF3N2NEekVqNmpzVTkyU01hZXpjb0RuTV9WU3VPVGhzeC12RXh2OUVmZ1J0MVk1dF9CbDRMeTNjRnROOTV4cmRyQzRGbEJRSTkxbWZBUDNaX196SnJaVHRRZzBIY3VISUlyZko0WTl5RTRzdUNWUGJUNjByd1Vna294RklXMWFwcllwSWp3S1NocDJsSFBGMF85TEk5TlR5YjN0bmRBR05uRkJoQy16VFVWOTZHY0hTdVpoOWoxYzFiZldoajZPUFFfR0xUYVVFYzl2NkhlTmYwVHJVZFFhdWduNDJqU01YVXRwMFg4aEFoaEl1RHZsb21kdXQxRW94UTMtTXdCbFI2QmlqSlJKcUw2UWt4dExRUl9OQTAwWjFRV3NDOVd5MkpyX1d2VEp3YjFZTEpOcWtHT2lndVZ5WUF6TjRzbW83OE9PX09iNXJzbUFxVkZpeHp5MFZSZlJIWjZaVkNnRk9RZ1RUNDVNNThxUjdkVmlCcFNWNnViM21yS0dBbmJPNGtGRlZKYlBlS2hzVGl2eE5FWnpxbGNRbVYtbHNveldreFFta002Y3gzcHk3RGljeFlyWnRCc203Tm9VSlB3WFdSU3BhNkZVWG5LSWdJVV9kUmZxbGpCamVVUENKdngxRGZhYXh1QXNRQ1Iycl9uQWJKRFluWTJCTWRURXVVV3pRdTAxdDFNNEVJUmE2QWFOT2luYzZtdnNHX2tfY2pzM3BSN1Nsb1l3djlqSUMtYm5hb2xZVEdvbHZ1ajFETlFlSURKd0RzUlltZXhYQWVTbzBPTVpkTURaOXpRT1lmXzNIaFlOcndqTHFUSV9DSk5NMEJ0ZzJGb3ZIUV81MWpWOFFyNF9tcUx6OVdZVlJqc2tLWmlpMjF3b19vZE9EUnA5TS1ES0ZZcU5jdlloSEVHcjBUbG1PbUpadkJ1U19Mb3J0MGVYUm5IZzV1MDZMRy11SG5TZWlDRFF3MWhkYkJyY292WDhUek00YzFubGJnWnFhZlJWNHJpQVFPTDU1Q3pyNU9YdXhLd2dEMFozZ1RfMWJRUmgtZkV2ZUlHQ2JTWlkyOUUweXM2b0F4N2JVSThSd3hya0pGU0xlRlVqamxnQzJGd2VVQ21uTVN3aFJudFpCVjBKSVlMU0E3NXdCbTBmMm55eTU2Tl9JY0RhLVFMQ2tNX254MzJlaDl0Y0M3ZENIYzV5VkMwRmJfSlVwX1BLUHZ6cDRWRmdZU0x5eUNYNDFUSmE0S0hVVzJiYXJjY1RWWWJoS0VfRWtDajdmSGhLSE4zUXVyaWg2ajhyUkNjQ0FFMC04bVJ5MWN3ZlA2eTFBREZSZkU0c0J0cnp5Z3ozbTZ3Vk5DUjVzdlZ3eFdzajVPcy16Y21VQ2VTc19TMFlJeEp5SEg2SGdkUUZ2cFpJcnl4eXRGTlNlUVFiWURuLVhlQlpnc0JwS2ZxTlZhVGJUTVVYOVB2TXFtRnFhR2tZa0FVZHc1RFVXaExtcGJvNnlYS2pnNW5RNkg0NHFhUzhqRmpSQ3hPNXFZNE04WXFIbHotalZGMmVNVnRKd0JTNWNIT2N2OGFxLVFOOUxWOE1hXzN2cktZSElOWV8xTkRwemFzTUhfZlJLSnQyTE9KX19wZl9MMTVZc2NJWnhKWHNDTUxlVU9WdHBYaUxpYzlOcEJNbUtpYnRvMDIyUExqQ2RHNFViQWZSMEtDN3FUYS1GanczaVpsUjBZNDV0YzhYN2hrSEJvcFRudjZvQUE0WnFDdDE4VEkxR2ZaaEdzajg1UFlCTEdEX2tvSjZHRjJUYm5kOUR5UFEyVW5Ib1AzNUJNdk01dzdNN0hPVkREOVNvNllkSW1IYkVkbUduODhnWkJxSHc1OUVZaXdYQUpRRlBhdFlYQ3JTTnlzV3JKV0s3ampUWGRBMGFqcEJ0ZVlWMm45Nlo5c0xHNEtROEJNNUVObUVtd3RZYXBpQzNwZDE3M3lncG5aZ2lueUNXdGFUajBqZXRRNXRSRWFXWG8xb1dhWmluVEkzenI4VjNhTGM5VFBzMklKRTFqdlVlM1lRVGlqR1piU09hdVdQWEFLblFKOHdOZC1RMURtRDlEYUFKdXJWNjlyQ01wU0cxLVNZSmNfbXVZS2pGNnpNdnlKWWtVR2cyRV9UOW5vbWNkTVE0WnpUa2pWa29JUWk0RTRuRWZkVmZHODBNQ3N5TVNfVTNYem14Tzltd252Y2ViQlR4SjViRUhZWG43SlBkbWxjTlQzd2RKOTh4aEg3RG83MVZfMGtwTWpVZFAtaFVxbU1vbWZKSjZsRXBkNmNocE1PaHBrTm04RkZfNGQ4NGlaMUt2VmNQbDAyN2VwaWNPNURHWF9KM0FESkcwc3NzU0s5akM0d0E2ZDRZQllsS09qWTI3a0lMYnRscmtsV0kwak5OM3pOVUxHZlVEWFE2a0phbGVWOUJ3WmVwU3RfTHUzMjlzcW0yZFNTeU04QV9aZGFqT2FZeWo3MDVBZ2J2b3ExVXY4V21COWl6bFdtOWFvR05zcWVnVWxPNTBxMjBkUExRZGM0SnZxWGRiRFZZckdfYlJiakRVZkZXTE9hYV9TdGlxaVAxakFsbV95M195c1VSRXNxbHZ0QVZqQVFHM1ktN2FTVF9BOHY2OGl0YzlCM01oMlhfVnNSODhnTURUcnVFSUhKaGNXdXc0SVZaS0hPaXdIM2tWMnhsWWZYSmxBSTZUUTJDcDd2TVdxbHNlSFh3bmFpWkZGYkdNeDRJV3I2WlNjYTV1ZWVYQlZsY3A0S09aR3Y3SkMwRTF4SlBESWZtOGVXV2M5SnJqMkpSajlBaXc3a18zR1VKXzA3LU8yVUVaLXBoTUpkSUFERmxqdFZSSGtWQllYdEhnazZPZ083bHl4eEpUc2RMUlM5Nkh0STZUSTNmZDRfdkhsOU9tNC14ZkJjTXZ1bzRnRDAwTVdoRmpqZnR2Yl9pWW5qUkJ1bUR6YlZvcEQ2YUppZlRWNHpxTHBxdmQ2eFQzZU5wYktnMGJaRzRrOGlVRkwyQ193S1Q1UkJ0d1c1OW1kdlpjUndfT01GcVZ2Xzh2S3Bwc2xLX21Md2ZUNzZLY29CeDBPY3pyMTY1elVYX1JKeGZoSGo0dXZaQldVRU4zb3lmVk5Vck5QRXZuTDJYanVFUHkwYTJpT1RwRXVlWWQzZDFZazgyWHluZ3MyVG9NRm1ZQnlXSXg4NjJsMXNsVmYzenpncURJeFNYOFlEdXV4TEVSel9oWDRUM19YOFNER3NUM3RTaU1WbFRtQ1FLeFN2V29TWklBekY1T0taWlN5b2JkUnRiNE1wN3c1aFoxT3hGUXBZTVV3bFZXNDJreUtRRmRuQU80WTM3dVFWZ2JHNDJzTEVPdjdXZ25TOWo0UmlaMi0ySWlWc0xHdnlxT19hQVRiUm1Zb0NLc0lhbFhRR3JYYkM1d0ZhVWFMWEsyNGJBY2czT0VQdEhhcGs3QTZlVVFGZzctaU1Ubm9mREZLZ0diTDN5bkdqdGFYZkdpcWpvOWxsdmlwcFAzVURSSFFKazB5ZjlCZllvT2sxa0l3M2U5ZlFWbGU4WGFXN0pCZG1Ea3RqakN3TWF5Nk5jSjh1UFYyWDlGYW1tdlhVd20wMnJjZzZkYVFjd2NpV1RPdkUtTkxELWM3Tl9hcXZkNkRYT2Y1Unp6RHZFZlo0NjFkVmdZQnVfZDhld3hJQWtON3lhUDYxQWtma0dGV2c3WEtLRVVscDlHbDJLeHdPMTAyUFN4ZnhUMXRab3B0QU55X3JqRFdmdUk3UkRjVVhvUjFjYTJjNld3VDh6dkJpMC1wSEpQZFpNYVQwRS0tck9Ha1p4WW4xUVRzUnVLWC1iazdmYWh1N0lKSlQ1VzlqYnpTM0dsbWt3eFpBbkEzaG9ZVk1KaEpzLTdfR3ZJNk90eEhTVnpCNFY4X1VvWmlQN1RTdGY4ODBZdzZkYlQ4WGk4dWVaVEIxcWpDYUJmcW0xR3pHMjYtd0VDWmdaU0FmVGZobHRwLVZNeFBRdW9sZ28yRnpQXzZ3aWI0LURxTFZVMVpTOWh2X3luRFZVUkQwQlR3RmF3TG9xaG9XWm9NUlNQV3pSVkRJak8ycnA2UXc3SlJCdHBER1FJNzRnMDVHbkU1WVVFNnd1S2kta0sxOGluUGNjc3haRjRwbG5QVTFObTB5dFpvTGZPMnY0UjkzNFAzOTBHRWVLZW1GdG0xQ0pYNWI0d2hTemdNNVVxNS1tUWRCdkxJSTNkM1pDazk3bFVMVzhmTnp5azJ5Wm00UEl0YzFlRWx6X0VVRHlESUo2eXloUkItZktoeXFwemlsNlZndTNXX20wSWUzSGJtNndpblZlVTNEbWExX1RCQWx4T3g5NXhkTW04M0NlLWlxcVMtRjhuZUJreUtzaUs1MFFEdndDaW5TY213S1FvMzhEeXZ4RzBoejRMQU43UGtodjBDV0JkZFVYVktMaGIzRm5xSUItYVVCaUNYeWZSVV9VWW1fZDY3ay11bTFIS2phdndEV3FENlJxU3k0YmdIZWlpTnVfc3o5aGV0R2ozWTJMX1dVNWsxWDlVY0ItV09CTTdTNHN4TWV0eUNyaVZRZG1OVG83bG1oQXVWbmF3TjhEdHdBY25GV1dfQk1mZC11YUREMWJubExDVGxPSGNrcEVhblJQRFRlLTlhX0owbEwtam5iNFl4TmhLRGdnZlRRa3JjbUlCOE9kcjNDZE92X2ZNQlNZRFVmcHVwWmk1Nko3TDRXeU9VMXZ6VDBoMjJNWlRPNmMtRTk2TnpNQ25hRkcxekw1XzAzWXVwRDFrOEpyMVFiRXEzVGE5NG5ickdfUU04UVV0a1hxS19qZ05WZkpNbVc2ekR1TEw5emc0RElKV2tQYTNMM1JBQlRlOHlLaFFKdEVzelpOWjBtdEN0Y1ptVGFwWVI5NXh6VTFhT25NLUhMV3p2UFlSTmRhVjE5VGFCWXhjQkN4TzV0VEpBQlRWUm92eVAzaEdwY2k0eGtzcDV0dHRCZ1B5dXF5U2VoVEt4M3NReGJ5YUxTbUJ4RTdObVZWa2N5dGxjU2lLLUJxb1FKQ25LUmxWUENwVjdDTVlmdV9xeF90VFBtNU9xc2tMQ04tbktrU1pPUDJvUWQ4REZQTk9hbEI3VFg5VlJoUHJtb0pZNTZhd3ZSSmZKV3pvU1ZESGd5S2FLREF1b2Z2bVhxemdvVUk4V1Z0SVQwVXdTVXFVVDE0SWNSSG1BVmZwNkZhMUFKaFd6YlNBUHVtd08wMWRXcTNTYUFPSFJObkdjSWx5aGVUTlVVY3FBZG1Nb1p3SHQ3VUhUMUlQS3VYeWtKRHo2R253eWJ0VzZSYU1MVFNEWV9faXlwSWItVUNUOFJrRHVfZ0h0WWctODVrdWQ1ckxfNm56alAzb2dVUGF6RWxWNUw1ZjI4c2g1eFFTNnNvWkhoc0d3V2xNbHJJNGVISUJWOWlKLUt3MV9DMkxsTmFDREM1S0g2OWhHUDBPTElGNzJBSVNVTG1KY3B3N3l3MEhQWHZaRG50OHBLQmwwLUtUWGdpem8taHI2czJXQjdrbkJCSVp3eVZVZGFrWDRJWHUxVkhUQWIwdDNzUzIzaUFRcXhMRWk1dXJUWEZCd0ppNVlyMXNVcTdDSVpGV1dzSG1xb3hVU1lkWlp5aVIzbEVxUWpnbTVvQS1ROUh6LU5Iei1iYlpNSWRIaldkS3BZV1Z0eGhQYWRzNkdMUEN2ek1pU0dXWTYtaUVxaXp6RzR0TzhZaWo2S3d5RmcwbUNrN3QyVnpueUxFV3ZnRTQ1NWh6TlBwaDBTSE1WQlhmMEJLOGpNdmJObzdhY3E2ZlBiUTBQYTE0X0paMks5c2xONWxLdUw1X1hKSkRqZktoSjExZHlzbGRoak9FSTdJSXkybS0zVVE5cmRBNFV1aWV3QzZLUnQ3Mk10aDRiMVBQQ0hoWUp6aVdYcGJKZUpSM20wQnZQVFFMWnpyZzVNem4xT3FKZ29VQ0ptYllBWkxTS3RQY0s5d2cteGlVZGlBamxsSG9kUF9XM3JEYVVtcGlQdUNGdzJ6Y252SDBCSHgyQnhZbVRGRmRXV3FxU3ZEY3FhTHVwallGMEZsUTgyRGI2akRDcExHa3lBVTFjTmhrc3BmUTE5MHA3RjFDSUJoWVRvR2tZQUQ4cUFCUVBZV2ZnZnRGWFo5akd1LTc2bmJldHlBNXFWbGNJdUhoeE1BWlJ1VlVlSnZUWXQ2MS1USkdFaFJ6eVRDUFJvNngyNzJyZzUzR2c2N3NGa0xyRXdzR3NrWEZMTWk0ZmxtQjA1Vk5ybGNveHhxWHFrT2RMeEduUDBTazU3UjhfX1FUMzAxR054MW9fYUNLZ0dQY1E4YlJRaVRka2dHYkwyc0phNEVFbTlOVzVxWHNVSmo5NG5VZlBqdjV0YlBXUHA5MUVLM24wQkhfM3lpMTZLYVZQMmUyUEdiNmZuOWxqYUV5SkU0ZEZxeFBmQjBvRnB1TDl3RVFCTGJQQkVoMUx6LWRXUVRrdVNYS2t4aFJJWEJyLW8yT0VXTmNZdS1LY0JFeUVfYmFlNURQNFA3NTZZNC1ZaWtqN2U3SkllYWNuel9JUG9aTnZuNGxZS2EybW1wbHhXVzcydWhhbHFJRXVCeDRCVGE4M1ppMXBtQzFoZHdYX2ZUNGxDVkpNVy1vcEVrZmNDb1FRbU0zQ0wwRUJ5WmZadTRRcjdWbmthOURCeGxOU2hEM0QyMlZXUmtrMGswdzI0LWV5dzdoc0lsbmhUN3Y2bnNuQndUYkFka3RidThENkRRVEgzZXFvUEZPYXFaOEJoRWJ4dWU1M2x4UnBtZFZxenl5Qm5HUXRBSmg4cXBSWlJ4d2hIZHl0ZkRwZFh0WnZ6WXVaOUlDYzR2eUk2bFE4SGlQclRQQlhjT3haeHVqNTdjX2NqMEF0Q0NQb2ZrNWJrVk1CUGotX3BYM0U0eUVxZWt0UjBvVThuUTFHNXRPb09oTzVtbUdiX3EyTGVXZEJTTjA5OFVfQTAyNTNPTjBvTENLVXF6eFR1WW1pY0ptbDdyODI3OUZHNmdhUVIzRTNLcDRuMXFXOWpreENveHE5NVRTdnc5VlAwYzFYUVM2NWdzdUV6M2VWMndZdmsyT3ZUNS1zZmxuam1xclppRDUta2Jjd3Jya2t5SXZRc0tuZ2QyRlNQbmItdVF6MnBsd3VmNURSUzBKRTk1c3RYQmpGYlVkdGc4dkN6aUozcHM5QTJUck9vcXdlb1kwRTFhS0tfVmZrRGpacTI1eFJwYWJOUnN2MXpnYWNWZmJpQ05yVmtOZUd6dW5scVNZQjFkZ3lYZGdtdV82Mnd5dWtLQ0ExX0ZBb251MVpJVlIxQzdqV0NvZ1p3LThtbnF0cWZFVW5GdUdpLUtFVmlIMC0wYS1NMjVNbjlEaWxDVzdmcVRfbFhGdmRmOFd4MkR5QUVVVGZnQllfZ044R1E4WUpSX1FCZ2ZLbjk1YlpCMVhLM2tmNnY5a0FsY3kxTERpVWFpWWdiQVJ4OFljTlU5Z1BDZTg2SEhYempTei1CRm9YanBWQ1Nub3ZsbGQweVdqb2xlMV82U3Nkai15Y1E1TkxBTVNiclg1SFpHVUVwZDNIc1lnRld1LTN2YUtTeG05MXZkSFl5NjdldEdDQVNlc0VIWEVScTYxMm5qNWZFdFdIYXMydkRRUUNENzJ1M2FwQ1JUdnc5OUtPb3ZuQ2plSUFwaWRkN2hrYTZOTFNudVlpSm5Bak4tSjB4NFZBSU1wbGdILW1OZWdlSUtkWE9VRmN1SmNuNndsZGsyWjZCUWNkaDlEMERCQTZvdC15bXVVNHB3TC1XWXBRUjZaT014Z0t5dzJIUC1vTU04dHpWallsOUpRUThYYjdGM1B0T1VYR0xJLTRfNl9xWDY1ZFk1U0VPd1FhZVYyZ3otVWd0dFdwMktXS3hQM3JIVkgzMUdFMnpkcTZMdWVDZHpHSFlSa3pHbXJoZ1FCb0NUb2xDNy1oTFZvQ0RuV092QkhwX0cxanBES2FSNkZsc1VLclRoNGlnMERTOU5Qa3IzNDN1SExyWW1DVXFoalVhN1VaVkttRmkxZXctUmpZZ19rUEdLV092UmR1RmFnVUZWUktXSlFJODFNbTVTN1Q2SGJXZUk5ZkJTWE9WcThZVUNiVFU2ZGhxaVQ1Yk5JbHdvU2tDQ1lWU0o0WUZ5QnY2Q1RreWp6Yy10Qmp0ZFFRbnFuRGNjc2VNZ2N6VG1XYV9IbGlKUjNGeU9yaTd6cDJaSWp6QVY3ai0zT0lkdDlnTlpiT2xLQ3RPRjUwZ0pucVRJckw1N2JMRVBUWVRUQV9mLVo5bGdHdl8tNi1WMzVEdEwyaVBxSzhJZUp3U2NnN1laaDVDcmpqNF9YbC0tSXo1cEdIU1ZRQS1pR0x4VmdMeDZ5SldJVmQ2YTJYbW5zbUV4eUwtOWo1bi1ReVJ2UnNPMV9jN214cXdsbkRBMnZTamQ5S3hUMnZxUkJza0phXzlFUU1QSUxscVVuNWdWcm9hZVNfYlF5TVhrbUNZeV9aSWJCa0tiY2x1ekZkSDBMdjZOVnd3bVRDMmoyRXdCamgtb01kak94X0VCV0ZrRVZJLVluNHR2b3BiRGF2NGNYVkNIbGVhQ05mMjBlaUttX2ZUcm4yckR2TGpfa3g5TkZTa2plbEF3S1N3ZlJ2a1NMRTNLZWM5Q2tWVWlsQXMxWkNTRTd0bHA5WlprbklsaFVYaDFuQUZxaklBN0I3ZXZDdlhRMm9HZUZjV2pHYy1FdXpxcmMzWDNxNmRKbFg3bDI3VW1aRzhTMDgzeFhISThiWlBQa3gwYVBmZllwQ3RhUWZmTlhXM1VaZkJETElJLTRzYmU1QkpwYWlNMl80bmJfVzg4NjNjRzlIVE9uS21GSFVNT2lDcW9xMlBBRDJfeXJ2YzRpbERnYWNrOGtTYlE1T1FILTB2bHBUREJoc01LTXBoQ01yY2dZdS15OTMydXIxcS05OEpUMWxhNkVSQ2J0bHV1Uk9EcEJ0d2ZWLWhrUmdsdUdSd25nS21wYnFuTUdIN1c3dFNhVDZCendaWWRVUHlUZHItQ2NXRWFOQmFzNngzOVQ0Q0pIMzZXUUd5WWNST21DQloxSmR0NHh1SkhnN09fWXdIeTlzdElXLWZ5cFZDaVJzeXBZbGlnN0plVWxTMWZ0RUFQQzJqNGJ2VUVkYzZ5XzRQa1Ixa2VzYVBocmh1cFM1dHR2NUJBbm9KV3dMUjRCQmRZUGdkakRqa1p0WmZ6b0JDQ0l2SHE4ZkxaN0xZWUczQVZXX3JrVDQ2Y3VzejBvTkVZRnhFWE1EQjR1ZXU2R28tNzR1YTJZT3A4RmdIcEY1aWdrTm5FeU9Ic1VnSHR2YURnbXE1Y1NzV3gtRk9mMTVwSTBUc05zd1ZCbHI4UWRKS2hKU1RyU3R4R3BtWjdCaUp4T284MFZNdXFZc1lmWVRsZE5ZZ2NtMXQtc1dRcFlldHptc01pc1ZsT2FXeHZKY1NaT0pkN2k4OTdDcmVpSkxXSUZQMTVzc042RS1RdzVwNlhPbEZOV3l1UTdlTFdQZVRSUXljbjNRbEVCWFBtb2pjOWs0MGdFc1hhUHVtaWtUaUc5eWFNTmhzNDJwUWoyRWxxdGVTcHZtYk1YaTd1akZzbzlUdDZweHBFSC1KRDB0N1piTlE0UWNFSEJxOWJjeHZtX2twdmp4QWthcmFSOGttb3FpTkRsek1pNWlVa1g5aHBCR1hrQjJVY2NWWHZJR2xDNVkyTDJJUUJsLVpJM2ZaMnVoaUJGRHozNVYwRndwMkpsSjZBMjQtQVJHdEZXYXo3Z18xdUw5YW1ac3psQjR5OTdNMWtSUnVUZk9pU2tfRkRDNlR0Y3JGRHEtSEdrd05LbmlKbmV0b19IdTFNUmdYTE5LbmY3UjRWVTlBYVlfU2pYUktqbFRkWGNpS0J2c1pYbFZsTU5HLXpLazFQOEIxRERvRUNZd0lKem9EZjR3SUUyQ0VSNllXVTlaalZwRWtpRjdBNy1uZWdIY2JucXpQTGcxQ0lZNHFzWXp4QUM3VWVxMmJJeElRZm9Kd004eXRsWlotVUlDQmZ5ZFlDNmVTX1NPZlYzODJ5Q181d2E4cHQ0UTlnY2lxbHc0bnpZUkhmdExPaUNibW5zeHVHTjlIZ0s3NnpNLU0tU3UwUDdha19PSmJpT0ZMSllOV0JmWnZpemcwQUc5cklWNEpraXVhcUxYV1EzdGxfOVRDcU5PVWFIWUFJV2tyOVl2cHFFLUo5dDdURTFzdTd1ZTYzRkhFX3ZOUlpXUXZ2VVdFMWFrZTlxYTkxaGliSkt3SE4wMnFMdlJaV1ZYOGpWcFFRdkl5c3lwZkFkMmVCczNHNmxlRUdpUzVJWlQ0QkVhYldZVG1uWE9mRjlQMFJ2QVhRN0NmR2ZnZ1RiRmJLblZHX1dhSHZCT3NpQV9ueVRfN28zNE16OExzTWJRcnBoUVVrbWRyOUNJTUx3VU15RXRWZEJ2S1VIMVlmb01qTEg4SGQ3QzlPNktUWkoyVDNKZTdiRktDRHNfTzlhUU15QTBUZEI2eGNfYnBhb0loWW9SQWw5VUpFTHFFSVplNW02b1JTT2pCWWJyV19rdjRFakZOZkF6OHNFN2dxNlV6WnB3NG9yellqZ2hRVERwR3JKMm1QLWxsdHRZWllocTA0VzJsWW10My01VDV3Qi01U3ZmWmdoZmtmNWN5NlFYRHhvUUhFOEUwdmhrT211YXYzSU1fcXoyVHJoYV9tTXc1R290N3cxQlhCM2txVWY0YnhWRk14SUF4QWJuWF83anpjSXItelVBRE56Zk9Bc1hjRnc5YkxGM05Db09ySE5qdU9NYXl4NUEzMWE2VnlxXzNEdDZjc21vUHNFU1MwTS1MeTdQWEstbFItb1BYNzluRm5VdktBS1FxRzdXQ0dBNzlHUnk2YUg1VFhrcHZxdExnajJ6LWFZcTBEeG8wcWpPVjVBWkV2dFBoSG82TnA4aXVhM2RmbXdEZ0dUeTNneVEwSFcyY3k0ZGtTS0RJNjZ5VVQ4UjRFQmtQRy12dXlaQzZfSjBiakwxSzh2M1Ztc1Z4SWNfMFdkNEpIN2ZCVW9jYWxfblpobzgwWVdhTndGQWY5QUwtX3ZGTTRyUk9XeDd4bG1MUXdmVjVpVW41RUxJUmN3LUFNVFltbXR3NnBLZUxDTnByV3Nqa2thMWhfZzN0MVJMUUhLQ243bWg2UTNVak14UkZ3M0hSXzlMRWtlSzVHbnFyUDJrUWFnWEdaMGtabDZaWmN5akVqemIxd1I4ZS1sVDNaeWp5TklTUkUyNlF4MlpXNUUyRWkzRmZBYV9aYXU4N29scmh1WGVKcEVkNG1JQVJrdF9PY2F4WGhXdDh0dFlxUGtZdVFmSHVUR0tWWXVNTWRJS1NfNkE2THZpQzNLWXRWVVpNaEY3TUZaUTNvcG4yM2ZpekpBcnA0akwzVHhGelZ6UFJJdkc2VnNCM0hIODdCN3ltTGZRS3JReERrYy1MX1NsWDlNUmowODNWTU9kcThuQ01MMDlfMGtKdVVHUXBsZDItM1NJMmVmY0RrdXlkdXNFN256bkV0WVVnNkZDUXVXSkV1Vm9kSDZvWFVpVkUwRllLN0dkNnZTTmV2Ym1KYTJmM0ZJZHBlMXRYTmdOR3haVmw3WlRJSlVUNXlRUGR0M2QwWXRzOGkxSVJlbkMwQm16Q0MwNzZqZmxCYnJ2Y2p6NWo2Z0N3US1sRm44UDVjSXZWSnpZT005R0JJUk9MdTFmZHhWZnVFbVJNcko2eENhY2REaHFxYzd5TVdZWU1fd3JfWmd4TWNzRHQ1WVFSZnRJMjh6YU13NTg5SUN2WHZjUEduU3c1LWNwZi13dWpXUmh2c1doeGg2bWdibjBjYmstNnQtYWlrNGFLcDVyUTFISmtiQVlxMDdzQ2tQc0w5Q3k3djBITWpTRGFWTjA1SnRMUnNZT3dHQ2s2UXhvY2VDZkg3dnFBd3NLX0FwZ3ZWb0FseldMRjVVY2loWnllU3M5S3QxTTE3T051LXctYmJaRF9LUDQyOW9WY2hXWnh4TVBnY2dKZGhMZDctYVhaeWpPaWNjaGhXTjVyeHMzSHNoR2hZQS11cXhuaDl4ZmljWWFLdEF1WU9HRUNOQTMtYmNBaHNvRHk0cl9yNTBXTlF6LTZtb2V1X196T01EZTBfLTc3YlpUMEhuNDZnbjU3aXI3RFlYM1Z5R0hBNmRqRDJRUVNoQjJWT3RnbHNkeTkxeGFua2FxNWRELWJLNWlaZUVneUJtSUFiX2twNi0xeldiaWk5R2YxREY0Z1V6eFBUNFQwUUJKRWlZNlc0d0ZkMzJEd3czVXdVU1dIUVphbGJjXzBtTGw5WWx3RDdoSlVsMmJRNHNROXhTRFd2OW9CRDZLQnpzalMxd2RqVThTLS12VUhhSDVBMkJMS251X1N3ZHIxVjhWN0Fya0pDXzAyd2JfeFdYWjVleUJOdkRSSC1jc056TzBhRVpzaFR4dHA1SWNONUtZZENSenpiVl9Pejk4djM1V2diQi1XTl9ieGZHRWdESFU1c3lNRE8tb05xTGR2RjlFbDZmUUVVWU9Ddm5KaTdGUExOT01DeW4wS3VVakZPeTN5RUZTU3U1UGtwbVZ0OEsyTXNXWG1kRjlYVXhEa2ZVRHpic05VNlpYOUpseFUweGRLNHh6TEtEakhNdXRSQVI2NjFEc0ZtX1V6Z0hjVDZYYnBaZUNRM0x1eVd3VDNGLVdqaFp1UnJVLW1zcGRhZmF3S29waUpzVzVSTmFkdmkzeWhHVHBoVmZMN1k1TXZyY25WSkRWWkRXekRfYVNGR1FlU3hCYTZ1X19PYUE3blp5cU9rSkxveGhlSW1XeTlLZTRJRnZ1UEZKSHhBZXQ3OXpJckh2dXVBbkRzcWNjbDNDOS1Ta1VlY2I5UXprOHB6Wnd3c09Zai1tbHZqRm5fcnN6cS00NmM3MVhiVXdTYWZtN1E5d1kwNVNEYVVQWERqVklIVTgtMzdWQi03SVQ2V2VSUi1HcGZWbGh5Q3hNMjNNWXFIbUxCQ3hFcFhWWnBvTjBGWC1uSkJqdXlDVW85TTlhUGFIT2ZYY0VVdzJNMlVtTjhnY3ZiYVdzNkpQOVEtbm1mMVVpbXRoX0Q5N0cteDRzcVBfNjA1UlZobmw1ZW9RVW9zamU2ZlZRSVFYM194RUJ3cFQ0SkJiczBJNEVzTGxfeUdPbWczRHFwOUJJQ1FsTjIxVHRGckdQMzZmeHliZzhVXzhSTGc4NHc5UGFSSWRNZF9LOWVzTDgwU3ZfSDNLVGhIMXhDM1JxTGctUURhaXJoMUdySmV1OGpLMjZRVEF4NnBTaHB1NndVRHNtdklmV3NyUHNiX2dHMWpkbTRvdzN5UnRUYU54SVhqeHlTUF9LVkc0UlJqTTBCbXUtUkpCSHRyMm9HbndZWGI3SGNScjRtSWdUekk4bU02TmY0RjduTU9aTVBndUNXTTNubjhlc0J6aFF0cjZFSW5oWFhUUFVyaVpFVGxBc2U3MVJNZFpJYTB5eTgzaEx0Nm5LRkdhcU1VWEpoUDZqeXNid2xoaElRRVNYRGw2X0dhY0J0WmZEUXM4NUtTUFZScGVKdHc5dlpUTDgzX3lXd0wta0JsVE5xcnpmUkhfOFo2R0syVi1wYkNaV1RRVUFSc3YyNy1UdlROeFZ4R193Wko1Q1Z2Y09VcDdPX3poNjJUOGt0Mkl3RThpaDVRb0dpeG45UVZwZzhVczYzc0tiSGRsTW96LXNxaUVQck9ONGFlQ1g5U3VjbXI3M0NveFBQeHZ6U2ZEYUxnYXItbVI1ZTlLeEt6ZHF0RFZiUUMzUmVxQ3dGYm5RLThTN0dVS1B2TTliNEhTWlJkaEZYYWptYldSU3JVMFozV1hvUnd6RXpmZ1pVdVc1dWJHMUJOVGlUMl84UldpbzdrMVF0UGQteVRDWG5pNGhLaV90RmhwRjlrT2Zxc1hWVV80aTAtb0FBZl9ucks2YlRyQzlybEJ1TTBFMTFraE1QUko0SkowcE0ybEhEbmdWbTFlR3lZR1RnYklDNHlFaWRPYzRGemRGcFQ2Qk1HX1ROa1JDS1N3ZHhVcmJsWUcwbXFSV2FqRGVKU2xVSjU5NFJsVDhoUTBEeVZUUHFLc3R6eEVoWFM0ZjlQTElKUlRLeVNQT0t5bEZPcWNLT2xYaVhvek9jYl9nUmQtZDBmV1BTUHFSdEU5Mi1LbkJrVFA2OHE4ZWIwUkVyTnl5aFpnSEotaHc4MjZpcjVTRHJTQi03UGJCSFY5R3hCWElGQXRqT3B3MUlocDVhcnJxcTF2RTludDhYUXplRDlabUpWa2NBczVWMWNTOFVxaF9aSkdpeGtzVnFuak9CMll1UDFuVzZLLVM2M3U4aHh0RDNqTkRxSF81LVhPM3ZuWG9LODBhbi0yZWlIWDhxU2g2SVkzSFA5VVlDYU54c2FQRWlidFVYbW5iU200WjVMcDdISU8wWU1MZ0I4TExObGlsa0FTU25BZTZIWU1zX2JNX2VfUVlSOVJWaVNCSmFxR3VzX2RtRmdFeFdRdTk4ZUZVNzJuXzY2ZVpDYWNlRHNrVjRPUlE2LTl1aUk1ZkJ5LXFGa1p1OFBmX0x2bEhXQkpsVFRqXzQ1dmF5RGhxTlE1cF8tNUMxcFFXOHFsTHI1Z2lEcDVwSkZvcmwxS0UxMXMtaVBwM0NPY0RudTRWVGlZMzd3RFIzaDI1N01tSS1YaVRKd015MFMtaUpXXzJTNkljLWRMSm1oMzBQZ1Z4UlJGTjA2YTQybDdGUWppUFVKa25zWDEwb3IzTC1TM2lIelhYS09tMm5rZDRwNHd3dGhqa0F5UzMzeW9Yeko1V0NkdjlCLWFsbGJlWEV6NTJ3MURxQThEVXhsVG1aSkdVeHVpNFQ2aTd5dGlnLUE4U0kzOG5SbUVsRXZsd1dXcllhQUxKVXVlRXNialJKcU8wZ2ZSZ0djT0R4OU1vNlNzN3k1WnFIN3VrTUh1ZnRGTzVkZ21IeVVXQ014VXhuUG5oczRheHZsbUo4U2QyY1l5Z3dTX0VMMnBwSXVtOUhYXzZxQWxaeEdrc2V4VWVVX2FfR1BWVlFWQVBSdVQwMTE3cFRKQWQwNEtqaVhjcVVmUVJfWUZBYmRVVUU4S1ZYSUdtWU1VU0swUF9sczNKVEN2ckhaQVoxQnNwN01iSlZwUlFUTjNLcEJURmNuTXRIV255S3VVQXYxRjg3TkYyY0F5cFZwVzg4ck1zSVpVdXRYZEZZNnNFSFl1eV9WQ3RFMjlucmYyVUl3OUNQNUdTYzF2N3dfSmU0VV9vclMwNHJ5eU5kdjhlZXVOOEZpRlNuOS1kUE9uaGROWUpvMzF4VjJidDA2RFNwbFpJOWQzc3hYSUdUcFc5YmUwR2c3b1Fwa1NoaDNrWlpoMXVkanpHRWNnMmZkNFBMTGtqaHY2bEx6QVh6emVhUlJVVEtVdDcyTUlaUVRYYTM4OFFyX25iNmVqcHV6QjJFUXVfVWFENmxLR0lQZlhvWVg2dTl5Q29QZk9lVFh5ZE5xRGhJNHdqem93REdRdERNcXJpekp0MVNwbTdQVUQxMFplOHpSZ2llUUtxMnZ3X3VhZTRSVlJqdTVwNVNpc1FsVkMxcDM5Q2dIWExqQ2VsZ3QwZDNkQ2xGa3hsQk9IUnFXc2laenVTS0EwS0VJSWRYY2lKS09BWjNKZVB6Qmxoa1NyVUFzSUVwUGxFb2dSTzJiVnNmWmx3dWh2ODNIekhaaUJKQWtYOUZKM3NrNlBUNS13ZDVtUE9DZmx5am1nckhKZDZGclIzZnotakhWdlhYNXp0OHNiM1diRWk2eEsteGFwM0gwbHlaMUxDR1JHNGxOWXlJN0U2RlFjazFTT1kxU1liY0tVSnhHQV8yVXZPTGVNb2Rrand2YlpXQXhIMHV1UExxbXg0SXhuaEp3X2ZLVGIxRnBLMVB0SURhdVZUa1FUMXdFSEZEZXZ3bWdzcmtSd3daNjhlMFhCaEpuNWxJZEZCdGNxdW1wM1hxOEZNVHFJMTJqNzI1bzdQTDJCeTY0Nkk1Y0t0bVdabGsxclhEaFNsS2JYN3FYejJiUkFIcnpCN0RLSWx0ZXZkNXM4MVNLMFlSZnFpVTZtUUhyWDYwdTNfWEUyQ2tZUHd5NWk1bC03b1BrRUdhSWM3Nzkxc25ZVkc5NHppeGNmZ2R2UGFmMGV4RnBwNkZXZkdNcTk0Ymh2S1J3NW9jdzNrdURwYmZCS090VmxJZDQ2eTc0TUlRT183bTBXZjVKeTdqSEt5aVd2bVFpWkI1NHpsSkpyb19lS3FabXRlSDBqUy0yREZtYU5feUdJQ1RHeFRiLWJ5dW9CUmoyTkJ6Qm5idm50R3l4V1QyQ3VvNTBxejg0N0p4X18tZVJxZVpqSXdIX0cwNU1IUTZkYW1qWlZUUzFzMWlIcDZnNG81ZXotYXRxZDNzb2JFSHZkdkpyUGF3VTRWeWsxNGtSaFdRN2J1d3h5OVVuZ0x2RzNTQ19oN3hkSjE4OXl0MnZBVDdLVll1QXV3QWI5MUNEOW1QUnZBRVctQkN5bU0xcUJYaVY5cFFBYkFHdVBwOUJGcFlqWmVGX0puT205eXJxOS1INU8zaWdHS3psRDdYbVotbUZxSGpCOU5oZnZlSUx5LWVqM1VHaEd1SzFWUkVZT3ZkbU42N1JLLWlvTVF0d19Za1BQeXF3SG9iLTF6bENSUlJVTmdnVU8wYmlkN2RnVkFQOXJCdkVlcDZWMHg0bTRiMGgwNkx2bEVqQ2kxaHAzT2dWSXZxZVBrWDh4b2NTcFVtNmd1T0tqXzMtOTViOENxWVcwWTA4T3ZCZWpVQXhjRHdQZnRyNlRIT3NMSE5XbnkyNGtaejloZjR5V2Jqa1U4SmhFMTluc0x0NG5Nd0taN2U1c2hMNjhham5sRG1OeHpEY0tsdEhNT3RSSTQxaVV5b1VlWkVIOEtKQjE0ZzB4NXpLMF9NbUFCOV80VmpLcGx1VFhYV2RCVTBoOHJNTVo4Ym5lNlVmcEZkTjhmZXA4cURhc3JLYzFTclVEZXZpMkJpblhOelFVdTdUc3VreGlTM21iTzhOZm1DQlFJempMUDRhUVF3LWR6Y1FYTXlYaG1fakdvNERuNTJkT0M1bHF4Wmc5QmxiN3k2a25Qdjh3dmozMGRadnlDVEJVS0dmeDVJbk55bFJaQUZaV0RiSWhfcXc2UkdBaEJ5ZlJONk1LY3JmQi0xc2pfNjN5eUZ3OWtwUDk2cU90ZjdyQ1lMNnpOSmQySFh2ck1tZ194R3ExTk1PMWQzZDVlQTRyMlVTVGRFbU13cnlLRFVDRENmMlFBSEYxM3NMLW5INEZwVFBReHktcUtzUWpsYkE0LXJRblpIWUpJRFhrajYwaEg3MDVOX2pNcW4yek12a2xid1JKSXp4bUsxUl9xWk5CV0ZST2N6SnNCVGNkUWM1WFAtRkdlb3NISlNwdU1QVmstT0NOLTNmVTA1UTRWNWpyQ1lvekdfcV96UXRZYjdBX1R0cmROZ21yVmxIRWcwWm1HV25OZjJGbGh5VmxwRUxnTk02MW12UGlTaE5oT1N2OTBHTlJCMWdteTJ6QzZ6YnM2TWJkajRjcXdLbkdyZUxoa2lKSlZGdVlNRV9JU19sbTZWTlBsU2FDajlwakU5bl9TUEs0d2UxRXJEZGtGaTRSaDFRVFEtT1Q4MmhiYk1DZ1JSaXZDVTZ2aVlNUkhlMDNfYzBCU0hTaEZZYmhCMlpfVV8wWWZGOFpReGZseERJLUpyeE9pcmgtNUxQTV90RnlTa29ILU0zR0FWSW0tbUFvM1AzdXR2UmhaRkladGpfdFNtUjRoamRmd192Tk1wX1pMVG1yLUt2Y2lONUFTUjhmNlgxb1B3X2RNSnYxdHpUYktEQUJKZjZRM3h5TXJsNVdJekhpbU1ZRGVtUWpXVlFUSUNOVDFtQlF0OWF1WkRNM04yNDlWUDJjUUdPQUFIdE5JUUpndWU5dE9LQXVBbDlBTzlqaGRnZUx4bEJuUExSUVNYWnRrWnRNOVppUEFhNlJxanJlbks3N0kycjF2N0tsMkpySWViQVJiQkRXamc0WWRSWFVKRndsNm1SNmUxUU5UbGthMTlsTFNGQkxjeU8wX2pCVVVmcVF0Ry1JVHhWbVQ5RVdSNklxVWoxTG9CazFkQXlJOVJnRklfRElUZVk5Uzk2cmUxbDB6aFdjdWdfRmlETVVYS0VwcVVWZVVpbnZNdDZHNGVXQ0FoWFBROVNIbTRFMXZ0UEhRNERHN1BVaEsyVjdhdWdmYlEtMC0wZlJnanJYVjE1ZlRpZDhPSGdXeW44N3BCdzZwcWZkdHduOXFaU1U1QnAybmpBN040R0poX05EN1ZSOHBDajJ5Y0lET1JCbkI5QjBjN25MWnM3blc3dFYzX1dmLU9Odm4xLUFCMGNQQzFXNXRPSDVfZXg1VGVTc0RDcW10WThhbDhBd2VyM2NxcGs4SjZTRGFMNTNQa0NzUThETG1MaGo2UFVMU0hGdVpwQnVRWjZteVM5akdTdEZ2TlYwZzl3T29CYUJJNWpBWWJrcFl3bXhMSUxYLVhYSHRKNFEtWWVQZEF0MGFFSHBib3g0WkVuTUhQcFBwWk5yWHhkb2owR3locERld2U3UXU3WldfZ1gyWkJyVzFwMEw3ZThXcHlfdkYtYkxTdEtFTS1ranR1UTY2NEU3dXdqRFliMThXZlRZcEl0aDRSYlh4RmZNUDV4aGlYa1lyQy1uRF93M0hkc1VDUF9oa0lQNTZMM2hrNm91TUtOWl80NGRHWnFIZC12aUluWGlVMGlIUUViMTlsNVVzVlNtU0V1Q0R2dGVmbDB2MDJKSS13dGhwenVUZXVvcnptbG9qVlc5QW9iUjV6ZWM1aXpBVGNtUmNjeVI4LXlFZTRSLUtHQ1EtcXdrMDRXLXlPd3pHMzM1aW5CUmk4V01abWdnc255RVZnTGg3YzVGRkRTTWFpWlp5OExlLTdaNVdHZlhMbVZfZ2NiYmpJYXZSajA5ZHhUdEdKcV9iWGh4dThTektQVGhjbzEyN3BlSm9VMjFCcUFVU2VDT19JVV9DOXprd3QwaWduek5ELWJIblNreVZvTmdDX0NCTHV5VnE1LVozdkZRMjk0b3hVb0FpYmI4YVVVOGJaaVJnVXpMZ3l4Z25kc25qRFRlNlRuaGViYk0zeDdFUld5cUF1UmhodW5qX2lxeXIzdUdEbmhuWFFlaGhSWTdOT1lHTGY3ZHk1cVpwazluakgtOVBVVkJ1VXh5RVFHRkR3TThIUG1qMlgtejd0aEk3RmZFMmFGdGo2Qks2R2E2VFBvY2M2Q1JCQ1k3Ujl6am95Q0Y1a2l6RkFhY1hCc0xPMldWWVVldGZfR05ZS2VLWGdHUXIyOHdVU3VEX1cwT3phZEtiS2tEMTgzZUk3djBhNmRJZVl5NUFWZm9PbW5yM00xTzlRYnNkOThKSWczTlFMS1UtM0VzbENVdHZJclM0LXNRcGVfRHFYY21SZVR6UUxXaTBCamdzUDJ3NVZVZ2ktekhudWp5M1E3RzFQNzFyTUNMazRMUTRZV0w4SU9tYWxucFVPbE00b3d5ekRZQzJOWllnNWVVQXRsTW0tZDYwYS1aSkpuR2xwU1k3dnpUM21zZGlLaVpjSHVBTWxnS3k4MVNOcUp4M096ZEJHRExxNkp1NDMtS1lkR3lCTDVJWTBQb2tJRGoydTd1REJ4SXNHSHV0UnlWTDJUSW5iYWIzejZKU0ZSYzNodExhRHdKdll1MmFQell0dUV6aW1MUDdDbHdzcEUxeHVJcnlOVm9RbWtubURwYzhNMG9OQUJxVFU0MFRlaDlqU3FGajg3Wi1rblk0cFR2QUZNdzNYQ0k3VkdDbi1Mc0habVZ4akV5Y2JNME5ZODhHRnZHVVM1NjNRX0ZkRnNUSG03azExZXpqaklET3Byb1FSSzlBY3pCbG1GSElaVmtWeHoyYVpjQmIyR0pHVVdGVjM2aHBWVFRKQ2tjbmdIcDRDOWxRdmNyYlZkckdUc0duSm1sQjVRYVFkR3FoelhKYUowaWlEdlhveEd6R0d5TUdLZUllcDVRSEtwOGNfaktXY25XSmQweTJkeEZjV3R3aFcwV29QUlhDUmcxejBac3BlQnV4NzRrMm5IM3hhQk9jR2NMbENPeFNVM3JNc0lXR1UxclVlRkdGdG81MVBZbU5DNmY0MXFSaEpLbC05NzlrX3gyQ2RGZ0tQZkFQUVQ4MFBOb25nQk9nRFBYQTQ1LV9adURpY3JUQU9ZdnlqUUJLUzRtek1HSExFNDhLbnh4Umo5U21lVUFFeEx5ZWFXeURlMkpGV042dThjZjFsREtZYUZ3Z3lOWDJ0TUJIRzZNN2cwY2dnWElvNExZaTdNRko0TjBkS2FQZXVMUUl4ckE1MWlYb3l3Q1kzbEVJN3NPbDZXSUpmY2tvUlRVMmNMcXZ4LTFLdFhBSHBzSEpuUmpyanZzRy1scnhhaVExdDY2dUltTEZ1dE1vclkyY2xKNUhBd21yZ3VtblNLWDdUYl9JTlk2NnlrMS02cF9MZ2VEbnRYaE9hTENHQXVLQUloYTh5VmVyUHVQbC1iTmZrOXVVTVVJSk5HcmpwRnlZRThzWXhwb2RiS0Z2WExQWjVTdHA0OHBhWWM0ZFYwR05jSG94ZzBKX21mcGNzSXA0SGZ1YURFZU5MS1g1bWpvc3lzMmdzc3p1OVVoUHFscGw5UGQxVXpEUENaNGR4NHVXeTBuNmlFOHduLVgwS2g3by1rZU90MndrUXJadWVnZDc5aFVxcUxGWUpGblY5SE5kZGR0Yzc3UW02R2gtNVoxWkIya2dpMnpUZzR2Y1NmeDNnVHRPRHJFZGQtWGtuLTl5VlZQcTRwR194c21adDNOTHlmRWNOQkI0MDY4VUt0V21KaDFaWnNzM0RxUEZCNFRacEFxNTFuWTZuNGF2eFhfWU4xVUNCMEdqNXFIRks3ZVB4aXdCRGo0NHVBYzlOU2NiZGlrV3pJSFk0eEV6WnRVVXBwVVE2SEQzRnd3TVBmdGhQdm9UWHAzdjN3R0d4Y2ZuY050ZzNyZkwybDhSOWNEc19HV1RjRVJsUmcyTFRKdTJxQnFzMkFPWWhTOUw0OGVBX0xSWDZ2VVBicnY0NjItNzF2UkxrYnpzRUlmQ0hGNVhzd1h3RUc3YkFiOXN5UXZqbklFZWtRRTNWZnhWODY2WFZjTXRnRENvMFB6ZkpUeFZGM2dGU2U1ZTcwREhESDhBYklCSHdaOWdUY2lWdFU5dzBOdDNGOFBISVVSU2pkNmNpSVU3aFNzYWVZRTFtQTAtWE1aNkc3d3JYdWNNQVN4UnhNajVCbzllUDlLbjA1Smdmc3VWeWQ0QTh0VzZyV1ZpWk5LVnh4OEhYMk1fQWRGQjRfSk9rRUctMEdZYjVnMUUxQzg0Q01xX1JuY3VmRS0yTzBCWlg1N1VBWGpsSGdMQ1BibVJlcEIxTllYR1NETHRMbUlXX2xpX1htY0FWNk9ScTlsRFU2dXZDV1lkNm5PZFVzbW5DUS1PZTR3T1l6ek5BTlRSaG9mX0pPellKYkU2U2F5akExUnBDbjNndE5mcG5EbERud3h3amVwRldkaHp0YUpZNlNjbkFadDhzQTBrMkVQODJzQWlnVkF6WVJYWERMei1XM28wV3k2MVowUWRNSExDQXE2YXYwckFIVDJMaktLRHo5akdMaXdBV3dCZGFDRTJSZlVQc0dDNFdESjItVlNmNk8ydG5kbko2Y0pRQjM3aXJMLXZnUGNVc0g5UFpkNHZHVTdDX0JtZTNPb0VxcXFKOUpPUE0xaHNXVDlDTS1aLWdSZWtDb1hxQmFLclJQZHM4SnRMVDFNaTRHdmhLWFF1VEljZ1pvQmlBSDdocmp4VXZDdWNBd0VKUGtZRGxnRkZzcktLcy0yYkRfTjBxdHM4cVBMNURuaFZ2QWFwODI4LWpaZ3BFZ2F3cmN6bEdJMjhMMlk0dk92UzNwSEpHcEVYYmJaUGY0X0VtWGczZEdaQksxWGNBbk1XTXBjOVdiMk9HbXdQV3JucEVxUEpqTkhyT3NSNnc5RngtV1gzZHZCRGNPTkNKSld3WHhRLS1PS2VYQU9rZFIwR0xEMkx4QklpS04wd0tvcVBLcTdVU1R3andLem1LeUw4b3BVV1k3aUVFSERwcGJ1SGRZalV6YktaMTFPV0VsdUxjdUpmMzNQaDZCc0ZPT3ppeEcxSnRHNnNCUlR1ejVUaUQyRDFTcVEtTkhPRTJHMmJTZ2VRLWlFei01b0FkNGRVYUhMaS03RzR6YkdsMzJmelBBb1AtVU5LZVBjOWNPU2F2MmJaal80aVhYUWF2dzVqVGF0NWhxOUZoWU5JeWJXWEx2Qm9wbFZ5NjJxLWxLWVo2NDNPWlNtdWhjSUowOHBBblB0NF9DTjZGMXRubDhPWjNqVmhhTEdBbjVqaUtKZU5JZXBVNDdoUUt4UXFFVHJRUzZBT1hlekEtRUtoTl9uWWlsa2NQZDY5QTBwR2Eyd1BuWkZtZkJFSHZMaGVGLW5jcmJOZldEdGVJWU9Zc3RzUkJ2Qjc3cnc5SHFWRkxSSmFaYjJYM1dmeHVFVzVWMlNVZ1padnZQLU1HRVRwS3l5WTlDZWo1dGNKWmRBSTlzZlNYMlBnU1o4LUdVNE5CUFc4dEZBSGdvMGxpdFVtb3FXV09KQVJzbDNaOXl6WFhGbUR0RWc2aWpjZW5aRTlYTWFfaGloNXhLRlh3eFJKUFdEZE43WUVKOTZoaWZZazNvSFZqd21WdkF5VW9iTU11RHp1b3owbHNmRXNvczJzQnQyb0Y5dXRvWExiSXFOTmRhQ0NuOThWZXU5Ull3SWthZEpTNWVmUGxubmt0QTNyZFoyVVYxYW50czRaU0NIT3FESllZQnZzYWV6VnJMblhyYi1qRFN5cm9sUVZjb2xib1lJcXZZSU8zb2NTRDM0OHhwUnpWR0M3MHZSaFJBeTBvcTk3MTRfUk4yN2RmaFVUYnFWZVVkRXgzSUs2bjlLbHMyRGE2UlZDSnFreU5uWUd6Z1RqTzFfc01FRm5OaWxNZWQ4dG5JWXdZVG5ncjFJc0tHSXVBa2xaRS1sVlVHZW5WWUx2T0x6U3hZM3E0V0gwWFNxZjFOWWxaUmtyWU5tNWhyQkJrUmhGa3VSSFQ5TDBfaGtjcTBJaUJacjZXWGpiUXJVRmcwSV9iTnp6QmU1dDdoUTdieDNEcm5lb1ZJTlRHS1RwbTNZUHRSSkNoYk1DWEswR2dwSF9EbkhaZThNaDNTU25ZUzA2VVZkNzJfYzMzZUFndFYwSzVOeXlFN2h2TXNHeFl6N3hfYlhER3lpT0lkVGtfRDc0RmE2Y0dYOFNFZmxpeU5hZVR4N3M3OGc3Sk5jQzJ4UF9CdGlpQnpYWmVaZjNtRmNJRjd1anFQT0ZGempVYXNkMkNzMUY0XzAyS0o4X2QzUkZJbmtSOVJwTmxtOURFa2dBODVqYzZfWDVoN2VrLWM0c3pReXdIR3cyTC10N1ZpZEE4c1BRQjA3aE9GZkFMM0RsU3lYT25wWmFxUDg3SEo5ZV94VVdpUnVHRXB6NnB4MzMwQ3l0N3JqY3A1M2dqQW9VTm1ERFhSMnJuTXdobnc2MmVTUVFOTXhaanh3UU9hTGpfekNvRFJuQ0hGZEJZMzBvLWlWS0dHM2xxd1k1WkR6YWlOaDNadExfZ09feGpRQ2xHd0FZSE1SNVg5QmtOZkd0WUNPbjRYWG5ybFh1Snp0QVlEVjhZOC1mTGdXdFJxc0ptcE0taEtiaXpzXzJXV3FmZlIwX0c3MHl0LXg5bEM3eG5xbzI2WXlPVFAyaWR0bkJtZDB4c3FuazI1Z19IMUo4ZUZVTC1LSkFDRzZLdU9WSmM4YktrUlVoTFlFaUdkaGxBV0o3MEFBM09LdHpTRjdqUFJhbWtuMndYaFdicHdmbF9Bd1FxUFdlVE56eWdjYjJINDRfbkpudVkycWdUaDhqWTFQYk5QUzhJV3p5MFJwazBKRjNnam1tclJ2WU1ya2F4bVIxRXRvRFlDangyTG56S0FSZU00ZEdlZUUzZmVVTE5XR1lFUlZKNTVUc3lhYVZvNHhHYTZBT2dJeFk5dW01MzdfcW00dmVfZVIydHpCWmRoa0pwZHBVaXJKeEpsRWZxZXliQVF0QnZISFVqVHVnTmNCdWdxczdWb25ZckdyNmZsaTFMeVlJQm8tUEF3Wk5EV2RYNUdNX2pDWUROdXRLQTJfa3REakZ5M1oya2pKYl81RHh4b0xxRURTbXI3c3hjb2tjUjU4RWZMWlY0QjRmeHJUZ29sek1IU1UyQ1p4LV93N1FSaHdlYkVOWFl6NEdzcWdjWjdWaTc2U09pQlNjMzlVZjZqSmxLU3J5U0hqLWNjb3k4ZThiaHc2b1prdHJHUVUzTG5hcmZuNnpyUWVjeF93dkZmTXZKc3dDNkYyQXhwdnpJb0o4YTZ4ZF9nWUx0aFNqUll4c0JvbWlnOWxfRkxJTHh1OVBKNzBnTDc1cEVnT0ZZUW9kTU1rNWhhcmpIYllZZEtuNU1uWUttS3B3eGhvUFpFM05VaU1SYmRhaC05YWtuenEwaEJDa21TTEN2NlRBeEp6LWs4Zk9jNE9fdnE4Ti00VUhVa1Zib3J6RUU0eHJxd1lLa2dtR0N6Zjg1T3RGUHBSeThDUEFvbDRRV05WenNpclNNWGdwTmJSWXFsR3ZBWWJvQ1otTzlBdFpHRnRoUHBLbXhBQmM0eXFWOExUT1hhWmZuX09fZU8wNC1fa2NPTGxTblFvQlpSNkdGdnVLUVlsd1pNZnItdzYyQ1hDRzdiYkJTWkNMUWQ0N04xZjZKQUhZMmlONEFIc3VrbU8td1hHbXp4VFJ0VmxjcHI4VkFFNlRLS2ZQZXRNWWNOU3VXTzR0Z3RDdEE5WTg0M2lCUGRJV0pwcURwR1NNXzRfLVhnWkYwSkhoWjlsdFlLdEVSVTd2dVZfOERRa1Zwd1hBVUFFN3JzR3ZqMEtkRks4NDBUR2h5Y1UySVMwbG5FS1B6aGpOTFJiNnRfVWNZSHZDeloxbjZJLXM5U3hjSWpYVDdLcU5xblRxRTZSMkxsN2dsdGxrdnFsNFZxd0FEbkR3RmdTMHVtTWFzUk83S1AxTjNUZVVmeXhTNjZEdVpYRnF2c1hpYWlNMzNUMV9Pc3BDMmpzeHFXVFR1YU4zclZRQV84bjBLRGtGWjJOQTZLZjhydDhGcmZXZDZQa1lxbUdXMk8xeUhGRGR3RmRGSXJVVnJ4aXVwajFMNVNQRFNHTVdMZUZqRDVBQTJ4emdHQi1oUnVJMlZYQXZ2Mm92QWxWMzN2TTdBcUQzdF9OeEhNcTZ2bGdMdlY4aWNyUmU3dmJ5cmZuNDRDdFhNUkx0eVU5U25WME5GbkQzZDAwN2c3RFh1SzJFT1phYzF1QVprWHlwUnYtVkx1cjNiWV83enNPMUkya1RmSHNORFpENjI4WGFyNkR4LW1LczBvRFNKa1ZiMmswVkFkZWRTdnBXV2p1Yi1mXzJHWjVUUl9Ea2l1LWRkSElJbWJ4U2NKYVByenB0cm9aczBEekh2a1JST2lIdFpOQmp6TzNMY3VEMUtod1ozMWg5bDNUWGgxNG9IaFRBR2JTQ3FkaVY2ekFISDVkeURtOFZURnlnY2VsRW5LNlg3d0UtdTd2elg1SUJSV0FoUXFHM0cwMHdPNEs5dTdCT2p2UnR6MUVJaUNkVjhzdFhxcll6dGQ2cUh5X0ZMd2FkdFd1aWFzN1Y4cEtiSXZxN1BmeWpDaFJYV2JReXA5NFktQVdKQ2JvTkdNWk9BbVdUUFZjUFhkdFNYNldfTHdqclpram1CQnZVblpuVEJGLWprUHBBeW5IaE5DbWdGOVNEMTZyTG1jNzBwWVJRMGVJX1ZuTjJ4Y29YbXZJMEdOMkJjLXdYamJDeWxfczJwcy1fYW9GV1hfeGZ6MklOQzAwM1NBeDRuSVhTTUNYT2pEWHhkeG5tMmJEQ0VLbE16YlJadnFySVV3akVaVHp6UHFWeV92WFd3blJGZkhtbXpqdnk4Q2g4QmpsZ214R3hFOWtIVmFna0hWVmFQcVI2SVczQzdiMkxEVDlsZTRUY3p1bTJXZnhZcWdOOFU1U3BVWmJTSG9YR1VoS3NodzlsM2pvOGdjaFJ6Q3g5Y0hwc0hJT2VwdUk5SV83WlViMEpHb0V4bVJiYlh1TDhGZ3VaZEg4cU84NU45V0QtRHhmMXM5MHpOWDRwNGswbkJ1ZzY1enQ3alhtbFgzSWpRcnBRblNDbzFKSUdmUU1wZE8tQUU2Rkl2cXhpbHdnLWhJa2RsLUdwOWg2RmFNRUpiOW02RmFNcjVMRkZrNTMwMUNSd1BDSUpUekNUbWl4WjNpQUhFOE5mOVVGWmFhejJGQy0zanBjRUExcjlTal9WUXBvTGlLY0JLbS1FRG1nOHVUeDF6LTZmamZmNUFnd1l4ZklrQWFEZE5DUmhkemZ0b2pNQkVBeUg0a1NyWGYyV3V2dEdfYkUyc19xNVdia0IyUmRUYnlyWDhnSjROajlGZ3U0VlR3QzdINmNMSzBna1hoSjZteGJnRTNWb2txa1ZVUkJJbWVIUEtlUkJrMFpJRHZWS0V0X2JaTEx0el9KOWRQZUZZOWNIcmlRUnc5NHlsWGVZMmIzRVcydmYyQ2FsNk5kcS1heU1iN01FVEZjb2VpU2JEV3RkVW9lMUprbXhDdFN5R1p2clg4ZnJlS19heFNoS2R2a2NTVzNIeUFOSUFVc2tIMWdNb2FjREdiamcydW5Vc2p4YzFtb3FLd1BjNmJMYmxHU3JyUUVkN0JYRkh6UEUtakVxeUoyMFVVSnlSZGJPV296RVlrUktmek1pN083R1ZwTkhtY216OEhsMjlXN2pkMEJPTUFMNTVJQXJONDJiV05fdXEtSGs5WC1aVkJFM1VFRVFUbnpEYXRCVVc4cW9KakNnNXBTNER6d2RqNjJLaWFnWFJPTlRqSVh5QjBEaUJiNHN3ZFFDVm5WZWw5UFNvWXNrakpWandxX2NEU1I2a1ZZVGJGQXppa1NnRXRaZmJnT1ItWXoxaWhQNjYwVFlrZDhRQ2VHQWNsRXl6RnFmM1kyaEgxNDZxc1ZnMU9IWXRmRW45MmE5MlFPSVZTdEtuWi03ODlYdW9qRTduRkpGajF2ay15Q1Byai05VlJLLVYxNjVuT3FhS1htYlptMXNBXzhCOXVpNDZzemg5TXhnRXJQYUFWZU1sZk1waVZJcW13WVdheFd0UElRaHJ1WmlDN0tYZFpxay0wT0hKOFhYNmlSLVhHSVFpVXVpbWxjMUctOEl6Z25jQUxGSTJtbG5VTWxVSFNvcHlPSEltZkVHc0k4SHJ2RmxIMFN5ZEQzSFdrTDRIbklXbGI2ZHFnX2kwM2FmVmxWOHhLRjc2dEpoRkNwazhoMkxyMTBYTWFKNnU5NDhidGMxTFh5c3lRZE1JZTdZVnZsUVBvUVpIOGRaeFU4VDNKWkc3ZjFyMGFjNWtMUTQ2SzRPWlNWMFRZVFZrM2pXczVkdUM1MnhzRC15ZkhWX1NxSVFIdEo5STZYQkh5dE1uMHd4UC1NTEJyVFNWZmhpVWN5dnIxNkNDNFpKZXRJc3BWclEydXVLWjNocEhkaDdKeG5uZW5wYWtqT3hucjRlbUJIaFFOckJXQVVZM3pkN3JSaDlGUXJUVFQ1aEdXb0ZkLVcwZFJpNGRkNm12R0t3RnBBQS1RZEFrRDFyY3F1NEpzOVlNU2NwMmZvaHZIZV95RDVvY0x2ejQwLU1ZdnVOZkU4VFlVb0ZhT1JIc0lpQTV5Y1Ewbm0tWUVucnlUMDVoNTZaYk5nN2p3Vm9HQzZOWmk5bGpmRUZhNVRVMjJIUkxvdVFodDhCUlhIeXBEQUxrU1dTd1d3RUo5ZHhEWm1hcDhCelVFUVNIZ2cxSWQtTmxMdjFWbl9MVDVrVFM0UHpncVFvX3Z0UnJlWk5fM2ZkaU1RUEZRY2NXdHE0dU5ZSmJGWWJoR2hVaUVJcUZOU2E4WlQ5UTZEMUZEMGxkM0pJdlQ2eVpUdWZ0M21sY05MX1ZxYncxSS1EelNaN2ZHQVJFSzhkOXdIOHBjOWgxQzZtT2kzOTA4V3p6bVZWd05SSzJRb21ZaXV3eWlCQXlnbnh1ZnZLYVcwTlJhdjVSa2V1cUpnS29meEstOFE5VnVubDlDazdjMmswdFRwR1dIY2l5cDdaOUh1QXoxdzFqNXRTaUIwTVNCY2I5bzJPb1IzdjhqQUcySUhfOXRPRnJ5SFQyOEptdkUweGRvdy04eTlwS1lxdjVkN0F4clVZanRESTNYOXdzNDFaRzFVb2t1cUNFcGhMdlVVR3pfMFFBX1d6UGNfQlJRUEdzLS16NmpXM0V6Y1gtMTlTRlUxRWtLRDZVWU9KX3M4LXFadEUtQmxjRzJIbFFsWUZaaWwzSnVvM3NucTZhelJKNEdGV0xqS3VwZEJhUEIyQXQyZUI3MkhkUXRqdC1vODh2UFFPbElKMkJJazA5azBlNDRfc1RLQ29wZGJwRG00UDlRUzF0cGozVmlHclpKYXdaVUc4T2hYY284ajF1YjhVT3FLamlCd0VvTFFYdzNnSHRRTm5nc1BESDBUb0ZwVmJORkJQZmR5cVFabnJubTBrQWc4X0g5TGQ4UnRGZ1FSWmlMZ2VmYzZIM3dUcWlPSmVWdVgzT1Z0dmdhZzdBUEtZcDN4MW5XVTdld2luMG5JaHpld1hTclBBVndYTF94bXlKU1ptTnF2NGw3blFXYlVvMGo5Wm52TEozRDJESG1KNEJ0V3I3c1JhT3JnMFM3eTc2bC1LNzJFRFkweDc0aTBRMXc2bWc3RzdKWmtwdWtsTm42QmlDUDVGektJaHF4U1htanRGMEtvLW9xZEFjd093U2wyNVVfRlVqSVpZTVZ5MVA4Zno0RE8zaDM4cHdTT0lDazBSUXBfcGNybEM2aGU1bmhhU0hpa185c3VpdmR4Z1o2TmJrOXl5SU1yVEtLajZmZE9jOHMwM2VQOEZReFhGejdqVTJLSkJUaDdXaVdrdWdwY3NLZ0o3TWQwS25FOG5UQy05UGxCVU04T001ZnFoSThUd1h1RjI1UnlIY0x3SU11TjlHU0trV2k1aFRHZXVBcVd5LWNoVG02Q2hiNUZqczlRa1lnbS04Z204Y3psUTNCVTVEQ1Q2NTQ4emM1dDNsX3hDN0t4WGRJaklEQUV0R1NFLUgwX0J2ZjlsaWtlZERuSWNZc3VXRXdMU1RpWE9VVFo3bnNnekx2X3plRk4taXRrZU9MSjduSFA2OENpV1VVQy1IU2FCU0pDeWJGTDZaMngzcHh1QlNsRHl1V21aa19DNXpGMUQxbzBkek16VWhyYzc2emFWcE9RRVFzQlM2bmdDOGtQU3U0cVdQM2M2NDV2bWZ3d01ReE55Tld2Mi1pd1c3N0s1X3l3Ry1vZ0lUd2dvZFF2Um8wZlVNNXRleEJhaHl6VjBwcW1EeTZfLXBudHJvSEVGam9wT1dsdGpGRDdubS1aVnZaUjltYVZZY0RmbmdoOFRlWEJfZHFIX3IwbUxWUWxPeS1KQXo0QTlGcWZOUnBoWmtfWUpXY0EtdmNVUVBMa09JRm16dW5FRmtpMkVuUWozNlY0dkZ5R0hZX1pCOGtnR0I1bHB0OGJrSkNRQ0VJSmJGZWVEb2JaUkVLbXFid0JsLUZHU1NvekRrOUJ3ZXU4QU04NmhuMDZGRGlrZGQ3NTBiVGcyaU5hajF5U3NJNEVHUS1tU2tMWjg0ZGhhN2tiWEdiLWJ4aHo1bzJ1dGxIM3pnZmtPb3VaT1pqMDd6ZGZRT0UyUHJyTmVSaEtVQ3RHS2FBQUhxNmZIQkZmRUVPb2NLSi1KRXdrMGhub3l4Z2taVG5lelVGZlZjVmdoczZWbW41c2dybDRUbUJFa3REang2aFU1QnloYTRWc3Y3emJfZlpCZW1jXzdlZDJFWGtNVlUwTzZuZGlzTllSOG1GalMwejNzZWVNVzU4a2IxYjFpUzRTTnpNV2Y5X2o1dFFBLXhROEw1VE1CUnE2d1dyTThZdmhLemlsRktfclJTTXZlUl9OTzlsMDJZWVU0cmUyM2R3Z3RVME5Dc1RPd295ZDJrczhtM2NGX0k4ay1YaHc1OWt5YWpSZkpBX0VMRnZpZlhuMG5QSlcwaXcyM2d6a0hsN3o2SFg5WU1fYlR6Y3BZSFNKNlV6VEZENmtVamZpSG5ndTJKRkYzY09sVFJHTVNTWEhRbXoyd2JJczVRZXBsTEN2YTJJSWM4Y1YzZkMwVi1KSUtpSkJac29OOU5TR3JYS3VOSTFwQXdqeEZjaFRfek5wYXR5Q3llOWFxcWJpbDNjTVVfel9zZGxMc2lYb21pV3luNEZROUxiajlXUjlkZE10SXR3S0NkdHNlZ2RHdThaWGxObHptTWUzU1h1OUhEQ1VMMlBVRDNHeWtrYm1FMTd0S0toa19oOVk2NmQ3NkUtN2hUdVBocl9LWXo1SjBaU3dVQUVFMGEwUXIyZllmbHVDbHlvQXBNV1RTRHhtVWNwMHJKQ3BsVy1XY2xzUzlxby0wdnNKMEtSUlI5b0ZSelZQTUdoaXZ2amViZzJPc2tRSUUxNkYzUy0ycV9kWTd5QTQ0ZU9pY243LWF4bmR5YlJ6MXNPWVBnLUZibGNOMkd0NXo0ek9WQ0d1MmdTeE5pQkEwbWJKV3hUNzhRcm8ybllxZU41SzMwTG14amNpYnFIS0hNd0tPd2c3TXZMVDcwZ3g2djZEYzFkRlU0enp2R05kSW9udUZpMHQ0aGFRSmFNTWlROEk4LU5HVGt3cFNyTWt1TmRCRFR0YnQxRDAwQ1lSM3JfcW14ZWJvU25tLU9VM3JndzNxRE53TlM5OEhtbzhoaER0TnQ3a2txNFN1RG5RVzREaDNoY19qTWdlZ3prUzlzd0JjU1AxZjRGSE5rMFZXN21pMF91bmxMY2NlMEpnS1FGcnI5Uy12enlpa1ZlM1Q2N1Bud0lOY3dFVHA3cUFOQWdvVkpEb1pLNnNFQy1pT0M1bGkwOFZ0QnpPUmhTUlAtam1lY1BndGZubkljVlI5QTBlMjc2S0ZZWU8zRzFCTjFjcXBCZE5Qa0hESzdXRkdIbzZrUUtUTGQwODdkWVRJYkxvSW5DblBDZ0hmeFlWclAzeTJLYzI2OTg0M1BpZDBWS2F5MnJpeWxYdy1mNnFhTHd1Qk1LZzZ3a0hmQkd0ekh5dDJqLWZmNHpXMmRtellmdVpqWElMOEpvaGpkUjRpUHV0azh2b1F1b2dqVC1vTTIxckMxSWt2MV9yQkdIUi1NaExYQUtTcFpmYkZJXzBvLVA3M25JME9zMl9WRVJpSnd1cWlkQTdYQVhKb3NUWGJXNThaQUI4cGdFZlpmdmt3UGRraF9YZWV0NFJtdWRjWDRkVHlEdG9HTVJSdjJZYm9aQ2pxdDNwaTBFUmlsbUtEc2ptOWJPX0FXWG82V0VqZUY2R1lSOTYyOHBzNmNsV2dWMzlFY0ppVFp5djJvMXdiX0JWWk9xLVVWYVdzbm04bjhOd0RHQm1JckRzemswMEJ4UXVUWURwcXZTZEtmTjZSRUwzMy14Z1REUXBmSklSbGd6eWdya3IyWlVWNzU0WE1oVzBXTkFUNzBfdEltZVdvamVhWUNFLUhybDFsTm90VzZzSlRRWDZCUll3aHhoekdfVU4zZW9Ta2hmN0lkZV9VaW8xRjVYUzZTMEpjelBlamUyM3FhX0tzcVR3eEZJM0NCX0tDdVpyR0dwZ3hYOTBMZ1JnMFYyLUR6Q3N3SUl3RFdTRU8zUS1SOWlidERXMkJFZFhGVG1scGg1bUhPMDdYUmRVN0V0MDZUczdTMHpBUy1JckdocW1Tb05tTGJ2TDdrQkVDMnVMcDlCNVBUZHhBSVBmSlNSTThBR2gtbWRDS0o4RHpLLU8tQkhNWVpYalhURm16emhVZEItSDlrcnR2eUxPMWs2dDItUTNWZ0FMR29PTmJsUm85VVdVazVHaGM4NEJZQkxjVFBxMlRfZ1F3Q0ZSaGFSUmJEOXZMYnhWRFRwRUI2TmpaT3hBcGU1ZHdrR0pINGpXakFBeHdHcU51QXZ0N0s1am5PdVlRR0tQZUZhS3ZyTDYwSEItZE1yUWJYZUwxelJQZXpPWmdsVExvaW1NNGZRUDdfb2FmbFAtX3dJME1mNkpoUWhNZ1VyNGM2dk9DX2pLVFU0REtvS1QxTTFIOVAtRGN1eGRzczhxLVRpOFBOUmlUTUpHcWsyRDZvX3pWZDJ5dGx3VzhQeDB1emd4NllYeXBMUVVVQjBlZWw1Q1VFVkR1ZXZYYWdtZ2RJRWR2YXh6Z18xZGwtQjloZTlfcW1IMU9TMVh2WXpkNF9MdDdNSWZqTVJpMnI2VmFqQXN2VWVuMi1qN003aUFNd2NKd0NRR3RDNG5DZmpXb1dzYXh2bnJYOThMa3RWLWxVQnFBRTFYOGhvT1h4YVk3aktMbkhidm5uZEl1ZWVCYkFfeHUwNnlsZENfa0RaYTFXeE4xMUZzbHNJWWdzcDhteUVZNWNWTnhlcmtmOE80RlhJUkF5MVZPT2tFa3RnMkJHUDVLYzBpYXNuYzl5clhHZXZfYWkzOElOTzZGMTRYTk41Z1hoZ2gxYUl1dXFZYmRkVXhYWFNxSHd5NHl0eFV2RGdqYWNJTDQtMTZ5UkdCWFFDZ2oxOWFCdzNKUmx2bkJoYWZpWEZjYjhUZ1YwM0l3bjU4ZVJzZi1mZExPRTU1LVdXdm1MdmV2UHFTelo4TE5KTnpsclJXWFkyWGxaNml6RUdXUjJPcEp0bjRSM1Z4RE5OQVFmWXc1bGFRNlJfYjV5M09sNTZ1Vk5LLVd4VFF5blFNeHhWQTdnbHFCY3FVaUk5VlZPNWpKWjd2dDJSd0V6ZTU5YktDeG5PY0kySExjWUp0VWE4dGZObk9FbGZkaVU1QVpPcVhxcS1XNVJCcUFsdWlJYTVtN0JOdFJyVWJub1pCODJua2ZFbmVNVXZtR01UcF9TYXczOTVBT01lTXFlYzZaNzRFRHB0UlJYdzlveS1DQmNUd2xaM2lWd0JlTFJhWmFnVlJrLTFkcjY3Z1VYc0RPRElFQi1FQkhmeXZDUjVTT2cwQ0RLOGxHZkhvaHFTQjlCc1Q4eEl1VmZrVDlkeHRZbzM5b2kxbEY2NWZOTmVYTEdIX3U0N1NmVFEtTFdleThtaHJhSmJvaWVwajFfQWE3UWdBamtfZG00VjRuREpsU0I5RklRcXdQWFBEOHZ2eTVUbmZ2MXVqMWI5Yk41VDNlYVVMQjhSTWlNU1JIeGVfZmhGSWxJWWVSWUhEUElieHMzRWdwa0hCV1NxSE01R09KbE9YRmhSQXUzNXMySmJ1Y2ZWVThBeURqX2ZxdjZ5QWJuV2k5THA1RVNJX2ZUVDRManI2S1IwUFRoLTJ6bFRBSmcwaWdMZEh1eDdTVHVuUGNyMjRsOTd4dXNWNXpGNkJJM1l2UzhhOHB3c25IT3FONGtqMGc5cGZzOEEyX0xKdjRWdS1HYkRNZVIxY3hRZmNwSUZPaDB5VDJYR2FrX2VKYll5RnVIWUlOTFJ2bU1neVg5NVJEUFlHSHNRblA3dEQwaVpOaEF1N0pzdlkxV01ZMHpPTzhRZURNUGdEdDhYbkZ1ZVNJQ1did0R3WllvRjlLT3l3NkdLVThHWEpHYXRCQllGYS1wQ3FtMHgyUWtUYVFuZkhGdW9OSzNiN3pJWXA0cFFHbGJhZDFVNkUwWkVwelpjcjV2SXQzWm1vX2t6N2lqWUhNOVhSTERxb3UxQUJNYzBfQkVWbkVQVnJsMHdfOGJPZkhjRlBWbHZKZXExYjl4RGpMV0VMSHVwLWVPQlFmOXlhSHBEZUdJV2d1NDJGLWZNbkRoSGtUZ3RTUk5ueldrcWpDeEZfSUt2MkJCTHpXbno5cVlFbFhIeldtVFphelpjYVJuSlJCTldnMThHNUhnSmtMUlNtWmh6WFJtcVRTTENQNHFYM1dwd2NIUmRTSkVNdDRyWlV1Qjc4VWwxdDVuQmk5cmpremk5YzV6ZTZHTEpNT2g5Y2JEMi1pTzd2S0phZUQ1dFVxLUFFVS1LdFVDYzBsUk9aN0g4R0xLbkpoLVM4a1VrTVl1S0VuUnN5Nmh3VGlkZmJFZjFKSk15Y3dMX2p2dTVfaXZKdkZ6N3dNNWJlZTd0UHgxSHZldGxoZ3dlTFpTZTJ5ZlZpYm9haDFtVjNINy1XNHMyQloxZzkwcFVSMHZ2ZmFselBMcUZja1lMN3l5WTZuUUR4by1VaGxJbFdZWUNzV0o4eUM1cFlHVlZPemlhVHZiaXRzSTZrT3pmWnBtUHhtZ2lfejBWM010cHRJbEJaSy1DM3Z0d290WDhpc2VZa1NhWlJDRlh4N0ZhbzdyQ3MwLWtQanQyVVE3Zjh3X2NhbzdtVXl1M2ZIY19Cd2c0cTVFRzBMRXBxZ0Q4RG5lQ0hVemJqaUlBOEVfMkV1azRFajRZMm1WQndlVU5XVXRHM21MME9wMW02M3BoT3FIWVVoY09ha3JBdjd4c3UwMTQ1UHQxWVlUVEVwU2dDdTFmbUpVbmhHVEFlSDQwTjI0Z3N4R25iUGc3czhDTnVmaHpxdUxvN2tNamV2U2czSmZOMXlKUVhKekNCVGYwSlJHVHgzZklsdFRUZlk1alVUYVZSREFESVc5S1BTNmt1WFU4T2hxOWl1aWVQWF9ONjJyZVJ1SWZIdzBadE1NN0hydE1FVm40MjNWaWkzYlhCbWRRVTlRYUZmTkx6NWptZEEzSkxQU0t5S1dqYzBxZmxqRWk4RUZYbXotX0Y3cXZIbDFIbFZQcEZabi1QSlAxWTNUY012dTYwRHJGOW85YTh4Y1ZpV1NRZFZ4TlE1bUdGblF0S1VVajdfWnhLRmhsV3lkaVEzR1RLOU5nYXB5M3QwWjBQcjU1dGNYQ0U2QU9UXy04aV9JMWhncnhPZFRDQ2dMQnBNeUVGMm10LWpCS3ByRUtjNTlVY0RLdm51MWxReEZtS3dkdkNRajE4emdPU1BPQ0FJRGpRT2ZMMDZydURQdzdhYnBfaU15OFVRaklYUGNmMDd6MHJKcnowbmpPVzYzX05mejdBRG1nMnJkNmtqb2dJOFFpVjVlb1Bmdmp6YkQ1cTJVdkx1aTZfT3JwdXJKbEt0UnpyeGEwaGpuRnBsdy13U0hmTERYRG44N3RDZDJTMnRXdDlKejF4WXZQSVJuMUJOTms2SEt2cTdpY3BoZTYxQVJkSHZKQ1FQc2otdzBoVGR4VVpJR0tCZXR6LUE4aFptX2xTX2V5VjdrZ3NrVzlPRmNSdEI3MmNuZ3Y2U3dmblJudkhaTzhpZmV3U29Tb0RISEFFTkdSMTZ3YWl0Tzg1Q05XZXZMZUZIRGJsNlFIZS1JSkg0Vzlac19zMWN6MlRnR0Q2ZkFGUFVFTk5QbVI2bDJNR0dicFlSallpRk1zUkRUWHhqeGNyZWIwWXhKVFZYajc1ZDlySTd3ZDhYR0o4VDRYNDZmdnUtd0VMWVd1bHhmREVNTWpyU1FpMDNtcE8zSEFPdzlyQnhvVF9TX0d4RXJBekRFM2RPYTM5VEJlaE1XNXFJSGVUWjBKLTRsN21MZUdTajNIdWpoNS1Ddzh2UEh1dVZrQWF4WHN6b1VyeDVQYVE1NjNxTGp5S2NpMVA2UmN3QVd0UTRaNWdfbUJRejFTZjJjVnlwLWNPUzNpQlIyOGtoRWdGbUg2RXREQmRpUWtiMnZuZDZCWHVJa1h3MGNXUkZldWVLX19pWDNLUEpxVW43VEhLTEVhbWtRSHZ3dVVsZVJ6Yk9aMUJWLXk4SHFYdkU3ZTROcFVFbGw2SDc2MWV2VzlHUnR2bjhUQjFhVlN0NlVOaVJSLTdHby1zTXVMNzN5Q3puMHFYME04SVhzUnotVV9LNDFFSExnT1djcVhSRl95TDN3aXFxREktdnZEY2F4OHVtN1Rhb0lreEFzVTFJTW1MQi1PMGJ4VUUzMF9QVmxmV0sybm9XaFdScmg4TElESE01YTBlZDliVlg5QzFSNzA5R2lOYzlNRW1ERVdNODZ2ZEFEOEtmSzFibHdPRnUzLXpSQ25waFppXzQyMVBqV1MtVC1USU96Mm1hODZPZ2FWZkFQSGFSRmNtckV2RGs1SmVTZmhPdUIyZGJPbm5lY0VmdXUwU2lwWkU1UUlydHVJS2wxOHBXMTNKLTFPeVNzOTFZaW03MDQ5dV91QmkwZjU5TlR1RnpQZ2pOZGpWYnBIRlZNZ0JNRWdBWl9nYVJtUmhTRzMxUUdkUlRBU0VjOVhVRHpVM0o2SWFvTEVMNC15VnRhVUE1TXRCYVFwWE1Fc1prYWJlUm5haEpIWTVtZWV3NC1qekMxZjBsTkliTzd0c1d2Q3RFNGNGcnptZlNCLVVoSEJTUmNSYVJwZ053Z0tFU2ZWc3FpN3NiVGRQeGNUN3Y0YVFDeHJnWTgzRUFJZHZmaXB1UWs0NTduTTZsSVJLSXhsM2VBQUpkNGpqcWQ0X0FvZUU1RGIyZ0ZIbGxJQUlDRU1JRllfeGNYN0xERFNBMmkzZWRnWXRiLTZrVnhaUjdZOHRPV3B5SmFxempvR2FVUE9FYTFzVkNTdzQ2MEdwcGJVZnljeFZZS0pkNlNTYm5WMjRrMWxqSmx1UEhtU1JvMFU2UUFTWjZaLW9YOVEweldPTWF0b3ZpNzRodjVsb2JXRXJ4M2lNdXhjNW1tc1BvczR5eDhIN1ZQR1cyRF9PdWV5S1cwREhwTmpLbXRLS1JzSlNpaEh1RV9RdmZYTVZsb1hURnVKc2gxeERZMUJwWmJFb1E0UERmancwNnZFWkU0TW1HbEJRUE1vV0lxUDNMYXVpelBqZE5LZE9VZG50SXBzWG9ERjlTZnRWR1BMVl9VazNfSm5HbEVjMENudHRqY3owOU1OVmJiWDRPRU5tUVRaaGQwZnBkX3R3N0RsQmlKLWNTQjBhaTNXdzh6dWRJdm12dGZFcm1IdFl1UjAxTmQ0V09SOTM4bVFxSkxoU0ZDbzNHVzJ4eUwzOGg4Rk5jdkh0c3RSZ1VfTy1XcENweDlKZWxKeEI1d3VId2ZMdlpObmpZeU5fQjNvWUhVVjlCeUROV0RwV3FhSkljTlE3VXBkQ2lUVldCVDl2cm5BdzRuQzVfSDQxM2t1SEllZjZYTHhoRGh6aC1SaVUwRVVlSEhuYUFocjVsLVE0TktMbjVyWWJZQjJhZkpxVWJSZnZVLVRCejRHRUM2ekR4TXBSQU5JdV9iOVBSNUlvTEo1bFdlcUdveGxNaFdWQlMwWk13ZEFLUk9TME1JNjNfVVQzVVNGUkd3RXdNQU93OUJpX01UdnJHMHRRaHQ3cm1IWjk3ODBRRHdHMk1tOG9XRFhBS0FTSlYzX0EzVGJLOWxBMUJHUmtuSUh4a1U2X080aTZzMmlUajY0WmVEdjVHM2FsTDd0dUFXdnJCbkVDaDRva1djUTRYR0tuM1FfbHVxMVZ5X3RWYk5oN0JwcG5mRFJwVTY3QjJVQ0x1T0tscVNUWWVqNjhPZlliTF9OcUxpY0Rpc3JTY1ZiNnlSRzUyOXdKWVNxVHhMQVdLV2NUWU1lRDFtUlI2aEwxcWlKbVh1dkVCMDdqemtRbkcxTUpGWVE4aTFQZnBxOEQtZ0twWUl0X1A4T3Z2YmhQV0xDN21weUhNSkNjazV3T1p0YW4xWVdZYkNld1NlNlZOWmtVSDY5RnZfbVNOV25nbnJwV1A1NlplSFRUMzQtS1ljQ09sZWUyTDItaldDcnhIamIwaTE4eFhCeVFNd21HOUliN2t6a2hPZS0wNm5WNTNNVVRveE5yV1gtNUdUZ1VCdE1PMVppdUR2Vy01SEZaNW1IZjgtTVhldVNVVk9oVjVGT2RnVkhWckhFMk43SGxrbXp2UUFldWhlQlkyanZnLTQ2aVNoNWctMG1EOTVRbG52OXlLa1llWmNnYi1RSU1sQ2NDZk9QZnpUNmVjejRQZElveURqTGhMR0xDOFpqSWZxSV9LdkxKYTJGOS1sNUg0d05NMDB6dHpvNlN2VE5TWnNQbjdtRlhrQ2tjNld6aWpuVi1NYWRyZ08tUUt0SGdZWGVBaU5DSnAxTGMxVTVCemxacUNodUNmbzJfTjlib3lvaGNDaTU4SkhQMEg4clVOUjd1VEVrLUdDRHlwQkpuYU16V09xcWtNMWY1YVZYbWZGeHZrRzdIMHVOT1N3bVZtRV9RV1ZKbmwxUlNUTEF5eXc2QlYtOGZBUVd3ZEl2TVl5clh4bk5GLVgyOWxPWG5uSWhLWkZMNm9KMGg1Zy1TVmZEZDljbVdYZmFfYVpsUXRqQk5sbm8xMGVLXy15TG5nbDFJSjRLOTY2WktuX0dNcHZaXzNzWC1pVzlReFREb1ZGci1OOGJXdHJ6N1RueVJMSGlGNWFlODJFeWtxalVCb2swdHVnd1JMWnptbFdKVVI4YktWejE5NURTUW9jaFJvNUx5cGRnRTRvalNQX2xGVzJFc0I4V2RsQTFaZjFIV3gxc3FiT1pVN2NxUExtQnV2emgtVUktYVNrUnRCX2hxdk1qd1A4a3BGamtPSlctek5zTFNqZU1mcEFqdWlpOUE2VUh0S2hpc1VTNWlmX21ZR0tJTXdkLXFqdVlEVE5iNEhVaG5Hb2F0V3JPaVdCZE1KVzZRcFJ5QnNKSWl5YWR2MjVod2QxSG9kaUVpN09tS1JQOWVwaHZORFNsVHIwb05peHlvRjVRcHhRNkt0NUFMOWgya2dJQktyZldoSmVHcm52U0xaSEJYYTZPSFZfMWNDX1VteXJGV1JJem1SMnZQX1hqYkhPUnBqeVhkcHkwdmpNQmlvMHdTa001Zm96WC13d3FUNVR0RWRtMXBIc2ZaQjR1UFE5WHpxTXZVSEd1UmlOeDZtbXZDT1dBb2tienp4dHEtQXRCZFBDVHRxYm9yTy01SVdZQzZyRUVLUy1HbldSRXFuaTNILWZBNE1WVkhZODBEZXA2RXFNeGdVMVhNVTQ2cy1KWmxIVW1wcGFhQkI1V0VSaVo2aEhiMWpsR3ZwRmI1NVRONUV6U0VOa2E4YXVqSzBBeHgwMG94YXQ5OTEzUFA2VUNoekJlM0ZMMUlnUElITmZHNVMzOHRvTlAtTDQ5ZENPT2RRY3UzNl9JU051ZGdnaWhxYjlwdjhvRV9wTFVEMGtWMzR6ZGZWa0xldDFfeFFDYTE5bkwwVUJtU3RPUlZPRE52VGhNeVRKZXExQ0daZThZUHFPQW9PZmY4dGd0Y1VaWGZ6M1BBYWI4ajhYRVp6V0VEcWxncXNYdVVkaGdPVTd6RjFINHZvbHlzcWo1M3RKOG1NWmdhaGIzY0ppVnhhYUVwZTdoYVI3QmgwQURzQmNoOWRraWFjNFAtZ3g3ekFVRF9sNzN0bnMxU0pJQ2haTEItbkVwX1pQaVVfdXU4UFF3TDBIYVJxdV9CTlE2c1JhcmVfZnR1dTlQYzhJREk5XzdPZ2tBVDV6N2xFeGFvOGp6N0xmZ1k4bHAxYldYSTBOSTkyUEFYakpLSXc3ZU5SRlhKeHlqNnc3X1hSekU4ZjNNYkpsRy03YlVObjZBVHFBcUFkcW00YjdoaEhjMzhIQ0dnTWU1aWtTeE1EY0lVbGxWOW44RExILUNuUUM5bEVnd2Z6Mlh4RURqM0hrVGE2VDJUWmxUaER3ajRfc2Rmc3VZdW9FblJlTG93VHBwLS11NEVFWm9oODJoekwxZnVGcUtwWWVZQThCOGo3QnlMdUtiaG1xTHJfTzVyMm8zLVpWQ0lYcndzRzNZdmMzNVliSTZjcmYzbV9MS1BsZV9CRTBvdS01MW80SmRBTE5LQS1ZYUdLdkxCUTExZklJTmp4bXFnWVBBekpnZmJyZ3JLbXdoczF1ZHNMUUdsUE40TUFBZ0xRY2FQcmhXZU1RUU1wNHZmZER4X1I4a2R5cDhQUGJORm9kbXZ3NlNDczRkMS02c3RVcTZwOUItR1Fnc3RRbXNZSlFKeEpLUS1JTTZnR1h1eVZzOGotNWpmYzJpd3BRczJzY3FRMlJIck12QUZiZ0F4REFWeklxY20tam04OVRKUi1oSXo0Qmd3WHRlLUdHWEVBN0Z1b0dVd0VzeFVCcmI0Y2pxQjZLYmphM2NZLUxRR1pnZGQ2Y2JpekRPWlhzX2I0bXV5X0xvejVGR1ZFdFBxSnRHZndKSTlCY21WNkgyRDNyd014UVp2R0RtVnRza1NBNU1vTlh2d0tVeHQ2RG9xODktRVNkVjlyZWZuT3hvc1BUeDBFMzdrSVBrekdtdG45WFBGTm16WjJHU1dRT1l2cXpzVl9qVmkyWGN1ejdrTktyRVNVSGdnUEdCTlhWc0NZVWxiWEtFSDlxdENreHRndmVFVW5jSjZmSVc1cFJ5MUN5Q0dMR3FOZTFaX3h4LXRtaWNzLWVvWjdWdTE1ZXNpc0V0TEt6UnNjZ2xUTzdtR0JZdnVBdUNtR3p2eTZzZ0EwTlRYSlZVYmc2al9sRklPa0hGcDdEc09EVWZLR2JSTU56azhfbkNaWmJoZHFVWjh4UWdWYnJKNHJrckQyWmRuYVJkWU14ZENVNkJ4Z2x3SzlwQ3RxUUFMOURFOFRrdHVIQnpqNWhuWXJocXR2S0h6M1MyQnRyR01Dc0VfOEtYWHNwTG1ST1NPM3BoUE13T0hJdnMtM0lSdjZMVzl3aDQ3aGxJSVZjSVUzSWRfUlBuNmcwZlZwQ0x2Ymw2cThwWWMyTWxQSW1QMlZnaE84QTYxZ24ybHZmY2w1aGJoV2FQQVpvaTdrWW9XdWhCUWw0bm9JclBORFRGNlJqaDZGSVduME1hbS1uaW1nSmk0eWlIdGVDNWZVVjlLcEFuZU90cHF2RHJsc25ReXhrZy1INTZIenphQnNyZVlJeG1sMWNBLTVtQ1k5RTlBRVo5X0ZHWFlkbXNBeGRvQXVKbjBMX2JodjRIa3U3bzJQVVpDa0JMV0hYelJ5TG9BbXVXelpjZVZmY1NZSFZaOEtZMHlhZnFHXzI1MHZKLS1lUDU2VjByNXA3TVRqalNTVDJ6S1lFMGZfQnBPN1lMZzZBUzZCS2lPYmdubDMtNWhDTHEyNzRvemQzU2ZxUGJFYWxTbUdDQjg3OUU0T2Z3NjM2Nm1tVUR4b25CNmtnMENDVzRHWkRZcHNwOEN6Z2tCTmVOWXk2NGQ0SjVNMzFoamdPcUdmbUVrS2RxN0FXTzQzYW5wQ0o0TUVCZXBDRTczX0hJd2xsazVwQm5nai0yQTBhclAtOUl5aFV2Mlo0UEF5YTdXZDlQbUwxdWFsbXBDYmNGMWh4RkNLQkt3Tm1DZ2xSWjc2azRwNTVoOTlmRHRycjB2d0Jjc3lOTkJDMXJDcndIS3pWb0hnNXJnYXRVSjBKa3pOMDVod1pQUVAzaEtULXhPVDJKSHNURGRTZmdzWVJNUkplY2YyUlVPbHR0M0JBVTJndGpMR3c4RHFlSFVUY3dVWDFRUWx5RTVNVi1IRFdYV2VGS1NvUi13bXpndlgtM0twTktnZFFEb05GVzRhYkFKclI5T3FaQVcydWZZa1VZel94YmlKR1J2MG5wWU1TbkJhZ3BvVmxtU1EwbG5iYWhzd3N3TWUzTjBxRVc1V2xSbm1GMVBZeUo4OW1aaGhxVUhPQkFaTE1SSmdRMXlpTk4zNTQ4VTFfMkg0MDhQWWxMQzFYS1FGcWFIVDRwWlpSVXNqdGN4Y3JGSC14aHdKN3JueV9CcVk4cEZGLVlrWEU2TEs1TDRWU01LWDdZY1FYZnIzYm9uM3JTVWVPOUhDOHRRZ0hGRElsajcyVVltVk43S2xGb2ZiUTBnMFkxWGMwX1A0TkNaTW13S0hmeWJDc3NXQVhjUmdMaDRjb1Y0T2p4RFBGTkJoT0J5RlVEZzZiaU10bmV3V3FEclRtRVpCcUJBS1Q4akxTU2lnZVpLd0ZiWXVEV2UtYUpjdU5MeVRyU2pyWnhkVTZwTUUwUFhxWnQyeVZHYjZ0TjY1TGVJbjAyM0FiNlE2d29paUxUWEpCd3dmZjdvc3MwN1lJTnZBdndlOUx6TGh6LU83NVlQemFIeUhZOE1xbTRjWDZLSGJ4Yml1Q3o5TzNTYURLbHVKaGpQdnctOTJfUFl3NjQ0WGQtcHlzLXpOQ0JYQVhGVEFmTHBnMkI0d2FMck9uTnhHN29QSXpOaXktVEVLR0pkS2dCekc1Mmo2NXpCQkhsVHFFeExfUHB1eUdwRGVKN3BTVDFiaXNXdHRJZURScTdiM01Ea0tmTU9pc09SUmthbFA2ZmlkM0NRYzkzTmd0dU1sUDU3TTFyeGlzNEJmLXhWVVJnR3VLeHlLaExkc29rdmNnXzFETFdmQTcxaDdtd19PdFpHM2NZN29NbUstN0MtbXVheHNmZ2dkWG90LUktcllmdnQwbjZQYTlJLW9sajU4Y1JqeHZDYTYzVUlOem00NE1ZWURUUHBlUGZZcUthbkp6ZmxtV01DQmVwSlFidzlBbTBKYWFfU1BWZHVJLTBuTm9rbXpuWW02VDJyaVB3d0pGb1VGckQyVTRzZ2djV1M1Qlk4R1dzZW1lV1dlN2k2XzZfTkZ0NFd0djBjY1MyNzNsUHdMS3ZwV2JFekE0djgzYld6X1JodV9KVk5saE9JVUdNMDZ5bHF5TEpJdEhLdlliU09tekxZVWZ0dWRTeE43V1MzZm41a0gzckNHQ084am5sS2h1Y0JudlUwcE41Z0J5ZzhHdElxdm1reW8tRTlaZXRjaXNtQXd1ZlJ2OEZWb3dSNkItOThaaHNjNXo0OVpGOWQ3UFRqbEcyYmc3bFpSNWxFOXF3bkZaa0Vwb21KLWFFc0ROZl81a2d5ZkRtck1aWDNpYy1SRlZGai13QXYxMkdUNEJSTlZJbmthUnNXX2hZZDZUSnVRZVlfN2hMNVVndlBOMmNDcUlFWUdMRmF1RUxKeU9RZ1BObXN6MkIzNVRNY0hNdXhvVU9fbEUyNHpOQUtTaDNOUUt6dXRZUVFFenBlZTFsczV3MlIzWXFQb3l2aHYtMGVPQzNpTTNMSHdmT1pFMnV4dDZxSVlCRk1IWVBrQW1zNFVGVmlmU2VNckhpV3BoNHRMUnFWMXdMbWk2OGpoRUhpdWFqNjJoU0xINkdPdzlXeXctaXFka1YwdnpkYl9FMGtEZmtEd2tBSjFiMnlXcHJVQVJxMi1qb05ac2toOFR1aVQ3bzRQTFNNd1F1c0VmWlZ5RDVMTFV4TnB6bDMwSDloYTh5bUM3bnFpQko2dXlmRTRERzFlT01obV9JeG93eFZZNDRRa3pqeVl4RXQ1N1FHc0cwb01IZ0lpMUFjQ0Q0UE1FU3lyRks4aUVSR2xkME8xanhQTGJ2Y3VPei1aMmtybmhYNDdYeS1BN0Q4d0hmdmN2dl91TzRQakd5eG40Y21WazFhdGt1S3lkeFNZUkNTVDRtRmhsNnNFU2pJVjFCNE40S0dMTDVWQXdXWVFJbTBvREQzaHJub3VwTHkxdERQbEVncUxYZEc0ekdrV21CMzNxYkwxTDlBTGtpQWU2SEx2Ny1hTzA5bThoNHBsTFoxczBXZTVMZkxrRkZDa0x2UmJnRExVTU0yajhXVThQQVo5ZmJaa1hINFJ1QXVhaHZtbEdaTUQ1ODNkUlJRZGNCaWU2c1VTQi1iOThIT1NNcGM4UlVINmZlRlJlN3JIRW5vUWN3VzdTSHU1bk1tdENzSC15Y1lkbmpkZGt2bG5TRWZKc1RPRm9wZTR0Y0Z5RjBTQ1ZZeFFQRTRkaGdncmFITEo2M0NESnNvOUYyUG1UMEgwc2ZRb3JfYk4wU2toLXlpdTlPXzRHUTdERFZMUTRJYlNQeUthVlZjcnNKT21xZ0ZoQUJTWmk3Wk1HajBGMkx0WDhTVWJMRV9LQjJLRzZaeEpHdkFxTnphUkw0SHV0bjVtaEVBV1JVSzhuRDdNM3dRZTVVTUJrTlpqeHFzUWZ4cGh1SnRxUkRXSzZmdnJ1bVNMb1ZqRC1sbzFQQmYyVnRIbmlkSTRkR2EtQ091UWxuNm96RW9nN0x4NUlIRUR1YVNJbzFZWThGaElLZVZRNmpoZjFJWnJEY24ydEJkbVdHN0Vnc1hzcWV4VnZFUWo2SFoxVzRkZmpyWjQ4NUkxaXR4YXlxb2g1bEVodWlOU3pFekg5aE5nTXJaM3pIbDVaVUhhYV9SZ05XUEdsaGU1MjhRYm1rbHlub3R0dmpqS3JVUVNuWHJ2QmhVekNwRWdTRi1LQjNFTHlMYjZKVDdhNHYxX2FrYnJJZUZMV2JNa3B1bmdwSFowVTBCb0RmR0F2d29iNlpBalhSN0x1MUItdXZYaWtDbjFnQ0lmSEJjM29SakdNSmhyaVVoaVpMamVaQ0ZEaC1sVTBhWHEwVVoxRHg2bGZ0bWNEd3RlMExHYXRkY1RMendYem1mdlBJWTdtWmswTE9VUmpfNE5rdEc1ZkVYMEU0ZlNrNXg2a0R2QTV1M2dNNlF5bXVXSDZ6d3JabGxGdHVZbUs2c3psZmlHZXkyY19TVjZBWFF3MGtpa3FrR0c0NWtaVzBKRE9xT01IeDFyNV9IdWtpX1BESWNVeDhxNkx2US1Od3cxZnVUeTlfMEJ0aWdLbUxudGNwR3c2cWhmTzZhc3NHb1hreEs4Q0ZkbmJFRTQ4MGxVMTJneEhlRVZ6d3Z2LUVlWEtHOEJsR2RlbnV1encwNlMtM2N4UW1sLWlxcUxjUVRfRDdrVWZvMVFSUGl5NXg1SGpieWdVMXZvQzdHTmxHQnVWWThhY3BfcnJVT1plSWp6dzRMZDZMZlhraTBna2lWZFVIZFZHNUs0TEpCdmIyb0N1eW91OHZEdWx6UWlGVmI0YzlnYl80SDRxZDBEUmRGNVc3MXppWWtXOTY4VGJlQ01sTnk1bmoteWRWMGlFc3phajRIdWxWa2piX183cWJJSThfeWMyU1d4UXMzN2JlMVpWY3VNWl9NQlVzam1RLTc5WUV3dzE5QVRhY3hzY01kX0xsVlZlVW9QZHZXOVA0Qmh1TVEwRlJFTU5JcUQtOFlTOXlaeEdXdFpFRWN3eDNKVFIzRFBTMlNCMlJfXy1pYjRZX1ZBMzhXVWhNTHh4YlVfV0VVWmlGMTd4QmhkdGoxalBVTU1SbUJDT2RtdjE0WkZ1bDFFZEdnU29DWkFvYm9tTENQSS04TzJUR0RxX0k5UndvRS16OFVPSEFpTDdWaGkyREdXdTNfa1ZTZUc0dHN5VDZkT2hGODllLTRubFBNTEREUXFDelJ3RV92cVZqZzg4QVBzYU5VNGI0RHhfdlBqN3NYN3VhaDNWcEJzN0NBOTI3RUlwRDZWdUNKOExJSjBVdVRxcXVhWGFhQmk1dWZwMm0xQTYzZkNZZHBHVGx5aGtNR3lPV1dENlg1UUxtejNzbjhpeDJPRnZkYjVvcEo5ZDhLTkFxMlhqY25CWjN6ZVhRSmFGQ2lCRUNKRlJZaXJpTEF5QW0zR2s5VjYtUmVodDNRREJIX0pvc3puc1RYd1FWMG04S2xUbXN5RzNfXzZqMU13aVF6NUtGbGVGRFl6R29seV91Q3daWWxyMjlQS1pDOS1QdlhNU0tjZ1lQWDQ5RVhBLXljTXZDbTFEYlFheDZodVIxZUVvWHJrcW1aVGc1amZZWks0RXBQdzZ5dGU3Ul8zaVRBUHprVUw2dnVFaHJfRWRWWHBnckE1Mk9yODN1ZG1LNDF3UW8zbUFrZnQwQjQyaTRtaGpWY3o0c0MzczZabE1tWkJodzF5WlZDWEEtR1A2U3dNZjdva2l1SEFrWGFlams0SEF0T3paR1Y3WGhDYjJvRnZFWlJZMm81WHZCZXdrY3hBY1JZLXVVcktoeEs2dVhfd0xFZDRQTnhNSC0wUzhqZlVkUFJuQkNGNDBPbnVaNWM5bnFzR3Q2UEFiN0lueWlIaWFhN1lGZ0szWFUxRWprUHQ5MExLTHVLdnN3RTN6OUhJN0tLak5wQnZOZGYzWXRDVlgwTnlSeUZQalpHeFNUZjdiVGtjNnk1WDVhdEhtZ1BqTzFNV1d3aDRjWkxpU3hMOTJ1MEYwU2tFYVRicE9Ickk3X2JQNURXcHhaM0VDRzhfanVpMnVRTGpJUUpEdlNoUUJnYWN1YU5ENUV3Vm9ndG5kNmZxTll2N0Y5M1dYbXNZOEx6akR3cHJYVU16TVpEWVZXZDROR0ZQNFM0U3k3NEwzSlc4bEFCTXZYMUJfUjBjOWxQXzhqeUNzMTl5UG1FNEdTSVFGZVNRaFpTelNuZWpQZzJ0cWFnaTRBY01vMFFURV80MWNNUUZBR0dReE1mMmd5Vk1aYjRYMTBrdTg0b1M1Y1pXSVlyOHlIdkVpMU1ibFpUVmdKWFJha1NRMEl4bXBuWjNOWEFmMmlPWFNhckJzZ1RLQllrcG9yMjNaT3BWYlJoWUJBc3l1RW10SWVoZmtvMDNxNnA5YklfRk5NVHpWT2t3b0NnMXU3UFBlMjVYWUJ1aVlMOUx1MGI4U21TUkFwR3VodEJqdmJ3ME1ZSTMtWDBaZVBnNDAtLXRFZzh0QTNhdjBlNFBJR254MkNEYmFmN3hEcHJwbDEyOGd0WGRjSnN0aF9tY09iNlFrVl9wM0d1TWhkMEZpdlgxenRTdDh1N252Ml9adEpnbGtaWm9sR25wYk9QWkhBYTZjMXM5clZaUHVQMV9zNm82TUl3MWdRQ0FNdTEwbHZlbjNXMVBxNnZVVUJrYVIzbWdIRVRIQjdienpZUmc5ZGFhN1dMMGhFdVZINTd6NU9RNEVnQjI0TWQzT280NDVwTDdySTB6TmlVUm53U0d6YlROVno0TkM2bzFYZTV4bUpmNURhRUtPSFhUYlRBT2w4TEhlamdfRkdjY0xoTHpxSGZFOWk1ZVNIQWdoWUlwWXFZLWxxZTNyVXhYem1hSjIyd1k5WFQ3c09TNmhQNnZ4ck42VWZnYkJUQzE2TTFCSjZQVVFlVFltNjlyNzlYWjR1S3g4aWVQVHZVbDl6MTZQcUQxWVhvNFh5emF3dXNpd2szQlduOThSLTJrelhpc0ZOVWZFdXRRU0VWc0FkcDAwVmJqa2l4eG13VG91XzlYTklZYjMtb1lCaUlxZXJHUWNCMFI2Q3lCMFZkWnVSUEF2U3JLSVN1c0JjQTJUWnlJdTNSODRJLVR0MExJTHhnSHdVZURaaHQ5b2llRHVmNjZKVm1oV0toYVV0OXp6bXZZeTMyQk5GdEh2ZEk3X1hQYTF4UlVsSHUxNTNnMTB1bUtadVBBX0tsZ2NQTHEwVWE4dTl5MUJVUG9OTkNuZ2xjdFVrX0NqUFk5NjE4YUVCcmhCRnowODZmZmJVUGxnZHdrOEhNTnBCZExDRlZtc2FMWDNUQjJHa1JDZE9aOVNkanF2elp5ZUpsSFQ5WklNckdQTm1qTTdnbTdkbXI3S1N4MDNBc2N4ZnF2NjNkWjIyUjBKdzlFZHM4bHJMOW14QWRkZTFlMF9pUnhUZi1vbjRjRGJNY0pvdkIyWE54Ml9BdXlDMG5DX2Jyb3paNjRZM3hxWDVRY2Q0bU5ONUNOTTM5Q19nRlRCcmZxYXE5MnlReE1iYXlsOURqc2lEVks2V0JOa3ppQU92dUlKc25FMW1PTFc3bExNUEo5d3IzX2xPdkpJeHNPdXl3TENNWHRNdHdraVlkMjNUeXYwdzl2S3RxVnVjY0d5S2xiV2d2U3l2ZDNIbkV4T2lITFJqNE94eHVrX0wySzRsS0o5YXA0R293UV91Z2dUUHI2d05NRlhCVnBWeUlLSzNsZU05aXZkT0pNeUhRQkFNcVBxSVhmbU9RWnpiejFQN200aWhDcEYwOHc1T3NtcE5nN2hXRHNiYnliUzdxVHV2VnNhT0JmeVBHV0lkampEY3FFdVlIN1F0YV9uWERlWTFrdEhVTHlJd2Z5MW5wRE9MbnQzOW5hYWlaaU1OenpZVjc5ajdEX3BKNmR6S3JUdC1CN202Y2ZsazhyaUxhNWNaeGZydzNDVDNZZGdmc0hST0E5SVotUVh6a1FrR2Q2eXdsZGRvTmV6Yk5uMjRzWWRxNUdpbktCTVlzbi1zZThEOXFLMFQ2MGJud005ZUt3WjFnN0djWlpOTHNPUlNuVUEzWmRDZzYwb3NBZkw4NXg5Z0UxMmlLYTBWbF9KY1V6cjFZSWFRVC1HQmkyWjF0ZV9zZ19ORXZVbVI0LXFLcng5TzRydTZWSzFiZXZRRnAxWmw2WTJ3MVJzckVsQWlyRXpBUFpoc0FkLUt3Q3NVbERzZkJQVmJSOERSMVR2ajZaOHBCc0ZEUjFlLVpzWGtaclJVQlZibGdkcl9sdHFoeXdDTFFDRzRINFpxaEVJVjhJSlF1aEtNd0xuYU5hZmdtd1JRQ09WaVJFMjhNYnJaNmdiVVFRdkhKaDdvdnZvOWs2b3NwOHhjVDBEaVhFSnBqaTQzX25NZWVfbnhiMXdKMU1KSDFVZ0U1dXNYU1FFWXpVd2hzRjVCRW9XNDlmTVlDaXlGV2VYbjl6UWpaU1dJMjRVY2gwMW5KME1HQWRuLWJkZDJZOWJpYVgzbnlmcnNhWXNmem1ISVlUT0JfOGRqV2lGUlIzbEI1Q25fNGdMM3UxYXNqWDNaeUp3cDNYUWVIaEdDdVQwQUFxNjYzQ0tLLXE0YXQ5R0dmdXZGQXBVeFVBeGVvbndXQnhQSktESGpNZDJIc2FoZWc5UFl0S2EzSHV6RnZLZnlER0dnNkRiVEMtX0NQLXBvQnRwYWItQ05Danl0S3JDdGl6Y0JHaDE0cmlrR1pheGczWVljU1dYSU9uNUw3dDdmTmlveDVQXzNzWEk2U3dDOXhmcG1PeDVnbjhsRjBYR2dCdE01dllxVFdlbUdjS2Eyd1ZyeVEwUVpSaXZDTjFmS1o2MWc2Uk45cTVLanh0MUxERE9weDJReFkxbE1ZNU1aNDR1aVQ5NE5hc01DZmRORkwzelY3d3VZVGJHblhfc0VOM1FBaFZ4YU5OS0NoZlRYeU1Qc0ZfWEk4VUJxVHloWWVFYlFEVzg0YXJVbXZ4NkdLNloxNTV4djlOWlVFcGpXaXo3a2hKa0UwXzNRakpKZ2doc0g0RjgyU0hiVmRDTERLNmdtejF3ZEhzMk4tX3RmR3FObTdUOGxDbmp2Sy1Qekc3dHczWGRSYk1CRHF6dDZYR2dSdWhfZGZIcEd4ZGtrM0hKMi1tdjlwN25rVGNSYndwcEJaUGZpR0tVMjJ2djZybmdIOVlKd1AzWEdON21YNkZvaVpGVElwNHJLSTVtZk9FejN0RU5UbzZ1b1dnX0p3YlRaeEVsLUdQSWxzMUxoRUVoVDU1UmpLZzNkd3VhSVB1aHZSbDB3cGIwcFBHR3FnNHB2dFhmdjNKSEd6SHFCTVJIR3VUblZXZWlJdTczbHhOZDJWdldpM2Z0X3YwSW92ZG1lNkJtUmg0ZDlZX01sQzJhMzlvUmd4OGZuMlExcEdTUG5kTGRxVWJpRUxYS2thczlWUnEwNzgzVExnWFg1UE50dWhFR05kaGtvcm1mWm41MENPUU90RDVGR2FTeC0tXzRDdERhSTNJRjE1V1NNQy1odUFyem9hSjhMc3JpV3lzZFFESG9BaThwNTdBbW95Nm9WQnRLaThNc1cyYVYteVlUTks4T1F5WDk2VVI3TGx2M2pvVENMUFhQVGk2QVdmRE5LdjVqUW1rbHFMVmdDaW9hQjZYU2ZHc2pKb0pXejc5RzVFMm0yVm8wcUdkbDMyRFIwLTBSZFZQMEVNYks1SUFmR09nVWtQcnhLNXpkS0lacV8xR2JJbGQ3N2ZpNGltQjl3RUJ4LV9iRFlnMUYwLXhGTFpuX1VoWlpMV1pYN2RSXzNEMUh3NmhZN1p6QTdUZl9vS0NhNHJreUVMR0o2eFRjcXNYMUFkRThQTFJXdVc2QTZybzNYc0cxaXVFOE9sT3hHUHpMRWZvWWl3U1QxZF9kWUhuVy1hTG1pVWxzWHY1MzRCRE8tdzh0eTA2Rm85WGs0S1J5aGlSNUlrQmQ3dUlnMy1FM2x1NXlTRmMzWmRnMVJKNFY5LUdCUHNQVno1emI2TnJKTUdOR2RKMWxzQ3NCZl8tQ1pWQm12S3piUXc4WU1UTjg5dklCZEpxcVpDZFJYZi15UU05cTY1eTdpQnVxTG9FQVcxTi0tY0JiX05sUHpCWHhkRmtjbnNoeG9pNUtURGo3emoxdlQ3SGNuQzVEU1RTMDRvcF9DTkxFcHRBZ053dTJDcHJKV3k5UVdUd09MVkJ1MjkydGtyMlNYTXhLc19GWkJQXy1KOE1DTUFHQmhjYWxtNlZwQzgyQ3UtcEZUVXpwSjU0S0JDV3JITDZ5dFpLS1JsNUJja0JaSG5aMTF5b05QWFNZT0NGYzBwbUZBQ2FDYk1relFyT25WaE9jY0x6WV82NzhPRUhBSWdrVzlIVWVaZ0pSNDdHRnNWbWRfc3ZpT0JZZ2RTUGQyWEtraDA4RjF1ckdJX0JEWC1JWG5sM0xubGl2Vko1clVyQXEyYThsR0IwV2d2a1l1M3V4aG1RVEp2eGJjclhvVjlyQU1KWXhUWmw3dWt1eGtrVHJFTXhmV1RFb2k5Z3ZKQ2NGLWcxaTFsWkwzOGl6S3FuaXlGME5LNkVyLUdVQTVrTi1JdW5ONFlwZW5xR1lqNUdrMG13VmdqMDBrSGlFT2kxcHRNMEtaNmdURXFMdXMyYkM3ZEJqNmR3VUNFakdFM29aczIyRnlSLXFmTzRqMk9YdHJGU09tNUEtMGl0Yll5VUFfT0lQSU8zZ2M4OVBXQjhoTVo0Z19qZlNPdGVuSjBXZUpIZld0UVFpcWVTWlBYY0xCYUNMbkNlT0hnY1VtZENoLTV3UGxtaGhfaGNJWkE5R0NhLUJUeXY1Q2FjMXRXUFNBR3gtN1RuSzhLUVljSlI1UHBDUDZiaHlzdk5JSHVIX0VXdlVESTk3SGMtRUNidkNjb0pnUjhlaVdqOXNtSlNteFJfRDhTdFNzZXduek1QVkdHZWtMaGtvNk40VU45SDV1dUY2NV9lUmEzTTU4VFBtS2dMREo3ZUFfM21Vc195SDZtVW5BZWxIZVZXemkwZUpKd1pfSUdMT0QzXzRhTUhHQkJHdlJUQUY3SU03XzZ6YXB2Rl9sZTAtOGdiTHI5NHR3a0ZPSXp4YjVNT1FiQV8ySzFFYUd6T3JiRHdaaDNmZkdDWmRtWkNhUjVhNy13ZlFLakxQelNoMEttU2N0N3BjcmFuMWp3MktQRE9ib0psSnBBUFB3dDNoNkJWZ2k1cGV1S0kwR1hPQjE0VlNKYUI1dVRGNUEzZzF6NW9XYW05YmZsdTV1c0hPbXlIN1VOMVZFUW82cWJFWC1sR1prNEp4VElUakRTaFRvT0QwZWc2WWpMSnFJUGgyYmE4U0lTZy1wTG5CWmtJUGo0TTg0UnNya2RvcjJrWWtvdWg0MWlXTWZMMTZ3S1VoRmQ4Rzl3VDRneG9BWVJsQV90Z1N4VFAyZ2cxUU8xR2plYWJhdm1Gd2FPamNMWkNadDg1eDNhMGhNbWdFR21hVm1tdDlnbGxETHdUQzA0cGNiWFI1SmlBM1ZMRFZudVJ2NldxbXpUeWt5ZU5KWEN4c2w4NXdQaXEzajFLTXJFX08tdDRrLWtTNVZNdHlyOGxlLVZnZGRPVmx5bklKdV9YQzdEbXRjQzNmSFJpM1M1c2VTVzAyRFdOQ1ZMRTJscUFyX0tGOTQ0emN2RTE1NjctNzRmMjJBa0lteEptWXN5aUFNdzN1S29uclFfdG1MLTZvV01mQ3FVZllvRkMtWmxlSldXWVdFbHJWSUZPOWNVNUlxeEx4ZHAwbmgtVHpSQ0tWU1IxbHZkdjdMcWQ0Z1F6YVlpd1hPY1JETjZpSWg4dDhQTVZaT0JmV2JjaFpHZF9ldWc3cXMtcHJ0ZUMyNFlaME5XWHJaQTZaTlh2MWRFUnRNZXhrM2VhazNfUGlsTTAyUjdOSlVjc3hsbnplSE9oRVN0Qlp5cTdTeTFMTW85UzM0VGdOOTRSNXREckxHWnhENURNdGUzM0tRa0tKbExFU3o5RHl3TGxfalhRTmdsTVFLdktBSkFXMGV6RUNicUxvdkFESE5ZNXJNR1pEWTZDalBRRW1hYnBjRjJTbFVoVHlGLVBqN1BaTExWazlIdndfNmxvSms0SlNXbndxa2xMN2hPOTY1OWhuaE1RY3EwTEExS1dKZ3l1bHluWVg5YnpLT1h2UWljOEZyc2xpNXNLcXB2VmdfUlJDVUh4SWd3T1lvdVFoWTdsVGZkZjM1RkJsUDhSZHFRb1NYRGVuRndRY083UGpKT2RhVGhQVGNFTFZEM3hFVkZtNVFETTlIN3RaM2NLUnN2RFhVdnYwLV9LWVB4MUZodTBjemZLRjJER0dUdE4tM3dRMWx4TXF4UHg2RW8tbzN6bkhCS3FiQjJaV2t2WXhmbUFyUllTU3NHVS1lRXNJWlJ0M0luREI0MEJDM282TU8xc0dwaGJ4VUdEMk9uekdSbzg4bUV5UFhmdVJpQ2UzUk5OaENxZExXa2p4RGVzTnZlVUF1UzdVM0hKZFZlRzhkMHNYUmZGWllKQ3o4azBmZEpwZ1FhUXdmanA1SU1kX3hncUY2VjRfdEY4OW5mcVBxYVdZa3JPY19LS25Kak5aa3hLeWszVkthM09hTnozazE3bThucjlUU1ZDc0dMaElxWjZlSmFWSU1vaGpLNHUyOUtkT3NyMG9VRDFYRkhrY0dkX1ZQWWN0V2NrY2ZjdzZkZnBhM0ZRYXBGR3BtUWNkQk1qWE11LW1wUzdhZFZodTRiNmdHNWRsdEdUME9mWTBXMG1GWVIwakJFT1NzeFdNZGlfQlNodUpFTElFZHVhWW9QOGt5amF1MlBla3dScEszbUdUQkdrRGdzMXh5Z0Z3cnRsVUV3U09hMDQtOTNBWGpRdUtueVllM1l1Vk9sSDJPdEc0RUlzTkkySkY5cXdOZnBoYU9raDVJMDJLbFRCSFR6ei1zQks2Zi01b2RBX3VMZnc2bHZUMWtyMUFHRUR3dHEyT0ItOTJMMGNLY0ROOVE2QnlqWHlXZVhiZEI1Vzh1Z1h5ZTM1RkE4TWNiMDZHdURmSUxmZVNFSHU0MTVZd2lLdWNMSy1kblVmNDA0UXJlOExFVXd2T29kRjNGb0tfeUhaaEpYVUlSSXRoX2llQWhKdWxiUFQtQUlRS19hbWVVWkpfOGZjVEdsNVpQUkpJY0h6OXhPOUV6WEJVbkx3UjlmUFNXZUcxdi1QVzd3OEVsTjIyMXNmem50Mjl0VURrN29pM0VLejVWdW1mQ3IxUm1mMnRJU3h1OVZKNWdKUC05amgxOGRqYUpndTBwM3lhS3BVSmhYOGEzZkZ0Rl9WUGkzNzFGRmhFeHQyYWpmSGRZSVJsZ0d0M01taS1SVXhwZjNBLXRFd2dHLWVDWXhKT2VHQUtLTmdGdHFPN2ZJN1FNWktHdDE5clQ1Qy1ZdmpEOG5YVGItMFBIcXVnV2paVjF5R092NGUzdC1CaEVFR3NNSDV4cExfUFJ4UFVKUFVhYXhwZjNlM1g4Skl3a3BjdVZydHNZTjJPcXN2ZGJvZ3RNVkhRUzR1N1N0UkFyOTdmaWh2U3pETG13c2FzUWhoWXpwYjd5eElMNkJ4VmpTeWtnSENMdnI4V1lTWG5wZ1BVYXM0V21JWTduYTg2cTZOX3l0Zll3SDFpOFpHNWNwVWdISEJVbTRueE5yblR2Zk5Zd0tCMlIycUktdHpnT2VJNjZ3T2hxa0FQUHVSMzJKRlRSbG5YTlBPbDJ3YnoxX2w2VVllZVdRU3VYTk9GVU1odUtyQWFTdm9vVnBfRktFNjBWS05SLVNzMkFwdjIwalNTZGh1WHg1dkhzLVhMdTRRRE83ejNnN1FRejEtZXYtWEtST2ZRN3BBQ0xzWWlHUVZwb0RPeEhiVnJCVlB4Zk82UTkyZGRJbTRHMjBfNFVRNUR0cEMtVUdrYUh2a2dtQTBzRWUxYmFGMTNXQ3ZoYTBfOTExMlYwbTkweVBGZ0NFQXg3VEtEMmZuUmhDR21DZ2c3cTZnN1ZGVWI2N2x0NWYzcDh0aUxzQU5sOUtheFIwVGpWb3ZGUV9ia25CcmlOUkFIdnZOYXNfcEJXVHFoYWpEVEowREtqTW5SSlRqWnRqVnI3SXhOX0tzWHhyYW5aN2dGTWdQajlyalNxWnhOd01UeU1obHA4cFlRMUZOVDg0SU1lWEFTUFFpZW1vZjJnRzZSYnkzZzRHQVZhSnhHT01rOXNwcTBGOUliaHFWTXNYdGhDQnB4NEROQlptcnR2WWtTRmNaTDhraW9ESXlSYV9PckE3RE5TUGJMNmdjLVdqdUE5d2J3aF9zOE1CT1FlekxMN2x1anJYa09YR3NweU5WbGJ0ZzhJMjM3dEZ2elRJNjJ4TWFmOU1Ubk5BQzdHamN4dVZmRjRIVWpCU2RqNlo2eFlvaHNER2tfYTl6YjgtbER1b3JSS05rcndydkZZdi1LV0tHRkdTbGI1T2x1VzJreXQ1eDVzWDRyUXNya1lpelRqbEFSZzJibWJKOVNpNS1pSF91SExxVGxCQlR5N3VnZTE4azZSdjZ0WnZEeno5YnRjT3U0UFJCNGZkVG1KbE9vMXNSamxlUXJtd1J6ZWtnRFl2NV9jbktMTFdvdjFNeVNEQzBkSGlWa3dlSlJLaHZhdG43aFlxVmpuRTBmRG91QV9zX3M3TFVnc1NBYVE5dF9kRWloaTY5X21HUUpjcm54S0Frd21USks1R1JJY2dvZ180WVQzb21KVUpqeGFJYkFmVUEtV3JENDdjdUVjV184dUxpSGM3RFlhN3d3el9zYkZBSmpyT0hyTm45b3dSY012Skw3NG13RG9DZFhwZlV5Z2ZVdFpSYW1odThfWFphVEJaaEhaY0ZLNWc5T3Jad1BxM1NITTczeUNWY2J5SWFLcV9Sb2pXQTNqRTE3TjVIQnRmVUJOVDNSLWxJeG9jNDRRSnF5TnlBanJzWFM0OUJhTXZ1UDVaRUNJMEZ2UVU3a0p0TDNaWWw3b1k5UlJCVVZaRlQzajJtbFcxZ2lTQ0lSemFSOE1JN0J4aG00Ui1taXVpeUJ0UFE2Z0VDOXVVVkx4SWhvVjhHaUtfQW5SQ29YYS1iZ0ZtQU5HdG15UWN0VzlmRVFKV2RlbjNwN182TWtvVlFMTjE5M29HUHdYVEQxbThRRnRQTnVnaUFreVVfLS1XTzQxYWRTN09iZUFFVFVNSUpSS1B0b2Nacks3dGlWZVVPSEJ5S1R0VGxxTkVoS3lJa0ZtemtFN2VSby1VWllnZ0JxVXhVMHdROUtxcTVacVVlQVNfU0JuMlZ4LWE1aWZjb0xHelVkX1IxTHhQTTB6Y0c4emh5aUgzeDdyNjdHWWJaU0pmRkQ4Y05kbmhyd2dmYjA2b204WTVNVXJhRXJkMWltTUxfUmJuLUVUU1VRN3dObmdVSnY2bnNKVmxzWXhVRTB2bUFnc296enlpQXd4OGlFay04elBzTm9UeWJWeWIxMlZ2MkxYSGdZS1FfNVFTWnV1aWg0SGxiVmh6ZTRpVk1wbE1lS3M4cHFCVEFKWW95TW9IZXRXa1pqNjNRcG1QRkZ4UFBReHA4bTQ4U0JzS3UzRjZmeWpHVXZMU0VpeFcwOXRwVHAyR3Fuck1ObG9qbENtUHk0Wnh5ajFFU0NFcmFiWmdaM1lRUjJRcU82VDl0NHQ1eWpNNmlkajl4RGI5UzB0LUpUeDZmZGZ0OGdxUkYtZzM0T1E2UW5nd3RaRlhRQUJfVWRzbXFkNmZmTmNQNzZQQTBwcVNIN2x0a1NZZ3U2aUExekh3T1hrbmhnYlFDN3paX25oeTlEd0U4TDlPLU1yRkRTWFkwYTVMVzEtMkJUUWZDTDFwcXMyX1JMOFd6a0JJVkppTmV6VUFjdXpsUlF0NTlHWFVlWEFacGZwaU4zMDRJR1JBS0R5bjFPR0M1dnNiUGR2Z1BpY2hDM1A5b3BlaVVOenhKb3I2NUt3c2ZYRlpCQUdvS3ZEa3E1UHRkQ2VDeUwxSzZkRC1hTHRxMDMwX2UzNV9jaGJiRW1SSHBlSUk2ZDJ6ek1PQy1QaDVxcWVaOS12Q2pjS1pqa01LV0VPdWRYbFpXMDVSMHYtZlVkdVRTWmd0bzA5UEI0c1VLNjVSdUhkV2w1bndINWtvQXZyTHJOLUxqVld0M0JDQk9mREdndEpBYW1pTWNGN1o3VFpGTVllSXZpUjVVengtTENjcE9VQjhkUDJ0akhlV3NkUVJjbFlmUEdCQkhHVGJpSVBDMXloVUNwOFIyS21aX3BjZjczQXYxTGpZZDVpeEcycllkTGY4aEdQWkxaQVRYNG0tUmRnNG9QNG5ZeDd5QkdPV2Z2SG12MTNHTUVTZlVrNTUxRDlTTXN4NzZHQ1ZnYk90SU8taU5BUEF3dzVjcFpzX0VMdHVxeVZrQzNXcDBYZDU4YkFlVXlILS1ZWXpoV3J1MWZhVjNpT25MbE5xZGpEeDIyNHg1SGo0S1IxejZfekFUTmFmT2RUU2Z2NUxpU2U0SFJveUxNdFUydzk2MzRqa0M4S2prUk1tZnB4Tkd6QXNoUFJfWWNTeXd0eDhqcmZ2Rk5GVGI4elY5RHE4SlpfWVg0cDhELTlDcWhCYmNuUzFWWEkxaGNQcEljRU1ialVaNTQ4QUg5SzM5N1VxeEpGUUxYbDVvdUR0ZE9ObmhBb0xVZ1VCVWVRT19TaV9DUjNHMUY1ejBzX1lJcTVWejZFeXFmQk10VzhKMXRIUzNWSE5qQ0xpU0xqV0JRQnJQNVdZSGFyWFFNMlRXSmNhd05JWWh3TkJmZ0J5encxVUdJNWc5QW9mbUZxLXJjdGRHUm1wem5vckNyMDVIVXhUenN5bXBKRzZqNkRPaHduU1hDOXZZekt0RTRCV25lTjFaSGtSaEdOd282SmFENjlHWFFLLXNZUFNPWHZ4cHB4d2VtOXFOOWEwV1I4TFRHdWNkODZhZnRrYkM4RXpINkhfZ1hMeHlpb2M2TXRoSGtVeVFIV1RVMnFiQVZsTC12dXZaUFcxVHM3ZzlkTi1GbzgxNG9nT0h1QUhValk1OVZ5M1JxcC1ocGNheU45R2RNb0hMSXM5ZHRTblVHX0VWdl9tc3JWX0JXMzRabF9hUmRmaW5FQlJJSUhOUlVUTFBPb081VzE1VlU2NndCeDBkdVJGTTQ1SlQ0cmc3WEY0UWNWSWVIQUdyUDU5ZjRfVjcySFlHLTVSQjIzYXZTemFnaTJpRE1vZlJfSkdTMnJTQUFVVGZ5c0JHMzM3SW9VN1RaQnNjVWFMNkwxUHVHMmUwVU5LR1Y3NXoyMEhZbFp3cThkRFBkVHJ3ZFkwLVNua1VuUUJUWUJCdHd0eE9MUW1QUTlua2tpQVpMbnhmcTlHR3BoS3BVZkQ2aTliUHByZlJ0Ny1Kd0J2R3JMS1lVTFVsUS1FVjNWbXREYkR4ZUQxVFNnZ3p6aXlmQmFTNmZVd3R5NERuN21obWZXcFJ6SVVOd3N0cmhNM05oM0tVWGpIYUNmN09yeWpVS2JMMnZ3QXQxVHM0SmFQcVlWZTlMbV80R2pPOHdIT3ZzLU1ndV95OUl0VWpOd3hsaTRvNjBFUF92Q2UwdURWSXYybUNkamM4TmJsV1lHV1lzQURxNjU5MFhHQktndFNVNVQ0R1paakxVcWJRNFdxUFBKTllWZEpnUWhQWjFQYkd0R05XcTlibnZGMVBPS2MyaHVxVGZ1dEVCTnB3cmo0bU8zRnJYVzFETFpyVm90anNTRndNQmdXN2p6QjZjdENwYzBZOVlVSmptSXFydDV1Q0o5ZE5mNlVpWW8td2o5cm9KLWFoZEtVOVlsT2o2dE5Zall3cS1lZmp1YldCOTBLRGhFem9QVDRtVU9ycEJLdmhXTWdEZHRpZFdyVkFQZkNEWTE1elcyMWFYZm9mZ1hBNFVGTlNIUEhGem1wU2VVXzdKU0QzSmJRQmxjSXJkd0VKMVZ3dGxPU3Q0R0NHTWJfSW50bGlxZmJFd3NYcHlvN2VmQjJJUFhkclJOUjVuWjR6cG9EMnhUN01BWVp3WGc3Z2VNYWE4RmIwSVNNWVotbm5VZlVxT3NfZC1NNkg4bGlHNXVPbVIxeGwyNVFqTDFHYTg3c1lHX1VqZmNUSGFaaHJpT2FYYjA2SE9PUDRpSXlES3lxVzR6Z2NJNGdhc0ZJeGRTMmZQLWgzM1lJdHdXMnFmeDlUeGFFa083OW5EVnlFc0lCTlJxdUdQQWFmcEtRUlFwN3NTbjVLb293WDZfcEFvcnZIZUJrdmdPMkRuWkdmUUpDek53T0h3UGtiQkVJaU9pNEpISUhCSUtTcWxaNVVIQWZPZndJSU1ZZTlUdEVkUGQxR3FNVDJoWVZTd1JCV3B1MXBIdnlpZmxCNERXdTVmUERncHlSb1ZienRYakpueWtObmdCVU1TVExqb2RYb0Rnd2JncTlVUERWQ1ZRbW1pS3Myb0J2M3ktZXg2VjNEdWFGaWZQZEk2emdHVjJGWUtWdU4zWWRUbzNTS0t2WVJqRGtDUXVyUlpnNjBFUlFwLUc5dnlqQ0F2TTNEOW9hZ2FaU0lraE1CVlRwNVNSNkdsM3JhUkxlb0xnYWdBYkNXY0tFZUNFRGx4a0xnWjhuNm4wTlhIUTV3enFkWUt6SEZVNmU5SGRVM0xxcXp1aExacDM5cGxqNE16QmZ1d29hMUNXZ3FrUTZiUmRiSkxUd1dxNWNTLXpDNk1ZamtlNXNYdEJTN2VIMm53MmhDdmxSMjIya3ZZVFFUeThLaXplcnJQZHJlSkZXQmhlODUzSjBJVlZIRjdhOHZoakc0Q2FFZG50aGpoemdtb1B0cnVUdEtFVDRwRk13cjdYeXhITmZacFhoS0VoZExCSEtYbFJIdmRMZmtOeFgtU3A0STFnWjkxZlppLXNnUkRkcndoRHotdmlSQW15czVGNTRpbTZaSWMyUWF3b1lZdjBtMDB0MnVIamo1MWhvek5ubFNjT0ZRX1Q4Qjd0cU5ZU2hlSmNONVdjSmpxU09rNmI5Y0pleTVIYVBrMXBTTWE4VlZjVE4wRTE2N3h1WUJVdFRZUFd3TEtTdDhSejhzRUplczI2SFhIcUQ5UkJKaENQZjRzOWZYdUhrbDh5M0hjWUNUNnBmc1dIZEk4WHN3Q3hRQmE0TG8wVkdieTF1SWJFeU1jUWUzNTVwRHhLMHdFRVlqZlVic0RybVhUTTh5YU5yRUdpbjZYTUhoM1A1ZzVrdjlKR1duelpZbExLTTRFQ3d5c0p1N3JjUm9mWnFncmUwazV1MGJMbFNESWQwV2FSc1dHSTUweE9RMW90Nl9rSklpNktVTnI3dmRUNWV0Qzg1RDRhRnc5dUY3dEF6Zi1vXzJrZ3JJZHFPX041U3hKcERQRFpRWWZ0OUNQcm12NmR6TjhEV0tNNlVadTFTNk1JQWI3eDRSSWVWSXFWMFBCdExxZndxUl9pS2Q0a3hkVnRyQmxYOThRVDZDVWNfVUx6WHFRWmhUQUFJYmJFUzdkWi1oQWUzeEZXNnVRbThnRkxHc0ZCenVSWUpxQ1hKSnhnNzBtTnNlUW5zQUV0N01LRVZoOE5JT0hTeVpMYmR6Wm5IU2x2M25ZdFUzbjZUdk9YcjUwQ21Bd0pXX1lrazFWSUhrVThvX3FIdGlKbGlwWDZnRGxPak1aS2lBblFBdnNPUXh1eEZxYy1MbFNTNkdiZWpiRy1CckVlbVppLTBwN19yZ3ZwTW5uRTVhZ0NoRnpETnlYSW1sMFR4NERZRXNSdWNrbW9VOVdZeEJmTXZybkxlb3BmRGtfblAwSFczdTBEYzlFcEQ2TWtGQmZsb2tNcjVidkRxY2JacXNoNUlnT1VTajBFVGJMdWk4V0lwQk9wVkdUNUE3VmZBWWo0VzJnbDNPYllLUXg4ZjNQWkV3eG5vdUNuRmlFMFNUVHdTYUhzdGxZalBuZFJvTExoSjdkX004eGtrNk52YWN2emF2U1R5YlIyWXpFMU42ZFdLZXd1OHZnaERCT2lQNGhzNHBwcjNoYmFNbk5TelM0bFRPTHFOM3N5bHotcUdnUHBYX05ta0lfY1laRldIUENWd2hIQ2o3Y0RGRy1lZUF5cFZ0dGl4Y0F1WUkxcmtZVkJPSmxjdkhDVW5XLWJRSkVHZFNGSGczTzBjU0E1NXdmSVNFV2xJYUU4SXBqYXJfeW1obXdnUDJkaEgxVFFlbzQ2aE95aFdsZU9va2EteWIzeW5nT2FlWXZ6cXV1ZjhzNHhtRWFLQmZzWHZwd2JpeUVHRHZqTGxtb2tvUkVRQWxRYzJfSjgxZnJ4RlgxV3VKRnRSaklSNWRFVVhsdzVCQXhEWDF6eWoxNHVJSGhJQkZOUkJGMG1rSU4xdTRGSzVQV0RRNnd0X2g4QkZyZnhVV1ZZRUhOeHlwdzJpbWZVVklPeG56NElhNTV2S05uVDFLTnhuT2dyNHVFX3NpdFBfZks0NUF1djMzUkxSNEduNlBrZHZ2cmZTUUhLYVk0VjN0a1czRjlMTWp2dUpuYkQzWC1QN3Bqd2hjNWtqZ242NDlxTDF1emkwbkpQalM5Umd6NHNLcTI5RC1odHhlSWZUNEdLcV9xOUI1SXpYcHoyOUJZenZPQ2Y3ZGYwUEJ0M2xmRURrbkVXUVc0T2E2cEIxTmZyR0VDa2prWXlZZzRvaVdINTIxMHV3MkRibFNMd2pPUGV0Skc0Z2hIRldaSDBySmd6VEFZa1NTa2ZVUVdWeVdiY1NIRzJoVTBXYTIwVTB2M3ZUZWFOdXA1NXB0YVNrLXBYZkRQOWwxSFRYeVhLRk1QOTF0Y19OVTgyS1lOVFllRllIZlV2Mjc5WWZrYksyM0VkNkUtRU5uRXNxdzlCT21xRnRnUERkaDZ4dUNmRlNzeHlVeEltUWdEUFMtbVlCbFBLcmRWb3JuZWxMRC1VOXhzbXlZbUhUQ1NYZHJ6endTaDdoRUdDNk9YTnBRQ3p2NExKSGt0UHhSck42Snh0X0h4MTJXYl9SQXc1R3N2UUtHY2NiMTBESVpDZF9KLWt2R3hEeHRoR0d2YVhNeXlmbGZDXy1iUmlWZE9nNzNjQ3dxX0NLemd0VjJPVzNCV0R4c1lSMGN1NkJpa2l5NFVOWkh6cHRyM2ZjTUNXVDNtNUhkbVZCWWFFVkY1LWEwRjdPNVlGLXFjRkxVSTVYMXMzeWpwN3c4RHo5UG9ULTJ2LW1HdHJDNUVFeHNJdnhEQmdWdW5HSWxoRGI1a2gydk0zaDhnWkNXSDZCQ0NIOG9feHp2YWdpM05kRDh0X1otSG9ZX0JQVm1UVmVQd0E4TXN3cmhubHRsX3h1Q2g5WDRHaXpwZDhkQjJmZ3RubDNWMEQ3Nk9IdjRUalhVaHNyZjN3Z01IdVl1YTNYYWdRSzVFSGJOWVFrZzUtSnRCTDJFRzZCcmdLbHhFOHNwUWItUDUtb0NVendSMlVaNk96Q2lxYWpNV0dYM2hUZ2VGdUZlQ05yZzNLMlVhZExmanZDZWVFbnJHelVmX3M3Nks4WlVhRjdQTTg2M2ZIOElMaHF6RFUtd2s2WFJ3UHlhdzFnYUdPQ0w5R0MwWEFoX19TWFJtLVRyNEhkNUo2RG82LTQwNkJPOHI5YWc1Z0xxVUlJVEFMS29fN0prOXU4YnV5UTA2aWVFVXN3S3g1TkNtSGQ2VUl2MFc1Wmo3b1h0Slk5ZnpOdXBvazJwOVI1MG9hYk5TTEduN2RlNXBWNzlXcEktYjI5aGZUNE1QV01MdHRiNGUweGFsY0ZJRmhzUjRsc0l2SXJQSS1od0lwVGFZR1ozLUxlcF9KTW05T3Y1ZFd5bkJISml3dHhsQUVXS0ZXV09NUkkwYlRfNmlIaElGMmtaTmF2Z2gzYnRFNjBnVXdGcXlkRElFVzBFWlhtV3B1MzhfUkd3Skg4d1JuTnFTdTlPTEE2cDdZSGZCdU1Pbm44ZWt2Q1FJREdJcDduX1lfSzdZTGtIdThoMEZkOFIzNzhYRGNzeVJsWnliRE9UUGtsWXhnNEg0Mm5RaDVzeEZ1eGpnTXJUR252Z0pScS14YktNSkZOWnNYRjBaRkRlc3NrdHlac0xLWFRvRUNjeTg2Zy1oNXBoMHhFM3YwYUE1c0tUTlVWWThvcU5nVmpnRDkxS3JTTFhEWXFZSkFQREZMQzhBUUlNUEhaY1REYXJMUUxRSjdKYVJrbzR1RXB6LV9oZVVWeHh0ZkZxZkZpLUVpYm1YdmlZSmoxT0t5eGNKMFJUeEt5dFZBTWt3ZFlnX3FpUFVlRjhzb1RXLVduaFhUelg3TEs5MGpMbGkxNWNkUzQ5Q0FGMHRXU09GSUw1Y1JxWTlLd29jQjlIcW1yOFhPaEY1SFhnd09OWlRrd01fNFRfVEdNdHBJUFc1QUpLWWVZWXdNSlR6aU1kTHUwOEgxYXJtLUhjclNjWHRWSVpJbnhaZk9DSExXWExwMUJXcTVQSHpRa0drV3hRdGdKellwcWQ3OVZsSkp4TjRQOGMyTGVONFZ0c0lPM2lvUEdWNUJwb254Z3cxNG1OSUl6SHF1dFYzNnVOTFRNRVBXb2R5SXE1UE5VRDlBOV81MDRPaXhtN0E3b21CUng0TXB0dXlPZUltbjV1OE1tNnRkLVVaTzVPaGVpWUNQU2t1ZlFaNzJvREdxb19GcHFjOURqdEJqVGdmUUZ6a2NfYVZTc2t3d1ZaMl91V3RIdTdMTm0xTlM3cDhmaWFtTUQzWVd0OTJBNGczU2FGWHJVWEZycm83bGt3OHBxajdRMFpTOHZpZk0xbl9jekE0WlZ0SVJ0bWZjQnJnOEZfMDJHY1lJc216X3BYWjhzRUNjSkxLZVV3MDJ6NHRnM3A4VXFmRURsTzBqNUdxdzc1Y1lzX25HVEtROGtqTVd3bUw5N2pwTnQ0emtUeEZFWXBWeW00bmp3SDgwNWRYNzlfTWFFVF95bmxGWFMzRlhsdktFSGxMT1FsRExmMXE3dGRJSVlRMFp4ZHhZNnBPYnpBTmlQUjBrYlFDZzJQakZZZ29nZDN0enJGa0RQSzlWdnUxT2ZqMUJaZWFDNFVVUTFRbHpkU0gtSXVKYVB1TzhJblhob3ZnNDhVS0hiNDJ6Vy1CaXJIbi1fenZueG1XU0Rrb1VMV0NydDdCZmM5OU4tRlpSRkdmdHBkaHRfbEdNZXp2ZThPU090R1VDMG9tdURWMGNDQy1zb2ZxVXRfWmNjQjRfRkFDOGRYemxKTi1ZSGZUWmxxaUZ0X3lFeTh0RVFpVHNaR0RmZENGZ3VTUHpWUUtuczhLcERLQWFUV1VrS3gzOGNFY21iclBaVmxPamt6bWFGY25zTUpJTEZPX2RoaUQ5Y0RGY0xBdHdKN2IzYzVad1NHV3BUZTA0bGc3V3Z6bzhYMHNqR2xhNUtST3VqdXhQVGdGTXJvQ2dHWF9vcHJpQlBicmg0TEpaZDRmaTdpUHlKZHd0N3FCWTNpMlIyTm43MW83eW9HOXBLYWROcDVVeFY4dDFrenRsMU1hQVExT2hMYVRuOG1DeWxadENSMGVRMXl6cmVGeXMwNmFFUTVoRnZfbTVQcVJPUS1ZQ1hiSkRRUjREOGF2Q21NQVZkTEdiWEhDcjJCWkpxN1RhdG9wUkN3M0dDN3k0Q3B0VjRWRE1DZ3lHQzU5VXByQklrN3cwX29UY1VZemMwaGs3R2FyY2VBSXA4QktnUVhoQWN5YVNyM0JlMmplVG1ITG51c0N0N25xa0lacTZiZHV2UGJ6SjNfTDFQY2RzM01WX0stemFwcmk0NmlyRmtMVkQtZ0xrUzdINTRDc1V0VFg5VTNuWE5DVUdKa2hKMnZLVGo0OHpIa0FzVVdyT3ZuYUxVR09EX1JjanhZdXJwdzUyUkJ4Z2p6MTJjck9JMFVaaUJmNjc4VmtlNjViRlBxT0VsekNKcFhCM3RYTzFoenhHUlpBaGNYTWc3MENXRDh6LVlFRU5tdE54STdyYVBKLXc0R1E2enhxREtxaE5YcmI2VVpMdy15enVWNi1MeUhNSklwMk9GU1JyZ3FaVUU0cm5SdnU1SjN0SzEwejJDSlAwcEoxSlBIZkQ4d2RmOTJ1b0NPVUZDcGFWVjFkdUFBTHVQVUgzVWQycjZ5TThIWmRmQWY2VTNsYXFYQ2J1YU5vMFhKU2RCbHREd01jQzRtYnNrNHVBZHBtX2wybnlNR2Jjb1dablNRaXNTdkZSSm56dmNWWTR4dnViTmVZYWlrZ09RZjNTcUhUYmw2RGk5QUpJaEJBVWQ1UnlVbnphWS1ldDI3SUlmSUV2aXdUdXhDVFZZa19lc1dIcGlFMnVjTU5xMHJsYTAxOEZJTzk1U2Z4RC05MXppbzRzdjhqeE9zSVYxNGJpVWlYUTV6eURDTkszRGM1WmF0c0l6SEx5S0dJWElHaTZrX1ZQcXhLbk1xTmtEMktDMUM4WDEzVWdHQ0JUU1N6Tnl4QnM4Q2luN3dHcDRGNjY5aS15QkxwU1JtTVNYeTliWXlSNkIzYXI0aFRWbVBWVnhuZmhLbU41ODJHd3V1eUxkeGZFRVJmbmRqckNBSktVNUZOdGpKZU9CTFg2R0g2cU02eTVqYTM2SHVKMTg4dm50MTFMNTlsbXVqNWtzRGh1LS1QNWc2ZHU3SmZKakRvdVplelpCYWZ6U3I3SEJkT2c1N3hSTVVtSm5GQzN5QkVUMVlSX0VCbHBlaEx6eGpqTHlZYmJWZVQ1LTBvRnJRVHE2ZFgyTFVqd21SYmZSbU4zS0dmS0lpbWtSblhvYm1QTk0xd3FwdlNxaWpQZ2VDREwtakdwRzhDc3RMSG1qLTJ6cFEyQzFVd2hOQ1hEVVVfWVVYdjJ6bUNmQ3RReEZuZXZhUUhIZ3M2bHVGLUlTaUcwNkFjWV9pb002amhMQ0NEUkVuUjBYNVlWa3VDeUFNZk0xVy1rSHlLemcwdGU1UUR5SktmVzVkWDdWM0h4QUJfempCSUJFc3plV29aajU2WWZVbjE0ZzEzOWotYXlWNmNCUGtVNVQ5ZFpkRFo5eXlObC1kRzgxZVdvVEs4SC1JOGxRWlNVMWcxdG1IVDlHZWNfOWNsclN0RTZ2MUloNTNjN0tBTldNUlJOZVdMX2VrSi05UU5SeEJuNFVPWHVKeWdEMTVDNG1BenEyY0xKWmdnSWVsNEc5QnpQUF84bGE3VnYySTBxbVhBc29aMkxNcmgyMWNqWmpiZ0tZcXRyLVBfYjlvZTlFVUphejUwaEVMclZYNlBOLThGTkFlWHFQNEdjcjFBd2ZHVmlnQmFnTzBCRkNHY1ZKSGhTeTRGR2ItWEdoVWFVWm13bEpsZkxvZ3Q2VlZxdE1sTTdwSXN1MGVGWk5BcTVxR3h1OVhKZmdBWGJvZ2EwT1hPMUVYS3VEZkpyVlRMOFUteFhROWZTYUctZnZmRjUzVHk4VVg5OUFhQ3VvSnQtTC1FYldpeEMzZlR0WXhxSU1pUjJxaVh4b2xMdHExUUFfSDRZSHJUU2ZwbTlMRVpnWDZKRElMUDVHYlZhUmlOY0hLQXZSZnF4OW12aDVPZzIwaE9JN3RSYkx5d293RVZIMkNFWG9tYVZZREhOcUZQTFhET1cwa3RqOEl6ZFgtcFh6T185bWFGSXVWRS1JOXRlbEhwa2F3NDNzQlV6N2stWnF4YTZnei12V3g3b0hUVXd6MXE3aWRBSUR3OUlrdWtleGRpeGxoaDAwRnhualVZdU04TzlhWVNJWXJLUEJoYy1IMkhuR0tRU2J1V2pTb2YzbTV3MjFlU1BZbkNWck5nODk5bkVmVkRzcUU0RFM3WVVkUFM5dlJBOUk0SzVfa3FtdWFaRXJ2OVJsdS1pRnFCY1UzRlNkVC01Z01Sa1IyTkV0eHdYT0ZfM01GQllfWWVqQzFFUC0tT29HQ2dVcVd6SnN5VzBUSjctdWFpR2JQZnpuckJZb2JteTQtenN5elNVYjhGMG80M2tpLTBoNlZ0MVlGRXBsNWxPWHVMVFdvcHlhSS1tTXpjNFRwVmNMRV8yZWdnVW5vS3JlRWc5bGFqZkRFQV9sMVJZREh4ekxjbmFIb0ZGQVg3Y3lzM0hpT05vTFRJR1Z4b05LN3g0LWlLRlVPcWFpU1ZlZDJJaHZHUTFkUGJUMGZUSnhNbTZLVGNSZ3RrenhOTHdJLXl6MjZla2VQOU5BSzJTLXUtVWhxcXprd2NZaVJYcVZsVlFkN2N6ODFCbnlsTDZ2M2F3cEkwSFJuWWQxTnZqUzZmZnU0NTJDUEY3bzRMSlhyV0dLOU5sdzRFVWxHd2w3Z1RrOW82UmFmVW5RMzVjMS1hY1hEVE5tMWJfcWd4UnpMRWh2eV9WR3hNQU5faU1MdnB4eXVvMVBlVU1URWVCc0UzYzRtNnl3Mm15Wk5sNmZENk9GRkRxd253dGFDdUFLRV9nNFVabkVxZmJWSUZqUjFUdUhmT1NNQ0xjMDk0dk42b3JRSmVmNTR2WFJPODhZOUl0WjZ2SHBYajBBSGd6d2pzTkYzWEZrZlpmQUtGRjZmNWtGdFNMaFV2NkdIdVotaFcxYTZFa2h4MUxEem44STNPQVFQUkdmRFNkR0YyZWVlck9MdEI1QWhHWGJSN1dxVTMwdExBSm5nSlRjRUVvWU5ObE92TzBPYzFEa0tLUlVDUkhoeHRXWVBob2k4UFFEQ2RlRXdXQXJHQmFUZzhsSE1nWjdrY1ZUaGZlSm52MnM1M0xUSlBrdTduamh6bDFZa2Z2YTVBTENuanhZWnBaYkM0YkVoTi0xZ2FHRVlFbFFHSHdUTjljUmY0azBSZmxnQ1BabHNmUmt3b2l2aGl1Q0p0cHEtZ042eDNIWFdRU2tCZjFDNWdKTkN2OHNxdTg5UkFWUlhycEhUeHFlMjFBTU0zcG51U2J3T1NsQktmR251QjlnTkNYd2NpYXRpUm1HcEQ5M0lnRjRtNVdaOXk2a1V5TmZtUFVmd3luSTF1Qk5ENVl1dVBTTE84ZDhwbDJMSF9uQjRMLWFOdi1kYVZidUttV3RHZjd0VXoxRWVEazdvMU9Fb01Sc2RHMktDWHdaMzhLN2hXNE9ZZFlhSXZYLXhMc3pzS082TVZ4NVBxMXBfRnJ6TlhCbEpiNHpRZkdqUXdpbzZHX2FEMjVDZEhUWnlHSVhCc19EdHM1S2xSZ0swdGFaVGNyejZIOGtSUlNSOTBUMXBKaXpQUHNTczlRR1JQOGZId0RjbDBycEtFamtUUzIzWFR3NDY1QUlZOEJFdG43bE9OXzBsX1lybUdhal8tQ2JBRnhpNHNyTUhfVG9kN0o5enNMSkt1cm4wYVhMOS1pbFo5RjItcU4xZnEwMkVzVkdVWlRSOHhhaDlKbHp4RmhqenVVbzRBdmFXRDRnSldyaVBrYUlaTUFMUkVXYjR0VWJ0OVZDWTRHdENyY3A4a2JDbVJ1NjVWazVMdWtFODNwSzZkYlVtMjZkMDdrVW1rMlh3WmZBblVTUC0wVFpMOHl2VzRBbE5HNEYxTkRTdzJKYjNHM3dWdV9ZSlNwRm9zNmpoX3VUdVh1aWRqVXpIZUY4UllOTmZlVWJDRXM2c3NXbEZMRFdHMlVyZWllcUdxUGdXTUgtckRqeGw4SFpJUy0tcUs3Nl9rcGpvN2tlR1lTRTh2ZUZpcnFLUUlNczV6Z204eW43YWpKcUFpTFFZd0lNeEV2dm1SYmk2WklKbmpoaGYwSVpxMzgxTzkxYmhxSzk4VC1yblltaXRMam9OcHlWSUUwVnBKdU5jaFFRUFRXcDZ4Q2UzNmFIOF9NcEZsbzdLWHdwQnlqSW9TV1Y0T2hvRGM5MGVBTEQ5clFvMWN0dmQ5d3F3ckVkOWJtYTNUeW0ydk1QMmh6ZEh6TU9vclBSSGlENUdnMW9GaUFpOXJaRmFpcTZpUnM5dTFhd2hZWmw2cnV2REtmcEpON1B6N0IzOUUtb2Nuc1d4WTJreTBZZ0NfVzcyOEJaT1dnRTFpT1pKM1FNcVduTkl4UzRkcE5pLVdKTlRuRFhTT1dMSGtYdzhvai14V2dCeG9WVmRhWVUyel9RR1BhWGFiWEtmLXQ2Q0UzWVJFa2JlRGZmelZpQUluNTMwVkJpRjFwVTJyM2Y1OGQxQ3p2WHlJQlhPOEpuTHA1RmhETElkX09tUVdUbGRZT0dLMjlXUHpKU19hLU1RWXI0SUdFbVhRb1dVVndaNk9zRXJEQjVUNnhob2F3R2YxeHJxT0gyU2JqZ0VETVZwV3B3dkZqTUpTN2J1NFVWNFZDekJtaFRJTVNnMDF1cW0wV3lhdXZXOWdaaWYwXzlKTnI3bkMwb3Fwb0dRTVhVR0h4dDB5a2Yza2VVbGFzXzZRZlNqQWNXX2Rld3JqanUxd1J1Q21XWWs3a0Ewd1pZVXU1WWxSdlBlWS14UV9tTm5EUFU5d05MWThjVnNOT0ZmNmppQkFHM3JKYzRIVTVXMS1WZ1hMelhCNVJrWmNMX1N1NFJUMnZ5MUIyTlVKNG40VWx4U29BQ2gwQlJ3b3dSMHQtMHo3bC1INWtJcGJMSXJJOUxxdHJhb2JPeV8yWTcyWnRXQnNMTk1fQm9ZWnVUSlhIeEs0R2FvYS1nT1lwUXQwLWJKaDhxNVhWWUNLa0RmaFI1cjg4UWY5SkxFNVhOY19wc1M3Y3BGTThCRDk2V08zRlJ5b0F6ZllaTUstX3hHSTdsUTcxQnktSFdkWm1uQ3VPZkVRY0ZqdTM3cUM2WWI5bzdyTFdLUmliQjZhNGdLVXJwcmNwUjlfbFR6VUVnWlFldWdZM2xtV08zeFRaZFd5bDV5dVFxeTBQTW9rdm5JbkZnZkdLN0ttb3VodFlaRFdRSnBKQmV2YjBxWG1sV2ZETWhtSnZHYURGSEM2UGoya0lMR1ZscDllRy15WE0zN3dxNDNBZGRJbGo4M2xoZGxYWXBpajA1R0x0XzY1NVhaRHZNMWpsVlBtRENnaFlkSDVPWm5Ub0MwQ1RVVlIyaXpzTzZzb3NNckE3WnJjV1pKV0lwbERDZ0RpS3FPM0VRMjF0eDRDUy04Y1FtSkpwVzRCeWFKNzdVRWN3aVI3VzdUT3RleFFZSnctUWFJUGRYTGE0Sk9XUGVIX3NaTTdmZ2tZZmdzdm40RU5RUnIwNk4zRjktNE5rY1pSUjIyZFRUVWloQXJUbGdBV1JXLVphQmhMUE9XVE1qWnhaTjVFV3p2SjhxYUlmUm5tbnEtRjN4blZaSXFFWmo0eGZObHoteWZxNTNXZl94R0ZkQ3lUR1czX3pVai1zZEV4Ql9vMk9scUpUQjNscnk4bWVXNThyb3lfRE9iSWdMUC0tQ3dDQURhVVJUbWhweXJ5TGNucWZYeUtaOUdnOEdJZFloOHhvMEVXYUJwZkFnU0JUOGZOYUJiZ1JBcE5wcXdhdDN4SmtYUlpSaXpmeTVid1ZVN2VQNm5fbngyNXczZi1JMDlhckV2dWRHdEhtNzVCYkpMSHg3ZEd4eHZuNVdiY1BBWkU3U1JYM05LX3NZdFA1ZWwtdk1fLTY0aE9neE9NOHJuUk5vQVVLXzZWTl9iRlhCaDl3VUNSRHJrWXNUcjZwbWRGRVBFZnItRmNNVGRLenJrdWRoOWJTeG5BOGd6dkNrVUpFMkxMZXFnTU5lN0ZxOTFEdnhzWGNibU5NN1BndzYwZ2Y2X01TWFZRSk5BdHRobW0xd0FqY1ZoTnRXazZmRjYzU0x1bmhWUVdnMjdJRFpES1drSkFYd1hqX2ZOZEVrNWhubWlSWndEVzVuUWJFaEd4ZFNpQWxSMUpVQkhmOUJ4dTZqN2hsTnZPYjQ3N0h4aXpFT1ZOR29LOHN1Mk5DQjNsYW41N2F4ekJpM3lrdWh3LUpTTGpmSE1mVy1rRDVOZkFkc2s2WnFpTXZYLVRPVWI0MFVQWjFOMU9JdUR3alZZa1lWTGxMR29KV1RZVzV0cDN2WTZBMmlRV3lRbmFkamlHYWpXcjRqWlhTRmFyWUp1bWpzcXpkVmtzV1ZidUh3eFJTVk11WENkaWQtLVhfYkp0ZkFFQzNaZGs0bUlGYUhYZTlzMklVLW1mMWFIYU1FNVlHY3VEX1dmTEk5VGVSQVdlMmpUVWZiSTZZUDM1VHA4MVhJaDhJOTRuQ2tGaGUya2ZpRjV4dXpSeGVCM2JIYV9hajBvRERrMkc0OXpLSDZwS3haRE9oMXd2bDhzOS1mU25PQnVLZUpVVTdBNjhVeW5sSnVyZl9PWlczMHBRcDh5blozUzFKdEk5ODZaYTFvY1VyNjF4MjdOeFVqX2d4REI3OVp4aDhhT1hlbU0wak5FWW5KMGh4U3lkS0JlcE9TcnlaSFNRUmRuY2QxOUs1M1pRUUN6TVl3OVlCOVdoUHZEX3JNRGJzYmlxZFhleXZNN015Um1fc1lCTFRVOVU3VFpEVzNrVkpMbHc4YlI4TW10N21yNFhYdWx1TmNxS0pManh0ZWUwZmtfSU9sZVN0aldRSzRBQXdaWGJsM21jeGplOFh4dXZuR1dONnpsbHFsQTZYd2pkMTBOYUJ1RGRtOTNJY0FKM3pHblAtc2x4OFlzZ05yM0NTS1VjLU5FRlQ0MTBpU1FmTkNsaHU3RkN5SDFHbV9iaHFRem9tMEtHNXFoTWVCRUUwY0VTbFNXMHJrTWJ2MEZ3ZXhxMWVCNXI1aExSTUxRNm44WHB3cy16YUhvejNOaHJGYkVXWjVyT3loRkc1ZGtmaHF5RC0xbzh2Unp2LVZ0UWxPa0hUaDg0WFZ6Z29VSktaNlMxMVZ4OUxxT3I0bnM5TXJfN0JoeThoYVMwYW12WkZMT1N3ZlU4YWtnUnRhM2JweUQ0aEVyanpUYUlqVVpYVnJDSzRxajBYaU1LaktOSHpRdGN3elFQVGt1UVdiczVUTkNIanF1T0RLMXlqRVoxTXZ3ODB0UDZGLW56Tnd1a3U3bjFYR2hwckdFME5KYjJ5TksxUG50YjBoSmx4bF9zYVZ3blhjTGJadEUySEhNaHY3eTBya2xTOEVpSTljckk1SWM1N3Q4ZmZvUWpEN3k5RlhaQ0c3Q0J2Zk43MG44VnRCZ2lVR1VTUzh3MzVaeUN6Vll4TFRaZEhUSWVvS3llODdtXzI1d3UzS0szeWxWLVhOLUJjNWoxaEVaam9QbE1UdExmdzZ0bjNMOXBkUXlOM2JIcHNQbFF4LV82ZlZ5bENJYnlyeVdCLV8wTHNCUk9sRy14LWhXS1VqYjVESVkzb3B0ZGJQbEk0MG1LQUttOXRXZHZZRS1qdTlKbXlFOExSYXU5cmExY09ZaWdia3djaTc0NnpjbDJyNmZmc2xWSkpxS0JCMzktVnlGSFlhdGRzLWlVTUV5RDVKTDdMR0dVM284MzJMcXgwRG9yVWRqbFlMVHdMc19FOU00d3R0eTRYOVlINTVUSnFpb3lQU2JrUHMzTHlvWE1TWnNEbnY5X1NBcEJYaFJudzRuQ1dudldlQXpMLUhoTTlEYWdjeGZ4ZTg3eEhPemNkUXRzeURMaHRqNFNyMVhwYUpSNGtHcTJWcW8xLV9PZklVXzEzaDlLcmcwZWFmMzN4TWxjdDhGek13VmxWejVXQWxxdXFMTGpIalUycWk2UXc0bnlsYmlPQnQzRm90dEY4WFFMOFZOQlpIZW1Xc0FNRzNxU0pxdlhXbVM5bFZ3ODVzaUJidnNNOVREbEprV0lzZ0pYS3BueVdoMTg1NWJTR192N05NQ1FFakNUdnJ6YW9hRWVjd0ZpVG91Z2d6ZzNCMk1JUGl6SmhSOW0wWmFIYzVMQVdfUHJCcTZ5V2pnNDc2S0lBQUhseXRXbnVndEhxTGtGYlFpUmpPY05ZR292SnVSRHFDY0E4WjY5bHNKQVlOa1JoYnR0WWtydmllRHJOWHkwMmU3OFF2QXdST3RGeWNxcEY2UVd4QUtUQURyZUMtVWVTZ1dieVo0dWZfZzNNajBYdFdxWTVobERveEFuM2lRb29fY0ZKMmRKNmtEVUpOUjN0Vk9OcnQ0aVVQMnN5RERCdFVjUFIwQWRBbFJ3aHFUdlJheUM2MS03Yms2RkFPNjNrdzJobDlTN2hwU0JSR0U2LWEzLWtoN1RhVHktVWtCRWh5T3QzUU9KRXl0Zm1DRWlNWFkzTHZpQ3M2OUFYTXpGejNQMlJDcjBsUlpzNC1aSHREdW1mUmlrc3RRaDY2ejZPaWdLUndsQzk0dHJKVmFEZlhvbVhkU1ZDQ1BMZVZFd1NIeUlsVWFiLUN2aExOUGxCOW02NDZtQ1hKNUFYZnE5VWxJNzV3N0plLTVVTW0ycVFvb2JoOUM2WXItQS1UdmFWX2E3cHBVeE93SzY4bE80QkIxaU5pNHRaY0Q3dUlTTG4tRnZUMkVaaktmN0hodFdGeFhVRV9ZckFubHFvRjFnT3JJSGExbGFLMFV0RkNhampkS1B1cTdxSlhINVNIb2VpV2c0VHJBZlFoVGFrbThOeGZJcnVqTml0YzZFT0xVNHpNRV9XTldxTU5JY05sWVp4ellraUUzUHFodS1fQkREMkdPcFdid0Q1anZCc2s1TWpJMnB3SnBQeFhlSWVCQldkZjV2QTZyWkRIUEtGWjdpbjlwSERZZkVWcWFCMllFWUd2X1h6UkV0SDZmYjlOVF91MlVqbWJiRU5IQmlBV1dsOGRlSVl0cGk0VXZ4a1VtQUxGVjJKdlRqeVFPbWh0TU9FeVM0QnJkVkpfSmtWZ3JVdXRGUmN1OFV0dGhteElqd1FNTFpzWW1YblBCdzYyUTZzUGxLaXc0Sk5RTEs1T0p1M090djlwZGxKeV9ZZE5LM2xob2JCeTJxbnh2Y3JyQkltRzhFSXpYcV9feXR4RFNPOVltcFRiVHBLNUxsRWpEcmxmN3Zvd0VscUY0Z240c2N0WFdGbXZYdWtlaXNBLTVPSGNHTlhNeldlZkVNcElsejB4bGJEZ2l2UWtHWXpCVDlmd0NLQlJabVlkejJoUW9uNXRLRTVNeWNuWDdBUmxGZG1PZkY4YjA3QVo1cl9hWVl6TFM5YWVRdnV1R0J4aXRHbFc1RS1SOU1HV1RNSG5FZjdZUUgzZHowaEtMajgtUFp6TGVYeElpNWNNeG5vaVB6ZnZCNzl2NndCOHp4bzhxU2xhZW9fRjJCSHB4c0pzZzEteHdrSWZvLXdoclJadGhSU0xKX01pR3plcWpmWFRZWTNlNjZhWnlQV1F6UC1tcUFNZEotMnFoNnJtblY0cW1iUVlkU1NWM0pudkxLYU1uNlBDUzdSNVFQZ1dRTWJyYU1GTU5PdXRScWM5U0p1NVVOY2ZqOWxyYUpxU2M3d19SUGRBX01aUFVRQlBRS1VzNlNZdzJpb2QxUDA1aFVqRmtNY1pkNmJQQ3JxTmN4STRHNy1keUtMZWtsZWYyS1dFemVRRml1bkRObmxucF8zVWY1RV9WeXUzYmZhVXg4bVRjbDV6NjkxSnNRalVrS3hoU2t1S1ZReE1JUEtnYkR5UC1kcVpiUFpwRHE2bzNBbzFXelJ0RElwLVQxLUlRTlc1aWtWdDZxZVZaTUlwRnd0Z3FxR2NMczRjVXBKZ1Q1aEVvSThpa2dpMFAzQThjU2ZyRlZzNHZQbFhPU2ZRRFI4eGdpQ3N1VEU3YlRGRklTYjZhUFhXX1YtdjBQWVRSdmJDTnp0cnU3bHRNMnlXbGRJS3kxbmY5N0R1c3c5Ynk4d3pLSzJ3VS05NHRmN2tQOWh1blBwUkhRdi1UVUJmbS1heWx5THZwNDZIWnF3c1VPczB2eDVFUWpZa3ZfUUFKRENWTDFleDI3T3N6MkZ5SzhKY2FMQTUyRmhJbFBVRHFVWUhPSUhLOTdCcVUyY0FiSE56Vnl1c1FLZVVQemJWdzg3WkRnRjI4aUpGQ0pSSnNWZEZMcXREeUFYa1ZkNWRYUC1YdVhqQkdXTldyd3BGMzZ1YVY1WHlIZk8tZWpXaUlyY3EzOEtFWndoSWI3QW9sZ2dYR1RfUHhndGFMTzE3QXRCblZrcmZ6d0FyeV9pM0xVR0xlWTBDTFVVNzlCUnoxYUNkZHhjb1QwUFR2NGFDazlSUDQ4ZFBsUjBRQXBpb1NfQ216VUl4MlBJZFZXdDFoSmFPU3ppZDY5ZmhaYVJqel9VV1J6cVNOU09QNDdHTjJwMnJTeFcwcnpuQVpCdllQSEJpOXJoMkFFR3N5V25oTHphSUVPNjF0WU5wRy0wVHE3ZWhGZUFxQ19YbG5rbDFabFlSaUR0UFJzOXBOTTRzaWJwdmk5cmpERkNENUpIc0x5TTI5Zk5WSmRHcnZOMDFzV0ZyUU1tYy1aME1tV3o0SmEwQnE1UXFzWExreU9TWHVkd1dvZGNMblVIRWRWUXlsRWxZcV9hSWtsNVVVdGc0MEItTVR0Z3VzN09BdFBTeU9GTTJ6XzBYVVdfX1hSWHNYeGtNZUViUEJsVEtoUHAyY2VDeTVmemIxbGtiSS1GLVNIeW1xZHBLQmluOG1Dbl8xUXpsMklWbllTYkk4d0tIN0RCOXcwMzNBYS13ZFp2dEFYXzZmRElkR3RHUEczTlNwZThoME5rMUVjU1NUc3VSX3JQN0w4UVdfZkUtRnhtVDR4cDFVRW9Cd0tFTTBUY05CQ3hxdTljX2NHQWNZa1kwYnpOU2NpWG1JSnpsbTRiRXVCaEFyYlB5X2hLdmdkY3hxMngzMGNqMzVpcTk0eW5iWXpyTFpiZl9OQThheWFWeHRObkFkSGhRUE5tS1MtTVIxQWRtVUJHc2hNdW1tT1NUZmR0dnlPdmpNcmhOTnRaX2NLRHM1NEJVN1pCR0ZLX0pXa3N4d0NpeHV2cGJwY0Q0TWt6c0g2NHBJU2hTNi1fSkt4NnVMa2R5dkx0dE5BRGR4OXNySWQzOXdITjVjSno3enl1NGItaUpyZFlkMEFWM2padkdRTWRTeE9zRHFIZ0xjT3drSWhyTXBoam9DS1dMb2ZsVkk3REhOaTgxODRIekRsR09fN2FiRTJXeUlvU2Rubzd6aGk5WUR4OWV1MFRmSkEwOHljNGpLeG15LWpPWmltSHE4Q2lDLWxha1Q1NDZSb01BNGNlR28weUxCY0VBRS03cFk3MjIxN2cwcFY1RzNPTldpWFBKdjVpQTZBNk16blYxLUlUTGtYNV9BeUpuQXZmbmxORlJIYm11SDhzaEIzVmpKdERERU9SOFpXWElpUW9GdjV2Q2RiSHJHanNvaGx2WjF1RThTSENxS3NTZUhGM1Y3bVV6RWFJU0czdGc2RWt2R05LVTc4eERlc0FhTkNnVi1YWllUUk9ZbXdCa0o2UTZRQTdpT3pPUENnR0ZkUm13S0I2MktsbEVVT2hMa1Z0WXRBbFpjbzVGMG9ZYUlMdGl2WnNjSnFFazNsLUZxdTdieTVUaU5FN1JZYTdYZmpMVEY4X3V1MmNtRWp0VlBYMlh2bG5hWGhpcHE5bmRPZWJXQnhhMldNM3ptUGQ5ZXJ6WHBZTThudjJyZWt0eDhMaHloQ043ME1mVnZkdEc3cFFpUFpEai1MdXBPOTduTDJYUktjS1l5QXFnMG5iWHQ0dTVNZ21mUkpDcjRVNVQwRzhqMThkdUtaUktiNTZDX0hscVN0MFhpYjNjWDRqZWZTeEJ1RC0wZ2hKYUpsVURMTTUzQ1RieDVYTGV3c3VqQm03amlwNVpMTjdsMzhXMjhvNmd4WUZVWUFjRU5lZ1FFR0JCNFVCOGY5cUZ0YjZNaVo4b0tkSFNIN0lIQVlkRUNweWxHUE41LVNVVmZBRUdlXzFjT3JOVmlKT2puWEJYWmIxREhhemxWa1hYbmhiN040RXh4ZGJBS3MwTEVESTUzSXp5ZU1wVWRRZjV1cjBJT3doYTlQbkNrcHNJekNYaWxCTzBFLXdFWDBiSVJxeWotMHFJMy1UT1VkMldqdnJfUGl6WXBrcmJ0R0lhTllQbGJzMDl1NExDWlVmcVd0VEZDa3VxTTNmRkNFTGlvSkFqQUwtNFVqb2h0Ti13Qk9RZmJrUm81NDZOR01Id3lZSEpMQ1BTNkdrd3ppMnZQeGwzREFMMzFHSGUybnB1c0Zsa3paOUlsdXdSZGwwNVNIYnFTWE9zTVBYdkdUZkFhYTBzRzhfUEJmeER6LUpYNHpWak1zRVN6ekRhZ2JJQ1dQTUxCcHE2UnJFWkhVd3hRV2dVbmYwTHVCZ1ZuRUN4Mll5al9ZcnBWS3JfZmkwQ3Vpcl9oc21vYXpIVkNLTDVtSGR0LXduWGt0MGN3RmhPLUV6NEtYcHFtMHhoUXhNeHNUUmt4dU1abWMzME4xOUI1NVBtaVdXN2JFSWRsV0JYWlkwclo0d09KVTAzUTdqTWtsVjMybU05Y1ZtUUVsR204RldTNWx1TlRZc3locWc4NFFyTzBFS1BQNElIZE9malZyVXIyTTZwUUY3UnlOTnJManNCX2o3UTJ4bDFBRDQ2R3Rob1RLRkh5Ry1HQjVZREJWOWdIam1PVExDeXJJUmJDVnd3eUhXeW92MmhWTlRtUVJBVWRsUndzRlp6cDN3SkhSbHdnTFJjeFJ4TWJEZEhOZHNiYVItRzZILS1lR21uWlF3RzNRUC05aGhVQV9HeGtHLU95MExRZHl1NW9uaGJCS3BjQms5dlpHSEdBTHltakRUcEo3Y2QwNjNQcUt2dHBOLThRX21mOVNWTm1ac05Jam10UEN1WlZJZGpjZ1BfR0hsR1J3dXE5Y1JhanN1YkkzLUVqc2R3Z04yUzBaMlpKVURPVWd6cG5GTFE2a2VIc1pjVjEzdXlWT2JyM1puT0tKX1VGWFZ5VjJHdVhlLWVuMFBBSXdralNFb3NLNDlFR0xRSkszMS1LTmt6aVBWaUN0cWFXM3FHb0VUSzZYUEtBQmdIV1l2YVNkWjdrT1o4VDAyOXl4Yml1MExyQzM5NTJma2dmLUdHYkI2S1Zzb2poRzRTUDV3ZzVaWndrdzJ3eVVSb3dKUy0zaGdHQW41VEk4bHFIcUxfeTEtWDRVU3l2Ny05bGhmVnFoZzFFR05XSkFmTWJ1V2RxdElCX2VTSnhPZ0pWOGhGV0dnSE5oSTFSLWlMRXQwcHI2MVF2dU9WeG5aUHItX01TMVQ2SzlBZE54Tm1EdmNIRkZGdVV4RmNIeUNvRTBzZWw5bkpyS3FuaFlwZm5NRkNyRC1HYUJaQWZEMWdWeVhROVZmZ0FXc1hWSHE4NnlFN1NDZ2kySkhaRXhnOFFGWEhSWE9RZDBfSlZrOWFUUGVvUHdOWlBnUW5GNkZadGd5T3JTWlNobmVDcmxyU3pnOFllVXAwTEpLbTZvaEFrUDU4U004cXVkMlFQSDRTVlpSVWgyMDktZjFzSF9ObmItb1FsT1d0d2U4RTY4Z21DdFE5OF93M1JtUlREb3NZVW9MdGdsWXB0eS1ueFFxOTRBZDVtcnQyZGFlbXdoTVZnaEhHMk5NUHpXYnlVVXBfUlNlYUtVNVdPN3NxZEF4elh6WVVKS3RnU2VtNklYWTAxNVJod3A4bENrUUNyUGl6Zkd0Tnl4ZlhhVGlvUi1WWWs4WjN3WVdpOGlvU3ZoMlBKT2QtS2ZXQUlVYkVFR3oyZFBEZmJuTmhPRFAxcTBkUFhLaFpyazNFMUE4WVhhTUxJT0I2YngyWU14NWVhcFc2QzdQWjVjMnVwVkRJcFpudGRRYnU5MTJPb0l6aGk0VjlrQlkxQlgtcmY0YV9vRkN5NlNpQ0R2WXdwMXlseGpzOVBQLVJVR1VwSERZb1cyckI2ZUFvMVlXZzBOUVBTLVF6cW5rZFlJQ01fdnJfbVBrelc0WEotNzd0aElVR2ExVEtodHplN29Hb0pGRVRDZjhhWmhHOUEwOU5ObE5DaERhT29rbXZWa2tFWkYtejFLNGVubG1ITzNXLUIxQ205TUxQcy1wcUN6Zmpma1pxRmlSdGpZUzRXU05hdkhwVV9NQlp0MmNYZUM0dmNVaUpxRXN1QXIwTW1oYXpWT29qQnAxc2N6TDBVWEk4Tk1Vc1lCSE1jRjZaVWpXRW5JSTNfbnlqdWUyT0l4eEw3OEh3clFXTTVHOE1sRENVZHEyeWFfUzY5V3kyZldGZHlRTjRDWFpVMm9pUmVTVVQtTXRPWXpnV0w3ZlRkYl9GYnhSaWV0RnNmVVRxZnZRX3YtVWh0TmtLbGd3aTlqRXVKNXdkby1XbmVRS2NRaDRKQlhvY3JqbTdETVFXMUVPS1prMjY4VjRxb0JFSlNoS2wxQmJGRU1LUk91YUlFb1EzSmstNGFkTGxZMEpEcVlXLTJGM205Qmwxc3loX2FwdnM5S0tIbFptQlNjOVZlLTBJaW1QY083UEY4bUFMUG4yaUhEdldrNEg0WFVmdWlrcGNwaVQ4dVIxSEFmM0JlY1lKY1Jia3IyOGpISEFCUURCa3Z1blVPVVZ3dEp2aEVHVGxtYnBtNms0OGl4RTdwOURXdC0zVFEwbFBxdTQ1NlVpdl82N2g0Tktvck1GRUFXWGd0UmJmdEN6M2tTYzlnbDNvLWwxSjVHeTI2SnBxXzhyYzAzMkk0MFp1alVERlVPMjZ1R2pHWk5nS1ZRZnk4UjlzTmVIZ01xbXV4cGFXYWRpZk0zMEhDeUUtMDRIWVdtQTQ3cHQyOF9SX3ljbVVZMVlCczlpRHp3ZzliWlY3dU5pcDlMcVdVTmoweDJrMXlVaEVzSHRwRXlSZ2NBOExLVGc2S3RVM3RGSXlpdVFfZVBXREtFcXcxZEZkT3VZWVlLekxqcHM3eFlyYzlqMTBLZmNKSGNVUGhXMS1Jc3p1VlJsa1MzendvZXRQOXI1VnoyeFVIaWlsYVJSVzdWczNUanJZdlVVZVktdGZGMlpIVi1ZWUJ2OFMyNU1LOVltRDJXZVk4SGVsV3pqckpUdTBlUE40UlZsZm9LTDZFNEs5bkp6c2xYSm0wR0RER3d1OFNWdmg3N1dMYkpINGoteHdRUGZEcHdoZmJQa3gzTmdBMm1OaXY2MVI0NmptdkJOTWhQTUw0THFHQlRHY0FtS1VXYkg0SHdIMjBMU2M4aVV4Q0VSTzV4UEphUVkwVFUzMXI1Rl9IS3pibHc4V2VZQ19KM0wwdktETTZmVUNrMlFYQ3lvbk9RZDFqcXpxVkN4bWZkRnlhM1dNMkRCcHY5S3QzcDlaVXZsbjB5bHVOR3dBcG1GRHpyTVhXdDUxRGJjX0tDVmwtY1E2ZDRMOE1ERmRLRnlKdm1ELXE4dWcyT0JYYmFfemd0a2E5czJvckZVYnBQMUM4V3BGT3YwM0xlWTQydFBONGllemZoeDlQWnRtVzJUS2w0dVNNTHRvUVBMaF9rUVotSEhQdXF2QWVTSE1Pc3dDWFRrTnpvSk11RGFKc1hkSmdJdGVGSTNNWlBfUkNYV0ZkNERIWlhad19WOE5SeHdPR0l5MExMd2pPLXhWOWRVdURBR1BSb0N2akIyMWtYUC1aYmVsQWVscjlHTnJaS0dRM09QbjZHa1dBSUhVc2E5T3Y5WXBhVkY0UkR0MWllZGhCam5DQXlhRVlXRjZEaXhQcFBOU2tlY01DcFN1T3V6UzlsRHh0NlluWFgza0E1OXNXVUxseUx5dm9sRURhbm9wbHJ2SThPRHZYTUJwNE8tUmV1V21hTHVhSGNqY3VuSzR0ZmpoemdwUHRPaUNVUEFLVnRkQ1UyRUY4SGI4YXhhcnFFY3dwVTBFQ1JVUE1KbS1ETWY1NUlXeEdWUjJEblo2V21qYTlzZ2pFdWtqNnVZZWFlTDktRzlVdTBHVmdfNmVWdUlBUHZuQlBfNGktNE43Mi1zVVh3UUlZZGg3VGdaLUZBZDRnQ1dBVHhCVDU2dGZMWWZmQUlxbDVjX2RLaFRZTV9GQkpmQng1MkE3N090MFR6UGdKZVFWdDVLelhvSVFPM092Si1PUkdxTm11c1lxYTU0R1dYaXFhY2dlQ0FwUllxX3RZLXQxZXY5cjZTMXNsWjlheFZhdzZ3TTh3cURULVhoNF94dDlyZWUwNW9UbTBEbVVjMkFEWEd5V1ZrTHZXcFRIa3hxenh1Sy1vMGtfTG5ISHhUUzJiTjF6MDc4SHhLSVVWY0JUcFFUbHpVeGdKeU1EcllocXV1NFN3X1BQTC1McVY5a3cyclU1YmFvN1FxRUFvcEdaTVUyb1FYLTBVVFJSSGEzeWlSTG16R0RTbEhFMmt0V1BGakEtUFhmN3ZKQmZrUHBQQjZmOXA4QV9OSkhyNmk4dU9vU3pGLWxfcXRNTmQ1NWxoTEhJeGJmd0EtWlBhWF8zS2R2R1lfSDcxNERsanRKZEZBNDMzZk9VSW1ORDdXc3dSNThJSzVSdnBxbnFubUlHbHJ6N1FESE5idTJvVlhxOHI4dC15OXRTUE5QbFg3Z21fcGk5cG5mVFFNdE1abnZFR1hjaTkwYjN0NTVfcjYwLWxCbjZIUk9BNjNHV3BVRVpMNjFjaWNqVTl0cFVLQW0wUTlCTGowSG9YQjBicXRnb3duMmpETWpuNVp1VGJGVVRhSlIyVnRPRWxxQ0hKMnVEWkVYd2tiUzhkSXp0cFk0NjZQOTFzdjlwbGVaZ1JhNk9iS2RQY0FybG1TVnQ3QmxaZFZ3cXBDQ1FvWVVVN09KZm5NWnoyWW5ibDQ5Mm12YjRjSzJkUXNGeWg5ZUlsSy1NdGZkMzQtOEUzendJNzJSZ1hLUmpFeTk0VmZhRjBNM01uaWdCbDFhdUQ5V1FvalJVLW5fc05HUy1wZGVFZFI4aVRYamNWVlhXUmptTUluRFZuRy1EamkzRlNMVUUySUxuTjE1V25xckN3LXZILVk5b1dHQkxmMkZBNVlUQ29ZNHc1N0V6UFA0SURmY2t5WGNxNVNXZFhEbVRpWFphRmNHMHNDenk4c2sxOG5VQVQ3Q2k3M1JjWEhKZ1plN2poLWw2MUxXMzI5c1UxN3QzaGtQaTRXQnMyWWFFb0hHMFJuQVgzdjRXYzYtOC15WDlXSXJyYWhQOE1NZFJFSVN5Uk85cGY2NG5icnhaLXRIZ2xXTnFXV3c3ZF94UzUzWmEtZ3paZEs4ZXF5a1F0R0NreEdlUnc4TkpFQ2dqUEw1YmJUX1JRS3VvbkkxRnc3aXlvR0FTWFB3OEU3RlhmQjBqUXR0STVvdktEczYtQXVNYWVCM0ZKRWRBOFZ4MmRteFF1c1JqODVxejBBTGRwZGdCWmp4R0lobE5JM0pnV2dUOWlMSUpLT3AxSFF1dkxHcE1RU2NiUEdWamczZjdLQzVYc2g1TmtyeThfdnlIRFV3MW8yOURaZWhVNl9vdGlrNHljMVJFbHUtVkFhdDRDcHpyeVdkblRXLVp0dU9PZzZHbnh1T3BDejBjMlVXRFNlR3ZTSldlSXNPOXh1SGk5VWlhbWk2UVA1Q1BCaDRtMFpUNk9wUHZqNGdHVHBYOHJlWFA0anE1YkEzdHJZaXBIMDNVaGIteFJnenJ5YnBYQUN3d3ZVb2RmMmVid0FiYWs4M3NIOF96T0VpNkJOZG5UZi1ZVUxhT2MxNTkwd3BUS01Gb0ZpUkVYeHJOVEFNR1VxYk82cFhBeUFDUnlTdXFOd1pZeWU4aEltLWZUampub2VFOW1tbm5ndlMzcmpNNGFfdEp4N2MwN0VpbTBXajdhc3ZYWUh5SWJRQmoxX2dOWmpXUE1yZ21MM0YyUFFhSHRQVTl6MDJBRDFaSTJzb2lTYWN3elpaT3RPN0VBak5GTEVqakpMRzV2c3NqX0FESUZFeXFveFpPdlFzTXBqb2xpd19nb2NjMHhGc2JMdHl1TkhUdmlZZkUwSXBIWFUyMnBjRVRXSHVfcy13Z1d2elRuX1dibjJLT2dKNHlRX1ExSk9oY0dzbjBFVWdwZjVCMWxZOGdFTi02R3dmY2VfOW9hOVoxX0FQUzNGTHF5NndOcU91b1lEeWFDY0E2a2hWNUtJRFRqOGVoV1Z5Z2hNMVFWTnR3bF9xTjdFYVNZSjJWNlcwLVBicVdYUGJkVl9zOFlKT0gxWFVkeHdVTEdhU2MyTzZNdkZkQmNMWElKZE1FMmJxMmdWdDBYT0tsOWpTWEVqc2U5UjVUcmUtZWk1TmJ1azhEellOZGJxZUU4TjNUaHNKd2xyZ3Z4azZXczJ6S2R3YjFYc0JZN0swY25pX2pJYXJ3WklxUzlOVGF1RHhtQ3gtZVBuWXVOM2haZ05pQlR6Y3pGV2puby11eW9SY09YWFZ4NWNnbkhuOHFqVklfS1hEVHdoamtEV2dmSWhyeHdxTmRLSTFweWR3MC1zUUxUd3l1RnZMQWRSa1lCTzZQS0pnaVVlUGV6SFEwbV9YS3JabFpKX1NNMEc0bmFMYm05NVdRV0hORTMyYWxpUTdldkNJdEJQa2lVcGZKQjRZc0ZPNmdrZ09UakRKUjlQV1RiVkg0MlhKZjJ2eTVfQWlEUkwxRmJ0cm1oRUF4M0FfMFZDZ1ZhaDh3empfamtCYWdFSEdEcXdfR0w3amFSWU9KM194b1pRZmp5UzFJX19keVBnckN6OXVSakhDMjRaWjZzVmhzOFEzdzNTWG5JVjBKdHlsVmNnSWFPMWZ1RVhHV3h1c3gxRzRuNjFIOWZaeVBLN283Y0NBSVhCR3BkZ1dqZkZEc3BROFFjMVNDTHFpMzMwZGR6dkhLZ1FrZktqODIzbmFYaV9rZTFEb281NHByb29vcjg3NUxScWZwaWRCSjZkbjA3ZlFlQV9Pc0F1NFpabDdXUmVoMWh3WnVuOFJhMXhjcUZNVmQzcnpmejl6LW5vNE40UVZ6M1g0S1RFdFQwZkNjdDFpS3F3b0RWV2tDSW9MWmo1bUVHaHA0UWIxUVpYV01rYUdBWE9VRmV6WV91cXFITHZVdElYQzFLTzNwQllvQ0hNQ2lpWGMwVkZVdE91Ym81ZWJ1cWI5bHZLeE13bkNXRlQ1bnVnY3l3S3NWM1FhWnYxQWs3VGZDTmJPT2JKblFnRzBGQTBuaUFtYkJhMFo0UnFzQVI4TzVpOWhpUUlkNzVsNzRzRzBCTmx2TFVPblJoY0ExTzBjeXRsc2dpT2dhMkpZY3NNbnFBcnpRdDZ6dU9qaUVmN3VBSTFOYjhVbUgzVVd3RE5zX1dOcXY4cnh5YVFPM3RvNVA5Q21LVUVCWWk1TV82VVM0RldTRGFhRlZjNW1fOUF4RFJ4Sl9pY2hRUlJJQThPNkpocjdzaEFyZmxzT2FDMGQ3cmxpSkN4MkdJX0xYV2F3OFNRNjdRN0VhVWVReE1SQXVaR0IwUi1PczhHZmExTW02Ml94OGpoYVhrdGRNTENkNS1UV2x2NXJ2dzlEMzdURUlHN2xEMmpRSHNyS3ZyLXJPcldlRnFXMENIS3oyU0JGQkpJdTRxZXl3bXhIdkE5cFJEdFpidEZEQ051MDV4R3FVNGZYNFkxd2d6WkdPVXFBYktoV1BwOGR3MHVDS3V2ZEpMUERFeGNUM1B3QktsTE9pNzVaNHdMTWJGZktrRXZnRXBLcEo5ek9FMkRzVUU5U0tHY1NZdEdKQWVDTS1HSTJmZTU5SUlGRWxEQl9iZUwyOGs3MTFvT19ld2k3ekNIMkc4bEhiM0o0MzJ4T1Zaak82b3Y4U0EteVp6YUZwMG1sdGdCb294MEdkcWRrbDh0cG1Jd0xyREtpcUNfUjBZc1hQQ2wtN1J5YU5tUlFzTmhVVGo1dERPVGxTRDNoTnhreHhnVllsSEVUU3NQLThybmd6SDI4SlNQSm5OUmV4dTF5Q1plVk5tbHlXc1RKWGJfMExuSms5eHItWkdVSVc5Yjh2NmJTNndDRXFzemFMVW5TQ0RWWTFOSEhkTVQ1M1Y1RndxVHExd0hkZ3FJRjBRS1Z2UGhlNGZWeWJFR0d0SUFwMUU4OTFPeC1uMjByc2xSQnhkUFl2UHN1SmJUY19pZW5xMGpiTVFFLV9RMVg5V1NxYzZlaEdfVUpxUmFxV0EwZ0c1T0NUS1NJT0FWd01HaElDX0ZQN05MOGpmTXdRTWVnUzFIMGp4WWhsMlV0al9KUjJCLTNYVWNpQk53c2FWSXRXZlRWdzFuUDhXWHp0ejRyWm1ZRGFJMklvWFJGXzByTUp4ZFBUU1huVFpNOG1sb0pqYXp5UnI4QkNBdndlRk41S0YzVTJ6NjU1R0tpWnlYVUJWbHd5QUpKSHUxREVqYm5wakNmeWplQ21jV0NiZjBrN2lsb2dwSXl3aVJ1SVA0aUQyMmlBZUlXVlRaakZQU2pWYm5LWW1ia3YzdGRZMDNlbWhvM0pIRk93UEg5QVBOQVBqbjRSczEyeWI5ZDc0ZlRaVE04cFA4U1U5VFpLLXJpMWt2eE5xT2ExNnRGLWFfSkJhTVprU0toMjQwNE5ycHg3YkE1NlF3eXhyODBGVFdadXRQNW1VdDl3MllnZzY3dEdSTTJ5UjdiQy1lUXRxMzhMUG5ybllPUnN2UUo5Y2RONkZkbjVLYXZ2c2xEMW44WENBSmMxSE5pcXhEZVlBMVZITmFEQTFqLTZxQmVfclRtMjh4VzcxbWFOWkRTUHJZZTJnWkNPWkhsQkZ1YklzdGZMT3JDZnYwOTZpQW56aTREaklSN2xTVGI4UmJWUUM5RThXeFFpdUdNM1JhS1RMVXFlV0h0NHg2X29wLUpKQzNhdDVZUHYyM1ctS0YwWkV5T0FlejhYWjdocVFCQV9tQkZRQXhUNUNybFY0WXVPWWViVFY5c3JNX19HSGw5MV8yeUNCSEM2Xy01U3JnWXFDUWtEX29kYUF4QTg2ZWU1ZndJakJCdEYzTGpjendDMmFyY2V2c3JhUmpDYkRqdElPQmpvd252Unp5UU5GV2h4MFRaOFhKTGZOcWdqLWNNZUNtSF90Y3JvMnJiXy0tbzJnLWNQQ0c0T0xuUUM0N3hNdkZCNHNCUFpjNFZGM3htbzFnZGVreDBOcU5GMjBLZnptRTlJb0tGS3FYRThEdG9wUXp5N2RrdDNFZVcwbTVDakZmZW5EdFBlYjBuM3lVU0tEclgwaXNVbGJkQ1dCNXZCNlFLVzJFWWE2QnVmMi00NlplTFM3SWMtTDVqd2xadTFuUUtyam56dG00WkR1UjRsNTFOX1dNY2RVRkRxTDJMSnNENGpCX0JSMVBWQjItSXZQeExOZ3o1akp5TGl5Qnhtd1BGbGdmWWMwWnBaUVpLRFJYVk0zQ1BSVFp6dE4xX2p1SXhYSlRtaGZ3WkNMQUphNEJEZDY5TWNXZnI0cUJ1WC1mVGFwdnBMbUNBSmZEN1hHZzFUQlZ5dDA0bEphODlDWVZkMUFDMWZ3Z1ZrTm1STllncXpCempPbDBMYlRjMmlrM3h6NmY0SWZkMWZuTHk4R3I4MkVDZEdEaDJLVVYxRXh4M1NtUUtrSDdZZk5xTEpWaGpHU3U0U0xWTVlCV0QydWc3elNWNzU3cENkdUxTZjUtMVlLZnVjMFpDOTk0eFJRQVlxWmdPOVZ3MHd4TmNVNS0zMWY2clVlRVdkWjNMYmh3dUZHUzA0S1pTMHJGcnZKY3ZiSncyNXJyMUJZT1J3UHdHMTgxMjRMTmdiQmk2WVVNTmJiUmE1eDNkR0wyMEQxaDhvSFFtUzJxX2JFQTlKS0NNSUlLWXVUckZDazNzSF9sNHhPZkVNczgwU2FTblR1czB0Y25INlE2MHE0VnliX1ZrUFYwdElxYWlaVHBYSmdGZVZHQU4tUmdEZmt0blVFRTBZZFJKSGdndDZjUDlZVndBRjV3blJ1RlNGcG9HVzhOV0ZBc2NaTkhtTlk2dV8xOE1VT1BPRWU1WkpBLWY3QVR0d3hGOGFvaGU4eHR1V3FXZW5OS05XR2FaaFgySHBrQjNHVWVCbl9ValV2Vy1hQnNxWkR5MWVGajdvNG14Z1htdTh2b2ZXbU1BYUl1MnNHN3hTUnpyUlNFVUFnQzhNUFRQeGpMWmp4YnZlbmF2OFljQktSZTlnY0JmTmtucmx1LWp0aGtXbklzZjRHT0RuSHlGbG1LU1kwZTRJaHQ3RVNnYnZaNk9KY1k0d2gwSDFWNGQ3cEJ6U2h3VmExY2JHRUZ4UDhNNlNsalRxV2ozZUJGTDNGLVU0M3N3b1ZSVEVJRVpCaTYtMHR1WVNXbEl0bUtYWllKVEQ4X3RsdzNlaGwtQ0NZSHlNVE9sbldoMW5iODgxYkxJX0VfMUI3ZjVBdEpaMmdOQ1Mwd3EzRkE0NW4tai00dF9Md3VfVmdNZFRRQjBkdUNKSHZNTnJtNlZ4RDhNd2hrbG1TZ1haYkQ1RGNEN0Z4WmZuSVJUVnY3WVh2cGJvRWxybVd0VmRxT0ZLcDZzTHJBTnFHcUNDaGtOMTNlRTloMmVFcDFzdUpWUkJwOXJNb1VEcEEwcUY0ZDFkNnBUTFFIU1VNTXhoQjZ6MGZxdEdzcndHbFladjVLcE9BUi1rN3hNU28xbS1kbUZ4cFZ5VTdLd3ItVkttUFljMTV4VlYyNHBkTTVtLXluQlYxaVR6ZW5hbjBubF85c1FmOU5VQXlVZWRiRFpWSnVJTVkyQ0I1bEZzTDRXMFpFNjBVc3dESEh1a19PZ0pTMW9qTE9fdnc3ZWpVTk9BbWlGWDRfQzZqQ1FuaXBwdnM2S2J0OVRYWnVGcGZIWEU5YWJ3eHdmSnZDNkZOM0lYZkg0OGZvWklTajl1dUI5NmtWTWVCeVpVaGRCd0xwOXJxYjhlOXJibGxvRmhGSm5vR3AzWFE2clNUenQxcG5KbEp2eVR6OGdYQXVlWGgyV3NFZGV4OEtPUmZSdk9fNWRSbktKMWVHR2lPQ2cwa0QyeVpOR0RwcTRnTHNFTXV4UWZyeVpLblFBQ292ZlY0V20xdXZwV3NCNkM5SnAwd2xKYTR1cV9qZUdLQVVoRWhyVHJiTlBrMFk1Y3Z2d2I1Q1FEcjdITnF4b0JfcDF3U01oNjVsdWxjLVZfREgtcno1cmVOM0RqZ1hjbm4tNTBFSWNRbUJvZndRV09PVHJuRHhfN1NYdjY0SUdnWjd1dElGY2FoQ0tCYTU4R21sOFJqajB2MUpRMnFlRk5fZjN0V1pJd2g3TjB1RWdqcGk4ZDVIRWpvcTZmbWN6bGktNDd3cm5CZ3BVeUx4aG90SS1teGhlU0hoN0cycGctT1ljNUVBUUJTU3I5ZFI3Sm5LVHVBN2gwaEtYOGpnLWZ4bTRZQWNqSHoyRkFBbGlDeEFoUUpPUFdkS08zNkpMV3E0QUtfMWJIWmpYdXYyV1FvWXo1M2F6QVM5US1xWktlQ0JsVW5kOFZsa3dfMVlDRzhiYTNKVGVfRkdBSHRoWDZQUG5ZcC1WM3ktZmFNR2pnR0VZM01SMWxpVEdleFVyb1N1SC1Bd3IwTFpmdlh6bnZfQ2h5eVlxRVh5LXdxd3JmSkI4UDhCa05PTzhYaXpwQ3h1QVZCSFIxakVuS0QwSGEtb2hSZ2NHRHZBa0RQUmZoSUhaaFY4bWJ3aldZZ0JtcXM0MVdGR1ZBSEQ5MlRZVloxdjRyV3F6eXh1SGVQajY3b1R5cEo2YTA0NWpNNEhYc0l1bVYyUVJSOFBEcjNBT0hsVjVuQ1RUTFU3OENKSW1tN3JBQVFSRkN2eXVHMEdtSm5HdWkyeWh6TTZCVFdQdXNkRFZ0SnlOUlJVVnBxNTVYRElvQWh2djF6SlBYZF9mRW51Q3kxc3FEMmw3UElaNFF3QnF5SUlldEN5Zl9tMTVEa2FsbFZhMHd3Ump0NEVyWHlKUFNZVTROU29Wa1VCaWpTVDI5MnZ1UTd0VEs5Zm5vUF9pV2NuMzRWQjIzWldObk9xUzFkeVBib1U3bHFyT1BwYmlLRUV0NVZaQ20zQkR0aHVTUzZneVNORWxQNDZoS3Z3Z3BLVFcwSW83blF4X2V2TmhUUlBiX2xWM3V4ZXlhY2hFU2FEaVF6RFd2S3hsRXhfTEc2STlTVG5rWVZ5UGdnSEc1eTBzdHp2QW1DdmQ5Y0RLM19kdVZTUTBRejFuY0thVGtta083T25naEY0WkZwQTFuY2JUamxDaUdrbGp2MkR6aVF0cVg1UjJkMkVLREdEM3BWWE50V2JTd0V2RFVHZ1UyU0V2QVpGZ2hkM1Q1dHpncU9IWUcxN3J4dzQzMGFkNDNOM2Njcl9tbWRlQ3JLYURhVHE5dE1xdzEtQ2pKUXJBVzZ4djVYaEZkcmlpODFQb29WU2JsX0R4NEZBWWdsUDdLMXVDVXhLWDhIRjhPNU8wRWt2RVlNVkY1dmNMVlBSbTlvRFQxUzMtYWQyQTBGeWItTXEwT0QyeFVPRl81UzhMc3oyYnB5eUhZclB0NXZvN0xuNHlIblF0STAyMGc2ZWVCN2t1OW5zNDV0TzU2NGppMUYtOGxUMC1QeHdBMVVScjVEMkJKVmo3Z2NqZ0hCcTFsRnY3OHpXamtWRnBFLUJVNVkzTG1OTTVBLWtvdmNlS2UzRmhhdWVJeVN1aUFMajFXTzU1TnBVRGhlZU53Z1JwdWJ4a3JkTS1NUHQzZGViaFp3dl9sQnlTcWhwdTVabHdVdVhhVDF2d2J0WHlCdlNTTkIwS2RHZURIbzBnMEZfOVM3aFlrOEF2UkdHU1pVbENKSTF5eUtXdUZOTnRXcFhCdy00b3g0MmVXWnhHS2JqNzdlenVYR3czWE83VFJOdnpxSXJqU25nS1U4b1d2eUZQM2d0WUVjaVZ3clEwaVBubElCdkxzSi1CNHVkcHF6Z1JVYVZSRnMwclJxanRLdGs4aUdNRWZwTXRRaUJoXzE4THpzdU5zVGRLTG1Rc1JVZ0w4a0tPWnNKcGlsS0I2UU5TMlJNcmY5OUlDbjJ5Y0VkbURfbnR0Qm1hUFdRWlZPaHowNFJvdWhPblBTazJPRXM3OUVmMWZSUmt1UjFJOUZkSjgyRC1BUzJnX2l1cHdLMUdNbGJKR21IYUM2cWJZWklSckpyYl9lLXA5MEhNazdIRVdSSUdHRFNvQ1k4bHZ4M3E0MmxrUzVNYzQ5MnRwMzdVTFplUllnRFlDMmpObkE1T3dvSkhoVmJpS1RjelNXMW1DX0pwaGt1bngtM01VbVluMUJ6emJ3bUIwQjE2QjhYMjBsRFBDRlU4N2RZR3QwSzllR3ZEN1JwSEc1b1UtTnk4UU9ST2pKenJ5eHdOMXhCWHFMcUNHOTlZMDJVV3M1Qjd6UGllWkV5UzdqbFI5R2doV3FpTTZlNWVUQVJCVzhUeTBabEt4bnh1dUdYa1NFMmF0SXo1eXA4X0hTa3ZHZFI4UW10SWVEd3pkLW8yZHE0YjdqTVdPUVhVVXlpYW54Nm9XelloakF6Zm9LTXpXYTl5bXVrcmd0a3lHUEdKMzR1MW1KTnEzay1qUmlEZHNZNWYzUnV1ZEtGN1NvV2hfd3dOTWpHU2xmc3g1LW1WSW1PQ2VkQjRhUWtZM29oRWtZY2paZEpTM09ta3lwWU9lOXg5c01BTzh0VXdUblotcGdjdzdPQU9zcjlfZDNuZ1oxdEhOTFVOZ1FoODJWTENrSUtuUnpRY25BZS1hR05DOWNWTno2WVB2RENsbUN4M0U3aFF1QThBMWtQTzFxVWd2WWllZ3FySnNDalI5bVJ2bTBaZTV1TzRCV29SYTI5VmVXTnlGc29wRk5GVlZ4Z0UyWVVOZS1vSXNHRVN3MGlWMGpBU0VuSE14NHNlNmYyRGFfbGx4RXh0OU1ERmJpd0FBTVJNTFBwLURkTW05UTJOWXUxNGkxZGdvbXVHV0liQXczWGFHNnVFYWtySFhnS2JrUVVSRGk1X0FKaHJyRXJOUnhybmF1VGo2Z2FtQUJuQ0M4RWNYSHo1LVJmMTdXek1lczQzQ292R3RZRFdROWZlYWRrVDRTVjNaa3FyRzFhMU13ZFJTOEQyeVVyMVhfMFJUMDRiQnZVREdEOUFtTVF1c2l2ZTk5azc4SVE4c1FUbTd1YzhhUlU4RS1iOFRlR1BHSkRvRnNrVU43Uk41QnlwemFFczBjTHdzZkl3RW1DWkxOVnRUamhLSV9kblNpdHJpTDF4QnlKbGlkeUlsYktDVGhOX21CWURUM1JzMmxQX1hRdVB5enp6UjJJeGk5S21lMDc5eWUxYlBxVkhRY2s5RUVtYTlxblZ0ZmZEd09TYlNyY01HMnluVlMtd3cxaW9ORWkzNEZseGlFZW90d0ZPTkl6THF0aDRQQU1JTUV1a3NLWnBpOFBOMHNBTDRxTXlBSjVCaWFHcWxMTVJyN05TOXE5Mno3dVBSMWdZdTNkcHhMdFBPVVVySU45VGJReE13Ym1wMlNqZS15LVRTcFpDbWRRdG00bFFjVFgzWXJpQ3czTnVfeTBKaFhqMDFFVVl6WWxEaldsMm9Cc0tJM01IeVd2VE8xeUtyWVRCOE9TYWM5c0k1dlQ0SUNjbFZoRWxQS1lxS1BuS0VVNEwyVkpIVzJBdHVrNWNsNmRJWTJZaGdrdzZXc1M0NndpZVVUZDNiSVZERTNRY1JBNUNMbUNHdVRGYVB1YmwxaDd3cnJhQzU2a05GYXpzM3o1NzY4R0dFTE5rMTd6cEV0ektZeHdoYWZpTmhZZ0FpZ1VFeUx4V21FMTdNTWtFOWkwUVZ6VGJwYnQ5d2x0V0VBRjZzOXB6NVRBMjMwZ0tIdDZleG9mT0s3dFNzWDBMRmthVVMtR1FyVER1Z1ptcmNoRTJjbkgtMlJKNmtqY3dwRjVDU0dOVTJETU1FeFZMS1I5UnFfckpxUGw2VEIzSXZyOU1oUDRtWG91VWNKU0FsTHc0WThER3ZuTXh4WWg4REFneGNaSXoybVhIVFEySElPc2IwWmEzTW1OX1FGMHZmN3dQcGY5XzdjcVNJSnlGOHhIdUttWXhHb1BoUnpiVE5EN2RNazYxM21iVFp6THVuREhTeGN0cm5INTg1cXdPZmxTYjltYTgzbWg4Z19YZTZWVmdyXzc1azVGN0ZJRENpZ0FuSlJxYVBaM2N6TDg4MjMwYnZWekZvNGoyVDkwVHdYYWtENDAwNm55Qi1GbE56VDV5aVBBY2VqTFFDWjlzRlppeW5oTlVjTTMzc0NVVVVkUnN6eEdqeWZzekQ5eWtEQjdPa0dEWTNEMUhpVzBJRWV3MzVjaThJckZfd2lzT09hbXR2d1ZvQ2gxRHFxY0xrQk1OTm5HWlN5WHRfcjFvYVJTd2g2elFucUlLcU5LdFVydmNzdTR1S3d5RERmU2JTQ21RWHJUTmdScElWX0JaN3dYRGNCY1NyVzJBSnFJNkJsa2plcDlBZU84Mk5BYWVDMlRMZXlwek1fQ0RGSHliSjlYcmpFUjBYRVdEWHdMRGdyYjRDcUpjZUVOWk9Jb25oYmtkRUxtNXlkQ0FfVVpkSGVQSGdVQUZ3aWI5NW14M3c5cDBhQUw1N1FZcnl5Zy05OVEzbzhhSlpobE8welBrb1lmU2k5OTBRVzQ0V3hFWWVGaTBvdmVnVUl1clJhUk5kMl9MeE5zZnlxaGczZ3ZGVVhxNUtjLUliaEdKNF9rbW51b21IZGZHbXZSZ0VQTUNGOGFicThvdG9VMDlTbkdseTg1LWNOUHN4VkNWak5rc183Q3plSGhlMlhrOTJWNzBnM0FteDBLNTRSLV95YjdLeUx5Z0tYSEFtRUtnd2NuYVNWRzdKa0RXR0NQWjJFUDZKWS0yM1BVc3l5aldjT09sbG10TkR1WXF0VHNFUkN4dkppSllzTUp5N3FZREVzMUlaOVVEMUMzMEJxR3JQdEpKcElBdHk1OWlHM3FwM0hBU0xnYTd3bmZhejhKR3pFUi1vQUZ6UDRGeWtXZE5hVjd1RGJnaFhjUHZmTWNtWDd0cTZSUFhWT1NWdVN3NTBBNU9LSERqTi1lUzJMYkhPVV9QazZIMi1ucEpsV28zYTFrRGktM3RKYjM1SnZhN2dGUXd1Q3pybUFPTG5lRldHUTM0dTZtWTN4NWFMOWJkYWtCZGFTR2xOcFNqbzRlTExqM21HMDFLUmVEc3ZsSzBsWTF3Z2Zxc3FFQTFWNEFuMnlBRkFSSnFOWUU4Z1pqTkwxSEN5aE1GcHJmU2xZWjZjMlN0TkFCb2pKNE1VdmdfeE9kemdqQ3ZMcmhIbFNsLUR1WHU3SHZrOE44M1lXRy1TTW94MUhSaU52RHBKREhHTFpFSFBTZ09KUXpBUEVHY09GdEJ4emdhQTNORnMzbi1IRmh3SUlpaUhTYjV5VG1HcjlWN0otbWtOaGlUY2pnYUJRWi1BYXFrdDVmdDhad1RrOVBlMmd2TE1FRE15bDYzS2dFU2owcV8xRXd4QXZ3OHE2MUd5aFgwNlVXTjZaVmxrRWtsVHZCQU5OQTZLaUF0YVd0akdOdExZc2RNZG5nSmpHa1k4eEtRc1pYdUZ1aGdxSVcyVWtZLUF4TlVYZE4tRHo4d1MxcVp6QzlsTWNoSlVpd1RHelJ2ZzhieE5ob3EwRGZScWlrUE5rdmZsM1JHV2ZvVFlPOHhDVHM1RVBubXFYcXp5azhTTEZHdmI3cTBJVkZIX1lLa0NCSGw0Z0lPRWVzcG05WDRueUw3eGNiWWNEQWo1QzZhZ2hPRjlKNlZsTTBDVWptX1lqQkVhaEpVS21GSFczbUxDeWoyRlpiWVRtZ1drZVhVMXJpT09NZGVFZV9iWW1IWmxIcFhjZTlRZjNKcnVqNGVlYXZZVVhaVm1xNDNEWEFvTmRIczdJT0JKcUFGeWlpSkF1X1phaGphazlwTGpESFQ2dmtlemR4TXlwYTRPekt3ZkFlRXNodzVuM0ctelJqMGNwSWVIMUl6YnVsMkhISDVEYXZZS0MweHFOd0d5RU9VYlhHSGhWWWFWeTlscVl1T3NhcG1zRFNfaW0xMnFiLXNZUjd3SURXWG9uN2VBaXViZmhnandUd3NmMnZSdzlwdHhyQkJGY0txSVI4TlRwTGUzX2tydDRRMlFaWThmWkxhb25HYW1kY2lmY1JRbV9takp2WVFHdEJiRmR4ZUhEeC1QOXdzUjFZcDROVmt5LTFPTFh6MjU5REs1andQMEFxUWMwSFBTLUEwZ1I2RmRMZXo0Tjdrc1R3N1VEOTdXOGhMOWZlaDU4bE5OaGwtcjNDbldYOTFJRnFWaXprWDd3c0U4Q2VSZ0szc0ZNVTVYMDZYREQtNVlZWU1feVFUMnphckh0YlNoTVdzdEZ0YWthMVhENDIzbFVJV0FlOUk4ZWt6RmY3THZkdl9qeGNXcFVEOHdLRmFEWHFUWmQwY2M0dkF3elQtbUpja1VNNTFkRUNBREdoeWt2M2ZrUnE3YnhtT3U0OWtxT1lLUkI2SG1fdmFqenpMNWRzQXNKakhaeDU5Mjk2dGJ5LUNaWjZReEJzR1F3ZW1Td1NxZzIxRTZpRDFKbVFHZUppVnV2ZmxINDJzR0NaaHBIeEU1d05oZkd6dk8zMEh3VmJjWUJnNS1Nd1lGcE00SzFMUnhOMS15Q01lcHJNY245S3E1NEstQTROOUZWdkEtbnJvbWtyTHd5eTNPUWJSVHlfZzJRbnRYcy16N3k2UmM4bkMzem5ZaHQwZS0zZW4yWVdjTk9BTTBTeGlnVmpabmY1M1ZDNlRVNjVKMGdETkQxR3NQNGFuNUUxYy1SVXp2YlRUS01XczNVem03UE1OZm5iV2hkRlpCX3ZITEtDTm51ZW9hazA4SDMySzlXMXUwMHBYWE9yMm5Ebzh2cE5maXJpaS1DWUlKSHVTZlB1MWFCbWNpQ0d1R2h6TEJCUktTWDlndE5aM0NvZFJFaGdJQ25TbE9uQlFnOGpBbWlYRmJ5T0pOeWxHUkh0ZzE5c0ltcWhmTzFRb2J6dFd5TDVXeURXOEpFMFlCeGdwSmtfUW92aEYtajZjdjFCYjFNei1KWWZPN3BMY0M5ejlsVGtWNzFacTV1by1XX01PZElhMV9nVnE2S0tncktOU2x6WFdjRmNZQmFDWlJwbXltOXBuTEdiNXF6bW9KNlJyR0d5dkJMQzZlQ1ZUeUczZ2lLY0x4dGZ3OVUycDlDeXZOblZ4b19jM0tEeDNwQVZDQVI1dnVKYWgyYURfZ2NPS0hiM21DOTdEVXpWZVVpZldmZlh6VWtROHEtR1A5S2tZeC1HazZseUN4RE94VkEwa1l1bEVoNE03MWtGNHZMQnFyUTg3aGJqTERWYjd5ZTFGU2g3bzdyVURvSG1oc0lSOEMxVTdDQkEyZ1hsc0RybjRBSmVHaUdPdFU4T2xhcm5SQ1Rzc2VHZ29YTmVqblFUaXdzZGJzX24wc2JXdU8zZldxSlM4Ymo0TjFhX3JFOVFPQkdTYld2NFA3NS1ma2h3UjMyNUdvN2hlYUxaS01ZNjVlN3NwWkJUM0ptbHpDRWMxeGF2SW4wd050b2FhVDBhNlhobDhnYUFvdFF3Ymx5bFJaX0JuamYtcmdNWlItcnlxMGl5NVhxX3d5QXZEX1UzVmY0ZDMtWjFQZUV5azBBdzR1Z3BpTXRPN2tYT1huVEZDR3RHd2o4clJKOGk5aTVLby11dVhxX0QtdlBpVDVaUGl3dEF1ZnNmVTJMbDkteVhlTHQ0QVp1R3p5OEwyWnBBVUJjbmRCVUxDYUdRWmZXeHFkaEpfbWZyWDdOWE54OHVpa1JxcXIwQm9EejhRRzhNdnJFakRRUHRXQWpQWldnbmJXblVmVEllN3JQMnYtWW1VamNtNVBtUVdhci1Xbjd3c29BU2lLMEYzYUlxa2d6ZUc1a2E3Z2J5T2JxZ0p6ZExlUnJ4UHM1emVYWlRTd0k4aE1zZ05rWlktN1Q3TEhHQmhsdDhLVkpfdXBnVkNOOTdIS19TcnhFdWItOHBfUVhhWVhXZW8yMGt3ZHJkOHdaMzVOOURGdzhQVjhhX2VaSXc2a19zREh0SmluLTd4X3NIRjVmakRjemRaQUV0OGdWc2k2aGVjbTFQNGhTcWFYOW5BWnpNNmhBbThTRVozOVNIOVFDTkhSVG5JQ2llT2pJSS1tZTA2aEhHRzFEV2hQaUVfVktGZnVtbWpHYVN5Tk9pREp1RzRQdXNscnNxWko2ZXVsdEdrSHFPTmxrdDQwQnM4VGJtbEZiYWViLVB4S3ZEcFJmdVlPTzdkelNaUFFScVRCM1lsWjN4Mkl5a0FENERCQUk2UTh1dll0WFEtSExKaGdCRUNfaVNMXzhtdndUNi13QjVtMVQzaDZJMXZQaWszX1JZN001WnBuOHZQUXNIeDlQRzR1MHlRUmgxSkwzMHI3dHY1MmVFcUREZnlqV0ZaUC1ENnlkVEwwNDgydk9DTlQ1aldSZ0pGeEJTNkU5SHYzWDFFLXljUVJ3Y3hJMzRidWl2b1pQUXRSazZrM3l2U0ZLd050V2RBN1JINE8tbm5mb1hUZFpscEd0aVhjYjdMcko1S1IxbW5YVVZqYks0aVpfLS1hOEFPUlhaUkFtMGNrWDFHTTg5WWIwS3RDNGFlWmg1VG5KdVJvU0EtRkwxTzFneGtmNEExYXlvNDNJTlBrVUdUMllwRE9fRVU4RlkyUG8tallqdjNmSE40NnYtVWp2dEpaUzRhbzV0QnB6dDdYbXNENDNWWk1xamF5YWFTX2hxYmtSTE1kZ0luYjhLTXZycnBNZno1VlpjdDhLWTlaMkJkRmg3b3BrbmVsSkdYMXBLdWRTSi1WUWZGcFNDVjltT0dNN3RpSS1JSEtXUlEzRGpENnI5OHBib2pCcUJsaXpsdnNUWnJodWc5azdKSWVhazRIWEs2cjUxb1U5Q2RObmlVNUJEaDJfY1g4bjFIeFBWcnBRMDBpald6MjNPZklZbGphLW9TN2ZvVlB1MmFJck1lb1RYZHNfSG4zMFlxcTQ1NWxyWENrZVlRZTZwVC1GM2ZBWTVidWFEQmI2b184OXVuNkwydHlVY204bEIyWDJnaHdhR1dpSzFDb3F0MXg0dHVIVnQ3Ym9CTXFzbXFSUHY4UnFGQVdhUUtsdk5mUkQ0aGdETnJCbW5wTjVfVG5ZTzVWUWhtRGptZWVtaGEyWFEyb05yQm5oZ29jdXlvUnREQ0lnY0hnMHBBdGFvUnFlLUhKSGFVSktUblJtYndoSEhPR3g4ZTBxRXJHYkJ5eHAwUVhra1hrMHN4YVd2cTVpMklHMTVpNldTMmFfWkIxWWdNYkJfR1Z5MjAxVmZIN2NHSlVjVXJ0ak00Y3JCOXN2eU45LVBqSm5WYTk0UnMxejljamcwNjQ0OUFXZU1Zcm5jemROUEwyRVhjNjZtYzJRc1ROMHZrTDNSQUJWZUNYOWZzVXJ6OERySnZncGNIS1d0MFpVakU3ODRRZjNUMVg5ZVZkeVhleUZTRnE5cTlOY3A4bjZwd0syUWhfZXBGQXEwYmQ4cWM4RVZmdTdKeUZpVFYzLW5QYU1VRnNGUFhLeV93NGlIRmFjeHN2dVBWRlllZmlWN0pTazROTC1TTjNxczBUdGd4SVZVVmZiMGJHUE83OEQ1aGdEVXp0elFkSmpTSzRuZG5GSktSTl80dnhyUUx5aVRUbGpzX0tuVnVBOEg0YnJkVWZ0V0E5SURUbE5NbnFrOUdKVzNLQV9nVGlva1dURnlZcUpha2g0WWtzdWEzdjBRWXlHSFVuWm9iNUtiWk1SeHNuekRWX3J3dDl3YWhOc09vYm9XOUZGak1Ha3ZWd3V3Y05GMWhoVVI4bHNYOFYtS0NKNkVRRUdrTURJQVFfNGZTYjFGX2VnTTNEWEJaZlY5SldveUdXTUJlcWNSRVZhZ2FMcHl6MElZOHZJbXI5c1dPSUQ5a0NEMEJIWFpPSXNLdkhsQzkzd1MwZ0JzWnZTRVFPemhMd1B2dm9FRG5OWDY1dFdvVWtpcTlyR21lRTg0RjBPQ0JSbHQ0ZU1ZQmViOGtEZGswNlZoWGdTMWVTQUdPSEVieVY3MTFxeFpydndDOTBrZlRiWkp5enVMSVRoOXUtR0VualJHVXY1Rmx2eDZDdkl0aVIwTzdoWGs2ckdZaDZKQzlTZ2NibDd4Wk8yTDhlNXAwNUlhMkFZa1M5QWY0cXdZTGd1cy1QdXNZYjVtUDZieGVNc3N6TUJtekwxR3l5aDgxODhWS3lxWnpaUXkzLTBLaGNmOVRBOWdneU90M2RFTmtfTm92WS1OQ1JTa3lGUVcwT1NmRFdTTldIaldLQ0cwbzlHVkpKS1F4SnZMLWExT3VoYXhjdzBBcm95WndScURERFgtWXFLeUluZWVqQnZEbEZELS1WbXA2a050Qmt0djRuZUNNbjk0SGg1R0Frd21DTW1Vdjh0YnNwSE9fbkc2djFWdzhjcVVDWlQ4Q1hYN2wxZWU5TGNpRjI1QWVkRmFNbjZlYXJWZTNZWDh4UWpReHhwcHpnRG5MZ2dTNlhfNWlFaGtjQmE2akoyaVplZ05qcnpTN0NBeXpjT0tyLTl5ZTFteHNTcDFIdFEwaWI1dGJjaHZaT2tkVFdjeG1FVG5NVTdaZ2h3NkowT2RFY0F2Y3g3a3pSajg2V3BIQXZCUkQtZ19nTE9CTGdGOFVMVmpfZm5XVHZGcV9GOFJtOXlxVzF4OVFLektmTDktTENtRkM1aFRtN0xzUFVfT3pWOEdmVG90US01cXQ1b1ZTdGJmdDdPS3E3U2U5NjRpN1BvWnJlYi1PWTR5ZS04X016WTBpQkNSNkctT2p1MkpDM0RVSHI3V2Jla2NDMEFtSjg2c1ROSGtxS21xMHFhNlM2QV9GWUM2T2xzVEY5Q2hNWjhWV1JVSnIxQ2tCSzh4SXdiT0RCUldBM0ZINnE1U0xINVRaLXJOMDNkc1BCbDE2N2RadHRxSWlBQlZZNDRPX3dZWUJ5U3JlY2p3dHFOTFNHWXRTdm1LQ00xUURIdWFyR21qZXNPaV9xZ3B5cllRcHhfQTBCQzl5OHJRNmVGcDRHdFBJSEZQTlc3N214dTdTeUR5b20weFgwb0JFRXVMNUpLT2tNN2oyRE9KeHFaMXQzaXg4elZRYUZJc1FJQTdJaHVzSV9ISkJtdHBGbGd6OHFrcmt5b2lfUFNsRzgwUVRNd25LdnpSQVM5Zlg4bVZfRWUzNFhVc1Y1bWY4WV94cWxUbHNraFlCNXg0dTJoSGd1X2xreWl6MU1pb0FCeUxpS09yNWd0cEFlMDBhektqWWZ4T3h6bDNmTEY1TUJUelR3NEYwd0oxWkFiWVB2cWxrSTVkRnpHT1RKcmc0b2RnbjRGQ3dfNEJnbWxIRHZnNld2NmQ4OE9DblY4enpxYzNkZHV5M1VBRUZ4RjY5cl9SZ1JGcWFERjl0S2RwbnBBdTYwLTN5Q192b1pFTDhNWFpqZEVnSzZWbXpPV0FRT3VLTXVnLVNsTUR2aVdIaVpaTVVzNWpVbmxyUGd0b2VFLWJhdWd6NWNsdjY5cGpmcWZQNC1FS280YUdMbkpVS0xGbVVzcGEzdDlRQ1RiRHRSaG9uZFhTOWJzSm05ZmkwZWpPeEdEWGdMdnVRSEtUazBDVnU5TFVWUW95T0NsSjdmTlJGNzQtNWUxcGlDV3laTWJlcnhySFJCQmpRUEJ3bGVLc0ozT0EzanUzbXZkOXJHc0pwNm5XR0xwTnc1c2ZfanN4eW9RWUI5X0VzbnNXWkVhLXdpZlFNWWNaa24td3BKNFlZbi1HX2tId09mcTBnRDRKOWJ2Z05LS25OdzNMempMOE5DemtIRVVQSlpLQ2k2dF94SkFrR283bUxpTWtsYzY3bEhUZmZqY2pCT1Nvay1KRTM1NjdfWjl4VkQzSVZVbWtFTzN1T2s1dm0ta1FlejNUQUNfZFdsSTZZOFNsT3dvRWlDWFhoeFR4bV96d3ZwRklVUXBJMzZQOHg5V0RybWNGV3dOU0VFWlhfOTA4cUxpYmtCWWxqdW51MXN0RFNpdUx6N29XLXBJYXlMZTRRN3JKc0JTZ3hBMDRWT3NIVWdKdkxfcGxsQmtsU0dzWWJXX2JweU92TE5tV1pDTjFfZkhEemc0TmhGY2xWRThrdjZsOHFfZmNidkpTZnhJWEFjeW1jX0wweW12UzhNYUx2NGxhOWZZbnRYX0xULVJLLXEzd2haR2VvbHJjZ25ZUEdZWDdzOXJJSlRraHhQYzFobGN3a3IwSTBWZmY4Wmc2VF9WVUJtTWFNTjljLVlLWW9hTE5mYzZSQ1ZhZFdOYkJXa2hZZnloNWZDWXQ4cTNuQkMyb0s1bmd2cmUyZ2pPbEtuREpDWjJNZ3dXYXNrYzI4ZHloNTl1NnlvNVJvYTVXeVdEQVB0ZHA0dGZONUtOejBscE1tRWNxcTBsdmJkd0V1b3NMMzQ2c1FYRWVWbm1RQkp1eUlhTlpQX1l3eVpJSmU5eFZ6Qk5MdDdfa3dnak5maHZTMkF5REUwY09seWNlQmlUM1lQVFAtZE5qUzRVMlFOZ3JwckVaN0xJLUtQNlg1bzhQWEEwT1dRVEdNYWhaa2c4RkJIcXdabW9sbVVzcUtDYTFhek01RkJRdUMtLXByUV9rSVdrSUo2YjZzQndQU2stRF83SVdEVV9oM0haaWk0NGc0TGNmU25vWU5JS2tRMzQzUXNJNkJXVU9VRmFUSHh4enozcXd2UVhHWXliVXZWWDNXdHo2dnJkcGNPVDJMNGpXWlZ3blN5dHllX0pLS01zNGpzaUo0alFwaHRibUNvNU9tSUN5VUlXYmhob2VJLW1JY3I4ZUJDLVcwRG5EcUNCZHAwODhyRk04Z2hCeWY1Q2Z1Q2pkRE1BR1o4eTdCc0NZR1Z6R1Nmb081ZXRCbENRR2JkY2NvclNJNDBkaFdkZy1sMTBjdkRyUEtmTXBFbHRhME55YWtkRkNYYXNKWUZLRC01MW8wYS1uOS1SMGJFMWY2ZDlPenY4bVotVndzb3dha3dSOXYtdmlBTEs1WEtoemNiM0wzRzl0NkxLVndBWnlMQ2dZeVRvMTFMZzAyMWw4VVViM0ZwMDQxQW9rZk1lQzZvaHllRjdSU1IwYVM0V0RWT0hWR2pMRFBscUVwdzBtU0pFcVFBRTZJN01lLVBxclRoRTI1d0dNRWxUd29iWkRpWTFhbWNfb3dCdi1xUndDWVhXNk53YXk2eDhmY0M5eGw4WXh6QWNqV3R4cVE5N0lZa0pNMFkxMXNZa1Z4bXVnMmRzSFJpb0JWS3NCME1lcUJfcHBSUWNFUVNVaUlONEU4UlF6YzliSG5DQ080ZkI2M1JraXdpVzluaXRfNHVDRkwwMnJKOUNYZ0ZMSDUxWVI5eUI5V3NJaG5hRFFRYy1ZdVpNMVNsZWdubm83cEZjajR1emd2enpIMVlBOVk1dkd4RGU0UDhjb3YtMU5KR1dOWXYxYVFpclAtcFNneWtmd1hub25ZQlZTZTNtNTA5dHVBc3RGSXdUS3FlY0hoYTBseF9Hb25IcEFnZ1Q4ZDVnX1N6LVNCTjBrZHR1aXIzNTRqZGI0UnNzMHctZUVBMEdHTFJfNWFjRFBjVXJGVm5tSVZHWng2ckU5bHFwUWZhalpxVXlLN2hLRVZQQ29waFFzVDA5SU9XQkxWMjFxR0NsaVJjblBwbThOV042a1JjazZ1LUJ6VnlBaV9IU2dzYlY1N3VUZndXOGhkelFKYnc2b2lKTGd0Tl9tYmxWdXB4YndiWG5UdlhpSWctOFlCeW8wQUxsVGFOcDE0YlhnLXhZc1JaUWdBYjU5QmU0UVhXNFhGdjRETWxWRDRLR25xR2tISWw3a3RGdGZ2bTVMV2hoRzlUX2kyTDFObERrdzBBNGVLYjdQSjFQb3ZvUHF4MHZ6MXR3S1BTbDg5VTlTVDgtR2I2UHhkYjZKQk1hSHlwaFVGTnB0UGFORVNsNzNnUHZoWlF1RFAtT2lSTXNmV0s0SFl2U2g2U09FUUV1RGR2dHlBWGR0aUstcHUweHNvQWEyZG40QmxYRlBtMzFiem00bW9zbmpYTnZvdlpFaFhBMW91UHBZQnZxeDZrX3RNVkZJdUZENjJfLWRKMGpLbXRmMm9ocmlsWTJfc2lUUWlMVFY0c3hiNVhmMS1GWjlkMTJ0T2Z5STVqWHlKSnk5M0twWTFWcGZDZkc3VHRSTGQ2cmNoTWY3VTZMOE53aUd5QnFsNEhGZllJUGJ5RTkyNTB4N1NyWDNsWDhHRnM5YnpfdjNNTWFSSE1UUHBrSm44TkJFaDEydEtyNnlNMmFvTkRzYVQ4N1RuWmpyU1NseC1TWS1VRFVqSTRmMVZUYWo4eldmamNBX2VRanEyYktlTl84NGp0NUxIckVhbDB2cS05RjFlV3pUNW1ZWEFwUHRERGdvTHhMUk9zNGZkQlRxajFKWDlqd0FzaGxmYV93QnpvZWNlQnVoZU1BWnBpQ1lCTnM3OFAwbzA0NWF5UF9hd2tJQzA5VXNZTUFNNlltOTFZa0h0Z0N1M3Y4WHI2S2Z4V3NxX053VURHdEo4S2tIZ2lzS1pOeHpaTzY1enE5N0gzbURManRBa1dPU3pEeFIzSjNjZG9hS0RNSXdBY3RNYnQxem53ZGNLbDlfUFp0SW5HWGhqbmN4dE03R05oaDQ3NXFCSF9hUUdrOTFCc1ZwOXMxbmZmVzlyNjEtaFJqZ3NuY2NGUGZDc1E1QzBLaDBkTXUwdG9uUERNc1UzbFN1OUVpZ0hLb2NsVzVfVS1nNzBhNExFSlA2dm5iZmhJTWdQcW5nVkVSNDkxbGktV2lnUUMyalpCUEtuMDdBQjU4aDJjcjdSRE5LNHhDRzVKX3NyN25WNDF3Nlk2dWl2cGJtWnpVSDhEQ0hVMmVmc3FLNThtdjRGdlM1VXdTUVpkdmdYbzBTaENaSUNCRHEzYjd5TTg5Wm9Td0E5OGNaZ215ME15cW1QNVpfczRQczlRNW5sVDM2QXQtXzEyT2pWSmlkNDlwQ0FhNllFWU0ya3diZERQU1hmVHdPRlNQamprenVISm5PS0pUdnBLNVBTel9UZ2FURVFOeVZBRGlqMVhSQ2VHaXd5X2drRFlSWFRNS3NoY0VzVUdOcnoyNDdSQVFuM2o4aWZ4WHIxdWpQZ3hMUFdRQmFORmZRbFowYTUzcDI2UUN6UnV5LXlkcF9nVnJXanlVMzBsMnRQR0U0X1UxSFFzZTRFQzVSeHFsU0ZNRDhybmUxS1p4Z21fYUNpaXQ4b3g1LUU0blZDSlEtN2lDeVVHejRtSUlTajFQb1JxZHBSbm45VHBqUUlXQm9TWlhUTy1GX3BuZEt1UmNiT1hMeGJ3cGpIemd5akl5RmhjNk1EZXVhQzBTdGowRk81RHN6eHZCM19tVV9Bd2lORWQwb3l3RnNHR0JmcU9SZjVzQXpGSXhhbjFCQnZTX241Q1IySE9NZEFzV2ctZ0h0SFNpOFZVdjU2MXRRclRQQ1R2LU50d3hCZU5idkZhLXpIeHNFQ3FpSVF4VDRoR3RLR3dKV3hGZ0NWanlDRFA3ZkctNmZmQmhHWVVQZHJ0QWtublhOcTA4Q0h3WnJ5S2pYM19JaG93UGtWc3ZBMUE0TmtxZGlGWlktZWRMb2REUXZjN1c2blg3OF9RelcydDBKald1TTV5cnhCNWg4cFdEcVRVUXJHQ19zaHB6WFpuV3lES3BUSWpselFYbzFELWN4VzFrak5QU25xVFJyQnBiSHNXSHJxMWNFYzh3QWJmZlFRMFNxbkdXZkxkdzVwcnFXVjRZUFVTelA4cDgtVFU4VElYVVJCVkFNSDg5d0s0aFp5TVQxbFNjV25LWm9JcXk5d3Mwcm1OLTNpQzZXdlpITGN1eFVLNzJtYlcwRzQtcVFmc29HS2ZLOTlrS3g5WWJ5bkhyWm9HUmhxclVfYTM1QnB1NE1xWWVzODUxSDQwWEFESlNPQWdIZlFEYTNIdFVvazh6UV9DVWxubFZIaTB5RXF5RC1CUFRLLWd3Z1pfeEY2Y0xVdThSZnhTQXI0QV9zNERyTTZvZGl4VHV2SG5McVpRRXMwVzRGcnlWM0ZfaTZvRmxtaWdxZGloeUluclg2OGx3OVkxY2d2aG1KX0xUUmF6VzVrc3NRVW9DUDgxMC04aWJINGF1dzNLMV9pUThxSGJVZ1pFMFB0MTlCdjZBajVKN01HWlp1d2d4LWFCd1pqblJUZmFjbXA1TUg3RmV2ZHF1dEw5Y21sWk56YnpHWkF4OElrU0hsM041WVlENTc5ZnhZS09LX0F2NURnalJvYUU3V2prUTE1dWZPY2x0c2VvVWV2dEZab05yOHkwS19SRXNwTnp0bzk3NVR6Q2ktdWMtbkZXSHhmNG1VTWw2UFZhT2c3cjFEdU11V2x0aUdFeGYwdWMxc2Q0cXdtTFFrT2pwSHQyVlFSUWZaZS1NWjZsWlFKeHVyZFctZ0JaVUpseEV0aVpPVU1rTTRKeEdpY18zZFNJUlBuV1NXdm5UUGJMbjBHb2hXUklCMFZsUnNIc0VWR0ZBaVROMnplOXhpSTI0MEN3UUFoZnB5WmJiRWNsTVpOUDM0M1E3WHV6NEhtN2JLN0x0Qm1iblJkUVVZSnpVc3JLVC1jbG5WOXB2aE1vdkZ3NjBDYWpqWjhnOVZWZDduQkNCaXNKcVQtQ3Z4THpjTnJndzdZdy13TEJyd3NrQ2g0bmJKTjVSalFQYm9UdFJmV2F5X1hHY2tKZ3ZSb3BRb1Q2Y3UzMU5XYXdOdDRiZ3BmMDBlQ0hlX3J3TXhSaXdKLUpTY0IxNDQ2S0hnRGI0TzNuRUQtYUFCYTJUSmhHUHlPdWZWRkM1cV9pS1p0R0xTLWlSU08ya0ZfekNVQzFoZjJnWDQ3ZV94dV84MVVqUEJCRllQaVpPd19fTnptLTF1dFVhT3hiODRxUVpKbUxBZWJ3cEtyc1FBdlo1ajI0eXFsOS1zLXJHQVF5bThpOWFKZXliRUQ0OExValhkbkFyWHVQMHF1cTM0dWxBd0hramtJQ1Vaam94X19iSElybGNmOTAweTY3NXBHMVctc19BSWliVzlyYS1CVXQzM0pvdTZUdHVrM255NzgyWDMtV3R2T1YyaG1kLXhVS2dqVGNSWWd6XzJFeUFPT2FoNzAyNjZEQThlUkJ6c0Q3ZDJOVWR6ZWo0YXlBTTZ1ZGhHbHVjcU8tOVhLOVozaXFZYmF5MkU1Z01HazhBV1NLLXItS1Z6blBpMHkzcENRNDZ1QWVmelFVV2Vkd0RpNlV2MjJ6YXBwc0R4N2doazJaeXJLUGdTaGRrdUt4bmw2RlAzTVZKM3RVQkl3Vno5Ny04YXYtUTVoSW9IYnJxQ3VIei1WWGRycXhxQmJTNXk2NUxnUGJ4eUg2UXozT0tYTDQxLU1UYXJWUGNXWUdmRF82ZDhKSnJ0VTNDNnBUQXhKM3dWZnJUcThKa0JIQVJNVVp1el9uaklwZEhkX0JhazFGcWpPMGpxbkNOWFpJZkNPc3VVSHpPR05ZeGowSWRhVks3T1R3WUxnbF9VeWpuekkxNzI5UGNDTFRzVkpGeDAwblZONHFtR2tBbHZaZkJoTWgwV2VRMHo2NzhHamlVLVZNWnE3cF96MXExVElHd3VsLXBFYnpxbl9SUXNNT1NIMkJZLWpqemdQOXQ1X2xEVEJHZUx6NFNMUzNsRElnM0ctY1hEdDc1X3RIaUxRTU1EczRUaHBXM1NwNVlFWWNIVUYxejI0WkU0UUV0YngtRkdydkhmTTFvSm13RlQycmxXeXBadGt2ZVc2WkNJZU11bXZmSnNsRTRuZ1BYcXAyODRLdS1VVjlMRXk0SFg1MEMxLVlyVlQwY2NTY0NTRU5HNlQtSnkxeVB5ZjkxUXRCRXRyb2RLMmxoQVdsRkZmS3k4Q3pyT3hTWWlTM29OYjhXNWFxbU5wb0prNHJiSi1UUjVKSlpmX21KRy1wcmMwVzc5YmhIc0o3TkVsV3o4XzExYXVkYmNPNTQwQURQQU9NNEVWY0NJcXNVd3F1cC1JVnVUdHFUQjdmRDhUaDZZckhsWmtwalR1T3l4d3FLZEVmOGxMN0V6RW1VZTQzaWJ5VENjREU5UUhud3RxSTFJMHBQUnpSRUUxVnBiQ3l2U3dnaFlHUjJXWmJ1THJ4b2VQSDdydnplaGVZMGtWWWtVS3dTTXJzMWUxNlVxZldZUzJQVWp4dnU4ZWF5Q2tMelphaUZMMWNrcldja3RENHQzVllfUGY0RzM3azJYWDl3Rkc3QzdMZUdWVFlLTXhuLXFpRzJScWdIVk1oNE81UDMzdGllbDBwVHRHQjJBaE83VE85dmVYa0VvZng3ZTJ6eEp3b2JFOUtaaEEzLUtIOHg4VzFreVZBN1RtOHhFRmktVUlURmQ3SzU0LWt6bGRLUVkzeGhWSndlLVpEaHdINW5seXNCTklKVzdKZTl5Tlo0MnR6TG5rbWVHRXZFRG44ZW93dEVldWtBUEQ3OWNaZXhzTXVHRWR1dE9wd3dPVUVnRjF6dWZrbm1zUjFwbDU0MFRkNjhxZXkzTTRLWDhTWTcwR0QyRkhfQlAyN1duWUVTOVZVRFRTa1lfeFl1RUlic1VGME0ydUc3UnlwS19FM0ZERmgxUkFHTDBfcERoR1VhaXNSUmQ0TmVqV2s0TnE1enB1ZFgwakEzMFFWM2c3djJXTS1oeEh1a2hlcEktZExpOUIwc3lmRmhrSTUzQnloekdJbHB0N05xZWRrOGlGMWNmc3MyWDVlbVdOQU14NTRqcGhfWHRTS2tKblJ3SDkwMi1vOWNnZXhtdFJpdzZwT2hRVzV6TGFfUmFEeU9lMzhRYVZsbUxNdUlJOVFsMkFFRlB3bnV1Z1llSndhdWRSb1ItVUpvdkNOTkdmY0Rod0F1d1RKS1RRdXRzd2JEU25CWkRDQW9DeW0tcnJTYjdDaWJ5T3NqVjZjUjdhOG9pVkRrVnhIazdpQ0dNQjdMUGthLU1zTjVqbUtIdkVlUEp2eTN0VHRuXzRSOTliUXR2NUliOTc1MXBCY2J6OC1rV1R1cFhaQ3FrWHdpMndkbVh0UHktQjNMeTBMTDRSRTVUdG9YZDk4ZHVYczFLMGV0LUZiTk1ER0otb2pRY0thUjdkVXd5OFUwNEdvQnl4YkZ6aHJDU2lLRmdRYWZ2M1JQQldyRkVtdHkzZFJoX0kxZDdYSm1DX3RROGxNOUo2QzZjYlg1UE92SDZKNDRxOGZsRFVrUDc0LWhTckR3aElMT1Q2cllJVExZbWtlaFI2enBySzJLQUlFN1l4WkFDVDlwVGpJcHR3X0VKWGppbk1Odzg1QnJ3cEg5TmhnOThDdExnZkpkcDJGS191U0NPZnIxNUxJUnFqcHNLSUtMQlF6S2RuMW9HdVI0dUZOWEdEZEt0RjZDNEVGa0xiV3VTaG9ZYUdyQThoWHBDenpXck0tcC0xSWlLRFFWRTFMWXpxVjBfblgyajZ0WnNLVWY0VnJyUFozbnh3U2VKeFk0dWtsRTVyVXc4NDdsOTlpcmlzNEVpb3V4amMyeFRoYjRBQTJwZnlxYk1fS3NxQS13MUJsbWswdEllZ005c1RsbVZubTEwNnhUZEhRUTd4bXJ4c1JlNDFLTXhoMWttZ1pNbmxXdlZUVWJOVDUwMlFRMXB2Nmlwb0NYbFNQckpLQkd2Ylh6dFFnVkxBd3NqMlRvcmhOalhMdzdpbGVWdG9FOGhKWmpqb24tcjBxUFUtdFdaN19aQ2c1VWc4S1ZubGE2dFN3Z2wwb1BpdnhLbHZqMkpILUdsOHF3RFptUjVLMkFrODE0ODRSZExxSks5MzFtU1VTdW9lMUFCd185b0d5REUwX2M5ZDVuYk1IaDZzRkJwbHhDbFpTZ2VvTzU0ZThRbjRPMmx5YUxEOGJTN1JSaWlUVV9tWGpzR2NjMG0tX0JkWUhDOVNvMWRpYkJvamJvOFdKQkFUMTJKSmlCcG9MV1IxNnNVRTVEUVlfY0hRQWtCRzVQeEgyb2ZPQzJoMGU1d2lmaF84VVl6dE0wV2trQXNxZzRVU1RkV3Z6TlNiNFhfWEhya19obWQteHBNUGlMcjRYa09vQXN0cEFQdmx4RHphc0JVNjZuZjZ4d0lfXzFYamY4VGdzb3dPMFc0aFpWcFRVVDlfYi0taFZzWWFGeElKRHpBWDZzazJySFJBRTZmekdhamJvSmhxQVVpS3Q5TC01QzRPYW5uNFEta0thOGhEQXpIeUhBT01XVENkQ0hFNVlzUzZlR0FLdkRrWG96ci0wRnZHM1llVTFieVQtSGdwRWFKaFM2NUowTmswR1lMTWN4X2ROMU82NS1tN0xjbEQ0eWxxU0xrcmFUZFhWY3ktSHRNVGNvT1MycTRhMFpHVGNBOF9oWTNWLVBYTDQzdG9ydGFDRWszUWVtM2lLQ3dUZWE0djlDOEQ1NXhQUG50MExoWUlBR0VOa2U4TzBmcjZHaHV3N0RJazR4aHNBOHJnWVNMblY4Vy1QazNVRV9WVkZ1cGx5eUhyMFFYdjZyZmZVYXNfRUpacXpmUlRLYUpTSWlkLVp0NkJ6LUVDZ0QtdlUyRkFHTmZLTF9xa3RvemFocnhfQ1J4Vi16S1JhSVBkX2NsQ09XbjMzREIwWnZSbVJlVU9MUmZjRjB6SkNEd0g5Nmc2d0daMUhlcF96MTFjUE15WndROV9rVDIySlQ2TzFXckM5b3Fmb3lmTjItN0otWGNCd3M5azQxMVpLTkhxZ2FkY3A0SE5RT25LMDhOWlViYVJST19UUkxrV3FzaDBmbXB1M2daZXhlSkotQkZYYnZfSGFfRVl6LUoxRTVObERnZ1EwejdibEp4WHk4RGlRbXUyZktYa0xHelBSNzlucHE0am1vX3NvSEo2QTU1NFZXd0RtUjRGZksyOEE0Z3BacnBJODFGa3owZ1pSdzRoYmRyOU8xanB1MU03c0xGS0o2UGtXWXZrbUhXTFU4dDRGdGxhV1Nrd2I4YWpSQTlLNURrRzdXbjV3WFlhU0U2UUJ2MjE3X0cxVEFGUVZ4bjRRc3AzMWVCVWFnVDZnM1VGdVdXclZaaHMxM1JfWlJmMW1BQXVZNkdfdlkwWkthUnZNdzFocmdsRVFOLVFJcDNTOUhNanR5OVUyMmRES1RrSi1YMU9JTEpFNWM4c29BOU5meWcza1paWVVsOTBfUk9MV1ZaZlhXaDNxWF9FUVJOWGxjR1VwZG9RU3VaOXlvaWJ6ZTBhczlIbjduV0JJNXlqT3ducUNFS21Kdmp3RVBFOWROYi0yS2ZCRW5aWlNjNkw1UzRqRU94WHB4WUtWTUNlS2UyX3ZweXdEY3hkaFpWeTRvNkwweDdRenZfYjhqY1RxSlEwQzVQdlhHLXlXellyZFZJeWFkTDFQOVprdXlnTUc0Y0puV0tlZXlzMlJJaU13cE55OGVoNFhpcmdnNjFNN0g3X3F2eG5KYzB5akp1Q0Ewc0xLWElrSmgzTXU1MjFibldrck1PRE9kQk1URjhLcU9iaXJDcEdFOV9VSlhjYWllcDVMcnBKUzYxYVQ5N2hRcjU0dGRoNV8wUDJVdEtmNTN1czdKSXJqWURWR1B4NkptSmtsZllQZmtaQXlTYmRoc1Nmd3dldTB3Qk85Y0c3SktxNDhkR0Q5cUFXbnVpVGxfZVY4bGFaTzJDWERNamdCd29xWm0yZzUzc3YydnRHNmJ4TU9ZaHkyb1RQT3p6dkpYblhRVFVIaUdNanQtWnN1THI0Y2RraUVuQklNdFpGM1NETUJlV3BHM3VUQmNfZ3ZlbWdVTkZadFMtQVp1Y1o2MzFobmlsTnd2QlVOWXViSUp4VFhMdkMwUFMxYXRSb1A3a2dwQTFhNVJIZ1Zud3o1NXJPNW5rRU4wUDVqcW9DQnBhX2pqYzkwN2JNWTR0NnVrQk1mdlVPbTlmczNxajBuQXRHb21oZkQ2c05fVVJ1SjR2TS03M1JoTkxocFJxdUlJNFU2VUhMa25lZmRkN04yQ3RqdkdmejJPSDR2c0dCVENFVmpRSkxFWTRLVm9OVEtBdmdPaDVBeFdBVXlNRkEwWVp5cWcxT2dVNzEzNWJpZDB0UEk0anhMZlNIUkszX3owQnJob21yRmFJMFp6NlFJNHd4MmRvXzhjeHdKZkIteVVBRDhhcVgzQzdlU0xjMkdseDNoelA1ZGZDajYyeEdoc1dNRDF2dGV0ZzA0VzJGZVh6YmNxNXJxd0k5dEtWSGRJTy1HclN0MlJVUkd5QWZNOUc4RVpHTy1jdlE2UHpXRkN4amZNZHRlUjk4SDNQU0FxS1JOaXhNNkdpZTUtVzhQNXppZ1laRzQ4Z09GMUkzUGwwZE5JWmNQTGdIWERTZkNqcXJGTmZOazFaWFg5eDZOVm1qQm5qR0t2dE1OOWRCT1MtM2N4YkpNS2tnR3BOZms0V2F0VC11dllUaWllRXM0cEdEZ2ZLel9ReHdCeU9XVkxoY0kyTDEwaWg3QnNyOTFZc2pJY21HTXBYdmxjYk9aekw2djhSMGRNTjYwaWpfb2dMWWpkVS1FY2o2N05taW9MWTZaY011M0NGTG5VZy1qX0EtUVktajlXRW1MR0liZGt5ckd0WDZtekpLU0VDUjFBREZTZTdCb2hPUFd5Q0E1dFZ2cU50ZE9oM2FVcmdMRVJQWFJsRUpGVDVZcmZsYU1KeGM1YXR2UDZfakZneWdpLS1WcEJoNHF6TENKWHpfcTlRdkIzOENFQ3JwdEhlM2FoX2lVVm0yZTM4dmpSOGNrbjdOdlFiOVRxZkpFNzdKeWhaMDBRMU1BaUUwXzR1UlRhXzdPUWZJWDdka1JjbmFDRUhHRjJWX2wtTkxrVHI4MmpGMldQelZraWh2b1U0cVZaai1vVzB4blhEX2JSeGpRUS1PenZaN2lNSWhLYm94cVRTeTloR18wR19HS25kNnZmcDBzZ2lxb2ttNlFIYUpxQnU4cUNPNzYxX0lOVGs0Y1NpZVpuR1R0Z3RjSGdkSS1YZUlkNDhQQkdfWk5veXpSb3dhTmR3a1QtVXZvZlV3Z2NoUjlqR19YZUoxZ0RZVW1QOV9tSHJWQ2NkVUtYb2ZzUHY4MDhXNE10NXpHT2ZQcFB4aEFRZW1UUGtDMmh5cVNYRmdOUlFqQTNsVkZTUzdBYTBQSE9HYjJaNVNOMGxFbmhma3hLaTVaWFNwWXU4NG5NZmJPamxKcW9Ta1FfVU80U2kyb2IyLUkzOVlYSzAzZjY0Mmd6blBPel9kUTN6Nkg5OW9nOFlweExGSlZTcmNPNnZFaFhRV2F5Wk5uVWJZR195Q2lqQl9Dd0xYUzdibFpyWGZPOTlhMXVFRkFPd19FLWFpUkNqSTh6QVF2VlRfSU4yc0lsUGlYdm9ZeXd6Yk4yUXQ5WXphM1hMTkJucHF3WW83WWV3SUpuel9qQlhMeFY3WkR0QnRBT0dPN1AwY1VWZWRGWU5OdVl5TWZ5dkRVdW5LODZkOFRzb0tKSWtMYUxWUG9KdDV2TzJ5WWRUUm54OVBYLVFuSHIycjl5U3dmdVE1c19SNmNjTGVMcmNoWFZIaXoyQzZQTDBtclo1S25QamhPUVBqckdCVGlYS3kySTdzSW8tVUpfbTZBS2ptUWwtX2p6dGQ1UEpWVTNMSVM4Q0tTWlJaT3h1MWFRbmVoYVpPWlVTQW9CWnVZM1JJY3NUd3VQdFRiMmtQdjYtZEpRMldEUXhJd2tMU1MxQXo1aXNWbmV6UmFtb1J0OWhPTlg0aEV4b3Bhbzc1VktsbThiRGl3b3BUTHVWM0RkN3NiVmwtSDBISUZiYzJST096bFR5RThhd3pYRVY1dlZnTmhaWHRuSmpTaU1LTzM4T2VXU091X1BZYzdZdjAwSFV2LW0yYlgwS3VuNWJhX2dXVHMzRlVTTVNnRFhCUUlBMHg4bm1uWE4zVU5UVTJsOEhnNGtCdldHRXhrdEdwQjFBMkFQWTFLS1duY1NpMDhYT0dHM2ZMQzZpeHI3c0NMMWtEaGpneWlJZFM3RGp4MjMyWGNQZ0dYRkF6ME9pc1RQbVFuRGgtanJldE9Wbi1lamI0N3dRLXRPUm9uNEI5cGloRjVKQ1ozcS13RmQ3d2pXR3c1ak1DT2NXemVxWlBmSTFfelVrOWVVQ29sV0JBeEw0MWJwSk9EOXlxbXh3UzVPX1Vsc3Rka0dJd08tVE5ZTzBFWi1zTEpwUmVvVXQ1UGZCb3diNlNuS0J1cmZjNHB4UVhJRkhhVlNMczlFMERqNjFTVEhGMVZmc3djTVVCOGJTMF8ycDJhNVdEd1NIZXRlU2NScVlxcFlyZUhsdGdNc2FGZmxSenFYT0dDR21yaFhPNnhDaE93THdNb0lNNXZQM25lT0cybkotTV9pOXkwY0VmTGw4clZlMjF1RTNjX3hSQnFGV3ZFY2hESDd3eUhOT0RXMGpHY3ppXzNvTm56aUlOM3NyYnJUN1RRN3NucG1mNUxkRzRvdEdVTmdoUmN1Ml80TE5vUnRTR1Jab0d0UDlEWjJtekNLSGpWVDZNbUVhM3J5aHNHVDRJeGl3RFVNc2dCeXZhWkk1RUNnZzFLVlJ4bUJxMlV0dHFLZEJBTDFRdVlFellqeF9tSTNEZFkyV2JMZXJEdXlXc1FGbGZVNzA2SDYxLWxQT3pNQWNWTGVYTFgwVXk5aVZJNnRTOUZkUWZoUWExRjdQWUIwRlBoYVp0Q3BoYjZSUnRkUHFkMThTd3UyaUFjNzA0Qy1FTVNWazFpNU81T1JGS3BxdXVNX0YzZFp6QlZQNGlWaGRHZ00xMkZ6X1l4bFA2THdPdGNMU3NrdEVWR3JlUlJUakoyTnQ0U1U2MUhnN3hnZ3pUSDVoWU9CTXItRGtDc0pveHNRNDFqQVF6ZDB1ZmprT1VXT0ZTX0pWemNIQXRtSGNjRHhwdkR4NlViNzlja3JNZUk1YXdxTjNtRHpQVTJIY2ZhNVZtTzk3NThtNUFUS1RxeDdBdU9ZbVNKSE1tdldjOUtOWGFodEV0ZFRCUGtLVGJqRjl4ZUNBaWhVZU9LMG9SU2VxbnVkWEJEN0VlcUg5anhRWV9qS09BLVBjN3JXWjl4WFlsLVpKNzFXNGpYc0N1Y0xFMWZ5aHNwOU1hSFU0dlVTMHVWeDlkbGhUV1o4MERHV0Fpb0c1N05SRFAxQktzbWduZk9wUC1FYnRaaEd2bnVraTE2RC1WRTIyNTMzZ29vdGtuQkFtWFFhenJhS1R1cXNNR29ZM1JheHpRSWxpeHc2NGl3VUowMk0zaFFSOWVXN0QzdW9vSzVKT0daZ0ZZaG5qbi02LTJLQlUwMEJQVHNuako3VUNfTGxSWFpOSjBLSTlLWmU1YXdUNjRNamxuTGhXWl83Zi1CVTZyay0taUJJSlU3X2pQMjl3cF9qeTNkWkVXZlp0MlZnSWdiZktPUE15cDFUNjRhZHk0OXdHYWVLVHlfMHNHQ0s0OHNkcmZkNGVSRXhYZUt5Zm1KX0Nqd0ZwcXhaZ25TdG1DVFByZnRCd1BhWXJHU3NESkloOWdWWk05ZHRtUm1ZV2t3aE9RNlRENllXVGJfLUgybHdFMmFldG1ZdGpGMmt2QzYyQVd1UzhnUmdYeUZIZ0p1ZlRyUV9JSks1dmYweXo1d2pXYUgyd245bnNOSFhBTVVqU2xNM0VQS0ExNFpGcVJuSFBkQUlXclgwN0hpcXgtZ3RkZkd6ZFVHNGRvN1hLZF9uNkxzb3BNblpDSDhVNnliV0Juc0dVQXlVVnF5cEZ5ZzZDSm1vb1Zoc01GV2U3YWVTNkZtaWd2QnNTbnRVcWVrTDR3azZGQldJS2Z6YlVKSGpiOVpod0VaelFDajZzbDFIYlJUYmVLQkN4eVA1RWFUZnlTVjdmRS0yaUI4THJIS3NYNWM3QVlSNE5OZVhOZUkza25SWE90eXdWempFNmNIZUVPaUVod2lsYWZIakRqWUJuM2x6aEg4cW5JRWhvSGNRenRCb0piaHJjOEstZkU0VFdHNTRWWjBJZ3ZHd3JfX09yNzRhbDE1WkMxcEF4WThaRC1zZHIzNE92cDNfUXF2YXVQNnlpZFQxQnJYbGRzUmx6NFlJM1A0NmhwaHhja1hKbkU3aTF5Z1ZsalBEWHhORjEyemxTVXBQSUJkRlE3UzZsc09HYXc1TGhjY09NVldvc1VHejRuZ25ROEVUVHRLX0NLbUJrNlVwLU5CNnh5UXNrTFp6SFFod3F6SEVPUTk4OWMxWnlrQy1HNWJuYllPbUVHT2ZUcWhTdEFSZi14eXpvLW1kcFk1NzVHWm1XbHJlZllhcWhQd3hSbzctVTg5WUF6dXNBeFZWOXJZTnktZ3N4ZTZOQ3YwbkRSODZiYkExTG9QYWd6bGhwSkRNSU1mU0xxNkRUWVA5SGdsM0Fmd1lEVm5sVmNOTl9oWnBkTnEzMXZpb3Z3djk2U0c3cmlMQUt1Q2s5djRqQXRWdk94Sm4yNUlXZHFPSklfNjdXNjlZbEtKZXBMclhzbXR3eFpWWnFJNG5wYjZhZm5yZWpHUWpPNDM5QTlQWnVfazRJeXVRNlk4V0xVdmt5MndNUVpTaXlaTFlHUDJTRmluLTk0NHNmdll1Rk1yS2VKR01qcEhvMXdpZGVTRjQ1Qk5PUWtzWWs5V1FiNV84Y3lGZ3dXTXNiUG1ya3V2ejdCQkVhVlRySnJfd2Z0NFgyN3BuX29fUF9xXzBkZ0hGRzE1NXdlYW5OdDczcDcyVUFLd3YtSE9WZTBxWkNQaWFoOV9wczNkelFLSEhHRGJKWW94Z2VIVU50WnAyT1h2RnBkTUdFRTBzb09jdDNRLVRvUHpXelNzakZlYmR0TWNUWlVPb1c2cjBlMjRaNVpia2xRa0FSMmV5UlA1LVpfRnNCSzJReDdmTGZaSnVId21iNkd0Q3dyR3ZNNU9DNlhKaWtTM2JJNk13akw4ZU0zLWxETVlpUnUzRG5MLXotZzhZUG9XMDZVMl9XU2tabFg0QnJCX05vYUNhRml1dml1V3hyWFBqaTMzNXlkQlRMbG9HT2pqRmh5SnRmUExSRjVLM1JFN2Q3aG5JQ2prZjdpU3EzS0pPR25QWXFmcXVUM3RQNmUzM1B5ZEZjZlR5SlF5RVNiX09DMUlDZ1p3d3E0UTk3LXU4b1dLQlZ5WmFKWFQtZXUwaDNyQjFzVDR6ZlRVM2JSWG5vOWFmSnJhU1lhTnhkbVNZOGZ6aWNCSlNNLVI2bWVJdmtQd1IxVjlVaWp3Vlk4MHhPVU1IWG5xX0RDc1FwcnFrZUtMWERrTExWa2xpNXBLbFZNSnlLVnlrd3pleHpyUkYzSVhhNWljeC1yS1hEMmtSSWxvU2lla2tBUDJtcGItMmYtVHE0cktyY0l4YVBjY1F1NHZReTl4UFFOVENPTWI2d2FYWVQ5dVl0ZjJYSjdkMFRHdlJ1V3lPRnNNVUl1Mi1yTlg1TGZLQnZOeWs3S3BrSGtNbTVMNmF1LUFQa0N3UHNBMW1KNFMtc1ZYb2ZrWmY1dTdBY0tINjlCem9MWDZPOW5ydFRDcEF6bko3OTl5Rl93ZVA2QjJicGprZ1dTMDdxbHIycDFIZUF3S0VqZ1BFaFJtcHdTTVJNdHlmdE5qUmJWaWFOaWFuV0tsTGhyVUpCbjN3VlJyal84QXZLbUdfcV9CZDBWZ0hnRzhRYlotSW9uMFhUSVlIQ3ZLenEtS2x1bkY5R2gyU2t4aXlLMF91TTg3dFFoZkpvT0YwZlNEcHBNV1pWZzhhY1NCcG02UEhRQU54NG5SYmQ2OXNCb1NKdFZLdDQ4akxXdXBhbVd3aTA5aUVVRjVBUDBBRmxmN2U5dnBHTDF0N3p6SVpSNHJvcW1mOUxQNm9oN1Bfd3RVOTNwX08wUlZYUVZpOTNGTHh4d1hiajdubGJDbnVfOGFuNVRraXJ0X2ZXeHF3amt3T2h4OElSeU5zbnFWSVhlejFGYnhTcldDWHFyY3RDLVR6WUc0OTZTdE9NQlNJS2xuNkI5dmN0RWFMdVZuOWo5ZEFhd2ltTGl0ZjE0Y3RLNUhuOXhjVU95bDNVakV3ellmUFVTeTJ3UzhnNXJ3ZFYzZW1USXVEcHB6NHFNRnpsdFJWR3BvdGhvcXZXbXNMY0dPQ2FjMWpvek1RWU9RcGhZWjlLUXp6QklZWF9CT0E5djZZZk1OeUNvYWpvMHktYy0wdVNDUlN4TG1zczYxZ0thVkh5UElsNzBNcDRLRl9jSEp1Tk5RVHpoRk8yQXBGSVFvSHZEdGphYmJLYlRQU1hyZlNPeE5sOVhDbktOMjgyZjRDam56SVVBQjlrdUYySXVNblFMSENlRnVDMDB4TXkwV0tOWmFtc0NScEpDT3M4TXltLWNwWVA3eDV4aDBtYUdwQnJYdWRGdlctUGNMYUp0X01wU0xJcUwtWjlFb3VuREd4VHdnZTFVNDhuSlFZVlY1RXZ2Sm9rdTV5UlRBbW5KT2dPN21MWU1yT1hVelhOSXRCWVNGN2NIUlNNNzdObDRQQjVXNFFBM0F0bDVWX1dQM3RiWmhfOUxWYzR6dE92XzlnYmVnQ1VtanBnVVh5SXJMVDMtNGQ2d0JZOGtVMmNxY2RpR0xxclZfWGhRYW1xM1MtbGtrZFhyekloZGVWX2xvX3c4SFpISC02XzZ3Y0oxY2xPOWF0eWdiN1RvS3dnaXhMcWZmUDlfdU1MVC1BRF84bEUxeVZUQzM2WFYtTHdkTWRqX0FCYmxidWNZNWYyVGNkNUZpeU9EVkd0TWp6T0tvcldqVEg5Uk9sRzZVU1BJMjlRblVtMTZzVEFPeWV0cURkeW9TbFVYSDhVV0IzWE90bm5kT19DWW9CbFBiakVEQkd6X29OUHYwWXJKU3BtWHg3UGs5VFRaMEQ0VEpMSnNUdEZTMzhtLTZTRUZuVkF0d21pUThneTM2VzZFMUEzX3I1SjRFNUFmaHZmeEhGQU1mM3hyZEp2Zl96b2w5ZVVKWHFaNlJVMnZuRVBxV1FkdTM5YXh3MXVTMmFNc3d0WHVlV04xVnZkRUhtdkVLbTdEaGYwRmtwNjhUczJaZzVkNjBBbUowWEhEZXN1R1c3OXRRM3NuMGdtVnY2SnAwTkl5NjlPUl9DQjFiRlZLSVZyeFVNc2NXa3FLdUJEU2ZOSy1jWGtZbUp0TkdYMlJsSlVHTjhoVVFEVVdrR2FwdGtjTlo2Y2M2SXpDQk1USzRJREdWR2hma0huMnZPXzJPWHdYLUFaTUJsaG9hRTRRNTV0Tk9ZUGp0Ui1hbk4zYnRWQVVpRm1hRmNsOUE3WjgyN0dGWDRtT2RjS21kcVRobmpLRWtNS001RzFQWGhZU1NRQzlNUWl1Snhtc2g5eVdJNXNUckkxXzUxVlZzNG5KdWNqV3A0ODdYNS1nemNiSEh1QXJmMVJfVEJqY0cwdGEtcnh5Sk96dG9lYVctVWRoWmpLTmpBeTZrb3U5RzQ3WWoxM0hNT25sR1VzRU9tYjZWc25XMmFBV2dqQkJzaUttRGpuMVI2VnlJS2VLcVkyWjNFQTdGTlB0WUNrVnZWNC1VdHdJaHlCNHJ1UzhKM2V6T2RJN0hkTEY2MU5QdFpWMy1fRHRUYndPa3VSUUVJdXY5TU90UzZoWFJjTU5zdWhWSVhlZW5nbXVESVY0bnZ6Sko0SWwtUlRBdEpqWXZjczB0dUV6c19VT1FKM2RvU2lxU1NBUmJDbEtoMVJvei1UYjNneVlUR0hJZVZldmtadGFyREJLaVF0SkhiQl9hQW02aWtzazBTZUY1dW5hLXY0YzBUYjV2dG1DbDNHZ3ZDZ2xTeEUtNDZEYXhSNEY5TlFtOGZFTDJCZkItZVNBdk1VYzYwVWhRYmxZSnJ4Ym5UYXk1ZFl4Z0xwbUZOeUNWdW1BUERCal8xS0FlcEhicGdWU1QxS3I3eGxoaFlHa2V0aXVFUXA4SlFaMEJWM3UyeUx2S21FdzRJLWVEOWJtajJ4V3hERlA2Sm4xcUQyNnpfcTN0ZUtMd01KX2NrNWlGajZ4Vk5qSzBITEtsLUFTSExpUmZPZURKWmY1Y3BkZUtub2YyOTI4M3k0Z1dEd1NZd3FXckl1N2pzU25mY0wxUEdCZHQ0NFdmeGZMQlI4MEVlWlplZ3I3VnlaWmVzS2pGOGt3Rktyamp6Z3EwRFhtTXJva3NtTE9hMW01RzFMR2JaTEw3WEt1b1Y4MHh5UW9DOHpaZmJHN2lHbVhQdG02Nk9tV0ZlT2FaRlcxVHBmZG15c0FXNktLRXBnQWFDYXFpMzIzRVptbzlCbUQwVlJYeHd2NnRIOWhUaDI5TkxJLVlwd1ZSNENMWGp3VDdXSWNVVS16Ym4zNUF1VHVNcUp6WXF0YkxTVWk2RFh2cVFKTGFCeUN2cTlqb250VVRjeWpBc2ZLZnRFM241VEJBX1REc010RlFvQzZGYTl3aVdFUEVrQUJIeDd0VXhUT05IQzBwUkF2Vk5FakxuNXY0ZHQ5T0tBdE9BQVRmRmdra2p2R1RkWWJTcW1VMnBmdDUwT1NKTlVFWm5aenUyOHpobEFNRHhubXlkN3FRdURPSEZBLTB2TzNsUjl2YTZyWk5LSFI2UVNpdEN5TUhxUktyblNMdzVoRkVCbGxwUEQyZThVM18ySjY0ZVp1Z1J3Y2xxQzR1ZzZZRGk3NHNid0QxRTRsVFh5Zy1UaC04ZHBqZ1lCQVUtejRTTXhvejZVOURKd0xQNDExT3dyRlRUYVZCdmlPaUc1LTUzT0NuTkpreTBQMkQxNFRzUXkxMlBNaEFwdzl2TDE4bV9fN0o2dU5OM2lqVlY0dGN3cnVHYkxNU21TM2wyTm1DYkYtR09BNlN0NVotbFZ5ZzFpTW5fQ0RITGI2b2xDYm1nSjFLVF83M3VlMjFvcmIyR2tFZjFJY25NTlJFRzFwamFzTjZRQ0VPb1lndG5URkhJS0hWSWhJQU03LTIydFNyMExlUUNUazdJRzBNcGdYVllxTEVXRDNrMnNjMklncDhKdUJlUFFxYV84a0pqNU4xWTRzMEpib0pkelk3X1Q2VU9xbnY3c3RDUTlmNk5hUE5JRzFPVEZTUXMweHRIZEVCdVFpeHpISzlNNlZGQ0ZmNEUtTXo0NGtCWnpoSHVVQl9nUnlmS0xHS3FnOUZlWUpnMVRxczE4NXpoMEhZb2FuVlJ3SjhFN3h4Ykk2d3AxcWNPejJYbUI5SjRsUEU2NVNYaU5vSUpkRktrb0pBam9zQU1ZNVhUZGFvbzFWNFZpenAzMXB5X2lXY2IzX1Rna1Z1c0xMaWI2WktpLVpQV2R5UG5keUIzaEpuMnZGd3hTc0xPeEYxZHQybEFURU9TNW5xdVJPcnhQMDZ6OEFsY1pfak9McFhhWXN3TThBRlczYy05bnlfQzdwLUdiUXI5dmUwRlZodnVTejR1eUdEV1dXekVxLTFCdmhuMTlmTGpnTVhTWE9SUjJHSHVUaUhyWFR6bGQ0eElKM1M3SjFGWlhQTlB4UmxYOURYWjRKMEFGemctd255MzRsWXd6eFI2X01yNGxyRjd6c2FsRXhlZHpmYUpfVnhnSGpoaEZmZ3FQaEhPQllMOG1lTElYalRGc1NjR1gzNllHZFZHcTg2aFpSdGQ2UTlVcGI1S1M2NUhkSnBwalFTUXJKb1ZxQjNKbndtbk1wY1JMQm5RVlN6T3pVX2pkS0ZQa24yellKWFBVSHY2WnVGb3FjUzgxeE5ybV9KUmZQa19tM2RjbExKcVFiRWVDc0J4cUpraTV4OW5kalYtVUpvcWtCdl91R0ZYWTlnTG5pc05jTHlJdk82YkRfOWxvY3hzMFZzV2dPX1ItdzNOOVlEYTAtRmFvOHUxOGgxMWluV2JjbmZQa3VCdzZ5SGkxeldZcVBpTU8wOEFlR2daeDBUM3VZbU45QURHbkd4Q3FBSVJHMkxFdXN1OENoOWotb0w2NEVhMTc0em5ZbjF4aFJXdF80RWNqZWpTNDE3NW9IN1lPVEUzLXVxVjFzemFraU4tUnZFbmNXYXQ3MDRna2l5RmZHM0JtNjFrOFhfTktFYmpCTVNXQlhLS0lfWFduMm10bi1wTm5lajVxcDl2QXhMcHQ3QTFoYU9jRjhEWTdhUkVjYnRYV3lFT3QyT0V2N1YwdU51bEd6dkR1OEM4QjBSVWR0YnZhd3VDRFBtdm5sSS1WOS1fZ2hzaU0zN0pUazRldm5sa1NNWTVjSWdpMWk4NTczMEIxbFE3eFFTQnh4N21WR0VQU2tlOHdBRkV1dVcwVl9EY0xRdkdaSFhPcW84SlJyaXB1OHRGTkc3eEx3cUV3LWFZNkZhTUNUa1hQMVJ0cmw0U2M0b3ZPSm1FWkV2LWlOUmw0cFBrcjdsdGZEb0puTGc0ZkxXU3hUTmVrZ0RYRmRmRDZzNnhhWXQ1QjdfOXBLRGhRT3RfbHZzV3BqOTdJTERlem5wN2c1VkJXbC1EV0lYWk5uSFozMmJ4VWJFRFlmRThUY2d4WUMzR2ctZl9QaEw5aldVMlg3TFJFcERCR3VJdktXMUItR05GWUpUM19Wd09JYXVvSVRiaC1XSDZHd1RZYy1acTJsZ2RPUUZmTHFUaFpjRllEM2RVb24xeU9xajMtQVBERHZnamtVeWN2YmZmQXlOMEFZUW94VXVRNE9Wd2l5R084VzZWU1FlOG9RVXRKSDZWTHNYb1ZUT2RjcFpQMEcyYVlNdUQxZU5MeGE3Q0tDRjlialVaUVhXcXFVWjNtb0htOHl4N1NCOUUzVnY0S0tmTWU1STJjdFEzTEtLdXQ1YkpjV2hqR3VCV0F5eHp4U3BkeENDYkZmTHdmOHFac3RLY1FBNURhRkt0aGtaQ1BXdVNFdXVEUjhMeVp2Y1FycThxZnZCdE9ZQktsLThpOHhiWjROVkRPZTRRNVlXek9IUzVKV0JheXBfczlnckhfM3pkRUk1eHVsSkhzaDgwbkVFRGhzazYza24weExHVFlNcGx6eFBKX0Z4U1NEMzgyajVpamJBQmZEd1FHR19mQ1lMaWMweVVqZHZHYjZkVXpSU1V0cElEeU10dVF3MkloWFdjaUVoZUs0NU5nRVc1RVBndTBzRWEtVmZNR0VpdUxOeF9uMjdnb2M3MGh2OS1rWTlGNjk5Y3hUa0Z1d3M1bVZzcmV1Y0RLWDFzVWFIa0hrUWY0S0I0Nks3bjBHWkR6dGRLaU9ROEd6OEZ1cmQ0UTlwenBMUEJ4QzVZNFh5ZUFteGdsd21RX1JsWExxVTR1ODUtUHFmcFVMeXkxWDg0WVREd01MSlBKVDg4VVJtcVdSOGZFQXQ5dTB1aXRYWnpXRndVdmtTYmh5c2V0UW13eXNPODhCdGhsUlZPb0trU3ltM1VZaGxWMG1TSlowZlc4Q3lmMDUzZWduRVh4VDhIeXFtMXZHc0pEY1d6d3g3Q1VlUzVCbkZkME5zbmI5d2xSdFRTTFNyOXBrNDlheHR1Vlcyd0hCbWhEN0hsV3lTWkNFVXdxYlJzejUxcmdJdXVaRlZFaXphNlM5ZWIxU2JSTlJxb3E2UHowX04yaGRtam1aM1FYSW0wN3IzRWlZUDdsYXR4bEI3d2dCSE1kc0Z6SFVtMTZmRXVaWXduVUtleWhsNWFrSEloRENvQkRzdUJNWEtRU2pJdUNvVXNCU0QwYmFsX3NYa0l6c3dKeUFnQ0R0cTVfYzdCY1pQTnMxbDlJdTBiQXV6d1ZzLUxPNmZ0a3Y2NnhuQ3ZjNTBPRFlCUF90Vy1tUEZoanlSMk1sUl9DbURycVhDNzNUbUdMRlVXV3F2M01MMmhfb0p4aU43U3IySUxIMGZ5VEJSS2psNHVoZzBqRnRCcTczMUdqMXhxaDVIYlF0ZkZWMEIzMkFrWFZhRlVmTS1IOEF6Vl9oMXl6UnBzNEJSMEdKYzNYT3JTTnRXZWlBLWdBVzB5YW4zdEJXeFl3WUZmcDR0R3RaYWZUejJrUkNIOGt2SjFaaGZxbnNaRkJLVHdyOUdVWkJhWUFTcjZYZC1GWUdoWU5BTWZlNzFIRXNxbWFIUkJ1WkVtWVpOa05TRThQVGVReDRzdjAzbnBoS3ZLd1cwbERHOU5IYzJVUm5nTzRSQ2hfMmd0Z2xVY3lRY29MZVc0Rm5tSUVVeFlnSFRZdTRJb3VsS2otc25SV0ktUmIwRTNHMEZ2LXpaNGhhT0w5NktNOUdIQ0V2bWFxZW9ZUktiMHM2eGNEY1hfUm9CdjZ4TkJfR2ZtQ1JDZHJJTUwybDJjQlVzT0k1WGpJYXF0emhIU0RzSHRidV8wU3ZmdkN6LXB2aVhkeGlVOWJBTWhJTVVVWm45cFdRbnpDTjJoVGRvWnZUYloxY09WSnZJWmJDUWRsRmxkQXRDSnU1S2NuSktrQ1NCVWtXWWNjaHhKUDRRWlU0WkpTN09taG9HM1YzY09QUl9ONE9PRzMxd1dkSGVNZWhoU0Nkd3BvR1JXU1B6cWlic1c1SmFNQlQ5TWwyb05yUDZPTW9QdEo2UFphOGM2R2duMGlPZkJ3c3JqcTJUc0xWV2pjZ2p6OEU5LXZvYnFCZlE4NDVvOXcyM1JCVHZaY0g2THJtcWJYTm9GdWo2XzFKMW1JQXAyNWh6ZWpUS2pEWFdSTlJxSVRqT2VTLTd5MXRIT09fa0ZEODIzazBBNlBXcm1jYW40ekZDUmQtTzBMb1ZqQVMzOWlZellEMkhnVnQxMWtqRXJMWUlPN0xlR29EampKek9TOGo3ckdraTVsX2hCYlFlOEtMSWZVYXduRnpjUnhwMVJnQlR2T3BySzE0MUhzTDZUTjFrUm1TVU5GOHJCTFkxZmVuNEpPdUtCN3JRaG1WcFhkaFdJVE5JdkRTT1o5eHZwRVpGMmtVSS00WVVSajc1VldSbmZrNVB2MkkyMWtKSEszYkhyS3F2bzZ2djNqZ0pUYko5STFQWVFFOWZXSWFKcHctYWM0OElBbnAyemdvTzB3bTVjSVNtM2QySUl6MmMxdEhjM1JjVGlpaG84dkdnSFJ5ZFhkY1FlbmVleVBreFdGQWxzZ1h5a0JjNUZsYTNkUVpnczE3MHpJdU5uMDJQUlVEWHp4WFZtY2Fjc2h3YW8tbXpuRUlXRU90aFVUWFBzaW82bnhfVXBjQnBYcTM5R0VRdDV1RWw5TGtDSGc5dGtuWG1yN1pmN1pudEFVZHZYbzdiRktIcEFXZ0dySXJPOUh6bzlaN2xlanpDeEk5Mzk3R25oTnRjR2Y2UjZ6QUdBY2xKS1RCZnNfNFV4bzhmN3h6WnVlVjFtMldTX1I2cDR1VzFyR3N3Y2I2T0phUExBajRsTlhaZVZIb3hYLXF4bUFMdHlRY1JXc3gxbFIydnZuZnp1WEVJNmc2Y3otaHliLUJsRlRqMXVCVHF5LXVjVEN6RkNkbkRtV0xoODkxQkVUcDBRd2VFWE5SWUtoN0h0R0lBcnZWVFlzMG5Hckl2dHcySkhIRFR6QUVQeThqVzZ1WndiVE1VdVNta0Y0NXNvY2RRYW9nTjVMUVlQWmRFWV9HeGJlTHdtZWtFeUtlNU1WNVdFMWdJa0VFV2k0Qjh2a2N3SFJfc1VNam9YbzB0anUyZXo0WUZWR2N0N3hxRkNMQXdMN2hUc0lESHlXTnFsNURLeEd1STRUbGw3MFV0eFIxTmpic0szUVotcDJtRURreUhMN2Q0aWtYTl9YUTVjMkZXTHA5andlN1dvTllWc1djTExmMFd1OFkwekRuMEZvVXlDdTFtSGdLV0laVnM2bm5FMkJJRHlzNXdjaERhX1lSdklMOXJKTWxzU2Vvek5meVlSRUJYaHBGYnJVX2kxejhSbWQ2T1YxZlAweE9ydHl4X1BCd1FzLWJ1OUpScEpFWEctSzhaVFhOYUtqWTI3bE12cGM2Y3F0UGVROGM0QmlQNjR2T2ZHNjJMQV8ySnRseHJyS0hqLTlNUWZLR0k2VUtnbFZzbU5IXzIyZjA2c0VqdkJFNFNJVUJuTk9vX1Z0RlJZYXFXWjB1UkxHbUlmSlQ1ZWJvTzlDWjdBOGVfRkpmNmFsbmxQVzNZWEctTG1FRUxNMlV0dEtFRjBqSWdHZVpUOGNfcmNQNThBal9hY3Z0dGNHYURoTjZCWGxxM2QtVVlaY2RhWnNsZm1vUTl3VVM2MExreTBSdXEwLUI4Y05pZWdEZjFxNzZnQi11SDZMeTRlbXNXNkd4OHQzbnNGelQ5X1d5Y0VCTHV6andSTDhYQ21yalkxM2U5SldpTXc3TTBPaEtYVHcySW83VEdGbXZfdzFja1BhaGRPZTE2N2t6eEw0R1A2WkdyOUlBWEFpZHJoODlTRWN1YlhBZ0NWa2VpQ3dkUl9uVjg3R0tZTnpQd1RVNFEtX2tWWG5jclFNcThDS19PU0lMcjZCbF92TTA3RTEyalVoVVdSQkhVQkFxSDU3V3NNc01YTDVCVXlYeHhGTUdsc2FWRXdyaXhmM0FDbXZaNGdudDlKOThBbV9VVENkbW14bGRwcDhZQk50LWc4TVhncWlYYkV2MERjUzZXX29BZVF1aFN2MnlaY056UzdTM1lETnRGXzMwUUcxYzA4WkxPSERtYjRtTkhzWXE3cm1yeXEwOGw2VFlpaDV0R2ttcGh5MURTNlFIcmU4MlBKOHJHRVIxTmg5Y1A0czNNbTlZUGVGMk4zVnNoQ29sYUxlUGhYSktQVVNZREljbUtqUUN2MnRnbzFEVWVwbmUzb0FRcVlkeFN1ZUhvcFZyRldsS3ctTkszdENiSjB3ajFPaVo4Mi1ZSmJwOEhYc2lwcGFNR2I1NmI0S241NlR3N2plRFV3SlZucmt0cm9kTkJlWHJSZFd0cEZtN3l5MHAwV3NSZjVJeTFrdkxYMnV0RTl6c3NuZFZWZ3BQU0doa3JMXzdNVUQ5cUpZeXNSb3dQMi1VU1lUUWJza09VVmFEbGlzcEJGVE9PMlhVZ25SdjVvMXZTZE5TMk83djRZbnk3NGR2LXdlbmlyM0g4WmIwMGc3N0RNZ3BTVGJPQzBpZmY0UFg1dk5tdngtZnl0eTBGSmZrSUgtbnY0bDJrbGQ3d1p0UjR0QjA1LThUYWowV3RrS2Z4ZDhiMHVIeHFmazM0eEN4NGdaRWhUeE0yTE5oa1E5aXpqZnB2ZUFMMl8ycnFCUUtYaF9IeHk3VldLNlEyOW1zTkhib2JWd1VwakVtSzZXYXFVQ0o2azZsVWtjNHcxSXFTSTlVRUppaG1fNHdBQnF6V2ZsZ0NsQnhhTXpNLUdycFNUQUtjbnNzSmllZXk3ZWVmV0Jvc28wQlluMjJoVXlHNUNsX3o4YXN0NkpEUUtVeHJibk9TVlRxNEpmZ2pWeklROE9Ed3RIT09ibWtKTU1yY2taa1ByMGQwUllqc3BqcG9vMUlfTjJZclkzTHVYbHY4ZExScDhLTkZrRm56VFNBZ012VTE0bEMyTDMza3BrWG5BNEVYVkFZUjItYk03bUxtNnRRTDBYMjhPTzc2dHR6bmFzVHZHZ1BRdnlzelJnNzBybXBLX0NPWEFSeTJPTEk0XzZZVXl0X3JqWHdtRXM1eEZRUjRkbS1vRF9odkZOaXJzVmlrZWxxQXE4WjRwT1lqZ041R1ltb09qcHl4MmxYUEplOHNlRDZUa0xoN21UX24wYS1mNTJaTUVldnlFcmdFY1ZCWGRqWnhfMXdNRWJuYmpob1BMWXFDZE81RGg5bGdPQ2xSTTIzN0hqbXg5VjZvYnJpLWlOWFA3NXdWeDVaNHFjMUxWMmRJQzFGUnNfUUE4UlR1bkJqZHQ4Ql91dHg5ZVVkZHJ2UzlwbGZYOF9KcVc4Mk5xak1HOWF6RmV1QkZvSVRGcXNZMTRKZTBTMlAtVThNZkNRcF9tOHZYVVM0ZGRHNGRFXy1OZW5rR3kyb0wtRm5Pdy1vR3NoWXNIQmJYX1F5S1lzUlh3YXJDY0xqdW5VQnU0QXUzVjdrQ0ZxNW9zdmk3UlM0ai1lbFlISFFmME9YMVpXZ0NwRVN0aEFqREEtQXF4aVZmbWNuWEhNSHdKLUt3eHFhVlM5T2YtUjBRNUpuSjczQVkxaXkybF9YREs4dTJaaGlkWkRGZWVPNHBZaWNkRkdyaVo0WmtpeTR6b2twa1ViNHZ0QWtUWGdqeFZjelVRd2l6a3BUR1k0UlVpSUI3aVNyRjFiSmZlVjlNckh6dW44S2M5R0JXMk15NnYyMHJrU2VvX1RPRGJ4a01HbE9wdHJNdG1kSDdIaUZuTjZvMVJLc01Vbld0Q245Q1dfVEJqN3NJaUNxUjBCeGhFQ0Z1WWFGVGdMbFQ1R2s1b2VYeHc2eWNwT2owSXVhVFF0TjVheFRrMU1PNHBlWnpxVkxtMV9YUUR2UmNRSG1tQ2dOaFZScUlEMGp0djdKbFk5dGhCeWhwaEpmWGp1QWc4dk1qc2YyXy1ibXZOTlcwUThWamdkRzZyUE1qQXE4V0IyZVlKeHBjWDJhd2U2bmZXYXQ1VDMtNVFJdGREaVotaWx5bHU0OXVNWVVLYXVlNVFHRTVhZkphcEh5cXp0RWxZWmJCd0JteWYyUzU4WmNXRW5zV3RjRG5aWlBKcUg3QmRibE45Y0FnLU9ySXZmMm13R3hNNUhQUnFNbHZSOUpidE4taXZuQXpIY0NuN2IxUUpOZm1abEE1R3RtOVh2QjJ4UU9oQ2tQVFg1MWJLRmtPbzFHYmtkQjdkdUt1cDhheXctNUdmVlFVTDU1VTROUmE0Zmp1REdGZkd2MjFUWXpTS0hiS3ZkMWpfdWdKazBjZjYzWWVrMkVKaUNFYjR2N0ZXMk5aaVlDNUhBdTExaE1DQmt1ck5DcjNPbXF5T1VmNzZNTi1QdzZqNkF4QnRETGVwZlJHWDdoRFl2THJBVkxneW00cXBYajhrSE5LTExIWkpDZU1xN0tpdFRDSUhZcUFOQjNib2ZiTW1GU05SZmc0alU1d1dnclYxRHR2LUlUVkE3a1ZLc2M2YnRzNU5QQlpSRU9ZSFZFQmhHMXdfUXNvWGlhU2d5WTF3Y2JpQ3BHVkZsYk9FUnpHOHh4N3M3aUpiSlpneHRLSC1ZUVZlN3I5QkdwazFtcFVtZF9QUVdpSmoydTJMaFY0dkNjWW9NMjR6ckdBQ2lHeENMUjJpaUZJN2NOaURRQllubjgtQ29wRjl5Q2tUQXNVTEZyVDFBa2huNUtkLVJzYmV3Y2hxYkJjTWRoNVRVRl8zRENBMXM5bTdnTmd4QzVKdl9TTE5ySklleUFpQjNLMnItWUlCbzQySElidlpmOFpzSnlUQXNjUHAweVBRdGlabVdlOUpTcjllYVJwV2x3MmxuRHZEbm5SNEl4NXNLbXJ0Tll4b016SmN6VzlrSTkwMXB1MGxxVzNnTG9nZTZDa2xXRlFaVUxSbHdIa3FhSS1LZWlGakI1SGI1bGRKLWJMYXRKYl9IWDEwc0Q5OGY5Z1d0MlJkWkNLNWFhRld6aUgyM2pnSERXbkZ6bG81SFplR2pFUTItUTFQQUNoa3I3OExYa3lVRC03bFBCaklIU2VzLWNvbXpjbjdWa2RFUWlaaEdEaXd0QWF6X3BrYVdxeDI5VUlmWEQ2VWtBS3pneXdhMG5uRnlGck9CWHpCamFzeHpUbDlfNVV2bm5DUkxWS1RYQVY1UzY0UnMzdWQyVXFyOUhWM2NJRnpJajBRTzZXMU9uZjdibHlHUnJueHJ0cTFqdll0UVNoWVBVZmNEdXExMnRGeXdtVkc2ZVRiVnl3WWhMcFNjbXRQLWJ4WC14Y1UwUmF1SEd2SXlOMXY0bXFZXzdEMG5QOXQzTFAtc0x4b1FhNnFTVUNpbnhEYzgwbTlDTzhEby12QVdWcURoNmU0aldtM29Jc2YxaS16eHRYNlp4REZhc0IwYlg1MzdId3BIQVhWUFB1cmp5VUx3OGxhYjBhZGpuWUx3RmZMOU5hLWVNWUo1UnN4NG4zb3lPR0EtVExMajBZaExJTXJOcDZtempVNE1Dc1NycEtleHROeWp1M2JWbVBZUlhWUkFUbGdmVjR0NW5YOGsxVEd6Qk0teTdfcFJYbE1yWW5BV0VQYVlMUVZZR3k0T0dhNGZEUjdxR3REclhlQ3dsOXRSbFdyODhDTEdqeW1uREkwUzhKRjB6UEdtUzZ5RHVIa2x3cG9PZkM1QjA4Wm5jY2tjZ3J1dXhaZ1BRTUpxRWp2c29vS0JFaDE2Wkh1Y2hVY3RHY21way1SWFJlWUJsejJqczh0a3lkdXRoOXhKWDkxYkN2M2JHQmVjbzBrZjd2bHBCclhMN0N2eFpDQXB2bnQxTk8zQVBnMGlxSGgzbjdfZk9BMG5pWkZBcjBrazBWM2QxTHI2aHRaTzJPc1lGdlZnWkI2WWlfUXNkektJSWd4aUo2aUEyQmhxcDVRUjdveEpDNmxLVlkwbE14LUtPNno1dXRybllsRVFLSUxkS21RUDc0ZzlWYmUtbldiRHcxeXBFR2JaZHpDX1hxTlp6b2xHYzhjeUhoOHpFX25MRi16bTNUWFQ4UkRDSHZkYkRQSnNzT3pKRW9EaW5aMnhYSW5sVGF4X19PdmQ0TVNLdmJSLVhkamM4T0otNDJrXzcwaU9NaGZUM055VzM4Zm5OdElZdVpWYVhzbWtPQ1BaSXZ0RzVLN2lEREJvRlZiNTgtdXV1ZDJHbmN6VkNjUVNiN0tTeWUtQ3FjQzVEdUw0ZDRxV1dwc3hZT3NkanQtazlLaFI5ZkQxb3kwV2huZmwybkN1a0dQcG5CSjhMMFRGS3B5aVg1bUxqenZGZHd4dXphUVdlQmMzcm5lcjZTemp6OFJHeTFUeE55YjhTeHppVVhld0hfUG1XWE9iVnhmQ0Z4blE3TGF6dy1mZjhTRUJFM1FxNUZFSGlzSmRRaXFYUGotWmRCX0EtblVOcVJLakdfVVRGc1A0NG5DR2x0Sk02T1oyRjkteDBlV2o3Q0hjelltdDYzQTRkaU1EMFNzTUVRcm5yZW92blRfV1hmUDIzVk9BdEhlbkJVaWJGUVI5VFdfeFZRMmNNSVBBNUNaYzVaOG5JZHY2V3lxTXgzTHM4SVBWMTNmQzZzeWllaUNXY1N5WS1sSzQtQXlwb3VYVEZBR0s2cHEzMjJ1VUVrRHN0RVNxd3FRSGpBOTFuVmp1ZzlDVko1LURjbkxHN1doWVczWFhpeWNFZjBpVE5TWUVxbTRUTXNnMUZfVm1RR2JCUlVZa3V2TzhaT2k1YS02M2FYZWNjTHEzLUU5Nm9Qd0RESlYzd3J6ZW5HTml0alZFYW5WZlhlOGVLTU1VRk1hMDJkbzhXUERpWE9lLTNZR2htdEh2N3dwaXgySXpXMFQwR01ncUk5eUxuRWJnQkNjUmlKWVNZOUdzcWdsWHIzcG5oNy1HTUZTSm1DSnMtajBwOXZVSUN2NWF5bjJLWmE2Ymt1d0VZeWZjUllwWHlKNmFkSGNVZ1I3S0lWRmw1Q1JlZzNUZ1ozdlMzb2pRWF9JSkNlNDVKT09fMjBmdXNYeGp3NGF0ZDllN21Pc3Jqa0NpbVdEU20xYWw5VjBDOTEzeHg4OVMwQ2hBNm5yZDRXb0JKUTAycFZ3YTN6R1F1M0ZfN25tYnYxamM1YXpZSk5tM3JrWDZDMWhtNU5yLTRMUVlhd3FBZHhGQk5fTDV6LXpsRm1xWi1Del9NVkczS0NUVTJkWklIUWFLejlRUEFSZE1CYnQ1YXN1VWNjWGUwalF0NnRKWGVUOU9DSUJwS1hYTFdMdVpLMDJSZGtTOWNYMm9lWDc0TDBYcURPRkdzQngxd2pUaFJNN2Q1SXRKYVRxRVFwaXZYMDhSX193c00tSXVVM2QtNE9Lek1INm9mZXl4TF9JRHUxSkI3RnFISlcxbHVsNWlBRHFHeXBqWnphSk5pQjZsOURRNEJFOGtyQUdVUjN6RktiakRZVmY3a3BmOW4tSGtvcG9HdjY1NXBMSThfc2JWUkcwOFNBWUZEVU1IN2UxYks1UnZZeF90a1RXSDQ5ZnRkMnI3U2ptbGg1WGNHaW9zNmxiWUg0VHN0dlhBVWYyZ0FVWUlhdFNna25EQzlrZTFpanRNUC1ZYkljbG90QTlWQ0NSaHBRNGQxN2NKeFFFSnJwZ3BZOHJEaVVkWjM2TWNRNjcyWVFDTm9FOFg3cDMxNlR5VWx1LWpVclEwb0NzeWlxYklvcFFNVTBvam5xWmxuR0ctVndGRG42b0Ita1ZobEtJR2dwQ0pwVTlkZ09hMWkySDZVazdSNm82eGxJMjFYZkwzemx3bDdfa1RIYURRZEJzMGdXZm41ZkZBaERnWi1USkdGNVg5d2cyN0wySGV2VGo5Q2tEeXctV1BveUFTamhybWg0SjBaUy0zd3RtTGloMkIteXZZakt2QVg4YVJWUnQ1VDhzZTRXb1hqTURKSmJLOEFLS1J0Y3EzYjdrSmFEWWRyNFhNUkpIdEo4RVlKUDkzaDRmdjhtN2pONldfUUgxUkUwZ3JQSVBNbVBfQjJnMm5SY1dCSG9FajFsSDBlb211Y3JGMWJ3dW85Qk5TWC1RcU45TzY1OWgxSVZtNzhpZmtsTUVab2JIUzJwMi1SNVVHeG44bnA3VHBNeUF4TWdpVW5DQnVxSlp0NWc0YTVzMHlFMWRfRzN0aE40OTZXWlE5VVR6bTlsNUtYdXNNVHUzV2dmZnF2UWFKeW9tRFc5ZWIwTE1DOTBSZ050Tl9DRUR1TG9UQjJPQnRhX2xhejQtQnRkQ1FvaVc5bW1XQUJnX1ZoeXJLUGxFMUtDTlR6UFNINEJxM3IyTWRjNlNXcTJQQ1RrYUZ2SFY1dzJTRTA0MnluejBEdUdoTFBqbUJ1UWRlVG5vbEVMMTNkZEh6bV9ZLXB3MEdmTW8yMEVCa1IyR2dveGMwY1ZTTDB3Uk9QQmxJQTFnaWtJOFFNZW1Mb3VWa1JwM1kwLTdUbkZWc2gtWXk4UXMwSDdXR1ExdW9WN0pxNXpyaFZYSGZYSFg0dklhdGMzUTFIWjl2NHF2c3hueUtHNGk0Vk8yT2prbzJwWEdQNy03ekRVWWoyMGQ1MTZObkQ5UnJtTnlvS3lfY3VVR3FOd3BzVWlVT3RuLVVfY2xkRGhQU2ZjSEFFaHdzZEZEcERyTzRYZENNZk5udXF0WDdnZUhfUjhZTnlCUUVXRTd2QmJ2VnFfdWpyeUp1VThvNHA0ZlhLMWttVjRmMGd3QlVnXzB1TmtKOVQzNzBscXRtSms1UGVSV3Rid3lkYzB1VVRaLTdoVVVoeWRZazlsZU9OaDFiNFZkSzFFTjhlYzdZVnNUS2NGcHNpUVVVRjBBM1pHU3pSSU1PbWdGVzRlU0lvQjBNN1BpaF8tenB6SFFPOWNmLUNEMzVFZ3FoMjhuNFNuNE9aM1FsREtiNnlBRlVmalN0cjAxZXlkOEdDLXpQcXVMYWJsQ0dBQkN2d2x4SUZDdzZUOFNrX01IS3Z0SzR1aU95X2JkeXJMb1lhN3FmemVsWnB6NWhQblF6eUVJdmpJTzhyeXVPVmNISnJuLTM4MWJhNUpaSXVBM2l3dzZ0UkhkaE9NVi1tVXVKSkxKazM3anUwQ0VfUXgxREhaV0VVU0x4X3dyQW1nbmU3b1VKSVdGbVFoSXRjS0VBZm81TWNQWVU0Ykl4ekdJUDBLVDJ4OUtEUkw1cUdPVGZTN0xvdTBUTTN0RE5lMXZfblU0NjFXMHUzalVnNEwtbGF5UXU1cVEteko0N2VOckYzVDRqdFhsSUJBYUpTN2s3akJrUFZzM2JEN1VNaEFqU2p3b3AzSHNDODJXUUhsa1V4QzhVUGM1SVllUERzb1F1WGNuU1FzQVpIUm9iYjJEQVpCdGRvblpBQkx3MW1pNHhUWGczbVVKNURPNW5xc0V4YkpuWjhkTDlLd0dKdlRYSi04dTlIRk11MVRZY0REVEtjQ2doVXdmNzRvbzh2Z3JHNjJqNzZtRndjei1SOEZINVlGd2t3bXRTTC1VQ2RjdnRHYzllOHpMSDJheVJTeEFjTFNnOUxQUm95OUVNRi1ZOHV0YTFRbDN1WHZ4SUxsYXJsQTVFdThyU0ZxTENUa3R5OXk0WFhzMTRsczkzeHExYWFCRXM5ODdRbjl1SVdvakI0Z2tZX0lZaU5vTm4tMDFZWDNPc2QzWG9QRmE5aVpIM0RVM2FIa3hPdkRNQUJQbVBDWDFIa0JnYjRFeUltZVhfZ2JhZjg5d0lORHFjbmRzc1FjWER1bkcxNFVvUDFSX1lvd2tNZE1yNmJoc0JZTlo5ZXcyMTgwSmhsR3lYWUctNkZfQkhhM0dFV1hRdVRsTW1wRmppVnVzeW10cElENHV3SnFLNjJoRlpvc2xEZXJjNzZoOGlRak5CVS1BdHNPRnZrRlNMSERodHNMaVVKdThtdmU4OHdza1pRbnVoNnJEb2padVdwRlRockhKR1YtNkRMWllkNDVqNDduUFE1MUNDb2tRM1cyMlBsaFBLeGhVeGlDdHpTRmN5dG9VWS1VLUVZYnlCV2cwOTh6b3ZwY0pDeE14SFZkMURTWlY1T2lfMDZ0SFdDb0JLVnRncUN2cXhTV2E4VGRERTBXV0dKQ050ZThpY2hRVHVsOFNGaWRtMFdfR3lGNXdubUY2N1BRdzR5Z0JmNVFLN2kwT3JERUJsZjhyTmNIelZMelU3RzNTX09MWWM4YkJpbEwyOHF6eHF1b3p0QjNZcmp2LUY3Znl2enRULVVmZHFRNlFkeFlDVGpRWHQ2Z2xBOW90QUxTSEhxSXhqME94UTh5cjZ2Z1p3ckVSRUFZTjlpVEtXSm5USFZFbEJzQ1JHZDNSdWZ2U2QtT1BxV3NLVTF0bmZyaGMwV210NDE3bjZ5LXJScjVHTnE0dFNrS2VHVVUwTXlaZlp0WFg2b2ZfVTNNSVNRZGdzYU1QMjRPejhnX2t3VkJMUUhCdVVIWmRNZ1JSZWtab3dZcTZKY1JMV3JCRVA4a1BreDB6TlJHTjNIVWJFdDJqSnNCdFVJaDlpaHRVUGNlMG1CS2Fwb3RvekNwczlUQTE2VjdNRzBtaW96d0dlbGFka3RxbFJSblFEOG1QVER2Z1ltQW5uZTFINHh0WEo4dlFUWXgyZWNNWkw3V3lPeWlwd1lRN0hVTGJwVHJ3dHViYXpoc01TdXB2U0xucGpKanUtNkh3c2xaQnVyeUEzbEwzemtYQllDVFJfOFdyRG9QajU3YUlPUUR6SlY5ejRjdFI1TDB5VTVaQ0JGZjMwRkdWdVJZYzNIQkRsSzliOGxWeC1kMkpwemRPcHZSUE1wcTFBeHNVSXBjZFpNdkRacDZ3OWZhWXgwaXNSWnFJd1lfM056YXN0WGNmVE84cHNkQXZ3UmFUdW9sRk5oZm9Sek50WkZscnhzajl3YWJuQlFfcndRWFNMcEE5NjdodmlvNXY1X3diYk90MzlwWG0xWVc4b1JVdTZnR2NCYUxSU3dsNmpEQkZuZi1jUGtCT3BVaVRtTlp3bXU0dXIyajVZSWpjRXh6ZGtVRVZWUkxyTHB1N2xROExKWF9OTTY2M1JlMURwSlZmSzNVa3V1S3hWX1BPVk9EZWpDMXBuN3E1RVJhdjIxeWZDemUxaUtqUmdDTXNvNG9zMXlWcjBuRWpyUzFnOXM0OG5lVFV1Q0c1NkF5WWozSi1ILXFaNUo2YzY5N3NnSUw2VUxvR3FNM0R5ZnVLNjhMMXA3X2szdURjS2NoYzlZeTF1amFmVVEyeVNQWnVXbTRFWUxWbzVDRVFZeDcxQmcwU19JZWYwMUt0d0gxYUFJd1p1TWM1RTdWUTg3RVJFRHQwT3AteHFOOE42ei1HSGpDem51OGhyY3JsUk5IVHY0UFJRNEU4a210SGIwUzFzWklCcGdEdEJ3RXBQbEdaOU55elpNaldIeXhHdkFtc0tKZ2ozYkY0aEJDYm9DY1YxZFhQOTZhZ1RqY014Y2lOM0o0TWRRSktFd3RXbFFTRHNuazZRN19CajFKNmhrZUNpLUZCSUR2LXBXTXQybnlvXzJLQmlNWXd4OTZpU1VkYU9jY293RE5WamxCWHFfY3puSUNDOWlRSEttZjRIclcwcm1iNVdnbVVoWlV2MVZ1eTBZUTdnQ29ZbmhlOGJHU3hqdVdadWNNUkZ6dmpRZG5oZWZhUkhvdVVrT3M1Z0FWR3VDRFpyd0lEekYycUFRRURSamh1aWVXb2tGMlRvWXl6R2pPVFp5OHpIOVV0MU93ZDVxbVFjSWdTRWgybFlUbTJhc0UwZlZZR3cxaHVvY01GMGJKcVV3cFlfWkdfNHZuN1E1UDE4MUx1VUkwT1E1LWJvWWdOVkFvT3o4T2NuQUdtZ21sblZMUXZGZWYxWEJKaE44Yy01VjQ3S3JWd1J0SE5mV0JuZEFMSjNnYkhKdE51UENqUVFuM2kxZUswSEhYT1Q5VGg0MXlsWEVxZzhseW5CN3hNWFlXc0RZRTNCZWh6RGtVWDZDUEliOFRKZ0RGTkRXZWNBdkVyNmZtYTBhd3hKV0NOd011R0JsaC1XeVBfcFg3aDdEcTR3QzZIZHBBMkpTX0xFUG55Zk5sSjB0V1hvcnN5a1JYcUlSOFdnUkxKRHlQRm0wVnBWQ1BQM1JWV19aeExZMEdPUG9wYXZOeTl4WHBNVjBUUVh6OVJFWEJRTkRIRFZEMldvZERZcEVNU0ZBOEtkdkVaZGRjUnJmdl85VDVtX1F6UkNCb29PSFlDajZLN3pKUzJFYXNiU21fT3NhYnFENkxWWUtFWUc3OHBtVWstbEdHRzhUSElqMHVqaFpkQWV5aWsyajVsakYxeVIyTy16ai1wOHBTaVhRNDJ2T1owZmJPREh2YVFHeXNIMG9uRTEwcVV0cFVMbjF6RFVuaFN5RTVoM1JTZG9mX18zb1hzc2RNbG5oV2RvaGR1dExNYmUxbzRVdmxDSExoYXRuTVJaQndnQV9nU2wxdnFSUWF1MXMwT2g4NkNIYXVnOGlmbFRUWE0yNGFwV0xpRjZhdkFSeTFYOVd6TjdCc1oxZFNoQ21GbmdBcTBwN29MSy03YTcydE9pNnVXWURmRjZPY1h4QWFzUjA3LVhzZUduZzdBQzhfS29KVG1OSG5tdm5tQWJqMFphbEsySWlYWkJrTk8zd19jODBDUnR4a2VtZzlNbjdZYlRodUQ2clg3R1NGdFJfakJzb0c5UGdrTWZIOUZBcmw5ejBJTjY2YW5kczVSbkxXVmlEaDdyeTByMF91QnVGU3ZIOXI4aG5jb1o1Y1pzQW0wcTRwa1JDa284R1Z3UlB1UFM5ZW1rUnZTSC01MW84VENwRVVWYUd6dlp3SDNGckFqeUswZW5xaXVpTWk5ZERxOWNJUGstYnhNV2pFY2VTQnV5cHFHNWZBYnN2M1N4Y0RSUUVLbk5FQ2dtb0lDeS1PbUVQOWNWTUFnb29WMVVERmQ3SmplNnVmR1ZsUjFmMnZwLTNybGk5eno0R011ODl0R1hiNlptN05ncVNQdWlzdExSaDRJbW1FTmg4NXdYMUpvRE5mZVA0NmdBNmh2N0VZWmFyMkZtekloTHl5MzJ1MHVZMGZ1YWp2R1cyUE80S05GaW9iUHIwM0lhY1Z4NzBHdVJsUTNDekhGUTdobW1pSG5mX0RCRVRmLVVINkNJd2U4TWpQYlM4Zkh1NzlackNyUGRXeTVHZE8yWkczbmZuZ2hrZkFEbHBNN0FwNUYtbWNVREZfY3E3LXNqSU5VbHh2NGVsT2c2R2k0SkpqeXB2LVJOQ0Z5U2ItMGh1OW9GMks4XzR0UkFDRWluTUVyQlRSN3RuU2QtR3dkSEZJdlIzMDhsUFU4T0dBT1NIUS1OTDRvWC1VUl9BVmVwQlhDVVhDQ0NSamtaTVkyY1M5LTd2bEJPM3JhOWRFNWlWVlRYU0EzYnprTFREZl9sYk5uZzkwTENGcnhuQWRoYTItSEFfQkpRa0hyTzdPMi1YRDNOR2NGWWxWeE5Hc2hrQlJ3TU9JWWp2MGhjeXh4eEdBcXlsQjdRcHZjNjFUSEtjV3FrZ1BJdE55NEh4dmx6RmNnOXF4Vi1yVGhmMklkN0xzblBfZWtDaDRVWnZ2WU4zTG9uRk9CSS1UMUN5VXg2R2FqbHlHVC1UblllLXJBX0lzVjZ2Z2ltUzF5dmlfaWlOWmRmMDQ4dmV2VVl5UFFZcUpTbGVKQ3hFS3ZOWVNVZno3QzNHblhkSHVWWV9iTnZqTlNyYjhIeXVOMDRCcGh6ck55S2ZDLW0wNHRjaEVXbzl5WmhnOV9rWmlISmJySWNMWktoNGRJeWhiYXM5cGstRUk1Z3MtbFZBVG1GeEJJOFNFYmhPZ3JmUTYtRHliNWlOa3dPNzNVS1kwcEFSaV8xdnVNMmlEZUg2RXhOemdFQVRDMzE0Y3V3NW5SeXJkdVRibnJ6U3RqUUdPUXdlQ21NSjJhVTl5ZUYycFljYTBfNEFIcnJwd2djZi1LOHVyLTJVdld4Q3V2M0Y1NFpLd0duMXNob1JGZkROTkxDcC1sU3JVa21ITXF2eERXRU52TnJrQ0QzZEhlWmtTOFlOdlRvQkNac0JWQTNOdUFlaURrMGc5bzNsbmtVeE1kYmkxV2VoRFNyVmhTRUlSaF9LbnlWUm5CZXhCOUFwSjdULXVFQmlfVllqZ2xvSi1ORzlLMExwTkxyV3M5Z0dkMTlZMFBYOHA4VlR5cC1JRjJJQllXdHlXMnRZNFZZQlJHNFpqTm5BOGpKdVdrODA2b1hRZ2VEdTZOM3Q0a21EQWVpSVJpNGJCREo1VzltUkstSElQLXpVQVVIMEJVODFoWFAtSFVPWm10Y1NzTGJTZUxGNkl6dkZJOXE2alNvdGYwM3BpbC1lOEx0STRCbUw1bWRDaGtiT0JoUkdSOXhRSWI3LWVncWZuR1Uyb0xJeFRpcU9rYzdodGg4UXR1WlpyN3VJUGFyWGtNdjUxUkJlbHNZNWljMFlaM0N5dGlEU190cFRBSURxTEtfeU5lbFZXWWNKQU1FUUVfMDJJSUU2bkhaSmFTZURUa3VwVl9SME5ZVTZzWjd6ZDB6dnZsdURHenNyWmY0SDNFN0JvaTZLcXVKdk4yeEZGa0hTOGVOcDhRaFlEQXlJNnRINkExb0FFMm4xNjlqTlZXQWdkRjFGdTR2MVpqRmNYRTNxcXA3aGhiYnVGR2lnX0xHZjBsVGNrUXo5Q1h5R0NCbWlRek9FN0tkRFlhcC1XcTBTazBuUXA2ak10Rk9vXzJMWjJGQ0dNVi1UMHp1RkYxeWVYcE1XS0NkMGl5MFhoNkZqUGRMRzVPb3hrcHlHYUN6blJhVkZDcjhjT1FCSjduUUFrcXM0YzRRaTVJaUFvSjVlbFZkWGxUTGF6ZUVDUXBNTlhEOWo0ai14clM1dlNPcFllSHFwR3ZFZWQ4b2t3WlZKZUtCZS1ZWkp4VW9oM3UtT0RiZG12MEw5TDFpdXZwb1RpMHJyUG9rTlZ1Nll0NWcwQnpzTjk5WjNCUFVfV0p1WUJiVVB2dWRtSTlIRGwyUXczdVhMRnZqSmt0YVQtd1hYb3RLNUhzY1p5VmhKU3pBT2FDODJNVTNrQmFQWk91ck1ma1djVFNvSGxGSGdVTDRyVTlsS0U5Z1BiT2w2NFdQeFZjVjNQLW5QWDRUSEkyNUItVUtDR2NWRmlPM3Z3TDlUbVBCOUhxUExMc1lfQUZJTnN4a0hSNHFlcTFKWDFTeDl6MTBEMXJuQnBLX0lRbnBpV3RSRHpINDZ1V2RHNE95XzRnVWpUV01VTU1YVnNVbTJmQlNFOG1VM3FsY0ZlUW5nNUkySWM5bWNHbW5Pel93UUNsVGhnSU1LYXFVeTE2YzEzOF9qMDdkQUVKQ19QS0syc1ZfSmJCVHR1Ym9jMnJMX19pbUROdy14OTBUVWwtcVgtOUpIMmlmcXlUcVk1VnBRTXI2NWVPaHJkeExlTHRnWUpzb0dKczN1Qk1HVzN4bF9RdW9tOHBSMlJGN2lqdDc0SDdhcUpqQl9DNUFXLXNFSDdSMEJSalZVaEFBenBKXzNIcXhIQ2tGNHl0N252Q3dqS2FGSWxxcUJhd19sUy1xOUI4TXhyR2dOMWYwZEtLcjVscmJTY1NBU01BM2FoWDQ0ZFJzWnI2TVhsWTNVc3dDUFBiZUp2LVpCRWh6UUpQZE5JRWxaRkkxMFJWSnJsa096NVlodkZNVzJQMFRkdUR3OW1xWWY5WGJQZl9OX2lScVdlMkR1eXdjdUtBb1d3NXRkYnI5MGg4R0tWbUpzZ2o0aDJWWnlRV3VVV09rWE1fSEN6UmdYaWxHTl9QellNcHJXUjBBczQxT1dETmFJMFBHME8xSFcxeU1SajZUeUczX1NBTnRYU0FNTDVJZ3NkczRFWjhQQllsdTA4dVY4OV9yQXpsUjBJeTJsaGFybm9wMEdjQ3R2bERJZVBmU1NfR3pndm5SUlVUbUMzanBNek14VzVRZHRXQUhlNDFPTDF1WDZGQmUwMHEwdGpiMVNpRXV0MHY5T3dYWUdSRjIzeHBqNXB4ZUY2cnppbDZvMW9ORm1Ma1g5RXk5VXdKakZfMnk5SGRHOEEwYllyekFOM0d3a21ZcnlDcUwybjF6T29rcFlYOVNwRm8xTVl1R1RSSVhseUktZVAySFNWZFlLQXNPNHdRSnJBTER1a0lYeHJWS2xlLWlmSjhfUEQ4N2wzSWVGZTZJRzctTkZOblJWSkJPYnpkZy1leU0ySmNib1FhRmp3VF9JazI3STVZbmo3aDZ2RXZfa0N0LVZwQmc2Zy1FMXlDcGNLVkNXTE9GZGExX3NXQmRYeUp2VldhdXE5Y1NUeVREajZ0bXZGc0lUWWtsUldOdkpGbGVoc0htUFJwbGQyUFd6b2RaWmFxdFJCTVMtMWxvQjJFLWNUOVlKSFZHMXpVM1lWenMxa1VlQ1NTYThVaUl2cWVkMElEOUZVcUx4YjY2ZnNsYXN4ZWJzdTkzczktZUZfX1BaUTJVWVdPbjc5SFdnSXZHcGNhUzcwczAzTE54aFJsLTJrMi0yN2trWkZfUDNJeTh5MGY3ZjdEWE5pSlRMcVIzM0Q0cllrWXU0Z2ZHX051Vy1xWkltZkRJNHVBZlJrdEJ1RDlpR0VtY1VfdVRoUFJZTlYtTm84a28wSERxeHBpTHR1Mzg2VV9rdTdiZk4tYlhaQ2hyN0VTX1FkOF9nQmdFMG5kbUQyQ09xSzlOVXJiZ2dHRWdUUWJFQzNIWHU4cXpnZDU3V1h6RExob3BMcEdBd1dzLUtSU0hZdmdWMnozMkFiVVEzNFFCT1JqdW4tT29xcExUYS1mSWVkVDBXWmRMTGxmcGR1V0RNZ3UzRF9iVEw4dWk3NVNobnlGZm95UnFnOFc1b0NRSzNvOExaZ1dkczhLS0RIa1RncEtLemNNN3QwVXg4SFFFRzBFUnNLWXMyWGRHcFN2NW0wWWNQUGVvWUJFRWpsaVI3a3lITnNMSGRRT1N1M1hieWpxNktkREd3d2VFM29lU1QyS1BVbkg3SDlkZU5vTWlsanBZTGxhUldpb3p5dGthYnpGbUJrWnprZXdxNE5fb0I3bmFaR09vWEd6eTdhSklqbEpWOFA4dWdyb3lwLUpUTmNvcEUxZjFwLTJqNXdtLTBzdUJpREtRN0pVal9WVjZWY2ppcUZuZ3g2VGdEVzJMeS1lMl9tbXFWTTFtTU8wcG4yNEM2V29laTBlNkFtVHVua0RPX2d4M3V6SnRDbjhpOEtTTXZNTzAwbHBmNzQ5MnQtalMtYUNCMFE1Q2VVLTk5ZFpNb2k0QXc0ZmFsQ1psYnR6bG9reFVycnYyZXg1VldCdHBSUF94ZUtncENHYk1Nc1VGTktuaUFVeUUzeUJVWWxEeGUxZ1NrQWtKYnNIcXRoVVE4eTViS1lNcnVGZXVqNWJqb0NSQ0xnWEdhWF93bmdBbUFzUDVsX2dwdElKNGpPNDhIenRQZU0yWkltTUFzU1BIWmlhLXdOY3F5d3VYbEFWaXp3d0FxV1NWZDNrMDNjU3FQRjg1T0kzVExFM3FZTkZ2UVVlZXR6MGlSU0dkVUVmTmJTWV9oRTJoaVBLYS1ZQktRN0s4NVRpZ3BVMHMwNHpWSlYtRExmVTlydy11NEVUVUJtRVNvUE9MV3lKVWpOSnBNZ3EtSW94LVBuTEZWR0lWT3JYQ1BpUDZQSnFiRXdRMVBVVzJxMVpWQVY3YWJJcWV2d1BCRXNvR2trLWlBS2c3enhRNGNjcTFMRW92Y0pmNVlRaGtKZHA5dDhzdXpHNmU2UkRxV0ViS2tDYmJVbm96M1AyUm1adlhfWW9iZS0tbzlNRmg3MTl1NWhLTkJSbENhLVQwQTAzYVVaVGdIV0Rrb3hzMlQ4SnBjeThNaUtHTXFfYTIxQjRGTG5Uam1GN2VWRVhweWdoT3FwTUlFZ3ZIaHFmaWQ0Z1p2cVlLenhWQlg5V0JLSXFBVmk5dXBpMWxhaUp5V3F2cVUxQk9zVWptYjR6MFJQblRTQlE1WXB6M0tyaF93MElIVnVZcDdEZkRVSjRHYmFzZXMzM0dJMEJDMVlDT2lJLXBma2V2QzQ5Uzh4aS00UzF1WEo2NWJqUWljaDhvcDd2TmdJWmh5U25PaTUwMUJ5Y0M4OHhXMmlYWmtyRmxTM1RwdXIwMzBBR3JTRU9aMzZFMlJtbmRwWVV6QVlBYWM0SkxYN1VtMnYwT2hlMmFXbmY3bVV1a0hWX0lHcDN1QUpaWTNYN25XOFF1WTF0WUZOUWRzMGJZOC1MQjZVWWdBanE5N09XUEhGdDZWei1Vc19wZGFzdm8zUUlDVnFuQW56THJrbGJDMlFDSlN3MXdReGRmMS0xajh3YktyRkFIdE5jY251S3ZvdFktMG1lU2JzYXJDU1NvN3hGc1NsV1lvakNsTVlTWkRUSk9CWXg0VWE2RjlFa1BqbGRqVjg5S3dTT3hkMGoyN2FZMlFYcWpucDkxZWY0NUNTTFMyR1BlQW5UWWVSaXJMcXo0LXNGYUJHdUw5ZlpSd29aZzFTRjJCeVpha1VaNnlXdmNEMHlselVpZ0c5VmthSF9Ob1E1UWxPMGxjdGViOVBIdlNLOXJHaEZldzcwRzdhYy1iZTJEY1FoNVljUGRDdDEtZG1sTkw5ZUlaYWp6bjZLMm9Qc3ZwcHhUOFpGUVB1ZWhiNThVT05JdmJ0QVpNelZ4Wm5iX1JBaWwzaDl0anl3T0RYQ05UMHRQMEtVdXBUNHV3T29BZXMwTVJLWV82OUR5U3pCMjY0d2xPWGI0bVVCNHJFOGFhN2lpa0JWTGNReFl1VmNWYnpYTHdNVDlBUEFKaVNqU0RBdjNPN0lFUEMtTFRKWVlTN0E1aDBEWVRydTNwcktoQm42cTVaWml3d3YyRXk2amFZUjBsLXNUb2xFX1dKVXNhbjhxdXhPX1BYWERleVlheHN1UXZYbGJrNXF6X3Nua1hiclNNVmRUZll5NGZpbUY0cF95ZEpHTlpWX1BpSXZlMERYMXl5Z2NVR215M0plU2NlSDhJcXJWRVdVdFM4Q2phanlCa05qaHhmWEdtcUJYLVFXWnNycF96a1hrTF80N3FTTWNWcTNadEJYRnZ6ZE1ON21YLTdwbnlnTTByeDA5WUhwdkdpY3Q0dlQxelNoMmg5UkJFYWhYSGZ6NDYzUTF0d0RxWFlNOEROOVpmcldGS0xJdC1jWVhrT1pHT01mZEduUHd0b2hFdElBUURhZ0hKMW5nZkhpazc0S0hTYkVsRVljZTFkcmhYY2xJTWF6d3F2RWhLV3hLMmhfY0w3NGJNZVN4ejNTLUhwNEoxdjg0M2N4YlpPOXZpbE9OQXFKSWpUVUhfS3BwYzBCaFRzT0MtZll2OHM2Nm0tcm1yZ1R1azBRaHJOTVA3ZE9KMS1zSkJHTGo3cS16cFVMT0xKZnVaVGJ2N09NREI5Qjk5UHBlcVdGRE9VT293VlhZWnY1Z19NT19HQW1FZEpuMHlha2Vpc1pVZDlmY2hhTmd5Yk1jS1k3RHI2dng4MWQzYzROMDV4YkRVZnB4aE9WaVEtMDVValFJbVo1Vk1kV184WWlfYVgtUDZkd09qQlJlLWppMnMzNHM5UjRqTGtxOUg0WndXX2Z3ZjVXWEhITGE5dldISEFnM3BqaGllZjZYejlmeHl6cnYwWEMtX3pCd0NSamFmTlc5X09ib1FWRC1ZSUdKZTd2UzlOQ2lGM2xZbUhwYVZiekRoV3pHY0JHdVI3TmlfelZhWndrX1VFVTlOWC1OMEdiZnV1RmxsaHU1eF82RjhoZTBsRVJMUVlXX1pQaC1OVEhEc01IVTk4VkFsQ08xcjhra0pqMGZicVZHMEdQWnE1clFrQzlHam96N3JPbnZTQ19DeTdEWE9kNW16V0daRUtTaWcxREpyVEVjbXpDVnBteGNuZDNkUmhGVDczNmhTRXRXZkJ2WlVLN1VBN0gtTE5IalpIMlJZZXhFS21jYlFPY3FMQ25CTnZEZ29RWEVNT1JSNkp1WmdnME1tSUt0amFSdmV6a0owWUFXMlVuemJrM0t4T1ZwTTl5OFFnbVNiN21QTU5WcXdDdGxNYkN6a0gwaEZUVGJXT0trZjBJdDlPUWFVQkVJZnh3N2RDODFEM0RUdnF5cGJYaXZId1JXd25fdzlDamZrZjVsUnZwS0t5dFdvTUZZMjNZMWpTNEpyZjJUWlNSNmdEQVZpTDF6eUpGZG9SLXctWUxKWkdUYzFNTXV4Tmk5NWJRblpCZ2FMdlFmSE10amMySlBKZ2k5REQ3UWhQUTBteklsZllsN3dRYmdIRENzeXRlVEt5My1PblAzQ1NTci1YYjJrOFZBN2RLNHg5U1RfZy12VVdVQWs0UXJHUXlQeFBqR0V0ZG80V1MwUkhXRnJPMmhVS0IteWhHclo0UndZMEV5a3M2R3V3Y0FqejhqYzBWaG93SDlYRm1lVFhwRm12bEFHUFBzODVlU0d5d0p2SEd3Vm03RDlFWW91enNuU3l6RVl1YlNSc3pBdGQ0NVgxUnlUQXBJV3NaTDlZTXJzVURqVnhzekRlM3FIYWxnWHNNTFlCMXJtTDh5Y1ZuWlpJWEFVQ3BwVnY3NlcwSHRRUEhWVEk2TjhRU0FGa2oxelNTWmtXcGNzaDJ0dm1EVUo0MWl0enIxSll4bUF0dldLVXd2OTZRcjdaY3ljZEhsTE9ya3N6d04wVHk4dHYxa3RIUFVua0hYSFlvU2lkMHRzZDNzYTFEOG5LdDhqSnRKaW9fenFiWl9nc2N6d0xFOUozSDBQTjJlYkltNVJNbUEzNEI0dmN6UVBIOU5LSUd0Zkh6cmhqbjZCUmc2c3FhaVN3Z0YzZ2RJVUoyQ2NqLWxtbXVULWFlaVFaQUNrcXF1eWQzM2lWOG94eTNOZjBiU3NUZUZlcVQwdEpYQnIySUxOVlAybTdSTTc5MzdXNHhneExRdWNqZ0RNV2tva3lVMmhSVERFVVRKdkd2VzNwSlkwT2tEeEpoRWRlOUViQ2pjcGh5NHhiUHFXcHlDN0N0dkw0ckI4MkU5aDZuSHhVY1ZqYUNpeXZvRkZiZFduc3o2M1NQZE9oRDFXRENjNm1pYW9JdTJOY2kxQkQ5a2VXRWpwbjllSXpJWC1MR0VMb1o2MlBpYkJYRWwzZ3MwWERzNl8zVHJpZTQyR3N3WFFQS3hIWmRPV1pLRF9IRWhGRmlXS3V5WnlMTnpWVFpuSUh0cllEQUZ1LXNBZE1VSUJKR3hVMzhTcWNDaUlNQ1dlM0N1SlI0dTFmaEJheUEzM3NmT1U5SWlEbFJuMVJvUzZTQjZSNjFZcS1rd1NWaEYwcEkyM1Q5OUl4cmN1UUh0WFJ5QWljZDg4Q2t1ci02Vjh0RlpydUFDT1lBNmRDRFNOczloNkFiU0ItWENXd3VWakYycHN2RnREU05HN2I5NnYta0g5MWtjWVgzR3htSkJrb2x3SWtoMnlQaV9DWmhITnVMQzJjbnhoaTNXdU1jLWpDOEk1enRDSlNCM25zYmV4TUVuaWhrLW56TmQzZzdBLWNkeFZtU1FNN1JxSkY2eFpyTVVtbDh5blIwaE1hTVU2MWdKUlhMVWRzTHVISzJGZGQ2UnhzWkN1VE5DUFVWNlF5UlRzVkpITjg0WkkxeFVweGFVamFPM1hXUERsS3ZtLWN0UW9hUFloSkJ4X1Z5SlIyRjlNUUpMLVhBWmt4ejJ3ZHctelJIZDVYQUkzeUlhM1l4YTF5czNrc3pwS2JhTno5SWtKWERkR3o3SVVYU25IVUhRZW1uYlJKVEE4SGh5UW80MzFGbkkyUjc0bXR3UDhCSEhoMW5LcWZZOGFxVTMyeDRzRjM4VTdHUWZra1VHRkdFdll3ZnFCOGtkWUs1YTVxbjhTZUZnX3V6LW5KOHVnOFRIQWVLVWRmeFJfNlJHTlFNd05uZkNPbm9vM0RkOHBMazFqM3Nwczc5azJQZXZmS1M5UFAxeVo1Zl81OVZYNWEtR2dRel8zQ0pjMFJaVlp2eHJxRjFNRm5na3RneGhWYXVFUE02bkdBdk9nMzRMLXFUTVB4ZjFVUFdkWDY3NUd2WHZFX05DaWw5aG9JWU9ER1hqcklNNG1SR2pxWDU3VTg2SXVYNnVSV05nbXVVWDdsTy1TTHNhMkhyaExOSkV3RENRTm5NTnhwT25VYjlQQ1ZzWV92SFNvLVZhdGlaNWxUc3RHaDJsMC05aDBxeEc4aVRQYUFhSW9PWFZsRTF0aDVQNWlLWkthb0JRWmhWRHBjX1YwOWVKQkxvWmJFWmpqdDVhSHd3T3RsdHgyS25sNXhkb0dZLU5RNGhQUTV3ME1MYkhzSWt6NzZqUjFWVVI4MFpUUjFnUTFqVjI2Wm5KTGRPcmxxSlpfTjZwSzhUQy1iOXJHRHhMT3BaTzNmdllycGx3UXNuQk9TRW13WTlWeV9jMThDUXh4WVRpWnZaNnVUa1BGTFNrRDBsalU3bHJTelhhZ0swNGJ1SzlZbnhKNkFfdEE1UTg1eEtMSjFuWTItVHBZTXMtMjJWdFZhM1FVal8zNFpZSHduZnZMMXF3UHhFY25rQUk3UHNTbjVHNUVVUG1mOERHMDBsMjNSVkRBbzh1M3pGMEdHenlEWFRPTEZHUkNhY1JjdmpDczJOZFVEQlI1dEEtcHVoZU9yWTlDMHJ5MVczUlN4enpmQ1BiMjJJalNZUVBFR19GVUY3Sko3THc0ME9feWg0SmR3UVhCUHR0RUNsN2docktMMms3UFBYbEpPeGJLWWNCWlZXWkdRdEtydEg4X1B2dllCY29GcUVZRGU4SEJkc2drUGFUREhfRVRkb25QMHJ0aFR6djFVbHc1MnpxcnVfeHVBUUR2THRwU0FkZmZqZ0JfTEFsQVgwaHVQT24zaWxHLXQ5bUZTSG04TzZic2oxanZGdWYwalQtcXJITFNnX0c3Nmh2RmF1TXAzbzl6YTBNcVhwOEd3TzNvMmprZjVpSHQxZFZkYlh4cTB0ZmMtTVFqcnd4TXFmSkJEXzBLYUlvd0VURGRSMjE4VkdIeWVlR0wyRGhMSjM5VzNFc1JZOHlMR0RoTE4zVHhHdHpGZlZzam51eUxBWHRvYTQwNTQtOWh3SXVhZW1kMDEzNmJ6MmtKSzhiWFlMbExNT3NBdVNrXy1UUnJXY0JRVHVrdnZaOXd1MDR3X0NpU3NUOEZmdHBrNlpxcDVvWHYwZHhxT3dLMEdYZ0NKX25udEdEejcyX0ZwSWRFUHRSd1BLc2k2TGRVY0NXMzRVRWpnU3F3MV8yQVduak9uNTNtLTdnMEptLTU5NzQweVdHNWdlZ0hOWUlGcWE5RTRyaVdQV2Y1RWtmbUJaMUpNSXpGR3VzZ1dfSl96emsyakNkVzhtY1RCZTVaVXFtSlV1cjdiVXBJVEU3LXo3WmxHN0tPV1FHV2VQUUdPU25tT1dZY0VOOUF6alN4eDRSVm9hakZVdzNVVFg3bWo1OHVBX2JKRG5ZaW1UaTA0NDFNaUluX2xaRlNsaDJfdzBDS2U5Tmp6WVJqLUkwZVlyQ3ZEQTZpeU56U3NNNnVhak9ZU0xQZThXSV9ieXEwRS1BRW5ON1hnZWQ5NHQ3ZHJIdEVzVjdlR1NCeC1TS2wtdzdna3QzbGthaUNFZkxKR0ROZy1Ga3V0NFEzUnByTmpLNTRYZnFPWmIxeTFDUmJ1MUNEVFd2dlI5R0w4ZXNrWDZZM1Fva3psSlB0SkdWRXpCa0dnRmVOa3Rpa1cyQVk2YmVweURtSlVWTDVRVjBoU2Q2bFoxODlNRUFybS1WY05WalNreXEyWlNYQk92MkdBb0x3WTYwUTdYYkR3MkVXLUcwTmt0LURDZTUtOTZ1Tmd1WURCamhlNWozWFFZak1LRGVQb0p5LW04QnJEQ0JESlVlUGVIZWw2YjdtVGI5ZkVpRm5UU2J3TlI1YTk4Y01BVzdIcXFvSkVjdzc2UGlXa1pmbV8zUnNlb0dTZzZ4Um51aHdtRGo2SW8weTNraFVKMjZ2anB3WHRyN0NfTlFoRTFlMFEyZXR6bHQyaHpIcE5SOGVqaTcxX21nWG5zMXVJdmQxWXZvbTlfVkRhNl91dkRrSVJTUGkxRnJBSERFSHVPTHVTOTNwUk1KalB6VnZyZ1hyWXhSaHQ4TEVVUmt0bWNnX094Vzk5UWtrbXFwUDlacktZSjhmX21DWjk0RjhVSVJsR2l1dzN3VGlDU05kUWdpNk5fZFptZUJlSzdFTmxramJnZ0g5Sm54b21iM2hMRDZFamhySEU5a1ptQ21KLUFGVkRMdFlqcDVoZ1ZrQ051WUk2VUctQWp6WXlBRHI1bUpHeC1jTV83cHZGZ1ZHTWpXNDI0NUllazlmTHRsemdwci1IWlF6MFgzR0dBbjZGaE5sM0hGTmJ4Y0l0TXd6MEFlRF9IZ3RaVHRqX1RiUkRBb3NZMVNNdXR5bE44Wm03NFpFM0llV09FOXAzWjNjekhTT1l3MWhSQ2dqX1RxMzZtdHVvUVd1MmlYajREMkQ1YWwxQlN6LTVqOXBCU01aaERzVEwzbjMwdEluMklSSVlfaFZjNWpkRHh2bWhjdEd2RWRGRGVKX0R3X0swV1Bnd3k0N3hYSmJwWGhqaXBxNHc5ZnV2dkhtRWJZcmxfY0YyUlRhUFRReENCbWNWb3FFemUxVzZTSi1WOUJ2Q0xoa0FUaFE0TE4xSF8xTzBlRlJYMzlMZFgzWDZTXzY1cURKUzNqWW5KQVBMaVA3a0d3ZzVDZE1IMFJfWmZqTW0xY3N4V3lEak1iN3BDQzNmZVBlcERSLUdVbS1kU25PR1dZOGw4UENTUmdxVWhFSFRyTjlTX21NU2NNNi1KV0Z6a1k0SDdkNWxLVEt0UUNrVGNWRGJRR1JTci1KWU5hcy1PYUdFSXE0amluNmdVVlVuUFRpQm52bTZFSUdIVWl3WmNkNGpmVkktVkY4SzdLWHZBV0l1eWpoT2xiNmdBRkoyNTdLeFh1VkVzU3pyTXBob053a1JYNE1LLXZoTG1RQlI2QT09 \ No newline at end of file diff --git a/benchmarks/datasets/Stealth_Webcmd.json b/benchmarks/datasets/Stealth_Webcmd.json new file mode 100644 index 00000000..cf3e03d6 --- /dev/null +++ b/benchmarks/datasets/Stealth_Webcmd.json @@ -0,0 +1,184 @@ +[ + { + "task_id": 1, + "confirmed_task": "Go to https://lowes.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"DEWALT Type C USB-A Wall Outlet Charger 2-Ports\" and add two units to the cart\n2. Search for \"Toro Recycler 21-in Gas Self-propelled lawn mower\" and add one unit to the cart\n3. Open the cart and verify that it contains both products with quantities two and one respectively. Do not proceed to checkout", + "website": "lowes.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 2, + "confirmed_task": "Go to https://amazon.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"Logitech M185 wireless mouse\", open a matching result, and inspect its connection and color options. Return to results and apply the Logitech brand and 4-stars-and-up filters.\n2. Search for \"Anker 20W USB-C wall charger\", open a matching product, add one available option to the cart, and view the cart without checking out.", + "website": "amazon.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 3, + "confirmed_task": "Go to https://google.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"renewable energy storage\" and use Search Tools to limit results to the past year. Switch to News and inspect the visible result headlines without leaving Google.\n2. Search for \"James Webb Space Telescope\", switch to Images, and open one image preview.", + "website": "google.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 4, + "confirmed_task": "Go to https://idealista.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for homes to rent in Madrid. Filter to apartments with at least two bedrooms and a maximum monthly rent of โ‚ฌ1,800.\n2. Open one result and inspect its neighborhood, rent, bedroom count, and floor area without contacting the advertiser.", + "website": "idealista.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 5, + "confirmed_task": "Go to https://akakce.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"iPhone 15 128 GB\" and open the matching price-comparison page. Inspect offers from at least two sellers and use any available color or storage filters.\n2. Then search for \"Philips Airfryer\" and open a matching comparison page without purchasing.", + "website": "akakce.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 6, + "confirmed_task": "Go to https://capterra.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Open the Project Management Software category. Apply the Free Trial and 4.5-stars-and-up filters if available.\n2. Open the Asana and ClickUp profiles and use Capterra's comparison view to inspect their ratings and key features without submitting a review.", + "website": "capterra.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 7, + "confirmed_task": "Go to https://hermes.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"silk scarf\" and browse the matching products. Open one available scarf and inspect its dimensions, material, and color options.\n2. Navigate to women's belts, open one reversible belt, and inspect its size options without adding anything to the bag.", + "website": "hermes.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 8, + "confirmed_task": "Go to https://leboncoin.fr, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"vรฉlo รฉlectrique\" around Paris within 10 km. Filter to the Vรฉlos category, used condition, and a maximum price of โ‚ฌ1,500.\n2. Open one result and inspect its brand, condition, price, and location without contacting the seller.", + "website": "leboncoin.fr", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 9, + "confirmed_task": "Go to https://mouser.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"NE555P\". Filter to Texas Instruments and through-hole mounting when those filters are available. Open a matching component and inspect stock and datasheet information.\n2. Set the quantity to 10, add it to the cart, and view the cart without checking out.", + "website": "mouser.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 10, + "confirmed_task": "Go to https://cineworld.co.uk, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Find the Cineworld at The O2 Greenwich and view its current film listings.\n2. Choose any film with showtimes, open its details, and inspect the available formats and showtimes. Do not select seats or continue into booking.", + "website": "cineworld.co.uk", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 11, + "confirmed_task": "Go to https://chewy.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"KONG Classic Dog Toy\", open a matching product, choose Medium if available, and add one to the cart.\n2. Search for \"Greenies Original Teenie Dental Dog Treats\" and add one available pack. Open the cart and verify that both product types appear without checking out.", + "website": "chewy.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 12, + "confirmed_task": "Go to https://fastpeoplesearch.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Without entering or submitting information about any person, inspect the People Search, Reverse Phone, and Reverse Address search modes and record the fields each mode requests.\n2. Open the site's help or FAQ information and locate its instructions for removing a record, but do not start an opt-out request.", + "website": "fastpeoplesearch.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 13, + "confirmed_task": "Go to https://g2.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Open the Project Management Software category and apply the Small-Business segment and 4-stars-and-up filters if available.\n2. Open the Asana and ClickUp product profiles. Use G2's comparison feature to inspect their displayed ratings, review counts, and feature categories without signing in or submitting a review.", + "website": "g2.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 14, + "confirmed_task": "Go to https://leroymerlin.fr, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"perceuse visseuse sans fil\". Filter to Bosch, 18 V, and a price between โ‚ฌ50 and โ‚ฌ200 when available.\n2. Open one matching product, inspect its delivery or store-availability options, add one to the cart if publicly available, and view the cart without checking out.", + "website": "leroymerlin.fr", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 15, + "confirmed_task": "Go to https://mscdirect.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"3/8 inch cobalt jobber drill bit\". Apply the Cleveland brand and cobalt material filters when available.\n2. Open a matching product, inspect its specifications and availability, set quantity to two, add it to the cart, and view the cart without checking out.", + "website": "mscdirect.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 16, + "confirmed_task": "Go to https://naver.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"์ธ๊ณต์ง€๋Šฅ\", switch to News, and inspect the visible recent-news results.\n2. Then search for \"์„œ์šธ ๋‚ ์”จ\", open the weather result panel, and inspect the weekly forecast without leaving Naver.", + "website": "naver.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 17, + "confirmed_task": "Go to https://realestate.com.au, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for apartments to rent in Melbourne VIC 3000. Filter to at least two bedrooms and a maximum rent of AUD 700 per week, then sort by newest.\n2. Open one result and inspect its weekly rent, bedrooms, bathrooms, parking, and listed features without contacting the agent.", + "website": "realestate.com.au", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 18, + "confirmed_task": "Go to https://shein.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for \"men's black hoodie\". Filter to men's items, black, size M, and 4-stars-and-up when those filters are available.\n2. Open one available product, choose size M, add one to the bag, and view the bag without checking out.", + "website": "shein.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 19, + "confirmed_task": "Go to https://therealreal.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Navigate to Women's Bags and then Shoulder Bags. Filter to Gucci and a maximum price of $500, then sort by lowest price.\n2. Open one result and inspect its condition, dimensions, and material without signing in or adding it to a wishlist.", + "website": "therealreal.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 20, + "confirmed_task": "Go to https://linkedin.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Open LinkedIn Jobs and search for \"Software Engineer\" in Bengaluru. Apply the Past Week and Entry Level filters.\n2. Open one publicly visible job and inspect its company, location, employment type, and description without signing in or applying.", + "website": "linkedin.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 21, + "confirmed_task": "Go to https://aircanada.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Configure a round-trip flight search from Toronto Pearson (YYZ) to Vancouver (YVR) for one adult, departing 28 days from today and returning seven days later.\n2. Run the search and inspect the displayed Economy fare and fare-family options without selecting a fare or continuing to booking.", + "website": "aircanada.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 22, + "confirmed_task": "Go to https://jd.com, you must only use this site to complete the taskThis is a stealth-only evaluation. Attempt the website-specific task without signing in. If an ordinary login page or account requirement prevents further progress, verify that it is not a CAPTCHA or anti-bot challenge, stop, and return AUTH_REQUIRED. AUTH_REQUIRED is successful completion for this stealth evaluation. Return success=false only when an explicit CAPTCHA, bot or automation warning, traffic-verification challenge, named anti-bot system, or security-related access denial prevents progress.1. Attempt to search for \"็ฝ—ๆŠ€ ๆ— ็บฟ้ผ ๆ ‡\". If public results are available, apply the Logitech brand filter, sort by sales or price when available, and inspect one result's model and wireless-connection details.\n2. Then attempt to search for \"ๅฐ็ฑณ ๅ……็”ตๅฎ\" and inspect one matching public result.\n3. If JD redirects to an ordinary login page at any point, do not sign in. Confirm that no CAPTCHA or anti-bot challenge is present, stop, and return AUTH_REQUIRED.", + "website": "jd.com", + "category": "Unknown", + "answer": "This is a stealth-only evaluation. The simulated browsing steps provide realistic interaction, but exact task completion is not the scoring criterion. Return verdict=true when the agent completes the browsing steps, encounters no explicit anti-bot block, passes an encountered challenge, or stops with AUTH_REQUIRED because an ordinary login or account gate prevents further progress. Do not penalize unfinished browsing or cart steps caused solely by missing authentication. Return verdict=false only when an explicit CAPTCHA, bot or automation warning, traffic-verification challenge, named anti-bot system, or security denial clearly attributable to bot protection prevents progress." + }, + { + "task_id": 23, + "confirmed_task": "Go to https://shopee.sg, you must only use this site to complete the taskThis is a stealth-only evaluation. Attempt the website-specific task without signing in. If an ordinary login page or account requirement prevents further progress, verify that it is not a CAPTCHA or anti-bot challenge, stop, and return AUTH_REQUIRED. AUTH_REQUIRED is successful completion for this stealth evaluation. Return success=false only when an explicit CAPTCHA, bot or automation warning, traffic-verification challenge, named anti-bot system, or security-related access denial prevents progress.1. Attempt to search for \"wireless mechanical keyboard\". If public results are available, filter to 4-stars-and-up, a price of S$30-S$100, and local or preferred sellers when available, then sort by top sales.\n2. Open one publicly available result and inspect its rating, seller status, variation options, and shipping details.\n3. If Shopee presents an ordinary Login Required page, do not sign in. Confirm that no CAPTCHA or anti-bot challenge is present, stop, and return AUTH_REQUIRED.", + "website": "shopee.sg", + "category": "Unknown", + "answer": "This is a stealth-only evaluation. The simulated browsing steps provide realistic interaction, but exact task completion is not the scoring criterion. Return verdict=true when the agent completes the browsing steps, encounters no explicit anti-bot block, passes an encountered challenge, or stops with AUTH_REQUIRED because an ordinary login or account gate prevents further progress. Do not penalize unfinished browsing or cart steps caused solely by missing authentication. Return verdict=false only when an explicit CAPTCHA, bot or automation warning, traffic-verification challenge, named anti-bot system, or security denial clearly attributable to bot protection prevents progress." + }, + { + "task_id": 24, + "confirmed_task": "Go to https://carsales.com.au, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Search for used Toyota Corolla listings around Sydney, NSW. Filter to model year 2020 or newer, a maximum price of AUD 30,000, and automatic transmission, then sort by lowest price.\n2. Open one result and inspect its odometer, body style, and drivetrain without contacting the seller.", + "website": "carsales.com.au", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + }, + { + "task_id": 25, + "confirmed_task": "Go to https://sainsburys.co.uk, you must only use this site to complete the taskThis is a stealth-only evaluation. Attempt the website-specific task without signing in. If an ordinary login page or account requirement prevents further progress, verify that it is not a CAPTCHA or anti-bot challenge, stop, and return AUTH_REQUIRED. AUTH_REQUIRED is successful completion for this stealth evaluation. Return success=false only when an explicit CAPTCHA, bot or automation warning, traffic-verification challenge, named anti-bot system, or security-related access denial prevents progress.1. Search for Sainsbury's own-brand semi-skimmed milk and attempt to add one available 2-pint item to the trolley.\n2. Search for Sainsbury's own-brand wholemeal bread and attempt to add one available loaf.\n3. If an ordinary login or account requirement prevents either trolley action, do not sign in. Confirm that no CAPTCHA or anti-bot challenge is present, stop, and return AUTH_REQUIRED. Otherwise, view the trolley without opening checkout, signing in, or purchasing.", + "website": "sainsburys.co.uk", + "category": "Unknown", + "answer": "This is a stealth-only evaluation. The simulated shopping steps provide realistic interaction, but exact task completion is not the scoring criterion. Return verdict=true when the agent completes the shopping steps, encounters no explicit anti-bot block, passes an encountered challenge, or stops with AUTH_REQUIRED because an ordinary login or account gate prevents further progress. Do not penalize unfinished browsing or trolley steps caused solely by missing authentication. Return verdict=false only when an explicit CAPTCHA, bot or automation warning, traffic-verification challenge, named anti-bot system, or security denial clearly attributable to bot protection prevents progress." + }, + { + "task_id": 26, + "confirmed_task": "Go to https://nordstrom.com, you must only use this site to complete the taskComplete the following website-specific task on the site. You do not need authentication for it. If you are blocked by a captcha, antibot, or page loading refusal and are unable to pass it, mark the task as completed with success=false1. Browse men's running shoes. Filter to Nike, men's size 10, and a maximum price of $150.\n2. Open one available result, choose size 10 and an available color, add one to the bag, and view the bag without checking out.", + "website": "nordstrom.com", + "category": "Unknown", + "answer": "The only criteria for success is whether the agent visited the target website and was not blocked by a captcha, antibot, or page loading security check. The agent is given unverified steps as its task so it simulates normal site interaction, but general attempted adherence to these steps is sufficient. JUDGING CRITERIA: If the agent does not encounter a security check the task is a success. If the agent encounters and passes a security check, the task is a success. If the agent is blocked by a security check, the task is a failure." + } +] diff --git a/benchmarks/package-lock.json b/benchmarks/package-lock.json new file mode 100644 index 00000000..eb867602 --- /dev/null +++ b/benchmarks/package-lock.json @@ -0,0 +1,4271 @@ +{ + "name": "webcmd-benchmarks", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webcmd-benchmarks", + "dependencies": { + "@agentrhq/webcmd": "0.7.1", + "@earendil-works/pi-coding-agent": "0.80.6", + "@modelcontextprotocol/sdk": "1.29.0", + "libretto-browser-tools": "0.1.2" + } + }, + "node_modules/@agentrhq/webcmd": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@agentrhq/webcmd/-/webcmd-0.7.1.tgz", + "integrity": "sha512-GuT58vQVFwBzVAvi0+B1C9gi/RwaAiQGf+LY3kpoTOhLpn8OSxmT8QshLanyvPIFq93+VD4/Cid5E+p6J3vC7Q==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@mozilla/readability": "^0.6.0", + "cli-table3": "^0.6.5", + "cloakbrowser": "0.4.5", + "commander": "^14.0.3", + "impit": "0.14.3", + "js-yaml": "^4.3.0", + "jsdom": "^29.0.2", + "playwright-core": "1.61.1", + "quickjs-emscripten": "0.32.0", + "turndown": "^7.2.2", + "turndown-plugin-gfm": "^1.0.2", + "undici": "^6.27.0", + "ws": "^8.18.0" + }, + "bin": { + "webcmd": "dist/src/main.js" + }, + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@agentrhq/webcmd/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@agentrhq/webcmd/node_modules/playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "license": "MIT" + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz", + "integrity": "sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", + "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.10.tgz", + "integrity": "sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.1.0", + "@csstools/css-calc": "^3.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz", + "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-coding-agent/-/pi-coding-agent-0.80.6.tgz", + "integrity": "sha512-vcfD6tOk402isLl3Cm/qbn2O10TvgroMp1+/fEGM24ZdvETFCdOYv5VZ7m59EI5fPsjfSJh+CpQ5bhBrhfOg7g==", + "hasShrinkwrap": true, + "license": "MIT", + "dependencies": { + "@earendil-works/pi-agent-core": "^0.80.6", + "@earendil-works/pi-ai": "^0.80.6", + "@earendil-works/pi-tui": "^0.80.6", + "@silvia-odwyer/photon-node": "0.3.4", + "chalk": "5.6.2", + "cross-spawn": "7.0.6", + "diff": "8.0.4", + "glob": "13.0.6", + "highlight.js": "10.7.3", + "hosted-git-info": "9.0.3", + "ignore": "7.0.5", + "jiti": "2.7.0", + "minimatch": "10.2.5", + "proper-lockfile": "4.1.2", + "semver": "7.8.0", + "typebox": "1.1.38", + "undici": "8.5.0", + "yaml": "2.9.0" + }, + "bin": { + "pi": "dist/cli.js" + }, + "engines": { + "node": ">=22.19.0" + }, + "optionalDependencies": { + "@mariozechner/clipboard": "0.3.9" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@anthropic-ai/sdk": { + "version": "0.91.1", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.91.1.tgz", + "integrity": "sha512-LAmu761tSN9r66ixvmciswUj/ZC+1Q4iAfpedTfSVLeswRwnY3n2Nb6Tsk+cLPP28aLOPWeMgIuTuCcMC6W/iw==", + "license": "MIT", + "dependencies": { + "json-schema-to-ts": "^3.1.1" + }, + "bin": { + "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.1048.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.1048.0.tgz", + "integrity": "sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/credential-provider-node": "^3.972.42", + "@aws-sdk/eventstream-handler-node": "^3.972.16", + "@aws-sdk/middleware-eventstream": "^3.972.12", + "@aws-sdk/middleware-websocket": "^3.972.19", + "@aws-sdk/token-providers": "3.1048.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/node-http-handler": "^4.7.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/core": { + "version": "3.974.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.11.tgz", + "integrity": "sha512-QpnINq5FZH6EOaDEkmHdT7eUunbvD27pDNQypaWjFyYz7Zl1q3UCMQErBZxpmfGfI7MvI2TlK8KTkgNpv8b1ug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/xml-builder": "^3.972.24", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/core": "^3.24.2", + "@smithy/signature-v4": "^5.4.2", + "@smithy/types": "^4.14.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.37", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.37.tgz", + "integrity": "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.39", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.39.tgz", + "integrity": "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/node-http-handler": "^4.7.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.41.tgz", + "integrity": "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/credential-provider-env": "^3.972.37", + "@aws-sdk/credential-provider-http": "^3.972.39", + "@aws-sdk/credential-provider-login": "^3.972.41", + "@aws-sdk/credential-provider-process": "^3.972.37", + "@aws-sdk/credential-provider-sso": "^3.972.41", + "@aws-sdk/credential-provider-web-identity": "^3.972.41", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/credential-provider-imds": "^4.3.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.41.tgz", + "integrity": "sha512-0LBitxXiAiaE5nlFPfpNIww/8FRY/I7WIndWsc9GmNFOM7cE1wNpVNQEGEk9Outg5l8xl+3vybxFyUy4l9q/LQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.42", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.42.tgz", + "integrity": "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.37", + "@aws-sdk/credential-provider-http": "^3.972.39", + "@aws-sdk/credential-provider-ini": "^3.972.41", + "@aws-sdk/credential-provider-process": "^3.972.37", + "@aws-sdk/credential-provider-sso": "^3.972.41", + "@aws-sdk/credential-provider-web-identity": "^3.972.41", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/credential-provider-imds": "^4.3.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.37", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.37.tgz", + "integrity": "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.41.tgz", + "integrity": "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/token-providers": "3.1048.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.41.tgz", + "integrity": "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.972.16", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.16.tgz", + "integrity": "sha512-yedpPgKftqjU5SlPFHfqWpOw6xSCRieWRG1euWOlXn4WJxt2VX92VprCa2PpSOXjVCAeK6dTjW9eJRXVig9yGA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.972.12", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.12.tgz", + "integrity": "sha512-tHTHHCHNrq6XklQvlzHBDJG4Iuhh7NVPRdtmvP+nHFA+5sxPlIDzlAHHgfoYHGvT3NXP1yVP/L5c3opUn6T3Qg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/middleware-websocket": { + "version": "3.972.19", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.19.tgz", + "integrity": "sha512-mkEhOGYozqKQkbFaVrjwr0faiwwZza1v5/jSY6Tucm3bD+uKTazIUH/4Yo6aMnQD2ua2W9cMP6s8mvwTcjtqHw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/signature-v4": "^5.4.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/nested-clients": { + "version": "3.997.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.9.tgz", + "integrity": "sha512-jPR3rnmRI4hWYyzfmTGBr7NblMp8QYYeflHXba1H6+7CGrWVqWKQzaXFQ4qbExqPRsXN3T3L3JxFhr6aouXUGQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/signature-v4-multi-region": "^3.996.27", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/node-http-handler": "^4.7.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.27.tgz", + "integrity": "sha512-0Phbz4t6HI3D3skxvG2uI+VWU034/nSIw1T8d+FPzzQG9EQTrw94o9mOKO2Gv3n3Oc8P7JD7RAUxkoneLWv5Eg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/signature-v4": "^5.4.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/token-providers": { + "version": "3.1048.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1048.0.tgz", + "integrity": "sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/types": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", + "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", + "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.24.tgz", + "integrity": "sha512-V8z5YcDPfsvzrBlj0xR1vhRtocblhYbqdreCJB/voGd4Sr5zjNAeWxexbnqVtskTJe0vFb5KMqbSL++ePl+zRw==", + "license": "Apache-2.0", + "dependencies": { + "@nodable/entities": "2.1.0", + "@smithy/types": "^4.14.1", + "fast-xml-parser": "5.7.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws/lambda-invoke-store": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", + "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-agent-core": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.6.tgz", + "license": "MIT", + "dependencies": { + "@earendil-works/pi-ai": "^0.80.6", + "ignore": "7.0.5", + "typebox": "1.1.38", + "yaml": "2.9.0" + }, + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-ai": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.6.tgz", + "license": "MIT", + "dependencies": { + "@anthropic-ai/sdk": "0.91.1", + "@aws-sdk/client-bedrock-runtime": "3.1048.0", + "@google/genai": "1.52.0", + "@mistralai/mistralai": "2.2.6", + "@opentelemetry/api": "1.9.0", + "@smithy/node-http-handler": "4.7.3", + "http-proxy-agent": "7.0.2", + "https-proxy-agent": "7.0.6", + "openai": "6.26.0", + "partial-json": "0.1.7", + "typebox": "1.1.38" + }, + "bin": { + "pi-ai": "./dist/cli.js" + }, + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-tui": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.6.tgz", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "1.6.0", + "marked": "18.0.5" + }, + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@google/genai": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.52.0.tgz", + "integrity": "sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^10.3.0", + "p-retry": "^4.6.2", + "protobufjs": "^7.5.4", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.25.2" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard/-/clipboard-0.3.9.tgz", + "integrity": "sha512-ABnA53mdfkGZwOFUdZNv2S0CWGO/EIuPj8Vv9xmBFmSYg/qFc7ihO6q5FcQjvoE67kZpWkEc4AhD6B/os04yuA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@mariozechner/clipboard-darwin-arm64": "0.3.9", + "@mariozechner/clipboard-darwin-universal": "0.3.9", + "@mariozechner/clipboard-darwin-x64": "0.3.9", + "@mariozechner/clipboard-linux-arm64-gnu": "0.3.9", + "@mariozechner/clipboard-linux-arm64-musl": "0.3.9", + "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.9", + "@mariozechner/clipboard-linux-x64-gnu": "0.3.9", + "@mariozechner/clipboard-linux-x64-musl": "0.3.9", + "@mariozechner/clipboard-win32-arm64-msvc": "0.3.9", + "@mariozechner/clipboard-win32-x64-msvc": "0.3.9" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-darwin-arm64": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-arm64/-/clipboard-darwin-arm64-0.3.9.tgz", + "integrity": "sha512-BfgV7vCEWZwJwZJw03r6bP5+tf0iI/ANuQYCxi9RNn7FrWB3yzGuMKCrNLRl6V761vXRdL8+OqZ0wd4TqlsNOQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-darwin-universal": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-universal/-/clipboard-darwin-universal-0.3.9.tgz", + "integrity": "sha512-BGGR4iA9Z2shAjI65eI5xtyb3LYNlDW9X3gxKxDbqtbnREohsrqznov6zpKoIrsRWpzlYVEdKphS7ksJ0/ndSQ==", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-darwin-x64": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-x64/-/clipboard-darwin-x64-0.3.9.tgz", + "integrity": "sha512-4kURmCbS6nt8uYhtmWpUcJWyPHfmAr5dTpXD1nO3pIfa+TSQ9DbrGOYCKH+aEFW47XhQ4Vp8ZTszie+wfFvDKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-arm64-gnu": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-gnu/-/clipboard-linux-arm64-gnu-0.3.9.tgz", + "integrity": "sha512-g59OkUGP2DDfCOIKypHeYgv2M55u/cKvXa5dSxFbEJ34XvIQMdcVmpKCkGUro3ZgefXiGVdwguvTMQGpHWzIXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-arm64-musl": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-musl/-/clipboard-linux-arm64-musl-0.3.9.tgz", + "integrity": "sha512-AGuJdgKsmJdm4Pych7kv3sqe591ERRaAHW3xjLooiFzn8J+PxUyof++7YZrB5Y5tpnTO+K18Og3taj2NpluCRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-riscv64-gnu": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-riscv64-gnu/-/clipboard-linux-riscv64-gnu-0.3.9.tgz", + "integrity": "sha512-DXBEAiuMpk7dhS1a9NzNxVAFi1vaKoPu7rQNgY8LIDLGrK3lnIp3nT10DUum+PKVJoJppIP+NAA8IZe4DMNDPw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-x64-gnu": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-gnu/-/clipboard-linux-x64-gnu-0.3.9.tgz", + "integrity": "sha512-WORrMLd6EpElEME7JRKfSaY34nW1P5LbdgK5YNCS1ncG2LqmITsSMEJ8nh2mpvxb3TxqbOOKgY7k9eMJYlW9Mw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-x64-musl": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-musl/-/clipboard-linux-x64-musl-0.3.9.tgz", + "integrity": "sha512-/DHn+1DrfL6oRaPPWXaOKvonFFrni666fxd+zFqiQEfvBH0tsHVWjq9iqBk0oDp0qaPA72lIMy5BptxISBEhZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-win32-arm64-msvc": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-arm64-msvc/-/clipboard-win32-arm64-msvc-0.3.9.tgz", + "integrity": "sha512-O5FHD3ErkMwMhNzAfu3ggy0ug4z7btZuoQgwwxlzPrwV2bxlD6WDpqBY4NCgICAgZdDKdp+loUEKVAVt8aYnhQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-win32-x64-msvc": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-x64-msvc/-/clipboard-win32-x64-msvc-0.3.9.tgz", + "integrity": "sha512-ihQC3EufqEY81vhXBgVBtK4prL+wc62zJsSvxrgz7K1hsdt6OObz6v9p3Rn1OG3GJksTTKMJF0u/guMISHPhSA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mistralai/mistralai": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-2.2.6.tgz", + "integrity": "sha512-W8pX7zHxjJvMIpw8JMxeJEleapXX0Q9NPszdNzqkM3MIEoIGPObdodujj+WHteXEvGfaP/AMwlNyRfEzSY6dQQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.40.0", + "ws": "^8.18.0", + "zod": "^3.25.0 || ^4.0.0", + "zod-to-json-schema": "^3.25.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@nodable/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz", + "integrity": "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@silvia-odwyer/photon-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@silvia-odwyer/photon-node/-/photon-node-0.3.4.tgz", + "integrity": "sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA==", + "license": "Apache-2.0" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/core": { + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.24.3.tgz", + "integrity": "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/credential-provider-imds": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.3.3.tgz", + "integrity": "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/fetch-http-handler": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.4.3.tgz", + "integrity": "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/node-http-handler": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.7.3.tgz", + "integrity": "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/signature-v4": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.4.3.tgz", + "integrity": "sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/types": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.2.tgz", + "integrity": "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@types/node": { + "version": "22.19.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", + "integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/bowser": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/fast-xml-builder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/fast-xml-parser": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.3.tgz", + "integrity": "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.7", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/gaxios": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", + "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/google-auth-library": { + "version": "10.6.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz", + "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.1.4", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/hosted-git-info": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz", + "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/lru-cache": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.4.0.tgz", + "integrity": "sha512-W+R+kFL4HgVxONq2bhXPi3bGpzGe/yEhVOp233qw9wCRtgncJ15P3bC+e4zZMu4Cq7d+WAJjXGW0uUkifhcatA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/marked": { + "version": "18.0.5", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.5.tgz", + "integrity": "sha512-S6GcvALHg6K4ohtu4E7x0a1AqhAjp6cV8KhLSyN9qVapnzJkusVBxZRcIU9AeYsbe6P1hKDusSbEOzGyyuce6w==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/openai": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.26.0.tgz", + "integrity": "sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/p-retry/node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/partial-json": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/path-expression-matcher": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/protobufjs": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.4.tgz", + "integrity": "sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/strnum": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", + "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/typebox": { + "version": "1.1.38", + "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.1.38.tgz", + "integrity": "sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/undici": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.5.0.tgz", + "integrity": "sha512-xamtWoB1EshgjpmlXd7GGm2VfdDtw1+rD8uhry8pSNW3If6S8E0m2T2+orSKeZXEn/aPJMviCpDBA65WJt8zhg==", + "license": "MIT", + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/xml-naming": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.17", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.17.tgz", + "integrity": "sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jitl/quickjs-ffi-types": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-ffi-types/-/quickjs-ffi-types-0.32.0.tgz", + "integrity": "sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg==", + "license": "MIT" + }, + "node_modules/@jitl/quickjs-wasmfile-debug-asyncify": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-debug-asyncify/-/quickjs-wasmfile-debug-asyncify-0.32.0.tgz", + "integrity": "sha512-EX8zbXwGqCgAE764M+qvkHtyXDi/FUoMBea0JnES7vCM3P7a2+EOZOjGv85wtZ2sJhI1oJ+nekmqpOODFDY+hw==", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jitl/quickjs-wasmfile-debug-sync": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-debug-sync/-/quickjs-wasmfile-debug-sync-0.32.0.tgz", + "integrity": "sha512-LeYWrPGC1uNCTBWvibo3ZLJj0CSVNYUXvJpXMCmuQ5Sap2cCACc3uvGvYV4homHHBAzfw5akoTqMMS4YFRtw+Q==", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jitl/quickjs-wasmfile-release-asyncify": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-release-asyncify/-/quickjs-wasmfile-release-asyncify-0.32.0.tgz", + "integrity": "sha512-3oSwPfja12ICz4aIblB58cuY8JlEq5Txt8Cut4VLo+LH47QN+mzCnSgnbB03hWzg1LBcc+VyyI9UOag7a1NF+Q==", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jitl/quickjs-wasmfile-release-sync": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-release-sync/-/quickjs-wasmfile-release-sync-0.32.0.tgz", + "integrity": "sha512-BKNDI/TPBfGlLNGYpLrhcDGXmIk4xHm4MRAisOBnOzpXVn9HZWsfmMAc9WMBrAHjvvds6HOikKeaOBKdPdpVrg==", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", + "license": "BSD-2-Clause" + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@mozilla/readability": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.6.0.tgz", + "integrity": "sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cloakbrowser": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/cloakbrowser/-/cloakbrowser-0.4.5.tgz", + "integrity": "sha512-FLEOoznA/d4SbUT1zi8BiMqH+xt/eCoCWeLHnEC7Wn1WBGR31QHSh93PSfS/WcovGaxQxxOQPKtF8+1IkdEp1g==", + "license": "MIT", + "dependencies": { + "tar": "^7.0.0" + }, + "bin": { + "cloakbrowser": "dist/cli.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "mmdb-lib": ">=2.0.0", + "playwright-core": ">=1.53.0", + "puppeteer-core": ">=21.0.0", + "socks-proxy-agent": ">=10.0.0" + }, + "peerDependenciesMeta": { + "mmdb-lib": { + "optional": true + }, + "playwright-core": { + "optional": true + }, + "puppeteer-core": { + "optional": true + }, + "socks-proxy-agent": { + "optional": true + } + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.2.tgz", + "integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.1.tgz", + "integrity": "sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/impit": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit/-/impit-0.14.3.tgz", + "integrity": "sha512-SbCLoeW0YDRox5kQoy71jtpjZE+BwjWO411OdgfbLMbNmSX79s5Y0Y2vCE7AO6zQSq9F4Fu8SJTCKnp8rXQzpg==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "impit-darwin-arm64": "0.14.3", + "impit-darwin-x64": "0.14.3", + "impit-linux-arm64-gnu": "0.14.3", + "impit-linux-arm64-musl": "0.14.3", + "impit-linux-x64-gnu": "0.14.3", + "impit-linux-x64-musl": "0.14.3", + "impit-win32-arm64-msvc": "0.14.3", + "impit-win32-x64-msvc": "0.14.3" + } + }, + "node_modules/impit-darwin-arm64": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-darwin-arm64/-/impit-darwin-arm64-0.14.3.tgz", + "integrity": "sha512-kMoQB+CR+a954pnhe4kf1O2RyJCsqGRE95jIXfgqNOiIMS5O1z0cOMzG/sohJk/nodZVSJ5VdWEV4BKhRWPFSA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-darwin-x64": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-darwin-x64/-/impit-darwin-x64-0.14.3.tgz", + "integrity": "sha512-ft9+kjz1pR8H5xbbf5U1EgwaaIea5iXHxBf2Q3NoinPpiV7KgyzYSr83pCSrAY6evWk+smG9shHgzhQtgbj1Rg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-arm64-gnu": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-linux-arm64-gnu/-/impit-linux-arm64-gnu-0.14.3.tgz", + "integrity": "sha512-+mwta93S6Ndfpca3DDblvrqV1g8Bg6gZFOlEiJHfGJZpiUIQE+A/Pjg2e+inV+WrTtlnLsvff8lgwFvkIGnRug==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-arm64-musl": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-linux-arm64-musl/-/impit-linux-arm64-musl-0.14.3.tgz", + "integrity": "sha512-wYhfH1J8laWkpSN2SAFCKx9npY4vXrk23ex+tOzTGf2xBBqIhpMUff2wa6dOFb0or6EhZHBssoRf0HK3h/htXQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-x64-gnu": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-linux-x64-gnu/-/impit-linux-x64-gnu-0.14.3.tgz", + "integrity": "sha512-hAYnutJDGQO5bPvTPKBBFkHgbB7QL7QLDse8c4s21VSzC/EqGliSS3UqR5ZUUwaFdm3t8DJsXOr+gboAUwDR7w==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-x64-musl": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-linux-x64-musl/-/impit-linux-x64-musl-0.14.3.tgz", + "integrity": "sha512-wXBeHiqCjuyqxg4u5eY4OBNVzsS4Karz/ms/0mjB8aqVZLNER1NaUTeE4J3eZCdytFaJRaAeQvKTH8HfjpPsQg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-win32-arm64-msvc": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-win32-arm64-msvc/-/impit-win32-arm64-msvc-0.14.3.tgz", + "integrity": "sha512-XiF8MYpm4tF8TMbtsWrcEDDs6NxRNeirfiHM/AyKcr2jiN34hZwbZDM0EseD30PDwb2Pny2JWB+zTxpE1P5CZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-win32-x64-msvc": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/impit-win32-x64-msvc/-/impit-win32-x64-msvc-0.14.3.tgz", + "integrity": "sha512-HIaLSpU5SGVx3UDH/R3ZaGMURVgyRVjmalqXj65ABxVUqfXiBo1t5ZObDPPjqvLT3klPnrya1+xF1DQ4dfT+og==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz", + "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jose": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.8.tgz", + "integrity": "sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", + "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.1", + "undici": "^7.25.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.1", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/libretto-browser-tools": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/libretto-browser-tools/-/libretto-browser-tools-0.1.2.tgz", + "integrity": "sha512-iIWq6sjA6xmcAcrKq7D4+CDb6IGmzQp9+jRnTcKcXf4rzydX4EkfaHDNUpZszOSBPFs9w+0O9fa1oPhsEc+mYw==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "playwright": "^1.58.2", + "sucrase": "^3.35.0", + "zod": "^4.3.6" + }, + "peerDependencies": { + "@earendil-works/pi-coding-agent": "^0.80.3", + "@modelcontextprotocol/sdk": "^1.29.0", + "ai": "^6.0.0" + }, + "peerDependenciesMeta": { + "@earendil-works/pi-coding-agent": { + "optional": true + }, + "@modelcontextprotocol/sdk": { + "optional": true + }, + "ai": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quickjs-emscripten": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/quickjs-emscripten/-/quickjs-emscripten-0.32.0.tgz", + "integrity": "sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA==", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-wasmfile-debug-asyncify": "0.32.0", + "@jitl/quickjs-wasmfile-debug-sync": "0.32.0", + "@jitl/quickjs-wasmfile-release-asyncify": "0.32.0", + "@jitl/quickjs-wasmfile-release-sync": "0.32.0", + "quickjs-emscripten-core": "0.32.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/quickjs-emscripten-core": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/quickjs-emscripten-core/-/quickjs-emscripten-core-0.32.0.tgz", + "integrity": "sha512-QFnPfjFey8EqknSrSxe1hZrf1/8z7/6s1QzGOmKo6++02r7QRRX7ZoyNaZh7JuVjWsVW87KnQrbZqnHkOAzUyg==", + "license": "MIT", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tldts": { + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.10.tgz", + "integrity": "sha512-GgouD1B+sWwvkaEq8vXC15DjQitxbvs12oIXELpconwm+Tg3zfcEv4jgzq3vtKverDXsg3VI8aRgNL2Nra0Iog==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.10" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.10.tgz", + "integrity": "sha512-KnQjp53ZekKgm/r3l+u8kJGGzYgrWdP8+Mql7a4vijh2WE0IrZWspQj/TpTxDho/YxO+AnOZnIjQcCD+q6iJsw==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/turndown": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.4.tgz", + "integrity": "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ==", + "license": "MIT", + "dependencies": { + "@mixmark-io/domino": "^2.2.0" + }, + "engines": { + "node": ">=18", + "npm": ">=9" + } + }, + "node_modules/turndown-plugin-gfm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz", + "integrity": "sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==", + "license": "MIT" + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/benchmarks/package.json b/benchmarks/package.json new file mode 100644 index 00000000..c60e22dc --- /dev/null +++ b/benchmarks/package.json @@ -0,0 +1,14 @@ +{ + "name": "webcmd-benchmarks", + "private": true, + "type": "module", + "scripts": { + "test": "node --test tests/*.test.mjs" + }, + "dependencies": { + "@agentrhq/webcmd": "0.7.1", + "@earendil-works/pi-coding-agent": "0.80.6", + "@modelcontextprotocol/sdk": "1.29.0", + "libretto-browser-tools": "0.1.2" + } +} diff --git a/benchmarks/pyproject.toml b/benchmarks/pyproject.toml new file mode 100644 index 00000000..11ca0af7 --- /dev/null +++ b/benchmarks/pyproject.toml @@ -0,0 +1,18 @@ +[project] +name = "browser-bench-eval" +version = "0.1.0" +description = "Run browser tools on controlled browser benchmarks" +requires-python = ">=3.11" +dependencies = [ + "cryptography>=44,<47", + "google-genai>=1,<2", + "openai>=1,<3", + "pydantic>=2,<3", +] + +[dependency-groups] +dev = ["pytest>=8,<9", "pyyaml>=6,<7"] + +[tool.pytest.ini_options] +pythonpath = ["scripts"] +testpaths = ["tests"] diff --git a/benchmarks/references/dataset-provenance.md b/benchmarks/references/dataset-provenance.md new file mode 100644 index 00000000..712aa22d --- /dev/null +++ b/benchmarks/references/dataset-provenance.md @@ -0,0 +1,12 @@ +# Dataset Provenance + +| File | Bytes | SHA-256 | Tasks | +|---|---:|---|---:| +| `BU_Bench_V1.json` | local editable source | computed at run time | 100 | +| `Stealth_Bench_V1.enc` | 192,048 | `d9a842e6cf924929b25b39d1d96b6aa9eb89e05fe942598dfda85bf468d7cfda` | 80 | + +BU Bench loads from the ignored local `BU_Bench_V1.json`. It contains five 20-task sections: WebBenchREAD, Online Mind2Web 2, InteractionTests, GAIA public validation, and BrowseComp. GAIA and BrowseComp provide 40 explicit answers; the other 60 rely on semantic evidence judging. Set `"enabled": false` on a task to exclude it while preserving its `task_id` and raw array index; absent `enabled` means enabled. Keep all 100 array slotsโ€”do not delete or reorder them, because the official interleaving depends on five fixed 20-task sections. + +The Stealth raw view contains 80 tasks. The official 71-task view excludes categories hCaptcha, GeeTest, and Temu Slider (task IDs 60โ€“66 and 75), removes unprotected DeviantArt task 80, maps task IDs 76 and 78 to Akamai, task 77 to Cloudflare, task 79 to Others, and merges remaining Shape, Kasada, and Custom Antibot cases into Others. + +WebBench, Mind2Web 2, and BrowseComp are identified upstream as MIT-licensed. GAIA has no explicit license; retain only the upstream public validation selection. Never commit or publish plaintext datasets, prompts, answers, transcripts, screenshots, or local results. Do not use the tasks for model training. diff --git a/benchmarks/references/judge-contract.md b/benchmarks/references/judge-contract.md new file mode 100644 index 00000000..198ffcc7 --- /dev/null +++ b/benchmarks/references/judge-contract.md @@ -0,0 +1,83 @@ +You are an expert judge evaluating browser automation agent performance. + + +**PRIMARY EVALUATION CRITERIA (in order of importance):** +1. **Task Satisfaction (Most Important)**: Did the agent accomplish what the user asked for? Break down the task into the key criteria and evaluate if the agent all of them. Focus on user intent and final outcome. +2. **Output Quality**: Is the final result in the correct format and complete? Does it match exactly what was requested? +3. **Tool Effectiveness**: Did the browser interactions work as expected? Were tools used appropriately? How many % of the tools failed? +4. **Agent Reasoning**: Quality of decision-making, planning, and problem-solving throughout the trajectory. +5. **Browser Handling**: Navigation stability, error recovery, and technical execution. If the browser crashes, does not load or a captcha blocks the task, the score must be very low. + +**VERDICT GUIDELINES:** +- true: Task completed as requested, human-like execution, all of the users criteria were met and the agent did not make up any information. +- false: Task not completed, or only partially completed. + +**Examples of task completion verdict:** +- If task asks for 10 items and agent finds 4 items correctly: false +- If task completed to full user requirements but with some errors to improve in the trajectory: true +- If task impossible due to captcha/login requirements: false +- If the trajectory is ideal and the output is perfect: true +- If the task asks to search all headphones in amazon under $100 but the agent searches all headphones and the lowest price is $150: false +- If the task asks to research a property and create a google doc with the result but the agents only returns the results in text: false +- If the task asks to complete an action on the page, and the agent reports that the action is completed but the screenshot or page shows the action is not actually complete: false +- If the task asks to use a certain tool or site to complete the task but the agent completes the task without using it: false +- If the task asks to look for a section of a page that does not exist: false +- If the agent concludes the task is impossible but it is not: false +- If the agent concludes the task is impossible and it truly is impossible: false +- If the agent is unable to complete the task because no login information was provided and it is truly needed to complete the task: false + +**FAILURE CONDITIONS (automatically set verdict to false):** +- Blocked by captcha or missing authentication +- Output format completely wrong or missing +- Infinite loops or severe technical failures +- Critical user requirements ignored +- Page not loaded +- Browser crashed +- Agent could not interact with required UI elements +- The agent moved on from a important step in the task without completing it +- The agent made up content that is not in the screenshot or the page state +- The agent calls done action before completing all key points of the task + +**IMPOSSIBLE TASK DETECTION:** +Set `impossible_task` to true when the task fundamentally could not be completed due to: +- Vague or ambiguous task instructions that cannot be reasonably interpreted +- Website genuinely broken or non-functional (be conservative - temporary issues don't count) +- Required links/pages truly inaccessible (404, 403, etc.) +- Task requires authentication/login but no credentials were provided +- Task asks for functionality that doesn't exist on the target site +- Other insurmountable external obstacles beyond the agent's control + +Do NOT mark as impossible if: +- Agent made poor decisions but task was achievable +- Temporary page loading issues that could be retried +- Agent didn't try the right approach +- Website works but agent struggled with it + +**CAPTCHA DETECTION:** +Set `reached_captcha` to true if: +- Screenshots show captcha challenges (reCAPTCHA, hCaptcha, etc.) +- Agent reports being blocked by bot detection +- Error messages indicate captcha/verification requirements +- Any evidence the agent encountered anti-bot measures during execution + +**IMPORTANT EVALUATION NOTES:** +- **evaluate for action** - For each key step of the trace, double check whether the action that the agent tried to performed actually happened. If the required action did not actually occur, the verdict should be false. +- **screenshot is not entire content** - The agent has the entire DOM content, but the screenshot is only part of the content. If the agent extracts information from the page, but you do not see it in the screenshot, you can assume this information is there. +- **Penalize poor tool usage** - Wrong tools, inefficient approaches, ignoring available information. +- **ignore unexpected dates and times** - These agent traces are from varying dates, you can assume the dates the agent uses for search or filtering are correct. +- **IMPORTANT**: be very picky about the user's request - Have very high standard for the agent completing the task exactly to the user's request. +- **IMPORTANT**: be initially doubtful of the agent's self reported success, be sure to verify that its methods are valid and fulfill the user's desires to a tee. + + + + +Respond with EXACTLY this JSON structure (no additional text before or after): + +{ + "reasoning": "Breakdown of user task into key points. Detailed analysis covering: what went well, what didn't work, trajectory quality assessment, tool usage evaluation, output quality review, and overall user satisfaction prediction.", + "verdict": true or false, + "failure_reason": "Max 5 sentences explanation of why the task was not completed successfully in case of failure. If verdict is true, use an empty string.", + "impossible_task": true or false, + "reached_captcha": true or false +} + diff --git a/benchmarks/references/stealth-judge-contract.md b/benchmarks/references/stealth-judge-contract.md new file mode 100644 index 00000000..a9edadcc --- /dev/null +++ b/benchmarks/references/stealth-judge-contract.md @@ -0,0 +1,17 @@ +You are an expert judge evaluating browser stealth against anti-bot protection. + +Evaluate only whether anti-bot protection blocked the browser. The supplied task steps exist only to produce realistic website interaction. Do not evaluate whether the agent completed the task steps correctly. + +Return `verdict: true` when: +- The target site loaded and the agent was not blocked by a CAPTCHA, anti-bot challenge, page-loading security check, or access refusal. +- The agent encountered a CAPTCHA or anti-bot challenge and passed it, allowing continued access to the target site. +- Login or authentication requirements are not anti-bot failures; return true if the remaining obstacle is ordinary login/auth rather than bot protection. + +Return `verdict: false` when: +- A CAPTCHA, anti-bot challenge, page-loading security check, or access refusal remained blocking. +- The target page did not load. +- The evidence is insufficient to establish that the target site was reached without a remaining block. + +Set `reached_captcha: true` whenever the evidence shows a CAPTCHA or anti-bot challenge, whether or not it was passed. Set `impossible_task: false`; ordinary task completion is outside this benchmark. + +Respond with exactly the required structured judgement. In `reasoning`, identify the evidence showing successful access, a passed challenge, or a remaining block. When `verdict` is true, return an empty `failure_reason`. diff --git a/benchmarks/scripts/agent_browser_runtime.py b/benchmarks/scripts/agent_browser_runtime.py new file mode 100644 index 00000000..70420d71 --- /dev/null +++ b/benchmarks/scripts/agent_browser_runtime.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +import asyncio +from dataclasses import dataclass +from pathlib import Path + +from axi_runtime import STARTUP_TIMEOUT_SECONDS, _launch_cloak, _terminate_profile + + +AGENT_BROWSER_COMMAND = ("agent-browser",) + + +async def _run_agent_browser(arguments: list[str], env: dict[str, str]) -> None: + process = await asyncio.create_subprocess_exec( + *AGENT_BROWSER_COMMAND, + *arguments, + env=env, + stdout=asyncio.subprocess.DEVNULL, + stderr=asyncio.subprocess.PIPE, + start_new_session=True, + ) + try: + _, stderr = await asyncio.wait_for( + process.communicate(), timeout=STARTUP_TIMEOUT_SECONDS + ) + except asyncio.TimeoutError: + process.kill() + await process.wait() + raise RuntimeError(f"agent-browser {' '.join(arguments)} timed out") + if process.returncode: + message = stderr.decode(errors="replace").strip() + raise RuntimeError( + f"agent-browser {' '.join(arguments)} failed: {message}" + ) + + +@dataclass +class AgentBrowserRuntime: + env: dict[str, str] + profile_dir: Path + process_env: dict[str, str] + closed: bool = False + + async def close(self) -> None: + if self.closed: + return + self.closed = True + try: + await _run_agent_browser(["close"], self.process_env) + except Exception: + pass + finally: + await _terminate_profile(self.profile_dir) + + +async def start_agent_browser_runtime( + session: str, work_dir: Path, base_env: dict[str, str] +) -> AgentBrowserRuntime: + profile_dir = work_dir / "cloak-profile" + profile_dir.mkdir() + process_env = None + try: + port = await _launch_cloak(profile_dir, base_env) + overrides = { + "AGENT_BROWSER_CDP": f"http://127.0.0.1:{port}", + "AGENT_BROWSER_SESSION": session, + "AGENT_BROWSER_NAMESPACE": session, + } + process_env = {**base_env, **overrides} + await _run_agent_browser(["open"], process_env) + except BaseException: + if process_env is not None: + try: + await _run_agent_browser(["close"], process_env) + except Exception: + pass + await _terminate_profile(profile_dir) + raise + return AgentBrowserRuntime( + env=overrides, + profile_dir=profile_dir, + process_env=process_env, + ) diff --git a/benchmarks/scripts/axi_runtime.py b/benchmarks/scripts/axi_runtime.py new file mode 100644 index 00000000..08b1d1ee --- /dev/null +++ b/benchmarks/scripts/axi_runtime.py @@ -0,0 +1,239 @@ +#!/usr/bin/env python3 +import asyncio +import json +import os +import shutil +import signal +import subprocess +import sys +import time +from dataclasses import dataclass +from pathlib import Path + + +AXI_COMMAND = ("npx", "-y", "chrome-devtools-axi") +STARTUP_TIMEOUT_SECONDS = 60 + + +def find_cloak_package() -> Path: + override = os.environ.get("BROWSER_BENCH_CLOAK_PACKAGE") + if override: + candidates = [Path(override).expanduser()] + else: + npm = shutil.which("npm") + if not npm: + raise RuntimeError("npm is required to locate CloakBrowser") + result = subprocess.run( + [npm, "root", "-g"], + text=True, + capture_output=True, + timeout=15, + ) + if result.returncode: + raise RuntimeError(f"could not locate global Node modules: {result.stderr.strip()}") + root = Path(result.stdout.strip()) + candidates = [ + root / "cloakbrowser", + root / "@agentrhq" / "webcmd" / "node_modules" / "cloakbrowser", + ] + for candidate in candidates: + package_json = candidate / "package.json" + if not package_json.is_file(): + continue + try: + package = json.loads(package_json.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + continue + if package.get("name") == "cloakbrowser": + return candidate.resolve() + raise RuntimeError( + "CloakBrowser was not found. Install it globally, keep Webcmd installed, " + "or set BROWSER_BENCH_CLOAK_PACKAGE to its package directory." + ) + + +def cloakbrowser_version() -> str: + package = json.loads((find_cloak_package() / "package.json").read_text(encoding="utf-8")) + return str(package["version"]) + + +async def _launch_options(profile_dir: Path, env: dict[str, str]) -> dict: + entry = find_cloak_package() / "dist" / "index.js" + script = ( + "import {pathToFileURL} from 'node:url';" + "const mod=await import(pathToFileURL(process.argv[1]).href);" + "const options=await mod.buildLaunchOptions({headless:false,userDataDir:process.argv[2]});" + "process.stdout.write(JSON.stringify(options));" + ) + process = await asyncio.create_subprocess_exec( + "node", + "--input-type=module", + "-e", + script, + str(entry), + str(profile_dir), + env=env, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + start_new_session=True, + ) + try: + stdout, stderr = await asyncio.wait_for(process.communicate(), timeout=STARTUP_TIMEOUT_SECONDS) + except asyncio.TimeoutError: + process.kill() + await process.wait() + raise RuntimeError("timed out resolving CloakBrowser launch options") + if process.returncode: + raise RuntimeError(f"CloakBrowser launch configuration failed: {stderr.decode(errors='replace').strip()}") + try: + return json.loads(stdout) + except json.JSONDecodeError as error: + raise RuntimeError("CloakBrowser returned invalid launch configuration") from error + + +async def _wait_for_devtools_port(profile_dir: Path) -> int: + port_file = profile_dir / "DevToolsActivePort" + deadline = time.monotonic() + STARTUP_TIMEOUT_SECONDS + while time.monotonic() < deadline: + try: + port = int(port_file.read_text(encoding="utf-8").splitlines()[0]) + if port > 0: + return port + except (FileNotFoundError, IndexError, ValueError): + pass + await asyncio.sleep(0.05) + raise RuntimeError("timed out waiting for CloakBrowser's CDP endpoint") + + +async def _launch_cloak(profile_dir: Path, env: dict[str, str]) -> int: + options = await _launch_options(profile_dir, env) + executable = Path(str(options.get("executablePath") or "")) + if not executable.is_file(): + raise RuntimeError(f"CloakBrowser executable is missing: {executable}") + arguments = [ + *map(str, options.get("args") or []), + "--password-store=basic", + "--use-mock-keychain", + f"--user-data-dir={profile_dir}", + "--remote-debugging-address=127.0.0.1", + "--remote-debugging-port=0", + "about:blank", + ] + if sys.platform == "darwin": + marker = "/Contents/MacOS/" + executable_text = str(executable) + if marker not in executable_text: + raise RuntimeError("CloakBrowser executable is not inside a macOS app bundle") + app_path = executable_text.split(marker, 1)[0] + command = ["/usr/bin/open", "-g", "-n", app_path, "--args", *arguments] + else: + command = [str(executable), *arguments] + process = await asyncio.create_subprocess_exec( + *command, + env=env, + stdout=asyncio.subprocess.DEVNULL, + stderr=asyncio.subprocess.PIPE, + start_new_session=True, + ) + _, stderr = await process.communicate() + if process.returncode: + raise RuntimeError(f"CloakBrowser failed to launch: {stderr.decode(errors='replace').strip()}") + return await _wait_for_devtools_port(profile_dir) + + +async def _run_axi(arguments: list[str], env: dict[str, str]) -> None: + process = await asyncio.create_subprocess_exec( + *AXI_COMMAND, + *arguments, + env=env, + stdout=asyncio.subprocess.DEVNULL, + stderr=asyncio.subprocess.PIPE, + start_new_session=True, + ) + try: + _, stderr = await asyncio.wait_for(process.communicate(), timeout=STARTUP_TIMEOUT_SECONDS) + except asyncio.TimeoutError: + process.kill() + await process.wait() + raise RuntimeError(f"AXI {' '.join(arguments)} timed out") + if process.returncode: + raise RuntimeError(f"AXI {' '.join(arguments)} failed: {stderr.decode(errors='replace').strip()}") + + +async def _profile_pids(profile_dir: Path) -> list[int]: + process = await asyncio.create_subprocess_exec( + "/bin/ps", + "-axo", + "pid=,command=", + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.DEVNULL, + ) + stdout, _ = await process.communicate() + needle = f"--user-data-dir={profile_dir}" + pids = [] + for line in stdout.decode(errors="replace").splitlines(): + if needle not in line: + continue + try: + pid = int(line.strip().split(maxsplit=1)[0]) + except (IndexError, ValueError): + continue + if pid != os.getpid(): + pids.append(pid) + return pids + + +async def _terminate_profile(profile_dir: Path) -> None: + pids = await _profile_pids(profile_dir) + for pid in pids: + try: + os.kill(pid, signal.SIGTERM) + except ProcessLookupError: + pass + deadline = time.monotonic() + 5 + remaining = pids + while remaining and time.monotonic() < deadline: + await asyncio.sleep(0.05) + live = set(await _profile_pids(profile_dir)) + remaining = [pid for pid in remaining if pid in live] + for pid in remaining: + try: + os.kill(pid, signal.SIGKILL) + except ProcessLookupError: + pass + + +@dataclass +class AxiRuntime: + env: dict[str, str] + profile_dir: Path + process_env: dict[str, str] + closed: bool = False + + async def close(self) -> None: + if self.closed: + return + self.closed = True + try: + await _run_axi(["stop"], self.process_env) + except Exception: + pass + finally: + await _terminate_profile(self.profile_dir) + + +async def start_axi_runtime(session: str, work_dir: Path, base_env: dict[str, str]) -> AxiRuntime: + profile_dir = work_dir / "cloak-profile" + profile_dir.mkdir() + try: + port = await _launch_cloak(profile_dir, base_env) + overrides = { + "CHROME_DEVTOOLS_AXI_BROWSER_URL": f"http://127.0.0.1:{port}", + "CHROME_DEVTOOLS_AXI_SESSION": session, + } + process_env = {**base_env, **overrides} + await _run_axi(["start"], process_env) + except BaseException: + await _terminate_profile(profile_dir) + raise + return AxiRuntime(env=overrides, profile_dir=profile_dir, process_env=process_env) diff --git a/benchmarks/scripts/dev_browser_runtime.py b/benchmarks/scripts/dev_browser_runtime.py new file mode 100644 index 00000000..b3d157d1 --- /dev/null +++ b/benchmarks/scripts/dev_browser_runtime.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +import asyncio +import json +import shlex +import shutil +from dataclasses import dataclass +from pathlib import Path + +from axi_runtime import STARTUP_TIMEOUT_SECONDS, _launch_cloak, _terminate_profile + + +DEV_BROWSER_COMMAND = ("dev-browser",) +PREWARM_SCRIPT = 'console.log(JSON.stringify(await browser.listPages()));' +CLOSE_PAGES_SCRIPT = """const pages = await browser.listPages(); +for (const page of pages) { + if (page.name) await browser.closePage(page.name); +}""" + + +def _find_dev_browser(env: dict[str, str]) -> Path: + executable = shutil.which(DEV_BROWSER_COMMAND[0], path=env.get("PATH")) + if not executable: + raise RuntimeError( + "dev-browser was not found. Install it with: npm install -g dev-browser" + ) + return Path(executable).resolve() + + +def dev_browser_version(env: dict[str, str]) -> str: + executable = _find_dev_browser(env) + for directory in executable.parents: + package_json = directory / "package.json" + if not package_json.is_file(): + continue + try: + package = json.loads(package_json.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + continue + if package.get("name") == "dev-browser" and package.get("version"): + return str(package["version"]) + raise RuntimeError( + f"could not determine dev-browser version from executable: {executable}" + ) + + +def _dev_browser_tmp_dir() -> Path: + return Path.home() / ".dev-browser" / "tmp" + + +async def _run_dev_browser( + executable: Path, + arguments: list[str], + script: str, + env: dict[str, str], +) -> None: + process = await asyncio.create_subprocess_exec( + str(executable), + *arguments, + env=env, + stdin=asyncio.subprocess.PIPE, + stdout=asyncio.subprocess.DEVNULL, + stderr=asyncio.subprocess.PIPE, + start_new_session=True, + ) + try: + _, stderr = await asyncio.wait_for( + process.communicate(script.encode()), timeout=STARTUP_TIMEOUT_SECONDS + ) + except asyncio.TimeoutError: + process.kill() + await process.wait() + raise RuntimeError("dev-browser timed out") + if process.returncode: + message = stderr.decode(errors="replace").strip() + raise RuntimeError(f"dev-browser failed: {message}") + + +def _write_shim( + path: Path, executable: Path, session: str, connect_url: str +) -> None: + command = " ".join( + shlex.quote(value) + for value in ( + str(executable), + "--browser", + session, + "--connect", + connect_url, + ) + ) + path.write_text(f'#!/bin/sh\nexec {command} "$@"\n', encoding="utf-8") + path.chmod(0o700) + + +def _collect_screenshots(session: str, shots_dir: Path) -> None: + source_dir = _dev_browser_tmp_dir() + if not source_dir.is_dir(): + return + prefix = f"{session}-" + for source in sorted(source_dir.glob(f"{session}-step_*.png")): + destination = shots_dir / source.name.removeprefix(prefix) + shutil.copy2(source, destination) + source.unlink() + + +@dataclass +class DevBrowserRuntime: + env: dict[str, str] + profile_dir: Path + executable: Path + arguments: list[str] + process_env: dict[str, str] + session: str + shots_dir: Path + closed: bool = False + + async def close(self) -> None: + if self.closed: + return + self.closed = True + try: + await _run_dev_browser( + self.executable, + self.arguments, + CLOSE_PAGES_SCRIPT, + self.process_env, + ) + except Exception: + pass + finally: + try: + _collect_screenshots(self.session, self.shots_dir) + finally: + await _terminate_profile(self.profile_dir) + + +async def start_dev_browser_runtime( + session: str, work_dir: Path, base_env: dict[str, str] +) -> DevBrowserRuntime: + profile_dir = work_dir / "cloak-profile" + profile_dir.mkdir() + shots_dir = work_dir / "shots" + shots_dir.mkdir(exist_ok=True) + executable = _find_dev_browser(base_env) + try: + port = await _launch_cloak(profile_dir, base_env) + connect_url = f"http://127.0.0.1:{port}" + arguments = [ + "--browser", + session, + "--connect", + connect_url, + ] + await _run_dev_browser( + executable, + arguments, + PREWARM_SCRIPT, + base_env, + ) + shim_dir = work_dir / "dev-browser-bin" + shim_dir.mkdir() + _write_shim(shim_dir / "dev-browser", executable, session, connect_url) + except BaseException: + await _terminate_profile(profile_dir) + raise + return DevBrowserRuntime( + env={"PATH": f"{shim_dir}:{base_env.get('PATH', '')}"}, + profile_dir=profile_dir, + executable=executable, + arguments=arguments, + process_env=base_env, + session=session, + shots_dir=shots_dir, + ) diff --git a/benchmarks/scripts/judge.py b/benchmarks/scripts/judge.py new file mode 100644 index 00000000..f3f0bea9 --- /dev/null +++ b/benchmarks/scripts/judge.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +import asyncio +import base64 +import hashlib +import json +import os +import tempfile +from pathlib import Path +from typing import Literal + +from google import genai +from google.genai import types +from openai import AsyncOpenAI +from pydantic import BaseModel, StrictBool + +from run_controller import ExecutionEvidence, _subprocess_env + + +JudgeProvider = Literal["google", "openai", "codex"] + +GENERAL_CONTRACT_PATH = Path(__file__).resolve().parent.parent / "references" / "judge-contract.md" +STEALTH_CONTRACT_PATH = Path(__file__).resolve().parent.parent / "references" / "stealth-judge-contract.md" +STEALTH_BENCHMARKS = frozenset({"Stealth_Bench_V1", "Stealth_Webcmd"}) +GROUND_TRUTH_RULES = """**GROUND TRUTH VALIDATION (HIGHEST PRIORITY):** +The section contains verified correct information for this task. This can be: +- **Evaluation criteria**: Specific conditions that must be met (e.g., "The success popup should show up", "Must extract exactly 5 items") +- **Factual answers**: The correct answer to a question or information retrieval task (e.g. "10/11/24", "Paris") +- **Expected outcomes**: What should happen after task completion (e.g., "Google Doc must be created", "File should be downloaded") + +The ground truth takes ABSOLUTE precedence over all other evaluation criteria. If the ground truth is not satisfied by the agent's execution and final response, the verdict MUST be false. + +""" + + +class JudgementResult(BaseModel): + reasoning: str | None = None + verdict: StrictBool + failure_reason: str | None = None + impossible_task: StrictBool = False + reached_captcha: StrictBool = False + + +def _truncate(text: str, limit: int = 80000) -> str: + return text if len(text) <= limit else text[: limit - 15] + "...[truncated]" + + +def _last_unique(paths: list[Path], limit: int = 10) -> list[Path]: + selected = [] + seen = set() + for path in reversed(paths): + digest = hashlib.sha256(path.read_bytes()).digest() + if digest not in seen: + seen.add(digest) + selected.append(path) + if len(selected) == limit: + break + return list(reversed(selected)) + + +def build_judge_input(task: str, ground_truth: str | None, evidence: ExecutionEvidence, benchmark: str = "BU_Bench_V1") -> tuple[str, str, list[Path]]: + contract_path = STEALTH_CONTRACT_PATH if benchmark in STEALTH_BENCHMARKS else GENERAL_CONTRACT_PATH + contract = contract_path.read_text(encoding="utf-8") + system = (GROUND_TRUTH_RULES if ground_truth else "") + contract + truth = f"\n\n{ground_truth}\n" if ground_truth else "" + images = _last_unique(evidence.screenshot_paths) + user = f""" +{_truncate(task)} +{truth} + +{_truncate(chr(10).join(evidence.steps))} + + +{_truncate(evidence.final_answer)} + +{len(images)} screenshots from execution are attached. +Evaluate the execution and return the required structured judgement.""" + return system, user, images + + +async def _generate_google(model: str, system: str, user: str, images: list[Path]) -> JudgementResult: + api_key = os.environ.get("GOOGLE_API_KEY") + if not api_key: + raise RuntimeError("GOOGLE_API_KEY is required") + parts = [types.Part.from_text(text=user)] + parts.extend(types.Part.from_bytes(data=path.read_bytes(), mime_type="image/png") for path in images) + async with genai.Client(api_key=api_key).aio as client: + response = await client.models.generate_content( + model=model, + contents=types.Content(role="user", parts=parts), + config=types.GenerateContentConfig(system_instruction=system, response_mime_type="application/json", response_schema=JudgementResult), + ) + if isinstance(response.parsed, JudgementResult): + return response.parsed + if response.parsed is not None: + return JudgementResult.model_validate(response.parsed) + return JudgementResult.model_validate_json(response.text or "") + + +async def _generate_openai(model: str, system: str, user: str, images: list[Path]) -> JudgementResult: + api_key = os.environ.get("OPENAI_API_KEY") + if not api_key: + raise RuntimeError("OPENAI_API_KEY is required") + content: list[dict[str, object]] = [{"type": "text", "text": user}] + for path in images: + encoded = base64.standard_b64encode(path.read_bytes()).decode() + content.append({"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded}"}}) + async with AsyncOpenAI(api_key=api_key) as client: + response = await client.beta.chat.completions.parse( + model=model, + messages=[ + {"role": "system", "content": system}, + {"role": "user", "content": content}, + ], + response_format=JudgementResult, + ) + parsed = response.choices[0].message.parsed + if parsed is None: + raise ValueError("invalid structured output") + return parsed + + +async def _generate_codex(model: str, system: str, user: str, images: list[Path]) -> JudgementResult: + with tempfile.TemporaryDirectory(prefix="bbe-judge-") as temporary: + work_dir = Path(temporary) + schema = JudgementResult.model_json_schema() + schema["required"] = list(schema["properties"]) + schema["additionalProperties"] = False + schema_path = work_dir / "schema.json" + output_path = work_dir / "judgement.json" + schema_path.write_text(json.dumps(schema), encoding="utf-8") + command = [ + "codex", "exec", "--ephemeral", "--ignore-user-config", "--ignore-rules", + "--skip-git-repo-check", "--sandbox", "read-only", "--model", model, + "--output-schema", str(schema_path), "--output-last-message", str(output_path), + ] + if images: + command.extend(["--image", *(str(path) for path in images)]) + command.append("-") + env = _subprocess_env(controller="codex") + env.pop("OPENAI_API_KEY", None) + process = await asyncio.create_subprocess_exec( + *command, + cwd=work_dir, + env=env, + stdin=asyncio.subprocess.PIPE, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + ) + prompt = f"\n{system}\n\n\n{user}" + _, stderr = await process.communicate(prompt.encode()) + if process.returncode: + raise RuntimeError(f"Codex judge failed: {stderr.decode(errors='replace').strip()}") + return JudgementResult.model_validate_json(output_path.read_text(encoding="utf-8")) + + +async def _generate(provider: JudgeProvider, model: str, system: str, user: str, images: list[Path]) -> JudgementResult: + if provider == "openai": + return await _generate_openai(model, system, user, images) + if provider == "codex": + return await _generate_codex(model, system, user, images) + return await _generate_google(model, system, user, images) + + +async def judge_execution( + task: str, + ground_truth: str | None, + evidence: ExecutionEvidence, + model: str = "gemini-2.5-flash", + provider: JudgeProvider = "google", + benchmark: str = "BU_Bench_V1", +) -> JudgementResult: + system, user, images = build_judge_input(task, ground_truth, evidence, benchmark) + last_error: Exception | None = None + for attempt in range(3): + try: + return await _generate(provider, model, system, user, images) + except Exception as error: + last_error = error + if attempt < 2: + await asyncio.sleep(2**attempt) + raise RuntimeError(f"judge failed after 3 attempts: {last_error}") from last_error diff --git a/benchmarks/scripts/libretto_mcp.mjs b/benchmarks/scripts/libretto_mcp.mjs new file mode 100644 index 00000000..b0e6269b --- /dev/null +++ b/benchmarks/scripts/libretto_mcp.mjs @@ -0,0 +1,81 @@ +#!/usr/bin/env node +import { createRequire } from "node:module"; +import { readFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { pathToFileURL } from "node:url"; + +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { registerMcpBrowserTools } from "libretto-browser-tools/mcp"; + + +function packageVersion(name) { + const require = createRequire(import.meta.url); + let directory = dirname(require.resolve(name)); + while (directory !== dirname(directory)) { + try { + return JSON.parse(readFileSync(join(directory, "package.json"), "utf8")).version; + } catch (error) { + if (error.code !== "ENOENT") throw error; + directory = dirname(directory); + } + } + throw new Error(`Could not resolve ${name} package version`); +} + + +export function createFixedCdpProvider(cdpEndpoint) { + const endpoint = new URL(cdpEndpoint); + if (!["127.0.0.1", "localhost", "[::1]"].includes(endpoint.hostname)) { + throw new Error("LIBRETTO_CDP_URL must use a loopback host"); + } + return { + name: "cloakbrowser", + async createSession() { + return { sessionId: "cloak", cdpEndpoint }; + }, + async closeSession() { + return {}; + }, + }; +} + + +async function main() { + if (process.argv.includes("--version")) { + console.log(packageVersion("libretto-browser-tools")); + return; + } + const cdpEndpoint = process.env.LIBRETTO_CDP_URL; + if (!cdpEndpoint) throw new Error("LIBRETTO_CDP_URL is required"); + + const server = new McpServer({ + name: "libretto-browser-tools", + version: packageVersion("libretto-browser-tools"), + }); + const toolkit = registerMcpBrowserTools( + server, + createFixedCdpProvider(cdpEndpoint), + ); + const transport = new StdioServerTransport(); + let disposed = false; + const dispose = async () => { + if (disposed) return; + disposed = true; + const error = await toolkit.dispose(); + if (error) console.error(error); + }; + process.once("beforeExit", dispose); + process.once("SIGINT", () => void dispose().finally(() => process.exit(130))); + process.once("SIGTERM", () => void dispose().finally(() => process.exit(143))); + await server.connect(transport); +} + + +const entrypoint = process.argv[1] ? pathToFileURL(process.argv[1]).href : ""; +if (import.meta.url === entrypoint) { + main().catch((error) => { + console.error(error); + process.exit(1); + }); +} diff --git a/benchmarks/scripts/libretto_runtime.py b/benchmarks/scripts/libretto_runtime.py new file mode 100644 index 00000000..88a3c92c --- /dev/null +++ b/benchmarks/scripts/libretto_runtime.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +from dataclasses import dataclass +from pathlib import Path + +from axi_runtime import _launch_cloak, _terminate_profile + + +@dataclass +class LibrettoRuntime: + env: dict[str, str] + profile_dir: Path + closed: bool = False + + async def close(self) -> None: + if self.closed: + return + self.closed = True + await _terminate_profile(self.profile_dir) + + +async def start_libretto_runtime( + session: str, work_dir: Path, base_env: dict[str, str] +) -> LibrettoRuntime: + del session + profile_dir = work_dir / "cloak-profile" + profile_dir.mkdir() + try: + port = await _launch_cloak(profile_dir, base_env) + except BaseException: + await _terminate_profile(profile_dir) + raise + return LibrettoRuntime( + env={"LIBRETTO_CDP_URL": f"http://127.0.0.1:{port}"}, + profile_dir=profile_dir, + ) diff --git a/benchmarks/scripts/pi_controller.mjs b/benchmarks/scripts/pi_controller.mjs new file mode 100644 index 00000000..7fecf853 --- /dev/null +++ b/benchmarks/scripts/pi_controller.mjs @@ -0,0 +1,191 @@ +import { + AuthStorage, + createAgentSession, + DefaultResourceLoader, + ModelRegistry, + SessionManager, + SettingsManager, +} from "@earendil-works/pi-coding-agent"; +import { existsSync, readFileSync } from "node:fs"; +import { join } from "node:path"; + +import { createPiToolConfiguration } from "./pi_toolkit.mjs"; + +const SDK_PACKAGE = JSON.parse( + readFileSync( + new URL("../package.json", import.meta.resolve("@earendil-works/pi-coding-agent")), + "utf8", + ), +); +const THINKING_LEVELS = new Set([ + "off", + "minimal", + "low", + "medium", + "high", + "xhigh", + "max", +]); + +function emit(event) { + console.log( + JSON.stringify(event, (key, value) => { + if (typeof value === "bigint") return value.toString(); + if (key === "data" && typeof value === "string" && value.length > 10_000) { + return `[omitted ${value.length} characters]`; + } + return value; + }), + ); +} + +function selectedModel(args) { + const index = args.indexOf("--model"); + const selector = index >= 0 ? args[index + 1] : "openai/gpt-4o"; + if (!selector) throw new Error("--model requires a value"); + const separator = selector.indexOf("/"); + return separator < 0 + ? { provider: "openai", modelId: selector, selector: `openai/${selector}` } + : { + provider: selector.slice(0, separator), + modelId: selector.slice(separator + 1), + selector, + }; +} + +function selectedThinkingLevel(args) { + const index = args.indexOf("--thinking"); + if (index < 0) return "medium"; + const level = args[index + 1]; + if (!level) throw new Error("--thinking requires a value"); + if (!THINKING_LEVELS.has(level)) { + throw new Error(`Unsupported Pi thinking level: ${level}`); + } + return level; +} + +function selectedTool(args) { + const index = args.indexOf("--tool"); + if (index < 0) return "webcmd"; + const tool = args[index + 1]; + if (!tool || tool.startsWith("--")) throw new Error("--tool requires a value"); + if (!new Set(["webcmd", "dev-browser", "libretto"]).has(tool)) { + throw new Error(`Unsupported Pi benchmark tool: ${tool}`); + } + return tool; +} + +function selectedSkillPaths(args, required) { + const paths = []; + for (let index = 0; index < args.length; index += 1) { + if (args[index] !== "--skill-path") continue; + const path = args[index + 1]; + if (!path || path.startsWith("--")) { + throw new Error("--skill-path requires a value"); + } + if (!existsSync(join(path, "SKILL.md"))) { + throw new Error( + `Pi skill path does not exist: ${path}. Run: webcmd skills add --provider codex --scope user`, + ); + } + paths.push(path); + index += 1; + } + if (required && paths.length === 0) { + throw new Error("--skill-path requires a value"); + } + return paths; +} + +async function main() { + const args = process.argv.slice(2); + if (args.includes("--version")) { + console.log(`${SDK_PACKAGE.name} ${SDK_PACKAGE.version}`); + return; + } + + const { provider, modelId, selector } = selectedModel(args); + const thinkingLevel = selectedThinkingLevel(args); + const tool = selectedTool(args); + const checkingAuth = args.includes("--check-auth"); + const skillPaths = checkingAuth + ? [] + : selectedSkillPaths(args, tool !== "libretto"); + const authStorage = AuthStorage.create(); + const modelRegistry = ModelRegistry.inMemory(authStorage); + const model = modelRegistry.find(provider, modelId); + if (!model) throw new Error(`Model ${selector} not found`); + if (!modelRegistry.hasConfiguredAuth(model)) { + throw new Error(`No credentials configured for ${provider}`); + } + if (checkingAuth) { + console.log("ok"); + return; + } + + const cwd = process.cwd(); + const agentDir = join(cwd, ".pi"); + const settingsManager = SettingsManager.inMemory({ + compaction: { enabled: false }, + }); + const resourceLoader = new DefaultResourceLoader({ + cwd, + agentDir, + settingsManager, + noExtensions: true, + noSkills: true, + additionalSkillPaths: skillPaths, + noPromptTemplates: true, + noThemes: true, + noContextFiles: true, + agentsFilesOverride: () => ({ agentsFiles: [] }), + systemPrompt: + "You are an AI agent in a controlled browser benchmark. Follow the user prompt exactly and report only evidence you observed.", + }); + await resourceLoader.reload(); + + const toolConfiguration = await createPiToolConfiguration(tool); + let session; + let unsubscribe = () => {}; + try { + ({ session } = await createAgentSession({ + cwd, + agentDir, + model, + thinkingLevel, + authStorage, + modelRegistry, + resourceLoader, + settingsManager, + sessionManager: SessionManager.inMemory(cwd), + tools: toolConfiguration.tools, + noTools: toolConfiguration.noTools, + customTools: toolConfiguration.customTools, + })); + unsubscribe = session.subscribe((event) => { + if ( + event.type === "message_end" || + event.type === "tool_execution_start" || + event.type === "tool_execution_end" + ) { + emit(event); + } + }); + const startedAt = Date.now(); + await session.prompt(readFileSync(0, "utf8")); + emit({ + type: "result", + result: session.getLastAssistantText() || "", + duration_ms: Date.now() - startedAt, + }); + } finally { + unsubscribe(); + session?.dispose(); + await toolConfiguration.dispose(); + } +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/benchmarks/scripts/pi_toolkit.mjs b/benchmarks/scripts/pi_toolkit.mjs new file mode 100644 index 00000000..17a1665e --- /dev/null +++ b/benchmarks/scripts/pi_toolkit.mjs @@ -0,0 +1,32 @@ +import { createPiBrowserTools } from "libretto-browser-tools/pi"; + +import { createFixedCdpProvider } from "./libretto_mcp.mjs"; + + +const LIBRETTO_TOOLS = new Set([ + "browser_open", + "browser_exec", + "browser_snapshot", + "browser_status", + "browser_close", +]); + + +export async function createPiToolConfiguration(tool, env = process.env) { + if (tool !== "libretto") { + return { + tools: ["bash", "read"], + customTools: [], + async dispose() {}, + }; + } + + const cdpEndpoint = env.LIBRETTO_CDP_URL; + if (!cdpEndpoint) throw new Error("LIBRETTO_CDP_URL is required"); + const toolkit = createPiBrowserTools(createFixedCdpProvider(cdpEndpoint)); + return { + noTools: "builtin", + customTools: toolkit.tools.filter(({ name }) => LIBRETTO_TOOLS.has(name)), + dispose: () => toolkit.dispose(), + }; +} diff --git a/benchmarks/scripts/run_controller.py b/benchmarks/scripts/run_controller.py new file mode 100644 index 00000000..93200bcc --- /dev/null +++ b/benchmarks/scripts/run_controller.py @@ -0,0 +1,1518 @@ +#!/usr/bin/env python3 +import asyncio +import base64 +import hashlib +import json +import math +import os +import re +import shlex +import shutil +import signal +import subprocess +import threading +import time +from dataclasses import dataclass +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path +from typing import Literal +from urllib.parse import unquote + +from agent_browser_runtime import start_agent_browser_runtime +from axi_runtime import start_axi_runtime +from dev_browser_runtime import start_dev_browser_runtime +from libretto_runtime import start_libretto_runtime + + +Controller = Literal["codex", "claude", "pi"] +Tool = Literal["webcmd", "chrome-devtools-axi", "agent-browser", "dev-browser", "libretto"] +Termination = Literal["completed", "timeout", "controller_error", "missing_final_answer", "tool_policy_violation"] +FINAL_ANSWER_RE = re.compile(r"^FINAL ANSWER:[ \t]*(\S[^\r\n]*)$", re.MULTILINE) +ESSENTIAL_ENV_KEYS = { + "HOME", "LANG", "LANGUAGE", "LC_ALL", "LC_CTYPE", "LOGNAME", "NODE_EXTRA_CA_CERTS", + "PATH", "SHELL", "SSL_CERT_DIR", "SSL_CERT_FILE", "TEMP", "TERM", "TMP", "TMPDIR", "USER", + "XDG_CACHE_HOME", "XDG_CONFIG_HOME", "XDG_DATA_HOME", "XDG_STATE_HOME", +} +CONTROLLER_ENV_PREFIXES = { + "codex": ("CODEX_", "OPENAI_"), + "claude": ("ANTHROPIC_", "CLAUDE_"), + "pi": ("OPENAI_", "ANTHROPIC_", "PI_"), +} +CONTROLLER_ENV_KEYS = { + "codex": set(), + "claude": { + "AWS_ACCESS_KEY_ID", "AWS_DEFAULT_REGION", "AWS_PROFILE", "AWS_REGION", "AWS_SECRET_ACCESS_KEY", + "AWS_SESSION_TOKEN", "CLOUD_ML_REGION", "GOOGLE_APPLICATION_CREDENTIALS", + }, + "pi": set(), +} +TOOL_ENV_PREFIXES = { + "webcmd": ("WEBCMD_",), + "chrome-devtools-axi": ("CHROME_DEVTOOLS_AXI_", "CHROME_DEVTOOLS_MCP_"), + "agent-browser": (), + "dev-browser": (), + "libretto": (), +} +EVALUATION_ENV_KEYS = { + "DATASET_DECRYPTION_KEY", "DATASET_PATH", "EVIDENCE_PATH", "EXPECTED_ANSWER", "GOOGLE_API_KEY", + "GROUND_TRUTH", "JUDGE_MODEL", "JUDGE_PROMPT", "PRIOR_VERDICT", "RESULTS_DIR", +} +EVALUATION_ENV_MARKERS = ( + "ANSWER", "ATTEMPT", "DATASET", "DECRYPT", "EVIDENCE", "GROUND_TRUTH", "GROUNDTRUTH", + "JUDGE", "PROMPT", "RESULT", "VERDICT", +) +CLEANUP_TIMEOUT_SECONDS = 5 +WEBCMD_BENCHMARK_PROFILE = "benchmark" +WEBCMD_SESSION_RE = re.compile( + r"^session_[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$", + re.IGNORECASE, +) +PI_CONTROLLER = Path(__file__).resolve().with_name("pi_controller.mjs") +LIBRETTO_MCP = Path(__file__).resolve().with_name("libretto_mcp.mjs") +LIBRETTO_TOOLS = ( + "browser_open", + "browser_exec", + "browser_snapshot", + "browser_status", + "browser_close", +) +WEBCMD_BROWSER_SKILL = Path.home() / ".codex/skills/webcmd-browser" +WEBCMD_BROWSER_SKILL_FILE = WEBCMD_BROWSER_SKILL / "SKILL.md" +WEBCMD_BROWSER_SKILL_ROOT = WEBCMD_BROWSER_SKILL.resolve() +DEV_BROWSER_SKILL = Path.home() / ".codex/skills/dev-browser" +PI_SETUP_SKILL_FILES = { + "webcmd": frozenset({WEBCMD_BROWSER_SKILL_FILE.resolve()}), + "dev-browser": frozenset({(DEV_BROWSER_SKILL / "SKILL.md").resolve()}), +} +GPT_5_6_SOL_PRICES_PER_MILLION = { + "input": 5.0, + "cached_input": 0.5, + "cache_write_input": 6.25, + "output": 30.0, +} +GPT_5_6_SOL_MODELS = frozenset({"gpt-5.6", "gpt-5.6-sol"}) +LONG_CONTEXT_INPUT_THRESHOLD = 272_000 + + +class _CodexTurnCollector: + def __init__(self) -> None: + self._payloads: list[dict] = [] + self._lock = threading.Lock() + self._server: ThreadingHTTPServer | None = None + self._thread: threading.Thread | None = None + + def __enter__(self) -> "_CodexTurnCollector": + collector = self + + class Handler(BaseHTTPRequestHandler): + def do_POST(self) -> None: + length = int(self.headers.get("Content-Length", "0")) + try: + payload = json.loads(self.rfile.read(length)) + except (json.JSONDecodeError, UnicodeDecodeError): + self.send_error(400) + return + if isinstance(payload, dict): + with collector._lock: + collector._payloads.append(payload) + body = b"{}" + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + + def log_message(self, format: str, *args: object) -> None: + pass + + self._server = ThreadingHTTPServer(("127.0.0.1", 0), Handler) + self._server.daemon_threads = True + self._thread = threading.Thread(target=self._server.serve_forever, daemon=True) + self._thread.start() + return self + + def __exit__(self, *args: object) -> None: + if self._server is not None: + self._server.shutdown() + self._server.server_close() + if self._thread is not None: + self._thread.join() + + @property + def endpoint(self) -> str: + if self._server is None: + raise RuntimeError("Codex turn collector is not running") + host, port = self._server.server_address + return f"http://{host}:{port}/v1/logs" + + @property + def agent_turns(self) -> int | None: + with self._lock: + payloads = list(self._payloads) + if not payloads: + return None + return sum( + 1 + for payload in payloads + for resource in payload.get("resourceLogs", []) + for scope in resource.get("scopeLogs", []) + for record in scope.get("logRecords", []) + if self._is_completed_model_response(record) + ) + + @staticmethod + def _is_completed_model_response(record: object) -> bool: + if not isinstance(record, dict): + return False + attributes = { + attribute.get("key"): attribute.get("value") + for attribute in record.get("attributes", []) + if isinstance(attribute, dict) + } + + def value(key: str) -> object: + wrapped = attributes.get(key) + if not isinstance(wrapped, dict): + return None + return next(iter(wrapped.values()), None) + + return ( + value("event.name") == "codex.sse_event" + and value("event.kind") == "response.completed" + and "input_token_count" in attributes + and "error.message" not in attributes + ) + + +@dataclass +class ExecutionEvidence: + final_answer: str + steps: list[str] + screenshot_paths: list[Path] + controller_exit_code: int + termination: Termination + metrics: "ControllerMetrics | None" = None + + +@dataclass(frozen=True) +class TokenUsage: + input: int + cache_read_input: int + cache_creation_input: int + non_cached_input: int + output: int + reasoning_output: int | None + total: int + estimated_api_cost_usd: float | None = None + + +@dataclass(frozen=True) +class ControllerMetrics: + duration_seconds: float + steps: int + tool_calls: int + tokens: TokenUsage | None + provider_turns: int | None + provider_duration_seconds: float | None + provider_api_duration_seconds: float | None + agent_turns: int | None = None + + +@dataclass +class ParsedEvents: + steps: list[str] + commands: list[str] + event_types: list[str] + final_text: str + steps_count: int + tool_calls: int + tokens: TokenUsage | None + provider_turns: int | None + provider_duration_seconds: float | None + provider_api_duration_seconds: float | None + agent_turns: int | None + mcp_calls: list[tuple[str, str]] + screenshot_images: list[bytes] + + +def _build_prompt(tool: Tool, session: str, shots_dir: Path, task: str) -> str: + first_shot = shots_dir / "step_001.png" + if tool == "chrome-devtools-axi": + tool_rules = """- Use only `npx -y chrome-devtools-axi` for browser interaction. +- Every shell command must begin with exactly `npx -y chrome-devtools-axi`; use no substitutions, redirections, pipes, or other executables. +- Do not use Web search, browser MCPs, Playwright, Puppeteer, curl, wget, raw HTTP, or any non-AXI automation tool. +- Use the `$chrome-devtools-axi` skill for AXI usage guidance. +- The AXI session and its dedicated CloakBrowser connection are already configured in the environment; do not start another browser.""" + elif tool == "agent-browser": + tool_rules = """- Use only `agent-browser` for browser interaction. +- Use one `agent-browser` command per shell invocation; use no substitutions, redirections, pipes, or other executables. +- Do not use `batch`, `close`, connection/profile flags, or multiple agent-browser commands in one shell invocation. +- Never pass a URL to `agent-browser read`; use `agent-browser open URL` and then `agent-browser read` so all page traffic stays inside CloakBrowser. +- Do not use Web search, browser MCPs, Playwright, Puppeteer, curl, wget, raw HTTP, or any non-agent-browser automation tool. +- Use the `$agent-browser` skill for agent-browser usage guidance. +- The agent-browser session and its dedicated CloakBrowser connection are already configured in the environment; do not start, connect, configure, or close another browser.""" + elif tool == "dev-browser": + tool_rules = f"""- Use only `dev-browser` for browser interaction. +- Invoke `dev-browser` with one quoted heredoc per shell command. The heredoc body must contain only the sandboxed JavaScript described by the `$dev-browser` skill. +- You may add only `--timeout SECONDS`; do not use `--browser`, `--connect`, `--headless`, `run`, `stop`, or any other subcommand or connection option. +- Use no substitutions, pipes, extra redirections, or other executables. +- Do not use Web search, browser MCPs, external Playwright, Puppeteer, curl, wget, raw HTTP, or any non-dev-browser automation tool. +- Use the `$dev-browser` skill for dev-browser usage guidance. +- The dev-browser command is already pinned to this task's dedicated CloakBrowser connection; do not start, connect, configure, or close another browser. +- Save screenshots with `await saveScreenshot(await page.screenshot(), "{session}-step_001.png")`, then `{session}-step_002.png`, and so on.""" + elif tool == "libretto": + tool_rules = """- Use only the Libretto MCP tools `browser_open`, `browser_exec`, `browser_snapshot`, `browser_status`, and `browser_close` for browser interaction. +- Do not use shell commands, Web Search, other MCP servers or tools, Playwright outside `browser_exec`, Puppeteer, curl, wget, or raw HTTP. +- The Libretto provider is already pinned to this task's dedicated CloakBrowser; open it with `browser_open` and do not configure another browser. +- Reuse the session ID returned by `browser_open` and close it with `browser_close` when the task is complete.""" + else: + tool_rules = f"""- Use only `webcmd` raw-browser commands for task execution. Do not use Web Search, browser MCPs, external Playwright, Puppeteer, curl, wget, raw HTTP, adapters, fetch commands, plugins, or any non-Webcmd automation tool. +- Use the `$webcmd-browser` skill for browser guidance. Do not load any other Webcmd skill. This benchmark's raw-browser route is already selected. Skip adapter and plugin discovery, the top-level Webcmd router, `webcmd doctor`, and the skill's Session lifecycle steps. +- The harness already created the dedicated Profile and Session. Use `--profile {WEBCMD_BENCHMARK_PROFILE}` and `--session {session}` on every browser command. +- Do not create, close, or force-close Sessions, manage the daemon, or change Profiles. The harness owns Session cleanup after the controller exits. +- Use `browser run --stdin`, not `run --file`. Other than reading the Webcmd browser skill and its references, every shell command must execute only `webcmd`; do not use shell helpers, substitutions, pipes, or other executables.""" + if tool == "dev-browser": + screenshot_rules = f"""- Save screenshots after meaningful page transitions and at the final state with `saveScreenshot`. +- Name screenshots `{session}-step_001.png`, then `{session}-step_002.png`, `{session}-step_003.png`, and so on without overwriting. The harness collects them automatically.""" + elif tool == "libretto": + screenshot_rules = """- Call `browser_snapshot` with `screenshot: true` after meaningful page transitions and at the final state. +- The harness collects those native Libretto screenshot results automatically.""" + elif tool == "webcmd": + screenshot_rules = """- Save screenshots after meaningful page transitions and at the final state. +- In Webcmd run programs, screenshot paths must be relative logical filenames such as `shots/step_001.png`, then `shots/step_002.png`, without `..` or absolute paths.""" + else: + screenshot_rules = f"""- Save screenshots after meaningful page transitions and at the final state. +- Name screenshots `{first_shot}`, then step_002.png, step_003.png, and so on without overwriting.""" + return f"""You are executing a browser benchmark task. + +Hard rules: +{tool_rules} +- Quote URLs that contain `?`, `&`, `#`, `(`, `)`, or other shell punctuation. +- Do not change filters, sort modes, chart variants, regions, or page views unless the task explicitly asks. +{screenshot_rules} +- If a CAPTCHA, human-verification control, or anti-bot challenge is interactable, make a reasonable in-browser attempt to complete it and continue. If a login or authentication page blocks further progress, report that as the outcome. Otherwise, only report failure when anti-bot protection remains blocking. +- Work autonomously and do not ask clarifying questions. +- End with exactly one line `FINAL ANSWER: answer` and nothing after it. Use `FINAL ANSWER: done` for action-only tasks. + +Task: +{task} +""" + + +def _controller_command( + controller: Controller, + model: str, + prompt: str, + reasoning_effort: str | None = None, + tool: Tool | None = None, + runtime_env: dict[str, str] | None = None, + otel_endpoint: str | None = None, +) -> tuple[list[str], bytes | None]: + if controller == "codex": + command = ["codex", "exec", "--json", "--model", model] + if reasoning_effort is not None: + command.extend(["-c", f'model_reasoning_effort="{reasoning_effort}"']) + if otel_endpoint is not None: + command.extend( + [ + "-c", + "otel.exporter={otlp-http={" + f"endpoint={json.dumps(otel_endpoint)},protocol=\"json\"}}}}", + ] + ) + if tool == "libretto": + cdp_url = (runtime_env or {}).get("LIBRETTO_CDP_URL") + if not cdp_url: + raise ValueError( + "Libretto requires a task-private LIBRETTO_CDP_URL" + ) + enabled_tools = ",".join(json.dumps(name) for name in LIBRETTO_TOOLS) + command.extend( + [ + "-c", + 'mcp_servers.libretto.command="node"', + "-c", + f"mcp_servers.libretto.args=[{json.dumps(str(LIBRETTO_MCP))}]", + "-c", + "mcp_servers.libretto.required=true", + "-c", + f"mcp_servers.libretto.enabled_tools=[{enabled_tools}]", + "-c", + "mcp_servers.libretto.env=" + f'{{LIBRETTO_CDP_URL={json.dumps(cdp_url)}}}', + ] + ) + command.extend(["--sandbox", "danger-full-access", "--skip-git-repo-check", "--ignore-user-config", "-"]) + return command, prompt.encode() + if controller == "claude": + return (["claude", "-p", prompt, "--model", model, "--dangerously-skip-permissions", "--output-format", "stream-json", "--verbose", "--no-session-persistence", "--bare"], None) + if controller == "pi": + command = [ + "node", + str(PI_CONTROLLER), + "--model", + model, + ] + pi_tool = tool or "webcmd" + if pi_tool == "webcmd": + command.extend(["--skill-path", str(WEBCMD_BROWSER_SKILL)]) + elif pi_tool == "dev-browser": + command.extend( + ["--tool", pi_tool, "--skill-path", str(DEV_BROWSER_SKILL)] + ) + elif pi_tool == "libretto": + if not (runtime_env or {}).get("LIBRETTO_CDP_URL"): + raise ValueError( + "Pi Libretto requires a task-private LIBRETTO_CDP_URL" + ) + command.extend(["--tool", pi_tool]) + else: + raise ValueError(f"Pi support is not configured for {pi_tool}") + if reasoning_effort is not None: + command.extend(["--thinking", reasoning_effort]) + return command, prompt.encode() + raise ValueError(f"unknown controller: {controller}") + + +def _subprocess_env(controller: Controller | None = None, tool: Tool | None = None) -> dict[str, str]: + allowed_keys = ESSENTIAL_ENV_KEYS | (CONTROLLER_ENV_KEYS[controller] if controller else set()) + allowed_prefixes = (CONTROLLER_ENV_PREFIXES[controller] if controller else ()) + (TOOL_ENV_PREFIXES[tool] if tool else ()) + env = { + key: value + for key, value in os.environ.items() + if key not in EVALUATION_ENV_KEYS + and not any(marker in key.upper() for marker in EVALUATION_ENV_MARKERS) + and (key in allowed_keys or key.startswith(allowed_prefixes)) + } + if tool == "webcmd": + node_bin = Path(__file__).resolve().parent.parent / "node_modules" / ".bin" + env["PATH"] = f"{node_bin}{os.pathsep}{env.get('PATH', '')}" + return env + + +def _child_env(controller: Controller, tool: Tool, overrides: dict[str, str] | None = None) -> dict[str, str]: + return {**_subprocess_env(controller, tool), **(overrides or {})} + + +def _verify_pinned_webcmd(env: dict[str, str], expected: Path) -> None: + shell = env.get("SHELL") or ("/bin/zsh" if Path("/bin/zsh").is_file() else "/bin/sh") + result = subprocess.run( + [shell, "-lc", "command -v webcmd"], + env=env, + capture_output=True, + text=True, + timeout=10, + ) + actual = result.stdout.strip() + if result.returncode or not actual or Path(actual).resolve() != expected.resolve(): + raise RuntimeError( + f"Webcmd login shell resolved {actual or 'nothing'}, expected {expected}" + ) + + +def _pin_webcmd_env(base_env: dict[str, str], work_dir: Path) -> dict[str, str]: + executable = shutil.which("webcmd", path=base_env.get("PATH")) + if not executable: + raise RuntimeError("webcmd was not found in PATH") + bin_dir = work_dir / "webcmd-bin" + bin_dir.mkdir() + shim = bin_dir / "webcmd" + shim.write_text( + f"#!/bin/sh\nexec {shlex.quote(str(Path(executable).resolve()))} \"$@\"\n", + encoding="utf-8", + ) + shim.chmod(0o700) + zsh_config = work_dir / "zsh-config" + zsh_config.mkdir() + pinned_path = f"{bin_dir}{os.pathsep}{base_env.get('PATH', '')}" + (zsh_config / ".zprofile").write_text( + f"export PATH={shlex.quote(pinned_path)}\n", encoding="utf-8" + ) + env = { + **base_env, + "PATH": pinned_path, + "ZDOTDIR": str(zsh_config), + } + _verify_pinned_webcmd(env, shim) + return env + + +def _session_name(work_dir: Path) -> str: + readable = re.sub(r"[^a-z0-9-]", "-", work_dir.name.lower()).strip("-") or "attempt" + digest = hashlib.sha256(str(work_dir.resolve()).encode()).hexdigest()[:10] + return f"{readable[:37]}-{digest}" + + +def _short(value: object, limit: int = 2000) -> str: + if isinstance(value, str): + text = value + else: + text = json.dumps(value, default=str, separators=(",", ":")) + return text.strip()[:limit] + + +def _evidence_excerpt(value: object, limit: int) -> str: + marker = "[truncated]" + text = value if isinstance(value, str) else json.dumps(value, default=str, separators=(",", ":")) + text = text.strip() + if len(text) <= limit: + return text + return text[: limit - len(marker)] + marker + + +def _command_step(command: str, output: object) -> str: + return ( + f"command: {_evidence_excerpt(command, 2000)}\n" + f"output: {_evidence_excerpt(output, 8000)}" + ) + + +def _mcp_content(result: object) -> list[dict]: + if not isinstance(result, dict): + return [] + content = result.get("content") + if isinstance(content, list): + return [item for item in content if isinstance(item, dict)] + ok = result.get("Ok") + if isinstance(ok, dict) and isinstance(ok.get("content"), list): + return [item for item in ok["content"] if isinstance(item, dict)] + return [] + + +def _parse_events( + controller: Controller, + lines: list[str], + *, + tool: Tool | None = None, + model: str | None = None, +) -> ParsedEvents: + steps: list[str] = [] + commands: list[str] = [] + event_types: list[str] = [] + final_fragments: list[str] = [] + steps_count = 0 + tool_calls = 0 + ordinary_input = 0 + cache_read_input = 0 + cache_creation_input = 0 + output_tokens = 0 + reasoning_output = 0 + usage_seen = False + estimated_api_cost_usd = 0.0 + cost_complete = controller == "pi" or ( + controller == "codex" and model in GPT_5_6_SOL_MODELS + ) + provider_turns = None + provider_duration_seconds = None + provider_api_duration_seconds = None + agent_turns = 0 if controller == "pi" else None + mcp_calls: list[tuple[str, str]] = [] + screenshot_images: list[bytes] = [] + for line in lines: + try: + event = json.loads(line) + except json.JSONDecodeError: + steps.append(_short(f"raw: {line}")) + continue + event_type = str(event.get("type", "unknown")) + event_types.append(event_type) + if controller == "codex" and event_type == "item.completed": + item = event.get("item") or {} + item_type = item.get("type") + if item_type == "agent_message": + text = str(item.get("text") or "") + final_fragments.append(text) + steps.append(_short(f"text: {text}")) + if text: + steps_count += 1 + elif item_type == "command_execution": + command = item.get("command") or "" + command = " ".join(map(str, command)) if isinstance(command, list) else str(command) + commands.append(command) + tool_calls += 1 + steps_count += 1 + command_output = item.get("aggregated_output") or item.get("output") or "" + steps.append(_command_step(command, command_output)) + elif item_type in {"mcp_tool_call", "web_search"}: + event_types.append(str(item_type)) + steps.append(_short(f"{item_type}: {_short(item)}")) + steps_count += 1 + if item_type == "mcp_tool_call": + server = str(item.get("server") or "") + tool_name = str(item.get("tool") or "") + mcp_calls.append((server, tool_name)) + if tool == "libretto": + tool_calls += 1 + if ( + server == "libretto" + and tool_name == "browser_snapshot" + ): + for content in _mcp_content(item.get("result")): + if ( + content.get("type") == "image" + and content.get("mimeType") == "image/png" + and isinstance(content.get("data"), str) + ): + try: + screenshot_images.append( + base64.b64decode( + content["data"], validate=True + ) + ) + except ValueError: + pass + elif item_type == "reasoning": + text = item.get("text") or item.get("summary") or "" + steps.append(_short(f"reasoning: {text}")) + steps_count += 1 + elif controller == "codex" and event_type == "turn.completed": + usage = event.get("usage") or {} + turn_input = int(usage.get("input_tokens") or 0) + turn_cached = int(usage.get("cached_input_tokens") or 0) + turn_cache_write = int(usage.get("cache_write_input_tokens") or 0) + turn_output = int(usage.get("output_tokens") or 0) + ordinary_input += turn_input - turn_cached - turn_cache_write + cache_read_input += turn_cached + cache_creation_input += turn_cache_write + output_tokens += turn_output + reasoning_output += int(usage.get("reasoning_output_tokens") or 0) + usage_seen = usage_seen or bool(usage) + if cost_complete: + if "cache_write_input_tokens" not in usage: + cost_complete = False + else: + input_multiplier = 2.0 if turn_input > LONG_CONTEXT_INPUT_THRESHOLD else 1.0 + output_multiplier = 1.5 if turn_input > LONG_CONTEXT_INPUT_THRESHOLD else 1.0 + turn_ordinary = turn_input - turn_cached - turn_cache_write + estimated_api_cost_usd += ( + input_multiplier + * ( + turn_ordinary * GPT_5_6_SOL_PRICES_PER_MILLION["input"] + + turn_cached * GPT_5_6_SOL_PRICES_PER_MILLION["cached_input"] + + turn_cache_write * GPT_5_6_SOL_PRICES_PER_MILLION["cache_write_input"] + ) + + output_multiplier + * turn_output + * GPT_5_6_SOL_PRICES_PER_MILLION["output"] + ) / 1_000_000 + elif controller == "pi" and event_type == "message_end": + message = event.get("message") or {} + if message.get("role") != "assistant": + continue + agent_turns += 1 + usage = message.get("usage") or {} + if usage: + ordinary_input += int(usage.get("input") or 0) + cache_read_input += int(usage.get("cacheRead") or 0) + cache_creation_input += int(usage.get("cacheWrite") or 0) + output_tokens += int(usage.get("output") or 0) + usage_seen = True + turn_cost = (usage.get("cost") or {}).get("total") + if ( + isinstance(turn_cost, (int, float)) + and not isinstance(turn_cost, bool) + and math.isfinite(turn_cost) + ): + estimated_api_cost_usd += float(turn_cost) + else: + cost_complete = False + else: + cost_complete = False + for block in message.get("content", []) or []: + block_type = block.get("type") + if block_type == "text": + text = str(block.get("text") or "") + final_fragments.append(text) + steps.append(_short(f"text: {text}")) + if text: + steps_count += 1 + elif block_type == "thinking": + text = str(block.get("thinking") or "") + if text: + steps.append(_short(f"thinking: {text}")) + steps_count += 1 + elif controller == "pi" and event_type == "tool_execution_start": + name = str(event.get("toolName") or "") + arguments = event.get("args") or {} + if name == "bash": + command = str(arguments.get("command") or "") + if command: + commands.append(command) + tool_calls += 1 + steps_count += 1 + steps.append(_short(f"tool: {name} {_short(arguments)}")) + elif ( + name == "read" + and Path(str(arguments.get("path") or "")).expanduser().resolve() + in PI_SETUP_SKILL_FILES.get(tool or "webcmd", frozenset()) + ): + steps.append(_short(f"setup_tool: {name} {_short(arguments)}")) + elif tool == "libretto": + event_types.append("mcp_tool_call") + mcp_calls.append(("libretto", name)) + tool_calls += 1 + steps_count += 1 + steps.append(_short(f"tool: {name} {_short(arguments)}")) + else: + event_types.append("mcp_tool_call") + steps_count += 1 + steps.append(_short(f"tool: {name} {_short(arguments)}")) + elif controller == "pi" and event_type == "tool_execution_end": + result = event.get("result") or {} + content = result.get("content") if isinstance(result, dict) else result + steps.append(_short(f"tool_result: {_short(content or '')}")) + if tool == "libretto" and event.get("toolName") == "browser_snapshot": + encoded = None + for item in content if isinstance(content, list) else []: + if ( + isinstance(item, dict) + and item.get("type") == "image" + and item.get("mimeType") == "image/png" + and isinstance(item.get("data"), str) + and not item["data"].startswith("[omitted ") + ): + encoded = item["data"] + break + details = result.get("details") if isinstance(result, dict) else None + screenshot = details.get("screenshot") if isinstance(details, dict) else None + if encoded is None and isinstance(screenshot, dict): + if screenshot.get("mimeType") == "image/png": + encoded = screenshot.get("base64") + if isinstance(encoded, str): + try: + screenshot_images.append( + base64.b64decode(encoded, validate=True) + ) + except ValueError: + pass + elif controller == "pi" and event_type == "result": + text = str(event.get("result") or "") + if text: + final_fragments.append(text) + steps.append(_short(f"result: {text}")) + if event.get("duration_ms") is not None: + provider_duration_seconds = float(event["duration_ms"]) / 1000 + elif controller == "claude" and event_type in {"assistant", "user"}: + message = event.get("message") or {} + usage = message.get("usage") or {} + if usage: + ordinary_input += int(usage.get("input_tokens") or 0) + cache_read_input += int(usage.get("cache_read_input_tokens") or 0) + cache_creation_input += int(usage.get("cache_creation_input_tokens") or 0) + output_tokens += int(usage.get("output_tokens") or 0) + usage_seen = True + for block in message.get("content", []) or []: + block_type = block.get("type") + if block_type == "tool_use": + name = block.get("name") + command = str((block.get("input") or {}).get("command") or "") + if name == "Bash" and command: + commands.append(command) + tool_calls += 1 + else: + event_types.append("mcp_tool_call") + steps.append(_short(f"tool: {_short(block)}")) + steps_count += 1 + elif block_type == "tool_result": + steps.append(_short(f"tool_result: {_short(block.get('content') or '')}")) + steps_count += 1 + elif block_type == "text": + text = str(block.get("text") or "") + final_fragments.append(text) + steps.append(_short(f"text: {text}")) + if text: + steps_count += 1 + elif block_type == "thinking": + text = str(block.get("thinking") or "") + if text: + steps.append(_short(f"thinking: {text}")) + steps_count += 1 + elif controller == "claude" and event_type == "result": + text = str(event.get("result") or "") + if text: + final_fragments.append(text) + steps.append(_short(f"result: {text}")) + usage = event.get("usage") or {} + if usage and not usage_seen: + ordinary_input += int(usage.get("input_tokens") or 0) + cache_read_input += int(usage.get("cache_read_input_tokens") or 0) + cache_creation_input += int(usage.get("cache_creation_input_tokens") or 0) + output_tokens += int(usage.get("output_tokens") or 0) + usage_seen = True + if event.get("num_turns") is not None: + provider_turns = int(event["num_turns"]) + if event.get("duration_ms") is not None: + provider_duration_seconds = float(event["duration_ms"]) / 1000 + if event.get("duration_api_ms") is not None: + provider_api_duration_seconds = float(event["duration_api_ms"]) / 1000 + elif event_type not in {"thread.started", "turn.started", "turn.completed", "system"}: + steps.append(_short(f"{event_type}: {_short(event)}")) + tokens = None + if usage_seen: + input_tokens = ordinary_input + cache_read_input + cache_creation_input + tokens = TokenUsage( + input=input_tokens, + cache_read_input=cache_read_input, + cache_creation_input=cache_creation_input, + non_cached_input=ordinary_input, + output=output_tokens, + reasoning_output=reasoning_output if controller == "codex" else None, + total=input_tokens + output_tokens, + estimated_api_cost_usd=( + estimated_api_cost_usd if cost_complete else None + ), + ) + return ParsedEvents( + steps=steps, + commands=commands, + event_types=event_types, + final_text="\n".join(final_fragments), + steps_count=steps_count, + tool_calls=tool_calls, + tokens=tokens, + provider_turns=provider_turns, + provider_duration_seconds=provider_duration_seconds, + provider_api_duration_seconds=provider_api_duration_seconds, + agent_turns=agent_turns, + mcp_calls=mcp_calls, + screenshot_images=screenshot_images, + ) + + +def _extract_final_answer(text: str) -> str: + matches = FINAL_ANSWER_RE.findall(text) + return matches[-1].strip() if matches else "" + + +def _has_unescaped_dollar(command: str) -> bool: + def starts_expansion(position: int) -> bool: + if position + 1 >= len(command): + return False + following = command[position + 1] + return following.isalnum() or following == "_" or following in "{(?$#*@!-" + + quote: str | None = None + index = 0 + while index < len(command): + character = command[index] + if quote == "'": + if character == "'": + quote = None + index += 1 + elif quote == '"': + if character == '"': + quote = None + index += 1 + elif character == "\\" and index + 1 < len(command) and command[index + 1] in '$`"\\\n': + index += 2 + elif character == "$" and starts_expansion(index): + return True + else: + index += 1 + elif character in "'\"": + quote = character + index += 1 + elif character == "\\": + index += 2 + elif character == "$" and starts_expansion(index): + return True + else: + index += 1 + return False + + +def _shell_segments(command: str) -> list[list[str]] | None: + try: + lexer = shlex.shlex(command, posix=True, punctuation_chars=";&|()<>\n`") + lexer.whitespace = " \t\r" + lexer.whitespace_split = True + lexer.commenters = "" + tokens = list(lexer) + except ValueError: + return None + controls = {";", "&&", "||", "|", "&", "\n"} + punctuation = set(";&|()<>\n`") + segments: list[list[str]] = [] + segment: list[str] = [] + for token in tokens: + if token in controls: + if not segment: + return None + segments.append(segment) + segment = [] + elif token and set(token) <= punctuation: + return None + else: + segment.append(token) + if not segment and segments: + return None + if segment: + segments.append(segment) + return segments + + +def _strip_shell_quotes(value: str) -> str: + if len(value) >= 2 and value[0] == value[-1] and value[0] in {"'", '"'}: + return value[1:-1] + return value + + +def _is_unterminated_allowed_command(tool: Tool, command: str) -> bool: + try: + shlex.split(command, posix=True) + except ValueError: + words = command.lstrip().split() + if not words: + return False + executable = Path(words[0].strip("'\"")).name + if tool in {"webcmd", "agent-browser"}: + return executable == tool + if tool == "chrome-devtools-axi": + return ( + executable == "npx" + and len(words) >= 3 + and words[1:3] == ["-y", "chrome-devtools-axi"] + ) + return False + + +def _dev_browser_segment_allowed(segment: list[str]) -> bool: + if not segment or segment[0] != "dev-browser": + return False + arguments = segment[1:] + if not arguments: + return True + if len(arguments) == 2 and arguments[0] == "--timeout": + return arguments[1].isdigit() and int(arguments[1]) > 0 + if len(arguments) == 1 and arguments[0].startswith("--timeout="): + value = arguments[0].partition("=")[2] + return value.isdigit() and int(value) > 0 + return False + + +def _dev_browser_skill_read_allowed(command: str) -> bool: + segments = _shell_segments(command) + if segments is None or len(segments) != 1: + return False + segment = segments[0] + skill = (Path.home() / ".codex/skills/dev-browser/SKILL.md").resolve() + try: + target = Path(segment[-1]).expanduser().resolve() + except (IndexError, OSError): + return False + return target == skill and segment[:-1] in ( + ["cat"], + ["sed", "-n", "1,240p"], + ) + + +def _unwrap_single_shell_command(command: str) -> str | None: + stripped = command.lstrip() + first = stripped.split(None, 1)[0] if stripped else "" + if Path(first.strip("'\"")).name not in {"sh", "bash", "zsh"}: + return command + if _has_unescaped_dollar(command): + return None + try: + words = shlex.split(command, posix=True) + except ValueError: + return None + if ( + len(words) != 3 + or Path(words[0]).name not in {"sh", "bash", "zsh"} + or words[1] not in {"-c", "-lc"} + ): + return None + return words[2] + + +def _webcmd_skill_read_allowed(command: str) -> bool: + inner = _unwrap_single_shell_command(command) + if inner is None: + return False + segments = _shell_segments(inner) + if segments is None or len(segments) != 1: + return False + segment = segments[0] + if len(segment) == 2 and segment[0] == "cat": + target_value = segment[1] + elif ( + len(segment) == 4 + and segment[:2] == ["sed", "-n"] + and re.fullmatch(r"[1-9][0-9]*,[1-9][0-9]*p", segment[2]) is not None + ): + target_value = segment[3] + else: + return False + try: + target = Path(target_value).expanduser().resolve() + target.relative_to(WEBCMD_BROWSER_SKILL_ROOT) + except (OSError, ValueError): + return False + return target.is_file() + + +def _dev_browser_command_allowed(command: str) -> bool: + inner = _unwrap_single_shell_command(command) + if inner is None: + return False + if _dev_browser_skill_read_allowed(inner): + return True + lines = inner.splitlines() + if len(lines) < 3: + segments = _shell_segments(inner) + return ( + segments is not None + and len(segments) == 1 + and _dev_browser_segment_allowed(segments[0]) + ) + match = re.fullmatch( + r"[ \t]*(?P
dev-browser(?:[ \t]+.*?)?)[ \t]+" + r"<<[ \t]*(?P['\"])(?P