From 313ede7cfd0002b3884e235730a564e8ec7c2e05 Mon Sep 17 00:00:00 2001 From: Rohan Arun Date: Fri, 16 Oct 2026 14:53:49 -0400 Subject: [PATCH] R1 words at their packing cap (T740): conditional kappa 0.001729152756004330934535 - 1e-46 - 1e-70 PR #3015's R1 words (PR2979's words plus Jeremy Kothe's declared restore edit R1), unchanged, with a literal T740 allocation: ten lockstep copies of PR2979's T74 fill (used unchanged by PR3015; PR2969's lift convention) plus 332 whole-role relocations along same-width exchange chains. The pattern mix lands on an integral point of the optimal face (an integral optimum needs 20 | T), so the exact root equals PR3015's certified R1 cap: +1552021312491537/10^24 over PR3021's released headline and +1.7825e-9 over PR3015. Packing composed with R1; moment nomination (the complete T740 admission/outer release is a separate obligation). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01TGoMCHAqctZe4wTb4Qr7VV --- research/rank7-r1-t740-cap/CLAIM.json | 76 +++++ research/rank7-r1-t740-cap/README.md | 177 ++++++++++++ research/rank7-r1-t740-cap/SOURCES.json | 96 +++++++ research/rank7-r1-t740-cap/TASK.json | 78 ++++++ research/rank7-r1-t740-cap/VENDOR.json | 72 +++++ research/rank7-r1-t740-cap/VERIFY.json | 41 +++ .../allocation/EXPECTED.json | 15 + .../rank7-r1-t740-cap/allocation/PROFILE.json | 9 + .../allocation/RELOCATIONS.json | 1 + .../certificates/R1-RELAX-CAP.json | 124 +++++++++ .../comparators/PR3015-CLAIM.json | 229 +++++++++++++++ .../comparators/PR3015-PROFILE.json | 9 + .../comparators/PR3021-OUTER-CLAIM.json | 13 + .../construction/CHAINS.json | 1 + .../construction/plan_t740.py | 232 +++++++++++++++ research/rank7-r1-t740-cap/controls.py | 131 +++++++++ .../data/R1-WORD-base.json.gz | Bin 0 -> 71434 bytes .../data/R1-WORD-extra.json.gz | Bin 0 -> 71430 bytes research/rank7-r1-t740-cap/lift.py | 106 +++++++ .../tools/audit_allocation_moment.py | 84 ++++++ research/rank7-r1-t740-cap/verify.py | 263 ++++++++++++++++++ 21 files changed, 1757 insertions(+) create mode 100644 research/rank7-r1-t740-cap/CLAIM.json create mode 100644 research/rank7-r1-t740-cap/README.md create mode 100644 research/rank7-r1-t740-cap/SOURCES.json create mode 100644 research/rank7-r1-t740-cap/TASK.json create mode 100644 research/rank7-r1-t740-cap/VENDOR.json create mode 100644 research/rank7-r1-t740-cap/VERIFY.json create mode 100644 research/rank7-r1-t740-cap/allocation/EXPECTED.json create mode 100644 research/rank7-r1-t740-cap/allocation/PROFILE.json create mode 100644 research/rank7-r1-t740-cap/allocation/RELOCATIONS.json create mode 100644 research/rank7-r1-t740-cap/certificates/R1-RELAX-CAP.json create mode 100644 research/rank7-r1-t740-cap/comparators/PR3015-CLAIM.json create mode 100644 research/rank7-r1-t740-cap/comparators/PR3015-PROFILE.json create mode 100644 research/rank7-r1-t740-cap/comparators/PR3021-OUTER-CLAIM.json create mode 100644 research/rank7-r1-t740-cap/construction/CHAINS.json create mode 100644 research/rank7-r1-t740-cap/construction/plan_t740.py create mode 100644 research/rank7-r1-t740-cap/controls.py create mode 100644 research/rank7-r1-t740-cap/data/R1-WORD-base.json.gz create mode 100644 research/rank7-r1-t740-cap/data/R1-WORD-extra.json.gz create mode 100644 research/rank7-r1-t740-cap/lift.py create mode 100644 research/rank7-r1-t740-cap/tools/audit_allocation_moment.py create mode 100644 research/rank7-r1-t740-cap/verify.py diff --git a/research/rank7-r1-t740-cap/CLAIM.json b/research/rank7-r1-t740-cap/CLAIM.json new file mode 100644 index 0000000000..30c2f74318 --- /dev/null +++ b/research/rank7-r1-t740-cap/CLAIM.json @@ -0,0 +1,76 @@ +{ + "allocation": { + "payload_sha256": { + "DISPATCH.json": "90edc935320dd6264e98dc735d868df3c95f5901c70d7d96171001fcb295cce0", + "FILL.json.gz": "b56bfed2c542e63f4139e8e3ebb9fe0c979a3bab1ba6a934e2113f40f5c7e0f0", + "ORDER.json": "927226d702bf3cada076f4c459da9063c0df7e7154a62955cf75c40cf30215b9", + "PROFILE.json": "83130e5231b3693c2af871c430833601de83fdd8851c024df4f78efc76c8deef" + }, + "relocations": 332, + "source": "PR2979 allocation/ (T74 ORDER/DISPATCH/FILL, used unchanged by PR3015), ten lockstep copies (PR2969 convention)", + "touched_bins": 263 + }, + "baseline_head": "e244296debb45fe6f4da84d29e4d64fbab55fda0", + "baseline_kappa": "17291509735342244286949999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "baseline_pr": 3015, + "best_open_claim_head": "217edac2ebfa6250536bd6df153de14901a69395", + "best_open_claim_kappa": "0.0017291512039830184429979999999999999999999998999999999999999999999999", + "best_open_claim_pr": 3021, + "calls": 6660, + "complex_lower": "345830551200866186907/200000000000000000000000", + "fixed_inventory_cap": { + "cap_lower": "345830551200866186907/200000000000000000000000", + "cap_upper": "17291527560043309345351/10000000000000000000000000", + "realized": "attained: the literal idle histogram is exactly 740 x the optimal basic idle profile (verify.py)" + }, + "gain_over_pr3015": "22280876331323/12500000000000000000000", + "gain_over_pr3015_decimal": "1.78247010650584E-9", + "gain_over_pr3021": "1552021312491537/1000000000000000000000000", + "gain_over_pr3021_float": 1.552021312491537e-09, + "headline_convention": "floor of the exact root lower end at 24 digits, minus 10^-46 and 10^-70, as PR2979/PR3015/PR3021 (tools/audit_allocation_moment.py)", + "helpers": 408, + "idle": { + "1": 173160, + "3": 49617, + "48": 281903, + "5": 17205 + }, + "kappa": "17291527560043309345349999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "kappa_decimal": "0.0017291527560043309345349999999999999999999998999999999999999999999999", + "live_families": 663040, + "local_profile": { + "1": 2443, + "2": 707, + "3": 232, + "4": 108, + "5": 18, + "8": 8 + }, + "meaning": "Moment nomination: PR3015's R1 words (PR2979's words with Jeremy Kothe's declared restore edit R1) with a literal T740 allocation that attains their fixed-capacity packing cap. PR3015's complete T74 release covers the words; the T740 allocation's complete admission/outer release is separate.", + "physical_families": 663549, + "profile": { + "1": 16443540, + "2": 4708620, + "3": 1594737, + "4": 719280, + "48": 281903, + "5": 137085, + "8": 53280 + }, + "replicas": 740, + "roles": 2717280, + "root_lower": "345830551200866186907/200000000000000000000000", + "root_upper": "17291527560043309345351/10000000000000000000000000", + "scope": "Packing composed with PR3015's declared R1 edit; no other word, gate, frame, scalar or cleanup change. Inherited all-size/compiler/theorem hypotheses remain. No selected-frontier change and no independent human review is claimed.", + "status": "FINITE_OWNER_AND_MOMENT_CANDIDATE_OUTER_PENDING", + "width_inventory": { + "4": 26, + "5": 2, + "6": 16, + "7": 52, + "8": 99, + "9": 213 + }, + "words": "PR3015 edits/FINAL-WORD-base.json.gz and FINAL-WORD-extra.json.gz (vendored as data/R1-WORD-*.json.gz), unchanged", + "zero_buffers": 91 +} diff --git a/research/rank7-r1-t740-cap/README.md b/research/rank7-r1-t740-cap/README.md new file mode 100644 index 0000000000..60e2306737 --- /dev/null +++ b/research/rank7-r1-t740-cap/README.md @@ -0,0 +1,177 @@ +# R1 words at their packing cap (T740): conditional κ = 0.001729152756004330934535 − 10⁻⁴⁶ − 10⁻⁷⁰ + +```text +Status / UTC update / priority revision: DONE (moment nomination; see "Scope") · 2026-10-16 · priority revision 6 · base main d8e0f83f +Concrete question and changed premise: PR3015's R1 restore edit keeps every helper width, window and the 91-buffer + namespace of PR2979, and its fixed-capacity cap certificate has the same optimal basis as PR2979's. So an allocation + that attains PR2979's cap also attains R1's. Can that be done literally? +Established result and evidence status: yes. A literal T740 allocation is ten lockstep copies of PR2979's T74 fill + (which PR3015 uses unchanged) plus 332 whole-role relocations. Its idle histogram is exactly 740 x the optimal basic + idle profile, and with the R1 words its exact root equals the R1 cap. Gains: about 1.5520e-9 over PR3021's released + headline (R1 + PR3018 packing) and 1.7825e-9 over PR3015. Packing only; author-checked (AI-assisted); not + maintainer-reviewed. +Public artifact URL + exact commit: this package (see the PR). +Next useful task: the complete T740 admission/outer release. Further gains need more word edits (R2, ...). +Active claim / expiry: released. +``` + +## Result + +| | κ (headline; each − 10⁻⁴⁶ − 10⁻⁷⁰) | words | T | packing | +|---|---|---|---:|---| +| PR #3015 (Jeremy Kothe) | 0.001729150973534224428695 | PR2979 + R1 | 74 | PR2979's fill, 1.78e-9 below the R1 cap | +| PR #3021 (Nick Petalas) | 0.001729151203983018442998 | PR2979 + R1 | 74 | PR3018's journal, 1.55e-9 below | +| **this package** | **0.001729152756004330934535** | **PR2979 + R1** | **740** | **attains the R1 cap** | + +- Exact gains are `1552021312491537/10^24` over PR3021 and `178247010650584/10^23` over PR3015 (CLAIM.json). +- The words are PR3015's two R1 words, used unchanged (`data/R1-WORD-*.json.gz`; provenance in VENDOR.json). + - Local profile per call: {1:2443, 2:707, 3:232, 4:108, 5:18, 8:8}. + - Width inventory: {4:26, 5:2, 6:16, 7:52, 8:99, 9:213}. + - 91 private buffers. +- The allocation has 740 replicas, 6,660 calls and 2,717,280 helper roles. +- Complete paid profile: {1:16441320, 2:4708620, 3:1594737, 4:719280, 5:137085, 8:53280, 48:281903}. +- Physical stock: 663,040 live + 408 helpers + 8 centres + 91 buffers + 2 guards = **663,549**. +- The exact root bracket [0.001729152756004330934535, 0.0017291527560043309345351] is exactly PR3015's certified R1 + cap. + +**Concurrent work.** Nick Petalas' [PR3024](https://github.com/CrocSwap/integer-mult-bounds/pull/3024) attains the same +kind of cap at T740 for PR2979's words without R1. It uses a 550-row journal on PR3018's fill. This package's 332 +relocations were found independently from PR2979's own fill; they reach the same idle histogram. PR3024 records the R1 +composition as a separate obligation, and that composition is what this package adds. + +## Why T740 and why it composes with R1 + +**Why T740.** On the optimal face (12 tight patterns), exact row multipliers fix three counts per replica: + +| pattern | count per replica | +|---|---| +| [9,9,9]@32 | 93/4 | +| [9,9,9,9,9]@48 | 1341/20 | +| []@48 | 7619/20 | + +- Since 1341 = 3²·149 is prime to 20, an integral optimum needs 20 | T. +- T740 is the first multiple of PR2917's T74 order with that property. +- At T74 the best integral mix is 1.55e-9 below the cap, which is where PR3021 sits. + +**Why it composes with R1.** R1 changes the local profile by −2H₁ + H₂ per call and nothing else that the allocation +reads: helper widths, entrances, endpoints, windows, order, dispatch and buffers are all unchanged. PR3015's R1 cap +certificate has the same 10-pattern basis and the same idle profile as PR2979's. `verify.py` re-derives: + +- the R1 providers from the words; +- the face counts and the optimality of every literal bin pattern; +- the equality of the root and the R1 cap. + +## Construction + +`lift.py` defines the allocation completely, in two steps. + +1. **Lift.** PR2979's literal T74 ORDER, DISPATCH and FILL (PR3015 uses them unchanged) are copied ten times in + lockstep, in Dugongue's PR2969 convention. With j = 0, …, 9: + - call (s, r) at time t → call (s, r + 74j) at time 10t + j; + - role (t, h, o, c, p, z) → role (10t + j, h, o + 74j, c, p, z). +2. **Relocate.** The roles in `allocation/RELOCATIONS.json` move to their listed bins, and the 263 touched bins are + repacked as compact prefixes. + +### What the relocations change + + 60 x [4,8,9,9,9,9]@48 -> 57 x [9,9,9,9,9]@48 + 3 x []@48 + 75 x [9,9,9]@32 -> 60 x [4,9,9,9]@32 + 15 x [8,8,8,8]@32 + +The displaced 4s and 8s are late, while almost all [9,9,9] bins close early. So each one travels along a chain of +same-width exchanges (`construction/plan_t740.py`, seeded greedy; `construction/CHAINS.json`): + +1. It enters an unlocked bin whose window contains its call. +2. It evicts a same-width role of an earlier call, which moves on in turn. + +Every intermediate bin keeps its pattern. In all, 332 roles move: 150 in step A, 45 in B, 80 in C, 12 in D and 45 in E. +The search reads only widths, windows and families, so the same relocations serve PR2979's words and R1's. + +## Verification + +Both registered commands use the standard library only, under Python 3.12. + +**`verify.py` (about 70 seconds)** checks: + +- **Pins.** + - Live pins of the PR2979 inputs on main. + - Vendored-file pins (VENDOR.json): exact PR heads, Git blob IDs and SHA-256. +- **Providers.** The R1 words re-derive the providers: + - widths identical to PR2979's registry; + - local profile = R1; + - 91 buffers. +- **Allocation.** The deterministic T740 rebuild has pinned canonical payload SHA-256. +- **Owner engine.** PR2979's vendored engine checks all 2,717,280 roles: + - windows, same-call families, capacities, masks and compact prefixes; + - the complete paid profile and the rank mass. +- **Physical stock.** 663,549. +- **Cap and optimal face.** + - PR3015's R1 cap certificate is re-verified with PR2979's `relax_exact.py`. + - Exact fixed face counts. + - The idle histogram is 740 × the basic optimum. + - Every bin pattern is tight. + - The root bracket equals the cap bracket. +- **Moment.** The dyadic moment auditor is re-pinned to PR3015's headline and shows a strict gain. An exact + comparison also shows a strict gain over PR3021. +- **Claim.** CLAIM.json is bound to the results. + +**`controls.py` (about four minutes)** checks seven controls: + +| control | result | +|---|---| +| bare lift | valid, but its root is PR3015's (below the cap) | +| dropped chain link | rejected by the engine | +| window violation | rejected by the engine | +| family collision | rejected by the engine | +| stale profile | rejected by the engine | +| tampered relocations | the payload pin fails | +| wrong moment baseline | rejected | + +```sh +python3 scripts/research_package.py --package research/rank7-r1-t740-cap --check-only +python3.12 scripts/research_package.py --package research/rank7-r1-t740-cap +python3 -B research/rank7-r1-t740-cap/construction/plan_t740.py --out /tmp/t740-plan # provenance: regenerates RELOCATIONS.json +``` + +## Scope + +- **Packing composed with R1.** No word, gate, frame, scalar or cleanup changes are made beyond PR3015's declared R1 + edit. +- **Inherited claims.** PR3015's (and PR2979's) word-level, native and release claims are inherited unchanged. So are + all of PR2979's inherited all-size, compiler, hosting, precision and analytic hypotheses. +- **Review status.** PR2979 is an archived source package and PR3015/PR3021 are open. None is scientifically admitted, + and the independent audits they need apply here too. +- **Open finite obligation.** The complete fresh-native admission and modern outer release have not yet been rerun for + the T740 allocation. PR3015's and PR3021's releases are at T74. This is a moment nomination with literal T740 owners, + the same status as PR3024 and PR2969. +- **What is not claimed.** No selected-frontier change, no new mechanism, and no independent human review. +- **Optimality.** The R1 cap is the optimum of the fixed-capacity relaxation, so no allocation of the R1 words in this + model can do better. + +## Open next questions + +1. **Complete T740 release.** + - First step: rerun PR3015's reproduce.py chain with the T740 ORDER/DISPATCH/FILL that `verify.py --work DIR` writes. + T-dependent physical and prefix constants come from the order. + - Blocked by: replay time and memory at ten times PR3015's 271,728 roles. +2. **More declared edits.** + - Why it matters: packing is exhausted for these words, so only a changed local profile raises κ further. + - First step: price candidate edits with PR3015's exhaustive 2-4-gate restore-block search. Each new local profile + with the same basis inherits this allocation's cap attainment. + +These are recorded as structured `open_questions` in TASK.json. + +## Credit + +- **Jeremy Kothe (PR #3015):** the declared R1 edit, R1 words and R1 cap certificate. +- **Marius-Paul Dumitrean (PR #2979):** the words under R1, the literal T74 fill lifted here and the checkers. +- **Nick Petalas (PR #3018, #3021, #3022, #3024):** the integrality analysis lineage and the concurrent T740 cap for + PR2979's words. +- **Dugongue (PR #2969):** the lockstep T-lift convention and cross-copy moves. +- **themilkman216:** the observation about the T at which these caps become integral. +- **Mason Hale (PR #2917):** chronology and owner/moment checks. +- **Tekalign:** the independent owner checker. +- **Jeremy Diviney (PR #2908):** the moment auditor arithmetic. +- **Yiyang Lu:** the flow model. +- **icekylinx:** the exact auditor. + +New work by Rohan Arun, prepared with substantial AI assistance (Anthropic Claude). Apache-2.0. Retained notices apply. diff --git a/research/rank7-r1-t740-cap/SOURCES.json b/research/rank7-r1-t740-cap/SOURCES.json new file mode 100644 index 0000000000..40dabf31f2 --- /dev/null +++ b/research/rank7-r1-t740-cap/SOURCES.json @@ -0,0 +1,96 @@ +{ + "schema_version": 1, + "base_commit": "d8e0f83f00191df62174b641e9fff055c357f641", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "b1fea0c94436b236cc2b7d41a7be032811b94c81", + "sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "67f085acd86acd7d4e03922d9cf4b26bca66fed5", + "sha256": "47b42433f5a85809a3aadd29c2c339da2c6ed728e4f7762df6b88bccb7874cf0" + }, + { + "path": "research/rank7-joint-endframes/CLAIM.json", + "usage": "input", + "git_blob": "8ec2ce4e440c0b584ee982c551e526a011c9324c", + "sha256": "436e0d297cbdf195445d3697d496ac675e95210b79e70ce602a6a6667a4c6ce9" + }, + { + "path": "research/rank7-joint-endframes/allocation/DISPATCH.json", + "usage": "input", + "git_blob": "9544fee4e6ee1f202cee22bfaeaf229ee3b2515e", + "sha256": "65e435bd68e97243c003677271b88485a29d4d0fae2dff1354100404a145e74c" + }, + { + "path": "research/rank7-joint-endframes/allocation/FILL.json.gz", + "usage": "input", + "git_blob": "8d4fd644d60ba2c98106dc770803b647afdf0963", + "sha256": "c2136be9434cda511a1a8a44d98f9f72ea5376830a8426674253b4ee351c4c39" + }, + { + "path": "research/rank7-joint-endframes/allocation/ORDER.json", + "usage": "input", + "git_blob": "7409c4df1092241729739596c7648bda504e6aad", + "sha256": "519d1d5dbb997a219fcfcad34c0b03e7838bef24199784d7e964fa10090f66e1" + }, + { + "path": "research/rank7-joint-endframes/allocation/PROVIDERS.json", + "usage": "input", + "git_blob": "e1d99e12cfa3ac8375984d85c0b040dc36ea1312", + "sha256": "f2edb7922f3029a5d607437e737775ff3371bca49ebab62e5e2495d16d3bf573" + }, + { + "path": "research/rank7-joint-endframes/allocation/vendor/PLAN.json.gz", + "usage": "input", + "git_blob": "7a1db55a4d53ee99280be4f3ab7d29f7b2033adf", + "sha256": "d566cfb87b71639d4138e1f89b543e2dd6a7772070226a2a14c799a6835bf21e" + }, + { + "path": "research/rank7-joint-endframes/allocation/vendor/TEMPLATE.json.gz", + "usage": "input", + "git_blob": "114808c32b1799da53524bdc25cea67efb60009e", + "sha256": "21297b20f1f2dc76eb9dd8124416068c3cb096bab9df17fa4da19bc68dfe082e" + }, + { + "path": "research/rank7-joint-endframes/allocation/vendor/independent_owners.py", + "usage": "input", + "git_blob": "16013201b19054f7e45398ecf10af74c9c6a9114", + "sha256": "77a848729159e271ba64f403dfd59dddb13044b17b2950fa56700f442e2fe461" + }, + { + "path": "research/rank7-joint-endframes/tools/audit_allocation_moment.py", + "usage": "input", + "git_blob": "623ae14fbeaacf2f1b2302ae23b40c52586b7342", + "sha256": "c632527ecf092f013862660dbd7f52b599a50b321a8aa88ddc45af0547e79cb5" + }, + { + "path": "research/rank7-joint-endframes/tools/relax.py", + "usage": "input", + "git_blob": "97dfe35c434283ca6e83818e61aed65740522f50", + "sha256": "0fed1c56b50a2e6d44deeeb6db0f1c7e1f71b86d1747130e1a9202216249a728" + }, + { + "path": "research/rank7-joint-endframes/tools/relax_exact.py", + "usage": "input", + "git_blob": "0be97756bb9d8b072c962c147d4b4d3b3122f884", + "sha256": "baf1855d6095c951a90d19a0d8094bd33290519940b732e2b758c5647830f044" + }, + { + "path": "research/rank7-joint-endframes/tools/root.py", + "usage": "input", + "git_blob": "bd6dc2eb4e5013625d17cc08461b67622bcfed69", + "sha256": "55f5aca39b5ee2fe4687ac8863e6c24569010f27a332883c069b8e14b8fe09e3" + }, + { + "path": "research/rank7-joint-endframes/vendor/preload_move.py", + "usage": "input", + "git_blob": "55b435035bbc439a9d55e8abd125993208cef8d9", + "sha256": "c8fda4674644fcd5cbf39b6645ce148a21daa90a998b678cbe51f970b78b0044" + } + ] +} diff --git a/research/rank7-r1-t740-cap/TASK.json b/research/rank7-r1-t740-cap/TASK.json new file mode 100644 index 0000000000..c5c441ddac --- /dev/null +++ b/research/rank7-r1-t740-cap/TASK.json @@ -0,0 +1,78 @@ +{ + "schema_version": 1, + "task_id": "selected-packing", + "priority_revision": 6, + "base_commit": "d8e0f83f00191df62174b641e9fff055c357f641", + "original_card": { + "id": "selected-packing", + "question": "Is there a genuinely unsearched, explicitly bounded improvement to the selected packing?", + "starting_points": [ + "certificates/selected-result.json", + "research/heterogeneous-owner-assembly/README.md", + "research/complex-local-word-ceiling/README.md" + ], + "methods": [ + "Search a named unclaimed canonical candidate domain with a reproducible partition.", + "Prove a stronger scoped relaxation or exact optimum for one named residual subproblem." + ], + "acceptance_gate": "Check live PR overlap first, price both suppliers and distinguish a search best from an optimum. Report the word's packing cap from ceiling.ceiling() and the fraction of it realized; label packing gains as such.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Locate the selected packing source in the review and check live PRs for the same residual problem.", + "scope": "Positive control / source-bound orientation only; this is not a new construction or full cold replay." + }, + "first_experiment": "Define an unclaimed canonical domain and a favorable bound before starting a new search.", + "bottleneck_link": "An actual paid-profile gain can improve the frontier up to the other supplier cap.", + "allowed_variations": [ + "One bounded residual packing instance or exact relaxation.", + "If the coverage law, template or guard changes, derive an applicable fully charged replacement bound instead of applying the incumbent ceiling outside its scope." + ], + "scope_change_triggers": [ + "Rerunning an existing search with only a different seed as a separate mathematical contribution." + ], + "overlap_terms": [ + "T16", + "owner exchange", + "packing" + ], + "existing_checks": [ + { + "scope": "Packing-independent ceiling for the selected paid profile under the one-unpaid-coordinate coverage and halving guard.", + "evidence": "docs/research/community-efficient1000-review.md", + "remaining": "A changed word or model requires new pricing; a local packing search must name uncovered scope.", + "status": "reviewed", + "source_commit": "836b19bfa309ceafbc8ee32a15e8c4b10dde7e11", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "changed", + "actual_scope": "PR3015's R1 words (PR2979's words plus Jeremy Kothe's declared restore edit R1) with a literal T740 allocation attaining their fixed-capacity packing cap: ten lockstep copies of PR2979's literal T74 fill (used unchanged by PR3015; PR2969's lift convention) plus 332 explicit whole-role relocations along same-width exchange chains, putting the pattern mix on an integral point of the optimal face.", + "scope_change_reason": "The card targets the selected record's packing, whose ceiling is already reviewed. The live open question is the newest candidate's integrality gap: PR3015/PR3021 release R1 at T74, 1.78e-9/1.55e-9 below R1's certified cap, and the optimal face needs 20 | T. Bounded, packing-only composition with PR3015's declared edit, reported against the exact R1 cap (attained).", + "bottleneck_link": "Packing only: the paid local profile is PR3015's, so the gain is capped by R1's fixed-capacity relaxation; this attains it (+1.552e-9 over PR3021's released headline, +1.782e-9 over PR3015). It closes the packing layer for these words.", + "budget_minutes": 240, + "stop_rule": "Publish only if the R1 words re-derive the providers, PR2979's owner engine accepts the literal T740 allocation with the claimed complete profile, the idle histogram is exactly 740 x the optimal basic idle profile (root = R1 cap), and the re-pinned moment auditor shows a strict gain over PR3015 with an exact strict gain over PR3021; otherwise stop.", + "outcome": "completed", + "evidence": "verify.py (stdlib, about 70 s): live PR2979 input pins and vendored PR3015/PR3021 pins (heads, Git blobs, SHA-256); providers re-derived from the R1 words (PR2979 widths, R1 local profile, 91 buffers); deterministic T740 rebuild with pinned canonical payload SHA-256; owner engine over 2,717,280 roles; physical 663,549; R1 cap certificate re-verified; exact fixed face counts (20 | T); idle = 740 x basic optimum; all bin patterns tight; root bracket = R1 cap bracket; moment auditor re-pinned to PR3015 (strict gain); exact strict gain over PR3021. controls.py (stdlib, about 4 min): seven controls rejected or losing the gain.", + "author": "Rohan Arun", + "ai_assistance": "Substantial AI assistance (Anthropic Claude) for the analysis, search, implementation and checks; no independent human review is claimed.", + "open_questions": [ + { + "question": "Does the complete fresh-native admission and modern outer release pass for the T740 allocation with the R1 words?", + "why_it_matters": "PR3015/PR3021 release R1 only at T74; a T740 release would turn this moment nomination into a complete conditional candidate.", + "first_step": "Run PR3015's reproduce.py chain with the T740 ORDER/DISPATCH/FILL written by verify.py --work DIR, rederiving T-dependent physical/prefix constants from the order.", + "blocked_by": "Replay time and memory at ten times PR3015's 271,728 roles; no structural blocker is known." + }, + { + "question": "Which further declared edits (beyond R1) lower the local profile while keeping the same optimal basis?", + "why_it_matters": "Packing is exhausted for these words; a changed local profile with the same basis inherits this allocation's cap attainment at no packing cost.", + "first_step": "Rerun PR3015's exhaustive 2-4-gate restore-block search on the R1 words and screen each candidate's cap certificate basis.", + "blocked_by": "None known; the search tooling is in PR3015." + } + ] +} diff --git a/research/rank7-r1-t740-cap/VENDOR.json b/research/rank7-r1-t740-cap/VENDOR.json new file mode 100644 index 0000000000..681498fd0d --- /dev/null +++ b/research/rank7-r1-t740-cap/VENDOR.json @@ -0,0 +1,72 @@ +{ + "schema_version": 1, + "upstream_repository": "https://github.com/CrocSwap/integer-mult-bounds", + "files": [ + { + "pr": 3015, + "head": "e244296debb45fe6f4da84d29e4d64fbab55fda0", + "path": "research/rank7-joint-endframes-restore-edit/edits/FINAL-WORD-base.json.gz", + "package_path": "data/R1-WORD-base.json.gz", + "git_blob": "4f0483657396a7f735873e1b252482c53dfb2eb6", + "sha256": "77d9be7ac47347894e034d8b67bf07ff8a5e1c317923ed5dd9257c492187dcf5", + "bytes": 71434, + "role": "PR3015 R1 base provider word (edit R1 on PR2979 words)", + "author": "Jeremy Kothe (jeremykothe2)" + }, + { + "pr": 3015, + "head": "e244296debb45fe6f4da84d29e4d64fbab55fda0", + "path": "research/rank7-joint-endframes-restore-edit/edits/FINAL-WORD-extra.json.gz", + "package_path": "data/R1-WORD-extra.json.gz", + "git_blob": "81f95e21ede115e8bdb6bd522c641b37b740bdf7", + "sha256": "18d9c448ce892aa19f162e214760d0bd4ecb09f814b9b859dbf11f3ca637e9ea", + "bytes": 71430, + "role": "PR3015 R1 extra provider word", + "author": "Jeremy Kothe (jeremykothe2)" + }, + { + "pr": 3015, + "head": "e244296debb45fe6f4da84d29e4d64fbab55fda0", + "path": "research/rank7-joint-endframes-restore-edit/certificates/RELAX-CAP.json", + "package_path": "certificates/R1-RELAX-CAP.json", + "git_blob": "41ec3a5f037dd64daade435a4c02468ecbdae524", + "sha256": "6380d23931bfcdf4bd2684dd19bb60db543f570bc88873f5effd53387beb28b0", + "bytes": 1760, + "role": "PR3015 Fractions-only fixed-capacity cap certificate of the R1 profile", + "author": "Jeremy Kothe (jeremykothe2)" + }, + { + "pr": 3015, + "head": "e244296debb45fe6f4da84d29e4d64fbab55fda0", + "path": "research/rank7-joint-endframes-restore-edit/CLAIM.json", + "package_path": "comparators/PR3015-CLAIM.json", + "git_blob": "70813f559e2878f0c5403c0b859eefe602f70abc", + "sha256": "f9b9fbaaac794c0ce279c238a33a2f34f8c91a34d97ccdeb5ec98b7b8ba56d73", + "bytes": 7138, + "role": "PR3015 released headline (moment-auditor baseline)", + "author": "Jeremy Kothe (jeremykothe2)" + }, + { + "pr": 3015, + "head": "e244296debb45fe6f4da84d29e4d64fbab55fda0", + "path": "research/rank7-joint-endframes-restore-edit/allocation/PROFILE.json", + "package_path": "comparators/PR3015-PROFILE.json", + "git_blob": "05766f448600d2f94699f42818aa8150f49fd934", + "sha256": "5626c44edd6d5b209cd4e2d2a824e07bfba696e0856f3964b81fcb01c78eaad8", + "bytes": 104, + "role": "PR3015 literal T74 complete profile (moment-auditor baseline)", + "author": "Jeremy Kothe (jeremykothe2)" + }, + { + "pr": 3021, + "head": "217edac2ebfa6250536bd6df153de14901a69395", + "path": "research/rank7-restore-packing-composition/evidence/OUTER-CLAIM.json", + "package_path": "comparators/PR3021-OUTER-CLAIM.json", + "git_blob": "a8d657563624b98d8bb238878a6c20fa74a1f593", + "sha256": "8beb062c36169728a8f82a5eda6638c2a83125f16e7e5de56f3a13d9cba5e1f5", + "bytes": 2141, + "role": "PR3021 released headline (best open claim at submission)", + "author": "Nick Petalas (petalas)" + } + ] +} diff --git a/research/rank7-r1-t740-cap/VERIFY.json b/research/rank7-r1-t740-cap/VERIFY.json new file mode 100644 index 0000000000..620c2ffd85 --- /dev/null +++ b/research/rank7-r1-t740-cap/VERIFY.json @@ -0,0 +1,41 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/rank7-joint-endframes/CLAIM.json", + "research/rank7-joint-endframes/allocation/DISPATCH.json", + "research/rank7-joint-endframes/allocation/FILL.json.gz", + "research/rank7-joint-endframes/allocation/ORDER.json", + "research/rank7-joint-endframes/allocation/PROVIDERS.json", + "research/rank7-joint-endframes/allocation/vendor/PLAN.json.gz", + "research/rank7-joint-endframes/allocation/vendor/TEMPLATE.json.gz", + "research/rank7-joint-endframes/allocation/vendor/independent_owners.py", + "research/rank7-joint-endframes/tools/audit_allocation_moment.py", + "research/rank7-joint-endframes/tools/relax.py", + "research/rank7-joint-endframes/tools/relax_exact.py", + "research/rank7-joint-endframes/tools/root.py", + "research/rank7-joint-endframes/vendor/preload_move.py" + ], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 400, + "checks": "Live PR2979 input pins and vendored PR3015/PR3021 pins; providers re-derived from PR3015's R1 words; deterministic T740 rebuild (lift.py) with pinned canonical payload SHA-256; PR2979's vendored owner engine on all 2,717,280 roles with the claimed complete profile; physical stock 663,549; PR3015's R1 cap certificate re-verified; exact fixed counts on the optimal face (20 | T); idle histogram = 740 x optimal basic idle profile; every bin pattern tight; root bracket = R1 cap bracket; dyadic moment auditor re-pinned to PR3015's headline (strict gain); exact strict gain over PR3021; CLAIM.json binding." + }, + { + "argv": [ + "{python}", + "-B", + "{package}/controls.py" + ], + "timeout_seconds": 600, + "checks": "Seven failure controls: bare lift (valid, PR3015's root, below the cap); dropped chain link, window violation, same-call family collision and stale profile rejected by the owner engine; tampered relocations fail the payload pin; wrong moment baseline rejected." + } + ] +} diff --git a/research/rank7-r1-t740-cap/allocation/EXPECTED.json b/research/rank7-r1-t740-cap/allocation/EXPECTED.json new file mode 100644 index 0000000000..6c00d2ee9d --- /dev/null +++ b/research/rank7-r1-t740-cap/allocation/EXPECTED.json @@ -0,0 +1,15 @@ +{ + "calls": 6660, + "payload_convention": "SHA-256 of json.dumps(obj, sort_keys=True, separators=(\",\", \":\")) + \"\\n\" (uncompressed), as lift.canonical", + "payload_sha256": { + "DISPATCH.json": "90edc935320dd6264e98dc735d868df3c95f5901c70d7d96171001fcb295cce0", + "FILL.json.gz": "b56bfed2c542e63f4139e8e3ebb9fe0c979a3bab1ba6a934e2113f40f5c7e0f0", + "ORDER.json": "927226d702bf3cada076f4c459da9063c0df7e7154a62955cf75c40cf30215b9", + "PROFILE.json": "83130e5231b3693c2af871c430833601de83fdd8851c024df4f78efc76c8deef" + }, + "physical": 663549, + "relocations": 332, + "replicas": 740, + "roles": 2717280, + "touched_bins": 263 +} diff --git a/research/rank7-r1-t740-cap/allocation/PROFILE.json b/research/rank7-r1-t740-cap/allocation/PROFILE.json new file mode 100644 index 0000000000..0345ea9df8 --- /dev/null +++ b/research/rank7-r1-t740-cap/allocation/PROFILE.json @@ -0,0 +1,9 @@ +{ + "1": 16443540, + "2": 4708620, + "3": 1594737, + "4": 719280, + "5": 137085, + "8": 53280, + "48": 281903 +} diff --git a/research/rank7-r1-t740-cap/allocation/RELOCATIONS.json b/research/rank7-r1-t740-cap/allocation/RELOCATIONS.json new file mode 100644 index 0000000000..81a0c2be3d --- /dev/null +++ b/research/rank7-r1-t740-cap/allocation/RELOCATIONS.json @@ -0,0 +1 @@ +[[500,53,407,4,3],[500,58,416,6,4],[500,69,302,4,90],[500,74,38,6,84],[500,83,704,6,56],[500,85,223,4,82],[500,90,482,4,68],[500,99,487,4,71],[500,101,372,6,68],[500,106,598,4,53],[500,113,120,4,100],[500,115,224,4,25],[500,117,520,6,30],[500,122,704,6,71],[500,129,712,6,10],[500,131,446,6,11],[500,133,298,6,45],[500,138,490,4,58],[500,145,342,6,17],[500,147,705,4,33],[500,149,305,6,6],[500,154,39,6,44],[500,161,593,6,75],[500,163,672,4,31],[500,165,2,4,1],[500,170,231,6,7],[501,129,601,6,76],[501,131,39,4,46],[501,133,631,6,45],[501,138,334,6,72],[501,145,75,6,25],[501,147,630,6,36],[501,149,446,6,34],[501,154,445,6,36],[501,161,712,6,37],[501,163,334,6,57],[501,165,379,4,5],[501,170,191,4,49],[1480,58,606,4,36],[1480,69,495,4,16],[1480,74,604,4,13],[1480,83,234,4,4],[1480,85,123,4,11],[1480,90,532,4,18],[1480,99,384,4,16],[1480,101,234,4,0],[1480,106,495,4,22],[1480,113,236,4,8],[1480,115,86,4,2],[1480,117,530,4,4],[1480,122,14,4,2],[1480,129,310,4,36],[1480,131,12,4,7],[1480,133,421,4,15],[1480,138,199,4,32],[3260,53,26,4,101],[3261,53,100,4,101],[3262,53,26,4,95],[3263,53,26,4,98],[3264,53,100,4,98],[3265,53,26,4,109],[3266,53,26,6,3],[3267,53,26,4,99],[3268,53,26,4,92],[3269,53,26,4,94],[3270,53,100,4,99],[3271,53,26,4,108],[3272,53,26,4,93],[3273,53,100,4,95],[3274,53,26,4,103],[3275,53,26,4,107],[3276,53,26,6,2],[3277,53,100,4,94],[3278,53,100,4,96],[3279,53,26,4,96],[3540,53,26,4,106],[3540,58,26,4,105],[3540,69,26,4,104],[3540,74,26,4,102],[3540,83,26,4,100],[3540,85,26,4,97],[3541,53,26,6,5],[3541,58,26,6,4],[3541,69,26,6,1],[3541,74,26,6,0],[3541,83,26,4,111],[3541,85,26,4,110],[3542,53,100,4,103],[3542,58,100,4,102],[3542,69,100,4,100],[3542,74,100,4,97],[3542,83,100,4,93],[3542,85,100,4,92],[4189,218,171,13,111],[4190,218,615,13,111],[4320,106,30,4,105],[4320,113,30,4,104],[4320,115,30,4,103],[4320,117,30,4,102],[4320,122,30,4,101],[4320,129,30,4,100],[4320,131,30,4,99],[4320,133,30,4,98],[4320,138,30,4,97],[4320,145,30,4,96],[4320,147,30,4,95],[4320,149,30,4,94],[4320,154,30,4,93],[4320,161,30,4,92],[4320,163,30,4,91],[4320,165,30,4,90],[4320,170,30,4,89],[4891,0,294,13,111],[4951,0,470,13,111],[4971,0,60,13,111],[4972,0,652,13,111],[4973,0,578,13,111],[4974,0,507,13,111],[4975,0,504,13,111],[4976,0,393,13,111],[4977,0,430,13,111],[4978,0,356,13,111],[4979,0,541,13,111],[5105,206,256,13,82],[5106,206,256,13,82],[5107,206,256,13,82],[5108,206,256,13,82],[5109,206,256,13,82],[5110,206,315,12,17],[5111,206,315,12,17],[5112,206,315,12,17],[5113,206,315,12,17],[5114,206,315,12,17],[5115,206,540,12,3],[5116,206,540,12,3],[5117,206,540,12,3],[5118,206,540,12,3],[5119,206,540,12,3],[5165,12,329,8,20],[5166,12,329,8,20],[5167,12,329,8,20],[5168,12,329,8,20],[5169,12,329,8,20],[5170,12,647,12,86],[5171,12,647,12,86],[5172,12,647,12,86],[5173,12,647,12,86],[5174,12,647,12,86],[5175,12,92,12,81],[5176,12,92,12,81],[5177,12,92,12,81],[5178,12,92,12,81],[5179,12,92,12,81],[5305,0,622,10,83],[5306,0,622,10,83],[5307,0,622,10,83],[5308,0,622,10,83],[5309,0,622,10,83],[5310,0,464,12,101],[5311,0,464,12,101],[5312,0,464,12,101],[5313,0,464,12,101],[5314,0,464,12,101],[5315,0,244,13,88],[5316,0,244,13,88],[5317,0,244,13,88],[5318,0,244,13,88],[5319,0,244,13,88],[5369,66,331,13,111],[5370,66,208,13,111],[5391,0,245,13,111],[5491,0,97,13,111],[5492,0,319,13,111],[5493,0,282,13,111],[5494,0,322,13,111],[5495,0,467,13,111],[5496,0,581,13,111],[5497,0,134,13,111],[5498,0,359,13,111],[5499,0,23,13,111],[5540,74,167,15,54],[5541,74,93,15,55],[5542,74,19,15,58],[5543,74,167,15,58],[5544,74,167,15,53],[5545,74,19,15,54],[5546,74,19,15,53],[5547,74,93,15,56],[5548,74,19,15,56],[5549,74,26,14,0],[5550,74,174,14,0],[5551,74,167,15,57],[5552,74,93,15,53],[5553,74,167,15,55],[5554,74,19,15,57],[5555,74,167,15,56],[5556,74,93,15,58],[5557,74,93,15,54],[5558,74,93,15,57],[5559,74,19,15,55],[5580,2,729,14,0],[5581,2,655,14,0],[5582,2,581,14,0],[5583,2,581,14,0],[5584,2,581,14,0],[5585,2,359,14,0],[5586,2,285,14,0],[5587,2,285,14,0],[5588,2,211,14,0],[5589,2,137,14,0],[5590,2,63,14,0],[5591,2,63,14,0],[5592,2,692,14,0],[5593,2,618,14,0],[5594,2,618,14,0],[5595,2,544,14,0],[5596,2,470,14,0],[5597,2,470,14,0],[5598,2,470,14,0],[5599,2,396,14,0],[5689,340,627,13,111],[5690,340,72,13,111],[5720,406,692,14,0],[5720,407,433,14,0],[5721,406,211,14,0],[5721,407,396,14,0],[5722,406,359,14,0],[5722,407,655,14,0],[5723,406,396,14,0],[5723,407,507,14,0],[5724,406,692,14,0],[5724,407,544,14,0],[5725,406,507,14,0],[5725,407,285,14,0],[5726,406,507,14,0],[5726,407,137,14,0],[5727,406,137,14,0],[5727,407,507,14,0],[5728,406,433,14,0],[5728,407,729,14,0],[5729,406,729,14,0],[5729,407,655,14,0],[5730,406,729,14,0],[5730,407,544,14,0],[5731,406,396,14,0],[5731,407,285,14,0],[5732,406,211,14,0],[5732,407,655,14,0],[5733,406,544,14,0],[5733,407,618,14,0],[5734,406,359,14,0],[5734,407,433,14,0],[5735,406,470,14,0],[5735,407,359,14,0],[5736,406,63,14,0],[5736,407,137,14,0],[5737,406,211,14,0],[5737,407,692,14,0],[5738,406,63,14,0],[5738,407,618,14,0],[5739,406,433,14,0],[5739,407,581,14,0],[5909,0,726,13,111],[5910,0,689,13,111],[6000,165,23,15,8],[6001,165,23,15,5],[6002,165,23,15,12],[6003,165,23,15,14],[6004,165,322,14,0],[6005,165,23,15,18],[6006,165,23,15,9],[6007,165,23,15,13],[6008,165,23,15,3],[6009,165,23,15,19],[6010,165,100,14,0],[6011,165,248,14,0],[6012,165,23,15,6],[6013,165,23,15,4],[6014,165,23,15,15],[6015,165,23,15,11],[6016,165,23,15,16],[6017,165,23,15,17],[6018,165,23,15,7],[6019,165,23,15,10],[6151,340,137,13,111],[6152,340,590,13,111],[6153,340,285,13,111],[6154,340,26,13,111],[6155,340,655,13,111],[6156,340,100,13,111],[6157,340,211,13,111],[6158,340,174,13,111],[6159,340,729,13,111],[6191,340,248,13,111],[6192,340,433,13,111],[6193,340,368,13,111],[6194,340,553,13,111],[6195,340,442,13,111],[6196,340,544,13,111],[6197,340,35,13,111],[6198,340,220,13,111],[6199,340,618,13,111],[6251,1,396,13,111],[6460,385,623,14,0],[6461,385,401,14,0],[6462,385,216,14,0],[6463,385,364,14,0],[6464,385,179,14,0],[6465,385,660,14,0],[6466,385,697,14,0],[6467,385,290,14,0],[6468,385,253,14,0],[6469,385,734,14,0],[6470,385,105,14,0],[6471,385,31,14,0],[6472,385,475,14,0],[6473,385,327,14,0],[6474,385,438,14,0],[6475,385,142,14,0],[6476,385,512,14,0],[6477,385,586,14,0],[6478,385,549,14,0],[6479,385,68,14,0],[6611,1,701,13,111],[6612,1,405,13,111],[6613,1,516,13,111],[6614,1,257,13,111],[6615,1,183,13,111],[6616,1,738,13,111],[6617,1,479,13,111],[6618,1,664,13,111],[6619,1,109,13,111]] diff --git a/research/rank7-r1-t740-cap/certificates/R1-RELAX-CAP.json b/research/rank7-r1-t740-cap/certificates/R1-RELAX-CAP.json new file mode 100644 index 0000000000..41ec3a5f03 --- /dev/null +++ b/research/rank7-r1-t740-cap/certificates/R1-RELAX-CAP.json @@ -0,0 +1,124 @@ +{ + "basis_patterns": [ + { + "capacity": 8, + "count_per_replica": "672", + "widths": [ + 8 + ] + }, + { + "capacity": 32, + "count_per_replica": "115/4", + "widths": [ + 7, + 8, + 8, + 9 + ] + }, + { + "capacity": 32, + "count_per_replica": "234", + "widths": [ + 4, + 9, + 9, + 9 + ] + }, + { + "capacity": 48, + "count_per_replica": "1341/20", + "widths": [ + 9, + 9, + 9, + 9, + 9 + ] + }, + { + "capacity": 32, + "count_per_replica": "93/4", + "widths": [ + 9, + 9, + 9 + ] + }, + { + "capacity": 32, + "count_per_replica": "144", + "widths": [ + 6, + 8, + 9, + 9 + ] + }, + { + "capacity": 32, + "count_per_replica": "18", + "widths": [ + 5, + 9, + 9, + 9 + ] + }, + { + "capacity": 16, + "count_per_replica": "35/4", + "widths": [ + 8, + 8 + ] + }, + { + "capacity": 16, + "count_per_replica": "1757/4", + "widths": [ + 7, + 9 + ] + }, + { + "capacity": 48, + "count_per_replica": "7619/20", + "widths": [] + } + ], + "cap_lower": "345830551200866186907/200000000000000000000000", + "cap_lower_decimal": "0.001729152756004330934535", + "cap_upper": "17291527560043309345351/10000000000000000000000000", + "cap_upper_decimal": "0.0017291527560043309345351", + "idle_per_replica": { + "1": "234", + "3": "1341/20", + "48": "7619/20", + "5": "93/4" + }, + "inventory_per_call": { + "4": 26, + "5": 2, + "6": 16, + "7": 52, + "8": 99, + "9": 213 + }, + "local_per_call": { + "1": 2443, + "2": 707, + "3": 232, + "4": 108, + "5": 18, + "8": 8 + }, + "patterns": 2551, + "rank_mass_identity": true, + "scenario": "final words of PR2979 plus declared restore edit list (R1, Stack2979)", + "status": "PASS_EXACT_RELAXATION_CAP", + "strict_patterns": 2539, + "tight_patterns": 12 +} diff --git a/research/rank7-r1-t740-cap/comparators/PR3015-CLAIM.json b/research/rank7-r1-t740-cap/comparators/PR3015-CLAIM.json new file mode 100644 index 0000000000..70813f559e --- /dev/null +++ b/research/rank7-r1-t740-cap/comparators/PR3015-CLAIM.json @@ -0,0 +1,229 @@ +{ + "admitted_package_manifest_sha256": "75a1536a7eaafa59c553d62c0ec8ce9a0b68f7365ecadea590ab85c7a78e0c1b", + "baseline_head": "e2ca469b08385d3d5e29a918d66dbefaf889e9f3", + "baseline_kappa": "17240352247481048785499999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "baseline_pr": 2969, + "baseline_status": "FINITE_NATIVE_OWNER_AND_MOMENT_CANDIDATE_OUTER_PENDING", + "calls": 666, + "complex_lower": "345830194706844885739/200000000000000000000000", + "declared_edits": { + "count": 1, + "edits_sha256": "c9c68660d07bfd12ed20fd8cbfe3d36301ceb2d7bb9b4ea11350cc399b19e0b1", + "previous_kappa": "0.0017290339826465135177169999999999999999999998999999999999999999999999", + "previous_pr": 2979 + }, + "fill_sha256": "c2136be9434cda511a1a8a44d98f9f72ea5376830a8426674253b4ee351c4c39", + "fixed_inventory_cap": { + "cap_lower": "345830551200866186907/200000000000000000000000", + "cap_upper": "17291527560043309345351/10000000000000000000000000", + "realized": "below the fractional optimum by the recorded gap (check_cap.py); the cap basis is fractional at T74" + }, + "gain": "1023149757223910029/200000000000000000000000", + "helpers": 408, + "independent_inputs": 632, + "kappa": "17291509735342244286949999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "kappa_decimal": "0.0017291509735342244286949999999999999999999998999999999999999999999999", + "live_families": 66304, + "local_profile": { + "1": 2443, + "2": 707, + "3": 232, + "4": 108, + "5": 18, + "8": 8 + }, + "native_receipt_sha256": "bc03c643a2209ec74f6efe9f74c29d7a1836b1be4b6bfe6e9ee5f3d82c01d19c", + "physical_families": 66813, + "previous_claims": { + "pr2942": { + "claim_file": "comparators/PR2942-CLAIM.json", + "gain": "6334653671010100699/1000000000000000000000000", + "head": "a027b0f6fdb0ab2b42ba10fc31b53960166bf2bf", + "kappa": "17228163198632143279959999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "pr": 2942 + }, + "pr2957": { + "claim_file": "comparators/PR2957-CLAIM.json", + "gain": "1358389615871564431/250000000000000000000000", + "head": "b74b25f3ccc84c16e1a801d73b2f47e5ea764c78", + "kappa": "17237174150707381709709999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "pr": 2957 + }, + "pr2966": { + "claim_file": "comparators/PR2966-CLAIM.json", + "gain": "5116701010772251283/1000000000000000000000000", + "head": "e62d3eb9005117d82a9babcfa937ecc53237c490", + "kappa": "17240342725234521774119999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "pr": 2966 + }, + "pr2969": { + "claim_file": "allocation/baseline/CLAIM.json", + "gain": "1023149757223910029/200000000000000000000000", + "head": "e2ca469b08385d3d5e29a918d66dbefaf889e9f3", + "kappa": "17240352247481048785499999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "pr": 2969 + }, + "pr2979": { + "claim_file": "comparators/PR2979-CLAIM.json", + "gain": "58495443855455489/500000000000000000000000", + "head": "be191346391661f4d35fc0d1508d0a6029572576", + "kappa": "17290339826465135177169999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "pr": 2979 + } + }, + "profile": { + "1": 1644348, + "2": 470862, + "3": 159468, + "4": 71928, + "48": 28190, + "5": 13716, + "8": 5328 + }, + "release_receipt_sha256": "f6ddfdbbdd343cfd0a11e1d7b00cb9a8a6fbc9c7a64159b0d5abaf7de88cecf2", + "replicas": 74, + "scope": "Conditional finite supplier/outer certificate for PR2979's words (mdumitrean: joint rank-7 end frames, five further paired extractions, fourteen PR2957 rewrites) with one declared literal restore edit (R1, Stack2979 / Jeremy Kothe) and PR2979's literal T74 allocation unchanged (paid profile re-derived). Inherited all-size/compiler/theorem hypotheses remain. No selected-frontier change or independent-human-review claim.", + "source_manifest_sha256": "9215312229c431078ba61daf106edb8caf20b33f48317d46438a341552cf153f", + "stages": { + "stage1": { + "frame_edits": 139, + "groups": { + "A": { + "W": [ + 256, + 128, + 64, + 38, + 20, + 10, + 1 + ], + "helpers": [ + 331, + 450, + 451, + 508, + 509 + ] + }, + "B": { + "W": [ + 256, + 128, + 64, + 34, + 17, + 11, + 4 + ], + "helpers": [ + 299, + 448, + 449, + 484, + 485 + ] + }, + "C": { + "W": [ + 256, + 128, + 64, + 32, + 19, + 11, + 6 + ], + "helpers": [ + 452, + 453, + 532, + 533 + ] + }, + "D": { + "W": [ + 256, + 128, + 64, + 37, + 21, + 8, + 3 + ], + "helpers": [ + 454, + 455, + 556, + 557 + ] + }, + "V45": { + "W": [ + 256, + 128, + 64, + 35, + 16, + 11, + 5 + ], + "helpers": [ + 249, + 251, + 265, + 267 + ] + } + }, + "kind": "joint codimension-2 end-frame lowering (frame-only)", + "record_sha256": "5fbfce004330ebc1fbac8de264614fe295f1a074811b478db4892c3bc3852cd3" + }, + "stage2": { + "extractions": [ + { + "helper": 226, + "normal": 42, + "step": 1 + }, + { + "helper": 228, + "normal": 42, + "step": 2 + }, + { + "helper": 230, + "normal": 42, + "step": 3 + }, + { + "helper": 363, + "normal": 7, + "step": 4 + }, + { + "helper": 395, + "normal": 7, + "step": 5 + } + ], + "kind": "rank-8 paired input/output extractions" + }, + "stage3": { + "applier_sha256": "2509f1335e47543f8814b42d6bf83032b30c5899b4f7cc62a6adc03f5138ae13", + "count": 14, + "kind": "declared exactness-preserving gate rewrites (Jeremy Kothe, PR2957), re-addressed", + "rewrites_sha256": "a37ade675876e4f5b00b33066c84f495fccd264863b7eb5d813837b1d01c3e7d" + } + }, + "status": "CONDITIONAL_CANDIDATE_COMPLETE_FINITE_RELEASE", + "width_inventory": { + "4": 26, + "5": 2, + "6": 16, + "7": 52, + "8": 99, + "9": 213 + }, + "zero_buffers": 91 +} diff --git a/research/rank7-r1-t740-cap/comparators/PR3015-PROFILE.json b/research/rank7-r1-t740-cap/comparators/PR3015-PROFILE.json new file mode 100644 index 0000000000..05766f4486 --- /dev/null +++ b/research/rank7-r1-t740-cap/comparators/PR3015-PROFILE.json @@ -0,0 +1,9 @@ +{ + "1": 1644348, + "2": 470862, + "3": 159468, + "4": 71928, + "5": 13716, + "8": 5328, + "48": 28190 +} \ No newline at end of file diff --git a/research/rank7-r1-t740-cap/comparators/PR3021-OUTER-CLAIM.json b/research/rank7-r1-t740-cap/comparators/PR3021-OUTER-CLAIM.json new file mode 100644 index 0000000000..a8d6575636 --- /dev/null +++ b/research/rank7-r1-t740-cap/comparators/PR3021-OUTER-CLAIM.json @@ -0,0 +1,13 @@ +{ + "b": "certified complex_lower - 1e-104 (outer/B.json)", + "baseline_head": "e2ca469b08385d3d5e29a918d66dbefaf889e9f3", + "baseline_kappa": "17240352247481048785499999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "branch": "fine source-prime padding (PR1786, chafreaky; Trudgian's prime theorem; vendor/pr1786) with the gauge-free interiors (PR1758), the radix-distributed union schedule with per-visit tag work and the explicit Strassen boundary (tau=45/16); epsilon=1-1.0009765625e-3080 is a free parameter (outer/FINE-PADDING-COMPOSITION.md): kappa = C - 1/F - B, the fixed-grid maximum (epsilon q is 1.70e-3083 below q); the structured boundary of the previous package is not used; omega_C<=9/4 not used; recertified endpoint: the supplier native endpoint is certified to 1e-3000 (accept at the endpoint, reject at endpoint + 1e-3000, repaired fine engines in integer fixed point), and all free slacks are 1e-3080 or below", + "fixed_grid_maximum": "kappa=C-10^-70-10^-46 exactly; same fixed-grid-maximum proof at precision24.", + "gain": "159874351091048889/31250000000000000000000", + "kappa": "0.0017291512039830184429979999999999999999999998999999999999999999999999", + "kappa_rational": "17291512039830184429979999999999999999999998999999999999999999999999/10000000000000000000000000000000000000000000000000000000000000000000000", + "outer": "PR1673 capped phase-cell fusion (Vlado Vojdanovski)", + "retuned_slacks": "Endpoint precision24; free gaps follow outer/check_ledger.py from the frozen SPEC.", + "supplier": "PR1661 T74 pivot-566 stack with PR2226 anticipatory dirty borrowing, the PR2312 width exchange, frame refit and kernels, the PR2322 handoffs, the PR2435/PR2447 entrance raise, the PR2436 lifted-target aliases, and the PR2530 (zxv) eight source-partner aliases with an owner fill evacuated by the PR2559 (philippeVV) method; this package: six pre-life hostings (cold hosts 273, 275, 289, 291, 305, 321 host helpers 482, 483, 494, 495, 507, 519), a one-gate frame refit with the retired-lender alias 653<-563, and a new exact owner fill" +} diff --git a/research/rank7-r1-t740-cap/construction/CHAINS.json b/research/rank7-r1-t740-cap/construction/CHAINS.json new file mode 100644 index 0000000000..aeb5c0e8ae --- /dev/null +++ b/research/rank7-r1-t740-cap/construction/CHAINS.json @@ -0,0 +1 @@ +[{"step":"A","kind":"out","role":[5550,74],"bin":[63,13,111],"width":4},{"step":"A:end","kind":"in","role":[5550,74],"bin":[174,14,0],"width":4},{"step":"A","kind":"out","role":[5549,74],"bin":[692,13,111],"width":4},{"step":"A:end","kind":"in","role":[5549,74],"bin":[26,14,0],"width":4},{"step":"A","kind":"out","role":[6011,165],"bin":[146,13,111],"width":4},{"step":"A:end","kind":"in","role":[6011,165],"bin":[248,14,0],"width":4},{"step":"A","kind":"out","role":[3268,53],"bin":[615,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,170],"bin":[26,4,92],"width":4},{"step":"A:hop0","kind":"in","role":[3268,53],"bin":[26,4,92],"width":4},{"step":"A:end","kind":"in","role":[500,170],"bin":[231,6,7],"width":4},{"step":"A","kind":"out","role":[3272,53],"bin":[208,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,165],"bin":[26,4,93],"width":4},{"step":"A:hop0","kind":"in","role":[3272,53],"bin":[26,4,93],"width":4},{"step":"A:end","kind":"in","role":[500,165],"bin":[2,4,1],"width":4},{"step":"A","kind":"out","role":[6010,165],"bin":[72,13,111],"width":4},{"step":"A:end","kind":"in","role":[6010,165],"bin":[100,14,0],"width":4},{"step":"A","kind":"out","role":[3269,53],"bin":[689,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,163],"bin":[26,4,94],"width":4},{"step":"A:hop0","kind":"in","role":[3269,53],"bin":[26,4,94],"width":4},{"step":"A:end","kind":"in","role":[500,163],"bin":[672,4,31],"width":4},{"step":"A","kind":"out","role":[3262,53],"bin":[171,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,161],"bin":[26,4,95],"width":4},{"step":"A:hop0","kind":"in","role":[3262,53],"bin":[26,4,95],"width":4},{"step":"A:end","kind":"in","role":[500,161],"bin":[593,6,75],"width":4},{"step":"A","kind":"out","role":[6004,165],"bin":[331,13,111],"width":4},{"step":"A:end","kind":"in","role":[6004,165],"bin":[322,14,0],"width":4},{"step":"A","kind":"out","role":[6008,165],"bin":[627,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,170],"bin":[23,15,3],"width":4},{"step":"A:hop0","kind":"in","role":[6008,165],"bin":[23,15,3],"width":4},{"step":"A:hop1","kind":"out","role":[1480,138],"bin":[30,4,89],"width":4},{"step":"A:hop1","kind":"in","role":[4320,170],"bin":[30,4,89],"width":4},{"step":"A:end","kind":"in","role":[1480,138],"bin":[199,4,32],"width":4},{"step":"A","kind":"out","role":[3279,53],"bin":[726,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,154],"bin":[26,4,96],"width":4},{"step":"A:hop0","kind":"in","role":[3279,53],"bin":[26,4,96],"width":4},{"step":"A:end","kind":"in","role":[500,154],"bin":[39,6,44],"width":4},{"step":"A","kind":"out","role":[6013,165],"bin":[294,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,165],"bin":[23,15,4],"width":4},{"step":"A:hop0","kind":"in","role":[6013,165],"bin":[23,15,4],"width":4},{"step":"A:hop1","kind":"out","role":[1480,133],"bin":[30,4,90],"width":4},{"step":"A:hop1","kind":"in","role":[4320,165],"bin":[30,4,90],"width":4},{"step":"A:end","kind":"in","role":[1480,133],"bin":[421,4,15],"width":4},{"step":"A","kind":"out","role":[5546,74],"bin":[470,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3540,85],"bin":[19,15,53],"width":4},{"step":"A:hop0","kind":"in","role":[5546,74],"bin":[19,15,53],"width":4},{"step":"A:hop1","kind":"out","role":[500,149],"bin":[26,4,97],"width":4},{"step":"A:hop1","kind":"in","role":[3540,85],"bin":[26,4,97],"width":4},{"step":"A:end","kind":"in","role":[500,149],"bin":[305,6,6],"width":4},{"step":"A","kind":"out","role":[3263,53],"bin":[245,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,147],"bin":[26,4,98],"width":4},{"step":"A:hop0","kind":"in","role":[3263,53],"bin":[26,4,98],"width":4},{"step":"A:end","kind":"in","role":[500,147],"bin":[705,4,33],"width":4},{"step":"A","kind":"out","role":[3267,53],"bin":[541,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,145],"bin":[26,4,99],"width":4},{"step":"A:hop0","kind":"in","role":[3267,53],"bin":[26,4,99],"width":4},{"step":"A:end","kind":"in","role":[500,145],"bin":[342,6,17],"width":4},{"step":"A","kind":"out","role":[5545,74],"bin":[396,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3540,83],"bin":[19,15,54],"width":4},{"step":"A:hop0","kind":"in","role":[5545,74],"bin":[19,15,54],"width":4},{"step":"A:hop1","kind":"out","role":[500,138],"bin":[26,4,100],"width":4},{"step":"A:hop1","kind":"in","role":[3540,83],"bin":[26,4,100],"width":4},{"step":"A:end","kind":"in","role":[500,138],"bin":[490,4,58],"width":4},{"step":"A","kind":"out","role":[3260,53],"bin":[23,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,133],"bin":[26,4,101],"width":4},{"step":"A:hop0","kind":"in","role":[3260,53],"bin":[26,4,101],"width":4},{"step":"A:end","kind":"in","role":[500,133],"bin":[298,6,45],"width":4},{"step":"A","kind":"out","role":[5559,74],"bin":[729,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3540,74],"bin":[19,15,55],"width":4},{"step":"A:hop0","kind":"in","role":[5559,74],"bin":[19,15,55],"width":4},{"step":"A:hop1","kind":"out","role":[500,131],"bin":[26,4,102],"width":4},{"step":"A:hop1","kind":"in","role":[3540,74],"bin":[26,4,102],"width":4},{"step":"A:end","kind":"in","role":[500,131],"bin":[446,6,11],"width":4},{"step":"A","kind":"out","role":[3274,53],"bin":[356,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,129],"bin":[26,4,103],"width":4},{"step":"A:hop0","kind":"in","role":[3274,53],"bin":[26,4,103],"width":4},{"step":"A:end","kind":"in","role":[500,129],"bin":[712,6,10],"width":4},{"step":"A","kind":"out","role":[5548,74],"bin":[618,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3540,69],"bin":[19,15,56],"width":4},{"step":"A:hop0","kind":"in","role":[5548,74],"bin":[19,15,56],"width":4},{"step":"A:hop1","kind":"out","role":[500,122],"bin":[26,4,104],"width":4},{"step":"A:hop1","kind":"in","role":[3540,69],"bin":[26,4,104],"width":4},{"step":"A:end","kind":"in","role":[500,122],"bin":[704,6,71],"width":4},{"step":"A","kind":"out","role":[5554,74],"bin":[359,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3540,58],"bin":[19,15,57],"width":4},{"step":"A:hop0","kind":"in","role":[5554,74],"bin":[19,15,57],"width":4},{"step":"A:hop1","kind":"out","role":[500,117],"bin":[26,4,105],"width":4},{"step":"A:hop1","kind":"in","role":[3540,58],"bin":[26,4,105],"width":4},{"step":"A:end","kind":"in","role":[500,117],"bin":[520,6,30],"width":4},{"step":"A","kind":"out","role":[5542,74],"bin":[174,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3540,53],"bin":[19,15,58],"width":4},{"step":"A:hop0","kind":"in","role":[5542,74],"bin":[19,15,58],"width":4},{"step":"A:hop1","kind":"out","role":[500,115],"bin":[26,4,106],"width":4},{"step":"A:hop1","kind":"in","role":[3540,53],"bin":[26,4,106],"width":4},{"step":"A:end","kind":"in","role":[500,115],"bin":[224,4,25],"width":4},{"step":"A","kind":"out","role":[3275,53],"bin":[430,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,113],"bin":[26,4,107],"width":4},{"step":"A:hop0","kind":"in","role":[3275,53],"bin":[26,4,107],"width":4},{"step":"A:end","kind":"in","role":[500,113],"bin":[120,4,100],"width":4},{"step":"A","kind":"out","role":[6001,165],"bin":[109,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,163],"bin":[23,15,5],"width":4},{"step":"A:hop0","kind":"in","role":[6001,165],"bin":[23,15,5],"width":4},{"step":"A:hop1","kind":"out","role":[1480,131],"bin":[30,4,91],"width":4},{"step":"A:hop1","kind":"in","role":[4320,163],"bin":[30,4,91],"width":4},{"step":"A:end","kind":"in","role":[1480,131],"bin":[12,4,7],"width":4},{"step":"A","kind":"out","role":[6012,165],"bin":[220,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,161],"bin":[23,15,6],"width":4},{"step":"A:hop0","kind":"in","role":[6012,165],"bin":[23,15,6],"width":4},{"step":"A:hop1","kind":"out","role":[1480,129],"bin":[30,4,92],"width":4},{"step":"A:hop1","kind":"in","role":[4320,161],"bin":[30,4,92],"width":4},{"step":"A:end","kind":"in","role":[1480,129],"bin":[310,4,36],"width":4},{"step":"A","kind":"out","role":[6018,165],"bin":[664,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,154],"bin":[23,15,7],"width":4},{"step":"A:hop0","kind":"in","role":[6018,165],"bin":[23,15,7],"width":4},{"step":"A:hop1","kind":"out","role":[1480,122],"bin":[30,4,93],"width":4},{"step":"A:hop1","kind":"in","role":[4320,154],"bin":[30,4,93],"width":4},{"step":"A:end","kind":"in","role":[1480,122],"bin":[14,4,2],"width":4},{"step":"A","kind":"out","role":[3271,53],"bin":[134,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,106],"bin":[26,4,108],"width":4},{"step":"A:hop0","kind":"in","role":[3271,53],"bin":[26,4,108],"width":4},{"step":"A:end","kind":"in","role":[500,106],"bin":[598,4,53],"width":4},{"step":"A","kind":"out","role":[3265,53],"bin":[393,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,101],"bin":[26,4,109],"width":4},{"step":"A:hop0","kind":"in","role":[3265,53],"bin":[26,4,109],"width":4},{"step":"A:end","kind":"in","role":[500,101],"bin":[372,6,68],"width":4},{"step":"A","kind":"out","role":[5552,74],"bin":[211,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3541,85],"bin":[93,15,53],"width":4},{"step":"A:hop0","kind":"in","role":[5552,74],"bin":[93,15,53],"width":4},{"step":"A:hop1","kind":"out","role":[500,99],"bin":[26,4,110],"width":4},{"step":"A:hop1","kind":"in","role":[3541,85],"bin":[26,4,110],"width":4},{"step":"A:end","kind":"in","role":[500,99],"bin":[487,4,71],"width":4},{"step":"A","kind":"out","role":[6000,165],"bin":[35,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,149],"bin":[23,15,8],"width":4},{"step":"A:hop0","kind":"in","role":[6000,165],"bin":[23,15,8],"width":4},{"step":"A:hop1","kind":"out","role":[1480,117],"bin":[30,4,94],"width":4},{"step":"A:hop1","kind":"in","role":[4320,149],"bin":[30,4,94],"width":4},{"step":"A:end","kind":"in","role":[1480,117],"bin":[530,4,4],"width":4},{"step":"A","kind":"out","role":[5557,74],"bin":[581,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3541,83],"bin":[93,15,54],"width":4},{"step":"A:hop0","kind":"in","role":[5557,74],"bin":[93,15,54],"width":4},{"step":"A:hop1","kind":"out","role":[500,90],"bin":[26,4,111],"width":4},{"step":"A:hop1","kind":"in","role":[3541,83],"bin":[26,4,111],"width":4},{"step":"A:end","kind":"in","role":[500,90],"bin":[482,4,68],"width":4},{"step":"A","kind":"out","role":[5541,74],"bin":[100,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3541,74],"bin":[93,15,55],"width":4},{"step":"A:hop0","kind":"in","role":[5541,74],"bin":[93,15,55],"width":4},{"step":"A:hop1","kind":"out","role":[500,85],"bin":[26,6,0],"width":4},{"step":"A:hop1","kind":"in","role":[3541,74],"bin":[26,6,0],"width":4},{"step":"A:end","kind":"in","role":[500,85],"bin":[223,4,82],"width":4},{"step":"A","kind":"out","role":[5547,74],"bin":[544,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3541,69],"bin":[93,15,56],"width":4},{"step":"A:hop0","kind":"in","role":[5547,74],"bin":[93,15,56],"width":4},{"step":"A:hop1","kind":"out","role":[500,83],"bin":[26,6,1],"width":4},{"step":"A:hop1","kind":"in","role":[3541,69],"bin":[26,6,1],"width":4},{"step":"A:end","kind":"in","role":[500,83],"bin":[704,6,56],"width":4},{"step":"A","kind":"out","role":[3276,53],"bin":[504,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,74],"bin":[26,6,2],"width":4},{"step":"A:hop0","kind":"in","role":[3276,53],"bin":[26,6,2],"width":4},{"step":"A:end","kind":"in","role":[500,74],"bin":[38,6,84],"width":4},{"step":"A","kind":"out","role":[6006,165],"bin":[479,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,147],"bin":[23,15,9],"width":4},{"step":"A:hop0","kind":"in","role":[6006,165],"bin":[23,15,9],"width":4},{"step":"A:hop1","kind":"out","role":[1480,115],"bin":[30,4,95],"width":4},{"step":"A:hop1","kind":"in","role":[4320,147],"bin":[30,4,95],"width":4},{"step":"A:end","kind":"in","role":[1480,115],"bin":[86,4,2],"width":4},{"step":"A","kind":"out","role":[3266,53],"bin":[467,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[500,69],"bin":[26,6,3],"width":4},{"step":"A:hop0","kind":"in","role":[3266,53],"bin":[26,6,3],"width":4},{"step":"A:end","kind":"in","role":[500,69],"bin":[302,4,90],"width":4},{"step":"A","kind":"out","role":[6019,165],"bin":[738,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,145],"bin":[23,15,10],"width":4},{"step":"A:hop0","kind":"in","role":[6019,165],"bin":[23,15,10],"width":4},{"step":"A:hop1","kind":"out","role":[1480,113],"bin":[30,4,96],"width":4},{"step":"A:hop1","kind":"in","role":[4320,145],"bin":[30,4,96],"width":4},{"step":"A:end","kind":"in","role":[1480,113],"bin":[236,4,8],"width":4},{"step":"A","kind":"out","role":[5558,74],"bin":[655,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3541,58],"bin":[93,15,57],"width":4},{"step":"A:hop0","kind":"in","role":[5558,74],"bin":[93,15,57],"width":4},{"step":"A:hop1","kind":"out","role":[500,58],"bin":[26,6,4],"width":4},{"step":"A:hop1","kind":"in","role":[3541,58],"bin":[26,6,4],"width":4},{"step":"A:end","kind":"in","role":[500,58],"bin":[416,6,4],"width":4},{"step":"A","kind":"out","role":[6015,165],"bin":[442,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,138],"bin":[23,15,11],"width":4},{"step":"A:hop0","kind":"in","role":[6015,165],"bin":[23,15,11],"width":4},{"step":"A:hop1","kind":"out","role":[1480,106],"bin":[30,4,97],"width":4},{"step":"A:hop1","kind":"in","role":[4320,138],"bin":[30,4,97],"width":4},{"step":"A:end","kind":"in","role":[1480,106],"bin":[495,4,22],"width":4},{"step":"A","kind":"out","role":[5556,74],"bin":[507,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3541,53],"bin":[93,15,58],"width":4},{"step":"A:hop0","kind":"in","role":[5556,74],"bin":[93,15,58],"width":4},{"step":"A:hop1","kind":"out","role":[500,53],"bin":[26,6,5],"width":4},{"step":"A:hop1","kind":"in","role":[3541,53],"bin":[26,6,5],"width":4},{"step":"A:end","kind":"in","role":[500,53],"bin":[407,4,3],"width":4},{"step":"A","kind":"out","role":[5544,74],"bin":[322,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3542,85],"bin":[167,15,53],"width":4},{"step":"A:hop0","kind":"in","role":[5544,74],"bin":[167,15,53],"width":4},{"step":"A:hop1","kind":"out","role":[501,170],"bin":[100,4,92],"width":4},{"step":"A:hop1","kind":"in","role":[3542,85],"bin":[100,4,92],"width":4},{"step":"A:end","kind":"in","role":[501,170],"bin":[191,4,49],"width":4},{"step":"A","kind":"out","role":[5540,74],"bin":[26,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3542,83],"bin":[167,15,54],"width":4},{"step":"A:hop0","kind":"in","role":[5540,74],"bin":[167,15,54],"width":4},{"step":"A:hop1","kind":"out","role":[501,165],"bin":[100,4,93],"width":4},{"step":"A:hop1","kind":"in","role":[3542,83],"bin":[100,4,93],"width":4},{"step":"A:end","kind":"in","role":[501,165],"bin":[379,4,5],"width":4},{"step":"A","kind":"out","role":[3277,53],"bin":[578,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[501,163],"bin":[100,4,94],"width":4},{"step":"A:hop0","kind":"in","role":[3277,53],"bin":[100,4,94],"width":4},{"step":"A:end","kind":"in","role":[501,163],"bin":[334,6,57],"width":4},{"step":"A","kind":"out","role":[6002,165],"bin":[183,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,133],"bin":[23,15,12],"width":4},{"step":"A:hop0","kind":"in","role":[6002,165],"bin":[23,15,12],"width":4},{"step":"A:hop1","kind":"out","role":[1480,101],"bin":[30,4,98],"width":4},{"step":"A:hop1","kind":"in","role":[4320,133],"bin":[30,4,98],"width":4},{"step":"A:end","kind":"in","role":[1480,101],"bin":[234,4,0],"width":4},{"step":"A","kind":"out","role":[6007,165],"bin":[553,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,131],"bin":[23,15,13],"width":4},{"step":"A:hop0","kind":"in","role":[6007,165],"bin":[23,15,13],"width":4},{"step":"A:hop1","kind":"out","role":[1480,99],"bin":[30,4,99],"width":4},{"step":"A:hop1","kind":"in","role":[4320,131],"bin":[30,4,99],"width":4},{"step":"A:end","kind":"in","role":[1480,99],"bin":[384,4,16],"width":4},{"step":"A","kind":"out","role":[3273,53],"bin":[282,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[501,161],"bin":[100,4,95],"width":4},{"step":"A:hop0","kind":"in","role":[3273,53],"bin":[100,4,95],"width":4},{"step":"A:end","kind":"in","role":[501,161],"bin":[712,6,37],"width":4},{"step":"A","kind":"out","role":[6003,165],"bin":[257,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,129],"bin":[23,15,14],"width":4},{"step":"A:hop0","kind":"in","role":[6003,165],"bin":[23,15,14],"width":4},{"step":"A:hop1","kind":"out","role":[1480,90],"bin":[30,4,100],"width":4},{"step":"A:hop1","kind":"in","role":[4320,129],"bin":[30,4,100],"width":4},{"step":"A:end","kind":"in","role":[1480,90],"bin":[532,4,18],"width":4},{"step":"A","kind":"out","role":[3278,53],"bin":[652,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[501,154],"bin":[100,4,96],"width":4},{"step":"A:hop0","kind":"in","role":[3278,53],"bin":[100,4,96],"width":4},{"step":"A:end","kind":"in","role":[501,154],"bin":[445,6,36],"width":4},{"step":"A","kind":"out","role":[5553,74],"bin":[285,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3542,74],"bin":[167,15,55],"width":4},{"step":"A:hop0","kind":"in","role":[5553,74],"bin":[167,15,55],"width":4},{"step":"A:hop1","kind":"out","role":[501,149],"bin":[100,4,97],"width":4},{"step":"A:hop1","kind":"in","role":[3542,74],"bin":[100,4,97],"width":4},{"step":"A:end","kind":"in","role":[501,149],"bin":[446,6,34],"width":4},{"step":"A","kind":"out","role":[3264,53],"bin":[319,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[501,147],"bin":[100,4,98],"width":4},{"step":"A:hop0","kind":"in","role":[3264,53],"bin":[100,4,98],"width":4},{"step":"A:end","kind":"in","role":[501,147],"bin":[630,6,36],"width":4},{"step":"A","kind":"out","role":[3270,53],"bin":[60,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[501,145],"bin":[100,4,99],"width":4},{"step":"A:hop0","kind":"in","role":[3270,53],"bin":[100,4,99],"width":4},{"step":"A:end","kind":"in","role":[501,145],"bin":[75,6,25],"width":4},{"step":"A","kind":"out","role":[6014,165],"bin":[368,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,122],"bin":[23,15,15],"width":4},{"step":"A:hop0","kind":"in","role":[6014,165],"bin":[23,15,15],"width":4},{"step":"A:hop1","kind":"out","role":[1480,85],"bin":[30,4,101],"width":4},{"step":"A:hop1","kind":"in","role":[4320,122],"bin":[30,4,101],"width":4},{"step":"A:end","kind":"in","role":[1480,85],"bin":[123,4,11],"width":4},{"step":"A","kind":"out","role":[6016,165],"bin":[516,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,117],"bin":[23,15,16],"width":4},{"step":"A:hop0","kind":"in","role":[6016,165],"bin":[23,15,16],"width":4},{"step":"A:hop1","kind":"out","role":[1480,83],"bin":[30,4,102],"width":4},{"step":"A:hop1","kind":"in","role":[4320,117],"bin":[30,4,102],"width":4},{"step":"A:end","kind":"in","role":[1480,83],"bin":[234,4,4],"width":4},{"step":"A","kind":"out","role":[6017,165],"bin":[590,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,115],"bin":[23,15,17],"width":4},{"step":"A:hop0","kind":"in","role":[6017,165],"bin":[23,15,17],"width":4},{"step":"A:hop1","kind":"out","role":[1480,74],"bin":[30,4,103],"width":4},{"step":"A:hop1","kind":"in","role":[4320,115],"bin":[30,4,103],"width":4},{"step":"A:end","kind":"in","role":[1480,74],"bin":[604,4,13],"width":4},{"step":"A","kind":"out","role":[5555,74],"bin":[433,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3542,69],"bin":[167,15,56],"width":4},{"step":"A:hop0","kind":"in","role":[5555,74],"bin":[167,15,56],"width":4},{"step":"A:hop1","kind":"out","role":[501,138],"bin":[100,4,100],"width":4},{"step":"A:hop1","kind":"in","role":[3542,69],"bin":[100,4,100],"width":4},{"step":"A:end","kind":"in","role":[501,138],"bin":[334,6,72],"width":4},{"step":"A","kind":"out","role":[6005,165],"bin":[405,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,113],"bin":[23,15,18],"width":4},{"step":"A:hop0","kind":"in","role":[6005,165],"bin":[23,15,18],"width":4},{"step":"A:hop1","kind":"out","role":[1480,69],"bin":[30,4,104],"width":4},{"step":"A:hop1","kind":"in","role":[4320,113],"bin":[30,4,104],"width":4},{"step":"A:end","kind":"in","role":[1480,69],"bin":[495,4,16],"width":4},{"step":"A","kind":"out","role":[3261,53],"bin":[97,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[501,133],"bin":[100,4,101],"width":4},{"step":"A:hop0","kind":"in","role":[3261,53],"bin":[100,4,101],"width":4},{"step":"A:end","kind":"in","role":[501,133],"bin":[631,6,45],"width":4},{"step":"A","kind":"out","role":[5551,74],"bin":[137,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3542,58],"bin":[167,15,57],"width":4},{"step":"A:hop0","kind":"in","role":[5551,74],"bin":[167,15,57],"width":4},{"step":"A:hop1","kind":"out","role":[501,131],"bin":[100,4,102],"width":4},{"step":"A:hop1","kind":"in","role":[3542,58],"bin":[100,4,102],"width":4},{"step":"A:end","kind":"in","role":[501,131],"bin":[39,4,46],"width":4},{"step":"A","kind":"out","role":[5543,74],"bin":[248,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[3542,53],"bin":[167,15,58],"width":4},{"step":"A:hop0","kind":"in","role":[5543,74],"bin":[167,15,58],"width":4},{"step":"A:hop1","kind":"out","role":[501,129],"bin":[100,4,103],"width":4},{"step":"A:hop1","kind":"in","role":[3542,53],"bin":[100,4,103],"width":4},{"step":"A:end","kind":"in","role":[501,129],"bin":[601,6,76],"width":4},{"step":"A","kind":"out","role":[6009,165],"bin":[701,13,111],"width":4},{"step":"A:hop0","kind":"out","role":[4320,106],"bin":[23,15,19],"width":4},{"step":"A:hop0","kind":"in","role":[6009,165],"bin":[23,15,19],"width":4},{"step":"A:hop1","kind":"out","role":[1480,58],"bin":[30,4,105],"width":4},{"step":"A:hop1","kind":"in","role":[4320,106],"bin":[30,4,105],"width":4},{"step":"A:end","kind":"in","role":[1480,58],"bin":[606,4,36],"width":4},{"step":"B","kind":"out","role":[5119,206],"bin":[729,14,0],"width":9},{"step":"B","kind":"out","role":[5179,12],"bin":[729,14,0],"width":9},{"step":"B","kind":"out","role":[5319,0],"bin":[729,14,0],"width":9},{"step":"B","kind":"out","role":[5118,206],"bin":[655,14,0],"width":9},{"step":"B","kind":"out","role":[5178,12],"bin":[655,14,0],"width":9},{"step":"B","kind":"out","role":[5318,0],"bin":[655,14,0],"width":9},{"step":"B","kind":"out","role":[5117,206],"bin":[581,14,0],"width":9},{"step":"B","kind":"out","role":[5177,12],"bin":[581,14,0],"width":9},{"step":"B","kind":"out","role":[5317,0],"bin":[581,14,0],"width":9},{"step":"B","kind":"out","role":[5116,206],"bin":[507,14,0],"width":9},{"step":"B","kind":"out","role":[5176,12],"bin":[507,14,0],"width":9},{"step":"B","kind":"out","role":[5316,0],"bin":[507,14,0],"width":9},{"step":"B","kind":"out","role":[5115,206],"bin":[433,14,0],"width":9},{"step":"B","kind":"out","role":[5175,12],"bin":[433,14,0],"width":9},{"step":"B","kind":"out","role":[5315,0],"bin":[433,14,0],"width":9},{"step":"B","kind":"out","role":[5114,206],"bin":[359,14,0],"width":9},{"step":"B","kind":"out","role":[5174,12],"bin":[359,14,0],"width":9},{"step":"B","kind":"out","role":[5314,0],"bin":[359,14,0],"width":9},{"step":"B","kind":"out","role":[5113,206],"bin":[285,14,0],"width":9},{"step":"B","kind":"out","role":[5173,12],"bin":[285,14,0],"width":9},{"step":"B","kind":"out","role":[5313,0],"bin":[285,14,0],"width":9},{"step":"B","kind":"out","role":[5112,206],"bin":[211,14,0],"width":9},{"step":"B","kind":"out","role":[5172,12],"bin":[211,14,0],"width":9},{"step":"B","kind":"out","role":[5312,0],"bin":[211,14,0],"width":9},{"step":"B","kind":"out","role":[5111,206],"bin":[137,14,0],"width":9},{"step":"B","kind":"out","role":[5171,12],"bin":[137,14,0],"width":9},{"step":"B","kind":"out","role":[5311,0],"bin":[137,14,0],"width":9},{"step":"B","kind":"out","role":[5110,206],"bin":[63,14,0],"width":9},{"step":"B","kind":"out","role":[5170,12],"bin":[63,14,0],"width":9},{"step":"B","kind":"out","role":[5310,0],"bin":[63,14,0],"width":9},{"step":"B","kind":"out","role":[5109,206],"bin":[692,14,0],"width":9},{"step":"B","kind":"out","role":[5169,12],"bin":[692,14,0],"width":9},{"step":"B","kind":"out","role":[5309,0],"bin":[692,14,0],"width":9},{"step":"B","kind":"out","role":[5108,206],"bin":[618,14,0],"width":9},{"step":"B","kind":"out","role":[5168,12],"bin":[618,14,0],"width":9},{"step":"B","kind":"out","role":[5308,0],"bin":[618,14,0],"width":9},{"step":"B","kind":"out","role":[5107,206],"bin":[544,14,0],"width":9},{"step":"B","kind":"out","role":[5167,12],"bin":[544,14,0],"width":9},{"step":"B","kind":"out","role":[5307,0],"bin":[544,14,0],"width":9},{"step":"B","kind":"out","role":[5106,206],"bin":[470,14,0],"width":9},{"step":"B","kind":"out","role":[5166,12],"bin":[470,14,0],"width":9},{"step":"B","kind":"out","role":[5306,0],"bin":[470,14,0],"width":9},{"step":"B","kind":"out","role":[5105,206],"bin":[396,14,0],"width":9},{"step":"B","kind":"out","role":[5165,12],"bin":[396,14,0],"width":9},{"step":"B","kind":"out","role":[5305,0],"bin":[396,14,0],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5105,206],"bin":[256,13,82],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5106,206],"bin":[256,13,82],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5107,206],"bin":[256,13,82],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5108,206],"bin":[256,13,82],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5109,206],"bin":[256,13,82],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5110,206],"bin":[315,12,17],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5111,206],"bin":[315,12,17],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5112,206],"bin":[315,12,17],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5113,206],"bin":[315,12,17],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5114,206],"bin":[315,12,17],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5115,206],"bin":[540,12,3],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5116,206],"bin":[540,12,3],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5117,206],"bin":[540,12,3],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5118,206],"bin":[540,12,3],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5119,206],"bin":[540,12,3],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5165,12],"bin":[329,8,20],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5166,12],"bin":[329,8,20],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5167,12],"bin":[329,8,20],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5168,12],"bin":[329,8,20],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5169,12],"bin":[329,8,20],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5170,12],"bin":[647,12,86],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5171,12],"bin":[647,12,86],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5172,12],"bin":[647,12,86],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5173,12],"bin":[647,12,86],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5174,12],"bin":[647,12,86],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5175,12],"bin":[92,12,81],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5176,12],"bin":[92,12,81],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5177,12],"bin":[92,12,81],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5178,12],"bin":[92,12,81],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5179,12],"bin":[92,12,81],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5305,0],"bin":[622,10,83],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5306,0],"bin":[622,10,83],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5307,0],"bin":[622,10,83],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5308,0],"bin":[622,10,83],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5309,0],"bin":[622,10,83],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5310,0],"bin":[464,12,101],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5311,0],"bin":[464,12,101],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5312,0],"bin":[464,12,101],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5313,0],"bin":[464,12,101],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5314,0],"bin":[464,12,101],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5315,0],"bin":[244,13,88],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5316,0],"bin":[244,13,88],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5317,0],"bin":[244,13,88],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5318,0],"bin":[244,13,88],"width":9},{"step":"B:nine_into_empty48","kind":"in","role":[5319,0],"bin":[244,13,88],"width":9},{"step":"C","kind":"out","role":[5730,406],"bin":[63,13,111],"width":8},{"step":"C:end","kind":"in","role":[5730,406],"bin":[729,14,0],"width":8},{"step":"C","kind":"out","role":[5729,406],"bin":[692,13,111],"width":8},{"step":"C:end","kind":"in","role":[5729,406],"bin":[729,14,0],"width":8},{"step":"C","kind":"out","role":[6471,385],"bin":[146,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5580,2],"bin":[31,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6471,385],"bin":[31,14,0],"width":8},{"step":"C:end","kind":"in","role":[5580,2],"bin":[729,14,0],"width":8},{"step":"C","kind":"out","role":[5728,407],"bin":[615,13,111],"width":8},{"step":"C:end","kind":"in","role":[5728,407],"bin":[729,14,0],"width":8},{"step":"C","kind":"out","role":[5732,407],"bin":[208,13,111],"width":8},{"step":"C:end","kind":"in","role":[5732,407],"bin":[655,14,0],"width":8},{"step":"C","kind":"out","role":[6470,385],"bin":[72,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5581,2],"bin":[105,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6470,385],"bin":[105,14,0],"width":8},{"step":"C:end","kind":"in","role":[5581,2],"bin":[655,14,0],"width":8},{"step":"C","kind":"out","role":[5729,407],"bin":[689,13,111],"width":8},{"step":"C:end","kind":"in","role":[5729,407],"bin":[655,14,0],"width":8},{"step":"C","kind":"out","role":[5722,407],"bin":[171,13,111],"width":8},{"step":"C:end","kind":"in","role":[5722,407],"bin":[655,14,0],"width":8},{"step":"C","kind":"out","role":[6464,385],"bin":[331,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5582,2],"bin":[179,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6464,385],"bin":[179,14,0],"width":8},{"step":"C:end","kind":"in","role":[5582,2],"bin":[581,14,0],"width":8},{"step":"C","kind":"out","role":[6468,385],"bin":[627,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5583,2],"bin":[253,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6468,385],"bin":[253,14,0],"width":8},{"step":"C:end","kind":"in","role":[5583,2],"bin":[581,14,0],"width":8},{"step":"C","kind":"out","role":[5739,407],"bin":[726,13,111],"width":8},{"step":"C:end","kind":"in","role":[5739,407],"bin":[581,14,0],"width":8},{"step":"C","kind":"out","role":[6473,385],"bin":[294,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5584,2],"bin":[327,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6473,385],"bin":[327,14,0],"width":8},{"step":"C:end","kind":"in","role":[5584,2],"bin":[581,14,0],"width":8},{"step":"C","kind":"out","role":[5726,406],"bin":[470,13,111],"width":8},{"step":"C:end","kind":"in","role":[5726,406],"bin":[507,14,0],"width":8},{"step":"C","kind":"out","role":[5723,407],"bin":[245,13,111],"width":8},{"step":"C:end","kind":"in","role":[5723,407],"bin":[507,14,0],"width":8},{"step":"C","kind":"out","role":[5727,407],"bin":[541,13,111],"width":8},{"step":"C:end","kind":"in","role":[5727,407],"bin":[507,14,0],"width":8},{"step":"C","kind":"out","role":[5725,406],"bin":[396,13,111],"width":8},{"step":"C:end","kind":"in","role":[5725,406],"bin":[507,14,0],"width":8},{"step":"C","kind":"out","role":[5720,407],"bin":[23,13,111],"width":8},{"step":"C:end","kind":"in","role":[5720,407],"bin":[433,14,0],"width":8},{"step":"C","kind":"out","role":[5739,406],"bin":[729,13,111],"width":8},{"step":"C:end","kind":"in","role":[5739,406],"bin":[433,14,0],"width":8},{"step":"C","kind":"out","role":[5734,407],"bin":[356,13,111],"width":8},{"step":"C:end","kind":"in","role":[5734,407],"bin":[433,14,0],"width":8},{"step":"C","kind":"out","role":[5728,406],"bin":[618,13,111],"width":8},{"step":"C:end","kind":"in","role":[5728,406],"bin":[433,14,0],"width":8},{"step":"C","kind":"out","role":[5734,406],"bin":[359,13,111],"width":8},{"step":"C:end","kind":"in","role":[5734,406],"bin":[359,14,0],"width":8},{"step":"C","kind":"out","role":[5722,406],"bin":[174,13,111],"width":8},{"step":"C:end","kind":"in","role":[5722,406],"bin":[359,14,0],"width":8},{"step":"C","kind":"out","role":[5735,407],"bin":[430,13,111],"width":8},{"step":"C:end","kind":"in","role":[5735,407],"bin":[359,14,0],"width":8},{"step":"C","kind":"out","role":[6461,385],"bin":[109,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5585,2],"bin":[401,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6461,385],"bin":[401,14,0],"width":8},{"step":"C:end","kind":"in","role":[5585,2],"bin":[359,14,0],"width":8},{"step":"C","kind":"out","role":[6472,385],"bin":[220,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5586,2],"bin":[475,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6472,385],"bin":[475,14,0],"width":8},{"step":"C:end","kind":"in","role":[5586,2],"bin":[285,14,0],"width":8},{"step":"C","kind":"out","role":[6478,385],"bin":[664,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5587,2],"bin":[549,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6478,385],"bin":[549,14,0],"width":8},{"step":"C:end","kind":"in","role":[5587,2],"bin":[285,14,0],"width":8},{"step":"C","kind":"out","role":[5731,407],"bin":[134,13,111],"width":8},{"step":"C:end","kind":"in","role":[5731,407],"bin":[285,14,0],"width":8},{"step":"C","kind":"out","role":[5725,407],"bin":[393,13,111],"width":8},{"step":"C:end","kind":"in","role":[5725,407],"bin":[285,14,0],"width":8},{"step":"C","kind":"out","role":[5732,406],"bin":[211,13,111],"width":8},{"step":"C:end","kind":"in","role":[5732,406],"bin":[211,14,0],"width":8},{"step":"C","kind":"out","role":[6460,385],"bin":[35,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5588,2],"bin":[623,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6460,385],"bin":[623,14,0],"width":8},{"step":"C:end","kind":"in","role":[5588,2],"bin":[211,14,0],"width":8},{"step":"C","kind":"out","role":[5737,406],"bin":[581,13,111],"width":8},{"step":"C:end","kind":"in","role":[5737,406],"bin":[211,14,0],"width":8},{"step":"C","kind":"out","role":[5721,406],"bin":[100,13,111],"width":8},{"step":"C:end","kind":"in","role":[5721,406],"bin":[211,14,0],"width":8},{"step":"C","kind":"out","role":[5727,406],"bin":[544,13,111],"width":8},{"step":"C:end","kind":"in","role":[5727,406],"bin":[137,14,0],"width":8},{"step":"C","kind":"out","role":[5736,407],"bin":[504,13,111],"width":8},{"step":"C:end","kind":"in","role":[5736,407],"bin":[137,14,0],"width":8},{"step":"C","kind":"out","role":[6466,385],"bin":[479,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5589,2],"bin":[697,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6466,385],"bin":[697,14,0],"width":8},{"step":"C:end","kind":"in","role":[5589,2],"bin":[137,14,0],"width":8},{"step":"C","kind":"out","role":[5726,407],"bin":[467,13,111],"width":8},{"step":"C:end","kind":"in","role":[5726,407],"bin":[137,14,0],"width":8},{"step":"C","kind":"out","role":[6479,385],"bin":[738,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5590,2],"bin":[68,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6479,385],"bin":[68,14,0],"width":8},{"step":"C:end","kind":"in","role":[5590,2],"bin":[63,14,0],"width":8},{"step":"C","kind":"out","role":[5738,406],"bin":[655,13,111],"width":8},{"step":"C:end","kind":"in","role":[5738,406],"bin":[63,14,0],"width":8},{"step":"C","kind":"out","role":[6475,385],"bin":[442,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5591,2],"bin":[142,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6475,385],"bin":[142,14,0],"width":8},{"step":"C:end","kind":"in","role":[5591,2],"bin":[63,14,0],"width":8},{"step":"C","kind":"out","role":[5736,406],"bin":[507,13,111],"width":8},{"step":"C:end","kind":"in","role":[5736,406],"bin":[63,14,0],"width":8},{"step":"C","kind":"out","role":[5724,406],"bin":[322,13,111],"width":8},{"step":"C:end","kind":"in","role":[5724,406],"bin":[692,14,0],"width":8},{"step":"C","kind":"out","role":[5720,406],"bin":[26,13,111],"width":8},{"step":"C:end","kind":"in","role":[5720,406],"bin":[692,14,0],"width":8},{"step":"C","kind":"out","role":[5737,407],"bin":[578,13,111],"width":8},{"step":"C:end","kind":"in","role":[5737,407],"bin":[692,14,0],"width":8},{"step":"C","kind":"out","role":[6462,385],"bin":[183,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5592,2],"bin":[216,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6462,385],"bin":[216,14,0],"width":8},{"step":"C:end","kind":"in","role":[5592,2],"bin":[692,14,0],"width":8},{"step":"C","kind":"out","role":[6467,385],"bin":[553,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5593,2],"bin":[290,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6467,385],"bin":[290,14,0],"width":8},{"step":"C:end","kind":"in","role":[5593,2],"bin":[618,14,0],"width":8},{"step":"C","kind":"out","role":[5733,407],"bin":[282,13,111],"width":8},{"step":"C:end","kind":"in","role":[5733,407],"bin":[618,14,0],"width":8},{"step":"C","kind":"out","role":[6463,385],"bin":[257,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5594,2],"bin":[364,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6463,385],"bin":[364,14,0],"width":8},{"step":"C:end","kind":"in","role":[5594,2],"bin":[618,14,0],"width":8},{"step":"C","kind":"out","role":[5738,407],"bin":[652,13,111],"width":8},{"step":"C:end","kind":"in","role":[5738,407],"bin":[618,14,0],"width":8},{"step":"C","kind":"out","role":[5733,406],"bin":[285,13,111],"width":8},{"step":"C:end","kind":"in","role":[5733,406],"bin":[544,14,0],"width":8},{"step":"C","kind":"out","role":[5724,407],"bin":[319,13,111],"width":8},{"step":"C:end","kind":"in","role":[5724,407],"bin":[544,14,0],"width":8},{"step":"C","kind":"out","role":[5730,407],"bin":[60,13,111],"width":8},{"step":"C:end","kind":"in","role":[5730,407],"bin":[544,14,0],"width":8},{"step":"C","kind":"out","role":[6474,385],"bin":[368,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5595,2],"bin":[438,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6474,385],"bin":[438,14,0],"width":8},{"step":"C:end","kind":"in","role":[5595,2],"bin":[544,14,0],"width":8},{"step":"C","kind":"out","role":[6476,385],"bin":[516,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5596,2],"bin":[512,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6476,385],"bin":[512,14,0],"width":8},{"step":"C:end","kind":"in","role":[5596,2],"bin":[470,14,0],"width":8},{"step":"C","kind":"out","role":[6477,385],"bin":[590,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5597,2],"bin":[586,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6477,385],"bin":[586,14,0],"width":8},{"step":"C:end","kind":"in","role":[5597,2],"bin":[470,14,0],"width":8},{"step":"C","kind":"out","role":[5735,406],"bin":[433,13,111],"width":8},{"step":"C:end","kind":"in","role":[5735,406],"bin":[470,14,0],"width":8},{"step":"C","kind":"out","role":[6465,385],"bin":[405,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5598,2],"bin":[660,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6465,385],"bin":[660,14,0],"width":8},{"step":"C:end","kind":"in","role":[5598,2],"bin":[470,14,0],"width":8},{"step":"C","kind":"out","role":[5721,407],"bin":[97,13,111],"width":8},{"step":"C:end","kind":"in","role":[5721,407],"bin":[396,14,0],"width":8},{"step":"C","kind":"out","role":[5731,406],"bin":[137,13,111],"width":8},{"step":"C:end","kind":"in","role":[5731,406],"bin":[396,14,0],"width":8},{"step":"C","kind":"out","role":[5723,406],"bin":[248,13,111],"width":8},{"step":"C:end","kind":"in","role":[5723,406],"bin":[396,14,0],"width":8},{"step":"C","kind":"out","role":[6469,385],"bin":[701,13,111],"width":8},{"step":"C:hop0","kind":"out","role":[5599,2],"bin":[734,14,0],"width":8},{"step":"C:hop0","kind":"in","role":[6469,385],"bin":[734,14,0],"width":8},{"step":"C:end","kind":"in","role":[5599,2],"bin":[396,14,0],"width":8},{"step":"D","kind":"out","role":[4190,218],"bin":[63,13,111],"width":9},{"step":"D","kind":"out","role":[5370,66],"bin":[63,13,111],"width":9},{"step":"D","kind":"out","role":[5690,340],"bin":[63,13,111],"width":9},{"step":"D","kind":"out","role":[5910,0],"bin":[63,13,111],"width":9},{"step":"D","kind":"out","role":[4189,218],"bin":[692,13,111],"width":9},{"step":"D","kind":"out","role":[5369,66],"bin":[692,13,111],"width":9},{"step":"D","kind":"out","role":[5689,340],"bin":[692,13,111],"width":9},{"step":"D","kind":"out","role":[5909,0],"bin":[692,13,111],"width":9},{"step":"D","kind":"out","role":[4891,0],"bin":[146,13,111],"width":9},{"step":"D","kind":"out","role":[4951,0],"bin":[146,13,111],"width":9},{"step":"D","kind":"out","role":[5391,0],"bin":[146,13,111],"width":9},{"step":"D","kind":"out","role":[6251,1],"bin":[146,13,111],"width":9},{"step":"D:end","kind":"in","role":[4190,218],"bin":[615,13,111],"width":9},{"step":"D:end","kind":"in","role":[5370,66],"bin":[208,13,111],"width":9},{"step":"D:end","kind":"in","role":[5690,340],"bin":[72,13,111],"width":9},{"step":"D:end","kind":"in","role":[5910,0],"bin":[689,13,111],"width":9},{"step":"D:end","kind":"in","role":[4189,218],"bin":[171,13,111],"width":9},{"step":"D:end","kind":"in","role":[5369,66],"bin":[331,13,111],"width":9},{"step":"D:end","kind":"in","role":[5689,340],"bin":[627,13,111],"width":9},{"step":"D:end","kind":"in","role":[5909,0],"bin":[726,13,111],"width":9},{"step":"D:end","kind":"in","role":[4891,0],"bin":[294,13,111],"width":9},{"step":"D:end","kind":"in","role":[4951,0],"bin":[470,13,111],"width":9},{"step":"D:end","kind":"in","role":[5391,0],"bin":[245,13,111],"width":9},{"step":"D:end","kind":"in","role":[6251,1],"bin":[396,13,111],"width":9},{"step":"E","kind":"out","role":[4979,0],"bin":[739,12,10],"width":9},{"step":"E","kind":"out","role":[5499,0],"bin":[739,12,10],"width":9},{"step":"E","kind":"out","role":[6159,340],"bin":[739,12,10],"width":9},{"step":"E","kind":"out","role":[6199,340],"bin":[739,12,10],"width":9},{"step":"E","kind":"out","role":[6619,1],"bin":[739,12,10],"width":9},{"step":"E:end","kind":"in","role":[4979,0],"bin":[541,13,111],"width":9},{"step":"E:end","kind":"in","role":[5499,0],"bin":[23,13,111],"width":9},{"step":"E:end","kind":"in","role":[6159,340],"bin":[729,13,111],"width":9},{"step":"E:end","kind":"in","role":[6199,340],"bin":[618,13,111],"width":9},{"step":"E:end","kind":"in","role":[6619,1],"bin":[109,13,111],"width":9},{"step":"E","kind":"out","role":[4978,0],"bin":[665,12,10],"width":9},{"step":"E","kind":"out","role":[5498,0],"bin":[665,12,10],"width":9},{"step":"E","kind":"out","role":[6158,340],"bin":[665,12,10],"width":9},{"step":"E","kind":"out","role":[6198,340],"bin":[665,12,10],"width":9},{"step":"E","kind":"out","role":[6618,1],"bin":[665,12,10],"width":9},{"step":"E:end","kind":"in","role":[4978,0],"bin":[356,13,111],"width":9},{"step":"E:end","kind":"in","role":[5498,0],"bin":[359,13,111],"width":9},{"step":"E:end","kind":"in","role":[6158,340],"bin":[174,13,111],"width":9},{"step":"E:end","kind":"in","role":[6198,340],"bin":[220,13,111],"width":9},{"step":"E:end","kind":"in","role":[6618,1],"bin":[664,13,111],"width":9},{"step":"E","kind":"out","role":[4977,0],"bin":[591,12,10],"width":9},{"step":"E","kind":"out","role":[5497,0],"bin":[591,12,10],"width":9},{"step":"E","kind":"out","role":[6157,340],"bin":[591,12,10],"width":9},{"step":"E","kind":"out","role":[6197,340],"bin":[591,12,10],"width":9},{"step":"E","kind":"out","role":[6617,1],"bin":[591,12,10],"width":9},{"step":"E:end","kind":"in","role":[4977,0],"bin":[430,13,111],"width":9},{"step":"E:end","kind":"in","role":[5497,0],"bin":[134,13,111],"width":9},{"step":"E:end","kind":"in","role":[6157,340],"bin":[211,13,111],"width":9},{"step":"E:end","kind":"in","role":[6197,340],"bin":[35,13,111],"width":9},{"step":"E:end","kind":"in","role":[6617,1],"bin":[479,13,111],"width":9},{"step":"E","kind":"out","role":[4976,0],"bin":[517,12,10],"width":9},{"step":"E","kind":"out","role":[5496,0],"bin":[517,12,10],"width":9},{"step":"E","kind":"out","role":[6156,340],"bin":[517,12,10],"width":9},{"step":"E","kind":"out","role":[6196,340],"bin":[517,12,10],"width":9},{"step":"E","kind":"out","role":[6616,1],"bin":[517,12,10],"width":9},{"step":"E:end","kind":"in","role":[4976,0],"bin":[393,13,111],"width":9},{"step":"E:end","kind":"in","role":[5496,0],"bin":[581,13,111],"width":9},{"step":"E:end","kind":"in","role":[6156,340],"bin":[100,13,111],"width":9},{"step":"E:end","kind":"in","role":[6196,340],"bin":[544,13,111],"width":9},{"step":"E:end","kind":"in","role":[6616,1],"bin":[738,13,111],"width":9},{"step":"E","kind":"out","role":[4975,0],"bin":[443,12,10],"width":9},{"step":"E","kind":"out","role":[5495,0],"bin":[443,12,10],"width":9},{"step":"E","kind":"out","role":[6155,340],"bin":[443,12,10],"width":9},{"step":"E","kind":"out","role":[6195,340],"bin":[443,12,10],"width":9},{"step":"E","kind":"out","role":[6615,1],"bin":[443,12,10],"width":9},{"step":"E:end","kind":"in","role":[4975,0],"bin":[504,13,111],"width":9},{"step":"E:end","kind":"in","role":[5495,0],"bin":[467,13,111],"width":9},{"step":"E:end","kind":"in","role":[6155,340],"bin":[655,13,111],"width":9},{"step":"E:end","kind":"in","role":[6195,340],"bin":[442,13,111],"width":9},{"step":"E:end","kind":"in","role":[6615,1],"bin":[183,13,111],"width":9},{"step":"E","kind":"out","role":[4974,0],"bin":[369,12,10],"width":9},{"step":"E","kind":"out","role":[5494,0],"bin":[369,12,10],"width":9},{"step":"E","kind":"out","role":[6154,340],"bin":[369,12,10],"width":9},{"step":"E","kind":"out","role":[6194,340],"bin":[369,12,10],"width":9},{"step":"E","kind":"out","role":[6614,1],"bin":[369,12,10],"width":9},{"step":"E:end","kind":"in","role":[4974,0],"bin":[507,13,111],"width":9},{"step":"E:end","kind":"in","role":[5494,0],"bin":[322,13,111],"width":9},{"step":"E:end","kind":"in","role":[6154,340],"bin":[26,13,111],"width":9},{"step":"E:end","kind":"in","role":[6194,340],"bin":[553,13,111],"width":9},{"step":"E:end","kind":"in","role":[6614,1],"bin":[257,13,111],"width":9},{"step":"E","kind":"out","role":[4973,0],"bin":[295,12,10],"width":9},{"step":"E","kind":"out","role":[5493,0],"bin":[295,12,10],"width":9},{"step":"E","kind":"out","role":[6153,340],"bin":[295,12,10],"width":9},{"step":"E","kind":"out","role":[6193,340],"bin":[295,12,10],"width":9},{"step":"E","kind":"out","role":[6613,1],"bin":[295,12,10],"width":9},{"step":"E:end","kind":"in","role":[4973,0],"bin":[578,13,111],"width":9},{"step":"E:end","kind":"in","role":[5493,0],"bin":[282,13,111],"width":9},{"step":"E:end","kind":"in","role":[6153,340],"bin":[285,13,111],"width":9},{"step":"E:end","kind":"in","role":[6193,340],"bin":[368,13,111],"width":9},{"step":"E:end","kind":"in","role":[6613,1],"bin":[516,13,111],"width":9},{"step":"E","kind":"out","role":[4972,0],"bin":[221,12,10],"width":9},{"step":"E","kind":"out","role":[5492,0],"bin":[221,12,10],"width":9},{"step":"E","kind":"out","role":[6152,340],"bin":[221,12,10],"width":9},{"step":"E","kind":"out","role":[6192,340],"bin":[221,12,10],"width":9},{"step":"E","kind":"out","role":[6612,1],"bin":[221,12,10],"width":9},{"step":"E:end","kind":"in","role":[4972,0],"bin":[652,13,111],"width":9},{"step":"E:end","kind":"in","role":[5492,0],"bin":[319,13,111],"width":9},{"step":"E:end","kind":"in","role":[6152,340],"bin":[590,13,111],"width":9},{"step":"E:end","kind":"in","role":[6192,340],"bin":[433,13,111],"width":9},{"step":"E:end","kind":"in","role":[6612,1],"bin":[405,13,111],"width":9},{"step":"E","kind":"out","role":[4971,0],"bin":[147,12,10],"width":9},{"step":"E","kind":"out","role":[5491,0],"bin":[147,12,10],"width":9},{"step":"E","kind":"out","role":[6151,340],"bin":[147,12,10],"width":9},{"step":"E","kind":"out","role":[6191,340],"bin":[147,12,10],"width":9},{"step":"E","kind":"out","role":[6611,1],"bin":[147,12,10],"width":9},{"step":"E:end","kind":"in","role":[4971,0],"bin":[60,13,111],"width":9},{"step":"E:end","kind":"in","role":[5491,0],"bin":[97,13,111],"width":9},{"step":"E:end","kind":"in","role":[6151,340],"bin":[137,13,111],"width":9},{"step":"E:end","kind":"in","role":[6191,340],"bin":[248,13,111],"width":9},{"step":"E:end","kind":"in","role":[6611,1],"bin":[701,13,111],"width":9}] diff --git a/research/rank7-r1-t740-cap/construction/plan_t740.py b/research/rank7-r1-t740-cap/construction/plan_t740.py new file mode 100644 index 0000000000..289656be8b --- /dev/null +++ b/research/rank7-r1-t740-cap/construction/plan_t740.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +"""Search provenance (not an entry point of verify.py): how allocation/RELOCATIONS.json was found. + +Start: ten lockstep copies of PR #2979's literal T74 fill (lift.py with no relocations). Its pattern mix is ten times +PR2979's T74 mix, which contains 60 non-tight [4,8,9,9,9,9]@48 bins and 17,280 [9,9,9]@32 bins; the optimal face of the +fixed-capacity relaxation (certificates/RELAX-CAP.json of PR2979) has an integral point at T740 that differs only by + 60 x [4,8,9,9,9,9]@48 -> 57 x [9,9,9,9,9]@48 + 3 x []@48 + 75 x [9,9,9]@32 -> 60 x [4,9,9,9]@32 + 15 x [8,8,8,8]@32 (both sides tight; widths and bins balance). +The chronology forbids doing this directly (the 4s and 8s of the [4,8,9,9,9,9] bins are late, almost all [9,9,9] bins +close early), so each displaced role travels along a chain of same-width exchanges: it enters an unlocked bin whose +window contains its call and evicts a same-width role of an earlier call, until a target bin can take the last role. +Every intermediate bin keeps its pattern. Steps: + A 60 fours -> 60 [9,9,9]@32 bins (become [4,9,9,9]); + B 15 [9,9,9]@32 bins Z (the latest-closing ones) send their 45 nines into 9 early empty @48 bins (5 each); + C 60 eights -> the Z bins (4 each; become [8,8,8,8]); + D three [4,8,9,9,9,9] bins are emptied; their 12 nines go one each into 12 of the other 57; + E nine late [9,9,9,9,9]@48 bins are emptied; their 45 nines go one each into the remaining 45 of the 57. +Greedy, seeded (seed 1), first fit; exchanges always move to a strictly earlier call, so chains terminate. + +Usage (from the repository root): python3 -B research/rank7-r1-t740-cap/construction/plan_t740.py --out DIR +The search only reads helper widths, windows and families, which PR3015's R1 edit leaves unchanged. +Writes DIR/RELOCATIONS.json and DIR/CHAINS.json and re-checks the rebuilt allocation with PR2979's vendored engine. +Rohan Arun, with substantial AI assistance (Anthropic Claude). Apache-2.0. +""" +import argparse +import collections +import json +import random +import sys +import time +import types +from pathlib import Path + +HERE = Path(__file__).resolve().parent +PKG = HERE.parent +SRC = PKG.parent / 'rank7-joint-endframes' +sys.path.insert(0, str(PKG)) +import lift as L # noqa: E402 + + +def load(name, path): + module = types.ModuleType(name) + module.__file__ = str(path) + exec(compile(Path(path).read_bytes(), str(path), 'exec'), module.__dict__) + return module + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument('--out', type=Path, required=True) + ap.add_argument('--seed', type=int, default=1) + args = ap.parse_args() + rng = random.Random(args.seed) + engine = load('owners2979', SRC / 'allocation/vendor/independent_owners.py') + template, plan = L.read(SRC / 'allocation/vendor/TEMPLATE.json.gz'), L.read(SRC / 'allocation/vendor/PLAN.json.gz') + providers = L.read(SRC / 'allocation/PROVIDERS.json') + for pv in providers.values(): + pv['actual_paid_profile'] = {int(r): n for r, n in pv['actual_paid_profile'].items()} + T, order, dispatch, fill, _ = L.build(SRC / 'allocation', [], providers) + rows = fill['rows'] + d = {(s, r): p for s, r, p in dispatch} + win = engine.windows(template, order, T) + fam = lambda o, c, p: o * 896 + (2 * plan['pairs'][str(c)] + plan['sides'][str(c)]) * 112 + p + WID = [providers[d[tuple(order[r[0]])]]['widths'][r[1]] for r in rows] + bins = collections.defaultdict(list) + used = collections.defaultdict(set) + for i, (t, h, o, c, p, z) in enumerate(rows): + bins[o, c, p].append(i) + used[t].add(fam(o, c, p)) + pattern = lambda b: tuple(sorted(WID[i] for i in bins[b])) + allbins = [(o, c, p) for (o, c) in win for p in range(112)] + bypat = collections.defaultdict(list) + for b in allbins: + bypat[win[b[0], b[1]][0], pattern(b)].append(b) + for k in bypat: + rng.shuffle(bypat[k]) + X = list(bypat[48, (4, 8, 9, 9, 9, 9)]) + assert len(X) == 60 + locked = set(X) + + def fits(i, b): + t = rows[i][0] + cap, lo, hi = win[b[0], b[1]] + return lo < t <= hi and fam(*b) not in used[t] + + chains = [] + + def detach(i, label): + t, h, o, c, p, z = rows[i] + used[t].discard(fam(o, c, p)) + bins[o, c, p].remove(i) + rows[i][2:5] = [-1, -1, -1] + chains.append(dict(step=label, kind='out', role=[t, h], bin=[o, c, p], width=WID[i])) + + def attach(i, b, label): + assert rows[i][2] == -1 and fits(i, b), (label, i, b) + t = rows[i][0] + rows[i][2:5] = list(b) + bins[b].append(i) + used[t].add(fam(*b)) + chains.append(dict(step=label, kind='in', role=rows[i][:2], bin=list(b), width=WID[i])) + + exchange = {} + + def chain(i, targets, label, maxhops=40): + w = WID[i] + if w not in exchange: + exchange[w] = sorted((rows[k][0], b, k) for b in allbins if b not in locked for k in bins[b] if WID[k] == w) + cur = i + for hop in range(maxhops): + tgt = next((b for b in targets() if fits(cur, b)), None) + if tgt is not None: + attach(cur, tgt, label + ':end') + return tgt + t = rows[cur][0] + nxt = None + for tt, b, k in exchange[w]: + if tt >= t: + break + if b in locked or rows[k][2:5] != list(b): + continue + cap, lo, hi = win[b[0], b[1]] + if lo < t <= hi and fam(*b) not in used[t]: + nxt = (b, k) + break + if nxt is None: + return None + b, k = nxt + detach(k, label + ':hop%d' % hop) + attach(cur, b, label + ':hop%d' % hop) + locked.add(b) + cur = k + return None + + t0 = time.time() + Y = list(bypat[32, (9, 9, 9)]) + Z = sorted(Y, key=lambda b: -win[b[0], b[1]][2])[:15] + locked.update(Z) + for i in [k for b in X for k in bins[b] if WID[k] == 4]: + detach(i, 'A') + tgt = chain(i, lambda: [y for y in Y if y not in locked], 'A') + assert tgt is not None, 'step A' + locked.add(tgt) + E48 = [b for b in bypat[48, ()] if b not in locked] + held = [] + for z in Z: + for i in list(bins[z]): + detach(i, 'B') + held.append(i) + held.sort(key=lambda i: rows[i][0]) + remaining = list(held) + for e in E48: + if not remaining: + break + if e in locked: + continue + group, calls = [], set() + cap, lo, hi = win[e[0], e[1]] + for i in remaining: + t = rows[i][0] + if t not in calls and lo < t <= hi and fam(*e) not in used[t]: + group.append(i) + calls.add(t) + if len(group) == 5: + break + if len(group) < 5: + continue + for i in group: + attach(i, e, 'B:nine_into_empty48') + remaining.remove(i) + locked.add(e) + assert not remaining + count = {z: 0 for z in Z} + for i in [k for b in X for k in bins[b] if WID[k] == 8]: + detach(i, 'C') + tgt = chain(i, lambda: [z for z in Z if count[z] < 4], 'C') + assert tgt is not None, 'step C' + count[tgt] += 1 + assert all(v == 4 for v in count.values()) + emptied, keep = X[:3], X[3:] + want = {b: 1 for b in keep} + open_keep = lambda: [b for b in keep if want[b]] + nines = [i for b in emptied for i in bins[b] if WID[i] == 9] + for i in nines: + detach(i, 'D') + for i in nines: + tgt = chain(i, open_keep, 'D') + assert tgt is not None, 'step D' + want[tgt] -= 1 + late = [b for b in bypat[48, (9, 9, 9, 9, 9)] if b not in locked] + late.sort(key=lambda b: -win[b[0], b[1]][1]) + emptied95 = 0 + for b in late: + if not any(want.values()): + break + if b in locked: + continue + ns = [i for i in bins[b] if WID[i] == 9] + if len(ns) != 5: + continue + if not all(any(win[k[0], k[1]][1] < rows[i][0] <= win[k[0], k[1]][2] for k in open_keep()) for i in ns): + continue + locked.add(b) + for i in ns: + detach(i, 'E') + for i in ns: + tgt = chain(i, open_keep, 'E') + assert tgt is not None, 'step E' + want[tgt] -= 1 + emptied95 += 1 + assert emptied95 == 9 and not any(want.values()) + assert all(r[2] >= 0 for r in rows) + print('search %.1f s, chain events %d' % (time.time() - t0, len(chains)), flush=True) + final = {} + for e in chains: + if e['kind'] == 'in': + final[tuple(e['role'])] = e['bin'] + relocations = sorted([t, h] + b for (t, h), b in final.items()) + base_bins = {(r[0], r[1]): (r[2], r[3], r[4]) for r in L.lift_rows(L.read(SRC / 'allocation/FILL.json.gz'))} + relocations = [e for e in relocations if base_bins[e[0], e[1]] != tuple(e[2:])] + args.out.mkdir(parents=True, exist_ok=False) + (args.out / 'RELOCATIONS.json').write_text(json.dumps(relocations, separators=(',', ':')) + '\n') + (args.out / 'CHAINS.json').write_text(json.dumps(chains, separators=(',', ':')) + '\n') + T, order, dispatch, fill, touched = L.build(SRC / 'allocation', relocations, providers) + t0 = time.time() + result, _, _ = engine.check(T, order, fill, d, None, plan, template, providers) + print('relocations', len(relocations), 'touched bins', len(touched), 'engine %.1f s' % (time.time() - t0), 'idle', result['idle'], flush=True) + + +if __name__ == '__main__': + main() diff --git a/research/rank7-r1-t740-cap/controls.py b/research/rank7-r1-t740-cap/controls.py new file mode 100644 index 0000000000..ed6b8abff0 --- /dev/null +++ b/research/rank7-r1-t740-cap/controls.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +"""Registered failure controls for research/rank7-r1-t740-cap (standard library only, about four to five minutes). + +Each control changes one thing and must be rejected (or, for the ablation, must lose the gain): + no_relocations ten lockstep copies of PR2979's T74 fill alone (PR3015's allocation): a valid allocation whose root is PR3015's, + strictly below the cap (the relocations are what attains it); + dropped_chain_link one relocation of an exchange chain omitted: the owner engine rejects the allocation; + window_violation one relocated role sent to a same-capacity bin whose window excludes its call; + family_collision one relocated role sent to a bin of a family its call already uses; + stale_profile the claimed complete profile with one extra rank-1 child; + tampered_relocations two relocated roles of different widths exchange destinations: payload pin fails; + wrong_moment_baseline the moment auditor fed PR2969's claim instead of PR3015's: authenticated-baseline rejection. +Rohan Arun, with substantial AI assistance (Anthropic Claude). Apache-2.0. +""" +import collections +import json +import shutil +import sys +import tempfile +import time +from fractions import Fraction as Q +from pathlib import Path + +PKG = Path(__file__).resolve().parent +sys.path.insert(0, str(PKG)) +import lift as L # noqa: E402 +import verify as V # noqa: E402 + + +def main(): + if not __debug__: + raise SystemExit('refusing python -O: this checker relies on assertions') + start = time.monotonic() + V.check_pins() + providers = V.derive_providers() + engine = V.load('owners2979_r1_controls', V.SRC / 'allocation/vendor/independent_owners.py') + plan, template = L.read(V.SRC / 'allocation/vendor/PLAN.json.gz'), L.read(V.SRC / 'allocation/vendor/TEMPLATE.json.gz') + relocations = L.read(PKG / 'allocation/RELOCATIONS.json') + expected = L.read(PKG / 'allocation/EXPECTED.json') + claimed = {int(k): v for k, v in L.read(PKG / 'allocation/PROFILE.json').items()} + sys.path.insert(0, str(V.SRC / 'tools')) + import root as R + cap_lo = Q(L.read(PKG / 'certificates/R1-RELAX-CAP.json')['cap_lower']) + results = {} + + def build(rel): + T, order, dispatch, fill, touched = L.build(V.SRC / 'allocation', rel, providers) + return T, order, {(s, r): p for s, r, p in dispatch}, fill + + def rejected(name, rel, claim=claimed): + T, order, d, fill = build(rel) + try: + engine.check(T, order, fill, d, claim, plan, template, providers) + except ValueError as error: + results[name] = 'rejected: ' + str(error) + return + raise AssertionError('accepted corrupted allocation: ' + name) + + # ablation: no relocations + T, order, d, fill = build([]) + result, win, _ = engine.check(T, order, fill, d, None, plan, template, providers) + prof = {int(k): v for k, v in result['profile'].items()} + base = {int(k): v for k, v in L.read(PKG / 'comparators/PR3015-PROFILE.json').items()} + V.need(prof == {r: 10 * n for r, n in base.items()} and prof != claimed, 'lift alone = ten times the PR3015 profile') + lo, hi = R.kappa_from_profile(prof, T) + V.need(hi < cap_lo and (lo, hi) == R.kappa_from_profile(base, 74), 'lift alone keeps the PR3015 root below the cap') + results['no_relocations'] = 'valid allocation, root bracket [%s, %s] below the cap by %.4e' % (lo, hi, float(cap_lo - hi)) + # one omitted chain link: the first relocation whose destination bin also loses a role + sources = {} + base_rows = {(r[0], r[1]): (r[2], r[3], r[4]) for r in L.lift_rows(L.read(V.SRC / 'allocation/FILL.json.gz'))} + for e in relocations: + sources.setdefault(base_rows[e[0], e[1]], []).append(e) + link = next(e for e in relocations if tuple(e[2:]) in sources) + rejected('dropped_chain_link', [e for e in relocations if e is not link]) + # window violation: same capacity, window excludes the call + e = relocations[0] + cap = win[e[2], e[3]][0] + (o, c), _ = next(((k, v) for k, v in win.items() if v[0] == cap and not v[1] < e[0] <= v[2])) + bad = [list(x) for x in relocations] + bad[0] = [e[0], e[1], o, c, e[4]] + rejected('window_violation', bad) + # family collision: a bin (same window class) of a family already used by the call + t0 = e[0] + T_, order_, d_, fill_ = build(relocations) + used = {(r[2], r[3], r[4]) for r in fill_['rows'] if r[0] == t0 and r[1] != e[1]} + target = next(b for b in sorted(used) if win[b[0], b[1]][1] < t0 <= win[b[0], b[1]][2]) + bad = [list(x) for x in relocations] + bad[0] = [e[0], e[1]] + list(target) + rejected('family_collision', bad) + # stale profile + wrong = dict(claimed) + wrong[1] += 1 + rejected('stale_profile', relocations, wrong) + # tampered relocations: swap destinations of two roles of different widths + width = lambda x: providers[d_[tuple(order_[x[0]])]]['widths'][x[1]] + a = relocations[0] + b = next(x for x in relocations if width(x) != width(a)) + bad = [list(x) for x in relocations] + ia, ib = relocations.index(a), relocations.index(b) + bad[ia] = a[:2] + b[2:] + bad[ib] = b[:2] + a[2:] + T2, order2, dispatch2, fill2, touched2 = L.build(V.SRC / 'allocation', bad, providers) + V.need(L.digest(fill2) != expected['payload_sha256']['FILL.json.gz'], 'tampered relocations change the pinned payload') + results['tampered_relocations'] = 'rejected: canonical FILL payload differs from allocation/EXPECTED.json' + # moment auditor with a wrong baseline + moment = V.load('moment_controls', PKG / 'tools/audit_allocation_moment.py') + repo = V.ROOT + with tempfile.TemporaryDirectory() as tmp: + cand, wrongbase = Path(tmp) / 'candidate', Path(tmp) / 'baseline' + cand.mkdir() + wrongbase.mkdir() + (cand / 'ORDER.json').write_bytes(L.canonical(order_)) + (cand / 'PROFILE.json').write_bytes(L.canonical({str(r): n for r, n in sorted(claimed.items())})) + shutil.copyfile(V.SRC / 'allocation/baseline/CLAIM.json', wrongbase / 'CLAIM.json') + shutil.copyfile(V.SRC / 'allocation/baseline/ORDER.json', wrongbase / 'ORDER.json') + shutil.copyfile(V.SRC / 'allocation/baseline/PROFILE.json', wrongbase / 'PROFILE.json') + try: + moment.run(cand, wrongbase) + except ValueError as error: + results['wrong_moment_baseline'] = 'rejected: ' + str(error) + else: + raise AssertionError('moment auditor accepted an unauthenticated baseline') + V.need(set(results) == {'no_relocations', 'dropped_chain_link', 'window_violation', 'family_collision', 'stale_profile', + 'tampered_relocations', 'wrong_moment_baseline'}, 'all controls ran') + print(json.dumps(results, indent=1, sort_keys=True)) + print('PASS_RANK7_R1_T740_CAP_CONTROLS %d controls %.1f s' % (len(results), time.monotonic() - start)) + + +if __name__ == '__main__': + main() diff --git a/research/rank7-r1-t740-cap/data/R1-WORD-base.json.gz b/research/rank7-r1-t740-cap/data/R1-WORD-base.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..4f0483657396a7f735873e1b252482c53dfb2eb6 GIT binary patch literal 71434 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 literal 0 HcmV?d00001 diff --git a/research/rank7-r1-t740-cap/data/R1-WORD-extra.json.gz b/research/rank7-r1-t740-cap/data/R1-WORD-extra.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..81f95e21ede115e8bdb6bd522c641b37b740bdf7 GIT binary patch literal 71430 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 literal 0 HcmV?d00001 diff --git a/research/rank7-r1-t740-cap/lift.py b/research/rank7-r1-t740-cap/lift.py new file mode 100644 index 0000000000..445c0b660c --- /dev/null +++ b/research/rank7-r1-t740-cap/lift.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +"""Deterministic T740 allocation of PR #2979's unchanged words. + +The allocation is defined by three things only: + 1. PR #2979's literal T74 allocation (research/rank7-joint-endframes/allocation: ORDER, DISPATCH, FILL); + 2. ten lockstep copies of it, in Dugongue's PR #2969 lift convention: + call (s, r) at T74 time t -> call (s, r + 74 j) at T740 time 10 t + j (j = 0..9), + role (t, h, o, c, p, z) -> role (10 t + j, h, o + 74 j, c, p, z); + 3. allocation/RELOCATIONS.json: 332 roles [time, helper, owner_replica, child, port], each moved to the given bin. +Every bin that a relocated role leaves or enters is repacked as a compact prefix in (time, helper) order; no other row +changes. Standard library only. Columns of FILL rows: time, helper, owner_replica, child, port, offset. + +Rohan Arun, with substantial AI assistance (Anthropic Claude). Apache-2.0. +""" +import gzip +import hashlib +import json +from collections import defaultdict +from pathlib import Path + +COPIES = 10 +SOURCE_T = 74 +METHOD = ('PR2979 literal T74 fill lifted to ten lockstep copies (PR2969 convention, T740) plus 332 explicit whole-role ' + 'relocations (allocation/RELOCATIONS.json); touched bins repacked as compact prefixes in (time, helper) order') + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def read(path): + raw = Path(path).read_bytes() + return json.loads(gzip.decompress(raw) if raw[:2] == b'\x1f\x8b' else raw) + + +def canonical(obj): + """Canonical JSON payload bytes; SHA-256 pins refer to these bytes (not to any gzip container).""" + return (json.dumps(obj, sort_keys=True, separators=(',', ':')) + '\n').encode() + + +def digest(obj): + return hashlib.sha256(canonical(obj)).hexdigest() + + +def lift_order(order74): + return [[s, r + SOURCE_T * j] for s, r in order74 for j in range(COPIES)] + + +def lift_dispatch(dispatch74): + return [[s, r + SOURCE_T * j, p] for s, r, p in dispatch74 for j in range(COPIES)] + + +def lift_rows(fill74): + return [[COPIES * t + j, h, o + SOURCE_T * j, c, p, z] for t, h, o, c, p, z in fill74['rows'] for j in range(COPIES)] + + +def build(source_allocation, relocations, providers): + """Return (T, order, dispatch, fill, touched_bins). `providers` maps provider id -> {'widths': [...]}.""" + source = Path(source_allocation) + order74, dispatch74, fill74 = read(source / 'ORDER.json'), read(source / 'DISPATCH.json'), read(source / 'FILL.json.gz') + need(fill74['columns'] == ['time', 'helper', 'owner_replica', 'child', 'port', 'offset'], 'source fill columns') + need(len(order74) == 9 * SOURCE_T and len(dispatch74) == 9 * SOURCE_T, 'source T74 order/dispatch') + T = SOURCE_T * COPIES + order, dispatch, rows = lift_order(order74), lift_dispatch(dispatch74), lift_rows(fill74) + provider_of = {(s, r): p for s, r, p in dispatch} + where = {(row[0], row[1]): i for i, row in enumerate(rows)} + need(len(where) == len(rows), 'unique (time, helper) roles') + touched, moved = set(), set() + for entry in relocations: + need(len(entry) == 5 and all(type(x) is int for x in entry), 'relocation shape [time, helper, owner, child, port]') + t, h, o, c, p = entry + need((t, h) in where and (t, h) not in moved, 'relocated role exists and moves once') + moved.add((t, h)) + row = rows[where[t, h]] + old = (row[2], row[3], row[4]) + need(old != (o, c, p), 'a relocation changes the bin') + touched.add(old) + touched.add((o, c, p)) + row[2], row[3], row[4] = o, c, p + members = defaultdict(list) + for i, row in enumerate(rows): + key = (row[2], row[3], row[4]) + if key in touched: + members[key].append(i) + for key, ids in members.items(): + offset = 0 + for i in sorted(ids, key=lambda k: (rows[k][0], rows[k][1])): + rows[i][5] = offset + offset += providers[provider_of[tuple(order[rows[i][0]])]]['widths'][rows[i][1]] + rows.sort() + fill = {'columns': list(fill74['columns']), 'dispatch_overrides': [], 'method': METHOD, 'rows': rows} + return T, order, dispatch, fill, touched + + +def write(out, T, order, dispatch, fill, profile): + """Write the T740 allocation in PR2979's layout (gzip mtime 0) and return the canonical payload SHA-256 values.""" + out = Path(out) + out.mkdir(parents=True, exist_ok=False) + payloads = {'ORDER.json': order, 'DISPATCH.json': dispatch, 'FILL.json.gz': fill, + 'PROFILE.json': {str(r): n for r, n in sorted(profile.items())}} + for name, obj in payloads.items(): + data = canonical(obj) + (out / name).write_bytes(gzip.compress(data, mtime=0) if name.endswith('.gz') else data) + return {name: digest(obj) for name, obj in payloads.items()} diff --git a/research/rank7-r1-t740-cap/tools/audit_allocation_moment.py b/research/rank7-r1-t740-cap/tools/audit_allocation_moment.py new file mode 100644 index 0000000000..c3e21c80ab --- /dev/null +++ b/research/rank7-r1-t740-cap/tools/audit_allocation_moment.py @@ -0,0 +1,84 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Independent dyadic interval moment auditor, atlas D020. +Retained PR2908 arithmetic by Jeremy Diviney and its credited upstream authors; +Mason Hale with OpenAI Codex assistance changes only the authenticated baseline. +Marius-Paul Dumitrean (Claude Code assisted) changes only the authenticated baseline, to the PR2917 headline (PR2930), +to the PR2930 headline (PR2942) and to Dugongue's PR2969 moment nomination (its T370 ORDER/PROFILE). +Rohan Arun (Anthropic Claude assisted) changes only the authenticated baseline, to Jeremy Kothe's PR3015 headline (its T74 ORDER/PROFILE). +Uses only Python integers/Fraction; imports no inherited numerical implementation. +This authenticates a paid histogram and its root, not a physical realization. +""" +from fractions import Fraction as F +from pathlib import Path +from functools import lru_cache +from collections import Counter +import argparse,json,hashlib + +BITS=192 +SCALE=1<=1,'log domain');k=0 + while q>2:q/=2;k+=1 + def unit(y): + z=(y-1)/(y+1);z2=z*z;term=z;value=F(0) + for j in range(128): + value+=term/(2*j+1);term*=z2 + remainder=2*term/(257*(1-z2)) + return 2*value,2*value+remainder + l,u=unit(q);l2,u2=unit(F(2));return down(l+k*l2),up(u+k*u2) +def exp_bounds(y): + need(0<=y0,'profile domain');l,u=log_bounds(F(73,rank));a=exp_bounds(b*l)[0];z=exp_bounds(b*u)[1];weight=F(rank*count,73*W);lo+=weight*a;hi+=weight*z + return down(lo),up(hi) +def run(candidate,source): + import sys + if hasattr(sys,'set_int_max_str_digits'):sys.set_int_max_str_digits(0) + need(hashlib.sha256((source/'CLAIM.json').read_bytes()).hexdigest()=='f9b9fbaaac794c0ce279c238a33a2f34f8c91a34d97ccdeb5ec98b7b8ba56d73','exact pinned PR3015 headline') + prof={int(k):v for k,v in json.loads((candidate/'PROFILE.json').read_bytes()).items()} + old={int(k):v for k,v in json.loads((source/'PROFILE.json').read_bytes()).items()} + W=896*(1+max(r for s,r in json.loads((candidate/'ORDER.json').read_bytes()))) + oldW=896*(1+max(r for s,r in json.loads((source/'ORDER.json').read_bytes()))) + need(sum(r*n for r,n in prof.items())==W*73-W*320//896,'new rank mass') + need(sum(r*n for r,n in old.items())==oldW*73-oldW*320//896,'old rank mass') + # No floating endpoint or inherited numerical implementation is used. + q=10**26;lo=0;hi=q//200 + need(moment(prof,F(lo,q),W)[1]<1 and moment(prof,F(hi,q),W)[0]>1,'global root bracket') + while hi-lo>1: + mid=(lo+hi)//2;l,u=moment(prof,F(mid,q),W) + if u<1:lo=mid + elif l>1:hi=mid + else:raise ValueError('interval precision insufficient') + endpoint=F((lo//100),10**24) + target=endpoint-F(1,10**46)-F(1,10**70) + prior=F(json.loads((source/'CLAIM.json').read_bytes())['kappa']) + need(target>prior and target1,'overstated endpoint rejected') + wrong=dict(prof);wrong[32]=wrong.get(32,0)+1 + need(moment(wrong,F(lo,q),W)[0]>1,'omitted rank charge rejected') + import decimal + with decimal.localcontext() as c: + c.prec=80 + todec=lambda x:str(decimal.Decimal(x.numerator)/decimal.Decimal(x.denominator)) + texttarget=todec(target);textgain=todec(target-prior) + return dict(status='PASS_SEPARATE_EXACT_RATIONAL_FRONTIER_MOMENT',lower=str(F(lo,q)),upper=str(F(hi,q)),outer_endpoint=str(endpoint),target=str(target),target_decimal=texttarget,previous=str(prior),gain=str(target-prior),gain_decimal=textgain,W=W,oldW=oldW,normalized_profile_delta=normalized_delta,new_moment_at_full_prior=[str(x)for x in at_old],profile_sha256=hashlib.sha256((candidate/'PROFILE.json').read_bytes()).hexdigest(),baseline_profile_sha256=hashlib.sha256((source/'PROFILE.json').read_bytes()).hexdigest(),baseline_claim_sha256=hashlib.sha256((source/'CLAIM.json').read_bytes()).hexdigest(),method='Independent 128-term atanh / degree24 exponential with explicit positive tails and outward 192-bit dyadic rounding',controls=['zero log/exp identities','overstated endpoint','added rank32 charge'],scope='Complete paid histogram and exact moment only; full native/physical/outer release is separate.') +if __name__=='__main__': + p=argparse.ArgumentParser();p.add_argument('--candidate',type=Path,required=True);p.add_argument('--source',type=Path,required=True);p.add_argument('--out',type=Path,required=True);a=p.parse_args() + need(not a.out.exists(),'fresh output required');d=run(a.candidate,a.source);a.out.write_text(json.dumps(d,sort_keys=True,indent=2)+'\n',encoding='utf-8',newline='\n');print(json.dumps({k:d[k]for k in ['status','target_decimal','gain_decimal','lower','upper']})) diff --git a/research/rank7-r1-t740-cap/verify.py b/research/rank7-r1-t740-cap/verify.py new file mode 100644 index 0000000000..e58a8e438d --- /dev/null +++ b/research/rank7-r1-t740-cap/verify.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +"""Registered check: PR #3015's R1 words with a T740 allocation that attains their fixed-capacity packing cap. + +Standard library only (Python 3.10+, assertions enabled); about one to two minutes on one core. + 1. Live input pins (SOURCES.json) for the PR2979 files used (allocation, engine, template, tools) and the vendored + PR3015/PR3021 files (VENDOR.json: exact PR heads, Git blobs, SHA-256). + 2. Providers: PR3015's two R1 words (data/R1-WORD-*.json.gz) re-derive the provider registry with PR2979's frame + accounting (vendor/preload_move.py frame_report): helper widths equal PR2979's registry (R1 changes none), local + profile {1:2443, 2:707, 3:232, 4:108, 5:18, 8:8}, 408 helpers, 8 centres, 91 private buffers. + 3. Allocation: lift.py rebuilds the T740 ORDER/DISPATCH/FILL from PR2979's literal T74 allocation (which PR3015 uses + unchanged) and allocation/RELOCATIONS.json; canonical payload SHA-256 values equal allocation/EXPECTED.json. + 4. Owners: PR2979's vendored owner engine (PR2839/PR2751 lineage) checks all 2,717,280 roles at T740 with the R1 + providers: helper identities, windows, same-call family exclusions, capacities, masks, compact prefixes, the complete + paid profile (= allocation/PROFILE.json) and the rank-mass identity. Physical stock = live + 408 + 8 + 91 + 2. + 5. Optimal face: PR3015's Fractions-only cap certificate for the R1 profile (certificates/R1-RELAX-CAP.json, + re-verified with PR2979's relax_exact.py); exact row multipliers fix [9,9,9]@32, [9,9,9,9,9]@48 and []@48 at 93/4, + 1341/20 and 7619/20 per replica (an integral optimum needs 20 | T); the literal idle histogram is exactly 740 x the + optimal basic idle profile; every literal bin pattern has identically zero reduced cost; the exact root bracket of the + literal profile equals the R1 cap bracket. + 6. Moment: the dyadic moment auditor (PR2917/PR2979 lineage) with its authenticated baseline re-pinned to PR3015's + headline: strict gain; exact comparison with PR3021's released headline: strict gain. + 7. CLAIM.json agrees with all of the above. +Failure controls are in controls.py (separately registered). +Rohan Arun, with substantial AI assistance (Anthropic Claude). Apache-2.0. +""" +import argparse +import collections +import hashlib +import json +import shutil +import sys +import tempfile +import time +import types +from fractions import Fraction as Q +from pathlib import Path + +PKG = Path(__file__).resolve().parent +SRC = PKG.parent / 'rank7-joint-endframes' +ROOT = PKG.parent.parent +sys.path.insert(0, str(PKG)) +import lift as L # noqa: E402 + +T, BUFFERS, HELPERS, CENTRES, GUARDS = 740, 91, 408, 8, 2 +R1_LOCAL = {1: 2443, 2: 707, 3: 232, 4: 108, 5: 18, 8: 8} + + +def need(condition, message): + if not condition: + raise AssertionError(message) + + +def sha(path): + return hashlib.sha256(Path(path).read_bytes()).hexdigest() + + +def load(name, path): + module = types.ModuleType(name) + module.__file__ = str(path) + sys.modules[name] = module + exec(compile(Path(path).read_bytes(), str(path), 'exec'), module.__dict__) + return module + + +def check_pins(): + sources = L.read(PKG / 'SOURCES.json') + inputs = [f for f in sources['files'] if f['usage'] == 'input'] + need(len(inputs) >= 13, 'pinned PR2979 inputs') + for f in inputs: + need(sha(ROOT / f['path']) == f['sha256'], 'live input pin ' + f['path']) + vendored = L.read(PKG / 'VENDOR.json')['files'] + need(len(vendored) == 6, 'vendored PR3015/PR3021 files') + for f in vendored: + data = (PKG / f['package_path']).read_bytes() + need(hashlib.sha256(data).hexdigest() == f['sha256'] and len(data) == f['bytes'], 'vendored pin ' + f['package_path']) + need(hashlib.sha1(b'blob %d\0' % len(data) + data).hexdigest() == f['git_blob'], 'vendored Git blob ' + f['package_path']) + return {f['path']: f['sha256'] for f in inputs} + + +def derive_providers(): + frames = load('rank7_frames_r1', SRC / 'vendor/preload_move.py') + registry = L.read(SRC / 'allocation/PROVIDERS.json') + derived = {} + for tag, pid in (('base', 'gauge44'), ('extra', 'extra')): + word = L.read(PKG / f'data/R1-WORD-{tag}.json.gz') + profile, inventory = frames.frame_report(word) + need(profile == word['report']['local_profile'] and inventory == word['report']['width_inventory'], 'frame report ' + tag) + helpers = sorted(set(range(224, 704)) - set(word['removed'])) + widths = [len(word['helper_final'].get(str(h), [0] * 9)) - len(word['start_extra'].get(str(h), [])) for h in helpers] + need(len(helpers) == HELPERS and len(word['centers']) == CENTRES, 'helpers ' + tag) + need(widths == registry[pid]['widths'], 'R1 keeps every ordered helper width of PR2979 ' + tag) + buffers = {r for gate in word['cleanup'] for r in (gate[1:3] if gate[0] == 'add' else gate[1:2]) if r >= 704} + need(buffers == {704 + int(h) for h in word['helper_final']} and len(buffers) == BUFFERS, 'private buffers ' + tag) + local = {int(k): v for k, v in profile.items()} + need(local == R1_LOCAL, 'R1 local profile ' + tag) + derived[pid] = {'widths': widths, 'actual_paid_profile': local} + return derived + + +def optimal_face(providers): + """Re-verify PR3015's R1 cap certificate; return (cap_lo, cap_hi, idle_per_replica, tight predicate, fixed counts).""" + sys.path.insert(0, str(SRC / 'tools')) + import relax as X + import relax_exact as RE + cert = L.read(PKG / 'certificates/R1-RELAX-CAP.json') + loc = {int(k): v for k, v in cert['local_per_call'].items()} + inv = {int(k): v for k, v in cert['inventory_per_call'].items()} + for pv in providers.values(): + need(pv['actual_paid_profile'] == loc and dict(collections.Counter(pv['widths'])) == inv, 'certificate = actual R1 words') + r = RE.verify_basis(cert['local_per_call'], cert['inventory_per_call'], cert['basis_patterns']) + need(r['status'] == 'PASS_EXACT_RELAXATION_CAP' and r['patterns'] == 2551 and r['tight_patterns'] == 12, 'cap certificate') + need((Q(r['cap_lower']), Q(r['cap_upper'])) == (Q(cert['cap_lower']), Q(cert['cap_upper'])), 'cap bracket') + widths, caps = sorted(inv), sorted(X.BINS) + basis = [RE.pattern_of(e, widths, X.BINS) for e in cert['basis_patterns']] + cols = [X.column(p, caps, widths) for p in basis] + Binv = X.rat_inverse([[cols[k][i] for k in range(len(basis))] for i in range(len(cols[0]))]) + Y = [] + for j in range(len(cols[0])): + row = collections.Counter() + for k, p in enumerate(basis): + if p[2] and Binv[k][j]: + row[p[2]] += Binv[k][j] + Y.append(row) + + def tight(cap, ws): + counts = tuple(list(ws).count(w) for w in widths) + idle = cap - sum(ws) + a = X.column((cap, counts, idle), caps, widths) + coeff = collections.Counter({idle: Q(1)} if idle else {}) + for j, aj in enumerate(a): + for k, v in Y[j].items(): + coeff[k] -= aj * v + return not any(v != 0 for v in coeff.values()) + tight_list = [(cap, counts) for cap, counts, idle in X.patterns(X.BINS, widths) + if tight(cap, [w for w, k in zip(widths, counts) for _ in range(k)])] + need(len(tight_list) == 12, 'twelve tight patterns') + rhs = [Q(X.BINS[c]) for c in caps] + [9 * Q(inv[w]) for w in widths] + tcols = [X.column((cap, counts, cap - sum(w * k for w, k in zip(widths, counts))), caps, widths) for cap, counts in tight_list] + + def fixed_count(index): + n = len(rhs) + rows = [[Q(tcols[j][i]) for i in range(n)] + [Q(int(j == index))] for j in range(len(tcols))] + piv, r_ = [], 0 + for col in range(n): + k = next((k for k in range(r_, len(rows)) if rows[k][col] != 0), None) + if k is None: + continue + rows[r_], rows[k] = rows[k], rows[r_] + rows[r_] = [v / rows[r_][col] for v in rows[r_]] + for k2 in range(len(rows)): + if k2 != r_ and rows[k2][col] != 0: + rows[k2] = [a - rows[k2][col] * b for a, b in zip(rows[k2], rows[r_])] + piv.append(col) + r_ += 1 + if any(all(v == 0 for v in row[:n]) and row[n] != 0 for row in rows): + return None + lam = [Q(0)] * n + for k, col in enumerate(piv): + lam[col] = rows[k][n] + return sum(l * b for l, b in zip(lam, rhs)) + name = lambda cap, counts: '%d:%s' % (cap, '+'.join(str(w) for w, k in zip(widths, counts) for _ in range(k)) or 'empty') + fixed = {name(*tight_list[j]): fixed_count(j) for j in range(len(tight_list))} + fixed = {k: v for k, v in fixed.items() if v is not None} + need(fixed.get('32:9+9+9') == Q(93, 4) and fixed.get('48:9+9+9+9+9') == Q(1341, 20) and fixed.get('48:empty') == Q(7619, 20), 'counts fixed on the optimal face') + need(all((T * v).denominator == 1 for v in fixed.values()) and any((74 * v).denominator != 1 for v in fixed.values()), 'integral at T740, not at T74') + need(all(any((t * v).denominator != 1 for v in fixed.values()) for t in range(1, 20)), 'no integral optimum for T < 20') + return (Q(r['cap_lower']), Q(r['cap_upper']), {int(k): Q(v) for k, v in r['idle_per_replica'].items()}, tight, + {k: str(v) for k, v in sorted(fixed.items())}) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument('--work', type=Path, help='optional fresh directory: writes the T740 allocation and RESULT.json') + args = ap.parse_args() + if not __debug__: + raise SystemExit('refusing python -O: this checker relies on assertions') + start = time.monotonic() + pins = check_pins() + providers = derive_providers() + engine = load('owners2979_r1', SRC / 'allocation/vendor/independent_owners.py') + plan, template = L.read(SRC / 'allocation/vendor/PLAN.json.gz'), L.read(SRC / 'allocation/vendor/TEMPLATE.json.gz') + relocations = L.read(PKG / 'allocation/RELOCATIONS.json') + expected = L.read(PKG / 'allocation/EXPECTED.json') + claimed = {int(k): v for k, v in L.read(PKG / 'allocation/PROFILE.json').items()} + need(len(relocations) == expected['relocations'] == 332, 'relocation count') + Tn, order, dispatch, fill, touched = L.build(SRC / 'allocation', relocations, providers) + need(Tn == T and len(touched) == expected['touched_bins'], 'T740 and touched bins') + payload = {'ORDER.json': L.digest(order), 'DISPATCH.json': L.digest(dispatch), 'FILL.json.gz': L.digest(fill), + 'PROFILE.json': L.digest({str(r): n for r, n in sorted(claimed.items())})} + need(payload == expected['payload_sha256'], 'canonical T740 payloads') + d = {(s, r): p for s, r, p in dispatch} + need(len(d) == len(dispatch) == 9 * T, 'unique literal dispatch') + t0 = time.monotonic() + result, win, _ = engine.check(T, order, fill, d, claimed, plan, template, providers) + engine_seconds = time.monotonic() - t0 + need(result['roles'] == 9 * T * HELPERS == 2717280 and result['rank_mass'] == 65088 * T, 'complete roles and mass') + physical = result['live'] + HELPERS + CENTRES + BUFFERS + GUARDS + need(physical == expected['physical'] == 663549, 'physical stock') + cap_lo, cap_hi, idle_rep, tight, fixed = optimal_face(providers) + idle = {int(k): v for k, v in result['idle'].items()} + need(idle == {r: T * n for r, n in idle_rep.items()}, 'literal idle histogram = 740 x optimal basic idle profile') + width = {pid: pv['widths'] for pid, pv in providers.items()} + contents = collections.defaultdict(list) + for t, h, o, c, p, z in fill['rows']: + contents[o, c, p].append(width[d[tuple(order[t])]][h]) + census = collections.Counter() + for (o, c), (cap, lo, hi) in win.items(): + for p in range(112): + census[cap, tuple(sorted(contents.get((o, c, p), [])))] += 1 + need(all(tight(cap, ws) for cap, ws in census), 'every literal bin pattern is on the optimal face') + sys.path.insert(0, str(SRC / 'tools')) + import root as R + lo, hi = R.kappa_from_profile(claimed, T) + need((lo, hi) == (cap_lo, cap_hi), 'exact root bracket of the literal profile = R1 fixed-capacity cap bracket') + claim3015 = L.read(PKG / 'comparators/PR3015-CLAIM.json') + claim3021 = L.read(PKG / 'comparators/PR3021-OUTER-CLAIM.json') + base_profile = {int(k): v for k, v in L.read(PKG / 'comparators/PR3015-PROFILE.json').items()} + need(base_profile == {int(k): v for k, v in claim3015['profile'].items()}, 'PR3015 profile file = its claim') + b_lo, b_hi = R.kappa_from_profile(base_profile, 74) + need(Q(claim3015['kappa']) < b_lo < b_hi < cap_lo, 'PR3015 literal T74 root below the R1 cap') + moment = load('moment_r1', PKG / 'tools/audit_allocation_moment.py') + with tempfile.TemporaryDirectory() as tmp: + cand, base = Path(tmp) / 'candidate', Path(tmp) / 'baseline' + cand.mkdir() + base.mkdir() + (cand / 'ORDER.json').write_bytes(L.canonical(order)) + (cand / 'PROFILE.json').write_bytes(L.canonical({str(r): n for r, n in sorted(claimed.items())})) + shutil.copyfile(PKG / 'comparators/PR3015-CLAIM.json', base / 'CLAIM.json') + shutil.copyfile(SRC / 'allocation/ORDER.json', base / 'ORDER.json') + shutil.copyfile(PKG / 'comparators/PR3015-PROFILE.json', base / 'PROFILE.json') + audit = moment.run(cand, base) + need(audit['status'] == 'PASS_SEPARATE_EXACT_RATIONAL_FRONTIER_MOMENT', 'moment auditor') + target = Q(audit['target']) + need(Q(audit['previous']) == Q(claim3015['kappa']) < target < lo, 'strict gain over the PR3015 headline') + need(Q(claim3021['kappa']) == Q(claim3021['kappa_rational']) < target, 'strict gain over the PR3021 released headline') + claim = L.read(PKG / 'CLAIM.json') + need(Q(claim['kappa']) == target and Q(claim['complex_lower']) == Q(audit['outer_endpoint']), 'claimed headline') + need(Q(claim['gain_over_pr3015']) == target - Q(claim3015['kappa']), 'claimed gain over PR3015') + need(Q(claim['gain_over_pr3021']) == target - Q(claim3021['kappa']), 'claimed gain over PR3021') + need((Q(claim['root_lower']), Q(claim['root_upper'])) == (lo, hi) == (Q(claim['fixed_inventory_cap']['cap_lower']), Q(claim['fixed_inventory_cap']['cap_upper'])), 'claimed root = cap') + need({int(k): v for k, v in claim['profile'].items()} == claimed and claim['replicas'] == T and claim['physical_families'] == physical, 'claimed profile/T/physical') + out = dict(status='PASS_RANK7_R1_T740_CAP', T=T, calls=9 * T, roles=result['roles'], relocations=len(relocations), + touched_bins=len(touched), physical=physical, idle=result['idle'], profile=result['profile'], + pattern_census={'%d:%s' % (cap, '+'.join(map(str, ws)) or 'empty'): n for (cap, ws), n in sorted(census.items())}, + fixed_on_optimal_face_per_replica=fixed, root_lower=str(lo), root_upper=str(hi), cap_lower=str(cap_lo), cap_upper=str(cap_hi), + pr3015_literal_root=[str(b_lo), str(b_hi)], target=audit['target'], target_decimal=audit['target_decimal'], + gain_over_pr3015=audit['gain'], gain_over_pr3015_decimal=audit['gain_decimal'], gain_over_pr3021=str(target - Q(claim3021['kappa'])), + gain_over_pr3021_float=float(target - Q(claim3021['kappa'])), payload_sha256=payload, input_sha256=pins, + engine_seconds=round(engine_seconds, 1), seconds=round(time.monotonic() - start, 1), + scope='Finite literal T740 owner geometry, paid profile and exact moment for PR3015\'s R1 words; their word/native ' + 'checks are inherited from PR3015/PR2979 unchanged; complete admission/outer release at T740 is separate.') + if args.work: + work = args.work.resolve() + need(not work.exists() and not work.is_relative_to(PKG), 'fresh work directory outside the package') + L.write(work / 'allocation', T, order, dispatch, fill, claimed) + (work / 'RESULT.json').write_text(json.dumps(out, sort_keys=True, indent=1) + '\n') + print(json.dumps({k: out[k] for k in ('status', 'T', 'roles', 'relocations', 'physical', 'idle', 'target_decimal', 'gain_over_pr3015_decimal', 'gain_over_pr3021_float', 'seconds')})) + print('PASS_RANK7_R1_T740_CAP', audit['target_decimal']) + + +if __name__ == '__main__': + main()