From 873aa49210192e5441c22314890323e4a266c071 Mon Sep 17 00:00:00 2001 From: zxv Date: Wed, 21 Oct 2026 12:59:53 -0400 Subject: [PATCH 1/2] Reduce conditional uniform ranks with a logarithmic leaf majorant --- .../.gitattributes | 1 + .../log-potential-template-ranks/README.md | 395 +++ .../log-potential-template-ranks/RESULT.json | 482 ++++ .../log-potential-template-ranks/SOURCES.json | 18 + .../log-potential-template-ranks/TASK.json | 121 + .../log-potential-template-ranks/VENDOR.json | 69 + .../log-potential-template-ranks/VERIFY.json | 30 + .../vendor/BIT-ALLSIZE-PARAMETERS.json | 69 + .../vendor/DELAYED-COVER-BRIDGE.md | 401 +++ .../vendor/EXPLICIT-TEMPLATE-BOUNDS.json | 149 ++ .../vendor/EXPLICIT-TEMPLATE-BOUNDS.md | 108 + .../vendor/FINITE-PRECOMPILATION.md | 313 +++ .../vendor/MIXED-PRODUCTIVE-BIT.json | 2345 +++++++++++++++++ .../vendor/OUTER-PARAMETERS.json | 515 ++++ .../vendor/OUTER-TRANSFER-AUDIT.md | 426 +++ .../vendor/P3-NATIVE-COVER.json.gz | Bin 0 -> 176694 bytes .../vendor/check_ledger.py | 260 ++ .../log-potential-template-ranks/verify.py | 368 +++ 18 files changed, 6070 insertions(+) create mode 100644 research/log-potential-template-ranks/.gitattributes create mode 100644 research/log-potential-template-ranks/README.md create mode 100644 research/log-potential-template-ranks/RESULT.json create mode 100644 research/log-potential-template-ranks/SOURCES.json create mode 100644 research/log-potential-template-ranks/TASK.json create mode 100644 research/log-potential-template-ranks/VENDOR.json create mode 100644 research/log-potential-template-ranks/VERIFY.json create mode 100644 research/log-potential-template-ranks/vendor/BIT-ALLSIZE-PARAMETERS.json create mode 100644 research/log-potential-template-ranks/vendor/DELAYED-COVER-BRIDGE.md create mode 100644 research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.json create mode 100644 research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.md create mode 100644 research/log-potential-template-ranks/vendor/FINITE-PRECOMPILATION.md create mode 100644 research/log-potential-template-ranks/vendor/MIXED-PRODUCTIVE-BIT.json create mode 100644 research/log-potential-template-ranks/vendor/OUTER-PARAMETERS.json create mode 100644 research/log-potential-template-ranks/vendor/OUTER-TRANSFER-AUDIT.md create mode 100644 research/log-potential-template-ranks/vendor/P3-NATIVE-COVER.json.gz create mode 100644 research/log-potential-template-ranks/vendor/check_ledger.py create mode 100644 research/log-potential-template-ranks/verify.py diff --git a/research/log-potential-template-ranks/.gitattributes b/research/log-potential-template-ranks/.gitattributes new file mode 100644 index 0000000000..2435bfdf63 --- /dev/null +++ b/research/log-potential-template-ranks/.gitattributes @@ -0,0 +1 @@ +vendor/** -text -whitespace diff --git a/research/log-potential-template-ranks/README.md b/research/log-potential-template-ranks/README.md new file mode 100644 index 0000000000..f981bf9bd9 --- /dev/null +++ b/research/log-potential-template-ranks/README.md @@ -0,0 +1,395 @@ +# Smaller sufficient ranks for the conditional κ = 0.0023 compiler + +The finite source/exit compiler of [PR4359](https://github.com/CrocSwap/integer-mult-bounds/pull/4359) +admits the same proposed uniform savings at much smaller specified ambient +ranks. Replace the intermediate power majorant by + +\[ +L(n)\le n^t(1+\log_2 n)^{1/q},\qquad L(n)=P_n/B_n. +\] + +Together with a compatible outer parameter retuning, this gives sufficient +ranks **`2^465000` (complex)** and **`2^7100` (BIT before cover)** while retaining +the proposed **κ = 0.0023**. The exact outer ledger passes all nine cost rows, +all 63 inherited arithmetic predicates, and 22 additional interface inequalities. +The retuning spends supplier saving that the κ target does not need. + +There are two useful configurations. First, preserve the original supplier +savings, invoices, tested mixed exponents and native hypotheses: + +| Family | Original sufficient rank | New sufficient rank | Reduction in exponent of 2 | Uniform saving | +| --- | ---: | ---: | ---: | ---: | +| Complex | `2^276540184361` | **`2^2352000`** | about 117,577× | 0.002304 | +| BIT, before delayed cover | `2^6552928412` | **`2^529000`** | about 12,387× | 0.002760 | + +Second, retain κ = 0.0023 with weaker supplier savings and retuned outer parameters: + +| Family | Sufficient rank | Uniform saving | Consumer condition | +| --- | ---: | ---: | --- | +| Complex | **`2^465000`** | 0.0023005 | Above outer `b=0.0023004` | +| BIT, before delayed cover | **`2^7100`** | 0.002318 | Cover/atom conversion gives ordinary saving 0.0023011913797 | + +The original rank exponents decrease by about 594,710× and 922,948× in this +second configuration. The two rows of each configuration belong together; +the weaker savings are not substituted into the predecessor's original +outer parameter point. + +These ranks remain astronomical. This is a written conditional proof with +author-checked exact arithmetic. It does not emit the winning words, bound +their complete constants, independently admit the compiler/native/outer +transfer, or claim a new κ. In particular, it does not assert that the +productive width `B_N`, scalar word or precision constants improve by the +same factors. No selected-result record or predecessor package is changed. + +## What changes in the argument + +PR4359 chooses `t < z0 < z`, pays an induction constant +`A = n0^(1-z0)`, and then makes `A*N^z0 < N^z`. Its sufficient `log2 N` +therefore loses two inverse powers of the small exponent gap. The logarithmic +majorant below has constant **one** and uses `t` directly. With fixed `q`, its +final condition is just + +\[ +1+H < 2^{q(z-t)H},\qquad N=2^H. +\] + +As `z-t` decreases, this condition needs +`H = O((z-t)^(-1) log(1/(z-t)))`. This comparison concerns the two sufficient +estimates; it is not an asymptotic formula for the compiler's smallest success. +The mixed rule, source complements, whole-array routing, integral batch +replication and owned-bank allocation are unchanged. Only the choice of the +fixed ambient rank changes. + +## Conditional logarithmic-majorant theorem + +Assume the native finite compiler in the pinned +[`FINITE-PRECOMPILATION.md`](vendor/FINITE-PRECOMPILATION.md), including its +whole-job adapters, arbitrary-input restoration and finite-program closure. +Set `m=max(k)`, `k_min=min(k)`, `r_max=max(r)`, with +`1 <= r_max < k_min <= m`. + +Use the ordinary base `L(n)=n` for `0 <= n < m`. For every integer `n >= m`, +the compiler gives finite nonnegative weights and the exact recurrence + +\[ +\begin{aligned} +L(n)&=\sum_s w_sL(n-s)+\sum_e x_eL(e), &\sum_s w_s&=1,\\ +n/m&=m` because +`r_max=1`, + +\[ +L(n)\le F(n):=n^t(1+\log_2 n)^{1/q};\qquad F(0):=0. +\tag{5} +\] + +### Base ranks + +For `n=1`, (5) is equality. For `2<=n=1`. Because `n/m>=1`, + +\[ +\begin{aligned} +1+\log_2 E(n) +&\le \bar\theta\log_2 n+1+\log_2 r_{\max}-\bar\theta\log_2 m\\ +&\le \bar\theta(1+\log_2 n), +\end{aligned} +\] + +where the last inequality is exactly (2). Thus +`C(e)<=theta_bar^(1/q)*C(n)` for every exit. By (1), + +\[ +\sum_e x_eF(e)\le +\bar\theta^{1/q}C(n)\sum_s w_s s^t. +\tag{6} +\] + +### Source complements and strong induction + +For `y=s/n` in `(1/m,1]`, concavity of `x^t` gives + +\[ +1-(1-y)^t\ge ty\ge t m^{t-1}y^t=\eta y^t. +\] + +Since `C(n-s)<=C(n)` whenever `n-s>=1`, and `F(0)=0`, + +\[ +F(n)-\sum_s w_sF(n-s) +\ge \eta C(n)\sum_s w_s s^t. +\tag{7} +\] + +Condition (3) makes the upper bound in (6) strictly smaller than the lower +bound in (7). All complement and exit ranks are below `n`. Substituting the +strong induction hypotheses into the exact recurrence proves (5). This +avoids both an intermediate exponent and an unknown multiplicative constant. + +## Two explicit choices of N + +The source histograms are copied byte-for-byte in `vendor/`, and their exact +origin is recorded in [VENDOR.json](VENDOR.json). The checker imports no +predecessor Python code. + +| Family | `t` | `z` | `theta_bar` | `q` | Certified `eta^q - theta_bar` lower bound | +| --- | ---: | ---: | ---: | ---: | ---: | +| Complex | 0.997695 | 0.997696 | 9/10 | 9 | 0.000646856868158037041419759048 | +| BIT | 0.997231 | 0.997240 | 15/16 | 4 | 0.009533387925024688687300943262 | + +The κ-preserving configuration uses the same `t`, `theta_bar` and `q`, with +`z=0.9976995` for complex and `z=0.997682` for BIT. + +For `N=2^H`, (5) yields `L(N) 0.002301 > a = 0.0023003. +``` + +The unchanged gap preserves the entire delayed-cover inequality: the prime +rule remains `prime > 25,600,000*N^5`, avoiding the finite denominator/rank +exclusions, and the fully charged fallback moment remains at most +`400001/400002`. Since `N>=2`, the same proof uses +`N^gap > 1+gap/2` and fallback multiplier `<1+gap/4`. The atom power remains +0.003, which exceeds the new ordinary saving; its borrowed-stock and linear +adapter inequalities remain strict. The row-stock exponent and support-local +reserve argument therefore have the same form, with constants recomputed for +the new finite words. + +For the outer recursion, `b>a>outer_q`, the stopped internal and leaf +exponents are below `lambda` and `lambda_prime`, and the complex saving is +strictly above `b`. The nine cost savings, recomputed from the pinned outer +equations, are: + +| Cost row | Saving | +| --- | ---: | +| Main transform | 0.002300176998 | +| Global coordinate router | 0.0023003 | +| Fused Gaussian | 0.002310130994 | +| Group BIT router | 0.002310230991 | +| Group scans | 0.99998 | +| Boundary algebraic matrix | 0.002301176998 | +| Sparse union movement | 0.408551176998 | +| Polynomial products | 0.99999 | +| Microbox face corrections | 77.00004 | + +Every row exceeds 0.0023. The smallest strict margin is exactly +`88499/500000000000 = 0.000000176998`. The grid/backoff calculation with +`FLOOR=10^7`, `BACKOFF=10^-7` returns exactly 0.0023. This is an ordinary +strict lower target, not a claim of maximizing the predecessor's old grid. + +The checker separately executes only the pinned `check_ledger.py` **ledger +function** and its historical comparison constants, following PR4359's AST +oracle approach. All nine rows agree exactly, and all 63 inherited predicates +remain positive. It does not run or bypass the old m=73 native admission +script. An additional 22 inequalities cover the changed supplier endpoints, +stopped recursion, cover/atom terms, semantic guards, support reserve, fine-prime +guard, explicit metadata halo and record budgets. Four outer mutations reject: +`epsilon=1`, zero layout slack, group width equal to global dimension and an +unfunded old per-axis scan. The full rational ledger and failure rows are in +`RESULT.json`. + +The native, delayed-cover, precision and support proofs are reused as stated +in the pinned [outer transfer argument](vendor/OUTER-TRANSFER-AUDIT.md). +This package checks their changed quantitative premises, not their independent +scientific acceptance. All compiled-word constants must still be replaced; +the reduced ranks do not grant the predecessor's small-template constants. + +## Reproduction and evidence + +From the repository root, with Python 3.12 or newer and no third-party packages: + +```sh +python3 -B research/log-potential-template-ranks/verify.py +python3 -B scripts/research_package.py --package research/log-potential-template-ranks --check-only +``` + +To recompute a receipt without editing the package: + +```sh +python3 -B research/log-potential-template-ranks/verify.py --out /absolute/path/to/new-result.json +``` + +The verifier authenticates all ten predecessor inputs, encloses each mixed +moment and `eta^q` with rational arithmetic, checks the integer theta/shift +tests, proves the entire base range by (4), and checks the final integer +powers. Twelve mutations must reject at the specified obligation: losing the +unit superpotential, losing strict separation, and increasing q, for each +configuration and family. Previous grid points provide four additional failing +final comparisons. The retuned consumer checks and its four controls are +described above. +`RESULT.json` contains the complete receipts. + +Logarithm bounds use the first 80 terms of `2*atanh(u)`, with binary range +reduction and the tail bound `2*u^161/(161*(1-u^2))`. Exponential bounds use +48 positive Taylor terms and the geometric upper tail beginning at term 49. +Every exponential argument is checked in `[0,1)`. Displayed decimal intervals +are rounded outwards; all decisions use exact fractions or integers. + +Local validation used Python 3.12.8 on macOS 26.5.1 arm64, with the same receipt +also generated under Python 3.14.5. The registered replay and metadata/pin check +passed. An inode-independent, Git-free copy passed `python3.12 -I -O -B verify.py` +in 8.77 seconds while another light check ran; changed-input and changed-receipt +controls both rejected. Timings are host-dependent. + +The algebraic proof above is not machine-formalized. No native circuit replay, +delayed-cover implementation replay, full multiplication theorem, Lean build, +Docker run or historical replay suite is part of this bounded quantitative change. + +## Provenance, overlap and scope + +Scientific predecessor: zxv's PR4359 head +`da637c87c89482bc4c86be36bd0071b3d400dbed`, including its finite compiler, +explicit-rank estimate, productive complex controller and delayed BIT cover. +The integer lockstep construction and Theorem 1G are Jacob Alan Sussman's +work, retained by that PR from `wht-power-saving-lean` commit +`563b4e6e913625637f36ba7869bf5fcd0dd4975a`. The original repository supplier, +PR589 BIT word and the contributor lineage recorded by PR4359 retain credit. +This package contributes the logarithmic majorant, its sufficient ranks and +the compatible outer retuning. + +The publication base is canonical main +`12fa8c5c844be21bfefb38a19503fbd867a11244`, priority revision 7. Ten immutable +inputs from the pending predecessor are included so this focused follow-up +can replay independently of whether PR4359 has merged. `SOURCES.json` pins +main's orientation metadata; `VENDOR.json` separately binds the copied inputs +to their original commit, paths, Git blobs and SHA256 hashes. This is an +offline byte binding, not an independent replay of their producers. + +The overlap refresh covered 513 open PR bodies and 3,250 discussions/comments, +with complete reported pagination at 2026-10-21 17:02 UTC, plus local package +notes and the ledger. It did not search remote closed PR bodies or every code +diff. [pinterbanget's initial claim](https://github.com/CrocSwap/integer-mult-bounds/discussions/1166#discussioncomment-19102222) +targeted the predecessor's recurrence and H0/H1 chain. Before submission, they +published [PR4404](https://github.com/CrocSwap/integer-mult-bounds/pull/4404), head +`77f20afb7c24286937c75cb65a7f19e24e7a567f`, reporting that the original arithmetic, +exit bound and induction hold, with separate flow simulation through rank 10,000. +That is external evidence about the predecessor, not independent review of this +new majorant or its retuned consumer. No part of PR4404's code is imported. + +The same refresh located parallel [PR4405](https://github.com/CrocSwap/integer-mult-bounds/pull/4405), +head `873d1b3c96a83b701a5c0bba8e37a861e6672fef`. It sharpens the original +power-majorant coefficient and proposes a higher conditional κ = 0.00230509. +At the original supplier savings it reports rank exponents 1,546,084,442 and +42,843,607. Our unchanged-saving exponents 2,352,000 and 529,000 improve those +sufficient estimates by a different argument. Its higher-κ parameter point is +not instantiated here, and no part of its code or proof is imported. + +## Open next questions + +1. **Sharpen the logarithmic exponent using actual source/exit distributions.** + A useful first test is a uniform bound on their complete weighted ratios, + rather than just the worst-case `eta` and `theta_bar`. This could lower H + further; another q grid by itself would add little evidence. +2. **Bound productive width and total program size.** Start with compressed + recurrences for `B_N`, `P_N`, batch denominators and owned-unit counts. + Ambient rank alone does not bound the complete constants. Integer batch + growth and the absence of a materialized winning word remain the blockers. +3. **Review the inherited compiler and native/outer transfer independently.** + Follow the existing source/exit audit, then separate the native closure, + delayed BIT cover and outer support obligations. Their acceptance remains + necessary before interpreting either set of sufficient ranks as an + admitted multiplication result. + +4. **Combine with PR4405's higher proposed κ endpoint.** Pin its exact + parameter point, choose a strict rational tested `t`, then apply (5) and + reprice the full consumer. The logarithmic majorant is general, but that + extra point and PR4405's scientific acceptance are not checked here. + +Prepared by zxv with substantial OpenAI Codex assistance. Apache-2.0. No +subagents or independent human mathematical review were used for this package. diff --git a/research/log-potential-template-ranks/RESULT.json b/research/log-potential-template-ranks/RESULT.json new file mode 100644 index 0000000000..68590e61ee --- /dev/null +++ b/research/log-potential-template-ranks/RESULT.json @@ -0,0 +1,482 @@ +{ + "cases": [ + { + "N": { + "H": 2352000, + "encoding": "2^H" + }, + "base_m_to_q_saving_upper": "1.087490880883680536600217019613", + "controls": { + "previous_grid_point_fails_final_majorant": true, + "q_plus_one_fails_contraction": true + }, + "eta_to_q": { + "lower": "0.900646856868158037041419759048", + "upper": "0.900646856868158037041419759049" + }, + "eta_to_q_minus_theta": { + "lower": "0.000646856868158037041419759048", + "upper": "0.000646856868158037041419759049" + }, + "exponent_reduction_factor": "39505740623/336000", + "family": "complex/same-savings", + "final_integer_test": { + "left_base": 2352001, + "left_exponent": 125, + "relation": "<", + "right_base": 2, + "right_exponent": 2646 + }, + "grid_step": 1000, + "logarithm_power": "1/9", + "majorant": "L(n) <= n^t * (1+log2(n))^(1/q), n>=1; L(0)=0", + "materialized_word": false, + "paid": { + "1": 17623, + "2": 5065, + "3": 1738, + "4": 714, + "5": 254 + }, + "previous_H": 276540184361, + "previous_uniform_saving": "36/15625", + "shift_integer_test": { + "left": 19531250, + "right": 6351461955384057 + }, + "strict_unit_moment_margin": { + "lower": "0.008726900862591659520183402183", + "upper": "0.008726900862591659520183402184" + }, + "t": "199539/200000", + "targets": { + "6": 192, + "7": 56, + "8": 93, + "9": 1229, + "25": 448, + "57": 224 + }, + "tested_mixed_saving": "461/200000", + "theta_upper": "9/10", + "uniform_saving": "36/15625", + "z": "15589/15625" + }, + { + "N": { + "H": 529000, + "encoding": "2^H" + }, + "base_m_to_q_saving_upper": "1.044281998830006779723851077618", + "controls": { + "previous_grid_point_fails_final_majorant": true, + "q_plus_one_fails_contraction": true + }, + "eta_to_q": { + "lower": "0.947033387925024688687300943262", + "upper": "0.947033387925024688687300943263" + }, + "eta_to_q_minus_theta": { + "lower": "0.009533387925024688687300943262", + "upper": "0.009533387925024688687300943263" + }, + "exponent_reduction_factor": "1638232103/132250", + "family": "BIT/same-savings", + "final_integer_test": { + "left_base": 529001, + "left_exponent": 250, + "relation": "<", + "right_base": 2, + "right_exponent": 4761 + }, + "grid_step": 1000, + "logarithm_power": "1/4", + "majorant": "L(n) <= n^t * (1+log2(n))^(1/q), n>=1; L(0)=0", + "materialized_word": false, + "paid": { + "1": 9261, + "2": 9394, + "3": 553, + "4": 308, + "5": 714, + "6": 77, + "7": 1465 + }, + "previous_H": 6552928412, + "previous_uniform_saving": "69/25000", + "shift_integer_test": { + "left": 66465861139202, + "right": 30517578125000000000000000 + }, + "strict_unit_moment_margin": { + "lower": "0.067093183910202306343224051947", + "upper": "0.067093183910202306343224051948" + }, + "t": "997231/1000000", + "targets": { + "8": 3073, + "22": 444, + "50": 222 + }, + "tested_mixed_saving": "2769/1000000", + "theta_upper": "15/16", + "uniform_saving": "69/25000", + "z": "24931/25000" + }, + { + "N": { + "H": 465000, + "encoding": "2^H" + }, + "base_m_to_q_saving_upper": "1.087490880883680536600217019613", + "controls": { + "previous_grid_point_fails_final_majorant": true, + "q_plus_one_fails_contraction": true + }, + "eta_to_q": { + "lower": "0.900646856868158037041419759048", + "upper": "0.900646856868158037041419759049" + }, + "eta_to_q_minus_theta": { + "lower": "0.000646856868158037041419759048", + "upper": "0.000646856868158037041419759049" + }, + "exponent_reduction_factor": "276540184361/465000", + "family": "complex/kappa-0023", + "final_integer_test": { + "left_base": 465001, + "left_exponent": 400, + "relation": "<", + "right_base": 2, + "right_exponent": 7533 + }, + "grid_step": 1000, + "logarithm_power": "1/9", + "majorant": "L(n) <= n^t * (1+log2(n))^(1/q), n>=1; L(0)=0", + "materialized_word": false, + "paid": { + "1": 17623, + "2": 5065, + "3": 1738, + "4": 714, + "5": 254 + }, + "previous_H": 276540184361, + "previous_uniform_saving": "36/15625", + "shift_integer_test": { + "left": 19531250, + "right": 6351461955384057 + }, + "strict_unit_moment_margin": { + "lower": "0.008726900862591659520183402183", + "upper": "0.008726900862591659520183402184" + }, + "t": "199539/200000", + "targets": { + "6": 192, + "7": 56, + "8": 93, + "9": 1229, + "25": 448, + "57": 224 + }, + "tested_mixed_saving": "461/200000", + "theta_upper": "9/10", + "uniform_saving": "4601/2000000", + "z": "1995399/2000000" + }, + { + "N": { + "H": 7100, + "encoding": "2^H" + }, + "base_m_to_q_saving_upper": "1.044281998830006779723851077618", + "controls": { + "previous_grid_point_fails_final_majorant": true, + "q_plus_one_fails_contraction": true + }, + "eta_to_q": { + "lower": "0.947033387925024688687300943262", + "upper": "0.947033387925024688687300943263" + }, + "eta_to_q_minus_theta": { + "lower": "0.009533387925024688687300943262", + "upper": "0.009533387925024688687300943263" + }, + "exponent_reduction_factor": "1638232103/1775", + "family": "BIT/kappa-0023", + "final_integer_test": { + "left_base": 7101, + "left_exponent": 2500, + "relation": "<", + "right_base": 2, + "right_exponent": 32021 + }, + "grid_step": 100, + "logarithm_power": "1/4", + "majorant": "L(n) <= n^t * (1+log2(n))^(1/q), n>=1; L(0)=0", + "materialized_word": false, + "paid": { + "1": 9261, + "2": 9394, + "3": 553, + "4": 308, + "5": 714, + "6": 77, + "7": 1465 + }, + "previous_H": 6552928412, + "previous_uniform_saving": "69/25000", + "shift_integer_test": { + "left": 66465861139202, + "right": 30517578125000000000000000 + }, + "strict_unit_moment_margin": { + "lower": "0.067093183910202306343224051947", + "upper": "0.067093183910202306343224051948" + }, + "t": "997231/1000000", + "targets": { + "8": 3073, + "22": 444, + "50": 222 + }, + "tested_mixed_saving": "2769/1000000", + "theta_upper": "15/16", + "uniform_saving": "1159/500000", + "z": "498841/500000" + } + ], + "input_sha256": { + "research/log-potential-template-ranks/vendor/BIT-ALLSIZE-PARAMETERS.json": "edb273f59a27356ad89f38791590c3c806b228c3510eb508e01e89f2caba95ef", + "research/log-potential-template-ranks/vendor/DELAYED-COVER-BRIDGE.md": "9731b93026717f5fa15851e3633cbb4bdc76eba2bffb9d6b4a3b69f7dd502443", + "research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.json": "3f1abfafa6f1bb192aafdf342a33ef60fd469fb0764be3eb1516984fc3c22c3f", + "research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.md": "e54345bfdbceda1e41a68682c6902899372252d36d16ca914c1207f0bf03f8b0", + "research/log-potential-template-ranks/vendor/FINITE-PRECOMPILATION.md": "4cb32f6b8e388ecf6ed41b5bbdeeb4539cb40c8424f194974afea58f7e0921e8", + "research/log-potential-template-ranks/vendor/MIXED-PRODUCTIVE-BIT.json": "2f69a19f417c0e0d141c180f9b2fae3d358391b9a230f5848ee07c45450e70bf", + "research/log-potential-template-ranks/vendor/OUTER-PARAMETERS.json": "15818c10c41ac2ea650e503de830795f6c88830a7f9be9553dd938bb1d76717a", + "research/log-potential-template-ranks/vendor/OUTER-TRANSFER-AUDIT.md": "67569961d068633c6ff3ac9dfde47a0c17f0da6d20432799dcc920cff92b5779", + "research/log-potential-template-ranks/vendor/P3-NATIVE-COVER.json.gz": "facfc6d6ecde151afb7e6a167776f3fdaac1c816e785a21a39f7f0bfd9140f3f", + "research/log-potential-template-ranks/vendor/check_ledger.py": "1dd56009986eb14dd6603c9193c7ad71dd45c7d005bf71c9cd3f916e66f54d98" + }, + "kappa_0023_retuned_outer": { + "BIT_after_cover": "577/250000", + "BIT_atom_power": "3/1000", + "BIT_before_cover": "1159/500000", + "BIT_fallback_moment_upper": "400001/400002", + "BIT_old_leaf_saving": "384599/10000000000", + "BIT_ordinary_saving": "23011913797/10000000000000", + "BIT_prime_coefficient": "25600000", + "functional_gaps": { + "BIT_borrowed_stock": "9946988086203/10000000000000", + "BIT_cover_gap": "1/100000", + "BIT_linear_adapter": "6988086203/10000000000000", + "BIT_row_stock_sublinear": "99697009/100000000", + "admitted_BIT_above_effective": "7/10000000", + "descriptor_complete_fiber": "1/100000", + "explicit_metadata_halo": "1925001/25000", + "fine_prime_group_guard": "45736661501/250000000000", + "fine_prime_umbrella": "7/2", + "global_gamma_spare": "9/1000000", + "group_below_dimension": "1/50000", + "lambda_above_internal": "1/20000000", + "lambda_above_sigma": "3/20000000", + "lambda_prime_above_lambda": "1/20000000", + "lambda_prime_above_leaf": "49994249/250000000000000", + "membership_record_budget": "1/100000", + "ordinary_BIT_above_admitted": "1913797/10000000000000", + "selected_complex_above_effective": "1/10000000", + "semantic_group_guard": "3/100000", + "semantic_main_guard": "1/100000", + "short_record_fallback": "9976897/10000000", + "uniform_complex_above_b": "1/10000000" + }, + "grid_backoff": "1/10000000", + "grid_floor": 10000000, + "inherited_predicates": { + "actual_bit_above_effective": "7/10000000", + "actual_logarithmic_gamma_guard": "1/100000", + "actual_logarithmic_group_guard": "45736911501/250000000000", + "alpha_logarithm_absorption": "1/1000000", + "boundary_algebraic_matrix_above_kappa": "588499/500000000000", + "cap_above_band": "204270588499/500000000000", + "cap_below_cell": "45724411501/500000000000", + "cap_below_phase_cell_power": "545729411501/500000000000", + "complex_above_effective": "1/10000000", + "complex_below_one_over_32": "36187/1250000", + "complex_endpoint": "1/5000000", + "epsilon_below_one": "1/100000", + "epsilon_positive": "99999/100000", + "fused_gaussian_above_kappa": "5065497/500000000000", + "gaussian_above_main": "2488499/250000000000", + "global_coordinate_router_above_kappa": "3/10000000", + "global_gamma_power_slack": "9/1000000", + "group_below_dimension": "1/50000", + "group_bit_router_above_kappa": "10230991/1000000000000", + "group_gauge_power_slack": "45736661501/250000000000", + "group_key_fits_record": "1/50000", + "group_positive": "99997/100000", + "group_scans_above_kappa": "12471/12500", + "halo_covers_generic_inverse_radius": "5", + "improvement_over_online_final": "284514790400418148631/500000000000000000000000", + "improvement_over_pkg_k2": "622007392794717479267911225169191627777122102965890395790280701170194526587548469132116575062403/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1699": "622358268656645435748941712936355250934431507/1000000000000000000000000000000000000000000000000", + "improvement_over_pr1712": "3111791343283227178741362020680007884145727138632283638941299969772687285461029288600736779707649/5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1758": "620254491197700948453466314800026327686526580209199320247542619067215757027414399369818327775017/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1786": "6202452118499510912194521335000000000000000000000000000000001999999800001/10000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1828": "1240490087748910957328658012158594846003377122994839409079344959674400000000000000000000000004006719019826502178085342683975683/2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1839": "3101225219372277393321645030396487115008442807487098522698362399185677258698371805868475000000001001679754956625544521335670993920703/5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1875": "3101225219372277393321645030396487115008442807487098522698362399185677258698371805868471719335776838627743415457068895139647759399172939286143496816535216421325187363046885361425772909502231218314437622205930116079297234806627210590217190600996553729143901162562581526621534715086055386213403722175000000001001679754956625544521335670993920703/5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1876": "310122521937227739332164503039648711500844280748709852269836239918567725869837180586847171933577683862774341545706889513964775939917293928614349681653521642132518736304688536142577290950223121831443762220593011607929723480662721059021719060099655372914390116256258152662153471508605538621340372217196657216794137380775174500330086462142358142864921147118845386980694114022172311249292673931726844600000000000000000001001679754956625544521335670993920702577/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_pr1897": "620245043874455478664329006079297423001688561497419704539672479837135451739674361173694343867155367725548683091413779027929551879834587857228699363307043284265037472609377072285154581900446243662887524441186023215859446961325442118043438120199310745828780232512516305324306943017211077242680744434393314433588274761550349000660172924284716285729842294237690773961388228044344622498585347863453689118814253082419197486359454032147189198319033143866021423837056207677317517847011467076188001061138620310116832610271556685687769184940440093096226243113127523863162928128796969576356494654526264864467/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "improvement_over_previous_local_final": "284514790400418148631/500000000000000000000000", + "improvement_over_previous_package": "6221800976855635663689448641223998986170598784229341400200650717283025923262102542077285802551153/10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_internal": "1/20000000", + "lambda_above_sigma": "3/20000000", + "lambda_above_tau": "1/20000000", + "lambda_prime_above_lambda": "1/20000000", + "lambda_prime_above_leaf": "49994249/250000000000000", + "leaf_saving_above_effective": "24994249/250000000000000", + "main_transform_above_kappa": "88499/500000000000", + "membership_arithmetic_fits_record": "1/100000", + "microbox_face_corrections_above_kappa": "3849887/50000", + "microbox_halo_volume": "7900003/100000", + "polynomial_products_above_kappa": "99769/100000", + "positive_layout_slack": "1/1000000", + "q_below_effective": "1/10000000", + "q_below_internal": "1/10000000", + "q_below_leaf": "49994249/250000000000000", + "q_positive": "11501/5000000", + "short_record_fallback": "9976897/10000000", + "source_axis_superpolynomial": "1/100000", + "sparse_union_movement_above_kappa": "203125588499/500000000000", + "stop_below_one": "99999999/100000000", + "stop_positive": "1/100000000", + "strassen_integer_power_gap": "1951441519231", + "support_router_span": "3/100000", + "theta_positive_polynomial_power": "2", + "union_header_fits_record": "3/100000", + "union_tag_work_per_visit_fits_record": "3/100000" + }, + "minimum_saving_minus_kappa": "88499/500000000000", + "nine_cost_savings": { + "boundary_algebraic_matrix": "1150588499/500000000000", + "fused_gaussian": "1155065497/500000000000", + "global_coordinate_router": "23003/10000000", + "group_bit_router": "2310230991/1000000000000", + "group_scans": "49999/50000", + "main_transform": "1150088499/500000000000", + "microbox_face_corrections": "1925001/25000", + "polynomial_products": "99999/100000", + "sparse_union_movement": "204275588499/500000000000" + }, + "parameters": { + "BIT_saving": "2301/1000000", + "Strassen_exponent": "45/16", + "b": "5751/2500000", + "cap_xi": "454270588499/500000000000", + "complex_uniform_saving": "4601/2000000", + "core_power": "128", + "effective_saving": "23003/10000000", + "epsilon": "99999/100000", + "group_beta": "99997/100000", + "halo_power": "48", + "kappa": "23/10000", + "lambda": "3990799/4000000", + "lambda_prime": "4988499/5000000", + "layout_slack": "1/1000000", + "q": "11501/5000000", + "r0": "1/1000000", + "stop": "1/100000000", + "theta_power": "2" + }, + "rejected_controls": { + "epsilon_one": [ + "actual_logarithmic_gamma_guard", + "epsilon_below_one", + "gaussian_above_main", + "global_gamma_power_slack", + "source_axis_superpolynomial" + ], + "group_equals_dimension": [ + "group_below_dimension", + "group_key_fits_record", + "membership_arithmetic_fits_record" + ], + "unfunded_old_per_axis_scan": [ + "old_per_axis_scan_above_kappa" + ], + "zero_layout_slack": [ + "positive_layout_slack" + ] + }, + "scope": "Exact parameter compatibility under the pinned native/cover/support/outer hypotheses; not a fresh native admission or full replay." + }, + "proof_dependency": "README.md and PR4359 finite source/exit compiler with its native closure hypotheses", + "rejected_mutations": [ + { + "family": "complex/same-savings", + "mutation": "lost_unit_superpotential", + "rejected_at": "unit t-superpotential" + }, + { + "family": "complex/same-savings", + "mutation": "lost_strict_separation", + "rejected_at": "strict mixed separation" + }, + { + "family": "complex/same-savings", + "mutation": "q_plus_one", + "rejected_at": "eta^q > theta" + }, + { + "family": "BIT/same-savings", + "mutation": "lost_unit_superpotential", + "rejected_at": "unit t-superpotential" + }, + { + "family": "BIT/same-savings", + "mutation": "lost_strict_separation", + "rejected_at": "strict mixed separation" + }, + { + "family": "BIT/same-savings", + "mutation": "q_plus_one", + "rejected_at": "eta^q > theta" + }, + { + "family": "complex/kappa-0023", + "mutation": "lost_unit_superpotential", + "rejected_at": "unit t-superpotential" + }, + { + "family": "complex/kappa-0023", + "mutation": "lost_strict_separation", + "rejected_at": "strict mixed separation" + }, + { + "family": "complex/kappa-0023", + "mutation": "q_plus_one", + "rejected_at": "eta^q > theta" + }, + { + "family": "BIT/kappa-0023", + "mutation": "lost_unit_superpotential", + "rejected_at": "unit t-superpotential" + }, + { + "family": "BIT/kappa-0023", + "mutation": "lost_strict_separation", + "rejected_at": "strict mixed separation" + }, + { + "family": "BIT/kappa-0023", + "mutation": "q_plus_one", + "rejected_at": "eta^q > theta" + } + ], + "schema": "logarithmic-uniform-template-ranks/1", + "scope": "Smaller sufficient ambient ranks; no emitted supplier, complete constant bounds, native admission, or new kappa.", + "status": "PASS_LOGARITHMIC_MAJORANT_RANKS", + "verifier_sha256": "407dcbbae856805e698f0000dfd0e4ec32b3700fadc9ba2aa6f85dd03a774f61" +} diff --git a/research/log-potential-template-ranks/SOURCES.json b/research/log-potential-template-ranks/SOURCES.json new file mode 100644 index 0000000000..fcfba8aa31 --- /dev/null +++ b/research/log-potential-template-ranks/SOURCES.json @@ -0,0 +1,18 @@ +{ + "schema_version": 1, + "base_commit": "12fa8c5c844be21bfefb38a19503fbd867a11244", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "b1fea0c94436b236cc2b7d41a7be032811b94c81", + "sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "64bfc5af6709ed9811171e0a2108f05e1219cb65", + "sha256": "352a6184713b8843d96fd2c2071eb7aeaa655906b7c51d45ad444912666c8a96" + } + ] +} diff --git a/research/log-potential-template-ranks/TASK.json b/research/log-potential-template-ranks/TASK.json new file mode 100644 index 0000000000..19f989aeb5 --- /dev/null +++ b/research/log-potential-template-ranks/TASK.json @@ -0,0 +1,121 @@ +{ + "schema_version": 1, + "task_id": "supplier-boundary-audit", + "priority_revision": 7, + "base_commit": "12fa8c5c844be21bfefb38a19503fbd867a11244", + "original_card": { + "id": "supplier-boundary-audit", + "question": "Can the #4088 four-provider dispatch satisfy the complete ordinary/outer admission contract?", + "starting_points": [ + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "research/staged544-mixed-fourth-entry/README.md", + "research/scatter-boundary-decision/README.md" + ], + "methods": [ + "Trace one hypothesis through the source, checker and complete caller.", + "Construct one semantically invalid but superficially well-formed fixture and test rejection." + ], + "acceptance_gate": "Pin the current sources and one obligation; the historical owner audit is an example, not evidence of a current bug.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read #4088 Scope and Open next questions: local words, native receipts and literal fill do not include a rerun of the mixed four-provider ordinary/outer engine. #3801 is the newer scatter-boundary decision; do not restart #2977 as if untouched.", + "scope": "Source-binding orientation only; no scientific replay, theorem acceptance or supplier admission. Budget any heavy replay separately." + }, + "first_experiment": "Pin the provider registry, four native source closures and dispatch. Make a bounded acceptance coverage map or one registry adapter preserving every inherited admission predicate and rejection control (including an omitted fourth provider). Record remaining ordinary/outer obligations and a resource estimate before heavy execution. Stop at unresolved source/caller dependencies; no selected-result promotion from a local pass.", + "bottleneck_link": "Closing a current acceptance gap or proof obligation strengthens reliability even without changing kappa.", + "allowed_variations": [ + "One provider-registry, dispatch, native-closure or admission-predicate obligation; separate branches must name distinct coverage." + ], + "scope_change_triggers": [ + "Reporting the historical timing-only diagnostic as a new current acceptance bug.", + "Calling a malformed mutant a failure of the selected construction, or importing an opt-in repair without testing the exporter boundary.", + "Running another root enclosure instead of validating dispatch or weakening an inherited predicate to make mixed admission pass." + ], + "overlap_terms": [ + "owner boundary", + "bridge omission", + "hosting", + "2977", + "scatter export", + "duplicate index", + "parity semantics", + "4088", + "3801", + "staged544-mixed-fourth-entry", + "scatter-boundary-decision" + ], + "existing_checks": [ + { + "scope": "PR #4088: author-checked local words, native receipts, owner/phase fill and exact moment.", + "evidence": "research/staged544-mixed-fourth-entry/README.md", + "remaining": "Rebind and validate ordinary/outer admission with all four providers; full mixed release not established.", + "status": "author-checked", + "source_commit": "72d7efc181edb21806a878f174847c96dd410ab0", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #3801: successor scatter-boundary decision package.", + "evidence": "research/scatter-boundary-decision/README.md", + "remaining": "Consult its exact acceptance scope before any new exporter audit; not proof of a selected failure.", + "status": "author-checked", + "source_commit": "911f8800ba7a4b03603ef62c5ffc6240e53cb5fd", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Prove a logarithmic majorant for PR4359 leaf counts, certify smaller ranks at unchanged supplier savings, and retune the complete cover/atom/outer consumer to retain kappa 0.0023 at ranks 2^465000 and 2^7100.", + "scope_change_reason": "Explicit user assignment to build on conditional-kappa-0023, followed by a request to shrink ranks further. The catalogue four-provider audit is replaced by a changed majorant and complete consumer-parameter retuning; no new kappa is claimed.", + "bottleneck_link": "The majorant removes a squared inverse-gap loss; the complete consumer ledger allows the surplus supplier saving to be exchanged for smaller ambient ranks.", + "budget_minutes": 60, + "stop_rule": "One proved majorant, two exact sufficient ranks and negative controls; no template materialization, H decoder campaign or full outer replay.", + "outcome": "completed", + "evidence": "README.md proof and complete retuned consumer bill; RESULT.json exact checks; VENDOR.json immutable predecessor subset.", + "author": "zxv, with substantial OpenAI Codex assistance", + "ai_assistance": "Substantial OpenAI Codex assistance in proof development, code, verification and writing. No subagents or independent human review.", + "open_questions": [ + { + "question": "Can the logarithmic exponent be sharpened using the actual source and exit distributions?", + "why_it_matters": "Further lowers the sufficient rank while testing the coarse worst-case source-band estimate.", + "first_step": "Bound the complete weighted source complement and exit logarithm ratios before changing t or q.", + "blocked_by": "A uniform distribution-sensitive inequality, beyond the present eta/theta bound." + }, + { + "question": "Can one construct a materially smaller supplier or rigorously bound its productive width and instruction count?", + "why_it_matters": "Reduced ambient rank alone does not make the finite program practical.", + "first_step": "Build compressed count recurrences for B_N, P_N and owned-unit counts with denominator clearing.", + "blocked_by": "Huge integer batch widths and no materialized winning template." + }, + { + "question": "Does the inherited compiler and native/outer transfer pass independent mathematical review?", + "why_it_matters": "These remain premises of the conditional rank improvement and proposed kappa.", + "first_step": "Follow pinterbanget’s announced source/exit audit, then separately audit native closure and delayed BIT cover.", + "blocked_by": "Independent acceptance is not supplied by this package." + }, + { + "question": "Can the logarithmic majorant reduce ranks at PR4405’s higher proposed kappa point?", + "why_it_matters": "Combines this structural quantitative improvement with a distinct endpoint refinement.", + "first_step": "Pin PR4405’s exact endpoint parameters and choose a rational tested t strictly below its uniform exponent; then recheck the complete consumer and final integer powers.", + "blocked_by": "Independent acceptance of PR4405 and exact source binding for that additional parameter point; not tested here." + } + ], + "upstream_checkpoint": { + "commit": "12fa8c5c844be21bfefb38a19503fbd867a11244", + "priority_revision": 7, + "checked_at_utc": "2026-10-21T17:02:27.623597+00:00" + }, + "overlap": { + "checked_at_utc": "2026-10-21T17:02:27.623597+00:00", + "open_pr_records": 513, + "discussion_records": 3250, + "cache_pagination_complete": true, + "scope": "Open PR bodies and discussions; local READMEs/TASKs/ledger. No remote closed PR bodies or code-diff search.", + "nearest": "PR4359; pinterbanget PR4404 at 77f20afb7c24286937c75cb65a7f19e24e7a567f audits the original chain; parallel PR4405 at 873d1b3c96a83b701a5c0bba8e37a861e6672fef sharpens the old power majorant and increases the proposed kappa. This package instead replaces the power majorant by a logarithmic factor and reprices the smaller-rank kappa=0.0023 consumer." + } +} diff --git a/research/log-potential-template-ranks/VENDOR.json b/research/log-potential-template-ranks/VENDOR.json new file mode 100644 index 0000000000..cd8b6e6efb --- /dev/null +++ b/research/log-potential-template-ranks/VENDOR.json @@ -0,0 +1,69 @@ +{ + "schema": "pinned-predecessor-subset/1", + "repository": "https://github.com/zxv/integer-mult-bounds", + "source_pr": "https://github.com/CrocSwap/integer-mult-bounds/pull/4359", + "source_commit": "da637c87c89482bc4c86be36bd0071b3d400dbed", + "scope": "Ten byte-identical inputs for the conditional leaf-count, cover/atom and outer-parameter arguments only; native programs and full outer admission are not reproduced.", + "files": [ + { + "original_path": "research/kappa-rebuild/architecture/FINITE-PRECOMPILATION.md", + "path": "research/log-potential-template-ranks/vendor/FINITE-PRECOMPILATION.md", + "git_blob": "4badb40f0919c515823cb07e44c6470d4d6469ca", + "sha256": "4cb32f6b8e388ecf6ed41b5bbdeeb4539cb40c8424f194974afea58f7e0921e8" + }, + { + "original_path": "research/kappa-rebuild/bit/MIXED-PRODUCTIVE-BIT.json", + "path": "research/log-potential-template-ranks/vendor/MIXED-PRODUCTIVE-BIT.json", + "git_blob": "6a139eedbc1015c13df6f2a4333e1a89b5edd18d", + "sha256": "2f69a19f417c0e0d141c180f9b2fae3d358391b9a230f5848ee07c45450e70bf" + }, + { + "original_path": "research/kappa-rebuild/controller/EXPLICIT-TEMPLATE-BOUNDS.json", + "path": "research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.json", + "git_blob": "19b27c6e40a7bf20822ec35b7a4159cc7e89be2e", + "sha256": "3f1abfafa6f1bb192aafdf342a33ef60fd469fb0764be3eb1516984fc3c22c3f" + }, + { + "original_path": "research/kappa-rebuild/controller/EXPLICIT-TEMPLATE-BOUNDS.md", + "path": "research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.md", + "git_blob": "b00acfbe8bf0fb540e90eebd0d1fe0b094b1880d", + "sha256": "e54345bfdbceda1e41a68682c6902899372252d36d16ca914c1207f0bf03f8b0" + }, + { + "original_path": "research/kappa-rebuild/controller/P3-NATIVE-COVER.json.gz", + "path": "research/log-potential-template-ranks/vendor/P3-NATIVE-COVER.json.gz", + "git_blob": "51a09b3952a491f06780bf6ce5f69b385f026b21", + "sha256": "facfc6d6ecde151afb7e6a167776f3fdaac1c816e785a21a39f7f0bfd9140f3f" + }, + { + "original_path": "research/kappa-rebuild/controller/OUTER-PARAMETERS.json", + "path": "research/log-potential-template-ranks/vendor/OUTER-PARAMETERS.json", + "git_blob": "956853dcd169c71ac69fff5d2c213d2ebb89c22e", + "sha256": "15818c10c41ac2ea650e503de830795f6c88830a7f9be9553dd938bb1d76717a" + }, + { + "original_path": "research/kappa-rebuild/transfer-audit/OUTER-TRANSFER-AUDIT.md", + "path": "research/log-potential-template-ranks/vendor/OUTER-TRANSFER-AUDIT.md", + "git_blob": "e8b7ef8956ece5bd493cbf52113916e5dc288535", + "sha256": "67569961d068633c6ff3ac9dfde47a0c17f0da6d20432799dcc920cff92b5779" + }, + { + "original_path": "research/kappa-rebuild/bit/BIT-ALLSIZE-PARAMETERS.json", + "path": "research/log-potential-template-ranks/vendor/BIT-ALLSIZE-PARAMETERS.json", + "git_blob": "fbe6da7241357d89cf5c55b2e7ce2d0d046be32a", + "sha256": "edb273f59a27356ad89f38791590c3c806b228c3510eb508e01e89f2caba95ef" + }, + { + "original_path": "research/kappa-rebuild/bit/DELAYED-COVER-BRIDGE.md", + "path": "research/log-potential-template-ranks/vendor/DELAYED-COVER-BRIDGE.md", + "git_blob": "a58774e237c9362869a60a22bda35be09fb85872", + "sha256": "9731b93026717f5fa15851e3633cbb4bdc76eba2bffb9d6b4a3b69f7dd502443" + }, + { + "original_path": "research/kappa-observation-integration/release-work/current/package/outer/check_ledger.py", + "path": "research/log-potential-template-ranks/vendor/check_ledger.py", + "git_blob": "d3b6149c5c1cca84c7c305f6e2e32c814e30777e", + "sha256": "1dd56009986eb14dd6603c9193c7ad71dd45c7d005bf71c9cd3f916e66f54d98" + } + ] +} diff --git a/research/log-potential-template-ranks/VERIFY.json b/research/log-potential-template-ranks/VERIFY.json new file mode 100644 index 0000000000..ad4fe19a23 --- /dev/null +++ b/research/log-potential-template-ranks/VERIFY.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/log-potential-template-ranks/vendor/FINITE-PRECOMPILATION.md", + "research/log-potential-template-ranks/vendor/MIXED-PRODUCTIVE-BIT.json", + "research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.json", + "research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.md", + "research/log-potential-template-ranks/vendor/P3-NATIVE-COVER.json.gz", + "research/log-potential-template-ranks/vendor/OUTER-PARAMETERS.json", + "research/log-potential-template-ranks/vendor/OUTER-TRANSFER-AUDIT.md", + "research/log-potential-template-ranks/vendor/BIT-ALLSIZE-PARAMETERS.json", + "research/log-potential-template-ranks/vendor/DELAYED-COVER-BRIDGE.md", + "research/log-potential-template-ranks/vendor/check_ledger.py", + "research/log-potential-template-ranks/VENDOR.json" + ], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 120, + "checks": "Four logarithmic-majorant rank certificates, 12 rejecting scientific mutations, four failing previous grid points, complete BIT cover/atom chain, nine outer cost rows, 63 inherited predicates, 22 added interface inequalities and four rejecting outer controls." + } + ] +} diff --git a/research/log-potential-template-ranks/vendor/BIT-ALLSIZE-PARAMETERS.json b/research/log-potential-template-ranks/vendor/BIT-ALLSIZE-PARAMETERS.json new file mode 100644 index 0000000000..fbe6da7241 --- /dev/null +++ b/research/log-potential-template-ranks/vendor/BIT-ALLSIZE-PARAMETERS.json @@ -0,0 +1,69 @@ +{ + "C0_before_cover": "69/25000", + "C0_minus_C1": "1/100000", + "C1_after_cover": "11/4000", + "atom_power": "3/1000", + "finite_constants_to_replace": { + "ambient_dimension": "N, not50 or64", + "bad_fallback_children": "At most32*N^2 per bad final leaf", + "coefficient_data": "Every fixed rational entry, inverse, determinant, prefix descriptor and height", + "fixed_row_routes": "R, original port charts and every internal matcher/inverse", + "generic_affine_work": "At most4*N^2-2*N basic shears per rank1 normalizer together with its inverse", + "owned_storage": "C, bounded by one owned bank per allocated finite unit instance", + "paid_leaf_count": "P, including copied-center descendants", + "pointwise_and_copy_count": "L, literal compiled scalar/copy/erase records", + "productive_roles": "B, not3739 or661" + }, + "finite_template_hypothesis": "Fixed integers N>=2,B>=1,P>=1 and a whole-cover native schematic uniform word, with P/B < N^(1-C0), final paid leaves of rank1, arbitrary productive inputs and separately owned storage.", + "mixed_margin_at_C0": { + "display": 0.7944031286900184, + "lower": "67580344230009584908122845692691165477/85070591730234615865843651857942052864", + "strict_negative": false, + "strict_positive": true, + "upper": "270321376920038339632491382770764742407/340282366920938463463374607431768211456" + }, + "new_kappa": false, + "old_ordinary_saving": "384599/10000000000", + "ordinary_saving_admitted": "27/10000", + "ordinary_saving_before_final_relaxation": "27418653797/10000000000000", + "ordinary_saving_display": 0.0027418653797, + "prime_rule": { + "N_to_d_lower": "200001/200000", + "also_required": "Odd prime avoiding every fixed rational denominator, matcher determinant and chosen rank witness of the entire compiled word.", + "bound": "q > 25600000 * N^5", + "complete_moment_upper": "400001/400002", + "fallback_multiplier_upper": "400001/400000", + "good_moment_upper": "N^(-d), d=C0-C1", + "strict_moment_slack_lower": "1/400002" + }, + "root_cost_terms": [ + "e^(1-delta)", + "e^((1-delta)*(1-C1)+delta*(1-a_old))", + "e^delta * log(e)" + ], + "schema": "conditional-delayed-cover-BIT-allsize-parameters/1", + "source_sha256": { + "notes/batched-bit-rows.tex": "ef72c0ead19373cbc19c8a3aacb44dd0f75353ee5f4d055f775a986a4878022c", + "notes/three-stage-cover-bit.tex": "47123a756f823c83a0d48cca2bf5add6472cd88410b13aed345e70c8834fb511", + "notes/three-stage-cover-rows.tex": "6ad97a5cd7d6aecf978a81226e1c2763d37840caca130c61f3bf5c4ac111c5c8", + "research/kappa-rebuild/bit/BIT-P3-NATIVE-BINDING.json": "9ece46fdfda6182e757e9a3b1f513fb3d029d730f3bafdcd6ed59180a14175b0", + "research/kappa-rebuild/bit/DELAYED-COVER-BRIDGE.json": "1e1a91871ad8d1098b6851c95d257e8e3fb130222933009b4edfb5e2c2d5c471", + "research/kappa-rebuild/bit/DELAYED-COVER-BRIDGE.md": "9731b93026717f5fa15851e3633cbb4bdc76eba2bffb9d6b4a3b69f7dd502443", + "research/kappa-rebuild/bit/MIXED-PRODUCTIVE-BIT.json": "2f69a19f417c0e0d141c180f9b2fae3d358391b9a230f5848ee07c45450e70bf", + "research/kappa-rebuild/bit/bit_allsize_parameters.py": "59f92cf44019c27bde3db2f4482f2b5fcf25f0c3dcf071319d46b041f7b6a821" + }, + "status": "PASS_EXACT_PARAMETERS_CONDITIONAL_ON_FINITE_UNIFORM_PRECOMPILATION", + "stock": { + "asymptotic": "Fixed compiled N,B,P: k=O_(N,B,q)(w*log e)=o(e), w=ceil(e^(3/1000)); pad high rows once by factor<2.", + "borrowed_digits": "k <= D_N(ceil(e/w))*(N^2*(w-1)+ceil(log_q(B*|GL_N(F_q)|)))+ceil(log_q S_old)+1", + "depth_bound": "D_N(n)=floor(log_N n) for rank<=floor(n/N) children; any larger explicit integer bound is safe.", + "descendant_weights": "Only final leaves are lowered. This outer cover row and role type become ancestor data; every next ordinary invocation has fresh disjoint role stock.", + "reserve": "S(e,w)=W(w)^D_N(ceil(e/w))*S_old(e,w)", + "role_divisor": "W(w)=B*|GL_N(F_q)|*q^(N^2*(w-1))" + }, + "strict_power_gaps": { + "borrowed_stock_log_absorption": "9942581346203/10000000000000", + "final_relaxation": "418653797/10000000000000", + "linear_adapter": "2581346203/10000000000000" + } +} diff --git a/research/log-potential-template-ranks/vendor/DELAYED-COVER-BRIDGE.md b/research/log-potential-template-ranks/vendor/DELAYED-COVER-BRIDGE.md new file mode 100644 index 0000000000..a58774e237 --- /dev/null +++ b/research/log-potential-template-ranks/vendor/DELAYED-COVER-BRIDGE.md @@ -0,0 +1,401 @@ +# Delaying the BIT cover until the whole finite program is compiled + +Status: a constructive native-interface argument, with an exact local-ring +audit. This closes the particular common-weight mismatch identified in the +first mixed BIT proposal, conditional on the finite mixed-flow compiler +producing the stated finite projector program. It is not an independent +proof of that compiler's asymptotic termination or of integer multiplication. + +Substantial OpenAI assistance. Apache-2.0. This argument uses the arbitrary- +projector GL cover and weighted-child normal form in +[`notes/three-stage-cover-bit.tex`](../../../notes/three-stage-cover-bit.tex), +the retained PR589 local word and its predecessors, and the finite +precompilation proposal in `../architecture/FINITE-PRECOMPILATION.md`. +The decisive order of operations was proposed jointly with the architecture +research task: compile all internal jobs first; apply one common cover and +one common external weight only afterwards. + +## 1. The earlier obstruction was real + +A productive rank-eight helper is a proper projector job inside a larger +ambient address space. After an ambient GL cover, its endpoint is + +\[ +D_{gPg^{-1}}, +\] + +not the same fixed eight-coordinate interchange on every cover row. +Lowering this job immediately to a canonical recursive query introduces a +diagonal weight determined by the pivot coefficients of `g P g^-1`. +Jobs from different parents can have different such weights. The inherited +scalar word accepts one common external weight across every fresh role; +simply placing differently weighted jobs in its roles is invalid. + +The solution below does not identify these weights. It avoids creating +weighted internal jobs at all. Only leaves of the entire precompiled word +are lowered to canonical weighted calls. + +## 2. Native projector jobs before canonical lowering + +Fix an ambient rational head space of dimension `N` and the atom-reversal +matrix `C_N`. For any rational idempotent `P` put + +\[ +D_P=\begin{pmatrix} +I-P & PC_N\\ +C_NP & I-C_NPC_N +\end{pmatrix}. +\] + +For `G` invertible let + +\[ +Q_G=\operatorname{diag}(G,C_NGC_N). +\] + +Direct block multiplication gives + +\[ +Q_GD_PQ_G^{-1}=D_{GPG^{-1}},\qquad +D_PD_{I-P}=D_I. +\] + +No symmetry of `P` is required. The second identity says that any source +job and its complementary projector complete the full interchange on that +array. If a unit of rank `m` is used at column multiplicity `c`, first embed +its rational projectors into the chosen `mc`-dimensional coordinate block +of the common `N`-dimensional space. Complete unused coordinates are +spectators. All these dimensions and embeddings are constants of the +finite precompiled program. + +The local PR589 primitive, the new global controller, its pointwise boundary +adapters, and owned COPY storage can all be treated as a finite chronological +word of pointwise scalar operations, proper projector requests, restores, +and fixed right-multiplication symbols on one future cover coordinate. +Their exact finite operator identities are established independently of a +generic canonical child normalizer. An internal request may therefore be +replaced by a finite native word computing the same `D_P` on arbitrary data. + +This schematic qualification matters. The p3 construction already uses +per-port chart routes to share one local helper bank across 111 data ports. +It is not a 3,739-field word with those routes silently deleted. Before +choosing the final cover, embed every local projector and every port chart +into the common ambient `N`. Preserve all fixed right-route symbols during +substitution. Only then instantiate that single `GL_N` cover. A helper's +endpoint is the rank-eight local-space projector at its local invocation +vertex, while main data endpoints use their port-specific line and stage +projectors. `BIT-P3-NATIVE-BINDING.json` checks every fixed rational port +chart, this ownership distinction, and the complete recursive tariff. + +## 3. Equal rank gives a fixed rational matcher + +For rational idempotents `P,Q` of the same rank, choose a rational basis of +their images and kernels. Let `B_P` and `B_Q` be the corresponding full basis +matrices, with image columns first. Then + +\[ +S=B_PB_Q^{-1},\qquad SQS^{-1}=P. +\] + +This is a finite rational matrix construction. A physical execution of the +dense address map `Q_S` is **not** assumed. The matcher is used only as a +right multiplication of the full cover row, as follows. + +Choose a fixed odd prime `q` avoiding the denominators and nonzero +determinants of every native matrix and matcher in the finite program. +For atom width `w`, use one global cover + +\[ +\mathcal G=\operatorname{GL}_N(\mathbb Z/q^w\mathbb Z). +\] + +All matchers reduce to invertible matrices over this local ring. +An array role is accompanied by the full cover coordinate `g in G`. +Its entries at different `g` are independent data. + +Suppose a parent role at cover row `g` requests `D_(g P g^-1)` and a child +target role at its cover row `h` computes `D_(h Q h^-1)`. Before running +the child, route that complete target-role fiber by + +\[ +x_g\longmapsto y_{gS}=x_g. +\] + +Execute the child word on these routed inputs, then undo the role-specific +route. The endpoint on the parent's original `x_g` is exactly + +\[ +D_{(gS)Q(gS)^{-1}}=D_{gPg^{-1}}. +\] + +Every child target role can use its own fixed matcher `S`. Each mapping +`g -> gS` is a bijection of the *whole* cover fiber, so no input is copied, +discarded, or assumed zero. The child word can mix its roles at a common +child row `h`, because those routed inputs are arbitrary independent data. +After the completed word returns its independent endpoints, undoing the +routes restores the parent ordering. The finite flow's ownership and +chronology are still required; cover routing does not repair an aliased +or cyclic flow. + +## 4. One common external weight survives every internal routing + +At column multiplicity `f`, let the outer invocation's diagonal weight +`A` be any permitted generated descriptor on its `Nf` head atoms. It can +depend on exposed ancestor rows and atom indices. It must be independent +of all fresh role and cover fields of this entire compiled invocation. +Write `Lambda_A=diag(A,I)`. + +Conjugate the entire completed covered word by `Lambda_A`. Pointwise scalar +ADDs commute with this common address permutation across roles. Every +internal role route also commutes with it: a route changes only a fresh +role or the current cover row, while `A` is independent of both. Thus the +matching identity becomes + +\[ +\Lambda_A D_{(gS)Q(gS)^{-1}}\Lambda_A^{-1} +=\Lambda_A D_{gPg^{-1}}\Lambda_A^{-1}. +\] + +There is no child-specific weight to reconcile inside the precompiled +word. The source/complement product gives + +\[ +\Lambda_A D_I\Lambda_A^{-1}=F_A +\] + +on every productive source array. This is exactly the inherited weighted +full-interchange endpoint. Owned zero storage is unaffected by address +permutations and is excluded from productive output credit; its allocation, +initialization and final erasure still belong to the finite word. + +The condition on `A` is essential. The companion audit exhibits a concrete +failure when `A` is allowed to depend on the current fresh cover row. The +argument does not quietly weaken the old ancestor-only contract. + +## 5. Only the final leaves become weighted children + +After the mixed finite compiler has replaced every internal request, suppose +the remaining paid projector requests have rank one. At multiplicity `f`, +each is a rank-`f` residual on the outer atom space. Apply the inherited +generic ordered normal form to this *finished* leaf list. + +For a generic residue class, that proof produces unit lower intrabank and +cross-bank adapters around one contiguous weighted reversed interchange. +For column `j`, the resulting weight is + +\[ +A_{\rm child}[j]=A[i_0f+j]D_P[0], +\] + +with the inherited reversed tail pairing. The pivot coefficient is evaluated +from the current outer cover row and the fixed leaf projector. Those are +ancestor data when the recursive rank-`f` child is invoked. Its fresh roles +come from unused row stock, so the child's weight is independent of them. + +Different leaf calls can have different weights; the ordinary recursion +already permits this. Each such child itself receives one common weight +across all of *its* fresh roles and cover rows. This is the critical +distinction from calling a mixed unit on several already-normalized, +differently weighted parent jobs. + +Bad residue classes use the inherited genuine local-ring fallback, including +its swaps, paired scalings and reversals. This is charged explicitly rather +than declaring a nonunit pivot invertible. + +## 6. Routing is priced by the retained native lemma + +The cover row has the unique chart `g=g0+qG1`, with `g0` in `GL_N(F_q)`. +For each fixed matcher `S`, right multiplication gives a permutation of +the finite low type and a fixed affine map on the high matrix, with carry +determined by the low type. The retained proof of finite cover routing +implements this with a constant number of fixed scalings, ordered shifts +and old atom interchanges. Its cost is + +\[ +O(Vw^{1-a_{\rm old}}) +\] + +per fixed route. It is not a free address-gather operation. A precompiled +word contains finitely many matchers, so their total remains a finite +constant times this term. High matrices are streamed by fixed low type; +the number of tapes and program types does not grow with `w`. + +The same statement holds for nonintegral rational matchers: choose `q` +avoiding their fixed denominators, use their local-ring representatives, +and apply the retained fixed-rational routing lemma. The exact small audit +uses integral unimodular matchers to exercise the carry formula directly. + +## 7. Moment and row-stock consequences + +Let the finite uniform compiler have `B` productive source arrays, ambient +rank `N`, and `P` rank-one leaves, with a certified strict inequality + +\[ +\frac PB N^{-\tau}<1. +\] + +The covered, weighted word has the same normalized good-class leaf count. +Choose `q` large enough that the full fallback surcharge fits the displayed +slack. For example, the conservative inherited per-leaf bounds yield + +\[ +\mu_\tau\le +\frac PB N^{-\tau} +\left(1+\frac{2N^3}{q}\,32N^2\right)<1. +\] + +No old fixed choice of `q` or old numerical fallback envelope is reused for +the potentially enormous new `N`. Prime avoidance and a sufficiently large +prime exist because the whole precompiled program is finite. + +For the present candidate, use the exact mixed saving +`C0=69/25000=0.00276` for the finite compiler and retain +`C1=11/4000=0.00275` after covering. Put `d=C0-C1=1/100000`. +The former gives `P/B\frac{256N^5}{d}=25,600,000N^5. +\] + +Then the fallback multiplier is less than `1+d/4`, while +`N^d >= 1+d/2` for `N>=2`, using `log 2>1/2` and `exp x>=1+x`. +Thus the complete moment is strictly below +`(1+d/4)/(1+d/2)<1`. This uses an explicit exponent gap and does not +require knowing the eventual winning template's numerical moment slack. + +The cover consumes `N^2(w-1)` high-row digits plus a fixed low-type and role +reserve. Its finite owned-storage and scalar costs may be enormous. They +replace the old constants. For fixed `N` and a fixed finite word, the +ancestor reserve remains `O(w log e)`, and the previous eventual-threshold +arguments still apply after substituting those constants. They cannot be +reused numerically without that substitution. + +The existing weighted recursion can now be applied to this one uniform +supplier: every paid query has width at most `f`, the endpoint is `F_A`, and +all routing and scalar terms have the inherited permitted form. This is a +native-interface bridge. The complete final exponent still depends on the +mixed compiler's termination theorem, its exact leaf-count saving, and the +outer multiplication transfer. + +## 8. The ordinary BIT saving and explicit template constants + +The retained stopped recurrence gives + +\[ +T(n,w)=O(n+n^{1-C_1}w^{1-a_{\rm old}}),\qquad +a_{\rm old}=384599/10^{10}. +\] + +The old atom exponent `1/1000` cannot be reused here: its linear `n` term +would limit the ordinary saving to `0.001`. Instead choose +`delta=3/1000` and `w=ceil(e^delta)` from the original chunk width `e`. +For the whole compiled program set + +\[ +W(w)=B|\operatorname{GL}_N(\mathbb F_q)|q^{N^2(w-1)}. +\] + +A safe reserve is `W(w)^D * S_old`, with +`D >= floor(log_N ceil(e/w))`; all final ordinary children have rank at +most `floor(n/N)`. Therefore the borrowed high-digit count satisfies + +\[ +k\le D\left(N^2(w-1)+ +\left\lceil\log_q(B|\operatorname{GL}_N(\mathbb F_q)|)\right\rceil\right) ++\left\lceil\log_qS_{\rm old}\right\rceil+1 +=O_{N,B,q}(w\log e). +\] + +This is `o(e)`. For sufficiently large `e`, borrow `ka_BIT` and `delta<1-a_BIT` hold strictly. The linear adapter +term and the borrowed-stock logarithm are lower order. One may relax the +ordinary saving to the simpler rational `27/10000=0.0027`. +`BIT-ALLSIZE-PARAMETERS.json` records all strict rational gaps and the +exact mixed margin at `C0`. This remains conditional on the finite uniform +compiler premise; the enormous word is not materialized in this package. + +The final ambient dimension is `N`, the productive role count is `B`, and +the rank-one leaf count is `P`. They are not the old `64`, `661`, `3739`, +or the base unit's literal counts. Let `C` be the total allocated owned +array fields, `L` the literal scalar/copy/erase count, and `R` all fixed +right routes including inverses. Keep the full finite matrix and +coefficient-height list. The new fixed tape inventory can use one stream +per productive or owned role, with the inherited parking stack; it is +finite in `B+C`. Every route is charged, and every final leaf has its own +normalization and possible fallback. A rank-one generic normalizer and +its inverse use at most `4N^2-2N` elementary lower/cross-bank shears; the inherited bad +normalizer uses at most `32N^2` recursive calls of width at most `f`. + +These constants can be enormous and affect the eventual threshold. Their +dependence on the fixed compiled template does not introduce a new power +of the later input length. The mixed-flow argument is used to bound the +normalized number of paid rank-one leaves; it must not assume that dense +matrix routing costs stay uniformly bounded while the candidate template +dimension `N` is increased in the existence search. + +## 9. Exact finite audit + +Run: + +```sh +python3 -B research/kappa-rebuild/bit/delayed_cover_bridge.py +``` + +The audit enumerates every one of the 3,888 rows of `GL_2(Z/9Z)` for each +of two independently matched target roles. It checks 7,776 exact physical +projector identities, both full cover bijections, the affine high-row carry +formula, and every one of the 6,561 addresses for common-gauge scalar +commutation. Its external weight is `(2,4)`, so it is not restricted to an +unweighted or constant-across-axis input. The emitted leaf-weight histogram +is nonconstant. Two explicit negative controls reject omitting a matcher +and allowing the external weight to depend on the fresh cover row. + +These are independent checks of concrete algebra and a genuine local ring. +The general argument is the conjugacy calculation above, not an inference +from the finite sample. + +## Open next questions + +1. Independently audit that the finite lockstep compiler only substitutes + whole arbitrary-input jobs and gives each simultaneously live child role + a distinct physical array. The row matching here assumes that ownership. +2. Bind the new BIT p3 native physical projector list and its exact local + primitive into the abstract finite compiler, including all COPY centers. +3. Write the parameter substitutions for the eventual row reserve and the + final BIT/complex outer exponent. A finite numerical mixed moment alone + is still insufficient for a new multiplication claim. diff --git a/research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.json b/research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.json new file mode 100644 index 0000000000..19b27c6e40 --- /dev/null +++ b/research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.json @@ -0,0 +1,149 @@ +{ + "cases": [ + { + "N": { + "H1": 276540184361, + "encoding": "2^H1" + }, + "delta": "1/2000000", + "eta_strict_lower": "1/4", + "exact_integer_test": { + "N_exponent": 15589, + "P_and_B_exponent": 15625 + }, + "exit_power_gap": "0", + "family": "complex", + "final_strict_power_gap": "1/2000000", + "h": "1/10", + "induction_constant_A": "n0^(1-z0)", + "k_min": 6, + "m": 57, + "m_to_h_integer_comparison": { + "left": 57, + "right": 1024 + }, + "materialized_winning_word": false, + "n0": { + "H0": 60000040, + "encoding": "2^H0" + }, + "negative_controls": { + "one_less_H0_fails_chosen_exit_bound": true, + "one_less_H1_fails_strict_final_bound": true, + "requested_004_not_supported_by_this_unit": true + }, + "paid": { + "1": 17623, + "2": 5065, + "3": 1738, + "4": 714, + "5": 254 + }, + "proven_uniform_moment": "P_N/B_N < N^z", + "r_max": 5, + "rank_one_surplus": 224, + "strict_test_margin": { + "lower": "0.00872690086259165952018340218333643", + "upper": "0.00872690086259165952018340218333644" + }, + "t": "199539/200000", + "targets": { + "6": 192, + "7": 56, + "8": 93, + "9": 1229, + "25": 448, + "57": 224 + }, + "template_definition": "Apply the integer, ordered, denominator-cleared compiler to this exact N. Keep every scalar/route operation and one owned bank per finite unit instance; only final rank-one leaves remain paid.", + "tested_mixed_saving": "461/200000", + "theta_integer_comparison": { + "left": 9765625, + "right": 10077696 + }, + "theta_upper": "9/10", + "uniform_saving": "36/15625", + "z": "15589/15625", + "z0": "1995391/2000000" + }, + { + "N": { + "H1": 6552928412, + "encoding": "2^H1" + }, + "delta": "9/2000000", + "eta_strict_lower": "1/4", + "exact_integer_test": { + "N_exponent": 24931, + "P_and_B_exponent": 25000 + }, + "exit_power_gap": "3/32000000", + "family": "BIT", + "final_strict_power_gap": "9/2000000", + "h": "1/16", + "induction_constant_A": "n0^(1-z0)", + "k_min": 8, + "m": 50, + "m_to_h_integer_comparison": { + "left": 50, + "right": 65536 + }, + "materialized_winning_word": false, + "n0": { + "H0": 10666731, + "encoding": "2^H0" + }, + "negative_controls": { + "one_less_H0_fails_chosen_exit_bound": true, + "one_less_H1_fails_strict_final_bound": true, + "requested_004_not_supported_by_this_unit": true + }, + "paid": { + "1": 9261, + "2": 9394, + "3": 553, + "4": 308, + "5": 714, + "6": 77, + "7": 1465 + }, + "proven_uniform_moment": "P_N/B_N < N^z", + "r_max": 7, + "rank_one_surplus": 225, + "strict_test_margin": { + "lower": "0.06709318391020230634322405194711404", + "upper": "0.06709318391020230634322405194711405" + }, + "t": "997231/1000000", + "targets": { + "8": 3073, + "22": 444, + "50": 222 + }, + "template_definition": "Apply the integer, ordered, denominator-cleared compiler to this exact N. Keep every scalar/route operation and one owned bank per finite unit instance; only final rank-one leaves remain paid.", + "tested_mixed_saving": "2769/1000000", + "theta_integer_comparison": { + "left": 33232930569601, + "right": 35184372088832 + }, + "theta_upper": "15/16", + "uniform_saving": "69/25000", + "z": "24931/25000", + "z0": "1994471/2000000" + } + ], + "new_kappa_claimed_by_this_file": false, + "proof_dependency": "The written native finite-precompilation theorem, including arbitrary-input closure and every exact ordered batch. This receipt checks its quantitative sufficient inequalities, not the theorem as a formal proof.", + "schema": "explicit-compressed-uniform-template-ranks/1", + "scope": "Explicit fixed ranks are specified in compressed form. No near-threshold word, GL cover, B_N, P_N or U_N is materialized. Their exact finite algorithms and replacement constants remain part of the construction.", + "source_sha256": { + "research/kappa-rebuild/architecture/FINITE-PRECOMPILATION.md": "4cb32f6b8e388ecf6ed41b5bbdeeb4539cb40c8424f194974afea58f7e0921e8", + "research/kappa-rebuild/architecture/mixed_target_probe.py": "011c3c9d0cf81103dc84d709a0e36793eb7c5ae3f23c85eac27650ef13afa04a", + "research/kappa-rebuild/bit/MIXED-PRODUCTIVE-BIT.json": "2f69a19f417c0e0d141c180f9b2fae3d358391b9a230f5848ee07c45450e70bf", + "research/kappa-rebuild/controller/P3-NATIVE-COVER.json.gz": "facfc6d6ecde151afb7e6a167776f3fdaac1c816e785a21a39f7f0bfd9140f3f", + "research/kappa-rebuild/controller/explicit_template_bounds.py": "4b3fbc216c32821729403d32efa8f75a418079b3bb57eb6204e044411d7d7f6f", + "research/kappa-rebuild/transfer-audit/AUDIT.md": "032488343667d19613cab84df5dad554cfd2a283fb4fc0d4c9b4d165cfa04669", + "research/kappa-rebuild/transfer-audit/finite_dag_audit.py": "f842f0e07ca40a181782a565a381b0ee20c6a4b08b8c2b8a4d5d630381bd1e8e" + }, + "status": "PASS_EXACT_SUPERPOTENTIAL_AND_COMPRESSED_RANK_BOUNDS" +} diff --git a/research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.md b/research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.md new file mode 100644 index 0000000000..b00acfbe8b --- /dev/null +++ b/research/log-potential-template-ranks/vendor/EXPLICIT-TEMPLATE-BOUNDS.md @@ -0,0 +1,108 @@ +# Explicit finite ranks, without an unperformed search for the first success + +Apache-2.0. Substantial OpenAI assistance. The integer lockstep flow is Jacob +Alan Sussman's Theorem 1G. The native finite precompilation argument and its +independent audit are in `../architecture/FINITE-PRECOMPILATION.md` and +`../transfer-audit/AUDIT.md`. This note strengthens the quantitative choice +of the fixed template rank. It does not claim to materialize that template. + +## 1. Use a strict superpotential rather than an unknown exact root + +Write `L(n)=P_n/B_n` for the exact normalized number of paid rank-one leaves +in the integer compiler, including source complements and every exit batch. +Choose rational `0theta`, and put `h=1-theta_bar>0` and +`delta=z0-t>0`. In our two cases the exact integer inequalities prove +`m^h<2` and `2*r_max<=16`. Since `n>=m`, + +``` +m*E(n)/n < 16*n^(-h). +sum_e x_e*e^z0 <= (16*n^(-h))^delta * sum_s w_s*s^z0. +``` + +The source complements pay for this exit term. Concavity gives + +``` +n^z0-sum_s w_s*(n-s)^z0 >= eta*sum_s w_s*s^z0, +eta=z0*m^(z0-1). +``` + +The exact logarithm intervals check `z0>1/2` and `m^(1-z0)<2`, hence +`eta>1/4`. Set + +``` +H0=ceil((3+4*delta)/(h*delta)), n0=2^H0. +``` + +This exceeds the finite base range. For every `n>=n0`, the exit coefficient +is at most `1/80}`, `k_min=min{k:W_k>0}`, and +`r_max=max{r_j}`. Require `r_max g*S`, keeps one +external weight throughout the entire finite circuit, and lowers only its +final rank-one leaves. All rational matchers, role routes and their inverses +are fixed before choosing the odd prime and its exclusions. Every route +uses complete equal-multiplicity cover fibers and the retained, costed row +permutation primitive. This gives the same finite DAG argument in the +rational-cover program category. The BIT binding supplies the actual native +projectors; a rank count alone would not provide this implementation. + +## 2. Proposed conclusion + +Suppose the preceding hypotheses hold and the mixed balance has root +`tau` in `(0,1)`: + +``` +sum_j r_j^tau = sum_k W_k k^tau. +``` + +For every `z` with `tau=2`, a fixed number `B_N` of productive arrays, +and only rank-one paid children, whose number `P_N` satisfies + +``` +P_N < B_N * N^z. +``` + +Every productive output is the full rank-`N` job. The construction may have +an enormous finite scalar word, role inventory and owned-storage requirement. +Those quantities affect constants and the eventual input threshold. They are +not omitted and are not credited as extra output jobs. + +If this uniform supplier is admitted under the retained native, precision and +fixed-tape premises, the existing uniform recursion applies directly. A new +dynamic RAM-to-Turing-machine simulation is not being assumed here. + +## 3. The integer lockstep flow at a fixed rank + +This is the part of Theorem 1G used by the compiler. At one fixed top rank +`N`, its units, source jobs and exit jobs have integer multiplicities. +For a multi-index `a` on the target types define + +``` +c(a) = product_k k^(a_k), +u(a) = multinomial(|a|;a) * product_k W_k^(a_k). +``` + +The exact Pascal identity is + +``` +u(b) = sum_{k:b_k>0} W_k*u(b-e_k). +``` + +Let `G` be the largest `|a|` with `m*c(a)<=N`. A class is indexed by a +sequence of paid rounds `s` of length `d<=G`; its dilation is +`rho_s=product r_j`. It contains `u(a)` units at column `rho_s*c(a)` for +each `a` with `|a|=G-d` and `m*rho_s*c(a)<=N`. + +For one parent paid round, the Pascal bijection matches its job copies to +target roles of the child class, at exactly equal integer ranks. Missing +demands are top sources. Separation ensures every parent job is consumed. +The source ranks lie in `(N/m,N]`; only the deepest classes produce exit +jobs, all strictly smaller than `N` once `N` is outside the finite base range. + +Process a class in word order. At round `j`, suspend every unit of that +class, complete the entire child class fed by that round, and only then +advance the parents to round `j+1`. This forbids a unit from requiring both +an earlier and a later round of the same suspended parent. The resulting +dependency graph is finite and acyclic. Its edges carry complete array jobs, +not individual scalar values copied for free. + +These integer quantities exist before normalizing the sources to total +weight one. Let `S_s` be the number of source jobs of rank `s`, let +`S=sum_s S_s`, and let the ordered exit batches be `(e,t)` with `t` jobs +of rank `e` each. This finite integer flow is the compiler input. + +## 4. Clear every batch denominator constructively + +Induct on the integer top rank `N`. For each smaller rank `e` the compiler +has already constructed a uniform program on `B_e` arbitrary arrays, +computing full rank `e` with `P_e` paid rank-one calls. For a sufficiently +small rank use the ordinary sequential program: `B_e=1`, `P_e=e`. + +For the current flow choose an integer `a` divisible by every `B_e` needed +for an exit and every `B_(N-s)` needed for a nonzero source remainder. +The product of those finitely many positive integers is a valid choice; +their least common multiple is a smaller optional choice. Set + +``` +B_N = a*S. +``` + +Assign `a*S_s` of the input arrays to each source rank `s`. On each of those +arrays, first complete its `N-s` complementary coordinates using the +already-compiled smaller uniform program. All such batches are integral +because `a` is divisible by their program widths. This preliminary action +commutes with the intended `s`-coordinate job and fixes its input coordinates. + +Make `a` copies of the integer lockstep flow. Route its source arrays to +their exact input slots using permitted whole-array adapters. At a deepest +exit batch, `a*t` is divisible by `B_e`; replace that batch by copies of +the smaller uniform rank-`e` program. Restore its role ordering and adapters +before resuming the suspended parent class. Execute the finite DAG in the +lockstep order, and finally restore the original source-array ordering. + +Every array has now received its disjoint complementary job and source job, +hence the full rank-`N` transform. No copied scalar input or blank helper is +treated as another independent output. Every original array occurs exactly +once as a source; interior target slots are jobs on those arrays, not new +productive inputs. + +Induction removes all recursive calls: the only remaining paid children +have rank one. Clearing denominators multiplies productive arrays and paid +operations equally, so it preserves the per-array leaf count. In formulas, + +``` +P_N/B_N = (1/S) * [ + sum_s S_s * (P_(N-s)/B_(N-s)) + + sum_(ordered exit batches e,t) t * (P_e/B_e) +]. +``` + +Zero-rank terms vanish. Any plain rank-one exits are the ordinary base +program. Scalar and routing passes have their own analogous nonnegative +count and must be included in the asymptotic cost used to choose `N`. + +This construction uses full integer batches; it does not assume that +fractional pieces of a physical array can be routed at zero cost. Its exact +replication factors can be impractically large, which is acceptable for a +fixed finite supplier existence statement but must be disclosed. + +## 5. Why some fixed N has the required saving + +The independent audit sharpened this step to a direct count of paid leaves. +It does not require a running-time comparison between a RAM flow and native +tapes. Let `L(n)=P_n/B_n`, let `w_s=S_s/S`, and let `x_e` be the exit counts +normalized by the number S of source arrays. The actual integer compiler +satisfies + +``` +L(n) = sum_s w_s L(n-s) + sum_e x_e L(e), +sum_s w_s = 1, +sum_e x_e e^tau = sum_s w_s s^tau. +``` + +The last equality follows by canceling every internal matched job in the +exact tau-potential balance. The source ranks satisfy `n/m0`, concavity gives + +``` +n^z0 - sum_s w_s (n-s)^z0 >= eta * sum_s w_s s^z0. +``` + +Indeed, for `t=s/n` in `[1/m,1]`, +`1-(1-t)^z0 >= z0*t >= eta*t^z0`. For every sufficiently large n the +exit coefficient is less than `eta/2`. Every complement and exit has +smaller rank than n, so strong induction on the exact recurrence proves +`L(n)<=A*n^z0`, with finite A chosen to cover the smaller ranks. Eventually +`L(N) 25,600,000*N^5, odd, avoiding every fixed native/matcher denominator and rank witness", + "row_reserve": "For the new finite N and role/word constants, log_q S(e,w)=O(w log e); w=ceil(e^(3/1000)).", + "saving_after_cover": { + "decimal": "0.00275", + "rational": "11/4000" + }, + "saving_before_cover": { + "decimal": "0.00276", + "rational": "69/25000" + } + }, + "paid": { + "1": 9261, + "2": 9394, + "3": 553, + "4": 308, + "5": 714, + "6": 77, + "7": 1465 + }, + "precompilation_saving": { + "decimal": "0.00276", + "rational": "69/25000" + }, + "strict_mixed_margin": { + "lower": "0.79440312869001840349907639031552322", + "upper": "0.79440312869001840349907639031552323" + }, + "targets": { + "22": 444, + "50": 222, + "8": 3073 + }, + "uniform_template_definition": "First finite N in the specified exact compiler for which P_N/B_N < N^(1-C). Existence and native closure require the separate written proofs." + }, + "complex": { + "margin_at_004": { + "lower": "-163.47161919550931457258600794984177083", + "upper": "-163.47161919550931457258600794984177082" + }, + "paid": { + "1": 17623, + "2": 5065, + "3": 1738, + "4": 714, + "5": 254 + }, + "precompilation_saving": { + "decimal": "0.002304", + "rational": "36/15625" + }, + "strict_mixed_margin": { + "lower": "0.10548315917752229262732557699459137", + "upper": "0.10548315917752229262732557699459138" + }, + "targets": { + "25": 448, + "57": 224, + "6": 192, + "7": 56, + "8": 93, + "9": 1229 + }, + "uniform_template_definition": "First finite N in the specified exact compiler for which P_N/B_N < N^(1-C). Existence and native closure require the separate written proofs." + } + } +} diff --git a/research/log-potential-template-ranks/vendor/OUTER-TRANSFER-AUDIT.md b/research/log-potential-template-ranks/vendor/OUTER-TRANSFER-AUDIT.md new file mode 100644 index 0000000000..e8b7ef8956 --- /dev/null +++ b/research/log-potential-template-ranks/vendor/OUTER-TRANSFER-AUDIT.md @@ -0,0 +1,426 @@ +# Independent transfer audit for the conditional kappa = 0.0023 construction + +Status: the changed supplier interfaces close under the inherited analytic, +ordered-movement and fixed-tape hypotheses. This is a mathematical audit +with independently generated exact receipts, not a formal proof certificate +or an unconditional integer-multiplication theorem. Substantial OpenAI +assistance. Apache-2.0. + +The conclusion uses the **actual complete p3 programs**, the finite native +precompiler, the delayed BIT cover, fresh precision and stock constants, +and the nearly critical outer assembly. It does not infer a multiplication +bound from a favorable recursive-cost histogram alone. + +## 1. Conclusion and quantitative separation + +The independently checked conditional outer target is + +``` +kappa = 23/10000 = 0.0023. +``` + +Every one of the nine retained outer cost rows has a strictly larger saving. +The smallest saving is `0.00230197698`; its margin above the declared target +is exactly `98849/50000000000 = 0.00000197698`. + +The construction is deliberately separated into the following interfaces. + +| Interface | Independently checked result | +| --- | --- | +| Complete complex mixed unit | 2,242 arbitrary productive fields, one uncredited owned center; full physical phase, owner and scalar bill | +| Complete BIT mixed unit | 3,739 arbitrary productive fields, one uncredited owned center; 63 paid calls on copied-center data | +| Finite complex uniform program | Fixed rank `N=2^276540184361`, saving `0.002304` | +| Finite BIT uniform projector program | Fixed rank `N=2^6552928412`, saving `0.002760` before its cover | +| Covered BIT uniform program | Saving `0.002750`, including every bad-class fallback | +| Ordinary arbitrary-width BIT | Saving `27418653797/10^13 = 0.0027418653797`; conservatively admit `0.0027` | +| Effective outer supplier saving | `0.0023025` | +| Completed selected-axis complex layer | Linear semantic guard `C0*d`, with a new computable fixed `C0` | +| Conditional outer result | `kappa=0.0023` | + +The ranks above are exact compressed integers, not suggested search bounds. +The winning words are defined by finite integer algorithms at those ranks. +Their enormous instruction lists and constants have not been materialized. +The fully materialized rank-57 complex and rank-50 BIT examples are useful +ownership/complement tests; neither small example attains the limiting +savings in this table. + +## 2. The finite bridge preserves complete jobs and actual ownership + +The reviewed native precompilation theorem is +[`../architecture/FINITE-PRECOMPILATION.md`](../architecture/FINITE-PRECOMPILATION.md). +Its integer lockstep flow is based on Jacob Alan Sussman's Theorem 1G; +the independent chronological reconstruction and challenge cases are in +[`AUDIT.md`](AUDIT.md) and `FINITE-DAG-AUDIT.json`. + +At a fixed ambient rank `n`, every productive source is a complete arbitrary +array on all `n` coordinates. Its designated rank-`s` job is supplemented +by a paid complementary rank-`n-s` job. The complement is run first. +The completed mixed word then supplies the designated endpoint, and the +product is the full transform. This uses autonomy of the completed endpoint; +it does not require the complement to commute with intermediate operations +of the mixed circuit. + +All normalized source counts and all occurrences of lower-rank batches are +cleared by one explicit finite integer multiplier. An ordered batch uses +distinct physical fields. Each recursive demand occurs strictly after its +input exists and before its parent continues; every recursive rank is +smaller. The independent graph audit rejects aliased input slots, incomplete +batch clearing and cycles. It includes paid demands on owned fields. + +A parent-owned copied center can be passed as one arbitrary input to a +lower-rank unit. Correlation with another array is harmless: the child +identity holds for every assignment of its distinct physical input slots. +The parent copy remains present until the actual call returns, and its +eventual erasure is legal only after the prescribed restoration. A fresh +child center has a separate owner tag. No copied center becomes another +productive source, and simultaneous suspended centers are not merged into +one bank merely because they have the same recursion depth. Conservatively +allocate one full center per finite mixed-unit instance and charge every +initialization, pass and erasure. These are fixed constants of the compiled +uniform word. + +### Explicit termination and one specified winning rank + +Let `L(n)=P_n/B_n` be the exact average number of rank-one leaves per +productive full-rank source, including complements and owned-field calls. +For the complex case the strict mixed test is at saving `0.002305`; for BIT +it is at `0.002769`. Put `t=1-C_test`. Cancellation in the finite flow gives +an inequality, not an assumed equality: + +``` +sum_e x_e*e^t <= sum_s w_s*s^t, +L(n) = sum_s w_s*L(n-s) + sum_e x_e*L(e), +sum_s w_s = 1. +``` + +The separate positive rank-one surplus gives `L(n)<=n` by induction. With +source ranks `n/m0`. Concavity shows that the source complements leave at least +`eta*sum_s w_s*s^z0`, where `eta=z0*m^(z0-1)>1/4`. Choose + +``` +H0 = ceil((3+4*delta)/(h*delta)), +n0 = 2^H0, +A = n0^(1-z0). +``` + +Then the exit coefficient is at most `1/8` for every `n>=n0`. The base +bound `L(n)<=n` covers `n<=n0`; strong induction gives `L(n)<=A*n^z0` +for every rank. Finally + +``` +H1 = floor(H0*(1-z0)/(z-z0))+1, +N = 2^H1 +``` + +ensures `L(N) -> i^(a+q(x)) |M*x+b>` lifts to the same address recipe on each column, +with phase `a*f+sum_j q(x_j)` modulo four. Complete spectator coordinates +remain present. This substitutes physical operators in the already checked +role-level linear identity; it does not assume tensor power is additive. +The final normalizers make every productive endpoint the canonical +positive tensor job. Coordinate permutations place these on any required +disjoint axes. Remainder axes at an arbitrary width receive individual +paid kernels and remain completed spectators of the lifted word. + +[`FINITE-TEMPLATE-CLOSURE.md`](FINITE-TEMPLATE-CLOSURE.md) supplies fresh +coefficient, owned-space, row and precision constants. In particular, for +the completely expanded word with rank `N`, productive width `W`, rank-one +paid count `P`, unit count `U`, and conservative owned count `O=U`, put + +``` +Z = W+O, +G = 1494376*U, +E = 64*(Z+N+P+G+1)^3, +B = P+E, +C0 = 32*N*B^2, +C1 = 1. +``` + +The completed-child semantic recurrence is +`A(e)<=A(floor(e/N))+P*floor(e/N)+E`. It gives `A(e)<=2B*e`; completed +disjoint outer pieces and retained phases fit below `C0*d`. This measures +completed returned values without rounding or re-encoding children. +The large temporary values inside a child are not also unfinished parent +operands. All storage stays on one common fine grid. + +For `d<=c*p^epsilon` with `epsilon<1`, the explicit threshold in that note +ensures `C0*d<=p/4`, hence total component width at most `2p`. The new `C0` +may be enormous, but it is fixed. There is no inherited small numerical +guard constant and no appeal to the obsolete pathwise precision exponent. + +## 4. BIT uses one delayed ambient cover and one common weight + +The argument reviewed is +[`../bit/DELAYED-COVER-BRIDGE.md`](../bit/DELAYED-COVER-BRIDGE.md). +`BIT-BRIDGE-AUDIT.json` supplies a separate exact implementation audit. +The essential order is to precompile the entire finite projector program +first, and only then apply a single whole-ambient `GL_N` cover and external +weight. Internal jobs are not prematurely lowered to differently weighted +canonical children. + +For a rational idempotent `P` in ambient dimension `N`, write + +``` +D_P = [[I-P, P*C_N], [C_N*P, I-C_N*P*C_N]], +Q_S = diag(S, C_N*S*C_N). +``` + +Direct multiplication gives `Q_S D_Q Q_S^-1=D_(SQS^-1)` and +`D_P D_(I-P)=D_I`, including nonsymmetric projectors. Equal-rank rational +idempotents admit a fixed rational matcher `S` by matching image and kernel +bases. After the finite program is fixed, choose an odd prime avoiding all +its finitely many denominators, determinants and rank witnesses. All lifts +use these same rational matrices, so this choice is independent of the +eventual column multiplicity. + +Use the full cover `g in GL_N(Z/q^w Z)`. To match a parent request `P` to a +child endpoint `Q`, route that child's complete role fiber by `g -> gS`, +execute the entire child, and undo the route. Its autonomous endpoint is +exactly `D_(gPg^-1)`. Separate target roles may use separate matchers: each +route is a bijection of a full fiber carrying arbitrary data. Native port +charts and local helper ownership remain inside the schematic program; +they are not silently discarded when the ambient dimension grows. + +This is a paired whole-job construction. It does not implement arbitrary +isolated dense address maps by renaming rows, and it does not assume a +generic RAM-to-tape simulation. + +The inherited weight `A` is common to all fresh roles and independent of +the current complete cover field. Consequently `Lambda_A=diag(A,I)` +commutes with every internal role route and every pointwise scalar/COPY +operation. The completed source/complement endpoint is therefore the +required weighted full interchange. Only final rank-one leaves are lowered +to weighted canonical children. Their pivot weights depend on this parent +cover row, which is ancestor data when the child's fresh fields are exposed. +Different leaves can have different weights without violating the common +weight requirement inside any one child. + +At `f` columns the inherited reversed pairing is essential. The actual +lift uses `P tensor I_f` with full tail reversal `C_(Nf)`, or equivalently +conjugates the straightforward tensor lift by the blockwise `C_f` reversal. +The independent audit checks this on nonsymmetric rational projectors and +rejects dropping that reversal. It also checks arbitrary common external +weights depending on axes and columns. Current-cover-dependent weights +remain forbidden. + +The independent native replay covers all 636 rational frames, 2,386 nested +MOVE pairs, both 661-column local words, 111 ports and 666 embedded charts, +3,073 helper owners, and all 63 paid COPY-center calls. The rank-50 full-job +example has `W=3739`, `P=186725` and surplus `50*3739-186725=225`. +Additional checks include nonsymmetric rational matchers, a genuine +non-field ring, and 7,776 inverse/carry tests over `GL_2(Z/9Z)`. The last +tests retain all q-adic digits of the matcher; dropping its higher digits +has an explicit failing control. + +### Paid cover, atom conversion, and ordinary endpoint + +Right multiplication on `g=g0+qG1` is a finite low-type permutation plus a +fixed affine high-matrix map with its correct carry. The retained native +cover-routing lemma charges it as `O(V*w^(1-a_old))`. The finite number of +routers changes the constant, not this exponent. All bad generic classes +receive their actual fallback. With the explicit choice + +``` +q > 25,600,000*N^5 +``` + +and the finite denominator exclusions, the complete covered moment is at +most `400001/400002<1`. This includes the full fallback bill without +subtracting the good-class calls or assuming bad classes are independent. + +Use atom width `w=ceil(e^0.003)` and the retained old ordinary saving +`a_old=384599/10^10`. The resulting saving is + +``` +(1-0.003)*0.002750 + 0.003*a_old + = 27418653797/10^13 + > 0.0027. +``` + +The linear adapters are paid because `0.003` exceeds this saving. The +borrowed row stock satisfies `log S(e)=O(e^0.003 log e)` and is lower order +because `0.003<1-a_BIT`. Its complete borrowed field is restored. Padding +of full rows is performed once for the whole invocation and removed after +the completed endpoint. Numeric padding to atom lengths costs only a +fixed `q`-dependent factor. + +The ordinary wrapper uses two completed reversed calls and three charged +bank additions, in chronological order: + +``` +D <- D-H; F_n; D <- D+H; F_n; D <- H-D. +``` + +For `(H,D)` this gives successively `(H,D-H)`, `(C(D-H),CH)`, +`(C(D-H),CD)`, `(D,D-H)`, `(D,H)`. Thus it really supplies the ordinary +interchange, at constant multiplicative overhead and `O(Vn)` extra work. +No unshown batch or free half-swap is required. + +## 5. The changed row reserve fits the support-local outer wrapper + +This is an essential functional obligation, not another numerical moment +test. The applicable retained wrapper is the global support-local wrapper +in `vendor/pr1673/capped-phase-fusion/SUPPLIER-SUPPORT-AUDIT.md` and its +`SUPPORT-ADVERSARIAL-AUDIT.md`, under the current outer package. Its completed +supplier calls cover the **whole global dyadic tensor**. Calling separately +inside fixed coarse-label microboxes would not satisfy the interface. + +For a phase with `h` selected bits, take `G=4*ceil(log2 p)+6` and complete +neighborhoods of width `K=128G`, one inside each selected original axis. +The axis length grows like `p^(1-epsilon)`, so every fixed multiple of +`log p` fits eventually. Exposing the complete neighborhoods moves at most +`2hK` bit positions. Native binary matrices have fixed rank, so their +column lifts factor into finitely many parallel row additions on these +selected bits. Unit phases have fixed formulas of the same selected-bit +support. They do not introduce dependence on unrelated coarse labels. + +Reserve whole selected chunks for the two front controls, back control and +row prefix. **Do not first transform their selected bits.** The completed +active invocation is identity on every reserved coordinate for arbitrary +contents; those selected-axis kernels can be completed in later shrinking +phases. The finite guard condition used by the retained router is directly +satisfied by `K=128G`; no claim is made that this constant ratio satisfies +the older, stronger wording `K/log p -> infinity`. + +The new BIT stock cannot simply be inserted into the old statement +`O(log h)` for all nested reserves. Its own ordinary full-field interface +supplies its rows internally. Alternatively, the following conservative +external product bound explicitly covers simultaneous stock. A BIT call +has width at most `C*h*(log p)^2`. Its logarithmic stock is +`O(h^0.003*(log p)^(2*0.003+1))`. Including a further `O(log h)` nesting +factor and the complex stock gives, after enlarging one fixed constant, + +``` +q0(h,p) <= C*(log2 h + h^0.003*(log2 p)^3 + 1) +``` + +reserved complete chunks. This bound retains the **product** of stock +requirements; using their maximum would be invalid. Since `0.003<1`, there +is an explicit fixed polylogarithmic threshold `H(p)` above which +`q0(h,p)+O(1)<=h/64`. For example one may enlarge a fixed multiple of +`[1024*C*(log2 p)^3]^(1/(1-0.003))` to cover the logarithmic term and all +finite-template base thresholds. Consequently + +``` +R(h) <= 3h/128 + q0(h,p) + O(1) <= h/16 +``` + +for all sufficiently large active phases. The remaining `h<=H(p)` bits are +handled individually in `O(V*polylog p)` time. Thus successive active +widths shrink by at least a factor 16, and their sublinear costs sum to a +constant multiple of the first phase's cost. + +Each phase pads its complete row count once by a factor below two. Its +completed endpoint preserves the row coordinate, so appended zero rows +can be deleted before inverse exposure and before the next phase. This +prevents an accumulating factor of two per phase. The exposure is restored +before any next diagonal depending on coarse labels is applied. + +The support router's additional control reservoirs occupy +`O(h*(log p)^2)` positions and fit the full `Theta(p)`-bit tensor because +`group_beta<1`. A complete untouched `log^2 p` suffix is chosen and placed +first for short-record grouping; all subsequent reservoirs and routers +stay in its complement. The retained full-span route handles the bounded +regime where this gap argument fails. A single original axis is never +asked to hold all of the `hG` control bits. + +## 6. Fresh constants satisfy every changed outer interface + +The actual parameter point is in +[`../controller/OUTER-PARAMETERS.json`](../controller/OUTER-PARAMETERS.json). +The independent audit reproduces its nine cost rows directly, without +importing either outer ledger. It also checks the functional inequalities +needed above, including + +``` +epsilon = 0.99999 < 1, +group_beta = 0.99997 < epsilon, +1-epsilon-r0 > 0, +1-(2*xi-2)-r0-group_beta > 0, +group_beta*(1-0.003) > 0. +``` + +The first two absorb every new fixed semantic, movement and row constant; +the next two retain the precision and fine-prime spare powers. The last +ensures the changed BIT reserve is sublinear in the active grouped width, +even after the polylogarithmic factors above. The stopped supplier's +internal and leaf exponents are strictly below the selected `lambda` and +`lambda_prime`, respectively. The effective BIT saving is below both the +actual ordinary BIT saving and the selected complex saving. + +Every compiled-word constant, rational denominator and description degree +is fixed before the input length varies. Polynomial description/preparation +costs are absorbed by the retained complete superpolynomial record fibers +when `epsilon<1`, after increasing an effective threshold. A finite program +on fixed tapes remains a native program on fixed tapes; this argument does +not hide random-access gathering inside the coefficient allowance. + +The nearly critical halo calculation uses the retained explicit-metadata +branch with `halo_power=48` and `core_power=128`. It does not use the old +`K0^2=o(p)` shortcut, which is unavailable near this parameter point. The +boundary exponent uses the exact Strassen comparison `7^16<2^45`; no new +unstated stable-matrix algorithm is required. + +The outer analytic decomposition, ordered movement implementations, +fixed-tape model, prime padding, and exact integer recovery are the same +conditional hypotheses as in the reviewed outer package. The changed +mixed-job, native adapter, weighted-child, row-stock and semantic-precision +obligations have been supplied explicitly here. The conclusion is therefore +a source-bound **conditional research result** at `kappa=0.0023` under +those inherited hypotheses. It is not a claim of practical constants or of +an unconditional theorem. + +## 7. Reproducible independent checks + +From the repository root: + +```sh +python3 -B research/kappa-rebuild/transfer-audit/bit_bridge_audit.py +python3 -B research/kappa-rebuild/transfer-audit/outer_transfer_audit.py +``` + +The first binds the independent BIT checks to the exact current native and +bridge sources. The second uses its own 256-bit directed rational grid, +finite-series logarithm/exponential bounds, exact rank comparisons, and +fresh outer equations. `OUTER-TRANSFER-AUDIT.json` records all source hashes, +strict intervals, compressed ranks, nine outer savings and functional gaps. +The directory manifest binds this written audit and the complete source set. diff --git a/research/log-potential-template-ranks/vendor/P3-NATIVE-COVER.json.gz b/research/log-potential-template-ranks/vendor/P3-NATIVE-COVER.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..51a09b3952a491f06780bf6ce5f69b385f026b21 GIT binary patch literal 176694 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⪚m{B9hQHWPJ!9~~;RZXH@5P*a_<_8zf;o?y zV=y(9m4-<>0sbt#$ge|d=}=h(b9R?>R+oYij~Y9B8D&yD@EKLK}A|H@sgE z$lOd_8Xkz)IGxN;jE34JS2;l}ey|_2^jLbL$8$hFX_tIul;z6kfpDE{`0=L#Hy!}t zkGuqBbr3Q-r-5)zr~%1~jmYNdjt})2xJUmQdfk0MrhSl2q=Py{P{GLC>$6$gMhX z*?$pV1H`BPEgtvDn(|ApN?o3G}l zZxn#fs1AG<==v!eWIrA!KGcPe2OiYvAlCF5`f-CIa=g|}=;p6X1pKTZL{`mcd?@m> z08n*Xc&OLD5**u3Nn9;XMUcoj?6a8M%c6lsx9m*Ms^6#3E>qa|`v^Ax379`mu# zELa*Z2il|%>feBR?4biFLqX=$Tv8h{U9u>(5lK5Qc7&?T`Sl=S6cphCfzB#yLW=h) z--n8%(SSpyr)PHfQ7eywyqjc1P>gWqIRh#iwyZ$|9;E{Xk0toD!j32D{i3tEh#o-^ z>XQh8DKrp$n$5D=sb40E4+d5f6fYe^X}Sb+p8`eMy**%&x=Y#x5Pu_{IcofqT^4gi9{4NslK| zkB3p=H1i9uzsb3jGIZqACs=foh71XccFsJXjd-XH)FG0|yuk4{$maV$5VdNbU( zum)l)mgJUpQAYQ2hN4=p!j5Db$gY7~2PbZkH)zVZx_*L%#%sDv-+;&ThuZ&2)-m9L zvOIop5U$xoo~O=fuZ04m6MZ)c1m>jqOQ3dCssc4Rb#TZr)C;zwnDEo>ynpecE<8Sn z>EC+keO_w;(4u?^m?JOxw^rSRp#l_27!<~rLFiV<=9O>_j-D4uqyBYEZJhx&PJqoa z{MxK9P@1(DC6-1$XnJ8+Q9A6vHB3h_s29^bFQy9s1We<~eCz_^S^MBw5KX%feB;99 z0~;?I@Fjr&J$7J~2G3*te<5qtyE4=-b^bRY6-7!v zA@h(`>`z-pHQdrL;1qwdhx0&w#2sKKykypQxLF6{ad5O}IWX&a;MRdLO~3&ll7DEe zG2qi>w%YhTW*~=v%Ws?8FF11swpW668(m?<-f*eSEQ2`E5 zb16EkPX9+LJ$MX2K4kB{_{%pNT70?;e2;(lk~{Mtd)6PE>!{9hU=!H* z47^FV+3@|D)vG`@(RC*=!#2A2LX@=U$u#%L7?>kyFsM1Q2rqbQ1{hsrZa9^*=77-*)CN6}$0)O!_)X?8wrv)0*V6pKRCu@(Z#{L)H)2 zKI+W)AkwZq>e^cszo_zPZRZ*H%6C%*m4Fl6=0x1e^!5wCuw5XMVe>Z z-Quqj+7=N$VQY!TbJ;I+uCQ+DU+@dR4n4PxNs_^a zm9)ROe_`Nr%NLY5L}TKV(gT&2FBSHDJzn|*D1Wcgcg(TrY=b&S@@oF@0nOuvd2K5f zRM!65rN57+n?iKI6ZQ|MErBQ7JGu_sZ~cNg0nwk}Jo8(I>=NcCbHTL%AS0oD1>v(F z)2b3bYLRTOni%p8dX#YH!jTQ>#1J54*%$~2}@*|!x+rt|=3%g7@C`CNt z6n@V?T;MNG*7{bpE!~CP{zVa?_YzEzA27z<52Og1yN`1oWB5Y`E*xj3Y7(Jxee>6@ z+AYaJ!Sg7=XZ>I+;>^sSn@YX*=3Guc;Jx&$0X73(d_r_Rc=5?!->9VD9lZZIwsaGz zrEqrEEL%k|vcn~M)-=KE_{=SrB4lEu2fu%Ai(GH_J5O@6ouj7@+e#EVA6K(dAAP@* zSQ#mI7*--M{XVSsZ2>2Bd<~`1!*la8%jVlhPa6=aLQXRb$vnRNh9txO?V~Piqek z2EE4pT6@b;Sl#Dhw4*8w#(UylC?Qzg4@kba+s;~h(0Ujyy5v zIpY2#n6rMZA?m%uq(B7MsfbzC5*m_*FeahJ()Odm&6jJ;o!LjBR3nb^cB=R3^Jvhc zwK@A`I=$Y`XZ(f7YS%xu=pe37@fbwjUwuBu1wEr&(KfHI(8Fh6nQ4)lW(f%^`!l>PTtkeEjo>TFHFW4(ln#&OCCNk)eE&t zWOc|3ipz~UVn)nZe3^%G8c`XWlIxw4W9=#o$JdrWKdVkS8gt{VAX5i2 zVY+TWkMaKV^X!D$@*8j8v8gG=CkOTGi6^NM1qoykJc<+HgP2u3up7tLy}k!M|dljO*)*DZGzVIAW1zp)KGHdyhxox)P z0+@NLmJemciN6$5W+9Q$98Cz@Hu1qLGo}gC?5}9!_H>UOapzFo7rbo5G z?9ibV86lDj*k@wS78BwKcjdB7M_Ig0(6k;z_u+NEWQZ~v+(d&p} zjO49!sWl0*a3z}RN-9Za@nqWsO@MRz2OH581EXa}v@~UaFRZ1^=}7y{>Gk=>Dc3N+Y*H{Qm^`%N zrIl5Z8Xpw>sek$3dYdKWnViA!5%iVxKKOQzZ;< zk<@FEG;OfdMf+H$`&i=K?xcy#R0W*LW$~vOhwI96IjreTv_H)V@naA1%dQB%BfK%c zX|b4Oi5uMnF%{V(wsdxJ9Gp%vg_J3ejV=q#BxRqk5JxK#zr;a^$re9SEsUb@j#Y+& zy}`^1s8dM#78a8kY}xE=+1V8p)xr{zQsRFidi7T>@)p|*OM7d_brQzSX~Q5g`XnHL$ORRVVspl6xm^r zD#A-W$sKyh9eoSbREEV8yTwv=1xu}PB|)l!AY}@1)HOp{o1m<5`WZ%a?j%pCq3!)7A^8XDE}m-Bd$;U|!ezz+9oBTSQ1x)7_+f&O!rmTq+Vi zzf=@}ieot$_$1>*ph+7+9hIZFu9u@I?yyuuK=6d%5j+;f!X~b|MZ%$!0ecB7{tupH z_&qRr^4bb_sWlD%>>qnqH?>8jkd)E529Anx`g$WNu&F!jiZf0?> z2o>SHNX2;(LNa-&Cp$qeJE5OdJelEE(X3Wrl^kk!;D=X!kc*dJ>dij0D{iYHEVZOr z%*PJbu!Q=BiWJyW5v?HlEt`7i8v5Nt{jAdy8Ow~#58wL`Ud`yt78cP}Y8mSB!dcDK zS<=uFQ$X6KER~Tfod_(UOlKK-;XTrEK+%HTrz^G z{qap1x#`pfdcv}ThDo!9+6JJPQQjh<$AhRMK&IGa3-hae<&N}i6JYs zAuFAJY@aC2{yA(QdN9|`l^P>`z_NVA&XsatdRUqwMTt^d=TXeEB=SKy)y*ZJ{ z&k7IKuQ9K-!r#C5C0DdMlokclhk;upz)2{7Ld2$QYfzTj$@jw5W?z3N-?-YAQ(dzy zt+g!=TZy@UiO$Wn(gm1EXkF3KU%2J|{LcAYr&kTFwF*4?>7*|gr@*^VrLNqP+?%ub z@ZPs7K+50OU|@@J+oW~+~L-aJtaFc@MPS4G}_PX;j>F!;P2HA_Rt&rPmCGn-zT7ZQxtsK zW6f`QxWMB!{kdY0=6T1WS4HC_{be2O}xCRLQ<>dUve__SSdbOi>eV1_A3$|VvOEDVX%6C-6WgFna@DAV_h$orVbWQ9Ao0HbfkEl zDAUgEDr{&UZFt2Ph3tvE)X|5+%X{tpytXqYPbSfZ6p~A zTej0x%@eAF#`P@yVk4lZUN*zbIx$6#h`|Ub*fykMilxyJA^g<4XsFu2*Mk>+%U1oC zZQkslGFqWAR-sY0IWJVi*MrK}!~LQh$o7NSV$#r{L*cyeU`MJd2N$b$S+i^g{jVg8&8dv6PnJcenLPXjgx^sIbj8TN zIsGK#^=XrY1+~1+n6wG*?iwai2fK#uJ$8*nD_Zvj`eNZ{^u+;E@v{C2;0{eNX=B&O zYt>lSYt^XG@Glx%0QWNE^An8j3#EXwwD`}a)JN^|QYOL0+Wf~|P?K7Ak4`JFDYZYd z|KcwClu43B6R2=%*x72bE4^xjCG5OoB5Gt_HXryw`8jEVY$_w9yICXKKF`vRw~|EF z>EOP(vZ)u*PEV>OSzLXZk>$kB#*$r`ULhJ8wow`xk1uoWF&h=VO^J_yoV@`5U(oU6K z0v9Xqg(BVy2Cu-ydghVZnMb*^rxehaZj>HACoNZ_z{ENbErm3=3!a&5*mHfZOev&r zAcV0E{b*Sqd!$*D>T0e`jlz?yXNO&fa_c>W`>+yUWZdn11s=t+CpY)p06VNE146fs zb0_g;c8%=2HTRzT?$_Kgb}^|dDtk2T4c{X#>T`q1I*l1Otp2VdUvBp*k9tK3l*CAC zQ(LAaar^R^rp$P8UbPYBg5Gq4#qf)2l@JdQjAk+<>4rs6w2(H3D^U<23<13i_4K73 z9VuZ>#!Z;uBvKZXm_clu%i?_gO$zAIqBeHdKq+DNRvBlajB|L~=%c*aL7liXH54z1 z80PLUh*Z7s6Hv0{-gSdqqEt51J*2^A`*Sk-h_=CYB5hPFUVbQ)Cj8kIOU<_P;9D2Iaz`5e<#Jnn=7~$cz{ZcIuy(N62@I= zBv&zh!=`-3B$P{_RY%LuS7f&-b9bjB0jB?)T-SYo{Vdo*<+Z-I!pG7CrxK zbZA52n5(V~+ZspH(;z{PR(DYRYV`yGKez)B1^Yb`=?Q{NB0~XNt1Tx#E{OJJ#>i2~RwT1#qGy?5WeZIVvZ8awIR<42ex{`kCj&jyN zN8D_!sW$U12c@~l(9h8vb*P>2B+?hJT%%qv3F=C)L2r|CdDntTovLxJ31q5GIY_@v z)U5Ay^6OeNM7IPC3%Kjse8C|V8T>sGFeo@v-}dT&hWLBLn?7fx<@Z^y-#2Ng1yuE_ zW`T3XZLdI?dedV5lDOZm1-vP9M$&$t)%t3pJvt0J(3)jPkrK#97nD~M3_U9QrOp6m z$4B(~Q7vX>-0;}$z2ODpCVEj_wGrg1x#8ACeXg1rRE;o^0J=mGS7HW$aL*NJ;DlOF zu8o&@&tK*xJB`2qc>V_}uk{qVdUhND%%8|e=i)SL77q%b`(pjHBj>7FQx%@T^ks{9 z@{)s=GfdJBhuVowBE!LPoCsuEf*g?@gB(E@FZUDB!Z$5~+&)HlEKSMXeETjQ!4n^b zin|elitCP|)abaWrgQJ6+H+NM!3A9b;b)*E;E!Q?10ct1VJ3h%l0Pu_1I$4?uPZ?K zOzVdKOiPJ>mmpqqQW*Y{p@P5wK#YzV>KK#CG2HX^8zNyR1j0^eJq+fAZ#$@MJ0!=h z$)caPM?Y_8q8f1*c^FLg%1`j(O$Y-BvOuXj!fz>rp;z?-$nf_)wb-em`V4bTl zqm>%OF!NNWW;bHaIS=!Cf6fvwzmAtyv{2 zx5}c2Yodp1m_q&B0fHebuov8%C+R7-niVfs5YV912>Q2Ka^+TyiS}#&dP{%DFh!uV zU<$>6-cmRDQnv;h4JLySLlxqeP!TKzAThmO3q3&5I%pqu6MlBwr-~bRRmmb%Nv(IL zobV_MwJ3|^%@SGkr-~49CFT0%^@G%fm(UV4;)tLd31YhY!w(mj&UC9H@vRSP27 z6B98F%_spcJ@p1l6uL$k?RF>D?G6jXK2(Hg^$#TW8_|cFeRR=>Vbk1Tar_=yB{OWpBs{|~JHKd}CP4_F`kKC&?P&dyJICg!{LNaSG; zo#mW`!-LMNfrm!oJ{(UpL08@Lw&OpB_G_JE{QiMBe_wSezd$U!zgOUTV2;boJxPw! z!a*w}cH(kMKtEY-AeI_c{HD`OcSHM(euTU0)hi#yyE-K09NYQbr&Z)|l?BHPU$ufL*vN>7akH92$4;yay-O}0Gab$52r=guXj zJC~j~H22O}y%Lx#D{5CrXsj`G<6*_XQqtYuJSXB#djr@K9v@MViG+U06)-!Vb(V}yVC-_5yQk{8+W*Hy8>n;#9JibG%8f>(7F1F38C_^%Crp_LOG;x)BeV745% zx$R3|oyV{0c{N@;bM?U~sW;r-E4ukE7l!0~@<)j0Y`2Xkmv3Lu|3;VjkWx81N!j=9uA*rLk*i__vgdH$=&|pt6+OSQYkg&hy{ruw{v_oV zbGsUK`-;&Q+Nk5OcP@(h{Ek9htHQXQ%B%H=Rr$-rj@=WsW<%)bLbXI~$GqzyjUomK zQ5MxUoeg*Df-nSYr0L!rn7gjSGikb)qE4{z%KY3MJy53P8=AM1Hc>2_{TEbEy$qhQauJ~>bLmj9WdufCTrO1m@bO%9p?9r3JH zQdnE%z-I1_>7Do3GYeOhf#OKk+WiH>eXyc~cN^2I$p1_!3aE4jG$3gm`p{O9| z!d+$Z_X*C)uBq3t-VQ2zTw-6wW6Q4DC3`x)_{Thx7S4etYn*!i@xxd#>fSu# z!_w69&QuYXQ6|hKaR&D)vqt=0i`LLxXvSeTgoQHRb|XEgv=Pw~#U|JgD~2(U}nhKnXjBi#amLPY{CzjTQnO9==C8#wP8CxFU55c~$C^HqiE$fdLl$iH0Gr zoGIQP7PARkV$YF|V)aC&i#?WZf#r+>cC9rwVb5NW7RnE6 zzEW4T(l@S*r|dSch=JBH@WX>I0s|D~)BC5nv97ovQc6eLy-^ERa$b zE6%|duQ<*F8-dXSTl-K{5fP@GrDfVq;0Ow#z2pwr80%FYn>_* zSb7`!xC}&Z>m1Cs9~01X3s$f#>M3aNNVzQExB_)Ugqa#)9kW<%`#G*h+sN4iN2^n^ z!5Z16-K0{YaULz;G$G6;V}n)=={3^iB1OYtzV|_j=am{g53~4AoFI6~Y!FREN)Nc9ZbdrnG`JS{-&btfqDh zmft4bc{pslCnQswC+{!eEkZ6lRGm>;O}CqxhP@;D!rg1z z3K~Vmm&KtwzA?;^R&EuQq4xs~F=?-kEyq{_dY^ z;{+`Ho>;U$M3WdbYN-r6Iixq_7mK#!d9$MG@Kdo*yw%NXsSpu{AB`goza#k%W;I{Q zM^zlm#`8B%y)AkF5benNV8U@cXO_l1!f9e`zE&ZDCK_$}zso2Q& z(J@Cqwr2H-YDOHePmvgDC>G8SeM)UQL2cTokc_z)CvM?4VbMN{CZ%fBY6DxK8_nWx z?ItF?M}dk?{tk~fG`E2TqZB>f@1wVg2SkAmkCU`Nh^&AZe?UZN)Itn9G142&BJYDT zR~`KtnsRQ%lMJzvr)|yJ;T7}v%Aib0_8*dM#e8*TP$M8EkcI%4y;-~MdUJKmH1!)$x$N{7+8C*JQB z-U1r?*(04EH#MCOS30nKUDs>m=QYeMtyW^r9UsItX33u<-^1GOVH$LVWX1-$Y)QXE z^14u6MP9R)gtsjvM!wO*t2|ljgY?)|q4qF(mno`Pukj?C62iNJ)w^QcL9?J#-r_Av zXh_v`S-Pee=fsA5e_hBE$;cj6qSxpT7@yu>=hw!5E$PoQ zO3xl0wN8P3*3W3gPia}xj&0GaWA16BA0zd8OCI%yhbJG=$IqyvI)Ijt1c9NuOm3A@ zl&Eji_?f?=rQe+v82u|6_L)1q^c%IvC+>8QYZMI=e?@CuqZr%rSHl3xy1yFsD`UUe zH3}A^ulS7#V@&=hc-U}e*_w*&Zob%Jp%M1=h8yv0L42e#@?Lo+ka%yp%G?& z9Nt!*Sr(~m8)PiDNMVFkeeOo2$&Wv(i2M}IddrN@btDe#VS21EDZp6F@Iy$$a-orW zhc6x0-#)gq71|SA2s^t*M6apPeFzx~F&0C--VnLc4Iih;m)?)g3}_NH)b(yy_A=}l z#lm=Ni0Be|I$iIvkS0+?+N20i4SakQE3IUg8NexOnB&s0ENfu86|OaO_NEtdL^Dh- zv+T5-?XE|e_@xxws*!0^llec^Y643)PbX^W(ZwDZVtL-9R zg5cvPbENlI(AxtL!!C!0%U?*W*Sl@xynQ6R)hRh(jU3YM(3EbR$0V+_ z8p3QdHfYz7)ht8~YTibCP{M$W_r1f7kQ|pw8Y{|%*)PGPv?x1>J<;n!bk8k#;%#JJ zs|3 zN5Wf{l}14L$)8=D0pZ6m5e8gC1p zrCGJNr=5qsfg7TWtg(X8rcuEeShr695PM#5+RU1kIVi$f5eYdV^vZbEW$qTmR$1k|*A#=C#_uzkeLF=rx2* zoAe=$ViQW_y_M}6A-dii|Kh>bKNIEHJhH@=WC zAW#%V8pWh%DpyItLK7f1YeyC-j*7%+gcokoXUIQ0;H*??)`l=}D?QJdW~ zx}GzlUJ;Ke5nv*mId=+tE|zJdo}Yaf>j{Y~ZAAa)km44$_{UYx8S#NHw%hIr!LBa8 zxm!qP60Buq5TvixHmuf0*szvgh+W;tbzTcOeC^HGsp_ZKzN6)@x=(I4c1a>XMBaiQ zK)F{uu83`kl4W~`RTy*QB#u`fTbb*MJ zC5$x6ekZo?`Z4KSVnf59voSDJ<~mpHZj2=PPDEehuhFHyM=n~6w)H~J2=i$!!CX;WFt_xp zc^yH&5?os;|`$3Y52ReG*iOdv_@Uar6@;+_W5m zP=?YKVE#J^n1XK$z6DGX74*x*wHaavzAQ@$5-D?T@Ok=3!`p0qz6~ONjZCe!rt=;^ zsSWy5wYXm+B=A;((LjnaC@YY*>rK@a;|-7k%)gNOxZhWQOgw8J(R-r0GRlgrbq4rw zctTYwWzGj^xNy-4Xs8$QOE}qlGG(d7hNV?|Yo4R8V9ph})_Q>(V=JO^Uw zKS-KOn0QYW!w7U-8PRMkpLS3}bjVg8dn_ir4=5KWbaK$E*;UB_Ze@!HHb z76x`rSxwU911WI1CV4F!9kr4+aZwt6WOOJde`#|=x~9;my3i=_T?od?Sj@_}ye&c* zai^U1PPw_m*@Dui;~;mN8DL9epV1K)*&s=B5Tz8_YH`t_Cv)Pvt~tF@uY%BqwLI95~k9g})EcAb5Z#W>}} zjvEnD7{90_!Bv)s~d3*)9?goYg+COa?5YS{#^;C2JbbakCC>Ax7|eJ zK8xE1@k16>^;2G#xDlhW;y;T^+`EZ}d@z;N2x8MFnu54;!NXH@ux>=X%=ipZ2`(gB zLU>3>MAtNnr!Q-n$zD@C(7WRJESIax3@HUu<3nu7PH>l!vTJF83|MhsYO1|vNI;#f zO-lpLUCO?}X9cD0T%8MR$!ZcHXGnoFV9*@e&Zei3qh@1hT4@PUsI9&oa}0YQ-j=1c zhbNbPC}sw&By&d4uK?E;3UZAMjfZxybBo)NL8En8dBu1>h*6$wTi|%8l4N6mg@?AT zd&_dgV2^1YJ8$+3x^ zSm=yN<1zLa>uTDL(v)t7z?bZOHLc(ozkFIM;&LP8jo*8X`3UX6mr#`b;{PF_j9?s=Y}*KpIE0FQ5Xy6rWdwwu4+y^mgo@NX z0;rh6IDRwc#kWDU0})`8b(5aj-cc=XH6tRD=`BXv(S>yA40jO6xSW*H zhz~M?-dNA-ZM++zFkMZ9kN zHoL|QJ?Eg}pUSBafTGwnr28q|H6=?}-?{r@?PF*G#(als$%bUCUn02LR4+GyB0Gao-#TOZFvHHH%!!$I&U z3K{jCLk5b=hXxf5;|TF@;2mYcJJ=H)vZu~H_`KodIAdpOZ5kysTo zSR1^l*v6diadlp4Pxyi1vCnSw`#XU6u|p!=u+@H+^Rg*X|$b zo!ghK@-V!@xpIBU;q4{W)Qh&kLNeuf@}3gjj+CqNjjK@iRFFmT|JaU&5adDIi2>5&^m8iOO{a=I32VZK6(jZAoAEhT7dr+szQatKoSZbN zZBL8K=DRMDi`2(H{F^lo1O6)B{J6q1s~-HW70| zD(-sY=83VOt z`wd+X8sQ>_D;d%fH$|#G;B7m_5KkjnNWw_Tn{M!Mkzy5e*{&WYOZVSMk$mvr5nzw!1Q=LRq?_7JPl+T>SF!8;{_ac|~|z zAi9iOEHCJVv_?3a;fkq&#L;?l3)tn9l;Q%Rf8wsLhO#{=`=G1ti(g3C;aVT!es;p1 zl(%wM17yvbBkHkD~{y;7jp)%SKEDvCv(b0$Prju1b7raWf)_> z_KP7Tt=kSamJP_*2XT6cS==4BXdeb3`$TW`hU_55A#sMTa~1Xu+X(uM|2shcgG2uy z`S%(t5ughI1pxV9aOiuS!Zx-!rqzNwtT?E%jPwp;ad(@{(~v))Wtn2wvBIIYGN==T z5P-X&-2>f^mZR&`!A7Kl-XlvyD(oGXEjW+=6`=nslFu}02dzgU*rd_d>WzsJ(9Fuy z@>Rn&li5}=g09!(mVYiD%kCnf#QCE7GN&22f zorg7T%LIF@wl(eK7X3rea{I>`N3QA_L>%tyvY^lxDZ=**`RKjmo*>2n4xM;WfVKX zmRJ;SC2ONB#rdDZx=K#{gB~ij`0^V;+G;98(AT$NkS4!yu(qBF*KIdJuxpB!4^$TQ zDomqG%1`55L#F3_>^%1DMCbY?PN%%QPgiR7Z&>?X;#4rc;gz$deZOOfwPYUZ|Cx~d z0Ot6%bVlVA$rs7SlG)em*+*Coh9t(v!3-mKG|iRmUA3gx>PK6nTuDS0VFwR*+n`_J zarexbSFFM}i2W}!PJ(|KaMel*TRhtm<=O*y2CwVo9`gk}Z-f#E$(ATKYl!k(mB@`l z$-hRIT;W>;AY>)g1~8OeU!oX(#mZ`o$rZr7ENXK|YJ^UyOHZi>wjc4dzZ++h9lKP; zHryhKN;OW2_kNx9=4C~j!(+g>)Jv(KG7zdf7gRu~%3`xF4Qa8IKqWqqkP=<> zITL0pJ!Ko%J`ChE+T3ki3Mv?BakyS9CN6bXf8Xbh8MFN@P@OmC`*_RI^M6@?m(suf zVumG?&@0wQ;CXoJ*luI(e$s{uhf_@50xqhn)iDBR6+u|zb6^`cH_9s%cwo&CG56v_ zIYUqp@)nPvcx` z__Dl1o8O8sYnT}rE4xQ%4Y9L%-whbXN+n~Z#3vmV^X0Ak$q*vvr2#GL!;qot zFHSn{e7t@cgBCT)3-2@cSg_Z}hLyfzcS1(CWWfZL*brX3poMb`{EVW*+0N3Z=CCNS z+O~)YfTGuX4e@PE>7@y3O^c#tDmE9(87?ERHfQ01??k|~SC1h+OyH@}(bpItN6$1U z9YPeu!dWHsk2HuV#gFsXFX=wMbmN;HXcReX6CWNlimHXJvUq&pLCLER2r1||C;;+v zIX0$2bq7l)Sfm~ZJ0srE5>S`SR7Q<_^n;SmAL$EzO~71IBES!usi4$BGlz9ePH*Q5 zH5KBd6#*V@rXpc{(CeWgz;~h*sQ@Mn2`evZ8(@}x6+|hh6pLG?#fa!Kp@qfu)12W! zT7pVA+;TD?v7v<}_0zoILA2xkDJge6o0=kY>IazFFDv0n&!>rt=vrj)jG~v5UA@I6 z{TQ_o0OS5f2%qkm{{*UfIA`M&s>lY5Ix#^dG;UcB2xdVGOX#P$!GlEpCM9`Y(o7lh z6SqZ!cew|N^qo(01Bm?!UN41T!mLF^sbPAhAHevTu@gxj7c$wpKHz--k_cupgV7ZG zY)qJNEGhi#!FUvpH{gs0K!b|oK96l+jZ9G*b0?#UKVCTSdu6&|k0*vhX-bsIg{iT>wF# zFj4KLIRrWuw$mn!ptWJ&Q0#G1lDyW2ISe%B{(#`$AWa(UTJLHu{r;e<_u2!rS6Y^z z4T*$sNo>MEJ5KL!m`j%vW)*_+M4Z@>1^^c{ZlLXi#sHM3c1~E!GRsI0q>%mm(hM4* z!tk5XKm)Wj+8_sQxR;H%W>x!!NlzAbG6^ft2@+!ZN^1ieMfRJz-O`fezgn4p(5p5p zjg`+*HwI9=mbz06d8W-+X*djdZ0b=I_7|7_u}0ac&UKBUWnw?}4`Ao`*GyBI!E}BE2{o@1LKM9QTQnMzFp#Aelj1qkT2YV>EyT{{ycLj_z=0&vwZ-K*H z3?2Y&86VJ=`9~+@ePXqje?Ml6QR(_d9(%cG3+!xyn21z_MgzoHkE1ZXdYz7l0U-Bd zc|GnLxO9y#EZ%;U@(t-jJO`!y-c+=Hn?riPoNDnl2iw>2SjhJ#0UqaA90j;(53$Bm z7?^}a(_sK5Aet`ah|EJYg+Ty7O6-{)>lKzvVuEo?@P6kF5x4&wc9)fjp}O@>Arlws zk_6H@*fKbz1)+7cHxAa?Xe5&(O_`CSEMo+++@i2Uq80qn`)@w9UH!IL{-Nuul?fcw29{+VlXdm0~zU%6zuQ^@cKh251$`L*NYQS&Z*t7?T#*?8a6vcg+iiX3`cQjZ z?alKgL8S(TS7=jj5*?8!m_nq^9pnEdDxe{{ZNP`7b6`$sy( zPgeVtf;2o-J~1U=BCo{ne&}$0UZS7;z!#OtJ|GM-7QF!8=hVur$J<0UzR|HolYRkcN zhV~BIlje~7H%=61qglYuR*MKAd5uFCbRGm)u1E*E^7RHJ>zsraWZ`=RMp9<2XzIVswifA(dBkSq68F9gJPL>z;nK6dVTB zT34yUrs$CacF=kyFQDv=bv`b-=n9Ui>`TnFC`k{j7+N;TN&1J+IdlE zZn?(NK}Y#uGQcvba;NG$$ zbMkK6q%PgqZ?PoLJye$M_LSB7q(fq=l(P>*&%HZ$C}qeDRoNmeKi3eik5q=#fR+45RE?Uo}o`)uus>J-n ztd3H;#v#bV%rydLSKT zbiVeB_lRAlb0_8Hv#@JvwHy44^iQwNe*df6^qs9C`h$t{^E&RN8jSP0%h4yiPkX<; z-dz~hop}C&QtNBn_;I>R;AI%^wsf4@=xGF^>k{(cQNmAMIeWdtV(E zW!Lo!D4>)g0@8{CN-N!a?W4py3Tb!&&=9;uf5jVzZLhsw=+x~_sa|yx=Tr9FO7Y(jyvWy2emgc5VNA)F`Z1h%7bPES;(Z&QJTO2Fd#ItDv9FkUP!{u zX38y75z|H24H#Yy{w5K?T+oINBCYbW(vfb5Sgr_Ne|%R73z&0DUwr>iziza6H?-{N zy9@CS@ztWpEaBTrrH6Q+s#h7=RnD7Ii%eh4E;NfSCIsO0{Q*$E9NU>J!u@%(kC;dhriRN|LE8g_#ikzfbo>6 z^m}TycGb0IoVzXpI^)7(jpbrDjoVd}g5ittJop|rGmr*yDm6d#iu|XS)Owz%qzBzP z1tPn~`B45Y^OV_z&a$VOmx3^vgZP*V$Ge`0V+gN%W&eeO?>8e%T_x4aFl?{nFtY(- zRW|L*ZkVCwHL5&rVH@sORmnM&S@(FTdd;yrl6%IpM?36dO6X8Xy{l+;+FZNHgDy z4v&(pG%2G8VlsE!A4G7(fXO&q`31^S){1p2j0&epe%{0gRGv#L+k z!A7$5SJEA&1;$0Dn`W3AZepJ-SGI}xuY#B?W4i6ug>|cl4r2w{2}}wnqHgAJ)~l|; z`{p-qiHNwp%9v0BMt@otnMgYC82#u5mH_;RX<&AfDh(S%IW7YZu z3Dfo2^~!N4co3V}N%Y!yU>)e7|Es2bBTp1C=|oZ2+bKBU@SONt@Tu*(Krt(+6~xR(@A6o4UZ`p+fxscev9 z0#gFo5VO%@E(`18Kr9YfXV174D?0bG5W}#%zS%t+h)`zJykvkGXkMedd;h`&F2++1 zGrR3)NVZd}dX9dPDNjF-SYfasGj49cO8B9c>YR=Qxm>o{!=L%(_9 z$3&9~&w@u2!QC%A{8iTbU9`(Y5j(UhEde#yt)G5_qOLi0}*`IOBFe25;0SsIzX%&LK`HV&aVitl3sy9_SP-A_f!+Lz2R zKbY636c@J<2?wBs8XkU+>o+B7%JPwSn;8>={54bf*3)psAGhp}Ak z`jo+a%(iQohyzdMeL_E06`|@&BRFUp%}RWN+r0CawPMhd?KF447AYPN@|6jP>{3Z)vbOKjcm+f&X#mm(-GrJ4dK3u%h zk)x#aiz}`5(W>^KQe4273{U9XGdt|wd;}xqOCXr!m2^}qEpK@fv+voLl_?N+LN7?^ zmsyjRB{uh@@!9Nu$0d1u)9jvFsr2D9WeiEcih@rWWh2XtOl+!zUU@v*1C>4afS#ZO z#%GDhK7u>_*Vqc}Ev6sx5JmbufAdy4G0(FwIdfoYCpoKPu?y3K>E)74#Q>28N5ms5 zbclwfiU2DPlCy9;!1Lat&u=Zkn2* z(Wvj}mnAWPuV}Qw$%J-~-vrb%UNU1bNOx@hm~iI<4q!=^UV3)?vX-q?4e7?Na!MI` zIvU^)N(J*zZx`B&Wb~NC+?V;0c*CB%XoKN6;!~G+`9BOAT7Ri`=5WG}RLR;!Ic8#0 zA|6e@<{5N}fBQ&v@N%I zOCE5Z5GgM7sF+focVk>fV@ET4O7_$G&R&Xzk`~L}%#aY{O`Lb?QfkD49g1ALih~<^ z?^veH(|>-IZXT@)^WFGyF?^y)i|TFtVYMatyk}|g_7MJ4^pvQY-iOFCuclO|i6h%v z1hE*VOvh|9bN178vJuuQ8axHpzg&K;Ua#q8bR*-|GfI85I?o(B0j;j*x}_i3e#HYF zUp>>3V|PmrTreHnzF*4~#xM;S4j7rtU@x_-@=71O@^V~Bu=^q>i*9xe2b35_syUVw zg56JYb&tC+Y#m0-lxIzmI{jGDoKtkr7D8Jy|t%9}-=Xr;RAJZjmRO64)Um~M;?MgK;>#~FA}1beS3-!5P!9!W zG278?AaptKW`FQ0;x_B*{OKaz@eGE5x?bswgZfe2)rVP7^ zWJ3|L#w)aUB!y1`?#X>KSeKN{!fKR7e?C-F`gpxYxu(~-=(}i?lJb?Iv0y87otmMq zI5~DV9jCrq6KR4|-ei=uezzgkCd1GT=rR?WNxQG4fAVCd%Y^b5VhRyrnvyo}S}tn& z0B%k2RfHHbkV+Q@ z@CdN$wNi3R8R{WEz`3E3nI&u|dJ)`7957Zr)DV9SXpqrR!l=(C1~%gv{3FXgz|$mV zAj^OFMylt z1&xK;u-89uPBxWy=r~_thWiFKh6wJ&elL+w>Q)vVddQRM*!*JaQ~EXC6&zrXrWhxc z<3Y@w?U|EY2JF-4skUt=8EcPmfQQQr$nJD}&s_0Qq#GMiB+{Ko0s1H$JYk@e;Q7j& z(41;qBzxiUG@tA)^dX^tvSVT<-2cv328v_MNrem2`FZP@)Xrm5G@9@6-A{Jzx6<=S zfE{yXyDIU`D}p?B3Fy#RNTa` zZGOf_;z7y5=aRHa1+xb&sdQP5+K8cUb-Z^mHog#1|LtaZEkx?AG=z&5W4Zz6I}AU! zp)Z?ZdKL+A&c{OAIZjKA{eFPgj^t?X`LYS91toyHGGYy(^~#X!h6w@iX@u(z*C6Oi zbp1mKYUk%land>a1hy>p+Vc$Mn0;;<{q-H!Rn^;00o$AK0s(7DZ$B`ARo(~J6*SD4 zxz;A7t0f>~WpN|&f=A(J0%$Yg3zynUchH|Y>`4K)B7D4b7wQa~+Q!)!%$KJ3rIXpr z392b6>0A*Qce3=;v0_!&m4Yso16#Wo;3n}t#{u(B<(u@a*m!4qv5d7G91IQVatik* zLh(aU0R@%{4M7Xbxa80`O zO>ly4dT{)*&P5?i*UGqb3ui|3liNzE|7UsB2r?MSJacE;-H0Er{`u|b=NwNMQ>c)qwoA)TSj50n-3JGHnoJ6YNz!h`McVeT!=hJVt!<7 zsLc9WGTaB|ISV;)36oc8R_MsJEU);b0h5b9<(sVXe45!wPi4ADdbKb(U;9=`ytd;4 zyC}Y###3!BeA(6p`bCNWba~JIm7f`ey&JqkL%56@2A5dTR`FxSgP_7|t$vn6I#)GC z`=wf=2{l7VC+^}&Ug%Y}jIcSxb#Uv^SbDDKdHp7rtaea{Z}UQewxx0Qc((@HPySBY zX4&Ur-qsN>yEVYstX@@3AxcNW?h zpqD7GTm;L8tWl*a-PkS9Jp3Cg*-%#R;c6$%EsO}kOkkD$v#oaBovMJY+oVC-BU>s{>5Qm>46TZFIw<&rVfB)& zMO#oNg8O)z=4M$x_q^L&5mpke4OVoG&e%_%hZ>03mA%y^Ew2vJ?K>K#kvK%pnOi(qi;$67_WUpkpxe8ajar2|L{J4Y7LPwWN1uVa^{TYBCC0ec$YT`v%$PZ8~UQ>wlO+I6(T z&^+PGX-@M;%mv-(7erld+mvqjV)tbCA-Ex@fd)p8 ziiT|VBRDSFn)w>rwKj}gV<+2cw6EH-T0z0<0&8rRgG0F82n@8*DmZ2X30mQ&+$O!1 zY5syLv`*#Xsvk&PE4LnX%s4jBw4nzop{eA~p}W5@Y^%^}ieRqjS(u_(uQI&`{l~Y} zU%Q~kX1#X#I7>8hlv()wi^LG_&1K?tV$#?!8m)kk>t034sWP)fZFA6hu40=sG@_b< z_%dg|xrJ;$eZi~6m~P{;ZP-9ik$0;|kv=b^eir6WJFXd2bz~xxls#Q|AVv6ELsE-a zHlcbuU7xJVJvlPR4Trh%eJMZioiAtCTD*R*L-~urlDS8^Q_pX|7$F(7&C?ADww2_#q7qP;-%+(6YM4P-^S01x`$v#fs za(SO8jN3@XRgcRdaAdm*vPLO+VOH+iOr&CZBB?<3FtLxqy<=C zK=rek_kOwr(xE6B=Fy=%go6<_sWQfMa3_VkENCWlIzgezF#gy`>`rAum6h8h0#Zy< z4T4v9$>&>fJI#Z#8{a#9F<)x&JKp_aOx1p{+u$k%K(#}%yi7F~T~5s~?^VLGxZ-Zj zgbw7HXH{!ugl$PlFJ$k?v9>Wuj3K8mGHqS-nmIe8xD2?Z^-t!H(}t5yOH-dz>!f?D zuh5_7KNBZqEi7nT8WiH_72mORd#;*fTB{*CDnIcR&Lg<_L~{nW;Y~3=7@ryWAGutF zszfi&aKD6(3M(710|hnO2#OU-K~Y(wtb?RXok52d^S2ZyR;pb*x@O5p?dgoGBrk2GxYsE^r@2fXTRyvz}3Xwkm z(LENu7EPT{Wh-9dD~~IEOC4*=8+rywH}HYuBU@}*3c*{p-h&(Sh;oN-m1 zaUr{$L+x{p#g{6~YqfYfh{5e;gVyG5G@xv+6nMe~xOdXW8}oy*!R;U9W_J8ybSWi; zR?R5=FFOS-bO27QU%Mj%Yh>>$-CtyK{aT|4aWti)6DGl!s?i2_X`f1}!u*_`1WvZ< zR|@LNb-UUqWIPHy-M@w1h|w=$B2_WmtBv0pG(`<^@V*SawHP07H&=c)rg*L+5vjn@ zqlvfTF=t#h_Ta)}M3QuQ$rte>4ib%iO~mETiLqz_Pf1*ag7sdPTL8grYXp_|TgAQ6 zo7APUfMHvWRivDwSnAR0#@1ekFL`+!3LH-{?=Eid)`{~D;DDPC@(MCrF>^6 zTS;Fat>Gd5slFXoRPzGJfdPfe082gM17`sRuA3~QsEePFgi$8D z^GCgvcCiEKzslS=Nv7_OiOgUHdnP^6>T4f#Ucd-_Q!{8CY$AFjCAhzhN65nI3947c zsj?)L5{q$zW})GNE#GodyV9vgg$Y<6N0@_0 zK?9zOpmCKA%3;~az4h6ypolSt$@1$$T2&dG#LI8BtCIE-?&?&{!m4D0*(QBpRZx+` zB{sxHGh9RjdA#pX&3Oq4{B3jL<6UG34f1$pT%;1}v9>i{j@qn3czLQ~u2;JrXCZ$& z(0Cw|-|Qox)s^ryD2#OyfrM07qLPpc8SpAO#H2?Bd`)MW4FPR4bT9}j#|kTd5>`$h zR&E$pP7+jJX53qv)mNG|RLZh67H(%jVQWEQXAxs-5o2eO!O<4m$!wFPHeWrq$3<(n zw~x$#BTcXBZkV#ACmK|X3N+02&svo?%?`|NmNz|G-t5la%yAa1FclONiqA0>d?6HH zVk-DlD89f{P)#Tv=oc4?&x1LCXS+JqiKC1CJ_q{5@`$!}E#q2j)iX=@^2JoP>tj_? zwM){N#ZYC-BRybc=0hm?znPs;OOK7bC0$P1WVg|aeLohvF+$&FT_K71Q`zW6(adZ{RIj_3+)>gCM0+u#je6?^=zy!teSO)m}DU%QTD;)Zd zSsqjE1@pV&zG$vY3I_U&VQGEESM4SQmVqIyz2GueB1QuTtNAK?yP|4AIQ>r4sMeQK z$iu|aak^+YJ!kZ&);FM;Tsm$5G;M)q8qiEH9Zv?D1wb<+S zaC|o!#l6?JH!1h8z5l}W&!$J5_UIOA+eEcw-+J|;JxaV9&epqL{i7VE_Y*-nyIvh> zk7^v}^Rr)|oQSh=bm*K08V>)qak<>)`Oi3;y7gEh`-RvXfd%hzK8A{5n~8(lNw6Fq z_{WOokWec3SBp_O!yzR??hUZb+Xc-b8`L7#_6|OlG>5F-pPi-V5MIAO+XuX@{drq4 zJl=x)s>JQ-xKF0pPJXkU%(R{SYBQNwUazsf61u(;wk|ETZ;%XU>?qFUoXqQWZIjw& zVd^OU$~o!Z>&hgxoptx$HYfxnE0&s`uQX||G<~zvA1t%#F0<+{v+6Cg8Z65lY`0P8 z=rV4v$UwORC8f8|Id1e*r@7ifk=R1fi-n@63q=4eZp{B$h9lW&K9oLMA=>!4@pr!D zQlJr|5N-ZQC*Yv)qid||b2=H;2uZqm=`97x#Er-42a4K5FRKE%F^f@L6T3ro+0`Tt zh{A#u=$w{E*6N{Y-kZ_6g|RA;g?$9y$o_)kWCAW6sX4a4&|4)Ev5zQqQ)^snW3*^s z>>ElT!afu^-b8kJAg7^|sJ;E__c4fszWvZA@(!CFuiIkg@FCo;&AA7L#%(cS06mtc z?U=tf8_q*9*UnO^W=dN+*Wn9AkC-q!VAb2~*s|wIx@Yc`pEup%t2Eym<215ms9PV? zQ!v+2L@6_3%{dGVmP~ilg?C@lczD~4FS-Zfl+Tj*vB>)gFxnUXET-7|$;35sr?wtu zirzg{Q|7ASyG8}S3^|jy!Y9nqPG3kSnIR7Oxr3^%Cz{mtmpTLi!8w3db^XmVRem5j zDRwlB=XH9NA~{ z08DqPkHHr!KQPoFsJU7o4dK4HRu>Zlb}ZS!;uatzMi;kwWAHIgUuI(F)-1S5egr_2 zxhsa{Zn9NIrLsUsPU))Q@T8|2!Sg_OmD<>bp|136Zz$Zb`sMbG~R} z>68wDf?N)&n0pbgNwU<41t2C=JOzZdC54W`9 zD%M~~Xqy8{nPzq0!?f#=MyGS3r*V@`OS9rb_2Vku1h%RPHeL@a1;kU4ftU@&8M@*G zn~%{(@v z@REWzJPx_vQy2Nkg^yms?g^pCd&Z*SWa{f8SdG#Q*MkfdGZh$}$&@HEzfmYT1~M|o z$y>3fGH&w~3mi5!r_F@_QlZITm2qFXpHe_~I43Q>(D^HZM!%Kfla4_Z@G~FPTQ?Mj zLywn#ei)59)|7Z&Vytnr%@vr(fhdjtW~p)Qojo2}hpf{*S~K>Dg0as_#uz zH#wj~KlUzXBr%Wa852Iq&k)`=cXty{9KDqtTw>WaAWkL&RlQ(JwA!-sy>OZek~k2fsRn|?gHe*>ahc({A{ zt$|+-KVv;h7+Em(jU68D_TnYFdF2UA-@N0sk+U5ET1dJ7o^xvC|(VFjZafFzCBjGx=)op zJ=;_sUrvgwy3OS}Vn1nv>Ya25_3es*xvpy+!-Kmw47Mw~#sfT-FX2ZQF(a7}W1QJG zF7jA*-dHRofgDf$cRzvo-+yj>Tg?9 z8c*hr^^gk!Qv1*wMH~vS%FP2j97H#}sB&xFM`uJR<&JG6%-GG(Sts8!>qds4|3Z@grJjbJjH zDJq%WDO1rF5FhwRuAAE*NtQv+9le3jbXvQrEMel^D1W<~Hyh|$4-1Rfda)AR|1Kc; ziT!LzYu1Jd+)v>0#Lti9R;B%yIM^#981UcQl{jKIQV7W3W{n`{=*xH?6w`n3&^I&F zQD4HOVNPD(7cb`L0W+8U+a#o;-M1&270~+~&!F_&!qPzk9Sn1HeD**mE0>|=&j#NQ ziP-EjWImN&gWy1BX-SfFZju;HIWP5^n> zI=QILlNsDD8PMg89Ti7PW&L4+N}-O)97cN558VqUb-YLQo<9PwPe3;Yfd zHqSA2>-fWrkoc9ffiUm%wQj!vBlBxZi@}N{*gQv(d0x3eYE^64mRTDmRG&;3s3g^t z=7NuZNY7!1Jm()vQG29MQQ+98ytcwWr$t)nQfh6c>BZi8wYR`9iMmU5 zZ*ViooN-udkaF6FS!M5FCqJ&RG|L=4L!{aA>acMVExRL-FxSpa#;e6w<$)UQ`ZHO)RLgF|K8` zXYlel9V39bO(=<)zJDE+w&K;R#LGjOqSEC=Ut%rNWS+z}i z9@{&#Rd<%mRmUCgol+1n_i|9+_!duM_4xP}G~eQo;_4JSAXW_!W?g)|pkNA$%>=E{ zov2?u5xWxZp`{zS&t7>Vrfg0}<;J`auG!xh^V5D0MU>BpysJHvJw(jy*~Kt~Jd=+@ zQL`{xSPjS?1lCu_4m)&Qg8|0cwN+=cx4Q^ypR5)ziwSQ#eu(~WEozhOzeM^v#Zh%3 z0+0X@GJAsiY;XXd;^Ez~%8dkI)vv&Nn@1CiM@C#%WdI6b%GwilU_$~-Ja>^-ECED- z1%OtvA(!6GfSds*x3sR3Ify)XM+4{J`=b!2@IcspPlCwP_n{kX0gj4(P^#IR`v)|m z7gSRx%g|9c7718EI|VR$2KCqa{&m1f^K5ZL*HK*ye*pwIz%S>-YiBlk|3QldMd*9x zJSfxH77fPeDBy9>HS6K1clDL0<_-~C9EPxu{T`YQM_nD7_zi#YvBZt_wKKpi+dRCd z|2EXTIr5KLV61^bfm3|kT(W0>iknKwoXGe3xHDaI7Kd?Zdw}=OAa(dUGJIy!bok_Z zQ=_v;^3iZ-$aecbTeiV!Ep`6zK`MUB15`Q8{9Rsv>EHQYO!WOx6=Wj& zM+8r%&>vNZo{^qEeE6n+;}glG`oqU2*W~_Z!4Y*M9e>S2>8ZMuo+J&3yAE|$9FUJd z;($ zHx5qvEuLPeYv^tL?-q&Bm2YGr>V$?sAgd7`zhJ5ZB9Z>2ho<~c0YVYK;CqNPA0}6&OXFbo%Y4kpdo~Agp8G5T@Bdg?O(L)~$ z50p=hFqPzRy?wgE4#&B(FgL8Q_S8V`0$^y|Z@UGI0*-?;u}A>3b*96sG0Q3E!adx4 zG?3vOmJnc}0EWe}USK4H!*h6J<1DBnAjnt@r$F?;*+Jb}fM=kVZIk4QR5F2FFKr39&ZV46&dUV{1&OU=^Xb;3AFI(zp1`uZ1E{tCrv5iH)!R1zJ_p- zY7rm{gxTkolZO%evI1y$Zd(Z@D7ZW4=XVDD4?ZOdAk%5doM#dkKP3`@k`Ye_4W5{8Xs`mh^R2@ zV}qogN`qvPE=a<5L0(M}C1wu#l?8tTvrPAF)h5Gbko*FYDN6vk8VZu@ zi(v0NkYqg}-Q2&c8m@MB5x4!EJ=V+(bn5`gHjqTLfn@$kZ!1W~x*9WYcB?jp{{rPb z0%uksVs1OH7r0u)K8S%kNcMnaxeG`p z@As4YWf{cpJ4ouBkclAKwFKf936eY@xfcwQsf!AY4_0v9@?IN0`yxxy5jeZu z@-=GHL0FBG!=jTRz_6+8@KsOy0cQepG?~i$XK@bwT33MiIJ}FvBerx4V78JMmgO8G zyE3;D1q9q(FrNIjz}Wi_NK*q!m%E_(ep|pw{$sLNbt}>C*Uv|X0BS;^AZq_9DNEcI zcs^aHb}@zn3j|S<15x{rNg!CMTfs0&bOmDZKPG{Y6Fk?lP9XpS$MOFFO(1YK&$p}- z2!OzuJ>RlUAV~E$7<>fA6ksY4Q&;AIm;&SgF(nuZ2B04pQ-D1{08+Pt0r;DlDVpz$ z`8egZ^^fGMe(C|`zvNqTOWH~GaOhs7M6%saC71DkKhyX^ua)j<@%1~M_rmUlhhJj7 z=e=rD!$OsOap5cU1^9Dsk;YRLYd(E>9=7W4Gh`jxo6jfRE7tF88}VtQZa|AE*@T*; z!)NE39fz$erteR@^_lr$v29V!I1mRlzE6y zt+Sxjnks7U*$U85?=0xGrb?fCX38=|sL@$4Vog;Fi~tSI&Vm_hsuo~`b+SiuqF{cD zs$xq@EfC7NY zOx|9 zBZeiqNMVntyyR_e*lfhIQKsrw(PRO{Fn01r*f_3eO z3OmWM*$=#UEs2k2X#5)VB?+jmIa6M%`#{Nm=a~0S;4MB|$-3DO7eR(=G=6vV0ESOH zymu}?vR?e~tNB*TjZcsKz6laMt^Gi$!D!#=;CF25pzyf%ZSTE#s_%zyv6B@#1^TzKuSlhSaY$Rd z;@k9YVk&8Ge3Zw})pFyw6O%d}b=qnMn+18fDKkCY+d5 z*<|;RcAUR3;Ea-H0K~4}1HVoCZNif?O@U{c$j&rzoM}2mA4>K+PJnhZffV3x%ri#Z zGe*)glh`2Xi+#y2^vIO_nW5Kvv`v6DJF zqPfqEeI;N8KcGH`Qjocdhnc$GdLu^;qAE8`Bg8yLLDIh`aYcF&ANM;v$&YT&7jqZU zQ~$}i{tXUlQMaX1S1ib5Cnt0w=S!=IqpBvf)gf&wggRV13??^6!^^C)?`D+k8h1|x zuLb>4Zw$jpisci{-@oHW@YIMjkR5!7uHE+i)qQKJ@Ldgu>zJFdwAkW~($m`Y&!3H*4&4<-qfz8D>lG&=;j zU&4VTa+Xk)>j09f@&a?(0+3`Ao5TQy)yAu*$pnVxDeC+3U~>Iw|IXI`FgxFVkMsZc z*;e^>?<_8U2hx9e2fW!vr+ezn_}{)#1eWQ(08|gBx-XOhfS=>3&b+vK9|QnMx|4y* zkOi_6U>KbVZiMQCb;hRQY{u_$@V9rf&wc-0HvTi~0PK7n&n*9YHiCu8P4q0Hfi!;^ zF#t^b9rFJ^8&9(i1o!qyBpX@(u4rI3{^>tWbDpI|#hw2w8&9+E#H5pS-XR}4D~>vKULV?^f>&N@bS)UhzNYCc?;?GmBtjy{phL)d!@&Mdpxg8 zgz)iVo!`Dl(>-qoE-n}!;yCzjuiyTzF7gn;=HY^BP7pcXgVR)3!RKaCuBh!R)u_F; zYShMh$Rr9m+9h&4DuP0`!D-wxWcQ&kkAs8JY9z96O>E^YVz+s6a;W0?Xk`-Rysuw5 z4?!KTckPQDAHpY52kDsmG?NGz>JW9dTKRL@H6U z&=4Bo!DdH~@)eJxRFoRzn6(1M=LdX%0SD%BEGiz?iDiqdzCu->GZ zfVZzx`RubkXRSoFxE<8YJvz#s-yZ@#UkIO01wOB^GA`>;*nnzw5J4bUpmuV|<5745 zvWyN{PXlw$N;;TaPD31Th8*dLOw=81z-dr>>mdo%ruzq@EWqb%05ky9bO3bv*s4*$ zCnjW<4m}RJOSnFAExW&F;;?-~Jj-Oh-0*q0_U{=c9Wr_vj|w z3p=Ie_eSmb2SqYuyXo~1^+%L;Sn^YQoaRr4D2t6uJ`d0By)vgBA~fw9O0j%aC1em& z(U2%)`hAW{KhSi4HUV?jf2hXUrGGHOytsrL{Y}GTYxy0!yFE#%xYUTDCz9gLjM7XHu@c z31DfvAF*f3;*wqR-nES@dCWaKCFf1I>~4>GlY-<%{$I&6iG~Gw_ZvtIDc%Zl1#faecZbGU`uVRZUPyb?&Q%(AEID{?!OAWLeZk8JQ+}cFk7s9Mzf5Ud0)W12@kBDt6o5?61TwLA6$z6fGAJIIwgE)KD z!67aPee`R(Oz)54gB5?tH><5E<$;ip)IF?TaR7OqkQ;w11Z2{hPCNr-s$RYwkmD7UW%z2pG^RLdw z-czBbdI=YiJqd~=Gye8*5QO2x1SVa&K<2!8VA(PSpq^K_^BtdoPaa++Int^=F|$|l zc9sud=7|Z)bs!=gG4H`;0~3Fcw8t228|vO--YItnpxpigB`EV0%IH5(vPAN*&3Dv2 zR9$pH1cQ1dZwD2SfOX(^-WuIXB74!kE20KK%BgV%kryF)e1@e3Zpkx8{f-(!P zf$luP^f5S5yy)db#X0=6n$Q*F*Lgl{D$j=v_W7`3I3Ih+`Jjw%KNpmOG3N?-r~Bs% zd6V~n9LNLJBjbD-!gCHk zA-0{if1V@3|9>F{?-&1X6yntXUx@#^d)oigg;>zxe3fBh1r$!Ve|Za?9}J19_K6v+~*4UZN2k_{J{BQ zIOZIFLLOE)t(-5+#?HC@XFnG4zCIt6=PU>L=YSG;;w3#_$V1N;!xQK5(_Ys? zhuaVtuQaZ4;uNtUaBRW*=WN3Aud|7oKW7syHKjb3;Uv8eYndE@XKl+rXA@I@olSWC zIh*+8wf%C6ndO_$8ip|$LK>^{vsZq>2NE3ZTHtKLi{r1e3DAVovkCmzzs@GY@nVfG7#ZJU zxnA)GIGea&^w%*DDD&)?hxe~z9u_iQHmuIxhw677F+-U1usZ)bn*e2=olSt4o}EoR zu++wnP4+2}+rXh#dxanS*VzO)AoJ{O0>t#}Y~s~a#d-WxTT=?dJD2#eNj^&?P5A`M z2~JZ!bxc}51N{H%nAC6n7&R=uP|dHnQ0@E~A>t9KiGrfwDB#GqW6?P>92s85h57!t zycr)M^P{1%j77&r>PV7iY5NPd@8-&d3nf!;G*nHC?_3%6xmvU2342Ng^x-lP&{baTH+abouuVN zcjYO=TU?7rae}*z`H;L8`tmKQ_g)Sr-!r<|oFi+su=@@S|QG zj-4!~;!{^uBLQp4l=5hc4P(5^XBqC{LRkH^HnZN=)x6Peho9xD-x}XSiiQo#k=pD0 zmF=wMGP~B%vhyrj7{}H{@^npd$QcC%rwzhL4uo!dV?Xu8>MG!g_)cD@Dpv)!JjK-$eE*Izw2(r;&vww>vpdsU2 z=)3Xw!=-CtT~xkF0jy=j30%>Ip|bUxO%yOJAou&?E0w5i8l&BvqlCG{%9}fgmS@R5nGcLhh z-o(;%j}o(tUbpIA2tAAyJ*0p;^pk{D}Fro?VG7N=W3Z}U;816NDZ$`==RJ(#WPU{JGj*4|$EV259X zZX!#;@!h23I}OW~x1+K%3v2Q-IB-gyguZ4bzAXu);MV9m1EkLjm$jr2d0pL=megG| z*1Tvq8_`_PkoAnUl%;S>xk`l}3@t>)Y;I`(gYwlPTlS?2t;1Z)l4;-aBRye6l%+io zxHEd%gP#xgj~{Hq4g%q-z4sw-?=7V=lz=Cz&0tqUDP z93E>4zTH-+ztQBY&ocIFBKqMU84YZE%oiwDXYHp`tA`C^)|O2VR~f2%#7W2fP5I)? zeX1(j#{@`p%gl$Jt}cq03-rKX)2=NE1y~9CL+}3)wpk2m4M%JVE=fV$BZUd(MN6+N zYt7R>FKo@$w9v<_j_m8cHz;}y=H;TmsupwaOzlaYc(6IdX&Xk2r#SNkF?@#Y8qiN} zTCqqAKhs^LB`9(_a-M(4;}#(*O?q$BYNn3X>&}OZN4WVA>lV7=2_rweeAi9l$ri^foC^g6d1mto#cxBUkkn@-w(!ao-_A{YA27YKLk#dB}kG(4U$OSpZvIx_#=O~N~G;(3WA zNVRNN+?;Mg|9xgcfXk@@T1uF z)}He7h7Wk3#2zfN;WdK6=S)MB*N*$hs$#RL9GTz1FaXvyrR~ApIhRy$UHGn}ZWO8C zz!c4blw(MaQ*xtBT?GU6s8NRa&xKv zvq3x)__3P&S;jBAj<-e!dy*B@S!0>NNGO);k{(Joaz8ZBjGx`+j|mEa+T=Z-mWKE9FO`llpT4+sLwaU+hGBb#3C`Ui>8LVa#R+=Fo_Y(SvqejdT#y!u_p& zCPSbgWJES+x!$$|%MUV6Q@%JI%odZRL4!3mvm~%W4o!A!hAf}v(5!ry@AP&XUcJ6j zhuiaau7os%{mnA!!KBtrB_WgI-TbSBoNRDDf*7Fk(*pjjZ=s7AGohijkDRMNNsJ?H z?az9^oif~?54t_0dz!n|Y|Rn_C%2p>iuG}lYOziBv*c|~?CaR+1u{-n+JPHSM|n7*^F(UjKhVw*um#u zUTe%znjV|cS5>w@6BN$86m#Gi-ld_mN*W=b2`#?l|15Gsr!6X^lJN*39!n`^yrmut zKrS2q9=zG^3Ja}1Xfv8|oDFigAi^NbFpkGoVQ#k_+v@QAWX;g|5@exD=fTXVJRj65 zpw;L^H||_T{94@EO>f-3$icbjn3iKx)e~W@G1Ir~9{9y6m;y0w$~SB~7O^h$W-Epd z0-bw|2NX=8aPgcJE+(W}0du}9{mJdNyIlhsGwoBHWfAV@Z;P8Dn3@sAS2S$iB2-N|vOIb*6~PE{bHB7-Q^=ZH$@Wch1pr z@8^C#zwe(;%X6ORdB0!VbI#HF(&r#Vx6{vW`K~?WfMK}2OvAyJSp&%svYdjEHf2K{ z?q*!$sVfK@Z~7pTi`J`sr1(qWG^u3?mFh?aFKFiae4ZgT@_Xt2v|U&yMyNrjetm$uf8 zWSa6ShTV)d=vpNT1yfev2)M7@ua$MQ1rRw?{cK&t6voqki<`cYpW=qt-fgG}?)Qy? z9+!xoW0_~#&=(lC*#a_(tsQdtv$)OSJ$T&tQC(11nWX)9tCbm^pTTi2siJhcgjzpB zy6qJ#VdkjJ>VlgRYHF3C^1JJ1O|^q6;1Z0appx1Ak(8MHfJE9Ik&l?Yvekey+3_V{ z%M+?wpZtN^&;SJCuk%=G(wSZB&aTmN3+yax<@<4u2l>u~kMSTrrUnud2EM=4xf5fr zD5%b{dYz?mx09{BdS247NqC;r>>5B~&I`?U8;^{?X+$>HR?0f8pB}N__=AO+Ltxrj zNZh2)dg<%8xL4Nka`P$3BGJDduGw)S&}F$<4o|+k^y48qA%^(*jL5`yRY!ewVM|w$ z(LqO9aV)5nADhpl1+0o34M61Bns|UpdFd*=hhNOf<8yv#Lg<9^v=*@iIo$1I9d3K@ z;&4yrPVVx-mc%vZVl_L8=0EPcv*F>IC5<2yvW!;JS#{ZtYx8ZR7&sRU|D4fJFVITs z$%MvRLAc2ln;j``MCwqkPhF2qn8LKE^f&|h#0r-Ph`5*5#v{&iRh3P{8t~qyJd)H$ zv)5ATg_{&SX1%u`Lv7zFL6?`^cNQpO;!)1QL`%1^0H05qjdTiFG4oZGhd_MJOTriU zY~}-9&B|0GE9e3Uh!>ADbueMIL91c|8Qt?VbtD_?vsW;YkitUub&DCBWn6Tk?=EH$ z&a`38X4?Zqs~@_NG561tKj?0(-zz*fuKXS%-&PS&;;e@x4yEb0!pW7@-ny!AiUEc5 z9O{k|K$b68-~F))RGOI?TR^b5Y}r!d;df|p0T4K02^K1|qM61Vhx?y=H&j_&I1#Nm zEQKy<-5yVAx&k%KKMEKA3!_Lutv|ap?IKIKANv34v2}?s2q<#XI^6oRps5DC89U&D zLC!y(I9r;LE|kHv^Lw1^W8Lmf^uTj>kQN_FUF(eFz~t?dkmx7`W*~EbWB>!J)^{Ih ztvZ(mw=vn(YLG4u*iE=)?^f^f@^RNw%(iHi@3+hY!|OF6KRM#s{x+LO=cg@L`GOmowch2L!K$pCWZWQT^DPD@s+@Y}3UPkep-*GoS-3oWrwH1DdI z!+e4(q=~GmNYp~yZBPQ|`bH>JaR#AjEeAUE)j3`Q0lAZvwRWbuyC1^tiL@4#b07(g zA?eG`xVgo1)O%(-`eIMA216Lqp(-DZ!h)6PR!3%vcqwAv zAKHA0J*jkdqZX>e1F|q;SC!j%L~ygssuVfV{e)W%fUw9*@4(ou_XMTh-Hvlq<)p95 zL{5oWE5pp@+Zi!{ERjz$Iz}#!a%LJ)&GVu>qs}UDLd(t3n(w+xAGNGvR#gt>ZOz*Z z(cz=W?I)e~HsI9NT2HRie?lxyREHd{zU+tD>dT{G8BJ7a%B*$~uHcW#IhA-DaI!fn zx2-ytt5u-C$n6zfd9mtmVetB5TToiPAjv&Q-Nlp77C0#bCr(*^5_UgWW!0oMAsml? z<>N2m5C_fIpWo91a3g(2SBqPD5HCRGIIlWeI(!rOKEx0fH8Ju`mUS2|zxMy9vmP+r5=%4gELJTn@u0 zE)=aY?jNfV@XIQA8QUCOC42Wg#wxX11s+#GQ}rOFG10ik=`{u-V!&5BPQ)t{7E8=p ziVn5h9B6E8`WPxBKn}sM;ks>T^mao@$BB@slH6|z)ciCIxrSgHoPQW_WPVF$(=6TU z^B1~p=~v*}K|%3qisoY4H2kdRk|ODujCd#n^TZb_Mm@PH04`-mU8!)q+JJ)^o2QrT zSq=zoz|Nrc9crfM?L+z*-Lf#@CEG>Cdl&bRm`wCOfgz^W;h|-%pc$22==D;etKvBw ziW27G@Nsw}X|+R|HGhknx`79vlmO;SnlB6j*EylVHwtkHz5~2P#36d=C2$d39=qd_ zfS#N1R56NaeOXbfG~Oj4bt}X4DzWGJ_2#LOtz!$~Cw)`H@mhyx*f0p5=`JbJ^5w&w z6^c#^zP246kW*pys)9=$J0POFwWXo4 z*~PcI>40Q`lq_n<<(CyzmtTSXRFoOzi)N33EmfI+eyiw*JSPoWkCoO3q+aNzRLoj> z%hSd7!xsR3!(WX?3=|88c5F_emu90-w7J+_P8`n_8Bo`;-lc^}LV9-gCZwZlP58SV zScX64EVbQpHAQK>MDSK$UGze98MNp*))oj7&#H5ii=V}mc&if@2N3QsQg&MN$523J zpwL0rPu6Yvoc>eaSi~`&)&^MNOtuT)Q6^8nMEnmU{JXku4vakm_2f%rUkLJ0#sjc_ z=FQz@X||VFwJZ(;e3a*>j;=)7;Z{?fXd7qs)CagOn29EGTF!<>Ce1uB!Bpu!^2nT} zm!?q9&G@UWRd`RJnP3l);Jd&ihjkPUDu8wXqFxbQAF6?o4O?d5r{Hjr*FKTv{HDHu zbEn<+%44PSVHMK`?n9It>vO+zakJONJ5A5q!d4!LT-w|0;t$M4rJyMb0-9%`F>+Vp z)D&5)urI5W1qjOp{M$iu)V^Sd7z6F+jO5D(JK56@eG^QGP(7KzQw5ZP|K6TK zQDkXFpQxLq=)xm?$WYeE5^ci!q`H9;g4l)W3%W*mcKyLuzf}6- zCF6aEY|fvHy$rLN3sw@?k;4jRTpr?##F7}M;v-g()=QX$fOt)E2n=9GcJMcY^5?})X5-EPZ+ zvm)b{B=2l!>yRD*Pq-3(fRJ5@F*R(6mA(EQ#%1fpP=eI-K?0t@MOc}@mzce{vl4&B4O#X_h zEw8JB)Ly%B9;3qg+d(mK|A{G~9a4tF*@=CAuV9zy-Le?}4XA_W0{r+00<5gNRguYzm;#Q*RH+ z@zxgqlswTUZW(4^p7wUV6NW}xy}W#TvNPWlRG{aNlZ?i4fE*Z`Pcu`|%N#1u@X858 zs7Y+`uUT$_7%^;wSPy<6eJqrl7Mc{*0R7M39mKO!JIEZ**gWy!fp?hBDmcGm4V4J zi=_&9OfsX4mx|kP4s9@mXS$ZW^`b0fC9$RM&6EhBSAJPFv7k5u`LeHY&2d0vLv6#Y z(li05j<`K!L8j5~gT(b!$enYw=LJYyPj6e>U5SsW?hg@}+?WeS!o~_!bC)ffJKVf3 z`e2SJ6l?fl7HTq16bXb*nyzd1oyX#(YZGi*>z$l6b{s+(FiNC#v2uFrz&yIL_cN4+ zFt0UhDvU>i#cjS4%})5a^NcM~w2J4@4WK@#*G8FvtK2S_=T5QuCI;<1A%(i&4K_Xk zX#CNVVkm=O{4(E&hSwxbb>cRBFFaEFtOFUcA#jQwC|nl zaR6Lep^SUU-xmRnt@5>r@mR1Gn&fDNZ+IZ`GBh-QX06^uI1ktyA}@v*<5{kLz>*By zHXa+%@2564Rd?B%3nmI@wyG^BotUk}Rz~iG5AdBi%*)kVM-y_J=~0V41&pl!gx*{Y zPTVh3OsRF|3dBhP3Zy+9O~9eXMP-}?=XcFn+Z~93Ca6xh(Jen73$~l;`DSjn_{dzl z0jl<^CKKnMWulf)!j*Cv0i8hG*OKFJML^`(BirFi}JB2Wf#G@l*%XmB3lDu9y4^QkEE-QA0 zGB=0NbO)B~s+A(*brqjSAQ82dk5SO%Kuc$bIs0oj(qR*(arUS$$EywE=zc*8>&kQg@fo4L2#O*+~#{nPl7p8*6^@V4QD4%m)b4 z{C&^;Y^>6kc8vY2)b;I=i|9sho#n(VA59rB4uO}EPf|j&Axyb+yp`&u!b7pXDMAI?_=;FYf*b_y&_X+0UH>mfKR^bf&zrxvVFt&b`Y`1IIud;?k zrn!7L2R1LFnUx42A0$!D-3eIecFf#mA1>bzgnJhj!F+K3?=A!1+8KOgfPBY(eKSL-MDM2vMz(`BeMwn?^x=TLMi$h} z#H^AHo4`SgCO)crQG>NsA-@868ws=B_@iO{r9f&rFJ+r4U z6)$|wu|!XzL)|yhxH3Z=e!#fz56aNw`)Mmd=3G5eOY!adnQU?|VsHM`!7;wIKa;ku zyyrgq!O8+;|H$|cR}7G)54lAj0FpKdYX|(CjOkL?6N?yF*vz|T1KGSO;0??Q=H@+} za(d_ca04!J;T$ZOFYX)m?a77`#>s}10PAlGpkpgo31GVX%$-PdmH4S7sL_ZDW1=f2 zknM13QuiDS)>@Uwjj&1UpTbN$(GwJAVDR*pS7wXL?peKn(`{HQ$I+QF)v>hV{vHGj z(Xd5e1%XwRmKgYvFA6MuhWZX^C@S#+q7rFH>~YsKjFo{D2GOkPMUxKu3F6B}>d@X+ z<(3!;8E^ZEWBSKI1N>E#_#R+R48WY_h50cX!ucI7wSjWGF^TFbmUqWXpWm~D-_W2i zIEY8@3kFQjqZ6&E!K+0s7pJ}W8^&<9KVgg%E>BTdh3O<}BLYGbIWc=Bl#rLf&!Lx{ zi#=8$G^3=WsvVejFw-iLLS%(Kk@Z{_I7!mg-6q#I9O<9F0_UTrq6i{Mp(uSAkSW{IL~YC%r$J$k{9%(?fozr*nQ2rYPJD469dJ?* z4+kmU=qfj}o;*J51#HVTYIX{ZjW=Ts{>u4rNk=JB9Cnt2%K0PhHkh$~F zB$`|*Lk!!g2xRHN#3y${R@2)dxv3b#2h|m&vGG|l7_Qxnc9PHd$=I`MMl1(2P!xIb zDJBoSTZKM=IvmHqGeH2s`)8d634|tD%oU}9shx)e?W6Cx*x0dktE}1{YDsK4mKUpG z(6A+*LaHyMo!tx8nFt?0Dh;5;t?IGnzH+101=kd>cqh>O0nA*#JNcetcpe6W zhLNv~MgLk;XeXAhXXF?w0>xoao3`Ykw7!)jTKQ?KCZ$)xJ1flOFnoktJ|w45MfIyT zSP?(rIPAWL#&n%AP}_bA2+FnqeEt5zUqa;D-jC|l8y$W?%%HtBL$C^XQb2CrjZ;^v z3=Okz)tc^@v((j?>u}_;iVI3eBX{+>2B+2D;YYs(x5go5rw$qD_lcVvyt=zjKR2}>7KcONE3NA zH2-4gnLdPWD?}yIRJS*nsEZt?OJYeg&|y;VDOHnl@Y>kW;<=Wg{+hAz2tpQv6eql3 zAcD8hjoqE>B0F&Q<&;Wx5;H(%fLi7fVI%{DzJ3dYVaOA(3vZ?iE$Bj?fFcx-1WMDA zFO40RSU5C2?!qerOg>oVBHyvcU9G_Z^K*@A2}T zQ&-m1l6H;Bbke_9q0T8z;%QoUW(Wc`hu(b5N3WYH^0HEPQETqnsD9-C$tfU-K}G# zx4fo5buj| z&kHM7b(`_j-CC<2c6?XY&Lj9SIPu}Em!?kOxCsC!z*_gIiCVgT$e%|{RORd-8UTrw!oZ$?w3(wjffyOM)Q zViJ^fhv47hR|Fc5VwsW(sf(tVOTe#xoDS2xnqUE+{lW`-kb?}@UcyA{U~(E=M5SUn zmsJdB&WhJR$3@q|hLWgfGLCrV3FQpFuHo~y!#(#*{eCccFu}<`MZT%+ibMK*-LjcR zs?9FdrlYEr+nXM*)fmZ&>$7z6#?5*q*@l!wea~3x=x5KU*Dys-&c>eZWvn|d;pEg9 z7@nQ5Vk{A%1g9J`VJ(Kf_Kh&fOJyG2BNbk6ngHjYF|Tj7sA&X?npf_aQ$~}>HV`^9{o;AF zpHrMiTY|IsCsQe8-5pD3COkqR%jlZwWMCDjLx4g@tuV4~lL9~Tuq zzNuq=!t=?5U?#o%qr-QHd$D>QF1v+%_s0x=HpNZv4ch8<#B?!lzCj?v>$@Y$ZAF)yvd)8(H(~FHML^i zW6pmQtJ(yXOV=}S++9y(klovLd(nH(V6ad3Eek{_AhG27NfoBu=`RFHJ*>o`_CrXf z8Y$2yfV^-3&NKoMdG3p%X8ry+aua@bcHSzvh8nFgnV;TIFv?A}Pv|L_T&$8e9B{;? zFANc$OLS=-Mx~*VrImJE>*U(v7WJ_SGiIq*u82b#qF~b1T`8*djm^zH+BYItCjL9- z*{@D86p>>Yx~AS5@<%BzZEZ@O@?ONx9+rrT^&a{(^_T9R>@)?_x?Sti;w2w$Xm`gk z_Qx5zDO1{8Eej2)Xp$JSGl$WbQ-0-U*~DnH3BCFlv|N*jCA7k2T9k4NZz6LKlLK7# z?7V_1EGHG1_Nr0IZl27ZZWzO9MZIGYo)Ca#OT*uCEh8OGo=FmU;%&C<8PbZFaooeE zV-4HG%vzSqJP!V7<#&Q zUysPAn24DW;i0-le{uOVp%{(HQarP;_X9Tlt7@yJsug9{kJje%-4Rz+yC7~H6GcyU z$Pl?b^)@42l*p%`oJcwK-8Dkv5oKNY!%w6ebFn%_EeZ32W9o#?Ry%Vh*9N{j4)hv2 zDx>OCUO>jo<7PYfMmupk-M*pH3oL=iHZdoMz-9+4yhUtL9yO4na4YE|=QAaQp~h!N zxi3Xz?9@MISbXf!nfBoa#a`huIi(LA!qacF^3pxp^-;Nnb`Kn#qhZLBqR?#4F`u@R zo2p(`w`|aRY@}4*e0jmGUjVvR)F9r%cSkz;#v_rJ<1*3y}`}M|DI6}wL8!`5~Oc7YAmSZ$0rsdu~476dYYJ*B2uL+nO~NJLOhL#@B9mHkraO3y`t6!&iN2lOi*{D|vC?c^zU|5eoR^4DxWY`S z1Ky%0_JaFSt9>ycT2TYDmWhjoZ0=x0h+|O z_=Q8GB|Yc|-0~(y;IJJdyGL*c-$N#~$H?x9Vcy*rHQ*KF{&x@;d-zOWz7DiXP5xhmJ*Ba1H~l>b?PZ z^0M!t6!C8X32Mpsm19Ueb=_?GC^NX?WB55(VZ!{kWGSMMfMdKH!BDshjSK+|_Q-<{ zpGQDRCZk3iaOOFTQfjonQ^%scX|HTC*~_z#>S4RbL}TKuDpQVIDikqOCrl4%^pEn# z+U{vpAIrm=_u6&6L;}E6R&IAU!-(3|m0ZWPds0r*mSb5xX>zyuZ15fE`W&F^pMqV_ zRnG>x-U+_fu8+U|6T)LqD9BB;w%0I#ld0-(^X&cyb6?P!4TqkSTU6)0UkD8`DrZ~# z{nxY57y6FYkbQhZaWfAzCrhb)ea!hFuKG(NII%sU+KTco?q^{IBORqA3a7NpMx_QLE%=K^RZY=Ei9X7p> zGgPXNy0j4AVjRftUFg2#|HE?Th(=M)Z05`^2_aY{LYr1|w3B0OBH`p;R=ZE!{TeMu zAxC~7R|LtpTUYp6A}BUG@vhrhfWr1a6n|$w(XFon(dwp8H#5y!uwZ-jNMi%E`T~EMjF!@0=d2p(HVHGUCXj%f;2ICYih2?pUpAF>dLQwJ$Z&y@n<> z#%z%N#b)n*v03lP^6UuEVBF;y6T(aGGLEA`B9$8X3r00gl)f)D?I=+o%Ur(H;QMY+ zyOUb=1cvJ0&Qh9?wj0;*+6*pGhFTPev8k*C>_$KPJrHGGCjVyEn8ANC>%sqjX2qyP zN!U2-p^zGyx|KJMa7`L33y04pbIzSNPAJva!LC1K)Azk_yBf7Ke?%qPl%qKHr^8@B zX8MI8Vx>p@CRUzb#QJJ-F%d)KRc>-gWRg*|oxWr=sj6yfY!mzV&mPlZ1V7cBc-zr; z-JjnMSLHiYHn9+G@2!%UX?;^(;=@sSe5n*m?#X#oa!FZ?Xt-yIA>N{^QBd)19)F()I9EpB%uN@>BJt)8}%Q)YAi` zGVK5wdtOvy%en$lsA+IjeoYC~PH*3sjw+<>;8!1hf;a1CJn%l8dgBoyf8630j$YFW z^_WFI-nWT#t;v)CoKgZkCIw%x&|o{k$I5lTZ#5MHKC*qXCVn7h@eYZq78$TJnp0=O ziK{tgAO+r%8t}mVuUl&U{_~a+lIj3aeN)8WqQNBSXV)9PHtz;RoU^@xknvscn#im1 z{_!Ugm<>hCU=(@80ndo_c+MIXi6^E*-QSmNgPoUNtzls@* zIPW16+Kv$r3yFRMLxcNAyTVd9l$pOy3r3B2SzaT*bW|5a=Dk?NP)#idVm9a4_jVlO zWq%g(HHqe0Ndk4fp?&8c&8YNW&1l^b97h4w>jEKLg89t64^W4$zJ;@H_Wxmy(8)Om zDjr}C(m=Y@gQcQY)Ry@oV>Xv4H@kf9JbZK?@*-ancc!!SYpf39<2S(QMC~gY=$lg5 zNK*^1D3geZ4czr$f9(GD**eA{z*J~ZzEB*klSs2I8dDRzgCt$wnyv0snwZ25)@gBX zG8#3-Uiz>+7oeU2RB`%JMwf@}ArKDm-}-94If9f@QPtt)1;=FCl=;Sf;0Q{5_KH9} zvRQw1ASiq#@-MH5;F3AK#kWQQ*xNjo?i0)f$E4Xl;Q7YwF9n#c6r2=M?5*Afaw#S< zL~V!Oz_72fFC@}J!^Lj0j%EB5X&-KbBJEvK*S3qA_kK}`SW9#Qw8<~Vh`e4r8K^tP@(T`SgUsQXzlW(G3F8LP^3I@ zV%AHbjwHN0)~v{bF5q;SxWt~=8j023R3p55pZ+~){4CZ6rVF6pjJ%tdgBgFBC=VI?1(ZnqKrRNSQ0xY8m#4G0T% zMA}+@<)))}kBu0-Wl}w8z>G51QeFWiu$2ka#q`c@yPOcul|COwq23BW(K!?L82 z`q=Ha9-J+wxhpT>i_>*d-IvA1P*`a5n~5v@+xSv^Qjcur|1D(ea4(253pgw=H^J08oU35?==*8nIe(8nk0lq3;Xn>~@nv_stmc zfW7v?=dGk0SraNaNn(AmL_%y#{qU@!Fw8Fmor={wXlEJyTuC%e64+l#Y6&o8-O5Lq zX;2@qaqr!m6iHEO>$Gt*raw+@5}T_tzB{D~I)arU8E~(cj-;(KQL5js>h?G1SekJU zy{p@k5J7u~%Kt3aL!g|=GPUlo>+^ap!ZcEgc2VtP_Jj=!QwfHYDSYfwKr1iX<4Q&XU^;X1N&kWE<<7O2nHNeG$>|E5$Kt^=>%`*|!1DqXXQdw+{D|h%&wg z;^jz{q6qhI2|A(=o)eYhNxSVLSAwnRAW|=Qr_+<{q7mJmSlJaAWOm+J(OX+EAQ7+J zwW5OyVE)ZB;|8G1ZgjEcr5!2@6_i~v6FBm%n({I$4t>^A_Z)kW?$%dPsqP=G(oFjj zq}C1JKt#Wt_&w$^m;Yl-%W&KT*gZ}aE#CS-^UP?Mje+uO`R|GrP@QdZ1MfEJ+6ondZ>Le(CcaL@L#VAUA5a@eEMAGuqSt9`~$$D_x_W$t}iB zFueKu*@fsst${50fE78u3DT5X7$xwz>O6aDUOsSTqHiuRnYKb)p|7w}XIQLJstsZw zL$91%;<~#lw&d6#GiZ_*$CYZ5pe%o$kmzB=PDpeyE>r~=%5=8NVMi0ihkjOK+U=8Gfx%#1 zLm46hHw`>-hX;PN!AM+cv7t{;uq6RUT~=5f`m*m`GALesXL|_OW(&kn=IKH5Ml1I3 zc>{(kf_FiK_G)9i-*m`<&n!+A>o4EwvJ2{Yb64ZXo%IE2;L94JkKI2vrGrl~{%|Sn zrR6}f$gX4W*R1EfzXxYs@h)ciXPm!hL&nP?KfcY5XO4WEsb-<2 zqeVSTS8O&|hTlM-SQ1f@J6+cqzwh;I8n2J_1fNE(;+O8W!}QULz2C3hWC<&7l&|1F zLVwn+LBY)SzV}CW+hfZA-gE7a$dTd2s}T-Uz*{5udmDFOyCY%IX5%mw)XlbXpx$q( zd`eOq(l{P`|G40FX0ho}x3>I|bMKoGuJCp8g(_>Me{3L6Wu7DAOw4ebRu(XxBubu*?E)=(sp1#TV-^&Z4i4%@(v@DjJ73&$w+c5UlJ|R2Kx#wDIFB~*uQ^+&nL-HOZ{2kuqsA=u7@FHN8cl``!uPM$^|bZLv|04gyy@tIX6@STjS1=C(vm~#O6qz zPd1H@7NX!G6L`kunaK;7*nqx8s(Ym`^X&UAr8e5xX`Dqdu#hK;^}V`nzNLr*=VYD0 zlZp|Ob}41I{x$*gZJVZw)+^uxMs_svW0OAM_!MF{5p(ruz@cFKW?2~&$Bc(9-!<`q;IiL$DI(2eV6BNk!PA|#gYBdS9t86 zd=%pI(>*eJ<}2ILMdgB9r2F@iQ6)qA(t7pnKn3s8&b*P-JscUWX4hcrFFF7T}?uDE3#Y8Z}atQAd{axb$V44*B{8lJ-^X{(lv4y(>XAjX1U; z9rM&l;ste~PMYD>PlAbd=zXjef_ZTR(Q8P%8&xDe#1eD+wumYj*Y)C~TI*H0;K5Q# zOl$p79FLtZIAtyHfQ>(o{$>`0j_Hlo$vt^QXnp;ia9XrZuf!vnSL(gWDQZ4>qI(&=g*R5N{e zLsRJh59#AhW3~QK;M}V}z)~ww3>rdpI-Jbsad{OhLdi4F2f)Gumwtoxn`b5=)Aiey z3yM8TFbWs*7ST2zQ9@YJPemM$;uulSo{L^P^f+9uY&5DOU=EmSeJMpuuOeMED+qk6 zfD^XEX6l=FNAT>xc0ExvZxq;(Z=W_AM}m+ga%k9UxLwBa{&r+RmU8cmGIa}Z`9Rds z>do3EStfOi=V(rV!*EuC&5+#YA$(*4ON$n5s+Kd?LscCZ%M2ZfiKZk;(Pq|)QpAYc z^`&W9Y4PmZ2X7m@SumhHU3)hT-+$maUYI6g0;9#has->C|G1Tpo95s{oxZvUZ#6!f znE{R<&P>ctAx(@QHu&(>ZNRiFZZQi`%F5h2GUaQb&sD2MxecE0stP6d=uYW*$Zq#U z$Jkxr2syYLTHPR*XSNiWzTGi{-&W}$@bs0AF5FJ=S^Yj-oU5>e_hAVF*eead31D}C z1x$z+q@1aZ){#8{(LbqgE8b`EpSTgAgt6I5nesjTfa0Scd!^@CA?y~xq?Efq+IHzp z87ad9aajGHT^cj2G1RqkVzOwpyo&W&ecp`70kngdWx>|EkIRo6n5gyN9|PVI$Y#cJ zEsxy;(FCCuLJH78;-L~sl2##Y{o zr^;V$lE|{$6JjC*oLn^&?$vDv29~B_mtO2hT%MN+hTvPqKCx_GsN`L!sN1K<$B4i$ zwV!?@zo$hRFv>3DNcYWR;0^<`X2c5dgKL4-a_v`&_3L+#S{Ao=-=#tr&qHW*5vm2t+!#novK*!>NB zh@l?@k%BC6DfALOx?MBSb;76t|K-p&vkN*~(LuWDjD&vx*>E{qyb&@C9~4l6MaH5C!509eG&13Vd1!{E-oG9+nx|BTZeXX!%l~ zTf)5*i4>j<_&d>nxorG7!(%Kk*;OZS43D_B9g@-9t3T?O@t};Zr4N7HB-$0&Kj-sX zN5>qdzcHnPSh8dj+LL}5&>YBuCsb7hZMlr!ih%m}(v3y92!ZlW4)_(Gk9T-q|9-JS zW#CLp4G>)qW~J7x?CZaHy2oRjUUXIs&;ye_KfE-$qe8*=slAV6OvAipgL#Ml2p>R4 zt7L#WdMr>8>7Bc(qoavtgnmsx(dPp{@BTsBHCI0!pok&Tx7$Zn9OLbE5uMEskAX{f ztF4S5i%Rnt!yM?}cau(|9*xqi)>qrYWb4IeuPk}2sx6NQ4J!)9dNDv?H-RMdfUU!xlif$9g!9Ht=R8HvB&0o`Z2>NX zUY@Jpja3dIjzy-GN?7qFESlyGNaET%Yp+jW6WykS_Bg7_k7bI!QDnwC_Rt?TqD16Y z;d13q6}``!fna&#!lu3%)BZoLLwG^t zqnkRY1yY`$yN@6&%e=WUhMW=-S3Q2YDZ^l_b!Wj3?sMDnS_NY5)U-^0W#E3mG87WW zh-q5S-UBjcm-dtKl~GrFS&$-LIr#JkGi~QB)gFQrA+jhR7?KOjvGhYY@cE7lf2O<% znDRD)>V4vvZ2Iv|fARo&3wD+xj%Gg)^-YYC=u-|?P?`MlI1F*|G`X^}>ZZU+>4DQ} zVQjAcTWO6&aNOe(SvyZq#|W;*n*H~87G!`TjP%vLTb}`NGw`13=gISC$3ASpn}3$X zbMl~a*WGD&^g~SEaGWIP+UCGkopX6f0gQqktVy5Lq}oF&JvCtPMNj9OIJE@MvkRlz z6APak)c}Wt^%k92nBVdj`0WPP_5*}IMWi1~R2=_a7{NFLXZtFVRzaK?@Q+XG$x~%#0Lk zT`qeLSG~3cFBas=kgluJ5bf$tw9Z60s~Il0t#m=K(l+q(28|S-1Yrh^A-R`CTkkXZtZOa z3<~i1flyP>^-k>a=n{(Q|KpTiKQRfJitA@viLeZ3Q`R4pzo!3^E!n@&d?KW9N{IFm zQBrhE=pp*Ml>F5CnT30w4?^49>~xP>FLDojp1c{cxS_46V){Ab{!ZgkY)+!JpG0@7 zed<@p1v>{-=s+&mS{G2Z`J?|*wsq6RiktwEg~8UN6smo*#0p2}lb8m!sm8>6>64?7 z!K6val100?n{RQ9iAKOr<>7n>P#%bRNO??s0hEVq)sdbrf7lmL9>|N3@+e|V7(-kT z0dRr!w`U+jm;=4Fl~EJ1bVH4}yM;3QLMi5h%CrUx1;w>;uW?bZ8FcVS~in6t-eW(p)>yynKeE?MP}MBgpNBb zUj08rCIDR(eLKgm%iOrZen;~TZc#>3Hs0VYgnZ8M9J74OC6S4tmVImYcbacV2b|NX z$*!p_EhB@wPGVU!{HXZ`<HYBb8fxc2Z`wUmOM$4)V#sm}>nj&}OYWXwshb41>-1>^+2(}OG+7Idu z<_kBkQa(UpAm&ZaZHux;(+qw86?*i8?y&E)p2Ve}qJvcs{~zYBf|y^&Rn%?kcvqbF z8kT3nMB%>X04C$_i_sOnh?Tvx_O`%tWgNka*uP{XsFIMG>3)9Ba;Xa^04+N%K7F{; z=3A$@+b2o$cHrgOsTzawTac*37gaR>S@noea4|}sh3vi_mU;e*bPemns^oDj+BS1p zj4LYC%RNYg%X^ws9N2H7)72a}^Y_K8I1?G6F(>}=F9r~zFalOQVZTM@gBY33TmKKO zH^urrb72$<5<;tG4sCcQp!L2FO7He$;r%NXWcJyMM6c|T(8&w22(nR{r0!e6ct7N{ zUpTG9;X?^0QncS_ghj@oiLj=H8}1SSOW+6c1C-j1*?eouaIM~A-U`^+De7pM^AUeQ znN;58qP<^$j#(sc7DW;`*6`kgsuJsXvL-Ni!! zwTJd1LYphST@`$JPbg|14d9HOXr^XXq_p%n#2Ul{yCbdvk6Ru7Lsxg_Ef-8zS)=gN z#4pwWPW%S{pvqg&F9W=x#V>mndoou@UMOz}k2T-*fwdaNPKK<+^)e3Rul z$^tv=MI0J%&Df3$NlA-n1<~Zlq6#Nkx~2KuK&*o9=TTATg*6z6Z}b z3>xOwSwTp~QD{lpH%moM2N^8g5Y-kTQQo0jm74ukDs4EA%0-Vbgsk#L`{|opD{XG& zC1#H;J5ytPfu|<{aUGZmI2q6|I|a>l|K^Sx&l!!@-=1W+HOQEEfEf?fsoeRwA5id> zQQmaESGg(I!+Y{Z+Yp3*aEAlL9f}Zlq?9|ZRL3~A3W-RtCMKSd!XBSk*p6ncytD2V zyfJ}d*p#HXvLg8^?g8|{tl0FpST5iI8@zQ_lG(GO~VYdY;uC0gnKiYQU5f~fNAH4OuI9qe^TN@Pi^5z zm*~YMNm_LJ31hD{^=Q@F6-JELnk#r98#=fbrE%vsjYv->{PA&0pDoP(ACRVc<$v?d zfRO_tgRM@oDcqM*m>XOuzqtsrDX7Gt3oPdR->fP9?sJrnX+3^x5UeT>xpM^pp0v zvSV`+Kb;_Ocvg@Wv9WG!hRDO8tX3SNS8}s3GaU>06_vkQbgVE1=PuBI6))orf zUBbGCHlGA-0L{IjyAKW>48=%Sw9=}*7XBBpbQe$a`sMQo7`7iEpb!Au9DUC(I}AwE z>x!)G?b^Vo(lm%eh3ug^C;BWLt_H{wOnoT{=WhZNCB^ZWp>Xow+JN`XD#M- z%1vIv?6L7;hS6RV<1Zz+a@A<3eJOo*J0M6~63)(S@1pO7UQXH+zxCMUEfyyopveGTTv_B5>Dd;fiEw0NMdXIghk{ZmHtUlFpr*Mm#DGELm-u>`M4qhs( zU=n~dhU(0jy>=*}Z9vRD>0>;SQy6my%(<&trMn$C>uILGU~HiQ#_KUo^k--=EU*fM zNf?92HLB*oagEPb(3ku=I0;a~PDN3s{7hd@Eg@I#5d-TF**FsFrxGhs8+I7>XrAv{8NEAMM)PcgaQR_{3HA5-p8i2|A!u5|6gsm3THbK z%fy@pE8=?!=j9?AX!wUSN6yB2Kyh3qJU6TVMxew` zQEccDO}qk6`vazblEBInKhuosK=fM+MY5~>X>w>ZuAg&5EwJl(!!cCva=~Y&jF8if zzCgOf#YyT#=G&fVQ>~dUW+;GXC>hlly|!%K1~C7Om|~+w27iT+2X;o8jQqb>9s6$P zA5aP$fdWvf0#UcVU01e*&g4Xjo$#C~CYeRNx$&ih9j})}p~NmE-T z&b<46Y#Ce(Ue2aET zTjssDxNM5W9lCD(5lH%(V^d=ajrF$b(A(R3BR8Hr9jo3l1B%moklVh}W{)F*=Sp&w zyYV_^fE*=X(Vk(@krvB;(-L_L&;1B@}B7-&T%;>a{8iL zAMmk9C8_Zt&YSkko8;GL-pI)~SYrDRxdG=%YQoG}F;vCK;Fe%0Ioonz(umVB7Hq3I z5GGad1k`YPf*#$F6h{4Eb2dTA%8Ir>^NpxpyT=&IdKt~TPsvy~QL5f>C-03Mw!|&p zjNH=Xy&qomnvDcA*-`$*6T1|yaZj&&_tKP1lgT)DyZ;+okpx(Z)Lp6DqQ@r{cDkR^ z_C0k{!SAzwzqG*m+?BbHjXq&Iq65cn%{>#UTCooj_lJfde_*oAUmSDXtnR_)lnE#&C^m7arKcH^R;kMK%5Nr07F?Uvzi90@yHkx%-3b^6neQ*7I-MItZJ zOM73T6JS^2R#|lys4vigiytbAtNhy{tmmv3x7e>eEJ#(LO7fw@I-Yz6t}Wwu{f6x| ztG7qH^4pf}I&8G3dYjj`tZdZc>cx~}_a(RXuaxR%Rz}8DMy_<)HMl*I#9W}hy)^pv zQo;PK7%8jURyI4&UQJxFrVd>{Zv4tg#=Y!3F!GnuLJ3p1Flm!R!@3H73Y`1b_tLjz z_z3f(!*tR%Mp@52V-lU)>=dZL*!MLS;VXYX23J|bx&4{OvXXc|Fm>>5LZ$6pX=RkAGizRB_FJ^+jA5nZDU-nss><+ zp{s8lx7zKlS@BGT`^sec$gJd#Uu!>J==CM=u-h1N?*i_o{+Cg8ueC+j9SoeG)ODZP z+d)pWI&p~(OkC|YxvQc-!DENWX=u;CJ-IVFMw7;#5+B$Ws>ZvgYFKwFu=@!KxB$$u zH0UFFb?R)V_A}lb=|ONoITv z4gx!K|3AjwIv}cdYa1R~X#wd_k(3fCX^;?*mKwTqK$Mgg0cjN&knU~<5Rg#1q=%AL z1cnevLGazP!SnpiIq&nm-=FTS&YJta*0rv+?zQeg9d)R9M_JOZAncAmQMLSmMKbzu zpb_w;-Sbqh2))QtmMO@QsMdJEoSSNBQ||sYtzVBz{F#vWbHQ6fNlEzG{g#8pIOk|; zRYwC((bod1_aoQ2JEv483{)jv1@iR9*Dh!KRc_Z%9=9eml12D;8tMX`V zUIEXa4S!BIzO-rN-5QD1-YC#?36R??6}*6a^{NtF3)=1F~7BKCA~A=0fyugkR0DN-rA^`ADCqit&4 z8~x)$!dE>Gx3CgRdfAwl%r%eDZG7^G|JtNbcM)xaL70oMMnX>Uey3JPliDART{wd( z*JAGT0__2vKS|ke>l$^H-kh(RKhOE*>l14VsQ7|u2K>`a_XBxDhdvxDiZ5SNKgGS5 z^znDyp~Ue|rXPWLA6k#_A`PJ;+1IvOLQ=l6VL}4+CUMUDp*>DI^SGG$rp@?xpM->}xT zhvTF_-a(u^;fL~>c7gwIon7@UnF_$+3j5rf-P0}+CWRr!w0t~ZXKtEfUZ0VK- zEjVkI(VrXrbS>KM54RC<_k(|$HT_9l7V?I)&6Cl>?GD@AgR%<7#x%o|IzySQ*^n*L%gajZlcNIdi?@|p2Hh$71R8! zuW?I%t>Q9KN$Ps=PphU{!Y-|H-x=iQrXP8AxbVq+BJAI+nn7DdelyTTqQhXwK*w{yQ3cb?jTs}ywZEFb?T$#vdAPDfapmjzwA z{=7YhClu;xfr-x&`}U~d_KGk6z?A_r+?t&4R86jLf5=^d>;mhxMF%|FJDoYwzXAbw zQTR&9|Lo!}DP$3Y#0$Nv(QBS{KjKKGZ(;vP3ri|Q86`fLD0^GbsLRIfcgCs~x8-fI zqMGbH)Y#dZd+U8is+Bp1`(SA9rsBz2vTzZmdfk|kiDLRx3>&3a^>bl+7R|jv@9_^( z;+?4j_hj!Sk8G}8wZSNvwU=|pGBY^#;3yN;;+kI5Z1SQkFK(v(#X*CX?WZl z?Rj0?5Zev;5##w`tT7AVu+}1X5*)}PvFH1y*-qO|(Xp1@DBJH_h6J|96QFmZ2`uV+ zeeF(M;(18o`NH$Ssy%iY76t3l*`_dtY-#TvP3hP0+ zywUTbMOBrCv5e#tXKy2g%qdECxbG!nc|Chl9dIokFhO{TC-iaHVTVe|ogR8Qjt9 zd{{W6mB2M&wVR(eI(SycRQJBlAUWzwX}da#Fur)ymM(K3t1F<;tKqxg1w9BBDRfwG zgu^^!L4IiQec9WbD$yKBGhlYO_d6TUm%Gl^Vcl-d(F!MJ&W%T_;;?;&Vzi=8H z;+Pl0Ogl1f_+H8X76bx3O{a{plVd)K=Kg&fd-w{5FX|?1mx%)cGtq6>eBMK#*H!g? z9?P~>9?$-)|A6)wliD+iymUn4tmtn!f&)`!laxsYHLf3zVJZoRF`Ykn$JE$CN1SxI z29@&m#{ej5^ZT#Pqz&I$yqQyeHqQ}A~7H@Ive^`}< zwu+A&^Z4_Ff$?DYUhdQUken2QNqg41=-$Tm@Zu%fXVo9Zv^Ji$ZsBod-?yWgTh5&o z82rQkLr&!>jjM%Ny8dGCMjEAI#998ghZl_cgYsrZ6fv4S0n4n-p|bQO|Fq2Vlo9{J zvdL!Q@_Uztxf_K3H%Fv_d|FKzy#?jJ8nnGX@`i`arE!{Wg|pl2wPja1 zxc}6O_pM09e;~{DR~0@hYA9RL7)=hXzV#4@(waY7d_zah#AqC_fuKCy|B$)HV1}F- z<9{OvK`1C5_71tb+bhn|4hj;6cx#zo#)o|%!vAT;qn;x=%ZM0>uYpJVGaC=WkG0kx zM<2FR05)Vs)2w9{yeAJQo#UG;?=Ab7>z)8|P~ zcx}~rFC*d_Mu5Y&cT|7=5fYItc&6uAAm-1_G)2eIF>#0c%WbJ^kbmr87o|TL=EIke zmIG2|fd>8X@G7b~;xpFuHFs>FKa1Oy?T))lo}Jigk$ls>A5DlwiO(FKyyGU|iZzvE zA8^x)6J`u!tltG%&}C@+1f20h#lo$J3xCiA;qm*og(xaD{eSmF&Ekp&m%vhDBmv!^ z08JRL{A~%Ou3}h$xO%qop?`JX;m6+sV2J zegShnI?(?i2$6phL>ZbOG(g%?aI~ssP|Gi!u$)bNG@3~#SvIDM_=@CKi%94!a&$EW z;<0;i?CHqHc0J=C>vN@K9ptM0yZzBPAxeFEE+M0K{PlCM}yaD>^V3ExWKq_ai zqQiB7SH%5yoPZzZOplNceA31f`rm`~Bim$=+?!ji;gLU|P=HE9m3|Zm-zh1_O4OOx zaF6Gmm<`8kh;F?@82L=PWH;Cg(|Np2N!#(5Ldj7~w7BcV&mgTHm)UbfHg^6Y3+$6v z*Bj@(Q_;^yF-yQwmH`JKpY!$1+;qw0a~Ew88eR90583<2)2FWeL)g&G9%+z*!lwPq zmon8a`)~MRjQJ0m(r6tq<}F$iRw~GPV4!0Bu>LG*GMpVY zcU`_jto#jo2^7!}(6Nea(>*OfoH|iQz(Or(*p(U4dh5XOB~m@zv<=v>Q*Zyf@wEs4 zAM*4`moggkbM;UDZ=iPrK%We=@>HsqufJz!T!MV$5tsNWCogx_us$j7TN+#|aSSH4 z=zc3=%im%)%WmQifO$^O!-l8EnCiMah$*-|yY7n%eVXWU?Wq`zBeo4+@br*A^MiL8 zH28sD9n9&6M8Kn8(OW+3AiU?7$HD{1U2HAL!t;n; zd6rIv*H+w2v#nO6)$g37;+1&ZPzCO>an;yw8+Ge((&5ko%m${iLD}`Y=MQ>SYBrK1 za^cf}OX^JL&D+DceJV6SEy$Y_g?S={<}U`RwyEg2ST?PHYG**vYh5aOS^XzS>3;>F z^nVXP{&37!xsaAUikwKB1!xgTyB;PVLy0 z`;eXoj6VgQ2;|TVy1*76C_y>^%|m>8R9y2&!1dvSnE>+1TH4S5AyZYb9_3=R2+!L& z)KGSc63P?SnX|)XpsTrs*$mp6{tTg7vqFS<`7ml_jtA`;%lxDv=IlTWoR8ZJLA$j+K`Mq2pLD<&Y&=qHLU|i8xiqY zl!#?kpJGntz87_5^?2js^F(|0vYj!FmFpgB6{{ESQ3eJ+RpkME35Rq!vq z^U^0!9-Rj+ecJN^pNXU8lES{2;jsaJ=4;Gjq*ab}hmzeXb^QBinJNP|p_`p`3JpUK z47xKrV1yBzNPgVBgo3V2{j^$5_9&UGHO>8WI$n_BX1$i~M}LRhAo1=QYeS2V*4iKv z7En_(F>o7Uq3P^AaO9I9q3wSNjXVra`#=|K+Qc$d3)3SRr8-n^HA#d{x;0b$w2<7$ z8Tp^nQ1;gCV2d#gxSz&3jJ9t@lASZRjtc)Y6YU8rh6JDrtE>GXYUcGs9fTIb1-%?Q zjtiDPnBc-Umi-V1clggN{*e0S)qj_*TsXrI0Wr;CGd*LabYohQox}MQeOqy`#hxa- zSqm;V+Hx~uLiFYdV3fCW&S~a&-FC<)Nf2$v$WLe|OoMUL{}-8FF8vrR#9hx0$n6oQ zu#oTK|LuWEN*KP5>N(cxar#IijeP4S@>xiy2eW~Yw59=6NXfoVxVMVDuNp&H6@|;5 zC)JFhywT6f?i46HlCvgJRmGPKthfsu!Q^3w)jvFK$7#_r4qR=YxySlc;jF~=4^I~! zzn|E>L?@6S3gj-#b_|U|(gfP-`J+|fMRhC~35{F9)weTCf9hiv18V^f?5iW`BTKAS z)jnh&=e=4OFoXN89y@*`BQNuzG&<4+OFg~j*RZpQGRTAI= zh@H908a@Q6#*ciGpJsvlA3@e9<=BAshQBVYw5cmEWPv0M;4X->&-W~OwUXx z;8-H~?LQTFI?eA#`2-zv`~L_yXZkbwXRnnbpfdfjb_2m()mq$s{b^+*XXz`o`4lty z=BNIHbIwSQoWm5vT;|#8rts=}j&35&r6J)vhr)OIy{|eO6y;ZI8AyFMU$=@P^IalX zi0r=Y8LR%1(2V$5(&;f=Axm|I3YY}jzo&^ApF{smax|ddJD$QG$roBxZ&OAR-8j(* zUwMa-)K0&e-grQWoYpQuPkQvE%`YcVPGC`aB#`3vL&n%Mb*)K@&8(ri*}nFM zQb8g39bKf7pLwH_L`cG?leo7SVDbA*-|Y!K32r9+H+IjT5`@VDzDuYYC8@iPkgqrJ z8e*5EyR_;{#)>tgELfF~@61yAL6K znlVomn;Sm|nM7Mqh;2>erORQm-ol__xM4=6WS5`o{w7$X=*1UGLg*vyW7L!Qyguaq z>L|2{a|{Y4BF;+~J$b--Ws$1&xcS&AFL;Ig9(EwHTjr_VIQM7~2BBGf+H>a>OYA2x z&r-$S9oAHj6Xlv?(e#|pi{74#vQcsHeGB>Q8uLt#sA*if9hd)gvyc;aN?elkE!HQ4 zNrAbJ-UHeQW7X`5%w!!lmbb68C3tumK68sws>kmEm&Y~XMAxT3kCvE23c0+40rSU|E=b|9ckKf7crynX*cb5gc z;ISQjPNPNuVOW#)L{^Vc*r8v{!pj8R-ct2^#VLPBHO$eIMp1N|)sPITIk)j(6c>~>Yndb(D1st*s z9#DUBPC4)m_|;}w5=6W|bmn-lJgUpYP1pO-W2!ob$7uT*?GR|l(L{B7Di-)+wpt}c z?I&i)hc@{msw;rMgg!OYJ$*hsNe;7Lc*n9Iz+SrZ&|*C)2R8LnUr)(G(?DwTdWTXx zS<8=*o!S5+*Ti2PNKC%4`vZPXTpD&`$DI{pLTO!iq!(cIT>mDntSsP2-9BYlgA7xc z+c+NZ2miW+J8EnY+YC4*X<9?tONQe<&c>LG!gc!oCI@at;)fh<&AXw)Kf}bYXBZv5 z6_MaRTCgdsVxXzdQ7Xkw6No>eW}E7NX43ZQ4uYPodn=xX1~7oEQ4rLFW# zd@j`bPL&YnH_i~jK~8NH4_EXjW%IMUZy@NCH!7w^#7FvAZ1h(>+U1T?iv!L_{Djtx zLYXmc;N9;r-e0?3C@EM*3w#Q)IE8YnRQ^jhGX}fj{XT|+4N<)3f)SdV2)#sKva3nq z*hcrrNLlpXBJ!OhA!V5yYxN&nD*HN3!)my6>fpkONJ{5gh8zQ0v{T%Z#W?Qd_2)ge zb4$FRP5==d4%*JutbbU5%NIE3vC%*hhK2SCAHXN@Cp5<@g9xnxTo~RuE7Y(ErjoYZ z|LnS5VxCBAHzkc*JsHaI(~XRLtpmH9hCFFs=bN#xE=4B?Z;0G^t)0yrsuhkr<>1oM zRXl^saC6MsibRxb%jeW-8A?g9LChdn$3GuLktDCkVB|70tUI@4yulv?j@=GtN)7E` zB6lEenOJj!rX_km8g4^{-oDv%MP+36zeAXWj)C5iR=X*H1HP!Uc3e;Wieqtu@5x}B zv|1f$G4XVgHNA)ASM>dW?tk`>Cx2 zVPs-4thGQrlAdLvUpO0j*e`MMkzOSVGtGthqOmURb=)=0L=tPgC6(tOGU{Gs`l|duISjgV5ap@(bM~3(* zllBYB%#&h-14Yi1VM+SIx^|?x+`kZ61)<2H?qq!KzEDOuqt3hLaE*30CI+!x8R%vCu>-AJq*I6O?3;W^ptXHPtB;d-;I z?0WV)6B39)xY$o3E@>CThVwecEw|}csKSPTBXA@QtJ!WK48uVac+)S(16c&CE4UNq z3JfUbmH1~&v42VOK>m^>x&3W}f*zSICI}XSq<{w?r8p&Pocs2$UioE=ZF86k{^a#Q8vyR4plwwgFCvn_x&Ns{LZy zofWXl)q)SKzbMl`s9KMO0b$zsjOR^%;>Ml3~&hrXF=2Of#c{Jzdh|j$pHpKi&tU6*Q5k9z&hheiGMwA--NYyVxehoyamL}EAtP>` z8`?{1f-%v|St0pk{q=oD3XnPTH0xzc6!=~=*KHWhJkhvt68o+a4dd&yLa&21%gs?q z&+D!WF;ZMI=XZ`_G^G|0`E0->3Gm%sU{cL#nn_5eB|3!bswWLj8C*e$ypf1WSh0i| zhc(A*%#(d8Mmcl4{*u!*)V}#r9(INyhJPVzVmTQ3Go~~lYtnd)aSS*P**eVBAJq)q zW37ERLGdE|rlr&8>YGp^s~b&@Q}W$OhL6+<880mCcR1`bxfu_Hg zkCvtKy?T5t6hT5%qjir(IAAkRIhG**L<4^Vy+OSs>^!pC18HbuPERp9XC7qC(xa_M z^GZQznH0liNa1#~l?i&Nv6w6qB%rE!#gUuSz3yQX_ZPsFQ>9JUQaGac1%m_9^!@y` zPaED9WgaSAVG~!(HG!aVVavvl0)Umw3#^FY?}HoUSGQr1Xyv;Pt_xe*^SyM-Y*6p{ zOWzIAf6${I^>~PRrcU|*Q^GUb1cNbWuPKG~g(*v`>fUHEFgy~0<8Q2d ztgx;_99GX16Ypvma)(*p`GHvF5lZ{#Vq#|f#uf5tqBE!h1 z`byzrjDuQ!-o~&r)C1UrEAKZ!`G3Hb7qBAnFI-vJ`Glc@FRpFY>YyBm@o+%(yFQ*W z?9C(KbOUSJxE+Zb>hKC<>RVg^u(-W$QDg5m0SS&KudY ziKY{RNyyg}Y61J>Pm{KB&fX$akf*PMzjPBzDb%7?N5M2`2TX$&!`Cs_Xr>jS|(SO>Cql}D>fHlT~ftiT2RfJFkbE4Ia*kX zj_g-2B70hdXSVtP1^DsHKL5&r8e-JRA@_S^wk;f&LmVRS{hQj$puQdWG(P8xdPVuO zOg$jBtNFMq*}e-@U|mdp7ic}_IQK|~fEll7lz+k{*l$T-qE*e#pwFqyrM#?m!9ffc zA%I4K?PX~HJ-rs=b{X20a-7{9AXrl_1>5E#3>WmdP^ecbhyx;Sr}n|Q)Um%9>FPW~e(cN6g=$jZf;WE+d$$~F$Zq^#q53ep& zg5D~u9jN=G!RkWn?Olq!mH!fZ1j`0yndH>(ZOo+Ka_Pc4+1L!p1=SB{mFUZCd|Tg3 zGM;PM=54wM8#z4Y-iqy<_^BU_Rv4RYpu#ATVwg*a!Na{!7%>W}mkI+JPJ9u*eby&R zbh%5z;n7yN#hj)!sd$d=M_;@;b(l8)9E5(+1e?w~jB5*o?aPB2BQJZS^l4HtY4;N` zH8z}I8*}^ysD_~c-cpxW7OLO!nKz-+B<>09lnDoTxi}Yj@m9OS{<~Z-10lH^q;Q!4 zh)cX71u?N~94xs{T6dI(h$&$Nfr2#gy* z#w-yo*%Se{naTR!dYRy z0#+0prnlS(G2Xt3vSI=Z`p(7o`a=JwWp0$~%8$}U?zPWzcNbBZr$$8lkUU};oP4+Y zwuuu}s%0H)LX8%D92bHwF?|R@z%X<*kpAn9qv0$9ZlGQ7U^-icS`E*PeuWx%lxXdu zVK;sQx2i@W>R>v8(w?3K2mIS(MF&f64y3_T)&)r0`~8>{)ex#QAv5x6XmzB`J>$l5 z*j3v+_k|qmlUsJyIC?;1ZU1Mk2CmwPL!0TRx@l-oV6@|cNr3O^GS)hI&4rS+A8!~b zz7}OxQP%i*h3*0r)!joc1W`{%z|=5>5*34Lsbi}n`j^zIbA-GGBn}f%6Yvw!xQ_va zlg6*{9MD)FM`T#TuNJ4X)w<86SmT?YpklZHsfF(|7sJKP4cKDkJ@p!teN2*8kk;eQ zolfD$qOT?IT3$$;9UH{I#MbKWRV*|+rEThdu$XuO)^4_G>tc#*4b9aDs4k89huSJj z!@;2iWuJxMD)-E{n$j=_t-gYrrKjOj?$;4->luumrq6#cP;qg@?Qi^4ZB39;s{sv= zRfB-lij1gjg>K6WLPV_3uY<)3Nr?&3)N7#J{pvDSGBIN_BN*elxy?rIle*9JfJyyI z8~rMu=R~=CIl_^CWy-cG9r1SPC&s;BfstzTl@a7N!LzAGA&t`q;FnY#ce1E^;CGW~rGTW+aJ#&e7|6Pqd8o;}zh? z9%^H{E==*P4%&Soxc=e-CUn%3j3-}Kk2^X*_DH9#I~M@6$l1yRJhc~?lz(orKk3Yr z=GP~qE*)3ZWOOVGC@(vTn_AK5-VuBMYR6DkUt+6v!a4j~CGAZv2Q+_xXg!-=lNSA# z7(e=l)?*~bM=y!zXp!*Fi2x{X7D(9hNgb~=L|rJKQ->+23i!gYJzZIh0AKC}<|HA0 zJlBz+fzA~1XB&iXP2ILD*Y)x4VAFml`@Mb#$K>S)uv&U}Nae+H!~!3JE-{|ej0Cxf zvtN`fJnxaASL1M|xK<=I7{pAP+s1WAV)qNl`PQ$>YPS10eB^RpoVX+YmKe)&Yckv9 zK#^5kOeXv0g`tklAWJ?)i=iQtn%SM2yQ>n(2`H4TzC8~~txk7y{3HdqE0<;**NiZ% zduf2~l9<`{#ctw?Lgl1xSv$l3EJi8x_y1Gt%^H1vfq5Z(`(K!p@4717f25P_{(81` zG$2*>k@f_Wctt5m*m-C(l*=RU!LaQ#X9-K?R7ptR$?jbYbbV`*@%aaGhM@~-HS!IQeu*Xsb{jgt>$F_+fckrYGAjh#=$w}k zNu0g%4*V}ATf#K$Mt_7<46!!j9)^5 zwF!2Gsv#3&6|sJ73Vw{q0c@_wFFYRa6Ol?$Aw~KlqcTN|{VR}(vfa(52KLq*ZiImE`J8lb2COb8_qw)E;k_B5TALJhBi zm4qew8-6XLvV}k$2whwH4E2ZxpF8%KH_GgC@o50D#jP^1rE5Gf!gV1--cO-j@4f%A6Ig-PTWC1eIO*^O>un}2IhtaZ z^|ohR>H{=jLTio6xc z&$!>GlMVzryQk!vhJvNdcR9#QX12kvh7Ym7~Z_+&XYuG7>_ zwwj&Ex92S?{U_mlDvl)sbF0=F@KaXq%Pg9N@xm5WI5A)g18B?FCYrL#*!z5Y?0Edb z77sp?N;TKwOAl6Slz%qC;%Bi6rnTxsVjG8Gd7*-+>FZN63cd-zn)|M1Vnw8kLXJhF zCCdnk6y}%iQg2|hl*V1OT6!O$_yaz|j_ZT``tH*ec~u6$7KJ^c4@7s-Z>2?%^m5dB`~61yvcdX~zkn-p1m1vTQy@l1y`%ARtS#DZ z5s%sO$e9Br=^JFE@7H>Q@)NWZuRmGHvzAyD`ZhM&xHD;yxb2VYm~g#8cxzN^1!@S( zp`5#Vkx1_;5?@q0B)jlNf&UjRRF8fRM*UR*{6j0ucwn`9de8P_@mLl*qX$%g8V{=G z@JB}vxMbzD9*#lifan985?#BX*KB6IRmqa-sf5OzQGT{EYz%^eTK9#DJl|TC$b{+p zc4r@+Cc+ykYA1vorakO6{qoQ?YoD(W|J}$1;0hJr8-5mFLDywl7+ed#tVMkilza+S zGvXMc^h&MM!Nj?hAgYvW)?DP5Y8(Zk{}uacFA59@b1J{}noMa{_9ugx(jy~-x^9dfj?*#x-+w30GCD-0i zex#DVu3mevgk8sP==Q@Ct!Sd?-Jv1%^V@CA$!|q@(Wo*XA zSye;VT>R=B()=s_XGvBiI>D3%sELhgyT3k(x_kwwl5I2mOF^K<0tiMFm;&w7yqGi(Mt0Jw;YiajlX?zk=oOyW%?O0v-7Ho`@o#WB`dWMd zOS{5;jj5`XZNNZ^@0n!TtUnyX&I(fg4r6$d;vJcPuO34|O?re*X5qKdNL^{KFR!e* zt8Lb|65L}jYnDw?v{$Yexm5?kmrH9VK4xqVYIW-CaE8sc zdpk8D*6LAA0wOyLDS5(YHL#(#%sw?51_3=*phQZXuQ|SP(qRRDBu}y%JHr0=@}zAF z4^Y(R21`Hki6%vd@QdyMCWTb@ylUhGc@7Tx5K_zmdGZ208?~)LVr1Z8-TD|98AF+r z!}G~%@~f3L{9tj*X#0DW%a8@tzCR|adkQmPGM@`-=~@&6Z_x72LvKs~0)lQ*aNN=N zrS`KxfCR+^YxDq_9-&FFaBK$}XX0^uw*=Y+24lk}Kmf_~Z-kFr9L3h6k}=Ucb~s%= z`(@NX+U(YiCnF=6%}9-iYxk$)t<|7pZ{bYJs1}KSik7K(>$4}PQM_~U*4w&Jm?<2l zO_`tvZjB-VI52k@(-}6xra%Bj*WI+Jc@QN-3dZh>D>*n|8^u(K*SGSxi$jM)PNd$L zB8ns`mJ)LBOtU|39<0^UkJoD z2bXbux20)GX>KzDkK;Rq-Q%5h;VQxeD%mi8zVaszj z?>Q986cbQVt$Vjl4nFrf5sqwd%5$d?(}rK6M4uRsU|^u@x0C+-jdTnoSHPr-jC3tr zfyfMU>NMV1<1KOnEYm7x%)cj~2f=_Wx13}cwoU5Bx{tKz2yuy9N;?;@dqCm#R;ssKD zSZv_fk$LUPdz%~51ai`{mGZ}7pBmFbCz#4extYoue^A#!9ZMz8{X%r! zcI4}cBWCQ9B40Vh&~g+=Q#Q|`yw)^o&PKCk!_`y4Az?(I%Zl2lut&GaSb z+a*kB=}|Ul0rUv;UioxiR{WLh*-koQFwpHK#=ca{f-~sDOW>xoFUK)p8-?+2(q-A& zmkp!nCGmU~uqhv0mbS|P9;lz%BSrh9(MI|SIr=Ttm`UHJellp*=D&9HcU3jAR8VVw z=vP*?B>f*sS>kyxpmlxTWvLUOzt-2_)lK3RgjR>@#-a0jzozEJxi{ zHsibuHOL4iCKeC_oh_1gCK_x(u$CI2`cXq)Nz-f7m9a}T3eDREHLzBUa9iwqrW z$cD2=8pk6}ZLH@!tw-`EK00*T<%O6YS{OuZRzK+Pzf%J1<{$K%j+DP}n@vqjupzBk zaaU$PTodF4U}JJ_Uv7-cujVRE@W{n@Q|*Hmw|BMyFbh2I!B)=lu+X{pm>q14h)H(e z3__m~ojM^!(}9g)rG7G^iD`UCVP547G)42i-05D}~sj0>LDAre5&+a%LwhW zs{K#cFGFt*I`pz%gkFWK9SSL3y#B^@>-G*~mmkFA!Ddp6vIMuKelA>PY;xG$&mtZy z*Gmn~cpMd=&67;2Egvx8%OoXyZ^M^4jk($X?X;jrCpCt)qzPa%iwx_zl05Y#hVT-Y zmWq*wbylU8zLY2x#N@||qds+c&#aXyusp$|h0!pU3rvT{szMzbiNnCwIG?ogL-3RJ!UbUHwaYQ9;7`J|4fs*KDG_svD> zkFX49kTngjKGBZmoa^|WqWhEtI;v}@eQ!-ZQCR(iAW_%O-`br!YfbNi^~7WQrf;RR zV%@Wk3#-PbNQQ71f#Bxxv(&9yl#v|W+PMQ0?ijY811bP}NaKUBuy!n9UU)vueY^ea z5f+|6=A6(EdAopH8i5{&oH^@LBIGABOtBg>9^<;%&fb&CTX)AycdS_!a| zf>h_x3jF@hJddZ;NoX$Y%U^Cgk?R3FQtMyK5 zI|@AnZAh z&&JcSz{yV6Ik3>@BPR1Yo6wAK8gvWo5&Ygm0T*Cu%5M*8FMdq`T+}U{PJAhKu!VfL zrQajgT_&TK7Hzuc^hfs>Zs_S2Z@kH;JGQRDYF`$!U9p1Wp4ISI!U(ic*XEUfnHaRU z>(g>uGx*jy6yJGU+va|&zS!Xg4(Cw)?ZUZ@(fw-LCMQZu10Egy)9&JcN1D~iaF2o> zEh{N;mq06^d1X*6G8jc3goW#;%crtNoP z^!)s(w^^eP0|}!U<6e?yl6X%vF0lsSAOEB_}5E zslvqlAl^L>=3#V0H;23KM%({^8O`(=K+JCiJ{g3_4vPLX*{Yr#Cv+%3G`yOa;5JYc zUb~&rZIz;3gWae+89nDv65Z-860Af};&^Z{Ifzht_M!Kbzq6|@zRGt}%W_Ni(WBa| z&;DMR82$QP)j78LVpF?UFxO;Ao`(?`5x^;9Yy<*i2{L>biEn~-Pkq#TKZq+f)+0mY zFgYv4+vV2TZFwcBTYPm+=&7Gv=9^&JaiE9Cx-2d=A&9KN?a$u6-Ek zRbee#u%Px+PfJQ+^6~X$m>3OrpTx9v)3{UT1nV+TmMq!WeEinGb2fgmL8z`b3a7cW zORW)O++br<5${@Mlr@*wbDPFs29jHWjQg3MQ*E^!c1v~&dw7T+xkGp9<=Vto@9wyY zl&Q4X%*b|)UqQ_@K_IR`CPS?Y_vv#=es+)!_0=n}b+W|QH(AAs znk$R9=heF%Y_%IS@9NwXBsY&Z-KV>r;)j*29I-g`kmkO=o<+T zD>p|#rs)Bh=4krk-gF=idTy><)XR}0wUda`H8`@1=qu;JutUS34f}VS>*fS5d2Ww& z6J~)+yf{#cH9FeHZ%T2}p)+A$3h}pQ2iy|2^(Lmi>?MEG3aJe!RkG&cS#fe=qlw^> zKdjlqeW<|ycJ4!sNR;F?5zs4~dAm*Q765df9vWM?th~WO4-jq7>zDpK_-+TxF(AGN z4HJAk?-0j9ueX}ddr7Y0c7TG8B*YVcad`{_R0H_3L(X@evL^{+q)m@#KKbP&(biKW zLh5o5#q;y(av_RTuG|H(*AdRpS;d((dJ{dX*$>W4mRUSHQ&s_W`e)G4NewHGY9f@T$#LzxpD=ZesKR;;D~yRWENedg?;Vc{#Ev>BMUj zT-ixR$w80^eRh_fCJtHP-KzqYkND}fOjr_(Y*2hXg4MXyk6qR2H0EwrE_0V)LNnrX z-M4`=u88soNj}zu_acVZhOhe@Ck(pN7+BKv>KFGbmu@RXh<1I(rYqhoxS*OQfNGfi zZg~ZI4_MBd{=6YfD+1g=fkE_P&{h07XtnX5`O41?Af-&s3h>@BPo5!P2dUj;){8hu zD8~NLsmsc!?hxjcG{`4GtSf?oV?`4sZ*$|;Cbp$j$$0LJ-7R26R=Y69!PExH);M1@ zP3qDG>^;Gaqtu<;KvksJGcyZ&o90hV!TI4kP>0gFi0~qz@o5tE8)h{9`X2iOZhE4O zG7yP1nVrfY$B(0*fT<02yCu=sB~r}QyRqJ3489XHPL=nf>BloYnqhkukMw-SL&0wZ zW1dvRroCS%bA}NuK0&7T;)(>R+{5_Ulfu$mv>g zaqc_tFi}%Gg<&vO`!KXyxHt50$=X*5#YlXmPb51!4z{09odY z6JJWXS0LH&HDrC&m^FF-^&nrclspZ-2Xy_$$VWCzJH2zK{!C%9Ae=wausL06FIoId zwPMyYf9h)*-`u|7YMolElH*A~KCe9d)~SrTTB{Tv1`W_(d+*`NllzP^;N1^p?x^#T z55Ua_M}tiTyPAaPi$&&$Ue7Oig4d0B{jq84Zp>UM0!c_s%u90i6atKaAxennp~;_@ zamhhv9`G&Z=uDxE)(_E*^Dj9_c~-MrsiS*+>90SJ`5i|)%+&pf(mhFskRMD&H>`7R zN$_4ro>%2t&qQwtSl;CQ4`(*}>&)feN3y3~{P4N@9WvlXDf)}J++~p<)%lP-OdwZc zXW|3trn-|mdP-~Fo@6o%=Q(;jwj~U8E3K25tSZ>Ci#S}8yWf7Qb}KdS3^vuW_*Csc$}jr8P)(8kB+ac9%jg!NT^*6h_3)3GrO zH)whv9`4OA2i|8CyNJQw^}wYy{P45-9ihCXDUc%rD!7Dx*^a%v0Sw4D+5fNptOxk> zyQz=zmUx_U&;{df4;`!V7+}sPTjJ}>tj2x7kI|KtGI!;@txeROm<_98Z{$328@Z)} zvZG5ILKQploaiJ*TX9WTv*;e(?ra&T&g#>$mJ;)XpvUJ2vBr#7$v@`xW`Nlo4V_ny)7&JRX9lNM$Jd}c zf91pDj1v<>82jgTnnzH5f^Cu;$Nb*h+~91){aq z$h|S3IUXBhKNGLH9k(1u1$39JkfEcDw67J5N!`EI*B0-L*aWB9f6c_LMZr?2EE|_s z?qZ|Al`~y~+$=4dQC?n z<`w@+h^_yNgjnzY>RuiVqqw=YPnF$n!w zcfzwpPp57}y+*&$0*(*pv!i3ZAOAlzL?gSc%u5B*rDU0x_bJPUZGtTj4quf^T2b|w z84lG+@gsc()GkNQrr8z|{+kLpGmSW(_6-i-insFZBs84__c?4grn=MkSExaZ@(eE2s41+%y4-aw=AoMD8`yW#Z_A;-0@}9oIfF12JN=pNcmUN8`2pdF-_eBADH$FvTsI4-vH$RzVUbI(;q@36-JWuL!lo zLtmzFb~fP?XL<`g{^{|hgUa*n!R{0W`jVUq3EyNa3E=VJe7n1hny1)W2Qd$=*l;s) zH?*`b`5B4mOzQq@A%9k1$!LjK1uE4|=ZIQwQ_)`Mu8&A0Y&06SQoSW;xnK@RvBBa> zQLkO7ma(pdyE^=;@W#!5C~kBZeCGS#VbI9-KI4VrE)Q_w`aW)tR@~o(S{zdH59LlE zKVOG^m=sEXkQr@BJ9a+%-Y+x`A}g?To3uPhy0EV15vr=tBi}~rnWne$Egmjyt-R5q z1BWB)S&1%(spK`SAWk1wBF+X9+sf$oBg#GoX{t4y{f*~;?5DN6Filk6)Eb(fe$}w! zKxEL%wDAMNVJ&MN7_$n7JRc68H^-WMkrx7>F=P1C_XeT@QodO40kO@+5|z0~S!O)J zLcg8a57cAVnT9U(_-xO?wTmbt&8*&tDo}d)kZdVg3A^mZFU~`lW@K(mEzjT5ikJIV>r$x4e*Ziew{|Ky+Us(V*en0S3! zNjOkeCF^YMHYU6(%36^`)iZWQ341u0ai5s(J)D}Ge$ehbkTM;S8yW|u020o2h?#nq z4KO=ci1rQ2Bd1ln@Tb|H6$(4R=?~Zho?aDEz4hq!H6GCfb2{6c<%ZZ6&8#`ag{c^U zStoj(E+s{!DBWK3*jKF1vzxafp* zyJc_WF9K)DuVJG#q6wRlWArFG8{LV^wcJo2umtmHM40-s%rM~clX;)_nvz6}w_o5< z5ixECJ1yVcXHBqNi{74(sCM^DaENNvlQ4DRp;*abR~~Z#Z!+(e%Ua2YR}%?R$w`@`ZAbmBDI~L;Qp0p z#hD!;#Tg7ikKQf_*k{p_+`LGLKEf;&p}+*}ZwziDHc9#iplKd4z)xoaKdJ|$W_*fJ zKt{d#FB$dae9fLBi&Xx-4TX7zdCjA`>D9Ro%lYV#g1R7)x|II*wG_X3RUpeN?AY3K zR`y1HNcn<%Cp^%UHGE#kj)}e;#B(K=XvvG>g8hk|PsP!a&IY(kOk?y31;$=d_lE_U z(Z+Crry9X09TZ^l2Je*Ut zYge7BeYBl+_<|Gz8MW=z-ympXpWDScY{m9%;Z3d5nydCgGJ7y8p;x=dr1$`Rx234OT13hnjS@rR>);4c&Mryr1-e3P;iul{oy>)A?!LvQRku}2r0Wg6LcEa1Rmv`UlX8;1wtB`@Y{e+5ap7|> zUIWS^hX&1h9v@awC+?6f#0*^*0^R?;SpT1+<2J|An9v7K%Ot_}sI* z=S`K~Pz6B8&RI}04*c7_m)AA9yjjvVf5zPEj^2rA#nE3WD&^hU?oHTH?yeG>w3M}6 z4E{;!yD2U4``6aF^pMQ8&Fe?*Sx|uDU?E8H$9C?qi7f_QWC9b3!L^}=*6S0qrIbpB^mK+tOH3ww(s;WWzXDvqFL=y>JVxDJ}CNe@l@7GlbG2aO=(`Z z5n`~nzBcZ2p1*&|^5+W?=fC9O=k4Z-CRticMBeNwcz897YYDq}oC0SZXJM74M%u%% zA@%fNn{j6*Fob-fI$f2lo)&B)cH1d*! zOPCi1u3$#D2H>Xt^$w9g3O=6#XQ*iS!B&%9)w%dr&RzGC?w`8zQ&h0( zD%LBTJ0^OMSQ5Zr|KR<6WPjXQpa&!G@Qow(K6<72R8K*eLm4oG67s9pVJ`98sjkEe z4)?Tf(A{)UGQ$DYfH90t+Q={H^MC*lpC)3k3&Uf?lDU7N}0?tJ?#rKE0=GSYDrkdwZ?aY6`_R2I`+?+MW$Ja|*Vj z4d>RUn|p@V0w$%-dg@^5gSa2k%_=%Y@>hKPS&RU9m>n)*^@aP%Sw(+A1VDTmR-15} zODnz-?%u#9D4FGMk{~x-nA#^sWXp3 zv4zhXKz_TitD_@S1mI559BVQ0Ee`vT#9k+O}-W^S(V1n`r6@j^<%=WN}f(9+^9Hp_0mAtrA9k`!4Fh;_*nQzqN{W5GN z@a1K&d_OY)4!7tHl{7ZUexX}@;Y1ACzW$=>x&pm z{zLtdV4{+-pSBe<`X-#y`c0oom`61~l^#V%3(0!ez_KggySxV`m-sS;x(_&ET`sG< zNN8y9z~1rm6LaBQ=)Wlixdcn7D_b@+{UVL3+WQIh{UBm zn`7uwhV`Eyt~o2U-0f5?sNXUX=zZx~qhQZW59knjJvohplA!Tz6<+B$S$rBa_W4po z%pK9|r~a|NEXev|w@3#%)G_nIQKf>ra`P~fY{FDG^%o7YW3Zj zsxuy$Myv4TFDk$E_Vas2m%`1CoiD)A9~hh1{*Uu*A3L8$tx#Ja2B@mLS>rnSuIarJ z>`GL?0l9L){wn6c%{`G^?|Rj8w{YGq@l=bIjF6_Bt4^VE9_=I3Ar7DT(`>G8Hx>k|o)(tXu2nBLnX#OfSf4<% zb4h+ZFB7De^)$)qBc1ByM^x#n)$v_wt2tcv6DXc?zU^fQu9)bikxXDb$}||*Fpd)d z?)(kOv`pyu9C%S5SiM16*<7GOAbER2$IUADG$<=8&0a^86uTK}DlB9(tl2rX_HWZi zjngvj5U!HyiImWx?@AL`$GB%Um3Rn$-+P+4Di=7M8~L!I6~+91quwg|ZO+$kY&R_S z=TQBt{g#){0s;#$UQdLKF{Tluzy|cq^n%LTdVP6~cS*rt7GH6>l(-r4eupsycnWoX zm_v3axFdI}t6rkUsczbmj8j!P>&m@m_AgB-9aOejOOYIsZyS>l4WXRXlkN_4MRk~l zQT({IQi71-S9OsUW;v|q{S4pC1OA~K?gs_>{y#VCzMRYVp_^X^hN`K)=FRttKOoFD zqMP$el?4|#T3;DnHA8tz$c#YtJU*4oov!6;7yF>T$KvI_0rd2oL@BS-d z3m>%>uWeLeTdCPoytMt!CMV9Jc2d0qoU{qG<3?W|n=U_Elp$Yi( zXn!FsM$=rBW!c}WK9gcQEvA^&5b}g}TGHc#Bf$6F01R|o1+wM(vhss38DmP67 zzNNvthN|Jt<{dJtB5Lsf_>(v=U4Rb*xBCYBepMm@FHbEwH_5I#zQrME|s&hhX0Y-Y7mml1;Fu zKmiLt(53w{YmxVmyDyp$Zqb>gA;2mM4nsmVMfvH1LwY9$NDpsUS0GU1lr%eMR)P4N zql)xt1MUQ>XR7-+zmeOh2r3gg3TA$z2A!#HHlWtl?%k0i{a>nkeA_sUK42= zJH|y8prkqE0kdl%(p1p-=7T}8y4Zj$l?t@>@|j*TF;mD0OJ7>9kW4{efBQhO?h+EIJlg)cF0po?6{;&O*#YcXpe~IQweePHZbZTp0}p zeYz9{r#Myr^*RO8e=`9`3urUge77IkCxM$$g~L7om+{YLl!KdbBLduvdX57eUn&F2CvW(lryNtpK` zUYx6BBPFFraq2>{Rf}cAjNGPVl0%G^(dtEF@OS8M)#HKk{+0r9liwprKkSu!zAj`ge{PiC};Z@Q=cY+n(jP~zn$q8GFlSm5Y(84P)Sj5yRh-z^i55dKswUhz%Dl&7C*-0g z4zA*t#=@rzA6LfVSO1Dlw}($SeXhl~6Gspw@q&ivI8?P!-?#=X?axKTf{Wlz7^sut z;LnrfyGniatL9Q_jt0A>>T|iI+It-PdFZtpwCl_#t4iE_u_tJ0*A++fw(A@VvmhcC z3`?SW+`E();!E@I1ce1+XF@YwPT9~b%FCvf=l3iB&CZw$6d&Jy`)qquMxN-7&I_M8B-K*fDiX;*21SBw zof&OZEVZ{owh_`A82w<{R>ix%P&*B#CEP;t44UR(QZk1@?ve8{{sD@g{{%%DWf!DPvk7u|yo$cU61sI4C1>qSPO=E4Bsa|Q3V@s->Sd?>-DYBtfK4!TUPyCw zqzeB}LL&QjLh>0RWxXINv->wGgGZ1cnF(b4@-~~5HS#;&C8@HivZ#XTh-3%sOwO-# zS!I>KNSP|7Nn`D6i>|=+Mn)U&5-HICED{_=sJDCp0@hcXra|=d00w{Z{trlA%@q;Q zI0Zh6kW4X3@a*@a2$t+2@DCt1{eFNTck{rl>XF#@dv9&FXEP94bKMI3DQzL~(US`+ z%vy4H^R8&ER!%n$=Pol`Hu(5M9+lj*BJRujRVvhL#4W;c^AjQXxXNm{`BwEKkw`0$ zjVM%ud}+VTQ{;m=7%CShqrTNdH30IU<<^6Ol;!__p*g zxLB-Q;p)MQh^-wl9(Oub99LYo|Q?Kcs z;K&JBp|F?-KEF|2s7E#d1;D-7YL6+|F+h*dR(XBUwB8 zVl=V|F;`eM?xOETxgMt0!9pl^7o&xwE0@-$LMSYvRpnL;T9J=K(GAu1mz`j-#DsR!?-v=IvKrat2{=>sheo$S2%zSI(*;nVX|2SdVu@h2_{_TX~*A(u8`5GEzNzXi8 zaH8M2DOQQcDXW|{J1G@Q6*==QwH(AQ_laAMG@bVvjxpU;kwWAhlw~s%QNpbAJTT~2%)sVyboZietHA>{>qS<;n(Mga(`z9J-c)*kYl1j zVxaFSJ|-%2_bC+p1|P}Yv*{3APz(Rr{yv+}{J;yTR&G-jiC(h)TomJeg`|;ovACGR z1!p^DP>oao{qL6Rz>j{621Enq<4VN44Pd-BAQAo@{<6w9e-)nt9{>s4%&hW(DA5oO zdks(y1ikV%CHe?aqIbtEK&z*otYqV|ePT&krx^XI+Ziump;jupV-T4j=rOJ< zT$ytYliB)t{#&iC@cZo;(ZY?xJv$n(9Fzr1p_6r(YP91SP$P zSQL~Y`Nnp}DPY>af;s9AqF5kJC1fX1h8#@MexF5ue&bDfh>8>$Y#=#661F+`nRI14 zcYs}W|I8Z0629vPG)lgH;g z?+@9SF1o$LaynrS9DmcY{-UzRNSz|Z5TIwhkKfW?bAuZ7f$u+QYRBJcYX0x{4Fnp; zB5(e?K$BqeR(F+joVEouF!|mpcE)v9Y})XtQSzQ%wfYzXd_KX{a;HiTE;nMtXeF}1 zKh%?u+DCIqz+#^R)xZ1w$(>`XR1o^mb3a^~_CHLW<}aqM4W{Qsa}AtzwJuN&dAt!e zX5dCVhBjhHg>z}B>;VWwp1{31Nge^}()zX;iv4)EEDr3J09Mkk1^{v8oKB5Xcu&=W#1Lr~F!GK~vfY%A3Xt)}yBMg{x_tR8VWby}}O z>0H@X@~-uH2=I_Vm7_*qgse(7d>q>M&Ky9B;dFJj7VuypNJYwHn>@@?K{!ePlD6g|5aA#bXS)xg~5IuH@5UgA9S%JpMjp!3+hiuMzcY{FvciCc2jO_nr zjJIS6BS`cn6j&53on+-Mxd_9%?;`y;zdWCiirPs}j!#>(B-aU-Az3{t z{tlZO%?6mGIs&fK>i84N8L!*BKIA-z4g62R)Y0UxH0cjhs1hdtYe~nCpf~}Kpty@O z4L__J2}TQ?!w_dhX?gVrPu*w9S;vj-n0L#4zVKtzsye=Jvz`A993N~Nc8^XAd&-8_ zw=c;5{80xhX2+P96O<37^pX&IJ8Rac0@Vv%Sg69Y?ljtqRurTZzHuv=8?ae))aiKtC-KX8`f={73NQ%If~=V)Dprm6W3iQT-n(AHh>Jm z^V%KP=87JX7+$Q#n35?(L5-HC>a*qQarfd!<||x|j^^=A5ws6_eW%=Z8m^rPR2j9k zl6D^TW^z9w$U~+wzRNbwAns54+`q(-SPd(g{UR*vmKv9JqH>blP4*Mrf*EVY2#M+a zqp0P>0ZTS-U4lwKqE;&`0jWX!N?B!RS|(M*$aaHKIcKdAYsJ|leeUKH6%!povNC&w zxLKjlRHqNit)BYCD|1FrfTQ%1Dj#~o`DRCq0L(7FLWIBbt83;ERk=W%{_j}`J!`x8C@9?do>cCgQVIAlMwSgkwMNdO* zcnMVQag&*Q#8Cj&fx{5^qRxXe>Ed*=b(ON&io5xru+GQ3Om*w$hkU7wqD}->;t0)9F0)*)xLrUts$ljFjJ4&gbQllPl1KM z-7I4rB!&gmrvfpFSU|tfXZw4s2o`;MpgqhHhOe#R7$G&iFGOa;lQ67uY5{212Y;^J zS$ebeDDOtQ<)_}|U$Ka8_5jz78+G`qM}pklr)SijF@$fge75Gtlnq^-ka6@JPAl!{ zYz)9^wf?X~PSP+P#=@qe8)J^}AsSRpfp2^CGL znLuWYcDwJ)0vg}&2qI)k9r~!?TuTkSODi}rx#R&U!mQRrqZ+!D8E zsD0XX$5huGNw%BmjOs`>GDIsK|-=>->$N<<5~?yc!J*qlg234?HkH&xwr&jZ#H zI2wb&2kJtQb(a=&ut;9F++Jvcqg9K^NBt{p%Zp9Ap$6wF=p%C3k2ii~-|6e#r(VSw z{x(bJ<)0X1d|B3hUp*C>-F=CZ0UyiiTUIy7<_F(U#8HRF;fJkmt#iq(jt9TK+t{Qm zxLwfb(&n`-(5ohfFQ?^oNu-x$oPw4>YF z-FHGRTXwzZiymTs;(T+z$cacOJ(dx?1KcnL48hq%60(C7=w5Ovb>pemG5xQPwAKuS zt_7|9$+PZ&oRbwQio!%NWV^&12WNJP$r5@pt^1$8>2rsDSXMoP-*M}kT(gMd|52zD z+h{rO9_B{tZNoQW#O2t93ZAEs5(W%W&LnDmgPjyi!kb`e9(NZ6JJ+s2A?~yQP?sJ- z6K*~YKE4{Mp#OXsq*_zI1W=tK&@xX$mx9$72Z`kU6e7KE)+Xbtqw}XtbQZq8k>(w8 z=KOwBtq2w<^DPM<=eSC*uv1<(koV5UDRk~e-lb$XSGC{1v|i|q*0)|g9U7Lxee1+P z!K=VWr&=^I?OClm5~_k_K$jys86w@smC+2}`>$A_r@mGYVd#%g`6&>3n$U~0s(O>w z;?wZM>X90ikB_HKxI7So(M009Sl59!Q7qa3MCLRZQBJP$4!Lk74y}_~@h4o<2=YI7 zG|!4rtP(}v08e7Yw3tKrVAwqeViE>WEymnHq}$}7V8^>f<}9M@H$Xg_zh5lrTviJr zCbA8BK5@KF)Qn3aj+l>gml=AxMD@H1_C`iR7z8Z^RvN|26!znMmZ(wD+m;PlD$N!a0#mUo zKey4sd8x@~iXQ^8TxdE@7deZ0P;mF(m}LE&5c>T+Kie(Kf=Jj>tM&gyM%Qk+PNaEB zv9x&A?B-p;uR085I|oWSte(_P429(LZr}1Idf)c;;wIfKNL>8(i-wqHW`4<#f)F?d z%g{m2W+A8f{{ZI)MN_V%;NaLn1^?Y+a0ZWHtrA+-8-Q|2C1Bi|U|U8>q}veEhhfSf%8~$OvF{bKIG2?} z<=AgP_sF~bu5Y4dxA|y@`L5CnXUvpurhi;EYB}_*(j#lmweLpBT9H|v-BTVw^x@cD z(L1?`i86}W@6&FyzB2s+Tk&|?Qze>s?2yvM9382gYeN zWq_U(j{zdDfu#rO9%% zagkMbNk3iB;@ez;VQZc#CQl9iKCQw_HVb^TYaz~3`*zXE7bf(TZbN*(`eqNSipRLC zAra&Q%*POUb93N zQ;|^`*2z0y2ysT{A)d?YROb)VPxt6{`j&eBz~vN^yA|TSvx_iN=PjRXvx?@;BpmI& zhss3tsP^2)4yHfVp~Qv1xYir=9x=$sK`KZ61Abv4 zui5vi8CRROa~FTNOV`$Uo&ob+)`j9$Blen>xy5hRs{F_X{0$FJ-)l*Gmr&7WOhe}_ zdK8LyS_4e$U{h0qoi(-^P*tef!1Z~iil-q9WO4uOf-DKN3;Xw{zC=v}9a0|BSc=xX zI;d6${@lKQFKO>n>%|$~HdE*II!B@R7Z2M*@=CcIzCD{a-9JnR&Y)%6^dq9YsG@bd zq%Wj52G`)u1#*_igue9<`{j5)VET7^0@ayI(|b{2ow_Z|5t#M^7ln%Jv-5xgm-P?@ z_2FCiNQG&jj3yw)Z=}>BIIAGC7v{nq|En4ftim`S|Zk|WT9(vY=`#Wld zNSki&60K$wWUW}=%;M}^Q=41rLY$*-4wJLVt_D0}QnS0MW>XJJcK{J{i>Je$Ro@`^ zPX{ufllv*@2^M!CWuSLmKB|nsiv^ps{et&8o6mp(TA+u7jH9JC9~s?ffA*nGtdQkrE$u0RB?t3d)H=O9zm{I()m}hKw*Pj( zrK95K8Ds5!dQh`~r$;tCwXC*fp6Mi5hOL0|uZoI>qM?LA(+u z!VH#b$e|_*6#XEPh@V)vH+^mLREhN#Qn%kR%{0pb_fludqgcfqQSf~d@jO9NY59U` ziJsP(dc+DH$WvsNg2z3V-$O<6Zd8Y8)U0Y3xd?RJ-a_Z5(H+F5>zS-2%pIK2H#`^DZT zGNVa6#*v!o_9Ds{VpC~VUj;ogS{#l3>!NjpV3SAT14^GcB|WkBJm>E~BuNRf7@RYzjKcE9{izGWllW{0bV zlF^VSrLD|&T|3OXESz@lGhUI|qMoXodjuY@LUjzTvLNFV{53RRkCk{@4VlXC*h18voVUCccmap zn6huh8Fy4t&W{hsWnNBZhb`6@7dt%DVC&O;f_*)xY@?!^C#bzC9b?fRpYh1<5jnR- zMJ$)MgYfEFV}d+p@vXz8)zDm4TAu@9|JUOMuGXaewLpB=tc~iL$oXX-hW+seDK|)G z)PJmH(4PU1J@2LH>|YB^Oj!JLf%@PAuewsKv(byRc3-o%kTb(=WPVqpxh3e`?a3No zc>NS&Fp}L&dpP>4#mmZ#F+RHJmp>X`^wY&Hc03DiuAFpcMHe>&PvS66kvT%f$Wp`* z&I6ktL(Y4oL1rKKfGGUshX%ehyhx)?|6~N5kG(D2b3Jkz{HAxSeX5M&7ZGe5Uo~}i znPs3oba5-lk*?qUvF zbJ34^A69pIX!B1mNYM(IS{UqT8?c$XcWKFUZMoB~?iM#4ei{thPh~y`ieWh#_-Zbr zH2d0o2cbFe(j8u9P&J4Cib65_zmK@=_Yn{ObHs@WHp>4!;=AAx zhi_UIoq3aK5}KRnr*0MZRIu%{NAJiTN;h+nk`J!M^1)(U>>CJVlEECBf8F3D)46NA zP8n!}xM;=wmi^1KEP8yp8yucii|;#o(r^*4Kv(`T7EfPwLBL#`4|tK>DjWmI%Ui$R zxeA@?u`|!5>^${{oVizO{EGt%;Jgc4feySP_)o7y*AwB{Mzpv-&(deGX*k6$`8q2w zOd!CFaeF~>y3VD`Nq-^IBUy1TnN}XAQCiI8Be8YEywTk7P z)oa2lF^Hi#yd5?5n%~`!(lz&jILlO>OXJ@p^DS4R8y$s z&A*oCkpw&GF)faI)+m4}I4~^mY(u55vrfZ>-Q$W@-r7%DJ~VqaGe09aUST!1I1nsn z9={qlUM@a=lRHnaq?D>CGb1I%jFZ$&I7g1*>aE!ayU1-!bVpB=R?g-0lkfTZ#xS9s znA4X)qY}Yg)s6oEgLAfPKdV9

O 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%0ARQ!?#-SZdD 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 literal 0 HcmV?d00001 diff --git a/research/log-potential-template-ranks/vendor/check_ledger.py b/research/log-potential-template-ranks/vendor/check_ledger.py new file mode 100644 index 0000000000..d3b6149c5c --- /dev/null +++ b/research/log-potential-template-ranks/vendor/check_ledger.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python3 +"""Exact ledger for fine-prime padding (PR1786, chafreaky / Chafik Boukhalfa, with Tim Trudgian's prime theorem) at the free point epsilon = 1 - (1025/1024)*10^-(DIG+80), explicit Strassen boundary, retuned to the fixed-grid maximum kappa = C - 1/FLOOR - BACKOFF. + +Adapted from PR1786's ledger, itself adapted from PR1731's cost ledger, credited to Jeremy Kothe et al. and +Vlado Vojdanovski (PR1673); uses PR1758's gauge-free chirp and per-visit tag +accounting. New source-prime, coefficient-setup and halo lemmas are in +FINE-PRIME-PADDING.md. Finite arithmetic does not prove the all-size theorem. +""" +from fractions import Fraction as Q +from decimal import Decimal, localcontext +from pathlib import Path +from math import factorial +import hashlib, json, sys +sys.set_int_max_str_digits(0) + +if not __debug__: raise RuntimeError('Assertions must be enabled') +HERE=Path(__file__).resolve().parent +WORK=HERE.parent +SPEC=WORK/'new/SPEC.json' +CLAIM=WORK/'CLAIM.json' +BJ=json.loads((HERE/'B.json').read_text()) +spec=json.loads(SPEC.read_text()) +# Free strict slacks of the PR1673 proof (retuned in this package, see RETUNED-SLACKS.md); every one only needs to be > 0. +DIG=spec['outer_refinement']['endpoint_digits'] # the supplier endpoint is certified to 10^-DIG (accept at the endpoint, reject at endpoint + 10^-DIG); every slack sits 10 digits below +# Fixed-grid maximum (PR2180 / PR2161, dataisfire; proof PROOF-GRID-MAX.md): the free gaps shrink together to R0 = 10^-(DIG+80); grid, backoff and certified endpoint are unchanged. +R0=Q(1,10**(DIG+80)); ZETA=R0/100; SLACK=R0; GAP=R0; STOP=R0/10**6 +FLOOR=10**(DIG+46); BACKOFF=Q(1,10**(DIG+22)); B_GAP=R0 +# Fine prime padding: theta is between 1/(4p^2) and 1/(2p^2-1). +# Online chirp guard beta+2*xi-2<1; coefficient setup uses O(p^2 log p) bits. +# epsilon = 1 - DELTA_E is a FREE parameter (outer/FINE-PADDING-COMPOSITION.md sec. 2): every row is strictly satisfied for every DELTA_E > r0 = 10^-(DIG+80); beta = 1 - 3 DELTA_E lies in the admissible window +# [1 - DELTA_E (1 + 1/q), 1 - 2 DELTA_E). DELTA_E = (1025/1024) r0 keeps the gamma spare power 1-eps-r0 = r0/1024 > 0 and puts C - eps*q below 1/FLOOR (PROOF-GRID-MAX.md). +DELTA_E=Q(1025,1024)*R0 +EPS=1-DELTA_E +BETA=1-3*DELTA_E +THETA_POWER=Q(2) +HALO_POWER=48 +CORE_POWER=128 +STRASSEN_TAU=Q(45,16) +KAPPA_1828=Q('0.0016797549561255445213356709939207025769983114385025802954603275201627999999999999999999999999979966404900867489109573286580121585') # exact kappa of rohanarun's PR1828 (slack refinement of PR1800 at 1e-96), from its body +KAPPA_1839=Q('0.0016797549561255445213356709939207025769983114385025802954603275201628645482603256388263049999999997996640490086748910957328658012158594') # exact kappa of PR1839 (previous package: 1e-90 endpoint) +KAPPA_1875=Q('0.0016797549561255445213356709939207025769983114385025802954603275201628645482603256388263056561328446322744513169085862209720704481201654121427713006366929567157349625273906229277148454180995537563371124755588139767841405530386745578819565618798006892541712197674874836946756930569827889227573192555649999999997996640490086748910957328658012158594') # exact kappa of rohanarun's PR1875 (1e-300 endpoint), from its body +KAPPA_1876=Q('0.001679754956125544521335670993920702576998311438502580295460327520162864548260325638826305656132844632274451316908586220972070448120165412142771300636692956715734962527390622927714845418099553756337112475558813976784140553038674557881956561879800689254171219767487483694675693056982788922757319255565606685566411725238449650999339827075715283714270157705762309226038611771955655377501414652136546310799999999999999999997996640490086748910957328658012158594846') # exact kappa of rohanarun's PR1876 (1e-400 endpoint), from its body +KAPPA_1897=Q('0.001679754956125544521335670993920702576998311438502580295460327520162864548260325638826305656132844632274451316908586220972070448120165412142771300636692956715734962527390622927714845418099553756337112475558813976784140553038674557881956561879800689254171219767487483694675693056982788922757319255565606685566411725238449650999339827075715283714270157705762309226038611771955655377501414652136546310881185746917580802513640545967852810801680966856133978576162943792322682482152988532923811998938861379689883167389728443314312230815059559906903773756886872476136837071871203030423643505345473735135533') # exact kappa of M6LI's PR1897 (1e-500 grid), from its body +KAPPA_1786=Q('0.0016797547881500489087805478664999999999999999999999999999999998000000199999') # exact kappa of chafreaky's PR1786 ledger (EXPECTED-BALANCE.json), headline 0.001679754788150048 +KAPPA_PKG5=Q('0.001677992607205282520732088774830808372222877897034109604209719298829805473412451530867883424937597') # previous package (rectangular k=2, tau_eff=2.2500351) +KAPPA_PKG4=Q('0.0016778199023144364336310551358776001013829401215770658599799349282716974076737897457922714197448847') # previous package (radix union schedule, square boundary tau=2.372864) +KAPPA_1712=Q('0.0016776417313433545642517275958639984231708545722735432722117400060454625429077941422798526440584702') # pkg of PR1712 (Le Gall tau=12/5, old union row) +KAPPA_1699=Q('0.001677641731343354564251058287063644749065568493') # exact kappa of PR1699's ledger (Chafik Boukhalfa), same supplier profile +certified_complex=Q(spec['expected']['complex_lower']) +bit=Q('0.001733427039589844234749') +# Keep short independently checkable decimals strictly inside both endpoints. +b=certified_complex-B_GAP # strictly inside the certified supplier endpoint; B.json carries the same exact value +assert b==Q(BJ['b']) +q=b-GAP +a=(q+b)/2 +online=Q(spec['expected']['kappa']) +old=Q('0.001673360105405778') +assert b0 +assert m==73 and W==896*T and W==BJ['live'] +EXPECTED_PROFILE={int(k):v for k,v in BJ['profile'].items()} +assert profile==EXPECTED_PROFILE + +GB=int((DIG+130)*3.3220)+16 # enclosure grid 2^-GB, about 50 digits below the slacks +ONE=1<=2:x/=2;k+=1 + lo,hi=unit_log(x) + return down(lo+k*ln2[0]),up(hi+k*ln2[1]) +def exp(x): + assert 0<=x>GB)//j;th=_cd(-((-th*xu)>>GB),j);sl+=tl;sh+=th + tn=_cd(-((-th*xu)>>GB),EN) # x^EN/EN! (rounded up); the tail is at most twice this + return Q(int(sl),ONE),Q(int(sh+2*tn+2),ONE) +def moment(endpoint): + lo=hi=Q(0) + for r,n in profile.items(): + l,h=log(Q(m,r)); weight=Q(n*r,m*W) + lo+=weight*exp(endpoint*l)[0] + hi+=weight*exp(endpoint*h)[1] + return down(lo),up(hi) + +native=moment(b) +assert native[1]<1 +b_up=Q(BJ['b_above_endpoint']) +assert b_up>certified_complex and moment(b_up)[0]>1 # a larger test endpoint is rejected + +def ledger(kind, *, q_=q, zeta=ZETA, slack=SLACK, + old_scan=False, full_gauge=False, full_key=False, old_union=False, old_theta=False, old_linear=False, old_tag=False, + eps_=EPS, beta_=BETA, tau_eff=STRASSEN_TAU, halo_power=HALO_POWER, core_power=CORE_POWER): + r=R0; stop=STOP + # Existing explicit Strassen format, 7^16<2^45; c=3/32. + # Union: radix-distributed schedule (outer/UNION-SCHEDULE.md, new in this package): row exponent eps+1/2-xi. The boundary row binds with main; the Gaussian row has slack at this explicit point. + c=(3-tau_eff)/2 + eps=eps_; beta=beta_ + xi=eps*(1+q_)-c+slack + saving=eps*q_ + # Deliberate strict gap (BACKOFF) after decimal truncation to the FLOOR grid. + kappa=Q((saving*FLOOR).__floor__(),FLOOR)-BACKOFF + # kappa is derived, not silently asserted to equal an expected decimal. + tau=1-a; sigma=1-b + internal=tau+(1-stop)*max(sigma-tau,Q(0)) + leaf=sigma+stop*(1-sigma) + lam=1-(q_+a)/2 + key=beta+1-eps + margins={ + 'main_transform':saving, + 'global_coordinate_router':a, + 'fused_gaussian':1-eps+q_*beta, + 'group_bit_router':1-eps+a*beta, + 'group_scans':1-eps+beta, + 'boundary_algebraic_matrix':c+xi-eps, + 'sparse_union_movement':xi+Q(1,2)-eps, + 'polynomial_products':eps, + 'microbox_face_corrections':1-(eps+beta+halo_power-core_power+2), + } + if old_union:margins['old_g_factor_union_row']=1-eps-beta-Q(1,2)+xi + if old_scan:margins['old_per_axis_scan']=1-eps + if full_key:margins['unnecessary_full_key_sort']=margins['sparse_union_movement']-key + checks={ + 'actual_bit_above_effective':bit-a, + 'complex_above_effective':b-a, + 'q_positive':q_, 'complex_endpoint':b-q_, + 'q_below_effective':a-q_, 'stop_positive':stop, + 'stop_below_one':1-stop, + 'leaf_saving_above_effective':(1-stop)*b-a, + 'q_below_internal':1-internal-q_, 'q_below_leaf':1-leaf-q_, + 'lambda_above_tau':lam-tau, 'lambda_above_sigma':lam-sigma, + 'lambda_above_internal':lam-internal, + 'lambda_prime_above_lambda':1-q_-lam, + 'lambda_prime_above_leaf':1-q_-leaf, + 'epsilon_positive':eps,'epsilon_below_one':1-eps, + 'cap_above_band':xi-Q(1,2),'cap_below_cell':eps-xi, + 'group_positive':beta,'group_below_dimension':eps-beta, + 'support_router_span':1-beta, + 'group_gauge_power_slack':1-(2*xi-THETA_POWER)-r-beta, + 'actual_logarithmic_group_guard':1-(2*xi-THETA_POWER)-beta, + 'global_gamma_power_slack':1-eps-r, + 'actual_logarithmic_gamma_guard':1-eps, + 'alpha_logarithm_absorption':r, + 'group_key_fits_record':1-key, + 'membership_arithmetic_fits_record':1-beta-2*(1-eps), + 'microbox_halo_volume':core_power-halo_power-beta, + 'positive_layout_slack':slack, + 'short_record_fallback':eps-a, + 'improvement_over_online_final':kappa-online, + 'improvement_over_previous_local_final':kappa-old, + 'complex_below_one_over_32':Q(1,32)-b, + } + checks['strassen_integer_power_gap']=Q(2**tau_eff.numerator-7**tau_eff.denominator) + checks['theta_positive_polynomial_power']=THETA_POWER + checks['cap_below_phase_cell_power']=THETA_POWER-xi + checks['halo_covers_generic_inverse_radius']=Q(halo_power-43) + checks['union_tag_work_per_visit_fits_record']=1-beta + checks['union_header_fits_record']=1-beta + checks['source_axis_superpolynomial']=1-eps + checks['improvement_over_pr1786']=kappa-KAPPA_1786 + checks['improvement_over_pr1828']=kappa-KAPPA_1828 + checks['improvement_over_pr1839']=kappa-KAPPA_1839 + checks['improvement_over_pr1875']=kappa-KAPPA_1875 + checks['improvement_over_pr1876']=kappa-KAPPA_1876 + checks['improvement_over_pr1897']=kappa-KAPPA_1897 + checks['improvement_over_pr1758']=kappa-Q('0.001679745508802299051546533685199973672313473419790800679752457380932784242972585600630181672224983') + checks['improvement_over_pr1699']=kappa-KAPPA_1699 + checks['improvement_over_pr1712']=kappa-KAPPA_1712 + checks['improvement_over_previous_package']=kappa-KAPPA_PKG4 + checks['improvement_over_pkg_k2']=kappa-KAPPA_PKG5 + if full_gauge:checks['unrecentered_group_gauge']=1-THETA_POWER-r-beta + if old_theta:checks['old_theta_chirp_guard']=1-(2*xi-eps)-r-beta + if old_linear:checks['old_linear_guard']=1-xi-r-beta + if old_tag:checks['old_union_tag_2beta']=1-2*beta + # Main-binding family invariant (PR2180): the Gaussian saving stays above the main saving. The fixed kappa grid (FLOOR) is coarser than the free gaps, + # so the *_above_kappa rows alone would no longer exclude a beta outside the main-binding window; this row is delta*(1-2q) > 0. + checks['gaussian_above_main']=margins['fused_gaussian']-saving + checks.update({n+'_above_kappa':v-kappa for n,v in margins.items()}) + assert margins['boundary_algebraic_matrix']==saving+slack + assert margins['sparse_union_movement']==saving+slack+(tau_eff-2)/2 + return {'kind':kind,'kappa':kappa,'epsilon':eps,'xi':xi,'beta':beta, + 'q':q_,'a':a,'r0':r,'zeta':zeta,'slack':slack, + 'margins':margins,'strict_checks':checks} + +def encode(x): + if isinstance(x,Q): + with localcontext() as c: + c.prec=DIG+200 + return {'rational':str(x),'decimal':str(Decimal(x.numerator)/Decimal(x.denominator))} + if isinstance(x,dict):return {str(k):encode(v) for k,v in x.items()} + if isinstance(x,(list,tuple)):return [encode(v) for v in x] + return x + +rows={};controls={} +for kind in ['struct_boundary_radix_union']: + row=ledger(kind) + assert all(v>0 for v in row['strict_checks'].values()) + assert min(row['margins'].values())==row['margins']['main_transform'] + # fixed-grid maximum: C*FLOOR is an integer and 0 < C - eps*q < 1/FLOOR, so floor(FLOOR*eps*q)/FLOOR = C - 1/FLOOR exactly and kappa attains the grid/backoff ceiling + assert (certified_complex*FLOOR).denominator==1 and 0= 1/(4 p^THETA_POWER)), an exponential factor <= p^2 eventually, +# alpha^5 polylogarithmic; a further half power is allowed for the polylogarithmic and bounded-constant factors of the augmented matrices. The umbrella must exceed that budget. +UMBRELLA_POWER=10 +def umbrella_margin(theta_power):return UMBRELLA_POWER-(2*theta_power+2+Q(1,2)) +assert umbrella_margin(THETA_POWER)>0 and umbrella_margin(Q(15,4))<=0 # control: the umbrella would fail silently for THETA_POWER >= 3.75 +HALO_UMBRELLA={'umbrella_power':UMBRELLA_POWER,'theta_power':THETA_POWER,'exponent_budget':2*THETA_POWER+2+Q(1,2),'margin':umbrella_margin(THETA_POWER),'fails_from_theta_power':Q(15,4)} +out={'status':'PASS_FINE_PRIME_PADDING_EXACT_ARITHMETIC', + 'scope':'Conditional fine-prime padding composition. Fresh native admission is required by verify.py. The cited prime theorem, written gauge-free theorem and inherited all-size interfaces are not proved by this arithmetic. No independent human review is claimed.', + 'geometry_changes':{'theta_power':THETA_POWER,'halo_power':HALO_POWER,'core_power':CORE_POWER,'matrix_exponent':STRASSEN_TAU}, + 'halo_umbrella':HALO_UMBRELLA,'complex_lower_short':b,'complex_lower_pinned':certified_complex, + 'native_moment':native,'profile':profile,'m':m,'W':W, + 'online_final_kappa':online,'rows':rows,'rejecting_controls':controls, + 'pr1673_kappa':Q('0.001677160151714381'),'improvement_over_pr1673':rows['struct_boundary_radix_union']['kappa']-Q('0.001677160151714381'), + 'source_sha256':{p.relative_to(WORK).as_posix():hashlib.sha256(p.read_bytes()).hexdigest() for p in [SPEC,CLAIM]}} +(HERE/'LEDGER.json').write_text(json.dumps(encode(out),indent=2)+'\n') +print(out['status']) +for name,row in rows.items(): + print(name,'FINAL KAPPA',encode(row['kappa'])['decimal'], + 'positive checks',len(row['strict_checks']), + 'gain over online',encode(row['kappa']-online)['decimal']) diff --git a/research/log-potential-template-ranks/verify.py b/research/log-potential-template-ranks/verify.py new file mode 100644 index 0000000000..28472d196f --- /dev/null +++ b/research/log-potential-template-ranks/verify.py @@ -0,0 +1,368 @@ +#!/usr/bin/env python3 +"""Exact premises of README.md's logarithmic leaf-count majorant. + +No predecessor verifier is imported. This is not native/outer admission. +zxv, with substantial OpenAI Codex assistance. Apache-2.0. +""" +import argparse +import ast +from collections import Counter +from fractions import Fraction as Q +from functools import lru_cache +import gzip +from hashlib import sha256 +import json +from pathlib import Path +import sys + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +sys.dont_write_bytecode = True + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +@lru_cache(None) +def log_bounds(n): + """ln(n): rational 2*atanh series after binary range reduction.""" + need(isinstance(n, int) and n >= 1, 'positive integer logarithm') + + def series(x): + u = (x-1)/(x+1) + power, total, count = u, Q(0), 80 + for j in range(count): + total += 2*power/(2*j+1) + power *= u*u + tail = 2*power/((2*count+1)*(1-u*u)) + return total, total+tail + + k = n.bit_length()-1 + a, b = series(Q(2)) + c, d = series(Q(n, 2**k)) + return k*a+c, k*b+d + + +def exp_bounds(x): + """Positive Taylor terms with a geometric bound on the omitted tail.""" + need(0 <= x < 1, 'exponential enclosure domain') + total = term = Q(1) + count = 48 + for j in range(1, count+1): + term = term*x/j + total += term + following = term*x/(count+1) + return total, total+following/(1-x/(count+2)) + + +@lru_cache(None) +def rank_power(n, saving): + a, b = log_bounds(n) + return Q(n)/exp_bounds(saving*b)[1], Q(n)/exp_bounds(saving*a)[0] + + +def display(pair): + scale = 10**30 + low, high = pair + a = low.numerator*scale//low.denominator + b = -((-high.numerator*scale)//high.denominator) + + def fixed(v): + sign = '-' if v < 0 else '' + s = str(abs(v)).rjust(31, '0') + return sign+s[:-30]+'.'+s[-30:] + + return {'lower': fixed(a), 'upper': fixed(b)} + + +def moment_margin(targets, paid, saving): + signed = Counter(targets) + signed.subtract(paid) + low = high = Q(0) + for n, count in signed.items(): + a, b = rank_power(n, saving) + low += count*(a if count >= 0 else b) + high += count*(b if count >= 0 else a) + return low, high + + +def eta_power(m, saving, q): + # eta=(1-saving)*m^(-saving). + a, b = log_bounds(m) + return ((1-saving)**q/exp_bounds(q*saving*b)[1], + (1-saving)**q/exp_bounds(q*saving*a)[0]) + + +def final_test(H, gap, q): + """(H+1) < 2^(q*gap*H), by exact integer powers.""" + power = q*gap*H + return (H+1)**power.denominator < 2**power.numerator + + +def grid_rank(gap, q, step=1000): + # g(H)=q*gap*H*ln(2)-ln(H+1) has g(0)=0, g'(0)<0, g''>0. + # It has one positive crossing, so binary search cannot skip a win. + need(0 < q*gap < 1, 'one positive crossing') + low, high = 0, 1 + while not final_test(step*high, gap, q): + low, high = high, high*2 + while high-low > 1: + mid = (low+high)//2 + if final_test(step*mid, gap, q): + high = mid + else: + low = mid + return step*high + + +def profile(raw): + result = {int(k): v for k, v in raw.items()} + need(result and all(k >= 1 and isinstance(v, int) and v > 0 + for k, v in result.items()), 'positive integer histogram') + return result + + +def check_case(name, targets, paid, saving, uniform_saving, theta, q, previous, step=1000): + targets, paid = profile(targets), profile(paid) + m, kmin, rmax = max(targets), min(targets), max(paid) + need(1 <= rmax < kmin <= m, 'strict mixed separation') + need(0 < uniform_saving < saving < 1 and 0 < theta < 1, 'strict exponents') + need(isinstance(q, int) and q >= 1, 'positive integer q') + margin = moment_margin(targets, paid, saving) + need(margin[0] > 0, 'unit t-superpotential') + a, b = theta.numerator, theta.denominator + need(rmax**b < kmin**a, 'exit power bound') + shift_left, shift_right = 2**(b-a)*rmax**b, m**a + need(shift_left <= shift_right, 'shifted logarithm contraction') + eta = eta_power(m, saving, q) + need(eta[0] > theta, 'eta^q > theta') + base_upper = exp_bounds(q*saving*log_bounds(m)[1])[1] + need(base_upper < 2, 'ordinary base ranks fit the majorant') + gap = saving-uniform_saving + H = grid_rank(gap, q, step) + need(H >= m.bit_length(), 'winning rank exceeds the base') + need(final_test(H, gap, q), 'strict final uniform moment') + need(not final_test(H-step, gap, q), 'previous grid rank fails') + need(eta_power(m, saving, q+1)[1] < theta, 'q+1 fails this contraction') + need(previous['targets'] == {str(k): v for k, v in targets.items()} + and previous['paid'] == {str(k): v for k, v in paid.items()} + and Q(previous['tested_mixed_saving']) == saving + and Q(previous['theta_upper']) == theta, 'unchanged predecessor invoice') + power = q*gap*H + old_H = previous['N']['H1'] + return { + 'family': name, 'targets': targets, 'paid': paid, + 'tested_mixed_saving': str(saving), 'uniform_saving': str(uniform_saving), + 't': str(1-saving), 'z': str(1-uniform_saving), + 'theta_upper': str(theta), 'logarithm_power': str(Q(1, q)), + 'strict_unit_moment_margin': display(margin), + 'eta_to_q': display(eta), + 'eta_to_q_minus_theta': display((eta[0]-theta, eta[1]-theta)), + 'shift_integer_test': {'left': shift_left, 'right': shift_right}, + 'base_m_to_q_saving_upper': display((Q(1), base_upper))['upper'], + 'majorant': 'L(n) <= n^t * (1+log2(n))^(1/q), n>=1; L(0)=0', + 'N': {'encoding': '2^H', 'H': H}, + 'final_integer_test': { + 'left_base': H+1, 'left_exponent': power.denominator, + 'right_base': 2, 'right_exponent': power.numerator, 'relation': '<'}, + 'previous_H': old_H, 'exponent_reduction_factor': str(Q(old_H, H)), + 'grid_step': step, + 'previous_uniform_saving': previous['uniform_saving'], + 'controls': {'previous_grid_point_fails_final_majorant': True, + 'q_plus_one_fails_contraction': True}, + 'materialized_word': False, + } + + +def read(path): + raw = path.read_bytes() + return json.loads(gzip.decompress(raw) if path.suffix == '.gz' else raw) + + +def authenticate_sources(): + inputs = {} + for row in read(HERE/'VENDOR.json')['files']: + need(sha256((ROOT/row['path']).read_bytes()).hexdigest() == row['sha256'], + 'changed predecessor input: '+row['path']) + inputs[row['path']] = row['sha256'] + return inputs + + +def retuned_outer(complex_case, bit_case): + """Reprice the complete nine-row ledger and all inherited predicates. + + The AST oracle executes only the pinned ledger function and its historic + comparison constants. Its old m=73 native admission code is never run. + """ + old = read(HERE/'vendor/OUTER-PARAMETERS.json') + p = {k: Q(v['rational']) if isinstance(v, dict) and 'rational' in v else v + for k, v in old['outer']['parameters'].items()} + conversion = read(HERE/'vendor/BIT-ALLSIZE-PARAMETERS.json') + atom, old_leaf = Q(conversion['atom_power']), Q(conversion['old_ordinary_saving']) + bare = Q(bit_case['uniform_saving']) + cover_gap = Q(conversion['C0_minus_C1']) + covered = bare-cover_gap + ordinary = (1-atom)*covered+atom*old_leaf + p.update(b=Q('0.0023004'), q=Q('0.0023002'), + effective_saving=Q('0.0023003'), BIT_saving=Q('0.002301'), + complex_uniform_saving=Q(complex_case['uniform_saving'])) + eps, beta, outer_q, effective = (p[k] for k in + ('epsilon', 'group_beta', 'q', 'effective_saving')) + p['lambda'] = 1-(outer_q+effective)/2 + p['lambda_prime'] = 1-outer_q + c = (3-p['Strassen_exponent'])/2 + p['cap_xi'] = eps*(1+outer_q)-c+p['layout_slack'] + xi, target, stop = p['cap_xi'], p['kappa'], p['stop'] + own = { + 'main_transform': eps*outer_q, + 'global_coordinate_router': effective, + 'fused_gaussian': 1-eps+outer_q*beta, + 'group_bit_router': 1-eps+effective*beta, + 'group_scans': 1-eps+beta, + 'boundary_algebraic_matrix': c+xi-eps, + 'sparse_union_movement': xi+Q(1, 2)-eps, + 'polynomial_products': eps, + 'microbox_face_corrections': 1-(eps+beta+p['halo_power']-p['core_power']+2), + } + need(all(v > target for v in own.values()), 'retuned nine outer cost rows') + sigma, tau = 1-p['b'], 1-effective + internal = tau+(1-stop)*max(sigma-tau, Q(0)) + leaf = sigma+stop*(1-sigma) + checks = { + 'uniform_complex_above_b': p['complex_uniform_saving']-p['b'], + 'ordinary_BIT_above_admitted': ordinary-p['BIT_saving'], + 'admitted_BIT_above_effective': p['BIT_saving']-effective, + 'selected_complex_above_effective': p['b']-effective, + 'lambda_above_internal': p['lambda']-internal, + 'lambda_above_sigma': p['lambda']-sigma, + 'lambda_prime_above_lambda': p['lambda_prime']-p['lambda'], + 'lambda_prime_above_leaf': p['lambda_prime']-leaf, + 'semantic_main_guard': 1-eps, + 'semantic_group_guard': 1-beta, + 'BIT_row_stock_sublinear': beta*(1-atom), + 'group_below_dimension': eps-beta, + 'global_gamma_spare': 1-eps-p['r0'], + 'fine_prime_group_guard': 1-(2*xi-2)-p['r0']-beta, + 'descriptor_complete_fiber': 1-eps, + 'explicit_metadata_halo': p['core_power']-p['halo_power']-eps-beta-1, + 'membership_record_budget': 1-beta-2*(1-eps), + 'short_record_fallback': eps-effective, + 'BIT_linear_adapter': atom-ordinary, + 'BIT_borrowed_stock': 1-ordinary-atom, + 'BIT_cover_gap': cover_gap, + 'fine_prime_umbrella': 10-(2*p['theta_power']+2+Q(1, 2)), + } + need(all(v > 0 for v in checks.values()), 'retuned functional interfaces') + need(cover_gap == Q(1, 100000), 'unchanged delayed-cover prime bound') + fallback = (1+cover_gap/4)/(1+cover_gap/2) + need(fallback == Q(conversion['prime_rule']['complete_moment_upper']), + 'same fully charged cover/fallback moment') + source = ast.parse((HERE/'vendor/check_ledger.py').read_text()) + function = next(node for node in source.body + if isinstance(node, ast.FunctionDef) and node.name == 'ledger') + constants = [node for node in source.body if isinstance(node, ast.Assign) + and any(isinstance(t, ast.Name) and t.id.startswith('KAPPA_') + for t in node.targets)] + baseline = Q('0.001730970419199163702738') + env = {'Q': Q, 'R0': p['r0'], 'ZETA': Q(1, 10**8), 'SLACK': p['layout_slack'], + 'STOP': stop, 'FLOOR': 10**7, 'BACKOFF': Q(1, 10**7), + 'EPS': eps, 'BETA': beta, 'THETA_POWER': Q(p['theta_power']), + 'HALO_POWER': p['halo_power'], 'CORE_POWER': p['core_power'], + 'STRASSEN_TAU': p['Strassen_exponent'], + 'b': p['b'], 'q': outer_q, 'a': effective, 'bit': p['BIT_saving'], + 'online': baseline, 'old': baseline} + module = ast.fix_missing_locations(ast.Module(body=constants+[function], type_ignores=[])) + exec(compile(module, 'pinned check_ledger.py:ledger', 'exec'), env) + oracle = env['ledger']('retuned_kappa_0023_smaller_ranks') + need(oracle['kappa'] == target == Q('0.0023'), 'same declared kappa after grid/backoff') + need(oracle['margins'] == own, 'all nine rows match the inherited oracle') + need(len(oracle['strict_checks']) == 63 and + all(v > 0 for v in oracle['strict_checks'].values()), 'all 63 inherited predicates') + controls = {} + for name, options in ( + ('epsilon_one', {'eps_': Q(1)}), + ('zero_layout_slack', {'slack': Q(0)}), + ('group_equals_dimension', {'beta_': eps}), + ('unfunded_old_per_axis_scan', {'old_scan': True}), + ): + invalid = env['ledger']('reject_'+name, **options) + failed = sorted(k for k, v in invalid['strict_checks'].items() if v <= 0) + need(failed, 'outer control accepted: '+name) + controls[name] = failed + return { + 'parameters': {k: str(v) for k, v in p.items()}, + 'nine_cost_savings': {k: str(v) for k, v in own.items()}, + 'minimum_saving_minus_kappa': str(min(own.values())-target), + 'functional_gaps': {k: str(v) for k, v in checks.items()}, + 'inherited_predicates': {k: str(v) for k, v in oracle['strict_checks'].items()}, + 'grid_floor': 10**7, 'grid_backoff': '1/10000000', + 'BIT_before_cover': str(bare), 'BIT_after_cover': str(covered), + 'BIT_ordinary_saving': str(ordinary), + 'BIT_atom_power': str(atom), 'BIT_old_leaf_saving': str(old_leaf), + 'BIT_prime_coefficient': str(256/cover_gap), + 'BIT_fallback_moment_upper': str(fallback), 'rejected_controls': controls, + 'scope': 'Exact parameter compatibility under the pinned native/cover/support/outer hypotheses; not a fresh native admission or full replay.', + } + + +def verify(): + sources = authenticate_sources() + old = read(HERE/'vendor/EXPLICIT-TEMPLATE-BOUNDS.json')['cases'] + cover = read(HERE/'vendor/P3-NATIVE-COVER.json.gz')['cover'] + bit = next(row for row in read(HERE/'vendor/MIXED-PRODUCTIVE-BIT.json')['candidates'] + if row['pairs'] == 3 and row['keep_idle_mask'] == 43) + args = [ + ('complex/same-savings', cover['targets'], cover['paid'], Q('0.002305'), Q('0.002304'), Q(9, 10), 9, old[0]), + ('BIT/same-savings', bit['targets'], bit['paid'], Q('0.002769'), Q('0.002760'), Q(15, 16), 4, old[1]), + ('complex/kappa-0023', cover['targets'], cover['paid'], Q('0.002305'), Q('0.0023005'), Q(9, 10), 9, old[0]), + ('BIT/kappa-0023', bit['targets'], bit['paid'], Q('0.002769'), Q('0.002318'), Q(15, 16), 4, old[1], 100), + ] + cases = [check_case(*arg) for arg in args] + rejected = [] + for arg in args: + bad_paid = dict(arg[2]) + bad_paid['1'] = 10**9 + mutations = ( + ('lost_unit_superpotential', (*arg[:2], bad_paid, *arg[3:]), 'unit t-superpotential'), + ('lost_strict_separation', (arg[0], {'1': 1}, *arg[2:]), 'strict mixed separation'), + ('q_plus_one', (*arg[:6], arg[6]+1, *arg[7:]), 'eta^q > theta'), + ) + for label, mutated, expected in mutations: + try: + check_case(*mutated) + except ValueError as error: + need(str(error) == expected, 'wrong rejection point: '+label) + rejected.append({'family': arg[0], 'mutation': label, 'rejected_at': str(error)}) + else: + raise ValueError('negative control accepted: '+label) + return { + 'schema': 'logarithmic-uniform-template-ranks/1', + 'status': 'PASS_LOGARITHMIC_MAJORANT_RANKS', 'cases': cases, + 'kappa_0023_retuned_outer': retuned_outer(cases[2], cases[3]), + 'rejected_mutations': rejected, 'input_sha256': sources, + 'verifier_sha256': sha256(Path(__file__).read_bytes()).hexdigest(), + 'proof_dependency': 'README.md and PR4359 finite source/exit compiler with its native closure hypotheses', + 'scope': 'Smaller sufficient ambient ranks; no emitted supplier, complete constant bounds, native admission, or new kappa.', + } + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--out', type=Path, help='write a new receipt instead of comparing RESULT.json') + args = parser.parse_args() + result = verify() + encoded = json.dumps(result, indent=2, sort_keys=True)+'\n' + if args.out: + need(not args.out.exists(), 'output must be a new file') + args.out.write_text(encoded) + else: + need(read(HERE/'RESULT.json') == json.loads(encoded), 'committed receipt differs') + print(json.dumps({'status': result['status'], 'ranks': [ + {'family': row['family'], 'N': row['N']} for row in result['cases']], + 'rejected_mutations': len(result['rejected_mutations'])})) + + +if __name__ == '__main__': + main() From ec2c9505d863c7f5f2a5f08628e8ee6fb740c0a7 Mon Sep 17 00:00:00 2001 From: zxv Date: Wed, 21 Oct 2026 13:06:41 -0400 Subject: [PATCH 2/2] Clarify reuse of the pinned outer arithmetic oracle --- research/log-potential-template-ranks/README.md | 5 +++-- research/log-potential-template-ranks/RESULT.json | 2 +- research/log-potential-template-ranks/verify.py | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/research/log-potential-template-ranks/README.md b/research/log-potential-template-ranks/README.md index f981bf9bd9..641d00f3d4 100644 --- a/research/log-potential-template-ranks/README.md +++ b/research/log-potential-template-ranks/README.md @@ -176,8 +176,9 @@ avoids both an intermediate exponent and an unknown multiplicative constant. ## Two explicit choices of N The source histograms are copied byte-for-byte in `vendor/`, and their exact -origin is recorded in [VENDOR.json](VENDOR.json). The checker imports no -predecessor Python code. +origin is recorded in [VENDOR.json](VENDOR.json). Leaf arithmetic uses separate +code; the consumer cross-check executes the pinned outer ledger function as +described below. | Family | `t` | `z` | `theta_bar` | `q` | Certified `eta^q - theta_bar` lower bound | | --- | ---: | ---: | ---: | ---: | ---: | diff --git a/research/log-potential-template-ranks/RESULT.json b/research/log-potential-template-ranks/RESULT.json index 68590e61ee..be40a1a8b8 100644 --- a/research/log-potential-template-ranks/RESULT.json +++ b/research/log-potential-template-ranks/RESULT.json @@ -478,5 +478,5 @@ "schema": "logarithmic-uniform-template-ranks/1", "scope": "Smaller sufficient ambient ranks; no emitted supplier, complete constant bounds, native admission, or new kappa.", "status": "PASS_LOGARITHMIC_MAJORANT_RANKS", - "verifier_sha256": "407dcbbae856805e698f0000dfd0e4ec32b3700fadc9ba2aa6f85dd03a774f61" + "verifier_sha256": "9ac70a9c1fe243b95d0ea2eb95468b969af378f29b28b99e2d25b9098d2eed61" } diff --git a/research/log-potential-template-ranks/verify.py b/research/log-potential-template-ranks/verify.py index 28472d196f..2e61e38575 100644 --- a/research/log-potential-template-ranks/verify.py +++ b/research/log-potential-template-ranks/verify.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 """Exact premises of README.md's logarithmic leaf-count majorant. -No predecessor verifier is imported. This is not native/outer admission. +Leaf arithmetic is separately implemented. The pinned outer ledger function +is executed as a second arithmetic oracle; this is not native/outer admission. zxv, with substantial OpenAI Codex assistance. Apache-2.0. """ import argparse