From bd746149b2648ca9825a4c8ad54062f553091c22 Mon Sep 17 00:00:00 2001 From: Rohan Arun Date: Sun, 11 Oct 2026 02:24:37 -0400 Subject: [PATCH 1/3] Reuse PR318 joint-dual source-pin repair without mathematical changes --- certificates/joint-dual-kappa.json | 2 +- certificates/joint-dual-validation.json | 2 +- research/joint-dual/SOURCE.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/certificates/joint-dual-kappa.json b/certificates/joint-dual-kappa.json index b7f7b89bc2..1f35b89221 100644 --- a/certificates/joint-dual-kappa.json +++ b/certificates/joint-dual-kappa.json @@ -842,7 +842,7 @@ "scripts/experiments/pin_joint_dual_sources.py": "4d31cc0e38b7902709ca5f8f714cba109760d2592346dd7f8dc0b900a2d9fe00", "scripts/experiments/verify_joint_dual.py": "7a31bba1e9c0ded32ae285df2ca9bc91ef20c330f6789fdba361876f3c7a1985" }, - "source_manifest_sha256": "4f3c15b82a2d97335d4fe95fb8bcb96bd2a921087da289d9da16c68213a17f17", + "source_manifest_sha256": "698fe862a620e5b80b85fbc6034c9456fa0fa9aea638dbbbcb3f9edd24c0415e", "sources": [ { "files": { diff --git a/certificates/joint-dual-validation.json b/certificates/joint-dual-validation.json index 194861d3c3..61a8d41622 100644 --- a/certificates/joint-dual-validation.json +++ b/certificates/joint-dual-validation.json @@ -226,7 +226,7 @@ } }, "bit_saving": "2382370177/50000000000000", - "certificate_sha256": "9801147b1502cf1e43d5fa39aa37f5291f03b48c30c4dd4f272e0877894a1c24", + "certificate_sha256": "6f684fa7f747073a132e8d0b5652cf12a8afa389f2a16ff6ade8e080d786dd22", "kappa": "4764513337/100000000000000", "margins": 7, "producer_words_regenerated_and_matched": true, diff --git a/research/joint-dual/SOURCE.json b/research/joint-dual/SOURCE.json index e3a8386b17..e1fbf9c5aa 100644 --- a/research/joint-dual/SOURCE.json +++ b/research/joint-dual/SOURCE.json @@ -3,9 +3,9 @@ "base_pr57_commit": "cd350f76c9bc01489ec83568bded532cb69be938", "base_pr58_commit": "bc2f7ed4c20dc18898305ab17165c0c995cbb804", "files": { - "Makefile": "768131bd4ce18433f6abccdc9812a38c92e11220e3a1019c6d95334b42f529d1", + "Makefile": "cd0fb59dc078d1fdf54a163ea13bb3660d03c8fe69c1a7f99fc8e5f476a3d5c2", "NOTICE": "b49022cb4104d90b182e4c335f670faf45529025b15db77bf0291835083c28bd", - "README.md": "d104c31d5b7e0d3a8d011a0e3517ab615e5b499b3dc05684f7ad3cadcd28bdae", + "README.md": "b81f8035b859007add6693c6d860371c9100a6766e494045495a28a457a5fcb9", "certificates/joint-dual-compiler.json": "516c4d85158553dabd0a98216a064b2a7397957a9d5dd0df1d6e5aec53a4e805", "certificates/joint-dual-profiles-23.json": "159fa8fee175fc1d24f63e72d3c2f1dc9f4fcd78b938c5e7d2f735fd0fd37209", "certificates/joint-dual-profiles-25.json": "8d190ce42d097e828c5756918c52f2963df576cf4c6600b0fc7f2b7fdb6ad223", From 588de5a2428c43df43bfbfd1b2ebd84952a58215 Mon Sep 17 00:00:00 2001 From: Rohan Arun Date: Sun, 11 Oct 2026 02:24:47 -0400 Subject: [PATCH 2/3] Compose the low-read E8 schedule with the nine-stage bit and complex components --- .github/workflows/e8-nine-stage-low-read.yml | 36 + research/e8-nine-stage-low-read/EXPECTED.json | 47 + research/e8-nine-stage-low-read/LICENSE | 201 + research/e8-nine-stage-low-read/MANIFEST.json | 242 + research/e8-nine-stage-low-read/NOTICE.md | 11 + research/e8-nine-stage-low-read/README.md | 45 + research/e8-nine-stage-low-read/SOURCES.json | 20 + .../candidate379.tar.gz | Bin 0 -> 108362 bytes .../e8-nine-stage-low-read/requirements.txt | 3 + .../e8-nine-stage-low-read/source381/LICENSE | 201 + .../source381/MANIFEST.sha256 | 230 + .../source381/NOTICE-PR352.md | 33 + .../source381/NOTICE.md | 33 + .../source381/README.md | 111 + .../source381/SOURCE-pr363.json | 12 + .../source381/SOURCE-pr370.json | 63 + .../source381/SOURCE-pr373.json | 15 + .../source381/SOURCE-pr375.json | 18 + .../source381/SOURCE-pr377.json | 173 + .../code/bit/checkers/certify_bit_g.py | 46 + .../code/bit/checkers/certify_bit_k.py | 59 + .../source381/code/bit/checkers/columns_h.cpp | 48 + .../source381/code/bit/checkers/columns_k.cpp | 62 + .../source381/code/bit/checkers/cost.py | 62 + .../source381/code/bit/checkers/exactnd_h.py | 44 + .../source381/code/bit/checkers/finite_g.py | 146 + .../source381/code/bit/checkers/finite_k.py | 154 + .../source381/code/bit/checkers/geometry_g.py | 137 + .../source381/code/bit/checkers/geometry_k.py | 163 + .../code/bit/checkers/gram_frames.py | 54 + .../source381/code/bit/checkers/json.hpp | 25526 ++++++++++++++++ .../code/bit/checkers/legality_h.cpp | 13 + .../source381/code/bit/checkers/tile_g.py | 40 + .../source381/code/bit/checkers/tile_k.py | 41 + .../source381/code/bit/export_records.py | 72 + .../code/bit/independent/centres_sat.py | 34 + .../code/bit/independent/checkword.py | 143 + .../source381/code/bit/independent/mutate.py | 31 + .../source381/code/bit/mutate_records.py | 34 + .../source381/code/bit/producer/compile.py | 201 + .../source381/code/bit/producer/compile2.py | 142 + .../source381/code/bit/producer/e8lib.py | 79 + .../source381/code/bit/producer/frames.py | 45 + .../source381/code/bit/producer/fullword.py | 75 + .../source381/code/bit/producer/ham1.py | 81 + .../source381/code/bit/producer/ham2.py | 131 + .../code/bit/producer/params-r865.json | 2082 ++ .../source381/code/bit/producer/price.py | 23 + .../source381/code/bit/producer/search2.py | 44 + .../source381/code/bit/receipts_e8.py | 23 + .../source381/code/bit/receipts_k.py | 24 + .../code/bit/regression/certify_bit.py | 45 + .../code/bit/regression/columns_h_pr346.cpp | 42 + .../source381/code/bit/regression/cost.py | 62 + .../source381/code/bit/regression/json.hpp | 25526 ++++++++++++++++ .../code/bit/regression/legality_h_pr346.cpp | 7 + .../code/bit/regression/prime_new.py | 23 + .../code/bit/regression/prime_witnesses.py | 99 + .../code/bit/regression/stage_cohort.py | 12 + .../code/bit/regression/tile_check.py | 38 + .../source381/code/complex/code/bridged.py | 105 + .../source381/code/pricing/base_two_moment.py | 63 + .../source381/code/pricing/moment.py | 113 + .../source381/code/pricing/outer.py | 58 + .../source381/code/pricing/prime_witnesses.py | 99 + .../source381/code/provenance.py | 13 + .../source381/complex377/LICENSE | 201 + .../source381/complex377/MANIFEST.json | 166 + .../source381/complex377/README.md | 111 + .../source381/complex377/README.txt | 10 + .../source381/complex377/verify.py | 32 + .../work/complex-nine-native/PROOF.txt | 161 + .../native358/vendor/complex-reserve/LICENSE | 201 + .../vendor/complex-reserve/MANIFEST.json | 147 + .../vendor/complex-reserve/NOTICE.md | 9 + .../vendor/complex-reserve/SOURCE.json | 38 + .../native358/vendor/complex-reserve/admit.py | 51 + .../vendor/complex-reserve/finite_guard.py | 41 + .../native358/vendor/complex-reserve/price.py | 39 + .../complex-reserve/upstream/pr352/LICENSE | 201 + .../complex-reserve/upstream/pr352/NOTICE.md | 33 + .../complex-reserve/upstream/pr352/README.md | 131 + .../upstream/pr352/SOURCE-pr346.json | 129 + .../upstream/pr352/code/builders/addcomp.py | 12 + .../upstream/pr352/code/builders/build_v5.py | 453 + .../upstream/pr352/code/builders/decomp.py | 6 + .../upstream/pr352/code/builders/gather.py | 58 + .../upstream/pr352/code/builders/interface.py | 70 + .../upstream/pr352/code/builders/twin.py | 160 + .../pr352/code/checkers/columns_h.cpp | 42 + .../upstream/pr352/code/checkers/exactnd_h.py | 44 + .../upstream/pr352/code/checkers/json.hpp | 25526 ++++++++++++++++ .../pr352/code/checkers/legality_h.cpp | 7 + .../upstream/pr352/code/checkers/sub.hpp | 148 + .../upstream/pr352/code/checkers/verifyT.cpp | 62 + .../pr352/code/complex/certify_complex.py | 45 + .../pr352/code/complex/code/complex_basis.py | 35 + .../pr352/code/complex/code/complex_gx.py | 77 + .../pr352/code/complex/code/complex_labels.py | 185 + .../code/complex/code/complex_scalars.py | 219 + .../pr352/code/complex/code/complex_splice.py | 283 + .../pr352/code/complex/code/p10pins.py | 15 + .../pr352/code/complex/code/scatter.py | 33 + .../pr352/code/complex/inputs/complex/LICENSE | 201 + .../pr352/code/complex/inputs/complex/NOTICE | 290 + .../inputs/complex/retained/FINITE_BRIDGE.txt | 141 + .../retained/compact-control-layout.tex | 118 + .../retained/compact-control-movement.tex | 167 + .../retained/copied-centers-assembly.tex | 118 + .../complex/retained/copied-centers-lemma.tex | 103 + .../retained/endpoint-gauge-complex.tex | 225 + .../retained/general-clifford-frames.tex | 102 + .../retained/stopped-product-complex.tex | 137 + .../complex/inputs/complex/source-pins.json | 482 + .../complex/sources/Work__Bridge__Cert.lean | 241 + .../complex/sources/Work__Bridge__Net.lean | 345 + .../complex/sources/Work__Carrier__Live.lean | 232 + .../sources/Work__Carrier__Phases.lean | 192 + .../complex/sources/Work__Fourier__Main.lean | 176 + .../sources/Work__GCert__Chain__Geom.lean | 210 + .../sources/Work__GCert__Chain__InvThm.lean | 164 + .../sources/Work__GCert__Chain__NetCert.lean | 157 + .../sources/Work__GCert__Chain__NetDef.lean | 157 + .../sources/Work__GCert__Chain__NetStage.lean | 186 + .../sources/Work__GCert__Chain__Phased.lean | 199 + .../sources/Work__GCert__Chain__WinB.lean | 132 + .../Work__GCert__Data__B2Gp193Main.lean | 33 + .../sources/Work__GCert__Data__Glue.lean | 97 + .../Work__GCert__Data__InstB2Gp193.lean | 55 + .../sources/Work__GCert__Data__P193Cert.lean | 81 + .../sources/Work__GCert__Data__P193Price.lean | 54 + .../Work__GCert__Data__P193ScalOK.lean | 17 + .../Work__GCert__Data__RateB2Gp193x.lean | 327 + .../sources/Work__GCert__Data__Raw.lean | 93 + .../Work__GCert__Data__SolutionB2Gp193x.lean | 38 + .../sources/Work__GFrame__Engine__Adapt.lean | 183 + .../Work__GFrame__Engine__Letters.lean | 199 + .../sources/Work__GFrame__Engine__Level.lean | 163 + .../complex/sources/tools__gx__ORIGIN.md | 64 + .../inputs/complex/sources/tools__gx__gx.py | 296 + .../complex/sources/tools__gx__gxbind.py | 438 + .../complex/sources/tools__gx__gxconv.py | 131 + .../complex/sources/tools__gx__gxcore.py | 375 + .../pr352/code/complex/inputs/e8/LICENSE | 201 + .../pr352/code/complex/inputs/e8/NOTICE | 489 + .../inputs/e8/Work/GCert/Data/B2Ge8.lean | 103 + .../inputs/e8/Work/GCert/Data/B2Ge8Main.lean | 33 + .../e8/Work/GCert/Data/ChallengeB2Ge8x.lean | 331 + .../inputs/e8/Work/GCert/Data/E8Cert.lean | 78 + .../inputs/e8/Work/GCert/Data/E8Price.lean | 54 + .../inputs/e8/Work/GCert/Data/E8ScalOK.lean | 15 + .../inputs/e8/Work/GCert/Data/Gen/E8.lean | 12 + .../inputs/e8/Work/GCert/Data/Gen/E8/S0.lean | 128 + .../inputs/e8/Work/GCert/Data/Gen/E8End.lean | 10 + .../inputs/e8/Work/GCert/Data/Gen/E8Hist.lean | 46 + .../inputs/e8/Work/GCert/Data/Gen/E8Par.lean | 8 + .../e8/Work/GCert/Data/Gen/E8Scal0.lean | 10 + .../inputs/e8/Work/GCert/Data/Gen/E8Seg0.lean | 9 + .../inputs/e8/Work/GCert/Data/Gen/E8Seg1.lean | 9 + .../inputs/e8/Work/GCert/Data/Gen/E8SegF.lean | 9 + .../inputs/e8/Work/GCert/Data/Gen/E8Tab0.lean | 10 + .../inputs/e8/Work/GCert/Data/Gen/E8Tab1.lean | 10 + .../inputs/e8/Work/GCert/Data/Gen/E8Tab2.lean | 10 + .../inputs/e8/Work/GCert/Data/Gen/E8Tab3.lean | 10 + .../inputs/e8/Work/GCert/Data/Gen/E8YChk.lean | 10 + .../inputs/e8/Work/GCert/Data/InstB2Ge8.lean | 55 + .../inputs/e8/Work/GCert/Data/RateB2Ge8.lean | 207 + .../inputs/e8/Work/GCert/Data/RateB2Ge8x.lean | 207 + .../e8/Work/GCert/Data/SolutionB2Ge8x.lean | 38 + .../complex/inputs/e8/comparator/B2Ge8x.json | 14 + .../tools/certificate/gcert1-e8-r783.json.gz | Bin 0 -> 21883 bytes .../code/complex/inputs/e8/tools/e8/replay.py | 797 + .../complex/inputs/e8/tools/gen/foldgen.py | 128 + .../complex/inputs/e8/tools/gen/foldlib.py | 146 + .../complex/inputs/e8/tools/gen/gen_rates.py | 30 + .../complex/inputs/e8/tools/gen/gen_sharp.py | 33 + .../gen/templates/ChallengeB2L16x.lean.txt | 331 + .../gen/templates/SolutionB2L16x.lean.txt | 38 + .../complex/inputs/e8/tools/gx/gsmirror.py | 332 + .../code/complex/inputs/e8/tools/gx/gxbind.py | 438 + .../code/complex/inputs/e8/tools/gx/gxcore.py | 375 + .../code/complex/inputs/e8/tools/gx/gxgen.py | 256 + .../complex/inputs/e8/tools/gx/gxpaths.py | 21 + .../code/complex/inputs/e8/tools/gx/gxrate.py | 195 + .../code/complex/inputs/e8/tools/gx/gxunit.py | 47 + .../complex/inputs/e8/tools/gx/regen_check.py | 80 + .../inputs/e8/tools/gx/regen_check_e8.py | 41 + .../upstream/pr352/code/complex/pins-e8.json | 58 + .../pr352/code/complex/portable_complex.py | 160 + .../pr352/code/complex/regress_pr346.py | 48 + .../upstream/pr352/code/export_p10.py | 37 + .../pr352/code/pricing/base_two_moment.py | 63 + .../pr352/code/pricing/certify_bit.py | 45 + .../upstream/pr352/code/pricing/cost.py | 62 + .../upstream/pr352/code/pricing/moment.py | 113 + .../upstream/pr352/code/pricing/outer.py | 58 + .../upstream/pr352/code/pricing/prime_new.py | 23 + .../pr352/code/pricing/prime_witnesses.py | 99 + .../upstream/pr352/code/pricing/tile_check.py | 38 + .../upstream/pr352/code/provenance.py | 15 + .../upstream/pr352/code/stage_cohort.py | 12 + .../pr352/data/bit/BASE-RECORDS.bin.gz | Bin 0 -> 1466081 bytes .../pr352/data/bit/BASE-frames.json.gz | Bin 0 -> 311369 bytes .../pr352/data/bit/BASE-states.json.gz | Bin 0 -> 61146 bytes .../pr352/data/bit/FINAL-NEW-FRAMES.json | 1 + .../pr352/data/bit/FINAL-RECORDS.bin.gz | Bin 0 -> 1458785 bytes .../upstream/pr352/data/bit/RECORD-SHA256SUMS | 2 + .../upstream/pr352/data/bit/labels.json | 1 + .../pr352/receipts/complex-guard-e8.json | 990 + .../upstream/pr352/receipts/kappa.json | 32 + .../receipts/official-five-stage-columns.json | 164 + .../pr352/receipts/official-legality.json | 90 + .../upstream/pr352/requirements.txt | 2 + .../complex-reserve/upstream/pr352/verify.sh | 40 + .../vendor/complex-reserve/verify.py | 74 + .../complex377/work/odd-stages/RECIPE-9.json | 114 + .../work/odd-stages/audit_nine_template.py | 76 + .../work/odd-stages/clifford_exact.py | 149 + .../work/odd-stages/complex_candidate.py | 109 + .../complex377/work/odd-stages/data_phases.py | 98 + .../complex377/work/odd-stages/global_nine.py | 115 + .../complex377/work/odd-stages/outer_fixed.py | 16 + .../work/odd-stages/verify_clifford_frames.py | 64 + .../pr361/code/engines/base_two_moment.py | 63 + .../work/pr361/code/engines/moment.py | 113 + .../work/pr361/code/engines/outer.py | 58 + .../work/pr361/complex/gcert1-e8-r783.json.gz | Bin 0 -> 21883 bytes .../source381/data/bit/RECORD-SHA256SUMS | 3 + .../source381/data/bit/bitE8-r865.json.gz | Bin 0 -> 33865 bytes .../data/regression-p10/BASE-RECORDS.bin.gz | Bin 0 -> 1466081 bytes .../data/regression-p10/BASE-frames.json.gz | Bin 0 -> 311369 bytes .../data/regression-p10/BASE-states.json.gz | Bin 0 -> 61146 bytes .../receipts-loans/banks.json.gz | Bin 0 -> 4563 bytes .../receipts-loans/finite.json.gz | Bin 0 -> 2176 bytes .../receipts-loans/global_result.json.gz | Bin 0 -> 1267 bytes .../receipts-loans/math.json.gz | Bin 0 -> 3710 bytes .../regression-p10/receipts-loans/raw.json.gz | Bin 0 -> 115683 bytes .../receipts-loans/scalar.json.gz | Bin 0 -> 1505 bytes .../source381/requirements.txt | 3 + .../source381/verify.sh | 122 + .../support/bits/stdc++.h | 11 + research/e8-nine-stage-low-read/verify.py | 123 + 242 files changed, 102826 insertions(+) create mode 100644 .github/workflows/e8-nine-stage-low-read.yml create mode 100644 research/e8-nine-stage-low-read/EXPECTED.json create mode 100644 research/e8-nine-stage-low-read/LICENSE create mode 100644 research/e8-nine-stage-low-read/MANIFEST.json create mode 100644 research/e8-nine-stage-low-read/NOTICE.md create mode 100644 research/e8-nine-stage-low-read/README.md create mode 100644 research/e8-nine-stage-low-read/SOURCES.json create mode 100644 research/e8-nine-stage-low-read/candidate379.tar.gz create mode 100644 research/e8-nine-stage-low-read/requirements.txt create mode 100644 research/e8-nine-stage-low-read/source381/LICENSE create mode 100644 research/e8-nine-stage-low-read/source381/MANIFEST.sha256 create mode 100644 research/e8-nine-stage-low-read/source381/NOTICE-PR352.md create mode 100644 research/e8-nine-stage-low-read/source381/NOTICE.md create mode 100644 research/e8-nine-stage-low-read/source381/README.md create mode 100644 research/e8-nine-stage-low-read/source381/SOURCE-pr363.json create mode 100644 research/e8-nine-stage-low-read/source381/SOURCE-pr370.json create mode 100644 research/e8-nine-stage-low-read/source381/SOURCE-pr373.json create mode 100644 research/e8-nine-stage-low-read/source381/SOURCE-pr375.json create mode 100644 research/e8-nine-stage-low-read/source381/SOURCE-pr377.json create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_g.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_k.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/columns_h.cpp create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/columns_k.cpp create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/cost.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/exactnd_h.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_g.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_k.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_g.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_k.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/gram_frames.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/json.hpp create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/legality_h.cpp create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/tile_g.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/checkers/tile_k.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/export_records.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/independent/centres_sat.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/independent/checkword.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/independent/mutate.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/mutate_records.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/compile.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/compile2.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/e8lib.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/frames.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/fullword.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/ham1.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/ham2.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/params-r865.json create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/price.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/producer/search2.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/receipts_e8.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/receipts_k.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/certify_bit.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/columns_h_pr346.cpp create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/cost.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/json.hpp create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/legality_h_pr346.cpp create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/prime_new.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/prime_witnesses.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/stage_cohort.py create mode 100644 research/e8-nine-stage-low-read/source381/code/bit/regression/tile_check.py create mode 100644 research/e8-nine-stage-low-read/source381/code/complex/code/bridged.py create mode 100644 research/e8-nine-stage-low-read/source381/code/pricing/base_two_moment.py create mode 100644 research/e8-nine-stage-low-read/source381/code/pricing/moment.py create mode 100644 research/e8-nine-stage-low-read/source381/code/pricing/outer.py create mode 100644 research/e8-nine-stage-low-read/source381/code/pricing/prime_witnesses.py create mode 100644 research/e8-nine-stage-low-read/source381/code/provenance.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/LICENSE create mode 100644 research/e8-nine-stage-low-read/source381/complex377/MANIFEST.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/README.md create mode 100644 research/e8-nine-stage-low-read/source381/complex377/README.txt create mode 100644 research/e8-nine-stage-low-read/source381/complex377/verify.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/complex-nine-native/PROOF.txt create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/LICENSE create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/MANIFEST.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/NOTICE.md create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/SOURCE.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/admit.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/finite_guard.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/price.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/LICENSE create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/NOTICE.md create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/README.md create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/SOURCE-pr346.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/addcomp.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/build_v5.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/decomp.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/gather.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/interface.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/twin.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/columns_h.cpp create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/exactnd_h.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/json.hpp create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/legality_h.cpp create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/sub.hpp create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/verifyT.cpp create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/certify_complex.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_basis.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_gx.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_labels.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_scalars.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_splice.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/p10pins.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/scatter.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/LICENSE create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/NOTICE create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/FINITE_BRIDGE.txt create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-layout.tex create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-movement.tex create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-assembly.tex create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-lemma.tex create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/endpoint-gauge-complex.tex create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/general-clifford-frames.tex create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/stopped-product-complex.tex create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/source-pins.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Cert.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Net.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Live.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Phases.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Fourier__Main.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Geom.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__InvThm.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetCert.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetDef.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetStage.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Phased.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__WinB.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__B2Gp193Main.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Glue.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__InstB2Gp193.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Cert.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Price.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193ScalOK.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__RateB2Gp193x.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Raw.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__SolutionB2Gp193x.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Adapt.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Letters.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Level.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__ORIGIN.md create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gx.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxbind.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxconv.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxcore.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/LICENSE create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/NOTICE create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8Main.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/ChallengeB2Ge8x.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Cert.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Price.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8ScalOK.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8/S0.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8End.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Hist.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Par.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Scal0.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg0.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg1.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8SegF.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab0.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab1.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab2.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab3.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8YChk.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/InstB2Ge8.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8x.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/SolutionB2Ge8x.lean create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/comparator/B2Ge8x.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/certificate/gcert1-e8-r783.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/e8/replay.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldgen.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldlib.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_rates.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_sharp.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/ChallengeB2L16x.lean.txt create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/SolutionB2L16x.lean.txt create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gsmirror.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxbind.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxcore.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxgen.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxpaths.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxrate.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxunit.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check_e8.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/pins-e8.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/portable_complex.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/regress_pr346.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/export_p10.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/base_two_moment.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/certify_bit.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/cost.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/moment.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/outer.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_new.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_witnesses.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/tile_check.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/provenance.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/stage_cohort.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-RECORDS.bin.gz create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-frames.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-states.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-NEW-FRAMES.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-RECORDS.bin.gz create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/RECORD-SHA256SUMS create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/labels.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/complex-guard-e8.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/kappa.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-five-stage-columns.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-legality.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/requirements.txt create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/verify.sh create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/native358/vendor/complex-reserve/verify.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/RECIPE-9.json create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/audit_nine_template.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/clifford_exact.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/complex_candidate.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/data_phases.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/global_nine.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/outer_fixed.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/odd-stages/verify_clifford_frames.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/pr361/code/engines/base_two_moment.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/pr361/code/engines/moment.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/pr361/code/engines/outer.py create mode 100644 research/e8-nine-stage-low-read/source381/complex377/work/pr361/complex/gcert1-e8-r783.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/bit/RECORD-SHA256SUMS create mode 100644 research/e8-nine-stage-low-read/source381/data/bit/bitE8-r865.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/BASE-RECORDS.bin.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/BASE-frames.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/BASE-states.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/receipts-loans/banks.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/receipts-loans/finite.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/receipts-loans/global_result.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/receipts-loans/math.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/receipts-loans/raw.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/data/regression-p10/receipts-loans/scalar.json.gz create mode 100644 research/e8-nine-stage-low-read/source381/requirements.txt create mode 100644 research/e8-nine-stage-low-read/source381/verify.sh create mode 100644 research/e8-nine-stage-low-read/support/bits/stdc++.h create mode 100644 research/e8-nine-stage-low-read/verify.py diff --git a/.github/workflows/e8-nine-stage-low-read.yml b/.github/workflows/e8-nine-stage-low-read.yml new file mode 100644 index 0000000000..4fda4886e8 --- /dev/null +++ b/.github/workflows/e8-nine-stage-low-read.yml @@ -0,0 +1,36 @@ +name: Verify nine-stage E8 low-read composition +on: + pull_request: + paths: + - 'research/e8-nine-stage-low-read/**' + - '.github/workflows/e8-nine-stage-low-read.yml' + push: + paths: + - 'research/e8-nine-stage-low-read/**' + - '.github/workflows/e8-nine-stage-low-read.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 + with: + python-version: ${{ matrix.python }} + - name: Install verifier dependencies + run: | + sudo apt-get update + sudo apt-get install -y g++ libboost-dev + python -m pip install -r research/e8-nine-stage-low-read/requirements.txt + - name: Replay source and new certificate + run: python -B research/e8-nine-stage-low-read/verify.py "$RUNNER_TEMP/e8-composed" + - name: Confirm source tree unchanged + run: git diff --exit-code diff --git a/research/e8-nine-stage-low-read/EXPECTED.json b/research/e8-nine-stage-low-read/EXPECTED.json new file mode 100644 index 0000000000..16b27c43e3 --- /dev/null +++ b/research/e8-nine-stage-low-read/EXPECTED.json @@ -0,0 +1,47 @@ +{ + "K": 4, + "stages": 9, + "halving_degree": 2, + "idle_blocks_per_role_pair": [ + 50, + 14, + 7, + 36, + 28, + 7, + 22, + 42, + 7, + 8 + ], + "h": 8, + "T": 9, + "maxchild": 50, + "bit_moment_interval": [ + "13479973333575319870289313525043061666739007764000319276683749596397/13479973333575319897333507543509815336818572211270286240551805124608", + "6739986666787659935144656762521530833369503882000159638341874798199/6739986666787659948666753771754907668409286105635143120275902562304" + ], + "normalized_histogram": { + "1": 169776, + "2": 75330, + "3": 36774, + "4": 31590, + "5": 24948, + "6": 162, + "8": 3618, + "7": 7614, + "50": 2160, + "14": 2160, + "36": 2160, + "28": 2160, + "22": 2160, + "42": 2160 + }, + "W": 16425, + "m": 72, + "bit_coarse": "997756388440101/1000000000000000000", + "complex_coarse": "999240641319551/1000000000000000000", + "binding": "bit", + "kappa": "996761861969671/1000000000000000000", + "kappa_float": 0.000996761861969671 +} diff --git a/research/e8-nine-stage-low-read/LICENSE b/research/e8-nine-stage-low-read/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-nine-stage-low-read/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-nine-stage-low-read/MANIFEST.json b/research/e8-nine-stage-low-read/MANIFEST.json new file mode 100644 index 0000000000..637c28e918 --- /dev/null +++ b/research/e8-nine-stage-low-read/MANIFEST.json @@ -0,0 +1,242 @@ +{ + "EXPECTED.json": "4f09ca67e7cec10d033a4460441310f03c6ba35e2236dc174a725dc6f2d1b50d", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "NOTICE.md": "005e67063bd0dcb9d1aeb0156539f99bd08df551718cb0d34315de57d7aeaa49", + "README.md": "b828a802f18891e0d48426d8d5678da690c188983f3ba2c6d0813ca3f0cad917", + "SOURCES.json": "e510c19b3c7e4a96eafec4c7679bd4373324c4cbd38208e63fadaced8e912ec2", + "candidate379.tar.gz": "827c0b6859f2b1ff7e5f5fbac955d61ecb25c828e7a0ff4dbc279ba6854d6a9d", + "requirements.txt": "12ce61badd5c50c101d6d759e1de6bc494be3f906df49a63b6db20d7e54a7348", + "source381/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source381/MANIFEST.sha256": "5cf9a292cbc046e81e18666b8ec3588cb0dad80e50b10a498a565cbf8ac93d30", + "source381/NOTICE-PR352.md": "967e6d7e76e216e4898cf543c75b527e8d397ec1ddba3800cb20701f24c89524", + "source381/NOTICE.md": "56995c03a75e590e192f8f07a24a0f8a23494fbb37a1f7fc131c2e1942af6bd9", + "source381/README.md": "75b5011d5633b6a291eb9d21d25913afdb4d20946a4fcfaafc2f02570868b126", + "source381/SOURCE-pr363.json": "8d7bd2ab583f3aecd4658226c37fff7b8fe86443e0c2bf1ebc8b49875ade6c5e", + "source381/SOURCE-pr370.json": "cf0a6fc0332c921ad7b65883ec05cf3083c0956e32b5dbc620442c834022833b", + "source381/SOURCE-pr373.json": "3423fe9da587ceeabd5c131bf0373d500a083217bebc574c14add5cd5c4b1ca4", + "source381/SOURCE-pr375.json": "e29543f847e5064ac4b808526af47b9782a891eccf5d62718ec944bde30888c3", + "source381/SOURCE-pr377.json": "0acfb5da9979baee00660b9b9761b9208398e73354e33a0dbadf2817dcdcb4f2", + "source381/code/bit/checkers/certify_bit_g.py": "c9a31508126f34e7ac95d802c39e8919a872cd705314de5bf3538de1636ce8ce", + "source381/code/bit/checkers/certify_bit_k.py": "e68a81ef7981a90d613752003cd5cab5351e260f909b094f1668d8a4dfe480df", + "source381/code/bit/checkers/columns_h.cpp": "d1297f9052be4f2496e1ff2a77e4db2c0cdbd7d460d489b4c03e50bf317238ce", + "source381/code/bit/checkers/columns_k.cpp": "1c344d18fcd494eeca93e259f10cafae7705780e6592f6dcb35b34752dab9bc2", + "source381/code/bit/checkers/cost.py": "d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f", + "source381/code/bit/checkers/exactnd_h.py": "28a0d8ee29ac75b8a789705454987f07d618f135ed1f1bd45b97f18bcc4163e3", + "source381/code/bit/checkers/finite_g.py": "a591d8caa9ab50a4c7ec6934c71c93fc18fd14680180b43071e8d9d704f7ac9a", + "source381/code/bit/checkers/finite_k.py": "7e67dc75e63a11e38ac6d6615656c7cf6982e5a33dd404d04b967bf474cad02e", + "source381/code/bit/checkers/geometry_g.py": "b9fa3cd05f36f5fcebfdebfb4a86fb90e92ed3c1d9157c52918ee8c5b563b54f", + "source381/code/bit/checkers/geometry_k.py": "646b7e8773d9c99376cb00627f109a97319e6d72b439ff513c39035c28c3f70f", + "source381/code/bit/checkers/gram_frames.py": "223a5a07731fc315a90a3e48177796babc155c1d9985c7ae5017eff6af2a0608", + "source381/code/bit/checkers/json.hpp": "aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63", + "source381/code/bit/checkers/legality_h.cpp": "6c1ef2b24e57781d6951c172a1024fc4300e6fd392c9d6672079a7806ab663b3", + "source381/code/bit/checkers/tile_g.py": "8140eec180e42202f2c6a9f11f5c92885e60861c38a7611dd805c524e3438138", + "source381/code/bit/checkers/tile_k.py": "64255088821f601ede2c3006f08cb97c39a4fa10dbbeb93a8a71fcfa0e1d8d77", + "source381/code/bit/export_records.py": "8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3", + "source381/code/bit/independent/centres_sat.py": "f69379968367544807db2f0cf14359977e56299383b3edcc4469ddea7c7ecb40", + "source381/code/bit/independent/checkword.py": "11bf9620ca9db16d52d9fe806b814fc9ec9a89c4d7645354d1861d96f6e805ad", + "source381/code/bit/independent/mutate.py": "0ff65aace5da4b57d96235bf830f8f11969322e75134d498aeb70e9753ec6b0d", + "source381/code/bit/mutate_records.py": "b0e75d6550412a7be4017695e6b237392b611bb852ad8ff309d6682c9f166a4e", + "source381/code/bit/producer/compile.py": "60fea6a9d6617a3f87376d3fda040642e9cb70e7c179015e03ede8d289f30357", + "source381/code/bit/producer/compile2.py": "0e23d4282ceb75768e82631da016aaff9818aec53c7d75a6b2a28ee1b1160dc3", + "source381/code/bit/producer/e8lib.py": "4f8a6843e83bc4f7055d7337f33dbe12ce499051f46bee1b81bbf6b34c652574", + "source381/code/bit/producer/frames.py": "ba71f77dd3e3c1c54f361c066cebe9faadbc78db46376046e7af625bf1de8c24", + "source381/code/bit/producer/fullword.py": "0daf87599e9e48646b985ad87351c56c1b73cfc99cdf9eca081483846ddbfa90", + "source381/code/bit/producer/ham1.py": "359040fb432fd392472af6b8f5dca0234dd6c2be744a791df27ba62bc5da5175", + "source381/code/bit/producer/ham2.py": "fdf0af785ce697bd7f80b4e75f7163735f3b599d9dc42f652f0ffdbdf18ea8bf", + "source381/code/bit/producer/params-r865.json": "1256c54debe0a551da8e24896ab73ef0bd4a5233ff8e6fedf21a9e6301d6e6f3", + "source381/code/bit/producer/price.py": "46c858e60ba0a117bf8227b864abf55e85ebee2d56a0dce64472b706499ac405", + "source381/code/bit/producer/search2.py": "4999c5d6bac9757e4236c45435201631eae21f644dc9543d8c0b6e3cc8360daf", + "source381/code/bit/receipts_e8.py": "935ea65d9c6739e868ccf1aa439bd3c246657dfc887e4a0222a8f0901a5b41a5", + "source381/code/bit/receipts_k.py": "67f714e10a846e9cc62996342f825cd715055031e0b12591abdafd225717e195", + "source381/code/bit/regression/certify_bit.py": "fc03e8f7bf73d7d70346b87c835d44508b0581c9ff9aec708fbbd4f0121e0394", + "source381/code/bit/regression/columns_h_pr346.cpp": "26f5c9be3a7f545d50be458e3d17403921b5542a7dcd2986c848664a774977a8", + "source381/code/bit/regression/cost.py": "d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f", + "source381/code/bit/regression/json.hpp": "aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63", + "source381/code/bit/regression/legality_h_pr346.cpp": "5661d0b91e07d95736bde4c1824f27bebaecce0a84e38403f5391ebc51a52056", + "source381/code/bit/regression/prime_new.py": "7bd5cb48537621f1217d174274d42483da4e2d02feec238643c798c36b30366a", + "source381/code/bit/regression/prime_witnesses.py": "98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab", + "source381/code/bit/regression/stage_cohort.py": "6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a", + "source381/code/bit/regression/tile_check.py": "38c3f78daac118395565a65fa3543b1c349638ff2519ce7fda0dad2d788e90ae", + "source381/code/complex/code/bridged.py": "5fe7174cd3a6580a74e4c1bf8fa7b426e8673f1c285603bf3076d4e758d70731", + "source381/code/pricing/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "source381/code/pricing/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "source381/code/pricing/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "source381/code/pricing/prime_witnesses.py": "98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab", + "source381/code/provenance.py": "2d85285d54b287c8362b11311ac72999d6faa6b22a9f102c99150b26fcf35f3c", + "source381/complex377/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source381/complex377/MANIFEST.json": "3743f954b5a652e51fa9ae5101318345d79f4c897ff9a29d5c54387b92118458", + "source381/complex377/README.md": "a62afee2856e1eb096250efd3202a429cd4118e7d9a114e7b9c67e3c168df3ab", + "source381/complex377/README.txt": "ffe26cdb8a7e083f2f745b6cf18916a6af4f1635bc5b1577f30fb1ca4e575e07", + "source381/complex377/verify.py": "f99a2601b4864bb596955933b41f45a04e9c9b300b23e4aae2cb2934ec5d8c74", + "source381/complex377/work/complex-nine-native/PROOF.txt": "ea0edb8cfb6b2f2c1adb2de12cc0aa5fb7c57e649033528565af3e52087beda7", + "source381/complex377/work/native358/vendor/complex-reserve/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source381/complex377/work/native358/vendor/complex-reserve/MANIFEST.json": "3d0d867b84b86dd9f0850cedce9a6de83f2313a604bdef58f7235af30f94bcbd", + "source381/complex377/work/native358/vendor/complex-reserve/NOTICE.md": "380ce615ddb67da3680fa188a0ba0daf578b983d58c2496cd20dd06f32e4ef57", + "source381/complex377/work/native358/vendor/complex-reserve/SOURCE.json": "e69f2a72785302f892263cf765c84d07e083d9ad05730748f9c3374aade11e53", + "source381/complex377/work/native358/vendor/complex-reserve/admit.py": "1b9b069fbdef37b7e3fbc586aad9578ba85948e9f80877733af387573f3fa723", + "source381/complex377/work/native358/vendor/complex-reserve/finite_guard.py": "bef59dddd391bcb49ed16ec6384517b8b7a2e21415cc810f9c2f59f440370983", + "source381/complex377/work/native358/vendor/complex-reserve/price.py": "90cfb8d102adf0b5f93b71b05af5c078076f56873a868a66865575a5ea85d573", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/NOTICE.md": "967e6d7e76e216e4898cf543c75b527e8d397ec1ddba3800cb20701f24c89524", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/README.md": "c5349ae6637e846fefe132756968376d52c5e3f76241e96214f59e65cdb7ad16", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/SOURCE-pr346.json": "2ad0b2138d2aa8cd5c6ab6995fa8c6c167a822b668ef56a9cc39c5765d1134b3", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/addcomp.py": "82e5ef0c7b6cf84c53bf6039330930242c9a5c8e8ea13183b2805cf9577f7129", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/build_v5.py": "c0867d68b863ca7d8cdd7002ffed263cbd5525fea4522267b5f640e4eff5597b", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/decomp.py": "699c424170b41d3711da6a283f58cac824402ca373764365fd05c8e645ed07f5", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/gather.py": "8c7d2a34fdcbe75d8ed8299e399d578b32adf44402c773fd905aa7c88e2b460d", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/interface.py": "3b3e2fb894f871a9b6145844faaff34a05add59ae0eb8882c8feb2b914265b8a", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/twin.py": "cfd261d82a31dd9024f1fa191eac2f5d893a7b51833b912459de46a1e9aac003", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/columns_h.cpp": "26f5c9be3a7f545d50be458e3d17403921b5542a7dcd2986c848664a774977a8", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/exactnd_h.py": "28a0d8ee29ac75b8a789705454987f07d618f135ed1f1bd45b97f18bcc4163e3", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/json.hpp": "aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/legality_h.cpp": "5661d0b91e07d95736bde4c1824f27bebaecce0a84e38403f5391ebc51a52056", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/sub.hpp": "59c1a64f9df61fc50f47d5a78c8f9351875bf6b352db1c9d109c7c90542a4f19", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/verifyT.cpp": "1a5aea81aab652622e6547d901ead6aaf54fdca231da897dd99474c9f64a33bf", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/certify_complex.py": "7e480b7761fa700944a7dca41ccbefd530203b5e9168b6b37fe879b7e6da57fa", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_basis.py": "52d68781eaf6d9decf02446a532a7336fcf15924a9f6781ba0833d038decb9f8", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_gx.py": "ccc924537db0c0d55f0c1934e79b8cf4d85b4fb336473d7b42d69e12557aa9f2", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_labels.py": "e000ee131389fec427388b85f632879cbaaf10e5e5d979a47d6307d64ce58982", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_scalars.py": "38e985ebe8c8e7f8c83c03828abde0c80be418caf95e97afdf2d0c357c0ed919", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_splice.py": "aaf46c8e5c68875b8315892e924e082b2f219f8d042dd14937e7cd2f72456dce", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/p10pins.py": "93b78a2e038b23264d04836928c78b6ebf33b87ff3dcc0e43ba0f1748fadd143", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/scatter.py": "dfd1afbbb3ff86f54db6a0313916403ec8ee6f939caa62f3edcc9d7a151bff95", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/NOTICE": "9419dd03a2f52cf8bdfc4d18216ce29f263ab583b27f01ced8e420985bcb7c81", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/FINITE_BRIDGE.txt": "66d8f4ea8752abd89952d6674a636575a0db16e18b1c16e293f48f64242f0c46", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-layout.tex": "2bc28e50f3eb092195294cafa81213e520f6d42e7935e9905ad8a6199e2a7c87", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-movement.tex": "b963c3d2f4e1b7059aa289bb4b4ac89b688920bcf42f5b20d7698cdef0132cc6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-assembly.tex": "00117892971ae766188ace0af03030c44164fda105e42b70d84f52c3339a7dcb", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-lemma.tex": "d0ce6d3d504996aadb098227885224e48df46101daec8893523a0a8b7364d8fe", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/endpoint-gauge-complex.tex": "dfee33b0281e5551bb6927f757ff0240abade60ae1800f715afd88853ae0191e", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/general-clifford-frames.tex": "c9bb9655b594583c6b4bab8cb485233f1d1e588f83858cf1e4c3530cee8fed54", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/stopped-product-complex.tex": "4738089103a4b263b3b0ef458f5ef35519c696f1ea871ae79e508d3720f5870a", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/source-pins.json": "0d76527bf9c259b9532466a7b056ad6ff118867a96e044ff8e1a24aca12e1dbb", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Cert.lean": "5c24746a6330907b9b37d6064095035a58575d64ce793d6d7c9881121fdc3980", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Net.lean": "cf7d7d330b1bffe2e66712c873e647b13dc32db1ccfc0e0f4cd62ee6caf584f0", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Live.lean": "6d0649eb62589e66057f044e1e2103fc42f3f57a1498f82a26565bd8eb4026d0", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Phases.lean": "71dc3dda23dfe510d5d53cbada3a6c540cd1dc2825503fda618a5bd6cfc3e812", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Fourier__Main.lean": "2e8e88efd4dcbdf0b1a6e39ce7eea8c5fd5ffee2faf360a8c0c9cba84c0e4ef3", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Geom.lean": "c302f5834287421f11f3b0da7112fcde876cbc702896f2af4145b2d72ee393a2", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__InvThm.lean": "ade7e7873da75ca63a4b5ce2f562dde9c12bfbb69d87d7ae831039ff790e5adb", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetCert.lean": "22ae34809466b4ac2a2c5cdde526f51ff246f5189f7c142b38aa4c0dcffb04a4", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetDef.lean": "6e17a68b1e988969f6eb77000028f7ed877e687b8ad3976ec1707fcfe1d2f520", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetStage.lean": "c122bc01392a6fdcc0bee918fed81804d3c9b1d3e071016dab65a4ed804ef0b6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Phased.lean": "0de429c80231334f1ce92575c1e8ac382ca2d5e7d956767b547639a8941d9a8c", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__WinB.lean": "c33ec3fce09c0971c32ddcbb86d9383ffbe4c6d05cf36f20460005e6547bb845", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__B2Gp193Main.lean": "cb61f304da51f1dd0a2ec25bca4b63eb095eeb2863289e1e2bdee7c82beff48b", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Glue.lean": "d5314f2b93a7f0e1c949fb502331825bfc6d9d8762d35f865443e7c95b6c7ef7", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__InstB2Gp193.lean": "9587ddb9961f44938032b609307ab91c0b0e757e3991f1ad95480dd50fd4f72b", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Cert.lean": "d92ee6889be4753fc99f467bd84039743325123a1165128378b9c906a04f2703", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Price.lean": "0299bcd0fe255960eec682eef0f045f7e5cb1e4711af2aab4393526eae2caea3", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193ScalOK.lean": "479434815822e98f015e335361089c3788d00dc3dd39c2944f75410aa0c158fe", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__RateB2Gp193x.lean": "6b40cac1481c931d47b1a092e382d04716ede0e785c492a2f2983e886a257c3f", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Raw.lean": "aba94a004c94dcae7cf3047c88a6da9561555f4ebe8ab92e299e6ce09ee7aa66", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__SolutionB2Gp193x.lean": "45c768c9d71a7cc18bd6db74cb036db880d89580ca60557bb4a492280296b169", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Adapt.lean": "feec0a3828867968a5c7c2c30b86ed70449abc3c660a60ada67203a75bae2ef7", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Letters.lean": "34906dbf5ae16b5174db00b4881a5cc1d2e583b8c8806db6523a5e2f86565f09", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Level.lean": "80fb3daa9a45de0ed6da570eb4476b9104734be65d0116f58bcfcbcd67f771d0", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__ORIGIN.md": "6ba897a9495ddadcf8558b93133fdfaf66fc35ce7fa2c53e2d5667335c315e0b", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gx.py": "6f3dc8bb639933227a8dae181ec4a542e85c7276be9c9e330f49518e7b630b95", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxbind.py": "9c9dcfac47f0535bf3aa8ebf7c662cdef0ebda50a9f0a9282b8f3cf34809f835", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxconv.py": "dab7fec9f44c2d368ed334055d7126e202017feb46e41a8d86e2d998720f67c2", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxcore.py": "eb972c06fe8c322db2d9a8d9a7d05596e8f40c4ca8e5f42eb6df3c7361b5d517", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/NOTICE": "557c9ad4660eebd14a00583736c4d12d2c45f3fc9bc148845f9f3efec72c9434", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8.lean": "842b217147cf84e8042d6ef1c33104d5444b6587b594664bc9eb89b237ab4ad0", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8Main.lean": "987103107d5586c096016f0a702d0de35b74398dbb50ac66f5886a43a5ca0d05", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/ChallengeB2Ge8x.lean": "a59db9d54b83adc73391916f7c1ef5e381ff073027781c26cb350f43b79839e3", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Cert.lean": "13a243c7d7be31ae429d19b5ecd5d428d60c41b7cca8a330f0c4179b110ba7ea", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Price.lean": "cd250dd72406dde37765c501f666ceeedcc18f831070b26369bcb154c1f99a8e", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8ScalOK.lean": "6bd5e68effe8913a3f73e25ea59142cd9928ddf81e94250a6ea28aa7317388b3", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8/S0.lean": "36de82f6969c23082876a4d6848428623d1c65d2df3fc917f23ecba003189dd2", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8.lean": "5c7fb23df2c10b690f638a19bf066905b5b620b8a2ad0ffde76cc9348d8aa2b4", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8End.lean": "6ea83365afe01664b2132a630511b4de65f938dc328744ce7f77a01fad97f32d", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Hist.lean": "cce81699abe1f85a870dcf64edd395d2cf5a586da7700af565b557093095ab51", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Par.lean": "a343219b419f30f8ac4dd3a0a98bf53550c5fec6b2cbd245320a95977c319016", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Scal0.lean": "78036e5443775ade5bde46a77ba3e0433fe22160da11b5b6c96c7f1075ecfbbd", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg0.lean": "f6b248dc4c3b2c94db95989b6bd5ad3c3f0d7ece3a511e5b69069550b821b138", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg1.lean": "79d16ccceb61391446ea97f77fddadafa9150e9dea97919e775f6c78daa71839", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8SegF.lean": "924340aebc6f68b5a6526311ce33341af0a0a5a8375416762f08c1914ec08abe", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab0.lean": "650600b631a21221956f9abbab9abebcc9cca628512d3e9a017e2373e2649b17", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab1.lean": "60036fa4deeb19d39fc0dddf31359d2b6d2407ff66070f145b111bff16190eb0", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab2.lean": "c8a248da3eb770ba55ef267d118b29d49983311087ef789398d555e2c44b3a41", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab3.lean": "41975d430ec0095ad465a36d4903e90c01bc891d3abe5e2c372ef786c029a7ed", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8YChk.lean": "a290360c175544cb85edffe1b92fcf7d447cba09128e19de8dc87e0a1ff0c524", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/InstB2Ge8.lean": "c1fee298187ea19b5d70fcfccef7d4fd4161be70c0adda19a89ca9933a759954", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8.lean": "7b6e59724c0f140e714afba237d5a1a91b22da70abc096ce274690140b39a3a6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8x.lean": "7c56d865ed6bfcb6919dabc1a6e53f8744ff4824a2f78335787485f3090970d1", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/SolutionB2Ge8x.lean": "dd52f1fe0a372480edaf5e6c64903d6257c410e43d406f8acb6bf8f60a1ee28f", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/comparator/B2Ge8x.json": "ddad06c37f9268986f3ec8ce43da5230ee2bd887da2480328413a0dc58f2a926", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/certificate/gcert1-e8-r783.json.gz": "4b92f00fc7454b9b15e6d71a3b05062792eacca0a0ca4efee46f87827d57c8aa", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/e8/replay.py": "be41ee310f28121c3e424cc8637d8fa02ef7c47fc8945e9bbd3856138fd800d6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldgen.py": "a0f16e2c9e078ffbfb2174281ee93a48c18593aefb880318fc105ec85a205932", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldlib.py": "7a3c38a698c129e13a767da75926a1305eb0c031b908450afc6feb185505c59a", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_rates.py": "ef8c869e4cf8da33a4c10b96f7f6faafd46e15d66766238070a60315aa169994", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_sharp.py": "1b5eb3730cb16cf516e760879951fdfb9b065efc55f78c29a5c6404fcca57a78", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/ChallengeB2L16x.lean.txt": "0488b7a2442c795414f103df912d1e6cc66d37b5be270940ea9564b7f2b666be", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/SolutionB2L16x.lean.txt": "d414a890dfe126916374c1afc804b90e5081b7760f894b9ccdcf23d83a12f9ee", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gsmirror.py": "0e22bbe5924284e2fb916337ccefc8e41f6e54469749986ad15b3b81cfaec534", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxbind.py": "9c9dcfac47f0535bf3aa8ebf7c662cdef0ebda50a9f0a9282b8f3cf34809f835", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxcore.py": "eb972c06fe8c322db2d9a8d9a7d05596e8f40c4ca8e5f42eb6df3c7361b5d517", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxgen.py": "ce9151054370c2210ed08f54c249a19dcb6946d182cdf934dee1a3781b53040f", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxpaths.py": "f00802d48ef3fedb00278f0b1c7bde074cc49dd30f202d7f32a9d2aebb3be443", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxrate.py": "514a5719f970fe36b1273cf59df0396db0e042dd7864c2eea53ab2a2fd1e2ad6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxunit.py": "3cc09a9c1a2db681c0f2016bc821af5b674d34834dbd6f195b9d482ce7c0ff58", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check.py": "b6172d58749c0b3b9138570c74827bcb23bf5db4ff9643740768cd7782ac4ca6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check_e8.py": "ad8fe9811c6ea0d89c795caef48686cfca600f5d540ebfd5d1251d6777cec7cf", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/pins-e8.json": "bf66f785878f636616ceab193e5a222143945ea06fc2f13dfb99b204ebba82ff", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/portable_complex.py": "44e8ae8a5b915358a97dbed5fe4e70195ed3581fd45a216df48fc82a029db87d", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/regress_pr346.py": "29479da1547cd39cf20fe387cde4cad847a2880266db9d0ef3fb474f68591feb", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/export_p10.py": "1161d23b459f7d981d6716073745909126d5465018cbbea7e6e6a9e4e5d68add", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/certify_bit.py": "fc03e8f7bf73d7d70346b87c835d44508b0581c9ff9aec708fbbd4f0121e0394", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/cost.py": "d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_new.py": "7bd5cb48537621f1217d174274d42483da4e2d02feec238643c798c36b30366a", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_witnesses.py": "98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/tile_check.py": "38c3f78daac118395565a65fa3543b1c349638ff2519ce7fda0dad2d788e90ae", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/provenance.py": "9f5c05aa4d172478f2ab67e7bb83cacebfccc10ecba650c23539cdcee18f2139", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/stage_cohort.py": "6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-RECORDS.bin.gz": "caabc13126e8f87d08f7697f51512cb3431ff52861f4190149251d8e19224430", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-frames.json.gz": "35070b83d12ebc60003ed344315328713134a43bdb04217c2c5cbc39e101391f", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-states.json.gz": "1e37ae5001447dd78a8287d8aa23d73a1d5862c4017f44db49af327f58d7cf22", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-NEW-FRAMES.json": "e7fe9d0686829ad5acf7930698b3c81a866ae834422aa3c9a12057dfae627175", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-RECORDS.bin.gz": "fc4f1986da4585dc1721bcd954a95b3ffb2b562cc7031f40242de81664e3acb6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/RECORD-SHA256SUMS": "21f732671eb34468be2252d4dfb81bdec4e7d7cd6564b93a482c2dd925e9c3b2", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/labels.json": "e037cd3d19d68e08523d09fce1c5f92206567784eb59f1924d93a837e4302fce", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/complex-guard-e8.json": "f94a5dca42cbb88e9650f8f8a3ffbd1153636dfc0a48da5f7a7fca908c0650ad", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/kappa.json": "36316b6cfe423b56cda1fd52843e56c997d060e33d26b732b3ecf4de3ae83aaa", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-five-stage-columns.json": "32e291f249b4eab8d65664d10c94208fe2154bdb4a45aaff84e9e8da5295a29f", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-legality.json": "7e675b7720f056548c1ee9f9de523eea10e6b014ddf90b7a630fd96163acbce6", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/requirements.txt": "ca0825e0ae3db2855af7535ebdc4775beadbb6f07f8d3a84f0f4fd5b95ba5eae", + "source381/complex377/work/native358/vendor/complex-reserve/upstream/pr352/verify.sh": "1a05c0b31ea37b2b5a4b84f6f9f504af8dd4220e13a6d9d86f64b2a731a903c7", + "source381/complex377/work/native358/vendor/complex-reserve/verify.py": "aa6f05c39404b4038c31c72f9fe7a8e137df911f6cb6fc668e316be37c40b126", + "source381/complex377/work/odd-stages/RECIPE-9.json": "abda2e4c73ecb48d29c30c12bc9a5c2db71d11a35667b4298788ec9154eeec7b", + "source381/complex377/work/odd-stages/audit_nine_template.py": "30c33508d02aeb8823dc477e8027bf6d44740aea0d3a3970fd2490aaf3b072d0", + "source381/complex377/work/odd-stages/clifford_exact.py": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "source381/complex377/work/odd-stages/complex_candidate.py": "e4faf656403720f78223934bec90c667086453d449323c85fa839d19829b4517", + "source381/complex377/work/odd-stages/data_phases.py": "671d6f8144c6d31e1766c6a0e144172da661a63f86b3d4d17fe2710f3ef752c4", + "source381/complex377/work/odd-stages/global_nine.py": "7e33e6ca88b11e28544bf7d43b02252208d4355369a14adb2aa8baa15773e42a", + "source381/complex377/work/odd-stages/outer_fixed.py": "0dc5b5a23bba5b4532cd11a290019d66d56ead611dddd3c40e2c9d0df64da198", + "source381/complex377/work/odd-stages/verify_clifford_frames.py": "5d8cf110150c66f2e2df58ea4e24096f335740e2ae726a4778347d98053cfa76", + "source381/complex377/work/pr361/code/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "source381/complex377/work/pr361/code/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "source381/complex377/work/pr361/code/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "source381/complex377/work/pr361/complex/gcert1-e8-r783.json.gz": "4b92f00fc7454b9b15e6d71a3b05062792eacca0a0ca4efee46f87827d57c8aa", + "source381/data/bit/RECORD-SHA256SUMS": "cfc30216f441a1c44a533f2f26954f90e454136af8842c497de4e2da9bd32d8d", + "source381/data/bit/bitE8-r865.json.gz": "1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55", + "source381/data/regression-p10/BASE-RECORDS.bin.gz": "caabc13126e8f87d08f7697f51512cb3431ff52861f4190149251d8e19224430", + "source381/data/regression-p10/BASE-frames.json.gz": "35070b83d12ebc60003ed344315328713134a43bdb04217c2c5cbc39e101391f", + "source381/data/regression-p10/BASE-states.json.gz": "1e37ae5001447dd78a8287d8aa23d73a1d5862c4017f44db49af327f58d7cf22", + "source381/data/regression-p10/receipts-loans/banks.json.gz": "0bd464f873b0f59622026793affb308bf087833de6f3197202adc7a36d9d0782", + "source381/data/regression-p10/receipts-loans/finite.json.gz": "82b21b4e6bb4b20e0ecbca44f59941362f57a26a019f179e19b5b7b86262a116", + "source381/data/regression-p10/receipts-loans/global_result.json.gz": "7dccea4b8c4a81597779dc0944297d5f60efd9e2e5b19469417712e2192c6cca", + "source381/data/regression-p10/receipts-loans/math.json.gz": "c4074b86171c5bde8fbbff6df0022a116f17e11f0d2116ae3dfe75c8b2a18c64", + "source381/data/regression-p10/receipts-loans/raw.json.gz": "505c13c667230e946e708d7c9086de34d1c5e259a557f6685765054001e29981", + "source381/data/regression-p10/receipts-loans/scalar.json.gz": "e7bb691b741227ce389ff6341fa0548ff8f638cc492a06be40fcd829fac0bed9", + "source381/requirements.txt": "1939ad706e192fb3781e8a0018880b1c6291ded07d40edc4048ab1a0e48f71ee", + "source381/verify.sh": "d535e6d1386a1d5a5a30c90384cf3f758f66fb2b7d6ce71118de7389bebf8fe2", + "support/bits/stdc++.h": "51908262576163a64815def96ff39b62aef3d52daaad9c561505c4293ff88e18", + "verify.py": "9200f345424c0798fd7c16a11c7f98fe2692869e500494f3c9f750155728012a" +} diff --git a/research/e8-nine-stage-low-read/NOTICE.md b/research/e8-nine-stage-low-read/NOTICE.md new file mode 100644 index 0000000000..b9d24c7a4e --- /dev/null +++ b/research/e8-nine-stage-low-read/NOTICE.md @@ -0,0 +1,11 @@ +# Attribution + +Composition, replay harness, and explicit second-difference certificate: Rohan Arun with OpenAI Codex assistance. + +The low-read local E8 schedule and its reconstruction certificate are from PR #379, GitHub author eumemic, with OpenAI Codex assistance, pinned at e01bcc51ca7ee93cec54350afae8f163aafc8f93. The unchanged source archive preserves its upstream notices and producer credits. + +The nine-stage unsplit bit construction, generalized checkers, and assembly are from PR #381, DaysSky with Claude, pinned at 00765b291d0f924f337298eb1e2930cb0878b95e. Its unchanged package includes the E8 work of Dylan Crow / Claude and earlier suppliers credited there. + +The unchanged nine-stage complex component is PR #377 by Zhihao Chen (jacklightChen), with OpenAI Codex assistance, pinned within #381. The underlying repository and inherited proofs/checkers include Jacob Sussman and the contributors credited in the retained source notices. This package does not claim authorship of their constructions. + +Apache-2.0; upstream licenses and notices remain in place. diff --git a/research/e8-nine-stage-low-read/README.md b/research/e8-nine-stage-low-read/README.md new file mode 100644 index 0000000000..ec70fd80cc --- /dev/null +++ b/research/e8-nine-stage-low-read/README.md @@ -0,0 +1,45 @@ +# Nine-stage E8 low-read composition + +Conditional kappa = **0.000996761861969671** (`996761861969671/10^18`), **0.11097150583734022% above PR #381** at its pinned head. The bit side binds: `c = 997756388440101/10^18`; the complex side remains PR #377's `b = 999240641319551/10^18`. + +This transplants the lower-read local schedule published in [PR #379](https://github.com/CrocSwap/integer-mult-bounds/pull/379) into [PR #381](https://github.com/CrocSwap/integer-mult-bounds/pull/381)'s nine-stage unsplit bit layout, retaining its unchanged nine-stage complex component. The new contribution is the composition, exact re-pricing, full replay harness, and the explicit strict-concavity identity below. The local schedule and nine-stage construction belong to their cited authors. + +## Reproduce + +Python 3.11+, a C++17 compiler, Boost headers, and `requirements.txt` dependencies are required. From the repository root: + +```sh +python -m pip install -r research/e8-nine-stage-low-read/requirements.txt +python -B research/e8-nine-stage-low-read/verify.py /fresh/output/directory +``` + +The output directory must not exist. On macOS pass `--boost-include /opt/homebrew/include`. The included standard-header shim is used only on macOS. The workflow replays on Python 3.11 and 3.14. + +The harness first reruns the complete pinned #381 verifier, including its K=2 and p10 regressions and the complete unchanged #377 complex verifier. A shell adapter only selects the current Python and supports paths with spaces. It then safely extracts the pinned #379 candidate certificate, checks its manifest, regenerates both words, verifies the commuting scalar-operator identity, and reruns independent local admission and mutation controls. The candidate receives fresh native legality, all 1,825 physical columns through nine stages, 18 omitted-bridge controls, six record mutations, exact frame nondegeneracy, unsplit geometry, width-72 bank tiling, two exact moment engines, all 47 outer inequalities, adjacent-grid rejection, and a fresh finite bill. Expected values never replace these calculations. + +## Why the local profile improves + +Only phase B changes. Its elementary additions have the same multiset; all destinations lie in Y and all sources lie outside Y. These transvections commute, so their abstract all-positive integer operator agrees. Every other word field is unchanged. This does not independently discharge the inherited signed-integer lifting interface. + +The one-invocation paid-rank histogram change is + +``` +rank: 1 2 3 4 7 +change: +20 -12 +6 -28 +14 +``` + +For `f(r)=r^p`, this is exactly + +``` +20*(f(1)-2*f(2)+f(3)) + 28*(f(2)-2*f(3)+f(4)) ++42*(f(3)-2*f(4)+f(5)) +28*(f(4)-2*f(5)+f(6)) ++14*(f(5)-2*f(6)+f(7)). +``` + +Every bracket is strictly negative for `0yT0FIBW><2-`F;qqWE zi%Mm17&M&6!`KKy_KBoaPAUC1E}6am?M7m83M<#Pa2WG^m+6i9&JQe1^x(6PO%7>rG@ob>Hw0|McY zta3nypp8W2>cSx?D}m$)7m1!CNjY0Y-pTzSQVAg-WVCls49I7>@Fn1oL%2x!JU)k% zt2+V47P}DO8n~AvT+u>I2u)^Fri-|QM-QU)DDy=Wkyy%iVhQ+CPar8kzZ>z1q$nhA z0v6wi;OZ&LD3cH@7tTsqBR-%PjKdNLC_+La?Mbdo1Ar`?L_!A&!2&k`3vnQ%K&TQ= zC$>l+Q3QB%LBF6IFbtajw^DE&imQYV?vVBbuL~=Hsk;aq0i6Kn0lO}wkR*zP8%yBI zB8P`{P#W!no=J2lEDnbNT!JnkMwi+d$hwyhfCX+xADztzuA)#R1hSbe1qgCoIUO8P zNRA|=VmeU}6sAZ;6oiUV+*bmkD60rUOm zx@h)d(`hz~O{ZJTFg1cGVo&Kxkr1J{5iWe5r=Hl;zN2?3X(n903qV@r;z`n>=t6YE zApu$eRI$@QWNOfDQKX?rx;g zkq~kOA_*ZIisB>!cuN6?JRZ;-poSefDh06efw}`#B?qRsu*ePo@`Mm*03p$%*e^1* zw3@eA&k<<6J%yAB$u8NY3n6h8$N=U6Vu0+wQS{vwDU$>#J^;f9f$GZ6ki+RYcy%|n zSL6XhA&2cc^AX*hhTQ2+fEt(rfIWK(md7UqKqelfwgHz1&?cN+Sppr<4M*V0?NWUP z(BckxatR(^*dfmj$3V(z8bt!e;JN}JNIN85O@~U8cQ}#akPuSRpP~#HG-U}`z_)R^ z-LMD*iXGNSjwf=Jid{*4cL1)TQ&VIbPhR|R7BnO6y~8qPw@73@RzfK9g;K%+csZb5 zB)lxZa`$L5&+RHDbV${4>);Rg^A67SiqoKzlz3o5cn{ zNSzY^wE#?sfVr`NsgRVAmLmdp0yj+hIp7r)yNCMFfk2=u7Lf|-Mo_xw?&^hvqk}MK zS3c?3Bzy>vVslQAr69xIi4>lbSz6f4ZzGg><~YoPZK_*a1*-;Mh1U zR}kN3$mBX*79C`mce+zBwk}`jCgR9+US?&wK;mM6ygRDSr>wJ zD9GeVm=1+DSr?}3Q1Ho z4>53?LaC1Ino#88)T!>D+B*<2fP&AF0{H>;B?ZnBD%$H(^<-%q0@F|wfoK>EK{SYl z;3$_Ia267n6Q!sWtnz- z=#UVC@CQ^u#)M*zT&06Y7mP`TywU^P%prQz!j?!s3jzM&U4w4TXmPL8R zFE;@Bi41+vFG*U5-_R8hWB?|W4+Jz)S~@^P4ju7X=1OJmRt%)qVVb1l175+hLrXh6 z1-Kv~oLInnbAYA05IoZ3lVObD0#yg6K;R^GzdPmOI`Jivj+AI6%SEa$b2o%OX+chG z0FsC;;5)E-ICK_Jv#zKN96Oh?iX|4az)((|ZU}@diI~g|*!+&vg4Y>uI}GQ;klmS# zs3T%fK;{LUy<)Hbe*RgX9>Mwlr}__qs8rgY>pu*I|6Bk49UpH+3T4dFF_S3}8AHee z;GCJVD94m#JQ8L{%EO!n8Z8G6KogTOIvqczcm0^r^QQSxTA`zj{utMdRS zn|5EKgCj=Q0Yv-g8bt3n1V=s}lP+1wf>E;9F%XZ9!x+Ir=n$PpP(e@v1rVFc<-#xv zhgeiPMB@Q-BTxdTLl{hls5A_saxoBz2`Yi2WB$}JNLVBv3jqf9*Fy#j8r(w!G#b5! z1ZWVwhX4>Ny$AnrPlmfWlI1coQG(2-^Gs*F{w92AALE0eALE06gb&2{R(ufXhw%A8 zdk=uvD8%JqTq?o=Sr82&crY8sX&}fmI0VeaaD>636KoF5#&8s-GH?Q8;3z`lP%&_o z3Xl17&!0nx@ex8uPa)7yS`Qf@ABo`e2$2GSXrG6xd$xi}W&k9AG(a?h(I6@WLof#E zqtritIynF}I=`bDWOig?OfnObFv-G^*`2*H*(@%zD}(#MW|x9?pCSE#$Q@WaAfYom zqfv2~4)llyqX2mneA7D3zpF9mm@5{6YJmwd8$OrxYOZ2&M<=?F9u;K(4QAjBkg=jb zTM!7N(h!tRMR6E~aBu}?&_IZy(I5s)=D5I~7$_ZqF_=a}=rBg7(J@oqp2K$J%}gi0 z&{e_&sWp=&WpZ3yT*#BFm|gWrmoS%i-Ue>$$fHpR#ZZt)%Q9#>7zCyv2#z5z9T3T& zBM=>j0MXzNNb%_q0|j6JDCjg`7&y3{iZB>3)=kd;RKGNsL8sEuF`eDob+aoJIgzd% zu*M-k&M0(XlBJmo$bvuSt`ji?*a!@|MPU?2F(69>!59pj4yXn{Y2brmpnL$SHWjEA zolb>NIvvL8Fav`CNK`t5@ey-h?3M;>ib38-2iyW^=_mpKr6DvNlqn2Qme4SOGYvRJ z&=A5I2>vN=9n}uAYf6Jj7K)@HN?lxu?nd3}^hKRS$9&xQGdkI=*pMD6beQzO05ZTa z@JoPfKqBZ3s5gXDN!F+^9f%2q0i*~62h;-@f~FvoVn9HJA(=|b2KDI*$6fB^YxeY+ za_D>PiLQqu5JJUKpiwv#SP=$n2Dm#q3IU6v!7%6%7#5D=AlaZ|7zE=8l}5sZ;Xvzv zLIOoZsDOC%f6$&lJY-;W05isb0Or8nVT9z70VE0orDh;Nd%y`mF0gM1LxIxJKodG> zONUV^a0Il^+0*}1zYxF|Nap|9o`AV9fI8#ANPyl@fqa3P0}TQ4MgVo-ConDGq^L3? zKsgT30saf10EWk8cE3OhM|B31`hB6Y6+YPMg@)#2LpjRABMnCbO;9i5ZE(N zQvfacKV(mzsldO>o=^q?jF3hJD#rl+9RU~sUjbMH9*+*dpaN@RkZu!0aRv-H1i_R} zLoh0p#2y34GU#v*d+Lsiol`Aj=0QJ0 z2NDd?HM2=LEtgn z>d`fy#_XI=V|LD`F=caUOyK#Mvbi*7_dHq;qZ`v>7Mw{YT}-LF=r0xQ3oPLJ5cO-H zAJq!{Q=EaQ0X}pLBr0TV2cUz92m*;djD8CR-w)0Qd6P9sM@cZIYyO$pW9sjNyrwZb z=c$>pIc2ww6&wk(b7K7?*9RJRO!qUpRskd(W%$RfxP(MXuAs^K>72}Gl54RaH|y+b z8k5E4lFkTabUB@l2}{|%%^C({FDdB@on2W#_AZ6J}asrx3PC%1AB3MTy z1`2YqfaOUh@*Zb8@X=zyr)vaXo$J@5%m9A=Pm}!LG;{i4 z##AB6GdL5Na_u^ZRDvt_t89Xir6r^l68-_U;i%#%3 zD1opbgu?};AIN8UT%ejfoK5A(3>i2g2xEczoda&^>{*5elUzS0JN?!*^3I#3EUBwR zCQlPfOQxlT)uQR9%tfXP=9$OaQoTAG?H znm$YSe{~t?>-G<-MH>2N`^S*~+W+5Y|DVjYj^QwQ0uhTWZaC2fR>t8Er)5u~k+m>L>_40(AH9>M zpzw#2d?83eWw|$~cYDrRk)8yFKbi~sxI+JA(c{m{9)Di=`18`opQqM8o?P!Squz7& zfDQ8auZX*2)&nGcbaDpbA0}>@i~CD)GyWuQg!-|#yH+v&ypHjg;_kVc@dfF3KXypo zh|*+@$H>?0A5V?2O)1QNIIkn1;d_g27ajfujE+ys_`VoBl(1)4m&T_}lS@(I3Pc zK_HY0pvGwk4F8MpM!o}Y#t-2Qe>dL9x8n`LKZrLCK`{u!7%&7Q|01}dZ-<)>eF8W2 z6Sx_lz)k&bxM|;E-am*oxjf9EGf*mw&>8<8xI3fYx4{kn2;3im`)zQe-wrp1{UF{L z`G5m1TbQQe|02B6@4y@RA-umoTf@G?n^S)@d}9n6xj2X6bQ=6`GI01i0H^&B;NPFF z;osrUf7GGlbifY{MKBD-{zV23e@8h+M}G+K?@!n0-(ld;j~Y1n01*QwpLb#Wi|iZz zj&h8S{Se;YpRX~#9dGnU?VEujpcX@b5Mk)wWZ&OWj?wWSz#CzFf5P@rO8*ytch-~N z4Y=&7Rs^_oD*43OzX)*ZcK}ZRA;5oNehvDblLIYVv{}P`Hg@xs6Pbw_vdWTcg(Tj@Q(t{U_f*# z&Y&VF@^1qCJ0{r}&<_Fr{Ye}29kXmG{)2!6=SDt-4hl0E!9EXoHxU>e`{eQQ|3f

JL8k-IfV9!3c!D}3Q&Jk1#l`(K4*`U zFSq@>y});*`;1R!?2u0uSW)EfP6mEd1wMVe>B}mB(f=>2z;{gIF+Q2ZLq5p|QQF_E z0$BI6RUNx6bnNWb)#-Dr90W7D|KZFFYBUHg~y+%~6kmooC@ zaovuswVYUzRT2Y=OsmM-J2xwmy1cD_y`+a5`mBNDhe z346RVqTBJ#hyVo~@i{$r)^X{0d8G5*k*?QDx?dL|UwxNp2(E`gvZq;5 z1{I<)I%Z-2{Nlzm3#<7vOlL6XSuABPGBugOoIcBB_I#%0^hKto^Z%D$(CBz+yOeY*e4f1m&T`=0;(vDc4;ggg0)m+U$CFKksg`P0oXJN6g-cuUN#H@oyXB8jxe z2AKxHmOIT>|Ie>*b=q3@L;Bs%($1Sb-E_XCY0n2v9r#ivTOeYSl)@N95Nrm);L+JI zo5rScAqeEt7?;apFgO^Gi*pf_gZ0?aLClh_B=79%_=BJBei@8|LtGePaCr;}hcO-p zg+NyX8;7|FL?<}pyWdm{L=gmL!#wicPKZI!aW034pj;}8-D5CU7unm0E2UDgWU{`# z3(H*(P`}cZ?J6N$$PEL5pVI>p(sz||L@sWw5;u{6CDrAMq~uA0uFK|2b!Bded>tR9 z(Ft9e{b+cK;i#bf&ZEHF9;q(z9M)QLgnyiY=T9A3X98O z6KpCEoga?ESMr1Kyj75;5 z;9@Y1zyJskmCFKphkr@rUl2AG1_&ZN1m*$j!N|ArQ39iJfG1%=IH;p>oXzDh5EhTk zBd8D?BpRTuA_#(p(77dQ;>pfmc|L9GvFNvSaq7hUe0u%@UqSLrE zE{hEj5JF{vKXe)g;;|TX0MDo5|LY+?0}BMPdBBHLIV=X34PjiAd=;3WQ!zHV_ZEji z0OO!DI5aMffr<>JaY3N~aTyp71C3A?_dgYuzZS;l;p$51^*eWa{t8lbj19pk6(@M) zW(VYMA>bbirqTgG3@(aMak9$cLSI4ZbEAC*Bn&773)mwU!yuf6@aQ;#V_bv>ghB(^ zC=5iz#;F9(fpCzTqXaM1nF}p&)%u4&R0k{1t#$z@_lGJm9+_oP#qE zHq4@fbOt4ZE6nBsPe#LG7-f71K=2n3q7pE|rNMNV12QEP$LIu|+~xuZ1j1M>9*;qX z=q!SRf}qaDQIJExESOFZz|TP#mCHf?aR|ZR01-hK@Y!E8AR0ykNfYoTER@9p4i6%C z>S0h>5RDDgoQ`r4oXUZTZ^5T~tj~Z0f;J1I(-4A=usJjyPDN2JjvzP>LAY!J0+`Vl zvhOtRZ=n$JtiU&j|auY7vKL?y{Df|U89eY!L1sXO?=Ky=5K?s|Cx|jeY5mXka zGC-D#&=HJ>ko&KFF7Nu3U$`_<7(E?dev&0#A?OKIhrEED&#iSrQCTnqa_07<3T#K?p(tTo?yXfp9>gKuQT@ z3$i^s=^#-7MJOAjD%5`vKs^NU7Z9yvIYD1@Y*adi(HJb0heI6l-5a35!0RyBY!(;j zJE)d%fEtQ@3p`yzeFho?CEsNx^J$m|YD5@BGhiGbS4X)32NN!ZF`(CM80V64 zhkUZ?Tk!d0%+J+6;2T67E{HT#7K(ywjZVNcIs;L*}|DdGp6KVVvVlI5n*GeC90f5WExhTXS2o}Vna~K#wWAiv5x8<=wwZi6- zZ;^kKC3TPWxy%jY&`}_KDw_qeLI`K`=rC|%APlkCJQOA9D8P<@L9xXGSu}ysfE5Ez z3w$qw#i3FEK_0GK3ZEj=`9Ce_|7k_DGfZbB5FhMSea3L-SSTxSS$!Rl~&Y~j_ zIb#ay9|n~{|BuG#E28)^P=ARJ&IN&i!_P=2t*!)!NbW7G+79n&P7oc&=Qcr z!T$(YzJLaoC1uIX3;Z*se{g$x4qji(4cG(+q(ngW1cGo77DUi6G6<_ z#%r6zyq0E$)1k)Z^ToBaDMdvWet%PznCH`GcrdT#p79o+n~jZc%e{T(m)55F=#|!{ z_z0WNU(aiFzxxKXXu4;d+uT}Vtkq^)TicrI+1aABHp54w`F#2_Y)w*BUc666QXao; ze^TCMcS5^ErOoF>hpsf9XO=p|<#BuuUMMZBJ?nF`v^L%+rnHuKsAix2JFz=; z==LI`hZZUd@tGs()j5xYcOGR7o0%gYy!mMBdWF6vPfs%T={wmU9%q)d(C4_)23><+ z%$&xQ&2Td`i~gVTvW_aNmX9hsRpF(?ADP7e-XgBEM}O<}P%hjqB|fb{X(7uJ`dU z5!vHUgB|8~^q9B5qsLpevK|-zM)Et(#Pr_CbAAscS`+U+TS?!ybM3SnSv$b@;YH~k z&7vNhBu~5OCLMjaa!wz`#Ia^spxY3^RUjA8y^}T&Gw8N-(I}FU1op}vgaN98MI4BtvkCmHtK zdBokjgW-nePKJX!88*o7VAw#|!SJ&Vj31TnkRkG@e4$L#w^EOGVC-%NFy6`FBZC_r zsf<+Fe`#&qsOohuGqrO%Ww9%*}LGC*H22ZMwb_-$=CVJ-{NLu7TfCPTqjKrA&>~B7Mg{Hts{tn#)xvw6R+!rgeGg^S zo_cuRkf+`QN`3%Q6f4xV}G^-#0p_Iqd29 zqphpQxtG^nmHgD;VpJ2d?7TF~og~G4KDAP0oK(HulveIMu4`8C`S-wASv-vK#ayc7N;%>JgN^rScM{vwYIsIO^K-0YV9na9PcCmZB>Mh}%{+NE_9ux7-yv((|W=JJM0t-)&KUm?pls?9jY3nXlA@iS?J{x2%DU zYM6_l>{(>K zaP0;~IYj|tP**D}X(Eci;Mu{jFPeInnSWo@#j}(Udfhs zn>8_Kxm9_#miL)KYQ^JD4HKs9u)ttIkmaH{hgc_%iTtWNo*7s9kD85lCyLjN+9kD^ z(0(V{Ya&tACv|+uX@lb?ij>C{gOW3E&Q8HYv=8(#aF`RbySCrhV?*QS@rPJXwsc9s z?*Kfro`(z<9B6&wWC$<}aCWnFjCFf>w=}g{HEnJJFYd;`oxi$Povu%;iU^MpRC_;A z^qvr|amh_C(i$_uoNH2qUIUg7h$)S@GCn4DZ~TosR%u*XX!fdiqb@jj^;@oTPd*|5 zTsaZ{7!pj`I5?>KwA(tnL()m1=A3!9`s}uJzSgO9*9&`;uW*VdmySFHpK+8NFN&A* z?7w_vcu}L#;`0Uewu!^Gv6hQcI2mCRZGv)$ycfex^=+$&X=Wwjbmz-$+7a7w7PP^o zZQ;pxV9R#bJa@CU*pmn3ZI7JUJZ$JW{Vn%wGIzU`5`w4E%`OXlsLK@GO7+4o};tE!8iE6Q{BmQwdgh5GQ@u4+}yKfKC67Q zXYHgVMc&0tGhb-!dYL^Wvc;&s`i(M<+W6M7m7Bc(!2J6C6 zu-H6%qSel~X`^kD?>Hjbd8*SDE=C&=_xEjj+5!~q_{Ez$YWqE&lv=GFcfIA!#8TC* zZg%K1hT}vX{bdvLRMY01OMAu;f}>(^Ep4tHDx~*Lo*dcSC*~{`S#>Oga4fpC`w!=Y z`h+{%PL(SyU6xQTUO1W7w5n>(`tv32!@|Pqtdm^|7Dd$hbJj*Cz~-5|mxRN1xX#R& zcjeACrwgCFIWoi1k*JyzY2MUoWX8Wd5nrm-)>mWQM(Kgn+LO`NwGZv?AusyPOpTGY zj7&PWbBULB!%?7Mk*!N2@+V$BzVr+rGuN>)Y`5>VtIp$&J2gxmay%FpCbjNy-P_A{c97PtYYXCaP9%!Q*&Mtv zU8?!rW z#=d0sNC$Pz66=G4H@pX@Yt=QbUE->%3|eX}DtWc^e2CSxh&AJ5-WrFiNe1j_x_WIv zAK4X~^SjSo#ZGI*9Ed!4;1JpB!uXhMY<=y>)3@>@erV8T&10!efwelPr56&5ii5Ym zS~C2Gr&WQncluVNyBv=b^^6l`{_(E*ocphaRh+siylD)3ou3@DL2p#nOq8dtHE8Lh zXHk15y?wz|Pe?BfoFqsTOpe(MuP>37We-U)DD?@Sh#X9o@4|2Vc)pgi>I>d_p7K8_WFos3=Tf_<&N z^O_C&tgm?ZbLe>Mag9F3{qC#Ydd1tjmcQN(sSLh)z-($^>Bx0i8)6K~cgf*Z8riW6 z@0HMMvxEBYh-Thc`BX4jWe+3joNa%t<3|#rtzvVp4h$RWCpXqII9_~|h`z4C9yZIv zq1?F_{_B$SS*pLypKg=<^Obc6DnsVw5jtfnTkq9PcAdH5xc`AxkKn1(9!@_bI)8C! zRz=zrv-|dts5Spr1L!7Xpc z-8BVQG$V2!itYyPomVuk?Dw?Lh_IufH!pIJ`aGC^=D{4&Wj4;da<#KIi&JPE>oq&#Vs&dZR4OjSS|Aa<< z{oQP3w*%0jekQ-}TDBxRE9A^Q&*paXu>5#7C1Ul}B%4=1xzR_Sz#fhlp6%ll!Vbt9 z32KJJ6Q_3=@~d(K)vix+F=IxL*Db9WrtJS4f`$?E6_@m0S)iGrdtmFuIO6E>In z>psyc4_0p(mSk5s^zJe>A-C7lcFlov0Q+K1x#WZHIuVP93d`gkdE|(8wd$q>_rm>G zJ(|3MG8VpI+B8|r>17sIFCv6n>csbRwhyo?dS1#E&K<6V_w@v=ZjGzHaOF}EYjlb4 znPF|w^#jG4Q$nA>I74{%p&UbTwgFmR)lT ztACWO5?&mUlR0MVwPA&E;%YDMn?4t5ate`}GmP^mPV zq=YNazuh7?MJ30QUvw#`YGT2&GZT*5?$aq7mbvJuZ~cSIxtD@|)h)Ow+A>50Xgt5T ztv#mynYeSAPGvV6Ce8;Q=HUoLsm#7{#NNnc!%&SQrD4|hvC~LWpvkg=uqF3%nu>F@ z45x8dJoOwetY)pKy0MT~aM0laIDZgVx3u-LOJ=66Ngd7EJXfUT4lgOsxG?eV@|<(x zfb``lZ$xYQMgI3HAwXPY`LtV=N;! zheg9|@B3EXd;=tQ^V;(f9Hlb8MM>i&&awVNX7b&G%UUeercVOoMVMFg8?PysdQfz2 zZ~x@0scxL48!PrDSB7kB_tD`2_OBj1ZL}$NI((<#m6IGU-&*|I@wctgb1$gQT1k#? zl7=6(b$V-F#$sA6UlR^pD=5qjG$<@}td1jyO+gLv&$JCpqLKy46GjWl^u!hgCH9w{ zvRs`n6kRfMt@TwMJX=_lyzG8V*(oCn{8?eemFxo=B5&q%9c|oT=(ATIrEPV4UD6Al z=!@6H=GAYG98%*IS;Dk`_j~HT_5xAO>By2vgWQWP3!dCP7!nyX$45E-V9^Zu;YE{_T7v3L4@Wtl=Tybmo-y6!!1+B=r;K%|h`mNXXIs%(@s+li%Nb`T zCfSw(g*LK|ynF($*|TbwpMmFn$0GNdoK?|EEi(mq1|jNa&gqt2RgG-lK(%wZkuzM* z{bAb4_EX7D)*+Uda9A>;HnTS1L0px$^OcrMKGne&m51T0^~-h}B(`16X>X1bFMVcR zb8%D316y72v-sc{y^1v5vKQV~wVLZU1tFuATILJDfGPDU@3kv$u0&JcAF*|R%C8#G zmUgebJjZJ3xzX#q9g5EyS323co@+alJSidSg39Q@dAO%}*_E2>38WSuEP2hoAM@H5 zRMhPFf)#z9^*6^oD{pf4`lY_S-MrfM#ckKBj2E|``>R*lsy(}AR@&ZtS?h%CqIcG7 zw)*=)?lni7-o;j~Z!gGy*GFTsE;2o2jWDI6x60)`kJV_e%>`e2- z=eGu~X?u4p&0|;m^IM14q*i!5jc6YId_mO9n>nlS;Yuo(-7Z*pI#%yrr(h|c|IX47 zD+}3$`40DZ)YN)0p5>4Zy3>|VBHq($%ZCEKYHQ(l_g-aXSKqwJ)Erpx`tho&i@!6% z8!o?owkO6O36cTGkZ&{PB z#v33!@12=M%+lRoU9xY3t8PrJzTus$A$=;Zxz1c29vv%I{{7wfEw$H_RAv_5OB);0 z8*zA@?LH$fNgLDMN}myrC2lr1yfbLG!gZZL233wTEsNRYw0p+Lqwxb=t4#E>l1Cf% z;YBnCT24)h{yEs`MzrVCBMp9LzRkBXuOBde;e>^9mUA=&4G~dB_DqlGM*9X(GURv~ z&4CRr_REn`rTfohoNzYG&&kl(FPD*I6kJ^@jprm(X$bP}UZ2V2@NX`>7MZV5v^LDb z_d(nF3h|cWLV>uCqomN!tU@sFfd*AlXt6r{#?xX!zbm}y>o^P4>sEODamCxhHfC*D zt?z@>3I*eLLQG}#MMt?;er7wa^d-mFYY!AHpFXNo;1hdIC8NeCXrD*Ot0?{;1b>&E zRFWKggXa^QG39l{AWh&ij#8K8`%XEvEiNnwdXcG-Xp^J6`fh0Zjhwb@xtET6T$L(m zXHAe%#xD*V3i1kcQjeCjg?rqJfYeno_}BOHsy!d9Gg_L^dJ9|$GdFy3Smbln`($3c zZtKk#3&O^peEDck`E7IGLEGNErp8SsU?;h9Hr?#CdZ42|bRm;MDS$%Wf z;Il8#7b`;!)o3rDe>=9tFIm}q(vsF&wOdcp5_SwccYDH=w)80Dd#nbB2Nw(S{;)WN z>{NAHZEiTC=0vrMvBOQ~@-+h$HX4a0xxF{{iNEn`)NgA?TuCTDL|h)GHNfyqjq$SQ zC+ZUH^6;7fBO)Q{VQxHoE25zB$9|pM5ylQKGw-NrL_w^uyuILtS|!7klJU83=Ra&b z_oO~hVbwxww^xJ>l=HKkO3va(Z*^X2Pcc@ze{tWCJr+JzO{(fza)xiJHTA&h{aVi- zg&eAiG3Hha)++cco;)S@rM9}3qG8_}ht|4>9PDOqk6V-D8jf1Dy3AMc=$~O>@P5hY zv(CR{ZZMv-YqZa`2m41qA2x4jVcVeG%Oje7A8BUzY*RL*#aG0fsY}pEYWKA~bnfZ- zbqa#!hN`VGWy73m&diAYZ}uP8HMGBrd#@OL!``rFm{P8*-Ls83e^{M3E1bBl z_UHYoZhpH1sb`d*8&2g+E3wI(0Uif? zX-5|LuV#3q1P$+VP;0Tft0pTrMszd>bTzLmaZt*eOF;(Ug4Er=dK_lH&Dqdm?bw2s zQ~gJ!*W_sQ$u(`+Y_5Du_34o{;D+tT?hV+~et1gxYt#Flm!1xA9s9@ai^89v=Z5Qc z=BLho=$tfa!pp`-&Uj8QWSxe4={h#|Znbc0@0U*>Efi_$8m{S;dt#qxR`OA$^svxh zj%6C98Vz23_LfEYE7OR#M zw8z1zv+u22-rkm@Wxx9F1<_mD^R!+&(V9(*jUs-DUOu7jIeuw`$BN7sNAy+tXWI8( zpB8JotY)hG&x-c3<4tTl4rcb|w%jVvs;pT75RmgMHtO$s&3!gtjKaTbT^zQ{^ky)i zr2N&u-sQ~?_W*M3d!14aw4M6qMNpCqraz{Smp%!vR`fWy_6qFU$70o*(7E?Lr@1ek zvPdCyNma7iL9P37dIk&7p_$3%_UC6!Db9@=IM?ZLBl66*7Qwc0Y2+N{6{xZNkm zO)gJq<>_S?L*`~FY#lJ|B?WxF>w8e`7Isc9DMv|qS5MjHw-@|6xdDq$W((_%o6J9} zr{5MBrQyv9-L5}tTe|1lwYBoY7O-2a3;aYOgEY45t(NrelcyxMU{~53`&6$5s!@L6 zjR)KHWvQWHu#!TkRlxcDdXWwkYg;yE-?00AkC&D_WCiTEK6|Oq`nBnKhd8MGSFOnp zoSERGKtV4v(b!312eXAMj}bvnbn`oZ=cCo|j= z!YBW9WuuC^-mDY50`_OwFLqe%W~hI^w1_$E;Q<^Q>T&Q^xzV<wMsI}hYUPbG;1AM}l$hoYaS$}Qim{kjn-bM)f{;_zp+LWB&l(*(;{dx1I-Wjj< znm%04Uem?C;`S-thLQ8lC&z(H{bF3M99zFmZP&f*S9zJ6vW7-$rLs?!UReI(Xz$tV zZH2q6hNt8=R7SrXaQCN)tCFm%eqDHFO%mJiy6VZ0V}K{RQ$>hSnpY3()Jm%)mES3RC)Fp8{MYOwYsA)<&S07dV)tO%RFbr9UJ7kNe4K9 zW6=?V)3#qfI>HAu-1Xa&sh0Ta(d12Ao)@o+@qNAHiH851@_?I)*ZaLGNOcL_jTxCw zoTMgirWqhs2TK0B_)W-jo%okqW9okoKUV8i*4z?xu+G^|DNo|J^mEhq?wsSj zTDPGS67SnSgOmmOfMQmjSL}^B?_0RH}8ge_XRBBzc zEmmi^FTcI-szX%)uhuUgK7Y{Z={`EyhC3^1=K_bBWsI@RetwaEUN_6sb-&ZzwKmI~ zPbIS+bnAr2 zocIxDhofKaA7BpCE=51tlkp(2&`sb~q`K$l%PgbVCGLX#MXF1NgWuboYO;89whbnp znO`=Ds$V_yZMJEBj?LPR!=v7wo0Dn0pdsiXV=1EE%SZQ3 z7Ec?#I#0V8kFr{0sBm`cQ{r0UQY3b2(&HTwG0NdK1KK7Z8bUbVPMNeP`f~K+b;8F> z$4&FjKC;AgnF@OL!6SI$!2Q2ZJdL%o(rW`I#Pm0Qa8$cc4wci*@z z8E+S%F>Q2MKjF1eXWv>@zgpK^dRd1ua7%r^Ri{Yl7e0(F@X@JvDb|Uwi;;h?w8<&i?%pVWm`6U$9x-oXzM8VR! zvJBl*y*V*!-NJ4YXSJ#I_WN%5E%-J1glA@a#({I%H<9NMg zNtf^JPsWX^m$>g6a=tWnh!(mfI{M`?o9KCxrM(g!9ULAuEA@Doxh;o=yeN%r_X+i5_**Sbzb@1m-+RxC z>Q%9a7E~X!8kalyu;0)6ZMVHk&QY41W-Zc>D419#Ua@qgZsw}8`i!%$@1svPNBNpD z4%;zx5>6fSv+*r^Wc5e8BhNgsjlU;wSG0>D>ALp0&1-E`%KKI1jPNO`J8JNY4f7x^ z=tPvhgQ=uiX-A)VYNyht1$bfZKc|G8o~vvY74ybvX<5$H0pUNFsb%V@H_yMrK32uC zHWNnA_bf$CN2P00&KK&hgqkMRG$}2MYoFt0S>VF5-01e^nqfR^+iBnHWeKY5uIurF z$F;S^&O_SV@*f^mJ45GPU3t_X?%AzL2Q+o!GwgEdrDJChnazJhvo76IaMCY2lF{o< zyQ9lKT1e%Iw8qKXrTp}#Q=w<8i#<%CDd&y|z1KT#)iu=fI(ACSjz21(W?8M4-Ht`f zq}};X&OwSQYnKJ8-fOTC?(h_DSBtU@)w`0ZQ@LvKFl@=S#K$g5*LPl=nfR-PwWo#U zypz)D7utugmN_^CZN647w0>ALVZO()fSprR@1+ms%&5v(W@ha*ETCyB3X4NeYrU|z zbIIS@CR@kQx_;J@L3jPlhmTlgpBs?n-Tsr(fNJ+b3+^bjx>P^r-Z=RsFPbi5LTj6; zWgCh@w~c$2D$kQ&rfF9dV70>CXU!eOoC<#pIpR z#yDXrKmYohLix5gJC5~@c~0c%zo*KiRN!+|TK;c31~|5F4(IZF(+x2Jb#hmRE^fDa*VhdKXY ziWvJu>C#n@sY#RjpE-Q7%q3z zws-B?C#j;KYojs$p^0>FE*n|oZEd$KEw;6m0k630wdRKM?N#&Ji&kG!^Ur-d2io2JzsVC2^dOm;t0 zd+9yZByH+t&Al%!Pdu+*DDaLu_&|yAzMr#q+`L95?WSV&w9vM9zxlmdU%p}S6}9zu z7gj#K?D#}KN8^Gu+U!SP5mN1OWbk0=oh`0?nAcl<;wmbY>g5-ut+-YGJK-6ZQ>Zj? zaKsIzi#z&9df5!875|~H>t}XFcfx_a6PniUbe-VTa%cT%ozTsfPV4J#y>{uu3d#^Q zTJ+EDBJIM;&5utc4e)zcLvL*gTGLo@A@xN=MRkDt1Kc=+{FyCMc#?#_Yg@;|gN|NE zd)#oWyVbGKfHVvf> z)(z(@EAVkQ41AxVrL!JK-WuC5+(*ST&#K_CV%RUdnkF>O)xKWWGL01?tq^(T?+sjL z<{$j?5W49N#S>}7QnSg%4|F9wUigl35#v4*KaE39aG+%a;pERI}?df zIc>vA`Zjvz&b_8HgP(N1J_mijXWEf5FG_FbT}n`X>O*fxN>{F(e#e;p#JKHL`K5ss zwf4g<1-#s}>^Za6?)}pX)AQzWUmdBua(28SXJETQp9q_C)r}49nVRf3&Tcvi87lj+ zt*TSKA9#rshoMI_HB@t5?HSK~?pL>!M2WA|T>Ks3W=+fG{VG&=rl6s^s``?0?z#rK z6Ux)4zkGMFY(^rr%-Kk6AfEDkQ|OKU?mFrR<>p>^f7LE6Mo!jFu2ycZ+@T9aSbw{V zwO3U%RFmp6UGBGKKF(~-B(fyyAGb|Xxhd;9G7Vq7`p~^1_4x|MzT3P5{Z1&}sc+kG zcU|MU+;#QqO4qfmyW)Qv*?3`!#{L2ORcr^?s+0{VQ!&I0cmJB?S>qKu^0l#eve;P6 z5F3e0sjnujsZ5yU_p;1cMjU-~<&~&Mqbe2VtNSm^tUaZorx2si!4qQOdgZ14_M=aB z3Wf~a^znGLW6HzY4K=z48^d#7H);!qtM8m1yLsPc@9bqJu30Vqkug)2I9tBh6dE|( zz;~i_%pt$}<5pY8^5)zK2L1VOxhEH0pwO}@>}Gtmca~LALp|oar#XkB#dVlr(W_zw>!kGQ#D$YiL6FZfeiSVu! zI+5#=Mn@Nl|WUykuIm&G^oS(skb1uP_~3*YtYLDfH2R zEm890Hzj7CB$m&M#YIiNw(S?2fX+tM2H)@&E?(&20a;`1^_{B?;$;Bq^)y zzCdgkH2qz0WX6TKF{i;_zb(;uS?ecmiM|jl+RdD+4rD#?{hqoFZT_hl7ZzgsM{jNK zoiKdK*j0;K4Q@`H5}9*2*{S%6c4YH{y+-G#Pljh)h_6biV!zbake+_YOs;!-&QW>u zl?_!h3N|+uZD>#qe>coE%O}gc_I)g6=7Y0UF^xs1O(x7&@t0c|iQ1~fsNXz2#s4w# zz&i_je?{@q*;dgo)s6X;OLV6>mxvd(iwY(TZc#3MM_AJ{iMG9dCVfoat27$_vQ4@2 z^o8gVeh=cSBHmPCGBxSl^DN@^gPre*m$Y4oe!V5C`2wf9I_lo02XF76A1ZziFG+emw?#jA z%d^q`rt4JqDlaXaQoNd?5nPo~)V`&4N??O>WllhF^Zg7~>6)zzNAJf3tJhj-)x8SX zRMgjUKfXUi<=n)ToA3G`$h(otoa-xm$eJ&<~B{8b7Ezt!m_=aM?G=mQ=ls_u^`ok zc0-|c#8AhD*Eh~edMKKFI#eG<)GQt0Mvsk9|{$exBasAh{u=o z61=K^KRj{Y**EdL!U^F~{%8ua{CPH97%C*}q8I9i4OQAwaE4{lHeKKhtLSf4&ej_D2^b|R*7 zQ~&YNkvIAd@wy%=_HSM`$aF@9JNDAqMVpb(uDVUB~wy z6SidPodp+Yn;sLoC$`7VksolG>lCrQ(PSL>5golfnsU#;slpctT+UBDDFjzyK9RScP;MjZh=w=F2S9YBEg;D9Cz9;iGpz5}ORA<{;YmUa^u83$v#}FM zxi~7l0*{K4GnGXvtl%h9NA*kbtm@Cu;pNv{5P+PlFD;M~b&gdwHx@B(=FOC1_y>0M zR3v9xAq07Zz9h(p4->KS?dNO4-xqMDwy1mQ{~~Mqtw) zq=nj>Yb2@2V$AyE^*iO#>02$isfi7OUz->)+Rks-x2{-sB$*=Pnhk!`yV{n5bFK1z@kZsn;@ye(5K8+s^`O_Ou$}>!wcXBn zr$H)DAzV4G{s2g`0_uk-gh!^~adA)=7=gPWAy$5X`a2-atwq#%TKsb=YEiM4)#m{3 z*T4oG^HJIO_-ZPB`d~YL9N;-6U5SkBP)>ZjK0X(Rsgd;9a(wzMH8ny4EFB)=hYwhy z1G*^DnHR_^Y9yo&(fDRW9Ws3YzBS((%1fXfl#XS6A7L%vvUN6;vqS5P86WaM1z3`x zZe}bZmm88xjIXDo&XohVB!w6-0)BpOC{-KIF$HlxS1=7qJ>1i8DD{w2d`P6_QjA^Y z_y=>$XRYG3!EUB;1Z9(LQB9nwIl#y-%fOZey$1}REJ-MO3N%5Nu)Gt+$mtsrm z=yCnvh={O;QqV|F10!d?T5R+n7sKb+D!B;j6qhYS`JvI|_+}>RQg!e^>ET{pLusV^ z5N%4l1v53eCiq81$b%+esT$~F3^E^(SIkOD*CD%bFw?5(FEZqB@Bx)P$}3`}rt`AO z7}bY#nE`Z%Iltss!x0&VaQ=I zjX4J`b^bs|2f>in9}kP0H8jj3!|I(2@|j}RNOhP1!&5XG>58VX>P-;mJ@ z$(DU8phDP?n!cpz8GZy*F7_|ztNYufsN5kVVkz+4I{=TSIY%3fJ{uvxU5`$~IYD(( z3jCTFaAiWL5tjgIiaxaXN=I0npwlD`Rw4rsIBu1NyC#qE%kRsww$s+r#q}o&1DWq+ z%dTnjN#jHG#DUBJxiT)ge9VLpQYj!av0RxWUH)A{$g(VunL)0slCJ(RvA;nv-%6cv zmre%45b-*njxah=M^)ammx-VG^RQ8!JknGP$ZRNA77X%DU|qtpk}InLHVM08i;6;AhJLEftD__pOSQ5DVZj4M@Y?Xl{L`&;`1(H zH9`07fi|7PMmI{x0w*BzfLs{^QRTQ?nG{3*=j;#xj|QUlB*?Rz{&O$jC}P;iKn3~R z*JXA)NvBQ4)I>BQ6h%jfmaOwh71Pt0ns3hR(El5K< zS=Cn!Y$3fg$~$5-ea3jhSWi`SxJ_fh0b-IVmWwE6+%D5(s!uO|KgT}llirXvnhZ%U z2@%KyRyd6q6{sW6vw=3g@?{T9`RrvO75PA$Ncpl)%)b1emlRUuSF9M${0R$d7dmY2hiVqFP{g-6e&|5u;Qs@VFj;z#cT)nWBoV z4X!o-q_|mdG_v>tj3Qq9fCx{qxBVsdj3Yw7ZovNCm2OhTp5LEwT zOI5|zH?6k=G&g}#ms3?E?ipvv54;puFWB-i+d@b;fXv|vtRL9(pW6D*w}2IC3ak$7 z`N;PE>0KamsX|#Ld;b2NTC(uGU7F6cAsFfjxcURqh)UB@Gy+$9M-=aZG%C_`hK#`3 zz7ZCuAdTTP9Z6$wjDG~^2Bfhoig`15_XHe8DeU4<<$Hb$nRo#t!n3_=n`~&ISUMDVc%Ys#?BiO>|+~@>I384Yf zzz%XbyB~D<+KC~`@<1{+x!pdxdZnZgc4c6uklgNbP`y-g2+n69nWEgTD5zdICFEFB z#4Hg-j#>$rR*w1)1vEibHBr zfSG#oyWULoppuZ-pFlDj`Q28gdh*f`hin8nCvg0%ZL=1lomKn7eH*!-l?$Hdf+%K0C^GUGA$M6FMuqG z&8`GpHmAa_^uQ{10P;rAFeO89tveul5p-#t27?-c<2(W6e?XUEX)s|Uu%kC18v(j3 zPJ=ZYfmM6~wywg=VmNE=(l)vDtr#TOC{h0SI7-mFu9-Z*gx2yY+6tjRmif2$#9 zTa%ylJ52oQ8*f)uuG!<~R;4?09&2;6LfR=wfy*<}Tqrc5Q!elzpz%}JGO8feqsi^I z`eDIGW;IHv%)YE4QQEcrn}M-MctNq+8$+^l+3N4@?fDJ)Bc)ddI&xMq0utA;sZVt0 z7#z~i9T@GyIo;jIS2CNUe8g-enVIk5Lda<6?_`OsZA~jDq}-3DF>i)r=Se+nUj_B7 z*h-WM23bZPC=R?SA)jl=f8?MD8D#9oz7iITV>vrzP|#V;0)&s}`yeGXx)M z!v2lRsjgYw$A>vj@glcW2XN8{ZbJRQq!Pmn3G;+rgR=uhqO@b&<7wBt$jDS@l1m7U0wyF zV*q9A>$|pfwqRS=7yMJv-QJ9&4Y%L21*LYOU+b-$hD#W0Ay=$7_{=ll@#a-K-#XDS;{iq`%jzf zIwm=chN=>wE8#4_Ju1r%-~}IF*i)}j!W|Dl@-E-rZn3>_ay9PmtPa_K%NyGMSQK8~tqaP<% zdposD=j{Wtb$J-K$ES8Yj26Bc7ls*yTcD;7c913v68P0p*F~C3jWr)_SE@@psNwc`ncyFVA1I1yL1GvNIe(e(wWNk^j{pm-nn(s5o_wOWKLtWM)^DrKVIwzuqs?kx$CUvd>Nm$0Kl|$I_xHTX^(w}cAf-HhjWD(_=SC- zM*!^Vb$<_Nw$v({CN7OdeM-~q?kaYCT?Gg+G&n)cVDaOAC*L*albWw!>8KiP4Lyxd zgIN8k7v6F?t z?j{(Mu7eG$TQ95)Eo1r0J+H_Q8L^s=O6QGaQP^nEpy@OAQ2 zaqA>R(qhv>?=h&jJkznVXsuQA^H5Ber=ynhPDr7US5>6zykBN7i)L0M`{tz(0pff# z)3f}Ou}a|QQ>tP_hmTK0;>A@HK`;Yj`zsz7_iH3w8i~wzS8=}+EP`_dCdYM(uXQkj ztC-0SUbxC7@*PQLAcK!vRoCkS6`IoYhF)Ru9Zja$s-lIzdcx7fq+!`bxIB8b^J>sLeZ5pY`ZD}2HL*0|9ih&7 z&z0ws5-)O+q;(7f5$kx?KalSDRfGgsu$uSbf2O8JZqA7vHhXFy++fT$|nt5YO4B*jKLT3ZUtd)ug(9=82XswBCfgA zk{vPQ0tOO8-HDWD+KqGi?5qAxOj=hb@T7jyTUgH0eO%Tp@_<~JT9|ET0Y*tfr+KxG zx5geiTI$Vzme&n0b=^&r&cz73p|Np&9$F%i#(8hB;$!;JY7W0}()dYwIOFwkOlX-0 zn)6=9h>rVVo+l1xoinRNv(r*~bx3Pg*6WfZAb(vqm(zp~=tt;n7eblo+-xF|aEZ9S z=)2WHyA?nA>Jo(0b0QTKUAxsmckO93t_x{#{+g2d2J?{BKsg7Sz)SuM!z0dVw`v)~ zX_DZ@k3>`3E*8G+h+)YC-{v;Etxj{Z@vM!GC7xk~ka`3S(GCS*K1sLnfg<{o-gU{g zvu6%#yK>Rs#qjqZ@L9;Gsv=h>D}|b^>O|Cw=?c{k*3Jf-TeCW+c3)}I4Ap*aKek6vs( z^P2dcq7e1gLCDB_v_T>3`zE^-y`A+{kvm=X!%r<8((mY(oo(sEkLRln+b>>LmJnoS zy|pEiNf{=nF%;X*mgZ#{9w_DyOwmo9ZnqHeH}A+gDU$jtm+BWRVq=x?o^`R=Ibgzf zTOX^$Aqzen&yU5+OIY;=Ddxj7cw|1NBh7IdaFC57EeO%W8G}#c*WNLzY zJF?Q`(+P&Jp>H%qh*?##<6|1-(~XBc6U@zMI=3@|?V=ZM@ofG;dblnNkYVwMV@t5`A01+O^ z;t_UpKH5#-c~&L9NjDMJ9xh$)&8e(T`PI>N!8ngP1BJ|Y=S)z1ZAcm_<-PnDh-#Xi zM-6PS1-a(i{$qH1t5=l)<~`8lEH9UUItnn$9horUhbO;FiRlygSq^gDu1oc^Vz?bE zAaJSES{P{NS4nB26Nk681W);RwKddhg`Qw;;}R(|^g(SJz7t&v{!xcKbPl~io4|4> z%=WY)3ryYqm1=IiW&(34xH*;%I=sFx~ct%^y8Gn)}SwoTIG!OL1yKR_nD z8ZACXdgh8qOr!3eZ5&^T2JKnWh1jN$FSzbwcLP{AIlR}Ts!KK*7USi$`6aqb9!F$} z)fqbT%Xi+J&ROufzi!r*4?C-}^W^uCxo}^b`aK6j-lwmX^q%N+DvzHCgIs?-i3+Y= zd}~RARthqzJQqmK@)h&3L2HQJc)3+RE5ke~zBG!g7tmc!|6RKKWlh|>;!T6WpO@3> zYza+&UYc`cd)a^UCh_M`T;!YhJxp67)l~iWr}m-A3yC%6LT`I?Hlq6a_bShuZC@(( zDeCVvqBoTulQG4hCqpm{*2R6~YwCxVUv4ppC-WRRH=-b?xP5B(Eh|>`l^U~18U+>X zLRFX*hh9Hyrr}6Di{5<5YTbif+45r(w|!`APKAs+`gXZ)0*{beZL*s^h=qbmWeFp- zrR-i{bCyAZ>`p7Gpv7L-Tg&75sC1b;q7Z#Z-Ap-ZZ9C?G z*_tCVt;HumrM;^o_(7AWn`4bAuh_8 zXf|->!!}(7u15Rjpd7G}H~LXH{XyNy{7y%=*iV|sfSnfd2e%rjIMFE%Kt!*8V`M);6ld!=tt#pB|JmRT2}{5 z&r?0)b4+9Ogd6Ot$`6}KL5}aMi>gaDUoIOR)gR{xZIhoQ{PQ49Y3;~pp-C~@)F0Hs zcR}bqy860U>Nq(5r$W^ApJI{keb@HN2jq&#Ok<i}f2u?c z{_E%NWsmcS?*BxKI{t5<3Oj+mclCd|MLCmOy#I5k67aV1ejd^ApGHxW|GG=zzeRPl zJc;dIsYQqfwc0Z2elHYwz3kGDT&)o{K3HxjsbSmPGY!i?QIOlPA5n(u_ic)C4(Lg%9}@OMK0O^unxv|8Z=`F;E5 zn*05tlXKs2+=pkcFsYKikrTtjUwHaib4Un%?2ptA(T>g!HVHR*6NyPjXvL0alJ`QK zFi82;2F3_M5v!FxUME$n__ts>^n|CCdot+$YAxB(f%KBmpTC_iaG#gFFhEjjnW`bFS;>6=q2Jfe(6K={{ zpTKdKq{3%W&vQ19CME@iK|VMu>IH+gG9J|DUyt0ikr3VM;r_`?y`VnlCwlJFL0_R_ z-`F7ajzLDRp24E)2&33tgj1wPr^POtTSZ2z#Mwk`@ZXTXkDt2`Vz=Ct6Z)vU*YWfb z$y!L<@$6yP#<5J>eG8y#Zqm~i<8JfIr_z;`wURUs9!PplG@TWlYbT~x&t~_JbKYnK zSrGqAGxQR?H=sq6I{25hUgi*fOf!NK);ETWQxQsZ9C}xauS_mNl!$n37oSXA!>eg| zQy25iP&m@h{GQ9A#}oWiIs}pso^s^5i`{<{dvW{fFJ=)@xJrBpRjRl=5we%rE&5ma z3mLpD*}G#bxNz3j6QI_xM_S^U1hs*H(ROZem8{Uz=msrY^eT`XAcZ?lH zRsUj+=%sBM6(7J6sL@Ac$rD|&G-WToHd7-(~NGL`7q26iX*M zkMF9J-Q2}6$s>CgAN-^jxI_zAr?p)=MdE7W1W;Kilv_w=t(?Mxt+XiCH%1}6WE;9RW%P_eq_qt<lmS8 zx0(deX3ALpGSVkqTHE)g?5#GPOBMYuJ?iS%zW9ExdHz%4R@{=<@V)NOF-kA-4>5nJ zdk2FCUyovW5G!(f*?fTif%Y~9hoLv(u2bf`x*_?~{>}Jh4&_bgAL}5>eI*AoSUDh! zF{`}W{^toUbr6Pal~gb<{(xNNJK?7Z`_V6(UL{<#{_jCJs-Itggyw->97|1 zCT?dA|yR0H7FIPW(a{qArXS4S-7=>aa!F+&2Z z(DLP~G<*`{P1(C(&Wr*nstRF+E~72aJ%F=K1OsoacFOQ>!tEObw??8jP_T{JOfk3j>h1G&-Zu96Ay{woD=%w+NQ$-ERCZ2vr(e_rQ3?cegSPx{wu1^L^% z@5xpoeyWC)#cosN80fUCak-_4uqlh#Unj+Gfh?fevcAhVg$I!b#iL3AG_7~K)&Bpt z$rObLN)DpgDcAqThRksAy?H`S9G2NrRi_9uN<#i$tHVO4iZAuI0|P4`;N$FRpYI}) zr@ty)P5IqW702!Ld7ACD?({uY-{!fVVk#8%z8&!|9o6?^#_4Wi2H zrPDYK#+}sqnz7S98SFXr_PNK!zX@@ndi5%w7K2~BOy06|3u#%{gPjA#CFQu8xYDMd zNI(#A?h7PzNGH-JN+bkC^?SSnify318xb=Bz6%oHAb%$S=45{-djC5I*Ob{fJR*bH z*{!@q0Qzr{3xktC`P|&Xp|ivbL0-iDQ(aL^qXvBK-iX_>k@KkfhiyFduh>`w zGtCiumWCf^ze}X3Y3*2!yR~?Hc^Pdrg+4r&`=(B+mVV8~EFkBl-8z8gBi`_LjQH#4 zsl;a?vP_aX5ZpSm^~W{3wASZZ_TMbD9H*ZX(k(Q<6Be|r6O>I)QFA$BFgs4p>WXXU z8_xcRR{3`VSlV-y$Gc+MZOk0xjsr3?j#%_~Fse`ya*?sef!<~Q8AUr6AB+c2UeD`L z{V`1QXZw(RX_&-)OLqkSJR|;NQ>6<1&B{|{@bQe#soam;k^}ZW!zq7Z!?lZgtT4IP zJ=qC$oKNSbx7N~6kPz4XhFb0Ko?k8AB|VU&h(6&&Z8M~xt~0_)|K2T^)Oj!Z*C)5> zw1}pMMT`7w5Mvy3`AoZmfiE|r2p_o_^W7$t>u`wpRhh^$Hc~zPXVP+H{X{=E>HG0d z@k5MQnNy*lbNr?_^JjEeLO3q&(UlL}Je0$CC!EBj%HPi4GYSU>i8I1Nf^-`HVHY~|l`Vh3G_7172*ZXh zda%VCvR9pd4bc>htB?DAw@rM1mDOnma{ru)x>nCz9FTqTDpEy*q5;J+a?gK<97GHZ?|y&X_Nn2BpS!$ z(QD%9_p;{Pg6nbiu*>jeF5{V5&{XxE2{A;ePE_kJW!O|L$knE>Hsz+%b`He#6m33& z;Ji@#*z=yNC+AD){;f}YD?n@WeEzSF-fvUay>fK?7tt`&5W$13ksWIY@kf;$W^1b+ zAFU*82Bjp}qui7*ru~?W23)D*WR1x=eb13%e!z{tXqj5+#6G<`y`}wH+!^0dP5R?y`cd=l7q7TYS3mR` z&c2taInG>MCNdozNZfJs;}2VU+UZ7>FFMQ%-x}HR+2SxsEbE|S^UPAzTfEihtzSDV z{-!Lv%MGGlbe_CP!}|F66W<&2qd)bK%G=wS@P~4$h42UE z_*{AyUU9;=TjccTtsDYWm62wK2ZI-W~x@}4mA2kq|h6{AjUn_ zz?AJT4-b_6)-F4$LVu0UCMUQ(vn3+s6FrQZbnlz+v@{Hnyt~@M2}#GQeENCjsrV&> zEjKk89^2Da)TQ#r_2JP&ZfOvHpLjlTDp}tw$~B-|Zz%fVOMu`&0CS6|?XN?#!?kZy z)|vhwc4v@7p!wTC-x5TnjhFqdP<$eIwVPqglRh6 z;n*TKgM14o)DubXbnAP|>#MNjkMb08<+1Wv@#UrR$7b~h&iV3!`asf)FWId5<56iX-G%GHXqHk)6u%`PVYiK$3Z z$;xsZ_<{Qv=VE*HsRNHi0Syw@IRUf`R0?lJa#$+ZAYbCHBr!_f9{nr2WEF&x;iNR- zMxQ!|_Kb}BDd4=DgjLP!nqk9#+Ar+Xsw(TZpjk{D{*9U!g1bd$lW+W5f5ZBCnYL>z zmE8(xJ9A?+^XbYlSTgw2Oex?|jwR>sgAF+Muh78X!GC6!E$fp9n8UdSQ2qDPX^X1t zVa3@~dD-=LR}^oy)Y+4r5>aFrB)|iAOp6l*&Wacp4vjbt&NC!5Q!37>m>smz2oBDx z#3YMmRJ7K%@zk`1jT1q2b5}oy|6yxQ_Ab_I!m&8y&Tq8_JK~RWDP_O}9fNfnsPf`L zD>J?&eJiw@gxwbNcEC{urHnLzK!k7zM+Wr7e19V_XCbc~kTH~JjhjK3FE=YI3Wx+G zE;l%Fei2b%ZakzGR%VQUpf4Z!m_usGcJh zP^i0DYiN8`>$-vPxBX&x_q|(S`$9WxHcaML<*;GW#-*9{0$&G~lxejs(b|0g!l}TR4#3B=W7z5-E`I-AoI!zGt%>|-)CIrGtp$I7VI%(R27u7 zWndIqb7h#<9?2U`s&)Iso(CgTljgY$CJ{PK2>J0kFR*81pkM3&;m=7|x|UDU3f4`h z6ww6l>hef@qatMvZaax~BdUh_ z8_{B=$su>?-10cbFfIMdN-IN0w^xBm<54X$k#9lk60+IFyOjAMVym)zF7Q;6a(26R?&(&tv?JOE zj%FIW-ykX2OPN@;2V3@5?=Sm#O_=QI!#>$G!&QZ<21|S%(QR7&Ae@?KI`qZ5{i{W7 z!$+MW^B+^3a!e$jIp=oMeaYC3m(KMKt8Rs@>OyzESh4>2;b=t|hURG%8-|u*~SVD2`^5 zu)WAKb_ z10!DcG*$dC1>u2DanymtYa4&rMDb7dyhWkDu}io!6h_zTU5;kRcPE}^$eAYNzlLTW z5uPziT`^0Rf2--&yOi$LovtYJIiRa<5_`6j&G%SA7tq~WOozSE1O46@Z&BW*TxV~8 zaqbS)6;W_71sHG+TSKP%Ejklzna(lJeN78S<0nJvOxd1Kn#>Ur<6ZIp}P4?Qcy`y$T9-Es3gSk>emXQZnT)8s!x=SMerTBYe4>AyB*EZv>^8`NxD$BZ6t zCW4RX%7%);Iaham;XoqCy9h6pNfh;ZE9bq*a!WP015b5XFdQ3l1Y)5Qn&PqmhJWW9!VB-g(F-k8eext_gj{`}h49@WFgn+<*h zwg@mA3IqF2t}M{9As75ujwZ}-&ot|gKk{yWa8Z!R@=?ZWLLwdEBAI#7Iywd1apXa? zzh^Va8CAQ+zdIg?rm;g|9Nox;EaZNORK|bO5X_ODV*2fWHatnU03Fo6^zr9YEcCjc z0sm!#{&^!R$TC4u4C79?Y%!m%86H%mhj8b=qrW%F=!uA#SSXlSxJ^H?XH!N$#N?XU zZ?t+FLpa0Uof26$Qc{m^>G~Efx6_z9DAc2rfV}nh4^UB&m4*ZoYj01JXSz*xrSa`i zXvV>d^x2@DdOp`oYnLsa4-hw%YgA&5mY8&*J@;Nfk?k#~HF6~-jUbKRzL(vX| zbq}ZH@?#&{cN!Cw1ZFtYl#O%rN+$RQLr@s~OzrB_9}k{EF#da5E9l-Hk8=NF!PID@ z7(vC$vmd<3Ojlsca*hQ@JJU8jUZLvt;FS0s;mn(Sb;BMo3S|xC&QRf`EWA}3Ls*IQ zze(M)=SFFbmDcE(ipX35FG$Br(HA12);=a;tXkV9-&*|awk*Eu-=73kiZ84$G;#C|UGG>`-UpTF-XKlZ z6(BR}yk5nB1)##BllNXMV;|$LyhZ)H>td;T%j*UnHM^xSP3?N{H;IUxz$r7HAJy3?XraEH%c})@rAG+z=ePrBxxSzUL1F(|RPIa1h zNuMO1kwO#(5W9x*dCR-ile>`Ix@0OLd*%nv>Ac(!gunHZtk+=Tl`Xap=E-bc>8aMQ zwQ}*a(~qHiIu;@7fn<3yma@rJ59BHPGQ&^i`++8J9^}h&)KMB0h*?oEiD7w7c`pAI zDm*FT1q2n_ak*(~93ZL@SgkOrxj$QsV0OoBa)^3-q=%jKr$5E+pBECJz~e@ZD@SK6 z1?IM`xw5&s9isdNzIOFPyZ!i#3ZvWGJE|F6{A=SL<|U3~xkND^A!z~p`kHx^%eNG%60n)E>bPb7gN<~$&CC!GiU1=z5gFfOat{p!473| zA7&z3nEB+3HAnvi5jkX)l$$(qak(3c%1UGtjjy^gx^F1INXpsPUv>o9){7gpTFD_x z%w;4p@T6JQ-!4YC?bI^2yap`5W7lY79vR`cy1#P=99no;Zud~06{cyY@@6Q9!yKTI z*@8x$0x|T%J+Fr+z*xjX^LI3$DDumfyGKpuUaAe`3g?5|@7$)oQcgelo4fBJJ!E~Q z9y(?>f`D4iF59rt!BbC7j$ontp5_)|^7Wo%#E|jO%=_q``IaytZJOcM^Qz32&!>Qj+0)6D$|fBu?`uz*Piy-)6I)Cwe3wsD@q*;$qws9`lW7D z7TsNFL2cA?QRCq_%Q}8`s)C5HpMwdk-^iL>J#0zO61>}|GsxvQuRO1nYMY7J*CuI z^I3V5(~=L$8N0P{|E(5&lakdv^y;K$EWS4<^fSKd-B9oP+>5yMq`BP7 zFm9-i1S*Nb4j;8f0<}a}Gl4bm{V>OAfda*QQ841kV=F*!ahb#XZYK0--Ob_A!^D@* zwoq4B4Q@3dLQvA4 zW`K&i+bq@-wpaFIxPz?R#vc8W0GvzgMk#3vvCEEC;{?t*C#;4acC9vR$+S07yb?Ih zYkjlKUqDWICsQc+v0|xk`O^;mx-X=eRC-)b;>BYWEDp`=r7I4}H`$_o4-9=pX%pKI zf-F{fLHzs5dBHDz7B4gHQ97?E2*x+qzp-GQv4%sy_9gkx>&i60JBaQ21|P$Bm!p~Q ztAb*yw9QGujz&9{VutU%zN*1rtPxG=;X&%A_DG;RYW(EG*+a@9M!!D&XnhZv{8J$2 zNbZ&^CHPy=*3+tKU#!`^Xu45rw%Cl4f~Jj6HN~|%?)&Enz{QKJp&joF|L9wh0YA!@ z1jSE}J%OkbIO_fy^}jIptjD_HaT0ag^H6GC_PBt8FQ86(ZflQw_P(QT0>>m!wWzCq z0Ev=!+Wnteiz>Mu8$U@^(sh*p9!6@dow|4aJ_g0yfQ{z4(Gdmd#*Cr7<525V6<_Br zhgW%!9a5pRKkY9jUwhT`@X@ds4Pi(c+(mW%Btmk97kKqPL)SzFy^gtwAaZ>$3g7;I z^zecoS9Ac2x}7TAI4`ufsV9CIonrSjAL$L8Xe6-!I*#Rwn?5oF4&a%M^W!=EWHcm_ zNq_G5ewN;^w@LinF_s7RSPfA$>7odS4)+HQBSsoD+l|nPA2S+avCCL%K~&gwN_A-i z>=_%XR0+M*g{4>kEkM%0V>aniA2Jc5b%S+J-*0Rj?jbAyE2S8X(#k=#M|-+-ohov|7D#Sp{2>jG5TU>mkFI6!gOm5UPBzYq-EJ_NsBaQT=<}!^+TZo~7R=HZTl0Zaex$s!rT*x>fw zqkA3YX%vMLV^pqk_=3>7JIzDD^l5_^*T%_T+XuR9O3*37qLtyxiDxjq& z4RNv-tNqW#a1iL09{a)OBe`u!k7DMn_xR+@RQh8VaN^);VP9Ja;amgxw3_c$er4o? ztMlWsRt{CcHT=Z&AYtB=VFgV9@)GH}eq$CyzKB-rq=?T0%|Gf75 zYH*S)AZI^mAJP0Mbg%K))sQ>r*egGT8gwZmJ!*C%UXT=)(R^Pn$UN-8;QV;$dVE!C zn|+8-#Wl-SvAF-NDX493qs2Ok{P!yeZ9}A|_fyW%jXk2e$94RBT5!~Olma#@W)15H zmdg_ZSJj>jv!VmIiC^rSBB#L)o0&{y$S{Ikkm2PiE-CFKTX^V z+5Bd%%dF9!uZHfo*Hw<)IVWe8559+)CMf4-uWFtknURjjsK?4f!Zm^OMfWZV(b5VW z1b*|g$E-2ekCS@`vVZxNCfjpP_Er)G6SweD6g?w7gWV)5y_);Y^Yj#Q2h80l>k|jU z!++uR|AntCf2VEo%5`O)>@_Vsz=?aO2bK7Dfh&?0%8DpDF@2oB+ZheCeH1vl>Z;K@ z8Kvme8oU+oj9QDe^AMET5eOSxz;8bNk6vK1eIa4MRq{Xj_Ey?S<=*vJ|2X4qxEVY; zVOaCFdES)5`ha<&Q+ve|?_j7g?hpALzwUxO#T0p1uDaL13hWEe2$k;gFSt$wNX}0b zFR#?YD-N<+P8<%ItgyRMv47DvbpNb;s5}x(bKhF(`SsCfqP#=;BK+9x;r~zndura* zsUGjkxLuXZD<|QexdncExaJaB6a3r}32!hSj6Gk(zMXPaN&ekFclcbm1F1II4xJeH zaJViUp0KyAy^{AhUXBo!SukX?-NA(4`}I9R<|fxp7Cb#R0v6P_{Eh9sRt#5&w@F&{ zSbnu&U2~O)_nNgX^MCr_CH+z1tG`UZX-g8HeIkT8Dqxw?C40U*G;T&souJiIK!g*8=#C9oRi#G_>fS`v> z?mIk2<^_LY{qph$?)2|}ujki_DDy4aA-YmMm0sY z?|8#+N$_7UencMbR?48fzZjhEn2jRabkW0^7hj{hC0#`iK`HL;2EAS$wxSOV451@o zq@5AQtJ{Js+a>PdEiTtE@@5~PwEgF%t7;0F*SJ!2><#0r?&fyzT*r{;55WU6go%IO zuM&6i8yBFUx?%1+W>b1K%AK299C5+B$89h@nvRPYapOe2K(}t=f?|Vm_ra=lW*%Gj z!H`ss`H_oHu~EWjw~(g(bjIjW{hcLDKkK#=+;J_A1N4*F-Reg+!@(LO!OIWP(T0z* z1+7n>?;nD>ZEPQ39r0t`CwJ$6w7C-Jm7WU-pD2TsUW#ttVm@TG)xH_m<~ZOGc{!!+ zd(;y9CiU6)}pY4WXSK-uyZi-(vg8GSJlVl`s^@0$coR&F)RFV0@V!gL!YqbQ% zmPrO78;MvVH+K!mmDXQw_W8H_Di_CW3BTVcCfRE|26_+lr(#pQ^O77*{{nSW+%RD^ z11kuWoVM=}yzNil-Iu%5Ie+-hw)8*^QMMQ(h5j|eU_d;r2&F>W5KzMB9*Q7N|%kAlxW8aP_x`@Y=1^~q;+~#eiBPy?y zO_RdH&4T^0D35+E{;m9WA?12`P;$n0H_WEvrQ4|VMPa1k9cSW4%b40}&SJ{eXaL(@ zIt`|}Rwz%90)lMMeVj0wt^9RVx*SR4K=^I??^^wVkW@EC{FGr2j82RZ>gLYm>5gMG z(&{S*+7;>=Jg4lb>jy)NWc@1Q$Q|sh&oZ!facWC^py;Z}~ z&;N~NNl0W@vhxOxNKGu4hu`Jj82w4RR-R)fL&w5MGHM1|j6EJLZPP0y`7S!&vS$Q| zqG&&As-B57nWi)er~dlHnE<1xsjrUC@RWI-IbA=0Tn5vU-tjF%+lh{hL<*%YPX8bF z-8v|aHwYUH5G;7`puyeUAz0Ah?iOrW+})kvP6%#`yL)ig#R=~2aGU(T`|70bzpJad zx|^ctneKkOpQpRunVmmoUtoIyLzsgDNo4Q95<{~CM-yeME-|*E zZImsqFnBQuWf~9M0LVl7wZv3g{4(wj-fRHGMq7V~?VQDLt&v`tx6MQh2^dMR(n&UU zZW46Le)oWmN?rE$e%a1cOOMY)=3b%YN$Q#j)*+kaQn#&RpA+?%xZ5I9fBp3oqmA=r zmWJYeQk=(4V;%o_(--dQGZp^9Z`ZelE_PP%crovK59@y@!-=P^pwDO5U?!b@`)$txl7~1Vo0jtFIjW!;Aee(So!3&5k0>=qVGaI_ZF;Qx4%~CQ8P(`vqLqj z$8p*Zj}GT)yrPA+f#d>>MeR}a1N_U!Qm5YF`%~M6C&PnmmdiO~5<}5i3w{n*a-_9_ zRa>h5{VV)64e~yI8{$3*URW$!WKeyX7K|%6py5WQp@Lc0Li$y&h^QQcLblSd<`m0a zcg`$?u23(p-Ym{#O-0YHRc=P%sKv?!zog=>KwSdWv3^M#^j$Z^dWH|k#U;0>F3ao6 zu7KYF*io}Kuh_D?Y@pjsweSuTGt~WjKj!BKEs4NaLH$6KoHxDi3G`02)RLd*H9a=Y zYpLH`7z!J10eiq%yyn*58jTsFdN{!G3K8g(*s1g)xZ@EQg3nm^^i{hTTk#|Ye`&?( z2KMf2B4)GxLHV^^$P>lri7zpDC=@o90sT2W1;c2sg*|WWti4#8>~eA)DxM}NM!aKR zujvx4k7|fXWKe2B2HIHhV^}KJEp%5$i?<>AkWe6j`v-3c%UE>9zUryj&m9zVgN$*>s@3jAS0yMwkNZk1W@ z(58E`T8VAA2=W5N4OM+QGq|W13hiy=2%~sRCRRxPGFPX!hivs&KZzkNmJc1j8}~uF zh2G_gCBC@6qVg*#;vTa2^m%43`xUYVMSR)bBL?H(Bd1!P21{3qOWP?G4Mn`f{G2(d z+@HeyRFR}{AH-nL3L(LWqrp*Pc(H`vg916;GB*(8bz7vtqBo`7`;+UEE5heGJ1_F1 zA|+CaOGyN=Z_#vF`^2i`U&4%gv4hGpI`Qsl#8d&@dSn#FtQbM%D&bXE=wg~}kmo-g zrV;mPVu}p^51Z=t9DNZBvMIn5&P^a5CSnl%c>i+)o^YEMd~NgY;bm@ zi~b@tlTtcwmVfgif0%Dr%{rZPhFC}8rq$eAd zAj(%l5kpb*(L!5(C{j$w4jU-+i9D6tq`8rx5!eLLB?W<2=pXw9rQ~Z!TPg$PK4^T zXG+gEoZ2)YF@2SA?e1%go*H8~c1N?hk};TLHBfr74XI;2(^`moP0iRXZ3;!I3*@#?~rXPkObsq(e=w#uMpto}IYamEPT#-%IN=9v+0^zgxbA z8`&)yqkpEJ$YrzL3yYik%CChDiyq2^Yuq&+hf9kkqQIQ^@CQ)>WtC>l zK`t>in?~XwSTNGeheIRwPjc;HXs8Fyu+sz>uI8?Lexs!|Im&P_K?Dr%o*LsR*xYHI}G9Fo}h%m*3rbm<=kLRoe-a5Ksxw zdVjxIbE5M~Hq=&99VLE^($!BWt*ByG$(Q6CP&`q6>#kAQiacM=^#~>@99B&`TkK~v zXH{X79wd!0nJjB#(cDoW|8t;5mwl))M%D-?CTS4*AuIDv9O1jYVAQ`2Qhf8f*}p?6 zPc%pXT+bU~ON4RhK@a!2#W*)L7Wqp`&7B&PpGvCK`@(FIWt*f!ORTRL1cJITf*ELx zG~Vex+t_|8Bew&NI>yDieHmDHFrYzRm%tmePV4s!OeE5A)wY*>4!8Tpw5}k%|N0K20!U^h{Foe#ZWMw`(~=RkKAVK1K@rxw7$N zwNr4MMkjaq{H9s6t3#ti8>9P1wFw`6l-?JAz&| zny=gxRQ8aO*|=52O_2`f2Oa4Z8;-Y~&c~6bsqLzkFDtx$K907nN$_Krg@#8pt7lca zP;RdssJI6yNZ_R861sD@8reC`uU?#-nJ45q?%>|EX5Y8o$$_JU6i0nF<1=hI>N97^ zmAT2x64-Ybw_ZNPa`QBv-rj=ge@!*6Yn#RzmbDM;k4@y^;dvicj*Ap^;r`r|!Rwv4 z7Z4urY*YR~MJ^wsEQUYiz#Xw?59VR}KuUfRt^5&x$c{N;lYK<=yGIle4+Fdr=BWgX zm#HDf8eQH9Doo_0_1#v#5cf3o9DMg24NUx&m9Tea`XgzGkPKpBNC&lIb2q+4)2HOX zO{*frqorI1c7Bop?Aj~lagFFw1dAWTqz!< zioyDCyeq>beGfHAa>;!+{FLH;C6%R3cDb1@rpEfhRQdd26*^x3LYjUwUnwW~`w`pkLfgMoE|kzz-`B?rBZFy_i#>y81Q}O^U+SAiJWh=FF+Yd`}p1$rNr0I+d4A>QUKO z{c19I1)&LY753`MA?(6=XsXHx-TcFhb5}b2_lQjD1JQ@wiLNSXaH=6nf`%d0i3he`!Ffy-cO8U2I8=&f6|1M0PV||~nXj0Ng;rH9B^5KkvWL~W z{rU7mH%E7n+h|X?OpRF)Rp~b?N0;hWrw=g$9 zaQrHjg^^M6MEDNnAH+~Bm7OjrVWGuKiII#G z{6MUrKEs=s_c_3oAz}DofEAxKR`R#VM^_dS$Qw{|kg}cXyXlD=`}t28f+9XBNl-UG zKbpl%>EdJ8<*~V0qcHcv-T1MwFys=e@-5P)V^EoXHyqNra%U4ihKdg@Ms8OvixcFD zi4H@?@D#zvOZGqv{_OdUO}rYb8om&|?!b(6Gk*Dt6xt8>@FkcTm|-A^G-Cek<7G>{t!I3_~&={t<2E)qkhNFTNqmBdw>OhvHe=f`xnNc4r{ z+b{BRqT!bQyIw39=Y1Jryarh&UVEdwY~<|{K^czo$IpGkKM%u(`$ks#}*$jHHHYJI_fuQt=H}omIabAY|Mjd?|y1jdN?z7ezFyG1n9h`}|guM^PO#WLb+LT&bMujWg@{uZn1A z4e*W#A@h(a^uJPDGe+Aj#;pj2VvsO(3l-GFKb_$sO4C_4Lc@_Axn3zXJGZKf7^8W7 zfUehprH`DYYp4%a6E$RfZ$feuUy)9Gj&<-cU}+6UZ0fnqp{3!uqEriv`O9ERJ?!Um zMY~L6`u1MLPr7-scD<_WCF4AU2CXMfK>Wm-Y%WOK@SAe|3Cq;R;aG(dW7{h6&ksfO zfwaEI-lW%5#q@pr$Nq@+PNiOVK?r^aM7MrqKfjV(&CaqM6cex6pveWPfJRnRwV$+E zD7VFtDZib{=OY@Y!_z*{&@H8TL^piOze+MuCIyR11bFPgOH3EakX#ObjEIOXEF^VC zVn97>EkMEspU8Yx;gUFwqlY~dOM;?McB4nFRQ_q4Eg()M3a`ZG-yqYC9^CS6hY9gl zTYV07f9nbKFu5|V1MAnLjWFqRK!yk+Ub;iKDy=BiS4d$CVX6-017xM(f4CnIHFP=o zeH4H|p7p2hmQymrFr)~M)UvhLKEQWxQIwrNQCBC%5tC?WtC=moca{zdEs#Ca_0|p( zxfYQy3@)HFSe~4BWvT(0%w^-yB$AOaaJm013vL7lrY8z~mXkjfrD$Izlr+;^)2sAd z{PYdlcryEa(cRKjF>90zu(DR!0A2;&5J8e~zM{YHlS5GSeT!BE=qLVBf@KT}23#!X zRDMU~Xi(Lt-OeSq4ugre&9J2uBaO?x1eKWP)?G2qF)MY*enl)F{v31!=@7fx zd${~CoXi(+IaQBN{lp) z9dP3#9*vAqR-)lRYriX+T<(t>r6_~m6)kBEz!s2QFfPQP) z1s0Sq%=~ZDzFdLQHk@7%xXf0{jcE}|;b1i;G@A8p<2gF4&OaIkC z<`zT&kZq{_bDf-d8oyxRKUnDDPC4|~zwdwgPrqP)Hh5Fhi0?=|*894WY-2HWz{tBw z35K}CVYvSne)NC3^C7lDfku+@nJGOr*cvIpS`Hqv3a&#(Xk9w0v7Z9}56)>1AI)`~ z|4TXgze$N`&GLUrSlNjw_w_scp>mBYrK3(w7G+W6AEy*2->ot;5QY2yz9`h}2GBjT z|DjO+pC}NYo;0anE?x!)ANNh5>Ibki(7Ic)wX+m*WIHD)&sx?zlEA|H!k=CqV%L42 z?_US^dgw-8v}e0=F^@VyH~Uc@c+!H)rY|WxUVC#NK&uX)4?M(`1i#Z>8O^^j0at$4 z+^AGC>Xa1(NvBLJ^8Un&1=8teJTE*}*0#X=_O=4H(k|^>c@+M12wJo!zp&n2X3l*{ zs9fD_D)gkS^JboKUkFwFy&c`K*Op?@8g9|jy(oL&OWV#+`UdM!+R4arNcLzjdc}Bt zT)&DU*%`5Z&a|Ze>Vk6@aotu?U)VywcaCasN{K z>JnI;GW`avabzcp@2vE)(5XAOj&ntUBw%K%@y2-864A=^tNr<;+(XzGK*>JculLaC ziGKmgzVtz_N87M-C7&SrQ*v_HIk5#QyC0FL6OLSWIs;+|~j{P1vfwYN91 zezj-Pf4y$k>E+e&cIR7LO|~x^2L0~;KmK2Nm>2;}ElrJ_%ottm988(49PI#179Rii z=3s#wTpS$#B;@$tOI8*($lw2}`%llx#>&C+j+Ev9i2^t~IvF`Y(*J+7|0IzJ|0ML= z@yluqhb)K^u0vK2p0o(;`vsjedKcEo6UgKt`H@1T0?xyU6{h`pQ9FMs8YhjP?GB_O zCJIkrpvIthhv3?RAKh?&=lgon`2zO6Pw{OwaP824b9g!G?6}uzn7F&;wavM@ZC>2t z5MEg5{QbDnFyZ|qkUg=pEEMTIes%S{>iPF;`nJEH$G3O`ZktCZu3TpxAs#o&LL;{i zYeLjdx_f&Mt?vKB1H9MaO?=zje#+(BSpN4r`o;;%r_9EQexbVu_g8>k4*0g&E@$wn z*#K-&Jz?UL-3gxGtNZ(HeT_E=yl0-XlWzD5bY;PbTM*n;M1!yCBIMZ~IEabQ{7EU*tK?mP6v)W`QOcHVMbRHVc1M&PI4Gfl)A}JiD4`0{?EXf4k7c3oU&M*b{~}K6{)?#k>n~qQQHf>3`ruth zYPy-z?>y=8eqv+2KOpj_a{GU7H-OGOA9G8 zBrI5&=r56PO$EGGNMo*XKOJTN19+7DAHcKu{{Xh@{0FdI=Rbhg0C@<&$KlCV&i~7P z@Dj6K15RQ>$lcBMSNR~N_9SBnNy+;|BOe5-1Sz098AAjFU$NY*eQ@3;1g1x$nbg)l zi7hqsFG(3>3TP4cSLgrIT^yZkt@ziFpRQma#XtE3X)uK7+R1-}*G~Q;?9oX5kMK2M z;veB_0P{b>`>Xo@2v4@Q|0V1mpX=)RAK|mx|3NtBe-P&H`;Ra`;6K8r|Mhr(^~b-C z?5`^QEA?b+-hVxIm4fs*p4XBc>uev55G}LE?~rKQ|FVlVMsoYq1Gs#Sg@|?DcG_*$ ztHSWD=c)(35k+xI1Y-h;M1V`6AI408*{jONEu#49bvSS)q$ri|tWu~6qA0z3T@C~X z7R3)`-7Wm{<#hAi?ylLSW&Sj1j)qx;qUc`Y&w$26kbU{nT-}YlUj}B?-O=#5pSedWf_d~!PWN_LwC%n9x=aT%zW28>#qOGdaVshGHZC&m?9g8nn`x}U5R_Eqh7 z=`v4XNJ}&Nq#;RmPs8L13QHM+D8NVxX;bGpRC8`I8+xVK%#KF19B)RNf>P&93$8Bg zZ7ONBj;s2K!I8$`D|2u<)?hFJdIEx+6F}5Kr-^3%jw`2q<6*b86H={@+KN1saEPlL zg4yJFCscV4UX-q@heM9<&m07I61AJ1dR_lQkyl_@w-ajI4v^qj4UymuJ?Ow?(o|1~ z#!0>KnrRV+WePqU15QU<)cjzz@1D*$PBR>L1Q&anZz#KUu);|+R)4+A>?#1Z7N5bI z3+`&j#311pf{T$e_B4TqCER-PyUWfQIp9KP@Kn)F} zM@Tr=v{FxM#G8fPP0_TR3`Z&nsf6zD&!(M-MqeWdcH4m6+BtHSUDvpPhNB+XNMANV zm@5M}AA_c@PtqqaTcM-|pg&Q9lOoN_bcF|< z*(P)=)lw;cf#?U)gEh>iuJNxe+=;YV(EJuMprkznihP`EIZJF!J{5-+?rBIrd(RW` zZL%JYZ3Q4b47GPrv8r;}odLIQW3RCB;;BOHVk zyV$zXDrxiV5HgSPh0{65Ax;1Lx=CSX8qAiRa`1ZsGe#&T?W>a}_o^X|V zsw&Qc)y=Jpz{9C$j$GF2N^$|4*_>3|Iw*O==vp?SY`Y{Z_e$L00^7rrBKv)Uw`B=6 zI^K-dHD>jhG<2HQ`i6(bEh_QsUg|sE!IP4bo9~U3Y3>hL3u2(g#VNtL20Ik_{4139u~LbR`|wt0D~!ATze%?*B_Jp=+zfI7jGmls1q*xu*>cQ zkqO3fjv3{3jp|qVYR`COq^H-t8FVe{(-Oa)2Wrj}u>s}#=+xq$+eoyUrmfg%CosOi zcUSP6ZKQ{t+(8DdpnLqs9>M{A>o#rm=-ne77$eF>kMoq*ijILlotTG zT7=lzWc4@!JWx%1Ww+3vIDk759)=pbVCIil@ORC zR_kd=KEp%ylm)hDeAorOHPJCa?UZ$O+C_JSt@(X5?F$dh@wW;g8OoZxH^KDbKmytl z`iEraly|ycqp1^yztu1lH2^8Kvd6wS(Ox9YdBB45C+2+o*HgrG)iV&9;=e8E!FhG7 zX=OdL6@G~omE>yJU922FPE4t$^gt$G8&DYlwb4}=M+Fm;hg&bmEz$O}t7RVW5cl%e zyR%rJXeHWgyKKosj$SKrB~xc~q&FE8S`d&gX=d9zns1fv5fBgem=d62YG~RmU28Na zstp(VQh}a@GH@MHf7}cWe}n#K(P~brAL1&d24$6HXXX6$>ZAhoaRuxVmQGGM26IOD zljpbIgzqtwI(0TIEXKrLtK*NktIeT!wnquhn79=k@fNLw)HpMnY+U25l?(yKh1fir z`9Oh8M7@%n<^gT2FB#Id5WK9fFApL%utq;$UKGV%7c~_hFpGfXfWGf)j$g~~jcm)f$Leo)t@twy%o$1mw)a#?n}+mlC{ zH%vj6JX6j{KrG~iBfEAp;VE(pax1^vQVY}aQpdYZ^Srkti&~>s>}g@FZRmi#%NEaN zTMb4^4Rfg~8_6w>6_DQ{b|&ibB=Relz2#)7;%O=wIxtUC_PbavMXY%yn*;TF`0(#D zX|61fX8KTEvRHEvL_a5JtM~OLRxZ2WzR0J|))?U`YZge25d z4HQE+I`G4n@!0YZY^PuKM04dV3nBbsm8@r8`F@4nn$v=(qSZvJVle@Z!WgsMlq_Ug zx^gkolLPcI|2(u(2Lr$I%esT4LMYc(ZQ zD|*y*ZAk602{)L~$84awDm%~mkeI*F~OVNGGhQYzz>31`#yFld^|*1l80{X!3cS17-RKt&GInr%0ng4{IJ>SEG3rk~!lo*4V$&0r3p zKa^c67*_R#ZF=t77KR)4Ve#JTSCmuz1&cj(qt#<0ex9!Fv;2yYftrqQ2J7(L{75+e zJlJZx+RQ90`V97zmS42I$)<^h#AbyFs5rM|*l*kGY~Q)iBj~*6gMsxGu+XHv0a_^$ zROCLLUmNVpBDV81IA@^c=Epg`b^|{hrZ}|E9Ww)ct0s;j%CL7l%9acaUw^lzzs%X~ zl$I^gW4bP?%pK2UCzgTetz3sw%FCCS1(|!i8CKYL%=U1%!DAgz*3#qi*H8k|4-Uk5 zO}#?wyP6k}q0V09G1$;&vIvLl|EH~>qaHoMaH`5`p7k~$HMR8-xG8F;{>EcV;c4ai zp~_Hu+t9z&q2|_g`)Aow2BvGd>)i2(5up?3ljWAe!2B_zTgrzo!dE@*=TFD45e~oS zjyuC!FPmLDomnr;HuY(lpV}MT?i+yAVC!2U0hu-fogC`Z8y86}`{na*uZvBF8~U}i zgAtJ?$MVti<4CTT1~^91e!M#YS3Oy}l`(eWu=oq~NO#dk5pO7L0wF2VxiMfP+t<{*FqzMqMyupanI{`ir=ClC2Yh`Q10H7F>4*tSgZ2ByA@6 z6A3Eo8CQld%3cCl^c=Q z4oiVwZu_Z={uw=c?~MuGFkN@@ZeFX_177B4U!jR37}>uh`T|O5NND{oooen@+nN6G zDzLM!Dgs<9i3waj_-^|*58X9J7VVI5w6Kk4Z#;XeI1pZYdu*@E*S&q)=yTZuHqAov|Nl)JmNK64H5DJ)0j!{qYQsA*C{1dKw-8?;)HoMsLq?B%)Lz{0?_7# zSK%rmjTMM7wqq6UC%I?AQa-nnU87k-7q(ofCORg>HfM$9f`$fe=Yr{|q#ZEk#JAyR z4u(4HMBvQIjv{-3*?|t?Oqh;F!I*8ZQ;kXOCb7-L%&4S+iRHM`aM>*Uf?t}V&(>4( z8ZdHk-UbM5c=45-~3E3;dVM-h`=`9Rl{fdV-`Qy-Qy)hT%&%-F|!mTKW##o7!Mo(n(uSsS!v#@4*`82Ih9(OrMVbVL^}eJbLr@C-9( z^6_M)h=x-+fqloCJCqy_mCN{Te?b8I%T(E;bZdJ~IJ`HUd9Bk`nu})+CR$8Nl9G+k zEZ_>e8n?W%>JRH|(Xy=%>E$mapJZpRlGu9iQ<~f4o)OnauW>o7x(m*W?}<4(v^ok? zRd>NnDDw2`50iUQ#T>Oi(CepYgrC~Wg_e!ZEVjDmCjKbqu*YNAddUlX+9}#b6S5dL z(D6lw4-&MacX^Zdt{J-~`sMd&uy!@atRIgWRp4<)Nc+6#uvTw^dnZ)TthRi2q{cXk z9iI44Cd0@lAqxk|XtCI{l~6AA^HRo@8PXXl5;#cocSlr zk^WD&KKtYy-mxeG95rj8%EMaX#up!zocfbye|VeQ!Xp@m?P(lN6oG+l6UoBN$IJpo z0mB(?PkpR0LxCMUq!DMm)1ZMrYDIMbI{!VyObnOcq;Qr>lyiYi7jEZVoqLByf^z{V zHh?-eX&DLlnXl_A=s4zBY_O`y1l2A39c|fMh!?L%OEf-oHnpm&Gr3U=$S!XH5=w5R z0kh??Cz>B(aB>aVrsR^3wHHwIqnNuC2_b6V86bupk+_SHN14Pp$@PUSh|6C_4SV@1 zym~LO;oftC>P+!xsvGd0^<2O|ezsL%*S?X6=JIOao_pXOyFalj*x%T6W*ZO%b$PO{ zWJk^@;QMZ*DBVuFDG#YVE%jr5mtdBX#x|7W;I2= z7o&d-Y6Wh%L)RXv$^As(OPOteqzb?FP&o%TfZb^foAD4#nF;!!!Ua^I@wdbI9{}*B z9&6Dh5JD@b9--(55!@OGkmA_=0{eqH+_$y;_7In{uA~q1YS(^yK>|~jz;Coug4+&_ zMdDqZ?*!vt_s6+gNZhhTzApRgygUt18+y%j+C6iex4nz!+zC?^Ec{rZLvwh}-Sf#! zzw08G84bD15GtUpN>_VF1QzjwVHK6AmRoiglA;d^6 zXEYbn5+ufBAV^lP(VUW}f%LspyE{>~7d{GA?2;5BUg5HFC%Nij8V8V^W|&YMeqC4|!l0@a_W=$I zL>20on4iMSi9JnHb)T_H=y+kh(oFYOwIW@^^;%xm6DG+R`&u70NG z+d3}XKrs6$;wqr{Q+YNcz#`GQ9OW_QLbWCo)v(EmMigQ&G(vAJDeZ9G-irHC+~HcA z!S{YJ2#tVAx+ozuv)547!plW~c>}y)fVZ2)&4uHZJ-I3vOCj#OP-ck+S&i}0+vc8| zy8}m)iSONlzbUGBhB}NxfaKBecQR`w!RJB%+#gjET;YM3mS=ffWOF%@X)4@%9())> zatFh;sS@)*LIrugYKRE|{Y;E$WI+;=_E71oPWLEUOx4DQsq$b0lUv(lh%qp`p!MsZ^PJVC%-JglD657^`~R&1$A)NbdmX1S3JkZG1M zsJle>N>N44V-is8^0zV2ntfQ8(t-3HW~rm5^v?HpJH$&zgHinbotb%ba^2s}He)4z zZeX5lTRlj8ct+AVr`a<5w&uM2Zi3k_U#-mec^YcnS^eDvCXL6-S2t25q{ZuC$nLEJ zG{%X4#r3K**>s1dsCc3^Rhxzv{-dqQWV7F*?JixNkLeS}0J#C=R}^Bk#f|2D@`gAj z{5lp<;r1f=yD0K}(I4b<|KpfAAJRLnQtQ2`DkN`5|_lu8- z=L|KMQJ|yW8Tor2E4O#$*@yOeNE6J4HzeMeKx{4m*bEX633`c9^+pX%4JQeQ|A>I= zX{d1g@Utz%(l>of+~VOlXuHlb>&fqADY8b{UjHQ}UdGc47{3qubyknx>7cl75S}{R zySL(XIoH~$Kv0P1-Hm)fJ}Nj@7WnT3wcCeADoi~NjGl*eHV9rsQ4?6uOqFO$UK?seg{fV|80oe*84xlyQ>|TE zB}01qsA2QF%4Ua_V|TJMtG{DDb@(e%V1+2cna)*>5o*S&EITD4k_nNKI~(CV%xVay z3#o_cBF{jf#7MqgVU$s5IeEEXNUw)T;#4)*Npm5#iUHrp@&(R1XEXFVKnGs|v-FEM zL!UtWI!Apto>T{!O5b_6Wiw;1gmb2Cil3IYeMyrstFgJE#^Yk!^%l$sUj`-WlOs1n zXwy83+h|>bXwdC~(Fn4QM+HM82UCO15rQnwRu!=(A1=7VIS8B7UK4Glp~Hy&r&N5+ zFs(%D!UMxVSmbwxD-`28F>Sx7eCaOFeM^D9Za>rJ~yo-&;0!A`o zzmZ^-x~om*0){$1lS&y5O zBuX9HTy)+{kkm!VUEDJ$_o)0L-?^XaQzh&uS@np3sHmX&Oesdp%?ZOw%exRLvpl>+~sP%0`PTFCuYM98thdfjR!vpK`0qo zs84)3*k<-qE%eD1{S^oPfCCLmG0(nSbqQ@W&bqCAHahgo-*ly14@T{Kp)??5q2uvG zsM-&QHQLgB24!@IFf)%X>Qs7##9}0A2!LUtx@VQ`YyVqtKLaUxff+7=Wk^khcG@#RPAwp{Dbcg@u3b%NBXRA#Bz zraz`~QjbxH(b;Gmu5>V#K$(F2T+*h@>S$Sx4AaMgzkRMKa__3?$f~CuYwB*SjVaLj zBAroSQcCm<$#q(N;m|W>)t1}Q%1OA(ID@AYK4eKHZ-lQ)Ig6*XUzC}hpnLZaL+LI( zyw6B~uhxo+NxQLsI%EsPV3LKN~+yy0sw9>NIX3 zuJ=&g%0$}8m5*ps+6i78qYEX)St#;24L1DANJ)qt??;I2T@LmIxa!3_HJCRHQAgeV2Ip}^ zxsMd@Pdx*M+LHWWEuWQrwLdRb=JE|smdW7>6%ICyqqOxAep+a&2x|kMyq6C1_&;hH zWOGCpl`~sNIBp~TfR@88X%`Fi;BrN5Ni3B`ktzp0+G?x}h@fU5uHbet5Zo$E8|QDD zXi5Pp6x_j_5=8Cfq|Nip-&t?ycW#iht6yYXROTFvRDxU{hXrbkVoQBSS86f*N14oH zD4(9H|$8AR>k8|A8t5sKpKtjmTdT}sOhe# zB3JD6rSk>bNZZ09I%4<;pt-w1qu`bw8ZV5o+>T`;zS*HIrRjkedLzQg223rbzEGU* z3DMN*V-V0hl2*r@36aPDWNkPS+Uxo99tm~Zbzaew2=}lx*dV1ER{i3pn+u?+C9)E@ zkQz&Q+6rq9t4*%A8LFo5>g_xIp-J+H%r(^}{{ia<|H?J$l|LA=zbvB5`(CQVDwJY> zGZJf0HA>ki7a{$eJ~vojYzqOsm~tPw7x#jukh)ri3X8#JiL`BLM`759YB?Obm0w&j zceXj(yj=T7as3 zS6kh3?jHZ=?C2>&;>Rq)AYVpO>==w+t5JdJ_SFwZ0jC*HqQz75RG4>6Sr0-NQ~J%3o!3oD-i;jL+6` zJ1BXu)n5IEKbJZ-efQ(ou)JagxQb$$t1D6TXgYwEj`U)QXAG0o^^biqm;hoz` zXKt-_*hg1MRCoL{_``&$=5IGd_ZZ1YgGPeDj1*XXWx@DSYv_qG;-TFN>g$b)l@GF)$TmAD;ciz|YN*7Cua#F4UgiajRYQFbP)(P6LmpsWH235ETh+rJFPr|1 zhwm85l(oXkf>#f2$jI}PS5YzML%_)QaVS-4pD}7N3}aP%pVcsL-)fI*q>SX|1JRH( zBxfr0pc}EhEZ*5Y8_}dw+)Gap(KeBO@|25yx@P8i8_(+OEhOGI1bfeFxho{vn?-`Q z)Th^9!Pfz+fvSVJ0W(VLC;e8(%mc)onw+=6Jo<^-Zn;=kPScUj&<3Lq-qmaCNJp^B zZTgd|zs=mM2j-FJunNbJx_=;-d1&EtEdF6;43-*Xq{&L5x$%p4rm?-74k%?vjp!+5 zW{eu{Dbgp!#^tC$e6gdQUynE_YD5iw-Qjt-iT1r(>ukL^TiXtG-QpJN_-T2|FUZHcvAi_B;PBZ7GdU7wEFn6a>4$aJ~S*AjbxOY(mM>F0{QHT zi&Z#K>kNFRc~-Bo#!WfK?{mrtmOdz(q&UO(MsuG~oBR18?W6h54QHFP;Sr-sn^B_E znw`gNO1QRENDLx2kHpxAqBb)PDL$bsMn`k=j329Zyd`j7f!WPZ*Q6gGO zkcp=0%!me_@Rs1N+(%@G8N@9cn~w%K-;%|0$u7X-6Fs#kC*C|~jqNCVU#5k4j)k5| zR(sIb_6+fQLNCL#&kgqU-cCBdOvssD=dKUdQ3;r!zwkpBYSnN1Y+$gyaPcR@tivl1 z3=k+X93AoooIkx6AWJ^#a@ct48oaB;-;5av{2}!_Bq+H;Yz1`%O@M5EAcz36h9G2M z`$eER#73-X+hyZ#tPG4(O)dfW5TCaMPd7dIzj4Rmnc#&wJ8khCGwyOo1jqmj{ySX< zT@PJmy^heu&m)0X{!ji=eRLBjB|cr)Ub0)gX8P{3$#!f#d|L z&zl=i2*?W*1o8ug&lk^Cg;vy)j=KNieCXQgy6Lj*oiunBoY2P_wjMm`dg&tH^7107 zjd9K7ijqjaGa%7L`wzdl%U;Y*H!1Ft*&-bRdJ)VXObW~bOe0Jz%7jD(yN;Vc6JZlk z6N#Jn=;0GT&fxFU+>ZK)gb2?*Z6l}NyO6R&yE5q#h_w&4_xxiuw9c&;8i*MR5(foW zk3^>|CT+ZW+p||~p|OTdxfEmowGPij0B8|vY}mxG??lZc)|Knjkr3;@^B?g)3aJI* zs#kxr7Xo^+)P$xP8+9rQkSQz#{)isQM~z&jhOoz|C9}M8bAx2nlo~x-x90<{0q1VI z=$0|Ao?M?*+rFssEHIaKNsdNH@Iy*QaN0tw9n58{&arH79~Gv5cm)up>3irp>GJOV za^u}7g1+UkabajfxX3r-QSosPLi`Q|P4BGb#)J|CPmC6_m$`1?uhA!H9HPgZsk-hO z*+WK*!5-r|XxXc`Py}FQ?E4RSD9Ck{Y&8t>%nRHsqVg2@(@kz1GRvf^`gZ$+7*c6+ zs@8T0(A?PP4X=%c&B7yDlAZ3qeKLW>>9oIrj}5Et;BB~Z)D*X^xnbKNw*LW7P7tHF zF6#jV1C<`MU07NF95o$2;o&%H*t~qgNz}0McJM0m(q0BG0ae@^sNW@Cl9=^AbXRHM zzjTn1Bn;2kt3PPoLVk=J)smF+iRj(-_GnH#2&rf4v%2G;$*8(B={gH(admE881gLD zku}5L+IPgXY<6rGUfF4WBd}ivE}Lf+%tQ=jhGp4^RW9&?35-7~@lL+s{!)xF!kBQi? zR~>+jUi%B|aN&Z##IzN{$D)9J21+r|9bdHF79TC_3Huab-THQcFN8R}&`~!t_ER@@ zs<9E9k7jcyVfEUgTK;su=HM>_uR`qfghM4j@7NW8dBhb5xoO4=O^ z&_D#^R%cOjV7{{UZMWhVHiq|cO@dA7g2r>0SdA#S^%muPFsw72xFD-Ha|6^Di$M0L1&D0l1l?X$6@S@!-LOQOekH=0o335Xvwi4={Evwiu0BMI zxC$&{DtHl4zdMyZu^5y%Su#@M?KA70JJurT?CWJ+DX~(_5RSNCJGXtF1r8QmD&-0B z2&O*Qx-nASU;GxBIjT2qTTl0eH)!xip!)bu7Ox~ z;QJ(ZXUF2GG2E0^QT2E;V>+Sb>c}@++!sfDi9tVJ@uA%81pF@P&|EPiJ9tN+@sEXM z%P_iG-0)x>lOJ7KU~re!*q;x(X$J&BA(OwUgBCNsaDr>%6F2Hkk4NUeD2F^QU>Guf zstIy)alR-0kP(SPHqY2bWNF`X?s`lbIln0plFVo$oq*~5D~~9DoN2aa$12Jcendz_ zP}k@qF-#3QysyPB-cm9VtbOzQA|1!=>!164s2G|C8m1*-19qIVag*?3GQ5}yi?H*b zrY!XS@H=W<`$RJSkyEKss6vm@cC^8^!R4-(P7O1z@PA^H{dk0_+B%rqfHG~yunw!` z@aun};;Vw<;DRorkRiCc4=#Zq!NY{0L4v!x26rZe!QEX3cXti$Fi3D1++mObf^WY4 zcdK@v?&)f~-KXnT-ItDibG%u?ABCQnE91{;Ll{w8-@{E`j1wieyRY_YbB+AZD9p$@ z+!b5WPFwpm8+vCHf!=xih{hnNWs#T7+e-qrwP6e{jq+*8vq&i6*_#xd$Y%*8yR+3sQ-M=%FE8DC5C^zh#s!daHZB1?>yQZ`_ z6`{CFMde=%U(f3Ol$|J$(z~dGq&a(h5wyNA6mc3_m90S~f+VjrC{3YNOds^|h>M07 zf`<5oMm{pR^hAx4ElVCYsf|ISU{Iba^2$Zkwi;6_^hIhVq5sci6T6qL)BAs<6V36s zA%C$dnt9V0sty1HDn=_>29Byu1Q?}X^xWPf{FAnW&?`wXbo*g{fhuBJ`F}54??QdYt{5HQfZ*Zt(7pA?{AQvsIJrvE9*Y~{2Inm~& zS~rtd`R=F2{}6fb&g-~Q9&94}i&D-yh1>tPU~O*WVa3%oj=ePzQ9}y0Un{Nnch#%8 zGs}8mIX7Nm7a7)tYUEMDAC8ElBFy&MpzO|aU+Oq^t7;m)dF@xZ5SB>3zAbGsu>|=7 znt^7`Bl!^Rl6v*(7uuYhvr+|bPlMx#c|Y?^AOdF+hiG4E7=Cb`js}u8o*H zW%E#{IOlND%@nNuQvVuQ@_^1VN2ZRg>k6IoVd1{=EJu)8XH2uuW!lt0m~6dlE>M>0 z58i=zRhGPekZU68SyI+Wm!gacF3HT~tlpW=RW~`5Tcevt?#`Ngz;@LK$eCgW`Sqw+ z-z@*>`MO?tg)SjKo$mWy=>a1^x{StfXWl_RIjteWr$OOov4re0F-<$6fA|9RQd>kw zLsB3UvuqwoP4`?7wzv#W1`d{O#cLzM)wIlCzxDr(;c#Ara`4`)ebGT>Xe#-fDAB+| zMPSPQaKp!LegbwOl&fFLv6@}B;2_!L6$7rfeWV+-O2i_U@0ET@Ze&EzV(Wf2CZAO)~K{2MvopXv`;~IQsmWi`2ll zx)Y-52Z(*by?8-y3XmS6iHR|y=6We^{Oi~8!TZ`GKIv~hF?1h6Q7Zs}T2}f(gQ3`L z8t=QH;}Qzo3sHL0KuAJti~=pqyab3L3?fVb&|<@N(xo^3J(NXB=Y1H_*GC!}%3oWw zGn7?J#|4#&il7p3`n5eoDmWcB(N4EG6KATZ6&Eu}PqQp@t;)1GlTW{`Br{YU7Xt>; z2+4s?lOSUpi!+_3iU1+p0eXgn;VgRwZDfB>n%xEHuUQ+C-QtAvHK16BvQRX|pjQ&L%J z95g`cRekvep)%dIMd+hh3T#}9no+iF5T5YmsOvl5o zzD;!8aQ-3vCGo~mEL=Iz(D#oZ$+34PP5PP3J9nk%x#=d7Xq zHQU8mKyOF(#rF>VrMkG*Zo~R8xocwsTo!+sVm!jK5Sd~w2I#9)$en2|5odfyb!uO& z1@36>us)Cc^)G9uS)F*z7}u(#7@x}vlsb=m?^3zG$f`|#N>CzF1^rQ4lnWctw^s$R zD+3Z`fwNqRN;|3`3{?PuvKePKi?@|pXrKm=&>X`|=ZlO+=v#xG;&-f4UyG5wg%{GO>>!F{VB17t@;=k0G!23 zQnJ$ou^R&t!~SJUQrgip#xVu(#sQO*l9Y^YnSPTWeUxK^vq4+yAWM_DEMMf<$l0Nl z^?kK7xTVT+Y})M5!iK)Md0ZA_x#DDYXxjC6TcNqlB+XJC5YPeO+6h#BnXE~#3&L;= z1r7jJsgpHxbU}|!p*!P1Rk37Eay`(AOK8C#psKzYTHRpl3GQgCT=5+Tl%X9Gc8>dg zM6Q^hvxd9_Vts`hz9?7h%2|Wo36Z_UeSaWVT*q01-UVTKl)`z|+%hnJ{{leqik=TU z24?Wt`2Hne6+q9&83SAXY<%<@kcmUjrw{|v5I0_a3(zB>=d+7}&4?S1q5>#rqJnU0 zvLStLc(|?KrES$|pvi#{1tMHBBkBEk8fbV>9|IY#*AHpiDH>=%a32a4?j2a#7K;|@ zJv60De@z*?kR}1z!wrp;r$>s!E)aeN&Etp4tI;EMV_~shje7|JkGk|O-mwellAtQ$ z&khDashP0RgKi^n5mPuu&P~GDbjV4n1F3 z985|Ul*}9|UrdiIj)Qd{TK*uoH;}Q72131)`gXN(y&Pn0$AM7iKpsDcKkw^JgA5-G;)O==^4L(q5w+% z1Q6M#cS(tdffYdRf}!I_^vK5eg*ye1MSGs3{&5*&%}Exd(g!#FT4w)%v1TV567>_8 z3`KUIk*Q`i2VxJwO(&4uH)E>#1BEDr;F1Al_w$%)#&aPY5mNC33%%cs!=(Te)Iel# z0!&01Mn*d{10ddL$GWmeWjRaW1$Lq5Q3Q-{PIRQqY z3PLCWGQR?m6p64zRnVj|fI=RK6iS3)sDY|f0hy{mq*fvsUdfJj6lY*hnFttzDU zf+l|eDEfg&vSe7KE~v^0kU0iK3M9kcid;)aQ_PxxuNHhouFaz}mw`yvWZ0D+NYMj8 zu?0lNC&TRYL7ZNI%tIiuCKe1>ywDCXF*!m&w``fpnYAH<8? zGOlUDbj)z+J3HCZ^QO2*1ZYJG{u{t={)K2Q*-7zt6s2EexljtQ(qiz4zIB;~()&Y>NYt`9i;{2QMjnwkD=3@XHfBE52oRt%FCGMY*RW zotpUgJvvRk*O%iTBYXy@o1txwB&IWPI?KxeVITK&8O^u(T~)7+DBeDmF>5Dz8aAip zUKO@@>XbQd4UFUoHM{E|2-PTI2j-9LcI2;FrpGg@4BQ>qKocv9oGl;tD?CiM#-03+ z9OfIr6S_^lYCG4Xbc4+W7sbrG*WL*wPFkl$mdmn1_+6;H`g@Hv`b}Ai8o!$1;*aP(NpvdCIcGm*8G zPZw9<6_rKv$33;UIl>=eP+LL=&bCLLKg#+RD6FlQl~`@JYr^2upwDuKE+?xGKTq9@ zwR22u?LRXvvg+xdQfzgw-4{%k>}&-(IG;4?=v&L;xk`wwU=P8Ug5GjBINu`fG~r~I?Qc-W?jyD8K}1AhVAN( zE~&Vl={9eGyz(4-k?Gx?uCb~od82nWujU>yCEmpLQgFYtE&DI}{DQEPtCnDhZ7@|Z2TrZLt!y#9=5YDg}wc=it#310!n!5Th3 zBNOr#=1<;zZ|(Ydw=Vw8t=5dXuE_@zd{ZjUdV=|sq2{CGt@s875tD$G2T-7lGG$jk zOIGLFMI=SrSbGcR=(LXu1z{7TCYg)YD>ZQLbSf4H|R^5 zd$yjV1&+Jip8#pCF`%8Op!;k3a_eD%iyG%4nbeI=&;1NWh1s=<11Ef!o9-P9f`Qq# zdCTKAgyg}%YSUgX#`#j|E|Qhk*rV4^WM$lL)Xyvm+Kw^H*K1^LDwL_z&SZfW?@}r@DPKBmFMd=wIC19u zzUYyv-eqWYxVy|^bz_%^??i`KO;^hh*kHn_+gk^%W<-wID?77(EQag7Nlzyfnk2yE7CxWeFD_7^YO> z^nxvYr&r11sz{BG-J_*CPsay0&?!1dcZR+4gUcQCF)Xh42S0gsUa2cD61V0XiBf80 z!kdM$Lf5}hWG#(R^ezy02kc!|ql}ST?Bl9Kwx{T;aTPeK93pb++(Z4Q8ISmVb}$g;X}9#58>Oj_7)IczKn~X8)UBA?kwfSUrNaXiw0;o4E6$ zCYK?MlMT~0LzklTV?yRjBo4Sn`*PI8|5dWoHKv(ChNm1^K+xd>6GOw3TbHAqy?3>- z=4FHhcaDk4u>$1;Nly)zLrbiuPEyN-du-kjS>1lQF2k3Nv2l%u)!L=RF6aF32b_~1 zD*cPfk`}J1K1H&WD4$F;3E`!veR0+Z=p-;8-T;3C5W|HF~)H~!KV56h>4W&ZR7b{@sbiTF7~#Zu0iiM43R@Jl|>gbey<>9rTqV;5Z-ta*YV>>W!b1#hQ|` zZKV57p)gmfrEe8sTcl62ZF%ZPUH-PqzZn)R-?w{K=(@eQZIa*tI8sMz^}2|Oc;I{} z(nC}Lc9z~s6rAXSiD@^S*sgYA@L8Jxje$MNCL@FNeb&jh?OIlrx)p;;=~JgTTP3>p zg^^V(+r+wGsy`WgKdk%Q9m(&V2X{^xXZN{1Gr3K)$@lj3+R6AKg zdm;zJZMED&KmJ%L7=o}@WYtII$BWIN$1$YQIbu{@zS-3Km1KO+xrFKgb zBKe&wS+okaBl(3i+4qRNmOaY*-k4Z?vwW5suvygJUe4H(oqe9j{^5YVSba$FetN)z zK%0Qcp|LvSnD{WeAyWnE4qM3HNJM0+q5F^=77JLY@traQrqXtFbug2xZFQ3`l>v3M zx1A~eBd7s8C3v-t>VQkuTaGx}Z>CMU&M}eaf>a=kc8$qTshk!~O9S=<*Ro%3TmJD3 zsd+G4$9mM=M@y)AkG?q(DIUvq`=Q}sxCDs0lc52&$R8O97C=oTHrQN=;%17i&_;x* z52Y0x?50ix@3=FtItZsZYlM0)dhbnPCfQiUgG38HZI<3#bj5uEloK85j7|{TEzJ4- z;GF-^k|9id_(pItg-?N*`J!vp;aFu+fNd{5F1OZElksDNX(jnw9M%bawpKj|bMA1d znQyNoE{T4hY~JmIHWro!-(2aL9`s?O=fJdCQ=aeammjK6X)>57wfnaxbRzds!EP&> z`;jrrK)g!bG_A73ILuitHLk1ND0lTwp{~HYI6F@KEp73W&<>_>9fq%V zp`D2i=d{fAj(qs=NM_WW%i{T}`BpitK!=6{7>swtu!ye{Pph4T64PE}&W#c~io!Ydu_1 zcbGp9#yMk2D~^AjAlZquTo$fq0i6b z0=z1W51e_3K*0Tg)+f)t`jAF7;ma_QZ-&J>W;|6VIXkp`Nn6Z0ZgxMdQmj~guYX?8 z`qCAg|EwkQ9~F{T9Ofm|^8P6d45=*?vA^yjdNTTC4R<4}uuBYE(lu{Wfs*;*Rc6U+3!ONeSf$ci}%h^YEcxT<%y$@#F1CXk1bdJaup4MYlHEr#Vdcc#f=hNzw z24f)x5?T z8ORdt;D2X}Tls#YXZ7W4~M|VH3 zRlAJ^Dp3$`U0TKqV- z*ZJRKqSpW8sK`OE98~e&ZlbKoZNC4lRP@8EyPw;u{cjIZz3-Y+o@T4%cfT?U|Con&ZSfM5lM_GY>YqK8e0S5N?W_ z(mC~!_+BscWio08?T_@|j&J61GZcR)c7H|Xr_}ZRf!afZmdw0T`lF-g7X5~YeBp;< z?{M^o7jMw06Mj+(|~A1Km&|IjL^f-=m{-3u#If%K7ol`Xx~XG zRZ^RYFaKJ2+k)|moL(RV315RVsqgu%S{m?Mi_n}`{{Hf_KM?s|nXRruxUNRW+xqkDHyM?=EKyJ-VuT+CkfzwDHbeU4-e;EXo+!0n9_4(3dUW9<1e8R_OE2fdEMMl!c!6hDQqd_+ z{UB`)>A!UzeVT%E#4v-LTRT?mysYN`gdYq`|B~cxD*JgObZW!o(Cg7jlk)L{n;}}a z(k}{>dyF}Xa!^X%2X&*79#|kn=0g5Ou3EG_HlN~xi&0(B2^C-Pf}pWUD23oP!tl*+ zqMt4=v|<%0!El>4mH}*TJ<|zRwZAqYBzvW z{27Bdua6O7@2B8{C%)Ftt#z!&>vKoGF1~T=@`b1?-_0*;oL$VgU8$cxWBQ4;a?*gy3m_fSgHu%WTs41%8PC9{+T=ZCVFum;Ih zF`mm~c`>)tfJIaUmg1`i^fTSxRWB#89zbV2-B?!)O24oe6=u2@Lr?YNUZ$v)Q=9U(ANnGp8?SgZ`S1aPEc!85#ochb{`R5$rysk zllL$9F%>8xg#LPbcvycH8$pT0n1Z*c-Yu`0&Fs$xej%RNc3*S}f|UMQ8?#Opi;*|G zYaiJ)2H@dOf}oAvS6Hjd-?MJRDWtItpFuyJ*UJtHj%h=Nnz{omQIK8|I(NEV#JW^( zLNFKiKl@q;{$4|!hpu-~=q7R%POjgDzHlJZC9*NyU)O%sUjK&nNU-kC^+TJk{T8DW zE8_J(a+iPKe_&Q@>A+}Lv4>;)NAj5;H?sqohp|&zqf84{4Y0uH@v|%sm1uEgv~ue{ zCL{pobZ~O!vUi``di_SZwJQQbn6=XLgMnP&IX$YxXPSb4T=(|uE8kUIbakmcA(r%59$izGmm5!WJ}?1~K%nyGJLj4j0~=oTnwiIdgCb+H!u52m%Kll+yiwvx^XB4>r64)- zN|)yKjaDgX6p#S+t6wl2NCvekuujFvyKV}OGP#KwN#wJ4$BMT%bQw?HjnnCSUR)-r$ggY=3?;bpJvw!UL3#Pg}l*y1<2a zvX2{Geo@Bvo4btv;Klp6Bkiy(ijNBv^kXATE!Xi}?y?GNgDdIV6aUaDxpPW#|n!HiD-f5dtxSJiFZ@uTY|*d@TtFa^W!gk5&wc8BhjsZpQv}q z$?lmiMi)KWylcyLXqTQNH}0LXMYZF|^@&RSSsLwg?aMfvnC+kRA^e_(-^Q&7SlsTdgrlDT14;u*73c`a61;=%sye|rSq_A zQj^!bq=6htB=+2~chJqF&Z{O-zX#Gch~3h3~wsQ;A%hNJvXD1(!(Qxn+ekv z(>uk4zg*q>>W?2H))*G3SkI$-_vhmT8m8uDA66R<<4C}g+&h;kw@j%9QK<%s)hbs$ z9V^Rk${amy9NE~7YFd!90q32 z@^@zR+Jc?o&#JckM_E3cjp@9>2{d-)0YRkJ(F?Vq?CA^k*UF!ZC|%NwKXSQAn^7$i zGvU7Rd`>-|XVcD4sWtF6mACA9+O4A&i|p#j|CaAeOMtZF?uzV6f9vnZIn?uNm1W3& z%K^Y`BgTIXHJe;@4;p=&`ZN|I{5G`{d%Gy~!AjyuHO5B5k8wy5PavH-9B_e&cdIin z`Zfhj`x`4Q=KUe#%PfUx6M8@F_4|Z5Cb$^q@9+Y{EF48ZecDGaCsfc_pxX1;Um=DM<4KBgBMyTGy2@*eX97=t zZTZJr2wxdb3y<7|rEC(DqJ>H-;tyRECSnB3*}R6=T-Wx$_v^Io5Z;7i5s$c zKj!Luz~a|z3dF{z2*fW+8NK0aa?t1v!mlV?RW6T^!4H>XGw4I1de}-oy20L)2`gV% zpVgduTi~Wth*}V+l=QA3SIPX4-6UYjP5T@APQUstN*FBnCp+5TYt=3^=6AGYMMJeG za&@ON4&%aqrZoJhYnMR+WWArdFpESjpPN#C!NbaHy>M7KpxQG{v|nO2+fgx;zoie^ z&t2)!e$g1|M(1j&XXH*d9NbUT3pu$vX)Yt|ROWRF%y8$*mYK0Tk)rV3%K;C=*;1e1A+y}RRO{bk(i;lmUk$$Mao{aq)i47L>grg@h zwcp2|iCT4j@!(Nc*vPCI7<~7@)b32GQ+}SldtY(J<9>ppZ!Sl~6WUZ=Ik0rvHtMomMmPhiqV?)^!Xe zBfhj>ys88Ix-S{nqoViudKS8Z#lc{ zhc=^+3(`@{Cf%ngcF?Tte zT}b-Vy0bNWjaw(_D=|{#8;(_$cGaMay$v!hL@K z^I^}8c=)r&h~DyFlKTYj`oH%*L{3BSz(HKofE}okHJVvjb)cUttbCJ69lxJ7f(;MG z4eHpA_;dUt4aO4T@vu7Y>J3wUFFyw3!IZy);p50NO(F5*)u(0&Gz!j*~Q><37z`VWcs^L%TI@R zR&>8_7O$`HFeH9bU{^Kl|jW=t(v>yylW})ymCW$C8#KHl7{xem^24l5DYbKr;8N4y9q@tX& z$;L;`f+6I?qXZ6YEAORnnB2!@<0N#;Z`Z3$nH7u9p|-y zw}eMsa8B46H;y`<5iiazGYJ28%CjQTZa>?%!{{R>M|?-<#dSI2W$ zD|}>bzKez>8{4-+kqvuGk8itgjgcB}n~*zK73%}-RO!c)&F!7kqpe~<1J$zlf%}zO`bGkOCN#WQ;aIt`P#f$qVD(pKc!8bZ*Q~pXX<)ZV)1VEvo`0H zG=h9q2~W+8&FgiWq+4>QoX{Ty`$l7`mU}t{b;zM2(<)~6p7LFrc{iZWz!TIdK^!}x z>|Y&n$B~iHsg(|1;!A^;eFQb=HuN19=OJ?s9q(-i<_IGW-}_Ja@AV3< z@#AoC9%?)sY0#D*E8KGQj65x}^nAmK3fj~pj{Eg&)IBsEeWxH^d_x2h!An|ezm;le zZF0O7Fa8il+%J%ou-D}1$@T>vHL6x){~t}`w!XKb9P=0T17(Nv}sE ziO_KVM~U{Ly=QF1a?0a}6L_CDn9E%8+>hTp*<(KCk>@1YWAc9(y5SXz`C9#^HUEdp6(qj(o;$8VQSDy9K6NU1`;aN`_kz!DYW{ zn$0Y{t7{2G&|hkenqGRgaBFdZ&qU2jG)<)A^qDu!IrYn**_1HV^ z6YRZ~g`V_Vi|)ZP8m!cLQ+#PIV$%%|Df|bAl*riA?@9v&Lj1~?`bjRRDqg7@NuOh@ zi=-0~#x+SPJ9l~FK9J0;fWO6Fe?>za#>32wtXR7r`9iR+Zf&@#&ZeEQ(@C$yZ3%Fv zst9fa9RmKca^2Wr8?>d+Z1jC18}afX>e?|*5+fZiN{OC&VAyr$p)y91yWmR$v+k;B zuyJMQd4_sM?y8LKSw6{XAnkYz#5EpbgJSLxC1A0k`ZckbgK?B@(ibyNkS7r{uS58k z!cn_hhMCR-IB=$AjO##-S3-w0H-b}`;rrMDq9jDjGUN^q<6LGe8~?n7M&YZEl5FN%(Q?VQD z9khk>ell-P>v=~WYQGuODf=2U z0|d&+w}}e7bux}LjAy?UOGTWK+G3!o&$Wl+#PS=cK0%2c@U|+9@nMjNmcHD?YRj6p zdh${oHPnlpGS_7zci#7@im#E8S3(ay>l%JSpT%U|8q&00&;BK(%2B6VMcuyuWW9Eg zX`)L8dys2 z&asBGi>kD1u3(SF^>ErbQShyHQ~#46-oCr>H?WlJ?e~Zq#NbZVpB<}@nTHqksS_jy zP5q*oAN4nl4LZrHz7MSEuFm1Lbk0lp9YNjlQ>g-<*5tY}FuP6a&IpaaSIGBQRItFX zPJFONY4)vl=cG<5u6}%rJD2Z?dq#UB*)!&&kJWX?&2>pJX0?dz_x%!U#OUpC(wABb z|I?;Un{0aTIa)!Wx2+v~6Ra?tL?u1vRpq-ldn+?}!G6*d*RVicrBhGutx}suBma&r zsRUpvse7qGu>1>hcs0fvFJ!C@W ziPsu>cTE1al_ra4J;Jq@voH|`BhK5L+g6wZ1~$uIvRGrcbv))*Z1js#AHuyu(#5zZJ#z!bd8oGg!z;jNSHxi2L!N$IU^o$*--tBfZ05 z$mM~K=h$KJfH5`6z%n2^&G@F!=%}eM#X6uiBJkXt&BrGF@#x6mxflNQ+8X!a7eyfRAr}*?+Q(4OS1oq{!vN zF^R#3a}5gZyQun`u12ahG`_w=gDRr8V&yjIH!2Jk6Ner)OWRAh>7Qzs<>_i;y`pf3 z>7bmDPeoxp=1ozM{5k$^M}GMZ(XpnDk!M~(F^$on)e~ zy13LFD>nv|pVRqc4hLp?U9p4zX}BeOi2lMpGQ#+>I3sFX!ITliX-M9y6SZdX<9kjM zX6s}w#YSd>5RbNN&XS<=ffnoGbPX03&I(!ahyZ->GxHwA)8EVVvi(+cz=z7DGul5) z`S}Un^?ZYPe!K_&51jl9=UIH(dwwu@n&Fv!I(kMNJ>S3|G;ZL?-{1$aUFh@t^W8si z4+efh{_kFA7Yf{PKIf|8>d(CK+nMM2WZ-=6*DdKo!)cQi;QW1zGXa#oyU8ss42HH}VLhg|=QPch z$MY1$w8rZ+T%tz1dE16!KL1`4!#10Ujg**$6CWp_;S6NaYsEq>brNVV9)r@zupnnb zH2#ArW@tTTYUZsu@0exE_$AeX$->l!ygknt3JB_fxDPk=<*h?!Ik;u7i|2XgwrULQ z`ebuykp284>r5hp`IFj@%5~H3#a}aT_ug}?^TV4rcip$b$TU`(HwOs#E1MnrBU$Zr zV}E?@AqZ^>V8yMJZl>J`gZvNJ3X5Rnt{n1tr5o$`b%20G!}LGUP4HF&U-$cuuNz;s z!hW%$RWdc_u7`!OvQ!o~=WhN7b|C*(2x29zv~14Z_#c4J{y#z#t6=4RbMDsv1($Z~ z{~$^wakKGynE(F+401ZfJA1+rXPa{Ee+fA|2f`8Oo8j$$88|yf!snNc_8J6VxV+iN zhH>Qte3tUZd>!?A3~K~69^&NnoiBsw`o;)c^sel&;}(AP{O|Y+_oUe6A4Fvk7#t2a z3BX%@T02INgBG9kv%1`c^iSHa+@lmfHGHx)5VVZ_`kUr{^JhOi_%ZWK%Mv{OS?{@P z2_F8OId3F;@eG~)N^BWEdU<0% zSoY7P(gYy*O^TQ|HHvq}pm6-5eRuD`a?DR3u;==0bH$o<`DtFC{8XuR){C&j zd_MS3swtS@*`~3#DXZaWgx`P2lqEm8l&+bwBtl>H>tFBME)^NQYj@A5tdqZXdlg+O z&Ocx0fILeCyD8I0whKz%czfLoA+8&{iuMqHqAY|Q9`zdDkUf{od9Y``^enO8xZB#p z5L3L8xw>5P%knMt(_ft2YBB_FKbr`sMqXp< z7YEl&7S;NelxDJW^RgzH-T%AFWf{kPn=p9N?V<5<4&Ji+d$hZMx4!^|@T~@63c;Ow zr9iR4IM?(Q;)CcM+(F21(enr~%TZ;RT22@3`>I4_&*e{nFi37!U~gAIsk1cLGat4@ z;x(}Yud8f*@Sfv0n7sL`_9SvWUj5vx-9AU!O=qUp-~XiM7H&`Bc`UdF%~nwhz6{a+ z>8G$Okh+I-r9aOo+|!-BL7ohm$XtYgqYZZ8Ch&-&b(Sk_8@%XzR|5ERy*vMVw}0-M z|J-NnPJZKPw@(Tr?itohxduz2Rcu241rWH8HBNG#cCYcX@x9#XYVgav_R`m=xG{@1 zEZg$QZ0om|;%m#KbI$DDIttPL`(OIZy_F;BErHzs(yuJXS`-;N40aAyT_9>428Omv zAGB?_qU&7=_EyVIghE`m7p2ZHA2Z5rfYJL=y_3ws|2p7Gfs>_z%s3LT5Tmu(Q$9Ia zaQNe@u%BqXi#Rd-`*oIVyN@Y+y(tvZtz-=PBVX`2UsvSq|pq!Jh6f zg)AEPYR-Zm9%VElN{=y?9B%pV9Tuxhq&$y<9`;)pWj9u=uYXeN-52kz81I=2HQi5{ z?lm^ddjW;qPx`X*jw+LQodXfRokq`VhkK_tM?!5sx{jDHI;;5FPb%#qE+TX)2n?44 z?@4BI)@yW5$jOO?=~4^oI_bnbmWR_D{~*rf=G+&OjWZ99KG(c9(Th7dv1@Y`sy$hh zk6#dI(w6#U+~zHYs=!Uz{-<^`w%a)_i|)VH*J%E-O`G#$t#Uq`pkMd`d-7&4iI_GPA zGFD3|K6}_2o89Al?U^Sexw!%X@3oo7F(ZBSW|^ESdyv+F`*5BV?Hx-Y$-73tM{7~S z<+}sDe!aF!B*8$xh4uQCJb7=;x_XgZSC56jPg~V>nD38hbyhmJv`->9=bkv#eGfMf znilu>HJju%k!SXY?&wvS=YfO|pl5c<2do8nLy@=dD8;g+(7*u~Xx{zU!5VxC2j8>~ z`r;pJJRPsOSNiQug3sE>(z^_92fNzVx2!c_?(mL5=E1wCwcg3)ccBpukM{( z#B$0<(Gxdv^$DyErzyPJ1?Cl}DX{4YZBNQU#~Mb_uH>W?yg*0KQDGf%HjJA`=;Gnd zBlapzM?+V^@&d1QFiucxjSaaBa_%|mi%*QXon1zbh=ox$H=n9x1=r9(u^{FY3Bg^$ zd6BSzcn020BJ}oO0H8Vbopse}V{A8`;j`ceZV5&SheuaB345!~wNsGyN5X3s6D+e8 zQY!n1vYVDwN2mtL#{RfAcBZ;eT07BiA>vJOgj!qP+`Hy9&yiveR5G=bpv$qBu@}?| zujoANz`vyHLx&J~^Tj@fE)>ki5&C&+40l~sm^LUc@~Zv+&@@7tT?`u`nEY{VxSw)75R81rhAUl#$;RNMp{2` zPNpo>`Um_9u_VE3Pl;ltjWGLWDKm)AHQ#RhiyTi+WSCekORO50E@nDg5}{S6>GKVz zpZQ-d!NL%m9RgBoD!7uN9ctq*L|xa>U?NH7$x<7l0$5)5!)y-Tv~|2F(Uhvyf_(AO z@PD!QC4fy7>*L-)Q8^Tzpx{!(CUl!-H+RbdJpnliltYN2Zjx=YG*`1p4=zPf5K#d| zQ9(dO5dkkiMdk8BM7%&n1fGccJn#g>1O3m;?q)a1q?`8V^Y`BGZx>Y)`2K-`4{SIX@D6yX%NgrTzbx2t@2<$r zT}qyd-E?%%JbU?X*Y`hWneoN|Yti<_^@nD!d!%7l-nr+xOiQQv79F~#sq>MO&*nUG zNkyo~tWA_C{%HLm)zspHPu(QQ$eqh;h1 zE8n=i;nlS#FIhD8=&kMZ0+;uHbHe;jk5FCP-15}a$jiQPMg0@~`Y!wMqW$g}C!Wad z{vfq6aA2chNA+_%?mto3#y@-iCdRr>-|x54HDAxou5&(pbQp2rRZGU~f9k^3FCJa- z<5_cNhm8|X<-Aqb`{pm-=~9_p|IUE{?x=p`kF)Onyz}vwSJhqpQ(MY8@0Sw|w{=|m z#a-pSh*b~nseOLsftj;=Onhl`#nDSj_U$h_dT`JA#wDlUxVQF!2hY9M_-wB=3|}(y zuGi`cPHumC?vcK~U1pp0ttp@z*_Ue={lMqb8r+9}eAe>P){EE1?s(zr5tDyw|A6o9 z7lz;BW&4qHhp&3h_tDKAuDs~$o9b$qtE(QrV0r!h4c(v3`|_@hV}HG&e%HlYUhTYP z58vj{=$j&6uD$pBX9F9b-{1YI*qEUmuh}|h`?dG=y64*OXU_ah_v7FzpS#Bremc+R ze9XK5m+i3|Upf@~a9j7H`;W~X{@&8;Hy_=!W8@9%Yu9gV`_AsEtG^2Tga43sjeo|J!?z1`4wBwEqeI)Wt(4gkLfBW{vP?OuKwCJZ{n+~N6o+L`WN4O;`Dx= zJ8ixmH*Ys?{EgdFu<^Sh|G^8p-e1?PQ*>RS>C00G+t0m>?r^FH@mle}h8<~t@P^z! z1_l>?eMWRf)YG}+)P)0IS^va<1#=#mz3a%ahIemSbL+-VT#xBd+o^&t9i?yd?9{#& zQ+wh2eGd)VQT)NLZ(X$Y;XUph#f!V%aD#tqIXk^qd-lCHT_a;ZcwzYs#$}zlKKa6h zukfZ#=Y06ai?0qbURWBw;n;QU+Rf|u^;2hmseAtO`t8MMT)kn%qvxDacK*M%wsY}k z?Gr9rymw%^-`~6Yvttim)V;m6>${CB_+z%5#~K#Baqhb54bj_f`xo1|)OYCO<-?!9 zV14&#IWLa8zVD*PpZ}_9FYLeO$~R8D^UArmPkiI>)!(k(t1};3zSp1CaoqJk zo<4DSV}G6Q^?$sxebD$Fn-*{TV9qV?ezWQ9t3DrjW9cis zn+iL>a`>B})878M_`FxTpMCxn+3r`fj~LGXDa+UMxhoEBnYj9w$^CBK_{pqk{`rqQ z-u>IEk2h?-@x`ajz9Gl*m?eE@ujZfI-EGgY+7-RYc6nV$e)s5Y3%|)a(9b_)&;E_? zUq-h3{M_{qe(We2|5>*+gC89C<}JM^&O2Va`ju5zpB6h>dSLkI!57}_fAo!k_w2|U zLfzEYb*l3fu4gUQuAguI{*Ig0l%4kT2-8Ic)^L~aKN+~8ruUs|Jlz}iHS8$%9XeUQ zvEqTp=kK_WTS*AOB(MKe^ZHjsG;{U3Qr2)PCPXoj?8@ zwAs(sJu&MMa@K(-DktfWmOk=?XpMu&&SpEGpQ#?6KvE^bA| zR;r-#(hqiTy6@V%qvy2WcI8DQwk|JtKYzn5mT`~mI9UFwHLLKeC4rGW4!SMx?y|0W z!&UO;P-dm);`iUGto-AljSC#Hp|N+~>#}ra$D0b;zPEc=zlW;Z?bIC~(fItTCvT11 zzW1M3uAjMY*0wWlt^NJ?4~u^qeQS2fk0mShD}TNBk-o1lT6b_n{QYC%$^q zeAhdh-x*nZ*ZI$le&Aqn?~!|c>ErFSCiH#(F>id>=S2U-H!SbkrQy}id$Kol9BXru zNA^vbJYaGy`O>%_?)vgnpU+Iw+cypGGx_XypYAxWi|NX{b0<7}qV40aUS-+lCu%pW zJ9uN$!hO|$bUnU0aQVq8)~S;=SxPIv?);ED7@PdfLz6e1SF>-?clQlHzP9nTZ}QrA zo8Ei%J>S+Zx#6ncn6(eTTGW1D*S^&Li%(p%e*RPc7>BUU7WYe8=dXp`XY*e|~!+GupZPgANtP z$veKd?~z6S+H~yg@rP%P?>T5+-|0o!=MT zzGlk2yN=!QrtO|@?)q@>9Sd&ToK@ZX=hIg57dM%+KYst)h+*%)%J-Z#d+F?bJ5Ei# zWX?zBC!Tuj@}`{+-f~sd?W?&D?(X%-f|=h7&+WNp{(D2Fb(&N-=C+gU+=q5fdv%@R z?w8Ny=I<`LW9#x)pEvG^Je+sr3#v=S@kgr{tYmvV@L0*p5r#n%+xqGX=dE4wGTVOC zR||%|_)GcHbMlVt`|PuePQ=#Ff8R-Uy}w)gm#29#ITE#b%LbZ8+)czy9>;Qzl;6HQRRPEuY`nb^DqM zck${QKDzhe;rH&ETia{$Ir^?YOv&w3F}~{$Up5qNJpZwsFH~0UJ*;b7adhIe)6aaE zFL4z=)1RsD`qSoG^4t60*uH0#tM=`)KW}*Z@DG!ZoV(=d1zYl7ICYNGa`Nkem(FbX zX!lF&E52;!d;F#)fqfsNcz2-1W2J!A7Ij0{y*9 z^mh$DmfP>(KR=rC!T!)=bIK3Rs9nIgokuO@p&30l%zXRd-@iFGdj7Q2yRVo<{n~BW z=dXT$mo00Xclm3h2J6n8(DR({fBV38>$zv_7&!HT`K9OlP?+UDxhv9fanF)A=f7U` z)~rF>PP=s9<86bBwsEu1yLoHvZQEb&-|$w>-ZoD>I_j*;Haz;tvAW=w*V}*5UADO3 zmj(7uLrZ|~!m>{@sJJ&)hlV+Z}?kL+{q8Na{r^XhGL!<|;1d;iAQi>DY)``A)? z-u;7nxa-;u?>Db;Th~vk%5KQ&a@N8#=j9A+d&bNGFNJ!J{VD&e&jv*Kn^w*C{BpIM zV9uJ;>sZ}Le)DAu?O#pl)%Tpq*WcY`?&;Ni*4K3$f5Tg^+`Mq+ls1OY-4~6#V%PJZ z6uM`vf8zZBeP|%HcoapQPxsw<)65Z@3(SV?YZmukOuSUM`I94HF7(agb4C_@u>SS4 z9KH`Zf5{U5^~h{$UH&WjSL|D_`>6PK@1)faz8RiCeWQP+?q&NU*L^g8(1M}7zU_bu z7hU&V`O7Qk{4m~f)86%Eor31cqh^`%f}=)#W33+b`iPtxzdw6*`|WGXVpLw)OZShQ z>%6aSRMtc7x91LuQGrnxjG5lBxOS~!af8Wq$>9SF?jG0lQ|&$OO;?-p-hH{3X>HC8 z)#sFDwd+(eslLOjox`QMrflaE7q*)}FN?U|uyyi+J>|2WIr?+s8rz_&&7Vx{(e;d{ zPHuYV(QOY*%q^ZDEcv9{c-P$9rYz51wP?(3AC9@X>wPM0e?doDD7k{zmmma+eDsw+MdB%>Fl_$U7^={|Lhc9fMxOhRYOQv_a(b&oJ z;>4=+ewe%9h~s#_+s=KX^#0o~9=7)7#r?WI+xDw_=QQ-~c2-+M`6uPaum0D8F)L4B z#E$83CHwV`t$zLeZA#o=GWbZ|EngPBwmhIGt{*&>zQ+FTWi!T{Gw*`ZV@9H6>z%XC z-F0dIAAZ~EAM$d+rYRRazVh0NN=E0Tm)tkz#!*akT7mKD(Tr}Hb&`B1$+IqWOzb(o-Of%$4c8W#`^@@%2X%kv*(1NY>iuD{?~i7EPrWvG#fc9r z5AN%fz5U%H%gnMBb6xHcZ69j)>e}N!JePacyJuZ+n5rEy?1CP>7CTPQYEyP~&lShM zJKZtY=$M@q8`}$KeHNWH8$9Gh|yQ=N5 z_Pg6;A3pE&JY%Q(n%vzjmpydDt!>wgJS)rac=fDBW$X*HEB8j*?e)z$(&NzwBb)1n zowMqJPW1fkJ=V;w`!cw0#XA=-y7pM@^d%e0OFN9LD&Yn)tBUWw&9`>m6(5f3_WXt$ z$FtW@8Q5)c-in@M93MC)cDmf_`(WYIpZ(~abMnj!JB;c!W#zbD*M!fwxKp?6->;>O z&M&)Mc;jzHuXWt8a?SuFv%KQ5Gta(j&!q)Z=Ik1}>(a$NN8b4Bz#+u(*|+vwf9}Db zZ_L&W++BI$-ZtOAOAk0Q==_;me*3O}&e7fHpFi!ni@usvJMU27iN}7dSh#-h8B@AH zcvb$QH*^;ayv~vRu<@HSIx^wY?=NV4>a?f*gGeQ zdEF;-p6+VrZn^lHg|F?s{d8eM--A;Y&HriT_|c#33@=(-H*aj#xm#W-ICgCLd(#@) zT`=gG!aFZre|)R|i|p?YUu5cfa{4U=UwrZLf#0t_f7@GAE}Gvfym_bdw{4dkzyG-L z>Y<&w9sIb%xEp_6Uoq&j_Zm)KzhPx;N^mdTc*$C~X>Q%-(;6Nf$aPxhem!qZ+nF0W zo;!Vw-f0>APyNn5XFd5s-mL3>Zi;TY^Y?Le@12Y zPPt%Dm%}}N-#Y7L_{z;wi_e<(MUUUF&0aqAnj?=q^6@*PnCJIhy14D#&+fc@>IK|&SAJHcyY%eamwsHk-ami$_*;j}^tD;k?#s73%)Nj3*#1Y}?ws{X z`HT9&FP`z}^}hzcDE_qmxzRfo4j)x`L&mVbR&3*UWQ}Eqoi+hdj+OE9#s$I{#tbf;ZIJ&IsgZsI0 zJ-Zfj8~aV1Tt1^m=fmvB@3eWUqJ5`1Jy*4zcjd&xE6?+vx_V)3>7yss4;-$~-ah%} zHk+W9Rt8F>Cy!giK;uq%!udQXSX#c=w&g-yrY|p~;mVR;V5?g=r z^mmK?IqmyzmwrB?&qW)uAG-e5v+jDPOOH?692s+bLc4VzzxzdpAJ4pe+k;&=@~cnY z{PFrxJ)->_L&Jak_}kTE+Vp7mWS6zqocijER|m}a?Faj*lkX4ss5w_ zJN&k9z?5I+KC`iEX6>g}JbTXg6SaqT)(?06{QSmmU)uffZAY(J_D5*lWzXO7wQIaOS5ddQj{k7Q!n+o} zkbBeqg-1!p3w<7b?!jMki#PxN=(@|M>-Rmk@R_`QyBEIejBFaZaf`d>b2se}(Rkx% z-kI>h#UI2Zs-LN-&iuaX-UnX!C*)FybGf^E^Q?X2B<7Xk=r!9f-nHn#{6161cYeCh z{t1yOLq{~c_SLuNR(Aen<|ZKjYac1{FFQH;?%W}h02dD`Tj zb*kZpPs-nWVcC?x0q5F2Wt;AtvGeqo8)sE+`|!w?_pWj6VNPCraKoIMom&okY+vx} z?@NwPy!F+OUKieLJA8Bf>`(6b<_6!dlkWR*U591!U%mL~n@#y|Zk$sy@#?QP9NTi| zq;Y%y$YS;$8h25w%c;jc`*~dBi4TJ_-wqwNJwJ5gU0Yl)y>NfO(6^6Fdi}e{2QBz? z)O`c0rfy|xZu379-thazJFGWf^wT+84(&PA^`fbHryhf4ca9pr_nK3$4?h*KR6M!8 z^1b@whkjUh?=xTZ{qXfehSfj4{{A@Hx#^kQKkD;)AKY7cu;RL3Py4;z_QOX-_kFnT z_g}NW*>uyEtIB@8`Q-4Q&L8ylm}R<8)`oKq#xA&K!B4Kz(1xELd-lX_TTY#@l>Jok z)Gq@Huld)3oUf;S?!UL^SATpy_0-&1%eX!N{QS)~mn|DG;F=k~|MuI@KmYj0&p$rv z{^iZvs`?K&^v9`7chS?>-Z!3c+TTC_%|Cq5%Y`}cD;Ul5_&85(Lnz`k_(L^+A`K(> zv6{{3FZfCROBpTkXJR=;+bHvCgz>LXKun0T5kUU`)AskXZq6?h5EN}Byu1+QgPthi z=YyO;gsO>PC=wuOLKkNFNCPi$#56uUjp)Y^l%6DnFdGc=!5SjM25Sj>mY=I({d}~E z$R)T&7N9AoiBOPW{eFT1ZA^GV{#YOgXpJnYtR!?bY!nbF%`eI?&MzSt$U#13vsm-Z zv=x2OX9YvRFl)FV7hye31%$(FB4PsPC8{HAfD=fBdJySx zBKe+BAk6zYL%8Wrr_sFsr)*{_+5b~kBlWlc|0{m7v$IQ^{A`dYiG&(RqJfY4h@xQB z7YT)V4^iT0V_uE`o(p(NHt69BiJ~wI;)FcfU^EaVqRkL2F`CO83C0M*#{*v-@%Wm6 zgNcR+fR}3w`;oJAgMTo%AatVp1}-lW3Pqt`tQGVC)C+yIha>o?A!{^O11NG4;HVpc zKQd61gCv@uk2Dx)6Zq`o{9*7Ix>PRR6 zhciFtiSnT!7*)i|z^}70f7Hu+0NIjIEC?jX8po6w#$|c@(EX1G@)u+g;0J&bRaJ0= zs;bfnoWEKxmct+T)e!VC#zOI95#w}8AB&Zb5iSb8#F2>#Nk$c6=)U7}C4_}C=3Is< zBtZRGBuGTEVC^e)g1$g55>U|uT~sL=mm5Wel9#CR>3k&N4>d4jA~C3EU@i>M$`mdr za8Vry4m=>BjBo-oA{68#eu5n5WqbzsC;lCjpbCXVG~^92&KMl7i6|VNKvYq~>Bi|% zNeq_23eKoYl)1qNEf3aGq>VA~yCED3>-6zLzFMixc?*CDK@jD{xHy3Lz`%OFx>!Or zpP`ob3eK3T0MRjUjZqLO>*B>Ca3tmjatfgRIj>F^OJo-WD{4eQF|}M1<7WeIFH6J< z04^^d01wERUc}ZLY87am^#arPhky!z(Sm3UASXON7NCV;nTT0v3b;dlfdK7J04G+% zMG*>s0O(ZIYnCJmC{xswqGII{0*}hlND6O`=|aK{m}90+Pe1`FOeT>QxL_;*d_t7d z@zEqg@W&0>+?7%a>+=eSlQ9+HPd&p&oxBVC3Vbn=ctPV z2vYtC+DP<8elDnkqJf9{T&h3%3i^YakqUEhe4}SE7voNN;_)#ctV7rg^{hX}3804{ zm2yEnWE4IjKp4&uPFIQ^krq9^R1F}*66NY=Lpz>(I@!WpjR-b zF}vh0o@9{Kl4Jltlt&^RQ%F-}+$xo(B%^wL0w$++02u=xWX-0FLxb@2IwCiKci|@Sd~NlqCQbb)QzCGOfdkS^!O5clE;tf5MY3b zG9I5Zk8pOKZAcqkOV{++T$Pr{E0Kpb#JbqL-o`His9N8jVjcho*2^60YMFoTq zibXt}5Vt1*-!p)8g50Cij$pvVB>IBV_Kkd^Ib~={fFPJw>o{a9M#Ww|KH&WTP97)} z3{SNRaW;}{;F*!(8K#kk5k`$uCy+eQD2zf<+b6|n>X`8cDcphmi;c()S0`#)MpviS zA^wcwlnOuQh^B+G^iY>FO=+=5K{mHKm}QYm{VF8K7&Y6 zdw5`b^oOx%frt*3BwG?3(7?k)RCNr%fI>R>4Ag<4JL6Q)#<{7Ic|ijPeAbJBbrRK( zU;<I_iZ|+b zI8{X z2Nw#&9@A&JIp@Q%qNE#q8|t zF-C$x>(6MdypR}E#e;&Wl|%titYfQqvQp1b(-BpcaI*r4PCzM~yp`GW=`uS}1B@;R zP0cPXx5t;$`6v+xc?oe@0+Orohuo~60G!FwIq)$)HJ6KlN%NlCIJySl`oO>)U~AwK zMg)%G@tqzKKY=1)qBt+WMk9P9TE<71iW#S~%rMBwx}0v;B$v8K)FMzn zTA@G^qfcSJUL7{G_|6kRO;s$C?AOnoN)vSCfRPErYl!pzKw`HFGXaB}k5+*;uZj9} z$>AQ*9CA2-rvf4{i2;9|VHc*Ch!2>6B#3OVEN;j`GeZcaXBc~d>N&I|r;h5^ZyewQ z%ojB!R1}2pxzvUUTUoS7Psj^gBeY1x8c~!6LlkitfQXVr)W;E^D?p2reK9aBw6FmD z9C!@E7r+tRcp!3t%|=Osp3t#^v>sPTK%ZFM6gNU?iHnbNk!UC+x%%pu-_OV*%C-aL z)T!)8uO)4g4M7$&@V5;t7-k>?lZu^Dwcm{ey{X|!t%3wO1gJhRf)%8UdL?MAmZda! zLIF1)WYIF8E~!44#ABv30VxPfMvRs_8$@Wh*;N3; zQv-3@lL*HO0uUh;P8E3oHOq#Lz!DrGdMqyaA%6*ms4BR6s~az_?Ny1*q*~qsh7#Wa zjBvm$H_0vvtx)Afq$OPft~EfjjE}K!Cl9eJpp`D@15r2{3Iswy5iD+oK{%U&YnpIe z5W|fan13k2d}>qxx}MPmYQW#|T97PobCfGNVnXl$G^HF-)GG_F9zP#&>mp=%;%p7D z1IAv4DVL>BZW3j3EP?_AqPXZ=FQ%L%bUCoO#8tl>QZ-IX$jb{6|KOwCfB-2d(Uq&l z-Y}Yi>2iv4$eiMwL?**Nh5?1C){g={6fhOY{6d;_P#`h-N~j`%zzHJ+gKDHC(x9-5$o2PM1Dchw6%7a9qKD z3Kv0PeLZl_D13mQQ>2a{R>7kJRja0%nM)98$|$KM-SUNod*e zI(3P-rA`SO9rej-x(X$0z}^Vs%PJWEB=$u>p@EHf;U>J;8{uBOxac77#Dfxl6QK)+ z0OAN->~E?9p+O9;MFM+7TR~_e9{@FiCpxwoc3*Kc5gmj+-Y-Eo#W=x0AY|D8(wG4V z_Y>DXP~@m`b17|yszI;<$OAHyNeuj?S_%P(L;}qr3PD5=Ohgot(0JtuB%0PZVNsnc zsjsL9u7m+PlXXvzXnde9oFyRIs2?Q`6KVBT{GX~XH|u4bQOtf0z#bQ}7XxfYs?dmP z2>5B8$RPqx42(b}64pfhf`d^#oT-kNl#JYb@(3n23vjMsfsuCURFhJ)qyg(CHWN#t z@MQ`g)_F;2!q9Ivf!H8YQx676GAH8Bk>_TNY6DO#0wM;ZI%(3TF3PE<3FM?;6G?%o zkl$F4Lpq@+o+1W-Q=n26ccz#8V~TDVRnw}8jLt!dC3B>_mOch6m(xcebENt?aYQ+# z;GwZPrw_m=uF)gJ1`z87#ChP~`5%6c{x>9mXykvGER-cB|HJxs{>Oh${zpAsKosSn zr5Qr!j`9Ae=$E8D4n5)KKwsy?IjIN4d0d1fiscG&DhG^4#86nZB!^-SGK+^!+Rw4| zNy~E_h@?Y713?Uvcg^9lJfed($8!MM25Alf!qgD(5O9krVMATnK5uCv2r1`7z;7k3 zNeh94mbk4`CGFLPCt}GOIk>2@Y}$c40^(Dz4959R zh=k${qn#3w=cH99h?xNsEqU{-R-AcNf|*xQj$T=RfO$@6n;*=*n%Q7Tzz5NYby3&Q zK##$nB7WN4YpAsT3{a@3=&Xd=(po?$Bye!H0rP*v`k+Jja2Y@W5C$_jQVNSa|4hkE zX(l*U@=)TI-Lg!S%(75YGf*0`hjrg+Oj=p~Zfhbr$0E`r8$10=Eub}X4OuwuxEygvjJIOKdn zFl&G#7SIDQKtAY==NC5kLVDC;Wgx=H6cH3tOcWwO!ictj^Q4q+d0=bGI0*;SMH`^Y zOYza+5MvZqcAO2+O#$bD8kuTQ0#7)kWbhbUo5K_Dt^cDe9;$VDJk-A{lZV9ac2VM% z7x-mX@3;LY<^0gi=KPpY&W|aRoF5a)`7vdd^J9|IWd2X&{KyTgo%2&-z-IkOfiO&F zj)F;1_jg;tRxf0>i1g2Vt^`lD2UC`b=_)N(}g{qCY>2 zNTj67Ba*hWgHoHJElzPawU(5ZoaN;Qh&+NaWb_FMML@NML=Yw+!H@A!7#?cUHIRNm z9nB=B7p2W4QvCnFC!vT=PAD?}XD1W^C1#$%lblOn{ma&7lgafJ_A& zli=J<`1B7ci%SxN}mD0OYeMgjG6Y?Licrbyu5_?M#f!JaxnP%d) zP(p@QJeZaQ$Rt}!j!_t8>?4bm6s{sEhpSlX?(tDktE(4-uAUlACZ&SGxE#1G9$=Q; z*Poaj_P?}46OA;f3|g$@V*`|`LgiovmVm!v=VZ; zSM&Y{i_MsF{+F_t{@(xjkKg|(vx`S~#f($XQ%6m*6FLa#g{dc=5SRj7BY%MWaS~ek- zT_xmGfZ?3&>rT$rfCTjU`Q|LykV1lD8&zP;1T9#TXd?AIOO$}t0W66oRV0q$a7D&x zC(WeUMTmP{fSbW01_Gx2zy%&acH$&E2|kHg*5LbK@O4__v`I8$HXt%X@M1DVzecjD ze?Dy>MkATvAzu#*WtLNRfk1jf*WlwlJ}~yw^Il-Z?k2*lhiB_+LG%^?!8#xIH^EY& zE)t~&fS^wlu7Q(PMfYvYhYt+~1CiGsrGY2)1EPs(6gQj*0mLqF;wG{ZH}b)1BWKgt zj*(PM$E-4)8kiYPivJnK|Ma9z{wDoJB}P*950uDHB}mmmQ-hd#%sOjbeQUrkVExId zzh*r!(d5M>y9&qPM9Y<@LWvz(T{W@O3N`6EW@4ulYMSkhC=ec;*wKJw4SI$#C#{Qk z8{6ytb#rrizk)xkO$t?VhXXv30!(ETMXgGykVf*jYbdFx7+uPQ z1OpeW=Odw@0q#fUl-W^v4v6ET-W)v)#YI3S2Xta71TPvkjB$!+Syh6$UX|vV*zJ`i zwYV?J$eqwx%Jd8pl}DN^Rq`n)2Q5aMjahJsuoBvkz;Quo_cP8B04tEgZBzh(l2&Vj zTn!_Nm6sq_Ap%BQZwX%jyu4)KVS}L{54tXx0rL@fn?NWyg^Pq#Zj_L3O+r-=v++Yh zkSnK}CR+7{#|HZw#Vsa8YaE(jp{jrnNeSb?#F{o{4Pu;5pgHu=$+}4KgWILg@MKBF z=rO?AI5CF^ATQE612FJlD~~7}GN_r_tXt4Y7(iQ5SQM%(XDDO{09sA)4cj32YO#tb zkz`Od6UZ}(XanmO#~U_STUDn6{#8&08+3IRx`t#F90rn{uNK~MHgVhy7CCL zK}4}0(t{|aoJe?Qh`0_2>wrcQ7nZ?iv8|NzsUFp8pQ^KmF^7f~$OtK;#;m;~ioDC| zarJ^hK$zhRQam_e^wNwwrC;<5q zIo$aS35szx=2iD?LX3d%T5fXbsm!lxREfw-!tpy-kVU`~UsW(|A9zfOc^N>o6{px! zq;U+%3_!&;1s~)l{Zr>Ltzk9L^y#9N{4G<813ex@SvG^AW}Vx1P_~#Z(#W#J|8c$`Jb3y zHw^qnohYly1Nnwqvgqn1biz*E@x+sh;<^!EpAzo@NX2h}$K??nt2)9qEFsoHtK(tP zt(RQ`z=+&Js*8f>4Ab}|_$c2EeicH3SeH`|XeeZZQy6D$a>y&jg7qLC24oU;WrI_a z&e;G4KN~fI`YDQuh zj^2&(E;X8^)$7HqB!5VVMK~QaM`d7^jT0X6O% z`b65|lM5LH9S{QmXou0>s`Y1O{Ezwl=+Yk=>PrtNTZiU>DFeW9RnIdq*D5VKzY|2H_wF*HnT?XzSZ4<(C2S98A9-l-G zuc$!2=84cjUi2hUSs)*Lh|>@^DbeB|2ZJ57HV!XQQ85H+7R$(r(cWhXOkLyHU@R;j zbb!i~;B}%RIEYlub)FX;s}{wD_b#JsGc+?Q1}z1z&LkMZiI7zB-h_KIT|@wogA1IQ zT%QRWjwEWp2uu=i161=cMZy6JLFY;g2|iSVx0o% zuQVLNp-L>!Cuhv7;Y6ZDI|*JFU9gY zlyopwx>-OvGc2GrMcBUaM4T!irdovPjVvUFI(b4b$sro^;4}eVXCfXO~}eLxxLG=6tYQPN6p(lOe^L$n#56^406$)|-O=h9kF!m=f-;F47deHijO zuwOP6NQa$(Q$}4cNYO_SDW^Fzhzjck$~kS!*a zId1SdVXef@M4-jf20t}5@YC`eNl;tx!ps~QEZP^fT7&*+Fqf3mVdl{~y(=+yCRfC} zNiQbhVvs9%tOivpv0rRnwdH7%$~$^CtjTkIGsX^yb3AANzEn=Y@p?w6&gRcV1@|bh zLwpt7_exS=x!_$6Mp~eMS#sc-IBC36-%?6)gxR)XV=6UyOeRTVCN+g@CR!gCE7rOX zvKK`l_q4=;X_NuSB#TofrIGT2lyH$|U=WDmOX&AgT^Xh3sN@tP{H&$z*@YphBA$~_wBQi%2xGvbI&x=mE$(YD zw~m|wGIhQPWSX=Vu8X2YrJott#XGA+Xq|-&_@kv&B-q)C@D6ZaB$YH@Oc0zVMU4q- zRJjoR#H&!WL@Gi;h_q)~4b1pz=oif8q4nagW`aK692M|=d|e+(GGWKmj743jw77bF~}ZJ--K6v-q+QT_q&tP}?t z@cSXcS#3(uJi!4|6=)g#KvVGZvZSEZSk@HLXX@`?oF*{2)R-5DlfANyu_HbEU9p*O z!;aA%3JCe8(aP4CxQue)@#)FSZx?W!ltyGUqtgaAC2KMRfu+Fo4^6itDR~^ z<4oLTp)y+=5!@8dp=>ZoXg>)!V-OCJq+pruXl?VZO--mbgQQxxO|b!^F_+`z`1ppQ znuu^42Wglka6t(515}q$mvOeeQli;prFpN?jw3=fCC*8?P^SlwV0e*?=x_t7>MqTE z3J_tGs--^gyAj7|EhUGFg8KgaUwq}m(GMbxE=psj5KDc_1tMoilUK%_KM=SOfum(=h+sYa0Uj zBy4SCV(M7tg_N+YqBkNXU3oW-eoKbRu%KL%PL$zx(tMsS)zqZ{7H9Pg^9*cBvy@ob zR%iuj!j`U3sf9sfPQuIU1*B}_@lBOmi?Xgsj7tzt+?L1}X)`A{57X@eU`Ht+a_r^O z*k}h`=#GkpHS)qj{#Ryeg>yF-f9@s;IS>g_B2+;o0Yi}NFeS29#G0V5zr0&~_niv3 zA!kw@F-+bo;cMk5Bd0O+vu6Sttu)Ucd;-D@A4btiBpDIX30Ue;{z@POk!J)i7#e!<3`#=v@9yM9GjiB zBTjy;wHPQWvS@G*%xn-{=3Y#NFqdHvoG~wQJ`#HW2cu+wRgY}1tvbjO>EQd%K6k`2NHm$&{D((?!dX`t{qDtJ%&ZW7nS+ zwqzC!UF0sYVeYf&>ElkMvlgRVq&Q~ncw%CQt!qt>%UM|)JgS!{%_ z##y*CVUf!MEehefNUN z0U(=2;TI%h^iovy-IXt5bvzU((!C{{!-HS;(o*bM?)F_|O!MM7(kC zaaf@Qnh`c!$+2;o=oE#TjHE&0;yNrWO>orH1*x*_YO;i1L7`1PEe@h76cXCa_Ypr} zD)nUnj_Y5FaAB>-3;8F4<6~wq8r-Hz_XCa0b8E@ zXv)g#tGC!=ey|mdH zRO!6Q2jEgcjgY()A~b6s!|L4b+w68;AfD0B+TLr%)Tx!6m>d@6SP?L`F~|gf5(EN5GaBZ%?hq@ zZF0mYi?udX$Eh=m=TK2Xiko_O@WBnx$PAcB7`Te`IJ_o+`=@+24RBneB3cAQ)Y|n4 zNR{?j0%^18t2>mU_3ZaJFJy|05}%3w2*FL(9!$k3!wfy7?#Pu26qpKcN z*27t_i6Afy(h7u{G@J7Z$7#~YYt<$K;ieSB#2U(qT5Pj>qFD4lPkkPPzJ_cpL^-9# z;C_?k6Jsz=Pi9v(c0IaCgu#%7l(F5K-+f4zK}Mh$gXwQZWH?5FJXD_w>K`*inUQb{ zy(m?yE4#&(Mggs9xzP?*Hx~O($iBHYuBXJb>@2^1EjMgQ&6qb5pM}^2&BXPk{ZX_N&VCa;zzI4IIRMs=#8L4{%Q=6at(EpAvq+8 z7_eQ3&GQB3&&;@1nF#jygg~dz(hyLL(QU2B`n54@mP_+L7bhxo#?^EvG2*c26ev%$@(Nq-QTceBVHWp^IW=u4}8I4$w0Afak3~eE>(Qu*N_%-Cgq< zGfbi=kP(R{0OhI@hGmz3MuBwZuwndG#0{&hMBFFNk|2LRQywoDm7e9nuQ1tf=g~xz z+U5j!CMx|@_Q6g+e#uPMLqy4_aW5$(#XbPKfMaFk%i#z~4DbtCQ_~|K%7|b_!F0f0 zgk2}Yjd`jA3Y!*2*f2-?*gG;MUT5q|RKDOcl4^!n=g^%fMCwS8J5-5DGg|19+Yt|G zc&89}LwgNNCUlW%MqkizOCxtq749ITRR6;q91o(j z@8=fQj0Rh=Gz<%!&71z_(s@05q19Y#u4UEI?mrg?v@agRC=qgvqA($|*# zzVkk_&iRN z<&>>1u$HSnDRkOdNke6-p0)+p2~F(FUphe|>I8eQsy8{uE@cy>taVkM;I97(C=XlU zT7$*V!>q*gChh!7!2^g`_8-ER+M- z8%%i~axlTTLmgTXdxZ%1*Pi!znA0P;%t_5&iqB0%hVeW|5rO|Y#-~S*>3-D^j2NjB zEz|2oi!UtMF43R~&Tv;ap7IOrWhzwcDZ;P7?-G;(7?-pZ3nz60My+H>5&$R|EN(Lh ztrkIwN1z9M(OEh)x1k;;JD5dbsIZagb+`RVoI{kb=%8!{ngL(R-DDM=*{zcWvMKg~ zK1U)%EabeZm&Fg9*_9C~KR)BH^d-e*KGs_R2}gI-q=-B#WBt<50KYU?pnn+VzHl<3 zgc7Wu2AS4SB>yTC?%P6^orIBbV2~0p%DEH%K;nvJbP(1}93rwD$c}T@QqXReYzOjI zHWl1NEXyR(Vi3g)Ho${hDN$Dp1Oa-IrTOkl*@AijS7rd;hEp5CGEt&uI`TnLXeDox zLkd>*>V0lVR@Al8I3k{C1x7oewX{jvHYzO1TJ+*5S_o*fD-b2$c}Hxd$EKRwx31G3 z-9i9;lvLg4I~^RM1|j~sU&I19sI7B|E%8)qf0Q9xgfk0vd zq6D2})E_Armr$0)^Iz1W+>}+L@ssl_ZML_HkJI>WCS(^VrFzma97{ES^D|`Wzq*JX zs{?EK%^t@WF!v^1q*gX0GSQOUqM3{8AY*y9>u+5HH31pHY|#NHPPEi;Wi4HQ@x(TeV!_fyT2${%bpV9pK`QP8cDYX?VVRB^eQy z$craslyJf~M%^e9I64J6u9)R;2a$#opXZ@Q`X(sf0vSk)%RkTEiGoS-c)6&u;K(ul zL82UNlI3T$EtznHy52dg& zRl%mV7p;&R*-m)FdLh53_Ab?)03X9e)Wxm3Tol5C|d`1Db8lrf0BWu${3BK5X4 zb6LzZY2V19QD9*+b6vd5!e!%cA~OR$P!?V)Z?^yZoL70YLU$QBw!gZWQr)T1^4`_J z>Rc>O6cQOY4Fae&xm7qbVE{BycGF3*BTSlW-^FTamXL{Vu`6B z{DH0d$5s0uFDt&^&8P_Sd%9_**YjS~*4?Si&?s>k$)mE;dm!MoO7_+Nu(uwR{f{;f z93u$MF^r-c^i%c?wAx#b%32S6(guQdY{2SH#q!nFxl;Lm zWB;#gq)U<3K;|F*unoJQ=3V;L=x>76kN(yppM|p4Lv0`=#|Dn>R1RO=%`277EBpUU zjQ?l#GUDwG`{T9o=W)wstgW8lx9*=utkyl<_4qc^eupLV`fi88jy0(#mlr=SOfKaudgQ@PH08dqm z#^mC@NRc6ESE1|Da%iXtIl!EvNmsR-+QtnZWe1OA<;Jyi{>+%E6`2w_DlN8G9ry2> ztk@YX%jtjEn+>)k!BPIlngqpX9MpeUi=PHHY)vpFq=5(IK6EJ+ma$E zkRa49QA%2x5ZA`haYfO!BRdXAn~k(2VXjGN1j@eEvn}*v?Id{o6{77H3Qx?y)(bZa7SFxxN^Vd~w z5btjNX`;>^SF@yu)`N9SSz&QT)0(=LUNHvm$(?+zVBS_!lV$v`k@`|5cT)wst|qgn zfv!VCW%lUm$rn*Z(KjR8)>@Op?p7gwHWqi>NjnMFIt$v?$Tch-I}>@+v%8dQnplmQRrSvv zvMR@xJ6j+=Mbt={|9^`Bbz5}*NGdIDzIpQx@t+2;}O6* zYdh#BHHs30=V{tL8=r#Sk(7gR16cq|tvH&Y=5!(utuPL57wOTqW~ z%L25U*jSV;gJAg_au#Yl87`3>y)YIids(0+6o1Gh9g|9JnYAdC#S+Y7DYlS|%3v#@ z)Ov`48qsJON*mXU)=EreN+D$ZY)AsggQHNT$XvYZ6C;v^5&DZ*&Yc~S-%Gd&kRauO<1VJZcFJQYsyP>$)JUJD2_ z+jz>DpJ&rECq&5R6R?xnsA?9z8?3=DY-O-Gl{jm~;WDOYa4~Y!W1dSwps4BO!sA$~ zY?l6mdW-(_p>()Jesq`kL#~WL)vg|H7nVd)NTLX4bRrsbA|A+5f*BjVPgjUA$U7=z zs_8B^>yvzXm+1Sa7>PY7qN-0fYS2KQRJ&1R?k^Be-9Om>`j~zBP0}6l^3V;YvG?vc zX~IGN>qBC};>YiYzBf$4o+ypJclBOUyscsSt^Pl7PjAGJJ)THGh|9CTgLrd(dZ9~rfOnVP{3%G0RVV0S zBZL7!dM`WSvylsLBRD-0L{b2f;qV4f#uy{vmYz4<5r$3B`E2AkB$^A91$e zD7&1Gi^$lE@A^JyRyK|R+ki8=lZrBRA?@ck`BNLD$=sNUCxg(LFX(gGnq z=>&v5L`f3JXU2^sdz2gzuT|;E7%BJBjp#pqEziwiU6rKOY~_1r_}c zO(VJ$O$e}*jV5JgTM|zryc{~`^b9OJ+~k67n>8~6Us9M^k^3JjmqS;z(7;jH8YSvQq(W?IdocJU087cBjPijK!*$;H@Y|um&}U(p$cq$ z#tSVqyci?Ujf_fMd3{Shry0m(oy24fLC%u215#LM|2B`E@4zlUkQN@Dy!7F1HjV?xDcl{M(mK7kK}R2(b? zQGJdF-5=j39g&WKOpk_)L_ICDRwDP=T{GCZg`I0oTCL>5KgC6E{0ROELbgeTEmHG3 zWYap)EVfCJkn1&GpUwi-TP4*~sch%`s1zUkAOGt*C%rh8J2TFKu-|5>f4g6j$if`g zf|Ua$F+P+9b%=J-V(bj)XsCZnF*k!tb5|4|I0iot?2C$SizrP*?(^Rlc3 z18RFKfo+@MV2PYyKVpl2I%KGJz8|FqD3R0KLP912uK1x-ZoxyqC| zK&D*Bhv0S+uD4(wzJ2vsEmE2PK}DJ(3i(-woJy{QstOD46LKoIZRz!94D%(DBB(Hq zZvOQassF*%jBzkevNNxgs*m#|_xBKd@!XIK4B7Y2P7_8TrRCofrWOL~sCa9{gI7s} zZIhU6sVA$&Md0AC&oDe<(lM|;SCUdBO6mFMwCns(|F^_B=*2ghr9OuPx$(cML_#E5 ztj*QJ^IpGTdw?!?#>hSeAgQlMed{6k&waSK$R!j=GNPKFZE;i6Yw`cNEhe1id>CaL zIVHWe*~5pRvL3zfGZ}>K!hbB*Tb)c6iw_l7(1J4X;$|SV=yAbPlLkFpCA(9y3I3^A zsHbMT`jLj*g@yDF3Z#h7j&<1Zbvlb2NJp#;W*;;UXvtZ?`F^ z0sguHDr;PH5Jb>FhcF1HK_Mr=Y@+x_Rq1GTwpywYdz_`lQS!VF0GS>?-Ys{Ny<+`8 zxY*ba=YhLY3tH(=Y4p9lJu+7f%_G_RLT0Mlbz>%fT^we|b?8zvT3nkqF6tW{a-ym@ zI(sZuMRMd;Ry<~PX1uGcqure}Qj%_TgoCJgZGBd)13q32Kcd3ItU^s8pN7IyQ{&3% zUJS=ST2wM$4WBPxfA{T2%s-=|_yUH!P`+ZcS6dK`IirFTHWngDB)116jjl_f3*&)C z7=I=(;v#+BKjLI#!`2cT1w=3Jzlf`d_+wRbmD=51$rM|OQ7fx37rTvT5@V9mMBPL$ z46jeJBxCDyxVVX*tfOhkk(4hIrizlI1D809N+QVp%U7LQUA1rP>C z0SZaJ*^{hmEq{%^QU&nCq0~w&k4eA@HB$@*M-Sjak(~&SfN2grN3n$Rghgoq;3M0Q zU{^!x$MwM2!L;DyVZo#jZ*qx}Vc_E=MEsMDNONCD5;7@@*y`D^?t*PT4=w}XWirWx zuAR^ZNzvE<2Su>Er1&wRqWvZqHKTZX4kdPQvK(mQL~h*%)wnj>BxF{-uvX;bP~R{F zQ^eTBytL+z0Sbd80wTDP0C0}+Rj2yvd2L|k7$vg=8j=8V6pGHb1#?t~77JW2D|xV( z_%FGIhp4{3*d~>SRY4p>dQb$<3)-=McaeIq<&tXMu~b-LV~ySQNJ6aQT*9NUN}U}< zO2H9d|tYH;gI$$Ma zJ}C-9hAVj(>KDcI5HhC7w6w`8m@F7e;4W0q$`*o@4x^7F_%7;;L*VTV9jZNi)d=CY z=;czbFc_ssE(w2Fo$N*E$3i-ZZpg^WlwtV#t59S9sTb`w!;24^J~0tTc%=CunbP6W zx8U<%fw*8!KYOCGA^Q1LXz}6(8=$SF4mCuIAR(OM?1&JlLZbUyAX&fCii{UKWkROn z30vMo;NC@J$#lRPqBLvGp(+uJcr-!_;d&8BEy`w!5sb%nX@heZ0NlkHf#5aYv=WZ1 zh^UwK>KWM{y%H1;5QR*|2e83>EJCY}lvPD&VJefJ;Re8wB1mpH14V2s+#Qn>2bAN{ z13^T8ngX@P6L_G@N7t@|g~(fGRNorT%PP@31*OTV6c-7bEh_#1e5{uvoxsx*9u$#h z-3mcMJw(h9dZD+RLH>Yh@n}~_+aM1#Gss*62RFj}-f9bet3)DoQ!~8^YB}LQPDM7L z71=`Cj8QMU7|MqruMG8t7+R%MryDKYBS;ciD|E9V18TG+<}k5eg*w~bJcrWiWsxFv z-ync*jX$tV9JYDMj)=zy#ybH=k^B|3L?Yt}WucfZv?V*W8w(-?Gv2H!Cz&LE3B{|1$UziWCy5GFkgP5J{=AnYoMX$j%sp71W(Thsg(`ju0Me0DGTySy-J&05Ot*QegF{C*=E;_om5ronktt>9cm3`0 zP`6&E=pGoAUn95mzPOG)0I`t@HV#**tNK?Z&f`}VOCo~0^GnZ0I-zb2My6!Z{H8W} zR46nJ6y}cTUWB9BBxBcWQl$oMj*zYh@ObL}dR{bLh5P9v={j$Jl_w+!BKuay!Nbk~ zCYKzNZ^Uv)Hv!(fr8pC6{{FyzY$@@p6k%Jp+?K_Q{V#g(_zB+cByI6u0#)I4bhLYK zI#im{Rl0dNaWifexuUYTxWQiE`HU=RJ;OV72v2phA zQBeA-1yy7)X9DoKhhjod*S$fv);jjjaX8d$%#1tu&hManM5j9p)v*cH6C-{69>By) zpf**fIc(&_tuZME5eRaM>>O>uuHyL4w6?G=?wit-Rt9Dw=%b8bb|eh9&l+iXUB|^L zA}2@w1z1E^BZ9?hV-^a*ELpks`23lR?a(A%+LA8iJh>3m#BjGK7n1ZstT92~cW zpzL}SQ!R4S|INi<^-gP89ttGMuB9+%=l@DHe8k*iK}<>Tpiom!^TVfuYKo9FHasbM ziFVj=+ShJ+SMk87v$$yX#8L>j*ySKW_7r+~ysHD_^OGUX;M%#_hc+K-HY;q!H+wBLH8hVq#zwxcmt+g{kHP}BEuS+Vn zyl?*wT{o2wF#Y}$eJyWC`9hSUdnS3rAP;4?llndL;At^irPeZ*JC^k?vu*KITX9;b zik!1S4G#6P7E5H%6=1sVbI)kn1JQAW79DRh^T1j9B9#!7p>E?4W*n;UfSK74+%W1M zR|KP;RuHx$^z{&lWa+6BC$KohlZIQA=C*q^@ZpCc-OP(td|FMJcn8q29$Iz;rmP-Z z_>1JVSWu)FdE!5KlXOuIWCFMHdgF z1S;n0W7*ANl1-u>-UJLuH!G?{{VFSzpkB{$u|Q~A^bAW^S?xQfU8_sI0X7(35TiX! zIVv|Yff@XS{Dh6YR);R#BTsXi`Ggc(New1_H2r)g`wxtBx-I_g=;MWs=(KkJQ=OQ@ z6|kSWH8xf|lc%LxEIEr}l5zEN2NiZ+5OHwV8yiWq;DeeqHT{i_uS^kG^xlg%x^Afo z6K@AtEzrp{z0Pgc;x+?x^s)Cw$Ca&j6=O3(@l5w<{LinpdaTwK%$c|YkrbgP*%d32 z${#Z(;%SvDc&m&PB3$Oftw-luNw~)Ilk9m`8I~Pdup}JwrD7gr)d;9W&{(t?$M^yS z=iKkxq45HmZ^1nrEp%IDU)4)}dwU*D1?FN!v$>kjE#UlZX zUzbCliqn~QX`^%0v5>@jZVr$}?hX|D$*i?7G{mZiIL^vb+*C83ey^!^_=v&x4Cf}w z98rhu8tN_Fun9xb4P8hv3vpwnEeR)We!tcpk+<0ba;z6aK$Ql6<^tDgJR?(}e}#QP z_v)z1EQDb1Ku4zgzO`?%ViIVXl$XH+Z?TF_;oVm){0C5t!M5(Ee7}g%YbWQBv8w}k z;*GeB+k4<0T^f2AyTo)6Bn2+r%39h>DgrLvc z+2!@Ht7J{mQ6O{ltR%&f5&U3hX-{+P+xsZl-R|R1PRRp_-?mcg^~Dtw`ro0dA@sdp zD3q65y@F_)8r4{{R_5SWh9yhXbv##-u~+ap`@vbd47C}mEOXxd(B(1FOm8b_nlTyC zR;Jp66vaC<&iwS+jTtd+Ivo=t4?F3_i=;)@s*yY=C;0;(Ojy$E-jf_ z*VAONpwE{(a{0V~q*4-*r$8TFQ)!{z5<$5BC`SCRHP4c1M26C2%-LCHai|%3HQW_R z{_Lu3QQWR}L;l(*672we7Ev?2&~VkBs9SCZ5q`0#GnyqUfbvIq@QJer>w);9NU38W zBpI5TONgC;Q-8T5ekl+g7D47lWiFzncr|l(4?62Y-s6`Z-RrqaPNT?D%!r7XF!$ny zmfcY%?RhJSr8k7~7+?{+%LK4Sf=C1UO|Ycz&tA5i%tJ&m&!bw87h^_IqGZ>GD0QBA zK%1_^M7aC)#87@})CC1UHX}xH9}Z5lQ3QKW)wZ4Rn`QH~<))34x$BfUD)R2+7@3qU z^W;?{NVTqb8LcNC!`h6oPL$EmDY9Z$c zsM!V@xPBS(yj0qM?EABX;nEC-cCS#%cwF)QE?)Rat%h9L=a;4ilR2(9Yj)xEDRjF9 z9H%d+7}w&@#MdR?^fVX@s7!s>w@?jgSEa+*6R$E46)G0umS1@!6zP?VXG?r1y$jyG znQc|R;Bk`bdjTi7=QT|^I)mL{5nIBjyz!zm`dQ z$xu-+$70KKoK^1~6$u#so5*cR&o8slp8=7eg53;(qP^X>^r{igS@Op(pHoOlY}NwF z3Pv=ipibC{39b<9Fel58MMvew*}0zPK4?9^q3b0UL)w38mAz2=!nIG5*u1&U!!vFc$DLD3ykWo%S+NX%e`mY8%kfn; zmjP|>t&^_Kq@7!EaSofL5knECfI)+Qmh3W(*<9@2!dniDNG`ZZnde4CP%4>gZpcY1 zRMaum(%XT&BBjH6JA7pP;q7($c-fSb-Tho^wjORENI1K3kcsq0j_C^LzA}#Rv83L= z$7LhU7MsZ|%sH?^haRiRrH~&tcL}8{BcjI~(CN!5^zmB8YGBNYKj$Sbt*RMgH?wYG zPE?&t8!rI=RZBKMT!bQ#u}J1d8zn@Jam0njsGDUrun&&hTOoOaq$iipy?1Iz_imJd zsq@tQnnpvGFNWNkkpS-g>Cg7jt!_8VoFlbfpkOLkv>;o9tYh8Y zinuj{t6CNl(er~e;rn7=FE43W70>ulNP+RSMU%D3qTvMsW_eq3pYqKc`x-i1o?!#M zToloMh#a??z?=^Wy;v*4qDjt!!m_DoQGQF8`W8Btp3D?^YK$A|Lv7h@2a|rAO4T#9 z3QUFDgsLaZ2eMEuK7l}hpBZp}>*iEF{r7Rzkm{_tUaIPBL#76vfX0gix9z!@(a7AAGvAla`TiwxG&og;tLX2m3S+Z-*3*`8@|II&x+zdJKdxc#l| zhh=^MkABi^vhpaiIV$eA`8sloFD~uMvemlm_yRW}M-VwPhRB@*;i$0Q2G{nw? z4^K#z>Z+pJK~N!%zr@#HMv3mkTEof;KCKv*$*rkydTk@2<;^cg6LJ88$u;e5MswGu9GJW z?yQvbVyfcPuNl}IT|f$5Ji9B1l8(fO;=M{{`h^PBsZ&RUCsFIJHvgj>q^-uG4B(zCbSw`lxS`G9J z3;y6aZqtZv(=#wB%^#fYp{&p#CvoE+A~5Ono^!I{dTMTI8jHE?m&)x!=H02`ygOf> zgmZE4A-ItV&)ZFelLuo$<&xBEO2&Z>@Z&51FMiUPyRU}E4GMf=lXmk& z1{BP4d#^r7jA%ppb%MRTFWOT5H8cryY4gI3P>^X>OXJu5R19lYrv!7p zrO0I!8#??KC3q^tc$Etiy_+rK`3#x5BV3G2j2s<8{^t+G_mBBE*SCPR@TR_#50p2_ zj}O6;kKc=%Poi%hDBWyKGgADT5*KUXVAFMt5Wu3loM7laQnh&&f7kkL*&+zGU#$7> z1s_j>)Dm$Pe-Geegi0(TStWQao3VMkChNX9-l!KyNQ^J#2V^kT!gTG%)fY-rO5d+1 zZ>(W>N_6jSTT2yy} zl882MU8vv7VI?0zrro0MR==AX-Tt!ib}PYAbx-536SAg8gG~& zp2kw7{LowAc2px@dWm1;#>V;bGn{GsiTc}t7_~&9W^v+|H?DVfR4g0w%eA?Ubovbv z45LLZYG6iWV7^baoD?4x{TgneLrW{wH~NW>ggo+enFLQ17mP_wVHDfP*ABIgI z{v-T5eM|Uu_PWTsBDvPDKad6-dzq!Ys$$)7qR1eXbs(c+u|-Q2H6@K5agg7dWPGOR zzsrKmsM)IXk;Ht%H;aG(Hsau35}k)2`=4}Ww_;wjm9VH9t)V~H4J#W-k{9>GrRTu&P5v5WQK{qjH4o0@jjHNX#HT4bXuyG7y8cyXXQrv` z^4((;J`!D|tg355T(GCNc6r*)kDc+LNhd1r-Uox4dubWFMR<qF0#%l z#9qA&BMpee#a(x%r{)aMQZHVISM}=~|6*)FeZZlABJSme`8NY$>w`YSzCB-Qxj34m z?kTlts_3vVu_}w+H5yA*;7MCLDi)o?SX{lhBOnQbiZ6)~#|mTp2bRoFrgi_Y4vL#w z-4(1hmFa7XR5c%w(#Wvn4O@rJp21mmXtlnrCT>&O$F^EmWL$?Sen;_XJNxe%s|On^ z!3kREt4IWmtlEA$a=4075b0^3$)6`Fw+Scru!+DRVOfVgLhBkMld z(0x1gPUvYfp1%NfLcu}|RH&qUhkiMxCabMFL3r=8+S5{%y}VuV({QRw^*7vc&wH%{Op zRmsXY7oLT-#Z$%EQ=%M0sPeIy$0%!p8yP6hlG1hk{< zqk?V(Q5EdcWZGHFTnpDp%-_IdquMSuE*PSLidC43xjI7vJ89c+_bOuds&P7Vgb3&| zsa^U@)SXm1)DB%GddwpFjc6GRInG6ELW0hZ?f2h)Estd*ANt?hcRo58q6MD=0>VEY zG6p*JL||sWJiU&#_v-4?9Xi-rS{}LcVMgFx34m6h-Kh2Wy_pazHf&JhVJ$>_6Yi{N zhUZbp9ieJoDM0^TZkc~u{hf^rLHu1|SYV_T@K^ZERaAV{w+~Z?f79ENZpGnwV^^=A zA~pL@&rE@MfNy~4V}z+aufV8~kX~mv{smas`_-Ib_r`=nUJcGUw96)*Es#pW z+g7K+^Kru_uiNhh+$Y@MjRL(fgfhk9TOfl4r+3*8%1eSF-j=bNONID?CYjA&?ll@! z(1uC}EuNKmX{FBMWdwOgcCon48{vl~K7EFN#tlcCQLYVlH+Te#r#s^-sd7e_<;HW4 ze@>RF8Ma=Nu{fN38)NgR!~vSW-TF%6huxur{rUO#{G!mc%QD8Y37U|n>)^R^>B-u& zZSVZOT@rfOP(w~InPlICr)VWC?%wZ9fZ1g|@X%^__~ZL5gHCVk}M{M*_P^3t*8HASM`{o8Bt@4GMY zOMe_RHoJa;lE13@YR3@vGH=ydn+j_*4I~$mXZK7~GY00agJz=#wV-zH-SvEbpG;$Q ziDCT`u(E8`qN7Yft{+W+_0Eg2z9*!ZmHSTb46X2EI4#>!cDCs==$Jj;PL8d~mJE&W z>ft3m_dISx488S74eIQQ$HMFO*fUNW`1F$Of)^i1;^g7tPrnEA5B}GCT#SJgxogV= zoAD&Lf%y)WxC9D<)RtTq9@v)_G_+Ewe5&Fm_=_~^*(s7Mb8#e>dlnMWD$#hbw*$*x z*&R0cxU{bU1P$<_PAzKS7Q?kyzyuZ6K3-X?lo zO&1mHwUYzQ-wS_s%A$cB66W9iEL%QrG!8%aKfiEcRL3c_mc_Z)K>Ww+o2HFa-B4qd5?x8?zi+(Y$}7q`*q9=wvq4~5Y8c1~bFl)yXvD%*ib zeMhN)CLk=bWIGa@JaMFgzw8UpmY;qpQM|=f;AbGpdGc4n$kS4^$hdt;?@=b&VBSg! zqXtCp)8grBHtr%9_HBGo=y(r&_|Y8?B=9waF{)cy9z)WDWhWlmfsPGcX0uFGicIUD z1JC1@K-k6;mz7_f7ZkK;2W{xE*SZY@LBCbM9oP^*Uv**}bymhtMjki^nCwHidF86+ ztIGAlqL+H=W2O`^a4)fNenz8crCTjso`SQ$XM~Jz6IOGvFYTKas=^z_EWklCP;`mD z;BJC^S2G%9R6%(baVcmyFG=U!mMGw~e-PUzEay8uGk9HOc-F&5*2?d_Qu5rsM4#U< z{&;6hFIJM_G-8Y4M~|?V(Pf+ESzFvPvf^Eq|7JAJyJqpd!^ZOoyG1~&90-xe!G(w- zeAhu7?cTL)+EABD*F@Z==ca2t{F^CWKraLD_}<}cw3|t>_^#P+i7@BUmH0ikdF;z5 z{xTtV7f}jUlagDfj^Uh3X25i7TetN?^UUSu9H<+91p5 z3-7$jm;PS?b0m!0>rQMYa;RlQcK+?I2soiMHT#n+(mjwn@s0AY)O=(esG*gE0iLwJ z(OADF%g%rbhN>GyH&H}_fQdJXLRAC|(BVE}lySuA0MxOlrk9G7l1lQ6)9Kh0Uw#~S zyH6rp979!GuQ&I+lj)vq-jIXRChv+i|4!%WN)t?N;hsTWbZ+vrRHpUf6YzcdV%fm< zaxBg`qVH4~leD}foXjH{GgX3B$7Dj^1*dK}5Wrg~A8+<>D7 zV!v_45c-?`B~r&VHDTMocNtL;=|u*rQ~q_Jsz;}Buh>llNtlVEM)|gav|Gcvyxfay z-Lzd^@|?2N>r6A{Eca!G-AFv=e;%SHyaQLxH)yGdDrg5a$h%fL?rKK8l(Du?+KMW<&}h+X}&x#KFO>Cq8w7-tks3pM5j_f^UefGqsxMP zM1v1QprwNNica+8F69avSH9rWomPfT<`G?Sz`(=AQYsZ{cgb5MTYU0Gr!D08KHF}U ztgP%eI-=8Xj1HxC^2vq&m|p*bVh?tgwr|99KD>Z8jf8E&Ol8QGP{E|-#Ed=v&!bbx4Q3{S z0_!WDlMdBlmdG&WW1$A;v^t}yLcHb1F%KWkh#bbZYc~=6MSX zB#?k|q6rfi7+{-94k@)LS0NHn*sD)ojcaCoPQqQY%~Muy+=eH@N0ukK=1;a&PlwdgAxli@ zTed*TBroxYJORp4n-JrX1w(!QT?}tkG0We-B~L*s*&tDZ`0pUitwXulTh)VE>2d($ zxC0FowFjK!#X`FG64G`{9HSqd688Qsq<{iX0J|citx1I>pJe^9PPSZc@kvYx0rszv zXr82-#MV>7)>B|h{(eTkpW*k$WJqbEL`1U9ttdf! z&}gSX-JrF>0F|Aw(%cy}14@DxV@AIgT_EYn2?6o7Je^(mUH2p@C}FECy*DOkXt&!4 zPP8i4xQ7?P9gycwo|Id#p%)`OL{SGNJNVk|{)4`*AQajwI*@M#&hCC0XliLGI$WZv zlzwwQ9zldZAfdaJ=^{f##$FwBk&%|aW-89IZ@fEv|K1Q%(0D#L96TL7Ga{52sQHh8?Q(TK9NDElNL8LFw|f5_i*HoE`#x!|ckmmWR3 z+!MX+iH`O}AGM)$dJaEx{7Z`iH)SN_7#;E+@>Qwq3=z<&e1>^MzVsZ07VDK>=Q?t< z6}Ri%>nD-6{3xEz|9TAy-KVOs{^4-JWf=^j>)IPpP8cm@ert=8^YMmjMv73 zv!b=e6z>y#agvd+ZpAecDkfLbDiTa)I_rZ%YVrm(alRelo|_jZBg0{6|CLCJzIM%$ zv#UCygdi`!E243&m-YN@mwTn=MY@69MU3KK}>za^Qjd6aPZpihv}3?tbivM;-5`=f5(dwh733 z{_ZQY-EC8?TVBVbnzx;o-AX5_no%UnvyJ2IiegW$S`@dV%z!?ua8&46W);bE#+6GY z;+~8^iewT7*>^BMEZ1tOe;GBSqn(!+)khQM1+_|q=#kJiu?Rn)kW!nD6P9lb3`(pO zvS9ct=aQ-ikZLJ8ldbaPbdrx9oJTu9m)2%l%oYfcdS zpJ;8XH=Wa6a_nx%V>0;8-zuvc`i-tx6iLz@@&oPVr1&}?dnaM{w&NtQP@(a~eoH5ApsuzE5WtsgB{BGKzh z>o)v8%hTxXMM zXp4AHD^Ti{FdnAyOlbm{Y^K(%pe#O`*{Dc7&61qxMHTGOSnoRM~CJfVa%bl17-5^d4W zl^N5bI0`$bL>>QSe0G*fz%a>@=ff0n41G&BMb|vz~B(0E#st(_hIa$$9 z2Sypa&=(oVRGK#u&>Y9#SQ{t_3!N4F7RGX~jc!BMbNyw|zh`?0&5?p^NkwG6~{iF}yh zVbQJf_f%e9XJ)SD0Cn8Y=$|#HnecC0^&DO=W_J}&iZ$C6aA-Gi*hu0d3C22O75-)j!)Ts_&e-&8wq{F zs*TC6jo1dRlKG;GX-xy$yoCKN#0eiqrRUAbsnYWB)=@3HUUaU^rJ6q->GAH&jCa>v zZT;*8xhdo`bPr~Wz36&32L|YGq1Xzr?`w>3bjyn(=e6}+Uc}dQ$tvwHsd9JuuB7Tf zhQ{vO8`{9}Amo7itH5^QmvDaW%l-}J1(SPZQogZ0#9*{^!TW=HXgcNGNo`t@8)ri3 zsbwNyO z^{d^tEVtbh2iiK117XsXr*VX--@~L2oXz!og8X`y$gbN59d^X{uT5TrW>j|f)R?*0 zl`Qwf-UonjqdgkjJ^-zs{yicU)~UMRC4@L$x4&9U)H3IU@zznf){$nrRe9TBg1?)x zE};VL39-pfM4_9gA&DUA$i+Um*mw@1SGnG5;e)bsp4d+=ZceSS31F$v?8dyf>B$VTy4~ zz_#mh0x>m-R};R&0}n4JYG8b3Z**FTlb)?5Kg6rCDHwl-DkOj~%{=`}UNWmk4iv)B zf^e&cPLF_q?pO*84v2Nc*~9Ugt`s^kF;kM_>3J0^`o_`1 zZi%Ytpm!tmaI)v@-cUbwcMpB`w$y2YEbYf^rXgv$k4EaHtt}BiImUR-q2|hnqm0S~ zJUbJ6LQgwwbwwUW`X=!N057F4*EWS*H#==vM-=imN^#t5T#K)lI-vf;`1qxJ@Up+Y zrn{p%G`^;EjJF|U|K+K_8?#`RqhR42kN2Yay{G89YVpfa&w~e|jCpl;6Qh$a0vSgv z1gdyw^iVhyT5u-%)y)9LBKN_8P#GGHs>rB{fJP#+X;Ruq)X=)(8EwnIm{jSR6G*Cw zGJBfk#T?xiV|2&lx{TWIPTszMcl7MT@xL5Rp1pnlVeo0{|;Kx{9`?fKJ` zy)p8yydI@`FXZl~>@EiQ)!wE9WsV4|mUh4JJ-SMHl>N4;6T_rTi6q*#^{zB9>~2cBRtAH?^G5fZ(D`tg*is|+B&sxEzNPP4UV=rdeKDKPw0X(D&>~>4cUoY| z$%J@jGKr%0M4W6tX$xsVftHB(>**=C2cU+C-!!#YxcJ!!9*QK1XPu*I9 z(A(2CDLZj?gIJ5Kr+-r2|27fp)$OsaLqzraBqk(Yz3`z@*yv)q=)PVP&8TqOUTSvMpC zo7>-sAgA`O`-`^N!ZV+N?lAK_B6G?t899I0I*B~j4gC9W7i0cH{NJ`LuNnWhg21;P zA;9*wPZ!_lGle2z--Q>!pY#D zGvVuDDgv#ZkQ|_}0D)lj(aXs4tiTCDN1o$j=6(G2cFacMhe8q5NYCzD{sl|0ZeK=s!9G#po7d+yiS>N#ke+XQuS>b5Z7~F%+df=%M)eA9NOl|19m{8C40>|@5fd_GjdG;U_ zQP2)XZg78WTf8z7=JkhdLJ zG&IWzfhOO*Za3IaE9ehoi` z{lK+dEAT;4fdwuaf@dJ^Lf-~Qd5(h?!B~MGz}T>cL)!^l%cE%;2B10+BnZ*90KESP z@)PvoXc%Ieha($v4t{rB8si8UbwJc37u16X02lmi4}B1ghaw@$hK_GR5O~}8>36kj zV}5~|-_1{8ml4Q00F!`jEZ`Sx4hjLjT|kGgU@ZtKi-GV0P^S<1g;_xNL*}#57Jj~QE~2%`Y=1G0oL8Cnp80Xl-I?%3!mv>nJp@H5C1Q|tdh{B)lt-CxB|{>TLrdKO4- z1o`e_4j?NqG)TM7U{_!z>>hr|W2(3~L& z)1dGIVb}I5vajZ#7;hR}GN%Ayamvort8dL(w52B=d6|3_bHKyCq&c~W; z90K<+fjuyUU|?IH`}|g_2=31_P>uNshcHw~w`0buBWUeDW&+(4xQ9EBumJCClBiuYfLH!)rb>(p^*Y#cz(^%#OrRL#<2ryE>Hs+S9Fs(dSmUppS#@E-e*u6z3orzPk z@{DhI=nGEx5H;2Chrc9pHE)D zeSP%i!%pj$$BgU$#2*>|{kKT_{@VC2EJk-T{tL(SG5-7Sd;Zfij{MO5rEXx!>}(dB zP~JVh@V63+ed8@Gh{I#!*&@qt^?M*%tyh#5RmtvwO5Vgy7_zi^_bd`O4%Y@}Q_ zPV`i#SbZk@x;|j2#k+j61q?FUgq-v8AYYjg8MMgVT9kcE-gLQ`pSF*}XK&x0Ja3Qj zvV9R>wOh}>d_ZWmjp%gWqKc=SC1(tbw!&7M4pUGM6++wHu>w<_zy%~c+j!>iLq|QW z&!l>BRXtnJW@IhYD7$ht_Abd^8y2b&Hx77}Pelq2bai!fl1u>DSYfL^<%C*ff%6TR+RqQ2UJAm<|LIyP?E`q-!=3*V+xc z8HMDg9hHVuH}G(or29*&rGl%NY91obs(RStGuz}@ZS8KW3LP~{S5G&KS5g7RHC%~W zwaB1X?XEzWNSUlQz0t%qh;P96f|Pt4i>zowQ7wN?+oC|Vl-wc$>c8u!vplBFi1MdQ zy!jc--j^9olbmMevb%5G$P_Akna=M+{ux*rgZKr#P0{i)y||;}L8)iHeY<0s%&lF< z{zNiIhBD8bzG9V5RafBsi^XWi!Y4Qj(a-mf;nMIU3bn_-R7h4VCxL6g#Mo8j@IZwI zbX=jL2z^683HI9>q-XuY5tlS<^w|BnO3hxuVBgTe&1GI^IhW$_XoGzx+IcNc3f$&W z^!Un$+OsJ4(H^IlJTE*aF zBlumNR72am_2wiitvaf5*XThoJ#CBa+RBscd}@j=mG9QcFj_%$6Vsp{yh-L0ZxPq_ z`qt;CRV~&X5(MgL1+>^h%x5%IMa_Cl&AkdlHlH}>g!U_Bw3%mD{;olr)R1*IE0?Gu zD=^Ho;bo(R$>#=#**?j8bREN5c(t`7EGE%3s&pKgQYBA`6vrqqeFzHfxA+lx+Lt`r zluXB)u(Tsv^b?AzX|Ikl8p|fK=@qx|;;N6Y8^;<|eT;SHLs2>+eZ9<4{M2GXDz;Wr zJGyAd6?vpB}u=+Dc2qt4|un#r@j)Kx0G0_7VrLu4x3o@oT8 zVTYzsB`H^%Q2?81yfnET*k$;U%<%sOz>thpNy!!kw^F=KwYQqIRFq6$q;#$Vs5s%j z6)Z9pG%5R+`5onk{{toEcTN-+_5KoxiodiPqz(f3+2+*@+6zeQ7=}wL7=|a-E{uRy zEviZ+wUUcE2biTi9kQT3ER*w^HcwNa zCTzzdnf;z*uRM~RgXE^%&844nu)lF8td=;+0r!4uDa_;VI~&Onrg1+S-EA#qWY0;% zT<*X~F3>X{HoxSnh=r+0Ii{N>)2$_iy}~YaWOPuEM0d|XSEu%vwrqdGU-`hQ4_&IO z(d#D=X7Ow_5dhwIton^p@f9`Ih!-GrxeWpOSGJLEZ=*RV*{T?r1d|7+UfB8zOFvmk zZ%PeRoJh?@{x+-vmnxs01Y-LJ2u(Tim_qfNCSiP|6W_ahHeNd4e5r5@S&;8_lR%R2jro^5^qsrEYmD~OwsNZ@hum9ny|HcO* zy*_+%{Nm{S2N@FmcUb?iU@~o<|3jMs9@l^VjE^5XBN(bfFLN9}7=}5tZf?159Jslg z*pxDsh3P0vhwjK4d0|>)!^ENt%Fv7LG%<{mqr>N~>Eig-Fv#)5jYruCFNdSlck)q^ z_{A{vlfsKLJFx7q@VwZwJ>Rp6B6UK_kfwY_*Kw(>irHGB2DX#Ofu9CW z=;uxd^B@d@d=$o(J4%Xp1VC-OC|o;8JUfH|4kH4s{qUxDa`f!z_}z#1qD>5L&HBFs8IQJI26$SRX;?*s+tPo}C48k&YZEabhd+4CDRL;mNa?JsnUt zcQE2S8x;kR6X&)Y7KIhMnH4079mhpHv~$~{6qS)1hH;TlPO57cVd^G<>!4A#14V1U zH@)95wi-dL-=t3*2E)uPU@3Y)0>~>(0xJ(v zI~Z9u5pJI4VdjLR0w$v$7~0i?B52&dzH3>z<7S={IzVi|L?2Rq6&kgNn66?3)W>=1 zyJ?UGemun7J7J#N3FX#ise8Xwhnn?@FdkxJ^Uwtbioo*yEO6bRaNR7)ZS>}iMwV|E z-Y}uoLOV&w(Dl+G2U2+;FU5yx4Q26Wl? z5QqUKEB`lC@k%DoVjlZ-+?&VXDWT?|tjRGEV6$tWK| z=Mv3@Zs-lOjF`>R8&!(}Xx8;9`?*Lw*C{f0q_hBh46%d#QJD-R$5f)R+( z36hvBd_RkQJMgt;FXAhknk=%yia|hrO4OKS0q898@&H6-4=I}%M2B%?Be1Gd0F4EN zN|t1W9p-VE6wM}imO@JAaWTM{9Dn_%z|ApE9Sl7;4>y4#g~Gm>nzj!EtezJ6<>%#=vP_SV`u^zT>(@5$3}p z2M+9bln-6Y&W3oPlh)=sQ_CBsp^s`-5?iqiQCEZxP>2bPlfw6Nh(^$rlR=n)N^@x3 z04xqR8I9u9vvmCOE>0$e-`^)dn>iUUnWvNm4S^Ck zE>K@kmZLq&!yrow*Uzk&By6=>FRy)Xji6VCS&#?A+_8tCSZJfd_rRTg;yVHO-G#JD zZBQqqre&pxV?ogrkn#Z6(VN`3ydBU&9;eV+qZr)aIuK+z^c#p0IuGgxf;_Zx527nh zat~AOdf@WmC?-jljgqZR^Ci~6tRDn!0bT$@3`xBDn35D@k3s7W^jDIlBNy5LQXZnk z8U~PFdG5K8Uv}o+YnmF3^E|*bco0b7aA<5aQ~)%`vYg!Zp~dYi1qBDAfB^vhAe6j94iIE;MT96LI9B1s;adNg)bGaX3o7EEs|=K;?Egw6oE$ z7@`mah}OD(_g5=~E=WP9P=cVHumC`qKG3c=ECL7mIzO@wqR;_VPX}rl>k3{5*ahKaZcs&*SIM`}|+*A-oI#m;(Uh-+dPV literal 0 HcmV?d00001 diff --git a/research/e8-nine-stage-low-read/requirements.txt b/research/e8-nine-stage-low-read/requirements.txt new file mode 100644 index 0000000000..3b2951f558 --- /dev/null +++ b/research/e8-nine-stage-low-read/requirements.txt @@ -0,0 +1,3 @@ +numpy>=2.0,<3 +sympy==1.14.0 +mpmath==1.3.0 diff --git a/research/e8-nine-stage-low-read/source381/LICENSE b/research/e8-nine-stage-low-read/source381/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-nine-stage-low-read/source381/MANIFEST.sha256 b/research/e8-nine-stage-low-read/source381/MANIFEST.sha256 new file mode 100644 index 0000000000..8179065e6f --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/MANIFEST.sha256 @@ -0,0 +1,230 @@ +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./LICENSE +967e6d7e76e216e4898cf543c75b527e8d397ec1ddba3800cb20701f24c89524 ./NOTICE-PR352.md +56995c03a75e590e192f8f07a24a0f8a23494fbb37a1f7fc131c2e1942af6bd9 ./NOTICE.md +75b5011d5633b6a291eb9d21d25913afdb4d20946a4fcfaafc2f02570868b126 ./README.md +8d7bd2ab583f3aecd4658226c37fff7b8fe86443e0c2bf1ebc8b49875ade6c5e ./SOURCE-pr363.json +cf0a6fc0332c921ad7b65883ec05cf3083c0956e32b5dbc620442c834022833b ./SOURCE-pr370.json +3423fe9da587ceeabd5c131bf0373d500a083217bebc574c14add5cd5c4b1ca4 ./SOURCE-pr373.json +e29543f847e5064ac4b808526af47b9782a891eccf5d62718ec944bde30888c3 ./SOURCE-pr375.json +0acfb5da9979baee00660b9b9761b9208398e73354e33a0dbadf2817dcdcb4f2 ./SOURCE-pr377.json +c9a31508126f34e7ac95d802c39e8919a872cd705314de5bf3538de1636ce8ce ./code/bit/checkers/certify_bit_g.py +e68a81ef7981a90d613752003cd5cab5351e260f909b094f1668d8a4dfe480df ./code/bit/checkers/certify_bit_k.py +d1297f9052be4f2496e1ff2a77e4db2c0cdbd7d460d489b4c03e50bf317238ce ./code/bit/checkers/columns_h.cpp +1c344d18fcd494eeca93e259f10cafae7705780e6592f6dcb35b34752dab9bc2 ./code/bit/checkers/columns_k.cpp +d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f ./code/bit/checkers/cost.py +28a0d8ee29ac75b8a789705454987f07d618f135ed1f1bd45b97f18bcc4163e3 ./code/bit/checkers/exactnd_h.py +a591d8caa9ab50a4c7ec6934c71c93fc18fd14680180b43071e8d9d704f7ac9a ./code/bit/checkers/finite_g.py +7e67dc75e63a11e38ac6d6615656c7cf6982e5a33dd404d04b967bf474cad02e ./code/bit/checkers/finite_k.py +b9fa3cd05f36f5fcebfdebfb4a86fb90e92ed3c1d9157c52918ee8c5b563b54f ./code/bit/checkers/geometry_g.py +646b7e8773d9c99376cb00627f109a97319e6d72b439ff513c39035c28c3f70f ./code/bit/checkers/geometry_k.py +223a5a07731fc315a90a3e48177796babc155c1d9985c7ae5017eff6af2a0608 ./code/bit/checkers/gram_frames.py +aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63 ./code/bit/checkers/json.hpp +6c1ef2b24e57781d6951c172a1024fc4300e6fd392c9d6672079a7806ab663b3 ./code/bit/checkers/legality_h.cpp +8140eec180e42202f2c6a9f11f5c92885e60861c38a7611dd805c524e3438138 ./code/bit/checkers/tile_g.py +64255088821f601ede2c3006f08cb97c39a4fa10dbbeb93a8a71fcfa0e1d8d77 ./code/bit/checkers/tile_k.py +8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3 ./code/bit/export_records.py +f69379968367544807db2f0cf14359977e56299383b3edcc4469ddea7c7ecb40 ./code/bit/independent/centres_sat.py +11bf9620ca9db16d52d9fe806b814fc9ec9a89c4d7645354d1861d96f6e805ad ./code/bit/independent/checkword.py +0ff65aace5da4b57d96235bf830f8f11969322e75134d498aeb70e9753ec6b0d ./code/bit/independent/mutate.py +b0e75d6550412a7be4017695e6b237392b611bb852ad8ff309d6682c9f166a4e ./code/bit/mutate_records.py +60fea6a9d6617a3f87376d3fda040642e9cb70e7c179015e03ede8d289f30357 ./code/bit/producer/compile.py +0e23d4282ceb75768e82631da016aaff9818aec53c7d75a6b2a28ee1b1160dc3 ./code/bit/producer/compile2.py +4f8a6843e83bc4f7055d7337f33dbe12ce499051f46bee1b81bbf6b34c652574 ./code/bit/producer/e8lib.py +ba71f77dd3e3c1c54f361c066cebe9faadbc78db46376046e7af625bf1de8c24 ./code/bit/producer/frames.py +0daf87599e9e48646b985ad87351c56c1b73cfc99cdf9eca081483846ddbfa90 ./code/bit/producer/fullword.py +359040fb432fd392472af6b8f5dca0234dd6c2be744a791df27ba62bc5da5175 ./code/bit/producer/ham1.py +fdf0af785ce697bd7f80b4e75f7163735f3b599d9dc42f652f0ffdbdf18ea8bf ./code/bit/producer/ham2.py +1256c54debe0a551da8e24896ab73ef0bd4a5233ff8e6fedf21a9e6301d6e6f3 ./code/bit/producer/params-r865.json +46c858e60ba0a117bf8227b864abf55e85ebee2d56a0dce64472b706499ac405 ./code/bit/producer/price.py +4999c5d6bac9757e4236c45435201631eae21f644dc9543d8c0b6e3cc8360daf ./code/bit/producer/search2.py +935ea65d9c6739e868ccf1aa439bd3c246657dfc887e4a0222a8f0901a5b41a5 ./code/bit/receipts_e8.py +67f714e10a846e9cc62996342f825cd715055031e0b12591abdafd225717e195 ./code/bit/receipts_k.py +fc03e8f7bf73d7d70346b87c835d44508b0581c9ff9aec708fbbd4f0121e0394 ./code/bit/regression/certify_bit.py +26f5c9be3a7f545d50be458e3d17403921b5542a7dcd2986c848664a774977a8 ./code/bit/regression/columns_h_pr346.cpp +d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f ./code/bit/regression/cost.py +aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63 ./code/bit/regression/json.hpp +5661d0b91e07d95736bde4c1824f27bebaecce0a84e38403f5391ebc51a52056 ./code/bit/regression/legality_h_pr346.cpp +7bd5cb48537621f1217d174274d42483da4e2d02feec238643c798c36b30366a ./code/bit/regression/prime_new.py +98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab ./code/bit/regression/prime_witnesses.py +6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a ./code/bit/regression/stage_cohort.py +38c3f78daac118395565a65fa3543b1c349638ff2519ce7fda0dad2d788e90ae ./code/bit/regression/tile_check.py +5fe7174cd3a6580a74e4c1bf8fa7b426e8673f1c285603bf3076d4e758d70731 ./code/complex/code/bridged.py +aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098 ./code/pricing/base_two_moment.py +81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482 ./code/pricing/moment.py +c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c ./code/pricing/outer.py +98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab ./code/pricing/prime_witnesses.py +2d85285d54b287c8362b11311ac72999d6faa6b22a9f102c99150b26fcf35f3c ./code/provenance.py +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./complex377/LICENSE +3743f954b5a652e51fa9ae5101318345d79f4c897ff9a29d5c54387b92118458 ./complex377/MANIFEST.json +a62afee2856e1eb096250efd3202a429cd4118e7d9a114e7b9c67e3c168df3ab ./complex377/README.md +ffe26cdb8a7e083f2f745b6cf18916a6af4f1635bc5b1577f30fb1ca4e575e07 ./complex377/README.txt +f99a2601b4864bb596955933b41f45a04e9c9b300b23e4aae2cb2934ec5d8c74 ./complex377/verify.py +ea0edb8cfb6b2f2c1adb2de12cc0aa5fb7c57e649033528565af3e52087beda7 ./complex377/work/complex-nine-native/PROOF.txt +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./complex377/work/native358/vendor/complex-reserve/LICENSE +3d0d867b84b86dd9f0850cedce9a6de83f2313a604bdef58f7235af30f94bcbd ./complex377/work/native358/vendor/complex-reserve/MANIFEST.json +380ce615ddb67da3680fa188a0ba0daf578b983d58c2496cd20dd06f32e4ef57 ./complex377/work/native358/vendor/complex-reserve/NOTICE.md +e69f2a72785302f892263cf765c84d07e083d9ad05730748f9c3374aade11e53 ./complex377/work/native358/vendor/complex-reserve/SOURCE.json +1b9b069fbdef37b7e3fbc586aad9578ba85948e9f80877733af387573f3fa723 ./complex377/work/native358/vendor/complex-reserve/admit.py +bef59dddd391bcb49ed16ec6384517b8b7a2e21415cc810f9c2f59f440370983 ./complex377/work/native358/vendor/complex-reserve/finite_guard.py +90cfb8d102adf0b5f93b71b05af5c078076f56873a868a66865575a5ea85d573 ./complex377/work/native358/vendor/complex-reserve/price.py +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/LICENSE +967e6d7e76e216e4898cf543c75b527e8d397ec1ddba3800cb20701f24c89524 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/NOTICE.md +c5349ae6637e846fefe132756968376d52c5e3f76241e96214f59e65cdb7ad16 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/README.md +2ad0b2138d2aa8cd5c6ab6995fa8c6c167a822b668ef56a9cc39c5765d1134b3 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/SOURCE-pr346.json +82e5ef0c7b6cf84c53bf6039330930242c9a5c8e8ea13183b2805cf9577f7129 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/addcomp.py +c0867d68b863ca7d8cdd7002ffed263cbd5525fea4522267b5f640e4eff5597b ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/build_v5.py +699c424170b41d3711da6a283f58cac824402ca373764365fd05c8e645ed07f5 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/decomp.py +8c7d2a34fdcbe75d8ed8299e399d578b32adf44402c773fd905aa7c88e2b460d ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/gather.py +3b3e2fb894f871a9b6145844faaff34a05add59ae0eb8882c8feb2b914265b8a ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/interface.py +cfd261d82a31dd9024f1fa191eac2f5d893a7b51833b912459de46a1e9aac003 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/twin.py +26f5c9be3a7f545d50be458e3d17403921b5542a7dcd2986c848664a774977a8 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/columns_h.cpp +28a0d8ee29ac75b8a789705454987f07d618f135ed1f1bd45b97f18bcc4163e3 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/exactnd_h.py +aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/json.hpp +5661d0b91e07d95736bde4c1824f27bebaecce0a84e38403f5391ebc51a52056 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/legality_h.cpp +59c1a64f9df61fc50f47d5a78c8f9351875bf6b352db1c9d109c7c90542a4f19 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/sub.hpp +1a5aea81aab652622e6547d901ead6aaf54fdca231da897dd99474c9f64a33bf ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/verifyT.cpp +7e480b7761fa700944a7dca41ccbefd530203b5e9168b6b37fe879b7e6da57fa ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/certify_complex.py +52d68781eaf6d9decf02446a532a7336fcf15924a9f6781ba0833d038decb9f8 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_basis.py +ccc924537db0c0d55f0c1934e79b8cf4d85b4fb336473d7b42d69e12557aa9f2 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_gx.py +e000ee131389fec427388b85f632879cbaaf10e5e5d979a47d6307d64ce58982 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_labels.py +38e985ebe8c8e7f8c83c03828abde0c80be418caf95e97afdf2d0c357c0ed919 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_scalars.py +aaf46c8e5c68875b8315892e924e082b2f219f8d042dd14937e7cd2f72456dce ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_splice.py +93b78a2e038b23264d04836928c78b6ebf33b87ff3dcc0e43ba0f1748fadd143 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/p10pins.py +dfd1afbbb3ff86f54db6a0313916403ec8ee6f939caa62f3edcc9d7a151bff95 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/scatter.py +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/LICENSE +9419dd03a2f52cf8bdfc4d18216ce29f263ab583b27f01ced8e420985bcb7c81 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/NOTICE +66d8f4ea8752abd89952d6674a636575a0db16e18b1c16e293f48f64242f0c46 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/FINITE_BRIDGE.txt +2bc28e50f3eb092195294cafa81213e520f6d42e7935e9905ad8a6199e2a7c87 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-layout.tex +b963c3d2f4e1b7059aa289bb4b4ac89b688920bcf42f5b20d7698cdef0132cc6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-movement.tex +00117892971ae766188ace0af03030c44164fda105e42b70d84f52c3339a7dcb ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-assembly.tex +d0ce6d3d504996aadb098227885224e48df46101daec8893523a0a8b7364d8fe ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-lemma.tex +dfee33b0281e5551bb6927f757ff0240abade60ae1800f715afd88853ae0191e ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/endpoint-gauge-complex.tex +c9bb9655b594583c6b4bab8cb485233f1d1e588f83858cf1e4c3530cee8fed54 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/general-clifford-frames.tex +4738089103a4b263b3b0ef458f5ef35519c696f1ea871ae79e508d3720f5870a ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/stopped-product-complex.tex +0d76527bf9c259b9532466a7b056ad6ff118867a96e044ff8e1a24aca12e1dbb ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/source-pins.json +5c24746a6330907b9b37d6064095035a58575d64ce793d6d7c9881121fdc3980 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Cert.lean +cf7d7d330b1bffe2e66712c873e647b13dc32db1ccfc0e0f4cd62ee6caf584f0 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Net.lean +6d0649eb62589e66057f044e1e2103fc42f3f57a1498f82a26565bd8eb4026d0 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Live.lean +71dc3dda23dfe510d5d53cbada3a6c540cd1dc2825503fda618a5bd6cfc3e812 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Phases.lean +2e8e88efd4dcbdf0b1a6e39ce7eea8c5fd5ffee2faf360a8c0c9cba84c0e4ef3 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Fourier__Main.lean +c302f5834287421f11f3b0da7112fcde876cbc702896f2af4145b2d72ee393a2 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Geom.lean +ade7e7873da75ca63a4b5ce2f562dde9c12bfbb69d87d7ae831039ff790e5adb ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__InvThm.lean +22ae34809466b4ac2a2c5cdde526f51ff246f5189f7c142b38aa4c0dcffb04a4 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetCert.lean +6e17a68b1e988969f6eb77000028f7ed877e687b8ad3976ec1707fcfe1d2f520 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetDef.lean +c122bc01392a6fdcc0bee918fed81804d3c9b1d3e071016dab65a4ed804ef0b6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetStage.lean +0de429c80231334f1ce92575c1e8ac382ca2d5e7d956767b547639a8941d9a8c ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Phased.lean +c33ec3fce09c0971c32ddcbb86d9383ffbe4c6d05cf36f20460005e6547bb845 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__WinB.lean +cb61f304da51f1dd0a2ec25bca4b63eb095eeb2863289e1e2bdee7c82beff48b ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__B2Gp193Main.lean +d5314f2b93a7f0e1c949fb502331825bfc6d9d8762d35f865443e7c95b6c7ef7 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Glue.lean +9587ddb9961f44938032b609307ab91c0b0e757e3991f1ad95480dd50fd4f72b ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__InstB2Gp193.lean +d92ee6889be4753fc99f467bd84039743325123a1165128378b9c906a04f2703 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Cert.lean +0299bcd0fe255960eec682eef0f045f7e5cb1e4711af2aab4393526eae2caea3 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Price.lean +479434815822e98f015e335361089c3788d00dc3dd39c2944f75410aa0c158fe ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193ScalOK.lean +6b40cac1481c931d47b1a092e382d04716ede0e785c492a2f2983e886a257c3f ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__RateB2Gp193x.lean +aba94a004c94dcae7cf3047c88a6da9561555f4ebe8ab92e299e6ce09ee7aa66 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Raw.lean +45c768c9d71a7cc18bd6db74cb036db880d89580ca60557bb4a492280296b169 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__SolutionB2Gp193x.lean +feec0a3828867968a5c7c2c30b86ed70449abc3c660a60ada67203a75bae2ef7 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Adapt.lean +34906dbf5ae16b5174db00b4881a5cc1d2e583b8c8806db6523a5e2f86565f09 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Letters.lean +80fb3daa9a45de0ed6da570eb4476b9104734be65d0116f58bcfcbcd67f771d0 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Level.lean +6ba897a9495ddadcf8558b93133fdfaf66fc35ce7fa2c53e2d5667335c315e0b ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__ORIGIN.md +6f3dc8bb639933227a8dae181ec4a542e85c7276be9c9e330f49518e7b630b95 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gx.py +9c9dcfac47f0535bf3aa8ebf7c662cdef0ebda50a9f0a9282b8f3cf34809f835 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxbind.py +dab7fec9f44c2d368ed334055d7126e202017feb46e41a8d86e2d998720f67c2 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxconv.py +eb972c06fe8c322db2d9a8d9a7d05596e8f40c4ca8e5f42eb6df3c7361b5d517 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxcore.py +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/LICENSE +557c9ad4660eebd14a00583736c4d12d2c45f3fc9bc148845f9f3efec72c9434 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/NOTICE +842b217147cf84e8042d6ef1c33104d5444b6587b594664bc9eb89b237ab4ad0 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8.lean +987103107d5586c096016f0a702d0de35b74398dbb50ac66f5886a43a5ca0d05 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8Main.lean +a59db9d54b83adc73391916f7c1ef5e381ff073027781c26cb350f43b79839e3 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/ChallengeB2Ge8x.lean +13a243c7d7be31ae429d19b5ecd5d428d60c41b7cca8a330f0c4179b110ba7ea ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Cert.lean +cd250dd72406dde37765c501f666ceeedcc18f831070b26369bcb154c1f99a8e ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Price.lean +6bd5e68effe8913a3f73e25ea59142cd9928ddf81e94250a6ea28aa7317388b3 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8ScalOK.lean +5c7fb23df2c10b690f638a19bf066905b5b620b8a2ad0ffde76cc9348d8aa2b4 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8.lean +36de82f6969c23082876a4d6848428623d1c65d2df3fc917f23ecba003189dd2 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8/S0.lean +6ea83365afe01664b2132a630511b4de65f938dc328744ce7f77a01fad97f32d ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8End.lean +cce81699abe1f85a870dcf64edd395d2cf5a586da7700af565b557093095ab51 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Hist.lean +a343219b419f30f8ac4dd3a0a98bf53550c5fec6b2cbd245320a95977c319016 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Par.lean +78036e5443775ade5bde46a77ba3e0433fe22160da11b5b6c96c7f1075ecfbbd ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Scal0.lean +f6b248dc4c3b2c94db95989b6bd5ad3c3f0d7ece3a511e5b69069550b821b138 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg0.lean +79d16ccceb61391446ea97f77fddadafa9150e9dea97919e775f6c78daa71839 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg1.lean +924340aebc6f68b5a6526311ce33341af0a0a5a8375416762f08c1914ec08abe ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8SegF.lean +650600b631a21221956f9abbab9abebcc9cca628512d3e9a017e2373e2649b17 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab0.lean +60036fa4deeb19d39fc0dddf31359d2b6d2407ff66070f145b111bff16190eb0 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab1.lean +c8a248da3eb770ba55ef267d118b29d49983311087ef789398d555e2c44b3a41 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab2.lean +41975d430ec0095ad465a36d4903e90c01bc891d3abe5e2c372ef786c029a7ed ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab3.lean +a290360c175544cb85edffe1b92fcf7d447cba09128e19de8dc87e0a1ff0c524 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8YChk.lean +c1fee298187ea19b5d70fcfccef7d4fd4161be70c0adda19a89ca9933a759954 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/InstB2Ge8.lean +7b6e59724c0f140e714afba237d5a1a91b22da70abc096ce274690140b39a3a6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8.lean +7c56d865ed6bfcb6919dabc1a6e53f8744ff4824a2f78335787485f3090970d1 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8x.lean +dd52f1fe0a372480edaf5e6c64903d6257c410e43d406f8acb6bf8f60a1ee28f ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/SolutionB2Ge8x.lean +ddad06c37f9268986f3ec8ce43da5230ee2bd887da2480328413a0dc58f2a926 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/comparator/B2Ge8x.json +4b92f00fc7454b9b15e6d71a3b05062792eacca0a0ca4efee46f87827d57c8aa ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/certificate/gcert1-e8-r783.json.gz +be41ee310f28121c3e424cc8637d8fa02ef7c47fc8945e9bbd3856138fd800d6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/e8/replay.py +a0f16e2c9e078ffbfb2174281ee93a48c18593aefb880318fc105ec85a205932 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldgen.py +7a3c38a698c129e13a767da75926a1305eb0c031b908450afc6feb185505c59a ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldlib.py +ef8c869e4cf8da33a4c10b96f7f6faafd46e15d66766238070a60315aa169994 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_rates.py +1b5eb3730cb16cf516e760879951fdfb9b065efc55f78c29a5c6404fcca57a78 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_sharp.py +0488b7a2442c795414f103df912d1e6cc66d37b5be270940ea9564b7f2b666be ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/ChallengeB2L16x.lean.txt +d414a890dfe126916374c1afc804b90e5081b7760f894b9ccdcf23d83a12f9ee ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/SolutionB2L16x.lean.txt +0e22bbe5924284e2fb916337ccefc8e41f6e54469749986ad15b3b81cfaec534 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gsmirror.py +9c9dcfac47f0535bf3aa8ebf7c662cdef0ebda50a9f0a9282b8f3cf34809f835 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxbind.py +eb972c06fe8c322db2d9a8d9a7d05596e8f40c4ca8e5f42eb6df3c7361b5d517 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxcore.py +ce9151054370c2210ed08f54c249a19dcb6946d182cdf934dee1a3781b53040f ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxgen.py +f00802d48ef3fedb00278f0b1c7bde074cc49dd30f202d7f32a9d2aebb3be443 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxpaths.py +514a5719f970fe36b1273cf59df0396db0e042dd7864c2eea53ab2a2fd1e2ad6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxrate.py +3cc09a9c1a2db681c0f2016bc821af5b674d34834dbd6f195b9d482ce7c0ff58 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxunit.py +b6172d58749c0b3b9138570c74827bcb23bf5db4ff9643740768cd7782ac4ca6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check.py +ad8fe9811c6ea0d89c795caef48686cfca600f5d540ebfd5d1251d6777cec7cf ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check_e8.py +bf66f785878f636616ceab193e5a222143945ea06fc2f13dfb99b204ebba82ff ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/pins-e8.json +44e8ae8a5b915358a97dbed5fe4e70195ed3581fd45a216df48fc82a029db87d ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/portable_complex.py +29479da1547cd39cf20fe387cde4cad847a2880266db9d0ef3fb474f68591feb ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/regress_pr346.py +1161d23b459f7d981d6716073745909126d5465018cbbea7e6e6a9e4e5d68add ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/export_p10.py +aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/base_two_moment.py +fc03e8f7bf73d7d70346b87c835d44508b0581c9ff9aec708fbbd4f0121e0394 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/certify_bit.py +d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/cost.py +81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/moment.py +c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/outer.py +7bd5cb48537621f1217d174274d42483da4e2d02feec238643c798c36b30366a ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_new.py +98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_witnesses.py +38c3f78daac118395565a65fa3543b1c349638ff2519ce7fda0dad2d788e90ae ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/tile_check.py +9f5c05aa4d172478f2ab67e7bb83cacebfccc10ecba650c23539cdcee18f2139 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/provenance.py +6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/stage_cohort.py +caabc13126e8f87d08f7697f51512cb3431ff52861f4190149251d8e19224430 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-RECORDS.bin.gz +35070b83d12ebc60003ed344315328713134a43bdb04217c2c5cbc39e101391f ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-frames.json.gz +1e37ae5001447dd78a8287d8aa23d73a1d5862c4017f44db49af327f58d7cf22 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-states.json.gz +e7fe9d0686829ad5acf7930698b3c81a866ae834422aa3c9a12057dfae627175 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-NEW-FRAMES.json +fc4f1986da4585dc1721bcd954a95b3ffb2b562cc7031f40242de81664e3acb6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-RECORDS.bin.gz +21f732671eb34468be2252d4dfb81bdec4e7d7cd6564b93a482c2dd925e9c3b2 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/RECORD-SHA256SUMS +e037cd3d19d68e08523d09fce1c5f92206567784eb59f1924d93a837e4302fce ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/labels.json +f94a5dca42cbb88e9650f8f8a3ffbd1153636dfc0a48da5f7a7fca908c0650ad ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/complex-guard-e8.json +36316b6cfe423b56cda1fd52843e56c997d060e33d26b732b3ecf4de3ae83aaa ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/kappa.json +32e291f249b4eab8d65664d10c94208fe2154bdb4a45aaff84e9e8da5295a29f ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-five-stage-columns.json +7e675b7720f056548c1ee9f9de523eea10e6b014ddf90b7a630fd96163acbce6 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-legality.json +ca0825e0ae3db2855af7535ebdc4775beadbb6f07f8d3a84f0f4fd5b95ba5eae ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/requirements.txt +1a05c0b31ea37b2b5a4b84f6f9f504af8dd4220e13a6d9d86f64b2a731a903c7 ./complex377/work/native358/vendor/complex-reserve/upstream/pr352/verify.sh +aa6f05c39404b4038c31c72f9fe7a8e137df911f6cb6fc668e316be37c40b126 ./complex377/work/native358/vendor/complex-reserve/verify.py +abda2e4c73ecb48d29c30c12bc9a5c2db71d11a35667b4298788ec9154eeec7b ./complex377/work/odd-stages/RECIPE-9.json +30c33508d02aeb8823dc477e8027bf6d44740aea0d3a3970fd2490aaf3b072d0 ./complex377/work/odd-stages/audit_nine_template.py +2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962 ./complex377/work/odd-stages/clifford_exact.py +e4faf656403720f78223934bec90c667086453d449323c85fa839d19829b4517 ./complex377/work/odd-stages/complex_candidate.py +671d6f8144c6d31e1766c6a0e144172da661a63f86b3d4d17fe2710f3ef752c4 ./complex377/work/odd-stages/data_phases.py +7e33e6ca88b11e28544bf7d43b02252208d4355369a14adb2aa8baa15773e42a ./complex377/work/odd-stages/global_nine.py +0dc5b5a23bba5b4532cd11a290019d66d56ead611dddd3c40e2c9d0df64da198 ./complex377/work/odd-stages/outer_fixed.py +5d8cf110150c66f2e2df58ea4e24096f335740e2ae726a4778347d98053cfa76 ./complex377/work/odd-stages/verify_clifford_frames.py +aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098 ./complex377/work/pr361/code/engines/base_two_moment.py +81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482 ./complex377/work/pr361/code/engines/moment.py +c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c ./complex377/work/pr361/code/engines/outer.py +4b92f00fc7454b9b15e6d71a3b05062792eacca0a0ca4efee46f87827d57c8aa ./complex377/work/pr361/complex/gcert1-e8-r783.json.gz +cfc30216f441a1c44a533f2f26954f90e454136af8842c497de4e2da9bd32d8d ./data/bit/RECORD-SHA256SUMS +1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55 ./data/bit/bitE8-r865.json.gz +caabc13126e8f87d08f7697f51512cb3431ff52861f4190149251d8e19224430 ./data/regression-p10/BASE-RECORDS.bin.gz +35070b83d12ebc60003ed344315328713134a43bdb04217c2c5cbc39e101391f ./data/regression-p10/BASE-frames.json.gz +1e37ae5001447dd78a8287d8aa23d73a1d5862c4017f44db49af327f58d7cf22 ./data/regression-p10/BASE-states.json.gz +0bd464f873b0f59622026793affb308bf087833de6f3197202adc7a36d9d0782 ./data/regression-p10/receipts-loans/banks.json.gz +82b21b4e6bb4b20e0ecbca44f59941362f57a26a019f179e19b5b7b86262a116 ./data/regression-p10/receipts-loans/finite.json.gz +7dccea4b8c4a81597779dc0944297d5f60efd9e2e5b19469417712e2192c6cca ./data/regression-p10/receipts-loans/global_result.json.gz +c4074b86171c5bde8fbbff6df0022a116f17e11f0d2116ae3dfe75c8b2a18c64 ./data/regression-p10/receipts-loans/math.json.gz +505c13c667230e946e708d7c9086de34d1c5e259a557f6685765054001e29981 ./data/regression-p10/receipts-loans/raw.json.gz +e7bb691b741227ce389ff6341fa0548ff8f638cc492a06be40fcd829fac0bed9 ./data/regression-p10/receipts-loans/scalar.json.gz +1939ad706e192fb3781e8a0018880b1c6291ded07d40edc4048ab1a0e48f71ee ./requirements.txt +d535e6d1386a1d5a5a30c90384cf3f758f66fb2b7d6ce71118de7389bebf8fe2 ./verify.sh diff --git a/research/e8-nine-stage-low-read/source381/NOTICE-PR352.md b/research/e8-nine-stage-low-read/source381/NOTICE-PR352.md new file mode 100644 index 0000000000..4f9a0194a3 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/NOTICE-PR352.md @@ -0,0 +1,33 @@ +# Attribution and provenance + +Prepared by DaysSky, assisted with Claude. Apache-2.0 (see `LICENSE`) applies to the new code and to the inherited Apache-2.0 +code below; third-party notices are preserved where files are vendored. + +- **Complex supplier: the E8 unit** (`code/complex/inputs/e8/`): Jacob Sussman, jacobalansussman/wht-power-saving-lean + at `9c94857bbaee886f8649edee0bc2d3c738f9555e` (Apache-2.0, Copyright 2026 Jacob Sussman; his `LICENSE` and `NOTICE` + are vendored beside the files). The certificate `tools/certificate/gcert1-e8-r783.json.gz`, the 24 Lean modules and + the comparator configuration of his kernel-checked theorem `wht_main_block_B2Ge8x`, his Lean-data generators + (`tools/gx/{gxgen,gxrate,gxbind,gxunit,gxcore,gsmirror,gxpaths,regen_check,regen_check_e8}.py`, + `tools/gen/{foldlib,foldgen,gen_rates,gen_sharp}.py` and templates) and his stand-alone `tools/e8/replay.py` are + vendored byte-identical and sha-pinned in `code/complex/inputs/complex/source-pins.json`. His README credits + devices from this repository in the unit: slot reuse with a compensating read (jamesyc #124, eumemic #143), late + pairing (Chafik Boukhalfa #200/#233), the in-place pair (icekylinx #184, carried in ikeboy's #191/#193). +- **Bit word, Design T, twin condensation, checkers and engines** (`data/bit/`, `code/builders/`, `code/checkers/`, + `code/pricing/`, `code/export_p10.py`, `code/stage_cohort.py`): unchanged from LJH-217's PR #346 at + `11b4de5ff8ed5fccf55d4af1043358d257308e8e`, which builds on DreamingOfClouds' PR #325 p10b word and PR #315 engines + (#285/#276 gen5/gen4 lineage on eumemic's PR168 generator and source527 package, PR #200's physical rules, hcg890 + and Jacob Sussman's five-stage architecture, Evan McKinney's completed banks), utcorvusvolat-dotcom's w3 Design T, + twin condensation and verifier (PR #310) and PR #266's official checkers. See PR #346's notice for detail. + `json.hpp`: Niels Lohmann, MIT license in its header. +- **Complex checks** (`code/complex/portable_complex.py`, `code/complex/code/`, `code/complex/inputs/complex/`): + PR #315's portable complex checks as ported to p = 10 in PR #346 (#256/#233/#202/#200/#194/#184 lineage: + icekylinx, Chafik Boukhalfa, Avi Eisenberg, eumemic and others). Jacob Sussman's `gx.check1`, `gxcore` and pinned + Lean chain sources under `code/complex/inputs/complex/sources` are unchanged from PR #346 (byte-identical at + `9c94857` except his `ORIGIN.md`, kept at `f010392`). +- **New here**: `code/complex/code/scatter.py` and the generalization of the label, scalar, splice and guard checks + from the paired-cube star scatter with h centres of rank h − 2 to any gx scatter (table or star) with any number + of retained totals of any rank (regression: on PR #346's p = 10 program the generalized checks give byte-identical + scalar schedules, splice programs, primitive expansions, ledger and precision guard); the generalized final-climb + partition; the E8 pins; the Lean-binding and replay steps of `certify_complex.py`; `verify.sh` changes. + +Credits do not imply endorsement or review by the credited authors. diff --git a/research/e8-nine-stage-low-read/source381/NOTICE.md b/research/e8-nine-stage-low-read/source381/NOTICE.md new file mode 100644 index 0000000000..4bfe56e6c9 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/NOTICE.md @@ -0,0 +1,33 @@ +# Attribution and provenance + +Prepared by DaysSky, assisted with Claude. Apache-2.0 (see `LICENSE`) applies to the new code and to the inherited +Apache-2.0 code; third-party notices are preserved where files are vendored. The `SOURCE-pr*.json` files record, by git +blob id, every file taken unchanged from PR #370, #363, #373, #375 and #377. + +## Vendored + +- **`complex377/`**: PR #377 (Zhihao Chen, jacklightChen) at `d0a620fcc99ba012468d61d01f5bb14007076d50`, + `research/nine-stage-complex-e8/`, byte for byte, with its own `MANIFEST.json`, verifier, construction argument, + `LICENSE` and vendored notices. It is built on Jacob Sussman's E8 unit (jacobalansussman/wht-power-saving-lean at + `9c94857`, Apache-2.0) through PR #352, and its vendored notices retain the five-stage, completed-bank, compiler and + analytic-framework credits. PR #377 states that it was prepared with OpenAI Codex assistance. +- **The E8 bit word and the bit-side checks** (`data/`, `code/bit/`, `code/pricing/`, `NOTICE-PR352.md`, `LICENSE`): + PR #370 (Dylan Crow, utcorvusvolat-dotcom) at `b7fe9cd`. PR #370's notice gives their lineage: PR #266's official + cohort checkers as generalized by PR #346; the source527/p10 `finite_check.py`, `geometry527.py` and + `global_lowering.py` (eumemic; PR #200, Chafik Boukhalfa; PR234, hcg890 / Henry Grant, on Jacob Sussman's five-stage + architecture; Evan McKinney's completed banks; DreamingOfClouds and Chafik Boukhalfa's p = 10 ports); and PR #315's + engines. `json.hpp`: Niels Lohmann, MIT license in its header. +- **`code/complex/code/bridged.py`**: PR #363 (DaysSky) at `9df55da`. +- **The K-parameterized bit checkers** (`columns_k.cpp`, `geometry_k.py`, `tile_k.py`, `certify_bit_k.py`, `finite_k.py`, + `receipts_k.py`): PR #373 / PR #375 (DaysSky). + +## New in this package + +- `geometry_k.py`: the option `unsplit`, which skips the splits and reports the least halving degree. +- `certify_bit_k.py`: the option `unsplit` and the halving degree in the receipt. +- `finite_k.py`: the least halving degree in place of the half-shrink assertion, and the internal row reserve + t·(d + 1). At t = 1 it is the PR #370 bill. +- `verify.sh`, `code/provenance.py`, `README.md`, this notice, `MANIFEST.sha256`, the provenance files and the + workflow. + +Credits do not imply endorsement or review by the credited authors. diff --git a/research/e8-nine-stage-low-read/source381/README.md b/research/e8-nine-stage-low-read/source381/README.md new file mode 100644 index 0000000000..ed223f037c --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/README.md @@ -0,0 +1,111 @@ +κ = 9.95656966441037e-4 + +# The E8 bit word in the nine-stage bridged word, with PR #377's nine-stage E8 complex component + +This package gives a conditional finite construction with **κ = 995656966441037/10¹⁸ ≈ 9.95656966441037·10⁻⁴**, which +is above 2⁻¹⁰ = 9.765625·10⁻⁴: + +- +2.94 % over #380 (9.67261003170394e-4), which pairs PR #377's complex component with the seven-stage bit word; +- +4.34 % over #375 (9.5424356568133e-4). + +| side | supplier | layout | coarse saving | +| --- | --- | --- | ---: | +| bit | PR #370's E8 bit word `bitE8-r865` (h = 8, v = 120, R = 865, 9 centres), unchanged | **B₄**: nine stages, m = 72, idle climbs unsplit (max child 50, halving degree 2) | c = 249162322049641/(25·10¹⁶) ≈ **9.96649288198564·10⁻⁴** | +| complex | PR #377's compressed nine-stage E8 component (Sussman's unit), vendored unchanged | m = 73, banks, halving degree 2 | b = 999240641319551/10¹⁸ ≈ 9.99240641319551·10⁻⁴ | + +The bit side binds. κ is the bit-bound assembly of PR #315's `outer.assembly`: all 47 constraints hold, and the +adjacent 10⁻¹⁸ grid point is rejected. + +## The bit side: B₄, unsplit + +PR #373 put the bit word in the bridged word B_K of PR #363 with K = 3. Its K-parameterized checkers run here at K = 4: +four bank pairs per class and nine invocations, with m = 9·8 = 72 and W = 8v + R = 1,825. The deficit is +8v − 9·72 = 312 per unit. + +As in PR #375 for the complex side, the idle climbs are **not split** below m/2. The B₄ idle climbs of the bit word +are: + + [50] | [14, 7, 36] | [28, 7, 22] | [42, 7, 8] + +The largest child is 50 of 72, and 72² = 5184 > 2·50² = 5000, so the halving degree is two. Split below m/2, B₄ +would price at 9.5702·10⁻⁴. Unsplit B₃ gives 9.9123·10⁻⁴. + +**Banks.** 9 stages × 865 helper residuals of width 8 tile width-72 banks with 9 residuals each. Since 865 ≡ 1 (mod +9), this takes **T = 9 literal replicas**, and gives 865 exact banks. + +## What is checked (`bash research/e8-nine-stage-kappa/verify.sh `) + +Steps 1–2 and 4 are PR #370's. Steps 3, 5, 6, 9 and 10 run PR #373's K-parameterized checkers at K = 4. Each of +those also runs at K = 2 and is compared with PR #370's receipt. + +0. **Manifest and provenance** (`SOURCE-pr*.json`, git blob ids): files from PR #370, #363, #373, #375 and #377. +1. **The word** is regenerated from its producer parameters, and the PR249 records are exported. +2. **One invocation**: the independent all-column checker and its 6 controls. +3. **Legality and formal columns.** `columns_k.cpp -DKPAIRS=4` runs the all-column F₂ check of the whole bridged word: + - all 1,825 physical columns, dirty helpers included, through 9 invocations, 18 twin bridges and the terminal + exchange; + - all 18 omitted-bridge controls rejected; + - PR #370's 6 record-level controls rejected. +4. **Nondegeneracy.** Exact E8-Gram nondegeneracy and prime witnesses, with prime set {2}. +5. **PR234 route and idle geometry** (`geometry_k.py 4 … unsplit`), on all 120 ports with W(E8) reflection words: + - 9 blocks, routes involutive, 8 stage boundaries chained; + - every idle climb a commuting nested pair whose gap rank equals `bridged.py`'s; + - the 9-window entrance completion exact; + - largest child 50, halving degree 2. +6. **Banks** (`tile_k.py`): an exact width-72 tiling with 9 replicas. +7. **Copied centres.** 9 retained totals at the full frame (PR #370's admission), charged as NCOPY = 9 per invocation. +8. **Complex component.** PR #377's own `verify.py` runs unchanged on its vendored, manifest-pinned package. It checks + the Clifford frames, transitions and adapters, the data and cover phases, the global template and two moment engines. + It gives b = 999240641319551/10¹⁸. +9. **Bit coarse saving and outer assembly** (`certify_bit_k.py 4 8 9 … unsplit`): + - the one-level histogram is 9 × (one invocation) + 240 × (B₄ idle blocks, unsplit); + - W = 9 · 1,825, m = 72; + - two engines with the 10⁻¹⁶ fallback, and the adjacent grid point rejected; + - the outer assembly with PR #377's b: 47 positive constraints and κ. +10. **Finite bill at m = 72** (`finite_k.py`): + - 9 invocations' additions plus 18v bridge additions; + - route families 2·9·(2v + R) + 8v; + - 9·NCOPY·T copy/erase episodes, and the selector bill 2·9·T·(…); + - halving degree 2, so the internal row coefficient is 2·(72² + 1) = 10,370; + - coefficient 2⁴⁸ < 2⁸⁰, q-power bound q⁵¹⁸⁵. + + At K = 2 the bill is byte-identical to PR #370's. + +## Halving degree two on the bit side + +The bit finite bill (`finite_k.py`) now computes the least halving degree t with mᵗ > 2·(max child)ᵗ. At t = 1 it is +the original bill; otherwise it charges the internal borrowed-row reserve t·(d + 1). + +This is PR234's treatment: "The proper child ratio 5/6 requires halving degree four. The one-level weighted recurrence +is retained; its histogram is not multiplied by four" +(`research/five-stage-source527-banks/UPSTREAM-PR234-PROOF.md`). PR #375 and PR #377 use degree two on the complex +side. The external complex row coefficient 20,161 of the outer assembly is unchanged. + +## Open obligations + +- **No Lean proof of the bridged word B₄** on the bit side. Here B₄ rests on: + - the all-column F₂ check of the whole nine-stage word (step 3); + - PR234's exact rational geometry on 9 blocks (step 5). +- **Halving degree two on the bit side.** The inherited bit finite bill states degree one. Here its internal row term + is charged at degree two, as in PR234's degree-four precedent. +- **Everything PR #370 admits:** + - 9 retained totals at h = 8; + - PR234's banks for a non-paired-cube family; + - the inherited bit-supplier interfaces. +- **Everything PR #377 admits for the complex component:** the local E8 theorem, the Clifford/compiler, common-grid, + row and analytic interfaces. +- **The finite bill** takes PR #370's formulas with the stage counts of B₄ (PR #373's generalization). +- This is a conditional finite construction, not a formal verification of the multiplication theorem. + +## Credits + +- **Dylan Crow (utcorvusvolat-dotcom), PR #370:** the E8 bit word, its producer and independent checker, and the + generalized bit-side checkers. +- **Zhihao Chen (jacklightChen), PR #377:** the compressed nine-stage E8 complex component, vendored unchanged with its + verifier. +- **Jacob Sussman:** the E8 family and the E8 complex unit, and the bridged five-stage word. +- **PR #363 / #373 / #375 (DaysSky):** B_K, the K-parameterized bit-side checkers, and halving degree two. +- **PR #380 (rohanarun):** first paired PR #377's component with an E8 bit word. +- **PR #352 / #346 / #315 / #266 / source527 / PR234 lineage:** see `NOTICE.md` and `NOTICE-PR352.md`. + +Prepared by DaysSky, assisted with Claude. diff --git a/research/e8-nine-stage-low-read/source381/SOURCE-pr363.json b/research/e8-nine-stage-low-read/source381/SOURCE-pr363.json new file mode 100644 index 0000000000..d41f65a8cb --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/SOURCE-pr363.json @@ -0,0 +1,12 @@ +{ + "schema": "pr363-provenance/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/363", + "commit": "9df55dad6ddd05c3458793dfd82d1c2fe0ddbbb4", + "source_root": "research/e8-seven-stage", + "package_prefix": "", + "note": "Every file under \"identical\" has, in this package, the git blob id it has in PR #363 at the commit above (git ls-tree -r 9df55dad6ddd05c3458793dfd82d1c2fe0ddbbb4 -- research/e8-seven-stage; package paths carry the prefix ''). Files under \"changed\" exist there under the same path and were edited here.", + "identical": { + "code/complex/code/bridged.py": "626a28614b07066528fd5f189d87cffa5015ac60" + }, + "changed": [] +} \ No newline at end of file diff --git a/research/e8-nine-stage-low-read/source381/SOURCE-pr370.json b/research/e8-nine-stage-low-read/source381/SOURCE-pr370.json new file mode 100644 index 0000000000..4a629aded8 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/SOURCE-pr370.json @@ -0,0 +1,63 @@ +{ + "schema": "pr370-provenance/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/370", + "commit": "b7fe9cdf2da009c947ff6b334c562bc190b30373", + "source_root": "research/e8-bit", + "package_prefix": "", + "note": "Every file under \"identical\" has, in this package, the git blob id it has in PR #370 at the commit above (git ls-tree -r b7fe9cdf2da009c947ff6b334c562bc190b30373 -- research/e8-bit; package paths carry the prefix ''). Files under \"changed\" exist there under the same path and were edited here.", + "identical": { + "LICENSE": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "NOTICE-PR352.md": "4f9a0194a34a6b3b431d5b452655a2bc787fdb95", + "code/bit/checkers/certify_bit_g.py": "d257992e31129ef761e7ff5b4fda71fd590dd60e", + "code/bit/checkers/columns_h.cpp": "00c5a3a5d81d083582f60f33dd2e7bea5049c37f", + "code/bit/checkers/cost.py": "677584c1c6b0e959c19f58521b68d4b3e847f97e", + "code/bit/checkers/exactnd_h.py": "fa90b5089f53cbd1f98ec026391cf9375eb6a11d", + "code/bit/checkers/finite_g.py": "d1aa38980a164b7c8070c24a30560e90c1dbb721", + "code/bit/checkers/geometry_g.py": "74eb5822479153bd87e1ac1044161e8997d0bb6f", + "code/bit/checkers/gram_frames.py": "b740d47295c02692260d7cc01874a49fe48f78ab", + "code/bit/checkers/json.hpp": "82d69f7c5d044c9887c96b90c97f5639083ecd14", + "code/bit/checkers/legality_h.cpp": "cb1233c7e96b1aa8bbf4d2e4165d75ab0dca64b9", + "code/bit/checkers/tile_g.py": "d897054811144048dd08598dcd02560f7d7c62ee", + "code/bit/export_records.py": "3632d370486a02f5456f7643ced03f8c925b2350", + "code/bit/independent/centres_sat.py": "efbcef69dda1f2331237c0888a0f18e7f89fab3e", + "code/bit/independent/checkword.py": "da4e0fe05067184d4dab1e130ae1384c1fa983f5", + "code/bit/independent/mutate.py": "eba592fd468e0d7e7e5100fe99da6eb548c5906b", + "code/bit/mutate_records.py": "6794516f665d36eac189894e350a5ad01113cb4c", + "code/bit/producer/compile.py": "86b12507ef86308336833a208a989d56072096d1", + "code/bit/producer/compile2.py": "a7bdfdfbe417c793b2a8c515f5432bdd10472259", + "code/bit/producer/e8lib.py": "8464b956f6a5aa5061695990a14b7a385d370c2e", + "code/bit/producer/frames.py": "b28c3b2413b9767e7ffe0a8b2db93836f3455494", + "code/bit/producer/fullword.py": "104f01b7803481b623809bc8a57682d28f09b5c3", + "code/bit/producer/ham1.py": "8086649a5f71c16698db7059bbada7187d781b56", + "code/bit/producer/ham2.py": "842f76b245a1bfb4150c53a853f6f472511f5a2f", + "code/bit/producer/params-r865.json": "110b4d94d884f03d4d37be22672ab27d836f1275", + "code/bit/producer/price.py": "9014d97d519eea1f8c96e4bfc75afa0febd5903f", + "code/bit/producer/search2.py": "b653f4b52ac743e7b6280bb1a5e3954ac1ad84bc", + "code/bit/receipts_e8.py": "f514db37ab4c265b9546c8c0fe02e3faf9667a4e", + "code/bit/regression/certify_bit.py": "b8a6c4be5931daa83921e23ee5ad3ab263ca8ce8", + "code/bit/regression/columns_h_pr346.cpp": "07b7fd220c1742eb9c634e8572bef2df8d1f2aa6", + "code/bit/regression/cost.py": "677584c1c6b0e959c19f58521b68d4b3e847f97e", + "code/bit/regression/json.hpp": "82d69f7c5d044c9887c96b90c97f5639083ecd14", + "code/bit/regression/legality_h_pr346.cpp": "f4501be83a229cac1f3050993a204d8f75b86108", + "code/bit/regression/prime_new.py": "372ce0958a23c0312209a0a0c6ea11af34e8a92d", + "code/bit/regression/prime_witnesses.py": "7f16d930302ae879c562dd58e085d9747fcac077", + "code/bit/regression/stage_cohort.py": "f6d7afe3e623208c4207b6a683a1e3e49249e31c", + "code/bit/regression/tile_check.py": "1e537bd2e48b93bbfdcbdec42672075a2441b584", + "code/pricing/base_two_moment.py": "14a90fa0e788217856f070382c9e61bd7c603c61", + "code/pricing/moment.py": "7d697cb45203fe72d97037403d6da41f71f3b7fd", + "code/pricing/outer.py": "43007488ad2c43187c77cc6798beff8b1cd76ad2", + "code/pricing/prime_witnesses.py": "7f16d930302ae879c562dd58e085d9747fcac077", + "data/bit/RECORD-SHA256SUMS": "53458062d6193eb1954592cb503fb75808e2b1cf", + "data/bit/bitE8-r865.json.gz": "8bec1751f7e33c3a1e4673ef5dbc34d6f205321e", + "data/regression-p10/BASE-RECORDS.bin.gz": "087f8261242e0e897907b8d4a86a7e1d100df172", + "data/regression-p10/BASE-frames.json.gz": "42ad5869ca5927c51daaa0af887c58960a4b37e3", + "data/regression-p10/BASE-states.json.gz": "427bc873b9ac858dd42c41b7a0cf8523e7dc3d09", + "data/regression-p10/receipts-loans/banks.json.gz": "6a543b0dba04265f032f10bcbdb3dabbf07d13e7", + "data/regression-p10/receipts-loans/finite.json.gz": "a7ab4e1dce3e01d01b10574e77a547b3b5027c31", + "data/regression-p10/receipts-loans/global_result.json.gz": "7a6dbc0dfe280dd7ed6014b1d492a61e573ca5a3", + "data/regression-p10/receipts-loans/math.json.gz": "ee8102218a6d127b1dc6570778468658a8da273b", + "data/regression-p10/receipts-loans/raw.json.gz": "3a965a6005d9bff179b9500307044ccb7eaf8c2c", + "data/regression-p10/receipts-loans/scalar.json.gz": "5d4d5e1a2db03851fe71c8a48364ce58a3b5548a" + }, + "changed": [] +} \ No newline at end of file diff --git a/research/e8-nine-stage-low-read/source381/SOURCE-pr373.json b/research/e8-nine-stage-low-read/source381/SOURCE-pr373.json new file mode 100644 index 0000000000..040c9be60c --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/SOURCE-pr373.json @@ -0,0 +1,15 @@ +{ + "schema": "pr373-provenance/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/373", + "commit": "3ff87b5dc0b22a57958547ee347d5da25b7f9401", + "source_root": "research/e8-bit-seven-stage", + "package_prefix": "", + "note": "Every file under \"identical\" has, in this package, the git blob id it has in PR #373 at the commit above (git ls-tree -r 3ff87b5dc0b22a57958547ee347d5da25b7f9401 -- research/e8-bit-seven-stage; package paths carry the prefix ''). Files under \"changed\" exist there under the same path and were edited here.", + "identical": { + "code/bit/checkers/columns_k.cpp": "42bb232fbec4de703e70cc13dc2f39a3b43a3a01", + "code/bit/checkers/tile_k.py": "a4635e6681c2f1521b44f24364cc457d304cb077", + "code/bit/receipts_k.py": "428261488b4af028fd04df4f84eead1dad79a389", + "requirements.txt": "97fc30544865b9fcda4636ad0879a636b078ae1e" + }, + "changed": [] +} \ No newline at end of file diff --git a/research/e8-nine-stage-low-read/source381/SOURCE-pr375.json b/research/e8-nine-stage-low-read/source381/SOURCE-pr375.json new file mode 100644 index 0000000000..6b26a9c091 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/SOURCE-pr375.json @@ -0,0 +1,18 @@ +{ + "schema": "pr375-provenance/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/375", + "commit": "79874623cf86d92325c26ccafc31413d12e9d248", + "source_root": "research/e8-seven-stage-halving-two", + "package_prefix": "", + "note": "Every file under \"identical\" has, in this package, the git blob id it has in PR #375 at the commit above (git ls-tree -r 79874623cf86d92325c26ccafc31413d12e9d248 -- research/e8-seven-stage-halving-two; package paths carry the prefix ''). Files under \"changed\" exist there under the same path and were edited here.", + "identical": {}, + "changed": [ + "NOTICE.md", + "README.md", + "code/bit/checkers/certify_bit_k.py", + "code/bit/checkers/finite_k.py", + "code/bit/checkers/geometry_k.py", + "code/provenance.py", + "verify.sh" + ] +} \ No newline at end of file diff --git a/research/e8-nine-stage-low-read/source381/SOURCE-pr377.json b/research/e8-nine-stage-low-read/source381/SOURCE-pr377.json new file mode 100644 index 0000000000..2f1fd12910 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/SOURCE-pr377.json @@ -0,0 +1,173 @@ +{ + "schema": "pr377-provenance/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/377", + "commit": "d0a620fcc99ba012468d61d01f5bb14007076d50", + "source_root": "research/nine-stage-complex-e8", + "package_prefix": "complex377/", + "note": "Every file under \"identical\" has, in this package, the git blob id it has in PR #377 at the commit above (git ls-tree -r d0a620fcc99ba012468d61d01f5bb14007076d50 -- research/nine-stage-complex-e8; package paths carry the prefix 'complex377/'). Files under \"changed\" exist there under the same path and were edited here.", + "identical": { + "complex377/LICENSE": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "complex377/MANIFEST.json": "2a709aaa9e016c231b2c9cd988031f2b57e8b907", + "complex377/README.md": "27f614ff95fbd033a228d0a976a3168139d22541", + "complex377/README.txt": "24c828ce468586cde812621034848560889dc046", + "complex377/verify.py": "7889e68d55d312eb5af88869c69dd29128f5c197", + "complex377/work/complex-nine-native/PROOF.txt": "278c379c21a5b2cc588c1ff8358f003ce219a282", + "complex377/work/native358/vendor/complex-reserve/LICENSE": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "complex377/work/native358/vendor/complex-reserve/MANIFEST.json": "fb122f82affea557592dd45e881e7d769df694d9", + "complex377/work/native358/vendor/complex-reserve/NOTICE.md": "d0a70f4c5cd7bb3d1ee944a2be5ad2c4d7aedd22", + "complex377/work/native358/vendor/complex-reserve/SOURCE.json": "0d9bdfc56c432d56b0988eb7e2735b39381327ac", + "complex377/work/native358/vendor/complex-reserve/admit.py": "82d7254876d76e592bdc248d8a952dd55621ef03", + "complex377/work/native358/vendor/complex-reserve/finite_guard.py": "c8e3e8cee96e23c4856484f664259ef74c280adf", + "complex377/work/native358/vendor/complex-reserve/price.py": "096eb271112c96110ecac18ddd14ef3db0b531a3", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/LICENSE": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/MANIFEST.sha256": "d33c4b9f400fa37c55b0e62e10f8fc2f6b82e16a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/NOTICE.md": "4f9a0194a34a6b3b431d5b452655a2bc787fdb95", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/README.md": "b5f6f5acaa71745de31c84c6944cd414d336244e", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/SOURCE-pr346.json": "0de6ddc40209b7eab30cf54af2cf20c0f8546d36", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/addcomp.py": "6d5fea18b0f58bf36e012981055261101230096d", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/build_v5.py": "f18f96300806f9308cfd24554de41b85860ae514", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/decomp.py": "365e5bf2a8204e3512929c2bba57cc9e8f4b66e9", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/gather.py": "ef063373c227fe4efdac34bb7bef11f8f7fe611f", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/interface.py": "0673ddabe9c7e6ba6221ca05f288a2b330c627f5", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/builders/twin.py": "6ec783fd2b0a5592c5733c1882d896fffa63a0a7", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/columns_h.cpp": "07b7fd220c1742eb9c634e8572bef2df8d1f2aa6", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/exactnd_h.py": "fa90b5089f53cbd1f98ec026391cf9375eb6a11d", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/json.hpp": "82d69f7c5d044c9887c96b90c97f5639083ecd14", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/legality_h.cpp": "f4501be83a229cac1f3050993a204d8f75b86108", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/sub.hpp": "70a8a83faf3e28cb3ffe1eaa1d5dd194028712c7", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/checkers/verifyT.cpp": "af2f7a3cd7e1780d549c60a74ef86371abcc560c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/certify_complex.py": "e6598bb2ac47315365fe5d00afded8dfe8b11889", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_basis.py": "8c400798a5f25d366747b35cb55e985222039083", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_gx.py": "0986cc810e1d72ffb2b9ea70d1fe40517bbf2d76", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_labels.py": "5f1c9a65f1b0f096455805dc07832a38ca6eac7b", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_scalars.py": "2f196127610a67f812a5b33ea133628ad63835ee", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/complex_splice.py": "1adcb2ee89486382491611fbdf0997c0f363e6c3", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/p10pins.py": "8fd60cd9171d1c06f3ed93617612d7d8acc10cbb", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/code/scatter.py": "20142c9851b9c10392bdcf0dd042a2cf8705f945", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/LICENSE": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/NOTICE": "63aa295646734f62c4270e653811530f9a570d3a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/FINITE_BRIDGE.txt": "c1a88436113a1351f80c72bd08f6406ed5faa51d", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-layout.tex": "16f4d233471a7d189163ae7e7902becadecbba64", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/compact-control-movement.tex": "06b6a9ef24245ac7b724c53a204635415b402357", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-assembly.tex": "b0c69166c3048d27518355995e3e5b622722c696", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/copied-centers-lemma.tex": "8933aaf508aa9d4c75ba1290913e02f6868d351d", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/endpoint-gauge-complex.tex": "907a0ceda8df0317ddc7f2b71df5af2aa4d47dfc", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/general-clifford-frames.tex": "0367eeb005298601f28a673861d6f71bf1d0ebbb", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/retained/stopped-product-complex.tex": "4a9037137cd3158dbeca6d9e3b1881a599ebfcb5", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/source-pins.json": "c555ff203f493b10c87f51feeeabb26c92544064", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Cert.lean": "f7bdc3d903341a9546056cde124d642e2677318b", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Bridge__Net.lean": "204f6d9cf902c85900f237bd99a23774e9a3f81b", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Live.lean": "b8306527d64ae06271c6aa55c5e0b3ded85c651c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Carrier__Phases.lean": "305da15b5d129959a0696e2031289eea91ec1813", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__Fourier__Main.lean": "9aa06b5bf28a2380ef9d54a0785ac2369f6012e4", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Geom.lean": "eb4490af8b0f5b97984d9dbdf345d86fe65d02c7", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__InvThm.lean": "d69fcb4992778bcd2d12596e365ee8483aa538a2", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetCert.lean": "6336ba076607f4229c58e51b01f35b8457effb88", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetDef.lean": "c13042eb43328f9771a5f85e83edb59810f3a006", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__NetStage.lean": "670f4c6a84b3453dd0b1bc0879fff3ecd9410919", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__Phased.lean": "e68c42377f4fd0d0352ba697357d05f60333c8dc", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Chain__WinB.lean": "951edde5cf5fdfb1dd5f7902499f3ccab961bf4a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__B2Gp193Main.lean": "d7ecfebcea804af8209a0db3d89caa9ed364ea7a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Glue.lean": "c6cbac38e3a2fbabac74610519e26fcc065f7ff5", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__InstB2Gp193.lean": "9b9925ce268a9f757fd44913140a57df95315769", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Cert.lean": "3c3250279e66b56c9fee8a12c265ae2780ce4761", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193Price.lean": "eeed011d64482adbdf0d6ff48a7c395a7252d57a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__P193ScalOK.lean": "3539192ac1d3a51641f7ba08fa06a8659b12bc0b", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__RateB2Gp193x.lean": "df563cde73a8f942e9c90189261dd6e8482d40f1", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__Raw.lean": "499fa67e88ebfe0ad777081cb61def3f74de81ba", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GCert__Data__SolutionB2Gp193x.lean": "0392e1f05bb89cca472c976391a649418dde186e", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Adapt.lean": "24e261ad0862ba778f0e7f00d48756865b7f4eb8", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Letters.lean": "2eca6e713bfd47449b872a0462857806861be9d5", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/Work__GFrame__Engine__Level.lean": "6bd7cfa0c3f34bbd04fc445eceae0cc4d4c567fc", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__ORIGIN.md": "e28b355d0a271da6c8c7da8b6d68451817378bf1", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gx.py": "6d14c0a976146eb881c1e3897b2476f8633d4e9c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxbind.py": "fcb625619cb07a9be9594422357786ca6e3c4add", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxconv.py": "49ebb65973a2403bb22aa32692762cd0522a0287", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/complex/sources/tools__gx__gxcore.py": "3e3f0a3076f3c326e7833c74eceecb3436dd3185", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/LICENSE": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/NOTICE": "7008ce01c1f84c4ac181dd9382a94c83a1a172aa", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8.lean": "d1e3afba66b01bdc95d55d805ae63efa653031ff", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/B2Ge8Main.lean": "ef1487658291016d68e78b865f9239d100c69e1c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/ChallengeB2Ge8x.lean": "c6c1567f5dfe456c5ffe4aad42598363df0a747a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Cert.lean": "ab43d9bf07756e60715ffad5e1f644cc2a1e6978", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8Price.lean": "71b561645b714e82324a649d540e0628bc7c8c66", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/E8ScalOK.lean": "0657e91b9975ca1dfa8da21ddd37e81e8a58adb6", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8.lean": "c8165c355b811de25107973fe7e22e2ea036bf51", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8/S0.lean": "5069b78564d65fcd7ea4a4865871cb783958a2c0", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8End.lean": "dfec705e0e8de5098b1359e4deaa07d14fa595e3", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Hist.lean": "4c0a89ebc5b5ae8c23d94a576d8752056179b99a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Par.lean": "9ace01b6f3ea6f04174a4d15ba700544b057df8a", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Scal0.lean": "219dd4f6dba8e79a8b041acc999938253d1a12f6", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg0.lean": "b69b6fdff45e26b5eae1b394c8556b13c1f4aa40", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Seg1.lean": "a05e925bdef191129c376518b18d0061f52fc9a4", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8SegF.lean": "72addebadbfea53898f7664f923f4f6f80b58c6c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab0.lean": "8995e049e05267f04b48eb4e9232bb8b056c4fec", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab1.lean": "38ccb738cedf7e10794161a90313cea62a3f6360", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab2.lean": "bc10a63187ba520d96e2d8bba3349afe334a7233", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8Tab3.lean": "07453a6580dcfb848970fce591c1a7e64867f860", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/Gen/E8YChk.lean": "e7129aa67f278d4fc1656f1d814bc4e6251a324c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/InstB2Ge8.lean": "be583c65d3a375aea13449a3b52fc07be39a60ea", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8.lean": "46c0ed04cdadb5a3bf15920e51dc537fdfa43eb2", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/RateB2Ge8x.lean": "10c148fd72833f12e94e5a1770e13d60eaa6f8dc", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/Work/GCert/Data/SolutionB2Ge8x.lean": "bfa1d0308824cb8c4261a78b5eb7a297fce2ab4c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/comparator/B2Ge8x.json": "7fda546848f67f704e3f900c2c2f82d44f48deee", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/certificate/gcert1-e8-r783.json.gz": "0bd0bacf744f1c31419e05b834e34a92be77ae57", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/e8/replay.py": "a281ae6687ec6d8c6f71480bba7507f0b1eb4fd1", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldgen.py": "a6287172bab665b9e5f125256dd535590c2be5f4", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/foldlib.py": "2cd642ec9e3d5b4b31ccaeec8eaafad5dab7790d", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_rates.py": "8f90a197ba4642c36f82e804be5fd23e3c688b19", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/gen_sharp.py": "e28409ef864a8d6970d0a45457f67b08c1f0e380", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/ChallengeB2L16x.lean.txt": "5863ad32a049b0e1f3ebe48a6bcb4b67f1009fb4", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gen/templates/SolutionB2L16x.lean.txt": "c111b98f65c32c1c29fe625880b4e836636d119b", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gsmirror.py": "35af7ef46bd21341813b0e483b268fea60556896", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxbind.py": "fcb625619cb07a9be9594422357786ca6e3c4add", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxcore.py": "3e3f0a3076f3c326e7833c74eceecb3436dd3185", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxgen.py": "12d847f09db92df2c68d10faf8c7403322110ef7", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxpaths.py": "355613a9c9641b4ec7754cd2503684bf60ac9aaf", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxrate.py": "6a58830d4c5eb950b5f73567374ec786a4ae4982", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/gxunit.py": "2c4587038c5f33358600b9feca285487e8453cfb", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check.py": "720c4c06afb82330a4f23f1c3f7d3d529038b876", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/inputs/e8/tools/gx/regen_check_e8.py": "c4db78c06fa6a5f21f7323edf8bf3d13ab07a931", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/pins-e8.json": "ba757ae806be2599b6c9d3b0ca9e2143ef409ef1", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/portable_complex.py": "4453d666f52a25bb2dadc2f900ef417cc17a0380", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/complex/regress_pr346.py": "6294fc271e13dc2da08c0eff7f06cbe9950e0e9b", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/export_p10.py": "f492305d64e2354ed2959f8bd19ad670f50db238", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/base_two_moment.py": "14a90fa0e788217856f070382c9e61bd7c603c61", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/certify_bit.py": "b8a6c4be5931daa83921e23ee5ad3ab263ca8ce8", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/cost.py": "677584c1c6b0e959c19f58521b68d4b3e847f97e", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/moment.py": "7d697cb45203fe72d97037403d6da41f71f3b7fd", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/outer.py": "43007488ad2c43187c77cc6798beff8b1cd76ad2", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_new.py": "372ce0958a23c0312209a0a0c6ea11af34e8a92d", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/prime_witnesses.py": "7f16d930302ae879c562dd58e085d9747fcac077", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/pricing/tile_check.py": "1e537bd2e48b93bbfdcbdec42672075a2441b584", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/provenance.py": "a9509eb72870ef3b0efe1fbb052434b521d53581", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/code/stage_cohort.py": "f6d7afe3e623208c4207b6a683a1e3e49249e31c", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-RECORDS.bin.gz": "087f8261242e0e897907b8d4a86a7e1d100df172", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-frames.json.gz": "42ad5869ca5927c51daaa0af887c58960a4b37e3", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/BASE-states.json.gz": "427bc873b9ac858dd42c41b7a0cf8523e7dc3d09", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-NEW-FRAMES.json": "a508432521da48acfe249be0690405b24a955ed0", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/FINAL-RECORDS.bin.gz": "884af231daea2b9d5fdb7d44b28e3126c42c9fab", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/RECORD-SHA256SUMS": "6525e19277a941f45d75ab9235c72fd9a0ac0bc8", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/data/bit/labels.json": "b2974963e69f9462817c1db422575843f15a412d", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/complex-guard-e8.json": "0c14b58b6365822f82cda1045b22d77717c160a6", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/kappa.json": "8adbd6e45ea123f8ed2cec694a0b89a21f163bc8", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-five-stage-columns.json": "34918d43331b6585f2df68f27a0de4a806d4e1f5", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/receipts/official-legality.json": "1f400bd50f802ffd9dcd89a522e8ff29ec29c174", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/requirements.txt": "659ecea46df0773f8e1abe05d24c06c1a2d0a64e", + "complex377/work/native358/vendor/complex-reserve/upstream/pr352/verify.sh": "749b219062bd33a1560d08c87a8d378cee4e5b9b", + "complex377/work/native358/vendor/complex-reserve/verify.py": "225c4823ee38abc4b9cd9beb8568380ad80e5c11", + "complex377/work/odd-stages/RECIPE-9.json": "33054aa6b49b18cd7924cc0eeff4760ee4653938", + "complex377/work/odd-stages/audit_nine_template.py": "d5542cdfa27816b86443473d357cdcd93e961c65", + "complex377/work/odd-stages/clifford_exact.py": "166841a037f069249f6f7f6dedb89248812f59e2", + "complex377/work/odd-stages/complex_candidate.py": "c795639318107245f2151d34035a2f91110f937e", + "complex377/work/odd-stages/data_phases.py": "70cb22586677fb47a677d706626d729f3f6c4519", + "complex377/work/odd-stages/global_nine.py": "5b6f81b05b475a19938947e23814ed04274ca620", + "complex377/work/odd-stages/outer_fixed.py": "bcc22fad0762c7333de69c538c3734aa825356a3", + "complex377/work/odd-stages/verify_clifford_frames.py": "928be3483708b8f304e255779e736efa01faf16d", + "complex377/work/pr361/code/engines/base_two_moment.py": "14a90fa0e788217856f070382c9e61bd7c603c61", + "complex377/work/pr361/code/engines/moment.py": "7d697cb45203fe72d97037403d6da41f71f3b7fd", + "complex377/work/pr361/code/engines/outer.py": "43007488ad2c43187c77cc6798beff8b1cd76ad2", + "complex377/work/pr361/complex/gcert1-e8-r783.json.gz": "0bd0bacf744f1c31419e05b834e34a92be77ae57" + }, + "changed": [] +} \ No newline at end of file diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_g.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_g.py new file mode 100644 index 0000000000..d257992e31 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_g.py @@ -0,0 +1,46 @@ +"""Generalized (Dylan Crow, with Anthropic Claude assistance): h, the normalization T and the output path are arguments; +h = 20, T = 12 is the original. usage: certify_bit_g.py WORDDIR B H T OUT.json +Exact bit coarse saving + outer assembly for a PR249-format local word, using PR #315's engines +(moment.py, base_two_moment.py, outer.py) and its math_check.run logic, with a given complex coarse b.""" +import sys, json, importlib.util, os +from fractions import Fraction as Q +from collections import Counter +sys.path.insert(0,os.path.dirname(os.path.abspath(__file__))) +import cost as C +P=os.environ.get('PR315',os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','..','pricing'))+'/' +def load(n): + s=importlib.util.spec_from_file_location(n,P+n+'.py'); m=importlib.util.module_from_spec(s); s.loader.exec_module(m); return m +moment=load('moment'); other=load('base_two_moment'); outer=load('outer') +d=sys.argv[1]; b=Q(sys.argv[2]); HH=int(sys.argv[3]); T=int(sys.argv[4]); OUT=sys.argv[5] +s,fr,dim,rec=C.load_snapshot(d) +H,resid,v=C.local_profile(rec,s,dim,h=HH); prof,W,m,deficit=C.five_stage(H,resid,v,h=HH) +norm={int(k):int(c)*T for k,c in prof.items() if c}; Wn=Q(4*v*HH+resid,HH)*T; assert Wn.denominator==1; Wn=int(Wn); m=5*HH +mass=sum(k*c for k,c in norm.items()); print('normalized W',Wn,'calls',sum(norm.values()),'mass',mass,'deficit',m*Wn-mass,'maxchild',max(norm)) +root=moment.certify(dict(norm),m,Wn,True); c=Q(int(Q(root['lower'])*10**18),10**18) +bm=moment.moment(norm,m,Wn,c,True); nextbm=moment.moment(norm,m,Wn,c+Q(1,10**18),True); assert bm[1]<1cap-grid, 'complex-bound saving not tight against the cap' +chain=[Q(384599,10**10)] +for _ in range(3): + a=(1-sv)*sv+sv*chain[-1]; assert chain[-1]0 +try: + outer.assembly(bit,b,bridge,k+Q(1,10**18),eta=eta,beta=beta); raise SystemExit('ADJACENT ADMITTED') +except AssertionError: pass +if binding=='complex': + try: outer.assembly(cap,b,bridge,k,eta=eta,beta=beta) + except AssertionError as e: assert 'leaf_saving_above_bit' in str(e); print('complex leaf cap itself rejected (leaf_saving_above_bit), as in PR #315 math_check') + else: raise SystemExit('complex leaf cap admitted') +print('complex b =',b,float(b),'| binding:',binding) +print('KAPPA =',k,'=',format(float(k),'.12e'),'| 47 strict constraints positive, adjacent grid point rejected') +json.dump(dict(word=d,h=HH,T=T,maxchild=max(norm),bit_moment_interval=[str(x) for x in bm],normalized_histogram=norm,W=Wn,m=m,bit_coarse=str(c),complex_coarse=str(b),binding=binding,kappa=str(k),kappa_float=float(k)),open(OUT,'w'),indent=1) diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_k.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_k.py new file mode 100644 index 0000000000..37ce2ee2b4 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/certify_bit_k.py @@ -0,0 +1,59 @@ +"""Generalized (Dylan Crow, with Anthropic Claude assistance): h, the normalization T and the output path are arguments; +h = 20, T = 12 is the original. Bridged word B_K (DaysSky, assisted with Claude): the one-level histogram is +(2K+1) x the local histogram + 2v x the idle blocks of PR #363's bridged.check(K, h) (split below m/2 for K > 2), +W = 2Kv + resid/h, m = (2K+1) h; K = 2 is certify_bit_g.py. With a seventh argument 'unsplit' the idle climbs are +not split and the least halving degree t (m^t > 2 max child^t) replaces the half-shrink guard. +usage: certify_bit_k.py WORDDIR B K H T OUT.json [unsplit] +Exact bit coarse saving + outer assembly for a PR249-format local word, using PR #315's engines +(moment.py, base_two_moment.py, outer.py) and its math_check.run logic, with a given complex coarse b.""" +import sys, json, importlib.util, os +from fractions import Fraction as Q +from collections import Counter +sys.path.insert(0,os.path.dirname(os.path.abspath(__file__))) +import cost as C +sys.path.insert(0,os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','..','complex','code')) +import bridged +P=os.environ.get('PR315',os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','..','pricing'))+'/' +def load(n): + s=importlib.util.spec_from_file_location(n,P+n+'.py'); m=importlib.util.module_from_spec(s); s.loader.exec_module(m); return m +moment=load('moment'); other=load('base_two_moment'); outer=load('outer') +d=sys.argv[1]; b=Q(sys.argv[2]); KP=int(sys.argv[3]); HH=int(sys.argv[4]); T=int(sys.argv[5]); OUT=sys.argv[6]; S=2*KP+1 +s,fr,dim,rec=C.load_snapshot(d) +H,resid,v=C.local_profile(rec,s,dim,h=HH); m=S*HH +UNSPLIT=len(sys.argv)>7 and sys.argv[7]=='unsplit' +lay=bridged.check(KP,HH,split=(m-1)//2 if (KP>2 and not UNSPLIT) else None) +prof=Counter({j:S*c for j,c in H.items()}) +for r in lay['blocks_per_role_pair']: prof[r]+=2*v +norm={int(k):int(c)*T for k,c in prof.items() if c}; Wn=Q(2*KP*v*HH+resid,HH)*T; assert Wn.denominator==1; Wn=int(Wn) +t_half=1 +while m**t_half<=2*max(norm)**t_half: t_half+=1 +assert UNSPLIT or t_half==1, 'half-shrink guard' +mass=sum(k*c for k,c in norm.items()); print('normalized W',Wn,'calls',sum(norm.values()),'mass',mass,'deficit',m*Wn-mass,'maxchild',max(norm)) +root=moment.certify(dict(norm),m,Wn,True); c=Q(int(Q(root['lower'])*10**18),10**18) +bm=moment.moment(norm,m,Wn,c,True); nextbm=moment.moment(norm,m,Wn,c+Q(1,10**18),True); assert bm[1]<1cap-grid, 'complex-bound saving not tight against the cap' +chain=[Q(384599,10**10)] +for _ in range(3): + a=(1-sv)*sv+sv*chain[-1]; assert chain[-1]0 +try: + outer.assembly(bit,b,bridge,k+Q(1,10**18),eta=eta,beta=beta); raise SystemExit('ADJACENT ADMITTED') +except AssertionError: pass +if binding=='complex': + try: outer.assembly(cap,b,bridge,k,eta=eta,beta=beta) + except AssertionError as e: assert 'leaf_saving_above_bit' in str(e); print('complex leaf cap itself rejected (leaf_saving_above_bit), as in PR #315 math_check') + else: raise SystemExit('complex leaf cap admitted') +print('complex b =',b,float(b),'| binding:',binding) +print('KAPPA =',k,'=',format(float(k),'.12e'),'| 47 strict constraints positive, adjacent grid point rejected') +json.dump(dict(word=d,K=KP,stages=S,halving_degree=t_half,idle_blocks_per_role_pair=lay['blocks_per_role_pair'],h=HH,T=T,maxchild=max(norm),bit_moment_interval=[str(x) for x in bm],normalized_histogram=norm,W=Wn,m=m,bit_coarse=str(c),complex_coarse=str(b),binding=binding,kappa=str(k),kappa_float=float(k)),open(OUT,'w'),indent=1) diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/columns_h.cpp b/research/e8-nine-stage-low-read/source381/code/bit/checkers/columns_h.cpp new file mode 100644 index 0000000000..00c5a3a5d8 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/columns_h.cpp @@ -0,0 +1,48 @@ +// Generalization (Dylan Crow, with Anthropic Claude assistance): the copied-centre count is the macro NCOPY, defaulting to +// HDIM, so the unmodified PR #346/#352 build (no -DNCOPY) is exactly the original checker. The E8 bit word has 9 +// retained totals at h = 8 (-DNCOPY=9). +#ifndef NCOPY +#define NCOPY HDIM +#endif +#include "json.hpp" +#include +#include +using boost::multiprecision::cpp_int; +#include +#include +#include +#include +#include +#include +#include +using J=nlohmann::json; +struct E{int kind,dst,src,c;}; +void need(bool x,const char*s){if(!x)throw std::runtime_error(s);} +int main(int argc,char**argv){try{ +need(argc==3,"usage RAW6_RECORDS OUTPUT");std::string pre=argv[1];int v=VPORTS,r=RHELP,loc=2*v+r,global=4*v+r,temp=global; +struct Raw{int op,a,b,c,f,z;};std::ifstream f(pre,std::ios::binary|std::ios::ate);size_t sz=f.tellg();need(sz%sizeof(Raw)==0,"stream alignment");std::vectorp(sz/sizeof(Raw));f.seekg(0);f.read((char*)p.data(),sz);std::vectore;std::mapH;for(auto q:p){if(q.op==0){if(q.f)H[q.f]++;}else if(q.op==1)e.push_back({0,q.a,q.b,q.c});else if(q.op==2){H[q.z]++;e.push_back({1,loc,q.a,0});}else if(q.op==3)e.push_back({2,loc,q.a,0});else need(false,"opcode");} +J prefix=J::array();cpp_int largestF=0,largestB=0;for(int rev=0;rev<2;rev++){std::vectornorms(loc+1,1);cpp_int maxrow=1;bool isopen=false;for(size_t z=0;zmaxrow)maxrow=norms[q.dst];}else if(k==1){need(!isopen,"boundcopy");norms[loc]=norms[q.src];isopen=true;}else {need(isopen,"bounderase");norms[loc]=0;isopen=false;}}need(!isopen,"prefix copy closure");if(rev)largestB=maxrow;else largestF=maxrow;prefix.push_back({{"reverse",bool(rev)},{"cancellation_free_signed_row_l1_upper",maxrow.convert_to()},{"bits",boost::multiprecision::msb(maxrow)+1}});} +cpp_int payload=64*largestF*largestF*largestF*largestB*largestB;need(payload<(cpp_int(1)<<104),"payloadfiniteprefix2^104"); +long long copies=0,adds=0,odd=0;bool open=false;int center=-1;long long reverseCopies=0; +for(auto q:e){need(q.kind>=0&&q.kind<=2,"kind");need(q.dst>=0&&q.dst<=loc,"local dst");if(q.kind==0){need(q.src>=0&&q.src<=loc&&q.dst!=q.src,"source distinct");need(q.dst!=loc,"copy immutable");need(q.src!=loc||open,"temp not open");if(open)need(q.dst!=center,"source changes inside copied-center block");adds++;odd+=q.c&1;} +else if(q.kind==1){need(!open&&q.dst==loc&&q.src>=0&&q.srca((size_t)(global+1)*words);auto row=[&](int i){return a.data()+(size_t)i*words;};for(int i=0;i=v&&i<2*v&&w==(size_t)(i-v)/64)want^=1ull<<((i-v)%64);need(x[w]==want,"local defining-decoder full formal column");}}} +if(stage==1||stage==2||stage==4){int b=stage==1?0:stage==2?1:2;for(auto q:bridges[b])for(int i=0;i(std::chrono::steady_clock::now()-t0).count()<<"s\n";} +for(int bank=0;bank<4;bank+=2)for(int i=0;i()},{"payload_prefix_bits",boost::multiprecision::msb(payload)+1},{"new_Q_categories",{28,29}},{"local_raw_H",H},{"negative_controls",controls},{"seconds",std::chrono::duration(std::chrono::steady_clock::now()-t0).count()}};std::ofstream(argv[2])< +#include +using boost::multiprecision::cpp_int; +#include +#include +#include +#include +#include +#include +#include +using J=nlohmann::json; +struct E{int kind,dst,src,c;}; +void need(bool x,const char*s){if(!x)throw std::runtime_error(s);} +int main(int argc,char**argv){try{ +need(argc==3,"usage RAW6_RECORDS OUTPUT");std::string pre=argv[1];int v=VPORTS,r=RHELP,loc=2*v+r,global=2*KPAIRS*v+r,temp=global;const int S=2*KPAIRS+1; +struct Raw{int op,a,b,c,f,z;};std::ifstream f(pre,std::ios::binary|std::ios::ate);size_t sz=f.tellg();need(sz%sizeof(Raw)==0,"stream alignment");std::vectorp(sz/sizeof(Raw));f.seekg(0);f.read((char*)p.data(),sz);std::vectore;std::mapH;for(auto q:p){if(q.op==0){if(q.f)H[q.f]++;}else if(q.op==1)e.push_back({0,q.a,q.b,q.c});else if(q.op==2){H[q.z]++;e.push_back({1,loc,q.a,0});}else if(q.op==3)e.push_back({2,loc,q.a,0});else need(false,"opcode");} +J prefix=J::array();cpp_int largestF=0,largestB=0;for(int rev=0;rev<2;rev++){std::vectornorms(loc+1,1);cpp_int maxrow=1;bool isopen=false;for(size_t z=0;zmaxrow)maxrow=norms[q.dst];}else if(k==1){need(!isopen,"boundcopy");norms[loc]=norms[q.src];isopen=true;}else {need(isopen,"bounderase");norms[loc]=0;isopen=false;}}need(!isopen,"prefix copy closure");if(rev)largestB=maxrow;else largestF=maxrow;prefix.push_back({{"reverse",bool(rev)},{"cancellation_free_signed_row_l1_upper",maxrow.convert_to()},{"bits",boost::multiprecision::msb(maxrow)+1}});} +cpp_int payload=64*largestF*largestF*largestF*largestB*largestB;need(payload<(cpp_int(1)<<104),"payloadfiniteprefix2^104"); +long long copies=0,adds=0,odd=0;bool open=false;int center=-1;long long reverseCopies=0; +for(auto q:e){need(q.kind>=0&&q.kind<=2,"kind");need(q.dst>=0&&q.dst<=loc,"local dst");if(q.kind==0){need(q.src>=0&&q.src<=loc&&q.dst!=q.src,"source distinct");need(q.dst!=loc,"copy immutable");need(q.src!=loc||open,"temp not open");if(open)need(q.dst!=center,"source changes inside copied-center block");adds++;odd+=q.c&1;} +else if(q.kind==1){need(!open&&q.dst==loc&&q.src>=0&&q.src>active;std::vectorbackward;std::vector>>after(S); +auto X=[](int p){return 2*(p-1);};auto Y=[](int p){return 2*(p-1)+1;}; +for(int t=0;t=3&&t%2==1);backward.push_back(b);active.push_back(b?std::array{Y(p),X(p)}:std::array{X(p),Y(p)});} +for(int q=2;q<=KPAIRS;q++){after[2*q-3].push_back({X(q-1),X(q),1});after[2*q-3].push_back({Y(q),Y(q-1),-1}); + after[2*q-2].push_back({Y(q),Y(q-1),1});after[2*q-2].push_back({X(q-1),X(q),-1});} +for(int p=KPAIRS;p>=2;p--){after[S-1].push_back({Y(p-1),Y(p),-1});after[S-1].push_back({X(p),X(p-1),1});} +int nbridges=0;for(auto&a:after)nbridges+=a.size();need(nbridges==6*(KPAIRS-1),"twin bridge count"); +size_t words=(global+63)/64;std::vectora((size_t)(global+1)*words);auto row=[&](int i){return a.data()+(size_t)i*words;};for(int i=0;i=v&&i<2*v&&w==(size_t)(i-v)/64)want^=1ull<<((i-v)%64);need(x[w]==want,"local defining-decoder full formal column");}}} +for(auto q:after[stage])for(int i=0;i(std::chrono::steady_clock::now()-t0).count()<<"s\n";} +for(int bank=0;bank<2*KPAIRS;bank+=2)for(int i=0;ib(2*KPAIRS);for(int z=0;z<2*KPAIRS;z++)b[z]=1u<()},{"payload_prefix_bits",boost::multiprecision::msb(payload)+1},{"new_Q_categories",{28,29}},{"local_raw_H",H},{"negative_controls",controls},{"seconds",std::chrono::duration(std::chrono::steady_clock::now()-t0).count()}};std::ofstream(argv[2])< 0: H[int(r[4])] += 1 + copies = rec[rec[:, 0] == 2] + for r in copies: + if r[5] > 0: H[int(r[5])] += 1 + init = s['initial'] + resid = sum(h - dim[init[str(r)]] for r in range(2 * v, n)) + return H, resid, v + +def five_stage(H, resid, v, h=24, stages=5): + m = stages * h + prof = collections.Counter() + for j, c in H.items(): prof[j] += stages * c + for j in (2*h - 2, h - 1, 2*h + 2, 4): prof[j] += 2 * v + W = mpf(4 * v) + mpf(resid) / h + mass = sum(j * c for j, c in prof.items()) + return prof, W, m, W * m - mass + +def solve_moment(prof, W, m, bad=mpf('1e-16')): + calls = sum(prof.values()) + items = [(mpf(j) / m, c) for j, c in prof.items()] + def mu(sv): + t = 1 - sv + return (sum(c * x ** t for x, c in items) + bad * 32 * m * m * calls * (mpf(1) / m) ** t) / W - 1 + return findroot(mu, mpf('0.0007')) + +def evaluate(rec, s, dim, h=24): + H, resid, v = local_profile(rec, s, dim, h) + prof, W, m, deficit = five_stage(H, resid, v, h) + sv = solve_moment(prof, W, m) + return dict(saving=sv, kappa_approx=sv / (1 + sv), W=W, deficit=deficit, m=m, + calls=sum(prof.values()), local=dict(sorted(H.items())), resid=resid) + +if __name__ == '__main__': + import sys + s, fr, dim, rec = load_snapshot(sys.argv[1]) + r = evaluate(rec, s, dim) + print({k: (float(v) if hasattr(v, 'real') and not isinstance(v, dict) else v) for k, v in r.items() if k != 'local'}) diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/exactnd_h.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/exactnd_h.py new file mode 100644 index 0000000000..fa90b5089f --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/exactnd_h.py @@ -0,0 +1,44 @@ +import json, sys, collections +def bareiss_det(M): + M=[row[:] for row in M]; n=len(M); sign=1; prev=1 + for k in range(n-1): + if M[k][k]==0: + sw=next((i for i in range(k+1,n) if M[i][k]!=0),None) + if sw is None: return 0 + M[k],M[sw]=M[sw],M[k]; sign=-sign + for i in range(k+1,n): + for j in range(k+1,n): + M[i][j]=(M[i][j]*M[k][k]-M[i][k]*M[k][j])//prev + prev=M[k][k] + return sign*M[n-1][n-1] +def rank_int(B): + # exact rank via fraction-free elimination + M=[r[:] for r in B]; r=0; cols=len(M[0]) if M else 0 + for c in range(cols): + p=next((i for i in range(r,len(M)) if M[i][c]!=0),None) + if p is None: continue + M[r],M[p]=M[p],M[r] + for i in range(len(M)): + if i!=r and M[i][c]!=0: + a,b=M[r][c],M[i][c]; M[i]=[x*a-y*b for x,y in zip(M[i],M[r])] + r+=1 + return r +HH=20 +new_dir=sys.argv[1]; base_dir=sys.argv[2] +fr=json.load(open(new_dir+'/frames.json'))['frames']; old=json.load(open(base_dir+'/frames.json'))['frames'] +new=[k for k in fr if k not in old or fr[k]['B']!=old[k]['B']] +bad=0; stats=collections.Counter() +for k in new: + B=fr[k]['B']; A=fr[k].get('A',[]) + d=len(B) + if d==0: continue + assert rank_int(B)==d, ('basis rank',k) + if A: + assert all(sum(a*b for a,b in zip(ra,rb))==0 for ra in A for rb in B), ('A.B',k) + assert len(A)+d==HH, ('A dim',k) + s=[sum(r) for r in B] + M=[[9*sum(B[i][t]*B[j][t] for t in range(HH))-s[i]*s[j] for j in range(d)] for i in range(d)] + det=bareiss_det(M) + stats[(d, det!=0)]+=1 + if det==0: bad+=1 +print('changed/new frames:',len(new),' exactly degenerate:',bad,' by (dim,nonzero det):',dict(stats)) diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_g.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_g.py new file mode 100644 index 0000000000..d1aa38980a --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_g.py @@ -0,0 +1,146 @@ +"""Finite bill for the banked five-stage bit word, generalized from the source527/p10 finite_check.run (Dylan Crow, with +Anthropic Claude assistance). The arithmetic is the original line by line; the changes are explicit parameters: + * h, m = 5h, v, R, replicas T, literal stock, literal paid histogram, weighted/unit additions and the forward and + inverse cancellation-free row bounds are inputs (from this package's receipts); + * NCOPY, the copied-centre temporaries per invocation and 5*NCOPY copy/erase episodes per replica (the original + writes h for both, since the paired cube has h centres; the E8 word has 9 retained totals at h = 8); + * the 2h-dimensional rational route template: [[p*, k*], [k*, p*]] for the reference port line q* of the label + family under its form (original: a triple line under G = I - J/9, denominators 1,2,3,6; E8: a root line under + /2), recomputed and factored into elementary operations, exact inverse replay, omitted factor rejected; + * K, the conservative extra bank-selector calls, by the original formula 2*5*T*((live-1) + R*m*factors) with + factors = maxops + (m-1) + m (maxops of the actual charts; an ungauged word has only the identity chart, 0 ops). +usage: python3 finite_g.py e8 RECEIPTS.json | python3 finite_g.py regression P10_RECEIPT_DIR""" +from fractions import Fraction as Q +from collections import Counter +from hashlib import sha256 +import json, sys, os, importlib.util, gzip +HERE=os.path.dirname(os.path.abspath(__file__)) +def ceilq(x): return -((-x.numerator)//x.denominator) +def cutoff_log2(delta,C): + assert 0=1 + return max(1,ceilq(36/delta**2),ceilq(2*(4+(C-1).bit_length())/delta)) +def mm(A,B): return [[sum(A[i][k]*B[k][j] for k in range(len(B))) for j in range(len(B[0]))] for i in range(len(A))] +def route_template(h,q,form,g=None,ginv=None): + """[[g p* g^-1, g k*], [k* g^-1, p*]] with p* = q q^T G/; G given by form(x,y) on coordinate vectors + (bilinear); g = I (the original's reference port) unless a port isometry is given.""" + I=lambda n:[[Q(i==j)for j in range(n)]for i in range(n)] + Gq=[sum(form(i,j)*q[j] for j in range(h)) for i in range(h)]; nq=sum(q[i]*Gq[i] for i in range(h)) + P=[[Q(q[i])*Gq[j]/nq for j in range(h)]for i in range(h)] + K=[[Q(i==j)-P[i][j]for j in range(h)]for i in range(h)] + if g is None: TL,TR,BL=P,K,K + else: TL,TR,BL=mm(mm(g,P),ginv),mm(g,K),mm(K,ginv) + rho=[TL[i]+TR[i]for i in range(h)]+[BL[i]+P[i]for i in range(h)] + a=[r[:]for r in rho];factors=[] + for j in range(2*h): + p=next(i for i in range(j,2*h)if a[i][j]) + if p!=j:a[j],a[p]=a[p],a[j];factors.append(('swap',j,p,None)) + if a[j][j]!=1: + c=1/a[j][j];a[j]=[c*x for x in a[j]];factors.append(('scale',j,None,c)) + for i in range(2*h): + if i!=j and a[i][j]: + c=-a[i][j];a[i]=[x+c*y for x,y in zip(a[i],a[j])];factors.append(('add',i,j,c)) + assert a==I(2*h) + def replay(omit=None): + a=I(2*h) + for z in reversed(range(len(factors))): + if z==omit:continue + kind,i,j,c=factors[z] + if kind=='swap':a[i],a[j]=a[j],a[i] + elif kind=='scale':a[i]=[x/c for x in a[i]] + else:a[i]=[x-c*y for x,y in zip(a[i],a[j])] + return a + assert replay()==rho + omit=next((i for i,f in enumerate(factors)if f[0]=='add'),0) # original: the first addition; a route without additions: the first factor + assert factors and replay(omit)!=rho + counts=dict(Counter(f[0]for f in factors));denoms=sorted({c.denominator for kind,i,j,c in factors if c is not None}) + serialization=[[kind,i,j,None if c is None else str(c)]for kind,i,j,c in factors] + return dict(factors=len(factors),factor_counts=counts,denominators=denoms, + factor_program_sha256=sha256(json.dumps(serialization,separators=(',',':')).encode()).hexdigest(), + exact_inverse_reconstruction=True,missing_addition_rejected=True) +def bill(x): + """x: dict with h,m,v,R,T,stock,literal(hist),ncopy,weighted,unit,fwd_row,inv_row,K,coarse,moment_module,route.""" + h,m,v,R,T,stock,ncopy=x['h'],x['m'],x['v'],x['R'],x['T'],x['stock'],x['ncopy'] + literal=Counter(x['literal']);E=sum(literal.values());mass=sum(r*c for r,c in literal.items()) + assert m==5*h and Q(max(literal),m)0 and delta1>0 + chain=[Q(384599,10**10)];gaps=[] + for j in range(3): + old=chain[-1];a=(1-c)*c+c*old;ds=dict(atom=c-a,borrowing=1-a-c,remainder=1-a-c*(1-old),stock=1-c);assert old0 + delta=min(ds.values());L=cutoff_log2(delta,coefficient);assert Q(L)*delta**2>=36 and Q(L)*delta>=2*(4+(coefficient-1).bit_length()) + gaps.append(dict(stage=j+1,minimum_gap=str(delta),cutoff_log2_at_charged_coefficient=str(L)));chain.append(a) + controls=[] + for name,test in [('zero cutoff gap',lambda:cutoff_log2(Q(0),coefficient)),('negative constant',lambda:cutoff_log2(Q(1,2),0))]: + try:test() + except AssertionError:controls.append(name) + else:raise AssertionError('bad finite cutoff accepted') + return dict(coefficient=coefficient,coefficient_bits=coefficient.bit_length(),low_matrix_power=d,strict_upper='q^'+str(d+1), + positive_rank_children=E,rank_mass=mass,weighted_additions=weighted,unit_expanded_additions=unit,route_families=J, + copy_erase_episodes=5*ncopy*T,payload_prefix_upper=payload,payload_prefix_bits=payload.bit_length(), + delta_tau_lower=str(delta_tau),delta_linear=str(delta1),bootstrap_chain=list(map(str,chain)),gaps=gaps, + row_reserve=dict(internal_coefficient=d+1,external_complex_coefficient=20161),route=x['route'],rejected_controls=controls) +def load_moment(): + s=importlib.util.spec_from_file_location('m',os.path.join(HERE,'..','..','pricing','moment.py'));m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def hist(x): return Counter({int(k):v for k,v in x.items() if v}) +if __name__=='__main__': + mod=load_moment() + if sys.argv[1]=='regression': + d=sys.argv[2]; raw=json.load(open(d+'/raw.json')); sc=json.load(open(d+'/scalar.json')); bk=json.load(open(d+'/banks.json'))['banks'] + ma=json.load(open(d+'/math.json'))['mathematics']; fin=json.load(open(d+'/finite.json')); gl=json.load(open(d+'/global_result.json')) + h=raw['h'];m=5*h;H=hist(raw['five_stage_profile']['histogram']) + for a,cnt in hist(raw.get('completion_rank_histogram',raw['auxiliary_entrance_rank_histogram'])).items(): + H[5*a]-=cnt + if not H[5*a]: del H[5*a] + T=bk['physical_replicas']; literal=Counter({r:T*c for r,c in H.items()}) + q=[int(i<3) for i in range(h)]; form=lambda i,j: Q(int(i==j))-Q(1,9) + x=dict(h=h,m=m,v=raw['v'],R=raw['physical_R'],T=T,stock=bk['literal_stock'],literal=literal,ncopy=h,deficit=4*raw['v']-5*h*(h-2), + weighted=sc['forward']['weighted_additions'],unit=sc['forward']['literal_unit_additions'],fwd_row=sc['forward']['max_intermediate_row_l1'], + inv_row=sc['inverse']['max_intermediate_row_l1'],K=bk['conservative_extra_selector_calls'],coarse=ma['bit_coarse'],moment_module=mod, + route=route_template(h,q,form)) + r=bill(x) + assert r['coefficient']==fin['q_power_bound']['coefficient'],(r['coefficient'],fin['q_power_bound']) + assert r['bootstrap_chain']==fin['bootstrap']['chain'] and r['delta_tau_lower']==fin['moment']['delta_tau_lower'] and r['delta_linear']==fin['moment']['delta_linear'] + assert r['route']['factor_counts']==fin['rational_route']['factor_counts'] and r['route']['factor_program_sha256']==fin['rational_route']['factor_program_sha256'] + assert r['route']['denominators']==[1,2,3,6] + print('PASS regression: on the p = 10 receipts in',d,'the generalized bill reproduces the coefficient',r['coefficient'], + ', the moment gaps, the bootstrap chain and the 40-dimensional route program (sha',r['route']['factor_program_sha256'][:12]+'...)') + else: + x=json.load(open(sys.argv[2])) + q=x['qstar']; form=lambda i,j: Q(int(i==j),2) # E8 form /2 in Construction-A coordinates + x['route']=route_template(x['h'],q,form); x['moment_module']=mod; x['literal']=hist(x['literal']) + # every port: route conjugated by its W(E8) reflection word (the original's coordinate permutations are free + # relabelings; here the isometry is a rational program and is charged as part of the port route) + w=json.load(gzip.open(x['word'],'rt')); Lw=w['lines']; h=x['h'] + ip=lambda a,b: Q(sum(u*t for u,t in zip(a,b)),2) + def refl(r): + return [[Q(int(i==j))-Q(r[i]*r[j],2)*2/ip(r,r) for j in range(h)] for i in range(h)] + isom={0:[[Q(int(i==j)) for j in range(h)] for i in range(h)]}; fr=[0] + while fr: + nx=[] + for a_ in fr: + for b_ in range(len(Lw)): + if b_ in isom or abs(ip(Lw[a_],Lw[b_]))!=1: continue + d_=[u-t for u,t in zip(Lw[a_],Lw[b_])] if ip(Lw[a_],Lw[b_])==1 else [u+t for u,t in zip(Lw[a_],Lw[b_])] + isom[b_]=mm(refl(d_),isom[a_]); nx.append(b_) + fr=nx + assert len(isom)==len(Lw) and Lw[0]==q + ports=[]; allden=set(); maxf=0 + for t,g in isom.items(): + ginv=[[g[j][i]*1 for j in range(h)] for i in range(h)] # G = I/2 is scalar, so g^-1 = g^T + assert mm(g,ginv)==[[Q(int(i==j)) for j in range(h)] for i in range(h)] + gq=[sum(g[i][j]*q[j] for j in range(h)) for i in range(h)]; assert gq==Lw[t] or gq==[-u for u in Lw[t]] + r_=route_template(h,q,form,g,ginv); allden|=set(r_['denominators']); maxf=max(maxf,r_['factors']) + assert all(d_&(d_-1)==0 for d_ in allden), allden # powers of two: units modulo every odd prime q + x['route']['all_ports']=dict(ports=len(isom),max_factors=maxf,denominators=sorted(allden)) + r=bill(x); r.pop('route') if False else None + json.dump({k:(v if not isinstance(v,Counter) else dict(v)) for k,v in r.items()},open(sys.argv[3],'w'),indent=1,default=str) + print('PASS finite bill (E8, m = %d): coefficient %d (%d bits) < 2^80, q-power bound %s, payload prefix %d bits < 104, delta_tau %s, reference route %s; all %d port routes exact elementary programs, at most %d factors, denominators %s (powers of two: units modulo every odd q)'%( + x['m'],r['coefficient'],r['coefficient_bits'],r['strict_upper'],r['payload_prefix_bits'],r['delta_tau_lower'][:14],r['route']['factor_counts'],r['route']['all_ports']['ports'],r['route']['all_ports']['max_factors'],r['route']['all_ports']['denominators'])) diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_k.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_k.py new file mode 100644 index 0000000000..8781815ee6 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/finite_k.py @@ -0,0 +1,154 @@ +"""Finite bill for the banked five-stage bit word, generalized from the source527/p10 finite_check.run (Dylan Crow, with +Anthropic Claude assistance). The arithmetic is the original line by line; the changes are explicit parameters: + * h, m = 5h, v, R, replicas T, literal stock, literal paid histogram, weighted/unit additions and the forward and + inverse cancellation-free row bounds are inputs (from this package's receipts); + * NCOPY, the copied-centre temporaries per invocation and 5*NCOPY copy/erase episodes per replica (the original + writes h for both, since the paired cube has h centres; the E8 word has 9 retained totals at h = 8); + * the 2h-dimensional rational route template: [[p*, k*], [k*, p*]] for the reference port line q* of the label + family under its form (original: a triple line under G = I - J/9, denominators 1,2,3,6; E8: a root line under + /2), recomputed and factored into elementary operations, exact inverse replay, omitted factor rejected; + * K, the conservative extra bank-selector calls, by the original formula 2*5*T*((live-1) + R*m*factors) with + factors = maxops + (m-1) + m (maxops of the actual charts; an ungauged word has only the identity chart, 0 ops). +Bridged word B_K (DaysSky, assisted with Claude): x['Kpairs'] (default 2) gives S = 2K + 1 invocations, m = S h, +S invocations' additions plus 6(K-1)v twin-bridge additions, route families 2S(2v + R) + 2Kv (each invocation routes +its 2v data and R helper roles in and out; the terminal exchange moves the 2Kv data roles), S*NCOPY*T copy/erase +episodes and the selector bill 2*S*T*(...) (receipts_k.py). K = 2 gives exactly finite_g.py's 5, 6v, 20v + 10R + 4v +and 5*NCOPY*T; the p = 10 regression path is five-stage and unchanged. +usage: python3 finite_k.py e8 RECEIPTS.json OUT.json | python3 finite_k.py regression P10_RECEIPT_DIR""" +from fractions import Fraction as Q +from collections import Counter +from hashlib import sha256 +import json, sys, os, importlib.util, gzip +HERE=os.path.dirname(os.path.abspath(__file__)) +def ceilq(x): return -((-x.numerator)//x.denominator) +def cutoff_log2(delta,C): + assert 0=1 + return max(1,ceilq(36/delta**2),ceilq(2*(4+(C-1).bit_length())/delta)) +def mm(A,B): return [[sum(A[i][k]*B[k][j] for k in range(len(B))) for j in range(len(B[0]))] for i in range(len(A))] +def route_template(h,q,form,g=None,ginv=None): + """[[g p* g^-1, g k*], [k* g^-1, p*]] with p* = q q^T G/; G given by form(x,y) on coordinate vectors + (bilinear); g = I (the original's reference port) unless a port isometry is given.""" + I=lambda n:[[Q(i==j)for j in range(n)]for i in range(n)] + Gq=[sum(form(i,j)*q[j] for j in range(h)) for i in range(h)]; nq=sum(q[i]*Gq[i] for i in range(h)) + P=[[Q(q[i])*Gq[j]/nq for j in range(h)]for i in range(h)] + K=[[Q(i==j)-P[i][j]for j in range(h)]for i in range(h)] + if g is None: TL,TR,BL=P,K,K + else: TL,TR,BL=mm(mm(g,P),ginv),mm(g,K),mm(K,ginv) + rho=[TL[i]+TR[i]for i in range(h)]+[BL[i]+P[i]for i in range(h)] + a=[r[:]for r in rho];factors=[] + for j in range(2*h): + p=next(i for i in range(j,2*h)if a[i][j]) + if p!=j:a[j],a[p]=a[p],a[j];factors.append(('swap',j,p,None)) + if a[j][j]!=1: + c=1/a[j][j];a[j]=[c*x for x in a[j]];factors.append(('scale',j,None,c)) + for i in range(2*h): + if i!=j and a[i][j]: + c=-a[i][j];a[i]=[x+c*y for x,y in zip(a[i],a[j])];factors.append(('add',i,j,c)) + assert a==I(2*h) + def replay(omit=None): + a=I(2*h) + for z in reversed(range(len(factors))): + if z==omit:continue + kind,i,j,c=factors[z] + if kind=='swap':a[i],a[j]=a[j],a[i] + elif kind=='scale':a[i]=[x/c for x in a[i]] + else:a[i]=[x-c*y for x,y in zip(a[i],a[j])] + return a + assert replay()==rho + omit=next((i for i,f in enumerate(factors)if f[0]=='add'),0) # original: the first addition; a route without additions: the first factor + assert factors and replay(omit)!=rho + counts=dict(Counter(f[0]for f in factors));denoms=sorted({c.denominator for kind,i,j,c in factors if c is not None}) + serialization=[[kind,i,j,None if c is None else str(c)]for kind,i,j,c in factors] + return dict(factors=len(factors),factor_counts=counts,denominators=denoms, + factor_program_sha256=sha256(json.dumps(serialization,separators=(',',':')).encode()).hexdigest(), + exact_inverse_reconstruction=True,missing_addition_rejected=True) +def bill(x): + """x: dict with h,m,v,R,T,stock,literal(hist),ncopy,weighted,unit,fwd_row,inv_row,K,coarse,moment_module,route.""" + h,m,v,R,T,stock,ncopy=x['h'],x['m'],x['v'],x['R'],x['T'],x['stock'],x['ncopy'] + literal=Counter(x['literal']);E=sum(literal.values());mass=sum(r*c for r,c in literal.items()) + KP=x.get('Kpairs',2);S=2*KP+1 + assert m==S*h and 00 and delta1>0 + chain=[Q(384599,10**10)];gaps=[] + for j in range(3): + old=chain[-1];a=(1-c)*c+c*old;ds=dict(atom=c-a,borrowing=1-a-c,remainder=1-a-c*(1-old),stock=1-c);assert old0 + delta=min(ds.values());L=cutoff_log2(delta,coefficient);assert Q(L)*delta**2>=36 and Q(L)*delta>=2*(4+(coefficient-1).bit_length()) + gaps.append(dict(stage=j+1,minimum_gap=str(delta),cutoff_log2_at_charged_coefficient=str(L)));chain.append(a) + controls=[] + for name,test in [('zero cutoff gap',lambda:cutoff_log2(Q(0),coefficient)),('negative constant',lambda:cutoff_log2(Q(1,2),0))]: + try:test() + except AssertionError:controls.append(name) + else:raise AssertionError('bad finite cutoff accepted') + return dict(coefficient=coefficient,coefficient_bits=coefficient.bit_length(),low_matrix_power=d,strict_upper='q^'+str(d+1), + positive_rank_children=E,rank_mass=mass,weighted_additions=weighted,unit_expanded_additions=unit,route_families=J, + copy_erase_episodes=S*ncopy*T,payload_prefix_upper=payload,payload_prefix_bits=payload.bit_length(), + delta_tau_lower=str(delta_tau),delta_linear=str(delta1),bootstrap_chain=list(map(str,chain)),gaps=gaps, + row_reserve=dict(internal_coefficient=t*(d+1),external_complex_coefficient=20161,**({'halving_degree':t} if t>1 else {})),route=x['route'],rejected_controls=controls) +def load_moment(): + s=importlib.util.spec_from_file_location('m',os.path.join(HERE,'..','..','pricing','moment.py'));m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def hist(x): return Counter({int(k):v for k,v in x.items() if v}) +if __name__=='__main__': + mod=load_moment() + if sys.argv[1]=='regression': + d=sys.argv[2]; raw=json.load(open(d+'/raw.json')); sc=json.load(open(d+'/scalar.json')); bk=json.load(open(d+'/banks.json'))['banks'] + ma=json.load(open(d+'/math.json'))['mathematics']; fin=json.load(open(d+'/finite.json')); gl=json.load(open(d+'/global_result.json')) + h=raw['h'];m=5*h;H=hist(raw['five_stage_profile']['histogram']) + for a,cnt in hist(raw.get('completion_rank_histogram',raw['auxiliary_entrance_rank_histogram'])).items(): + H[5*a]-=cnt + if not H[5*a]: del H[5*a] + T=bk['physical_replicas']; literal=Counter({r:T*c for r,c in H.items()}) + q=[int(i<3) for i in range(h)]; form=lambda i,j: Q(int(i==j))-Q(1,9) + x=dict(h=h,m=m,v=raw['v'],R=raw['physical_R'],T=T,stock=bk['literal_stock'],literal=literal,ncopy=h,deficit=4*raw['v']-5*h*(h-2), + weighted=sc['forward']['weighted_additions'],unit=sc['forward']['literal_unit_additions'],fwd_row=sc['forward']['max_intermediate_row_l1'], + inv_row=sc['inverse']['max_intermediate_row_l1'],K=bk['conservative_extra_selector_calls'],coarse=ma['bit_coarse'],moment_module=mod, + route=route_template(h,q,form)) + r=bill(x) + assert r['coefficient']==fin['q_power_bound']['coefficient'],(r['coefficient'],fin['q_power_bound']) + assert r['bootstrap_chain']==fin['bootstrap']['chain'] and r['delta_tau_lower']==fin['moment']['delta_tau_lower'] and r['delta_linear']==fin['moment']['delta_linear'] + assert r['route']['factor_counts']==fin['rational_route']['factor_counts'] and r['route']['factor_program_sha256']==fin['rational_route']['factor_program_sha256'] + assert r['route']['denominators']==[1,2,3,6] + print('PASS regression: on the p = 10 receipts in',d,'the generalized bill reproduces the coefficient',r['coefficient'], + ', the moment gaps, the bootstrap chain and the 40-dimensional route program (sha',r['route']['factor_program_sha256'][:12]+'...)') + else: + x=json.load(open(sys.argv[2])) + q=x['qstar']; form=lambda i,j: Q(int(i==j),2) # E8 form /2 in Construction-A coordinates + x['route']=route_template(x['h'],q,form); x['moment_module']=mod; x['literal']=hist(x['literal']) + # every port: route conjugated by its W(E8) reflection word (the original's coordinate permutations are free + # relabelings; here the isometry is a rational program and is charged as part of the port route) + w=json.load(gzip.open(x['word'],'rt')); Lw=w['lines']; h=x['h'] + ip=lambda a,b: Q(sum(u*t for u,t in zip(a,b)),2) + def refl(r): + return [[Q(int(i==j))-Q(r[i]*r[j],2)*2/ip(r,r) for j in range(h)] for i in range(h)] + isom={0:[[Q(int(i==j)) for j in range(h)] for i in range(h)]}; fr=[0] + while fr: + nx=[] + for a_ in fr: + for b_ in range(len(Lw)): + if b_ in isom or abs(ip(Lw[a_],Lw[b_]))!=1: continue + d_=[u-t for u,t in zip(Lw[a_],Lw[b_])] if ip(Lw[a_],Lw[b_])==1 else [u+t for u,t in zip(Lw[a_],Lw[b_])] + isom[b_]=mm(refl(d_),isom[a_]); nx.append(b_) + fr=nx + assert len(isom)==len(Lw) and Lw[0]==q + ports=[]; allden=set(); maxf=0 + for t,g in isom.items(): + ginv=[[g[j][i]*1 for j in range(h)] for i in range(h)] # G = I/2 is scalar, so g^-1 = g^T + assert mm(g,ginv)==[[Q(int(i==j)) for j in range(h)] for i in range(h)] + gq=[sum(g[i][j]*q[j] for j in range(h)) for i in range(h)]; assert gq==Lw[t] or gq==[-u for u in Lw[t]] + r_=route_template(h,q,form,g,ginv); allden|=set(r_['denominators']); maxf=max(maxf,r_['factors']) + assert all(d_&(d_-1)==0 for d_ in allden), allden # powers of two: units modulo every odd prime q + x['route']['all_ports']=dict(ports=len(isom),max_factors=maxf,denominators=sorted(allden)) + r=bill(x); r.pop('route') if False else None + json.dump({k:(v if not isinstance(v,Counter) else dict(v)) for k,v in r.items()},open(sys.argv[3],'w'),indent=1,default=str) + print('PASS finite bill (E8, K = %d, m = %d): coefficient %d (%d bits) < 2^80, q-power bound %s, payload prefix %d bits < 104, delta_tau %s, reference route %s; all %d port routes exact elementary programs, at most %d factors, denominators %s (powers of two: units modulo every odd q)'%( + x.get('Kpairs',2),x['m'],r['coefficient'],r['coefficient_bits'],r['strict_upper'],r['payload_prefix_bits'],r['delta_tau_lower'][:14],r['route']['factor_counts'],r['route']['all_ports']['ports'],r['route']['all_ports']['max_factors'],r['route']['all_ports']['denominators'])) diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_g.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_g.py new file mode 100644 index 0000000000..74eb582247 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_g.py @@ -0,0 +1,137 @@ +"""PR234's five-stage route and idle geometry with the label family as a parameter (Dylan Crow, with Anthropic Claude assistance; +generalizes the exact matrix checks of code/geometry527.py + global_lowering.Lowerer of the source527/p10 packages). + +The original fixes H = Q^h with G = I - J/9, a reference triple line q*, and port isometries given by coordinate +permutations pi (pi^-1 = pi^T). Here G, q* and the port isometries g_t (exact rational matrices with +g^T G g = G and g q* = +-q_t) are inputs; every formula is the original one with pi -> g and pi^T -> g^-1: + frame projector P_B = B^T (B G B^T)^-1 B G p* = q* q*^T G / , k* = I - p* + route rho(i,t) [[g p* g^-1, g k*], [k* g^-1, p*]] on blocks (0, i) of H^5, identity elsewhere; rho(0,t) = I + tau(i) exchange of blocks 0 and i; stage projector P (+) K (+) ... (+) K (K = k* on blocks 1..i) + data(i,kind) rho(i,t) * stage_projector(i, frame(kind)) * rho(i,t), kinds P (port line), K (its complement), H, 0 +Checks for every port t: rho^2 = I; P_t idempotent of trace 1; data(i-1,H) = data(i,P) and data(i-1,K) = data(i,0) +(i = 1..4); the eight idle boundary pairs (a, b) commute with a*b = a and gap b - a idempotent of trace +(2h-2, 2h-2, h-1, h-1, 2h+2, 2h+2, 4, 4); p (I - p) = 0. For the entrance census of the word (here: every helper +starts at frame 0, the single entrance class sigma = 0), the five-window completion: the tau-conjugates of +(I_h - P_sigma) (+) 0 are pairwise orthogonal and sum to I - completion(sigma); a duplicated window is rejected. +usage: python3 geometry_g.py e8 WORD.json[.gz] (E8 labels, all ports) + python3 geometry_g.py regression (paired-cube h = 20: equals the original literal formulas)""" +import sys, json, gzip, itertools, time +import sympy as sp +def eye(n): return sp.eye(n) +class Geo: + def __init__(self,h,G,qstar): + self.h=h; self.M=5*h; self.G=G; self.q=qstar + nq=(qstar.T*G*qstar)[0]; assert nq!=0 + self.pstar=qstar*(qstar.T*G)/nq; self.kstar=eye(h)-self.pstar + def frame_projector(self,B): + if B.rows==0: return sp.zeros(self.h) + return B.T*(B*self.G*B.T).inv()*B*self.G + def rho(self,stage,g,ginv): + h,M=self.h,self.M; I=eye(M) + if stage==0: return I + I[:h,:h]=g*self.pstar*ginv; I[stage*h:(stage+1)*h,stage*h:(stage+1)*h]=self.pstar + I[:h,stage*h:(stage+1)*h]=g*self.kstar; I[stage*h:(stage+1)*h,:h]=self.kstar*ginv + return I + def tau(self,stage): + I=eye(self.M) + if stage: + for j in range(self.h): I.row_swap(j,stage*self.h+j) + return I + def stage_projector(self,stage,P): + A=sp.zeros(self.M); A[:self.h,:self.h]=P + for j in range(1,stage+1): A[j*self.h:(j+1)*self.h,j*self.h:(j+1)*self.h]=self.kstar + return A + def check_port(self,qt,g,ginv): + h,M=self.h,self.M; I=eye(M); Z=sp.zeros(M) + assert g*ginv==eye(h) and g.T*self.G*g==self.G, 'port map is not a G-isometry' + assert g*self.q==qt or g*self.q==-qt, 'port map does not send q* to the port line' + routes=[self.rho(i,g,ginv) for i in range(5)] + assert all(r*r==I for r in routes) + P=self.frame_projector(qt.T); assert P*P==P and P.trace()==1 + Ph={'P':P,'K':eye(h)-P,'H':eye(h),'0':sp.zeros(h)} + cache={} + def data(i,kind): + if (i,kind) not in cache: cache[i,kind]=routes[i]*self.stage_projector(i,Ph[kind])*routes[i] + return cache[i,kind] + for i in range(1,5): + assert data(i-1,'H')==data(i,'P'); assert data(i-1,'K')==data(i,'0') + p=data(0,'P') + pairs=[(p,data(1,'H')),(Z,data(1,'K')),(data(2,'P'),data(3,'P')),(data(2,'0'),data(3,'0')), + (data(2,'H'),I),(data(2,'K'),I-p),(data(4,'H'),I),(data(4,'K'),I-p)] + ranks=[] + for a,b in pairs: + assert a*b==b*a==a; gap=b-a; assert gap*gap==gap; ranks.append(int(gap.trace())) + assert p*(I-p)==Z and p+(I-p)==I + return ranks,routes,data + def check_entrance(self,Psigma): + h,M=self.h,self.M; Z=sp.zeros(M) + completion=sp.diag(*([Psigma]*5)); residual=eye(M)-completion + assert completion*completion==completion and completion.trace()==5*Psigma.trace() + actual=[] + for i in range(5): + t=self.tau(i); local=sp.zeros(M); local[:h,:h]=eye(h)-Psigma; actual.append(t*local*t) + assert sum(actual,Z)==residual + assert all(a*b==Z for i,a in enumerate(actual) for j,b in enumerate(actual) if i!=j) + assert sum(actual[:4]+[actual[3]],Z)!=residual + return True +def e8(word): + c=json.load(gzip.open(word,'rt') if word.endswith('.gz') else open(word)) + assert c['form']=='/2' and c['h']==8 + h=8; G=eye(h)/2; L=[sp.Matrix(x) for x in c['lines']]; v=len(L) + ip=lambda a,b:(a.T*G*b)[0] + def refl(r): return eye(h)-r*(r.T*G)*2/ip(r,r) # s_r(x) = x - 2/ r, a G-isometry and an involution + star=0; geo=Geo(h,G,L[star]) + # port isometries: products of root reflections (BFS over lines), g q* = +-q_t + isom={star:(eye(h),[])}; frontier=[star] + while frontier: + nxt=[] + for a in frontier: + for r in range(v): + if r in (a,) : continue + if abs(ip(L[a],L[r]))==1: + d=L[a]-L[r] if ip(L[a],L[r])==1 else L[a]+L[r] # a root with s_d(q_a) = +-q_r + S=refl(d); b=r + if b not in isom: + g=S*isom[a][0]; isom[b]=(g,isom[a][1]+[d]); nxt.append(b) + frontier=nxt + assert len(isom)==v + idle=None; t0=time.time() + for t in range(v): + g,word_=isom[t]; ginv=g.inv() + ranks,_,_=geo.check_port(L[t],g,ginv) + if idle is None: idle=ranks + assert ranks==idle==[2*h-2,2*h-2,h-1,h-1,2*h+2,2*h+2,4,4],ranks + if t%20==0: print(' port %d/%d checked (%d reflections) %.0fs'%(t+1,v,len(word_),time.time()-t0),flush=True) + # entrance census of the word: every helper starts at the zero frame + nreg=2*v+c['R']; starts={c['start'][r] for r in range(2*v,nreg)}; assert starts=={c['start'][v]} and len(c['frames'][c['start'][v]])==0 + geo.check_entrance(sp.zeros(h)) + print('PASS E8 five-stage geometry: all %d ports (W(E8) reflection words as port isometries), routes involutive, stage boundaries chained,' + ' idle gap ranks %s, D_I D_P identity; entrance census {0: %d helpers}: five-window completion exact, duplicate window rejected'%(v,idle,c['R'])) +def regression(): + """paired-cube h = 20: the generalized formulas with g = pi equal the original literal ones (global_lowering.Lowerer).""" + h=20; G=eye(h)-sp.ones(h)/9; qstar=sp.Matrix([int(i<3) for i in range(h)]); geo=Geo(h,G,qstar) + def original_rho(stage,q): + I=sp.eye(5*h) + if stage==0: return I + rest=[j for j in range(h) if j not in q]; permutation=list(q)+rest + pi=sp.zeros(h) + for j,dst in enumerate(permutation): pi[dst,j]=1 + pstar=qstar*(qstar.T*G)/2; p=pi*pstar*pi.T; kstar=sp.eye(h)-pstar + I[:h,:h]=p; I[stage*h:(stage+1)*h,stage*h:(stage+1)*h]=pstar + I[:h,stage*h:(stage+1)*h]=pi*kstar; I[stage*h:(stage+1)*h,:h]=kstar*pi.T + return I,pi + for q in [(0,2,4),(1,7,13),(5,11,19)]: + ranks_ok=None + for i in range(5): + Io,pi=original_rho(i,q) if i else (sp.eye(5*h),None) + if i==0: continue + assert geo.rho(i,pi,pi.T)==Io + _,pi=original_rho(1,q) + qt=sp.Matrix([int(j in q) for j in range(h)]) + ranks,_,_=geo.check_port(qt,pi,pi.T) + assert ranks==[2*h-2,2*h-2,h-1,h-1,2*h+2,2*h+2,4,4] + print('PASS regression: on paired-cube labels (h = 20, G = I - J/9) the generalized routes equal the original literal' + ' rho for 3 ports and every stage, and give idle ranks (38, 38, 19, 19, 42, 42, 4, 4)') +if __name__=='__main__': + if sys.argv[1]=='e8': e8(sys.argv[2]) + else: regression() diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_k.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_k.py new file mode 100644 index 0000000000..2a05298081 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/geometry_k.py @@ -0,0 +1,163 @@ +"""PR234's route and idle geometry for the bridged word B_K (DaysSky, assisted with Claude), generalizing PR #370's +geometry_g.py (five stages) to 2K + 1 stages. Every formula is geometry_g.py's; only the number of blocks and the idle +chronology change. + + H^S with S = 2K + 1 blocks, ambient form G (+) ... (+) G; p* = q* q*^T G / , k* = I - p* + route rho(i,t) [[g p* g^-1, g k*], [k* g^-1, p*]] on blocks (0, i), identity elsewhere; rho(0,t) = I (i < S) + stage projector P (+) K (+) ... (+) K (K = k* on blocks 1..i) + data(i,kind) rho(i,t) * stage_projector(i, frame(kind)) * rho(i,t), kinds P (port line), K, H, 0 +Checks for every port t: rho^2 = I; data(i-1,H) = data(i,P) and data(i-1,K) = data(i,0) for i = 1..S-1; the idle +boundary pairs of B_K (PR #363's bridged.py chronology), each commuting with a*b = a and an idempotent gap whose rank +equals bridged.check(K, h)'s idle climb: + pair q = 2..K, X: (p, data(2q-3,H)) and (data(2q-2,P), data(2q-1,P)); Y: (0, data(2q-3,K)) and (data(2q-2,0), data(2q-1,0)) + pair 1, final: (data(2,H), I) and (data(2,K), I - p); pair q, final: (data(2q,H), I) and (data(2q,K), I - p) +For K = 2 this is geometry_g.py's list of eight pairs, in the same order. Every gap of rank above floor((m - 1)/2) +gets an explicit intermediate frame Q = b - D, D a sum of mutually orthogonal E8 root projectors r r^T G/ in a +diagonal block where the gap is block-diagonal (dyadic entries only, so the prime-witness set stays {2}): +a Q = Q a = a, Q b = b Q = Q, Q^2 = Q, ranks (split, rest), so the paid children obey the half-shrink guard +2 max child < m. Entrance census (every helper starts at frame 0): the S tau-conjugates of +(I_h - P_sigma) (+) 0 are pairwise orthogonal and sum to I - completion(sigma); a duplicated window is rejected. +With the third argument 'unsplit' no climb is split: the idle children are the whole climbs, and the least halving +degree t (m^t > 2 max child^t) is reported instead of the half-shrink guard. +usage: python3 geometry_k.py K WORD.json[.gz] [unsplit]""" +import sys, os, json, gzip, time +import sympy as sp +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'complex', 'code')) +import bridged +def eye(n): return sp.eye(n) +class Geo: + def __init__(self, h, G, qstar, S): + self.h = h; self.S = S; self.M = S * h; self.G = G; self.q = qstar + nq = (qstar.T * G * qstar)[0]; assert nq != 0 + self.pstar = qstar * (qstar.T * G) / nq; self.kstar = eye(h) - self.pstar + self.GG = sp.diag(*([G] * S)) + def frame_projector(self, B): + if B.rows == 0: return sp.zeros(self.h) + return B.T * (B * self.G * B.T).inv() * B * self.G + def rho(self, stage, g, ginv): + h, M = self.h, self.M; I = eye(M) + if stage == 0: return I + I[:h, :h] = g * self.pstar * ginv; I[stage*h:(stage+1)*h, stage*h:(stage+1)*h] = self.pstar + I[:h, stage*h:(stage+1)*h] = g * self.kstar; I[stage*h:(stage+1)*h, :h] = self.kstar * ginv + return I + def tau(self, stage): + I = eye(self.M) + if stage: + for j in range(self.h): I.row_swap(j, stage * self.h + j) + return I + def stage_projector(self, stage, P): + A = sp.zeros(self.M); A[:self.h, :self.h] = P + for j in range(1, stage + 1): A[j*self.h:(j+1)*self.h, j*self.h:(j+1)*self.h] = self.kstar + return A + def intermediate(self, a, b, split, lines): + """Q = b - D with D a sum of mutually G-orthogonal root projectors r r^T G/ (dyadic) inside diagonal blocks + on which the gap b - a is block-diagonal; rank(Q - a) = split.""" + h, M = self.h, self.M; gap = b - a; need = int(gap.trace()) - split; D = sp.zeros(M); got = 0 + proj = [r * (r.T * self.G) / (r.T * self.G * r)[0] for r in lines] + for j in range(self.S - 1, 0, -1): + blk = slice(j * h, (j + 1) * h) + off = gap.copy(); off[blk, blk] = sp.zeros(h) + if not (off[blk, :].is_zero_matrix and off[:, blk].is_zero_matrix): continue + Gj = gap[blk, blk]; chosen = [] + for e in proj: + if got == need: break + if Gj * e == e and all(e * f == sp.zeros(h) for f in chosen): + chosen.append(e); D[blk, blk] = D[blk, blk] + e; got += 1 + if got == need: break + assert got == need, ('no dyadic intermediate frame', need, got) + Q = b - D + assert D * D == D and D * a == a * D == sp.zeros(M) and b * D == D * b == D and Q * Q == Q + assert a * Q == Q * a == a and Q * b == b * Q == Q + assert int((Q - a).trace()) == split and int((b - Q).trace()) == need + assert all(sp.Rational(x).q & (sp.Rational(x).q - 1) == 0 for x in Q), 'intermediate frame not dyadic' + return Q + def check_port(self, K, qt, g, ginv, split, lines): + h, M, S = self.h, self.M, self.S; I = eye(M); Z = sp.zeros(M) + assert g * ginv == eye(h) and g.T * self.G * g == self.G, 'port map is not a G-isometry' + assert g * self.q == qt or g * self.q == -qt, 'port map does not send q* to the port line' + routes = [self.rho(i, g, ginv) for i in range(S)] + assert all(r * r == I for r in routes) + P = self.frame_projector(qt.T); assert P * P == P and P.trace() == 1 + Ph = {'P': P, 'K': eye(h) - P, 'H': eye(h), '0': sp.zeros(h)} + cache = {} + def data(i, kind): + if (i, kind) not in cache: cache[i, kind] = routes[i] * self.stage_projector(i, Ph[kind]) * routes[i] + return cache[i, kind] + for i in range(1, S): + assert data(i-1, 'H') == data(i, 'P'); assert data(i-1, 'K') == data(i, '0') + p = data(0, 'P'); pairs = [] + for q in range(2, K + 1): + pairs += [(p, data(2*q-3, 'H')), (Z, data(2*q-3, 'K')), (data(2*q-2, 'P'), data(2*q-1, 'P')), (data(2*q-2, '0'), data(2*q-1, '0'))] + pairs += [(data(2, 'H'), I), (data(2, 'K'), I - p)] + for q in range(2, K + 1): + pairs += [(data(2*q, 'H'), I), (data(2*q, 'K'), I - p)] + ranks = []; children = [] + for a, b in pairs: + assert a * b == b * a == a; gap = b - a; assert gap * gap == gap; r = int(gap.trace()); ranks.append(r) + if r > split: + Q = self.intermediate(a, b, split, lines); children += [split, r - split] + else: + children.append(r) + assert p * (I - p) == Z and p + (I - p) == I + return ranks, children + def check_entrance(self, Psigma): + h, M, S = self.h, self.M, self.S; Z = sp.zeros(M) + completion = sp.diag(*([Psigma] * S)); residual = eye(M) - completion + assert completion * completion == completion and completion.trace() == S * Psigma.trace() + actual = [] + for i in range(S): + t = self.tau(i); local = sp.zeros(M); local[:h, :h] = eye(h) - Psigma; actual.append(t * local * t) + assert sum(actual, Z) == residual + assert all(a * b == Z for i, a in enumerate(actual) for j, b in enumerate(actual) if i != j) + assert sum(actual[:S-1] + [actual[S-2]], Z) != residual + return True +def expected(K, h): + """idle climbs of bridged.check in the order of check_port's pair list (X and Y of each climb)""" + idle = bridged.check(K, h)['per_pair_idle']; out = [] + for q in range(2, K + 1): + a, b, _ = idle[q]; out += [a, a, b, b] + out += [idle[1][0]] * 2 + for q in range(2, K + 1): out += [idle[q][2]] * 2 + return out +def main(K, word, unsplit=False): + c = json.load(gzip.open(word, 'rt') if word.endswith('.gz') else open(word)) + assert c['form'] == '/2' and c['h'] == 8 + h = 8; S = 2 * K + 1; m = S * h; split = m if unsplit else (m - 1) // 2 + G = eye(h) / 2; L = [sp.Matrix(x) for x in c['lines']]; v = len(L) + ip = lambda a, b: (a.T * G * b)[0] + def refl(r): return eye(h) - r * (r.T * G) * 2 / ip(r, r) + star = 0; geo = Geo(h, G, L[star], S) + isom = {star: (eye(h), [])}; frontier = [star] + while frontier: + nxt = [] + for a in frontier: + for r in range(v): + if r == a: continue + if abs(ip(L[a], L[r])) == 1: + d = L[a] - L[r] if ip(L[a], L[r]) == 1 else L[a] + L[r] + if r not in isom: + isom[r] = (refl(d) * isom[a][0], isom[a][1] + [d]); nxt.append(r) + frontier = nxt + assert len(isom) == v + want = expected(K, h); idle = None; kids = None; t0 = time.time() + for t in range(v): + g, w_ = isom[t] + ranks, children = geo.check_port(K, L[t], g, g.inv(), split, L) + if idle is None: idle, kids = ranks, children + assert ranks == idle == want, (ranks, want) + assert children == kids and (unsplit or 2 * max(children) < m) + if t % 30 == 0: print(' port %d/%d checked (%d reflections) %.0fs' % (t + 1, v, len(w_), time.time() - t0), flush=True) + nreg = 2 * v + c['R']; starts = {c['start'][r] for r in range(2 * v, nreg)} + assert starts == {c['start'][v]} and len(c['frames'][c['start'][v]]) == 0 + geo.check_entrance(sp.zeros(h)) + lay = bridged.check(K, h, split=None if (unsplit or K <= 2) else split)['blocks_per_role_pair'] + t = 1 + while m ** t <= 2 * max(kids) ** t: t += 1 + assert sorted(kids) == sorted(lay * 2), (kids, lay) # X and Y of every role pair: PR #363's priced idle blocks + print('PASS E8 geometry in B_%d (%d stages, m = %d): all %d ports (W(E8) reflection words), routes involutive, %d stage boundaries chained,' + ' idle gap ranks %s (= bridged.py), paid idle children %s (%s); entrance census {0: %d helpers}:' + ' %d-window completion exact, duplicate window rejected' % (K, S, m, v, S - 1, idle, kids, + 'unsplit, halving degree %d' % t if unsplit else 'explicit dyadic intermediate frames, 2 x %d < %d' % (max(kids), m), c['R'], S)) + if unsplit: print(' unsplit: largest idle child %d of m = %d, least halving degree t = %d (%d^%d > 2 * %d^%d)' % (max(kids), m, t, m, t, max(kids), t)) +if __name__ == '__main__': + main(int(sys.argv[1]), sys.argv[2], len(sys.argv) > 3 and sys.argv[3] == 'unsplit') diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/gram_frames.py b/research/e8-nine-stage-low-read/source381/code/bit/checkers/gram_frames.py new file mode 100644 index 0000000000..b740d47295 --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/gram_frames.py @@ -0,0 +1,54 @@ +"""Exact nondegeneracy and PR #315's prime-witness rule for every frame of a PR249-format word, with the ambient Gram +matrix as a parameter. Generalizes PR #346's exactnd_h.py and prime_new.py (Dylan Crow, with Anthropic Claude assistance). + --gram triple9 : the paired-cube form G = I - J/9, integer Gram 9 B G B^t = 9 B B^t - s s^t (exactnd_h/prime_new, verbatim) + --gram e8ham : the E8 form /2 in Construction-A (Hamming) coordinates, integer Gram 2 B G B^t = B B^t +Checks per frame: rank(B) = dim, A.B = 0 and |A| + dim = h (when A given), det(integer Gram) != 0 (exact Bareiss), and +the prime witness: |det| = residual * prod p^e over PR #315's allowed primes with 0 < residual < 2^80. With --new BASE +only frames absent from BASE are checked (prime_new.py's scope); otherwise every frame. +usage: python3 gram_frames.py WORDDIR --gram {triple9,e8ham} --h H [--new BASEDIR] [--positive]""" +import json, sys, argparse, importlib.util, os, collections +ap=argparse.ArgumentParser(); ap.add_argument('word'); ap.add_argument('--gram',required=True); ap.add_argument('--h',type=int,required=True) +ap.add_argument('--new'); ap.add_argument('--positive',action='store_true'); a=ap.parse_args() +HERE=os.path.dirname(os.path.abspath(__file__)) +s=importlib.util.spec_from_file_location('pw',os.path.join(HERE,'..','..','pricing','prime_witnesses.py')); pw=importlib.util.module_from_spec(s); s.loader.exec_module(pw) +def validate_record(row, dimension, determinant, allowed_primes): # PR #315 prime_check.validate_record, verbatim logic + assert type(row['dimension']) is int and type(row['determinant']) is int and type(row['residual']) is int, 'exact integer witness fields' + assert row['dimension'] == dimension and row['determinant'] == determinant != 0, 'exact determinant mismatch or singular basis' + assert 0 < row['residual'] < 2**80, 'retained prime lower bound' + product = row['residual'] + for prime, exponent in row['factors'].items(): + q = int(prime); assert q in allowed_primes and type(exponent) is int and exponent > 0, 'factor shape'; product *= q**exponent + assert product == abs(determinant), 'factor identity' +def gram(B): + if a.gram=='triple9': + s_=list(map(sum,B)); return [[9*sum(x*y for x,y in zip(B[i],B[j]))-s_[i]*s_[j] for j in range(len(B))] for i in range(len(B))] + if a.gram=='e8ham': + return [[sum(x*y for x,y in zip(B[i],B[j])) for j in range(len(B))] for i in range(len(B))] + raise SystemExit('unknown gram') +def rank_int(B): + M=[r[:] for r in B]; r=0 + for c in range(len(M[0]) if M else 0): + p=next((i for i in range(r,len(M)) if M[i][c]!=0),None) + if p is None: continue + M[r],M[p]=M[p],M[r] + for i in range(len(M)): + if i!=r and M[i][c]!=0: x,y=M[r][c],M[i][c]; M[i]=[u*x-w*y for u,w in zip(M[i],M[r])] + r+=1 + return r +fr=json.load(open(a.word+'/frames.json'))['frames'] +old=json.load(open(a.new+'/frames.json'))['frames'] if a.new else {} +keys=[k for k in fr if k not in old] +stats=collections.Counter(); primes=set(); bits=0; nonpos=0 +for k in keys: + B=fr[k]['B']; A=fr[k].get('A',[]); d=len(B); assert fr[k]['dim']==d + assert d==0 or rank_int(B)==d,('basis rank',k) + if A: assert all(sum(x*y for x,y in zip(r,b))==0 for r in A for b in B) and len(A)+d==a.h,('annihilator',k) + M=gram(B) if d else []; det=pw.det(M); assert det!=0,('degenerate frame',k) + if a.positive: # positive-definite ambient form: every leading principal minor positive + for j in range(1,d+1): + if pw.det([r[:j] for r in M[:j]])<=0: nonpos+=1; break + powers,residual=pw.factor_witness(det); row=dict(dimension=d,determinant=det,residual=residual,factors={p:e for p,e in powers.items() if e}) + validate_record(row,d,det,pw.PRIMES); primes.update(map(int,row['factors'])); bits=max(bits,abs(det).bit_length()); stats[d]+=1 +assert nonpos==0 +print('PASS %s Gram: %d frames checked, all nondegenerate%s; prime witnesses valid; max determinant bits %d; primes %s; by dim %s'%( + a.gram,sum(stats.values()),' and positive definite' if a.positive else '',bits,sorted(primes),dict(sorted(stats.items())))) diff --git a/research/e8-nine-stage-low-read/source381/code/bit/checkers/json.hpp b/research/e8-nine-stage-low-read/source381/code/bit/checkers/json.hpp new file mode 100644 index 0000000000..82d69f7c5d --- /dev/null +++ b/research/e8-nine-stage-low-read/source381/code/bit/checkers/json.hpp @@ -0,0 +1,25526 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_DIAGNOSTIC_POSITIONS + #define JSON_DIAGNOSTIC_POSITIONS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_DIAGNOSTIC_POSITIONS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#ifdef JSON_HAS_CPP_17 + #include // optional +#endif +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2016 - 2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) + #define JSON_HAS_CPP_23 + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows calling any std function as if (e.g., with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // char_traits +#include // tuple +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template +struct char_traits : std::char_traits +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& +is_complete_type < +detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template