@zaptcha/widget 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1059 @@
1
+ /**
2
+ * <zero-captcha> — CAPTCHA Web Component with WASM Proof-of-Work
3
+ *
4
+ * Single self-contained file — no external assets, no bundler config needed.
5
+ * The WASM glue and binary are inlined at build time by scripts/build.js.
6
+ *
7
+ * Attributes:
8
+ * base-url="https://api.example.com" required — backend base URL
9
+ * config-id="AAAA" required — base64url-encoded u32
10
+ * worker-url="./worker.js" optional — external worker file
11
+ *
12
+ * CSS custom properties (set on a parent element):
13
+ * --zaptcha-bg, --zaptcha-border, --zaptcha-border-hover,
14
+ * --zaptcha-border-focus, --zaptcha-text, --zaptcha-text-muted,
15
+ * --zaptcha-accent, --zaptcha-success, --zaptcha-shadow, --zaptcha-radius
16
+ *
17
+ * Events:
18
+ * zaptcha-success → detail: { token: string }
19
+ * zaptcha-fail → detail: { reason: string }
20
+ * zaptcha-reset → detail: {}
21
+ * zaptcha-progress → detail: { index, nonce, total, pct }
22
+ *
23
+ * Methods:
24
+ * el.reset()
25
+ */
26
+
27
+ // ── Inlined at build time by scripts/build.js ─────────────────────────────
28
+ // No import.meta.url, no new URL(), no external file references.
29
+ // Safe for Vite dep optimizer, Webpack, Rollup, plain <script type="module">.
30
+
31
+ /** @type {string} WASM JS glue — full source of zaptcha.js */
32
+ const _WASM_GLUE_SRC = `/**
33
+ * <zero-captcha> — CAPTCHA Web Component with WASM Proof-of-Work
34
+ *
35
+ * The worker is bundled inline — only this one file needs to be distributed.
36
+ * WASM glue is fetched via fetch() and re-wrapped as a Blob URL so that
37
+ * bundlers (Vite, Webpack, etc.) never block the import with a MIME error.
38
+ *
39
+ * Attributes:
40
+ * base-url="https://api.example.com" required — backend base URL
41
+ * config-id="AAAA" required — base64url-encoded u32
42
+ * wasm-glue="./pkg/zaptcha.js" optional — override WASM glue path
43
+ * wasm-bin="./pkg/zaptcha_bg.wasm" optional — override WASM binary path
44
+ * worker-url="./worker.js" optional — use an external worker file
45
+ *
46
+ * CSS custom properties (set on a parent element to theme the widget):
47
+ * --zaptcha-bg background color
48
+ * --zaptcha-border border color
49
+ * --zaptcha-border-hover hover border color
50
+ * --zaptcha-border-focus focus ring color
51
+ * --zaptcha-text primary text color
52
+ * --zaptcha-text-muted muted / branding text color
53
+ * --zaptcha-accent spinner / interactive accent color
54
+ * --zaptcha-success checkmark fill color
55
+ * --zaptcha-shadow box shadow
56
+ * --zaptcha-radius border radius
57
+ *
58
+ * Events dispatched on host element:
59
+ * zaptcha-success -> detail: { token: string }
60
+ * zaptcha-fail -> detail: { reason: string }
61
+ * zaptcha-reset -> detail: {}
62
+ * zaptcha-progress -> detail: { index, nonce, total, pct }
63
+ *
64
+ * Public methods:
65
+ * el.reset()
66
+ */
67
+
68
+ // ── Default WASM paths (relative to this module) ──────────────────────────
69
+
70
+ const _base = import.meta.url;
71
+ const _wasmGlue = new URL('./pkg/zaptcha' + '.js', _base).href;
72
+ const _wasmBin = new URL('./pkg/zaptcha_bg' + '.wasm', _base).href;
73
+
74
+ // ── Inline worker source ──────────────────────────────────────────────────
75
+ //
76
+ // The worker receives a blob: URL for the WASM glue (already fetched and
77
+ // re-wrapped by the main thread) so import() always sees the correct MIME
78
+ // type regardless of how the host bundler serves the original file.
79
+
80
+ const WORKER_SRC = \`
81
+ let wasmModule = null;
82
+ let wasmReady = false;
83
+ let wasmGlueUrl = null;
84
+ let wasmBinUrl = null;
85
+
86
+ async function initWasm() {
87
+ if (wasmReady) return;
88
+ if (!wasmGlueUrl) throw new Error("WASM paths not provided");
89
+ const mod = await import(wasmGlueUrl);
90
+ if (typeof mod.default === "function") await mod.default(wasmBinUrl);
91
+ wasmModule = mod;
92
+ wasmReady = true;
93
+ }
94
+
95
+ async function runSolve(baseUrl, configId) {
96
+ await initWasm();
97
+
98
+ const challengeRes = await fetch(baseUrl + "/" + configId + "/challenge");
99
+ if (!challengeRes.ok) throw new Error("Challenge request failed: HTTP " + challengeRes.status);
100
+
101
+ const { token, challenge_count, salt_length, difficulty } = await challengeRes.json();
102
+
103
+ self.__zaptchaProgressCb = (index, nonce) => {
104
+ self.postMessage({ type: "progress", index, nonce, total: challenge_count });
105
+ };
106
+
107
+ let solutions;
108
+ try {
109
+ solutions = wasmModule.solve_challenge(
110
+ token, difficulty, challenge_count, salt_length, self.__zaptchaProgressCb,
111
+ );
112
+ } finally {
113
+ delete self.__zaptchaProgressCb;
114
+ }
115
+
116
+ const redeemRes = await fetch(baseUrl + "/" + configId + "/redeem", {
117
+ method: "POST",
118
+ headers: { "Content-Type": "application/json" },
119
+ body: JSON.stringify({ token, solutions: Array.from(solutions) }),
120
+ });
121
+ if (!redeemRes.ok) throw new Error("Redeem request failed: HTTP " + redeemRes.status);
122
+
123
+ const { message } = await redeemRes.json();
124
+ if (!message) throw new Error("Server did not return a token");
125
+ return message;
126
+ }
127
+
128
+ self.onmessage = async function ({ data }) {
129
+ if (data.type === "init") {
130
+ wasmGlueUrl = data.wasmGlue;
131
+ wasmBinUrl = data.wasmBin;
132
+ try {
133
+ await initWasm();
134
+ self.postMessage({ type: "ready" });
135
+ } catch (err) {
136
+ self.postMessage({ type: "fail", reason: err.message });
137
+ }
138
+ return;
139
+ }
140
+
141
+ if (data.type === "solve") {
142
+ try {
143
+ const token = await runSolve(data.baseUrl, data.configId);
144
+ self.postMessage({ type: "success", token });
145
+ } catch (err) {
146
+ self.postMessage({ type: "fail", reason: err.message });
147
+ }
148
+ }
149
+ };
150
+ \`;
151
+
152
+ // ── Constructable stylesheet (one instance shared across all widgets) ─────
153
+
154
+ const _sheet = new CSSStyleSheet();
155
+ _sheet.replaceSync(\`
156
+ :host {
157
+ /*
158
+ * display:block + min-height guarantee the element occupies space before
159
+ * the custom element upgrade fires and before the first _applyState()
160
+ * call. Without this, frameworks like SolidJS / React render the host as
161
+ * inline with zero height.
162
+ */
163
+ display: block;
164
+ min-height: 48px;
165
+ width: fit-content;
166
+
167
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
168
+ -webkit-font-smoothing: antialiased;
169
+ -moz-osx-font-smoothing: grayscale;
170
+
171
+ --zap-bg: var(--zaptcha-bg, #ffffff);
172
+ --zap-border: var(--zaptcha-border, #e5e7eb);
173
+ --zap-border-hover: var(--zaptcha-border-hover, #d1d5db);
174
+ --zap-border-focus: var(--zaptcha-border-focus, #4f46e5);
175
+ --zap-text: var(--zaptcha-text, #374151);
176
+ --zap-text-muted: var(--zaptcha-text-muted, #9ca3af);
177
+ --zap-accent: var(--zaptcha-accent, #4f46e5);
178
+ --zap-success: var(--zaptcha-success, #10b981);
179
+ --zap-shadow: var(--zaptcha-shadow, 0 2px 6px rgba(0,0,0,0.04));
180
+ --zap-radius: var(--zaptcha-radius, 8px);
181
+ }
182
+
183
+ .widget {
184
+ background: var(--zap-bg);
185
+ border: 1px solid var(--zap-border);
186
+ border-radius: var(--zap-radius);
187
+ box-shadow: var(--zap-shadow);
188
+ width: 210px;
189
+ box-sizing: border-box;
190
+ transition: box-shadow 0.2s ease, border-color 0.2s ease;
191
+ }
192
+ .widget:hover {
193
+ box-shadow: 0 4px 12px rgba(0,0,0,0.06);
194
+ }
195
+
196
+ /* ── Row ── */
197
+ .row {
198
+ display: flex;
199
+ align-items: center;
200
+ gap: 10px;
201
+ padding: 0 12px;
202
+ height: 48px;
203
+ cursor: pointer;
204
+ user-select: none;
205
+ box-sizing: border-box;
206
+ border-radius: var(--zap-radius);
207
+ outline: none;
208
+ }
209
+ .row:focus-visible {
210
+ box-shadow: 0 0 0 2px var(--zap-bg), 0 0 0 4px var(--zap-border-focus);
211
+ }
212
+ .row[aria-checked="true"] {
213
+ cursor: default;
214
+ }
215
+
216
+ /* ── Checkbox shell ── */
217
+ .box {
218
+ width: 22px;
219
+ height: 22px;
220
+ flex-shrink: 0;
221
+ position: relative;
222
+ display: flex;
223
+ align-items: center;
224
+ justify-content: center;
225
+ }
226
+ .box-border {
227
+ position: absolute;
228
+ inset: 0;
229
+ border: 1.5px solid var(--zap-border);
230
+ border-radius: 4px;
231
+ background: var(--zap-bg);
232
+ transition: border-color 0.2s ease, background-color 0.2s ease;
233
+ }
234
+ .row:hover:not([aria-checked="true"]) .box-border {
235
+ border-color: var(--zap-border-hover);
236
+ }
237
+
238
+ /* ── State: done ── */
239
+ .box.done .box-border {
240
+ background: var(--zap-success);
241
+ border-color: var(--zap-success);
242
+ }
243
+ .box-tick { display: none; position: relative; z-index: 1; }
244
+ .box.done .box-tick { display: block; animation: zap-pop 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); }
245
+
246
+ @keyframes zap-pop {
247
+ 0% { transform: scale(0.5); opacity: 0; }
248
+ 100% { transform: scale(1); opacity: 1; }
249
+ }
250
+
251
+ /* ── State: spinning ── */
252
+ .box-spinner { display: none; position: absolute; inset: 0; }
253
+ .box.spinning .box-border { border-color: transparent; background: transparent; }
254
+ .box.spinning .box-spinner {
255
+ display: flex;
256
+ align-items: center;
257
+ justify-content: center;
258
+ }
259
+ .box-spinner::after {
260
+ content: '';
261
+ display: block;
262
+ width: 18px;
263
+ height: 18px;
264
+ border: 2px solid var(--zap-border);
265
+ border-top-color: var(--zap-accent);
266
+ border-radius: 50%;
267
+ animation: zap-spin 0.6s linear infinite;
268
+ }
269
+ @keyframes zap-spin { to { transform: rotate(360deg); } }
270
+
271
+ /* ── Label ── */
272
+ .label {
273
+ color: var(--zap-text);
274
+ font-size: 13.5px;
275
+ font-weight: 500;
276
+ flex: 1;
277
+ white-space: nowrap;
278
+ overflow: hidden;
279
+ text-overflow: ellipsis;
280
+ transition: color 0.2s ease;
281
+ }
282
+
283
+ /* ── Branding ── */
284
+ .branding {
285
+ display: flex;
286
+ flex-direction: column;
287
+ align-items: flex-end;
288
+ justify-content: center;
289
+ flex-shrink: 0;
290
+ gap: 1px;
291
+ }
292
+ .branding strong {
293
+ font-size: 9px;
294
+ font-weight: 700;
295
+ letter-spacing: 0.05em;
296
+ text-transform: uppercase;
297
+ color: var(--zap-text-muted);
298
+ }
299
+ .branding a {
300
+ font-size: 9px;
301
+ color: var(--zap-text-muted);
302
+ text-decoration: none;
303
+ transition: color 0.2s;
304
+ }
305
+ .branding a:hover { color: var(--zap-text); }
306
+ \`);
307
+
308
+ // ── DOM template (parsed once, cloned per instance) ───────────────────────
309
+
310
+ const _template = document.createElement("template");
311
+ _template.innerHTML = \`
312
+ <div class="widget" part="widget">
313
+ <div class="row"
314
+ id="row"
315
+ tabindex="0"
316
+ role="checkbox"
317
+ aria-checked="false"
318
+ aria-label="I'm not a robot">
319
+
320
+ <div class="box" id="box" part="checkbox">
321
+ <div class="box-border"></div>
322
+ <div class="box-spinner"></div>
323
+ <svg class="box-tick" width="12" height="9" viewBox="0 0 12 9" fill="none" aria-hidden="true">
324
+ <polyline points="1.5,4.5 4.5,7.5 10.5,1.5"
325
+ stroke="white" stroke-width="2"
326
+ stroke-linecap="round" stroke-linejoin="round"/>
327
+ </svg>
328
+ </div>
329
+
330
+ <span class="label" id="label" part="label">I'm not a robot</span>
331
+
332
+ <div class="branding" part="branding">
333
+ <strong>Zaptcha</strong>
334
+ <a href="#" tabindex="-1">Privacy</a>
335
+ </div>
336
+ </div>
337
+ </div>
338
+ \`;
339
+
340
+ // ── Label map ─────────────────────────────────────────────────────────────
341
+
342
+ const LABELS = {
343
+ idle: "I'm not a robot",
344
+ solving: "Verifying\\u2026",
345
+ done: "Verified",
346
+ error: "I'm not a robot",
347
+ };
348
+
349
+ // ── Component ─────────────────────────────────────────────────────────────
350
+
351
+ class ZeroCaptcha extends HTMLElement {
352
+
353
+ static get observedAttributes() { return []; }
354
+
355
+ constructor() {
356
+ super();
357
+
358
+ this._shadow = this.attachShadow({ mode: "open" });
359
+
360
+ // Shared stylesheet — no duplication across instances
361
+ this._shadow.adoptedStyleSheets = [_sheet];
362
+
363
+ // Build DOM once from template
364
+ this._shadow.appendChild(_template.content.cloneNode(true));
365
+
366
+ // Cache mutable nodes
367
+ this._rowEl = this._shadow.getElementById("row");
368
+ this._boxEl = this._shadow.getElementById("box");
369
+ this._labelEl = this._shadow.getElementById("label");
370
+
371
+ this._worker = null;
372
+ this._blobUrl = null; // worker blob URL
373
+ this._glueBlobUrl = null; // WASM glue re-wrapped blob URL
374
+
375
+ /** @type {"idle"|"solving"|"done"|"error"} */
376
+ this._state = "idle";
377
+ this._progress = { done: 0, total: 1 };
378
+
379
+ this._bindEvents();
380
+ }
381
+
382
+ connectedCallback() { this._startWorker(); }
383
+ disconnectedCallback() { this._destroyWorker(); }
384
+
385
+ // ── Public API ───────────────────────────────────────────────────────────
386
+
387
+ reset() {
388
+ this._destroyWorker();
389
+ this._state = "idle";
390
+ this._progress = { done: 0, total: 1 };
391
+ this._applyState();
392
+ this._startWorker();
393
+ this.dispatchEvent(new CustomEvent("zaptcha-reset", { bubbles: true, detail: {} }));
394
+ }
395
+
396
+ // ── State → DOM (no innerHTML, only classList / attributes) ─────────────
397
+
398
+ _applyState() {
399
+ const { _rowEl: row, _boxEl: box, _labelEl: label } = this;
400
+ const s = this._state;
401
+ const isDone = s === "done";
402
+ const isSpin = s === "solving";
403
+
404
+ row.setAttribute("aria-checked", String(isDone));
405
+ row.setAttribute("aria-label", LABELS[s] ?? LABELS.idle);
406
+ row.tabIndex = isDone ? -1 : 0;
407
+
408
+ box.classList.toggle("spinning", isSpin);
409
+ box.classList.toggle("done", isDone);
410
+
411
+ label.textContent = LABELS[s] ?? LABELS.idle;
412
+ }
413
+
414
+ // ── Worker lifecycle ─────────────────────────────────────────────────────
415
+
416
+ async _startWorker() {
417
+ try {
418
+ const externalUrl = this.getAttribute("worker-url");
419
+
420
+ if (externalUrl) {
421
+ this._worker = new Worker(externalUrl, { type: "module" });
422
+ } else {
423
+ const blob = new Blob([WORKER_SRC], { type: "text/javascript" });
424
+ this._blobUrl = URL.createObjectURL(blob);
425
+ this._worker = new Worker(this._blobUrl, { type: "module" });
426
+ }
427
+
428
+ this._worker.onmessage = (e) => this._onWorkerMsg(e.data);
429
+ this._worker.onerror = (e) => this._onFail(\`Worker error: \${e.message}\`);
430
+
431
+ const rawGlue = this.getAttribute("wasm-glue") ?? _wasmGlue;
432
+ const wasmBin = this.getAttribute("wasm-bin") ?? _wasmBin;
433
+
434
+ // ── MIME fix ────────────────────────────────────────────────────────
435
+ //
436
+ // Bundlers (Vite, etc.) may serve .js files with an empty or wrong
437
+ // MIME type when accessed via import() inside a Worker. fetch() has
438
+ // no such restriction, so we:
439
+ // 1. Fetch the glue script as plain text (MIME irrelevant)
440
+ // 2. Re-wrap it in a Blob with an explicit application/javascript type
441
+ // 3. Pass the blob: URL to the worker — browsers always accept these
442
+ //
443
+ const glueText = await fetch(rawGlue).then((r) => {
444
+ if (!r.ok) throw new Error(\`Failed to fetch WASM glue: HTTP \${r.status}\`);
445
+ return r.text();
446
+ });
447
+ const glueBlob = new Blob([glueText], { type: "application/javascript" });
448
+ this._glueBlobUrl = URL.createObjectURL(glueBlob);
449
+
450
+ this._worker.postMessage({ type: "init", wasmGlue: this._glueBlobUrl, wasmBin });
451
+
452
+ } catch (err) {
453
+ this._worker = null;
454
+ this._onFail(\`Worker init failed: \${err.message}\`);
455
+ }
456
+ }
457
+
458
+ _destroyWorker() {
459
+ this._worker?.terminate();
460
+ this._worker = null;
461
+
462
+ if (this._blobUrl) {
463
+ URL.revokeObjectURL(this._blobUrl);
464
+ this._blobUrl = null;
465
+ }
466
+ if (this._glueBlobUrl) {
467
+ URL.revokeObjectURL(this._glueBlobUrl);
468
+ this._glueBlobUrl = null;
469
+ }
470
+ }
471
+
472
+ // ── Worker message handler ───────────────────────────────────────────────
473
+
474
+ _onWorkerMsg(msg) {
475
+ switch (msg.type) {
476
+
477
+ case "ready":
478
+ // WASM initialised — nothing to show yet, waiting for user click
479
+ break;
480
+
481
+ case "progress":
482
+ this._progress.done = (msg.index ?? 0) + 1;
483
+ this._progress.total = msg.total ?? 1;
484
+ this.dispatchEvent(new CustomEvent("zaptcha-progress", {
485
+ bubbles: true,
486
+ composed: true,
487
+ detail: {
488
+ index: msg.index,
489
+ nonce: msg.nonce,
490
+ total: msg.total,
491
+ pct: Math.round(((msg.index ?? 0) + 1) / (msg.total ?? 1) * 100),
492
+ },
493
+ }));
494
+ break;
495
+
496
+ case "success":
497
+ this._state = "done";
498
+ this._applyState();
499
+ this.dispatchEvent(new CustomEvent("zaptcha-success", {
500
+ bubbles: true,
501
+ composed: true,
502
+ detail: { token: msg.token },
503
+ }));
504
+ break;
505
+
506
+ case "fail":
507
+ this._onFail(msg.reason || "Unknown error");
508
+ break;
509
+ }
510
+ }
511
+
512
+ // ── Event binding (called once in constructor) ───────────────────────────
513
+
514
+ _bindEvents() {
515
+ this._rowEl.addEventListener("click", () => this._onRowClick());
516
+ this._rowEl.addEventListener("keydown", (e) => {
517
+ if (e.key === " " || e.key === "Enter") {
518
+ e.preventDefault();
519
+ this._onRowClick();
520
+ }
521
+ });
522
+ }
523
+
524
+ _onRowClick() {
525
+ if (this._state !== "idle") return;
526
+ this._startSolve();
527
+ }
528
+
529
+ // ── Solve flow ───────────────────────────────────────────────────────────
530
+
531
+ _startSolve() {
532
+ this._state = "solving";
533
+ this._progress = { done: 0, total: 1 };
534
+ this._applyState();
535
+
536
+ if (!this._worker) {
537
+ this._onFail("Worker unavailable");
538
+ return;
539
+ }
540
+
541
+ const baseUrl = this.getAttribute("base-url") ?? "";
542
+ const configId = this.getAttribute("config-id") ?? "";
543
+
544
+ if (!baseUrl || !configId) {
545
+ this._onFail("Attributes base-url and config-id are required");
546
+ return;
547
+ }
548
+
549
+ this._worker.postMessage({ type: "solve", baseUrl, configId });
550
+ }
551
+
552
+ _onFail(reason) {
553
+ this._state = "error";
554
+ this._applyState();
555
+
556
+ this.dispatchEvent(new CustomEvent("zaptcha-fail", {
557
+ bubbles: true,
558
+ composed: true,
559
+ detail: { reason },
560
+ }));
561
+
562
+ setTimeout(() => this.reset(), 3000);
563
+ }
564
+ }
565
+
566
+ customElements.define("zero-captcha", ZeroCaptcha);
567
+
568
+ export default ZeroCaptcha;
569
+ export { ZeroCaptcha };
570
+
571
+ // ── Standalone worker factory (for headless / custom UI usage) ────────────
572
+
573
+ export async function createWorker({ wasmGlue = _wasmGlue, wasmBin = _wasmBin } = {}) {
574
+ const blob = new Blob([WORKER_SRC], { type: "text/javascript" });
575
+ const blobUrl = URL.createObjectURL(blob);
576
+ const worker = new Worker(blobUrl, { type: "module" });
577
+
578
+ // Revoke worker blob URL once the worker signals it is ready
579
+ worker.addEventListener("message", function onReady(e) {
580
+ if (e.data?.type === "ready" || e.data?.type === "fail") {
581
+ URL.revokeObjectURL(blobUrl);
582
+ worker.removeEventListener("message", onReady);
583
+ }
584
+ });
585
+
586
+ // Re-wrap glue via fetch → Blob to avoid MIME issues in all environments
587
+ const glueText = await fetch(wasmGlue).then((r) => {
588
+ if (!r.ok) throw new Error(\`Failed to fetch WASM glue: HTTP \${r.status}\`);
589
+ return r.text();
590
+ });
591
+ const glueBlob = new Blob([glueText], { type: "application/javascript" });
592
+ const glueBlobUrl = URL.createObjectURL(glueBlob);
593
+
594
+ worker.addEventListener("message", function onGlueCleanup(e) {
595
+ if (e.data?.type === "ready" || e.data?.type === "fail") {
596
+ URL.revokeObjectURL(glueBlobUrl);
597
+ worker.removeEventListener("message", onGlueCleanup);
598
+ }
599
+ });
600
+
601
+ worker.postMessage({ type: "init", wasmGlue: glueBlobUrl, wasmBin });
602
+ return worker;
603
+ }`;
604
+
605
+ /** @type {string} WASM binary — base64-encoded zaptcha_bg.wasm */
606
+ const _WASM_BIN_B64 = "AGFzbQEAAAAB9wEhYAN/f38Bf2ACf38Bf2AEf39/fwBgBX9/f39/AGACf38AYAN/f38AYAF/AGAEf39/fwF/YAV/f39/fwF/YAZ/f39/f38AYAAAYAV/f39+fwBgBX9/fn9/AGAFf398f38AYAV/f31/fwBgBG9vb28Bb2ABfAFvYAl/f39+f39/f38AYAF/AX9gCH9/f35/f39/AX9gAn9+AGAHf39/f39/fwF/YAJ+fwF/YAABf2AGf39/fn9/AGAGf39/fH9/AGAGf39/fX9/AGAGf39/f39vAn9/YAZ/f39/f38Bf2AEf35/fwBgBH98f38AYAR/fX9/AGABfAF/As4BBA8uL3phcHRjaGFfYmcuanMbX193YmdfY2FsbF9kY2MyNjYyZmExN2E3MmNmAA8PLi96YXB0Y2hhX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfNmRkZDYwOWI2Mjk0MGQ1NQAEDy4vemFwdGNoYV9iZy5qcx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAAoPLi96YXB0Y2hhX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAxABADVVQRBAsSAAsTAAYHBBQABwgVABYBAQEEAQQXAggBAQEJAwEBCQUGAwIFCQYDAwMCCRgZGgMFAgEBAQEFCAcGGxwIDAMNDgIHBAAFASABAQYKAAEEBAoECQJwATIybwCACAUDAQARBg8CfwFBgIDAAAt/AUGACAsHswEJBm1lbW9yeQIAD3NvbHZlX2NoYWxsZW5nZQBBFF9fd2JpbmRnZW5fZXhuX3N0b3JlAFEXX19leHRlcm5yZWZfdGFibGVfYWxsb2MAHBVfX3diaW5kZ2VuX2V4dGVybnJlZnMBARFfX3diaW5kZ2VuX21hbGxvYwA5El9fd2JpbmRnZW5fcmVhbGxvYwA/D19fd2JpbmRnZW5fZnJlZQArEF9fd2JpbmRnZW5fc3RhcnQAAgk3AQBBAQsxISAaT1AWJDwDUE1UMEMjIjIzRDI2RTI0RkhFRTVHOC5DLEIxS0kpVVYoJTs7EDpTHwwBBQrs/QJU0EUDK3sHfwN+IAOn/REgAyAEQQFzrXwiO6f9HAFCAEICIAQbIAN8Ijyn/RwCQgBCAyAEGyADfCI9p/0cAyEtIANCIIin/REgO0IgiKf9HAEgPEIgiKf9HAIgPUIgiKf9HAMhLiAFIAZyIQQgAUEGdCI1QUBqITYgAv0AAgD9DAAAAAAAAAAAAAAAAAAAAAD9DQABAgMAAQIDAAECAwABAgMhGyAC/QACBP0MAAAAAAAAAAAAAAAAAAAAAP0NAAECAwABAgMAAQIDAAECAyErIAL9AAII/QwAAAAAAAAAAAAAAAAAAAAA/Q0AAQIDAAECAwABAgMAAQIDISIgAv0AAgz9DAAAAAAAAAAAAAAAAAAAAAD9DQABAgMAAQIDAAECAwABAgMhIyAC/QACECIZIBn9DQABAgMAAQIDAAECAwABAgMhEiAZIBn9DQQFBgcEBQYHBAUGBwQFBgchHSAZIBn9DQgJCgsICQoLCAkKCwgJCgshJCAZIBn9DQwNDg8MDQ4PDA0ODwwNDg8hJSAAKAIMITcgACgCCCE4IAAoAgQhOSAAKAIAITpBACECA0AgGyACIDpqIgD9AAAAIikgAiA5aiIB/QAAACIe/Q0AAQIDEBESEwQFBgcUFRYXIhsgAiA4aiIG/QAAACIgIAIgN2oiNP0AAAAiKv0NAAECAxAREhMEBQYHFBUWFyIT/Q0AAQIDBAUGBxAREhMUFRYXIhn9rgEgEv2uASIhIBsgE/0NCAkKCwwNDg8YGRobHB0eHyIb/a4BICEgLf1RIhNBEP2rASATQRD9rQH9UCIT/Qxn5glqZ+YJamfmCWpn5glq/a4BIiEgEv1RIhJBFP2rASASQQz9rQH9UCIn/a4BIgkgAEEgav0AAAAiCiABQSBq/QAAACIM/Q0AAQIDEBESEwQFBgcUFRYXIgsgBkEgav0AAAAiDyA0QSBq/QAAACIN/Q0AAQIDEBESEwQFBgcUFRYXIhT9DQABAgMEBQYHEBESExQVFhciEv2uASArICkgHv0NCAkKCxgZGhsMDQ4PHB0eHyIpICAgKv0NCAkKCxgZGhsMDQ4PHB0eHyIe/Q0AAQIDBAUGBxAREhMUFRYXIiv9rgEgHf2uASIgICkgHv0NCAkKCwwNDg8YGRobHB0eHyIp/a4BICAgLv1RIh5BEP2rASAeQRD9rQH9UCIe/QyFrme7ha5nu4WuZ7uFrme7/a4BIiAgHf1RIh1BFP2rASAdQQz9rQH9UCId/a4BIiogHv1RIh5BGP2rASAeQQj9rQH9UCIaICD9rgEiECAd/VEiHUEZ/asBIB1BB/2tAf1QIiD9rgEiHiALIBT9DQgJCgsMDQ4PGBkaGxwdHh8iHf2uASAeICMgAEEQav0AAAAiCyABQRBq/QAAACIU/Q0ICQoLGBkaGwwNDg8cHR4fIh4gBkEQav0AAAAiHCA0QRBq/QAAACIW/Q0ICQoLGBkaGwwNDg8cHR4fIg79DQABAgMEBQYHEBESExQVFhciI/2uASAl/a4BIhUgHiAO/Q0ICQoLDA0ODxgZGhscHR4fIh79rgEgFSAHQQAgAiA2RhsgBHJB/wFx/RH9USIOQRD9qwEgDkEQ/a0B/VAiDv0MOvVPpTr1T6U69U+lOvVPpf2uASIVICX9USIlQRT9qwEgJUEM/a0B/VAiEf2uASIXIA79USIlQRj9qwEgJUEI/a0B/VAiDv1RIiVBEP2rASAlQRD9rQH9UCIYICIgCyAU/Q0AAQIDEBESEwQFBgcUFRYXIiIgHCAW/Q0AAQIDEBESEwQFBgcUFRYXIgv9DQABAgMEBQYHEBESExQVFhciJf2uASAk/a4BIhQgIiAL/Q0ICQoLDA0ODxgZGhscHR4fIiL9rgEgFP0MQAAAAEAAAABAAAAAQAAAAP1RIgtBEP2rASALQRD9rQH9UCIL/Qxy8248cvNuPHLzbjxy8248/a4BIhQgJP1RIiRBFP2rASAkQQz9rQH9UCIc/a4BIhYgC/1RIiRBGP2rASAkQQj9rQH9UCILIBT9rgEiFP2uASIfICD9USIkQRT9qwEgJEEM/a0B/VAiKP2uASImICv9rgEgFyAAQTBq/QAAACIXIAFBMGr9AAAAIi/9DQgJCgsYGRobDA0ODxwdHh8iICAGQTBq/QAAACIwIDRBMGr9AAAAIjH9DQgJCgsYGRobDA0ODxwdHh8iLP0NAAECAwQFBgcQERITFBUWFyIk/a4BIAkgE/1RIhNBGP2rASATQQj9rQH9UCIJICH9rgEiMiAn/VEiE0EZ/asBIBNBB/2tAf1QIhP9rgEiISAgICz9DQgJCgsMDQ4PGBkaGxwdHh8iIP2uASAhIAv9USIhQRD9qwEgIUEQ/a0B/VAiISAQ/a4BIicgE/1RIhNBFP2rASATQQz9rQH9UCIT/a4BIgsgIf1RIiFBGP2rASAhQQj9rQH9UCIQICf9rgEiLCAT/VEiE0EZ/asBIBNBB/2tAf1QIjP9rgEiEyAj/a4BIBMgKiAKIAz9DQgJCgsYGRobDA0ODxwdHh8iEyAPIA39DQgJCgsYGRobDA0ODxwdHh8iIf0NAAECAwQFBgcQERITFBUWFyIq/a4BIBQgHP1RIidBGf2rASAnQQf9rQH9UCIn/a4BIgogEyAh/Q0ICQoLDA0ODxgZGhscHR4fIhP9rgEgCiAJ/VEiIUEQ/asBICFBEP2tAf1QIiEgDiAV/a4BIgn9rgEiCiAn/VEiJ0EU/asBICdBDP2tAf1QIgz9rgEiDyAh/VEiIUEY/asBICFBCP2tAf1QIg39USIhQRD9qwEgIUEQ/a0B/VAiFCAWIBcgL/0NAAECAxAREhMEBQYHFBUWFyInIDAgMf0NAAECAxAREhMEBQYHFBUWFyIc/Q0AAQIDBAUGBxAREhMUFRYXIiH9rgEgCSAR/VEiCUEZ/asBIAlBB/2tAf1QIgn9rgEiFiAnIBz9DQgJCgsMDQ4PGBkaGxwdHh8iJ/2uASAWIBr9USIaQRD9qwEgGkEQ/a0B/VAiGiAy/a4BIhwgCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhYgGv1RIhpBGP2rASAaQQj9rQH9UCIaIBz9rgEiHP2uASIOIDP9USIVQRT9qwEgFUEM/a0B/VAiFf2uASIRIBv9rgEgDyAp/a4BICYgGP1RIg9BGP2rASAPQQj9rQH9UCIPIB/9rgEiFyAo/VEiGEEZ/asBIBhBB/2tAf1QIhj9rgEiHyAq/a4BIB8gGv1RIhpBEP2rASAaQRD9rQH9UCIaICz9rgEiHyAY/VEiGEEU/asBIBhBDP2tAf1QIhj9rgEiKCAa/VEiGkEY/asBIBpBCP2tAf1QIhogH/2uASIfIBj9USIYQRn9qwEgGEEH/a0B/VAiGP2uASImIBP9rgEgJiALICX9rgEgHCAJ/VEiCUEZ/asBIAlBB/2tAf1QIgn9rgEiCyAn/a4BIAsgD/1RIgtBEP2rASALQRD9rQH9UCILIA0gCv2uASIK/a4BIg8gCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIg0gC/1RIgtBGP2rASALQQj9rQH9UCIL/VEiHEEQ/asBIBxBEP2tAf1QIhwgFiAe/a4BIAogDP1RIgpBGf2rASAKQQf9rQH9UCIK/a4BIgwgGf2uASAMIBD9USIMQRD9qwEgDEEQ/a0B/VAiDCAX/a4BIhAgCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhYgDP1RIgxBGP2rASAMQQj9rQH9UCIMIBD9rgEiEP2uASIXIBj9USIYQRT9qwEgGEEM/a0B/VAiGP2uASImICn9rgEgDSAg/a4BIBEgFP1RIg1BGP2rASANQQj9rQH9UCINIA79rgEiFCAV/VEiDkEZ/asBIA5BB/2tAf1QIg79rgEiFSAS/a4BIBUgDP1RIgxBEP2rASAMQRD9rQH9UCIMIB/9rgEiFSAO/VEiDkEU/asBIA5BDP2tAf1QIg79rgEiESAM/VEiDEEY/asBIAxBCP2tAf1QIgwgFf2uASIVIA79USIOQRn9qwEgDkEH/a0B/VAiDv2uASIfICX9rgEgHyAoICH9rgEgECAK/VEiCkEZ/asBIApBB/2tAf1QIgr9rgEiECAi/a4BIBAgDf1RIg1BEP2rASANQRD9rQH9UCINIAsgD/2uASIL/a4BIg8gCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhAgDf1RIg1BGP2rASANQQj9rQH9UCIN/VEiH0EQ/asBIB9BEP2tAf1QIh8gFiAd/a4BIAsgCf1RIglBGf2rASAJQQf9rQH9UCIJ/a4BIgsgJP2uASALIBr9USILQRD9qwEgC0EQ/a0B/VAiCyAU/a4BIhQgCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhogC/1RIgtBGP2rASALQQj9rQH9UCILIBT9rgEiFP2uASIWIA79USIOQRT9qwEgDkEM/a0B/VAiDv2uASIoICP9rgEgECAq/a4BICYgHP1RIhBBGP2rASAQQQj9rQH9UCIQIBf9rgEiHCAY/VEiF0EZ/asBIBdBB/2tAf1QIhf9rgEiGCAh/a4BIBggC/1RIgtBEP2rASALQRD9rQH9UCILIBX9rgEiFSAX/VEiF0EU/asBIBdBDP2tAf1QIhf9rgEiGCAL/VEiC0EY/asBIAtBCP2tAf1QIgsgFf2uASIVIBf9USIXQRn9qwEgF0EH/a0B/VAiF/2uASImICL9rgEgJiARIB79rgEgFCAJ/VEiCUEZ/asBIAlBB/2tAf1QIgn9rgEiFCAk/a4BIBQgEP1RIhRBEP2rASAUQRD9rQH9UCIUIA0gD/2uASIP/a4BIg0gCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhAgFP1RIhRBGP2rASAUQQj9rQH9UCIU/VEiEUEQ/asBIBFBEP2tAf1QIhEgGiAn/a4BIA8gCv1RIgpBGf2rASAKQQf9rQH9UCIK/a4BIg8gK/2uASAPIAz9USIMQRD9qwEgDEEQ/a0B/VAiDCAc/a4BIg8gCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhogDP1RIgxBGP2rASAMQQj9rQH9UCIMIA/9rgEiD/2uASIcIBf9USIXQRT9qwEgF0EM/a0B/VAiF/2uASImICr9rgEgECAS/a4BICggH/1RIhBBGP2rASAQQQj9rQH9UCIQIBb9rgEiFiAO/VEiDkEZ/asBIA5BB/2tAf1QIg79rgEiHyAb/a4BIB8gDP1RIgxBEP2rASAMQRD9rQH9UCIMIBX9rgEiFSAO/VEiDkEU/asBIA5BDP2tAf1QIg79rgEiHyAM/VEiDEEY/asBIAxBCP2tAf1QIgwgFf2uASIVIA79USIOQRn9qwEgDkEH/a0B/VAiDv2uASIoIB79rgEgKCAYIB39rgEgDyAK/VEiCkEZ/asBIApBB/2tAf1QIgr9rgEiDyAZ/a4BIA8gEP1RIg9BEP2rASAPQRD9rQH9UCIPIBQgDf2uASIN/a4BIhQgCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhAgD/1RIg9BGP2rASAPQQj9rQH9UCIP/VEiGEEQ/asBIBhBEP2tAf1QIhggGiAT/a4BIA0gCf1RIglBGf2rASAJQQf9rQH9UCIJ/a4BIg0gIP2uASANIAv9USILQRD9qwEgC0EQ/a0B/VAiCyAW/a4BIg0gCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhogC/1RIgtBGP2rASALQQj9rQH9UCILIA39rgEiDf2uASIWIA79USIOQRT9qwEgDkEM/a0B/VAiDv2uASIoICX9rgEgECAh/a4BICYgEf1RIhBBGP2rASAQQQj9rQH9UCIQIBz9rgEiHCAX/VEiEUEZ/asBIBFBB/2tAf1QIhH9rgEiFyAd/a4BIBcgC/1RIgtBEP2rASALQRD9rQH9UCILIBX9rgEiFSAR/VEiEUEU/asBIBFBDP2tAf1QIhH9rgEiFyAL/VEiC0EY/asBIAtBCP2tAf1QIgsgFf2uASIVIBH9USIRQRn9qwEgEUEH/a0B/VAiEf2uASImIBn9rgEgJiAfICf9rgEgDSAJ/VEiCUEZ/asBIAlBB/2tAf1QIgn9rgEiDSAg/a4BIA0gEP1RIg1BEP2rASANQRD9rQH9UCINIA8gFP2uASIP/a4BIhQgCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhAgDf1RIg1BGP2rASANQQj9rQH9UCIN/VEiH0EQ/asBIB9BEP2tAf1QIh8gGiAk/a4BIA8gCv1RIgpBGf2rASAKQQf9rQH9UCIK/a4BIg8gKf2uASAPIAz9USIMQRD9qwEgDEEQ/a0B/VAiDCAc/a4BIg8gCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhogDP1RIgxBGP2rASAMQQj9rQH9UCIMIA/9rgEiD/2uASIcIBH9USIRQRT9qwEgEUEM/a0B/VAiEf2uASImICH9rgEgECAb/a4BICggGP1RIhBBGP2rASAQQQj9rQH9UCIQIBb9rgEiFiAO/VEiDkEZ/asBIA5BB/2tAf1QIg79rgEiGCAj/a4BIBggDP1RIgxBEP2rASAMQRD9rQH9UCIMIBX9rgEiFSAO/VEiDkEU/asBIA5BDP2tAf1QIg79rgEiGCAM/VEiDEEY/asBIAxBCP2tAf1QIgwgFf2uASIVIA79USIOQRn9qwEgDkEH/a0B/VAiDv2uASIoICf9rgEgKCAXIBP9rgEgDyAK/VEiCkEZ/asBIApBB/2tAf1QIgr9rgEiDyAr/a4BIA8gEP1RIg9BEP2rASAPQRD9rQH9UCIPIA0gFP2uASIN/a4BIhQgCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhAgD/1RIg9BGP2rASAPQQj9rQH9UCIP/VEiF0EQ/asBIBdBEP2tAf1QIhcgGiAi/a4BIA0gCf1RIglBGf2rASAJQQf9rQH9UCIJ/a4BIg0gEv2uASANIAv9USILQRD9qwEgC0EQ/a0B/VAiCyAW/a4BIg0gCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhogC/1RIgtBGP2rASALQQj9rQH9UCILIA39rgEiDf2uASIWIA79USIOQRT9qwEgDkEM/a0B/VAiDv2uASIoIB79rgEgECAd/a4BICYgH/1RIhBBGP2rASAQQQj9rQH9UCIQIBz9rgEiHCAR/VEiEUEZ/asBIBFBB/2tAf1QIhH9rgEiHyAT/a4BIB8gC/1RIgtBEP2rASALQRD9rQH9UCILIBX9rgEiFSAR/VEiEUEU/asBIBFBDP2tAf1QIhH9rgEiHyAL/VEiC0EY/asBIAtBCP2tAf1QIgsgFf2uASIVIBH9USIRQRn9qwEgEUEH/a0B/VAiEf2uASImICv9rgEgJiAYICT9rgEgDSAJ/VEiCUEZ/asBIAlBB/2tAf1QIgn9rgEiDSAS/a4BIA0gEP1RIg1BEP2rASANQRD9rQH9UCINIA8gFP2uASIP/a4BIhQgCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhAgDf1RIg1BGP2rASANQQj9rQH9UCIN/VEiGEEQ/asBIBhBEP2tAf1QIhggGiAg/a4BIA8gCv1RIgpBGf2rASAKQQf9rQH9UCIK/a4BIg8gKv2uASAPIAz9USIMQRD9qwEgDEEQ/a0B/VAiDCAc/a4BIg8gCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhogDP1RIgxBGP2rASAMQQj9rQH9UCIMIA/9rgEiD/2uASIcIBH9USIRQRT9qwEgEUEM/a0B/VAiEf2uASImIB39rgEgECAj/a4BICggF/1RIhBBGP2rASAQQQj9rQH9UCIQIBb9rgEiFiAO/VEiDkEZ/asBIA5BB/2tAf1QIg79rgEiFyAl/a4BIBcgDP1RIgxBEP2rASAMQRD9rQH9UCIMIBX9rgEiFSAO/VEiDkEU/asBIA5BDP2tAf1QIg79rgEiFyAM/VEiDEEY/asBIAxBCP2tAf1QIgwgFf2uASIVIA79USIOQRn9qwEgDkEH/a0B/VAiDv2uASIoICT9rgEgKCAfICL9rgEgDyAK/VEiCkEZ/asBIApBB/2tAf1QIgr9rgEiDyAp/a4BIA8gEP1RIg9BEP2rASAPQRD9rQH9UCIPIA0gFP2uASIN/a4BIhQgCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhAgD/1RIg9BGP2rASAPQQj9rQH9UCIP/VEiH0EQ/asBIB9BEP2tAf1QIh8gGiAZ/a4BIA0gCf1RIglBGf2rASAJQQf9rQH9UCIJ/a4BIg0gG/2uASANIAv9USILQRD9qwEgC0EQ/a0B/VAiCyAW/a4BIg0gCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhogC/1RIgtBGP2rASALQQj9rQH9UCILIA39rgEiDf2uASIWIA79USIOQRT9qwEgDkEM/a0B/VAiDv2uASIoICf9rgEgECAT/a4BICYgGP1RIhBBGP2rASAQQQj9rQH9UCIQIBz9rgEiHCAR/VEiEUEZ/asBIBFBB/2tAf1QIhH9rgEiGCAi/a4BIBggC/1RIgtBEP2rASALQRD9rQH9UCILIBX9rgEiFSAR/VEiEUEU/asBIBFBDP2tAf1QIhH9rgEiGCAL/VEiC0EY/asBIAtBCP2tAf1QIgsgFf2uASIVIBH9USIRQRn9qwEgEUEH/a0B/VAiEf2uASImICn9rgEgJiAXICD9rgEgDSAJ/VEiCUEZ/asBIAlBB/2tAf1QIgn9rgEiDSAb/a4BIA0gEP1RIg1BEP2rASANQRD9rQH9UCINIA8gFP2uASIP/a4BIhQgCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhAgDf1RIg1BGP2rASANQQj9rQH9UCIN/VEiF0EQ/asBIBdBEP2tAf1QIhcgGiAS/a4BIA8gCv1RIgpBGf2rASAKQQf9rQH9UCIK/a4BIg8gIf2uASAPIAz9USIMQRD9qwEgDEEQ/a0B/VAiDCAc/a4BIg8gCv1RIgpBFP2rASAKQQz9rQH9UCIK/a4BIhogDP1RIgxBGP2rASAMQQj9rQH9UCIMIA/9rgEiD/2uASIcIBH9USIRQRT9qwEgEUEM/a0B/VAiEf2uASImIBP9rgEgECAl/a4BICggH/1RIhNBGP2rASATQQj9rQH9UCITIBb9rgEiECAO/VEiFkEZ/asBIBZBB/2tAf1QIhb9rgEiDiAe/a4BIA4gDP1RIgxBEP2rASAMQRD9rQH9UCIMIBX9rgEiDiAW/VEiFkEU/asBIBZBDP2tAf1QIhb9rgEiFSAM/VEiDEEY/asBIAxBCP2tAf1QIgwgDv2uASIOIBb9USIWQRn9qwEgFkEH/a0B/VAiFv2uASIfICD9rgEgHyAYIBn9rgEgDyAK/VEiIEEZ/asBICBBB/2tAf1QIiD9rgEiCiAq/a4BIAogE/1RIhNBEP2rASATQRD9rQH9UCITIA0gFP2uASIK/a4BIg8gIP1RIiBBFP2rASAgQQz9rQH9UCIg/a4BIg0gE/1RIhNBGP2rASATQQj9rQH9UCIT/VEiFEEQ/asBIBRBEP2tAf1QIhQgGiAr/a4BIAogCf1RIglBGf2rASAJQQf9rQH9UCIJ/a4BIgogI/2uASAKIAv9USIKQRD9qwEgCkEQ/a0B/VAiCiAQ/a4BIgsgCf1RIglBFP2rASAJQQz9rQH9UCIJ/a4BIhogCv1RIgpBGP2rASAKQQj9rQH9UCIKIAv9rgEiC/2uASIQIBb9USIWQRT9qwEgFkEM/a0B/VAiFv2uASIYICT9rgEgDSAi/a4BICYgF/1RIiJBGP2rASAiQQj9rQH9UCIiIBz9rgEiJCAR/VEiDUEZ/asBIA1BB/2tAf1QIg39rgEiHCAZ/a4BIBwgCv1RIhlBEP2rASAZQRD9rQH9UCIZIA79rgEiCiAN/VEiDUEU/asBIA1BDP2tAf1QIg39rgEiHCAZ/VEiGUEY/asBIBlBCP2tAf1QIhkgCv2uASIKIA39USINQRn9qwEgDUEH/a0B/VAiDf2uASIOICr9rgEgDiAVIBL9rgEgCyAJ/VEiEkEZ/asBIBJBB/2tAf1QIhL9rgEiKiAj/a4BICogIv1RIiNBEP2rASAjQRD9rQH9UCIjIBMgD/2uASIi/a4BIiogEv1RIhJBFP2rASASQQz9rQH9UCIS/a4BIhMgI/1RIiNBGP2rASAjQQj9rQH9UCIj/VEiCUEQ/asBIAlBEP2tAf1QIgkgGiAb/a4BICIgIP1RIhtBGf2rASAbQQf9rQH9UCIb/a4BIiIgHf2uASAiIAz9USIdQRD9qwEgHUEQ/a0B/VAiHSAk/a4BIiIgG/1RIhtBFP2rASAbQQz9rQH9UCIb/a4BIiQgHf1RIh1BGP2rASAdQQj9rQH9UCIgICL9rgEiIv2uASIdIA39USIMQRT9qwEgDEEM/a0B/VAiDP2uASILIAn9USIJQRj9qwEgCUEI/a0B/VAiCSAd/a4BIg8gDP1RIh1BGf2rASAdQQf9rQH9UCAkICn9rgEgIyAq/a4BIikgEv1RIhJBGf2rASASQQf9rQH9UCIS/a4BIh0gJf2uASAdIBn9USIZQRD9qwEgGUEQ/a0B/VAiGSAYIBT9USIdQRj9qwEgHUEI/a0B/VAiIyAQ/a4BIiX9rgEiJCAS/VEiEkEU/asBIBJBDP2tAf1QIir9rgEiDCAZ/VEiGUEY/asBIBlBCP2tAf1QIhn9USEdIBMgHv2uASAlIBb9USISQRn9qwEgEkEH/a0B/VAiEv2uASIeICf9rgEgHiAg/VEiHkEQ/asBIB5BEP2tAf1QIh4gCv2uASIlIBL9USISQRT9qwEgEkEM/a0B/VAiEv2uASIgIB79USIeQRj9qwEgHkEI/a0B/VAiHiAl/a4BIhMgEv1RIhJBGf2rASASQQf9rQH9UCAcICv9rgEgIiAb/VEiG0EZ/asBIBtBB/2tAf1QIhv9rgEiEiAh/a4BIBIgI/1RIhJBEP2rASASQRD9rQH9UCISICn9rgEiKyAb/VEiG0EU/asBIBtBDP2tAf1QIhv9rgEiKSAS/VEiEkEY/asBIBJBCP2tAf1QIiP9USESIBkgJP2uASIZICr9USIlQRn9qwEgJUEH/a0B/VAgCf1RISUgIyAr/a4BIiMgG/1RIhtBGf2rASAbQQf9rQH9UCAe/VEhJCAPIAz9USEiIBMgKf1RISsgIyAg/VEhIyAZIAv9USEbIAUhBCA1IAJBQGsiAkcNAAsgCCASIB39DQgJCgsYGRobDA0ODxwdHh8iGSAkICX9DQgJCgsYGRobDA0ODxwdHh8iKf0NCAkKCwwNDg8YGRobHB0eH/0LAHAgCCAbICv9DQgJCgsYGRobDA0ODxwdHh8iHiAiICP9DQgJCgsYGRobDA0ODxwdHh8iIP0NCAkKCwwNDg8YGRobHB0eH/0LAGAgCCAZICn9DQABAgMEBQYHEBESExQVFhf9CwBQIAggHiAg/Q0AAQIDBAUGBxAREhMUFRYX/QsAQCAIIBIgHf0NAAECAxAREhMEBQYHFBUWFyIZICQgJf0NAAECAxAREhMEBQYHFBUWFyIS/Q0ICQoLDA0ODxgZGhscHR4f/QsAMCAIIBsgK/0NAAECAxAREhMEBQYHFBUWFyIbICIgI/0NAAECAxAREhMEBQYHFBUWFyIr/Q0ICQoLDA0ODxgZGhscHR4f/QsAICAIIBkgEv0NAAECAwQFBgcQERITFBUWF/0LABAgCCAbICv9DQABAgMEBQYHEBESExQVFhf9CwAAC8AgAg5/B34jAEEgayIHJAAgACgCDCIDQQA2AgggACgCECEEIAAoAhQiAiADKAIASwRAIANBACACECcgAygCCCEKCyACBEAgAygCBCAKaiAEIAL8CgAACyADIAMoAgggAmo2AgggACgCGCECQQMhBSABQf8BcSIEQQpPBEAgAiAEQfsobEETdiIBQZx/bCAEakEBdC8BupRAOwABQQEhBQtBACAEIAFB/wFxG0UEQCACIAVBAWsiBWogAUEwajoAAAsgBUEDcyIBIAMoAgAgAygCCCIKa0sEQCADIAogARAnIAMoAgghCgsgAQRAIAMoAgQgCmogAiAFaiAB/AoAAAsgAyADKAIIIAFqIgE2AgggACgCHCgCACENAkAgAUUEQEKlxoihyJyn+UshEAwBCyADKAIEIgIgAWohCEKlxoihyJyn+UshEANAAn8gAiwAACIBQQBOBEAgAUH/AXEhBSACQQFqDAELIAItAAFBP3EhBCABQR9xIQMgAUFfTQRAIANBBnQgBHIhBSACQQJqDAELIAItAAJBP3EgBEEGdHIhBCABQXBJBEAgBCADQQx0ciEFIAJBA2oMAQsgA0ESdEGAgPAAcSACLQADQT9xIARBBnRyciEFIAJBBGoLIQIgECAFrYVCs4OAgIAgfiEQIAIgCEcNAAsLQQEhCEEBIQoCQAJAAkACQCANQQNsQQNqIg9BAnYgD0EDcUEAR2oiA0EHakH4////B3EiAQRAIAEQByIKRQ0BCyAHQQA2AgggByAKNgIEIAcgATYCAAJAAkAgD0UEQEEAIQIMAQsgEELrh9aF6Mih5OEAfSEQQQAhAgNAIBBCHoggEIVCucuT59Htkay/f34iEUIbiCARhULro8SZsbeS6JR/fiIRQh+IIBGFIhJCOIYgEkKA/gODQiiGhCASQoCA/AeDQhiGIBJCgICA+A+DQgiGhIQgEkIIiEKAgID4D4MgEUIYiEKAgPwHg4QgEUIoiEKA/gODIBFCOIiEhIQhESAHKAIAIAJrQQdLBH8gAgUgByACQQgQJyAHKAIEIQogBygCCAshBSAFIApqIBE3AAAgByAFQQhqIgI2AgggEELrh9aF6Mih5OEAfSEQIAIgA0kNAAtBAiEKIAJBA24iAUECdCEGAkACQAJAIAFBfWwgAmoOAgIBAAtBAyEKCyAGIApyIQYLIAZBAEgNAyAHKAIEIQogBhAHIghFDQQgCEEEay0AAEEDcUUgBkVyRQRAIAhBACAG/AsACyAFQRNPDQELQQAhAwwECyACQRprIgFBACABIAJNGyEMQQAhAQNAIAIgCUEaakkEQCAJIAVBBmoiACAAQRhwa0EaaiACQcSMwAAQHQALIAYgAUEgaiIDTwRAIAEgCGoiASAJIApqIgQpAAAiEEI4hiISQjqIpy0A44hAOgAAIAFBBGogEEKAgID4D4NCCIYiE0IiiKctAOOIQDoAACABQQhqIARBBmopAAAiEUI4hiIUQjqIpy0A44hAOgAAIAFBDGogEUKAgID4D4NCCIYiFUIiiKctAOOIQDoAACABQQFqIBIgEEKA/gODQiiGhCISQjSIp0E/cS0A44hAOgAAIAFBB2ogEEIIiEKAgID4D4MgEEIYiEKAgPwHg4QgEEIoiEKA/gODIBBCOIiEhCIWpyILQRB2QT9xLQDjiEA6AAAgAUEGaiALQRZ2QT9xLQDjiEA6AAAgAUEDaiASIBBCgID8B4NCGIYgE4SEIhBCKIinQT9xLQDjiEA6AAAgAUECaiAQQi6Ip0E/cS0A44hAOgAAIAFBCWogFCARQoD+A4NCKIaEIhJCNIinQT9xLQDjiEA6AAAgAUEFaiAQIBaEQhyIp0E/cS0A44hAOgAAIAFBD2ogEUIIiEKAgID4D4MgEUIYiEKAgPwHg4QgEUIoiEKA/gODIBFCOIiEhCITpyILQRB2QT9xLQDjiEA6AAAgAUEOaiALQRZ2QT9xLQDjiEA6AAAgAUELaiASIBFCgID8B4NCGIYgFYSEIhBCKIinQT9xLQDjiEA6AAAgAUEKaiAQQi6Ip0E/cS0A44hAOgAAIAFBDWogECAThEIciKdBP3EtAOOIQDoAACABQRdqIARBDGopAAAiEEIIiEKAgID4D4MgEEIYiEKAgPwHg4QgEEIoiEKA/gODIBBCOIiEhCIRpyILQRB2QT9xLQDjiEA6AAAgAUEWaiALQRZ2QT9xLQDjiEA6AAAgAUEVaiARIBBCOIYiESAQQoD+A4NCKIaEIhIgEEKAgID4D4NCCIYiEyAQQoCA/AeDQhiGhIQiEIRCHIinQT9xLQDjiEA6AAAgAUEUaiATQiKIpy0A44hAOgAAIAFBE2ogEEIoiKdBP3EtAOOIQDoAACABQRJqIBBCLoinQT9xLQDjiEA6AAAgAUERaiASQjSIp0E/cS0A44hAOgAAIAFBEGogEUI6iKctAOOIQDoAACABQRhqIARBEmopAAAiEEI4hiIRQjqIpy0A44hAOgAAIAFBHGogEEKAgID4D4NCCIYiEkIiiKctAOOIQDoAACABQRlqIBEgEEKA/gODQiiGhCIRQjSIp0E/cS0A44hAOgAAIAFBH2ogEEIIiEKAgID4D4MgEEIYiEKAgPwHg4QgEEIoiEKA/gODIBBCOIiEhCITpyIEQRB2QT9xLQDjiEA6AAAgAUEeaiAEQRZ2QT9xLQDjiEA6AAAgAUEbaiARIBBCgID8B4NCGIYgEoSEIhBCKIinQT9xLQDjiEA6AAAgAUEaaiAQQi6Ip0E/cS0A44hAOgAAIAFBHWogECAThEIciKdBP3EtAOOIQDoAACADIQEgCUEYaiIJIAxLDQUMAQsLIAEgAyAGQbSMwAAQHQALQQEgARBKAAsQUgALQQEgBhBKAAsCQAJAAkACQAJAAn8CQAJAAkACQCACIAJBA3AiDGsiBSAJTQRAIAMhBAwBCwNAIAIgCUEDaiIBSQRAIAkgASACQaSMwAAQHQALIANBBGoiBCAGSw0CIAMgCGoiAyAJIApqIgktAAAiC0ECdi0A44hAOgAAIANBA2ogCUECai0AACIOQT9xQeOIwABqLQAAOgAAIANBAmogCUEBai0AACIJQQJ0IA5BBnZyQT9xQeOIwABqLQAAOgAAIANBAWogC0EEdCAJQQR2ckE/cUHjiMAAai0AADoAACAEIQMgASIJIAVJDQALCyAMQQFrDgIBAgQLIAMgBCAGQZSMwAAQHQALIAQgBkkEQCAEIAhqIAUgCmotAAAiAUECdi0A44hAOgAAIAFBBHRBMHEgBiAEQQFqIgJLDQIaIAIgBkGEjMAAEDcACyAEIAZB9IvAABA3AAsgBCAGTw0EIAQgCGogBSAKaiIDLQAAIgJBAnYtAOOIQDoAACAEQQFqIgEgBk8NAyABIAhqIAJBBHQgAy0AASIBQQR2ckE/cUHjiMAAai0AADoAACAEQQJqIgIgBk8NAiABQQJ0QTxxCyEFIAIgCGogBS0A44hAOgAACyAGRQ0DIAZBB2siAUEAIAEgBk0bIQwgCEEDakF8cSAIayELQQAhAgNAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAIAIgCGotAAAiBcAiCUEASARAQYACIQNBASEEIAUtAMWRQEECaw4DBwIBCQsgCyACa0EDcQ0JIAIgDE8NCgNAIAIgCGoiAUEEaigCACABKAIAckGAgYKEeHENCyACQQhqIgIgDEkNAAsMCgtBACEDIAYgAkEBaiIBTQRAQQAhBAwICyABIAhqLAAAIQECQAJAAkACQCAFQfABaw4FAQAAAAIACyAJQQ9qQf8BcUECSyABQUBOcg0EDAILIAFB8ABqQf8BcUEwTw0DDAELIAFBj39KDQILIAYgAkECaiIBTQRAQQAhBAwICyABIAhqLAAAQb9/Sg0DQQAhBCACQQNqIgUgBk8NByAFIAhqLAAAQUBIDQZBgAYMBAtBACEDIAYgAkEBaiIBTQRAQQAhBAwHCyABIAhqLAAAIQECQAJAIAVB4AFrIgQEQCAEQQ1GBEAMAgUMAwsACyABQWBxQaB/Rg0DDAILIAFBn39KDQEMAgsgCUEfakH/AXFBDE8EQCAJQX5xQW5HDQEgAUFASA0CDAELIAFBQEgNAQtBgAIMAgtBACEEIAJBAmoiBSAGTw0EIAUgCGosAABBv39MDQMLQYAECyEDQQEhBAwCCyAGIAJBAWoiBU0EQEEAIQNBACEEDAILIAUgCGosAABBv39KDQELIAVBAWohAgwDCyAHIAI2AhggByAGNgIUIAcgCDYCECAHIAY2AgwgByADIARyNgIcQZSIwABBDCAHQQxqQYSIwABBoIjAABAvAAsgAkEBaiECDAELIAIgBk8NAANAIAIgCGosAABBAEgNASAGIAJBAWoiAkcNAAsMBQsgAiAGSQ0ACwwDCyACIAZB5IvAABA3AAsgASAGQdSLwAAQNwALIAQgBkHEi8AAEDcACyAHQQA2AhQgB0KAgICAEDcCDAJAIA1FDQAgBiAIaiIMIAhHBEAgB0EMakEAIA0gDCAIayIBQQJ2IAFBA3FBAEdqIgEgASANSxsQJwsgCCECA0AgAiAMRg0BAn8CfwJAIAIsAAAiAUEASARAIAItAAFBP3EhBCABQR9xIQMgAUFfSw0BIANBBnQgBHIhBSACQQJqDAILIAJBAWohAiABQf8BcSEFQQEhBCAHKAIUIQFBAQwCCyACLQACQT9xIARBBnRyIQQgAUFwSQRAIAQgA0EMdHIhBSACQQNqDAELIANBEnRBgIDwAHEgAi0AA0E/cSAEQQZ0cnIiBUGAgMQARg0DIAJBBGoLIQJBASEEIAcoAhQhAUEBIAVBgAFJDQAaQQAhBEECIAVBgBBJDQAaQQNBBCAFQYCABEkbCyEJIAEhAyAHKAIMIAFrIAlJBH8gB0EMaiABIAkQJyAHKAIUBSADCyAHKAIQaiEDAkAgBEUEQCAFQT9xQYB/ciEEIAVBBnYhCyAFQYAQSQRAIAMgBDoAASADIAtBwAFyOgAADAILIAVBDHYhDiALQT9xQYB/ciELIAVB//8DTQRAIAMgBDoAAiADIAs6AAEgAyAOQeABcjoAAAwCCyADIAQ6AAMgAyALOgACIAMgDkE/cUGAf3I6AAEgAyAFQRJ2QXByOgAADAELIAMgBToAAAsgByABIAlqNgIUIA1BAWsiDQ0ACwsCQAJAAkACQCAPBEAgCEEEaygCACIBQXhxIgNBBEEIIAFBA3EiARsgBmpJDQEgAUEAIAMgBkEnaksbDQIgCBAMCyAHKAIAIgEEQCAKQQRrKAIAIgNBeHEiAkEEQQggA0EDcSIDGyABakkNAyADQQAgAiABQSdqSxsNBCAKEAwLIAAgACgCBCIBQQFqNgIEIAAoAgggAUEMbGoiACAHKQIMNwIAIABBCGogB0EUaigCADYCACAHQSBqJAAPC0G0lsAAQS5B5JbAABBMAAtB9JbAAEEuQaSXwAAQTAALQbSWwABBLkHklsAAEEwAC0H0lsAAQS5BpJfAABBMAAuJGwEgfyAAIAAoAhgiHSABKAAQIiQgACgCCGpqIhsgASgAFCIVaiAdIBsgAkH/AXFzQRB3IgJB8ua74wNqIh1zQRR3IhtqIiIgAnNBGHciCSAdaiIcIBtzQRl3Ig8gACgCFCIbIAEoAAgiAiAAKAIEamoiGSABKAAMIh1qIBkgA0IgiKdzQRB3Ih5B+6LhpARrIiAgG3NBFHciBmoiCiABKAAoIhtqaiIjIAEoACwiGWogDyAjIAAoAhAiISABKAAAIg8gACgCAGpqIgggASgABCIfaiAhIAggA6dzQRB3IiFB58yn0AZqIghzQRR3IgdqIg4gIXNBGHciDXNBEHciCyAAKAIcIgUgASgAGCIjIAAoAgxqaiIMIAEoABwiIWogBSAMIARB/wFxc0EQdyIEQcaVwNUFayIFc0EUdyIMaiIRIARzQRh3IhAgBWoiBWoiEnNBFHciFGoiEyAdaiAGICAgCiAec0EYdyIgaiIGc0EZdyIKIA4gASgAICIEamoiDiABKAAkIh5qIAogHCAOIBBzQRB3IhxqIgpzQRR3Ig5qIhAgHHNBGHciFiAKaiIKIA5zQRl3IhxqIg4gG2ogHCAOIAUgDHNBGXciBSAiIAEoADAiHGpqIgwgASgANCIiaiAMICBzQRB3IiAgCCANaiIIaiINIAVzQRR3IgVqIgwgIHNBGHciF3NBEHciDiAHIAhzQRl3IgggESABKAA4IiBqaiIHIAEoADwiAWogByAJc0EQdyIJIAZqIgYgCHNBFHciCGoiByAJc0EYdyIJIAZqIgZqIhFzQRR3IhhqIhogHGogCyATc0EYdyILIBJqIhIgFHNBGXciFCAMICFqaiIMIA9qIAkgDHNBEHciCSAKaiIKIBRzQRR3IgxqIhQgCXNBGHciCSAKaiIKIAxzQRl3IgxqIhMgFWogDCATIAYgCHNBGXciBiACIBBqaiIIICNqIAYgCCALc0EQdyIGIA0gF2oiCGoiDXNBFHciC2oiDCAGc0EYdyIGc0EQdyIQIAUgCHNBGXciCCAHICRqaiIHICJqIAggByAWc0EQdyIIIBJqIgdzQRR3IgVqIhIgCHNBGHciCCAHaiIHaiITc0EUdyIWaiIXIBtqIA4gGnNBGHciDiARaiIRIBhzQRl3IhggDCAfamoiDCAZaiAKIAggDHNBEHciCmoiCCAYc0EUdyIMaiIYIApzQRh3IgogCGoiCCAMc0EZdyIMaiIaIBxqIAwgGiAFIAdzQRl3IgcgFCAeamoiBSAgaiAHIAUgDnNBEHciByAGIA1qIgZqIg5zQRR3Ig1qIgUgB3NBGHciB3NBEHciDCAGIAtzQRl3IgYgASASamoiCyAEaiAGIAkgC3NBEHciCSARaiIGc0EUdyILaiIRIAlzQRh3IgkgBmoiBmoiEnNBFHciFGoiGiAeaiAQIBdzQRh3IhAgE2oiEyAWc0EZdyIWIAUgImpqIgUgAmogBSAJc0EQdyIJIAhqIgggFnNBFHciBWoiFiAJc0EYdyIJIAhqIgggBXNBGXciBWoiFyAPaiAFIBcgBiALc0EZdyIGIBggHWpqIgsgJGogBiALIBBzQRB3IgYgByAOaiIHaiIOc0EUdyILaiIFIAZzQRh3IgZzQRB3IhAgByANc0EZdyIHIBEgIWpqIg0gIGogByAKIA1zQRB3IgogE2oiB3NBFHciDWoiESAKc0EYdyIKIAdqIgdqIhNzQRR3IhdqIhggHGogDCAac0EYdyIMIBJqIhIgFHNBGXciFCAFICNqaiIFIBVqIAUgCnNBEHciCiAIaiIIIBRzQRR3IgVqIhQgCnNBGHciCiAIaiIIIAVzQRl3IgVqIhogHmogBSAaIAcgDXNBGXciByAWIBlqaiINIAFqIAcgDCANc0EQdyIHIAYgDmoiBmoiDnNBFHciDWoiBSAHc0EYdyIHc0EQdyIMIAYgC3NBGXciBiAEIBFqaiILIB9qIAYgCSALc0EQdyIJIBJqIgZzQRR3IgtqIhEgCXNBGHciCSAGaiIGaiISc0EUdyIWaiIaIBlqIBAgGHNBGHciECATaiITIBdzQRl3IhcgBSAgamoiBSAdaiAFIAlzQRB3IgkgCGoiCCAXc0EUdyIFaiIXIAlzQRh3IgkgCGoiCCAFc0EZdyIFaiIYIAJqIAUgGCAGIAtzQRl3IgYgFCAbamoiCyAhaiAGIAsgEHNBEHciBiAHIA5qIgdqIg5zQRR3IgtqIgUgBnNBGHciBnNBEHciECAHIA1zQRl3IgcgESAiamoiDSABaiAHIAogDXNBEHciCiATaiIHc0EUdyINaiIRIApzQRh3IgogB2oiB2oiFHNBFHciE2oiGCAeaiAMIBpzQRh3IgwgEmoiEiAWc0EZdyIWIAUgJGpqIgUgD2ogBSAKc0EQdyIKIAhqIgggFnNBFHciBWoiFiAKc0EYdyIKIAhqIgggBXNBGXciBWoiGiAZaiAFIBogByANc0EZdyIHIBUgF2pqIg0gBGogByAMIA1zQRB3IgcgBiAOaiIGaiIOc0EUdyINaiIFIAdzQRh3IgdzQRB3IgwgBiALc0EZdyIGIBEgH2pqIgsgI2ogBiAJIAtzQRB3IgkgEmoiBnNBFHciC2oiESAJc0EYdyIJIAZqIgZqIhJzQRR3IhdqIhogFWogECAYc0EYdyIQIBRqIhQgE3NBGXciEyABIAVqaiIFIBtqIAUgCXNBEHciCSAIaiIIIBNzQRR3IgVqIhMgCXNBGHciCSAIaiIIIAVzQRl3IgVqIhggHWogBSAYIAYgC3NBGXciBiAWIBxqaiILICJqIAYgCyAQc0EQdyIGIAcgDmoiB2oiDnNBFHciC2oiBSAGc0EYdyIGc0EQdyIQIAcgDXNBGXciByARICBqaiINIARqIAcgCiANc0EQdyIKIBRqIgdzQRR3Ig1qIhEgCnNBGHciCiAHaiIHaiIUc0EUdyIWaiIYIBlqIAwgGnNBGHciDCASaiISIBdzQRl3IhcgBSAhamoiBSACaiAFIApzQRB3IgogCGoiCCAXc0EUdyIFaiIXIApzQRh3IgogCGoiCCAFc0EZdyIFaiIaIBVqIAUgGiAHIA1zQRl3IgcgDyATamoiDSAfaiAHIAwgDXNBEHciByAGIA5qIgZqIg5zQRR3Ig1qIgUgB3NBGHciB3NBEHciDCAGIAtzQRl3IgYgESAjamoiCyAkaiAGIAkgC3NBEHciCSASaiIGc0EUdyILaiIRIAlzQRh3IgkgBmoiBmoiEnNBFHciE2oiGiAPaiAQIBhzQRh3IhAgFGoiFCAWc0EZdyIWIAQgBWpqIgUgHGogBSAJc0EQdyIJIAhqIgggFnNBFHciBWoiFiAJc0EYdyIJIAhqIgggBXNBGXciBWoiGCAbaiAFIBggBiALc0EZdyIGIBcgHmpqIgsgIGogBiALIBBzQRB3IgYgByAOaiIHaiIOc0EUdyILaiIFIAZzQRh3IgZzQRB3IhAgByANc0EZdyIHIAEgEWpqIg0gH2ogByAKIA1zQRB3IgogFGoiB3NBFHciDWoiESAKc0EYdyIKIAdqIgdqIhRzQRR3IhdqIhggFWogDCAac0EYdyIVIBJqIgwgE3NBGXciEiAFICJqaiIFIB1qIAUgCnNBEHciCiAIaiIIIBJzQRR3IgVqIhIgCnNBGHciCiAIaiIIIAVzQRl3IgVqIhMgD2ogBSATIAcgDXNBGXciDyACIBZqaiIHICNqIA8gByAVc0EQdyIVIAYgDmoiD2oiBnNBFHciB2oiDiAVc0EYdyIVc0EQdyINIAsgD3NBGXciDyARICRqaiILICFqIA8gCSALc0EQdyIPIAxqIglzQRR3IgtqIgUgD3NBGHciDyAJaiIJaiIMc0EUdyIRaiITIAJqIB4gECAYc0EYdyICIBRqIh4gF3NBGXciECAOIB9qaiIfaiAPIB9zQRB3Ig8gCGoiHyAQc0EUdyIIaiIOIA9zQRh3Ig8gH2oiHyAIc0EZdyIIaiIQIBxqIBAgASAJIAtzQRl3IgEgEiAZamoiGWogASACIBlzQRB3IgEgBiAVaiICaiIVc0EUdyIZaiIcIAFzQRh3IgFzQRB3IgkgAiAHc0EZdyICIAQgBWpqIgQgI2ogAiAEIApzQRB3IgIgHmoiBHNBFHciI2oiHiACc0EYdyICIARqIgRqIgYgCHNBFHciCmoiCCAJc0EYdyIJIAZqIgYgASAVaiIBIBlzQRl3IhUgHiAhamoiGSAiaiAVIA8gGXNBEHciFSANIBNzQRh3IhkgDGoiD2oiIXNBFHciHmoiInM2AgwgACAbIA8gEXNBGXciDyAcICBqaiIcaiACIBxzQRB3IgIgH2oiGyAPc0EUdyIPaiIfIAJzQRh3IgIgG2oiGyAkIAQgI3NBGXciBCAOIB1qaiIdaiAEIAEgGSAdc0EQdyIBaiIEc0EUdyIkaiIdczYCCCAAIBUgInNBGHciFSAhaiIZIAhzNgIEIAAgASAdc0EYdyIBIARqIgQgH3M2AgAgACAEICRzQRl3IAJzNgIcIAAgBiAKc0EZdyAVczYCGCAAIA8gG3NBGXcgAXM2AhQgACAZIB5zQRl3IAlzNgIQC/kjAQh/AkACQAJAAkACQAJAIABB9QFPBEAgAEHM/3tLBEBBAA8LIABBC2oiAUF4cSEFQfSawAAoAgAiCEUNBEEfIQdBACAFayEDIABB9P//B00EQCAFQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qIQcLIAdBAnRB2JfAAGooAgAiAkUEQEEAIQFBACEADAILQQAhASAFQRkgB0EBdmtBACAHQR9HG3QhBEEAIQADQAJAIAIoAgRBeHEiBiAFSQ0AIAYgBWsiBiADTw0AIAIhASAGIgMNAEEAIQMgASEADAQLIAIoAhQiBiAAIAYgAiAEQR12QQRxaigCECICRxsgACAGGyEAIARBAXQhBCACDQALDAELAkACQAJAAkACQEHwmsAAKAIAIgJBECAAQQtqQfgDcSAAQQtJGyIFQQN2IgB2IgFBA3EEQCABQX9zQQFxIABqIgZBA3QiAEHomMAAaiIEIABB8JjAAGooAgAiASgCCCIDRg0BIAMgBDYCDCAEIAM2AggMAgsgBUH4msAAKAIATQ0IIAENAkH0msAAKAIAIgBFDQggAGhBAnRB2JfAAGooAgAiAigCBEF4cSAFayEDIAIhAQNAAkAgASgCECIADQAgASgCFCIADQAgAigCGCEHAkACQCACIAIoAgwiAEYEQCACQRRBECACKAIUIgAbaigCACIBDQFBACEADAILIAIoAggiASAANgIMIAAgATYCCAwBCyACQRRqIAJBEGogABshBANAIAQhBiABIgBBFGogAEEQaiAAKAIUIgEbIQQgAEEUQRAgARtqKAIAIgENAAsgBkEANgIACyAHRQ0GAkAgAigCHEECdEHYl8AAaiIBKAIAIAJHBEAgAiAHKAIQRwRAIAcgADYCFCAADQIMCQsgByAANgIQIAANAQwICyABIAA2AgAgAEUNBgsgACAHNgIYIAIoAhAiAQRAIAAgATYCECABIAA2AhgLIAIoAhQiAUUNBiAAIAE2AhQgASAANgIYDAYLIAAoAgRBeHEgBWsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAAsAC0HwmsAAIAJBfiAGd3E2AgALIAEgAEEDcjYCBCAAIAFqIgAgACgCBEEBcjYCBCABQQhqDwsCQEECIAB0IgRBACAEa3IgASAAdHFoIgZBA3QiAUHomMAAaiIEIAFB8JjAAGooAgAiACgCCCIDRwRAIAMgBDYCDCAEIAM2AggMAQtB8JrAACACQX4gBndxNgIACyAAIAVBA3I2AgQgACAFaiIHIAEgBWsiBkEBcjYCBCAAIAFqIAY2AgBB+JrAACgCACICBEBBgJvAACgCACEBAkBB8JrAACgCACIEQQEgAkEDdnQiA3FFBEBB8JrAACADIARyNgIAIAJBeHFB6JjAAGoiAyEEDAELIAJBeHEiAkHomMAAaiEEIAJB8JjAAGooAgAhAwsgBCABNgIIIAMgATYCDCABIAQ2AgwgASADNgIIC0GAm8AAIAc2AgBB+JrAACAGNgIADAcLQfSawABB9JrAACgCAEF+IAIoAhx3cTYCAAsCQAJAIANBEE8EQCACIAVBA3I2AgQgAiAFaiIGIANBAXI2AgQgAyAGaiADNgIAQfiawAAoAgAiAUUNAUGAm8AAKAIAIQACQEHwmsAAKAIAIgRBASABQQN2dCIHcUUEQEHwmsAAIAQgB3I2AgAgAUF4cUHomMAAaiIEIQEMAQsgAUF4cSIEQeiYwABqIQEgBEHwmMAAaigCACEECyABIAA2AgggBCAANgIMIAAgATYCDCAAIAQ2AggMAQsgAiADIAVqIgBBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMAQtBgJvAACAGNgIAQfiawAAgAzYCAAsgAkEIaiIARQ0DDAQLIAAgAXJFBEBBACEBQQIgB3QiAEEAIABrciAIcSIARQ0DIABoQQJ0QdiXwABqKAIAIQALIABFDQELA0AgAyAAKAIEQXhxIgQgBWsiAiADIAIgA0kiBhsgBCAFSSIEGyEDIAEgACABIAYbIAQbIQEgACgCECICBH8gAgUgACgCFAsiAA0ACwsgAUUNACAFQfiawAAoAgAiAE0gAyAAIAVrT3ENACABKAIYIQcCQAJAIAEgASgCDCIARgRAIAFBFEEQIAEoAhQiABtqKAIAIgINAUEAIQAMAgsgASgCCCICIAA2AgwgACACNgIIDAELIAFBFGogAUEQaiAAGyEEA0AgBCEGIAIiAEEUaiAAQRBqIAAoAhQiAhshBCAAQRRBECACG2ooAgAiAg0ACyAGQQA2AgALAkAgB0UNAAJAAkAgASgCHEECdEHYl8AAaiICKAIAIAFHBEAgASAHKAIQRwRAIAcgADYCFCAADQIMBAsgByAANgIQIAANAQwDCyACIAA2AgAgAEUNAQsgACAHNgIYIAEoAhAiAgRAIAAgAjYCECACIAA2AhgLIAEoAhQiAkUNASAAIAI2AhQgAiAANgIYDAELQfSawABB9JrAACgCAEF+IAEoAhx3cTYCAAsCQCADQRBPBEAgASAFQQNyNgIEIAEgBWoiACADQQFyNgIEIAAgA2ogAzYCACADQYACTwRAIAAgAxAbDAILAkBB8JrAACgCACICQQEgA0EDdnQiBHFFBEBB8JrAACACIARyNgIAIANB+AFxQeiYwABqIgMhAgwBCyADQfgBcSIEQeiYwABqIQIgBEHwmMAAaigCACEDCyACIAA2AgggAyAANgIMIAAgAjYCDCAAIAM2AggMAQsgASADIAVqIgBBA3I2AgQgACABaiIAIAAoAgRBAXI2AgQLIAFBCGoiAA0BCwJAAkACQAJAAkAgBUH4msAAKAIAIgFLBEAgBUH8msAAKAIAIgBPBEAgBUGvgARqIgFBEHZAACICQX9GBEBBAA8LQQAhACACQRB0IgJFDQdBiJvAACABQYCAfHEiAEEQayAAIAJBACAAa0YbIgFBiJvAACgCAGoiADYCAEGMm8AAIABBjJvAACgCACIEIAAgBEsbNgIAAkACQEGEm8AAKAIAIgQEQEHYmMAAIQADQCAAKAIAIgMgACgCBCIGaiACRg0CIAAoAggiAA0ACwwCC0GUm8AAKAIAIgBBACAAIAJNG0UEQEGUm8AAIAI2AgALQZibwABB/x82AgBB3JjAACABNgIAQdiYwAAgAjYCAEH0mMAAQeiYwAA2AgBB/JjAAEHwmMAANgIAQfCYwABB6JjAADYCAEGEmcAAQfiYwAA2AgBB+JjAAEHwmMAANgIAQYyZwABBgJnAADYCAEGAmcAAQfiYwAA2AgBBlJnAAEGImcAANgIAQYiZwABBgJnAADYCAEGcmcAAQZCZwAA2AgBBkJnAAEGImcAANgIAQaSZwABBmJnAADYCAEGYmcAAQZCZwAA2AgBBrJnAAEGgmcAANgIAQaCZwABBmJnAADYCAEHkmMAAQQA2AgBBtJnAAEGomcAANgIAQaiZwABBoJnAADYCAEGwmcAAQaiZwAA2AgBBvJnAAEGwmcAANgIAQbiZwABBsJnAADYCAEHEmcAAQbiZwAA2AgBBwJnAAEG4mcAANgIAQcyZwABBwJnAADYCAEHImcAAQcCZwAA2AgBB1JnAAEHImcAANgIAQdCZwABByJnAADYCAEHcmcAAQdCZwAA2AgBB2JnAAEHQmcAANgIAQeSZwABB2JnAADYCAEHgmcAAQdiZwAA2AgBB7JnAAEHgmcAANgIAQeiZwABB4JnAADYCAEH0mcAAQeiZwAA2AgBB/JnAAEHwmcAANgIAQfCZwABB6JnAADYCAEGEmsAAQfiZwAA2AgBB+JnAAEHwmcAANgIAQYyawABBgJrAADYCAEGAmsAAQfiZwAA2AgBBlJrAAEGImsAANgIAQYiawABBgJrAADYCAEGcmsAAQZCawAA2AgBBkJrAAEGImsAANgIAQaSawABBmJrAADYCAEGYmsAAQZCawAA2AgBBrJrAAEGgmsAANgIAQaCawABBmJrAADYCAEG0msAAQaiawAA2AgBBqJrAAEGgmsAANgIAQbyawABBsJrAADYCAEGwmsAAQaiawAA2AgBBxJrAAEG4msAANgIAQbiawABBsJrAADYCAEHMmsAAQcCawAA2AgBBwJrAAEG4msAANgIAQdSawABByJrAADYCAEHImsAAQcCawAA2AgBB3JrAAEHQmsAANgIAQdCawABByJrAADYCAEHkmsAAQdiawAA2AgBB2JrAAEHQmsAANgIAQeyawABB4JrAADYCAEHgmsAAQdiawAA2AgBBhJvAACACNgIAQeiawABB4JrAADYCAEH8msAAIAFBKGsiADYCACACIABBAXI2AgQgACACakEoNgIEQZCbwABBgICAATYCAAwICyACIARNIAMgBEtyDQAgACgCDEUNAwtB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aiEAIAEgA2siAUGAm8AAKAIARgRAIAIoAgRBA3FBA0cNAUH4msAAIAA2AgAgAiACKAIEQX5xNgIEIAEgAEEBcjYCBCACIAA2AgAPCyABIAMQGQsCQAJAAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkGEm8AAKAIARg0CIAJBgJvAACgCAEYNAyACIANBeHEiAhAZIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQYCbwAAoAgBHDQFB+JrAACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQJBHyECIAFCADcCECAAQf///wdNBEAgAEEmIABBCHZnIgJrdkEBcSACQQF0a0E+aiECCyABIAI2AhwgAkECdEHYl8AAaiEDQQEgAnQiBEH0msAAKAIAcQ0DIAMgATYCACABIAM2AhggASABNgIMIAEgATYCCEH0msAAQfSawAAoAgAgBHI2AgAMBAtBhJvAACABNgIAQfyawABB/JrAACgCACAAaiIANgIAIAEgAEEBcjYCBEGAm8AAKAIAIAFGBEBB+JrAAEEANgIAQYCbwABBADYCAAsgAEGQm8AAKAIAIgJNDQVBhJvAACgCACIARQ0FQfyawAAoAgAiA0EpSQ0EQdiYwAAhAQNAIAAgASgCACIFTwRAIAAgBSABKAIEakkNBgsgASgCCCEBDAALAAtBgJvAACABNgIAQfiawABB+JrAACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAPCwJAQfCawAAoAgAiAkEBIABBA3Z0IgNxRQRAQfCawAAgAiADcjYCACAAQfgBcUHomMAAaiIAIQIMAQsgAEH4AXEiAEHomMAAaiECIABB8JjAAGooAgAhAAsgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwsCQAJAIAAgAygCACIDKAIEQXhxRgRAIAMhAgwBCyAAQRkgAkEBdmtBACACQR9HG3QhBANAIAMgBEEddkEEcWoiBSgCECICRQ0CIARBAXQhBCACIQMgAigCBEF4cSAARw0ACwsgAigCCCIAIAE2AgwgAiABNgIIIAFBADYCGCABIAI2AgwgASAANgIIDAELIAVBEGogATYCACABIAM2AhggASABNgIMIAEgATYCCAtBACEBQZibwABBmJvAACgC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AyACQRBqEBhFDQFBAQwCC0EBIAEoAgBBlpHAAEECIAEoAgQoAgwRAAANARogAyABEBgMAQsgAigCEEGZkcAAQQIgAigCFCgCDBEAAAshACADQQFqIQMgBEEBayIEDQALC0EBIQMgAEUEQCABKAIAQcSRwABBASABKAIEKAIMEQAAIQMLIAJBIGokACADC+cCAQV/AkAgAUHN/3tBECAAIABBEE0bIgBrTw0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEAciAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQDgwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEA4LIABBCGohAwsgAwvgAgEDfyMAQRBrIgMkAAJ/AkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENAUEDIQIgAC0AACIAIQQgAEEKTwRAIAMgACAAQeQAbiIEQeQAbGtB/wFxQQF0LwG6lEA7AAxBASECC0EAIAAgBBtFBEAgAkEBayICIANBC2pqIARBAXQtALuUQDoAAAsgAUEBQQAgA0ELaiACakEDIAJrEBIMAgsgAC0AACECQQMhAANAIAAgA2pBB2ogAkEPcUH0kMAAai0AADoAACACQf8BcSIEQQR2IQIgAEEBayEAIARBD0sNAAsgAUGEkcAAQQIgACADakEIakEDIABrEBIMAQsgAC0AACECQQMhAANAIAAgA2pBDGogAkEPcUGGkcAAai0AADoAACACQf8BcSIEQQR2IQIgAEEBayEAIARBD0sNAAsgAUGEkcAAQQIgACADakENakEDIABrEBILIANBEGokAAuCAwEEfyAAKAIMIQICQAJAAkAgAUGAAk8EQCAAKAIYIQMCQAJAIAAgAkYE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IAAgAUEBdEEBciACED0ACxgAIAEoAgAgASgCBCAAKAIAIAAoAgQQEQsWAgFvAX8gABADIQEQHCICIAEmASACCxQAIAAoAgAgASAAKAIEKAIMEQEACxAAIAEgACgCACAAKAIEEAsLFgBBtJvAACAANgIAQbCbwABBAToAAAsRAEGji8AAQSNBtIvAABA9AAsPACAAQaCRwAAgASACEBELDQAgAUGelMAAQRgQCwsMACAAIAEpAgA3AwALCQAgAEEANgIACwwAQYKWwABBMhABAAsLphcFAEGAgMAAC90MVXRmOEVycm9ydmFsaWRfdXBfdG9lcnJvcl9sZW5Gcm9tVXRmOEVycm9yYnl0ZXNlcnJvck5vbmVTb21lFnNsaWNlIGluZGV4IHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAACBpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzIMASIGJ1dCB0aGUgaW5kZXggaXMgwAAScmFuZ2Ugc3RhcnQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAQcmFuZ2UgZW5kIGluZGV4IMAiIG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIMAAEGFzc2VydGlvbiBgbGVmdCDAECByaWdodGAgZmFpbGVkOiDACQogIGxlZnQ6IMAJCiByaWdodDogwAAPQ2FwYWNpdHlFcnJvcjogwADAAjogwAAvaG9tZS91bXppLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMTQvc3JjL2V4dGVybnJlZi5ycwAvaG9tZS91bXppLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYmFzZTY0LTAuMjIuMS9zcmMvZW5naW5lL2dlbmVyYWxfcHVycG9zZS9tb2QucnMAL2hvbWUvdW16aS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Jhc2U2NC0wLjIyLjEvc3JjL2VuZ2luZS9tb2QucnMAL3J1c3RjLzRhNGVmNDkzZTNhMTQ4OGM2ZTMyMTU3MDIzODA4NGIzODk0OGY2ZGIvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTEvc3JjL2RsbWFsbG9jLnJzAC9ob21lL3VtemkvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ibGFrZTMtMS44LjMvc3JjL2xpYi5ycwAmY29weV9mcm9tX3NsaWNlOiBzb3VyY2Ugc2xpY2UgbGVuZ3RoICjAKykgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gc2xpY2UgbGVuZ3RoICjAASkAGHRoZSBzdWJ0cmVlIHN0YXJ0aW5nIGF0IMASIGNvbnRhaW5zIGF0IG1vc3QgwA4gYnl0ZXMgKGZvdW5kIMABKQAAAAAqAAAAFAAAAAQAAAArAAAASW52YWxpZCBVVEY4NAIQAF8AAAB/AAAAJAAAAF0DEAAKAAAACwAAABUAAABn5glqha5nu3Lzbjw69U+lf1IOUYxoBZur2YMfGc3gWwAAAkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV////////////////////////////////////////////////////////////8+//80NTY3ODk6Ozw9/////////wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ/////z//GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Y2FwYWNpdHkgb3ZlcmZsb3eUAhAAUAAAABwAAAAFAAAAxAEQAG8AAACWAAAADQAAAMQBEABvAAAAlwAAAA0AAADEARAAbwAAAJoAAAANAAAAxAEQAG8AAACeAAAADQAAAMQBEABvAAAAnwAAAA0AAADEARAAbwAAAIgAAAArAAAAxAEQAG8A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";
607
+
608
+ // ── Decode base64 WASM binary to ArrayBuffer (done once at module load) ───
609
+
610
+ function _b64ToBuffer(b64) {
611
+ const bin = atob(b64);
612
+ const buf = new Uint8Array(bin.length);
613
+ for (let i = 0; i < bin.length; i++) buf[i] = bin.charCodeAt(i);
614
+ return buf.buffer;
615
+ }
616
+
617
+ // ── Inline worker source ──────────────────────────────────────────────────
618
+ //
619
+ // The worker receives:
620
+ // wasmGlueSrc — glue JS as a string (avoids any URL / MIME issue)
621
+ // wasmBin — WASM bytes as ArrayBuffer (transferred, no fetch needed)
622
+
623
+ const WORKER_SRC = `
624
+ let wasmModule = null;
625
+ let wasmReady = false;
626
+ let wasmGlueSrc = null;
627
+ let wasmBin = null; // ArrayBuffer
628
+
629
+ async function initWasm() {
630
+ if (wasmReady) return;
631
+ if (!wasmGlueSrc) throw new Error("WASM glue not provided");
632
+
633
+ // Re-wrap glue source as a blob: URL — always accepted by import()
634
+ const blob = new Blob([wasmGlueSrc], { type: "application/javascript" });
635
+ const glueUrl = URL.createObjectURL(blob);
636
+
637
+ try {
638
+ const mod = await import(glueUrl);
639
+ // Pass ArrayBuffer directly — glue skips URL resolution entirely
640
+ if (typeof mod.default === "function") await mod.default(wasmBin);
641
+ wasmModule = mod;
642
+ wasmReady = true;
643
+ } finally {
644
+ URL.revokeObjectURL(glueUrl);
645
+ }
646
+ }
647
+
648
+ async function runSolve(baseUrl, configId) {
649
+ await initWasm();
650
+
651
+ const challengeRes = await fetch(baseUrl + "/" + configId + "/challenge");
652
+ if (!challengeRes.ok) throw new Error("Challenge request failed: HTTP " + challengeRes.status);
653
+
654
+ const { token, challenge_count, salt_length, difficulty } = await challengeRes.json();
655
+
656
+ self.__zaptchaProgressCb = (index, nonce) => {
657
+ self.postMessage({ type: "progress", index, nonce, total: challenge_count });
658
+ };
659
+
660
+ let solutions;
661
+ try {
662
+ solutions = wasmModule.solve_challenge(
663
+ token, difficulty, challenge_count, salt_length, self.__zaptchaProgressCb,
664
+ );
665
+ } finally {
666
+ delete self.__zaptchaProgressCb;
667
+ }
668
+
669
+ const redeemRes = await fetch(baseUrl + "/" + configId + "/redeem", {
670
+ method: "POST",
671
+ headers: { "Content-Type": "application/json" },
672
+ body: JSON.stringify({ token, solutions: Array.from(solutions) }),
673
+ });
674
+ if (!redeemRes.ok) throw new Error("Redeem request failed: HTTP " + redeemRes.status);
675
+
676
+ const { message } = await redeemRes.json();
677
+ if (!message) throw new Error("Server did not return a token");
678
+ return message;
679
+ }
680
+
681
+ self.onmessage = async function ({ data }) {
682
+ if (data.type === "init") {
683
+ wasmGlueSrc = data.wasmGlueSrc;
684
+ wasmBin = data.wasmBin; // transferred ArrayBuffer
685
+ try {
686
+ await initWasm();
687
+ self.postMessage({ type: "ready" });
688
+ } catch (err) {
689
+ self.postMessage({ type: "fail", reason: err.message });
690
+ }
691
+ return;
692
+ }
693
+
694
+ if (data.type === "solve") {
695
+ try {
696
+ const token = await runSolve(data.baseUrl, data.configId);
697
+ self.postMessage({ type: "success", token });
698
+ } catch (err) {
699
+ self.postMessage({ type: "fail", reason: err.message });
700
+ }
701
+ }
702
+ };
703
+ `;
704
+
705
+ // ── Constructable stylesheet (one instance shared across all widgets) ─────
706
+
707
+ const _sheet = new CSSStyleSheet();
708
+ _sheet.replaceSync(`
709
+ :host {
710
+ display: block;
711
+ min-height: 48px;
712
+ width: fit-content;
713
+
714
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
715
+ -webkit-font-smoothing: antialiased;
716
+ -moz-osx-font-smoothing: grayscale;
717
+
718
+ --zap-bg: var(--zaptcha-bg, #ffffff);
719
+ --zap-border: var(--zaptcha-border, #e5e7eb);
720
+ --zap-border-hover: var(--zaptcha-border-hover, #d1d5db);
721
+ --zap-border-focus: var(--zaptcha-border-focus, #4f46e5);
722
+ --zap-text: var(--zaptcha-text, #374151);
723
+ --zap-text-muted: var(--zaptcha-text-muted, #9ca3af);
724
+ --zap-accent: var(--zaptcha-accent, #4f46e5);
725
+ --zap-success: var(--zaptcha-success, #10b981);
726
+ --zap-shadow: var(--zaptcha-shadow, 0 2px 6px rgba(0,0,0,0.04));
727
+ --zap-radius: var(--zaptcha-radius, 8px);
728
+ }
729
+
730
+ .widget {
731
+ background: var(--zap-bg);
732
+ border: 1px solid var(--zap-border);
733
+ border-radius: var(--zap-radius);
734
+ box-shadow: var(--zap-shadow);
735
+ width: 210px;
736
+ box-sizing: border-box;
737
+ transition: box-shadow 0.2s ease, border-color 0.2s ease;
738
+ }
739
+ .widget:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.06); }
740
+
741
+ .row {
742
+ display: flex;
743
+ align-items: center;
744
+ gap: 10px;
745
+ padding: 0 12px;
746
+ height: 48px;
747
+ cursor: pointer;
748
+ user-select: none;
749
+ box-sizing: border-box;
750
+ border-radius: var(--zap-radius);
751
+ outline: none;
752
+ }
753
+ .row:focus-visible {
754
+ box-shadow: 0 0 0 2px var(--zap-bg), 0 0 0 4px var(--zap-border-focus);
755
+ }
756
+ .row[aria-checked="true"] { cursor: default; }
757
+
758
+ .box {
759
+ width: 22px;
760
+ height: 22px;
761
+ flex-shrink: 0;
762
+ position: relative;
763
+ display: flex;
764
+ align-items: center;
765
+ justify-content: center;
766
+ }
767
+ .box-border {
768
+ position: absolute;
769
+ inset: 0;
770
+ border: 1.5px solid var(--zap-border);
771
+ border-radius: 4px;
772
+ background: var(--zap-bg);
773
+ transition: border-color 0.2s ease, background-color 0.2s ease;
774
+ }
775
+ .row:hover:not([aria-checked="true"]) .box-border {
776
+ border-color: var(--zap-border-hover);
777
+ }
778
+
779
+ .box.done .box-border { background: var(--zap-success); border-color: var(--zap-success); }
780
+ .box-tick { display: none; position: relative; z-index: 1; }
781
+ .box.done .box-tick { display: block; animation: zap-pop 0.3s cubic-bezier(0.175,0.885,0.32,1.275); }
782
+
783
+ @keyframes zap-pop {
784
+ 0% { transform: scale(0.5); opacity: 0; }
785
+ 100% { transform: scale(1); opacity: 1; }
786
+ }
787
+
788
+ .box-spinner { display: none; position: absolute; inset: 0; }
789
+ .box.spinning .box-border { border-color: transparent; background: transparent; }
790
+ .box.spinning .box-spinner {
791
+ display: flex; align-items: center; justify-content: center;
792
+ }
793
+ .box-spinner::after {
794
+ content: ''; display: block;
795
+ width: 18px; height: 18px;
796
+ border: 2px solid var(--zap-border);
797
+ border-top-color: var(--zap-accent);
798
+ border-radius: 50%;
799
+ animation: zap-spin 0.6s linear infinite;
800
+ }
801
+ @keyframes zap-spin { to { transform: rotate(360deg); } }
802
+
803
+ .label {
804
+ color: var(--zap-text); font-size: 13.5px; font-weight: 500;
805
+ flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
806
+ transition: color 0.2s ease;
807
+ }
808
+
809
+ .branding {
810
+ display: flex; flex-direction: column;
811
+ align-items: flex-end; justify-content: center;
812
+ flex-shrink: 0; gap: 1px;
813
+ }
814
+ .branding strong {
815
+ font-size: 9px; font-weight: 700;
816
+ letter-spacing: 0.05em; text-transform: uppercase;
817
+ color: var(--zap-text-muted);
818
+ }
819
+ .branding a {
820
+ font-size: 9px; color: var(--zap-text-muted);
821
+ text-decoration: none; transition: color 0.2s;
822
+ }
823
+ .branding a:hover { color: var(--zap-text); }
824
+ `);
825
+
826
+ // ── DOM template (parsed once, cloned per instance) ───────────────────────
827
+
828
+ const _template = document.createElement("template");
829
+ _template.innerHTML = `
830
+ <div class="widget" part="widget">
831
+ <div class="row" id="row" tabindex="0" role="checkbox"
832
+ aria-checked="false" aria-label="I'm not a robot">
833
+ <div class="box" id="box" part="checkbox">
834
+ <div class="box-border"></div>
835
+ <div class="box-spinner"></div>
836
+ <svg class="box-tick" width="12" height="9" viewBox="0 0 12 9" fill="none" aria-hidden="true">
837
+ <polyline points="1.5,4.5 4.5,7.5 10.5,1.5"
838
+ stroke="white" stroke-width="2"
839
+ stroke-linecap="round" stroke-linejoin="round"/>
840
+ </svg>
841
+ </div>
842
+ <span class="label" id="label" part="label">I'm not a robot</span>
843
+ <div class="branding" part="branding">
844
+ <strong>Zaptcha</strong>
845
+ <a href="#" tabindex="-1">Privacy</a>
846
+ </div>
847
+ </div>
848
+ </div>
849
+ `;
850
+
851
+ const LABELS = {
852
+ idle: "I'm not a robot",
853
+ solving: "Verifying\u2026",
854
+ done: "Verified",
855
+ error: "I'm not a robot",
856
+ };
857
+
858
+ // ── Component ─────────────────────────────────────────────────────────────
859
+
860
+ class ZeroCaptcha extends HTMLElement {
861
+
862
+ static get observedAttributes() { return []; }
863
+
864
+ constructor() {
865
+ super();
866
+
867
+ this._shadow = this.attachShadow({ mode: "open" });
868
+ this._shadow.adoptedStyleSheets = [_sheet];
869
+ this._shadow.appendChild(_template.content.cloneNode(true));
870
+
871
+ this._rowEl = this._shadow.getElementById("row");
872
+ this._boxEl = this._shadow.getElementById("box");
873
+ this._labelEl = this._shadow.getElementById("label");
874
+
875
+ this._worker = null;
876
+ this._blobUrl = null;
877
+
878
+ /** @type {"idle"|"solving"|"done"|"error"} */
879
+ this._state = "idle";
880
+ this._progress = { done: 0, total: 1 };
881
+
882
+ this._bindEvents();
883
+ }
884
+
885
+ connectedCallback() { this._startWorker(); }
886
+ disconnectedCallback() { this._destroyWorker(); }
887
+
888
+ // ── Public API ───────────────────────────────────────────────────────────
889
+
890
+ reset() {
891
+ this._destroyWorker();
892
+ this._state = "idle";
893
+ this._progress = { done: 0, total: 1 };
894
+ this._applyState();
895
+ this._startWorker();
896
+ this.dispatchEvent(new CustomEvent("zaptcha-reset", { bubbles: true, detail: {} }));
897
+ }
898
+
899
+ // ── State → DOM ──────────────────────────────────────────────────────────
900
+
901
+ _applyState() {
902
+ const s = this._state;
903
+ const isDone = s === "done";
904
+ const isSpin = s === "solving";
905
+
906
+ this._rowEl.setAttribute("aria-checked", String(isDone));
907
+ this._rowEl.setAttribute("aria-label", LABELS[s] ?? LABELS.idle);
908
+ this._rowEl.tabIndex = isDone ? -1 : 0;
909
+
910
+ this._boxEl.classList.toggle("spinning", isSpin);
911
+ this._boxEl.classList.toggle("done", isDone);
912
+
913
+ this._labelEl.textContent = LABELS[s] ?? LABELS.idle;
914
+ }
915
+
916
+ // ── Worker lifecycle ─────────────────────────────────────────────────────
917
+
918
+ _startWorker() {
919
+ try {
920
+ const externalUrl = this.getAttribute("worker-url");
921
+ if (externalUrl) {
922
+ this._worker = new Worker(externalUrl, { type: "module" });
923
+ } else {
924
+ const blob = new Blob([WORKER_SRC], { type: "text/javascript" });
925
+ this._blobUrl = URL.createObjectURL(blob);
926
+ this._worker = new Worker(this._blobUrl, { type: "module" });
927
+ }
928
+
929
+ this._worker.onmessage = (e) => this._onWorkerMsg(e.data);
930
+ this._worker.onerror = (e) => this._onFail(`Worker error: ${e.message}`);
931
+
932
+ // Decode WASM bytes once and transfer ownership to the worker.
933
+ // The worker receives an ArrayBuffer — no URLs, no fetch, no MIME issues.
934
+ const wasmBin = _b64ToBuffer(_WASM_BIN_B64);
935
+
936
+ this._worker.postMessage(
937
+ { type: "init", wasmGlueSrc: _WASM_GLUE_SRC, wasmBin },
938
+ [wasmBin], // transfer — zero-copy, no serialization overhead
939
+ );
940
+ } catch (err) {
941
+ this._worker = null;
942
+ this._onFail(`Worker init failed: ${err.message}`);
943
+ }
944
+ }
945
+
946
+ _destroyWorker() {
947
+ this._worker?.terminate();
948
+ this._worker = null;
949
+ if (this._blobUrl) {
950
+ URL.revokeObjectURL(this._blobUrl);
951
+ this._blobUrl = null;
952
+ }
953
+ }
954
+
955
+ // ── Worker messages ──────────────────────────────────────────────────────
956
+
957
+ _onWorkerMsg(msg) {
958
+ switch (msg.type) {
959
+ case "ready": break;
960
+
961
+ case "progress":
962
+ this._progress.done = (msg.index ?? 0) + 1;
963
+ this._progress.total = msg.total ?? 1;
964
+ this.dispatchEvent(new CustomEvent("zaptcha-progress", {
965
+ bubbles: true, composed: true,
966
+ detail: {
967
+ index: msg.index, nonce: msg.nonce, total: msg.total,
968
+ pct: Math.round(((msg.index ?? 0) + 1) / (msg.total ?? 1) * 100),
969
+ },
970
+ }));
971
+ break;
972
+
973
+ case "success":
974
+ this._state = "done";
975
+ this._applyState();
976
+ this.dispatchEvent(new CustomEvent("zaptcha-success", {
977
+ bubbles: true, composed: true,
978
+ detail: { token: msg.token },
979
+ }));
980
+ break;
981
+
982
+ case "fail":
983
+ this._onFail(msg.reason || "Unknown error");
984
+ break;
985
+ }
986
+ }
987
+
988
+ // ── Events ───────────────────────────────────────────────────────────────
989
+
990
+ _bindEvents() {
991
+ this._rowEl.addEventListener("click", () => this._onRowClick());
992
+ this._rowEl.addEventListener("keydown", (e) => {
993
+ if (e.key === " " || e.key === "Enter") {
994
+ e.preventDefault();
995
+ this._onRowClick();
996
+ }
997
+ });
998
+ }
999
+
1000
+ _onRowClick() {
1001
+ if (this._state !== "idle") return;
1002
+ this._startSolve();
1003
+ }
1004
+
1005
+ _startSolve() {
1006
+ this._state = "solving";
1007
+ this._progress = { done: 0, total: 1 };
1008
+ this._applyState();
1009
+
1010
+ if (!this._worker) { this._onFail("Worker unavailable"); return; }
1011
+
1012
+ const baseUrl = this.getAttribute("base-url") ?? "";
1013
+ const configId = this.getAttribute("config-id") ?? "";
1014
+
1015
+ if (!baseUrl || !configId) {
1016
+ this._onFail("Attributes base-url and config-id are required");
1017
+ return;
1018
+ }
1019
+
1020
+ this._worker.postMessage({ type: "solve", baseUrl, configId });
1021
+ }
1022
+
1023
+ _onFail(reason) {
1024
+ this._state = "error";
1025
+ this._applyState();
1026
+ this.dispatchEvent(new CustomEvent("zaptcha-fail", {
1027
+ bubbles: true, composed: true,
1028
+ detail: { reason },
1029
+ }));
1030
+ setTimeout(() => this.reset(), 3000);
1031
+ }
1032
+ }
1033
+
1034
+ customElements.define("zero-captcha", ZeroCaptcha);
1035
+
1036
+ export default ZeroCaptcha;
1037
+ export { ZeroCaptcha };
1038
+
1039
+ // ── Standalone worker factory ─────────────────────────────────────────────
1040
+
1041
+ export function createWorker() {
1042
+ const blob = new Blob([WORKER_SRC], { type: "text/javascript" });
1043
+ const blobUrl = URL.createObjectURL(blob);
1044
+ const worker = new Worker(blobUrl, { type: "module" });
1045
+
1046
+ worker.addEventListener("message", function onReady(e) {
1047
+ if (e.data?.type === "ready" || e.data?.type === "fail") {
1048
+ URL.revokeObjectURL(blobUrl);
1049
+ worker.removeEventListener("message", onReady);
1050
+ }
1051
+ });
1052
+
1053
+ const wasmBin = _b64ToBuffer(_WASM_BIN_B64);
1054
+ worker.postMessage(
1055
+ { type: "init", wasmGlueSrc: _WASM_GLUE_SRC, wasmBin },
1056
+ [wasmBin],
1057
+ );
1058
+ return worker;
1059
+ }