Compare commits

...

85 commits

Author SHA1 Message Date
igneum-labs
72d0a9abbf adv-accept: sweep closed at 796,042 accepted programs, box-hours 15.1, shard logs and frontiers filed
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 08:47:33 +00:00
igneum-labs
60e21a2b1e adv-accept: build-1 reversal, s05b yield to the F1 flush test, re-queues at 04:58 BST
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 03:59:14 +00:00
igneum-labs
0ce132186f adv-accept: s01e and s07c moved to build-1 (no-gaps rule), box-hours 10.6 at 04:54 BST
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 03:56:48 +00:00
igneum-labs
c5ea59d802 adv-accept: line 16 ruling (run on to 16 box-hours, then end at the frontiers)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 02:33:46 +00:00
igneum-labs
f02479f512 adv-accept: 03:25 BST reading (408,067 programs, box-hours 9.2), s09b yield to Q4d, re-queues
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 02:26:14 +00:00
igneum-labs
3e72f89766 adv-accept: box-hours reading 7.4 at 01:40 BST, row 90 count in the standing table
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:36:29 +00:00
igneum-labs
58593acec5 adv-accept: row 90 complete at 20,000 seeds (second half merged, log and rows)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:35:29 +00:00
igneum-labs
241943ab17 adv-accept report: ledger 01:25 BST, the four box-2 shards re-queued
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:25:57 +00:00
igneum-labs
52261a2ffc adv-accept report: ledger 01:14 BST, build-1 leases gave up; row 90's second half and five shards moved to box 2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:14:21 +00:00
igneum-labs
92fc117f9f adv-accept report: the three tail seeds live and at 2^20 (228763 the ninth hot set, refused at 0.9809); logs copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:13:08 +00:00
igneum-labs
5d80d2f854 adv-accept report: ledger 01:07 BST, the v5 runs are not in the pool listing; three tail seeds running live
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:07:49 +00:00
igneum-labs
8711a10e72 adv-accept report: count refreshed to 269,250 (01:08 BST); three new tail seeds queued
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:06:47 +00:00
igneum-labs
b8c6d36c2b adv-accept report: ledger 01:04 BST, two holders ended for the class v5 release-class tests
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 00:05:32 +00:00
igneum-labs
e77d32154f adv-accept report: the 00:00 BST reading (182,646 programs; pool state at 23:50; base rate final for tonight)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:51:41 +00:00
igneum-labs
54bd9da6bf adv-accept report: ledger 23:28 BST, yield on box 2 to the class-v5 c3 reading
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:29:16 +00:00
igneum-labs
d2ba2cf01a adv-accept report: the 00:00 BST reading drafted at 23:27 (153,158 programs; count and pool state refreshed at the hour)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:26:21 +00:00
igneum-labs
a22c4bc71c adv-accept report: row 90 result (10,000 seeds), the four deepest seeds against the 0.995 floor, six false refusals of nine; logs and rows copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:24:34 +00:00
igneum-labs
aa6b6c74ff adv-accept report: ledger 23:22 BST, gap-deep4 holding cores on box 2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:22:19 +00:00
igneum-labs
7924ef4765 adv-accept report: ledger 23:20 BST (gap-deep4 given cores; box-2 binary note)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:21:08 +00:00
igneum-labs
6a0a618d0a adv-accept report: the four deepest seeds of 143,734 live (three clean, 29307 a single-item third shape); log copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:19:54 +00:00
igneum-labs
b3330973ef adv-accept report: adv-cache-2's rotation correction and warp-uniform sub-class recorded
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:16:50 +00:00
igneum-labs
cf7531bffc adv-accept report: two mechanisms (the near-saturated-source hot sets against adv-cache-2's rotation class), with the R check
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:15:18 +00:00
igneum-labs
e56eb6850c adv-accept report: ledger 23:12 BST, the deep-4 chain holds cores on box 2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:13:30 +00:00
igneum-labs
07e5f81e55 adv-accept report: ledger 23:10 BST, the four deep-tail seeds queued ahead of the shards
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:12:07 +00:00
igneum-labs
14f7a6cd7d adv-accept report: base rate over 143,734 accepted programs; four deep-tail seeds queued
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:11:06 +00:00
igneum-labs
1b658814ef adv-accept report: the five deepest seeds against the 0.995 floor (three false refusals, one true pass); log copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:09:23 +00:00
igneum-labs
da931aebfe adv-accept report: ledger 23:07 BST, the two deliverables moved to box 2 and holding cores
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:08:00 +00:00
igneum-labs
5950c42363 adv-accept report: ledger 23:05 BST, row 90 and the five ratios put ahead of the shards on build-1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:06:01 +00:00
igneum-labs
0327142a6c adv-accept report: ledger 23:03 BST, box-2 shards re-queued after the class v5 work cleared
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:04:10 +00:00
igneum-labs
2ba22a476a adv-accept report: ledger 22:43 BST (one shard beside the F8 halves; the self-match slip recorded)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:44:23 +00:00
igneum-labs
78768a31b4 adv-accept report: 122960 against the 0.995 floor (refused at site 12, 0.9824); eight of eight hot sets refused
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:42:09 +00:00
igneum-labs
b9d97ad712 adv-accept report: row-90 halves re-queued with the pre-emption-safe binary; box-2 shards re-queue on v5 clear
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:25:09 +00:00
igneum-labs
4b49e5e4ac adv-accept report: pre-emption rule of 22:21 BST and the census made pre-emption-safe
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:23:40 +00:00
igneum-labs
fecc8c7f7a adv-accept: attempts census writes rows as they land and prints running per-part totals (pre-emption at any size)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:23:14 +00:00
igneum-labs
89fdf80cd3 adv-accept report: ledger of the 22:20 BST yield on build-1 (row 90 lost at 12,500 and re-queued as halves)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:20:32 +00:00
igneum-labs
6db34a7668 adv-accept report: ledger of the 22:07 to 22:18 BST yield to the class v5 F8 gate
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:18:48 +00:00
igneum-labs
b46713c42b adv-accept report: the five deepest tail seeds live (122960 a hot set, four clean); board tally 8 of 30
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:06:09 +00:00
igneum-labs
2f0be382a7 adv-accept report: ledger, the five new lowest seeds queued live and at 2^20
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:55:14 +00:00
igneum-labs
0b215adcd5 adv-accept report: base rate over 88,051 accepted programs; five new lowest seeds queued
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:54:03 +00:00
igneum-labs
3560d17723 adv-accept report: ledger, room made for row 90 at 21:50 BST
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:52:43 +00:00
igneum-labs
7c43805ccb adv-accept report: seed 170 against the 0.995 floor (refused); all seven hot sets refused, three mild residuals
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:49:24 +00:00
igneum-labs
a3818e4ea1 adv-accept report: 1738 against the 0.995 floor (refused), gap-hot3 log
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:39:08 +00:00
igneum-labs
64fbc1ef58 adv-accept report: ledger of the 21:26 to 21:36 BST clearances and re-queues
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:38:02 +00:00
igneum-labs
ed2f0a7d8a adv-accept report: the 0.995 floor against eight measured concentrations (five refused, three residuals incl. Devnet 3 epoch 0); logs copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:37:20 +00:00
igneum-labs
184c763259 adv-accept report: lowest 25 complete (17 beyond, 7 hot sets), a second concentration shape without saturation; logs copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:32:22 +00:00
igneum-labs
0e53e1b691 adv-accept: gap tool takes raw hex seeds and a day (--hex epoch:era:label, --day)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:30:44 +00:00
igneum-labs
67166f179f adv-accept report: random 20 complete (1 beyond, 0 hot sets), lowest 20 (13 beyond, 4 hot sets incl. 1738)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:25:38 +00:00
igneum-labs
699a9731e8 adv-accept report: box-2 queue re-submitted at 21:13 BST
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:13:35 +00:00
igneum-labs
afdc15ac21 adv-accept report: two more hot sets (4346, 5245) with attribution; board tally 3 of 33
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:12:53 +00:00
igneum-labs
d933a2f7f3 adv-accept report: where the pass stands at 20:50 BST (29,032 programs, 29 live rows, partials named)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:48:37 +00:00
igneum-labs
ea94c7915c adv-accept report: base rate over 29,032 accepted programs; partial live logs copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:46:58 +00:00
igneum-labs
fe09c95efc adv-accept report: census seen holding cores on box 2 at 20:44 BST
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:45:01 +00:00
igneum-labs
1df58fc357 adv-accept report: build-1 waiters re-submitted under the ranked lease at 32 threads
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:43:45 +00:00
igneum-labs
a3af7f2aa6 adv-accept report: class v5 row relabelled (confirming row for the (c''') floor), gap-rep8 complete, yield and withdrawal on box 2 recorded
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:42:55 +00:00
igneum-labs
42f74eda05 adv-accept report: the 100767 hot set survives class v5 unchanged (row, log); Q1 board row updated
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:39:08 +00:00
igneum-labs
99593f8dea adv-accept report: yield test by owner (class-v5, or attack-pass with v5 in the label; never adv-)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:32:27 +00:00
igneum-labs
9dbd6b4191 adv-accept report: yield rule widened to any class-v5 or v5-labelled waiter
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:31:09 +00:00
igneum-labs
e4369c25d0 adv-accept report: 20:28 BST pool state (all 15 leases waiting, 0 free cores)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:29:02 +00:00
igneum-labs
8aa69fd835 adv-accept report: row 90 queued through the lease at 20:27 BST
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:27:41 +00:00
igneum-labs
8b761c4768 adv-accept report: re-queue through lease pool recorded (order, boxes, times, leases)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:26:03 +00:00
igneum-labs
bf7ab4c6d8 adv-accept: run-box.sh through lease pool (no sweep.lock); attempts census prints progress
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:24:45 +00:00
igneum-labs
608020ab8c adv-accept report: final tonight's live rows (12 lowest: 5 beyond; 11 random: 1 beyond), counts corrected
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:24:00 +00:00
igneum-labs
09c93df5b5 adv-accept report: ledger of the 20:21 BST kill and the re-queue through the lease
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:22:45 +00:00
igneum-labs
79afd57eee adv-accept report: widened rows at 21 programs, random base rate 1 of 10 beyond, 256-unit selector weak (5 of 11 false positives)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:19:41 +00:00
igneum-labs
684b29e27e adv-accept report: where the pass stands (box-hours, bounds reached, blocked, what a longer pass adds)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:06:13 +00:00
igneum-labs
ae050706c0 adv-accept report: widened live rows, partial: the selector has false positives (2 of the next 3 lowest are within 1.2x)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:05:18 +00:00
igneum-labs
f3f370e480 adv-accept report: Q2 BOUND over 54 programs (gap-50.log copied)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:04:14 +00:00
igneum-labs
63b752ab9d adv-accept: gap tool reports the share of reads on indices read 8 or more times (defender's question); report skeleton for the widened rows and the class-v5 row
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:00:31 +00:00
igneum-labs
596a2f0d03 adv-accept: class-v5 variant of the live harness (vendored class-v5 igneum-pow, the Devnet 3 v5 pack's state stream); run-box.sh takes the per-box sweep lock; rule change 19:55 BST recorded
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:57:38 +00:00
igneum-labs
8a290dee72 adv-accept: cryptanalysis reports excluded from the public export (research docs); report clocks in UK time
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:56:01 +00:00
igneum-labs
c97513dbc9 adv-accept report: reproducibility block, selector base rate over 16,337 programs, row 90 plant; status board updated
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:53:52 +00:00
igneum-labs
f534f245f8 adv-accept report: 2^24 confirmations of the four low-ratio seeds; logs copied
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:50:46 +00:00
igneum-labs
a1b7e085fa adv-accept report: Q2 stand-in gap first bound (plant fires, four programs agree to 2e-4)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:48:46 +00:00
igneum-labs
949e126e60 adv-accept: attempts command (row 90: per-part rejections, cap, last resort, forced-exhaust plant)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:47:44 +00:00
igneum-labs
31cb2c9663 adv-accept report: seed 100767 hot-set finding at 2^24 nonces, bounded; census baseline
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:45:47 +00:00
igneum-labs
a25619c068 adv-accept: gap tool compile fix (distinct count on a slice)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:45:16 +00:00
igneum-labs
d21d62ebc4 adv-accept: first live results (five low-ratio programs, plant and control), logs copied; Q2 gap tool
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:43:12 +00:00
igneum-labs
98609c3f02 adv-accept: logs, pid and result files under /srv/builds/_adv-adv-accept, outside the worktree mirror
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:39:35 +00:00
igneum-labs
36ba8a100a adv-accept: no yield, cores 8-95 at nice 10 (ruling 18:4x UTC); report times in UTC; merge build/master
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:33:54 +00:00
igneum-labs
0f912e88c2 Merge remote-tracking branch 'build/master' into adv-accept 2026-10-07 18:33:54 +00:00
igneum-labs
876a3d9c8e adv-accept: re-base onto build/master 2cd6b2fa noted, sharded sweep and live runs recorded
igneum-pow at HEAD is IDENTICAL to the frozen object a5d735b2 (and so is build/master's).
Shards 00 (box 2) and 01 (box 1) running under the yield script; shards 02..09 in the shared
queue; the adv-live const-item plant and its control running on box 1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:31:21 +00:00
igneum-labs
6f091d9ef4 Merge remote-tracking branch 'build/master' into adv-accept 2026-10-07 18:28:57 +00:00
igneum-labs
caa8564ec1 adv-accept: re-scope to the bypass lane, yield run script, sharded sweep, f8 harness as adv-live
Plan section 2.4 records the re-scope (Q1, Q2, Q5 here; Q3 and Q4 to the sibling lanes) and
the operating changes (both boxes, nice 10, the capacity layer's yield, queued sweeps). The
sweep is shardable (--seed-start), writes every row as it lands, counts the Q5 structure
and draws from the F8 label space so the unmodified f8 harness (src/live.rs, built as
adv-live) measures the live hot set of the same program. Devnet 3 epoch-0 program.json
copied read-only as an input.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:28:19 +00:00
igneum-labs
1347e8f6d5 adv-accept: harness, run script and report skeleton
The adv-accept harness crate (draw-path check, accepted-program sweep over class v4,
closed-form distinct and per-site ratio, plant hooks), the box-2 run script, and the
Deliverable-2 report with the status board. Draw path validated (shared devnet epoch-0
id a785001687d8688a). The plant fires on (a'). The 10k-seed sweep is running on box 2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:14:37 +00:00
igneum-labs
e724a4af44 adv-accept: attack plan for the acceptance rule, crate pinned to the frozen commit
Deliverable 1 of the internal adversarial pass on the program acceptance rule and
its generator (class v4 sub-version 3, frozen commit a5d735b2).

build/master's igneum-pow/ is NOT byte-identical to the frozen commit (6 files, 635
deletions: master stripped the v4 sub-version-3 code). To obey the outsider rule this
worktree's igneum-pow/ and proto-cuda/packs-ca3-v4/ are reset to the frozen commit, so
every build and run in this pass is against the frozen rule.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:06:04 +00:00
104 changed files with 47894 additions and 0 deletions

View file

@ -0,0 +1,34 @@
lease: holding 32 pool cores (49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80, waited 1 s, class adv): adv-accept attempts-10k-a
adv-accept attempts: seeds 2..10002 (10000), 32 threads, cap 256, force-exhaust false
progress: 500 of 10000 seeds in 41 s
progress: 1000 of 10000 seeds in 81 s
progress: 1500 of 10000 seeds in 128 s
progress: 2000 of 10000 seeds in 176 s
progress: 2500 of 10000 seeds in 223 s
progress: 3000 of 10000 seeds in 270 s
progress: 3500 of 10000 seeds in 319 s
progress: 4000 of 10000 seeds in 367 s
progress: 4500 of 10000 seeds in 416 s
progress: 5000 of 10000 seeds in 461 s
progress: 5500 of 10000 seeds in 512 s
progress: 6000 of 10000 seeds in 562 s
progress: 6500 of 10000 seeds in 608 s
progress: 7000 of 10000 seeds in 655 s
progress: 7500 of 10000 seeds in 700 s
progress: 8000 of 10000 seeds in 745 s
progress: 8500 of 10000 seeds in 794 s
progress: 9000 of 10000 seeds in 841 s
progress: 9500 of 10000 seeds in 894 s
progress: 10000 of 10000 seeds in 940 s
attempts: 10000 seeds in 940 s; 21119 rejected candidates, 10000 accepted, 0 exhausted (cap 256)
rejection by part over all candidates: (a) stale=2463 (11.7%) (b) no-inject=658 (3.1%) (a') unfresh=17585 (83.3%) (c) const-bit=86 (0.4%) (c) lane-const=0 (0.0%) (c) saturated=68 (0.3%) (c') sat-source=13 (0.1%) (c'') repeated=0 (0.0%) (c'') low-entropy=238 (1.1%) (c) bias=0 (0.0%) (c) distinct=8 (0.0%)
accepted-attempt histogram 0..24: [3227, 2201, 1435, 981, 732, 449, 308, 211, 137, 118, 64, 41, 34, 16, 12, 10, 9, 5, 3, 4, 1, 1, 0, 0, 1]
attempt 0: 10000 candidates, rejected 6773 (67.7%): (a) stale=790 (b) no-inject=199 (a') unfresh=5667 (c) const-bit=21 (c) saturated=19 (c') sat-source=3 (c'') low-entropy=72 (c) distinct=2
attempt 1: 6773 candidates, rejected 4572 (67.5%): (a) stale=561 (b) no-inject=151 (a') unfresh=3774 (c) const-bit=19 (c) saturated=9 (c') sat-source=2 (c'') low-entropy=53 (c) distinct=3
attempt 2: 4572 candidates, rejected 3137 (68.6%): (a) stale=340 (b) no-inject=103 (a') unfresh=2632 (c) const-bit=19 (c) saturated=14 (c') sat-source=2 (c'') low-entropy=27
attempt 3: 3137 candidates, rejected 2156 (68.7%): (a) stale=265 (b) no-inject=84 (a') unfresh=1756 (c) const-bit=9 (c) saturated=9 (c') sat-source=3 (c'') low-entropy=28 (c) distinct=2
mean accepted attempt 2.112; per-candidate rejection probability 0.6787; P(256 consecutive rejections) if independent = 7.977e-44
closed-form distinct-item mean of accepted programs: mean 127.9503 min 123.6704
wrote /srv/builds/_adv-adv-accept/attempts-10k-a.txt
attempts DONE
lease: released 32 pool cores after 941 s, exit 0

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,34 @@
lease: holding 32 pool cores (24,25,26,27,28,29,30,31,32,33,37,38,39,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61, waited 0 s, class adv): adv-accept attempts-10k-b
adv-accept attempts: seeds 10002..20002 (10000), 32 threads, cap 256, force-exhaust false
progress: 500 of 10000 seeds in 61 s; running rejections by part (a) stale=129 (b) no-inject=31 (a') unfresh=1011 (c) const-bit=4 (c) lane-const=0 (c) saturated=1 (c') sat-source=0 (c'') repeated=0 (c'') low-entropy=15 (c) bias=0 (c) distinct=0; accepted-attempt 0..11 [159, 102, 82, 38, 41, 22, 17, 11, 10, 4, 2, 2]; exhausted 0
progress: 1000 of 10000 seeds in 111 s; running rejections by part (a) stale=253 (b) no-inject=65 (a') unfresh=1935 (c) const-bit=7 (c) lane-const=0 (c) saturated=6 (c') sat-source=1 (c'') repeated=0 (c'') low-entropy=24 (c) bias=0 (c) distinct=0; accepted-attempt 0..11 [313, 216, 155, 88, 71, 48, 35, 16, 22, 9, 6, 3]; exhausted 0
progress: 1500 of 10000 seeds in 168 s; running rejections by part (a) stale=368 (b) no-inject=102 (a') unfresh=2824 (c) const-bit=12 (c) lane-const=0 (c) saturated=8 (c') sat-source=1 (c'') repeated=0 (c'') low-entropy=40 (c) bias=0 (c) distinct=1; accepted-attempt 0..11 [470, 333, 224, 138, 106, 68, 54, 26, 29, 16, 9, 5]; exhausted 0
progress: 2000 of 10000 seeds in 220 s; running rejections by part (a) stale=482 (b) no-inject=135 (a') unfresh=3677 (c) const-bit=15 (c) lane-const=0 (c) saturated=11 (c') sat-source=1 (c'') repeated=0 (c'') low-entropy=52 (c) bias=0 (c) distinct=1; accepted-attempt 0..11 [643, 436, 301, 174, 146, 92, 71, 40, 33, 18, 14, 6]; exhausted 0
progress: 2500 of 10000 seeds in 271 s; running rejections by part (a) stale=610 (b) no-inject=166 (a') unfresh=4565 (c) const-bit=21 (c) lane-const=0 (c) saturated=12 (c') sat-source=1 (c'') repeated=0 (c'') low-entropy=65 (c) bias=0 (c) distinct=1; accepted-attempt 0..11 [790, 560, 377, 225, 170, 115, 87, 57, 38, 25, 17, 9]; exhausted 0
progress: 3000 of 10000 seeds in 319 s; running rejections by part (a) stale=740 (b) no-inject=201 (a') unfresh=5515 (c) const-bit=27 (c) lane-const=0 (c) saturated=15 (c') sat-source=3 (c'') repeated=0 (c'') low-entropy=77 (c) bias=0 (c) distinct=3; accepted-attempt 0..11 [951, 665, 459, 268, 205, 130, 104, 70, 46, 29, 23, 9]; exhausted 0
progress: 3500 of 10000 seeds in 367 s; running rejections by part (a) stale=855 (b) no-inject=240 (a') unfresh=6415 (c) const-bit=29 (c) lane-const=0 (c) saturated=17 (c') sat-source=3 (c'') repeated=0 (c'') low-entropy=90 (c) bias=0 (c) distinct=5; accepted-attempt 0..11 [1114, 770, 534, 314, 237, 149, 124, 84, 51, 37, 24, 13]; exhausted 0
progress: 4000 of 10000 seeds in 415 s; running rejections by part (a) stale=969 (b) no-inject=265 (a') unfresh=7303 (c) const-bit=36 (c) lane-const=0 (c) saturated=23 (c') sat-source=4 (c'') repeated=0 (c'') low-entropy=103 (c) bias=0 (c) distinct=6; accepted-attempt 0..11 [1288, 869, 615, 359, 268, 170, 139, 97, 57, 42, 27, 15]; exhausted 0
progress: 4500 of 10000 seeds in 462 s; running rejections by part (a) stale=1079 (b) no-inject=302 (a') unfresh=8220 (c) const-bit=38 (c) lane-const=0 (c) saturated=25 (c') sat-source=4 (c'') repeated=0 (c'') low-entropy=113 (c) bias=0 (c) distinct=6; accepted-attempt 0..11 [1443, 979, 685, 407, 305, 197, 157, 108, 65, 49, 29, 16]; exhausted 0
progress: 5000 of 10000 seeds in 512 s; running rejections by part (a) stale=1215 (b) no-inject=331 (a') unfresh=9125 (c) const-bit=41 (c) lane-const=0 (c) saturated=28 (c') sat-source=5 (c'') repeated=0 (c'') low-entropy=121 (c) bias=0 (c) distinct=6; accepted-attempt 0..11 [1614, 1079, 754, 454, 340, 218, 176, 116, 76, 58, 36, 18]; exhausted 0
progress: 5500 of 10000 seeds in 573 s; running rejections by part (a) stale=1354 (b) no-inject=371 (a') unfresh=10069 (c) const-bit=42 (c) lane-const=0 (c) saturated=33 (c') sat-source=5 (c'') repeated=0 (c'') low-entropy=130 (c) bias=0 (c) distinct=7; accepted-attempt 0..11 [1776, 1186, 824, 502, 371, 240, 189, 129, 87, 64, 43, 21]; exhausted 0
progress: 6000 of 10000 seeds in 635 s; running rejections by part (a) stale=1494 (b) no-inject=400 (a') unfresh=10933 (c) const-bit=46 (c) lane-const=0 (c) saturated=37 (c') sat-source=5 (c'') repeated=0 (c'') low-entropy=138 (c) bias=0 (c) distinct=7; accepted-attempt 0..11 [1944, 1293, 892, 548, 417, 263, 199, 136, 93, 73, 48, 23]; exhausted 0
progress: 6500 of 10000 seeds in 694 s; running rejections by part (a) stale=1611 (b) no-inject=433 (a') unfresh=11850 (c) const-bit=49 (c) lane-const=0 (c) saturated=38 (c') sat-source=5 (c'') repeated=0 (c'') low-entropy=148 (c) bias=0 (c) distinct=7; accepted-attempt 0..11 [2107, 1401, 961, 592, 443, 290, 219, 153, 102, 79, 50, 26]; exhausted 0
progress: 7000 of 10000 seeds in 752 s; running rejections by part (a) stale=1733 (b) no-inject=468 (a') unfresh=12740 (c) const-bit=53 (c) lane-const=0 (c) saturated=41 (c') sat-source=5 (c'') repeated=0 (c'') low-entropy=157 (c) bias=0 (c) distinct=7; accepted-attempt 0..11 [2271, 1518, 1032, 640, 469, 307, 243, 164, 108, 85, 53, 28]; exhausted 0
progress: 7500 of 10000 seeds in 811 s; running rejections by part (a) stale=1867 (b) no-inject=505 (a') unfresh=13633 (c) const-bit=57 (c) lane-const=0 (c) saturated=44 (c') sat-source=5 (c'') repeated=0 (c'') low-entropy=169 (c) bias=0 (c) distinct=8; accepted-attempt 0..11 [2434, 1636, 1096, 683, 499, 337, 256, 182, 116, 88, 54, 32]; exhausted 0
progress: 8000 of 10000 seeds in 870 s; running rejections by part (a) stale=1996 (b) no-inject=532 (a') unfresh=14581 (c) const-bit=62 (c) lane-const=0 (c) saturated=47 (c') sat-source=6 (c'') repeated=0 (c'') low-entropy=183 (c) bias=0 (c) distinct=8; accepted-attempt 0..11 [2603, 1741, 1163, 721, 530, 364, 277, 193, 123, 94, 59, 39]; exhausted 0
progress: 8500 of 10000 seeds in 932 s; running rejections by part (a) stale=2111 (b) no-inject=565 (a') unfresh=15460 (c) const-bit=64 (c) lane-const=0 (c) saturated=48 (c') sat-source=6 (c'') repeated=0 (c'') low-entropy=191 (c) bias=0 (c) distinct=9; accepted-attempt 0..11 [2784, 1831, 1228, 771, 571, 388, 291, 202, 134, 100, 63, 40]; exhausted 0
progress: 9000 of 10000 seeds in 994 s; running rejections by part (a) stale=2247 (b) no-inject=591 (a') unfresh=16449 (c) const-bit=68 (c) lane-const=0 (c) saturated=49 (c') sat-source=7 (c'') repeated=0 (c'') low-entropy=205 (c) bias=0 (c) distinct=9; accepted-attempt 0..11 [2936, 1929, 1297, 825, 609, 412, 311, 222, 141, 106, 66, 42]; exhausted 0
progress: 9500 of 10000 seeds in 1053 s; running rejections by part (a) stale=2373 (b) no-inject=615 (a') unfresh=17292 (c) const-bit=75 (c) lane-const=0 (c) saturated=52 (c') sat-source=8 (c'') repeated=0 (c'') low-entropy=214 (c) bias=0 (c) distinct=10; accepted-attempt 0..11 [3106, 2038, 1377, 860, 644, 436, 328, 234, 144, 111, 73, 44]; exhausted 0
progress: 10000 of 10000 seeds in 1112 s; running rejections by part (a) stale=2489 (b) no-inject=640 (a') unfresh=18089 (c) const-bit=79 (c) lane-const=0 (c) saturated=55 (c') sat-source=9 (c'') repeated=0 (c'') low-entropy=221 (c) bias=0 (c) distinct=10; accepted-attempt 0..11 [3266, 2145, 1466, 909, 679, 457, 340, 241, 147, 116, 77, 45]; exhausted 0
attempts: 10000 seeds in 1112 s; 21592 rejected candidates, 10000 accepted, 0 exhausted (cap 256)
rejection by part over all candidates: (a) stale=2489 (11.5%) (b) no-inject=640 (3.0%) (a') unfresh=18089 (83.8%) (c) const-bit=79 (0.4%) (c) lane-const=0 (0.0%) (c) saturated=55 (0.3%) (c') sat-source=9 (0.0%) (c'') repeated=0 (0.0%) (c'') low-entropy=221 (1.0%) (c) bias=0 (0.0%) (c) distinct=10 (0.0%)
accepted-attempt histogram 0..28: [3266, 2145, 1466, 909, 679, 457, 340, 241, 147, 116, 77, 45, 43, 21, 11, 9, 10, 5, 7, 4, 0, 0, 1, 0, 0, 0, 0, 0, 1]
attempt 0: 10000 candidates, rejected 6734 (67.3%): (a) stale=732 (b) no-inject=211 (a') unfresh=5671 (c) const-bit=21 (c) saturated=15 (c') sat-source=3 (c'') low-entropy=79 (c) distinct=2
attempt 1: 6734 candidates, rejected 4589 (68.1%): (a) stale=545 (b) no-inject=149 (a') unfresh=3814 (c) const-bit=18 (c) saturated=13 (c') sat-source=3 (c'') low-entropy=42 (c) distinct=5
attempt 2: 4589 candidates, rejected 3123 (68.1%): (a) stale=362 (b) no-inject=89 (a') unfresh=2605 (c) const-bit=16 (c) saturated=11 (c') sat-source=1 (c'') low-entropy=38 (c) distinct=1
attempt 3: 3123 candidates, rejected 2214 (70.9%): (a) stale=280 (b) no-inject=63 (a') unfresh=1842 (c) const-bit=7 (c) saturated=3 (c'') low-entropy=19
mean accepted attempt 2.159; per-candidate rejection probability 0.6835; P(256 consecutive rejections) if independent = 4.867e-43
closed-form distinct-item mean of accepted programs: mean 127.9476 min 123.8296
rows were written to /srv/builds/_adv-adv-accept/attempts-10k-b.txt as they landed (10000 rows)
attempts DONE
lease: released 32 pool cores after 1112 s, exit 0

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,10 @@
adv-accept attempts: seeds 2..5 (3), 3 threads, cap 256, force-exhaust true
seed 2: EXHAUSTED at cap 8; last resort id e3f47f1ab9d3c562 attempt 8 op mix xor=19 load=16 add=7 rotl=7 mad=5 rotr=5 shfl=4 sub=1 shadow mix xor=90 add=46 mad=29 shfl=28 rotl=24 sub=20 rotr=19; rule verdict on it Ok("accept distinct_mean 128.000 sat 0 bias 63"); structure lossy_last 0 or 0 mul 0 mulhi 0 regs 8
seed 4: EXHAUSTED at cap 8; last resort id 592875c46032e6ad attempt 8 op mix xor=17 load=16 sub=9 shfl=6 add=5 rotl=4 rotr=4 mad=3 shadow mix xor=93 add=37 shfl=35 mad=28 rotr=22 rotl=21 sub=20; rule verdict on it Ok("accept distinct_mean 127.864 sat 0 bias 58"); structure lossy_last 0 or 0 mul 0 mulhi 0 regs 8
seed 3: EXHAUSTED at cap 8; last resort id 579a85a94f80826b attempt 8 op mix xor=17 load=16 rotl=10 shfl=7 add=6 mad=6 rotr=2 shadow mix xor=93 add=40 mad=31 shfl=26 rotl=23 sub=23 rotr=20; rule verdict on it Ok("accept distinct_mean 128.000 sat 0 bias 66"); structure lossy_last 0 or 0 mul 0 mulhi 0 regs 8
attempts: 3 seeds in 116 s; 17 rejected candidates, 0 accepted, 3 exhausted (cap 256)
rejection by part over all candidates: (a) stale=3 (17.6%) (b) no-inject=1 (5.9%) (a') unfresh=13 (76.5%) (c) const-bit=0 (0.0%) (c) lane-const=0 (0.0%) (c) saturated=0 (0.0%) (c') sat-source=0 (0.0%) (c'') repeated=0 (0.0%) (c'') low-entropy=0 (0.0%) (c) bias=0 (0.0%) (c) distinct=0 (0.0%)
accepted-attempt histogram 0..0: [0]
attempt 0: 2 candidates, rejected 2 (100.0%): (a) stale=1 (b) no-inject=1
mean accepted attempt 0.000; per-candidate rejection probability 1.0000; P(256 consecutive rejections) if independent = 1.000e0
attempts DONE

View file

@ -0,0 +1,74 @@
03:34 BST holder=1 accrued_min=5 box_hours=9.28
03:39 BST holder=1 accrued_min=10 box_hours=9.37
03:44 BST holder=1 accrued_min=15 box_hours=9.45
03:49 BST holder=1 accrued_min=20 box_hours=9.53
03:54 BST holder=1 accrued_min=25 box_hours=9.62
03:59 BST holder=1 accrued_min=30 box_hours=9.7
04:04 BST holder=1 accrued_min=35 box_hours=9.78
04:09 BST holder=1 accrued_min=40 box_hours=9.87
04:14 BST holder=1 accrued_min=45 box_hours=9.95
04:19 BST holder=1 accrued_min=50 box_hours=10.03
04:24 BST holder=1 accrued_min=55 box_hours=10.12
04:29 BST holder=1 accrued_min=60 box_hours=10.2
04:34 BST holder=1 accrued_min=65 box_hours=10.28
04:39 BST holder=1 accrued_min=70 box_hours=10.37
04:44 BST holder=1 accrued_min=75 box_hours=10.45
04:49 BST holder=1 accrued_min=80 box_hours=10.53
04:54 BST holder=1 accrued_min=85 box_hours=10.62
04:59 BST holder=1 accrued_min=90 box_hours=10.7
05:04 BST holder=1 accrued_min=95 box_hours=10.78
05:09 BST holder=1 accrued_min=100 box_hours=10.87
05:14 BST holder=1 accrued_min=105 box_hours=10.95
05:19 BST holder=1 accrued_min=110 box_hours=11.03
05:24 BST holder=1 accrued_min=115 box_hours=11.12
05:29 BST holder=1 accrued_min=120 box_hours=11.2
05:34 BST holder=1 accrued_min=125 box_hours=11.28
05:39 BST holder=1 accrued_min=130 box_hours=11.37
05:44 BST holder=1 accrued_min=135 box_hours=11.45
05:49 BST holder=1 accrued_min=140 box_hours=11.53
05:54 BST holder=1 accrued_min=145 box_hours=11.62
05:59 BST holder=1 accrued_min=150 box_hours=11.7
06:04 BST holder=1 accrued_min=155 box_hours=11.78
06:09 BST holder=1 accrued_min=160 box_hours=11.87
06:14 BST holder=1 accrued_min=165 box_hours=11.95
06:20 BST holder=1 accrued_min=170 box_hours=12.03
06:25 BST holder=1 accrued_min=175 box_hours=12.12
06:30 BST holder=1 accrued_min=180 box_hours=12.2
06:35 BST holder=1 accrued_min=185 box_hours=12.28
06:40 BST holder=1 accrued_min=190 box_hours=12.37
06:45 BST holder=1 accrued_min=195 box_hours=12.45
06:50 BST holder=1 accrued_min=200 box_hours=12.53
06:55 BST holder=1 accrued_min=205 box_hours=12.62
07:00 BST holder=1 accrued_min=210 box_hours=12.7
07:05 BST holder=1 accrued_min=215 box_hours=12.78
07:10 BST holder=1 accrued_min=220 box_hours=12.87
07:15 BST holder=1 accrued_min=225 box_hours=12.95
07:20 BST holder=1 accrued_min=230 box_hours=13.03
07:25 BST holder=1 accrued_min=235 box_hours=13.12
07:30 BST holder=1 accrued_min=240 box_hours=13.2
07:35 BST holder=1 accrued_min=245 box_hours=13.28
07:40 BST holder=1 accrued_min=250 box_hours=13.37
07:45 BST holder=1 accrued_min=255 box_hours=13.45
07:50 BST holder=1 accrued_min=260 box_hours=13.53
07:55 BST holder=1 accrued_min=265 box_hours=13.62
08:00 BST holder=1 accrued_min=270 box_hours=13.7
08:05 BST holder=1 accrued_min=275 box_hours=13.78
08:10 BST holder=1 accrued_min=280 box_hours=13.87
08:15 BST holder=1 accrued_min=285 box_hours=13.95
08:20 BST holder=1 accrued_min=290 box_hours=14.03
08:25 BST holder=1 accrued_min=295 box_hours=14.12
08:30 BST holder=1 accrued_min=300 box_hours=14.2
08:35 BST holder=1 accrued_min=305 box_hours=14.28
08:40 BST holder=1 accrued_min=310 box_hours=14.37
08:45 BST holder=1 accrued_min=315 box_hours=14.45
08:50 BST holder=1 accrued_min=320 box_hours=14.53
08:55 BST holder=1 accrued_min=325 box_hours=14.62
09:00 BST holder=1 accrued_min=330 box_hours=14.7
09:06 BST holder=1 accrued_min=335 box_hours=14.78
09:11 BST holder=1 accrued_min=340 box_hours=14.87
09:16 BST holder=1 accrued_min=345 box_hours=14.95
09:21 BST holder=1 accrued_min=350 box_hours=15.03
09:26 BST holder=1 accrued_min=355 box_hours=15.12
09:31 BST holder=0 accrued_min=355 box_hours=15.12
09:36 BST holder=0 accrued_min=355 box_hours=15.12
09:41 BST holder=0 accrued_min=355 box_hours=15.12

View file

@ -0,0 +1,26 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (42,43,44,45,46,47,48,49, waited 2041 s, class adv): adv-accept gap-122960
gap: seed 122960
gap: program id 4be7393ab6c84802 attempt 0 class mx8-era5800f15a+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 52; live distinct_mean 128.000 saturated 0 bias_max 54
gap: site 0 closed ratio 1.0000 (1040412) live ratio 1.0000 (1040386) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046542) live ratio 1.0000 (1046515) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046528) live ratio 1.0000 (1046577) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1040378) live ratio 1.0002 (1040587) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044478) live ratio 1.0000 (1044490) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1046515) live ratio 1.0000 (1046531) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046539) live ratio 1.0000 (1046516) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9999 (1046443) live ratio 1.0000 (1046528) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0001 (1046608) live ratio 0.9999 (1046470) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1040417) live ratio 1.0001 (1040519) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9999 (1044417) live ratio 1.0000 (1044430) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0001 (1044609) live ratio 1.0000 (1044477) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 0.9824 (1028093) live ratio 0.9822 (1027920) diff +0.0002; reads on indices read >= 8 times: closed 1.3090% live 1.3251%
gap: site 13 closed ratio 1.0001 (1044617) live ratio 1.0001 (1044598) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1040426) live ratio 1.0000 (1040402) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1040387) live ratio 1.0001 (1040465) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9824 live 0.9822; largest site gap -0.0002 at site 3; verdict under the 0.98 floor: closed accept live accept; 16.4 s
gap DONE 4be7393ab6c84802
lease: released 8 pool cores after 2060 s, exit 0

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,95 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (8,9,43,44,45,46,47,48, waited 667 s, class adv): adv-accept gap-deep4
gap: seed 148927
gap: program id c789fe5789ea71f0 attempt 0 class mx8-eracbf8f1c9+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 63; live distinct_mean 128.000 saturated 1 bias_max 69
gap: site 0 closed ratio 0.9814 (1027095) live ratio 0.9817 (1027358) diff -0.0003; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0001 (1040512) live ratio 1.0000 (1040419) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 0.9986 (1045107) live ratio 0.9988 (1045258) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1046567) live ratio 1.0000 (1046556) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046483) live ratio 1.0000 (1046504) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9999 (1046467) live ratio 1.0000 (1046489) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046541) live ratio 1.0000 (1046517) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1044478) live ratio 1.0000 (1044528) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1040340) live ratio 1.0001 (1040466) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0001 (1040476) live ratio 1.0001 (1040502) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1040400) live ratio 1.0001 (1040517) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 0.9999 (1046439) live ratio 1.0000 (1046523) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1040381) live ratio 1.0000 (1040371) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1044585) live ratio 0.9999 (1044368) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044438) live ratio 1.0000 (1044452) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1044502) live ratio 1.0000 (1044510) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9814 live 0.9817; largest site gap -0.0003 at site 0; verdict under the 0.98 floor: closed accept live accept; 11.0 s
gap DONE c789fe5789ea71f0
gap: seed 150347
gap: program id 23bc0a65fff5682b attempt 2 class mx8-era3d8e7f58+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 59; live distinct_mean 128.000 saturated 0 bias_max 60
gap: site 0 closed ratio 1.0000 (1044490) live ratio 1.0000 (1044433) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0001 (1040518) live ratio 1.0001 (1040500) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1044499) live ratio 1.0001 (1044534) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 0.9896 (1029530) live ratio 0.9894 (1029398) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046524) live ratio 1.0000 (1046562) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1044525) live ratio 0.9999 (1044387) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0002 (1040541) live ratio 1.0000 (1040361) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0001 (1040533) live ratio 1.0001 (1040469) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1046531) live ratio 1.0000 (1046482) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9998 (1044278) live ratio 0.9997 (1044187) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9999 (1040319) live ratio 1.0000 (1040397) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046540) live ratio 1.0001 (1046610) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0001 (1040460) live ratio 1.0001 (1040517) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046515) live ratio 0.9999 (1046450) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044439) live ratio 1.0000 (1044466) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1040417) live ratio 1.0000 (1040339) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9896 live 0.9894; largest site gap +0.0002 at site 6; verdict under the 0.98 floor: closed accept live accept; 11.4 s
gap DONE 23bc0a65fff5682b
gap: seed 29307
gap: program id 0243919aa1b29078 attempt 4 class mx8-erab0d4cf9d+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.999 saturated 0 bias_max 60; live distinct_mean 127.999 saturated 0 bias_max 54
gap: site 0 closed ratio 1.0001 (1040508) live ratio 1.0001 (1040447) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 0.9912 (1037356) live ratio 0.9913 (1037437) diff -0.0001; reads on indices read >= 8 times: closed 0.8769% live 0.8615%
gap: site 2 closed ratio 1.0000 (1044500) live ratio 1.0000 (1044474) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1044442) live ratio 0.9999 (1044420) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046518) live ratio 0.9999 (1046475) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1044567) live ratio 1.0000 (1044505) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1044492) live ratio 1.0000 (1044513) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1046523) live ratio 1.0000 (1046554) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9999 (1040296) live ratio 1.0000 (1040399) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1040424) live ratio 1.0001 (1040458) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1046625) live ratio 1.0000 (1046515) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 0.9997 (1046220) live ratio 0.9997 (1046179) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1040349) live ratio 1.0001 (1040470) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1044461) live ratio 1.0000 (1044529) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0001 (1040500) live ratio 0.9999 (1040298) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1040426) live ratio 0.9999 (1040294) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9912 live 0.9913; largest site gap +0.0002 at site 14; verdict under the 0.98 floor: closed accept live accept; 12.0 s
gap DONE 0243919aa1b29078
gap: seed 34501
gap: program id 8b048a553cb6de4c attempt 5 class mx8-era3869ca66+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 67; live distinct_mean 128.000 saturated 0 bias_max 63
gap: site 0 closed ratio 0.9929 (1033010) live ratio 0.9929 (1033029) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0002 (1040630) live ratio 1.0003 (1040669) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046531) live ratio 1.0001 (1046605) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1046582) live ratio 1.0000 (1046570) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044462) live ratio 1.0001 (1044603) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1044498) live ratio 1.0000 (1044515) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1044487) live ratio 1.0001 (1044617) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0001 (1040440) live ratio 1.0000 (1040347) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1046539) live ratio 1.0000 (1046519) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1044471) live ratio 1.0000 (1044445) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1046594) live ratio 1.0000 (1046551) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1044446) live ratio 0.9999 (1044358) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1044523) live ratio 1.0000 (1044451) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1040468) live ratio 1.0001 (1040488) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0001 (1046629) live ratio 1.0000 (1046546) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9998 (1040207) live ratio 1.0001 (1040470) diff -0.0003; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9929 live 0.9929; largest site gap -0.0003 at site 15; verdict under the 0.98 floor: closed accept live accept; 10.6 s
gap DONE 8b048a553cb6de4c
lease: released 8 pool cores after 722 s, exit 0

View file

@ -0,0 +1,92 @@
gap: seed 100767
gap: program id 9d68e6286fc817d4 attempt 2 class mx8-era763e5847+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.714 saturated 0 bias_max 82; live distinct_mean 127.730 saturated 1 bias_max 53
gap: site 0 closed ratio 0.9997 (1044181) live ratio 0.9999 (1044337) diff -0.0001
gap: site 1 closed ratio 0.9998 (1046291) live ratio 0.9997 (1046234) diff +0.0001
gap: site 2 closed ratio 0.9999 (1040272) live ratio 0.9998 (1040205) diff +0.0001
gap: site 3 closed ratio 0.9997 (1046208) live ratio 0.9998 (1046357) diff -0.0001
gap: site 4 closed ratio 0.9998 (1044272) live ratio 0.9999 (1044371) diff -0.0001
gap: site 5 closed ratio 0.9998 (1044269) live ratio 0.9999 (1044334) diff -0.0001
gap: site 6 closed ratio 0.9919 (1031917) live ratio 0.9920 (1032049) diff -0.0001
gap: site 7 closed ratio 0.9997 (1040121) live ratio 0.9998 (1040139) diff -0.0000
gap: site 8 closed ratio 0.9999 (1044334) live ratio 0.9998 (1044277) diff +0.0001
gap: site 9 closed ratio 0.9997 (1044213) live ratio 0.9997 (1044176) diff +0.0000
gap: site 10 closed ratio 0.9998 (1046311) live ratio 0.9998 (1046304) diff +0.0000
gap: site 11 closed ratio 0.9998 (1044255) live ratio 0.9998 (1044247) diff +0.0000
gap: site 12 closed ratio 1.0000 (1040348) live ratio 0.9998 (1040163) diff +0.0002
gap: site 13 closed ratio 0.9998 (1046273) live ratio 0.9998 (1046309) diff -0.0000
gap: site 14 closed ratio 0.9997 (1046243) live ratio 0.9998 (1046302) diff -0.0001
gap: site 15 closed ratio 0.9997 (1044149) live ratio 0.9998 (1044287) diff -0.0001
gap: min ratio closed 0.9919 live 0.9920; largest site gap +0.0002 at site 12; verdict under the 0.98 floor: closed accept live accept; 9.7 s
gap DONE 9d68e6286fc817d4
gap: seed 2
gap: program id 8a0047b2eb071ade attempt 5 class mx8-era35d128b9+sh256x27 day 20730 (cache filled in 0.7 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 1 bias_max 56; live distinct_mean 128.000 saturated 0 bias_max 57
gap: site 0 closed ratio 1.0000 (1040416) live ratio 1.0002 (1040607) diff -0.0002
gap: site 1 closed ratio 0.9999 (1046463) live ratio 1.0000 (1046575) diff -0.0001
gap: site 2 closed ratio 1.0000 (1046531) live ratio 1.0001 (1046645) diff -0.0001
gap: site 3 closed ratio 1.0000 (1046511) live ratio 1.0001 (1046596) diff -0.0001
gap: site 4 closed ratio 1.0001 (1040437) live ratio 0.9999 (1040329) diff +0.0001
gap: site 5 closed ratio 1.0000 (1044493) live ratio 1.0001 (1044597) diff -0.0001
gap: site 6 closed ratio 1.0002 (1040579) live ratio 1.0001 (1040442) diff +0.0001
gap: site 7 closed ratio 1.0000 (1044480) live ratio 1.0000 (1044495) diff -0.0000
gap: site 8 closed ratio 1.0000 (1046508) live ratio 1.0000 (1046511) diff -0.0000
gap: site 9 closed ratio 1.0001 (1044535) live ratio 1.0000 (1044429) diff +0.0001
gap: site 10 closed ratio 0.9999 (1040317) live ratio 1.0001 (1040530) diff -0.0002
gap: site 11 closed ratio 1.0000 (1044517) live ratio 1.0001 (1044565) diff -0.0000
gap: site 12 closed ratio 1.0001 (1040488) live ratio 0.9999 (1040310) diff +0.0002
gap: site 13 closed ratio 1.0000 (1046549) live ratio 1.0000 (1046580) diff -0.0000
gap: site 14 closed ratio 1.0000 (1046487) live ratio 1.0000 (1046488) diff -0.0000
gap: site 15 closed ratio 0.9999 (1040327) live ratio 1.0002 (1040548) diff -0.0002
gap: min ratio closed 0.9999 live 0.9999; largest site gap -0.0002 at site 15; verdict under the 0.98 floor: closed accept live accept; 10.1 s
gap DONE 8a0047b2eb071ade
gap: seed 100211
gap: program id d07885a437e237c7 attempt 0 class mx8-eraa8bce51f+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 61; live distinct_mean 128.000 saturated 0 bias_max 57
gap: site 0 closed ratio 1.0001 (1044569) live ratio 1.0000 (1044436) diff +0.0001
gap: site 1 closed ratio 1.0001 (1044548) live ratio 0.9999 (1044420) diff +0.0001
gap: site 2 closed ratio 1.0001 (1046583) live ratio 1.0000 (1046505) diff +0.0001
gap: site 3 closed ratio 1.0001 (1040470) live ratio 1.0000 (1040420) diff +0.0000
gap: site 4 closed ratio 1.0000 (1040420) live ratio 1.0000 (1040436) diff -0.0000
gap: site 5 closed ratio 1.0000 (1046556) live ratio 1.0000 (1046524) diff +0.0000
gap: site 6 closed ratio 1.0000 (1044469) live ratio 1.0001 (1044551) diff -0.0001
gap: site 7 closed ratio 1.0002 (1040604) live ratio 1.0000 (1040409) diff +0.0002
gap: site 8 closed ratio 1.0000 (1040382) live ratio 1.0001 (1040521) diff -0.0001
gap: site 9 closed ratio 0.9907 (1034720) live ratio 0.9908 (1034913) diff -0.0002
gap: site 10 closed ratio 1.0000 (1046489) live ratio 1.0000 (1046567) diff -0.0001
gap: site 11 closed ratio 1.0000 (1044496) live ratio 1.0001 (1044546) diff -0.0000
gap: site 12 closed ratio 1.0002 (1040563) live ratio 0.9999 (1040306) diff +0.0002
gap: site 13 closed ratio 1.0000 (1046492) live ratio 1.0000 (1046480) diff +0.0000
gap: site 14 closed ratio 1.0001 (1040478) live ratio 1.0000 (1040406) diff +0.0001
gap: site 15 closed ratio 1.0000 (1044498) live ratio 0.9999 (1044420) diff +0.0001
gap: min ratio closed 0.9907 live 0.9908; largest site gap +0.0002 at site 12; verdict under the 0.98 floor: closed accept live accept; 9.9 s
gap DONE d07885a437e237c7
gap: seed 100064
gap: program id 2442abf9d56f6611 attempt 2 class mx8-eraa210d1bd+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 11 bias_max 64; live distinct_mean 128.000 saturated 6 bias_max 51
gap: site 0 closed ratio 1.0002 (1044665) live ratio 1.0000 (1044436) diff +0.0002
gap: site 1 closed ratio 1.0000 (1046553) live ratio 1.0000 (1046547) diff +0.0000
gap: site 2 closed ratio 1.0000 (1044482) live ratio 1.0000 (1044529) diff -0.0000
gap: site 3 closed ratio 1.0000 (1044491) live ratio 1.0001 (1044596) diff -0.0001
gap: site 4 closed ratio 1.0000 (1046539) live ratio 1.0000 (1046523) diff +0.0000
gap: site 5 closed ratio 1.0001 (1040513) live ratio 0.9999 (1040282) diff +0.0002
gap: site 6 closed ratio 1.0001 (1046582) live ratio 1.0000 (1046545) diff +0.0000
gap: site 7 closed ratio 1.0000 (1046489) live ratio 1.0001 (1046583) diff -0.0001
gap: site 8 closed ratio 1.0000 (1044497) live ratio 0.9999 (1044335) diff +0.0002
gap: site 9 closed ratio 1.0000 (1046531) live ratio 1.0000 (1046545) diff -0.0000
gap: site 10 closed ratio 1.0000 (1046523) live ratio 1.0000 (1046552) diff -0.0000
gap: site 11 closed ratio 0.9832 (1022918) live ratio 0.9831 (1022831) diff +0.0001
gap: site 12 closed ratio 1.0000 (1044431) live ratio 0.9999 (1044389) diff +0.0000
gap: site 13 closed ratio 1.0000 (1046496) live ratio 1.0000 (1046497) diff -0.0000
gap: site 14 closed ratio 1.0002 (1044658) live ratio 1.0002 (1044663) diff -0.0000
gap: site 15 closed ratio 0.9914 (1035466) live ratio 0.9914 (1035489) diff -0.0000
gap: min ratio closed 0.9832 live 0.9831; largest site gap +0.0002 at site 5; verdict under the 0.98 floor: closed accept live accept; 10.9 s
gap DONE 2442abf9d56f6611

View file

@ -0,0 +1,142 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (42,43,44,45,46,47,48,49, waited 31 s, class adv): adv-accept gap-five-d20730
gap: hex program adv-cache-2-era-fixed-20: epoch bc6ad5ae912e203edbba9f74bc1c2ae35d8670d74a66c3939674366ae28e2746 era edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07
gap: program id 11f9f955b21d56c9 attempt 1 class mx8-erad810f22d+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.999 saturated 0 bias_max 54; live distinct_mean 128.000 saturated 1 bias_max 57
gap: site 0 closed ratio 1.0000 (1046495) live ratio 1.0001 (1046588) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 0.9999 (1044385) live ratio 0.9999 (1044399) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0001 (1040439) live ratio 1.0000 (1040401) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1046505) live ratio 1.0000 (1046516) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046571) live ratio 1.0000 (1046501) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1046505) live ratio 1.0000 (1046524) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 0.9999 (1046439) live ratio 1.0000 (1046569) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9999 (1046459) live ratio 1.0000 (1046498) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0001 (1044536) live ratio 0.9999 (1044413) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1044444) live ratio 0.9999 (1044416) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1044519) live ratio 1.0000 (1044453) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 0.9997 (1046229) live ratio 0.9997 (1046174) diff +0.0001; reads on indices read >= 8 times: closed 0.0008% live 0.0000%
gap: site 12 closed ratio 1.0000 (1046567) live ratio 1.0000 (1046536) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046543) live ratio 1.0000 (1046548) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 0.9999 (1044374) live ratio 1.0000 (1044433) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9999 (1044385) live ratio 0.9999 (1044349) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9997 live 0.9997; largest site gap -0.0001 at site 6; verdict under the 0.98 floor: closed accept live accept; 14.1 s
gap DONE 11f9f955b21d56c9
gap: hex program adv-cache-2-era-drawn-2: epoch 348a0e0a344d74eed85878dddbd6008d363188db30d3b1e7335e8588ed694101 era 6469f1b0f5d45ff506504b1fea38093175f651ad082e229b8b76d4f3f6c9af31
gap: program id 7ceb797d31eedb3e attempt 0 class mx8-eracd0def15+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 56; live distinct_mean 128.000 saturated 0 bias_max 50
gap: site 0 closed ratio 1.0000 (1044481) live ratio 1.0001 (1044590) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046558) live ratio 0.9999 (1046461) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1044519) live ratio 0.9999 (1044427) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1044587) live ratio 1.0001 (1044546) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0001 (1046586) live ratio 1.0000 (1046527) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1040333) live ratio 1.0001 (1040438) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1040352) live ratio 1.0000 (1040433) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0001 (1044534) live ratio 1.0000 (1044526) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1044482) live ratio 1.0000 (1044490) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9998 (1040206) live ratio 1.0002 (1040556) diff -0.0003; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1046517) live ratio 1.0000 (1046476) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046505) live ratio 1.0000 (1046522) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1044520) live ratio 1.0000 (1044522) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 0.9992 (1045687) live ratio 0.9993 (1045757) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0001 (1040438) live ratio 1.0000 (1040368) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0001 (1044583) live ratio 1.0000 (1044523) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9992 live 0.9993; largest site gap -0.0003 at site 9; verdict under the 0.98 floor: closed accept live accept; 14.1 s
gap DONE 7ceb797d31eedb3e
gap: seed 4346
gap: program id bbb38e847011c354 attempt 2 class mx8-eraa577896a+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.999 saturated 0 bias_max 61; live distinct_mean 127.997 saturated 0 bias_max 53
gap: site 0 closed ratio 0.9997 (1044186) live ratio 0.9996 (1044074) diff +0.0001; reads on indices read >= 8 times: closed 0.0349% live 0.0354%
gap: site 1 closed ratio 1.0000 (1046562) live ratio 1.0000 (1046559) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 0.9840 (1029769) live ratio 0.9839 (1029638) diff +0.0001; reads on indices read >= 8 times: closed 0.3636% live 0.3881%
gap: site 3 closed ratio 1.0000 (1044459) live ratio 1.0000 (1044480) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 0.9998 (1044268) live ratio 0.9999 (1044326) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1044547) live ratio 1.0001 (1044568) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0001 (1040464) live ratio 0.9999 (1040326) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1046571) live ratio 1.0000 (1046482) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9981 (1042510) live ratio 0.9982 (1042562) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9981 (1042465) live ratio 0.9982 (1042603) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9990 (1045529) live ratio 0.9990 (1045478) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046518) live ratio 1.0000 (1046521) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 0.9997 (1040086) live ratio 1.0000 (1040385) diff -0.0003; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046523) live ratio 1.0000 (1046479) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046513) live ratio 0.9999 (1046467) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1046568) live ratio 1.0000 (1046529) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9840 live 0.9839; largest site gap -0.0003 at site 12; verdict under the 0.98 floor: closed accept live accept; 13.5 s
gap DONE bbb38e847011c354
gap: seed 5245
gap: program id beaad44840bb9e4e attempt 5 class mx8-erae7b2abfb+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 59; live distinct_mean 128.000 saturated 0 bias_max 59
gap: site 0 closed ratio 1.0001 (1044601) live ratio 1.0001 (1044603) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046564) live ratio 1.0000 (1046555) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046519) live ratio 1.0000 (1046485) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1040482) live ratio 1.0002 (1040593) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044483) live ratio 1.0000 (1044453) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1046612) live ratio 1.0000 (1046504) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 0.9999 (1044373) live ratio 1.0001 (1044575) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1040430) live ratio 1.0000 (1040353) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9831 (1022759) live ratio 0.9833 (1023050) diff -0.0003; reads on indices read >= 8 times: closed 0.3495% live 0.3639%
gap: site 9 closed ratio 1.0000 (1040392) live ratio 1.0001 (1040448) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1046546) live ratio 0.9999 (1046451) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046545) live ratio 1.0000 (1046528) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1046507) live ratio 1.0000 (1046540) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1044572) live ratio 1.0000 (1044465) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046491) live ratio 1.0000 (1046484) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1040415) live ratio 1.0001 (1040442) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9831 live 0.9833; largest site gap -0.0003 at site 8; verdict under the 0.98 floor: closed accept live accept; 13.6 s
gap DONE beaad44840bb9e4e
gap: seed 106924
gap: program id 8aa3c604dba9d11b attempt 1 class mx8-erac4d89708+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.750 saturated 0 bias_max 60; live distinct_mean 127.760 saturated 0 bias_max 56
gap: site 0 closed ratio 1.0000 (1044464) live ratio 1.0001 (1044564) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0001 (1040449) live ratio 1.0000 (1040348) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0001 (1046623) live ratio 1.0001 (1046599) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1040393) live ratio 1.0000 (1040350) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044446) live ratio 1.0000 (1044498) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1046555) live ratio 1.0000 (1046494) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0001 (1044546) live ratio 1.0000 (1044476) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1046531) live ratio 1.0000 (1046549) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0002 (1040552) live ratio 1.0000 (1040413) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1046497) live ratio 1.0000 (1046546) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9821 (1027800) live ratio 0.9823 (1027954) diff -0.0001; reads on indices read >= 8 times: closed 0.0937% live 0.0897%
gap: site 11 closed ratio 1.0000 (1046558) live ratio 1.0000 (1046490) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 0.9999 (1044396) live ratio 1.0001 (1044563) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046497) live ratio 1.0000 (1046478) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046572) live ratio 1.0000 (1046502) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9999 (1040314) live ratio 1.0000 (1040422) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9821 live 0.9823; largest site gap -0.0002 at site 12; verdict under the 0.98 floor: closed accept live accept; 13.9 s
gap DONE 8aa3c604dba9d11b
gap: seed 107022
gap: program id 0fd1d15a8bd627d4 attempt 1 class mx8-era12c72f2b+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 69; live distinct_mean 128.000 saturated 0 bias_max 49
gap: site 0 closed ratio 1.0000 (1046532) live ratio 1.0001 (1046633) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046574) live ratio 1.0000 (1046533) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0001 (1040444) live ratio 1.0000 (1040408) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1040361) live ratio 1.0002 (1040591) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046574) live ratio 1.0000 (1046537) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1046603) live ratio 1.0000 (1046566) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046537) live ratio 1.0001 (1046588) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0001 (1046596) live ratio 1.0000 (1046514) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1046570) live ratio 1.0000 (1046481) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9999 (1040260) live ratio 1.0000 (1040374) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9877 (1031592) live ratio 0.9876 (1031543) diff +0.0000; reads on indices read >= 8 times: closed 0.2035% live 0.2214%
gap: site 11 closed ratio 0.9940 (1038229) live ratio 0.9940 (1038256) diff -0.0000; reads on indices read >= 8 times: closed 0.0511% live 0.0534%
gap: site 12 closed ratio 0.9999 (1040269) live ratio 1.0001 (1040474) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1044507) live ratio 1.0001 (1044617) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046491) live ratio 1.0000 (1046524) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0001 (1044566) live ratio 1.0000 (1044450) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9877 live 0.9876; largest site gap -0.0002 at site 3; verdict under the 0.98 floor: closed accept live accept; 13.4 s
gap DONE 0fd1d15a8bd627d4
Terminated
lease: released 8 pool cores after 138 s, exit 0

View file

@ -0,0 +1,27 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (42,43,44,45,46,47,48,49, waited 11 s, class adv): adv-accept gap-five-d20733
gap: hex program devnet3-epoch0-v4: epoch 4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925 era 4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925
gap: program id fce15bf61030be57 attempt 0 class mx8-eraaf3a9139+sh256x27 day 20733 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 58; live distinct_mean 128.000 saturated 0 bias_max 73
gap: site 0 closed ratio 0.9992 (1045725) live ratio 0.9993 (1045766) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 0.9999 (1040295) live ratio 1.0001 (1040513) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1044477) live ratio 1.0000 (1044480) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1046530) live ratio 1.0000 (1046549) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 0.9999 (1044399) live ratio 1.0001 (1044573) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1044584) live ratio 1.0000 (1044473) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0001 (1044568) live ratio 1.0000 (1044520) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1046573) live ratio 1.0000 (1046494) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1040408) live ratio 1.0000 (1040415) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1044441) live ratio 1.0000 (1044429) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1044553) live ratio 1.0000 (1044438) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046573) live ratio 1.0000 (1046532) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1040352) live ratio 1.0002 (1040544) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046504) live ratio 0.9999 (1046439) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044488) live ratio 0.9999 (1044407) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1044503) live ratio 1.0000 (1044429) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9992 live 0.9993; largest site gap -0.0002 at site 1; verdict under the 0.98 floor: closed accept live accept; 14.0 s
gap DONE fce15bf61030be57
Terminated
lease: released 8 pool cores after 29 s, exit 0

View file

@ -0,0 +1,50 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (42,43,44,45,46,47,48,49, waited 1035 s, class adv): adv-accept gap-hot2
gap: seed 4346
gap: program id bbb38e847011c354 attempt 2 class mx8-eraa577896a+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.999 saturated 0 bias_max 61; live distinct_mean 127.997 saturated 0 bias_max 53
gap: site 0 closed ratio 0.9997 (1044186) live ratio 0.9996 (1044074) diff +0.0001; reads on indices read >= 8 times: closed 0.0349% live 0.0354%
gap: site 1 closed ratio 1.0000 (1046562) live ratio 1.0000 (1046559) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 0.9840 (1029769) live ratio 0.9839 (1029638) diff +0.0001; reads on indices read >= 8 times: closed 0.3636% live 0.3881%
gap: site 3 closed ratio 1.0000 (1044459) live ratio 1.0000 (1044480) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 0.9998 (1044268) live ratio 0.9999 (1044326) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1044547) live ratio 1.0001 (1044568) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0001 (1040464) live ratio 0.9999 (1040326) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1046571) live ratio 1.0000 (1046482) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9981 (1042510) live ratio 0.9982 (1042562) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9981 (1042465) live ratio 0.9982 (1042603) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9990 (1045529) live ratio 0.9990 (1045478) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046518) live ratio 1.0000 (1046521) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 0.9997 (1040086) live ratio 1.0000 (1040385) diff -0.0003; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046523) live ratio 1.0000 (1046479) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046513) live ratio 0.9999 (1046467) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1046568) live ratio 1.0000 (1046529) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9840 live 0.9839; largest site gap -0.0003 at site 12; verdict under the 0.98 floor: closed accept live accept; 13.8 s
gap DONE bbb38e847011c354
gap: seed 5245
gap: program id beaad44840bb9e4e attempt 5 class mx8-erae7b2abfb+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 59; live distinct_mean 128.000 saturated 0 bias_max 59
gap: site 0 closed ratio 1.0001 (1044601) live ratio 1.0001 (1044603) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046564) live ratio 1.0000 (1046555) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046519) live ratio 1.0000 (1046485) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1040482) live ratio 1.0002 (1040593) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044483) live ratio 1.0000 (1044453) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1046612) live ratio 1.0000 (1046504) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 0.9999 (1044373) live ratio 1.0001 (1044575) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1040430) live ratio 1.0000 (1040353) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9831 (1022759) live ratio 0.9833 (1023050) diff -0.0003; reads on indices read >= 8 times: closed 0.3495% live 0.3639%
gap: site 9 closed ratio 1.0000 (1040392) live ratio 1.0001 (1040448) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1046546) live ratio 0.9999 (1046451) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046545) live ratio 1.0000 (1046528) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1046507) live ratio 1.0000 (1046540) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1044572) live ratio 1.0000 (1044465) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046491) live ratio 1.0000 (1046484) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1040415) live ratio 1.0001 (1040442) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9831 live 0.9833; largest site gap -0.0003 at site 8; verdict under the 0.98 floor: closed accept live accept; 14.9 s
gap DONE beaad44840bb9e4e
Terminated
lease: released 8 pool cores after 1071 s, exit 0

View file

@ -0,0 +1,27 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (33,34,35,36,37,38,39,40, waited 732 s, class adv): adv-accept gap-hot3
gap: seed 1738
gap: program id 33ece54e2df5ea44 attempt 4 class mx8-era47aaf3f9+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 51; live distinct_mean 128.000 saturated 0 bias_max 54
gap: site 0 closed ratio 1.0002 (1040562) live ratio 1.0000 (1040428) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1044503) live ratio 1.0000 (1044471) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046562) live ratio 1.0000 (1046526) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1046586) live ratio 1.0000 (1046533) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0001 (1046625) live ratio 1.0000 (1046491) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1044515) live ratio 1.0000 (1044431) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0001 (1044601) live ratio 1.0001 (1044628) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9999 (1044425) live ratio 1.0000 (1044501) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1046478) live ratio 1.0000 (1046548) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0001 (1044542) live ratio 1.0001 (1044578) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9998 (1040215) live ratio 0.9999 (1040236) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0001 (1040528) live ratio 1.0000 (1040421) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0001 (1046603) live ratio 1.0000 (1046557) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 0.9868 (1026682) live ratio 0.9870 (1026875) diff -0.0002; reads on indices read >= 8 times: closed 0.2595% live 0.2535%
gap: site 14 closed ratio 1.0000 (1044508) live ratio 1.0000 (1044500) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9924 (1032460) live ratio 0.9925 (1032541) diff -0.0001; reads on indices read >= 8 times: closed 0.0585% live 0.0530%
gap: min ratio closed 0.9868 live 0.9870; largest site gap -0.0002 at site 13; verdict under the 0.98 floor: closed accept live accept; 15.0 s
gap DONE 33ece54e2df5ea44
Terminated
lease: released 8 pool cores after 751 s, exit 0

View file

@ -0,0 +1,27 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (12,13,14,15,16,17,18,19, waited 555 s, class adv): adv-accept gap-hot4
gap: seed 170
gap: program id 53a02a7c9c9b86f3 attempt 4 class mx8-era1005df99+sh256x27 day 20730 (cache filled in 0.7 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.999 saturated 0 bias_max 66; live distinct_mean 127.998 saturated 0 bias_max 58
gap: site 0 closed ratio 1.0000 (1044464) live ratio 1.0000 (1044480) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 0.9999 (1046452) live ratio 1.0000 (1046518) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 0.9880 (1031958) live ratio 0.9877 (1031626) diff +0.0003; reads on indices read >= 8 times: closed 0.2285% live 0.2404%
gap: site 3 closed ratio 1.0001 (1044544) live ratio 1.0000 (1044518) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044467) live ratio 1.0000 (1044468) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9999 (1046434) live ratio 1.0000 (1046521) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046501) live ratio 1.0000 (1046564) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0001 (1040510) live ratio 1.0001 (1040523) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9999 (1046470) live ratio 1.0000 (1046508) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9999 (1040299) live ratio 1.0000 (1040421) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1046590) live ratio 1.0000 (1046545) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1044441) live ratio 1.0000 (1044464) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1044440) live ratio 1.0001 (1044558) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046505) live ratio 1.0000 (1046576) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044467) live ratio 0.9999 (1044385) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0002 (1040552) live ratio 1.0001 (1040473) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9880 live 0.9877; largest site gap +0.0003 at site 2; verdict under the 0.98 floor: closed accept live accept; 14.7 s
gap DONE 53a02a7c9c9b86f3
Terminated
lease: released 8 pool cores after 574 s, exit 0

View file

@ -0,0 +1,117 @@
lease: holding 8 pool cores (8,9,43,44,45,46,47,48, waited 0 s, class adv): adv-accept gap-newlow5
gap: seed 122960
gap: program id 4be7393ab6c84802 attempt 0 class mx8-era5800f15a+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 52; live distinct_mean 128.000 saturated 0 bias_max 54
gap: site 0 closed ratio 1.0000 (1040412) live ratio 1.0000 (1040386) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046542) live ratio 1.0000 (1046515) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046528) live ratio 1.0000 (1046577) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1040378) live ratio 1.0002 (1040587) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044478) live ratio 1.0000 (1044490) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1046515) live ratio 1.0000 (1046531) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046539) live ratio 1.0000 (1046516) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9999 (1046443) live ratio 1.0000 (1046528) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0001 (1046608) live ratio 0.9999 (1046470) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1040417) live ratio 1.0001 (1040519) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9999 (1044417) live ratio 1.0000 (1044430) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0001 (1044609) live ratio 1.0000 (1044477) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 0.9824 (1028093) live ratio 0.9822 (1027920) diff +0.0002; reads on indices read >= 8 times: closed 1.3090% live 1.3251%
gap: site 13 closed ratio 1.0001 (1044617) live ratio 1.0001 (1044598) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1040426) live ratio 1.0000 (1040402) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1040387) live ratio 1.0001 (1040465) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9824 live 0.9822; largest site gap -0.0002 at site 3; verdict under the 0.98 floor: closed accept live accept; 11.8 s
gap DONE 4be7393ab6c84802
gap: seed 130488
gap: program id 24d5e6511a1b83dc attempt 6 class mx8-eraaa75d178+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 1 bias_max 70; live distinct_mean 128.000 saturated 0 bias_max 77
gap: site 0 closed ratio 1.0000 (1046529) live ratio 1.0000 (1046535) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046565) live ratio 1.0000 (1046578) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0001 (1040505) live ratio 1.0001 (1040460) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1040487) live ratio 1.0000 (1040383) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1044450) live ratio 1.0000 (1044437) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9898 (1035816) live ratio 0.9899 (1035924) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1044483) live ratio 1.0001 (1044574) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1044456) live ratio 1.0001 (1044594) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1046579) live ratio 1.0001 (1046609) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0001 (1044544) live ratio 0.9999 (1044416) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1040508) live ratio 1.0000 (1040412) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1040378) live ratio 1.0000 (1040423) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0001 (1044573) live ratio 1.0000 (1044445) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 0.9999 (1044363) live ratio 0.9999 (1044407) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044461) live ratio 1.0001 (1044543) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9999 (1046441) live ratio 1.0000 (1046495) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9898 live 0.9899; largest site gap -0.0001 at site 7; verdict under the 0.98 floor: closed accept live accept; 10.9 s
gap DONE 24d5e6511a1b83dc
gap: seed 19921
gap: program id fe35af21bc43a4cc attempt 7 class mx8-era551f20b4+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 45; live distinct_mean 128.000 saturated 0 bias_max 58
gap: site 0 closed ratio 1.0000 (1044469) live ratio 1.0000 (1044476) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046508) live ratio 1.0000 (1046521) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046506) live ratio 1.0000 (1046512) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1046485) live ratio 1.0000 (1046553) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 0.9912 (1037277) live ratio 0.9911 (1037205) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1046520) live ratio 0.9999 (1046458) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046491) live ratio 1.0000 (1046558) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0001 (1044578) live ratio 0.9999 (1044375) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9999 (1046376) live ratio 1.0000 (1046571) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1044452) live ratio 1.0001 (1044609) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1044584) live ratio 1.0000 (1044498) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0001 (1044594) live ratio 0.9999 (1044409) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0001 (1040490) live ratio 1.0001 (1040446) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1044628) live ratio 1.0000 (1044521) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1040406) live ratio 1.0001 (1040509) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9998 (1040162) live ratio 1.0002 (1040550) diff -0.0004; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9912 live 0.9911; largest site gap -0.0004 at site 15; verdict under the 0.98 floor: closed accept live accept; 17.4 s
gap DONE fe35af21bc43a4cc
gap: seed 600738
gap: program id ef6d49f3871af472 attempt 4 class mx8-era190e00ce+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.999 saturated 23 bias_max 50; live distinct_mean 128.000 saturated 16 bias_max 71
gap: site 0 closed ratio 1.0001 (1044552) live ratio 1.0000 (1044519) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1040387) live ratio 1.0001 (1040456) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0001 (1040452) live ratio 1.0000 (1040333) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1040400) live ratio 1.0002 (1040621) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1040390) live ratio 1.0002 (1040543) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1046535) live ratio 1.0000 (1046503) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0001 (1040495) live ratio 0.9998 (1040221) diff +0.0003; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0002 (1040586) live ratio 1.0000 (1040399) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9934 (1039606) live ratio 0.9933 (1039499) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9999 (1044362) live ratio 1.0000 (1044485) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1040377) live ratio 1.0002 (1040566) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0001 (1046594) live ratio 1.0000 (1046500) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1044514) live ratio 1.0001 (1044594) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1044440) live ratio 1.0001 (1044552) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0001 (1046593) live ratio 1.0000 (1046569) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1046509) live ratio 1.0000 (1046522) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9934 live 0.9933; largest site gap +0.0003 at site 6; verdict under the 0.98 floor: closed accept live accept; 10.8 s
gap DONE ef6d49f3871af472
gap: seed 602822
gap: program id d8b5571c7abc80df attempt 6 class mx8-era7d3d7ad9+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 59; live distinct_mean 128.000 saturated 0 bias_max 58
gap: site 0 closed ratio 1.0001 (1040442) live ratio 1.0002 (1040572) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046498) live ratio 1.0000 (1046564) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046576) live ratio 1.0000 (1046476) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 0.9951 (1039315) live ratio 0.9951 (1039414) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0001 (1040449) live ratio 1.0000 (1040401) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1044504) live ratio 1.0000 (1044510) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 0.9999 (1040285) live ratio 1.0001 (1040495) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1044485) live ratio 1.0000 (1044526) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1040341) live ratio 1.0001 (1040518) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9999 (1046458) live ratio 1.0000 (1046547) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1046546) live ratio 1.0000 (1046553) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0001 (1044550) live ratio 1.0000 (1044461) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0001 (1046591) live ratio 1.0000 (1046513) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1040449) live ratio 1.0000 (1040416) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044458) live ratio 1.0000 (1044446) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1044480) live ratio 1.0001 (1044596) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9951 live 0.9951; largest site gap -0.0002 at site 6; verdict under the 0.98 floor: closed accept live accept; 10.6 s
gap DONE d8b5571c7abc80df
lease: released 8 pool cores after 77 s, exit 0

View file

@ -0,0 +1,23 @@
gap: seed 2
gap: program id 8a0047b2eb071ade attempt 5 class mx8-era35d128b9+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset true
gap: mirror validated against hash_warp on 8 units (closed form; live skipped under the plant)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 1 bias_max 56; live distinct_mean 115.988 saturated 0 bias_max 64
gap: site 0 closed ratio 1.0000 (1040416) live ratio 1.0001 (1040526) diff -0.0001
gap: site 1 closed ratio 0.9999 (1046463) live ratio 1.0000 (1046552) diff -0.0001
gap: site 2 closed ratio 1.0000 (1046531) live ratio 1.0000 (1046557) diff -0.0000
gap: site 3 closed ratio 1.0000 (1046511) live ratio 0.9999 (1046441) diff +0.0001
gap: site 4 closed ratio 1.0001 (1040437) live ratio 1.0000 (1040375) diff +0.0001
gap: site 5 closed ratio 1.0000 (1044493) live ratio 0.9999 (1044426) diff +0.0001
gap: site 6 closed ratio 1.0002 (1040579) live ratio 1.0000 (1040400) diff +0.0002
gap: site 7 closed ratio 1.0000 (1044480) live ratio 1.0001 (1044566) diff -0.0001
gap: site 8 closed ratio 1.0000 (1046508) live ratio 1.0000 (1046557) diff -0.0000
gap: site 9 closed ratio 1.0001 (1044535) live ratio 0.9832 (1026892) diff +0.0169
gap: site 10 closed ratio 0.9999 (1040317) live ratio 0.9733 (1012652) diff +0.0266
gap: site 11 closed ratio 1.0000 (1044517) live ratio 1.0000 (1044522) diff -0.0000
gap: site 12 closed ratio 1.0001 (1040488) live ratio 1.0000 (1040400) diff +0.0001
gap: site 13 closed ratio 1.0000 (1046549) live ratio 1.0000 (1046512) diff +0.0000
gap: site 14 closed ratio 1.0000 (1046487) live ratio 1.0000 (1046518) diff -0.0000
gap: site 15 closed ratio 0.9999 (1040327) live ratio 1.0001 (1040504) diff -0.0002
gap: min ratio closed 0.9999 live 0.9733; largest site gap +0.0266 at site 10; verdict under the 0.98 floor: closed accept live REJECT; 5.8 s
gap DONE 8a0047b2eb071ade

View file

@ -0,0 +1,165 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 31 pool cores (42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72, waited 840 s): adv-accept gap-rep8
gap: seed 100767
gap: program id 9d68e6286fc817d4 attempt 2 class mx8-era763e5847+sh256x27 day 20730 (cache filled in 0.4 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.714 saturated 0 bias_max 82; live distinct_mean 127.730 saturated 1 bias_max 53
gap: site 0 closed ratio 0.9997 (1044181) live ratio 0.9999 (1044337) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 0.9998 (1046291) live ratio 0.9997 (1046234) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 0.9999 (1040272) live ratio 0.9998 (1040205) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 0.9997 (1046208) live ratio 0.9998 (1046357) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 0.9998 (1044272) live ratio 0.9999 (1044371) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9998 (1044269) live ratio 0.9999 (1044334) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 0.9919 (1031917) live ratio 0.9920 (1032049) diff -0.0001; reads on indices read >= 8 times: closed 0.1681% live 0.1514%
gap: site 7 closed ratio 0.9997 (1040121) live ratio 0.9998 (1040139) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9999 (1044334) live ratio 0.9998 (1044277) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9997 (1044213) live ratio 0.9997 (1044176) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9998 (1046311) live ratio 0.9998 (1046304) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 0.9998 (1044255) live ratio 0.9998 (1044247) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1040348) live ratio 0.9998 (1040163) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 0.9998 (1046273) live ratio 0.9998 (1046309) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 0.9997 (1046243) live ratio 0.9998 (1046302) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9997 (1044149) live ratio 0.9998 (1044287) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9919 live 0.9920; largest site gap +0.0002 at site 12; verdict under the 0.98 floor: closed accept live accept; 5.8 s
gap DONE 9d68e6286fc817d4
gap: seed 100211
gap: program id d07885a437e237c7 attempt 0 class mx8-eraa8bce51f+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 61; live distinct_mean 128.000 saturated 0 bias_max 57
gap: site 0 closed ratio 1.0001 (1044569) live ratio 1.0000 (1044436) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0001 (1044548) live ratio 0.9999 (1044420) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0001 (1046583) live ratio 1.0000 (1046505) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1040470) live ratio 1.0000 (1040420) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1040420) live ratio 1.0000 (1040436) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1046556) live ratio 1.0000 (1046524) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1044469) live ratio 1.0001 (1044551) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0002 (1040604) live ratio 1.0000 (1040409) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1040382) live ratio 1.0001 (1040521) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9907 (1034720) live ratio 0.9908 (1034913) diff -0.0002; reads on indices read >= 8 times: closed 0.1862% live 0.1794%
gap: site 10 closed ratio 1.0000 (1046489) live ratio 1.0000 (1046567) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1044496) live ratio 1.0001 (1044546) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0002 (1040563) live ratio 0.9999 (1040306) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046492) live ratio 1.0000 (1046480) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0001 (1040478) live ratio 1.0000 (1040406) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1044498) live ratio 0.9999 (1044420) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9907 live 0.9908; largest site gap +0.0002 at site 12; verdict under the 0.98 floor: closed accept live accept; 7.7 s
gap DONE d07885a437e237c7
gap: seed 100064
gap: program id 2442abf9d56f6611 attempt 2 class mx8-eraa210d1bd+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 11 bias_max 64; live distinct_mean 128.000 saturated 6 bias_max 51
gap: site 0 closed ratio 1.0002 (1044665) live ratio 1.0000 (1044436) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046553) live ratio 1.0000 (1046547) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1044482) live ratio 1.0000 (1044529) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1044491) live ratio 1.0001 (1044596) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046539) live ratio 1.0000 (1046523) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1040513) live ratio 0.9999 (1040282) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0001 (1046582) live ratio 1.0000 (1046545) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1046489) live ratio 1.0001 (1046583) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1044497) live ratio 0.9999 (1044335) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1046531) live ratio 1.0000 (1046545) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1046523) live ratio 1.0000 (1046552) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 0.9832 (1022918) live ratio 0.9831 (1022831) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1044431) live ratio 0.9999 (1044389) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046496) live ratio 1.0000 (1046497) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0002 (1044658) live ratio 1.0002 (1044663) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9914 (1035466) live ratio 0.9914 (1035489) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9832 live 0.9831; largest site gap +0.0002 at site 5; verdict under the 0.98 floor: closed accept live accept; 7.8 s
gap DONE 2442abf9d56f6611
gap: seed 100159
gap: program id 573d650159a8b04e attempt 3 class mx8-era9e0e4f28+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.467 saturated 0 bias_max 46; live distinct_mean 127.458 saturated 0 bias_max 64
gap: site 0 closed ratio 1.0000 (1040396) live ratio 1.0000 (1040385) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1046497) live ratio 1.0000 (1046483) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0001 (1040463) live ratio 1.0001 (1040441) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1040403) live ratio 1.0000 (1040360) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0002 (1040636) live ratio 1.0001 (1040451) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9960 (1036266) live ratio 0.9962 (1036416) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046544) live ratio 1.0000 (1046540) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9834 (1023068) live ratio 0.9832 (1022905) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9999 (1044402) live ratio 1.0001 (1044572) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0001 (1040449) live ratio 1.0000 (1040341) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1040366) live ratio 1.0002 (1040607) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1046539) live ratio 1.0000 (1046513) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1040416) live ratio 1.0002 (1040552) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1040454) live ratio 1.0000 (1040392) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046562) live ratio 1.0000 (1046534) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1046523) live ratio 1.0001 (1046632) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9834 live 0.9832; largest site gap -0.0002 at site 10; verdict under the 0.98 floor: closed accept live accept; 7.7 s
gap DONE 573d650159a8b04e
gap: seed 100629
gap: program id 37c849d9741c5994 attempt 0 class mx8-era31b72e61+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 64; live distinct_mean 128.000 saturated 0 bias_max 52
gap: site 0 closed ratio 0.9999 (1044395) live ratio 1.0000 (1044438) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0001 (1044552) live ratio 1.0000 (1044457) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1040424) live ratio 1.0001 (1040508) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1044516) live ratio 1.0000 (1044433) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0001 (1044582) live ratio 1.0000 (1044505) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9834 (1023069) live ratio 0.9834 (1023089) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046561) live ratio 1.0000 (1046526) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9999 (1046473) live ratio 1.0000 (1046503) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0002 (1040594) live ratio 1.0000 (1040365) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1040420) live ratio 1.0001 (1040531) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1044537) live ratio 1.0000 (1044439) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1040379) live ratio 1.0000 (1040414) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 0.9999 (1044359) live ratio 1.0001 (1044540) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046490) live ratio 1.0000 (1046536) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046570) live ratio 1.0000 (1046553) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0001 (1046587) live ratio 1.0000 (1046558) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9834 live 0.9834; largest site gap +0.0002 at site 8; verdict under the 0.98 floor: closed accept live accept; 7.6 s
gap DONE 37c849d9741c5994
gap: seed 2
gap: program id 8a0047b2eb071ade attempt 5 class mx8-era35d128b9+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 1 bias_max 56; live distinct_mean 128.000 saturated 0 bias_max 57
gap: site 0 closed ratio 1.0000 (1040416) live ratio 1.0002 (1040607) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 0.9999 (1046463) live ratio 1.0000 (1046575) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046531) live ratio 1.0001 (1046645) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0000 (1046511) live ratio 1.0001 (1046596) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0001 (1040437) live ratio 0.9999 (1040329) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1044493) live ratio 1.0001 (1044597) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0002 (1040579) live ratio 1.0001 (1040442) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1044480) live ratio 1.0000 (1044495) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1046508) live ratio 1.0000 (1046511) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0001 (1044535) live ratio 1.0000 (1044429) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9999 (1040317) live ratio 1.0001 (1040530) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1044517) live ratio 1.0001 (1044565) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0001 (1040488) live ratio 0.9999 (1040310) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046549) live ratio 1.0000 (1046580) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1046487) live ratio 1.0000 (1046488) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9999 (1040327) live ratio 1.0002 (1040548) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9999 live 0.9999; largest site gap -0.0002 at site 15; verdict under the 0.98 floor: closed accept live accept; 7.7 s
gap DONE 8a0047b2eb071ade
gap: seed 3664
gap: program id abfcb4fe4f054bad attempt 1 class mx8-era22e9123a+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 124.021 saturated 0 bias_max 59; live distinct_mean 123.989 saturated 0 bias_max 60
gap: site 0 closed ratio 0.9997 (1040099) live ratio 0.9998 (1040193) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 0.9998 (1040166) live ratio 0.9996 (1039994) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 0.9998 (1044306) live ratio 0.9998 (1044312) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 0.9998 (1044260) live ratio 0.9997 (1044152) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 0.9999 (1040277) live ratio 0.9999 (1040271) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9997 (1044203) live ratio 0.9998 (1044221) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1040390) live ratio 0.9996 (1039997) diff +0.0004; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9998 (1044299) live ratio 0.9998 (1044304) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9997 (1044158) live ratio 0.9998 (1044223) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9998 (1044312) live ratio 0.9997 (1044192) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 0.9998 (1046295) live ratio 0.9998 (1046290) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 0.9999 (1040240) live ratio 0.9997 (1040081) diff +0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 0.9963 (1036533) live ratio 0.9965 (1036691) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 0.9962 (1036435) live ratio 0.9964 (1036645) diff -0.0002; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 0.9998 (1046279) live ratio 0.9997 (1046251) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 0.9944 (1038613) live ratio 0.9943 (1038549) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9944 live 0.9943; largest site gap +0.0004 at site 6; verdict under the 0.98 floor: closed accept live accept; 7.9 s
gap DONE abfcb4fe4f054bad
Terminated
lease: released 31 pool cores after 918 s, exit 0

View file

@ -0,0 +1 @@
2240972

View file

@ -0,0 +1 @@
2240972

View file

@ -0,0 +1,2 @@
2026-10-07T19:20:45Z queued pid 2192622 pgid 2192622 behind the per-box sweep lock; nice 10 cores 8-95; log /srv/builds/_adv-adv-accept/gap-rep8.log
2026-10-07T19:25:11Z queued on lease pool 32 (min 16) pid 2240972 pgid 2240972; log /srv/builds/_adv-adv-accept/gap-rep8.log

View file

@ -0,0 +1,73 @@
lease: 0 of 4 pool cores free (88 leased); waiting
lease: holding 8 pool cores (63,64,65,66,67,68,69,70, waited 223 s, class adv): adv-accept gap-tail3
gap: seed 228763
gap: program id 2c4be0f6dc44c423 attempt 5 class mx8-era1a1089c0+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.997 saturated 121 bias_max 47; live distinct_mean 127.996 saturated 129 bias_max 74
gap: site 0 closed ratio 0.9999 (1046463) live ratio 1.0000 (1046511) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0001 (1044534) live ratio 1.0000 (1044454) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1044503) live ratio 1.0000 (1044433) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1044543) live ratio 1.0001 (1044583) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046494) live ratio 1.0000 (1046561) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0000 (1044440) live ratio 1.0000 (1044503) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046560) live ratio 1.0000 (1046514) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1044456) live ratio 1.0000 (1044473) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1044462) live ratio 1.0000 (1044507) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 0.9809 (1024574) live ratio 0.9810 (1024609) diff -0.0000; reads on indices read >= 8 times: closed 1.8196% live 1.8147%
gap: site 10 closed ratio 1.0000 (1046565) live ratio 1.0000 (1046549) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 0.9999 (1040324) live ratio 1.0000 (1040363) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1044434) live ratio 1.0000 (1044524) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046542) live ratio 1.0000 (1046575) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044454) live ratio 1.0000 (1044435) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1046558) live ratio 1.0000 (1046498) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9809 live 0.9810; largest site gap -0.0001 at site 12; verdict under the 0.98 floor: closed accept live accept; 15.0 s
gap DONE 2c4be0f6dc44c423
gap: seed 638990
gap: program id 682d8a67caf20d92 attempt 2 class mx8-eraf96c64aa+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 127.997 saturated 104 bias_max 56; live distinct_mean 127.998 saturated 74 bias_max 54
gap: site 0 closed ratio 1.0001 (1046597) live ratio 1.0000 (1046476) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0000 (1040360) live ratio 0.9999 (1040315) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 0.9872 (1027079) live ratio 0.9872 (1027023) diff +0.0001; reads on indices read >= 8 times: closed 1.1880% live 1.1812%
gap: site 3 closed ratio 1.0000 (1040426) live ratio 1.0001 (1040479) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1046572) live ratio 1.0001 (1046610) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 1.0001 (1044548) live ratio 1.0001 (1044582) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 1.0000 (1046536) live ratio 1.0000 (1046557) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 1.0000 (1044484) live ratio 1.0000 (1044449) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 0.9999 (1044407) live ratio 1.0000 (1044454) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1046533) live ratio 1.0000 (1046496) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0000 (1046549) live ratio 0.9999 (1046450) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0002 (1040611) live ratio 1.0001 (1040537) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0001 (1046632) live ratio 1.0000 (1046559) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0000 (1046516) live ratio 1.0000 (1046508) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0000 (1044471) live ratio 1.0001 (1044536) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1046551) live ratio 0.9999 (1046474) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9872 live 0.9872; largest site gap +0.0001 at site 0; verdict under the 0.98 floor: closed accept live accept; 14.6 s
gap DONE 682d8a67caf20d92
gap: seed 623492
gap: program id 283fa56f84e945f7 attempt 3 class mx8-eraf96329ec+sh256x27 day 20730 (cache filled in 0.6 s) plant zero-dataset false
gap: mirror validated against hash_warp on 8 units (closed form and live)
gap: closed-form per-site distinct counts equal the library's distinct_indices_v4 on 4096 units
gap: (c) metrics on 64 units: closed distinct_mean 128.000 saturated 0 bias_max 54; live distinct_mean 128.000 saturated 0 bias_max 52
gap: site 0 closed ratio 0.9922 (1038383) live ratio 0.9922 (1038334) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 1 closed ratio 1.0002 (1040631) live ratio 1.0001 (1040480) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 2 closed ratio 1.0000 (1046556) live ratio 1.0000 (1046521) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 3 closed ratio 1.0001 (1040491) live ratio 1.0002 (1040558) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 4 closed ratio 1.0000 (1040341) live ratio 1.0001 (1040439) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 5 closed ratio 0.9999 (1046395) live ratio 1.0000 (1046538) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 6 closed ratio 0.9999 (1046454) live ratio 1.0001 (1046582) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 7 closed ratio 0.9999 (1040321) live ratio 1.0000 (1040420) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 8 closed ratio 1.0000 (1046578) live ratio 0.9999 (1046468) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 9 closed ratio 1.0000 (1044501) live ratio 1.0001 (1044541) diff -0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 10 closed ratio 1.0001 (1040468) live ratio 1.0001 (1040446) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 11 closed ratio 1.0000 (1044500) live ratio 1.0001 (1044554) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 12 closed ratio 1.0000 (1044458) live ratio 1.0000 (1044522) diff -0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 13 closed ratio 1.0001 (1046589) live ratio 1.0000 (1046509) diff +0.0001; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 14 closed ratio 1.0001 (1040438) live ratio 1.0000 (1040400) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: site 15 closed ratio 1.0000 (1046507) live ratio 1.0000 (1046504) diff +0.0000; reads on indices read >= 8 times: closed 0.0000% live 0.0000%
gap: min ratio closed 0.9922 live 0.9922; largest site gap +0.0001 at site 1; verdict under the 0.98 floor: closed accept live accept; 13.9 s
gap DONE 283fa56f84e945f7
Terminated
lease: released 8 pool cores after 280 s, exit 0

View file

@ -0,0 +1,296 @@
[2026-10-07T18:40:55Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100767", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T18:40:55Z] census warps: programs [100767] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T18:40:55Z] day 20730: cache filled in 0.61 s, fnv 448274a57f508cbc
[2026-10-07T18:40:58Z] table: 16777216 items derived with their 8 lines in 2.4 s; library comparison sample (0 mismatches)
[2026-10-07T18:41:02Z] program p100767-attack-f8: epoch seed 74484b391756fc49568cdd716bcfd839a55d31a45633c223c65c7f2ab4617fd4 era seed 7a65a05391dcd87b8fdaf7f74813aa17c6e13f7c56a03da2aaa6176987ef038b id 9d68e6286fc817d4 attempt 2 class mx8-era763e5847+sh256x27 op mix load=16 add=8 mad=6 mul=6 rotl=6 mulhi=5 xor=5 rotr=4 shfl=4 or=2 sub=2; era stride mul 0x54387173 rot 28 interleave [4, 11, 13, 15] windows 6:1:0 9:0:0 11:2:1 12:0:0 13:1:1 19:1:1 23:2:0 32:2:0 36:1:1 39:1:1 41:0:0 45:1:0 50:2:3 58:0:0 59:0:0 63:1:0
[2026-10-07T18:41:02Z] load site instr 6: src r6 win 1 off 0; last base writer mad at 4; writers back to the last injecting one: mad@4; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T18:41:02Z] load site instr 9: src r7 win 0 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:41:02Z] load site instr 11: src r5 win 2 off 1; last base writer xor at 5; writers back to the last injecting one: xor@5; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T18:41:02Z] load site instr 12: src r3 win 0 off 0; last base writer load at 9; writers back to the last injecting one: load@9; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T18:41:02Z] load site instr 13: src r2 win 1 off 1; last base writer load at 12; writers back to the last injecting one: load@12; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T18:41:02Z] load site instr 19: src r4 win 1 off 1; last base writer add at 7; writers back to the last injecting one: add@7; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T18:41:02Z] load site instr 23: src r6 win 2 off 0; last base writer mad at 22; writers back to the last injecting one: mad@22; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T18:41:02Z] load site instr 32: src r0 win 2 off 0; last base writer xor at 20; writers back to the last injecting one: xor@20; shadow writes of r0 per rep: add=7 mad=1 mul=3 mulhi=3 or=3 rotl=3 rotr=2 shfl=5 sub=2 xor=3
[2026-10-07T18:41:02Z] load site instr 36: src r7 win 1 off 1; last base writer rotr at 31; writers back to the last injecting one: rotr@31 load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:41:02Z] load site instr 39: src r7 win 1 off 1; last base writer rotl at 38; writers back to the last injecting one: rotl@38 add@37; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:41:02Z] load site instr 41: src r4 win 0 off 0; last base writer rotl at 40; writers back to the last injecting one: rotl@40 load@32; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T18:41:02Z] load site instr 45: src r5 win 1 off 0; last base writer rotr at 27; writers back to the last injecting one: rotr@27 shfl@24; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T18:41:02Z] load site instr 50: src r7 win 2 off 3; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:41:02Z] load site instr 58: src r3 win 0 off 0; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T18:41:02Z] load site instr 59: src r2 win 0 off 0; last base writer xor at 46; writers back to the last injecting one: xor@46; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T18:41:02Z] load site instr 63: src r1 win 1 off 0; last base writer rotr at 62; writers back to the last injecting one: rotr@62 add@56; shadow writes of r1 per rep: add=5 mad=4 mul=6 mulhi=3 or=2 rotl=2 rotr=3 shfl=5 sub=3 xor=2
[2026-10-07T18:41:02Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^22) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23); expected reads per item by quarter 152.000 120.000 104.000 136.000 (flat uniform 128.000)
[2026-10-07T18:41:56Z] 524288 warps (16777216 nonces) interpreted in 54.6 s (3.335 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:41:56Z] p100767-attack-f8 distinct lines per hash: n 16777216 min 976 p1 1008 median 1024 p99 1024 max 1024 mean 1021.6650
[2026-10-07T18:41:56Z] p100767-attack-f8 distinct items per hash: n 16777216 min 122 p1 126 median 128 p99 128 max 128 mean 127.7237
[2026-10-07T18:41:56Z] p100767-attack-f8 distinct lines per warp: n 524288 min 32426 p1 32501 median 32567 p99 32623 max 32663 mean 32566.2019
[2026-10-07T18:41:56Z] p100767-attack-f8 distinct items per warp: n 524288 min 4070 p1 4079 median 4087 p99 4093 max 4096 mean 4086.6589
[2026-10-07T18:41:56Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:41:56Z] positions: largest hi16-bucket (256 items) share 0.0280% at p22 (iteration 1, site 6, instr 23); windowed expectation 0.0061%; largest saturated-source share 0.0126% at p54 (site 6, instr 23)
[2026-10-07T18:41:56Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p118 (site 6, instr 23); saturated sources at one position 1 of 2048 at p102 (site 6, instr 23); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:41:57Z] p100767-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 29355 (bin 0) z_max +2583.33 min 55 z_min -6.45 chi2/dof 5.03991 chi2_z +11700.82 top0.1% 0.30333% top0.5% 0.97981% top1% 1.72538%
[2026-10-07T18:41:57Z] p100767-attack-f8 item histogram against the window density: full 2^24 chi2/dof 2.29791 largest 29355 (item 0x0) at +2368.68 sigma smallest at -5.19; buckets64 chi2/dof 1.84909 largest 38799 (bucket 0) at +294.75 sigma smallest at -4.57
[2026-10-07T18:41:59Z] p100767-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 215 (bin 2100831) z_max +7.69 min 56 z_min -6.36 chi2/dof 3.49942 chi2_z +7239.08 top0.1% 0.14829% top0.5% 0.71360% top1% 1.40031%
[2026-10-07T18:41:59Z] p100767-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99988 largest +5.98 sigma; buckets64 chi2/dof 0.99505 largest +5.11 smallest -4.81
[2026-10-07T18:41:59Z] 6-sigma p100767-attack-f8 items buckets64 against the window density: largest bucket +294.75 sigma, smallest -4.57 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:41:59Z] hot-set p100767-attack-f8 items (windowed control): f 0.1% S_f 0.30333% E_f(control) 0.14829% X_f +0.15503% X_f/f +1.5503 -> HOT SET
[2026-10-07T18:41:59Z] hot-set p100767-attack-f8 items (windowed control): f 0.5% S_f 0.97981% E_f(control) 0.71360% X_f +0.26621% X_f/f +0.5324 -> no hot set
[2026-10-07T18:41:59Z] hot-set p100767-attack-f8 items (windowed control): f 1.0% S_f 1.72538% E_f(control) 1.40031% X_f +0.32507% X_f/f +0.3251 -> no hot set
[2026-10-07T18:41:59Z] hot-set p100767-attack-f8 items (windowed control): verdict FLAGGED
[2026-10-07T18:42:02Z] p100767-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 10083710) z_max +5.57 min 71 z_min -5.04 chi2/dof 1.00035 chi2_z +1.01 top0.1% 0.13110% top0.5% 0.63254% top1% 1.24340%
[2026-10-07T18:42:02Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.30333% E_f(control) 0.13110% X_f +0.17223% X_f/f +1.7223 -> HOT SET
[2026-10-07T18:42:02Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.97981% E_f(control) 0.63254% X_f +0.34727% X_f/f +0.6945 -> no hot set
[2026-10-07T18:42:02Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.72538% E_f(control) 1.24340% X_f +0.48197% X_f/f +0.4820 -> no hot set
[2026-10-07T18:42:02Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T18:42:02Z] ratio p100767-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 2.0455x / 1.3731x / 1.2321x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 2.3137x / 1.5490x / 1.3876x
[2026-10-07T18:42:04Z] attribution: hot threshold count >= 257 marks 17034 items (0.1015% of items) holding 6579906 reads (0.3064% of reads); top 8 items t=0x000000:29355 t=0x200000:10052 t=0x300000:7871 t=0x180000:6131 t=0x100000:5820 t=0x080000:4658 t=0x380000:4570 t=0x0c0000:4558
[2026-10-07T18:42:43Z] attribution: reads on hot items per position (flat expectation 0.1015% of each position's 16777216 reads); the 24 largest: p6(it0 s6)=3.357% p38(it2 s6)=3.357% p102(it6 s6)=3.356% p54(it3 s6)=3.350% p22(it1 s6)=3.347% p70(it4 s6)=3.347% p86(it5 s6)=3.345% p118(it7 s6)=3.341% p23(it1 s7)=0.417% p87(it5 s7)=0.416% p55(it3 s7)=0.416% p119(it7 s7)=0.415% p39(it2 s7)=0.414% p7(it0 s7)=0.414% p71(it4 s7)=0.412% p103(it6 s7)=0.412% p107(it6 s11)=0.209% p0(it0 s0)=0.209% p63(it3 s15)=0.208% p11(it0 s11)=0.208% p96(it6 s0)=0.208% p127(it7 s15)=0.208% p75(it4 s11)=0.208% p47(it2 s15)=0.208%
[2026-10-07T18:42:43Z] attribution: hot reads by iteration it0=0.307% it1=0.306% it2=0.307% it3=0.307% it4=0.306% it5=0.306% it6=0.307% it7=0.306% ; by site s0=0.207% s1=0.103% s2=0.000% s3=0.103% s4=0.000% s5=0.000% s6=3.350% s7=0.414% s8=0.000% s9=0.000% s10=0.103% s11=0.207% s12=0.000% s13=0.103% s14=0.103% s15=0.207%
[2026-10-07T18:42:43Z] site 0 (instr 6, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2069% (flat expectation 0.1015%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:42:43Z] site 1 (instr 9, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1027% (flat expectation 0.1015%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:42:43Z] site 2 (instr 11, src r5, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1015%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:42:43Z] site 3 (instr 12, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1033% (flat expectation 0.1015%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:42:43Z] site 4 (instr 13, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1015%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:42:43Z] site 5 (instr 19, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1015%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:42:43Z] site 6 (instr 23, src r6, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 3.3502% (flat expectation 0.1015%); index entropy 13.999 bits of 14 uniform-on-window; saturated source 0.0121%; largest 256-item bucket 0.0276% (window expectation 0.0061%)
[2026-10-07T18:42:43Z] site 7 (instr 32, src r0, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4144% (flat expectation 0.1015%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:42:44Z] site 8 (instr 36, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1015%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:42:44Z] site 9 (instr 39, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1015%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:42:44Z] site 10 (instr 41, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1034% (flat expectation 0.1015%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:42:44Z] site 11 (instr 45, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2073% (flat expectation 0.1015%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:42:44Z] site 12 (instr 50, src r7, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1015%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:42:44Z] site 13 (instr 58, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1035% (flat expectation 0.1015%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:42:44Z] site 14 (instr 59, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1035% (flat expectation 0.1015%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:42:44Z] site 15 (instr 63, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2071% (flat expectation 0.1015%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:42:44Z] attribution: item 0x000000 (29355 reads) read from positions p22(it1 s6)x3741 p38(it2 s6)x3696 p118(it7 s6)x3694 p54(it3 s6)x3691 p86(it5 s6)x3669 p6(it0 s6)x3631 p102(it6 s6)x3583 p70(it4 s6)x3559 p71(it4 s7)x7 p10(it0 s10)x4 p31(it1 s15)x4 p55(it3 s7)x4
[2026-10-07T18:42:44Z] attribution: item 0x200000 (10052 reads) read from positions p54(it3 s6)x1271 p38(it2 s6)x1269 p6(it0 s6)x1259 p22(it1 s6)x1254 p118(it7 s6)x1253 p70(it4 s6)x1237 p86(it5 s6)x1208 p102(it6 s6)x1187 p87(it5 s7)x6 p48(it3 s0)x5 p63(it3 s15)x5 p71(it4 s7)x5
[2026-10-07T18:42:44Z] attribution: item 0x300000 (7871 reads) read from positions p6(it0 s6)x1020 p86(it5 s6)x1007 p38(it2 s6)x977 p70(it4 s6)x966 p102(it6 s6)x955 p54(it3 s6)x944 p118(it7 s6)x941 p22(it1 s6)x939 p39(it2 s7)x6 p71(it4 s7)x5 p103(it6 s7)x5 p112(it7 s0)x5
[2026-10-07T18:42:44Z] attribution: item 0x180000 (6131 reads) read from positions p54(it3 s6)x776 p70(it4 s6)x773 p102(it6 s6)x754 p22(it1 s6)x753 p6(it0 s6)x749 p86(it5 s6)x748 p38(it2 s6)x738 p118(it7 s6)x724 p7(it0 s7)x7 p55(it3 s7)x6 p103(it6 s7)x6 p43(it2 s11)x5
[2026-10-07T18:42:44Z] attribution: item 0x100000 (5820 reads) read from positions p70(it4 s6)x758 p86(it5 s6)x733 p54(it3 s6)x732 p6(it0 s6)x720 p22(it1 s6)x705 p102(it6 s6)x693 p38(it2 s6)x687 p118(it7 s6)x663 p55(it3 s7)x6 p95(it5 s15)x6 p103(it6 s7)x6 p127(it7 s15)x5
[2026-10-07T18:42:44Z] attribution: item 0x080000 (4658 reads) read from positions p70(it4 s6)x606 p6(it0 s6)x595 p102(it6 s6)x586 p54(it3 s6)x578 p38(it2 s6)x577 p22(it1 s6)x564 p118(it7 s6)x521 p86(it5 s6)x516 p71(it4 s7)x8 p39(it2 s7)x6 p48(it3 s0)x6 p55(it3 s7)x5
[2026-10-07T18:42:44Z] attribution: item 0x380000 (4570 reads) read from positions p70(it4 s6)x598 p54(it3 s6)x578 p86(it5 s6)x576 p118(it7 s6)x558 p22(it1 s6)x556 p102(it6 s6)x541 p6(it0 s6)x523 p38(it2 s6)x520 p47(it2 s15)x8 p7(it0 s7)x7 p16(it1 s0)x5 p17(it1 s1)x4
[2026-10-07T18:42:44Z] attribution: item 0x0c0000 (4558 reads) read from positions p86(it5 s6)x597 p70(it4 s6)x586 p102(it6 s6)x564 p38(it2 s6)x562 p118(it7 s6)x550 p22(it1 s6)x537 p54(it3 s6)x530 p6(it0 s6)x512 p23(it1 s7)x6 p107(it6 s11)x6 p47(it2 s15)x5 p63(it3 s15)x5
[2026-10-07T18:42:44Z] hottest item p100767-attack-f8 (0x000000): 29355 reads (0.0014% of all); predicted source site-instr6:r6:zero:last-writer-mad@4
[2026-10-07T18:42:44Z] program p100767-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set FLAGGED; verdict FLAGGED
[2026-10-07T18:42:44Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100211", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T18:42:44Z] census warps: programs [100211] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T18:42:45Z] day 20730: cache filled in 0.61 s, fnv 448274a57f508cbc
[2026-10-07T18:42:48Z] table: 16777216 items derived with their 8 lines in 3.3 s; library comparison sample (0 mismatches)
[2026-10-07T18:42:52Z] program p100211-attack-f8: epoch seed 3d4686b780097991a4600a0683fca3645e627c67edd53365c4131c7095ecc55d era seed 3e3a196a3504d573eee9656bffb7e3d2dffc03dc10f95f92fd08d0ab245641f7 id d07885a437e237c7 attempt 0 class mx8-eraa8bce51f+sh256x27 op mix load=16 xor=11 mul=10 add=7 mad=6 mulhi=4 shfl=4 rotl=3 or=1 rotr=1 sub=1; era stride mul 0x4babb2b7 rot 31 interleave [1, 6, 8, 13] windows 3:1:1 4:1:0 7:0:0 15:2:0 17:2:2 23:0:0 24:1:0 27:2:3 29:2:1 31:1:0 35:0:0 41:1:0 44:2:1 49:0:0 61:2:1 63:1:0
[2026-10-07T18:42:52Z] load site instr 3: src r4 win 1 off 1; last base writer xor at 2; writers back to the last injecting one: xor@2; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:42:52Z] load site instr 4: src r0 win 1 off 0; last base writer load at 3; writers back to the last injecting one: load@3; shadow writes of r0 per rep: add=5 mad=4 mul=5 mulhi=1 or=1 rotl=2 rotr=6 shfl=3 sub=6 xor=4
[2026-10-07T18:42:52Z] load site instr 7: src r2 win 0 off 0; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r2 per rep: add=5 mad=4 mul=3 mulhi=1 or=2 rotl=2 rotr=3 shfl=1 sub=3 xor=9
[2026-10-07T18:42:52Z] load site instr 15: src r4 win 2 off 0; last base writer mad at 12; writers back to the last injecting one: mad@12; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:42:52Z] load site instr 17: src r3 win 2 off 2; last base writer load at 15; writers back to the last injecting one: load@15; shadow writes of r3 per rep: add=4 mad=1 mul=1 mulhi=2 or=1 rotl=4 rotr=2 shfl=4 sub=1 xor=3
[2026-10-07T18:42:52Z] load site instr 23: src r0 win 0 off 0; last base writer xor at 13; writers back to the last injecting one: xor@13; shadow writes of r0 per rep: add=5 mad=4 mul=5 mulhi=1 or=1 rotl=2 rotr=6 shfl=3 sub=6 xor=4
[2026-10-07T18:42:52Z] load site instr 24: src r7 win 1 off 0; last base writer shfl at 16; writers back to the last injecting one: shfl@16; shadow writes of r7 per rep: add=2 mad=4 mul=3 mulhi=1 or=1 rotl=5 rotr=4 shfl=2 sub=1 xor=4
[2026-10-07T18:42:52Z] load site instr 27: src r5 win 2 off 3; last base writer load at 24; writers back to the last injecting one: load@24; shadow writes of r5 per rep: add=3 mad=5 mul=1 mulhi=2 or=1 rotl=3 rotr=2 shfl=6 sub=1 xor=5
[2026-10-07T18:42:52Z] load site instr 29: src r2 win 2 off 1; last base writer load at 27; writers back to the last injecting one: load@27; shadow writes of r2 per rep: add=5 mad=4 mul=3 mulhi=1 or=2 rotl=2 rotr=3 shfl=1 sub=3 xor=9
[2026-10-07T18:42:52Z] load site instr 31: src r6 win 1 off 0; last base writer xor at 30; writers back to the last injecting one: xor@30; shadow writes of r6 per rep: add=5 mad=4 mul=5 mulhi=2 or=1 rotl=3 rotr=3 shfl=1 sub=4 xor=4
[2026-10-07T18:42:52Z] load site instr 35: src r7 win 0 off 0; last base writer rotl at 33; writers back to the last injecting one: rotl@33 shfl@16; shadow writes of r7 per rep: add=2 mad=4 mul=3 mulhi=1 or=1 rotl=5 rotr=4 shfl=2 sub=1 xor=4
[2026-10-07T18:42:52Z] load site instr 41: src r1 win 1 off 0; last base writer add at 40; writers back to the last injecting one: add@40; shadow writes of r1 per rep: add=3 mad=3 mul=3 mulhi=2 or=3 rotl=5 rotr=2 shfl=5 sub=2 xor=5
[2026-10-07T18:42:52Z] load site instr 44: src r5 win 2 off 1; last base writer load at 35; writers back to the last injecting one: load@35; shadow writes of r5 per rep: add=3 mad=5 mul=1 mulhi=2 or=1 rotl=3 rotr=2 shfl=6 sub=1 xor=5
[2026-10-07T18:42:52Z] load site instr 49: src r4 win 0 off 0; last base writer load at 44; writers back to the last injecting one: load@44; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:42:52Z] load site instr 61: src r3 win 2 off 1; last base writer xor at 58; writers back to the last injecting one: xor@58; shadow writes of r3 per rep: add=4 mad=1 mul=1 mulhi=2 or=1 rotl=4 rotr=2 shfl=4 sub=1 xor=3
[2026-10-07T18:42:52Z] load site instr 63: src r4 win 1 off 0; last base writer shfl at 62; writers back to the last injecting one: shfl@62; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:42:52Z] window layer: site item windows (first, items) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0x0,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x400000,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^23) (0x400000,2^22) (0x0,2^24) (0x400000,2^22) (0x0,2^23); expected reads per item by quarter 144.000 208.000 80.000 80.000 (flat uniform 128.000)
[2026-10-07T18:44:07Z] 524288 warps (16777216 nonces) interpreted in 74.7 s (4.559 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:44:07Z] p100211-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8708
[2026-10-07T18:44:07Z] p100211-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T18:44:07Z] p100211-attack-f8 distinct lines per warp: n 524288 min 32563 p1 32604 median 32636 p99 32664 max 32688 mean 32635.6824
[2026-10-07T18:44:07Z] p100211-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4103
[2026-10-07T18:44:07Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:44:07Z] positions: largest hi16-bucket (256 items) share 0.0195% at p73 (iteration 4, site 9, instr 31); windowed expectation 0.0031%; largest saturated-source share 0.0000% at p0 (site 0, instr 3)
[2026-10-07T18:44:07Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p9 (site 9, instr 31); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:44:07Z] p100211-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 21573 (bin 4539781) z_max +1895.49 min 38 z_min -7.95 chi2/dof 23.98837 chi2_z +66581.44 top0.1% 0.26258% top0.5% 1.05774% top1% 2.00267%
[2026-10-07T18:44:07Z] p100211-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.73535 largest 21573 (item 0x454585) at +1481.40 sigma smallest at -5.00; buckets64 chi2/dof 1.51613 largest 34728 (bucket 70934) at +185.62 sigma smallest at -4.64
[2026-10-07T18:44:11Z] p100211-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 287 (bin 6586432) z_max +14.05 min 37 z_min -8.04 chi2/dof 22.99924 chi2_z +63716.59 top0.1% 0.19690% top0.5% 0.95201% top1% 1.87250%
[2026-10-07T18:44:11Z] p100211-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00032 largest +5.93 sigma; buckets64 chi2/dof 1.00195 largest +4.36 smallest -4.67
[2026-10-07T18:44:11Z] 6-sigma p100211-attack-f8 items buckets64 against the window density: largest bucket +185.62 sigma, smallest -4.64 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:44:11Z] hot-set p100211-attack-f8 items (windowed control): f 0.1% S_f 0.26258% E_f(control) 0.19690% X_f +0.06568% X_f/f +0.6568 -> no hot set
[2026-10-07T18:44:11Z] hot-set p100211-attack-f8 items (windowed control): f 0.5% S_f 1.05774% E_f(control) 0.95201% X_f +0.10573% X_f/f +0.2115 -> no hot set
[2026-10-07T18:44:11Z] hot-set p100211-attack-f8 items (windowed control): f 1.0% S_f 2.00267% E_f(control) 1.87250% X_f +0.13017% X_f/f +0.1302 -> no hot set
[2026-10-07T18:44:11Z] hot-set p100211-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:44:15Z] p100211-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 198 (bin 1102678) z_max +6.19 min 75 z_min -4.68 chi2/dof 1.00051 chi2_z +1.47 top0.1% 0.13106% top0.5% 0.63248% top1% 1.24340%
[2026-10-07T18:44:15Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.26258% E_f(control) 0.13106% X_f +0.13152% X_f/f +1.3152 -> HOT SET
[2026-10-07T18:44:15Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.05774% E_f(control) 0.63248% X_f +0.42526% X_f/f +0.8505 -> no hot set
[2026-10-07T18:44:15Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.00267% E_f(control) 1.24340% X_f +0.75927% X_f/f +0.7593 -> no hot set
[2026-10-07T18:44:15Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T18:44:15Z] ratio p100211-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.3336x / 1.1111x / 1.0695x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 2.0035x / 1.6724x / 1.6106x
[2026-10-07T18:44:16Z] attribution: hot threshold count >= 272 marks 17479 items (0.1042% of items) holding 5829845 reads (0.2715% of reads); top 8 items t=0x454585:21573 t=0x0a8b68:14417 t=0x151292:9582 t=0x054585:7291 t=0x2a2544:6445 t=0x654585:4996 t=0x4a8b68:4955 t=0x254585:4950
[2026-10-07T18:44:51Z] attribution: reads on hot items per position (flat expectation 0.1042% of each position's 16777216 reads); the 24 largest: p73(it4 s9)=1.882% p9(it0 s9)=1.881% p121(it7 s9)=1.879% p25(it1 s9)=1.876% p57(it3 s9)=1.876% p89(it5 s9)=1.874% p105(it6 s9)=1.873% p41(it2 s9)=1.873% p94(it5 s14)=0.368% p62(it3 s14)=0.368% p44(it2 s12)=0.367% p126(it7 s14)=0.367% p60(it3 s12)=0.367% p56(it3 s8)=0.367% p14(it0 s14)=0.367% p88(it5 s8)=0.367% p104(it6 s8)=0.367% p110(it6 s14)=0.366% p72(it4 s8)=0.366% p46(it2 s14)=0.366% p78(it4 s14)=0.366% p76(it4 s12)=0.366% p12(it0 s12)=0.366% p28(it1 s12)=0.365%
[2026-10-07T18:44:51Z] attribution: hot reads by iteration it0=0.272% it1=0.271% it2=0.271% it3=0.272% it4=0.272% it5=0.271% it6=0.272% it7=0.272% ; by site s0=0.000% s1=0.216% s2=0.108% s3=0.068% s4=0.000% s5=0.109% s6=0.217% s7=0.000% s8=0.365% s9=1.877% s10=0.109% s11=0.217% s12=0.366% s13=0.109% s14=0.367% s15=0.218%
[2026-10-07T18:44:51Z] site 0 (instr 3, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1042%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:44:51Z] site 1 (instr 4, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2158% (flat expectation 0.1042%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:44:51Z] site 2 (instr 7, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1084% (flat expectation 0.1042%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:44:51Z] site 3 (instr 15, src r4, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0677% (flat expectation 0.1042%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:44:51Z] site 4 (instr 17, src r3, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1042%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:44:51Z] site 5 (instr 23, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1088% (flat expectation 0.1042%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:44:51Z] site 6 (instr 24, src r7, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2168% (flat expectation 0.1042%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:44:51Z] site 7 (instr 27, src r5, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1042%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:44:51Z] site 8 (instr 29, src r2, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.3652% (flat expectation 0.1042%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:44:51Z] site 9 (instr 31, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 1.8765% (flat expectation 0.1042%); index entropy 14.999 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0189% (window expectation 0.0031%)
[2026-10-07T18:44:51Z] site 10 (instr 35, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1088% (flat expectation 0.1042%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:44:51Z] site 11 (instr 41, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2172% (flat expectation 0.1042%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:44:51Z] site 12 (instr 44, src r5, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.3656% (flat expectation 0.1042%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0063% (window expectation 0.0061%)
[2026-10-07T18:44:51Z] site 13 (instr 49, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1086% (flat expectation 0.1042%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:44:51Z] site 14 (instr 61, src r3, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.3666% (flat expectation 0.1042%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:44:51Z] site 15 (instr 63, src r4, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2175% (flat expectation 0.1042%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:44:51Z] attribution: item 0x454585 (21573 reads) read from positions p73(it4 s9)x2770 p121(it7 s9)x2696 p25(it1 s9)x2685 p9(it0 s9)x2684 p105(it6 s9)x2650 p41(it2 s9)x2643 p57(it3 s9)x2630 p89(it5 s9)x2626 p24(it1 s8)x8 p110(it6 s14)x7 p94(it5 s14)x6 p8(it0 s8)x5
[2026-10-07T18:44:51Z] attribution: item 0x0a8b68 (14417 reads) read from positions p9(it0 s9)x1830 p73(it4 s9)x1820 p41(it2 s9)x1792 p121(it7 s9)x1787 p89(it5 s9)x1786 p57(it3 s9)x1777 p105(it6 s9)x1775 p25(it1 s9)x1730 p6(it0 s6)x5 p95(it5 s15)x5 p11(it0 s11)x4 p22(it1 s6)x4
[2026-10-07T18:44:51Z] attribution: item 0x151292 (9582 reads) read from positions p121(it7 s9)x1242 p41(it2 s9)x1214 p57(it3 s9)x1204 p73(it4 s9)x1187 p89(it5 s9)x1181 p9(it0 s9)x1169 p25(it1 s9)x1133 p105(it6 s9)x1124 p115(it7 s3)x6 p35(it2 s3)x5 p63(it3 s15)x5 p65(it4 s1)x5
[2026-10-07T18:44:51Z] attribution: item 0x054585 (7291 reads) read from positions p9(it0 s9)x913 p73(it4 s9)x909 p25(it1 s9)x903 p105(it6 s9)x900 p41(it2 s9)x896 p57(it3 s9)x889 p121(it7 s9)x878 p89(it5 s9)x875 p115(it7 s3)x7 p3(it0 s3)x5 p37(it2 s5)x5 p33(it2 s1)x5
[2026-10-07T18:44:51Z] attribution: item 0x2a2544 (6445 reads) read from positions p57(it3 s9)x828 p121(it7 s9)x827 p41(it2 s9)x813 p89(it5 s9)x803 p105(it6 s9)x782 p73(it4 s9)x764 p9(it0 s9)x759 p25(it1 s9)x755 p31(it1 s15)x7 p33(it2 s1)x5 p58(it3 s10)x5 p97(it6 s1)x5
[2026-10-07T18:44:51Z] attribution: item 0x654585 (4996 reads) read from positions p121(it7 s9)x628 p25(it1 s9)x621 p89(it5 s9)x608 p41(it2 s9)x603 p9(it0 s9)x602 p57(it3 s9)x589 p105(it6 s9)x583 p73(it4 s9)x577 p110(it6 s14)x9 p91(it5 s11)x7 p24(it1 s8)x6 p44(it2 s12)x6
[2026-10-07T18:44:51Z] attribution: item 0x4a8b68 (4955 reads) read from positions p25(it1 s9)x630 p121(it7 s9)x604 p9(it0 s9)x598 p41(it2 s9)x593 p57(it3 s9)x591 p89(it5 s9)x582 p105(it6 s9)x577 p73(it4 s9)x569 p40(it2 s8)x11 p24(it1 s8)x7 p62(it3 s14)x6 p124(it7 s12)x5
[2026-10-07T18:44:51Z] attribution: item 0x254585 (4950 reads) read from positions p73(it4 s9)x650 p41(it2 s9)x607 p9(it0 s9)x603 p25(it1 s9)x600 p105(it6 s9)x600 p57(it3 s9)x593 p121(it7 s9)x591 p89(it5 s9)x572 p51(it3 s3)x7 p3(it0 s3)x6 p115(it7 s3)x6 p127(it7 s15)x5
[2026-10-07T18:44:51Z] hottest item p100211-attack-f8 (0x454585): 21573 reads (0.0010% of all); predicted source site-instr4:r0:one-zero-bit:last-writer-load@3
[2026-10-07T18:44:51Z] program p100211-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T18:44:52Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100064", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T18:44:52Z] census warps: programs [100064] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T18:44:52Z] day 20730: cache filled in 0.67 s, fnv 448274a57f508cbc
[2026-10-07T18:44:56Z] table: 16777216 items derived with their 8 lines in 2.8 s; library comparison sample (0 mismatches)
[2026-10-07T18:45:00Z] program p100064-attack-f8: epoch seed 96bc342fb24875e10a17d093c27cdfe28c4293bfb4e0c96bc302de885e195a89 era seed a860aa82556a6f86d2b45818c33f274427428086c50c5d5b3f7101128c289bdf id 2442abf9d56f6611 attempt 2 class mx8-eraa210d1bd+sh256x27 op mix load=16 sub=9 add=7 xor=7 mul=5 rotl=5 mad=4 rotr=4 shfl=4 or=2 mulhi=1; era stride mul 0x82b69d5d rot 9 interleave [7, 8, 9, 12] windows 2:1:0 9:0:0 10:1:0 15:1:1 16:0:0 20:2:2 21:0:0 25:0:0 28:1:1 30:0:0 31:0:0 33:2:1 34:1:1 35:0:0 41:1:0 51:1:0
[2026-10-07T18:45:00Z] load site instr 2: src r5 win 1 off 0; last base writer rotl at 0; writers back to the last injecting one: rotl@0 xor@62; shadow writes of r5 per rep: add=9 mad=7 mul=1 mulhi=2 or=1 rotl=6 rotr=2 shfl=2 sub=3 xor=6
[2026-10-07T18:45:00Z] load site instr 9: src r1 win 0 off 0; last base writer load at 2; writers back to the last injecting one: load@2; shadow writes of r1 per rep: add=4 mad=2 mul=5 mulhi=1 or=3 rotr=4 shfl=4 sub=3 xor=1
[2026-10-07T18:45:00Z] load site instr 10: src r6 win 1 off 0; last base writer sub at 8; writers back to the last injecting one: sub@8; shadow writes of r6 per rep: add=8 mad=5 mul=2 mulhi=1 or=3 rotl=2 rotr=5 shfl=1 sub=2 xor=1
[2026-10-07T18:45:00Z] load site instr 15: src r6 win 1 off 1; last base writer shfl at 14; writers back to the last injecting one: shfl@14; shadow writes of r6 per rep: add=8 mad=5 mul=2 mulhi=1 or=3 rotl=2 rotr=5 shfl=1 sub=2 xor=1
[2026-10-07T18:45:00Z] load site instr 16: src r7 win 0 off 0; last base writer shfl at 13; writers back to the last injecting one: shfl@13; shadow writes of r7 per rep: add=7 mul=5 mulhi=1 rotl=2 rotr=7 shfl=5 sub=1 xor=4
[2026-10-07T18:45:00Z] load site instr 20: src r2 win 2 off 2; last base writer load at 16; writers back to the last injecting one: load@16; shadow writes of r2 per rep: add=6 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=3 shfl=5 sub=5 xor=1
[2026-10-07T18:45:00Z] load site instr 21: src r6 win 0 off 0; last base writer load at 20; writers back to the last injecting one: load@20; shadow writes of r6 per rep: add=8 mad=5 mul=2 mulhi=1 or=3 rotl=2 rotr=5 shfl=1 sub=2 xor=1
[2026-10-07T18:45:00Z] load site instr 25: src r5 win 0 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r5 per rep: add=9 mad=7 mul=1 mulhi=2 or=1 rotl=6 rotr=2 shfl=2 sub=3 xor=6
[2026-10-07T18:45:00Z] load site instr 28: src r2 win 1 off 1; last base writer xor at 26; writers back to the last injecting one: xor@26; shadow writes of r2 per rep: add=6 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=3 shfl=5 sub=5 xor=1
[2026-10-07T18:45:00Z] load site instr 30: src r7 win 0 off 0; last base writer load at 28; writers back to the last injecting one: load@28; shadow writes of r7 per rep: add=7 mul=5 mulhi=1 rotl=2 rotr=7 shfl=5 sub=1 xor=4
[2026-10-07T18:45:00Z] load site instr 31: src r4 win 0 off 0; last base writer load at 25; writers back to the last injecting one: load@25; shadow writes of r4 per rep: add=6 mad=3 mul=2 mulhi=4 rotl=4 rotr=4 shfl=3 sub=6 xor=4
[2026-10-07T18:45:00Z] load site instr 33: src r0 win 2 off 1; last base writer mad at 27; writers back to the last injecting one: mad@27; shadow writes of r0 per rep: add=7 mad=1 mul=4 mulhi=2 or=2 rotl=2 rotr=4 shfl=2 sub=3 xor=2
[2026-10-07T18:45:00Z] load site instr 34: src r7 win 1 off 1; last base writer load at 33; writers back to the last injecting one: load@33; shadow writes of r7 per rep: add=7 mul=5 mulhi=1 rotl=2 rotr=7 shfl=5 sub=1 xor=4
[2026-10-07T18:45:00Z] load site instr 35: src r5 win 0 off 0; last base writer load at 34; writers back to the last injecting one: load@34; shadow writes of r5 per rep: add=9 mad=7 mul=1 mulhi=2 or=1 rotl=6 rotr=2 shfl=2 sub=3 xor=6
[2026-10-07T18:45:00Z] load site instr 41: src r2 win 1 off 0; last base writer add at 37; writers back to the last injecting one: add@37; shadow writes of r2 per rep: add=6 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=3 shfl=5 sub=5 xor=1
[2026-10-07T18:45:00Z] load site instr 51: src r0 win 1 off 0; last base writer rotl at 46; writers back to the last injecting one: rotl@46 mad@27; shadow writes of r0 per rep: add=7 mad=1 mul=4 mulhi=2 or=2 rotl=2 rotr=4 shfl=2 sub=3 xor=2
[2026-10-07T18:45:00Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x800000,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x400000,2^22) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x0,2^23); expected reads per item by quarter 120.000 152.000 136.000 104.000 (flat uniform 128.000)
[2026-10-07T18:46:26Z] 524288 warps (16777216 nonces) interpreted in 86.1 s (5.254 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:46:26Z] p100064-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8713
[2026-10-07T18:46:26Z] p100064-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T18:46:26Z] p100064-attack-f8 distinct lines per warp: n 524288 min 32568 p1 32605 median 32637 p99 32664 max 32694 mean 32636.2220
[2026-10-07T18:46:26Z] p100064-attack-f8 distinct items per warp: n 524288 min 4090 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4813
[2026-10-07T18:46:26Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:46:26Z] positions: largest hi16-bucket (256 items) share 0.0476% at p107 (iteration 6, site 11, instr 33); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p91 (site 11, instr 33)
[2026-10-07T18:46:26Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p5 (site 5, instr 20); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:46:26Z] p100064-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 696 (bin 4194316) z_max +50.20 min 54 z_min -6.54 chi2/dof 5.44889 chi2_z +12885.36 top0.1% 0.24244% top0.5% 1.01728% top1% 1.88639%
[2026-10-07T18:46:26Z] p100064-attack-f8 item histogram against the window density: full 2^24 chi2/dof 2.73021 largest 696 (item 0x40000c) at +44.12 sigma smallest at -6.16; buckets64 chi2/dof 111.72983 largest 40049 (bucket 65536) at +307.42 sigma smallest at -21.33
[2026-10-07T18:46:30Z] p100064-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 221 (bin 5635400) z_max +8.22 min 58 z_min -6.19 chi2/dof 3.50075 chi2_z +7242.94 top0.1% 0.14832% top0.5% 0.71374% top1% 1.40048%
[2026-10-07T18:46:30Z] p100064-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00059 largest +5.93 sigma; buckets64 chi2/dof 0.99822 largest +5.04 smallest -4.62
[2026-10-07T18:46:30Z] 6-sigma p100064-attack-f8 items buckets64 against the window density: largest bucket +307.42 sigma, smallest -21.33 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:46:30Z] hot-set p100064-attack-f8 items (windowed control): f 0.1% S_f 0.24244% E_f(control) 0.14832% X_f +0.09412% X_f/f +0.9412 -> no hot set
[2026-10-07T18:46:30Z] hot-set p100064-attack-f8 items (windowed control): f 0.5% S_f 1.01728% E_f(control) 0.71374% X_f +0.30354% X_f/f +0.6071 -> no hot set
[2026-10-07T18:46:30Z] hot-set p100064-attack-f8 items (windowed control): f 1.0% S_f 1.88639% E_f(control) 1.40048% X_f +0.48591% X_f/f +0.4859 -> no hot set
[2026-10-07T18:46:30Z] hot-set p100064-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:46:33Z] p100064-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 1637841) z_max +5.83 min 66 z_min -5.48 chi2/dof 0.99961 chi2_z -1.14 top0.1% 0.13104% top0.5% 0.63240% top1% 1.24325%
[2026-10-07T18:46:33Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.24244% E_f(control) 0.13104% X_f +0.11140% X_f/f +1.1140 -> HOT SET
[2026-10-07T18:46:33Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.01728% E_f(control) 0.63240% X_f +0.38488% X_f/f +0.7698 -> no hot set
[2026-10-07T18:46:33Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.88639% E_f(control) 1.24325% X_f +0.64314% X_f/f +0.6431 -> no hot set
[2026-10-07T18:46:33Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T18:46:33Z] ratio p100064-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.6346x / 1.4253x / 1.3470x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 1.8501x / 1.6086x / 1.5173x
[2026-10-07T18:46:35Z] attribution: hot threshold count >= 275 marks 16882 items (0.1006% of items) holding 5235286 reads (0.2438% of reads); top 8 items t=0x40000c:696 t=0x400051:686 t=0x400034:681 t=0x400079:677 t=0x40005a:673 t=0x400015:672 t=0x400006:670 t=0x400026:669
[2026-10-07T18:46:59Z] attribution: reads on hot items per position (flat expectation 0.1006% of each position's 16777216 reads); the 24 largest: p27(it1 s11)=2.203% p107(it6 s11)=2.203% p91(it5 s11)=2.200% p43(it2 s11)=2.199% p59(it3 s11)=2.197% p123(it7 s11)=2.196% p75(it4 s11)=2.194% p11(it0 s11)=2.147% p111(it6 s15)=0.351% p95(it5 s15)=0.351% p47(it2 s15)=0.351% p79(it4 s15)=0.349% p31(it1 s15)=0.349% p63(it3 s15)=0.349% p127(it7 s15)=0.348% p15(it0 s15)=0.347% p126(it7 s14)=0.212% p50(it3 s2)=0.211% p82(it5 s2)=0.211% p46(it2 s14)=0.211% p2(it0 s2)=0.211% p114(it7 s2)=0.211% p80(it5 s0)=0.210% p112(it7 s0)=0.210%
[2026-10-07T18:46:59Z] attribution: hot reads by iteration it0=0.241% it1=0.244% it2=0.244% it3=0.244% it4=0.244% it5=0.244% it6=0.244% it7=0.244% ; by site s0=0.209% s1=0.104% s2=0.210% s3=0.000% s4=0.104% s5=0.000% s6=0.104% s7=0.105% s8=0.000% s9=0.104% s10=0.104% s11=2.192% s12=0.000% s13=0.104% s14=0.209% s15=0.350%
[2026-10-07T18:46:59Z] site 0 (instr 2, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2090% (flat expectation 0.1006%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:46:59Z] site 1 (instr 9, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1041% (flat expectation 0.1006%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:46:59Z] site 2 (instr 10, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2100% (flat expectation 0.1006%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:46:59Z] site 3 (instr 15, src r6, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1006%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:46:59Z] site 4 (instr 16, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1043% (flat expectation 0.1006%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:46:59Z] site 5 (instr 20, src r2, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1006%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:46:59Z] site 6 (instr 21, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1043% (flat expectation 0.1006%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:46:59Z] site 7 (instr 25, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1053% (flat expectation 0.1006%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:46:59Z] site 8 (instr 28, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1006%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:46:59Z] site 9 (instr 30, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1042% (flat expectation 0.1006%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:46:59Z] site 10 (instr 31, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1044% (flat expectation 0.1006%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:46:59Z] site 11 (instr 33, src r0, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 2.1923% (flat expectation 0.1006%); index entropy 13.899 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0463% (window expectation 0.0061%)
[2026-10-07T18:46:59Z] site 12 (instr 34, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1006%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:46:59Z] site 13 (instr 35, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1043% (flat expectation 0.1006%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:46:59Z] site 14 (instr 41, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2091% (flat expectation 0.1006%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:46:59Z] site 15 (instr 51, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.3495% (flat expectation 0.1006%); index entropy 14.818 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0098% (window expectation 0.0031%)
[2026-10-07T18:46:59Z] attribution: item 0x40000c (696 reads) read from positions p27(it1 s11)x76 p75(it4 s11)x72 p91(it5 s11)x72 p59(it3 s11)x67 p43(it2 s11)x63 p107(it6 s11)x62 p11(it0 s11)x59 p123(it7 s11)x54 p31(it1 s15)x8 p15(it0 s15)x7 p127(it7 s15)x6 p10(it0 s10)x6
[2026-10-07T18:46:59Z] attribution: item 0x400051 (686 reads) read from positions p107(it6 s11)x80 p27(it1 s11)x68 p75(it4 s11)x66 p91(it5 s11)x65 p59(it3 s11)x61 p43(it2 s11)x60 p11(it0 s11)x52 p123(it7 s11)x50 p31(it1 s15)x13 p95(it5 s15)x11 p127(it7 s15)x9 p79(it4 s15)x9
[2026-10-07T18:46:59Z] attribution: item 0x400034 (681 reads) read from positions p107(it6 s11)x75 p91(it5 s11)x74 p43(it2 s11)x73 p59(it3 s11)x67 p75(it4 s11)x66 p27(it1 s11)x59 p11(it0 s11)x47 p123(it7 s11)x47 p31(it1 s15)x11 p47(it2 s15)x11 p127(it7 s15)x10 p79(it4 s15)x9
[2026-10-07T18:46:59Z] attribution: item 0x400079 (677 reads) read from positions p107(it6 s11)x71 p27(it1 s11)x70 p75(it4 s11)x64 p59(it3 s11)x63 p91(it5 s11)x62 p11(it0 s11)x61 p43(it2 s11)x61 p123(it7 s11)x57 p111(it6 s15)x11 p47(it2 s15)x9 p79(it4 s15)x9 p31(it1 s15)x8
[2026-10-07T18:46:59Z] attribution: item 0x40005a (673 reads) read from positions p107(it6 s11)x73 p59(it3 s11)x68 p91(it5 s11)x67 p123(it7 s11)x66 p43(it2 s11)x65 p75(it4 s11)x65 p11(it0 s11)x56 p27(it1 s11)x51 p111(it6 s15)x10 p127(it7 s15)x8 p47(it2 s15)x8 p79(it4 s15)x7
[2026-10-07T18:46:59Z] attribution: item 0x400015 (672 reads) read from positions p27(it1 s11)x72 p59(it3 s11)x72 p123(it7 s11)x72 p43(it2 s11)x68 p11(it0 s11)x64 p91(it5 s11)x61 p75(it4 s11)x59 p107(it6 s11)x56 p79(it4 s15)x13 p127(it7 s15)x11 p111(it6 s15)x10 p15(it0 s15)x7
[2026-10-07T18:46:59Z] attribution: item 0x400006 (670 reads) read from positions p59(it3 s11)x74 p75(it4 s11)x67 p27(it1 s11)x64 p43(it2 s11)x64 p91(it5 s11)x61 p11(it0 s11)x57 p123(it7 s11)x55 p107(it6 s11)x54 p47(it2 s15)x14 p95(it5 s15)x11 p31(it1 s15)x7 p94(it5 s14)x6
[2026-10-07T18:46:59Z] attribution: item 0x400026 (669 reads) read from positions p27(it1 s11)x69 p59(it3 s11)x67 p75(it4 s11)x66 p43(it2 s11)x62 p91(it5 s11)x61 p11(it0 s11)x60 p107(it6 s11)x58 p123(it7 s11)x52 p127(it7 s15)x10 p31(it1 s15)x10 p47(it2 s15)x9 p63(it3 s15)x7
[2026-10-07T18:46:59Z] hottest item p100064-attack-f8 (0x40000c): 696 reads (0.0000% of all); predicted source none
[2026-10-07T18:46:59Z] program p100064-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T18:46:59Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100159", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T18:46:59Z] census warps: programs [100159] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T18:47:00Z] day 20730: cache filled in 0.65 s, fnv 448274a57f508cbc
[2026-10-07T18:47:03Z] table: 16777216 items derived with their 8 lines in 2.9 s; library comparison sample (0 mismatches)
[2026-10-07T18:47:08Z] program p100159-attack-f8: epoch seed 1d76edc78af5ddea74900f1e005f77ef1b115c69c583ea6f57792e386806aede era seed b659277d9635ccc59ea759fd747241f440d5dc89947f629a2473ccef349c869b id 573d650159a8b04e attempt 3 class mx8-era9e0e4f28+sh256x27 op mix load=16 mulhi=7 xor=7 mul=6 add=5 mad=5 rotl=4 shfl=4 sub=4 or=3 rotr=3; era stride mul 0xa39d49c9 rot 7 interleave [3, 8, 9, 10] windows 5:2:0 10:0:0 16:2:3 17:2:2 23:2:2 26:2:2 40:0:0 42:2:3 45:1:0 47:2:3 49:2:2 56:0:0 59:2:0 60:2:3 61:0:0 62:0:0
[2026-10-07T18:47:08Z] load site instr 5: src r4 win 2 off 0; last base writer shfl at 0; writers back to the last injecting one: shfl@0; shadow writes of r4 per rep: add=5 mad=3 mul=1 mulhi=1 or=2 rotl=3 rotr=2 shfl=4 sub=1 xor=5
[2026-10-07T18:47:08Z] load site instr 10: src r7 win 0 off 0; last base writer add at 6; writers back to the last injecting one: add@6; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:47:08Z] load site instr 16: src r5 win 2 off 3; last base writer xor at 9; writers back to the last injecting one: xor@9; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:47:08Z] load site instr 17: src r1 win 2 off 2; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r1 per rep: add=3 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=4 shfl=3 sub=2 xor=6
[2026-10-07T18:47:08Z] load site instr 23: src r7 win 2 off 2; last base writer load at 16; writers back to the last injecting one: load@16; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:47:08Z] load site instr 26: src r5 win 2 off 2; last base writer xor at 25; writers back to the last injecting one: xor@25; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:47:08Z] load site instr 40: src r1 win 0 off 0; last base writer shfl at 30; writers back to the last injecting one: shfl@30; shadow writes of r1 per rep: add=3 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=4 shfl=3 sub=2 xor=6
[2026-10-07T18:47:08Z] load site instr 42: src r5 win 2 off 3; last base writer mad at 33; writers back to the last injecting one: mad@33; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:47:08Z] load site instr 45: src r7 win 1 off 0; last base writer add at 44; writers back to the last injecting one: add@44; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:47:08Z] load site instr 47: src r2 win 2 off 3; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r2 per rep: add=9 mad=4 mul=3 mulhi=2 or=2 rotl=2 rotr=1 shfl=2 sub=2 xor=4
[2026-10-07T18:47:08Z] load site instr 49: src r5 win 2 off 2; last base writer load at 47; writers back to the last injecting one: load@47; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:47:08Z] load site instr 56: src r1 win 0 off 0; last base writer mad at 51; writers back to the last injecting one: mad@51; shadow writes of r1 per rep: add=3 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=4 shfl=3 sub=2 xor=6
[2026-10-07T18:47:08Z] load site instr 59: src r7 win 2 off 0; last base writer add at 50; writers back to the last injecting one: add@50; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:47:08Z] load site instr 60: src r2 win 2 off 3; last base writer rotr at 54; writers back to the last injecting one: rotr@54 load@45; shadow writes of r2 per rep: add=9 mad=4 mul=3 mulhi=2 or=2 rotl=2 rotr=1 shfl=2 sub=2 xor=4
[2026-10-07T18:47:08Z] load site instr 61: src r6 win 0 off 0; last base writer load at 56; writers back to the last injecting one: load@56; shadow writes of r6 per rep: add=4 mad=3 mul=1 mulhi=4 rotl=1 rotr=2 shfl=2 sub=3 xor=8
[2026-10-07T18:47:08Z] load site instr 62: src r5 win 0 off 0; last base writer load at 60; writers back to the last injecting one: load@60; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:47:08Z] window layer: site item windows (first, items) (0x0,2^22) (0x0,2^24) (0xc00000,2^22) (0x800000,2^22) (0x800000,2^22) (0x800000,2^22) (0x0,2^24) (0xc00000,2^22) (0x0,2^23) (0xc00000,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^22) (0xc00000,2^22) (0x0,2^24) (0x0,2^24); expected reads per item by quarter 120.000 56.000 168.000 168.000 (flat uniform 128.000)
[2026-10-07T18:48:05Z] 524288 warps (16777216 nonces) interpreted in 57.7 s (3.524 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:48:05Z] p100159-attack-f8 distinct lines per hash: n 16777216 min 968 p1 1000 median 1023 p99 1024 max 1024 mean 1019.4825
[2026-10-07T18:48:05Z] p100159-attack-f8 distinct items per hash: n 16777216 min 121 p1 125 median 128 p99 128 max 128 mean 127.4508
[2026-10-07T18:48:05Z] p100159-attack-f8 distinct lines per warp: n 524288 min 32330 p1 32412 median 32498 p99 32572 max 32632 mean 32496.4928
[2026-10-07T18:48:05Z] p100159-attack-f8 distinct items per warp: n 524288 min 4058 p1 4068 median 4078 p99 4087 max 4093 mean 4077.8772
[2026-10-07T18:48:05Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:48:05Z] positions: largest hi16-bucket (256 items) share 0.0174% at p71 (iteration 4, site 7, instr 42); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p7 (site 7, instr 42)
[2026-10-07T18:48:05Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p9 (site 9, instr 47); saturated sources at one position 0 of 2048 at p0 (site 0, instr 5); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:48:05Z] p100159-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 461 (bin 12582957) z_max +29.43 min 23 z_min -9.28 chi2/dof 19.27483 chi2_z +52929.55 top0.1% 0.21205% top0.5% 0.94619% top1% 1.81277%
[2026-10-07T18:48:05Z] p100159-attack-f8 item histogram against the window density: full 2^24 chi2/dof 2.35369 largest 461 (item 0xc0002d) at +22.61 sigma smallest at -6.25; buckets64 chi2/dof 87.22184 largest 26780 (bucket 196608) at +154.57 sigma smallest at -18.35
[2026-10-07T18:48:09Z] p100159-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 239 (bin 10424085) z_max +9.81 min 23 z_min -9.28 chi2/dof 17.50060 chi2_z +47790.84 top0.1% 0.16452% top0.5% 0.79498% top1% 1.56373%
[2026-10-07T18:48:09Z] p100159-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99982 largest +5.48 sigma; buckets64 chi2/dof 1.00218 largest +4.63 smallest -4.85
[2026-10-07T18:48:09Z] 6-sigma p100159-attack-f8 items buckets64 against the window density: largest bucket +154.57 sigma, smallest -18.35 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:48:09Z] hot-set p100159-attack-f8 items (windowed control): f 0.1% S_f 0.21205% E_f(control) 0.16452% X_f +0.04753% X_f/f +0.4753 -> no hot set
[2026-10-07T18:48:09Z] hot-set p100159-attack-f8 items (windowed control): f 0.5% S_f 0.94619% E_f(control) 0.79498% X_f +0.15121% X_f/f +0.3024 -> no hot set
[2026-10-07T18:48:09Z] hot-set p100159-attack-f8 items (windowed control): f 1.0% S_f 1.81277% E_f(control) 1.56373% X_f +0.24904% X_f/f +0.2490 -> no hot set
[2026-10-07T18:48:09Z] hot-set p100159-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:48:12Z] p100159-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 192 (bin 14736510) z_max +5.66 min 70 z_min -5.13 chi2/dof 0.99968 chi2_z -0.94 top0.1% 0.13104% top0.5% 0.63242% top1% 1.24329%
[2026-10-07T18:48:12Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.21205% E_f(control) 0.13104% X_f +0.08101% X_f/f +0.8101 -> no hot set
[2026-10-07T18:48:12Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.94619% E_f(control) 0.63242% X_f +0.31377% X_f/f +0.6275 -> no hot set
[2026-10-07T18:48:12Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.81277% E_f(control) 1.24329% X_f +0.56948% X_f/f +0.5695 -> no hot set
[2026-10-07T18:48:12Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:48:12Z] ratio p100159-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.2889x / 1.1902x / 1.1593x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 1.6182x / 1.4961x / 1.4580x
[2026-10-07T18:48:14Z] attribution: hot threshold count >= 251 marks 17263 items (0.1029% of items) holding 4675658 reads (0.2177% of reads); top 8 items t=0xc0002d:461 t=0xc00007:457 t=0xc00014:455 t=0xc00030:453 t=0xc0003d:452 t=0xc00026:451 t=0xc00008:448 t=0xc0003f:447
[2026-10-07T18:48:44Z] attribution: reads on hot items per position (flat expectation 0.1029% of each position's 16777216 reads); the 24 largest: p87(it5 s7)=1.636% p55(it3 s7)=1.632% p71(it4 s7)=1.631% p39(it2 s7)=1.630% p119(it7 s7)=1.630% p103(it6 s7)=1.630% p23(it1 s7)=1.628% p7(it0 s7)=1.590% p57(it3 s9)=0.440% p9(it0 s9)=0.440% p25(it1 s9)=0.440% p41(it2 s9)=0.439% p77(it4 s13)=0.439% p89(it5 s9)=0.439% p93(it5 s13)=0.439% p45(it2 s13)=0.439% p125(it7 s13)=0.439% p114(it7 s2)=0.438% p13(it0 s13)=0.438% p61(it3 s13)=0.438% p29(it1 s13)=0.437% p73(it4 s9)=0.437% p105(it6 s9)=0.437% p121(it7 s9)=0.437%
[2026-10-07T18:48:44Z] attribution: hot reads by iteration it0=0.216% it1=0.218% it2=0.218% it3=0.218% it4=0.218% it5=0.219% it6=0.218% it7=0.218% ; by site s0=0.000% s1=0.109% s2=0.436% s3=0.000% s4=0.000% s5=0.000% s6=0.109% s7=1.626% s8=0.000% s9=0.439% s10=0.000% s11=0.109% s12=0.000% s13=0.438% s14=0.109% s15=0.109%
[2026-10-07T18:48:44Z] site 0 (instr 5, src r4, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 1 (instr 10, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1087% (flat expectation 0.1029%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:48:44Z] site 2 (instr 16, src r5, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.4360% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 3 (instr 17, src r1, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0002% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 4 (instr 23, src r7, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0002% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 5 (instr 26, src r5, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0003% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0075% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 6 (instr 40, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1093% (flat expectation 0.1029%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:48:44Z] site 7 (instr 42, src r5, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 1.6259% (flat expectation 0.1029%); index entropy 13.993 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0165% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 8 (instr 45, src r7, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1029%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:48:44Z] site 9 (instr 47, src r2, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.4386% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 10 (instr 49, src r5, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0002% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 11 (instr 56, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1087% (flat expectation 0.1029%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:48:44Z] site 12 (instr 59, src r7, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 13 (instr 60, src r2, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.4381% (flat expectation 0.1029%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:48:44Z] site 14 (instr 61, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1088% (flat expectation 0.1029%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:48:44Z] site 15 (instr 62, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1087% (flat expectation 0.1029%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:48:44Z] attribution: item 0xc0002d (461 reads) read from positions p55(it3 s7)x43 p119(it7 s7)x42 p87(it5 s7)x40 p23(it1 s7)x36 p103(it6 s7)x35 p71(it4 s7)x33 p7(it0 s7)x30 p39(it2 s7)x25 p41(it2 s9)x10 p109(it6 s13)x10 p9(it0 s9)x9 p105(it6 s9)x9
[2026-10-07T18:48:44Z] attribution: item 0xc00007 (457 reads) read from positions p55(it3 s7)x48 p23(it1 s7)x45 p119(it7 s7)x45 p87(it5 s7)x39 p103(it6 s7)x39 p39(it2 s7)x34 p7(it0 s7)x30 p71(it4 s7)x27 p2(it0 s2)x9 p41(it2 s9)x7 p45(it2 s13)x6 p66(it4 s2)x6
[2026-10-07T18:48:44Z] attribution: item 0xc00014 (455 reads) read from positions p55(it3 s7)x45 p71(it4 s7)x43 p103(it6 s7)x43 p23(it1 s7)x41 p119(it7 s7)x39 p7(it0 s7)x37 p39(it2 s7)x33 p87(it5 s7)x33 p45(it2 s13)x9 p98(it6 s2)x9 p29(it1 s13)x6 p77(it4 s13)x6
[2026-10-07T18:48:44Z] attribution: item 0xc00030 (453 reads) read from positions p119(it7 s7)x50 p71(it4 s7)x47 p55(it3 s7)x45 p103(it6 s7)x36 p39(it2 s7)x35 p87(it5 s7)x35 p23(it1 s7)x32 p7(it0 s7)x22 p25(it1 s9)x9 p73(it4 s9)x9 p29(it1 s13)x8 p82(it5 s2)x8
[2026-10-07T18:48:44Z] attribution: item 0xc0003d (452 reads) read from positions p71(it4 s7)x44 p103(it6 s7)x44 p87(it5 s7)x40 p55(it3 s7)x37 p119(it7 s7)x36 p39(it2 s7)x33 p23(it1 s7)x31 p7(it0 s7)x27 p66(it4 s2)x8 p121(it7 s9)x7 p9(it0 s9)x7 p29(it1 s13)x7
[2026-10-07T18:48:44Z] attribution: item 0xc00026 (451 reads) read from positions p119(it7 s7)x48 p71(it4 s7)x46 p39(it2 s7)x39 p7(it0 s7)x37 p55(it3 s7)x37 p87(it5 s7)x32 p103(it6 s7)x29 p23(it1 s7)x27 p114(it7 s2)x8 p66(it4 s2)x7 p73(it4 s9)x7 p2(it0 s2)x6
[2026-10-07T18:48:44Z] attribution: item 0xc00008 (448 reads) read from positions p103(it6 s7)x46 p23(it1 s7)x40 p119(it7 s7)x40 p55(it3 s7)x39 p7(it0 s7)x37 p71(it4 s7)x34 p87(it5 s7)x31 p39(it2 s7)x30 p25(it1 s9)x8 p61(it3 s13)x8 p57(it3 s9)x7 p98(it6 s2)x7
[2026-10-07T18:48:44Z] attribution: item 0xc0003f (447 reads) read from positions p71(it4 s7)x48 p23(it1 s7)x45 p55(it3 s7)x41 p7(it0 s7)x36 p87(it5 s7)x35 p119(it7 s7)x34 p103(it6 s7)x33 p39(it2 s7)x32 p89(it5 s9)x8 p34(it2 s2)x7 p82(it5 s2)x7 p57(it3 s9)x6
[2026-10-07T18:48:44Z] hottest item p100159-attack-f8 (0xc0002d): 461 reads (0.0000% of all); predicted source none
[2026-10-07T18:48:44Z] program p100159-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED

View file

@ -0,0 +1,47 @@
[2026-10-07T18:30:09Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "2", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/igneum-wt-adv-accept/adv/live", "--validate", "sample"]
[2026-10-07T18:30:09Z] census warps: programs [2] day 20730 nonces 1000000 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:30:24Z] day 20730: cache filled in 15.39 s, fnv 448274a57f508cbc
[2026-10-07T18:30:25Z] table: 16777216 items derived with their 8 lines in 1.3 s; library comparison sample (0 mismatches)
[2026-10-07T18:30:30Z] program p2-attack-f8: epoch seed 59cef1aaa406506685f4355933868219bedece8dbd4e84c281724db9313bfdfa era seed 9cba001faa1e017235841c72f560ebd1b93f6d7aea5f9a598f7d3080e8a11f69 id 8a0047b2eb071ade attempt 5 class mx8-era35d128b9+sh256x27 op mix load=16 mul=8 add=6 mulhi=6 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 sub=2; era stride mul 0xbf0fab63 rot 4 interleave [2, 3, 7, 15] windows 2:2:0 3:0:0 7:0:0 9:0:0 13:2:1 17:1:1 21:2:0 22:1:0 23:0:0 27:1:0 30:2:2 40:1:0 44:2:1 55:0:0 62:0:0 63:2:0
[2026-10-07T18:30:30Z] load site instr 2: src r1 win 2 off 0; last base writer add at 1; writers back to the last injecting one: add@1; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 3: src r5 win 0 off 0; last base writer mad at 0; writers back to the last injecting one: mad@0; shadow writes of r5 per rep: add=3 mad=4 mul=5 or=5 rotl=1 rotr=4 shfl=4 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 7: src r1 win 0 off 0; last base writer shfl at 5; writers back to the last injecting one: shfl@5; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 9: src r3 win 0 off 0; last base writer add at 6; writers back to the last injecting one: add@6; shadow writes of r3 per rep: add=4 mad=3 mul=1 mulhi=2 rotl=1 rotr=2 shfl=3 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 13: src r0 win 2 off 1; last base writer xor at 12; writers back to the last injecting one: xor@12; shadow writes of r0 per rep: add=5 mad=6 mul=1 mulhi=3 or=1 rotl=1 rotr=7 shfl=8 sub=2
[2026-10-07T18:30:30Z] load site instr 17: src r5 win 1 off 1; last base writer xor at 14; writers back to the last injecting one: xor@14; shadow writes of r5 per rep: add=3 mad=4 mul=5 or=5 rotl=1 rotr=4 shfl=4 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 21: src r4 win 2 off 0; last base writer shfl at 15; writers back to the last injecting one: shfl@15; shadow writes of r4 per rep: add=4 mad=4 mulhi=1 or=1 rotl=4 rotr=1 shfl=2 sub=8 xor=6
[2026-10-07T18:30:30Z] load site instr 22: src r5 win 1 off 0; last base writer add at 20; writers back to the last injecting one: add@20; shadow writes of r5 per rep: add=3 mad=4 mul=5 or=5 rotl=1 rotr=4 shfl=4 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 23: src r1 win 0 off 0; last base writer load at 13; writers back to the last injecting one: load@13; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 27: src r2 win 1 off 0; last base writer xor at 26; writers back to the last injecting one: xor@26; shadow writes of r2 per rep: add=6 mad=2 mul=4 mulhi=3 or=3 rotl=5 rotr=3 shfl=3 sub=3 xor=6
[2026-10-07T18:30:30Z] load site instr 30: src r2 win 2 off 2; last base writer rotr at 29; writers back to the last injecting one: rotr@29 xor@26; shadow writes of r2 per rep: add=6 mad=2 mul=4 mulhi=3 or=3 rotl=5 rotr=3 shfl=3 sub=3 xor=6
[2026-10-07T18:30:30Z] load site instr 40: src r1 win 1 off 0; last base writer rotl at 32; writers back to the last injecting one: rotl@32 rotl@31 load@30; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 44: src r4 win 2 off 1; last base writer load at 27; writers back to the last injecting one: load@27; shadow writes of r4 per rep: add=4 mad=4 mulhi=1 or=1 rotl=4 rotr=1 shfl=2 sub=8 xor=6
[2026-10-07T18:30:30Z] load site instr 55: src r4 win 0 off 0; last base writer mad at 51; writers back to the last injecting one: mad@51; shadow writes of r4 per rep: add=4 mad=4 mulhi=1 or=1 rotl=4 rotr=1 shfl=2 sub=8 xor=6
[2026-10-07T18:30:30Z] load site instr 62: src r0 win 0 off 0; last base writer add at 53; writers back to the last injecting one: add@53; shadow writes of r0 per rep: add=5 mad=6 mul=1 mulhi=3 or=1 rotl=1 rotr=7 shfl=8 sub=2
[2026-10-07T18:30:30Z] load site instr 63: src r1 win 2 off 0; last base writer load at 62; writers back to the last injecting one: load@62; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] window layer: site item windows (first, items) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x400000,2^22) (0x800000,2^23) (0x0,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x0,2^23) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^22); expected reads per item by quarter 11.444 9.537 5.722 3.815 (flat uniform 7.629)
[2026-10-07T18:30:33Z] 31250 warps (1000000 nonces) interpreted in 3.7 s (3.780 ms per warp per thread); Epoch::hash_warp agreement on 95 warps: 0 mismatches
[2026-10-07T18:30:33Z] p2-attack-f8 distinct lines per hash: n 1000000 min 1014 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8709
[2026-10-07T18:30:33Z] p2-attack-f8 distinct items per hash: n 1000000 min 127 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T18:30:33Z] p2-attack-f8 distinct lines per warp: n 31250 min 32576 p1 32604 median 32636 p99 32663 max 32686 mean 32635.7294
[2026-10-07T18:30:33Z] p2-attack-f8 distinct items per warp: n 31250 min 4091 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4226
[2026-10-07T18:30:33Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:30:33Z] positions: largest hi16-bucket (256 items) share 0.0104% at p16 (iteration 1, site 0, instr 2); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 2)
[2026-10-07T18:30:33Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p17 (site 1, instr 3); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:30:34Z] p2-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 32 (bin 1185685) z_max +8.82 min 0 z_min -2.76 chi2/dof 2.19250 chi2_z +3453.84 top0.1% 0.29907% top0.5% 1.34679% top1% 2.55754%
[2026-10-07T18:30:34Z] p2-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00015 largest 23 (item 0x8c49bb) at +7.22 sigma smallest at -3.38; buckets64 chi2/dof 0.99742 largest 859 (bucket 24423) at +4.68 sigma smallest at -4.55
[2026-10-07T18:30:34Z] p2-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 37 (bin 3356675) z_max +10.63 min 0 z_min -2.76 chi2/dof 2.19210 chi2_z +3452.68 top0.1% 0.29918% top0.5% 1.34673% top1% 2.55749%
[2026-10-07T18:30:34Z] p2-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99966 largest +7.55 sigma; buckets64 chi2/dof 1.00387 largest +4.49 smallest -4.89
[2026-10-07T18:30:34Z] 6-sigma p2-attack-f8 items buckets64 against the window density: largest bucket +4.68 sigma, smallest -4.55 -> within 6 sigma
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): f 0.1% S_f 0.29907% E_f(control) 0.29918% X_f -0.00012% X_f/f -0.0012 -> no hot set
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): f 0.5% S_f 1.34679% E_f(control) 1.34673% X_f +0.00006% X_f/f +0.0001 -> no hot set
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): f 1.0% S_f 2.55754% E_f(control) 2.55749% X_f +0.00005% X_f/f +0.0000 -> no hot set
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:30:34Z] p2-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 28 (bin 13310856) z_max +7.37 min 0 z_min -2.76 chi2/dof 0.99990 chi2_z -0.29 top0.1% 0.24291% top0.5% 1.09940% top1% 2.08772%
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.29907% E_f(control) 0.24291% X_f +0.05616% X_f/f +0.5616 -> no hot set
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.34679% E_f(control) 1.09940% X_f +0.24739% X_f/f +0.4948 -> no hot set
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.55754% E_f(control) 2.08772% X_f +0.46981% X_f/f +0.4698 -> no hot set
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:30:34Z] ratio p2-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 0.9996x / 1.0000x / 1.0000x (gate 1.2x at 0.1%: within); over the FLAT control 1.2312x / 1.2250x / 1.2250x
[2026-10-07T18:30:35Z] hottest item p2-attack-f8 (0x2d3b84): 32 reads (0.0000% of all); predicted source none
[2026-10-07T18:30:35Z] program p2-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)

View file

@ -0,0 +1,299 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 23 pool cores (8,9,43,44,45,46,47,48,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, waited 121 s, class adv): adv-accept live-deep4-16m
[2026-10-07T22:12:51Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "148927", "--nonces", "16777216", "--threads", "23", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T22:12:51Z] census warps: programs [148927] day 20730 nonces 16777216 threads 23 plant none validate sample check_every 997 diag true
[2026-10-07T22:12:52Z] day 20730: cache filled in 0.42 s, fnv 448274a57f508cbc
[2026-10-07T22:12:55Z] table: 16777216 items derived with their 8 lines in 2.9 s; library comparison sample (0 mismatches)
[2026-10-07T22:12:57Z] program p148927-attack-f8: epoch seed f4639fc174e06f59e2ff30c314dfca5c8b2a6c8400786c587dd3ae3cbc558a62 era seed a2ba8b301f543dbc7801ef9d18458dc5fa5fc6a9808b55e831878b6abaff32cd id c789fe5789ea71f0 attempt 0 class mx8-eracbf8f1c9+sh256x27 op mix load=16 add=12 xor=9 shfl=5 rotr=4 sub=4 mad=3 mul=3 mulhi=3 rotl=3 or=2; era stride mul 0xeb074eb9 rot 14 interleave [0, 2, 3, 10] windows 1:0:0 5:2:0 6:0:0 12:0:0 20:0:0 22:0:0 26:0:0 27:1:0 38:2:2 40:2:2 42:2:3 47:0:0 51:2:3 54:1:0 55:1:0 59:1:0
[2026-10-07T22:12:57Z] load site instr 1: src r3 win 0 off 0; last base writer shfl at 0; writers back to the last injecting one: shfl@0; shadow writes of r3 per rep: add=7 mad=4 mul=6 mulhi=3 or=1 rotl=3 rotr=3 sub=2 xor=7
[2026-10-07T22:12:57Z] load site instr 5: src r1 win 2 off 0; last base writer add at 3; writers back to the last injecting one: add@3; shadow writes of r1 per rep: add=4 mad=3 mul=4 mulhi=2 or=3 rotl=6 rotr=3 shfl=3 sub=3 xor=4
[2026-10-07T22:12:57Z] load site instr 6: src r3 win 0 off 0; last base writer mad at 2; writers back to the last injecting one: mad@2; shadow writes of r3 per rep: add=7 mad=4 mul=6 mulhi=3 or=1 rotl=3 rotr=3 sub=2 xor=7
[2026-10-07T22:12:57Z] load site instr 12: src r6 win 0 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r6 per rep: add=4 mad=4 mul=3 mulhi=2 or=4 rotl=3 rotr=4 shfl=4 sub=3 xor=2
[2026-10-07T22:12:57Z] load site instr 20: src r7 win 0 off 0; last base writer xor at 19; writers back to the last injecting one: xor@19; shadow writes of r7 per rep: add=5 mad=6 mul=4 mulhi=1 or=2 rotl=4 rotr=1 shfl=4 sub=2 xor=8
[2026-10-07T22:12:57Z] load site instr 22: src r1 win 0 off 0; last base writer add at 10; writers back to the last injecting one: add@10; shadow writes of r1 per rep: add=4 mad=3 mul=4 mulhi=2 or=3 rotl=6 rotr=3 shfl=3 sub=3 xor=4
[2026-10-07T22:12:57Z] load site instr 26: src r7 win 0 off 0; last base writer xor at 25; writers back to the last injecting one: xor@25; shadow writes of r7 per rep: add=5 mad=6 mul=4 mulhi=1 or=2 rotl=4 rotr=1 shfl=4 sub=2 xor=8
[2026-10-07T22:12:57Z] load site instr 27: src r6 win 1 off 0; last base writer load at 22; writers back to the last injecting one: load@22; shadow writes of r6 per rep: add=4 mad=4 mul=3 mulhi=2 or=4 rotl=3 rotr=4 shfl=4 sub=3 xor=2
[2026-10-07T22:12:57Z] load site instr 38: src r5 win 2 off 2; last base writer shfl at 21; writers back to the last injecting one: shfl@21; shadow writes of r5 per rep: add=5 mad=2 mul=1 mulhi=6 or=1 rotl=5 rotr=1 shfl=2 xor=8
[2026-10-07T22:12:57Z] load site instr 40: src r1 win 2 off 2; last base writer add at 35; writers back to the last injecting one: add@35; shadow writes of r1 per rep: add=4 mad=3 mul=4 mulhi=2 or=3 rotl=6 rotr=3 shfl=3 sub=3 xor=4
[2026-10-07T22:12:57Z] load site instr 42: src r2 win 2 off 3; last base writer load at 38; writers back to the last injecting one: load@38; shadow writes of r2 per rep: add=7 mad=7 mul=1 mulhi=3 or=1 rotl=3 rotr=1 shfl=2 sub=5 xor=5
[2026-10-07T22:12:57Z] load site instr 47: src r3 win 0 off 0; last base writer rotl at 44; writers back to the last injecting one: rotl@44 add@41; shadow writes of r3 per rep: add=7 mad=4 mul=6 mulhi=3 or=1 rotl=3 rotr=3 sub=2 xor=7
[2026-10-07T22:12:57Z] load site instr 51: src r4 win 2 off 3; last base writer add at 46; writers back to the last injecting one: add@46; shadow writes of r4 per rep: add=3 mad=1 mul=2 mulhi=2 or=1 rotl=3 rotr=2 shfl=1 sub=3 xor=4
[2026-10-07T22:12:57Z] load site instr 54: src r0 win 1 off 0; last base writer xor at 49; writers back to the last injecting one: xor@49; shadow writes of r0 per rep: add=3 mad=5 mul=3 mulhi=3 rotl=5 rotr=4 shfl=1 sub=2 xor=1
[2026-10-07T22:12:57Z] load site instr 55: src r2 win 1 off 0; last base writer add at 52; writers back to the last injecting one: add@52; shadow writes of r2 per rep: add=7 mad=7 mul=1 mulhi=3 or=1 rotl=3 rotr=1 shfl=2 sub=5 xor=5
[2026-10-07T22:12:57Z] load site instr 59: src r3 win 1 off 0; last base writer rotl at 48; writers back to the last injecting one: rotl@48 rotl@44 add@41; shadow writes of r3 per rep: add=7 mad=4 mul=6 mulhi=3 or=1 rotl=3 rotr=3 sub=2 xor=7
[2026-10-07T22:12:57Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x800000,2^22) (0xc00000,2^22) (0x0,2^24) (0xc00000,2^22) (0x0,2^23) (0x0,2^23) (0x0,2^23); expected reads per item by quarter 152.000 120.000 120.000 120.000 (flat uniform 128.000)
[2026-10-07T22:13:49Z] 524288 warps (16777216 nonces) interpreted in 52.3 s (2.292 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T22:13:49Z] p148927-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8712
[2026-10-07T22:13:49Z] p148927-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T22:13:49Z] p148927-attack-f8 distinct lines per warp: n 524288 min 32472 p1 32538 median 32597 p99 32643 max 32676 mean 32595.4724
[2026-10-07T22:13:49Z] p148927-attack-f8 distinct items per warp: n 524288 min 4076 p1 4084 median 4091 p99 4095 max 4096 mean 4090.3464
[2026-10-07T22:13:49Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T22:13:49Z] positions: largest hi16-bucket (256 items) share 0.0126% at p2 (iteration 0, site 2, instr 6); windowed expectation 0.0015%; largest saturated-source share 0.0000% at p21 (site 5, instr 22)
[2026-10-07T22:13:49Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p16 (site 0, instr 1); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T22:13:50Z] p148927-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 218 (bin 489541) z_max +7.95 min 64 z_min -5.66 chi2/dof 2.51172 chi2_z +4378.42 top0.1% 0.14861% top0.5% 0.71474% top1% 1.40190%
[2026-10-07T22:13:50Z] p148927-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.01100 largest 180 (item 0xae5bc5) at +5.48 sigma smallest at -5.11; buckets64 chi2/dof 1.50676 largest 8305 (bucket 131085) at +7.13 sigma smallest at -5.06
[2026-10-07T22:13:54Z] p148927-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 223 (bin 3219096) z_max +8.40 min 67 z_min -5.39 chi2/dof 2.49983 chi2_z +4343.98 top0.1% 0.14820% top0.5% 0.71330% top1% 1.39954%
[2026-10-07T22:13:54Z] p148927-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00019 largest +5.76 sigma; buckets64 chi2/dof 0.99888 largest +4.48 smallest -4.35
[2026-10-07T22:13:54Z] 6-sigma p148927-attack-f8 items buckets64 against the window density: largest bucket +7.13 sigma, smallest -5.06 -> FLAGGED (beyond 6 sigma)
[2026-10-07T22:13:54Z] hot-set p148927-attack-f8 items (windowed control): f 0.1% S_f 0.14861% E_f(control) 0.14820% X_f +0.00041% X_f/f +0.0041 -> no hot set
[2026-10-07T22:13:54Z] hot-set p148927-attack-f8 items (windowed control): f 0.5% S_f 0.71474% E_f(control) 0.71330% X_f +0.00144% X_f/f +0.0029 -> no hot set
[2026-10-07T22:13:54Z] hot-set p148927-attack-f8 items (windowed control): f 1.0% S_f 1.40190% E_f(control) 1.39954% X_f +0.00236% X_f/f +0.0024 -> no hot set
[2026-10-07T22:13:54Z] hot-set p148927-attack-f8 items (windowed control): verdict clear
[2026-10-07T22:13:58Z] p148927-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 9941680) z_max +5.57 min 74 z_min -4.77 chi2/dof 0.99971 chi2_z -0.85 top0.1% 0.13108% top0.5% 0.63253% top1% 1.24339%
[2026-10-07T22:13:58Z] hot-set p148927-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.14861% E_f(control) 0.13108% X_f +0.01753% X_f/f +0.1753 -> no hot set
[2026-10-07T22:13:58Z] hot-set p148927-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.71474% E_f(control) 0.63253% X_f +0.08221% X_f/f +0.1644 -> no hot set
[2026-10-07T22:13:58Z] hot-set p148927-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.40190% E_f(control) 1.24339% X_f +0.15851% X_f/f +0.1585 -> no hot set
[2026-10-07T22:13:58Z] hot-set p148927-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T22:13:58Z] ratio p148927-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0028x / 1.0020x / 1.0017x (gate 1.2x at 0.1%: within); over the FLAT control 1.1337x / 1.1300x / 1.1275x
[2026-10-07T22:13:59Z] attribution: hot threshold count >= 186 marks 19065 items (0.1136% of items) holding 3616957 reads (0.1684% of reads); top 8 items t=0x14aa99:218 t=0x0bb5f4:218 t=0x087749:218 t=0x077845:218 t=0x380a9f:215 t=0x2d7316:215 t=0x3c90cf:214 t=0x2864ca:214
[2026-10-07T22:14:21Z] attribution: reads on hot items per position (flat expectation 0.1136% of each position's 16777216 reads); the 24 largest: p113(it7 s1)=0.574% p65(it4 s1)=0.573% p97(it6 s1)=0.573% p49(it3 s1)=0.572% p33(it2 s1)=0.572% p81(it5 s1)=0.570% p17(it1 s1)=0.568% p1(it0 s1)=0.562% p15(it0 s15)=0.285% p45(it2 s13)=0.284% p55(it3 s7)=0.284% p30(it1 s14)=0.283% p94(it5 s14)=0.283% p125(it7 s13)=0.283% p87(it5 s7)=0.283% p62(it3 s14)=0.283% p79(it4 s15)=0.283% p46(it2 s14)=0.283% p39(it2 s7)=0.283% p13(it0 s13)=0.283% p29(it1 s13)=0.283% p31(it1 s15)=0.283% p61(it3 s13)=0.283% p109(it6 s13)=0.283%
[2026-10-07T22:14:21Z] attribution: hot reads by iteration it0=0.170% it1=0.168% it2=0.169% it3=0.168% it4=0.168% it5=0.168% it6=0.168% it7=0.168% ; by site s0=0.143% s1=0.570% s2=0.148% s3=0.141% s4=0.141% s5=0.141% s6=0.141% s7=0.282% s8=0.000% s9=0.000% s10=0.000% s11=0.141% s12=0.000% s13=0.282% s14=0.282% s15=0.282%
[2026-10-07T22:14:21Z] site 0 (instr 1, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1427% (flat expectation 0.1136%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:14:21Z] site 1 (instr 5, src r1, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.5705% (flat expectation 0.1136%); index entropy 13.999 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0065% (window expectation 0.0061%)
[2026-10-07T22:14:21Z] site 2 (instr 6, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1476% (flat expectation 0.1136%); index entropy 15.991 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0030% (window expectation 0.0015%)
[2026-10-07T22:14:21Z] site 3 (instr 12, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1410% (flat expectation 0.1136%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:14:21Z] site 4 (instr 20, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1411% (flat expectation 0.1136%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:14:21Z] site 5 (instr 22, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1412% (flat expectation 0.1136%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:14:21Z] site 6 (instr 26, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1410% (flat expectation 0.1136%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:14:21Z] site 7 (instr 27, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2821% (flat expectation 0.1136%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:14:21Z] site 8 (instr 38, src r5, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1136%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:14:21Z] site 9 (instr 40, src r1, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1136%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:14:21Z] site 10 (instr 42, src r2, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1136%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:14:21Z] site 11 (instr 47, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1413% (flat expectation 0.1136%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:14:21Z] site 12 (instr 51, src r4, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1136%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:14:21Z] site 13 (instr 54, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2823% (flat expectation 0.1136%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:14:21Z] site 14 (instr 55, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2823% (flat expectation 0.1136%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:14:21Z] site 15 (instr 59, src r3, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2819% (flat expectation 0.1136%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:14:21Z] attribution: item 0x14aa99 (218 reads) read from positions p65(it4 s1)x12 p81(it5 s1)x10 p113(it7 s1)x10 p33(it2 s1)x9 p97(it6 s1)x8 p126(it7 s14)x7 p55(it3 s7)x6 p3(it0 s3)x5 p17(it1 s1)x5 p30(it1 s14)x5 p63(it3 s15)x5 p1(it0 s1)x5
[2026-10-07T22:14:21Z] attribution: item 0x0bb5f4 (218 reads) read from positions p97(it6 s1)x10 p113(it7 s1)x9 p49(it3 s1)x7 p61(it3 s13)x7 p78(it4 s14)x6 p1(it0 s1)x6 p33(it2 s1)x5 p65(it4 s1)x5 p77(it4 s13)x5 p81(it5 s1)x5 p85(it5 s5)x5 p94(it5 s14)x4
[2026-10-07T22:14:21Z] attribution: item 0x087749 (218 reads) read from positions p7(it0 s7)x8 p49(it3 s1)x7 p113(it7 s1)x7 p17(it1 s1)x6 p81(it5 s1)x6 p48(it3 s0)x5 p53(it3 s5)x5 p65(it4 s1)x5 p79(it4 s15)x5 p15(it0 s15)x4 p29(it1 s13)x4 p30(it1 s14)x4
[2026-10-07T22:14:21Z] attribution: item 0x077845 (218 reads) read from positions p113(it7 s1)x7 p17(it1 s1)x7 p33(it2 s1)x6 p47(it2 s15)x6 p71(it4 s7)x6 p110(it6 s14)x6 p49(it3 s1)x5 p65(it4 s1)x5 p78(it4 s14)x5 p81(it5 s1)x5 p86(it5 s6)x5 p87(it5 s7)x5
[2026-10-07T22:14:21Z] attribution: item 0x380a9f (215 reads) read from positions p33(it2 s1)x9 p113(it7 s1)x6 p46(it2 s14)x6 p94(it5 s14)x6 p13(it0 s13)x5 p22(it1 s6)x5 p47(it2 s15)x5 p1(it0 s1)x5 p78(it4 s14)x5 p87(it5 s7)x5 p110(it6 s14)x5 p49(it3 s1)x4
[2026-10-07T22:14:21Z] attribution: item 0x2d7316 (215 reads) read from positions p17(it1 s1)x13 p30(it1 s14)x9 p1(it0 s1)x8 p33(it2 s1)x7 p55(it3 s7)x7 p7(it0 s7)x6 p77(it4 s13)x6 p98(it6 s2)x6 p103(it6 s7)x6 p14(it0 s14)x5 p39(it2 s7)x5 p49(it3 s1)x5
[2026-10-07T22:14:21Z] attribution: item 0x3c90cf (214 reads) read from positions p65(it4 s1)x9 p97(it6 s1)x8 p61(it3 s13)x6 p93(it5 s13)x6 p103(it6 s7)x5 p33(it2 s1)x5 p49(it3 s1)x5 p71(it4 s7)x5 p62(it3 s14)x4 p23(it1 s7)x4 p39(it2 s7)x4 p45(it2 s13)x4
[2026-10-07T22:14:21Z] attribution: item 0x2864ca (214 reads) read from positions p1(it0 s1)x13 p119(it7 s7)x6 p0(it0 s0)x6 p65(it4 s1)x6 p113(it7 s1)x5 p62(it3 s14)x5 p71(it4 s7)x5 p103(it6 s7)x5 p17(it1 s1)x5 p7(it0 s7)x4 p47(it2 s15)x4 p52(it3 s4)x4
[2026-10-07T22:14:21Z] hottest item p148927-attack-f8 (0x14aa99): 218 reads (0.0000% of all); predicted source none
[2026-10-07T22:14:21Z] program p148927-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T22:14:21Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "150347", "--nonces", "16777216", "--threads", "23", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T22:14:21Z] census warps: programs [150347] day 20730 nonces 16777216 threads 23 plant none validate sample check_every 997 diag true
[2026-10-07T22:14:22Z] day 20730: cache filled in 0.41 s, fnv 448274a57f508cbc
[2026-10-07T22:14:25Z] table: 16777216 items derived with their 8 lines in 2.6 s; library comparison sample (0 mismatches)
[2026-10-07T22:14:27Z] program p150347-attack-f8: epoch seed 734618fe3dc77660ae96a643b3f0044195cfe841f0c86c27c8150184d46894de era seed 4e4c8ce6c398d4f57b46320dc91516f06e851a12a5460737b259983dcaf6247d id 23bc0a65fff5682b attempt 2 class mx8-era3d8e7f58+sh256x27 op mix load=16 xor=9 add=7 mad=7 or=7 mul=6 rotl=4 mulhi=3 shfl=3 rotr=1 sub=1; era stride mul 0x92f54573 rot 2 interleave [1, 6, 8, 9] windows 4:1:1 6:2:2 8:1:0 14:2:0 16:0:0 22:1:0 28:2:0 31:2:2 41:0:0 42:1:0 44:2:2 46:0:0 49:2:0 50:0:0 51:1:1 54:2:2
[2026-10-07T22:14:27Z] load site instr 4: src r3 win 1 off 1; last base writer mad at 3; writers back to the last injecting one: mad@3; shadow writes of r3 per rep: add=4 mad=4 mul=1 mulhi=1 or=1 rotl=4 rotr=3 shfl=3 sub=1 xor=3
[2026-10-07T22:14:27Z] load site instr 6: src r6 win 2 off 2; last base writer add at 2; writers back to the last injecting one: add@2; shadow writes of r6 per rep: add=4 mad=4 mul=3 mulhi=2 rotl=6 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T22:14:27Z] load site instr 8: src r0 win 1 off 0; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r0 per rep: add=3 mad=3 mul=4 mulhi=2 rotl=5 rotr=3 shfl=7 sub=2 xor=7
[2026-10-07T22:14:27Z] load site instr 14: src r3 win 2 off 0; last base writer xor at 13; writers back to the last injecting one: xor@13; shadow writes of r3 per rep: add=4 mad=4 mul=1 mulhi=1 or=1 rotl=4 rotr=3 shfl=3 sub=1 xor=3
[2026-10-07T22:14:27Z] load site instr 16: src r7 win 0 off 0; last base writer shfl at 5; writers back to the last injecting one: shfl@5; shadow writes of r7 per rep: add=3 mad=3 mul=1 mulhi=2 or=2 rotl=4 rotr=1 shfl=3 sub=2 xor=5
[2026-10-07T22:14:27Z] load site instr 22: src r2 win 1 off 0; last base writer load at 8; writers back to the last injecting one: load@8; shadow writes of r2 per rep: add=3 mad=3 mul=3 mulhi=5 or=3 rotl=2 rotr=5 shfl=1 sub=1 xor=4
[2026-10-07T22:14:27Z] load site instr 28: src r5 win 2 off 0; last base writer xor at 25; writers back to the last injecting one: xor@25; shadow writes of r5 per rep: add=10 mad=7 mul=3 mulhi=6 or=2 rotl=5 rotr=3 shfl=3 sub=3 xor=6
[2026-10-07T22:14:27Z] load site instr 31: src r3 win 2 off 2; last base writer add at 26; writers back to the last injecting one: add@26; shadow writes of r3 per rep: add=4 mad=4 mul=1 mulhi=1 or=1 rotl=4 rotr=3 shfl=3 sub=1 xor=3
[2026-10-07T22:14:27Z] load site instr 41: src r0 win 0 off 0; last base writer xor at 40; writers back to the last injecting one: xor@40; shadow writes of r0 per rep: add=3 mad=3 mul=4 mulhi=2 rotl=5 rotr=3 shfl=7 sub=2 xor=7
[2026-10-07T22:14:27Z] load site instr 42: src r7 win 1 off 0; last base writer rotl at 35; writers back to the last injecting one: rotl@35 mad@34; shadow writes of r7 per rep: add=3 mad=3 mul=1 mulhi=2 or=2 rotl=4 rotr=1 shfl=3 sub=2 xor=5
[2026-10-07T22:14:27Z] load site instr 44: src r7 win 2 off 2; last base writer xor at 43; writers back to the last injecting one: xor@43; shadow writes of r7 per rep: add=3 mad=3 mul=1 mulhi=2 or=2 rotl=4 rotr=1 shfl=3 sub=2 xor=5
[2026-10-07T22:14:27Z] load site instr 46: src r4 win 0 off 0; last base writer load at 44; writers back to the last injecting one: load@44; shadow writes of r4 per rep: add=4 mad=2 mul=2 mulhi=1 or=1 rotl=2 rotr=2 shfl=5 sub=2 xor=1
[2026-10-07T22:14:27Z] load site instr 49: src r1 win 2 off 0; last base writer shfl at 24; writers back to the last injecting one: shfl@24; shadow writes of r1 per rep: add=5 mad=1 mul=5 mulhi=3 or=5 rotl=5 rotr=2 shfl=3 sub=2 xor=7
[2026-10-07T22:14:27Z] load site instr 50: src r6 win 0 off 0; last base writer load at 49; writers back to the last injecting one: load@49; shadow writes of r6 per rep: add=4 mad=4 mul=3 mulhi=2 rotl=6 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T22:14:27Z] load site instr 51: src r2 win 1 off 1; last base writer load at 42; writers back to the last injecting one: load@42; shadow writes of r2 per rep: add=3 mad=3 mul=3 mulhi=5 or=3 rotl=2 rotr=5 shfl=1 sub=1 xor=4
[2026-10-07T22:14:27Z] load site instr 54: src r3 win 2 off 2; last base writer load at 41; writers back to the last injecting one: load@41; shadow writes of r3 per rep: add=4 mad=4 mul=1 mulhi=1 or=1 rotl=4 rotr=3 shfl=3 sub=1 xor=3
[2026-10-07T22:14:27Z] window layer: site item windows (first, items) (0x800000,2^23) (0x800000,2^22) (0x0,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x0,2^24) (0x0,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^22); expected reads per item by quarter 176.000 80.000 192.000 64.000 (flat uniform 128.000)
[2026-10-07T22:15:22Z] 524288 warps (16777216 nonces) interpreted in 54.9 s (2.408 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T22:15:22Z] p150347-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8705
[2026-10-07T22:15:22Z] p150347-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T22:15:22Z] p150347-attack-f8 distinct lines per warp: n 524288 min 32493 p1 32555 median 32606 p99 32647 max 32681 mean 32605.1891
[2026-10-07T22:15:22Z] p150347-attack-f8 distinct items per warp: n 524288 min 4078 p1 4086 median 4092 p99 4096 max 4096 mean 4091.5748
[2026-10-07T22:15:22Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T22:15:22Z] positions: largest hi16-bucket (256 items) share 0.0071% at p113 (iteration 7, site 1, instr 6); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 4)
[2026-10-07T22:15:22Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p3 (site 3, instr 14); saturated sources at one position 0 of 2048 at p0 (site 0, instr 4); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T22:15:22Z] p150347-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 268 (bin 10372658) z_max +12.37 min 29 z_min -8.75 chi2/dof 26.00273 chi2_z +72415.64 top0.1% 0.18306% top0.5% 0.88448% top1% 1.73898%
[2026-10-07T22:15:22Z] p150347-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00091 largest 132 (item 0x6a30aa) at +5.81 sigma smallest at -5.27; buckets64 chi2/dof 1.00418 largest 11785 (bucket 741) at +4.91 sigma smallest at -4.30
[2026-10-07T22:15:26Z] p150347-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 267 (bin 12250510) z_max +12.29 min 25 z_min -9.10 chi2/dof 25.99602 chi2_z +72396.19 top0.1% 0.18307% top0.5% 0.88444% top1% 1.73896%
[2026-10-07T22:15:26Z] p150347-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99972 largest +5.65 sigma; buckets64 chi2/dof 1.00199 largest +4.53 smallest -4.34
[2026-10-07T22:15:26Z] 6-sigma p150347-attack-f8 items buckets64 against the window density: largest bucket +4.91 sigma, smallest -4.30 -> within 6 sigma
[2026-10-07T22:15:26Z] hot-set p150347-attack-f8 items (windowed control): f 0.1% S_f 0.18306% E_f(control) 0.18307% X_f -0.00000% X_f/f -0.0000 -> no hot set
[2026-10-07T22:15:26Z] hot-set p150347-attack-f8 items (windowed control): f 0.5% S_f 0.88448% E_f(control) 0.88444% X_f +0.00004% X_f/f +0.0001 -> no hot set
[2026-10-07T22:15:26Z] hot-set p150347-attack-f8 items (windowed control): f 1.0% S_f 1.73898% E_f(control) 1.73896% X_f +0.00002% X_f/f +0.0000 -> no hot set
[2026-10-07T22:15:26Z] hot-set p150347-attack-f8 items (windowed control): verdict clear
[2026-10-07T22:15:28Z] p150347-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 5733543) z_max +5.57 min 72 z_min -4.95 chi2/dof 1.00008 chi2_z +0.23 top0.1% 0.13108% top0.5% 0.63252% top1% 1.24342%
[2026-10-07T22:15:28Z] hot-set p150347-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.18306% E_f(control) 0.13108% X_f +0.05198% X_f/f +0.5198 -> no hot set
[2026-10-07T22:15:28Z] hot-set p150347-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.88448% E_f(control) 0.63252% X_f +0.25196% X_f/f +0.5039 -> no hot set
[2026-10-07T22:15:28Z] hot-set p150347-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.73898% E_f(control) 1.24342% X_f +0.49557% X_f/f +0.4956 -> no hot set
[2026-10-07T22:15:28Z] hot-set p150347-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T22:15:28Z] ratio p150347-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0000x / 1.0000x / 1.0000x (gate 1.2x at 0.1%: within); over the FLAT control 1.3966x / 1.3983x / 1.3986x
[2026-10-07T22:15:30Z] attribution: hot threshold count >= 230 marks 17762 items (0.1059% of items) holding 4157785 reads (0.1936% of reads); top 8 items t=0x9e4632:268 t=0x8e48fe:266 t=0xbd5c6f:262 t=0x8ba200:262 t=0x8b315b:262 t=0x8e0506:261 t=0x9cb718:260 t=0xba8553:258
[2026-10-07T22:15:52Z] attribution: reads on hot items per position (flat expectation 0.1059% of each position's 16777216 reads); the 24 largest: p17(it1 s1)=0.513% p23(it1 s7)=0.512% p1(it0 s1)=0.511% p10(it0 s10)=0.511% p122(it7 s10)=0.511% p71(it4 s7)=0.511% p33(it2 s1)=0.510% p90(it5 s10)=0.510% p106(it6 s10)=0.510% p31(it1 s15)=0.510% p7(it0 s7)=0.510% p58(it3 s10)=0.510% p79(it4 s15)=0.510% p26(it1 s10)=0.510% p74(it4 s10)=0.510% p95(it5 s15)=0.509% p39(it2 s7)=0.509% p42(it2 s10)=0.509% p119(it7 s7)=0.509% p103(it6 s7)=0.509% p87(it5 s7)=0.509% p49(it3 s1)=0.508% p63(it3 s15)=0.508% p47(it2 s15)=0.508%
[2026-10-07T22:15:52Z] attribution: hot reads by iteration it0=0.194% it1=0.194% it2=0.194% it3=0.193% it4=0.194% it5=0.193% it6=0.193% it7=0.193% ; by site s0=0.255% s1=0.509% s2=0.004% s3=0.008% s4=0.129% s5=0.004% s6=0.008% s7=0.509% s8=0.129% s9=0.004% s10=0.510% s11=0.129% s12=0.008% s13=0.129% s14=0.255% s15=0.508%
[2026-10-07T22:15:52Z] site 0 (instr 4, src r3, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2547% (flat expectation 0.1059%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:15:52Z] site 1 (instr 6, src r6, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.5090% (flat expectation 0.1059%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:15:52Z] site 2 (instr 8, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0039% (flat expectation 0.1059%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:15:52Z] site 3 (instr 14, src r3, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0080% (flat expectation 0.1059%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:15:52Z] site 4 (instr 16, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1291% (flat expectation 0.1059%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:15:52Z] site 5 (instr 22, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0040% (flat expectation 0.1059%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:15:52Z] site 6 (instr 28, src r5, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0080% (flat expectation 0.1059%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:15:52Z] site 7 (instr 31, src r3, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.5092% (flat expectation 0.1059%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:15:52Z] site 8 (instr 41, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1290% (flat expectation 0.1059%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:15:52Z] site 9 (instr 42, src r7, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0039% (flat expectation 0.1059%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:15:52Z] site 10 (instr 44, src r7, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.5099% (flat expectation 0.1059%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:15:52Z] site 11 (instr 46, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1293% (flat expectation 0.1059%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:15:52Z] site 12 (instr 49, src r1, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0078% (flat expectation 0.1059%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:15:52Z] site 13 (instr 50, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1290% (flat expectation 0.1059%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:15:52Z] site 14 (instr 51, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2547% (flat expectation 0.1059%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:15:52Z] site 15 (instr 54, src r3, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.5083% (flat expectation 0.1059%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:15:52Z] attribution: item 0x9e4632 (268 reads) read from positions p58(it3 s10)x10 p113(it7 s1)x9 p87(it5 s7)x9 p103(it6 s7)x9 p110(it6 s14)x9 p90(it5 s10)x8 p1(it0 s1)x7 p7(it0 s7)x7 p33(it2 s1)x6 p10(it0 s10)x6 p79(it4 s15)x6 p14(it0 s14)x6
[2026-10-07T22:15:52Z] attribution: item 0x8e48fe (266 reads) read from positions p7(it0 s7)x11 p49(it3 s1)x10 p1(it0 s1)x7 p17(it1 s1)x7 p23(it1 s7)x7 p46(it2 s14)x7 p63(it3 s15)x7 p87(it5 s7)x7 p111(it6 s15)x7 p119(it7 s7)x7 p127(it7 s15)x7 p15(it0 s15)x6
[2026-10-07T22:15:52Z] attribution: item 0xbd5c6f (262 reads) read from positions p87(it5 s7)x11 p65(it4 s1)x10 p23(it1 s7)x9 p31(it1 s15)x9 p39(it2 s7)x9 p26(it1 s10)x8 p58(it3 s10)x8 p49(it3 s1)x7 p55(it3 s7)x7 p79(it4 s15)x7 p95(it5 s15)x7 p113(it7 s1)x7
[2026-10-07T22:15:52Z] attribution: item 0x8ba200 (262 reads) read from positions p42(it2 s10)x9 p71(it4 s7)x9 p79(it4 s15)x9 p39(it2 s7)x8 p74(it4 s10)x8 p81(it5 s1)x8 p31(it1 s15)x7 p78(it4 s14)x7 p1(it0 s1)x6 p17(it1 s1)x6 p49(it3 s1)x6 p65(it4 s1)x6
[2026-10-07T22:15:52Z] attribution: item 0x8b315b (262 reads) read from positions p42(it2 s10)x9 p47(it2 s15)x9 p71(it4 s7)x9 p10(it0 s10)x8 p55(it3 s7)x8 p63(it3 s15)x8 p81(it5 s1)x8 p96(it6 s0)x8 p17(it1 s1)x7 p65(it4 s1)x7 p106(it6 s10)x7 p119(it7 s7)x7
[2026-10-07T22:15:52Z] attribution: item 0x8e0506 (261 reads) read from positions p71(it4 s7)x11 p74(it4 s10)x9 p97(it6 s1)x9 p127(it7 s15)x8 p47(it2 s15)x8 p95(it5 s15)x8 p10(it0 s10)x7 p26(it1 s10)x7 p58(it3 s10)x7 p111(it6 s15)x6 p7(it0 s7)x6 p55(it3 s7)x6
[2026-10-07T22:15:52Z] attribution: item 0x9cb718 (260 reads) read from positions p31(it1 s15)x11 p79(it4 s15)x10 p26(it1 s10)x9 p49(it3 s1)x8 p63(it3 s15)x8 p127(it7 s15)x7 p42(it2 s10)x7 p90(it5 s10)x7 p95(it5 s15)x7 p23(it1 s7)x6 p39(it2 s7)x6 p58(it3 s10)x6
[2026-10-07T22:15:52Z] attribution: item 0xba8553 (258 reads) read from positions p113(it7 s1)x11 p87(it5 s7)x10 p111(it6 s15)x10 p26(it1 s10)x9 p23(it1 s7)x8 p42(it2 s10)x8 p1(it0 s1)x8 p81(it5 s1)x8 p122(it7 s10)x7 p47(it2 s15)x7 p79(it4 s15)x7 p90(it5 s10)x7
[2026-10-07T22:15:52Z] hottest item p150347-attack-f8 (0x9e4632): 268 reads (0.0000% of all); predicted source none
[2026-10-07T22:15:52Z] program p150347-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T22:15:53Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "29307", "--nonces", "16777216", "--threads", "23", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T22:15:53Z] census warps: programs [29307] day 20730 nonces 16777216 threads 23 plant none validate sample check_every 997 diag true
[2026-10-07T22:15:53Z] day 20730: cache filled in 0.39 s, fnv 448274a57f508cbc
[2026-10-07T22:15:55Z] table: 16777216 items derived with their 8 lines in 2.0 s; library comparison sample (0 mismatches)
[2026-10-07T22:15:59Z] program p29307-attack-f8: epoch seed 56f315db23869b0405743e62f470538c8fddd452edbb26ccaa1d3eacda4269f9 era seed 64668e67e932daadfbff32d4e323b317892f3125436f4644e6e626e34c272492 id 0243919aa1b29078 attempt 4 class mx8-erab0d4cf9d+sh256x27 op mix load=16 add=7 mul=6 or=6 rotl=6 sub=5 xor=5 mad=4 mulhi=4 rotr=3 shfl=2; era stride mul 0x8b661a45 rot 15 interleave [0, 7, 12, 13] windows 2:2:3 3:0:0 4:1:1 7:1:1 10:0:0 17:1:1 18:1:0 24:0:0 26:2:3 29:2:1 35:0:0 44:0:0 49:2:2 51:1:1 53:2:1 62:2:3
[2026-10-07T22:15:59Z] load site instr 2: src r0 win 2 off 3; last base writer add at 0; writers back to the last injecting one: add@0; shadow writes of r0 per rep: add=3 mad=2 mul=3 mulhi=2 or=1 rotl=8 rotr=1 shfl=2 sub=2 xor=3
[2026-10-07T22:15:59Z] load site instr 3: src r3 win 0 off 0; last base writer sub at 1; writers back to the last injecting one: sub@1; shadow writes of r3 per rep: add=6 mad=3 mul=6 mulhi=3 or=2 rotl=4 rotr=3 shfl=1 sub=4 xor=6
[2026-10-07T22:15:59Z] load site instr 4: src r1 win 1 off 1; last base writer load at 2; writers back to the last injecting one: load@2; shadow writes of r1 per rep: add=5 mad=2 mul=4 mulhi=2 rotl=4 rotr=1 shfl=2 sub=1 xor=5
[2026-10-07T22:15:59Z] load site instr 7: src r0 win 1 off 1; last base writer load at 3; writers back to the last injecting one: load@3; shadow writes of r0 per rep: add=3 mad=2 mul=3 mulhi=2 or=1 rotl=8 rotr=1 shfl=2 sub=2 xor=3
[2026-10-07T22:15:59Z] load site instr 10: src r3 win 0 off 0; last base writer add at 8; writers back to the last injecting one: add@8; shadow writes of r3 per rep: add=6 mad=3 mul=6 mulhi=3 or=2 rotl=4 rotr=3 shfl=1 sub=4 xor=6
[2026-10-07T22:15:59Z] load site instr 17: src r5 win 1 off 1; last base writer xor at 6; writers back to the last injecting one: xor@6; shadow writes of r5 per rep: add=8 mad=2 mul=2 mulhi=1 or=6 rotl=4 rotr=3 shfl=4 sub=1 xor=4
[2026-10-07T22:15:59Z] load site instr 18: src r1 win 1 off 0; last base writer rotr at 13; writers back to the last injecting one: rotr@13 load@10; shadow writes of r1 per rep: add=5 mad=2 mul=4 mulhi=2 rotl=4 rotr=1 shfl=2 sub=1 xor=5
[2026-10-07T22:15:59Z] load site instr 24: src r5 win 0 off 0; last base writer rotr at 23; writers back to the last injecting one: rotr@23 add@22; shadow writes of r5 per rep: add=8 mad=2 mul=2 mulhi=1 or=6 rotl=4 rotr=3 shfl=4 sub=1 xor=4
[2026-10-07T22:15:59Z] load site instr 26: src r4 win 2 off 3; last base writer load at 24; writers back to the last injecting one: load@24; shadow writes of r4 per rep: add=7 mad=3 mul=5 mulhi=2 or=2 rotl=6 rotr=1 shfl=1 sub=3 xor=3
[2026-10-07T22:15:59Z] load site instr 29: src r1 win 2 off 1; last base writer xor at 20; writers back to the last injecting one: xor@20; shadow writes of r1 per rep: add=5 mad=2 mul=4 mulhi=2 rotl=4 rotr=1 shfl=2 sub=1 xor=5
[2026-10-07T22:15:59Z] load site instr 35: src r6 win 0 off 0; last base writer load at 26; writers back to the last injecting one: load@26; shadow writes of r6 per rep: add=5 mad=3 mul=3 mulhi=1 or=1 rotl=2 rotr=6 shfl=3 sub=4 xor=2
[2026-10-07T22:15:59Z] load site instr 44: src r5 win 0 off 0; last base writer add at 43; writers back to the last injecting one: add@43; shadow writes of r5 per rep: add=8 mad=2 mul=2 mulhi=1 or=6 rotl=4 rotr=3 shfl=4 sub=1 xor=4
[2026-10-07T22:15:59Z] load site instr 49: src r3 win 2 off 2; last base writer sub at 40; writers back to the last injecting one: sub@40; shadow writes of r3 per rep: add=6 mad=3 mul=6 mulhi=3 or=2 rotl=4 rotr=3 shfl=1 sub=4 xor=6
[2026-10-07T22:15:59Z] load site instr 51: src r5 win 1 off 1; last base writer load at 49; writers back to the last injecting one: load@49; shadow writes of r5 per rep: add=8 mad=2 mul=2 mulhi=1 or=6 rotl=4 rotr=3 shfl=4 sub=1 xor=4
[2026-10-07T22:15:59Z] load site instr 53: src r6 win 2 off 1; last base writer add at 45; writers back to the last injecting one: add@45; shadow writes of r6 per rep: add=5 mad=3 mul=3 mulhi=1 or=1 rotl=2 rotr=6 shfl=3 sub=4 xor=2
[2026-10-07T22:15:59Z] load site instr 62: src r2 win 2 off 3; last base writer load at 53; writers back to the last injecting one: load@53; shadow writes of r2 per rep: add=5 mad=5 mul=4 mulhi=2 or=2 rotl=1 rotr=2 shfl=6 sub=2 xor=7
[2026-10-07T22:15:59Z] window layer: site item windows (first, items) (0xc00000,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0xc00000,2^22) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^22) (0x800000,2^23) (0x400000,2^22) (0xc00000,2^22); expected reads per item by quarter 56.000 120.000 136.000 200.000 (flat uniform 128.000)
[2026-10-07T22:16:53Z] 524288 warps (16777216 nonces) interpreted in 53.9 s (2.364 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T22:16:53Z] p29307-attack-f8 distinct lines per hash: n 16777216 min 1000 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8626
[2026-10-07T22:16:53Z] p29307-attack-f8 distinct items per hash: n 16777216 min 125 p1 128 median 128 p99 128 max 128 mean 127.9984
[2026-10-07T22:16:53Z] p29307-attack-f8 distinct lines per warp: n 524288 min 32537 p1 32589 median 32630 p99 32661 max 32686 mean 32628.8681
[2026-10-07T22:16:53Z] p29307-attack-f8 distinct items per warp: n 524288 min 4085 p1 4091 median 4095 p99 4096 max 4096 mean 4094.5542
[2026-10-07T22:16:53Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T22:16:53Z] positions: largest hi16-bucket (256 items) share 0.4967% at p49 (iteration 3, site 1, instr 3); windowed expectation 0.0015%; largest saturated-source share 0.0000% at p31 (site 15, instr 62)
[2026-10-07T22:16:53Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 21 of 2048 at p49 (site 1, instr 3); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T22:16:53Z] p29307-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 579069 (bin 3448071) z_max +51171.64 min 21 z_min -9.46 chi2/dof 332.31946 chi2_z +959603.63 top0.1% 0.24524% top0.5% 0.97720% top1% 1.86772%
[2026-10-07T22:16:53Z] p29307-attack-f8 item histogram against the window density: full 2^24 chi2/dof 522.91444 largest 579069 (item 0x349d07) at +77373.87 sigma smallest at -5.06; buckets64 chi2/dof 529.25400 largest 582407 (bucket 53876) at +9668.56 sigma smallest at -6.80
[2026-10-07T22:16:56Z] p29307-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 277 (bin 16554652) z_max +13.17 min 24 z_min -9.19 chi2/dof 21.50020 chi2_z +59374.93 top0.1% 0.18998% top0.5% 0.91822% top1% 1.80534%
[2026-10-07T22:16:56Z] p29307-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00009 largest +6.02 sigma; buckets64 chi2/dof 1.00199 largest +4.94 smallest -4.42
[2026-10-07T22:16:56Z] 6-sigma p29307-attack-f8 items buckets64 against the window density: largest bucket +9668.56 sigma, smallest -6.80 -> FLAGGED (beyond 6 sigma)
[2026-10-07T22:16:56Z] hot-set p29307-attack-f8 items (windowed control): f 0.1% S_f 0.24524% E_f(control) 0.18998% X_f +0.05526% X_f/f +0.5526 -> no hot set
[2026-10-07T22:16:56Z] hot-set p29307-attack-f8 items (windowed control): f 0.5% S_f 0.97720% E_f(control) 0.91822% X_f +0.05899% X_f/f +0.1180 -> no hot set
[2026-10-07T22:16:56Z] hot-set p29307-attack-f8 items (windowed control): f 1.0% S_f 1.86772% E_f(control) 1.80534% X_f +0.06238% X_f/f +0.0624 -> no hot set
[2026-10-07T22:16:56Z] hot-set p29307-attack-f8 items (windowed control): verdict clear
[2026-10-07T22:16:59Z] p29307-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 193 (bin 4470893) z_max +5.75 min 73 z_min -4.86 chi2/dof 1.00009 chi2_z +0.26 top0.1% 0.13111% top0.5% 0.63250% top1% 1.24340%
[2026-10-07T22:16:59Z] hot-set p29307-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.24524% E_f(control) 0.13111% X_f +0.11413% X_f/f +1.1413 -> HOT SET
[2026-10-07T22:16:59Z] hot-set p29307-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.97720% E_f(control) 0.63250% X_f +0.34470% X_f/f +0.6894 -> no hot set
[2026-10-07T22:16:59Z] hot-set p29307-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.86772% E_f(control) 1.24340% X_f +0.62433% X_f/f +0.6243 -> no hot set
[2026-10-07T22:16:59Z] hot-set p29307-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T22:16:59Z] ratio p29307-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.2909x / 1.0642x / 1.0346x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 1.8705x / 1.5450x / 1.5021x
[2026-10-07T22:17:00Z] attribution: hot threshold count >= 240 marks 18469 items (0.1101% of items) holding 5672647 reads (0.2642% of reads); top 8 items t=0x349d07:579069 t=0x68778f:576423 t=0xdeaf16:282 t=0xc767e9:282 t=0xed6673:281 t=0xdd660b:280 t=0xcd65aa:277 t=0xc65592:277
[2026-10-07T22:17:21Z] attribution: reads on hot items per position (flat expectation 0.1101% of each position's 16777216 reads); the 24 largest: p49(it3 s1)=1.121% p113(it7 s1)=1.119% p17(it1 s1)=1.118% p65(it4 s1)=1.116% p81(it5 s1)=1.115% p97(it6 s1)=1.115% p33(it2 s1)=1.114% p63(it3 s15)=0.532% p15(it0 s15)=0.531% p104(it6 s8)=0.531% p47(it2 s15)=0.530% p64(it4 s0)=0.530% p56(it3 s8)=0.530% p120(it7 s8)=0.530% p32(it2 s0)=0.530% p31(it1 s15)=0.529% p88(it5 s8)=0.529% p24(it1 s8)=0.529% p0(it0 s0)=0.529% p79(it4 s15)=0.528% p127(it7 s15)=0.528% p95(it5 s15)=0.528% p48(it3 s0)=0.528% p80(it5 s0)=0.527%
[2026-10-07T22:17:21Z] attribution: hot reads by iteration it0=0.210% it1=0.272% it2=0.272% it3=0.272% it4=0.272% it5=0.272% it6=0.271% it7=0.272% ; by site s0=0.528% s1=0.994% s2=0.264% s3=0.264% s4=0.132% s5=0.264% s6=0.000% s7=0.132% s8=0.528% s9=0.000% s10=0.132% s11=0.195% s12=0.000% s13=0.264% s14=0.000% s15=0.529%
[2026-10-07T22:17:21Z] site 0 (instr 2, src r0, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.5276% (flat expectation 0.1101%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:17:21Z] site 1 (instr 3, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.9936% (flat expectation 0.1101%); index entropy 15.942 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.4329% (window expectation 0.0015%)
[2026-10-07T22:17:21Z] site 2 (instr 4, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2639% (flat expectation 0.1101%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:17:21Z] site 3 (instr 7, src r0, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2641% (flat expectation 0.1101%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:17:21Z] site 4 (instr 10, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1323% (flat expectation 0.1101%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:17:21Z] site 5 (instr 17, src r5, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2638% (flat expectation 0.1101%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:17:21Z] site 6 (instr 18, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1101%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:17:21Z] site 7 (instr 24, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1322% (flat expectation 0.1101%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:17:21Z] site 8 (instr 26, src r4, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.5284% (flat expectation 0.1101%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:17:21Z] site 9 (instr 29, src r1, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1101%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0065% (window expectation 0.0061%)
[2026-10-07T22:17:21Z] site 10 (instr 35, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1318% (flat expectation 0.1101%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:17:21Z] site 11 (instr 44, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1954% (flat expectation 0.1101%); index entropy 15.892 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0065% (window expectation 0.0015%)
[2026-10-07T22:17:21Z] site 12 (instr 49, src r3, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1101%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:17:21Z] site 13 (instr 51, src r5, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2643% (flat expectation 0.1101%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:17:21Z] site 14 (instr 53, src r6, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1101%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:17:21Z] site 15 (instr 62, src r2, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.5289% (flat expectation 0.1101%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:17:21Z] attribution: item 0x349d07 (579069 reads) read from positions p49(it3 s1)x83080 p17(it1 s1)x82786 p97(it6 s1)x82756 p81(it5 s1)x82720 p65(it4 s1)x82609 p33(it2 s1)x82541 p113(it7 s1)x82531 p38(it2 s6)x6 p102(it6 s6)x4 p119(it7 s7)x3 p68(it4 s4)x3 p86(it5 s6)x3
[2026-10-07T22:17:21Z] attribution: item 0x68778f (576423 reads) read from positions p113(it7 s1)x82843 p17(it1 s1)x82642 p49(it3 s1)x82550 p65(it4 s1)x82336 p97(it6 s1)x82012 p81(it5 s1)x81977 p33(it2 s1)x81943 p9(it0 s9)x7 p126(it7 s14)x7 p25(it1 s9)x6 p30(it1 s14)x6 p78(it4 s14)x6
[2026-10-07T22:17:21Z] attribution: item 0xdeaf16 (282 reads) read from positions p0(it0 s0)x8 p48(it3 s0)x8 p80(it5 s0)x8 p111(it6 s15)x8 p40(it2 s8)x7 p47(it2 s15)x7 p56(it3 s8)x7 p8(it0 s8)x6 p31(it1 s15)x6 p64(it4 s0)x6 p67(it4 s3)x6 p72(it4 s8)x6
[2026-10-07T22:17:21Z] attribution: item 0xc767e9 (282 reads) read from positions p47(it2 s15)x10 p63(it3 s15)x9 p83(it5 s3)x9 p95(it5 s15)x9 p56(it3 s8)x8 p64(it4 s0)x8 p79(it4 s15)x8 p111(it6 s15)x8 p24(it1 s8)x7 p0(it0 s0)x7 p8(it0 s8)x6 p11(it0 s11)x6
[2026-10-07T22:17:21Z] attribution: item 0xed6673 (281 reads) read from positions p112(it7 s0)x12 p11(it0 s11)x10 p31(it1 s15)x9 p15(it0 s15)x7 p47(it2 s15)x7 p75(it4 s11)x7 p96(it6 s0)x7 p107(it6 s11)x7 p123(it7 s11)x6 p29(it1 s13)x6 p79(it4 s15)x6 p88(it5 s8)x6
[2026-10-07T22:17:21Z] attribution: item 0xdd660b (280 reads) read from positions p64(it4 s0)x13 p95(it5 s15)x9 p96(it6 s0)x9 p112(it7 s0)x9 p111(it6 s15)x8 p0(it0 s0)x8 p43(it2 s11)x7 p125(it7 s13)x6 p8(it0 s8)x6 p11(it0 s11)x6 p16(it1 s0)x6 p19(it1 s3)x6
[2026-10-07T22:17:21Z] attribution: item 0xcd65aa (277 reads) read from positions p16(it1 s0)x9 p40(it2 s8)x8 p48(it3 s0)x8 p56(it3 s8)x8 p11(it0 s11)x7 p47(it2 s15)x7 p59(it3 s11)x7 p32(it2 s0)x6 p80(it5 s0)x6 p95(it5 s15)x6 p104(it6 s8)x6 p0(it0 s0)x6
[2026-10-07T22:17:21Z] attribution: item 0xc65592 (277 reads) read from positions p104(it6 s8)x8 p15(it0 s15)x8 p40(it2 s8)x8 p16(it1 s0)x7 p47(it2 s15)x7 p56(it3 s8)x7 p64(it4 s0)x7 p99(it6 s3)x7 p125(it7 s13)x6 p37(it2 s5)x6 p19(it1 s3)x6 p24(it1 s8)x6
[2026-10-07T22:17:21Z] hottest item p29307-attack-f8 (0x349d07): 579069 reads (0.0270% of all); predicted source none
[2026-10-07T22:17:21Z] program p29307-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T22:17:22Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "34501", "--nonces", "16777216", "--threads", "23", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T22:17:22Z] census warps: programs [34501] day 20730 nonces 16777216 threads 23 plant none validate sample check_every 997 diag true
[2026-10-07T22:17:22Z] day 20730: cache filled in 0.38 s, fnv 448274a57f508cbc
[2026-10-07T22:17:25Z] table: 16777216 items derived with their 8 lines in 2.4 s; library comparison sample (0 mismatches)
[2026-10-07T22:17:28Z] program p34501-attack-f8: epoch seed 5cc63c358fe3118ee9bcc1421cbfa2fe822a1b2c51caddceb35a3e179d8850bb era seed aef1cb612a7dc3654303a2602d18331dcd4fca6f766dd5544ec28c7fbbf38bed id 8b048a553cb6de4c attempt 5 class mx8-era3869ca66+sh256x27 op mix load=16 sub=9 xor=9 mul=6 rotl=6 shfl=5 mulhi=4 or=4 rotr=3 add=1 mad=1; era stride mul 0x53891a29 rot 2 interleave [4, 7, 9, 10] windows 10:2:2 17:2:0 19:0:0 21:0:0 25:1:0 29:1:0 33:1:0 35:2:3 36:0:0 42:1:0 45:0:0 46:1:1 48:1:0 51:2:3 58:0:0 62:2:1
[2026-10-07T22:17:28Z] load site instr 10: src r4 win 2 off 2; last base writer shfl at 8; writers back to the last injecting one: shfl@8; shadow writes of r4 per rep: add=5 mad=4 mul=7 mulhi=4 or=2 rotl=3 rotr=3 shfl=2 sub=4 xor=3
[2026-10-07T22:17:28Z] load site instr 17: src r3 win 2 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r3 per rep: add=6 mad=3 mul=1 mulhi=3 or=1 rotl=2 rotr=3 shfl=6 sub=3 xor=4
[2026-10-07T22:17:28Z] load site instr 19: src r6 win 0 off 0; last base writer load at 17; writers back to the last injecting one: load@17; shadow writes of r6 per rep: add=6 mul=4 mulhi=2 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=3
[2026-10-07T22:17:28Z] load site instr 21: src r6 win 0 off 0; last base writer xor at 20; writers back to the last injecting one: xor@20; shadow writes of r6 per rep: add=6 mul=4 mulhi=2 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=3
[2026-10-07T22:17:28Z] load site instr 25: src r4 win 1 off 0; last base writer load at 21; writers back to the last injecting one: load@21; shadow writes of r4 per rep: add=5 mad=4 mul=7 mulhi=4 or=2 rotl=3 rotr=3 shfl=2 sub=4 xor=3
[2026-10-07T22:17:28Z] load site instr 29: src r3 win 1 off 0; last base writer sub at 28; writers back to the last injecting one: sub@28; shadow writes of r3 per rep: add=6 mad=3 mul=1 mulhi=3 or=1 rotl=2 rotr=3 shfl=6 sub=3 xor=4
[2026-10-07T22:17:28Z] load site instr 33: src r2 win 1 off 0; last base writer xor at 26; writers back to the last injecting one: xor@26; shadow writes of r2 per rep: add=4 mad=2 mul=5 mulhi=5 or=2 rotl=3 rotr=1 shfl=4 xor=1
[2026-10-07T22:17:28Z] load site instr 35: src r1 win 2 off 3; last base writer shfl at 34; writers back to the last injecting one: shfl@34; shadow writes of r1 per rep: add=7 mad=5 or=1 rotl=2 rotr=1 shfl=8 sub=5 xor=4
[2026-10-07T22:17:28Z] load site instr 36: src r5 win 0 off 0; last base writer load at 35; writers back to the last injecting one: load@35; shadow writes of r5 per rep: add=2 mad=6 mul=2 mulhi=2 or=3 rotl=2 rotr=5 shfl=2 sub=1 xor=3
[2026-10-07T22:17:28Z] load site instr 42: src r3 win 1 off 0; last base writer sub at 41; writers back to the last injecting one: sub@41; shadow writes of r3 per rep: add=6 mad=3 mul=1 mulhi=3 or=1 rotl=2 rotr=3 shfl=6 sub=3 xor=4
[2026-10-07T22:17:28Z] load site instr 45: src r0 win 0 off 0; last base writer load at 36; writers back to the last injecting one: load@36; shadow writes of r0 per rep: add=4 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=3 shfl=4 sub=1 xor=2
[2026-10-07T22:17:28Z] load site instr 46: src r4 win 1 off 1; last base writer xor at 44; writers back to the last injecting one: xor@44; shadow writes of r4 per rep: add=5 mad=4 mul=7 mulhi=4 or=2 rotl=3 rotr=3 shfl=2 sub=4 xor=3
[2026-10-07T22:17:28Z] load site instr 48: src r2 win 1 off 0; last base writer rotr at 47; writers back to the last injecting one: rotr@47 load@46; shadow writes of r2 per rep: add=4 mad=2 mul=5 mulhi=5 or=2 rotl=3 rotr=1 shfl=4 xor=1
[2026-10-07T22:17:28Z] load site instr 51: src r3 win 2 off 3; last base writer xor at 43; writers back to the last injecting one: xor@43; shadow writes of r3 per rep: add=6 mad=3 mul=1 mulhi=3 or=1 rotl=2 rotr=3 shfl=6 sub=3 xor=4
[2026-10-07T22:17:28Z] load site instr 58: src r0 win 0 off 0; last base writer sub at 54; writers back to the last injecting one: sub@54; shadow writes of r0 per rep: add=4 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=3 shfl=4 sub=1 xor=2
[2026-10-07T22:17:28Z] load site instr 62: src r7 win 2 off 1; last base writer sub at 61; writers back to the last injecting one: sub@61; shadow writes of r7 per rep: add=11 mad=5 mulhi=4 or=1 rotl=4 rotr=3 shfl=6 sub=2 xor=5
[2026-10-07T22:17:28Z] window layer: site item windows (first, items) (0x800000,2^22) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x0,2^23) (0x0,2^23) (0xc00000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^23) (0xc00000,2^22) (0x0,2^24) (0x400000,2^22); expected reads per item by quarter 152.000 152.000 88.000 120.000 (flat uniform 128.000)
[2026-10-07T22:18:21Z] 524288 warps (16777216 nonces) interpreted in 52.1 s (2.285 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T22:18:21Z] p34501-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8714
[2026-10-07T22:18:21Z] p34501-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T22:18:21Z] p34501-attack-f8 distinct lines per warp: n 524288 min 32523 p1 32580 median 32622 p99 32657 max 32681 mean 32621.5551
[2026-10-07T22:18:21Z] p34501-attack-f8 distinct items per warp: n 524288 min 4084 p1 4089 median 4094 p99 4096 max 4096 mean 4093.6337
[2026-10-07T22:18:21Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T22:18:21Z] positions: largest hi16-bucket (256 items) share 0.0070% at p64 (iteration 4, site 0, instr 10); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p93 (site 13, instr 51)
[2026-10-07T22:18:21Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p5 (site 5, instr 29); saturated sources at one position 0 of 2048 at p0 (site 0, instr 10); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T22:18:21Z] p34501-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 220 (bin 6133570) z_max +8.13 min 42 z_min -7.60 chi2/dof 6.50167 chi2_z +15934.52 top0.1% 0.15045% top0.5% 0.72602% top1% 1.42691%
[2026-10-07T22:18:21Z] p34501-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00159 largest 182 (item 0xc1376e) at +5.66 sigma smallest at -5.19; buckets64 chi2/dof 1.00243 largest 10227 (bucket 98058) at +5.06 sigma smallest at -4.48
[2026-10-07T22:18:24Z] p34501-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 220 (bin 7958252) z_max +8.13 min 46 z_min -7.25 chi2/dof 6.50020 chi2_z +15930.27 top0.1% 0.15047% top0.5% 0.72626% top1% 1.42728%
[2026-10-07T22:18:24Z] p34501-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00025 largest +5.84 sigma; buckets64 chi2/dof 1.00063 largest +5.07 smallest -4.88
[2026-10-07T22:18:24Z] 6-sigma p34501-attack-f8 items buckets64 against the window density: largest bucket +5.06 sigma, smallest -4.48 -> within 6 sigma
[2026-10-07T22:18:24Z] hot-set p34501-attack-f8 items (windowed control): f 0.1% S_f 0.15045% E_f(control) 0.15047% X_f -0.00003% X_f/f -0.0003 -> no hot set
[2026-10-07T22:18:24Z] hot-set p34501-attack-f8 items (windowed control): f 0.5% S_f 0.72602% E_f(control) 0.72626% X_f -0.00024% X_f/f -0.0005 -> no hot set
[2026-10-07T22:18:24Z] hot-set p34501-attack-f8 items (windowed control): f 1.0% S_f 1.42691% E_f(control) 1.42728% X_f -0.00037% X_f/f -0.0004 -> no hot set
[2026-10-07T22:18:24Z] hot-set p34501-attack-f8 items (windowed control): verdict clear
[2026-10-07T22:18:27Z] p34501-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 10225360) z_max +5.57 min 74 z_min -4.77 chi2/dof 0.99951 chi2_z -1.43 top0.1% 0.13108% top0.5% 0.63242% top1% 1.24324%
[2026-10-07T22:18:27Z] hot-set p34501-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15045% E_f(control) 0.13108% X_f +0.01936% X_f/f +0.1936 -> no hot set
[2026-10-07T22:18:27Z] hot-set p34501-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.72602% E_f(control) 0.63242% X_f +0.09360% X_f/f +0.1872 -> no hot set
[2026-10-07T22:18:27Z] hot-set p34501-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.42691% E_f(control) 1.24324% X_f +0.18368% X_f/f +0.1837 -> no hot set
[2026-10-07T22:18:27Z] hot-set p34501-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T22:18:27Z] ratio p34501-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 0.9998x / 0.9997x / 0.9997x (gate 1.2x at 0.1%: within); over the FLAT control 1.1477x / 1.1480x / 1.1477x
[2026-10-07T22:18:28Z] attribution: hot threshold count >= 189 marks 17302 items (0.1031% of items) holding 3330039 reads (0.1551% of reads); top 8 items t=0x5d9742:220 t=0x26320b:219 t=0x3aec86:216 t=0x58534f:215 t=0x3cc99d:215 t=0x2b3181:215 t=0x25bfca:215 t=0x1fb867:215
[2026-10-07T22:18:52Z] attribution: reads on hot items per position (flat expectation 0.1031% of each position's 16777216 reads); the 24 largest: p33(it2 s1)=0.265% p97(it6 s1)=0.264% p65(it4 s1)=0.264% p49(it3 s1)=0.263% p113(it7 s1)=0.263% p17(it1 s1)=0.263% p1(it0 s1)=0.263% p81(it5 s1)=0.263% p20(it1 s4)=0.263% p5(it0 s5)=0.262% p12(it0 s12)=0.262% p118(it7 s6)=0.262% p41(it2 s9)=0.262% p69(it4 s5)=0.262% p60(it3 s12)=0.262% p36(it2 s4)=0.262% p124(it7 s12)=0.262% p86(it5 s6)=0.262% p54(it3 s6)=0.262% p117(it7 s5)=0.262% p84(it5 s4)=0.262% p44(it2 s12)=0.262% p85(it5 s5)=0.262% p116(it7 s4)=0.262%
[2026-10-07T22:18:52Z] attribution: hot reads by iteration it0=0.155% it1=0.155% it2=0.155% it3=0.155% it4=0.155% it5=0.155% it6=0.155% it7=0.155% ; by site s0=0.000% s1=0.264% s2=0.131% s3=0.131% s4=0.261% s5=0.261% s6=0.261% s7=0.000% s8=0.130% s9=0.260% s10=0.131% s11=0.000% s12=0.261% s13=0.000% s14=0.131% s15=0.260%
[2026-10-07T22:18:52Z] site 0 (instr 10, src r4, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1031%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:18:52Z] site 1 (instr 17, src r3, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.2637% (flat expectation 0.1031%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:18:52Z] site 2 (instr 19, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1307% (flat expectation 0.1031%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:18:52Z] site 3 (instr 21, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1309% (flat expectation 0.1031%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:18:52Z] site 4 (instr 25, src r4, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2610% (flat expectation 0.1031%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:18:52Z] site 5 (instr 29, src r3, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2610% (flat expectation 0.1031%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:18:52Z] site 6 (instr 33, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2611% (flat expectation 0.1031%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:18:52Z] site 7 (instr 35, src r1, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1031%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:18:52Z] site 8 (instr 36, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1304% (flat expectation 0.1031%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:18:52Z] site 9 (instr 42, src r3, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2603% (flat expectation 0.1031%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T22:18:52Z] site 10 (instr 45, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1307% (flat expectation 0.1031%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:18:52Z] site 11 (instr 46, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1031%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:18:52Z] site 12 (instr 48, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2612% (flat expectation 0.1031%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T22:18:52Z] site 13 (instr 51, src r3, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1031%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T22:18:52Z] site 14 (instr 58, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1307% (flat expectation 0.1031%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T22:18:52Z] site 15 (instr 62, src r7, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.2595% (flat expectation 0.1031%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0063% (window expectation 0.0061%)
[2026-10-07T22:18:52Z] attribution: item 0x5d9742 (220 reads) read from positions p54(it3 s6)x9 p63(it3 s15)x9 p44(it2 s12)x7 p22(it1 s6)x6 p5(it0 s5)x5 p6(it0 s6)x5 p31(it1 s15)x5 p84(it5 s4)x5 p111(it6 s15)x5 p4(it0 s4)x4 p15(it0 s15)x4 p20(it1 s4)x4
[2026-10-07T22:18:52Z] attribution: item 0x26320b (219 reads) read from positions p17(it1 s1)x10 p49(it3 s1)x8 p36(it2 s4)x7 p81(it5 s1)x7 p22(it1 s6)x6 p41(it2 s9)x6 p69(it4 s5)x6 p97(it6 s1)x6 p105(it6 s9)x6 p115(it7 s3)x5 p6(it0 s6)x5 p54(it3 s6)x5
[2026-10-07T22:18:52Z] attribution: item 0x3aec86 (216 reads) read from positions p33(it2 s1)x9 p113(it7 s1)x8 p65(it4 s1)x8 p38(it2 s6)x7 p17(it1 s1)x6 p52(it3 s4)x6 p124(it7 s12)x5 p9(it0 s9)x5 p49(it3 s1)x5 p83(it5 s3)x5 p116(it7 s4)x5 p1(it0 s1)x5
[2026-10-07T22:18:52Z] attribution: item 0x58534f (215 reads) read from positions p47(it2 s15)x11 p95(it5 s15)x8 p79(it4 s15)x7 p105(it6 s9)x6 p117(it7 s5)x6 p127(it7 s15)x5 p20(it1 s4)x5 p28(it1 s12)x5 p68(it4 s4)x5 p86(it5 s6)x5 p118(it7 s6)x5 p9(it0 s9)x4
[2026-10-07T22:18:52Z] attribution: item 0x3cc99d (215 reads) read from positions p84(it5 s4)x7 p17(it1 s1)x6 p49(it3 s1)x6 p81(it5 s1)x6 p113(it7 s1)x6 p53(it3 s5)x5 p58(it3 s10)x5 p65(it4 s1)x5 p89(it5 s9)x5 p116(it7 s4)x5 p117(it7 s5)x4 p9(it0 s9)x4
[2026-10-07T22:18:52Z] attribution: item 0x2b3181 (215 reads) read from positions p17(it1 s1)x8 p117(it7 s5)x6 p53(it3 s5)x6 p69(it4 s5)x6 p124(it7 s12)x6 p97(it6 s1)x6 p101(it6 s5)x6 p104(it6 s8)x6 p20(it1 s4)x5 p34(it2 s2)x5 p42(it2 s10)x5 p49(it3 s1)x5
[2026-10-07T22:18:52Z] attribution: item 0x25bfca (215 reads) read from positions p65(it4 s1)x12 p17(it1 s1)x8 p118(it7 s6)x7 p33(it2 s1)x7 p49(it3 s1)x7 p70(it4 s6)x6 p81(it5 s1)x6 p113(it7 s1)x6 p9(it0 s9)x5 p12(it0 s12)x5 p86(it5 s6)x5 p124(it7 s12)x4
[2026-10-07T22:18:52Z] attribution: item 0x1fb867 (215 reads) read from positions p97(it6 s1)x12 p22(it1 s6)x9 p53(it3 s5)x8 p1(it0 s1)x8 p113(it7 s1)x8 p86(it5 s6)x7 p6(it0 s6)x6 p17(it1 s1)x6 p108(it6 s12)x6 p118(it7 s6)x5 p73(it4 s9)x5 p101(it6 s5)x5
[2026-10-07T22:18:52Z] hottest item p34501-attack-f8 (0x5d9742): 220 reads (0.0000% of all); predicted source none
[2026-10-07T22:18:52Z] program p34501-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
lease: released 23 pool cores after 482 s, exit 0

View file

@ -0,0 +1,491 @@
[2026-10-07T18:53:17Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "3664", "--nonces", "16777216", "--threads", "48", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T18:53:17Z] census warps: programs [3664] day 20730 nonces 16777216 threads 48 plant none validate sample check_every 997 diag true
[2026-10-07T18:53:18Z] day 20730: cache filled in 0.63 s, fnv 448274a57f508cbc
[2026-10-07T18:53:22Z] table: 16777216 items derived with their 8 lines in 4.1 s; library comparison sample (0 mismatches)
[2026-10-07T18:53:27Z] program p3664-attack-f8: epoch seed 6c1cc7ecc9215c3070328f35e82c32bd43b7de375dd01edd01d5ebfad624181f era seed 7b9a9acb80ea254c66c67dc756d0bc8821bac6834b30be5def1eb686e302c668 id abfcb4fe4f054bad attempt 1 class mx8-era22e9123a+sh256x27 op mix load=16 mad=9 or=7 shfl=7 add=5 mul=5 xor=4 mulhi=3 rotl=3 sub=3 rotr=2; era stride mul 0x944b0f15 rot 10 interleave [3, 8, 13, 15] windows 1:2:0 2:2:0 7:1:0 10:1:0 17:2:1 22:1:0 33:2:3 34:1:0 36:1:0 41:1:0 43:0:0 44:2:3 48:2:0 50:2:0 52:0:0 59:1:0
[2026-10-07T18:53:27Z] load site instr 1: src r3 win 2 off 0; last base writer add at 56; writers back to the last injecting one: add@56; shadow writes of r3 per rep: add=7 mad=5 mul=2 mulhi=3 or=1 rotl=4 rotr=3 shfl=1 sub=3 xor=5
[2026-10-07T18:53:27Z] load site instr 2: src r5 win 2 off 0; last base writer load at 1; writers back to the last injecting one: load@1; shadow writes of r5 per rep: add=4 mad=5 mulhi=5 or=3 rotl=3 rotr=3 shfl=1 sub=1 xor=5
[2026-10-07T18:53:27Z] load site instr 7: src r5 win 1 off 0; last base writer xor at 3; writers back to the last injecting one: xor@3; shadow writes of r5 per rep: add=4 mad=5 mulhi=5 or=3 rotl=3 rotr=3 shfl=1 sub=1 xor=5
[2026-10-07T18:53:27Z] load site instr 10: src r0 win 1 off 0; last base writer xor at 5; writers back to the last injecting one: xor@5; shadow writes of r0 per rep: add=9 mad=4 mul=3 mulhi=6 or=1 rotl=2 rotr=1 shfl=4 sub=1 xor=5
[2026-10-07T18:53:27Z] load site instr 17: src r2 win 2 off 1; last base writer xor at 14; writers back to the last injecting one: xor@14; shadow writes of r2 per rep: add=3 mad=5 mulhi=1 or=1 rotr=1 shfl=5 sub=1 xor=2
[2026-10-07T18:53:27Z] load site instr 22: src r7 win 1 off 0; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r7 per rep: add=6 mad=5 mulhi=5 or=2 rotl=4 rotr=1 shfl=3 sub=4 xor=3
[2026-10-07T18:53:27Z] load site instr 33: src r4 win 2 off 3; last base writer mad at 29; writers back to the last injecting one: mad@29; shadow writes of r4 per rep: add=5 mad=3 mul=4 mulhi=5 or=3 rotl=4 rotr=2 sub=1 xor=3
[2026-10-07T18:53:27Z] load site instr 34: src r2 win 1 off 0; last base writer shfl at 32; writers back to the last injecting one: shfl@32; shadow writes of r2 per rep: add=3 mad=5 mulhi=1 or=1 rotr=1 shfl=5 sub=1 xor=2
[2026-10-07T18:53:27Z] load site instr 36: src r0 win 1 off 0; last base writer load at 34; writers back to the last injecting one: load@34; shadow writes of r0 per rep: add=9 mad=4 mul=3 mulhi=6 or=1 rotl=2 rotr=1 shfl=4 sub=1 xor=5
[2026-10-07T18:53:27Z] load site instr 41: src r3 win 1 off 0; last base writer sub at 39; writers back to the last injecting one: sub@39; shadow writes of r3 per rep: add=7 mad=5 mul=2 mulhi=3 or=1 rotl=4 rotr=3 shfl=1 sub=3 xor=5
[2026-10-07T18:53:27Z] load site instr 43: src r5 win 0 off 0; last base writer rotr at 42; writers back to the last injecting one: rotr@42 mad@38; shadow writes of r5 per rep: add=4 mad=5 mulhi=5 or=3 rotl=3 rotr=3 shfl=1 sub=1 xor=5
[2026-10-07T18:53:27Z] load site instr 44: src r1 win 2 off 3; last base writer load at 43; writers back to the last injecting one: load@43; shadow writes of r1 per rep: add=5 mad=2 mul=5 mulhi=5 or=4 rotl=3 rotr=5 shfl=5 sub=2 xor=3
[2026-10-07T18:53:27Z] load site instr 48: src r4 win 2 off 0; last base writer add at 46; writers back to the last injecting one: add@46; shadow writes of r4 per rep: add=5 mad=3 mul=4 mulhi=5 or=3 rotl=4 rotr=2 sub=1 xor=3
[2026-10-07T18:53:27Z] load site instr 50: src r4 win 2 off 0; last base writer mad at 49; writers back to the last injecting one: mad@49; shadow writes of r4 per rep: add=5 mad=3 mul=4 mulhi=5 or=3 rotl=4 rotr=2 sub=1 xor=3
[2026-10-07T18:53:27Z] load site instr 52: src r2 win 0 off 0; last base writer load at 48; writers back to the last injecting one: load@48; shadow writes of r2 per rep: add=3 mad=5 mulhi=1 or=1 rotr=1 shfl=5 sub=1 xor=2
[2026-10-07T18:53:27Z] load site instr 59: src r6 win 1 off 0; last base writer sub at 58; writers back to the last injecting one: sub@58; shadow writes of r6 per rep: add=6 mad=2 mul=4 mulhi=3 or=1 rotl=2 rotr=3 shfl=4 sub=4 xor=6
[2026-10-07T18:53:27Z] window layer: site item windows (first, items) (0x0,2^22) (0x0,2^22) (0x0,2^23) (0x0,2^23) (0x400000,2^22) (0x0,2^23) (0xc00000,2^22) (0x0,2^23) (0x0,2^23) (0x0,2^23) (0x0,2^24) (0xc00000,2^22) (0x0,2^22) (0x0,2^22) (0x0,2^24) (0x0,2^23); expected reads per item by quarter 256.000 160.000 16.000 80.000 (flat uniform 128.000)
[2026-10-07T18:55:49Z] 524288 warps (16777216 nonces) interpreted in 142.3 s (13.032 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:55:49Z] p3664-attack-f8 distinct lines per hash: n 16777216 min 951 p1 968 median 992 p99 1016 max 1024 mean 991.8774
[2026-10-07T18:55:49Z] p3664-attack-f8 distinct items per hash: n 16777216 min 119 p1 121 median 124 p99 127 max 128 mean 123.9993
[2026-10-07T18:55:49Z] p3664-attack-f8 distinct lines per warp: n 524288 min 31289 p1 31454 median 31606 p99 31759 max 31914 mean 31606.3300
[2026-10-07T18:55:49Z] p3664-attack-f8 distinct items per warp: n 524288 min 3927 p1 3947 median 3966 p99 3985 max 4004 mean 3965.7494
[2026-10-07T18:55:49Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:55:49Z] positions: largest hi16-bucket (256 items) share 0.0199% at p44 (iteration 2, site 12, instr 48); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 1)
[2026-10-07T18:55:49Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p0 (site 0, instr 1); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:55:49Z] p3664-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 453 (bin 4048298) z_max +28.73 min 1 z_min -11.23 chi2/dof 67.56930 chi2_z +192805.27 top0.1% 0.31202% top0.5% 1.49813% top1% 2.92904%
[2026-10-07T18:55:49Z] p3664-attack-f8 item histogram against the window density: full 2^24 chi2/dof 2.78575 largest 453 (item 0x3dc5aa) at +12.31 sigma smallest at -6.69; buckets64 chi2/dof 113.26316 largest 25233 (bucket 30484) at +69.13 sigma smallest at -20.04
[2026-10-07T18:55:55Z] p3664-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 338 (bin 1570772) z_max +18.56 min 1 z_min -11.23 chi2/dof 63.99641 chi2_z +182457.08 top0.1% 0.23801% top0.5% 1.15438% top1% 2.27390%
[2026-10-07T18:55:55Z] p3664-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99962 largest +6.26 sigma; buckets64 chi2/dof 1.00306 largest +4.40 smallest -4.88
[2026-10-07T18:55:55Z] 6-sigma p3664-attack-f8 items buckets64 against the window density: largest bucket +69.13 sigma, smallest -20.04 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:55:55Z] hot-set p3664-attack-f8 items (windowed control): f 0.1% S_f 0.31202% E_f(control) 0.23801% X_f +0.07400% X_f/f +0.7400 -> no hot set
[2026-10-07T18:55:55Z] hot-set p3664-attack-f8 items (windowed control): f 0.5% S_f 1.49813% E_f(control) 1.15438% X_f +0.34375% X_f/f +0.6875 -> no hot set
[2026-10-07T18:55:55Z] hot-set p3664-attack-f8 items (windowed control): f 1.0% S_f 2.92904% E_f(control) 2.27390% X_f +0.65514% X_f/f +0.6551 -> no hot set
[2026-10-07T18:55:55Z] hot-set p3664-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:56:01Z] p3664-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 196 (bin 4200947) z_max +6.01 min 72 z_min -4.95 chi2/dof 0.99959 chi2_z -1.20 top0.1% 0.13103% top0.5% 0.63233% top1% 1.24318%
[2026-10-07T18:56:01Z] hot-set p3664-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.31202% E_f(control) 0.13103% X_f +0.18098% X_f/f +1.8098 -> HOT SET
[2026-10-07T18:56:01Z] hot-set p3664-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.49813% E_f(control) 0.63233% X_f +0.86580% X_f/f +1.7316 -> HOT SET
[2026-10-07T18:56:01Z] hot-set p3664-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.92904% E_f(control) 1.24318% X_f +1.68586% X_f/f +1.6859 -> HOT SET
[2026-10-07T18:56:01Z] hot-set p3664-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T18:56:01Z] ratio p3664-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.3109x / 1.2978x / 1.2881x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 2.3812x / 2.3692x / 2.3561x
[2026-10-07T18:56:02Z] attribution: hot threshold count >= 391 marks 16893 items (0.1007% of items) holding 6745828 reads (0.3141% of reads); top 8 items t=0x3dc5aa:453 t=0x379d3d:452 t=0x0f9dfc:451 t=0x18c52f:448 t=0x2f057a:447 t=0x1dbd59:445 t=0x0dc5c2:445 t=0x2e5d0b:443
[2026-10-07T18:57:11Z] attribution: reads on hot items per position (flat expectation 0.1007% of each position's 16777216 reads); the 24 largest: p124(it7 s12)=1.157% p93(it5 s13)=1.157% p29(it1 s13)=1.156% p77(it4 s13)=1.156% p60(it3 s12)=1.155% p76(it4 s12)=1.155% p44(it2 s12)=1.154% p108(it6 s12)=1.154% p13(it0 s13)=1.154% p28(it1 s12)=1.153% p92(it5 s12)=1.153% p109(it6 s13)=1.152% p125(it7 s13)=1.152% p45(it2 s13)=1.151% p61(it3 s13)=1.150% p12(it0 s12)=1.149% p65(it4 s1)=0.472% p113(it7 s1)=0.471% p81(it5 s1)=0.470% p49(it3 s1)=0.469% p33(it2 s1)=0.469% p17(it1 s1)=0.469% p97(it6 s1)=0.468% p1(it0 s1)=0.467%
[2026-10-07T18:57:11Z] attribution: hot reads by iteration it0=0.314% it1=0.314% it2=0.314% it3=0.314% it4=0.315% it5=0.315% it6=0.314% it7=0.314% ; by site s0=0.445% s1=0.469% s2=0.222% s3=0.246% s4=0.000% s5=0.223% s6=0.000% s7=0.223% s8=0.222% s9=0.223% s10=0.111% s11=0.000% s12=1.154% s13=1.153% s14=0.112% s15=0.223%
[2026-10-07T18:57:11Z] site 0 (instr 1, src r3, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4449% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:57:11Z] site 1 (instr 2, src r5, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4692% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:57:11Z] site 2 (instr 7, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2223% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:57:11Z] site 3 (instr 10, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2463% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:57:11Z] site 4 (instr 17, src r2, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:57:11Z] site 5 (instr 22, src r7, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2225% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:57:11Z] site 6 (instr 33, src r4, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:57:11Z] site 7 (instr 34, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2230% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T18:57:11Z] site 8 (instr 36, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2221% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:57:11Z] site 9 (instr 41, src r3, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2227% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:57:11Z] site 10 (instr 43, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1111% (flat expectation 0.1007%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:57:11Z] site 11 (instr 44, src r1, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T18:57:11Z] site 12 (instr 48, src r4, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 1.1539% (flat expectation 0.1007%); index entropy 13.727 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0192% (window expectation 0.0061%)
[2026-10-07T18:57:11Z] site 13 (instr 50, src r4, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 1.1534% (flat expectation 0.1007%); index entropy 13.727 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0191% (window expectation 0.0061%)
[2026-10-07T18:57:11Z] site 14 (instr 52, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1117% (flat expectation 0.1007%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T18:57:11Z] site 15 (instr 59, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2229% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T18:57:11Z] attribution: item 0x3dc5aa (453 reads) read from positions p108(it6 s12)x22 p44(it2 s12)x17 p93(it5 s13)x17 p13(it0 s13)x16 p124(it7 s12)x15 p28(it1 s12)x14 p92(it5 s12)x14 p109(it6 s13)x14 p81(it5 s1)x12 p125(it7 s13)x11 p61(it3 s13)x11 p12(it0 s12)x10
[2026-10-07T18:57:11Z] attribution: item 0x379d3d (452 reads) read from positions p45(it2 s13)x19 p13(it0 s13)x16 p77(it4 s13)x15 p108(it6 s12)x15 p125(it7 s13)x14 p12(it0 s12)x14 p92(it5 s12)x14 p60(it3 s12)x13 p124(it7 s12)x13 p28(it1 s12)x12 p0(it0 s0)x11 p76(it4 s12)x11
[2026-10-07T18:57:11Z] attribution: item 0x0f9dfc (451 reads) read from positions p44(it2 s12)x23 p76(it4 s12)x20 p109(it6 s13)x17 p12(it0 s12)x16 p60(it3 s12)x16 p45(it2 s13)x15 p125(it7 s13)x14 p92(it5 s12)x13 p93(it5 s13)x11 p61(it3 s13)x10 p108(it6 s12)x10 p77(it4 s13)x9
[2026-10-07T18:57:11Z] attribution: item 0x18c52f (448 reads) read from positions p92(it5 s12)x20 p109(it6 s13)x18 p45(it2 s13)x17 p125(it7 s13)x17 p93(it5 s13)x15 p60(it3 s12)x14 p13(it0 s13)x13 p44(it2 s12)x13 p76(it4 s12)x12 p124(it7 s12)x11 p0(it0 s0)x10 p113(it7 s1)x10
[2026-10-07T18:57:11Z] attribution: item 0x2f057a (447 reads) read from positions p12(it0 s12)x21 p124(it7 s12)x20 p29(it1 s13)x19 p92(it5 s12)x17 p109(it6 s13)x15 p13(it0 s13)x14 p44(it2 s12)x13 p76(it4 s12)x12 p93(it5 s13)x12 p77(it4 s13)x11 p108(it6 s12)x11 p28(it1 s12)x10
[2026-10-07T18:57:11Z] attribution: item 0x1dbd59 (445 reads) read from positions p13(it0 s13)x17 p60(it3 s12)x17 p92(it5 s12)x17 p12(it0 s12)x16 p109(it6 s13)x16 p29(it1 s13)x13 p61(it3 s13)x13 p28(it1 s12)x12 p45(it2 s13)x12 p76(it4 s12)x11 p77(it4 s13)x11 p124(it7 s12)x11
[2026-10-07T18:57:11Z] attribution: item 0x0dc5c2 (445 reads) read from positions p44(it2 s12)x21 p124(it7 s12)x19 p45(it2 s13)x17 p92(it5 s12)x16 p61(it3 s13)x15 p125(it7 s13)x15 p13(it0 s13)x14 p60(it3 s12)x14 p12(it0 s12)x13 p29(it1 s13)x13 p77(it4 s13)x13 p109(it6 s13)x13
[2026-10-07T18:57:11Z] attribution: item 0x2e5d0b (443 reads) read from positions p28(it1 s12)x21 p92(it5 s12)x17 p44(it2 s12)x16 p76(it4 s12)x16 p93(it5 s13)x16 p125(it7 s13)x13 p29(it1 s13)x12 p60(it3 s12)x12 p109(it6 s13)x12 p45(it2 s13)x11 p61(it3 s13)x11 p77(it4 s13)x11
[2026-10-07T18:57:11Z] hottest item p3664-attack-f8 (0x3dc5aa): 453 reads (0.0000% of all); predicted source none
[2026-10-07T18:57:11Z] program p3664-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T18:57:11Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "103378", "--nonces", "16777216", "--threads", "48", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T18:57:11Z] census warps: programs [103378] day 20730 nonces 16777216 threads 48 plant none validate sample check_every 997 diag true
[2026-10-07T18:57:12Z] day 20730: cache filled in 0.65 s, fnv 448274a57f508cbc
[2026-10-07T18:57:18Z] table: 16777216 items derived with their 8 lines in 5.3 s; library comparison sample (0 mismatches)
[2026-10-07T18:57:22Z] program p103378-attack-f8: epoch seed 08b07518f0d182284f584806ee7e8a6ccd8f2687bf1f6b2424fe168c5ff62125 era seed f5d8d89689c7c389857ec5dd65c50f62afa0bb7f7d7f975d2eaedbe22fd800d6 id 9860246dd6626c61 attempt 6 class mx8-eraa21a23c1+sh256x27 op mix load=16 xor=9 mul=8 mad=6 rotl=6 add=5 mulhi=5 shfl=4 or=2 rotr=2 sub=1; era stride mul 0x7624e9cd rot 11 interleave [1, 2, 4, 7] windows 3:2:1 5:2:0 12:2:0 13:1:0 16:1:1 18:1:1 22:1:1 25:2:3 31:2:0 35:2:0 36:0:0 39:1:1 44:0:0 48:0:0 55:1:0 57:1:1
[2026-10-07T18:57:22Z] load site instr 3: src r7 win 2 off 1; last base writer shfl at 2; writers back to the last injecting one: shfl@2; shadow writes of r7 per rep: add=7 mad=6 mul=2 mulhi=4 rotl=3 rotr=3 shfl=2 sub=3 xor=3
[2026-10-07T18:57:22Z] load site instr 5: src r3 win 2 off 0; last base writer load at 3; writers back to the last injecting one: load@3; shadow writes of r3 per rep: add=3 mad=3 mul=4 mulhi=1 or=3 rotl=2 rotr=2 shfl=2 sub=4 xor=6
[2026-10-07T18:57:22Z] load site instr 12: src r5 win 2 off 0; last base writer mad at 7; writers back to the last injecting one: mad@7; shadow writes of r5 per rep: add=5 mad=2 mul=5 mulhi=3 or=2 rotl=2 rotr=1 shfl=3 xor=5
[2026-10-07T18:57:22Z] load site instr 13: src r6 win 1 off 0; last base writer xor at 8; writers back to the last injecting one: xor@8; shadow writes of r6 per rep: add=6 mad=4 mul=4 mulhi=1 rotl=2 rotr=4 shfl=3 sub=3 xor=3
[2026-10-07T18:57:22Z] load site instr 16: src r7 win 1 off 1; last base writer rotr at 14; writers back to the last injecting one: rotr@14 shfl@2; shadow writes of r7 per rep: add=7 mad=6 mul=2 mulhi=4 rotl=3 rotr=3 shfl=2 sub=3 xor=3
[2026-10-07T18:57:22Z] load site instr 18: src r1 win 1 off 1; last base writer load at 16; writers back to the last injecting one: load@16; shadow writes of r1 per rep: add=1 mad=4 mul=2 mulhi=1 or=2 rotl=2 rotr=1 shfl=8 xor=4
[2026-10-07T18:57:22Z] load site instr 22: src r4 win 1 off 1; last base writer load at 13; writers back to the last injecting one: load@13; shadow writes of r4 per rep: add=7 mad=4 mul=2 mulhi=1 or=4 rotl=8 rotr=3 shfl=6 sub=3 xor=7
[2026-10-07T18:57:22Z] load site instr 25: src r2 win 2 off 3; last base writer mad at 23; writers back to the last injecting one: mad@23; shadow writes of r2 per rep: add=4 mad=7 mul=2 mulhi=1 or=2 rotl=4 rotr=2 shfl=3 xor=4
[2026-10-07T18:57:22Z] load site instr 31: src r4 win 2 off 0; last base writer load at 25; writers back to the last injecting one: load@25; shadow writes of r4 per rep: add=7 mad=4 mul=2 mulhi=1 or=4 rotl=8 rotr=3 shfl=6 sub=3 xor=7
[2026-10-07T18:57:22Z] load site instr 35: src r0 win 2 off 0; last base writer add at 29; writers back to the last injecting one: add@29; shadow writes of r0 per rep: add=4 mad=7 mul=5 mulhi=2 or=1 rotl=6 rotr=1 shfl=6 sub=2 xor=2
[2026-10-07T18:57:22Z] load site instr 36: src r2 win 0 off 0; last base writer xor at 27; writers back to the last injecting one: xor@27; shadow writes of r2 per rep: add=4 mad=7 mul=2 mulhi=1 or=2 rotl=4 rotr=2 shfl=3 xor=4
[2026-10-07T18:57:22Z] load site instr 39: src r2 win 1 off 1; last base writer add at 37; writers back to the last injecting one: add@37; shadow writes of r2 per rep: add=4 mad=7 mul=2 mulhi=1 or=2 rotl=4 rotr=2 shfl=3 xor=4
[2026-10-07T18:57:22Z] load site instr 44: src r2 win 0 off 0; last base writer mad at 40; writers back to the last injecting one: mad@40; shadow writes of r2 per rep: add=4 mad=7 mul=2 mulhi=1 or=2 rotl=4 rotr=2 shfl=3 xor=4
[2026-10-07T18:57:22Z] load site instr 48: src r6 win 0 off 0; last base writer load at 35; writers back to the last injecting one: load@35; shadow writes of r6 per rep: add=6 mad=4 mul=4 mulhi=1 rotl=2 rotr=4 shfl=3 sub=3 xor=3
[2026-10-07T18:57:22Z] load site instr 55: src r5 win 1 off 0; last base writer shfl at 46; writers back to the last injecting one: shfl@46; shadow writes of r5 per rep: add=5 mad=2 mul=5 mulhi=3 or=2 rotl=2 rotr=1 shfl=3 xor=5
[2026-10-07T18:57:22Z] load site instr 57: src r4 win 1 off 1; last base writer rotl at 47; writers back to the last injecting one: rotl@47 mad@45; shadow writes of r4 per rep: add=7 mad=4 mul=2 mulhi=1 or=4 rotl=8 rotr=3 shfl=6 sub=3 xor=7
[2026-10-07T18:57:22Z] window layer: site item windows (first, items) (0x400000,2^22) (0x0,2^22) (0x0,2^22) (0x0,2^23) (0x800000,2^23) (0x800000,2^23) (0x800000,2^23) (0xc00000,2^22) (0x0,2^22) (0x0,2^22) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x800000,2^23); expected reads per item by quarter 184.000 88.000 104.000 136.000 (flat uniform 128.000)
[2026-10-07T18:59:36Z] 524288 warps (16777216 nonces) interpreted in 134.0 s (12.269 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:59:36Z] p103378-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8708
[2026-10-07T18:59:36Z] p103378-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T18:59:36Z] p103378-attack-f8 distinct lines per warp: n 524288 min 32564 p1 32605 median 32636 p99 32664 max 32686 mean 32636.0050
[2026-10-07T18:59:36Z] p103378-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4550
[2026-10-07T18:59:36Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:59:36Z] positions: largest hi16-bucket (256 items) share 0.0100% at p50 (iteration 3, site 2, instr 12); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 3)
[2026-10-07T18:59:36Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p67 (site 3, instr 13); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:59:36Z] p103378-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 308 (bin 655418) z_max +15.91 min 47 z_min -7.16 chi2/dof 12.17726 chi2_z +32372.81 top0.1% 0.20376% top0.5% 0.96480% top1% 1.87363%
[2026-10-07T18:59:36Z] p103378-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.50239 largest 308 (item 0xa003a) at +9.14 sigma smallest at -5.31; buckets64 chi2/dof 33.18869 largest 17212 (bucket 0) at +50.09 sigma smallest at -12.74
[2026-10-07T18:59:43Z] p103378-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 260 (bin 1504387) z_max +11.67 min 45 z_min -7.34 chi2/dof 11.50116 chi2_z +30414.62 top0.1% 0.17615% top0.5% 0.85022% top1% 1.67062%
[2026-10-07T18:59:43Z] p103378-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00048 largest +5.60 sigma; buckets64 chi2/dof 0.99549 largest +4.39 smallest -4.67
[2026-10-07T18:59:43Z] 6-sigma p103378-attack-f8 items buckets64 against the window density: largest bucket +50.09 sigma, smallest -12.74 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:59:43Z] hot-set p103378-attack-f8 items (windowed control): f 0.1% S_f 0.20376% E_f(control) 0.17615% X_f +0.02760% X_f/f +0.2760 -> no hot set
[2026-10-07T18:59:43Z] hot-set p103378-attack-f8 items (windowed control): f 0.5% S_f 0.96480% E_f(control) 0.85022% X_f +0.11458% X_f/f +0.2292 -> no hot set
[2026-10-07T18:59:43Z] hot-set p103378-attack-f8 items (windowed control): f 1.0% S_f 1.87363% E_f(control) 1.67062% X_f +0.20301% X_f/f +0.2030 -> no hot set
[2026-10-07T18:59:43Z] hot-set p103378-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:59:48Z] p103378-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 195 (bin 13794611) z_max +5.92 min 73 z_min -4.86 chi2/dof 0.99980 chi2_z -0.59 top0.1% 0.13107% top0.5% 0.63245% top1% 1.24334%
[2026-10-07T18:59:48Z] hot-set p103378-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.20376% E_f(control) 0.13107% X_f +0.07269% X_f/f +0.7269 -> no hot set
[2026-10-07T18:59:48Z] hot-set p103378-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.96480% E_f(control) 0.63245% X_f +0.33235% X_f/f +0.6647 -> no hot set
[2026-10-07T18:59:48Z] hot-set p103378-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.87363% E_f(control) 1.24334% X_f +0.63029% X_f/f +0.6303 -> no hot set
[2026-10-07T18:59:48Z] hot-set p103378-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:59:48Z] ratio p103378-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.1567x / 1.1348x / 1.1215x (gate 1.2x at 0.1%: within); over the FLAT control 1.5546x / 1.5255x / 1.5069x
[2026-10-07T18:59:50Z] attribution: hot threshold count >= 253 marks 18036 items (0.1075% of items) holding 4694173 reads (0.2186% of reads); top 8 items t=0x0a003a:308 t=0x188019:306 t=0x000023:306 t=0x390074:305 t=0x200030:305 t=0x00000a:303 t=0x180068:302 t=0x2ae040:300
[2026-10-07T19:00:50Z] attribution: reads on hot items per position (flat expectation 0.1075% of each position's 16777216 reads); the 24 largest: p50(it3 s2)=1.104% p98(it6 s2)=1.103% p82(it5 s2)=1.103% p18(it1 s2)=1.103% p34(it2 s2)=1.102% p66(it4 s2)=1.101% p114(it7 s2)=1.096% p24(it1 s8)=0.487% p9(it0 s9)=0.485% p40(it2 s8)=0.484% p104(it6 s8)=0.484% p56(it3 s8)=0.484% p72(it4 s8)=0.483% p89(it5 s9)=0.483% p97(it6 s1)=0.483% p8(it0 s8)=0.483% p105(it6 s9)=0.483% p1(it0 s1)=0.482% p33(it2 s1)=0.482% p65(it4 s1)=0.482% p120(it7 s8)=0.482% p49(it3 s1)=0.482% p57(it3 s9)=0.482% p73(it4 s9)=0.482%
[2026-10-07T19:00:50Z] attribution: hot reads by iteration it0=0.188% it1=0.223% it2=0.223% it3=0.223% it4=0.223% it5=0.223% it6=0.223% it7=0.222% ; by site s0=0.000% s1=0.482% s2=1.024% s3=0.240% s4=0.000% s5=0.000% s6=0.000% s7=0.000% s8=0.484% s9=0.482% s10=0.120% s11=0.000% s12=0.305% s13=0.120% s14=0.240% s15=0.000%
[2026-10-07T19:00:50Z] site 0 (instr 3, src r7, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1075%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:00:50Z] site 1 (instr 5, src r3, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4817% (flat expectation 0.1075%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:00:50Z] site 2 (instr 12, src r5, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 1.0241% (flat expectation 0.1075%); index entropy 13.979 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0091% (window expectation 0.0061%)
[2026-10-07T19:00:50Z] site 3 (instr 13, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2403% (flat expectation 0.1075%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:00:50Z] site 4 (instr 16, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1075%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:00:50Z] site 5 (instr 18, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1075%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:00:50Z] site 6 (instr 22, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1075%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:00:50Z] site 7 (instr 25, src r2, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1075%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0063% (window expectation 0.0061%)
[2026-10-07T19:00:50Z] site 8 (instr 31, src r4, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4835% (flat expectation 0.1075%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:00:50Z] site 9 (instr 35, src r0, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4820% (flat expectation 0.1075%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:00:50Z] site 10 (instr 36, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1203% (flat expectation 0.1075%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:00:50Z] site 11 (instr 39, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1075%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:00:50Z] site 12 (instr 44, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.3053% (flat expectation 0.1075%); index entropy 15.972 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0051% (window expectation 0.0015%)
[2026-10-07T19:00:50Z] site 13 (instr 48, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1202% (flat expectation 0.1075%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:00:50Z] site 14 (instr 55, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2400% (flat expectation 0.1075%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:00:50Z] site 15 (instr 57, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1075%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:00:50Z] attribution: item 0x0a003a (308 reads) read from positions p50(it3 s2)x18 p66(it4 s2)x16 p34(it2 s2)x14 p18(it1 s2)x12 p114(it7 s2)x10 p24(it1 s8)x10 p82(it5 s2)x10 p65(it4 s1)x9 p89(it5 s9)x9 p40(it2 s8)x8 p98(it6 s2)x8 p97(it6 s1)x7
[2026-10-07T19:00:50Z] attribution: item 0x188019 (306 reads) read from positions p66(it4 s2)x16 p98(it6 s2)x16 p18(it1 s2)x13 p34(it2 s2)x12 p41(it2 s9)x10 p114(it7 s2)x10 p50(it3 s2)x9 p82(it5 s2)x9 p105(it6 s9)x9 p2(it0 s2)x8 p12(it0 s12)x8 p40(it2 s8)x8
[2026-10-07T19:00:50Z] attribution: item 0x000023 (306 reads) read from positions p98(it6 s2)x13 p34(it2 s2)x12 p114(it7 s2)x12 p33(it2 s1)x11 p60(it3 s12)x11 p12(it0 s12)x10 p66(it4 s2)x10 p120(it7 s8)x9 p28(it1 s12)x9 p44(it2 s12)x9 p76(it4 s12)x9 p82(it5 s2)x9
[2026-10-07T19:00:50Z] attribution: item 0x390074 (305 reads) read from positions p82(it5 s2)x21 p66(it4 s2)x19 p114(it7 s2)x17 p50(it3 s2)x12 p98(it6 s2)x12 p18(it1 s2)x11 p2(it0 s2)x10 p113(it7 s1)x10 p34(it2 s2)x9 p97(it6 s1)x9 p40(it2 s8)x7 p108(it6 s12)x7
[2026-10-07T19:00:50Z] attribution: item 0x200030 (305 reads) read from positions p66(it4 s2)x19 p18(it1 s2)x18 p82(it5 s2)x14 p98(it6 s2)x13 p12(it0 s12)x10 p28(it1 s12)x10 p34(it2 s2)x10 p114(it7 s2)x10 p25(it1 s9)x8 p50(it3 s2)x8 p92(it5 s12)x8 p121(it7 s9)x7
[2026-10-07T19:00:50Z] attribution: item 0x00000a (303 reads) read from positions p18(it1 s2)x16 p50(it3 s2)x14 p124(it7 s12)x13 p66(it4 s2)x13 p98(it6 s2)x12 p60(it3 s12)x11 p1(it0 s1)x9 p34(it2 s2)x9 p44(it2 s12)x9 p108(it6 s12)x9 p76(it4 s12)x8 p82(it5 s2)x8
[2026-10-07T19:00:50Z] attribution: item 0x180068 (302 reads) read from positions p34(it2 s2)x14 p50(it3 s2)x14 p82(it5 s2)x14 p98(it6 s2)x12 p18(it1 s2)x11 p8(it0 s8)x10 p12(it0 s12)x10 p66(it4 s2)x10 p88(it5 s8)x10 p44(it2 s12)x9 p114(it7 s2)x8 p9(it0 s9)x8
[2026-10-07T19:00:50Z] attribution: item 0x2ae040 (300 reads) read from positions p66(it4 s2)x16 p34(it2 s2)x15 p98(it6 s2)x13 p82(it5 s2)x12 p121(it7 s9)x10 p50(it3 s2)x10 p57(it3 s9)x10 p2(it0 s2)x9 p114(it7 s2)x8 p49(it3 s1)x8 p33(it2 s1)x7 p73(it4 s9)x7
[2026-10-07T19:00:50Z] hottest item p103378-attack-f8 (0x0a003a): 308 reads (0.0000% of all); predicted source none
[2026-10-07T19:00:50Z] program p103378-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:00:50Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "105756", "--nonces", "16777216", "--threads", "48", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T19:00:50Z] census warps: programs [105756] day 20730 nonces 16777216 threads 48 plant none validate sample check_every 997 diag true
[2026-10-07T19:00:51Z] day 20730: cache filled in 0.47 s, fnv 448274a57f508cbc
[2026-10-07T19:00:56Z] table: 16777216 items derived with their 8 lines in 4.9 s; library comparison sample (0 mismatches)
[2026-10-07T19:00:59Z] program p105756-attack-f8: epoch seed c73bcc3bf9000477e9a1c63896b1e9ddd12dde21af5b8300aea3d73a55b8d380 era seed 052f84716bedccaa2c2a056ee4ecdaf3e7cb3c5cc1a94b8c16ec915a470c2849 id 3ec7fb163a6152f5 attempt 0 class mx8-era30fb3e21+sh256x27 op mix load=16 mulhi=8 mad=6 sub=6 rotr=5 shfl=5 add=4 mul=4 rotl=4 xor=4 or=2; era stride mul 0xd02c7407 rot 20 interleave [3, 7, 12, 15] windows 1:0:0 7:1:1 11:1:1 14:1:1 26:0:0 27:2:1 32:2:1 34:0:0 35:0:0 45:1:0 46:1:1 51:0:0 52:0:0 53:2:3 60:0:0 61:1:0
[2026-10-07T19:00:59Z] load site instr 1: src r7 win 0 off 0; last base writer sub at 0; writers back to the last injecting one: sub@0; shadow writes of r7 per rep: add=3 mad=2 mul=7 mulhi=4 rotl=2 shfl=4 sub=2 xor=3
[2026-10-07T19:00:59Z] load site instr 7: src r6 win 1 off 1; last base writer xor at 3; writers back to the last injecting one: xor@3; shadow writes of r6 per rep: add=5 mad=4 mul=1 mulhi=2 or=3 rotl=7 rotr=6 shfl=2 xor=5
[2026-10-07T19:00:59Z] load site instr 11: src r3 win 1 off 1; last base writer sub at 6; writers back to the last injecting one: sub@6; shadow writes of r3 per rep: add=3 mad=5 mul=2 mulhi=2 or=2 rotl=1 rotr=1 shfl=2 sub=2 xor=6
[2026-10-07T19:00:59Z] load site instr 14: src r5 win 1 off 1; last base writer mad at 12; writers back to the last injecting one: mad@12; shadow writes of r5 per rep: add=10 mad=4 mul=6 mulhi=2 or=2 rotl=6 shfl=2 sub=1 xor=5
[2026-10-07T19:00:59Z] load site instr 26: src r0 win 0 off 0; last base writer shfl at 9; writers back to the last injecting one: shfl@9; shadow writes of r0 per rep: add=5 mad=5 mul=4 mulhi=1 or=2 rotl=2 rotr=3 shfl=4 sub=1 xor=5
[2026-10-07T19:00:59Z] load site instr 27: src r5 win 2 off 1; last base writer mad at 21; writers back to the last injecting one: mad@21; shadow writes of r5 per rep: add=10 mad=4 mul=6 mulhi=2 or=2 rotl=6 shfl=2 sub=1 xor=5
[2026-10-07T19:00:59Z] load site instr 32: src r7 win 2 off 1; last base writer shfl at 29; writers back to the last injecting one: shfl@29; shadow writes of r7 per rep: add=3 mad=2 mul=7 mulhi=4 rotl=2 shfl=4 sub=2 xor=3
[2026-10-07T19:00:59Z] load site instr 34: src r5 win 0 off 0; last base writer load at 32; writers back to the last injecting one: load@32; shadow writes of r5 per rep: add=10 mad=4 mul=6 mulhi=2 or=2 rotl=6 shfl=2 sub=1 xor=5
[2026-10-07T19:00:59Z] load site instr 35: src r1 win 0 off 0; last base writer load at 27; writers back to the last injecting one: load@27; shadow writes of r1 per rep: add=5 mad=3 mul=2 mulhi=2 or=2 rotl=4 rotr=3 xor=5
[2026-10-07T19:00:59Z] load site instr 45: src r1 win 1 off 0; last base writer rotl at 43; writers back to the last injecting one: rotl@43 xor@39; shadow writes of r1 per rep: add=5 mad=3 mul=2 mulhi=2 or=2 rotl=4 rotr=3 xor=5
[2026-10-07T19:00:59Z] load site instr 46: src r7 win 1 off 1; last base writer shfl at 44; writers back to the last injecting one: shfl@44; shadow writes of r7 per rep: add=3 mad=2 mul=7 mulhi=4 rotl=2 shfl=4 sub=2 xor=3
[2026-10-07T19:00:59Z] load site instr 51: src r6 win 0 off 0; last base writer rotl at 40; writers back to the last injecting one: rotl@40 load@35; shadow writes of r6 per rep: add=5 mad=4 mul=1 mulhi=2 or=3 rotl=7 rotr=6 shfl=2 xor=5
[2026-10-07T19:00:59Z] load site instr 52: src r2 win 0 off 0; last base writer mad at 50; writers back to the last injecting one: mad@50; shadow writes of r2 per rep: add=3 mad=4 mul=4 mulhi=3 or=1 rotl=2 rotr=4 shfl=3 sub=6 xor=4
[2026-10-07T19:00:59Z] load site instr 53: src r1 win 2 off 3; last base writer load at 51; writers back to the last injecting one: load@51; shadow writes of r1 per rep: add=5 mad=3 mul=2 mulhi=2 or=2 rotl=4 rotr=3 xor=5
[2026-10-07T19:00:59Z] load site instr 60: src r7 win 0 off 0; last base writer rotr at 55; writers back to the last injecting one: rotr@55 shfl@44; shadow writes of r7 per rep: add=3 mad=2 mul=7 mulhi=4 rotl=2 shfl=4 sub=2 xor=3
[2026-10-07T19:00:59Z] load site instr 61: src r5 win 1 off 0; last base writer load at 53; writers back to the last injecting one: load@53; shadow writes of r5 per rep: add=10 mad=4 mul=6 mulhi=2 or=2 rotl=6 shfl=2 sub=1 xor=5
[2026-10-07T19:00:59Z] window layer: site item windows (first, items) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x400000,2^22) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x0,2^23); expected reads per item by quarter 88.000 152.000 120.000 152.000 (flat uniform 128.000)
[2026-10-07T19:03:38Z] 524288 warps (16777216 nonces) interpreted in 159.7 s (14.625 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:03:38Z] p105756-attack-f8 distinct lines per hash: n 16777216 min 991 p1 1015 median 1024 p99 1024 max 1024 mean 1022.8719
[2026-10-07T19:03:38Z] p105756-attack-f8 distinct items per hash: n 16777216 min 124 p1 127 median 128 p99 128 max 128 mean 127.8745
[2026-10-07T19:03:38Z] p105756-attack-f8 distinct lines per warp: n 524288 min 32496 p1 32554 median 32605 p99 32647 max 32685 mean 32604.4774
[2026-10-07T19:03:38Z] p105756-attack-f8 distinct items per warp: n 524288 min 4079 p1 4086 median 4092 p99 4096 max 4096 mean 4091.4810
[2026-10-07T19:03:38Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:03:38Z] positions: largest hi16-bucket (256 items) share 0.0070% at p6 (iteration 0, site 6, instr 32); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 1)
[2026-10-07T19:03:38Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p85 (site 5, instr 27); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:03:39Z] p105756-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 218 (bin 6361057) z_max +7.95 min 45 z_min -7.34 chi2/dof 6.50150 chi2_z +15934.04 top0.1% 0.15043% top0.5% 0.72614% top1% 1.42710%
[2026-10-07T19:03:39Z] p105756-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00182 largest 186 (item 0xb64382) at +6.02 sigma smallest at -4.93; buckets64 chi2/dof 1.03311 largest 10165 (bucket 108475) at +4.43 sigma smallest at -5.37
[2026-10-07T19:03:45Z] p105756-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 225 (bin 12696377) z_max +8.57 min 46 z_min -7.25 chi2/dof 6.49894 chi2_z +15926.63 top0.1% 0.15050% top0.5% 0.72613% top1% 1.42695%
[2026-10-07T19:03:45Z] p105756-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99960 largest +5.92 sigma; buckets64 chi2/dof 1.00393 largest +4.72 smallest -4.74
[2026-10-07T19:03:45Z] 6-sigma p105756-attack-f8 items buckets64 against the window density: largest bucket +4.43 sigma, smallest -5.37 -> within 6 sigma
[2026-10-07T19:03:45Z] hot-set p105756-attack-f8 items (windowed control): f 0.1% S_f 0.15043% E_f(control) 0.15050% X_f -0.00007% X_f/f -0.0007 -> no hot set
[2026-10-07T19:03:45Z] hot-set p105756-attack-f8 items (windowed control): f 0.5% S_f 0.72614% E_f(control) 0.72613% X_f +0.00001% X_f/f +0.0000 -> no hot set
[2026-10-07T19:03:45Z] hot-set p105756-attack-f8 items (windowed control): f 1.0% S_f 1.42710% E_f(control) 1.42695% X_f +0.00015% X_f/f +0.0001 -> no hot set
[2026-10-07T19:03:45Z] hot-set p105756-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:03:51Z] p105756-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 5534086) z_max +5.83 min 71 z_min -5.04 chi2/dof 1.00035 chi2_z +1.01 top0.1% 0.13114% top0.5% 0.63261% top1% 1.24354%
[2026-10-07T19:03:51Z] hot-set p105756-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15043% E_f(control) 0.13114% X_f +0.01929% X_f/f +0.1929 -> no hot set
[2026-10-07T19:03:51Z] hot-set p105756-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.72614% E_f(control) 0.63261% X_f +0.09353% X_f/f +0.1871 -> no hot set
[2026-10-07T19:03:51Z] hot-set p105756-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.42710% E_f(control) 1.24354% X_f +0.18355% X_f/f +0.1836 -> no hot set
[2026-10-07T19:03:51Z] hot-set p105756-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:03:51Z] ratio p105756-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 0.9996x / 1.0000x / 1.0001x (gate 1.2x at 0.1%: within); over the FLAT control 1.1471x / 1.1478x / 1.1476x
[2026-10-07T19:03:53Z] attribution: hot threshold count >= 189 marks 17511 items (0.1044% of items) holding 3369246 reads (0.1569% of reads); top 8 items t=0x610fe1:218 t=0x7ca442:217 t=0xf3c05f:216 t=0xda9abe:216 t=0xfeeaf4:215 t=0xeeec40:215 t=0x796f55:215 t=0xfc94f0:214
[2026-10-07T19:05:02Z] attribution: reads on hot items per position (flat expectation 0.1044% of each position's 16777216 reads); the 24 largest: p77(it4 s13)=0.267% p61(it3 s13)=0.266% p53(it3 s5)=0.265% p38(it2 s6)=0.265% p21(it1 s5)=0.265% p85(it5 s5)=0.265% p6(it0 s6)=0.265% p13(it0 s13)=0.264% p101(it6 s5)=0.264% p22(it1 s6)=0.264% p29(it1 s13)=0.264% p45(it2 s13)=0.264% p70(it4 s6)=0.264% p54(it3 s6)=0.264% p117(it7 s5)=0.264% p102(it6 s6)=0.264% p86(it5 s6)=0.264% p109(it6 s13)=0.264% p69(it4 s5)=0.264% p125(it7 s13)=0.263% p93(it5 s13)=0.263% p118(it7 s6)=0.263% p37(it2 s5)=0.262% p5(it0 s5)=0.262%
[2026-10-07T19:05:02Z] attribution: hot reads by iteration it0=0.157% it1=0.157% it2=0.157% it3=0.157% it4=0.157% it5=0.157% it6=0.157% it7=0.157% ; by site s0=0.132% s1=0.132% s2=0.132% s3=0.132% s4=0.132% s5=0.264% s6=0.264% s7=0.132% s8=0.132% s9=0.132% s10=0.133% s11=0.132% s12=0.132% s13=0.264% s14=0.133% s15=0.132%
[2026-10-07T19:05:02Z] site 0 (instr 1, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1323% (flat expectation 0.1044%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:05:02Z] site 1 (instr 7, src r6, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.1324% (flat expectation 0.1044%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:05:02Z] site 2 (instr 11, src r3, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.1318% (flat expectation 0.1044%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:05:02Z] site 3 (instr 14, src r5, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.1317% (flat expectation 0.1044%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:05:02Z] site 4 (instr 26, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1318% (flat expectation 0.1044%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:05:02Z] site 5 (instr 27, src r5, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.2639% (flat expectation 0.1044%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0065% (window expectation 0.0061%)
[2026-10-07T19:05:02Z] site 6 (instr 32, src r7, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.2640% (flat expectation 0.1044%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0063% (window expectation 0.0061%)
[2026-10-07T19:05:02Z] site 7 (instr 34, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1325% (flat expectation 0.1044%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:05:02Z] site 8 (instr 35, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1322% (flat expectation 0.1044%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:05:02Z] site 9 (instr 45, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.1318% (flat expectation 0.1044%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:05:02Z] site 10 (instr 46, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.1329% (flat expectation 0.1044%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:05:02Z] site 11 (instr 51, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1318% (flat expectation 0.1044%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:05:02Z] site 12 (instr 52, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1317% (flat expectation 0.1044%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:05:02Z] site 13 (instr 53, src r1, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.2644% (flat expectation 0.1044%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0063% (window expectation 0.0061%)
[2026-10-07T19:05:02Z] site 14 (instr 60, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1330% (flat expectation 0.1044%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:05:02Z] site 15 (instr 61, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.1321% (flat expectation 0.1044%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:05:02Z] attribution: item 0x610fe1 (218 reads) read from positions p21(it1 s5)x10 p53(it3 s5)x10 p117(it7 s5)x7 p5(it0 s5)x6 p37(it2 s5)x6 p70(it4 s6)x6 p85(it5 s5)x6 p86(it5 s6)x6 p102(it6 s6)x6 p127(it7 s15)x5 p6(it0 s6)x5 p15(it0 s15)x5
[2026-10-07T19:05:02Z] attribution: item 0x7ca442 (217 reads) read from positions p86(it5 s6)x9 p121(it7 s9)x8 p21(it1 s5)x7 p22(it1 s6)x7 p102(it6 s6)x7 p54(it3 s6)x6 p73(it4 s9)x6 p95(it5 s15)x6 p101(it6 s5)x6 p5(it0 s5)x5 p53(it3 s5)x5 p110(it6 s14)x5
[2026-10-07T19:05:02Z] attribution: item 0xf3c05f (216 reads) read from positions p45(it2 s13)x11 p99(it6 s3)x8 p29(it1 s13)x8 p93(it5 s13)x8 p1(it0 s1)x6 p26(it1 s10)x6 p33(it2 s1)x6 p42(it2 s10)x6 p109(it6 s13)x6 p115(it7 s3)x6 p122(it7 s10)x6 p77(it4 s13)x5
[2026-10-07T19:05:02Z] attribution: item 0xda9abe (216 reads) read from positions p29(it1 s13)x8 p45(it2 s13)x8 p61(it3 s13)x8 p18(it1 s2)x7 p106(it6 s10)x7 p125(it7 s13)x5 p13(it0 s13)x5 p16(it1 s0)x5 p26(it1 s10)x5 p82(it5 s2)x5 p93(it5 s13)x5 p109(it6 s13)x5
[2026-10-07T19:05:02Z] attribution: item 0xfeeaf4 (215 reads) read from positions p13(it0 s13)x10 p93(it5 s13)x10 p51(it3 s3)x8 p77(it4 s13)x6 p114(it7 s2)x6 p115(it7 s3)x6 p2(it0 s2)x5 p61(it3 s13)x5 p74(it4 s10)x5 p98(it6 s2)x5 p45(it2 s13)x4 p72(it4 s8)x4
[2026-10-07T19:05:02Z] attribution: item 0xeeec40 (215 reads) read from positions p29(it1 s13)x10 p45(it2 s13)x10 p18(it1 s2)x8 p125(it7 s13)x7 p13(it0 s13)x7 p99(it6 s3)x7 p61(it3 s13)x6 p10(it0 s10)x5 p28(it1 s12)x5 p67(it4 s3)x5 p77(it4 s13)x5 p93(it5 s13)x5
[2026-10-07T19:05:02Z] attribution: item 0x796f55 (215 reads) read from positions p54(it3 s6)x10 p85(it5 s5)x10 p6(it0 s6)x9 p86(it5 s6)x8 p70(it4 s6)x7 p117(it7 s5)x7 p5(it0 s5)x6 p101(it6 s5)x6 p102(it6 s6)x6 p22(it1 s6)x5 p69(it4 s5)x5 p105(it6 s9)x5
[2026-10-07T19:05:02Z] attribution: item 0xfc94f0 (214 reads) read from positions p45(it2 s13)x11 p35(it2 s3)x9 p125(it7 s13)x5 p10(it0 s10)x5 p13(it0 s13)x5 p50(it3 s2)x5 p58(it3 s10)x5 p61(it3 s13)x5 p77(it4 s13)x5 p0(it0 s0)x5 p109(it6 s13)x5 p20(it1 s4)x4
[2026-10-07T19:05:02Z] hottest item p105756-attack-f8 (0x610fe1): 218 reads (0.0000% of all); predicted source none
[2026-10-07T19:05:02Z] program p105756-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:05:03Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "6610", "--nonces", "16777216", "--threads", "48", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T19:05:03Z] census warps: programs [6610] day 20730 nonces 16777216 threads 48 plant none validate sample check_every 997 diag true
[2026-10-07T19:05:03Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T19:05:09Z] table: 16777216 items derived with their 8 lines in 5.0 s; library comparison sample (0 mismatches)
[2026-10-07T19:05:13Z] program p6610-attack-f8: epoch seed 7a3bb19c88da17cd705061caceaecca9cda1dba382595219718d021a8af98a53 era seed 10cc16c41bdee789adaff05b8605536137129c44c1b49130615066fb155c4825 id d07fa590199cc1e5 attempt 1 class mx8-erad05402ec+sh256x27 op mix load=16 mad=8 xor=8 mul=7 add=6 sub=6 or=4 rotl=3 shfl=3 mulhi=2 rotr=1; era stride mul 0xebd75d29 rot 6 interleave [0, 9, 10, 11] windows 3:1:1 4:0:0 5:0:0 8:1:0 24:1:1 25:2:0 29:1:0 31:0:0 34:0:0 37:0:0 39:0:0 42:2:2 43:1:1 48:0:0 51:0:0 52:2:0
[2026-10-07T19:05:13Z] load site instr 3: src r4 win 1 off 1; last base writer sub at 2; writers back to the last injecting one: sub@2; shadow writes of r4 per rep: add=4 mad=4 mul=2 mulhi=2 or=1 rotl=1 rotr=2 shfl=4 sub=4 xor=4
[2026-10-07T19:05:13Z] load site instr 4: src r6 win 0 off 0; last base writer shfl at 1; writers back to the last injecting one: shfl@1; shadow writes of r6 per rep: add=4 mad=2 mul=5 mulhi=2 rotl=4 rotr=5 shfl=4 sub=2 xor=6
[2026-10-07T19:05:13Z] load site instr 5: src r0 win 0 off 0; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r0 per rep: add=2 mad=2 mul=4 mulhi=3 or=3 rotl=8 rotr=1 shfl=1 sub=3 xor=7
[2026-10-07T19:05:13Z] load site instr 8: src r6 win 1 off 0; last base writer xor at 7; writers back to the last injecting one: xor@7; shadow writes of r6 per rep: add=4 mad=2 mul=5 mulhi=2 rotl=4 rotr=5 shfl=4 sub=2 xor=6
[2026-10-07T19:05:13Z] load site instr 24: src r4 win 1 off 1; last base writer load at 8; writers back to the last injecting one: load@8; shadow writes of r4 per rep: add=4 mad=4 mul=2 mulhi=2 or=1 rotl=1 rotr=2 shfl=4 sub=4 xor=4
[2026-10-07T19:05:13Z] load site instr 25: src r2 win 2 off 0; last base writer add at 23; writers back to the last injecting one: add@23; shadow writes of r2 per rep: add=2 mad=2 mul=3 mulhi=4 or=1 rotl=5 rotr=1 shfl=3 sub=2 xor=3
[2026-10-07T19:05:13Z] load site instr 29: src r0 win 1 off 0; last base writer mad at 27; writers back to the last injecting one: mad@27; shadow writes of r0 per rep: add=2 mad=2 mul=4 mulhi=3 or=3 rotl=8 rotr=1 shfl=1 sub=3 xor=7
[2026-10-07T19:05:13Z] load site instr 31: src r4 win 0 off 0; last base writer load at 25; writers back to the last injecting one: load@25; shadow writes of r4 per rep: add=4 mad=4 mul=2 mulhi=2 or=1 rotl=1 rotr=2 shfl=4 sub=4 xor=4
[2026-10-07T19:05:13Z] load site instr 34: src r7 win 0 off 0; last base writer load at 31; writers back to the last injecting one: load@31; shadow writes of r7 per rep: add=9 mad=10 mul=3 mulhi=1 or=1 rotl=3 shfl=2 sub=2 xor=9
[2026-10-07T19:05:13Z] load site instr 37: src r0 win 0 off 0; last base writer xor at 36; writers back to the last injecting one: xor@36; shadow writes of r0 per rep: add=2 mad=2 mul=4 mulhi=3 or=3 rotl=8 rotr=1 shfl=1 sub=3 xor=7
[2026-10-07T19:05:13Z] load site instr 39: src r4 win 0 off 0; last base writer add at 38; writers back to the last injecting one: add@38; shadow writes of r4 per rep: add=4 mad=4 mul=2 mulhi=2 or=1 rotl=1 rotr=2 shfl=4 sub=4 xor=4
[2026-10-07T19:05:13Z] load site instr 42: src r6 win 2 off 2; last base writer load at 37; writers back to the last injecting one: load@37; shadow writes of r6 per rep: add=4 mad=2 mul=5 mulhi=2 rotl=4 rotr=5 shfl=4 sub=2 xor=6
[2026-10-07T19:05:13Z] load site instr 43: src r2 win 1 off 1; last base writer load at 42; writers back to the last injecting one: load@42; shadow writes of r2 per rep: add=2 mad=2 mul=3 mulhi=4 or=1 rotl=5 rotr=1 shfl=3 sub=2 xor=3
[2026-10-07T19:05:13Z] load site instr 48: src r4 win 0 off 0; last base writer load at 43; writers back to the last injecting one: load@43; shadow writes of r4 per rep: add=4 mad=4 mul=2 mulhi=2 or=1 rotl=1 rotr=2 shfl=4 sub=4 xor=4
[2026-10-07T19:05:13Z] load site instr 51: src r1 win 0 off 0; last base writer load at 39; writers back to the last injecting one: load@39; shadow writes of r1 per rep: add=6 mad=2 mul=3 mulhi=3 or=4 rotl=3 rotr=5 shfl=4 xor=3
[2026-10-07T19:05:13Z] load site instr 52: src r0 win 2 off 0; last base writer load at 48; writers back to the last injecting one: load@48; shadow writes of r0 per rep: add=2 mad=2 mul=4 mulhi=3 or=3 rotl=8 rotr=1 shfl=1 sub=3 xor=7
[2026-10-07T19:05:13Z] window layer: site item windows (first, items) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x800000,2^22) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^22); expected reads per item by quarter 160.000 96.000 144.000 112.000 (flat uniform 128.000)
[2026-10-07T19:08:15Z] 524288 warps (16777216 nonces) interpreted in 182.5 s (16.705 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:08:15Z] p6610-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8711
[2026-10-07T19:08:15Z] p6610-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:08:15Z] p6610-attack-f8 distinct lines per warp: n 524288 min 32572 p1 32605 median 32637 p99 32664 max 32687 mean 32636.1965
[2026-10-07T19:08:15Z] p6610-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4806
[2026-10-07T19:08:15Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:08:15Z] positions: largest hi16-bucket (256 items) share 0.0070% at p15 (iteration 0, site 15, instr 52); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p14 (site 14, instr 51)
[2026-10-07T19:08:15Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p10 (site 10, instr 39); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:08:15Z] p6610-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 247 (bin 2359313) z_max +10.52 min 48 z_min -7.07 chi2/dof 6.31179 chi2_z +15384.58 top0.1% 0.16491% top0.5% 0.78640% top1% 1.53387%
[2026-10-07T19:08:16Z] p6610-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.33009 largest 170 (item 0x76c80a) at +7.55 sigma smallest at -4.98; buckets64 chi2/dof 5.84995 largest 7157 (bucket 122880) at +12.92 sigma smallest at -7.16
[2026-10-07T19:08:23Z] p6610-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 229 (bin 1395492) z_max +8.93 min 50 z_min -6.89 chi2/dof 6.00088 chi2_z +14484.10 top0.1% 0.15529% top0.5% 0.74796% top1% 1.46831%
[2026-10-07T19:08:23Z] p6610-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99965 largest +6.08 sigma; buckets64 chi2/dof 0.99930 largest +4.58 smallest -4.42
[2026-10-07T19:08:23Z] 6-sigma p6610-attack-f8 items buckets64 against the window density: largest bucket +12.92 sigma, smallest -7.16 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:08:23Z] hot-set p6610-attack-f8 items (windowed control): f 0.1% S_f 0.16491% E_f(control) 0.15529% X_f +0.00963% X_f/f +0.0963 -> no hot set
[2026-10-07T19:08:23Z] hot-set p6610-attack-f8 items (windowed control): f 0.5% S_f 0.78640% E_f(control) 0.74796% X_f +0.03843% X_f/f +0.0769 -> no hot set
[2026-10-07T19:08:23Z] hot-set p6610-attack-f8 items (windowed control): f 1.0% S_f 1.53387% E_f(control) 1.46831% X_f +0.06556% X_f/f +0.0656 -> no hot set
[2026-10-07T19:08:23Z] hot-set p6610-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:08:30Z] p6610-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 192 (bin 2553844) z_max +5.66 min 71 z_min -5.04 chi2/dof 1.00043 chi2_z +1.24 top0.1% 0.13109% top0.5% 0.63254% top1% 1.24343%
[2026-10-07T19:08:30Z] hot-set p6610-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16491% E_f(control) 0.13109% X_f +0.03383% X_f/f +0.3383 -> no hot set
[2026-10-07T19:08:30Z] hot-set p6610-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78640% E_f(control) 0.63254% X_f +0.15386% X_f/f +0.3077 -> no hot set
[2026-10-07T19:08:30Z] hot-set p6610-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.53387% E_f(control) 1.24343% X_f +0.29044% X_f/f +0.2904 -> no hot set
[2026-10-07T19:08:30Z] hot-set p6610-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:08:30Z] ratio p6610-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0620x / 1.0514x / 1.0447x (gate 1.2x at 0.1%: within); over the FLAT control 1.2581x / 1.2432x / 1.2336x
[2026-10-07T19:08:32Z] attribution: hot threshold count >= 206 marks 17092 items (0.1019% of items) holding 3606393 reads (0.1679% of reads); top 8 items t=0x240011:247 t=0x26d018:244 t=0x1aaf10:243 t=0x312d1a:242 t=0x210310:241 t=0x1aca06:241 t=0x3ea312:240 t=0x38260b:239
[2026-10-07T19:09:39Z] attribution: reads on hot items per position (flat expectation 0.1019% of each position's 16777216 reads); the 24 largest: p22(it1 s6)=0.594% p38(it2 s6)=0.592% p54(it3 s6)=0.592% p118(it7 s6)=0.592% p6(it0 s6)=0.591% p102(it6 s6)=0.589% p86(it5 s6)=0.589% p70(it4 s6)=0.586% p101(it6 s5)=0.483% p37(it2 s5)=0.481% p21(it1 s5)=0.480% p127(it7 s15)=0.480% p5(it0 s5)=0.480% p47(it2 s15)=0.480% p79(it4 s15)=0.479% p53(it3 s5)=0.479% p69(it4 s5)=0.479% p85(it5 s5)=0.479% p15(it0 s15)=0.479% p117(it7 s5)=0.478% p111(it6 s15)=0.478% p95(it5 s15)=0.477% p63(it3 s15)=0.477% p31(it1 s15)=0.476%
[2026-10-07T19:09:39Z] attribution: hot reads by iteration it0=0.168% it1=0.168% it2=0.168% it3=0.168% it4=0.168% it5=0.168% it6=0.168% it7=0.168% ; by site s0=0.000% s1=0.120% s2=0.120% s3=0.240% s4=0.000% s5=0.480% s6=0.590% s7=0.119% s8=0.120% s9=0.081% s10=0.098% s11=0.000% s12=0.000% s13=0.120% s14=0.119% s15=0.478%
[2026-10-07T19:09:39Z] site 0 (instr 3, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0001% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:09:39Z] site 1 (instr 4, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1197% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 2 (instr 5, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1201% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 3 (instr 8, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2399% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:09:39Z] site 4 (instr 24, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0001% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:09:39Z] site 5 (instr 25, src r2, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4798% (flat expectation 0.1019%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:09:39Z] site 6 (instr 29, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.5905% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0035% (window expectation 0.0031%)
[2026-10-07T19:09:39Z] site 7 (instr 31, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1190% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 8 (instr 34, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1197% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 9 (instr 37, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.0814% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 10 (instr 39, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.0984% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 11 (instr 42, src r6, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0003% (flat expectation 0.1019%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0063% (window expectation 0.0061%)
[2026-10-07T19:09:39Z] site 12 (instr 43, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0001% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:09:39Z] site 13 (instr 48, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1203% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 14 (instr 51, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1194% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:09:39Z] site 15 (instr 52, src r0, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4779% (flat expectation 0.1019%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:09:39Z] attribution: item 0x240011 (247 reads) read from positions p70(it4 s6)x11 p102(it6 s6)x11 p6(it0 s6)x10 p22(it1 s6)x10 p111(it6 s15)x9 p54(it3 s6)x8 p53(it3 s5)x7 p69(it4 s5)x7 p83(it5 s3)x7 p86(it5 s6)x7 p118(it7 s6)x7 p5(it0 s5)x6
[2026-10-07T19:09:39Z] attribution: item 0x26d018 (244 reads) read from positions p102(it6 s6)x11 p6(it0 s6)x10 p22(it1 s6)x10 p38(it2 s6)x10 p47(it2 s15)x10 p85(it5 s5)x9 p51(it3 s3)x7 p70(it4 s6)x7 p79(it4 s15)x7 p95(it5 s15)x7 p111(it6 s15)x6 p127(it7 s15)x5
[2026-10-07T19:09:39Z] attribution: item 0x1aaf10 (243 reads) read from positions p15(it0 s15)x11 p53(it3 s5)x10 p6(it0 s6)x9 p95(it5 s15)x9 p69(it4 s5)x8 p21(it1 s5)x7 p31(it1 s15)x7 p63(it3 s15)x7 p85(it5 s5)x7 p117(it7 s5)x7 p118(it7 s6)x7 p79(it4 s15)x6
[2026-10-07T19:09:39Z] attribution: item 0x312d1a (242 reads) read from positions p86(it5 s6)x12 p15(it0 s15)x10 p70(it4 s6)x10 p37(it2 s5)x9 p85(it5 s5)x9 p6(it0 s6)x7 p118(it7 s6)x7 p19(it1 s3)x6 p53(it3 s5)x6 p111(it6 s15)x6 p5(it0 s5)x5 p33(it2 s1)x5
[2026-10-07T19:09:39Z] attribution: item 0x210310 (241 reads) read from positions p54(it3 s6)x15 p53(it3 s5)x11 p6(it0 s6)x10 p102(it6 s6)x9 p22(it1 s6)x9 p118(it7 s6)x8 p31(it1 s15)x8 p47(it2 s15)x8 p86(it5 s6)x8 p5(it0 s5)x7 p117(it7 s5)x7 p81(it5 s1)x6
[2026-10-07T19:09:39Z] attribution: item 0x1aca06 (241 reads) read from positions p70(it4 s6)x10 p6(it0 s6)x9 p54(it3 s6)x9 p86(it5 s6)x9 p95(it5 s15)x9 p118(it7 s6)x8 p63(it3 s15)x8 p101(it6 s5)x8 p117(it7 s5)x8 p31(it1 s15)x7 p47(it2 s15)x7 p15(it0 s15)x6
[2026-10-07T19:09:39Z] attribution: item 0x3ea312 (240 reads) read from positions p53(it3 s5)x10 p63(it3 s15)x10 p101(it6 s5)x10 p102(it6 s6)x10 p127(it7 s15)x10 p118(it7 s6)x10 p117(it7 s5)x9 p47(it2 s15)x8 p54(it3 s6)x8 p5(it0 s5)x7 p21(it1 s5)x6 p22(it1 s6)x6
[2026-10-07T19:09:39Z] attribution: item 0x38260b (239 reads) read from positions p22(it1 s6)x10 p101(it6 s5)x9 p102(it6 s6)x9 p38(it2 s6)x8 p54(it3 s6)x8 p5(it0 s5)x8 p86(it5 s6)x8 p118(it7 s6)x7 p95(it5 s15)x7 p70(it4 s6)x6 p47(it2 s15)x6 p53(it3 s5)x6
[2026-10-07T19:09:39Z] hottest item p6610-attack-f8 (0x240011): 247 reads (0.0000% of all); predicted source none
[2026-10-07T19:09:39Z] program p6610-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:09:40Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "106474", "--nonces", "16777216", "--threads", "48", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T19:09:40Z] census warps: programs [106474] day 20730 nonces 16777216 threads 48 plant none validate sample check_every 997 diag true
[2026-10-07T19:09:40Z] day 20730: cache filled in 0.67 s, fnv 448274a57f508cbc
[2026-10-07T19:09:46Z] table: 16777216 items derived with their 8 lines in 5.7 s; library comparison sample (0 mismatches)
[2026-10-07T19:09:51Z] program p106474-attack-f8: epoch seed bfe35b22f4290aa7482710af699ef836e3fe18bc1bc0f53b8f1ac6ac694dc2d1 era seed 1dcc3dc64fb6ba82ca9eb2621c34384adfddb9cc2dede35bb42e6c7fd5337fb9 id 3489b57fc090a554 attempt 2 class mx8-era751822ed+sh256x27 op mix load=16 add=9 xor=7 mad=6 mul=5 rotl=5 mulhi=4 rotr=4 shfl=4 or=2 sub=2; era stride mul 0xcd10789b rot 26 interleave [1, 13, 14, 15] windows 4:1:1 6:1:1 9:2:0 12:0:0 13:2:3 17:2:1 19:0:0 23:1:0 26:0:0 39:2:1 40:2:0 43:1:1 46:1:0 50:2:3 53:1:1 56:1:0
[2026-10-07T19:09:51Z] load site instr 4: src r5 win 1 off 1; last base writer rotl at 0; writers back to the last injecting one: rotl@0 rotr@55 mul@41 load@40; shadow writes of r5 per rep: add=5 mad=6 mul=2 mulhi=2 or=3 rotl=4 rotr=2 shfl=7 sub=4 xor=4
[2026-10-07T19:09:51Z] load site instr 6: src r2 win 1 off 1; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r2 per rep: add=8 mad=1 mul=3 mulhi=2 or=2 rotl=6 rotr=2 shfl=8 sub=4 xor=7
[2026-10-07T19:09:51Z] load site instr 9: src r4 win 2 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r4 per rep: add=5 mad=2 mul=4 mulhi=2 or=3 rotl=1 shfl=7 xor=7
[2026-10-07T19:09:51Z] load site instr 12: src r2 win 0 off 0; last base writer add at 11; writers back to the last injecting one: add@11; shadow writes of r2 per rep: add=8 mad=1 mul=3 mulhi=2 or=2 rotl=6 rotr=2 shfl=8 sub=4 xor=7
[2026-10-07T19:09:51Z] load site instr 13: src r5 win 2 off 3; last base writer load at 12; writers back to the last injecting one: load@12; shadow writes of r5 per rep: add=5 mad=6 mul=2 mulhi=2 or=3 rotl=4 rotr=2 shfl=7 sub=4 xor=4
[2026-10-07T19:09:51Z] load site instr 17: src r0 win 2 off 1; last base writer load at 13; writers back to the last injecting one: load@13; shadow writes of r0 per rep: add=8 mad=2 mul=4 mulhi=6 rotl=1 rotr=1 shfl=4 sub=1 xor=5
[2026-10-07T19:09:51Z] load site instr 19: src r6 win 0 off 0; last base writer shfl at 16; writers back to the last injecting one: shfl@16; shadow writes of r6 per rep: add=5 mad=2 mul=1 or=1 rotl=4 rotr=1 shfl=4 sub=3 xor=2
[2026-10-07T19:09:51Z] load site instr 23: src r4 win 1 off 0; last base writer add at 18; writers back to the last injecting one: add@18; shadow writes of r4 per rep: add=5 mad=2 mul=4 mulhi=2 or=3 rotl=1 shfl=7 xor=7
[2026-10-07T19:09:51Z] load site instr 26: src r1 win 0 off 0; last base writer sub at 24; writers back to the last injecting one: sub@24; shadow writes of r1 per rep: add=4 mad=2 mulhi=4 or=2 rotl=2 rotr=1 shfl=2 sub=5 xor=2
[2026-10-07T19:09:51Z] load site instr 39: src r5 win 2 off 1; last base writer rotr at 36; writers back to the last injecting one: rotr@36 load@23; shadow writes of r5 per rep: add=5 mad=6 mul=2 mulhi=2 or=3 rotl=4 rotr=2 shfl=7 sub=4 xor=4
[2026-10-07T19:09:51Z] load site instr 40: src r0 win 2 off 0; last base writer add at 38; writers back to the last injecting one: add@38; shadow writes of r0 per rep: add=8 mad=2 mul=4 mulhi=6 rotl=1 rotr=1 shfl=4 sub=1 xor=5
[2026-10-07T19:09:51Z] load site instr 43: src r1 win 1 off 1; last base writer mad at 42; writers back to the last injecting one: mad@42; shadow writes of r1 per rep: add=4 mad=2 mulhi=4 or=2 rotl=2 rotr=1 shfl=2 sub=5 xor=2
[2026-10-07T19:09:51Z] load site instr 46: src r2 win 1 off 0; last base writer load at 43; writers back to the last injecting one: load@43; shadow writes of r2 per rep: add=8 mad=1 mul=3 mulhi=2 or=2 rotl=6 rotr=2 shfl=8 sub=4 xor=7
[2026-10-07T19:09:51Z] load site instr 50: src r6 win 2 off 3; last base writer rotr at 49; writers back to the last injecting one: rotr@49 mad@47; shadow writes of r6 per rep: add=5 mad=2 mul=1 or=1 rotl=4 rotr=1 shfl=4 sub=3 xor=2
[2026-10-07T19:09:51Z] load site instr 53: src r4 win 1 off 1; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r4 per rep: add=5 mad=2 mul=4 mulhi=2 or=3 rotl=1 shfl=7 xor=7
[2026-10-07T19:09:51Z] load site instr 56: src r7 win 1 off 0; last base writer shfl at 54; writers back to the last injecting one: shfl@54; shadow writes of r7 per rep: add=4 mad=8 mul=3 mulhi=6 or=3 rotl=3 shfl=4 sub=2 xor=3
[2026-10-07T19:09:51Z] window layer: site item windows (first, items) (0x800000,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^24) (0xc00000,2^22) (0x400000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x400000,2^22) (0x0,2^22) (0x800000,2^23) (0x0,2^23) (0xc00000,2^22) (0x800000,2^23) (0x0,2^23); expected reads per item by quarter 136.000 136.000 88.000 152.000 (flat uniform 128.000)
[2026-10-07T19:12:33Z] 524288 warps (16777216 nonces) interpreted in 162.2 s (14.852 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:12:33Z] p106474-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8713
[2026-10-07T19:12:33Z] p106474-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:12:33Z] p106474-attack-f8 distinct lines per warp: n 524288 min 32568 p1 32605 median 32637 p99 32664 max 32688 mean 32636.2200
[2026-10-07T19:12:33Z] p106474-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4826
[2026-10-07T19:12:33Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:12:33Z] positions: largest hi16-bucket (256 items) share 0.0070% at p36 (iteration 2, site 4, instr 13); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p52 (site 4, instr 13)
[2026-10-07T19:12:33Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p5 (site 5, instr 17); saturated sources at one position 0 of 2048 at p0 (site 0, instr 4); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:12:33Z] p106474-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 216 (bin 12880909) z_max +7.78 min 43 z_min -7.51 chi2/dof 5.50169 chi2_z +13038.28 top0.1% 0.14828% top0.5% 0.71379% top1% 1.40086%
[2026-10-07T19:12:33Z] p106474-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00017 largest 204 (item 0x2a0f94) at +5.83 sigma smallest at -4.87; buckets64 chi2/dof 0.99779 largest 9105 (bucket 88844) at +4.30 sigma smallest at -4.80
[2026-10-07T19:12:40Z] p106474-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 232 (bin 16678178) z_max +9.19 min 42 z_min -7.60 chi2/dof 5.49868 chi2_z +13029.57 top0.1% 0.14834% top0.5% 0.71384% top1% 1.40090%
[2026-10-07T19:12:40Z] p106474-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99979 largest +6.49 sigma; buckets64 chi2/dof 0.99687 largest +4.82 smallest -4.64
[2026-10-07T19:12:40Z] 6-sigma p106474-attack-f8 items buckets64 against the window density: largest bucket +4.30 sigma, smallest -4.80 -> within 6 sigma
[2026-10-07T19:12:40Z] hot-set p106474-attack-f8 items (windowed control): f 0.1% S_f 0.14828% E_f(control) 0.14834% X_f -0.00006% X_f/f -0.0006 -> no hot set
[2026-10-07T19:12:40Z] hot-set p106474-attack-f8 items (windowed control): f 0.5% S_f 0.71379% E_f(control) 0.71384% X_f -0.00005% X_f/f -0.0001 -> no hot set
[2026-10-07T19:12:40Z] hot-set p106474-attack-f8 items (windowed control): f 1.0% S_f 1.40086% E_f(control) 1.40090% X_f -0.00003% X_f/f -0.0000 -> no hot set
[2026-10-07T19:12:40Z] hot-set p106474-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:12:45Z] p106474-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 15008693) z_max +5.83 min 72 z_min -4.95 chi2/dof 0.99985 chi2_z -0.43 top0.1% 0.13111% top0.5% 0.63264% top1% 1.24359%
[2026-10-07T19:12:45Z] hot-set p106474-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.14828% E_f(control) 0.13111% X_f +0.01717% X_f/f +0.1717 -> no hot set
[2026-10-07T19:12:45Z] hot-set p106474-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.71379% E_f(control) 0.63264% X_f +0.08116% X_f/f +0.1623 -> no hot set
[2026-10-07T19:12:45Z] hot-set p106474-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.40086% E_f(control) 1.24359% X_f +0.15727% X_f/f +0.1573 -> no hot set
[2026-10-07T19:12:45Z] hot-set p106474-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:12:45Z] ratio p106474-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 0.9996x / 0.9999x / 1.0000x (gate 1.2x at 0.1%: within); over the FLAT control 1.1309x / 1.1283x / 1.1265x
[2026-10-07T19:12:47Z] attribution: hot threshold count >= 186 marks 17580 items (0.1048% of items) holding 3333679 reads (0.1552% of reads); top 8 items t=0xc48c0d:216 t=0xcab0cf:215 t=0xf91a3a:214 t=0xe80539:214 t=0xfd31ca:213 t=0xf36545:213 t=0xf5a5c7:212 t=0xd8ae89:212
[2026-10-07T19:13:46Z] attribution: reads on hot items per position (flat expectation 0.1048% of each position's 16777216 reads); the 24 largest: p84(it5 s4)=0.519% p36(it2 s4)=0.519% p45(it2 s13)=0.519% p68(it4 s4)=0.518% p93(it5 s13)=0.517% p77(it4 s13)=0.517% p13(it0 s13)=0.517% p20(it1 s4)=0.517% p125(it7 s13)=0.516% p29(it1 s13)=0.516% p116(it7 s4)=0.516% p52(it3 s4)=0.515% p109(it6 s13)=0.515% p4(it0 s4)=0.515% p100(it6 s4)=0.515% p61(it3 s13)=0.514% p112(it7 s0)=0.260% p81(it5 s1)=0.260% p91(it5 s11)=0.259% p16(it1 s0)=0.259% p33(it2 s1)=0.259% p27(it1 s11)=0.259% p0(it0 s0)=0.259% p97(it6 s1)=0.259%
[2026-10-07T19:13:46Z] attribution: hot reads by iteration it0=0.155% it1=0.155% it2=0.156% it3=0.155% it4=0.155% it5=0.156% it6=0.155% it7=0.155% ; by site s0=0.258% s1=0.258% s2=0.004% s3=0.131% s4=0.517% s5=0.004% s6=0.132% s7=0.004% s8=0.131% s9=0.003% s10=0.004% s11=0.258% s12=0.004% s13=0.516% s14=0.258% s15=0.004%
[2026-10-07T19:13:46Z] site 0 (instr 4, src r5, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2582% (flat expectation 0.1048%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:13:46Z] site 1 (instr 6, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2583% (flat expectation 0.1048%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:13:46Z] site 2 (instr 9, src r4, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0037% (flat expectation 0.1048%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:13:46Z] site 3 (instr 12, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1307% (flat expectation 0.1048%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:13:46Z] site 4 (instr 13, src r5, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.5167% (flat expectation 0.1048%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:13:46Z] site 5 (instr 17, src r0, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0035% (flat expectation 0.1048%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:13:46Z] site 6 (instr 19, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1315% (flat expectation 0.1048%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:13:46Z] site 7 (instr 23, src r4, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0035% (flat expectation 0.1048%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:13:46Z] site 8 (instr 26, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1309% (flat expectation 0.1048%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:13:46Z] site 9 (instr 39, src r5, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0034% (flat expectation 0.1048%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:13:46Z] site 10 (instr 40, src r0, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0035% (flat expectation 0.1048%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:13:46Z] site 11 (instr 43, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2582% (flat expectation 0.1048%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:13:46Z] site 12 (instr 46, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0035% (flat expectation 0.1048%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:13:46Z] site 13 (instr 50, src r6, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.5165% (flat expectation 0.1048%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:13:46Z] site 14 (instr 53, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2581% (flat expectation 0.1048%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:13:46Z] site 15 (instr 56, src r7, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0035% (flat expectation 0.1048%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:13:46Z] attribution: item 0xc48c0d (216 reads) read from positions p52(it3 s4)x11 p29(it1 s13)x10 p75(it4 s11)x10 p93(it5 s13)x9 p116(it7 s4)x9 p36(it2 s4)x8 p77(it4 s13)x8 p112(it7 s0)x6 p32(it2 s0)x5 p38(it2 s6)x5 p45(it2 s13)x5 p62(it3 s14)x5
[2026-10-07T19:13:46Z] attribution: item 0xcab0cf (215 reads) read from positions p100(it6 s4)x11 p29(it1 s13)x10 p36(it2 s4)x8 p84(it5 s4)x8 p1(it0 s1)x7 p125(it7 s13)x7 p77(it4 s13)x6 p116(it7 s4)x6 p13(it0 s13)x5 p16(it1 s0)x5 p45(it2 s13)x5 p0(it0 s0)x5
[2026-10-07T19:13:46Z] attribution: item 0xf91a3a (214 reads) read from positions p52(it3 s4)x10 p109(it6 s13)x10 p29(it1 s13)x7 p36(it2 s4)x7 p13(it0 s13)x6 p33(it2 s1)x6 p45(it2 s13)x6 p46(it2 s14)x6 p116(it7 s4)x6 p125(it7 s13)x5 p20(it1 s4)x5 p32(it2 s0)x5
[2026-10-07T19:13:46Z] attribution: item 0xe80539 (214 reads) read from positions p20(it1 s4)x14 p100(it6 s4)x9 p4(it0 s4)x7 p13(it0 s13)x7 p84(it5 s4)x7 p93(it5 s13)x7 p125(it7 s13)x5 p11(it0 s11)x5 p52(it3 s4)x5 p61(it3 s13)x5 p65(it4 s1)x5 p70(it4 s6)x5
[2026-10-07T19:13:46Z] attribution: item 0xfd31ca (213 reads) read from positions p93(it5 s13)x10 p125(it7 s13)x9 p61(it3 s13)x9 p20(it1 s4)x8 p45(it2 s13)x8 p52(it3 s4)x8 p68(it4 s4)x8 p109(it6 s13)x7 p77(it4 s13)x6 p13(it0 s13)x6 p100(it6 s4)x6 p36(it2 s4)x5
[2026-10-07T19:13:46Z] attribution: item 0xf36545 (213 reads) read from positions p125(it7 s13)x8 p116(it7 s4)x8 p4(it0 s4)x7 p109(it6 s13)x7 p110(it6 s14)x7 p45(it2 s13)x6 p0(it0 s0)x6 p77(it4 s13)x6 p93(it5 s13)x6 p68(it4 s4)x5 p126(it7 s14)x5 p20(it1 s4)x5
[2026-10-07T19:13:46Z] attribution: item 0xf5a5c7 (212 reads) read from positions p116(it7 s4)x10 p52(it3 s4)x8 p68(it4 s4)x7 p77(it4 s13)x7 p20(it1 s4)x6 p45(it2 s13)x6 p61(it3 s13)x6 p1(it0 s1)x6 p100(it6 s4)x6 p109(it6 s13)x6 p93(it5 s13)x5 p14(it0 s14)x5
[2026-10-07T19:13:46Z] attribution: item 0xd8ae89 (212 reads) read from positions p116(it7 s4)x9 p13(it0 s13)x7 p29(it1 s13)x7 p49(it3 s1)x7 p59(it3 s11)x7 p84(it5 s4)x7 p91(it5 s11)x7 p93(it5 s13)x7 p109(it6 s13)x7 p107(it6 s11)x6 p125(it7 s13)x5 p36(it2 s4)x5
[2026-10-07T19:13:46Z] hottest item p106474-attack-f8 (0xc48c0d): 216 reads (0.0000% of all); predicted source none
[2026-10-07T19:13:46Z] program p106474-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:13:46Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "4765", "--nonces", "16777216", "--threads", "48", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T19:13:46Z] census warps: programs [4765] day 20730 nonces 16777216 threads 48 plant none validate sample check_every 997 diag true
[2026-10-07T19:13:47Z] day 20730: cache filled in 0.66 s, fnv 448274a57f508cbc
[2026-10-07T19:13:52Z] table: 16777216 items derived with their 8 lines in 4.6 s; library comparison sample (0 mismatches)
[2026-10-07T19:13:56Z] program p4765-attack-f8: epoch seed da93006cf58ee51a55ac92b00c0813585675f263dc9e96a4218ca70e8842ba89 era seed 4694d47ef446e8ba556c8fe2df62e76090931782c7d7b9e70d80af55af821232 id 5fd85ef27d8a1ea7 attempt 0 class mx8-eracacdee8f+sh256x27 op mix load=16 mul=8 shfl=6 xor=6 mad=5 rotr=5 add=4 or=4 rotl=4 sub=4 mulhi=2; era stride mul 0x82f56c09 rot 4 interleave [1, 6, 10, 14] windows 7:2:0 12:1:0 15:2:3 19:1:0 20:2:1 21:1:1 24:2:2 31:1:1 32:2:0 35:0:0 38:0:0 44:2:2 45:0:0 47:1:1 53:1:1 57:0:0
[2026-10-07T19:13:56Z] load site instr 7: src r2 win 2 off 0; last base writer rotr at 5; writers back to the last injecting one: rotr@5 shfl@61; shadow writes of r2 per rep: add=1 mad=2 mul=4 mulhi=4 or=1 rotl=3 rotr=2 shfl=5 sub=2 xor=1
[2026-10-07T19:13:56Z] load site instr 12: src r1 win 1 off 0; last base writer xor at 10; writers back to the last injecting one: xor@10; shadow writes of r1 per rep: add=6 mad=8 mul=3 mulhi=2 or=4 rotl=2 rotr=6 shfl=2 sub=3 xor=3
[2026-10-07T19:13:56Z] load site instr 15: src r6 win 2 off 3; last base writer shfl at 13; writers back to the last injecting one: shfl@13; shadow writes of r6 per rep: add=1 mad=4 mul=7 mulhi=3 or=1 rotl=2 rotr=4 shfl=4 sub=2 xor=4
[2026-10-07T19:13:56Z] load site instr 19: src r2 win 1 off 0; last base writer mad at 14; writers back to the last injecting one: mad@14; shadow writes of r2 per rep: add=1 mad=2 mul=4 mulhi=4 or=1 rotl=3 rotr=2 shfl=5 sub=2 xor=1
[2026-10-07T19:13:56Z] load site instr 20: src r6 win 2 off 1; last base writer load at 19; writers back to the last injecting one: load@19; shadow writes of r6 per rep: add=1 mad=4 mul=7 mulhi=3 or=1 rotl=2 rotr=4 shfl=4 sub=2 xor=4
[2026-10-07T19:13:56Z] load site instr 21: src r3 win 1 off 1; last base writer mad at 18; writers back to the last injecting one: mad@18; shadow writes of r3 per rep: add=4 mad=7 mul=3 mulhi=2 or=2 rotl=3 rotr=2 shfl=4 sub=4 xor=2
[2026-10-07T19:13:56Z] load site instr 24: src r6 win 2 off 2; last base writer xor at 23; writers back to the last injecting one: xor@23; shadow writes of r6 per rep: add=1 mad=4 mul=7 mulhi=3 or=1 rotl=2 rotr=4 shfl=4 sub=2 xor=4
[2026-10-07T19:13:56Z] load site instr 31: src r3 win 1 off 1; last base writer rotr at 25; writers back to the last injecting one: rotr@25 mad@18; shadow writes of r3 per rep: add=4 mad=7 mul=3 mulhi=2 or=2 rotl=3 rotr=2 shfl=4 sub=4 xor=2
[2026-10-07T19:13:56Z] load site instr 32: src r7 win 2 off 0; last base writer load at 31; writers back to the last injecting one: load@31; shadow writes of r7 per rep: add=2 mad=4 mul=1 mulhi=2 or=1 rotl=8 rotr=1 shfl=6 sub=5 xor=2
[2026-10-07T19:13:56Z] load site instr 35: src r2 win 0 off 0; last base writer sub at 33; writers back to the last injecting one: sub@33; shadow writes of r2 per rep: add=1 mad=2 mul=4 mulhi=4 or=1 rotl=3 rotr=2 shfl=5 sub=2 xor=1
[2026-10-07T19:13:56Z] load site instr 38: src r1 win 0 off 0; last base writer load at 35; writers back to the last injecting one: load@35; shadow writes of r1 per rep: add=6 mad=8 mul=3 mulhi=2 or=4 rotl=2 rotr=6 shfl=2 sub=3 xor=3
[2026-10-07T19:13:56Z] load site instr 44: src r7 win 2 off 2; last base writer rotr at 41; writers back to the last injecting one: rotr@41 load@31; shadow writes of r7 per rep: add=2 mad=4 mul=1 mulhi=2 or=1 rotl=8 rotr=1 shfl=6 sub=5 xor=2
[2026-10-07T19:13:56Z] load site instr 45: src r4 win 0 off 0; last base writer add at 27; writers back to the last injecting one: add@27; shadow writes of r4 per rep: add=4 mad=3 mul=3 mulhi=1 or=4 rotl=4 shfl=5 sub=2 xor=6
[2026-10-07T19:13:56Z] load site instr 47: src r3 win 1 off 1; last base writer shfl at 39; writers back to the last injecting one: shfl@39; shadow writes of r3 per rep: add=4 mad=7 mul=3 mulhi=2 or=2 rotl=3 rotr=2 shfl=4 sub=4 xor=2
[2026-10-07T19:13:56Z] load site instr 53: src r1 win 1 off 1; last base writer shfl at 48; writers back to the last injecting one: shfl@48; shadow writes of r1 per rep: add=6 mad=8 mul=3 mulhi=2 or=4 rotl=2 rotr=6 shfl=2 sub=3 xor=3
[2026-10-07T19:13:56Z] load site instr 57: src r4 win 0 off 0; last base writer load at 47; writers back to the last injecting one: load@47; shadow writes of r4 per rep: add=4 mad=3 mul=3 mulhi=1 or=4 rotl=4 shfl=5 sub=2 xor=6
[2026-10-07T19:13:56Z] window layer: site item windows (first, items) (0x0,2^22) (0x0,2^23) (0xc00000,2^22) (0x0,2^23) (0x400000,2^22) (0x800000,2^23) (0x800000,2^22) (0x800000,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^24); expected reads per item by quarter 128.000 96.000 160.000 128.000 (flat uniform 128.000)
[2026-10-07T19:16:43Z] 524288 warps (16777216 nonces) interpreted in 167.1 s (15.303 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:16:43Z] p4765-attack-f8 distinct lines per hash: n 16777216 min 1006 p1 1022 median 1024 p99 1024 max 1024 mean 1023.8127
[2026-10-07T19:16:43Z] p4765-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9922
[2026-10-07T19:16:43Z] p4765-attack-f8 distinct lines per warp: n 524288 min 32556 p1 32601 median 32635 p99 32663 max 32685 mean 32634.3846
[2026-10-07T19:16:43Z] p4765-attack-f8 distinct items per warp: n 524288 min 4088 p1 4093 median 4095 p99 4096 max 4096 mean 4095.2484
[2026-10-07T19:16:43Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:16:43Z] positions: largest hi16-bucket (256 items) share 0.0070% at p6 (iteration 0, site 6, instr 24); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p18 (site 2, instr 15)
[2026-10-07T19:16:43Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p52 (site 4, instr 20); saturated sources at one position 0 of 2048 at p0 (site 0, instr 7); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:16:43Z] p4765-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 235 (bin 11842695) z_max +9.46 min 50 z_min -6.89 chi2/dof 5.04021 chi2_z +11701.71 top0.1% 0.15843% top0.5% 0.75939% top1% 1.48695%
[2026-10-07T19:16:44Z] p4765-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.03190 largest 235 (item 0xb4b487) at +5.93 sigma smallest at -4.98; buckets64 chi2/dof 1.06036 largest 10717 (bucket 140314) at +4.71 sigma smallest at -4.67
[2026-10-07T19:16:51Z] p4765-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 229 (bin 8591855) z_max +8.93 min 51 z_min -6.81 chi2/dof 5.00134 chi2_z +11589.13 top0.1% 0.15532% top0.5% 0.74796% top1% 1.46798%
[2026-10-07T19:16:51Z] p4765-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00047 largest +5.61 sigma; buckets64 chi2/dof 1.00291 largest +4.31 smallest -4.48
[2026-10-07T19:16:51Z] 6-sigma p4765-attack-f8 items buckets64 against the window density: largest bucket +4.71 sigma, smallest -4.67 -> within 6 sigma
[2026-10-07T19:16:51Z] hot-set p4765-attack-f8 items (windowed control): f 0.1% S_f 0.15843% E_f(control) 0.15532% X_f +0.00311% X_f/f +0.0311 -> no hot set
[2026-10-07T19:16:51Z] hot-set p4765-attack-f8 items (windowed control): f 0.5% S_f 0.75939% E_f(control) 0.74796% X_f +0.01142% X_f/f +0.0228 -> no hot set
[2026-10-07T19:16:51Z] hot-set p4765-attack-f8 items (windowed control): f 1.0% S_f 1.48695% E_f(control) 1.46798% X_f +0.01897% X_f/f +0.0190 -> no hot set
[2026-10-07T19:16:51Z] hot-set p4765-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:16:58Z] p4765-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 11783650) z_max +5.57 min 72 z_min -4.95 chi2/dof 1.00055 chi2_z +1.60 top0.1% 0.13109% top0.5% 0.63263% top1% 1.24357%
[2026-10-07T19:16:58Z] hot-set p4765-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15843% E_f(control) 0.13109% X_f +0.02734% X_f/f +0.2734 -> no hot set
[2026-10-07T19:16:58Z] hot-set p4765-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.75939% E_f(control) 0.63263% X_f +0.12676% X_f/f +0.2535 -> no hot set
[2026-10-07T19:16:58Z] hot-set p4765-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.48695% E_f(control) 1.24357% X_f +0.24339% X_f/f +0.2434 -> no hot set
[2026-10-07T19:16:58Z] hot-set p4765-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:16:58Z] ratio p4765-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0200x / 1.0153x / 1.0129x (gate 1.2x at 0.1%: within); over the FLAT control 1.2086x / 1.2004x / 1.1957x
[2026-10-07T19:17:00Z] attribution: hot threshold count >= 198 marks 18275 items (0.1089% of items) holding 3698918 reads (0.1722% of reads); top 8 items t=0xb4b487:235 t=0xae3982:233 t=0xa55e00:231 t=0xa81a83:230 t=0xa43983:230 t=0x8c1c02:230 t=0x8b361c:230 t=0x9cdae6:229
[2026-10-07T19:18:16Z] attribution: reads on hot items per position (flat expectation 0.1089% of each position's 16777216 reads); the 24 largest: p75(it4 s11)=0.660% p27(it1 s11)=0.660% p107(it6 s11)=0.658% p59(it3 s11)=0.657% p91(it5 s11)=0.657% p123(it7 s11)=0.656% p43(it2 s11)=0.656% p11(it0 s11)=0.656% p86(it5 s6)=0.527% p102(it6 s6)=0.527% p118(it7 s6)=0.526% p6(it0 s6)=0.525% p70(it4 s6)=0.524% p38(it2 s6)=0.523% p22(it1 s6)=0.522% p54(it3 s6)=0.521% p119(it7 s7)=0.265% p77(it4 s13)=0.264% p53(it3 s5)=0.264% p13(it0 s13)=0.264% p125(it7 s13)=0.263% p69(it4 s5)=0.263% p61(it3 s13)=0.263% p21(it1 s5)=0.263%
[2026-10-07T19:18:16Z] attribution: hot reads by iteration it0=0.172% it1=0.172% it2=0.172% it3=0.172% it4=0.172% it5=0.172% it6=0.172% it7=0.172% ; by site s0=0.000% s1=0.000% s2=0.000% s3=0.000% s4=0.000% s5=0.263% s6=0.524% s7=0.262% s8=0.000% s9=0.131% s10=0.132% s11=0.657% s12=0.131% s13=0.263% s14=0.262% s15=0.131%
[2026-10-07T19:18:16Z] site 0 (instr 7, src r2, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1089%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:18:16Z] site 1 (instr 12, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1089%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:18:16Z] site 2 (instr 15, src r6, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1089%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:18:16Z] site 3 (instr 19, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1089%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:18:16Z] site 4 (instr 20, src r6, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1089%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:18:16Z] site 5 (instr 21, src r3, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2630% (flat expectation 0.1089%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:18:16Z] site 6 (instr 24, src r6, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.5244% (flat expectation 0.1089%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:18:16Z] site 7 (instr 31, src r3, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2621% (flat expectation 0.1089%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:18:16Z] site 8 (instr 32, src r7, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1089%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:18:16Z] site 9 (instr 35, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1309% (flat expectation 0.1089%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:18:16Z] site 10 (instr 38, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1316% (flat expectation 0.1089%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:18:16Z] site 11 (instr 44, src r7, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.6573% (flat expectation 0.1089%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:18:16Z] site 12 (instr 45, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1314% (flat expectation 0.1089%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:18:16Z] site 13 (instr 47, src r3, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2629% (flat expectation 0.1089%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:18:16Z] site 14 (instr 53, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2616% (flat expectation 0.1089%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:18:16Z] site 15 (instr 57, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1307% (flat expectation 0.1089%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:18:16Z] attribution: item 0xb4b487 (235 reads) read from positions p22(it1 s6)x10 p6(it0 s6)x8 p42(it2 s10)x8 p54(it3 s6)x8 p102(it6 s6)x8 p107(it6 s11)x8 p75(it4 s11)x7 p11(it0 s11)x6 p27(it1 s11)x6 p70(it4 s6)x6 p91(it5 s11)x6 p123(it7 s11)x6
[2026-10-07T19:18:16Z] attribution: item 0xae3982 (233 reads) read from positions p107(it6 s11)x13 p27(it1 s11)x9 p11(it0 s11)x8 p28(it1 s12)x7 p59(it3 s11)x7 p102(it6 s6)x7 p123(it7 s11)x7 p43(it2 s11)x6 p70(it4 s6)x6 p91(it5 s11)x6 p23(it1 s7)x5 p29(it1 s13)x5
[2026-10-07T19:18:16Z] attribution: item 0xa55e00 (231 reads) read from positions p107(it6 s11)x11 p59(it3 s11)x10 p91(it5 s11)x10 p86(it5 s6)x9 p6(it0 s6)x8 p22(it1 s6)x8 p43(it2 s11)x7 p54(it3 s6)x7 p27(it1 s11)x7 p123(it7 s11)x7 p38(it2 s6)x6 p61(it3 s13)x6
[2026-10-07T19:18:16Z] attribution: item 0xa81a83 (230 reads) read from positions p102(it6 s6)x10 p27(it1 s11)x9 p38(it2 s6)x9 p43(it2 s11)x9 p75(it4 s11)x9 p107(it6 s11)x9 p70(it4 s6)x7 p6(it0 s6)x6 p54(it3 s6)x6 p123(it7 s11)x6 p22(it1 s6)x5 p59(it3 s11)x5
[2026-10-07T19:18:16Z] attribution: item 0xa43983 (230 reads) read from positions p59(it3 s11)x10 p6(it0 s6)x9 p70(it4 s6)x8 p123(it7 s11)x8 p11(it0 s11)x7 p30(it1 s14)x7 p43(it2 s11)x7 p91(it5 s11)x7 p14(it0 s14)x6 p54(it3 s6)x6 p87(it5 s7)x6 p7(it0 s7)x5
[2026-10-07T19:18:16Z] attribution: item 0x8c1c02 (230 reads) read from positions p53(it3 s5)x10 p59(it3 s11)x10 p6(it0 s6)x9 p107(it6 s11)x9 p43(it2 s11)x8 p91(it5 s11)x8 p118(it7 s6)x8 p54(it3 s6)x7 p71(it4 s7)x7 p123(it7 s11)x7 p13(it0 s13)x6 p23(it1 s7)x6
[2026-10-07T19:18:16Z] attribution: item 0x8b361c (230 reads) read from positions p86(it5 s6)x11 p59(it3 s11)x10 p123(it7 s11)x9 p75(it4 s11)x8 p6(it0 s6)x7 p107(it6 s11)x7 p22(it1 s6)x6 p27(it1 s11)x6 p79(it4 s15)x6 p30(it1 s14)x5 p38(it2 s6)x5 p53(it3 s5)x5
[2026-10-07T19:18:16Z] attribution: item 0x9cdae6 (229 reads) read from positions p38(it2 s6)x10 p75(it4 s11)x9 p91(it5 s11)x8 p22(it1 s6)x7 p23(it1 s7)x7 p43(it2 s11)x7 p86(it5 s6)x7 p102(it6 s6)x7 p123(it7 s11)x6 p11(it0 s11)x6 p27(it1 s11)x6 p21(it1 s5)x5
[2026-10-07T19:18:16Z] hottest item p4765-attack-f8 (0xb4b487): 235 reads (0.0000% of all); predicted source none
[2026-10-07T19:18:16Z] program p4765-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:18:17Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "106700", "--nonces", "16777216", "--threads", "48", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T19:18:17Z] census warps: programs [106700] day 20730 nonces 16777216 threads 48 plant none validate sample check_every 997 diag true
[2026-10-07T19:18:17Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T19:18:23Z] table: 16777216 items derived with their 8 lines in 5.0 s; library comparison sample (0 mismatches)
[2026-10-07T19:18:27Z] program p106700-attack-f8: epoch seed 9f88092770683cf759f7ce1bb6645fba3c6a2ac8f81eed867c09ebbc1ab907d3 era seed 5743a2b2364f7293a5568468b7fc0d3c8d69814f8d338763d94300a4c2424272 id 50f23e22237fb516 attempt 0 class mx8-era27f81f3d+sh256x27 op mix load=16 add=11 xor=6 mul=5 mulhi=5 rotr=5 shfl=5 mad=4 or=4 rotl=2 sub=1; era stride mul 0x8ee9c4e3 rot 20 interleave [8, 10, 11, 15] windows 6:2:2 11:2:0 13:2:2 15:0:0 26:1:1 28:0:0 31:0:0 37:0:0 42:0:0 45:1:0 46:2:2 51:2:0 52:1:0 55:2:0 61:1:1 62:1:0
[2026-10-07T19:18:27Z] load site instr 6: src r0 win 2 off 2; last base writer add at 0; writers back to the last injecting one: add@0; shadow writes of r0 per rep: add=14 mad=5 mul=5 mulhi=3 rotl=1 rotr=6 shfl=2 sub=1 xor=3
[2026-10-07T19:18:27Z] load site instr 11: src r7 win 2 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r7 per rep: add=5 mad=3 mul=6 or=1 rotl=5 shfl=4 sub=2 xor=6
[2026-10-07T19:18:27Z] load site instr 13: src r3 win 2 off 2; last base writer shfl at 9; writers back to the last injecting one: shfl@9; shadow writes of r3 per rep: add=6 mad=5 mul=2 or=3 rotl=4 rotr=4 shfl=4 sub=1 xor=3
[2026-10-07T19:18:27Z] load site instr 15: src r2 win 0 off 0; last base writer load at 11; writers back to the last injecting one: load@11; shadow writes of r2 per rep: add=4 mad=3 mul=5 or=3 rotl=1 rotr=3 shfl=1 xor=6
[2026-10-07T19:18:27Z] load site instr 26: src r0 win 1 off 1; last base writer rotr at 20; writers back to the last injecting one: rotr@20 load@15; shadow writes of r0 per rep: add=14 mad=5 mul=5 mulhi=3 rotl=1 rotr=6 shfl=2 sub=1 xor=3
[2026-10-07T19:18:27Z] load site instr 28: src r6 win 0 off 0; last base writer load at 26; writers back to the last injecting one: load@26; shadow writes of r6 per rep: add=5 mad=2 mul=4 mulhi=1 or=4 rotl=1 rotr=2 shfl=6 sub=3 xor=6
[2026-10-07T19:18:27Z] load site instr 31: src r2 win 0 off 0; last base writer shfl at 29; writers back to the last injecting one: shfl@29; shadow writes of r2 per rep: add=4 mad=3 mul=5 or=3 rotl=1 rotr=3 shfl=1 xor=6
[2026-10-07T19:18:27Z] load site instr 37: src r7 win 0 off 0; last base writer add at 36; writers back to the last injecting one: add@36; shadow writes of r7 per rep: add=5 mad=3 mul=6 or=1 rotl=5 shfl=4 sub=2 xor=6
[2026-10-07T19:18:27Z] load site instr 42: src r1 win 0 off 0; last base writer add at 40; writers back to the last injecting one: add@40; shadow writes of r1 per rep: add=2 mad=4 mul=7 mulhi=1 or=4 rotl=2 rotr=2 shfl=5 sub=2 xor=6
[2026-10-07T19:18:27Z] load site instr 45: src r2 win 1 off 0; last base writer load at 42; writers back to the last injecting one: load@42; shadow writes of r2 per rep: add=4 mad=3 mul=5 or=3 rotl=1 rotr=3 shfl=1 xor=6
[2026-10-07T19:18:27Z] load site instr 46: src r0 win 2 off 2; last base writer shfl at 33; writers back to the last injecting one: shfl@33; shadow writes of r0 per rep: add=14 mad=5 mul=5 mulhi=3 rotl=1 rotr=6 shfl=2 sub=1 xor=3
[2026-10-07T19:18:27Z] load site instr 51: src r4 win 2 off 0; last base writer load at 46; writers back to the last injecting one: load@46; shadow writes of r4 per rep: add=5 mad=2 mul=4 mulhi=2 or=1 rotl=1 rotr=3 shfl=1 sub=2 xor=8
[2026-10-07T19:18:27Z] load site instr 52: src r5 win 1 off 0; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r5 per rep: add=6 mad=3 mul=4 mulhi=2 rotl=1 rotr=3 shfl=4 sub=3 xor=2
[2026-10-07T19:18:27Z] load site instr 55: src r0 win 2 off 0; last base writer rotr at 48; writers back to the last injecting one: rotr@48 shfl@33; shadow writes of r0 per rep: add=14 mad=5 mul=5 mulhi=3 rotl=1 rotr=6 shfl=2 sub=1 xor=3
[2026-10-07T19:18:27Z] load site instr 61: src r3 win 1 off 1; last base writer load at 55; writers back to the last injecting one: load@55; shadow writes of r3 per rep: add=6 mad=5 mul=2 or=3 rotl=4 rotr=4 shfl=4 sub=1 xor=3
[2026-10-07T19:18:27Z] load site instr 62: src r6 win 1 off 0; last base writer mad at 54; writers back to the last injecting one: mad@54; shadow writes of r6 per rep: add=5 mad=2 mul=4 mulhi=1 or=4 rotl=1 rotr=2 shfl=6 sub=3 xor=6
[2026-10-07T19:18:27Z] window layer: site item windows (first, items) (0x800000,2^22) (0x0,2^22) (0x800000,2^22) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x0,2^22) (0x0,2^23) (0x0,2^22) (0x800000,2^23) (0x0,2^23); expected reads per item by quarter 184.000 88.000 168.000 72.000 (flat uniform 128.000)
[2026-10-07T19:20:56Z] 524288 warps (16777216 nonces) interpreted in 149.2 s (13.663 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:20:56Z] p106700-attack-f8 distinct lines per hash: n 16777216 min 1013 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8707
[2026-10-07T19:20:56Z] p106700-attack-f8 distinct items per hash: n 16777216 min 127 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:20:56Z] p106700-attack-f8 distinct lines per warp: n 524288 min 32567 p1 32604 median 32636 p99 32664 max 32690 mean 32635.7873
[2026-10-07T19:20:56Z] p106700-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4261
[2026-10-07T19:20:56Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:20:56Z] positions: largest hi16-bucket (256 items) share 0.0083% at p48 (iteration 3, site 0, instr 6); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p25 (site 9, instr 45)
[2026-10-07T19:20:56Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p28 (site 12, instr 52); saturated sources at one position 0 of 2048 at p0 (site 0, instr 6); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:20:56Z] p106700-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 253 (bin 3163635) z_max +11.05 min 34 z_min -8.31 chi2/dof 19.54283 chi2_z +53705.77 top0.1% 0.17621% top0.5% 0.85097% top1% 1.67279%
[2026-10-07T19:20:56Z] p106700-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.03107 largest 243 (item 0xa684e3) at +5.79 sigma smallest at -5.01; buckets64 chi2/dof 2.99397 largest 11546 (bucket 178325) at +7.66 sigma smallest at -6.83
[2026-10-07T19:21:00Z] p106700-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 258 (bin 1361096) z_max +11.49 min 32 z_min -8.49 chi2/dof 19.50008 chi2_z +53581.96 top0.1% 0.17611% top0.5% 0.85055% top1% 1.67166%
[2026-10-07T19:21:00Z] p106700-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00050 largest +5.65 sigma; buckets64 chi2/dof 0.99501 largest +4.60 smallest -4.36
[2026-10-07T19:21:00Z] 6-sigma p106700-attack-f8 items buckets64 against the window density: largest bucket +7.66 sigma, smallest -6.83 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:21:00Z] hot-set p106700-attack-f8 items (windowed control): f 0.1% S_f 0.17621% E_f(control) 0.17611% X_f +0.00010% X_f/f +0.0010 -> no hot set
[2026-10-07T19:21:00Z] hot-set p106700-attack-f8 items (windowed control): f 0.5% S_f 0.85097% E_f(control) 0.85055% X_f +0.00042% X_f/f +0.0008 -> no hot set
[2026-10-07T19:21:00Z] hot-set p106700-attack-f8 items (windowed control): f 1.0% S_f 1.67279% E_f(control) 1.67166% X_f +0.00114% X_f/f +0.0011 -> no hot set
[2026-10-07T19:21:00Z] hot-set p106700-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:21:04Z] p106700-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 192 (bin 8330333) z_max +5.66 min 72 z_min -4.95 chi2/dof 0.99976 chi2_z -0.70 top0.1% 0.13104% top0.5% 0.63252% top1% 1.24341%
[2026-10-07T19:21:04Z] hot-set p106700-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.17621% E_f(control) 0.13104% X_f +0.04517% X_f/f +0.4517 -> no hot set
[2026-10-07T19:21:04Z] hot-set p106700-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.85097% E_f(control) 0.63252% X_f +0.21845% X_f/f +0.4369 -> no hot set
[2026-10-07T19:21:04Z] hot-set p106700-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.67279% E_f(control) 1.24341% X_f +0.42938% X_f/f +0.4294 -> no hot set
[2026-10-07T19:21:04Z] hot-set p106700-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:21:04Z] ratio p106700-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0006x / 1.0005x / 1.0007x (gate 1.2x at 0.1%: within); over the FLAT control 1.3447x / 1.3454x / 1.3453x
[2026-10-07T19:21:06Z] attribution: hot threshold count >= 221 marks 18938 items (0.1129% of items) holding 4261674 reads (0.1984% of reads); top 8 items t=0x3045f3:253 t=0x0bc789:252 t=0x0a3617:252 t=0x0b3b37:251 t=0x07eec4:251 t=0x2daedd:249 t=0x204325:249 t=0x0c9b8f:249
lease: 0 of 16 pool cores free (88 leased); waiting

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,235 @@
[2026-10-07T18:36:58Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100211", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/igneum-wt-adv-accept/adv/live", "--validate", "sample"]
[2026-10-07T18:36:58Z] census warps: programs [100211] day 20730 nonces 1000000 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:36:58Z] day 20730: cache filled in 0.50 s, fnv 448274a57f508cbc
[2026-10-07T18:37:01Z] table: 16777216 items derived with their 8 lines in 2.7 s; library comparison sample (0 mismatches)
[2026-10-07T18:37:06Z] program p100211-attack-f8: epoch seed 3d4686b780097991a4600a0683fca3645e627c67edd53365c4131c7095ecc55d era seed 3e3a196a3504d573eee9656bffb7e3d2dffc03dc10f95f92fd08d0ab245641f7 id d07885a437e237c7 attempt 0 class mx8-eraa8bce51f+sh256x27 op mix load=16 xor=11 mul=10 add=7 mad=6 mulhi=4 shfl=4 rotl=3 or=1 rotr=1 sub=1; era stride mul 0x4babb2b7 rot 31 interleave [1, 6, 8, 13] windows 3:1:1 4:1:0 7:0:0 15:2:0 17:2:2 23:0:0 24:1:0 27:2:3 29:2:1 31:1:0 35:0:0 41:1:0 44:2:1 49:0:0 61:2:1 63:1:0
[2026-10-07T18:37:06Z] load site instr 3: src r4 win 1 off 1; last base writer xor at 2; writers back to the last injecting one: xor@2; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:37:06Z] load site instr 4: src r0 win 1 off 0; last base writer load at 3; writers back to the last injecting one: load@3; shadow writes of r0 per rep: add=5 mad=4 mul=5 mulhi=1 or=1 rotl=2 rotr=6 shfl=3 sub=6 xor=4
[2026-10-07T18:37:06Z] load site instr 7: src r2 win 0 off 0; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r2 per rep: add=5 mad=4 mul=3 mulhi=1 or=2 rotl=2 rotr=3 shfl=1 sub=3 xor=9
[2026-10-07T18:37:06Z] load site instr 15: src r4 win 2 off 0; last base writer mad at 12; writers back to the last injecting one: mad@12; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:37:06Z] load site instr 17: src r3 win 2 off 2; last base writer load at 15; writers back to the last injecting one: load@15; shadow writes of r3 per rep: add=4 mad=1 mul=1 mulhi=2 or=1 rotl=4 rotr=2 shfl=4 sub=1 xor=3
[2026-10-07T18:37:06Z] load site instr 23: src r0 win 0 off 0; last base writer xor at 13; writers back to the last injecting one: xor@13; shadow writes of r0 per rep: add=5 mad=4 mul=5 mulhi=1 or=1 rotl=2 rotr=6 shfl=3 sub=6 xor=4
[2026-10-07T18:37:06Z] load site instr 24: src r7 win 1 off 0; last base writer shfl at 16; writers back to the last injecting one: shfl@16; shadow writes of r7 per rep: add=2 mad=4 mul=3 mulhi=1 or=1 rotl=5 rotr=4 shfl=2 sub=1 xor=4
[2026-10-07T18:37:06Z] load site instr 27: src r5 win 2 off 3; last base writer load at 24; writers back to the last injecting one: load@24; shadow writes of r5 per rep: add=3 mad=5 mul=1 mulhi=2 or=1 rotl=3 rotr=2 shfl=6 sub=1 xor=5
[2026-10-07T18:37:06Z] load site instr 29: src r2 win 2 off 1; last base writer load at 27; writers back to the last injecting one: load@27; shadow writes of r2 per rep: add=5 mad=4 mul=3 mulhi=1 or=2 rotl=2 rotr=3 shfl=1 sub=3 xor=9
[2026-10-07T18:37:06Z] load site instr 31: src r6 win 1 off 0; last base writer xor at 30; writers back to the last injecting one: xor@30; shadow writes of r6 per rep: add=5 mad=4 mul=5 mulhi=2 or=1 rotl=3 rotr=3 shfl=1 sub=4 xor=4
[2026-10-07T18:37:06Z] load site instr 35: src r7 win 0 off 0; last base writer rotl at 33; writers back to the last injecting one: rotl@33 shfl@16; shadow writes of r7 per rep: add=2 mad=4 mul=3 mulhi=1 or=1 rotl=5 rotr=4 shfl=2 sub=1 xor=4
[2026-10-07T18:37:06Z] load site instr 41: src r1 win 1 off 0; last base writer add at 40; writers back to the last injecting one: add@40; shadow writes of r1 per rep: add=3 mad=3 mul=3 mulhi=2 or=3 rotl=5 rotr=2 shfl=5 sub=2 xor=5
[2026-10-07T18:37:06Z] load site instr 44: src r5 win 2 off 1; last base writer load at 35; writers back to the last injecting one: load@35; shadow writes of r5 per rep: add=3 mad=5 mul=1 mulhi=2 or=1 rotl=3 rotr=2 shfl=6 sub=1 xor=5
[2026-10-07T18:37:06Z] load site instr 49: src r4 win 0 off 0; last base writer load at 44; writers back to the last injecting one: load@44; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:37:06Z] load site instr 61: src r3 win 2 off 1; last base writer xor at 58; writers back to the last injecting one: xor@58; shadow writes of r3 per rep: add=4 mad=1 mul=1 mulhi=2 or=1 rotl=4 rotr=2 shfl=4 sub=1 xor=3
[2026-10-07T18:37:06Z] load site instr 63: src r4 win 1 off 0; last base writer shfl at 62; writers back to the last injecting one: shfl@62; shadow writes of r4 per rep: add=6 mad=2 mul=4 mulhi=7 or=1 rotl=6 rotr=5 shfl=3 sub=3 xor=5
[2026-10-07T18:37:06Z] window layer: site item windows (first, items) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0x0,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x400000,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^23) (0x400000,2^22) (0x0,2^24) (0x400000,2^22) (0x0,2^23); expected reads per item by quarter 8.583 12.398 4.768 4.768 (flat uniform 7.629)
[2026-10-07T18:37:09Z] 31250 warps (1000000 nonces) interpreted in 3.4 s (3.514 ms per warp per thread); Epoch::hash_warp agreement on 95 warps: 0 mismatches
[2026-10-07T18:37:09Z] p100211-attack-f8 distinct lines per hash: n 1000000 min 1013 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8706
[2026-10-07T18:37:09Z] p100211-attack-f8 distinct items per hash: n 1000000 min 127 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T18:37:09Z] p100211-attack-f8 distinct lines per warp: n 31250 min 32580 p1 32604 median 32636 p99 32664 max 32682 mean 32635.6451
[2026-10-07T18:37:09Z] p100211-attack-f8 distinct items per warp: n 31250 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4165
[2026-10-07T18:37:09Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:37:09Z] positions: largest hi16-bucket (256 items) share 0.0193% at p89 (iteration 5, site 9, instr 31); windowed expectation 0.0031%; largest saturated-source share 0.0000% at p0 (site 0, instr 3)
[2026-10-07T18:37:09Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p9 (site 9, instr 31); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:37:09Z] p100211-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 1238 (bin 4539781) z_max +445.44 min 0 z_min -2.76 chi2/dof 2.36870 chi2_z +3964.17 top0.1% 0.34137% top0.5% 1.46293% top1% 2.74616%
[2026-10-07T18:37:09Z] p100211-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.04292 largest 1238 (item 0x454585) at +348.08 sigma smallest at -3.52; buckets64 chi2/dof 1.03150 largest 1989 (bucket 70934) at +42.44 sigma smallest at -4.02
[2026-10-07T18:37:10Z] p100211-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 37 (bin 6537897) z_max +10.63 min 0 z_min -2.76 chi2/dof 2.31214 chi2_z +3800.36 top0.1% 0.31534% top0.5% 1.42196% top1% 2.69721%
[2026-10-07T18:37:10Z] p100211-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00002 largest +6.99 sigma; buckets64 chi2/dof 0.99932 largest +4.68 smallest -4.45
[2026-10-07T18:37:10Z] 6-sigma p100211-attack-f8 items buckets64 against the window density: largest bucket +42.44 sigma, smallest -4.02 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (windowed control): f 0.1% S_f 0.34137% E_f(control) 0.31534% X_f +0.02603% X_f/f +0.2603 -> no hot set
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (windowed control): f 0.5% S_f 1.46293% E_f(control) 1.42196% X_f +0.04096% X_f/f +0.0819 -> no hot set
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (windowed control): f 1.0% S_f 2.74616% E_f(control) 2.69721% X_f +0.04895% X_f/f +0.0489 -> no hot set
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:37:10Z] p100211-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 27 (bin 9914800) z_max +7.01 min 0 z_min -2.76 chi2/dof 1.00012 chi2_z +0.35 top0.1% 0.24321% top0.5% 1.09954% top1% 2.08777%
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.34137% E_f(control) 0.24321% X_f +0.09815% X_f/f +0.9815 -> no hot set
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.46293% E_f(control) 1.09954% X_f +0.36339% X_f/f +0.7268 -> no hot set
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.74616% E_f(control) 2.08777% X_f +0.65839% X_f/f +0.6584 -> no hot set
[2026-10-07T18:37:10Z] hot-set p100211-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:37:10Z] ratio p100211-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0825x / 1.0288x / 1.0181x (gate 1.2x at 0.1%: within); over the FLAT control 1.4036x / 1.3305x / 1.3154x
[2026-10-07T18:37:10Z] hottest item p100211-attack-f8 (0x454585): 1238 reads (0.0010% of all); predicted source site-instr4:r0:one-zero-bit:last-writer-load@3
[2026-10-07T18:37:10Z] program p100211-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T18:37:11Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100629", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/igneum-wt-adv-accept/adv/live", "--validate", "sample"]
[2026-10-07T18:37:11Z] census warps: programs [100629] day 20730 nonces 1000000 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:37:11Z] day 20730: cache filled in 0.66 s, fnv 448274a57f508cbc
[2026-10-07T18:37:14Z] table: 16777216 items derived with their 8 lines in 2.7 s; library comparison sample (0 mismatches)
[2026-10-07T18:37:19Z] program p100629-attack-f8: epoch seed 68bfab501dbcaf5685d1cfea27ebe7d0bbeb3aeae03591561bd3eabc3d6510a2 era seed 24152e11d7c8f0e60319ba0ca3b83ace33a2f22cffd58ad2a8168dc4283352b5 id 37c849d9741c5994 attempt 0 class mx8-era31b72e61+sh256x27 op mix load=16 add=10 mad=8 mul=6 rotl=5 or=4 shfl=4 xor=4 mulhi=3 rotr=2 sub=2; era stride mul 0xc8c38905 rot 3 interleave [3, 4, 5, 10] windows 4:1:1 5:1:1 9:2:0 13:1:1 15:1:1 16:2:3 17:0:0 18:0:0 19:2:2 33:2:0 34:1:1 38:2:0 40:1:0 47:0:0 51:0:0 54:0:0
[2026-10-07T18:37:19Z] load site instr 4: src r0 win 1 off 1; last base writer mad at 2; writers back to the last injecting one: mad@2; shadow writes of r0 per rep: add=3 mad=3 mul=3 mulhi=2 or=2 rotl=4 rotr=2 sub=5 xor=5
[2026-10-07T18:37:19Z] load site instr 5: src r1 win 1 off 1; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=4 rotl=1 rotr=2 shfl=1 sub=2 xor=3
[2026-10-07T18:37:19Z] load site instr 9: src r1 win 2 off 0; last base writer add at 8; writers back to the last injecting one: add@8; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=4 rotl=1 rotr=2 shfl=1 sub=2 xor=3
[2026-10-07T18:37:19Z] load site instr 13: src r2 win 1 off 1; last base writer load at 9; writers back to the last injecting one: load@9; shadow writes of r2 per rep: add=1 mad=3 mul=2 mulhi=1 or=3 rotl=5 rotr=3 shfl=3 sub=4 xor=8
[2026-10-07T18:37:19Z] load site instr 15: src r1 win 1 off 1; last base writer load at 13; writers back to the last injecting one: load@13; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=4 rotl=1 rotr=2 shfl=1 sub=2 xor=3
[2026-10-07T18:37:19Z] load site instr 16: src r3 win 2 off 3; last base writer mad at 12; writers back to the last injecting one: mad@12; shadow writes of r3 per rep: add=5 mad=3 mul=6 mulhi=3 or=1 rotl=3 rotr=5 shfl=6 sub=3 xor=5
[2026-10-07T18:37:19Z] load site instr 17: src r2 win 0 off 0; last base writer load at 15; writers back to the last injecting one: load@15; shadow writes of r2 per rep: add=1 mad=3 mul=2 mulhi=1 or=3 rotl=5 rotr=3 shfl=3 sub=4 xor=8
[2026-10-07T18:37:19Z] load site instr 18: src r6 win 0 off 0; last base writer load at 16; writers back to the last injecting one: load@16; shadow writes of r6 per rep: add=4 mad=2 mul=6 mulhi=3 or=3 rotl=4 rotr=2 shfl=3 sub=1 xor=3
[2026-10-07T18:37:19Z] load site instr 19: src r5 win 2 off 2; last base writer load at 17; writers back to the last injecting one: load@17; shadow writes of r5 per rep: add=5 mad=2 mul=3 mulhi=5 or=1 rotl=2 rotr=3 shfl=5 sub=6 xor=1
[2026-10-07T18:37:19Z] load site instr 33: src r5 win 2 off 0; last base writer add at 31; writers back to the last injecting one: add@31; shadow writes of r5 per rep: add=5 mad=2 mul=3 mulhi=5 or=1 rotl=2 rotr=3 shfl=5 sub=6 xor=1
[2026-10-07T18:37:19Z] load site instr 34: src r1 win 1 off 1; last base writer xor at 27; writers back to the last injecting one: xor@27; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=4 rotl=1 rotr=2 shfl=1 sub=2 xor=3
[2026-10-07T18:37:19Z] load site instr 38: src r6 win 2 off 0; last base writer add at 35; writers back to the last injecting one: add@35; shadow writes of r6 per rep: add=4 mad=2 mul=6 mulhi=3 or=3 rotl=4 rotr=2 shfl=3 sub=1 xor=3
[2026-10-07T18:37:19Z] load site instr 40: src r3 win 1 off 0; last base writer load at 38; writers back to the last injecting one: load@38; shadow writes of r3 per rep: add=5 mad=3 mul=6 mulhi=3 or=1 rotl=3 rotr=5 shfl=6 sub=3 xor=5
[2026-10-07T18:37:19Z] load site instr 47: src r1 win 0 off 0; last base writer rotl at 44; writers back to the last injecting one: rotl@44 xor@27; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=4 rotl=1 rotr=2 shfl=1 sub=2 xor=3
[2026-10-07T18:37:19Z] load site instr 51: src r7 win 0 off 0; last base writer load at 40; writers back to the last injecting one: load@40; shadow writes of r7 per rep: add=7 mad=2 mul=1 mulhi=4 or=2 rotr=5 shfl=2 sub=2 xor=5
[2026-10-07T18:37:19Z] load site instr 54: src r3 win 0 off 0; last base writer load at 51; writers back to the last injecting one: load@51; shadow writes of r3 per rep: add=5 mad=3 mul=6 mulhi=3 or=1 rotl=3 rotr=5 shfl=6 sub=3 xor=5
[2026-10-07T18:37:19Z] window layer: site item windows (first, items) (0x800000,2^23) (0x800000,2^23) (0x0,2^22) (0x800000,2^23) (0x800000,2^23) (0xc00000,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^22) (0x0,2^22) (0x800000,2^23) (0x0,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^24); expected reads per item by quarter 9.060 3.338 9.060 9.060 (flat uniform 7.629)
[2026-10-07T18:37:23Z] 31250 warps (1000000 nonces) interpreted in 3.8 s (3.852 ms per warp per thread); Epoch::hash_warp agreement on 95 warps: 0 mismatches
[2026-10-07T18:37:23Z] p100629-attack-f8 distinct lines per hash: n 1000000 min 1014 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8713
[2026-10-07T18:37:23Z] p100629-attack-f8 distinct items per hash: n 1000000 min 127 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T18:37:23Z] p100629-attack-f8 distinct lines per warp: n 31250 min 32565 p1 32605 median 32636 p99 32664 max 32681 mean 32635.9486
[2026-10-07T18:37:23Z] p100629-attack-f8 distinct items per warp: n 31250 min 4090 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4480
[2026-10-07T18:37:23Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:37:23Z] positions: largest hi16-bucket (256 items) share 0.0104% at p121 (iteration 7, site 9, instr 33); windowed expectation 0.0061%; largest saturated-source share 0.0001% at p5 (site 5, instr 16)
[2026-10-07T18:37:23Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p4 (site 4, instr 15); saturated sources at one position 0 of 2048 at p0 (site 0, instr 4); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:37:23Z] p100629-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 30 (bin 8487097) z_max +8.10 min 0 z_min -2.76 chi2/dof 1.81617 chi2_z +2363.89 top0.1% 0.27111% top0.5% 1.22433% top1% 2.32916%
[2026-10-07T18:37:23Z] p100629-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.01006 largest 30 (item 0x8180b9) at +6.96 sigma smallest at -3.01; buckets64 chi2/dof 1.01223 largest 296 (bucket 98030) at +5.64 sigma smallest at -4.69
[2026-10-07T18:37:23Z] p100629-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 29 (bin 9724837) z_max +7.74 min 0 z_min -2.76 chi2/dof 1.80496 chi2_z +2331.41 top0.1% 0.26813% top0.5% 1.21510% top1% 2.31449%
[2026-10-07T18:37:23Z] p100629-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00037 largest +6.93 sigma; buckets64 chi2/dof 0.99550 largest +4.74 smallest -4.31
[2026-10-07T18:37:23Z] 6-sigma p100629-attack-f8 items buckets64 against the window density: largest bucket +5.64 sigma, smallest -4.69 -> within 6 sigma
[2026-10-07T18:37:23Z] hot-set p100629-attack-f8 items (windowed control): f 0.1% S_f 0.27111% E_f(control) 0.26813% X_f +0.00298% X_f/f +0.0298 -> no hot set
[2026-10-07T18:37:23Z] hot-set p100629-attack-f8 items (windowed control): f 0.5% S_f 1.22433% E_f(control) 1.21510% X_f +0.00923% X_f/f +0.0185 -> no hot set
[2026-10-07T18:37:23Z] hot-set p100629-attack-f8 items (windowed control): f 1.0% S_f 2.32916% E_f(control) 2.31449% X_f +0.01468% X_f/f +0.0147 -> no hot set
[2026-10-07T18:37:23Z] hot-set p100629-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:37:24Z] p100629-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 26 (bin 1359050) z_max +6.65 min 0 z_min -2.76 chi2/dof 1.00082 chi2_z +2.36 top0.1% 0.24290% top0.5% 1.09909% top1% 2.08683%
[2026-10-07T18:37:24Z] hot-set p100629-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.27111% E_f(control) 0.24290% X_f +0.02821% X_f/f +0.2821 -> no hot set
[2026-10-07T18:37:24Z] hot-set p100629-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.22433% E_f(control) 1.09909% X_f +0.12524% X_f/f +0.2505 -> no hot set
[2026-10-07T18:37:24Z] hot-set p100629-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.32916% E_f(control) 2.08683% X_f +0.24233% X_f/f +0.2423 -> no hot set
[2026-10-07T18:37:24Z] hot-set p100629-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:37:24Z] ratio p100629-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0111x / 1.0076x / 1.0063x (gate 1.2x at 0.1%: within); over the FLAT control 1.1161x / 1.1139x / 1.1161x
[2026-10-07T18:37:24Z] hottest item p100629-attack-f8 (0x8180b9): 30 reads (0.0000% of all); predicted source none
[2026-10-07T18:37:24Z] program p100629-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T18:37:24Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100064", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/igneum-wt-adv-accept/adv/live", "--validate", "sample"]
[2026-10-07T18:37:24Z] census warps: programs [100064] day 20730 nonces 1000000 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:37:25Z] day 20730: cache filled in 0.61 s, fnv 448274a57f508cbc
[2026-10-07T18:37:28Z] table: 16777216 items derived with their 8 lines in 2.4 s; library comparison sample (0 mismatches)
[2026-10-07T18:37:32Z] program p100064-attack-f8: epoch seed 96bc342fb24875e10a17d093c27cdfe28c4293bfb4e0c96bc302de885e195a89 era seed a860aa82556a6f86d2b45818c33f274427428086c50c5d5b3f7101128c289bdf id 2442abf9d56f6611 attempt 2 class mx8-eraa210d1bd+sh256x27 op mix load=16 sub=9 add=7 xor=7 mul=5 rotl=5 mad=4 rotr=4 shfl=4 or=2 mulhi=1; era stride mul 0x82b69d5d rot 9 interleave [7, 8, 9, 12] windows 2:1:0 9:0:0 10:1:0 15:1:1 16:0:0 20:2:2 21:0:0 25:0:0 28:1:1 30:0:0 31:0:0 33:2:1 34:1:1 35:0:0 41:1:0 51:1:0
[2026-10-07T18:37:32Z] load site instr 2: src r5 win 1 off 0; last base writer rotl at 0; writers back to the last injecting one: rotl@0 xor@62; shadow writes of r5 per rep: add=9 mad=7 mul=1 mulhi=2 or=1 rotl=6 rotr=2 shfl=2 sub=3 xor=6
[2026-10-07T18:37:32Z] load site instr 9: src r1 win 0 off 0; last base writer load at 2; writers back to the last injecting one: load@2; shadow writes of r1 per rep: add=4 mad=2 mul=5 mulhi=1 or=3 rotr=4 shfl=4 sub=3 xor=1
[2026-10-07T18:37:32Z] load site instr 10: src r6 win 1 off 0; last base writer sub at 8; writers back to the last injecting one: sub@8; shadow writes of r6 per rep: add=8 mad=5 mul=2 mulhi=1 or=3 rotl=2 rotr=5 shfl=1 sub=2 xor=1
[2026-10-07T18:37:32Z] load site instr 15: src r6 win 1 off 1; last base writer shfl at 14; writers back to the last injecting one: shfl@14; shadow writes of r6 per rep: add=8 mad=5 mul=2 mulhi=1 or=3 rotl=2 rotr=5 shfl=1 sub=2 xor=1
[2026-10-07T18:37:32Z] load site instr 16: src r7 win 0 off 0; last base writer shfl at 13; writers back to the last injecting one: shfl@13; shadow writes of r7 per rep: add=7 mul=5 mulhi=1 rotl=2 rotr=7 shfl=5 sub=1 xor=4
[2026-10-07T18:37:32Z] load site instr 20: src r2 win 2 off 2; last base writer load at 16; writers back to the last injecting one: load@16; shadow writes of r2 per rep: add=6 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=3 shfl=5 sub=5 xor=1
[2026-10-07T18:37:32Z] load site instr 21: src r6 win 0 off 0; last base writer load at 20; writers back to the last injecting one: load@20; shadow writes of r6 per rep: add=8 mad=5 mul=2 mulhi=1 or=3 rotl=2 rotr=5 shfl=1 sub=2 xor=1
[2026-10-07T18:37:32Z] load site instr 25: src r5 win 0 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r5 per rep: add=9 mad=7 mul=1 mulhi=2 or=1 rotl=6 rotr=2 shfl=2 sub=3 xor=6
[2026-10-07T18:37:32Z] load site instr 28: src r2 win 1 off 1; last base writer xor at 26; writers back to the last injecting one: xor@26; shadow writes of r2 per rep: add=6 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=3 shfl=5 sub=5 xor=1
[2026-10-07T18:37:32Z] load site instr 30: src r7 win 0 off 0; last base writer load at 28; writers back to the last injecting one: load@28; shadow writes of r7 per rep: add=7 mul=5 mulhi=1 rotl=2 rotr=7 shfl=5 sub=1 xor=4
[2026-10-07T18:37:32Z] load site instr 31: src r4 win 0 off 0; last base writer load at 25; writers back to the last injecting one: load@25; shadow writes of r4 per rep: add=6 mad=3 mul=2 mulhi=4 rotl=4 rotr=4 shfl=3 sub=6 xor=4
[2026-10-07T18:37:32Z] load site instr 33: src r0 win 2 off 1; last base writer mad at 27; writers back to the last injecting one: mad@27; shadow writes of r0 per rep: add=7 mad=1 mul=4 mulhi=2 or=2 rotl=2 rotr=4 shfl=2 sub=3 xor=2
[2026-10-07T18:37:32Z] load site instr 34: src r7 win 1 off 1; last base writer load at 33; writers back to the last injecting one: load@33; shadow writes of r7 per rep: add=7 mul=5 mulhi=1 rotl=2 rotr=7 shfl=5 sub=1 xor=4
[2026-10-07T18:37:32Z] load site instr 35: src r5 win 0 off 0; last base writer load at 34; writers back to the last injecting one: load@34; shadow writes of r5 per rep: add=9 mad=7 mul=1 mulhi=2 or=1 rotl=6 rotr=2 shfl=2 sub=3 xor=6
[2026-10-07T18:37:32Z] load site instr 41: src r2 win 1 off 0; last base writer add at 37; writers back to the last injecting one: add@37; shadow writes of r2 per rep: add=6 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=3 shfl=5 sub=5 xor=1
[2026-10-07T18:37:32Z] load site instr 51: src r0 win 1 off 0; last base writer rotl at 46; writers back to the last injecting one: rotl@46 mad@27; shadow writes of r0 per rep: add=7 mad=1 mul=4 mulhi=2 or=2 rotl=2 rotr=4 shfl=2 sub=3 xor=2
[2026-10-07T18:37:32Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x800000,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x400000,2^22) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x0,2^23); expected reads per item by quarter 7.153 9.060 8.106 6.199 (flat uniform 7.629)
[2026-10-07T18:37:36Z] 31250 warps (1000000 nonces) interpreted in 3.7 s (3.777 ms per warp per thread); Epoch::hash_warp agreement on 95 warps: 0 mismatches
[2026-10-07T18:37:36Z] p100064-attack-f8 distinct lines per hash: n 1000000 min 1014 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8712
[2026-10-07T18:37:36Z] p100064-attack-f8 distinct items per hash: n 1000000 min 127 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T18:37:36Z] p100064-attack-f8 distinct lines per warp: n 31250 min 32571 p1 32605 median 32637 p99 32664 max 32682 mean 32636.2260
[2026-10-07T18:37:36Z] p100064-attack-f8 distinct items per warp: n 31250 min 4090 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4805
[2026-10-07T18:37:36Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:37:36Z] positions: largest hi16-bucket (256 items) share 0.0484% at p43 (iteration 2, site 11, instr 33); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 2)
[2026-10-07T18:37:36Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p5 (site 5, instr 20); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:37:36Z] p100064-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 54 (bin 4194344) z_max +16.79 min 0 z_min -2.76 chi2/dof 1.26520 chi2_z +768.11 top0.1% 0.29988% top0.5% 1.27974% top1% 2.37611%
[2026-10-07T18:37:36Z] p100064-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.10304 largest 54 (item 0x400028) at +14.93 sigma smallest at -3.01; buckets64 chi2/dof 7.60238 largest 2441 (bucket 65536) at +77.29 sigma smallest at -7.51
[2026-10-07T18:37:36Z] p100064-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 27 (bin 5834067) z_max +7.01 min 0 z_min -2.76 chi2/dof 1.14878 chi2_z +430.91 top0.1% 0.25551% top0.5% 1.15143% top1% 2.18725%
[2026-10-07T18:37:36Z] p100064-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99986 largest +6.30 sigma; buckets64 chi2/dof 1.00273 largest +4.68 smallest -4.35
[2026-10-07T18:37:36Z] 6-sigma p100064-attack-f8 items buckets64 against the window density: largest bucket +77.29 sigma, smallest -7.51 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:37:36Z] hot-set p100064-attack-f8 items (windowed control): f 0.1% S_f 0.29988% E_f(control) 0.25551% X_f +0.04437% X_f/f +0.4437 -> no hot set
[2026-10-07T18:37:36Z] hot-set p100064-attack-f8 items (windowed control): f 0.5% S_f 1.27974% E_f(control) 1.15143% X_f +0.12831% X_f/f +0.2566 -> no hot set
[2026-10-07T18:37:36Z] hot-set p100064-attack-f8 items (windowed control): f 1.0% S_f 2.37611% E_f(control) 2.18725% X_f +0.18885% X_f/f +0.1889 -> no hot set
[2026-10-07T18:37:36Z] hot-set p100064-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:37:37Z] p100064-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 28 (bin 3756411) z_max +7.37 min 0 z_min -2.76 chi2/dof 1.00062 chi2_z +1.80 top0.1% 0.24291% top0.5% 1.09902% top1% 2.08725%
[2026-10-07T18:37:37Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.29988% E_f(control) 0.24291% X_f +0.05697% X_f/f +0.5697 -> no hot set
[2026-10-07T18:37:37Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.27974% E_f(control) 1.09902% X_f +0.18072% X_f/f +0.3614 -> no hot set
[2026-10-07T18:37:37Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.37611% E_f(control) 2.08725% X_f +0.28886% X_f/f +0.2889 -> no hot set
[2026-10-07T18:37:37Z] hot-set p100064-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:37:37Z] ratio p100064-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.1737x / 1.1114x / 1.0863x (gate 1.2x at 0.1%: within); over the FLAT control 1.2346x / 1.1644x / 1.1384x
[2026-10-07T18:37:37Z] hottest item p100064-attack-f8 (0x400028): 54 reads (0.0000% of all); predicted source none
[2026-10-07T18:37:37Z] program p100064-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T18:37:37Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100767", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/igneum-wt-adv-accept/adv/live", "--validate", "sample"]
[2026-10-07T18:37:37Z] census warps: programs [100767] day 20730 nonces 1000000 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:37:38Z] day 20730: cache filled in 0.65 s, fnv 448274a57f508cbc
[2026-10-07T18:37:40Z] table: 16777216 items derived with their 8 lines in 2.3 s; library comparison sample (0 mismatches)
[2026-10-07T18:37:45Z] program p100767-attack-f8: epoch seed 74484b391756fc49568cdd716bcfd839a55d31a45633c223c65c7f2ab4617fd4 era seed 7a65a05391dcd87b8fdaf7f74813aa17c6e13f7c56a03da2aaa6176987ef038b id 9d68e6286fc817d4 attempt 2 class mx8-era763e5847+sh256x27 op mix load=16 add=8 mad=6 mul=6 rotl=6 mulhi=5 xor=5 rotr=4 shfl=4 or=2 sub=2; era stride mul 0x54387173 rot 28 interleave [4, 11, 13, 15] windows 6:1:0 9:0:0 11:2:1 12:0:0 13:1:1 19:1:1 23:2:0 32:2:0 36:1:1 39:1:1 41:0:0 45:1:0 50:2:3 58:0:0 59:0:0 63:1:0
[2026-10-07T18:37:45Z] load site instr 6: src r6 win 1 off 0; last base writer mad at 4; writers back to the last injecting one: mad@4; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T18:37:45Z] load site instr 9: src r7 win 0 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:37:45Z] load site instr 11: src r5 win 2 off 1; last base writer xor at 5; writers back to the last injecting one: xor@5; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T18:37:45Z] load site instr 12: src r3 win 0 off 0; last base writer load at 9; writers back to the last injecting one: load@9; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T18:37:45Z] load site instr 13: src r2 win 1 off 1; last base writer load at 12; writers back to the last injecting one: load@12; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T18:37:45Z] load site instr 19: src r4 win 1 off 1; last base writer add at 7; writers back to the last injecting one: add@7; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T18:37:45Z] load site instr 23: src r6 win 2 off 0; last base writer mad at 22; writers back to the last injecting one: mad@22; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T18:37:45Z] load site instr 32: src r0 win 2 off 0; last base writer xor at 20; writers back to the last injecting one: xor@20; shadow writes of r0 per rep: add=7 mad=1 mul=3 mulhi=3 or=3 rotl=3 rotr=2 shfl=5 sub=2 xor=3
[2026-10-07T18:37:45Z] load site instr 36: src r7 win 1 off 1; last base writer rotr at 31; writers back to the last injecting one: rotr@31 load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:37:45Z] load site instr 39: src r7 win 1 off 1; last base writer rotl at 38; writers back to the last injecting one: rotl@38 add@37; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:37:45Z] load site instr 41: src r4 win 0 off 0; last base writer rotl at 40; writers back to the last injecting one: rotl@40 load@32; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T18:37:45Z] load site instr 45: src r5 win 1 off 0; last base writer rotr at 27; writers back to the last injecting one: rotr@27 shfl@24; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T18:37:45Z] load site instr 50: src r7 win 2 off 3; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T18:37:45Z] load site instr 58: src r3 win 0 off 0; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T18:37:45Z] load site instr 59: src r2 win 0 off 0; last base writer xor at 46; writers back to the last injecting one: xor@46; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T18:37:45Z] load site instr 63: src r1 win 1 off 0; last base writer rotr at 62; writers back to the last injecting one: rotr@62 add@56; shadow writes of r1 per rep: add=5 mad=4 mul=6 mulhi=3 or=2 rotl=2 rotr=3 shfl=5 sub=3 xor=2
[2026-10-07T18:37:45Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^22) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23); expected reads per item by quarter 9.060 7.153 6.199 8.106 (flat uniform 7.629)
[2026-10-07T18:37:49Z] 31250 warps (1000000 nonces) interpreted in 4.2 s (4.322 ms per warp per thread); Epoch::hash_warp agreement on 95 warps: 0 mismatches
[2026-10-07T18:37:49Z] p100767-attack-f8 distinct lines per hash: n 1000000 min 976 p1 1008 median 1024 p99 1024 max 1024 mean 1021.6579
[2026-10-07T18:37:49Z] p100767-attack-f8 distinct items per hash: n 1000000 min 122 p1 126 median 128 p99 128 max 128 mean 127.7228
[2026-10-07T18:37:49Z] p100767-attack-f8 distinct lines per warp: n 31250 min 32426 p1 32500 median 32567 p99 32622 max 32658 mean 32565.9023
[2026-10-07T18:37:49Z] p100767-attack-f8 distinct items per warp: n 31250 min 4070 p1 4079 median 4087 p99 4093 max 4096 mean 4086.6272
[2026-10-07T18:37:49Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:37:49Z] positions: largest hi16-bucket (256 items) share 0.0283% at p22 (iteration 1, site 6, instr 23); windowed expectation 0.0061%; largest saturated-source share 0.0130% at p22 (site 6, instr 23)
[2026-10-07T18:37:49Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p118 (site 6, instr 23); saturated sources at one position 1 of 2048 at p102 (site 6, instr 23); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:37:49Z] p100767-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 1677 (bin 0) z_max +604.38 min 0 z_min -2.76 chi2/dof 1.24228 chi2_z +701.71 top0.1% 0.34274% top0.5% 1.26980% top1% 2.32590%
[2026-10-07T18:37:49Z] p100767-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.07966 largest 1677 (item 0x0) at +554.14 sigma smallest at -3.01; buckets64 chi2/dof 1.05456 largest 2217 (bucket 0) at +67.99 sigma smallest at -4.21
[2026-10-07T18:37:50Z] p100767-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 27 (bin 919726) z_max +7.01 min 0 z_min -2.76 chi2/dof 1.14901 chi2_z +431.58 top0.1% 0.25578% top0.5% 1.15209% top1% 2.18797%
[2026-10-07T18:37:50Z] p100767-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00017 largest +6.64 sigma; buckets64 chi2/dof 0.99639 largest +4.40 smallest -4.40
[2026-10-07T18:37:50Z] 6-sigma p100767-attack-f8 items buckets64 against the window density: largest bucket +67.99 sigma, smallest -4.21 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (windowed control): f 0.1% S_f 0.34274% E_f(control) 0.25578% X_f +0.08696% X_f/f +0.8696 -> no hot set
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (windowed control): f 0.5% S_f 1.26980% E_f(control) 1.15209% X_f +0.11771% X_f/f +0.2354 -> no hot set
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (windowed control): f 1.0% S_f 2.32590% E_f(control) 2.18797% X_f +0.13793% X_f/f +0.1379 -> no hot set
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:37:50Z] p100767-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 26 (bin 10438708) z_max +6.65 min 0 z_min -2.76 chi2/dof 0.99974 chi2_z -0.75 top0.1% 0.24260% top0.5% 1.09881% top1% 2.08683%
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.34274% E_f(control) 0.24260% X_f +0.10014% X_f/f +1.0014 -> HOT SET
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.26980% E_f(control) 1.09881% X_f +0.17099% X_f/f +0.3420 -> no hot set
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.32590% E_f(control) 2.08683% X_f +0.23907% X_f/f +0.2391 -> no hot set
[2026-10-07T18:37:50Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T18:37:50Z] ratio p100767-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.3400x / 1.1022x / 1.0630x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 1.4128x / 1.1556x / 1.1146x
[2026-10-07T18:37:50Z] hottest item p100767-attack-f8 (0x000000): 1677 reads (0.0013% of all); predicted source site-instr6:r6:zero:last-writer-mad@4
[2026-10-07T18:37:50Z] program p100767-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T18:37:51Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100159", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/igneum-wt-adv-accept/adv/live", "--validate", "sample"]
[2026-10-07T18:37:51Z] census warps: programs [100159] day 20730 nonces 1000000 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:37:51Z] day 20730: cache filled in 0.65 s, fnv 448274a57f508cbc
[2026-10-07T18:37:54Z] table: 16777216 items derived with their 8 lines in 2.8 s; library comparison sample (0 mismatches)
[2026-10-07T18:37:59Z] program p100159-attack-f8: epoch seed 1d76edc78af5ddea74900f1e005f77ef1b115c69c583ea6f57792e386806aede era seed b659277d9635ccc59ea759fd747241f440d5dc89947f629a2473ccef349c869b id 573d650159a8b04e attempt 3 class mx8-era9e0e4f28+sh256x27 op mix load=16 mulhi=7 xor=7 mul=6 add=5 mad=5 rotl=4 shfl=4 sub=4 or=3 rotr=3; era stride mul 0xa39d49c9 rot 7 interleave [3, 8, 9, 10] windows 5:2:0 10:0:0 16:2:3 17:2:2 23:2:2 26:2:2 40:0:0 42:2:3 45:1:0 47:2:3 49:2:2 56:0:0 59:2:0 60:2:3 61:0:0 62:0:0
[2026-10-07T18:37:59Z] load site instr 5: src r4 win 2 off 0; last base writer shfl at 0; writers back to the last injecting one: shfl@0; shadow writes of r4 per rep: add=5 mad=3 mul=1 mulhi=1 or=2 rotl=3 rotr=2 shfl=4 sub=1 xor=5
[2026-10-07T18:37:59Z] load site instr 10: src r7 win 0 off 0; last base writer add at 6; writers back to the last injecting one: add@6; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:37:59Z] load site instr 16: src r5 win 2 off 3; last base writer xor at 9; writers back to the last injecting one: xor@9; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:37:59Z] load site instr 17: src r1 win 2 off 2; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r1 per rep: add=3 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=4 shfl=3 sub=2 xor=6
[2026-10-07T18:37:59Z] load site instr 23: src r7 win 2 off 2; last base writer load at 16; writers back to the last injecting one: load@16; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:37:59Z] load site instr 26: src r5 win 2 off 2; last base writer xor at 25; writers back to the last injecting one: xor@25; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:37:59Z] load site instr 40: src r1 win 0 off 0; last base writer shfl at 30; writers back to the last injecting one: shfl@30; shadow writes of r1 per rep: add=3 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=4 shfl=3 sub=2 xor=6
[2026-10-07T18:37:59Z] load site instr 42: src r5 win 2 off 3; last base writer mad at 33; writers back to the last injecting one: mad@33; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:37:59Z] load site instr 45: src r7 win 1 off 0; last base writer add at 44; writers back to the last injecting one: add@44; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:37:59Z] load site instr 47: src r2 win 2 off 3; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r2 per rep: add=9 mad=4 mul=3 mulhi=2 or=2 rotl=2 rotr=1 shfl=2 sub=2 xor=4
[2026-10-07T18:37:59Z] load site instr 49: src r5 win 2 off 2; last base writer load at 47; writers back to the last injecting one: load@47; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:37:59Z] load site instr 56: src r1 win 0 off 0; last base writer mad at 51; writers back to the last injecting one: mad@51; shadow writes of r1 per rep: add=3 mad=6 mul=4 mulhi=3 or=4 rotl=3 rotr=4 shfl=3 sub=2 xor=6
[2026-10-07T18:37:59Z] load site instr 59: src r7 win 2 off 0; last base writer add at 50; writers back to the last injecting one: add@50; shadow writes of r7 per rep: add=9 mad=2 mul=1 mulhi=1 or=2 rotl=3 shfl=4 sub=2 xor=9
[2026-10-07T18:37:59Z] load site instr 60: src r2 win 2 off 3; last base writer rotr at 54; writers back to the last injecting one: rotr@54 load@45; shadow writes of r2 per rep: add=9 mad=4 mul=3 mulhi=2 or=2 rotl=2 rotr=1 shfl=2 sub=2 xor=4
[2026-10-07T18:37:59Z] load site instr 61: src r6 win 0 off 0; last base writer load at 56; writers back to the last injecting one: load@56; shadow writes of r6 per rep: add=4 mad=3 mul=1 mulhi=4 rotl=1 rotr=2 shfl=2 sub=3 xor=8
[2026-10-07T18:37:59Z] load site instr 62: src r5 win 0 off 0; last base writer load at 60; writers back to the last injecting one: load@60; shadow writes of r5 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=1 shfl=6 sub=1 xor=5
[2026-10-07T18:37:59Z] window layer: site item windows (first, items) (0x0,2^22) (0x0,2^24) (0xc00000,2^22) (0x800000,2^22) (0x800000,2^22) (0x800000,2^22) (0x0,2^24) (0xc00000,2^22) (0x0,2^23) (0xc00000,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^22) (0xc00000,2^22) (0x0,2^24) (0x0,2^24); expected reads per item by quarter 7.153 3.338 10.014 10.014 (flat uniform 7.629)
[2026-10-07T18:38:02Z] 31250 warps (1000000 nonces) interpreted in 3.8 s (3.873 ms per warp per thread); Epoch::hash_warp agreement on 95 warps: 0 mismatches
[2026-10-07T18:38:02Z] p100159-attack-f8 distinct lines per hash: n 1000000 min 976 p1 1000 median 1023 p99 1024 max 1024 mean 1019.4789
[2026-10-07T18:38:02Z] p100159-attack-f8 distinct items per hash: n 1000000 min 122 p1 125 median 128 p99 128 max 128 mean 127.4503
[2026-10-07T18:38:02Z] p100159-attack-f8 distinct lines per warp: n 31250 min 32340 p1 32411 median 32497 p99 32571 max 32616 mean 32496.3442
[2026-10-07T18:38:02Z] p100159-attack-f8 distinct items per warp: n 31250 min 4059 p1 4068 median 4078 p99 4087 max 4091 mean 4077.8626
[2026-10-07T18:38:02Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:38:02Z] positions: largest hi16-bucket (256 items) share 0.0179% at p23 (iteration 1, site 7, instr 42); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 5)
[2026-10-07T18:38:02Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p9 (site 9, instr 47); saturated sources at one position 0 of 2048 at p0 (site 0, instr 5); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:38:03Z] p100159-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 37 (bin 12582926) z_max +10.63 min 0 z_min -2.76 chi2/dof 2.09764 chi2_z +3179.10 top0.1% 0.30020% top0.5% 1.34002% top1% 2.53830%
[2026-10-07T18:38:03Z] p100159-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.08732 largest 37 (item 0xc0000e) at +8.53 sigma smallest at -3.16; buckets64 chi2/dof 6.13245 largest 1589 (bucket 196608) at +37.45 sigma smallest at -7.46
[2026-10-07T18:38:04Z] p100159-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 30 (bin 9414155) z_max +8.10 min 0 z_min -2.76 chi2/dof 1.98344 chi2_z +2848.35 top0.1% 0.28063% top0.5% 1.26922% top1% 2.41408%
[2026-10-07T18:38:04Z] p100159-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99980 largest +6.38 sigma; buckets64 chi2/dof 0.99973 largest +4.54 smallest -4.49
[2026-10-07T18:38:04Z] 6-sigma p100159-attack-f8 items buckets64 against the window density: largest bucket +37.45 sigma, smallest -7.46 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (windowed control): f 0.1% S_f 0.30020% E_f(control) 0.28063% X_f +0.01957% X_f/f +0.1957 -> no hot set
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (windowed control): f 0.5% S_f 1.34002% E_f(control) 1.26922% X_f +0.07081% X_f/f +0.1416 -> no hot set
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (windowed control): f 1.0% S_f 2.53830% E_f(control) 2.41408% X_f +0.12422% X_f/f +0.1242 -> no hot set
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:38:04Z] p100159-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 26 (bin 8617755) z_max +6.65 min 0 z_min -2.76 chi2/dof 0.99990 chi2_z -0.30 top0.1% 0.24308% top0.5% 1.09931% top1% 2.08730%
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.30020% E_f(control) 0.24308% X_f +0.05712% X_f/f +0.5712 -> no hot set
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.34002% E_f(control) 1.09931% X_f +0.24071% X_f/f +0.4814 -> no hot set
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.53830% E_f(control) 2.08730% X_f +0.45100% X_f/f +0.4510 -> no hot set
[2026-10-07T18:38:04Z] hot-set p100159-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:38:04Z] ratio p100159-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0697x / 1.0558x / 1.0515x (gate 1.2x at 0.1%: within); over the FLAT control 1.2350x / 1.2190x / 1.2161x
[2026-10-07T18:38:04Z] hottest item p100159-attack-f8 (0xc0000e): 37 reads (0.0000% of all); predicted source none
[2026-10-07T18:38:04Z] program p100159-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED

View file

@ -0,0 +1,374 @@
lease: 0 of 16 pool cores free (56 leased), a higher class waits ahead; waiting
lease: holding 32 pool cores (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, waited 201 s, class adv): adv-accept live-newlow5-16m
[2026-10-07T20:57:43Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "122960", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T20:57:43Z] census warps: programs [122960] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T20:57:44Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T20:57:46Z] table: 16777216 items derived with their 8 lines in 2.0 s; library comparison sample (0 mismatches)
[2026-10-07T20:57:51Z] program p122960-attack-f8: epoch seed ea9ceabc379c603e51dc7f4123fb66f8d9d7dda78234fc331f9819fc3e0c8aae era seed b39ca133c146cf93f8ec0348f7f43e1f34e91510109d4790bf7073bef2903a0c id 4be7393ab6c84802 attempt 0 class mx8-era5800f15a+sh256x27 op mix load=16 rotl=8 shfl=8 add=6 mad=6 or=6 rotr=5 mulhi=4 sub=2 xor=2 mul=1; era stride mul 0x776df947 rot 10 interleave [1, 3, 12, 14] windows 2:2:1 4:0:0 5:0:0 7:2:2 10:1:1 15:0:0 16:0:0 22:0:0 23:0:0 37:2:2 40:1:0 41:1:1 45:0:0 48:1:0 54:2:2 60:2:2
[2026-10-07T20:57:51Z] load site instr 2: src r2 win 2 off 1; last base writer load at 60; writers back to the last injecting one: load@60; shadow writes of r2 per rep: add=7 mad=1 mul=3 mulhi=4 or=3 rotl=2 rotr=2 shfl=2 sub=3 xor=9
[2026-10-07T20:57:51Z] load site instr 4: src r4 win 0 off 0; last base writer shfl at 3; writers back to the last injecting one: shfl@3; shadow writes of r4 per rep: add=6 mad=4 mul=3 mulhi=5 or=3 rotl=2 rotr=4 shfl=3 sub=1 xor=3
[2026-10-07T20:57:51Z] load site instr 5: src r7 win 0 off 0; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r7 per rep: add=4 mad=4 mul=6 mulhi=4 rotl=5 rotr=6 shfl=8 sub=2 xor=3
[2026-10-07T20:57:51Z] load site instr 7: src r7 win 2 off 2; last base writer shfl at 6; writers back to the last injecting one: shfl@6; shadow writes of r7 per rep: add=4 mad=4 mul=6 mulhi=4 rotl=5 rotr=6 shfl=8 sub=2 xor=3
[2026-10-07T20:57:51Z] load site instr 10: src r0 win 1 off 1; last base writer load at 2; writers back to the last injecting one: load@2; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=1 rotl=1 rotr=6 shfl=3 sub=5 xor=2
[2026-10-07T20:57:51Z] load site instr 15: src r3 win 0 off 0; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r3 per rep: add=4 mad=1 mul=5 mulhi=3 or=1 rotl=1 rotr=4 shfl=4 sub=2 xor=6
[2026-10-07T20:57:51Z] load site instr 16: src r7 win 0 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r7 per rep: add=4 mad=4 mul=6 mulhi=4 rotl=5 rotr=6 shfl=8 sub=2 xor=3
[2026-10-07T20:57:51Z] load site instr 22: src r0 win 0 off 0; last base writer rotl at 14; writers back to the last injecting one: rotl@14 load@2; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=1 rotl=1 rotr=6 shfl=3 sub=5 xor=2
[2026-10-07T20:57:51Z] load site instr 23: src r2 win 0 off 0; last base writer load at 22; writers back to the last injecting one: load@22; shadow writes of r2 per rep: add=7 mad=1 mul=3 mulhi=4 or=3 rotl=2 rotr=2 shfl=2 sub=3 xor=9
[2026-10-07T20:57:51Z] load site instr 37: src r4 win 2 off 2; last base writer rotr at 31; writers back to the last injecting one: rotr@31 mad@25; shadow writes of r4 per rep: add=6 mad=4 mul=3 mulhi=5 or=3 rotl=2 rotr=4 shfl=3 sub=1 xor=3
[2026-10-07T20:57:51Z] load site instr 40: src r1 win 1 off 0; last base writer load at 37; writers back to the last injecting one: load@37; shadow writes of r1 per rep: add=1 mad=3 mul=2 rotl=5 rotr=1 shfl=3 sub=1 xor=5
[2026-10-07T20:57:51Z] load site instr 41: src r5 win 1 off 1; last base writer shfl at 39; writers back to the last injecting one: shfl@39; shadow writes of r5 per rep: add=5 mad=3 mul=6 mulhi=2 or=3 rotl=3 shfl=3 sub=2 xor=2
[2026-10-07T20:57:51Z] load site instr 45: src r6 win 0 off 0; last base writer xor at 36; writers back to the last injecting one: xor@36; shadow writes of r6 per rep: add=5 mad=3 mul=3 mulhi=2 or=2 rotl=3 rotr=3 shfl=5 sub=1 xor=4
[2026-10-07T20:57:51Z] load site instr 48: src r0 win 1 off 0; last base writer load at 40; writers back to the last injecting one: load@40; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=1 rotl=1 rotr=6 shfl=3 sub=5 xor=2
[2026-10-07T20:57:51Z] load site instr 54: src r3 win 2 off 2; last base writer rotl at 53; writers back to the last injecting one: rotl@53 add@44; shadow writes of r3 per rep: add=4 mad=1 mul=5 mulhi=3 or=1 rotl=1 rotr=4 shfl=4 sub=2 xor=6
[2026-10-07T20:57:51Z] load site instr 60: src r3 win 2 off 2; last base writer shfl at 55; writers back to the last injecting one: shfl@55; shadow writes of r3 per rep: add=4 mad=1 mul=5 mulhi=3 or=1 rotl=1 rotr=4 shfl=4 sub=2 xor=6
[2026-10-07T20:57:51Z] window layer: site item windows (first, items) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^22) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x800000,2^22) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x800000,2^22); expected reads per item by quarter 88.000 120.000 216.000 88.000 (flat uniform 128.000)
[2026-10-07T20:58:35Z] 524288 warps (16777216 nonces) interpreted in 44.6 s (2.723 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T20:58:35Z] p122960-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8675
[2026-10-07T20:58:35Z] p122960-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9991
[2026-10-07T20:58:35Z] p122960-attack-f8 distinct lines per warp: n 524288 min 32541 p1 32598 median 32634 p99 32663 max 32689 mean 32633.0066
[2026-10-07T20:58:35Z] p122960-attack-f8 distinct items per warp: n 524288 min 4087 p1 4092 median 4095 p99 4096 max 4096 mean 4095.0767
[2026-10-07T20:58:35Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T20:58:35Z] positions: largest hi16-bucket (256 items) share 0.8739% at p28 (iteration 1, site 12, instr 45); windowed expectation 0.0015%; largest saturated-source share 0.3553% at p124 (site 12, instr 45)
[2026-10-07T20:58:35Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 11 of 2048 at p60 (site 12, instr 45); saturated sources at one position 11 of 2048 at p60 (site 12, instr 45); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T20:58:36Z] p122960-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 475616 (bin 8498568) z_max +42027.60 min 39 z_min -7.87 chi2/dof 135.14394 chi2_z +388522.35 top0.1% 0.31440% top0.5% 1.09829% top1% 2.05258%
[2026-10-07T20:58:36Z] p122960-attack-f8 item histogram against the window density: full 2^24 chi2/dof 69.77985 largest 475616 (item 0x81ad88) at +32346.87 sigma smallest at -5.22; buckets64 chi2/dof 145.74002 largest 638475 (bucket 132790) at +5312.76 sigma smallest at -4.95
[2026-10-07T20:58:38Z] p122960-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 292 (bin 9145383) z_max +14.50 min 43 z_min -7.51 chi2/dof 22.49852 chi2_z +62266.36 top0.1% 0.20373% top0.5% 0.98589% top1% 1.93960%
[2026-10-07T20:58:38Z] p122960-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99999 largest +5.48 sigma; buckets64 chi2/dof 1.00335 largest +4.68 smallest -4.50
[2026-10-07T20:58:38Z] 6-sigma p122960-attack-f8 items buckets64 against the window density: largest bucket +5312.76 sigma, smallest -4.95 -> FLAGGED (beyond 6 sigma)
[2026-10-07T20:58:38Z] hot-set p122960-attack-f8 items (windowed control): f 0.1% S_f 0.31440% E_f(control) 0.20373% X_f +0.11068% X_f/f +1.1068 -> HOT SET
[2026-10-07T20:58:38Z] hot-set p122960-attack-f8 items (windowed control): f 0.5% S_f 1.09829% E_f(control) 0.98589% X_f +0.11240% X_f/f +0.2248 -> no hot set
[2026-10-07T20:58:38Z] hot-set p122960-attack-f8 items (windowed control): f 1.0% S_f 2.05258% E_f(control) 1.93960% X_f +0.11298% X_f/f +0.1130 -> no hot set
[2026-10-07T20:58:38Z] hot-set p122960-attack-f8 items (windowed control): verdict FLAGGED
[2026-10-07T20:58:40Z] p122960-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 197 (bin 6571806) z_max +6.10 min 71 z_min -5.04 chi2/dof 0.99983 chi2_z -0.50 top0.1% 0.13103% top0.5% 0.63247% top1% 1.24337%
[2026-10-07T20:58:40Z] hot-set p122960-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.31440% E_f(control) 0.13103% X_f +0.18338% X_f/f +1.8338 -> HOT SET
[2026-10-07T20:58:40Z] hot-set p122960-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.09829% E_f(control) 0.63247% X_f +0.46581% X_f/f +0.9316 -> no hot set
[2026-10-07T20:58:40Z] hot-set p122960-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.05258% E_f(control) 1.24337% X_f +0.80922% X_f/f +0.8092 -> no hot set
[2026-10-07T20:58:40Z] hot-set p122960-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T20:58:40Z] ratio p122960-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.5433x / 1.1140x / 1.0583x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 2.3995x / 1.7365x / 1.6508x
[2026-10-07T20:58:42Z] attribution: hot threshold count >= 257 marks 19159 items (0.1142% of items) holding 7363919 reads (0.3429% of reads); top 8 items t=0x81ad88:475616 t=0x81ad08:32144 t=0x035a12:31769 t=0x850f9a:22199 t=0x81adf8:21238 t=0x81adf4:19192 t=0x81ad5e:19180 t=0x81adbd:18513
[2026-10-07T20:59:02Z] attribution: reads on hot items per position (flat expectation 0.1142% of each position's 16777216 reads); the 24 largest: p28(it1 s12)=2.173% p92(it5 s12)=2.172% p108(it6 s12)=2.171% p76(it4 s12)=2.170% p44(it2 s12)=2.170% p124(it7 s12)=2.169% p60(it3 s12)=2.166% p12(it0 s12)=2.165% p121(it7 s9)=0.498% p9(it0 s9)=0.497% p57(it3 s9)=0.496% p126(it7 s14)=0.496% p83(it5 s3)=0.496% p94(it5 s14)=0.495% p3(it0 s3)=0.495% p79(it4 s15)=0.495% p115(it7 s3)=0.495% p63(it3 s15)=0.495% p89(it5 s9)=0.494% p15(it0 s15)=0.494% p73(it4 s9)=0.494% p47(it2 s15)=0.494% p14(it0 s14)=0.494% p41(it2 s9)=0.494%
[2026-10-07T20:59:02Z] attribution: hot reads by iteration it0=0.343% it1=0.343% it2=0.343% it3=0.343% it4=0.343% it5=0.343% it6=0.342% it7=0.343% ; by site s0=0.013% s1=0.133% s2=0.133% s3=0.493% s4=0.252% s5=0.133% s6=0.133% s7=0.133% s8=0.133% s9=0.495% s10=0.014% s11=0.252% s12=2.170% s13=0.014% s14=0.492% s15=0.493%
[2026-10-07T20:59:02Z] site 0 (instr 2, src r2, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0126% (flat expectation 0.1142%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T20:59:02Z] site 1 (instr 4, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1327% (flat expectation 0.1142%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T20:59:02Z] site 2 (instr 5, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1333% (flat expectation 0.1142%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T20:59:02Z] site 3 (instr 7, src r7, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.4932% (flat expectation 0.1142%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T20:59:02Z] site 4 (instr 10, src r0, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2522% (flat expectation 0.1142%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T20:59:02Z] site 5 (instr 15, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1334% (flat expectation 0.1142%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T20:59:02Z] site 6 (instr 16, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1331% (flat expectation 0.1142%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T20:59:02Z] site 7 (instr 22, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1332% (flat expectation 0.1142%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T20:59:02Z] site 8 (instr 23, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1329% (flat expectation 0.1142%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T20:59:02Z] site 9 (instr 37, src r4, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.4946% (flat expectation 0.1142%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T20:59:02Z] site 10 (instr 40, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0137% (flat expectation 0.1142%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T20:59:02Z] site 11 (instr 41, src r5, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2523% (flat expectation 0.1142%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T20:59:02Z] site 12 (instr 45, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 2.1696% (flat expectation 0.1142%); index entropy 15.897 bits of 16 uniform-on-window; saturated source 0.3532%; largest 256-item bucket 0.8709% (window expectation 0.0015%)
[2026-10-07T20:59:02Z] site 13 (instr 48, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0139% (flat expectation 0.1142%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T20:59:02Z] site 14 (instr 54, src r3, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.4924% (flat expectation 0.1142%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T20:59:02Z] site 15 (instr 60, src r3, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.4934% (flat expectation 0.1142%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T20:59:02Z] attribution: item 0x81ad88 (475616 reads) read from positions p124(it7 s12)x59781 p28(it1 s12)x59756 p108(it6 s12)x59598 p44(it2 s12)x59437 p92(it5 s12)x59413 p60(it3 s12)x59303 p76(it4 s12)x59069 p12(it0 s12)x59026 p110(it6 s14)x12 p63(it3 s15)x10 p41(it2 s9)x8 p67(it4 s3)x8
[2026-10-07T20:59:02Z] attribution: item 0x81ad08 (32144 reads) read from positions p28(it1 s12)x4082 p92(it5 s12)x4031 p60(it3 s12)x4029 p108(it6 s12)x3989 p124(it7 s12)x3988 p44(it2 s12)x3967 p76(it4 s12)x3941 p12(it0 s12)x3911 p25(it1 s9)x7 p111(it6 s15)x7 p14(it0 s14)x6 p15(it0 s15)x6
[2026-10-07T20:59:02Z] attribution: item 0x035a12 (31769 reads) read from positions p76(it4 s12)x4063 p92(it5 s12)x4027 p44(it2 s12)x3968 p124(it7 s12)x3955 p60(it3 s12)x3950 p12(it0 s12)x3915 p108(it6 s12)x3912 p28(it1 s12)x3901 p93(it5 s13)x4 p13(it0 s13)x3 p17(it1 s1)x3 p22(it1 s6)x3
[2026-10-07T20:59:02Z] attribution: item 0x850f9a (22199 reads) read from positions p108(it6 s12)x2824 p92(it5 s12)x2800 p76(it4 s12)x2772 p60(it3 s12)x2745 p124(it7 s12)x2742 p44(it2 s12)x2738 p28(it1 s12)x2719 p12(it0 s12)x2653 p126(it7 s14)x7 p95(it5 s15)x7 p110(it6 s14)x7 p9(it0 s9)x6
[2026-10-07T20:59:02Z] attribution: item 0x81adf8 (21238 reads) read from positions p92(it5 s12)x2666 p44(it2 s12)x2657 p76(it4 s12)x2648 p12(it0 s12)x2629 p60(it3 s12)x2629 p108(it6 s12)x2622 p28(it1 s12)x2592 p124(it7 s12)x2574 p83(it5 s3)x9 p95(it5 s15)x9 p19(it1 s3)x7 p30(it1 s14)x7
[2026-10-07T20:59:02Z] attribution: item 0x81adf4 (19192 reads) read from positions p12(it0 s12)x2431 p76(it4 s12)x2423 p108(it6 s12)x2418 p60(it3 s12)x2371 p124(it7 s12)x2361 p92(it5 s12)x2342 p28(it1 s12)x2326 p44(it2 s12)x2312 p9(it0 s9)x7 p62(it3 s14)x7 p79(it4 s15)x7 p3(it0 s3)x6
[2026-10-07T20:59:02Z] attribution: item 0x81ad5e (19180 reads) read from positions p76(it4 s12)x2420 p124(it7 s12)x2417 p44(it2 s12)x2413 p92(it5 s12)x2381 p12(it0 s12)x2357 p28(it1 s12)x2333 p108(it6 s12)x2331 p60(it3 s12)x2323 p79(it4 s15)x11 p19(it1 s3)x7 p94(it5 s14)x7 p3(it0 s3)x6
[2026-10-07T20:59:02Z] attribution: item 0x81adbd (18513 reads) read from positions p92(it5 s12)x2380 p60(it3 s12)x2326 p108(it6 s12)x2297 p28(it1 s12)x2295 p12(it0 s12)x2287 p76(it4 s12)x2254 p44(it2 s12)x2239 p124(it7 s12)x2216 p99(it6 s3)x9 p111(it6 s15)x9 p94(it5 s14)x8 p110(it6 s14)x8
[2026-10-07T20:59:02Z] hottest item p122960-attack-f8 (0x81ad88): 475616 reads (0.0221% of all); predicted source site-instr4:r4:all-ones:last-writer-shfl@3
[2026-10-07T20:59:02Z] program p122960-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set FLAGGED; verdict FLAGGED
[2026-10-07T20:59:02Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "130488", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T20:59:02Z] census warps: programs [130488] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T20:59:03Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T20:59:05Z] table: 16777216 items derived with their 8 lines in 2.0 s; library comparison sample (0 mismatches)
[2026-10-07T20:59:13Z] program p130488-attack-f8: epoch seed ff221ab8d8c3c8813d45138fda891f9a61900a8fb4a219cf05e40c904fda1994 era seed 250fe2f8dbfcb94d9d18fbf64da8a883683144176722a6a05c95b9508eefc755 id 24d5e6511a1b83dc attempt 6 class mx8-eraaa75d178+sh256x27 op mix load=16 add=12 xor=8 mulhi=7 or=5 sub=5 mul=4 rotl=3 shfl=3 mad=1; era stride mul 0x0df943f5 rot 1 interleave [0, 4, 5, 11] windows 15:0:0 16:0:0 17:2:3 24:2:3 29:1:1 32:0:0 36:1:1 41:1:0 44:0:0 49:1:1 52:2:2 54:2:3 56:1:0 57:1:1 59:1:0 61:0:0
[2026-10-07T20:59:13Z] load site instr 15: src r7 win 0 off 0; last base writer xor at 10; writers back to the last injecting one: xor@10; shadow writes of r7 per rep: add=10 mad=4 mul=4 mulhi=1 or=3 rotl=6 rotr=4 shfl=2 xor=5
[2026-10-07T20:59:13Z] load site instr 16: src r1 win 0 off 0; last base writer load at 15; writers back to the last injecting one: load@15; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=1 rotl=1 rotr=3 shfl=3 sub=2 xor=2
[2026-10-07T20:59:13Z] load site instr 17: src r2 win 2 off 3; last base writer xor at 12; writers back to the last injecting one: xor@12; shadow writes of r2 per rep: add=10 mad=3 mul=2 mulhi=3 or=1 rotl=2 rotr=3 shfl=2 sub=1 xor=4
[2026-10-07T20:59:13Z] load site instr 24: src r6 win 2 off 3; last base writer add at 19; writers back to the last injecting one: add@19; shadow writes of r6 per rep: add=3 mad=3 mul=4 mulhi=1 rotl=3 rotr=1 shfl=5 sub=4 xor=7
[2026-10-07T20:59:13Z] load site instr 29: src r1 win 1 off 1; last base writer load at 24; writers back to the last injecting one: load@24; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=1 rotl=1 rotr=3 shfl=3 sub=2 xor=2
[2026-10-07T20:59:13Z] load site instr 32: src r2 win 0 off 0; last base writer shfl at 26; writers back to the last injecting one: shfl@26; shadow writes of r2 per rep: add=10 mad=3 mul=2 mulhi=3 or=1 rotl=2 rotr=3 shfl=2 sub=1 xor=4
[2026-10-07T20:59:13Z] load site instr 36: src r7 win 1 off 1; last base writer xor at 31; writers back to the last injecting one: xor@31; shadow writes of r7 per rep: add=10 mad=4 mul=4 mulhi=1 or=3 rotl=6 rotr=4 shfl=2 xor=5
[2026-10-07T20:59:13Z] load site instr 41: src r1 win 1 off 0; last base writer load at 36; writers back to the last injecting one: load@36; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=1 rotl=1 rotr=3 shfl=3 sub=2 xor=2
[2026-10-07T20:59:13Z] load site instr 44: src r2 win 0 off 0; last base writer load at 41; writers back to the last injecting one: load@41; shadow writes of r2 per rep: add=10 mad=3 mul=2 mulhi=3 or=1 rotl=2 rotr=3 shfl=2 sub=1 xor=4
[2026-10-07T20:59:13Z] load site instr 49: src r3 win 1 off 1; last base writer xor at 45; writers back to the last injecting one: xor@45; shadow writes of r3 per rep: add=3 mad=4 mul=3 mulhi=5 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=6
[2026-10-07T20:59:13Z] load site instr 52: src r1 win 2 off 2; last base writer add at 43; writers back to the last injecting one: add@43; shadow writes of r1 per rep: add=9 mad=1 mul=2 mulhi=4 or=1 rotl=1 rotr=3 shfl=3 sub=2 xor=2
[2026-10-07T20:59:13Z] load site instr 54: src r7 win 2 off 3; last base writer add at 46; writers back to the last injecting one: add@46; shadow writes of r7 per rep: add=10 mad=4 mul=4 mulhi=1 or=3 rotl=6 rotr=4 shfl=2 xor=5
[2026-10-07T20:59:13Z] load site instr 56: src r0 win 1 off 0; last base writer load at 52; writers back to the last injecting one: load@52; shadow writes of r0 per rep: add=6 mad=5 mul=3 mulhi=5 or=1 rotl=4 rotr=1 shfl=5 sub=3 xor=4
[2026-10-07T20:59:13Z] load site instr 57: src r4 win 1 off 1; last base writer sub at 53; writers back to the last injecting one: sub@53; shadow writes of r4 per rep: add=3 mad=4 mul=3 mulhi=4 rotl=5 rotr=3 shfl=4 xor=1
[2026-10-07T20:59:13Z] load site instr 59: src r6 win 1 off 0; last base writer load at 57; writers back to the last injecting one: load@57; shadow writes of r6 per rep: add=3 mad=3 mul=4 mulhi=1 rotl=3 rotr=1 shfl=5 sub=4 xor=7
[2026-10-07T20:59:13Z] load site instr 61: src r3 win 0 off 0; last base writer xor at 60; writers back to the last injecting one: xor@60; shadow writes of r3 per rep: add=3 mad=4 mul=3 mulhi=5 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=6
[2026-10-07T20:59:13Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^24) (0xc00000,2^22) (0xc00000,2^22) (0x800000,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x800000,2^22) (0xc00000,2^22) (0x0,2^23) (0x800000,2^23) (0x0,2^23) (0x0,2^24); expected reads per item by quarter 88.000 88.000 136.000 200.000 (flat uniform 128.000)
[2026-10-07T20:59:59Z] 524288 warps (16777216 nonces) interpreted in 45.7 s (2.787 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T20:59:59Z] p130488-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8710
[2026-10-07T20:59:59Z] p130488-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T20:59:59Z] p130488-attack-f8 distinct lines per warp: n 524288 min 32500 p1 32555 median 32606 p99 32648 max 32686 mean 32605.4482
[2026-10-07T20:59:59Z] p130488-attack-f8 distinct items per warp: n 524288 min 4079 p1 4086 median 4092 p99 4096 max 4096 mean 4091.6029
[2026-10-07T20:59:59Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T20:59:59Z] positions: largest hi16-bucket (256 items) share 0.0071% at p90 (iteration 5, site 10, instr 52); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 15)
[2026-10-07T20:59:59Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p10 (site 10, instr 52); saturated sources at one position 0 of 2048 at p0 (site 0, instr 15); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T20:59:59Z] p130488-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 276 (bin 16522190) z_max +13.08 min 44 z_min -7.42 chi2/dof 17.50106 chi2_z +47792.18 top0.1% 0.18999% top0.5% 0.91828% top1% 1.80543%
[2026-10-07T20:59:59Z] p130488-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00263 largest 144 (item 0x3b2826) at +5.97 sigma smallest at -4.69; buckets64 chi2/dof 1.00404 largest 9109 (bucket 136909) at +4.34 sigma smallest at -4.44
[2026-10-07T21:00:02Z] p130488-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 275 (bin 15837185) z_max +12.99 min 43 z_min -7.51 chi2/dof 17.49764 chi2_z +47782.27 top0.1% 0.18994% top0.5% 0.91812% top1% 1.80514%
[2026-10-07T21:00:02Z] p130488-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00011 largest +5.76 sigma; buckets64 chi2/dof 0.99581 largest +4.60 smallest -4.00
[2026-10-07T21:00:02Z] 6-sigma p130488-attack-f8 items buckets64 against the window density: largest bucket +4.34 sigma, smallest -4.44 -> within 6 sigma
[2026-10-07T21:00:02Z] hot-set p130488-attack-f8 items (windowed control): f 0.1% S_f 0.18999% E_f(control) 0.18994% X_f +0.00005% X_f/f +0.0005 -> no hot set
[2026-10-07T21:00:02Z] hot-set p130488-attack-f8 items (windowed control): f 0.5% S_f 0.91828% E_f(control) 0.91812% X_f +0.00016% X_f/f +0.0003 -> no hot set
[2026-10-07T21:00:02Z] hot-set p130488-attack-f8 items (windowed control): f 1.0% S_f 1.80543% E_f(control) 1.80514% X_f +0.00028% X_f/f +0.0003 -> no hot set
[2026-10-07T21:00:02Z] hot-set p130488-attack-f8 items (windowed control): verdict clear
[2026-10-07T21:00:05Z] p130488-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 195 (bin 67901) z_max +5.92 min 71 z_min -5.04 chi2/dof 1.00005 chi2_z +0.14 top0.1% 0.13113% top0.5% 0.63261% top1% 1.24354%
[2026-10-07T21:00:05Z] hot-set p130488-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.18999% E_f(control) 0.13113% X_f +0.05886% X_f/f +0.5886 -> no hot set
[2026-10-07T21:00:05Z] hot-set p130488-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.91828% E_f(control) 0.63261% X_f +0.28567% X_f/f +0.5713 -> no hot set
[2026-10-07T21:00:05Z] hot-set p130488-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.80543% E_f(control) 1.24354% X_f +0.56189% X_f/f +0.5619 -> no hot set
[2026-10-07T21:00:05Z] hot-set p130488-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T21:00:05Z] ratio p130488-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0002x / 1.0002x / 1.0002x (gate 1.2x at 0.1%: within); over the FLAT control 1.4488x / 1.4516x / 1.4518x
[2026-10-07T21:00:06Z] attribution: hot threshold count >= 239 marks 16888 items (0.1007% of items) holding 4106535 reads (0.1912% of reads); top 8 items t=0xfc1bce:276 t=0xf0c1b7:273 t=0xdee92b:272 t=0xc326bb:271 t=0xed6a44:270 t=0xe59787:270 t=0xd21d06:270 t=0xfc3d10:269
[2026-10-07T21:00:30Z] attribution: reads on hot items per position (flat expectation 0.1007% of each position's 16777216 reads); the 24 largest: p35(it2 s3)=0.493% p67(it4 s3)=0.492% p83(it5 s3)=0.492% p18(it1 s2)=0.491% p114(it7 s2)=0.491% p2(it0 s2)=0.490% p75(it4 s11)=0.490% p51(it3 s3)=0.490% p99(it6 s3)=0.490% p11(it0 s11)=0.489% p82(it5 s2)=0.489% p43(it2 s11)=0.489% p3(it0 s3)=0.489% p34(it2 s2)=0.489% p123(it7 s11)=0.489% p66(it4 s2)=0.488% p115(it7 s3)=0.488% p59(it3 s11)=0.488% p91(it5 s11)=0.488% p98(it6 s2)=0.488% p50(it3 s2)=0.488% p19(it1 s3)=0.486% p27(it1 s11)=0.486% p107(it6 s11)=0.486%
[2026-10-07T21:00:30Z] attribution: hot reads by iteration it0=0.191% it1=0.191% it2=0.191% it3=0.191% it4=0.192% it5=0.191% it6=0.191% it7=0.192% ; by site s0=0.123% s1=0.123% s2=0.489% s3=0.490% s4=0.245% s5=0.123% s6=0.245% s7=0.000% s8=0.122% s9=0.245% s10=0.000% s11=0.488% s12=0.000% s13=0.245% s14=0.000% s15=0.122%
[2026-10-07T21:00:30Z] site 0 (instr 15, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1230% (flat expectation 0.1007%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:00:30Z] site 1 (instr 16, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1226% (flat expectation 0.1007%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:00:30Z] site 2 (instr 17, src r2, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.4893% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:00:30Z] site 3 (instr 24, src r6, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.4901% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:00:30Z] site 4 (instr 29, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2447% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:00:30Z] site 5 (instr 32, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1227% (flat expectation 0.1007%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:00:30Z] site 6 (instr 36, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2447% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:00:30Z] site 7 (instr 41, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:00:30Z] site 8 (instr 44, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1220% (flat expectation 0.1007%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:00:30Z] site 9 (instr 49, src r3, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2447% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:00:30Z] site 10 (instr 52, src r1, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:00:30Z] site 11 (instr 54, src r7, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.4882% (flat expectation 0.1007%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:00:30Z] site 12 (instr 56, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:00:30Z] site 13 (instr 57, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2450% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:00:30Z] site 14 (instr 59, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1007%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:00:30Z] site 15 (instr 61, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1225% (flat expectation 0.1007%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:00:30Z] attribution: item 0xfc1bce (276 reads) read from positions p2(it0 s2)x11 p52(it3 s4)x9 p66(it4 s2)x9 p75(it4 s11)x8 p86(it5 s6)x8 p99(it6 s3)x8 p67(it4 s3)x7 p18(it1 s2)x6 p43(it2 s11)x6 p123(it7 s11)x6 p3(it0 s3)x5 p9(it0 s9)x5
[2026-10-07T21:00:30Z] attribution: item 0xf0c1b7 (273 reads) read from positions p50(it3 s2)x14 p75(it4 s11)x13 p2(it0 s2)x8 p66(it4 s2)x8 p91(it5 s11)x8 p100(it6 s4)x8 p114(it7 s2)x8 p3(it0 s3)x6 p36(it2 s4)x6 p83(it5 s3)x6 p107(it6 s11)x6 p115(it7 s3)x5
[2026-10-07T21:00:30Z] attribution: item 0xdee92b (272 reads) read from positions p59(it3 s11)x11 p35(it2 s3)x9 p19(it1 s3)x7 p115(it7 s3)x7 p125(it7 s13)x6 p18(it1 s2)x6 p43(it2 s11)x6 p52(it3 s4)x6 p75(it4 s11)x6 p89(it5 s9)x6 p2(it0 s2)x5 p116(it7 s4)x5
[2026-10-07T21:00:30Z] attribution: item 0xc326bb (271 reads) read from positions p43(it2 s11)x12 p51(it3 s3)x12 p35(it2 s3)x8 p59(it3 s11)x8 p19(it1 s3)x7 p50(it3 s2)x7 p3(it0 s3)x6 p18(it1 s2)x6 p67(it4 s3)x6 p98(it6 s2)x6 p99(it6 s3)x6 p114(it7 s2)x6
[2026-10-07T21:00:30Z] attribution: item 0xed6a44 (270 reads) read from positions p11(it0 s11)x9 p27(it1 s11)x9 p51(it3 s3)x8 p2(it0 s2)x7 p115(it7 s3)x7 p54(it3 s6)x6 p73(it4 s9)x6 p82(it5 s2)x6 p83(it5 s3)x6 p19(it1 s3)x5 p50(it3 s2)x5 p63(it3 s15)x5
[2026-10-07T21:00:30Z] attribution: item 0xe59787 (270 reads) read from positions p59(it3 s11)x11 p123(it7 s11)x10 p2(it0 s2)x10 p99(it6 s3)x10 p34(it2 s2)x8 p50(it3 s2)x8 p11(it0 s11)x7 p16(it1 s0)x7 p51(it3 s3)x7 p91(it5 s11)x7 p114(it7 s2)x7 p27(it1 s11)x6
[2026-10-07T21:00:30Z] attribution: item 0xd21d06 (270 reads) read from positions p18(it1 s2)x11 p83(it5 s3)x9 p43(it2 s11)x8 p68(it4 s4)x8 p107(it6 s11)x8 p123(it7 s11)x7 p27(it1 s11)x7 p36(it2 s4)x7 p52(it3 s4)x7 p66(it4 s2)x7 p115(it7 s3)x7 p3(it0 s3)x6
[2026-10-07T21:00:30Z] attribution: item 0xfc3d10 (269 reads) read from positions p2(it0 s2)x9 p43(it2 s11)x9 p61(it3 s13)x9 p27(it1 s11)x8 p34(it2 s2)x7 p66(it4 s2)x7 p19(it1 s3)x6 p49(it3 s1)x6 p82(it5 s2)x6 p98(it6 s2)x6 p99(it6 s3)x6 p114(it7 s2)x6
[2026-10-07T21:00:30Z] hottest item p130488-attack-f8 (0xfc1bce): 276 reads (0.0000% of all); predicted source none
[2026-10-07T21:00:30Z] program p130488-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T21:00:30Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "19921", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T21:00:30Z] census warps: programs [19921] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T21:00:31Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T21:00:33Z] table: 16777216 items derived with their 8 lines in 2.1 s; library comparison sample (0 mismatches)
[2026-10-07T21:00:37Z] program p19921-attack-f8: epoch seed 4064f211c09530073114d71d296527fc19cb2054f647038460c99209954cd4b2 era seed 57aa859f067823f0aedc6775bf7731caeb7e07903e24bc981a800af1b172e0f6 id fe35af21bc43a4cc attempt 7 class mx8-era551f20b4+sh256x27 op mix load=16 shfl=10 add=9 xor=7 mad=4 or=4 rotl=4 rotr=4 sub=3 mulhi=2 mul=1; era stride mul 0x059671ed rot 4 interleave [0, 5, 10, 14] windows 2:1:0 4:0:0 10:0:0 17:0:0 24:0:0 28:0:0 29:0:0 34:1:1 35:0:0 39:1:0 44:1:0 49:1:0 50:2:0 55:1:1 57:2:1 63:2:0
[2026-10-07T21:00:37Z] load site instr 2: src r0 win 1 off 0; last base writer mad at 0; writers back to the last injecting one: mad@0; shadow writes of r0 per rep: add=3 mad=2 mul=3 mulhi=5 rotl=5 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T21:00:37Z] load site instr 4: src r7 win 0 off 0; last base writer load at 2; writers back to the last injecting one: load@2; shadow writes of r7 per rep: add=2 mad=5 mul=4 mulhi=1 or=2 rotl=1 rotr=4 shfl=5 sub=3 xor=2
[2026-10-07T21:00:37Z] load site instr 10: src r1 win 0 off 0; last base writer mad at 6; writers back to the last injecting one: mad@6; shadow writes of r1 per rep: add=6 mad=3 mul=3 or=2 rotl=2 rotr=2 shfl=4 sub=3 xor=3
[2026-10-07T21:00:37Z] load site instr 17: src r3 win 0 off 0; last base writer add at 7; writers back to the last injecting one: add@7; shadow writes of r3 per rep: add=4 mad=2 mul=4 mulhi=4 or=2 rotl=3 rotr=3 shfl=6 sub=1 xor=6
[2026-10-07T21:00:37Z] load site instr 24: src r2 win 0 off 0; last base writer shfl at 23; writers back to the last injecting one: shfl@23; shadow writes of r2 per rep: add=6 mad=4 mul=1 mulhi=3 or=2 rotl=1 rotr=4 sub=1 xor=9
[2026-10-07T21:00:37Z] load site instr 28: src r3 win 0 off 0; last base writer sub at 26; writers back to the last injecting one: sub@26; shadow writes of r3 per rep: add=4 mad=2 mul=4 mulhi=4 or=2 rotl=3 rotr=3 shfl=6 sub=1 xor=6
[2026-10-07T21:00:37Z] load site instr 29: src r7 win 0 off 0; last base writer load at 24; writers back to the last injecting one: load@24; shadow writes of r7 per rep: add=2 mad=5 mul=4 mulhi=1 or=2 rotl=1 rotr=4 shfl=5 sub=3 xor=2
[2026-10-07T21:00:37Z] load site instr 34: src r1 win 1 off 1; last base writer add at 33; writers back to the last injecting one: add@33; shadow writes of r1 per rep: add=6 mad=3 mul=3 or=2 rotl=2 rotr=2 shfl=4 sub=3 xor=3
[2026-10-07T21:00:37Z] load site instr 35: src r7 win 0 off 0; last base writer shfl at 30; writers back to the last injecting one: shfl@30; shadow writes of r7 per rep: add=2 mad=5 mul=4 mulhi=1 or=2 rotl=1 rotr=4 shfl=5 sub=3 xor=2
[2026-10-07T21:00:37Z] load site instr 39: src r5 win 1 off 0; last base writer xor at 27; writers back to the last injecting one: xor@27; shadow writes of r5 per rep: add=8 mul=7 mulhi=4 or=2 shfl=5 sub=3 xor=5
[2026-10-07T21:00:37Z] load site instr 44: src r2 win 1 off 0; last base writer shfl at 42; writers back to the last injecting one: shfl@42; shadow writes of r2 per rep: add=6 mad=4 mul=1 mulhi=3 or=2 rotl=1 rotr=4 sub=1 xor=9
[2026-10-07T21:00:37Z] load site instr 49: src r1 win 1 off 0; last base writer shfl at 46; writers back to the last injecting one: shfl@46; shadow writes of r1 per rep: add=6 mad=3 mul=3 or=2 rotl=2 rotr=2 shfl=4 sub=3 xor=3
[2026-10-07T21:00:37Z] load site instr 50: src r4 win 2 off 0; last base writer shfl at 48; writers back to the last injecting one: shfl@48; shadow writes of r4 per rep: add=6 mad=3 mul=2 mulhi=1 or=2 rotl=2 rotr=3 shfl=4 sub=2 xor=3
[2026-10-07T21:00:37Z] load site instr 55: src r7 win 1 off 1; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r7 per rep: add=2 mad=5 mul=4 mulhi=1 or=2 rotl=1 rotr=4 shfl=5 sub=3 xor=2
[2026-10-07T21:00:37Z] load site instr 57: src r2 win 2 off 1; last base writer shfl at 56; writers back to the last injecting one: shfl@56; shadow writes of r2 per rep: add=6 mad=4 mul=1 mulhi=3 or=2 rotl=1 rotr=4 sub=1 xor=9
[2026-10-07T21:00:37Z] load site instr 63: src r6 win 2 off 0; last base writer xor at 61; writers back to the last injecting one: xor@61; shadow writes of r6 per rep: add=5 mad=4 mul=6 mulhi=2 or=2 rotl=2 rotr=2 shfl=7 sub=6 xor=3
[2026-10-07T21:00:37Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x0,2^23) (0x0,2^23) (0x0,2^22) (0x800000,2^23) (0x400000,2^22) (0x0,2^22); expected reads per item by quarter 184.000 152.000 88.000 88.000 (flat uniform 128.000)
[2026-10-07T21:01:23Z] 524288 warps (16777216 nonces) interpreted in 45.3 s (2.765 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T21:01:23Z] p19921-attack-f8 distinct lines per hash: n 16777216 min 1000 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8711
[2026-10-07T21:01:23Z] p19921-attack-f8 distinct items per hash: n 16777216 min 125 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T21:01:23Z] p19921-attack-f8 distinct lines per warp: n 524288 min 32527 p1 32572 median 32617 p99 32654 max 32684 mean 32616.3561
[2026-10-07T21:01:23Z] p19921-attack-f8 distinct items per warp: n 524288 min 4083 p1 4088 median 4093 p99 4096 max 4096 mean 4092.9766
[2026-10-07T21:01:23Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T21:01:23Z] positions: largest hi16-bucket (256 items) share 0.0070% at p94 (iteration 5, site 14, instr 57); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 2)
[2026-10-07T21:01:23Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p4 (site 4, instr 24); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T21:01:23Z] p19921-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 265 (bin 4119116) z_max +12.11 min 43 z_min -7.51 chi2/dof 14.50234 chi2_z +39106.96 top0.1% 0.17618% top0.5% 0.85035% top1% 1.67081%
[2026-10-07T21:01:23Z] p19921-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00084 largest 265 (item 0x3eda4c) at +5.97 sigma smallest at -4.94; buckets64 chi2/dof 1.00636 largest 10169 (bucket 70611) at +4.47 sigma smallest at -4.27
[2026-10-07T21:01:25Z] p19921-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 258 (bin 1927200) z_max +11.49 min 41 z_min -7.69 chi2/dof 14.50186 chi2_z +39105.56 top0.1% 0.17609% top0.5% 0.85014% top1% 1.67052%
[2026-10-07T21:01:25Z] p19921-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99947 largest +5.76 sigma; buckets64 chi2/dof 1.00009 largest +4.82 smallest -4.59
[2026-10-07T21:01:25Z] 6-sigma p19921-attack-f8 items buckets64 against the window density: largest bucket +4.47 sigma, smallest -4.27 -> within 6 sigma
[2026-10-07T21:01:25Z] hot-set p19921-attack-f8 items (windowed control): f 0.1% S_f 0.17618% E_f(control) 0.17609% X_f +0.00008% X_f/f +0.0008 -> no hot set
[2026-10-07T21:01:25Z] hot-set p19921-attack-f8 items (windowed control): f 0.5% S_f 0.85035% E_f(control) 0.85014% X_f +0.00021% X_f/f +0.0004 -> no hot set
[2026-10-07T21:01:25Z] hot-set p19921-attack-f8 items (windowed control): f 1.0% S_f 1.67081% E_f(control) 1.67052% X_f +0.00029% X_f/f +0.0003 -> no hot set
[2026-10-07T21:01:25Z] hot-set p19921-attack-f8 items (windowed control): verdict clear
[2026-10-07T21:01:28Z] p19921-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 197 (bin 7815999) z_max +6.10 min 72 z_min -4.95 chi2/dof 0.99985 chi2_z -0.43 top0.1% 0.13104% top0.5% 0.63251% top1% 1.24338%
[2026-10-07T21:01:28Z] hot-set p19921-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.17618% E_f(control) 0.13104% X_f +0.04514% X_f/f +0.4514 -> no hot set
[2026-10-07T21:01:28Z] hot-set p19921-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.85035% E_f(control) 0.63251% X_f +0.21785% X_f/f +0.4357 -> no hot set
[2026-10-07T21:01:28Z] hot-set p19921-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.67081% E_f(control) 1.24338% X_f +0.42743% X_f/f +0.4274 -> no hot set
[2026-10-07T21:01:28Z] hot-set p19921-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T21:01:28Z] ratio p19921-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0005x / 1.0003x / 1.0002x (gate 1.2x at 0.1%: within); over the FLAT control 1.3445x / 1.3444x / 1.3438x
[2026-10-07T21:01:30Z] attribution: hot threshold count >= 221 marks 18546 items (0.1105% of items) holding 4174336 reads (0.1944% of reads); top 8 items t=0x3eda4c:265 t=0x089c4e:256 t=0x1bf028:253 t=0x0e495d:251 t=0x324244:250 t=0x074ea0:250 t=0x2bcb1f:249 t=0x3fa939:248
[2026-10-07T21:01:49Z] attribution: reads on hot items per position (flat expectation 0.1105% of each position's 16777216 reads); the 24 largest: p60(it3 s12)=0.543% p44(it2 s12)=0.543% p127(it7 s15)=0.543% p108(it6 s12)=0.542% p92(it5 s12)=0.541% p95(it5 s15)=0.541% p76(it4 s12)=0.541% p111(it6 s15)=0.541% p15(it0 s15)=0.541% p47(it2 s15)=0.541% p63(it3 s15)=0.540% p31(it1 s15)=0.540% p28(it1 s12)=0.540% p12(it0 s12)=0.539% p79(it4 s15)=0.539% p124(it7 s12)=0.538% p91(it5 s11)=0.273% p74(it4 s10)=0.273% p27(it1 s11)=0.272% p59(it3 s11)=0.272% p42(it2 s10)=0.272% p25(it1 s9)=0.271% p112(it7 s0)=0.271% p64(it4 s0)=0.271%
[2026-10-07T21:01:49Z] attribution: hot reads by iteration it0=0.194% it1=0.194% it2=0.194% it3=0.195% it4=0.195% it5=0.194% it6=0.194% it7=0.194% ; by site s0=0.270% s1=0.135% s2=0.135% s3=0.135% s4=0.136% s5=0.135% s6=0.135% s7=0.000% s8=0.136% s9=0.270% s10=0.271% s11=0.271% s12=0.541% s13=0.000% s14=0.000% s15=0.541%
[2026-10-07T21:01:49Z] site 0 (instr 2, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2704% (flat expectation 0.1105%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:01:49Z] site 1 (instr 4, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1349% (flat expectation 0.1105%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:01:49Z] site 2 (instr 10, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1351% (flat expectation 0.1105%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:01:49Z] site 3 (instr 17, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1350% (flat expectation 0.1105%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:01:49Z] site 4 (instr 24, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1355% (flat expectation 0.1105%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:01:49Z] site 5 (instr 28, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1352% (flat expectation 0.1105%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:01:49Z] site 6 (instr 29, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1348% (flat expectation 0.1105%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:01:49Z] site 7 (instr 34, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1105%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:01:49Z] site 8 (instr 35, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1360% (flat expectation 0.1105%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:01:49Z] site 9 (instr 39, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2700% (flat expectation 0.1105%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:01:49Z] site 10 (instr 44, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2707% (flat expectation 0.1105%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:01:49Z] site 11 (instr 49, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2709% (flat expectation 0.1105%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:01:49Z] site 12 (instr 50, src r4, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.5408% (flat expectation 0.1105%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:01:49Z] site 13 (instr 55, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1105%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:01:49Z] site 14 (instr 57, src r2, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1105%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:01:49Z] site 15 (instr 63, src r6, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.5406% (flat expectation 0.1105%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:01:49Z] attribution: item 0x3eda4c (265 reads) read from positions p28(it1 s12)x10 p108(it6 s12)x9 p16(it1 s0)x7 p76(it4 s12)x7 p111(it6 s15)x7 p124(it7 s12)x7 p127(it7 s15)x6 p9(it0 s9)x6 p44(it2 s12)x6 p47(it2 s15)x6 p57(it3 s9)x6 p60(it3 s12)x6
[2026-10-07T21:01:49Z] attribution: item 0x089c4e (256 reads) read from positions p60(it3 s12)x10 p26(it1 s10)x9 p44(it2 s12)x9 p108(it6 s12)x9 p12(it0 s12)x7 p124(it7 s12)x6 p31(it1 s15)x6 p57(it3 s9)x6 p63(it3 s15)x6 p90(it5 s10)x6 p92(it5 s12)x6 p95(it5 s15)x6
[2026-10-07T21:01:49Z] attribution: item 0x1bf028 (253 reads) read from positions p31(it1 s15)x9 p127(it7 s15)x7 p12(it0 s12)x7 p47(it2 s15)x7 p10(it0 s10)x6 p26(it1 s10)x6 p60(it3 s12)x6 p106(it6 s10)x6 p34(it2 s2)x5 p48(it3 s0)x5 p0(it0 s0)x5 p75(it4 s11)x5
[2026-10-07T21:01:49Z] attribution: item 0x0e495d (251 reads) read from positions p31(it1 s15)x9 p28(it1 s12)x8 p47(it2 s15)x8 p123(it7 s11)x7 p12(it0 s12)x6 p60(it3 s12)x6 p108(it6 s12)x6 p41(it2 s9)x5 p48(it3 s0)x5 p59(it3 s11)x5 p63(it3 s15)x5 p65(it4 s1)x5
[2026-10-07T21:01:49Z] attribution: item 0x324244 (250 reads) read from positions p95(it5 s15)x11 p92(it5 s12)x9 p28(it1 s12)x7 p47(it2 s15)x7 p89(it5 s9)x7 p59(it3 s11)x6 p25(it1 s9)x6 p58(it3 s10)x6 p12(it0 s12)x6 p108(it6 s12)x6 p111(it6 s15)x6 p9(it0 s9)x5
[2026-10-07T21:01:49Z] attribution: item 0x074ea0 (250 reads) read from positions p95(it5 s15)x12 p127(it7 s15)x9 p15(it0 s15)x8 p31(it1 s15)x8 p111(it6 s15)x8 p28(it1 s12)x7 p112(it7 s0)x7 p124(it7 s12)x7 p92(it5 s12)x6 p123(it7 s11)x6 p41(it2 s9)x5 p44(it2 s12)x5
[2026-10-07T21:01:49Z] attribution: item 0x2bcb1f (249 reads) read from positions p76(it4 s12)x8 p31(it1 s15)x7 p42(it2 s10)x7 p47(it2 s15)x7 p59(it3 s11)x7 p9(it0 s9)x6 p28(it1 s12)x6 p89(it5 s9)x6 p92(it5 s12)x6 p101(it6 s5)x6 p124(it7 s12)x5 p16(it1 s0)x5
[2026-10-07T21:01:49Z] attribution: item 0x3fa939 (248 reads) read from positions p28(it1 s12)x7 p63(it3 s15)x7 p79(it4 s15)x7 p80(it5 s0)x7 p92(it5 s12)x7 p127(it7 s15)x6 p44(it2 s12)x6 p75(it4 s11)x6 p76(it4 s12)x6 p9(it0 s9)x5 p12(it0 s12)x5 p25(it1 s9)x5
[2026-10-07T21:01:49Z] hottest item p19921-attack-f8 (0x3eda4c): 265 reads (0.0000% of all); predicted source none
[2026-10-07T21:01:49Z] program p19921-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T21:01:50Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "600738", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T21:01:50Z] census warps: programs [600738] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T21:01:50Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T21:01:53Z] table: 16777216 items derived with their 8 lines in 2.1 s; library comparison sample (0 mismatches)
[2026-10-07T21:01:57Z] program p600738-attack-f8: epoch seed 3cdd11e7c4cb47596e9211903826814629bef120e7c7500074e5d78606de6cef era seed ea72caae475cbf8d0fea668c51d22c9c1cd7ed89d0109b1863476e4238678194 id ef6d49f3871af472 attempt 4 class mx8-era190e00ce+sh256x27 op mix load=16 mad=8 xor=7 mulhi=6 shfl=6 rotl=5 sub=5 add=4 or=3 mul=2 rotr=2; era stride mul 0x25c67e75 rot 9 interleave [1, 7, 8, 11] windows 1:1:0 3:2:2 6:2:1 14:2:0 18:2:1 22:0:0 23:2:3 27:2:2 28:0:0 36:1:0 40:2:0 45:0:0 46:1:0 51:1:1 55:0:0 56:0:0
[2026-10-07T21:01:57Z] load site instr 1: src r1 win 1 off 0; last base writer mad at 0; writers back to the last injecting one: mad@0; shadow writes of r1 per rep: add=6 mad=4 mul=2 mulhi=2 or=1 rotl=6 shfl=2 sub=2 xor=9
[2026-10-07T21:01:57Z] load site instr 3: src r5 win 2 off 2; last base writer load at 1; writers back to the last injecting one: load@1; shadow writes of r5 per rep: add=5 mad=6 mul=4 mulhi=1 or=2 rotl=4 rotr=2 shfl=3 xor=5
[2026-10-07T21:01:57Z] load site instr 6: src r4 win 2 off 1; last base writer shfl at 4; writers back to the last injecting one: shfl@4; shadow writes of r4 per rep: add=2 mad=2 mul=3 mulhi=4 or=1 rotl=3 rotr=1 shfl=2 sub=3 xor=11
[2026-10-07T21:01:57Z] load site instr 14: src r3 win 2 off 0; last base writer add at 9; writers back to the last injecting one: add@9; shadow writes of r3 per rep: add=4 mad=2 mul=2 or=1 rotl=3 rotr=2 shfl=2 xor=5
[2026-10-07T21:01:57Z] load site instr 18: src r0 win 2 off 1; last base writer sub at 17; writers back to the last injecting one: sub@17; shadow writes of r0 per rep: add=6 mad=1 mul=4 mulhi=1 rotl=6 rotr=2 shfl=3 sub=3 xor=5
[2026-10-07T21:01:57Z] load site instr 22: src r6 win 0 off 0; last base writer shfl at 13; writers back to the last injecting one: shfl@13; shadow writes of r6 per rep: add=6 mad=3 mul=2 mulhi=4 or=3 rotl=1 rotr=4 shfl=3 sub=4 xor=5
[2026-10-07T21:01:57Z] load site instr 23: src r2 win 2 off 3; last base writer load at 22; writers back to the last injecting one: load@22; shadow writes of r2 per rep: add=6 mad=5 mul=4 mulhi=7 or=1 rotl=3 rotr=2 shfl=4 sub=3 xor=3
[2026-10-07T21:01:57Z] load site instr 27: src r1 win 2 off 2; last base writer load at 23; writers back to the last injecting one: load@23; shadow writes of r1 per rep: add=6 mad=4 mul=2 mulhi=2 or=1 rotl=6 shfl=2 sub=2 xor=9
[2026-10-07T21:01:57Z] load site instr 28: src r3 win 0 off 0; last base writer shfl at 26; writers back to the last injecting one: shfl@26; shadow writes of r3 per rep: add=4 mad=2 mul=2 or=1 rotl=3 rotr=2 shfl=2 xor=5
[2026-10-07T21:01:57Z] load site instr 36: src r2 win 1 off 0; last base writer load at 27; writers back to the last injecting one: load@27; shadow writes of r2 per rep: add=6 mad=5 mul=4 mulhi=7 or=1 rotl=3 rotr=2 shfl=4 sub=3 xor=3
[2026-10-07T21:01:57Z] load site instr 40: src r7 win 2 off 0; last base writer xor at 35; writers back to the last injecting one: xor@35; shadow writes of r7 per rep: add=5 mad=1 mul=5 mulhi=4 or=2 rotl=3 rotr=1 shfl=5 sub=2 xor=5
[2026-10-07T21:01:57Z] load site instr 45: src r7 win 0 off 0; last base writer mad at 42; writers back to the last injecting one: mad@42; shadow writes of r7 per rep: add=5 mad=1 mul=5 mulhi=4 or=2 rotl=3 rotr=1 shfl=5 sub=2 xor=5
[2026-10-07T21:01:57Z] load site instr 46: src r2 win 1 off 0; last base writer xor at 44; writers back to the last injecting one: xor@44; shadow writes of r2 per rep: add=6 mad=5 mul=4 mulhi=7 or=1 rotl=3 rotr=2 shfl=4 sub=3 xor=3
[2026-10-07T21:01:57Z] load site instr 51: src r5 win 1 off 1; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r5 per rep: add=5 mad=6 mul=4 mulhi=1 or=2 rotl=4 rotr=2 shfl=3 xor=5
[2026-10-07T21:01:57Z] load site instr 55: src r0 win 0 off 0; last base writer add at 53; writers back to the last injecting one: add@53; shadow writes of r0 per rep: add=6 mad=1 mul=4 mulhi=1 rotl=6 rotr=2 shfl=3 sub=3 xor=5
[2026-10-07T21:01:57Z] load site instr 56: src r7 win 0 off 0; last base writer add at 49; writers back to the last injecting one: add@49; shadow writes of r7 per rep: add=5 mad=1 mul=5 mulhi=4 or=2 rotl=3 rotr=1 shfl=5 sub=2 xor=5
[2026-10-07T21:01:57Z] window layer: site item windows (first, items) (0x0,2^23) (0x800000,2^22) (0x400000,2^22) (0x0,2^22) (0x400000,2^22) (0x0,2^24) (0xc00000,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^24); expected reads per item by quarter 152.000 152.000 120.000 88.000 (flat uniform 128.000)
[2026-10-07T21:02:39Z] 524288 warps (16777216 nonces) interpreted in 42.3 s (2.581 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T21:02:39Z] p600738-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8703
[2026-10-07T21:02:39Z] p600738-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T21:02:39Z] p600738-attack-f8 distinct lines per warp: n 524288 min 32499 p1 32571 median 32617 p99 32654 max 32684 mean 32616.1881
[2026-10-07T21:02:39Z] p600738-attack-f8 distinct items per warp: n 524288 min 4080 p1 4088 median 4093 p99 4096 max 4096 mean 4092.9575
[2026-10-07T21:02:39Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T21:02:39Z] positions: largest hi16-bucket (256 items) share 0.0071% at p66 (iteration 4, site 2, instr 6); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 1)
[2026-10-07T21:02:39Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p0 (site 0, instr 1); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T21:02:40Z] p600738-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 218 (bin 2838819) z_max +7.95 min 41 z_min -7.69 chi2/dof 6.50137 chi2_z +15933.67 top0.1% 0.15046% top0.5% 0.72619% top1% 1.42719%
[2026-10-07T21:02:40Z] p600738-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00125 largest 218 (item 0x2b5123) at +5.35 sigma smallest at -5.19; buckets64 chi2/dof 1.00913 largest 8075 (bucket 191809) at +4.51 sigma smallest at -4.47
[2026-10-07T21:02:42Z] p600738-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 217 (bin 2926948) z_max +7.87 min 45 z_min -7.34 chi2/dof 6.49985 chi2_z +15929.26 top0.1% 0.15043% top0.5% 0.72613% top1% 1.42703%
[2026-10-07T21:02:42Z] p600738-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00013 largest +6.50 sigma; buckets64 chi2/dof 0.99890 largest +4.73 smallest -5.04
[2026-10-07T21:02:42Z] 6-sigma p600738-attack-f8 items buckets64 against the window density: largest bucket +4.51 sigma, smallest -4.47 -> within 6 sigma
[2026-10-07T21:02:42Z] hot-set p600738-attack-f8 items (windowed control): f 0.1% S_f 0.15046% E_f(control) 0.15043% X_f +0.00003% X_f/f +0.0003 -> no hot set
[2026-10-07T21:02:42Z] hot-set p600738-attack-f8 items (windowed control): f 0.5% S_f 0.72619% E_f(control) 0.72613% X_f +0.00006% X_f/f +0.0001 -> no hot set
[2026-10-07T21:02:42Z] hot-set p600738-attack-f8 items (windowed control): f 1.0% S_f 1.42719% E_f(control) 1.42703% X_f +0.00016% X_f/f +0.0002 -> no hot set
[2026-10-07T21:02:42Z] hot-set p600738-attack-f8 items (windowed control): verdict clear
[2026-10-07T21:02:44Z] p600738-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 10017611) z_max +5.83 min 73 z_min -4.86 chi2/dof 0.99924 chi2_z -2.22 top0.1% 0.13104% top0.5% 0.63246% top1% 1.24325%
[2026-10-07T21:02:44Z] hot-set p600738-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15046% E_f(control) 0.13104% X_f +0.01942% X_f/f +0.1942 -> no hot set
[2026-10-07T21:02:44Z] hot-set p600738-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.72619% E_f(control) 0.63246% X_f +0.09373% X_f/f +0.1875 -> no hot set
[2026-10-07T21:02:44Z] hot-set p600738-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.42719% E_f(control) 1.24325% X_f +0.18394% X_f/f +0.1839 -> no hot set
[2026-10-07T21:02:44Z] hot-set p600738-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T21:02:44Z] ratio p600738-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0002x / 1.0001x / 1.0001x (gate 1.2x at 0.1%: within); over the FLAT control 1.1482x / 1.1482x / 1.1480x
[2026-10-07T21:02:46Z] attribution: hot threshold count >= 189 marks 17601 items (0.1049% of items) holding 3386833 reads (0.1577% of reads); top 8 items t=0x2b5123:218 t=0x7a81e2:217 t=0x5d863e:217 t=0x765f30:216 t=0x2c8286:216 t=0x1e13c9:216 t=0x58ef66:215 t=0x4d0d7f:215
[2026-10-07T21:03:05Z] attribution: reads on hot items per position (flat expectation 0.1049% of each position's 16777216 reads); the 24 largest: p36(it2 s4)=0.270% p20(it1 s4)=0.270% p4(it0 s4)=0.270% p100(it6 s4)=0.270% p34(it2 s2)=0.270% p68(it4 s4)=0.270% p98(it6 s2)=0.270% p84(it5 s4)=0.270% p50(it3 s2)=0.269% p2(it0 s2)=0.269% p82(it5 s2)=0.269% p52(it3 s4)=0.269% p116(it7 s4)=0.269% p41(it2 s9)=0.268% p66(it4 s2)=0.268% p16(it1 s0)=0.268% p89(it5 s9)=0.268% p114(it7 s2)=0.267% p18(it1 s2)=0.267% p44(it2 s12)=0.267% p12(it0 s12)=0.267% p105(it6 s9)=0.267% p57(it3 s9)=0.266% p9(it0 s9)=0.266%
[2026-10-07T21:03:05Z] attribution: hot reads by iteration it0=0.158% it1=0.158% it2=0.158% it3=0.158% it4=0.157% it5=0.158% it6=0.158% it7=0.157% ; by site s0=0.265% s1=0.000% s2=0.269% s3=0.262% s4=0.270% s5=0.133% s6=0.000% s7=0.000% s8=0.133% s9=0.266% s10=0.262% s11=0.132% s12=0.265% s13=0.000% s14=0.133% s15=0.133%
[2026-10-07T21:03:05Z] site 0 (instr 1, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2654% (flat expectation 0.1049%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:03:05Z] site 1 (instr 3, src r5, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1049%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0063% (window expectation 0.0061%)
[2026-10-07T21:03:05Z] site 2 (instr 6, src r4, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.2687% (flat expectation 0.1049%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:03:05Z] site 3 (instr 14, src r3, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.2622% (flat expectation 0.1049%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:03:05Z] site 4 (instr 18, src r0, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.2697% (flat expectation 0.1049%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:03:05Z] site 5 (instr 22, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1330% (flat expectation 0.1049%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:03:05Z] site 6 (instr 23, src r2, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1049%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:03:05Z] site 7 (instr 27, src r1, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1049%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:03:05Z] site 8 (instr 28, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1334% (flat expectation 0.1049%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:03:05Z] site 9 (instr 36, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2661% (flat expectation 0.1049%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:03:05Z] site 10 (instr 40, src r7, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.2618% (flat expectation 0.1049%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:03:05Z] site 11 (instr 45, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1322% (flat expectation 0.1049%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:03:05Z] site 12 (instr 46, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2653% (flat expectation 0.1049%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:03:05Z] site 13 (instr 51, src r5, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1049%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:03:05Z] site 14 (instr 55, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1326% (flat expectation 0.1049%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:03:05Z] site 15 (instr 56, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1329% (flat expectation 0.1049%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:03:05Z] attribution: item 0x2b5123 (218 reads) read from positions p83(it5 s3)x11 p74(it4 s10)x11 p3(it0 s3)x8 p35(it2 s3)x7 p51(it3 s3)x7 p67(it4 s3)x6 p10(it0 s10)x6 p16(it1 s0)x5 p58(it3 s10)x5 p90(it5 s10)x5 p107(it6 s11)x5 p108(it6 s12)x5
[2026-10-07T21:03:05Z] attribution: item 0x7a81e2 (217 reads) read from positions p52(it3 s4)x9 p98(it6 s2)x9 p32(it2 s0)x7 p66(it4 s2)x7 p68(it4 s4)x7 p114(it7 s2)x7 p116(it7 s4)x7 p92(it5 s12)x6 p20(it1 s4)x5 p25(it1 s9)x5 p34(it2 s2)x5 p36(it2 s4)x5
[2026-10-07T21:03:05Z] attribution: item 0x5d863e (217 reads) read from positions p114(it7 s2)x10 p18(it1 s2)x9 p98(it6 s2)x9 p66(it4 s2)x8 p82(it5 s2)x8 p20(it1 s4)x7 p50(it3 s2)x7 p84(it5 s4)x7 p100(it6 s4)x7 p4(it0 s4)x6 p80(it5 s0)x6 p16(it1 s0)x5
[2026-10-07T21:03:05Z] attribution: item 0x765f30 (216 reads) read from positions p4(it0 s4)x12 p25(it1 s9)x9 p68(it4 s4)x9 p114(it7 s2)x8 p48(it3 s0)x7 p98(it6 s2)x7 p112(it7 s0)x7 p66(it4 s2)x6 p82(it5 s2)x6 p18(it1 s2)x5 p52(it3 s4)x5 p84(it5 s4)x5
[2026-10-07T21:03:05Z] attribution: item 0x2c8286 (216 reads) read from positions p83(it5 s3)x9 p19(it1 s3)x9 p51(it3 s3)x9 p74(it4 s10)x8 p26(it1 s10)x7 p58(it3 s10)x7 p3(it0 s3)x6 p44(it2 s12)x6 p60(it3 s12)x6 p67(it4 s3)x6 p122(it7 s10)x6 p25(it1 s9)x5
[2026-10-07T21:03:05Z] attribution: item 0x1e13c9 (216 reads) read from positions p19(it1 s3)x10 p115(it7 s3)x9 p35(it2 s3)x7 p42(it2 s10)x7 p44(it2 s12)x7 p10(it0 s10)x6 p80(it5 s0)x6 p92(it5 s12)x6 p3(it0 s3)x5 p12(it0 s12)x5 p28(it1 s12)x5 p47(it2 s15)x5
[2026-10-07T21:03:05Z] attribution: item 0x58ef66 (215 reads) read from positions p52(it3 s4)x10 p82(it5 s2)x9 p66(it4 s2)x8 p84(it5 s4)x8 p34(it2 s2)x7 p98(it6 s2)x7 p105(it6 s9)x6 p4(it0 s4)x6 p18(it1 s2)x6 p28(it1 s12)x6 p50(it3 s2)x6 p68(it4 s4)x6
[2026-10-07T21:03:05Z] attribution: item 0x4d0d7f (215 reads) read from positions p50(it3 s2)x9 p68(it4 s4)x8 p4(it0 s4)x7 p36(it2 s4)x7 p52(it3 s4)x7 p80(it5 s0)x7 p82(it5 s2)x7 p114(it7 s2)x6 p48(it3 s0)x6 p20(it1 s4)x6 p2(it0 s2)x6 p64(it4 s0)x6
[2026-10-07T21:03:05Z] hottest item p600738-attack-f8 (0x2b5123): 218 reads (0.0000% of all); predicted source none
[2026-10-07T21:03:05Z] program p600738-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T21:03:06Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "602822", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-07T21:03:06Z] census warps: programs [602822] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T21:03:06Z] day 20730: cache filled in 0.60 s, fnv 448274a57f508cbc
[2026-10-07T21:03:09Z] table: 16777216 items derived with their 8 lines in 2.5 s; library comparison sample (0 mismatches)
[2026-10-07T21:03:13Z] program p602822-attack-f8: epoch seed f7b080f29859eabfeb624814d953c10ed93caa69af724d8800d8ab9636ee47b1 era seed ed132f316adde472cadf63b0085b7198d63488c8f49c283d459d5c4c554cdfb8 id d8b5571c7abc80df attempt 6 class mx8-era7d3d7ad9+sh256x27 op mix load=16 mad=11 shfl=10 add=7 xor=6 mul=4 mulhi=4 or=2 rotl=2 sub=2; era stride mul 0xc911dd05 rot 28 interleave [2, 7, 10, 13] windows 3:2:1 8:0:0 12:0:0 17:1:0 20:2:1 22:1:0 25:2:1 29:1:0 38:2:0 39:0:0 41:0:0 53:1:0 56:0:0 59:2:3 62:1:1 63:1:1
[2026-10-07T21:03:13Z] load site instr 3: src r1 win 2 off 1; last base writer shfl at 1; writers back to the last injecting one: shfl@1; shadow writes of r1 per rep: add=3 mad=2 mul=3 mulhi=3 rotl=3 rotr=2 shfl=4 sub=2 xor=5
[2026-10-07T21:03:13Z] load site instr 8: src r1 win 0 off 0; last base writer add at 6; writers back to the last injecting one: add@6; shadow writes of r1 per rep: add=3 mad=2 mul=3 mulhi=3 rotl=3 rotr=2 shfl=4 sub=2 xor=5
[2026-10-07T21:03:13Z] load site instr 12: src r1 win 0 off 0; last base writer add at 10; writers back to the last injecting one: add@10; shadow writes of r1 per rep: add=3 mad=2 mul=3 mulhi=3 rotl=3 rotr=2 shfl=4 sub=2 xor=5
[2026-10-07T21:03:13Z] load site instr 17: src r4 win 1 off 0; last base writer xor at 7; writers back to the last injecting one: xor@7; shadow writes of r4 per rep: add=3 mad=4 mul=4 mulhi=2 rotl=2 rotr=1 shfl=4 sub=5 xor=2
[2026-10-07T21:03:13Z] load site instr 20: src r7 win 2 off 1; last base writer shfl at 11; writers back to the last injecting one: shfl@11; shadow writes of r7 per rep: add=6 mad=2 mul=3 mulhi=5 rotl=5 rotr=2 shfl=3 sub=2 xor=4
[2026-10-07T21:03:13Z] load site instr 22: src r5 win 1 off 0; last base writer load at 17; writers back to the last injecting one: load@17; shadow writes of r5 per rep: add=2 mad=1 mul=3 mulhi=1 or=1 rotl=5 rotr=2 shfl=6 xor=2
[2026-10-07T21:03:13Z] load site instr 25: src r3 win 2 off 1; last base writer load at 20; writers back to the last injecting one: load@20; shadow writes of r3 per rep: add=9 mad=2 mul=7 mulhi=3 or=4 rotl=3 rotr=2 shfl=3 sub=3 xor=3
[2026-10-07T21:03:13Z] load site instr 29: src r4 win 1 off 0; last base writer mad at 28; writers back to the last injecting one: mad@28; shadow writes of r4 per rep: add=3 mad=4 mul=4 mulhi=2 rotl=2 rotr=1 shfl=4 sub=5 xor=2
[2026-10-07T21:03:13Z] load site instr 38: src r5 win 2 off 0; last base writer shfl at 35; writers back to the last injecting one: shfl@35; shadow writes of r5 per rep: add=2 mad=1 mul=3 mulhi=1 or=1 rotl=5 rotr=2 shfl=6 xor=2
[2026-10-07T21:03:13Z] load site instr 39: src r0 win 0 off 0; last base writer shfl at 37; writers back to the last injecting one: shfl@37; shadow writes of r0 per rep: add=6 mad=3 mul=2 mulhi=8 or=2 rotl=2 rotr=3 shfl=6 sub=2 xor=6
[2026-10-07T21:03:13Z] load site instr 41: src r6 win 0 off 0; last base writer load at 25; writers back to the last injecting one: load@25; shadow writes of r6 per rep: add=6 mad=2 mul=1 mulhi=2 or=6 rotl=2 rotr=6 shfl=3 sub=2 xor=2
[2026-10-07T21:03:13Z] load site instr 53: src r0 win 1 off 0; last base writer mad at 50; writers back to the last injecting one: mad@50; shadow writes of r0 per rep: add=6 mad=3 mul=2 mulhi=8 or=2 rotl=2 rotr=3 shfl=6 sub=2 xor=6
[2026-10-07T21:03:13Z] load site instr 56: src r7 win 0 off 0; last base writer rotl at 34; writers back to the last injecting one: rotl@34 sub@27; shadow writes of r7 per rep: add=6 mad=2 mul=3 mulhi=5 rotl=5 rotr=2 shfl=3 sub=2 xor=4
[2026-10-07T21:03:13Z] load site instr 59: src r6 win 2 off 3; last base writer mad at 57; writers back to the last injecting one: mad@57; shadow writes of r6 per rep: add=6 mad=2 mul=1 mulhi=2 or=6 rotl=2 rotr=6 shfl=3 sub=2 xor=2
[2026-10-07T21:03:13Z] load site instr 62: src r2 win 1 off 1; last base writer sub at 51; writers back to the last injecting one: sub@51; shadow writes of r2 per rep: add=9 mad=2 mul=2 mulhi=4 or=1 rotl=4 rotr=3 shfl=4 sub=3 xor=4
[2026-10-07T21:03:13Z] load site instr 63: src r1 win 1 off 1; last base writer add at 45; writers back to the last injecting one: add@45; shadow writes of r1 per rep: add=3 mad=2 mul=3 mulhi=3 rotl=3 rotr=2 shfl=4 sub=2 xor=5
[2026-10-07T21:03:13Z] window layer: site item windows (first, items) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x400000,2^22) (0x0,2^23) (0x400000,2^22) (0x0,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0xc00000,2^22) (0x800000,2^23) (0x800000,2^23); expected reads per item by quarter 136.000 200.000 72.000 104.000 (flat uniform 128.000)
[2026-10-07T21:04:02Z] 524288 warps (16777216 nonces) interpreted in 48.7 s (2.971 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T21:04:02Z] p602822-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8708
[2026-10-07T21:04:02Z] p602822-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T21:04:02Z] p602822-attack-f8 distinct lines per warp: n 524288 min 32540 p1 32587 median 32626 p99 32659 max 32690 mean 32625.7975
[2026-10-07T21:04:02Z] p602822-attack-f8 distinct items per warp: n 524288 min 4085 p1 4090 median 4094 p99 4096 max 4096 mean 4094.1672
[2026-10-07T21:04:02Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T21:04:02Z] positions: largest hi16-bucket (256 items) share 0.0070% at p45 (iteration 2, site 13, instr 59); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 3)
[2026-10-07T21:04:02Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p19 (site 3, instr 17); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T21:04:02Z] p602822-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 279 (bin 8221157) z_max +13.35 min 32 z_min -8.49 chi2/dof 18.49810 chi2_z +50679.90 top0.1% 0.19002% top0.5% 0.91825% top1% 1.80538%
[2026-10-07T21:04:02Z] p602822-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00030 largest 279 (item 0x7d71e5) at +5.59 sigma smallest at -4.74; buckets64 chi2/dof 1.00419 largest 4914 (bucket 153847) at +4.51 sigma smallest at -5.06
[2026-10-07T21:04:05Z] p602822-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 271 (bin 6444055) z_max +12.64 min 33 z_min -8.40 chi2/dof 18.50021 chi2_z +50686.03 top0.1% 0.18995% top0.5% 0.91811% top1% 1.80522%
[2026-10-07T21:04:05Z] p602822-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00013 largest +6.25 sigma; buckets64 chi2/dof 0.99631 largest +4.34 smallest -4.49
[2026-10-07T21:04:05Z] 6-sigma p602822-attack-f8 items buckets64 against the window density: largest bucket +4.51 sigma, smallest -5.06 -> within 6 sigma
[2026-10-07T21:04:05Z] hot-set p602822-attack-f8 items (windowed control): f 0.1% S_f 0.19002% E_f(control) 0.18995% X_f +0.00006% X_f/f +0.0006 -> no hot set
[2026-10-07T21:04:05Z] hot-set p602822-attack-f8 items (windowed control): f 0.5% S_f 0.91825% E_f(control) 0.91811% X_f +0.00013% X_f/f +0.0003 -> no hot set
[2026-10-07T21:04:05Z] hot-set p602822-attack-f8 items (windowed control): f 1.0% S_f 1.80538% E_f(control) 1.80522% X_f +0.00017% X_f/f +0.0002 -> no hot set
[2026-10-07T21:04:05Z] hot-set p602822-attack-f8 items (windowed control): verdict clear
[2026-10-07T21:04:07Z] p602822-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 11934970) z_max +5.83 min 71 z_min -5.04 chi2/dof 0.99937 chi2_z -1.84 top0.1% 0.13107% top0.5% 0.63242% top1% 1.24327%
[2026-10-07T21:04:07Z] hot-set p602822-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.19002% E_f(control) 0.13107% X_f +0.05895% X_f/f +0.5895 -> no hot set
[2026-10-07T21:04:07Z] hot-set p602822-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.91825% E_f(control) 0.63242% X_f +0.28582% X_f/f +0.5716 -> no hot set
[2026-10-07T21:04:07Z] hot-set p602822-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.80538% E_f(control) 1.24327% X_f +0.56211% X_f/f +0.5621 -> no hot set
[2026-10-07T21:04:07Z] hot-set p602822-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T21:04:07Z] ratio p602822-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0003x / 1.0001x / 1.0001x (gate 1.2x at 0.1%: within); over the FLAT control 1.4497x / 1.4519x / 1.4521x
[2026-10-07T21:04:09Z] attribution: hot threshold count >= 239 marks 16939 items (0.1010% of items) holding 4119343 reads (0.1918% of reads); top 8 items t=0x7d71e5:279 t=0x625dad:278 t=0x628b8e:272 t=0x7e257e:271 t=0x4deb70:270 t=0x796367:269 t=0x5d2ae4:269 t=0x5ccfa2:269
[2026-10-07T21:04:30Z] attribution: reads on hot items per position (flat expectation 0.1010% of each position's 16777216 reads); the 24 largest: p32(it2 s0)=0.493% p20(it1 s4)=0.493% p6(it0 s6)=0.493% p86(it5 s6)=0.493% p80(it5 s0)=0.492% p96(it6 s0)=0.492% p68(it4 s4)=0.492% p118(it7 s6)=0.492% p38(it2 s6)=0.492% p112(it7 s0)=0.491% p4(it0 s4)=0.491% p36(it2 s4)=0.491% p54(it3 s6)=0.491% p84(it5 s4)=0.491% p70(it4 s6)=0.491% p102(it6 s6)=0.491% p0(it0 s0)=0.491% p64(it4 s0)=0.490% p52(it3 s4)=0.490% p100(it6 s4)=0.490% p22(it1 s6)=0.490% p16(it1 s0)=0.489% p48(it3 s0)=0.489% p116(it7 s4)=0.488%
[2026-10-07T21:04:30Z] attribution: hot reads by iteration it0=0.192% it1=0.192% it2=0.192% it3=0.192% it4=0.192% it5=0.192% it6=0.192% it7=0.192% ; by site s0=0.491% s1=0.123% s2=0.122% s3=0.247% s4=0.491% s5=0.245% s6=0.491% s7=0.245% s8=0.000% s9=0.123% s10=0.123% s11=0.246% s12=0.123% s13=0.000% s14=0.000% s15=0.000%
[2026-10-07T21:04:30Z] site 0 (instr 3, src r1, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.4911% (flat expectation 0.1010%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:04:30Z] site 1 (instr 8, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1231% (flat expectation 0.1010%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:04:30Z] site 2 (instr 12, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1222% (flat expectation 0.1010%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:04:30Z] site 3 (instr 17, src r4, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2466% (flat expectation 0.1010%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:04:30Z] site 4 (instr 20, src r7, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.4907% (flat expectation 0.1010%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:04:30Z] site 5 (instr 22, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2449% (flat expectation 0.1010%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:04:30Z] site 6 (instr 25, src r3, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.4913% (flat expectation 0.1010%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:04:30Z] site 7 (instr 29, src r4, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2454% (flat expectation 0.1010%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:04:30Z] site 8 (instr 38, src r5, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1010%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:04:30Z] site 9 (instr 39, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1225% (flat expectation 0.1010%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:04:30Z] site 10 (instr 41, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1227% (flat expectation 0.1010%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:04:30Z] site 11 (instr 53, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2457% (flat expectation 0.1010%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:04:30Z] site 12 (instr 56, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1227% (flat expectation 0.1010%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T21:04:30Z] site 13 (instr 59, src r6, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1010%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T21:04:30Z] site 14 (instr 62, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1010%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T21:04:30Z] site 15 (instr 63, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1010%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T21:04:30Z] attribution: item 0x7d71e5 (279 reads) read from positions p16(it1 s0)x12 p84(it5 s4)x8 p23(it1 s7)x7 p38(it2 s6)x7 p48(it3 s0)x7 p55(it3 s7)x7 p80(it5 s0)x7 p96(it6 s0)x7 p102(it6 s6)x7 p0(it0 s0)x7 p118(it7 s6)x7 p32(it2 s0)x6
[2026-10-07T21:04:30Z] attribution: item 0x625dad (278 reads) read from positions p52(it3 s4)x8 p70(it4 s6)x8 p86(it5 s6)x8 p43(it2 s11)x7 p100(it6 s4)x7 p102(it6 s6)x7 p116(it7 s4)x7 p3(it0 s3)x6 p4(it0 s4)x6 p16(it1 s0)x6 p20(it1 s4)x6 p48(it3 s0)x6
[2026-10-07T21:04:30Z] attribution: item 0x628b8e (272 reads) read from positions p16(it1 s0)x9 p84(it5 s4)x8 p52(it3 s4)x8 p118(it7 s6)x7 p38(it2 s6)x7 p96(it6 s0)x7 p100(it6 s4)x7 p20(it1 s4)x6 p32(it2 s0)x6 p48(it3 s0)x6 p54(it3 s6)x6 p117(it7 s5)x6
[2026-10-07T21:04:30Z] attribution: item 0x7e257e (271 reads) read from positions p86(it5 s6)x11 p16(it1 s0)x9 p68(it4 s4)x9 p80(it5 s0)x9 p112(it7 s0)x8 p6(it0 s6)x7 p48(it3 s0)x7 p4(it0 s4)x6 p0(it0 s0)x6 p20(it1 s4)x6 p22(it1 s6)x6 p38(it2 s6)x6
[2026-10-07T21:04:30Z] attribution: item 0x4deb70 (270 reads) read from positions p84(it5 s4)x11 p38(it2 s6)x8 p112(it7 s0)x8 p22(it1 s6)x7 p70(it4 s6)x7 p96(it6 s0)x7 p116(it7 s4)x7 p36(it2 s4)x6 p52(it3 s4)x6 p54(it3 s6)x6 p64(it4 s0)x6 p69(it4 s5)x6
[2026-10-07T21:04:30Z] attribution: item 0x796367 (269 reads) read from positions p80(it5 s0)x12 p96(it6 s0)x11 p100(it6 s4)x11 p68(it4 s4)x10 p0(it0 s0)x8 p70(it4 s6)x8 p4(it0 s4)x7 p35(it2 s3)x7 p20(it1 s4)x6 p32(it2 s0)x6 p38(it2 s6)x6 p86(it5 s6)x6
[2026-10-07T21:04:30Z] attribution: item 0x5d2ae4 (269 reads) read from positions p38(it2 s6)x11 p80(it5 s0)x11 p118(it7 s6)x9 p86(it5 s6)x9 p32(it2 s0)x8 p36(it2 s4)x7 p99(it6 s3)x7 p116(it7 s4)x7 p1(it0 s1)x6 p16(it1 s0)x6 p102(it6 s6)x6 p5(it0 s5)x5
[2026-10-07T21:04:30Z] attribution: item 0x5ccfa2 (269 reads) read from positions p118(it7 s6)x9 p22(it1 s6)x9 p32(it2 s0)x8 p68(it4 s4)x8 p70(it4 s6)x8 p4(it0 s4)x7 p6(it0 s6)x7 p112(it7 s0)x7 p37(it2 s5)x6 p99(it6 s3)x6 p102(it6 s6)x6 p1(it0 s1)x5
[2026-10-07T21:04:30Z] hottest item p602822-attack-f8 (0x7d71e5): 279 reads (0.0000% of all); predicted source none
[2026-10-07T21:04:30Z] program p602822-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
Terminated
lease: released 32 pool cores after 608 s, exit 0

View file

@ -0,0 +1,47 @@
[2026-10-07T18:30:08Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "2", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/igneum-wt-adv-accept/adv/live", "--plant", "const-item", "--validate", "sample"]
[2026-10-07T18:30:08Z] census warps: programs [2] day 20730 nonces 1000000 threads 32 plant const-item validate sample check_every 997 diag false
[2026-10-07T18:30:24Z] day 20730: cache filled in 15.39 s, fnv 448274a57f508cbc
[2026-10-07T18:30:25Z] table: 16777216 items derived with their 8 lines in 1.2 s; library comparison skipped under the plant (0 mismatches)
[2026-10-07T18:30:30Z] program p2-attack-f8: epoch seed 59cef1aaa406506685f4355933868219bedece8dbd4e84c281724db9313bfdfa era seed 9cba001faa1e017235841c72f560ebd1b93f6d7aea5f9a598f7d3080e8a11f69 id 8a0047b2eb071ade attempt 5 class mx8-era35d128b9+sh256x27 op mix load=16 mul=8 add=6 mulhi=6 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 sub=2; era stride mul 0xbf0fab63 rot 4 interleave [2, 3, 7, 15] windows 2:2:0 3:0:0 7:0:0 9:0:0 13:2:1 17:1:1 21:2:0 22:1:0 23:0:0 27:1:0 30:2:2 40:1:0 44:2:1 55:0:0 62:0:0 63:2:0
[2026-10-07T18:30:30Z] load site instr 2: src r1 win 2 off 0; last base writer add at 1; writers back to the last injecting one: add@1; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 3: src r5 win 0 off 0; last base writer mad at 0; writers back to the last injecting one: mad@0; shadow writes of r5 per rep: add=3 mad=4 mul=5 or=5 rotl=1 rotr=4 shfl=4 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 7: src r1 win 0 off 0; last base writer shfl at 5; writers back to the last injecting one: shfl@5; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 9: src r3 win 0 off 0; last base writer add at 6; writers back to the last injecting one: add@6; shadow writes of r3 per rep: add=4 mad=3 mul=1 mulhi=2 rotl=1 rotr=2 shfl=3 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 13: src r0 win 2 off 1; last base writer xor at 12; writers back to the last injecting one: xor@12; shadow writes of r0 per rep: add=5 mad=6 mul=1 mulhi=3 or=1 rotl=1 rotr=7 shfl=8 sub=2
[2026-10-07T18:30:30Z] load site instr 17: src r5 win 1 off 1; last base writer xor at 14; writers back to the last injecting one: xor@14; shadow writes of r5 per rep: add=3 mad=4 mul=5 or=5 rotl=1 rotr=4 shfl=4 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 21: src r4 win 2 off 0; last base writer shfl at 15; writers back to the last injecting one: shfl@15; shadow writes of r4 per rep: add=4 mad=4 mulhi=1 or=1 rotl=4 rotr=1 shfl=2 sub=8 xor=6
[2026-10-07T18:30:30Z] load site instr 22: src r5 win 1 off 0; last base writer add at 20; writers back to the last injecting one: add@20; shadow writes of r5 per rep: add=3 mad=4 mul=5 or=5 rotl=1 rotr=4 shfl=4 sub=3 xor=3
[2026-10-07T18:30:30Z] load site instr 23: src r1 win 0 off 0; last base writer load at 13; writers back to the last injecting one: load@13; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 27: src r2 win 1 off 0; last base writer xor at 26; writers back to the last injecting one: xor@26; shadow writes of r2 per rep: add=6 mad=2 mul=4 mulhi=3 or=3 rotl=5 rotr=3 shfl=3 sub=3 xor=6
[2026-10-07T18:30:30Z] load site instr 30: src r2 win 2 off 2; last base writer rotr at 29; writers back to the last injecting one: rotr@29 xor@26; shadow writes of r2 per rep: add=6 mad=2 mul=4 mulhi=3 or=3 rotl=5 rotr=3 shfl=3 sub=3 xor=6
[2026-10-07T18:30:30Z] load site instr 40: src r1 win 1 off 0; last base writer rotl at 32; writers back to the last injecting one: rotl@32 rotl@31 load@30; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] load site instr 44: src r4 win 2 off 1; last base writer load at 27; writers back to the last injecting one: load@27; shadow writes of r4 per rep: add=4 mad=4 mulhi=1 or=1 rotl=4 rotr=1 shfl=2 sub=8 xor=6
[2026-10-07T18:30:30Z] load site instr 55: src r4 win 0 off 0; last base writer mad at 51; writers back to the last injecting one: mad@51; shadow writes of r4 per rep: add=4 mad=4 mulhi=1 or=1 rotl=4 rotr=1 shfl=2 sub=8 xor=6
[2026-10-07T18:30:30Z] load site instr 62: src r0 win 0 off 0; last base writer add at 53; writers back to the last injecting one: add@53; shadow writes of r0 per rep: add=5 mad=6 mul=1 mulhi=3 or=1 rotl=1 rotr=7 shfl=8 sub=2
[2026-10-07T18:30:30Z] load site instr 63: src r1 win 2 off 0; last base writer load at 62; writers back to the last injecting one: load@62; shadow writes of r1 per rep: add=7 mad=6 mul=4 mulhi=6 or=1 rotl=3 rotr=6 shfl=1 sub=2 xor=4
[2026-10-07T18:30:30Z] window layer: site item windows (first, items) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x400000,2^22) (0x800000,2^23) (0x0,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x0,2^23) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^22); expected reads per item by quarter 11.444 9.537 5.722 3.815 (flat uniform 7.629)
[2026-10-07T18:30:34Z] 31250 warps (1000000 nonces) interpreted in 3.7 s (3.754 ms per warp per thread); Epoch::hash_warp agreement on 0 warps: 0 mismatches (library comparison skipped under the plant)
[2026-10-07T18:30:34Z] p2-attack-f8 distinct lines per hash: n 1000000 min 952 p1 967 median 968 p99 968 max 968 mean 967.8845
[2026-10-07T18:30:34Z] p2-attack-f8 distinct items per hash: n 1000000 min 119 p1 121 median 121 p99 121 max 121 mean 120.9995
[2026-10-07T18:30:34Z] p2-attack-f8 distinct lines per warp: n 31250 min 30551 p1 30582 median 30612 p99 30637 max 30661 mean 30611.6212
[2026-10-07T18:30:34Z] p2-attack-f8 distinct items per warp: n 31250 min 3835 p1 3838 median 3841 p99 3841 max 3841 mean 3840.5035
[2026-10-07T18:30:34Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:30:34Z] positions: largest hi16-bucket (256 items) share 100.0000% at p0 (iteration 0, site 0, instr 2); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 2)
[2026-10-07T18:30:34Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 1 of 2048 at p0 (site 0, instr 2); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:30:34Z] p2-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 8000007 (bin 4660) z_max +2896309.15 min 0 z_min -2.76 chi2/dof 500001.72317 chi2_z +1448156739.23 top0.1% 6.52236% top0.5% 7.47807% top1% 8.58175%
[2026-10-07T18:30:34Z] p2-attack-f8 item histogram against the window density: full 2^24 chi2/dof 333334.02123 largest 8000007 (item 0x1234) at +2364825.39 sigma smallest at -3.38; buckets64 chi2/dof 333328.12062 largest 8000582 (bucket 72) at +295597.78 sigma smallest at -7.96
[2026-10-07T18:30:34Z] p2-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 37 (bin 3356675) z_max +10.63 min 0 z_min -2.76 chi2/dof 2.19210 chi2_z +3452.68 top0.1% 0.29918% top0.5% 1.34673% top1% 2.55749%
[2026-10-07T18:30:34Z] p2-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99966 largest +7.55 sigma; buckets64 chi2/dof 1.00387 largest +4.49 smallest -4.89
[2026-10-07T18:30:34Z] 6-sigma p2-attack-f8 items buckets64 against the window density: largest bucket +295597.78 sigma, smallest -7.96 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): f 0.1% S_f 6.52236% E_f(control) 0.29918% X_f +6.22317% X_f/f +62.2317 -> HOT SET
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): f 0.5% S_f 7.47807% E_f(control) 1.34673% X_f +6.13134% X_f/f +12.2627 -> HOT SET
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): f 1.0% S_f 8.58175% E_f(control) 2.55749% X_f +6.02426% X_f/f +6.0243 -> HOT SET
[2026-10-07T18:30:34Z] hot-set p2-attack-f8 items (windowed control): verdict FLAGGED
[2026-10-07T18:30:35Z] p2-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 28 (bin 13310856) z_max +7.37 min 0 z_min -2.76 chi2/dof 0.99990 chi2_z -0.29 top0.1% 0.24291% top0.5% 1.09940% top1% 2.08772%
[2026-10-07T18:30:35Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 6.52236% E_f(control) 0.24291% X_f +6.27945% X_f/f +62.7945 -> HOT SET
[2026-10-07T18:30:35Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 7.47807% E_f(control) 1.09940% X_f +6.37867% X_f/f +12.7573 -> HOT SET
[2026-10-07T18:30:35Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 8.58175% E_f(control) 2.08772% X_f +6.49402% X_f/f +6.4940 -> HOT SET
[2026-10-07T18:30:35Z] hot-set p2-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T18:30:35Z] ratio p2-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 21.8005x / 5.5528x / 3.3555x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 26.8510x / 6.8020x / 4.1106x
[2026-10-07T18:30:35Z] hottest item p2-attack-f8 (0x001234): 8000007 reads (6.2500% of all); predicted source none
[2026-10-07T18:30:35Z] program p2-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) FLAGGED; hot-set FLAGGED; verdict FLAGGED

View file

@ -0,0 +1,846 @@
[2026-10-07T18:53:21Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "4107", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T18:53:21Z] census warps: programs [4107] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:53:21Z] day 20730: cache filled in 0.61 s, fnv 448274a57f508cbc
[2026-10-07T18:53:27Z] table: 16777216 items derived with their 8 lines in 5.2 s; library comparison sample (0 mismatches)
[2026-10-07T18:53:31Z] program p4107-attack-f8: epoch seed 2cdb9fc575c38113dd8acb28910b877073ea6ceebade8b08e2692e82a3c4a6ee era seed 9f8fe375faa38b7226a477a0d500c08fe91ebaa1f88d744e5a12a1b1ed3f9092 id b0a3bd259ea8ef1c attempt 0 class mx8-eracd8e7786+sh256x27 op mix load=16 xor=10 add=7 mad=7 shfl=5 mul=4 mulhi=4 rotl=4 rotr=3 sub=3 or=1; era stride mul 0xde72f0fd rot 27 interleave [2, 3, 7, 14] windows 6:1:0 7:2:0 15:0:0 17:2:3 22:0:0 27:2:0 33:1:1 34:1:1 37:1:0 42:2:0 43:1:1 48:2:1 53:0:0 56:2:1 60:2:2 62:2:0
[2026-10-07T18:53:31Z] load site instr 6: src r5 win 1 off 0; last base writer rotl at 4; writers back to the last injecting one: rotl@4 rotr@50 xor@45; shadow writes of r5 per rep: add=4 mad=6 mul=6 or=1 rotl=2 rotr=4 shfl=3 sub=3 xor=2
[2026-10-07T18:53:31Z] load site instr 7: src r4 win 2 off 0; last base writer mad at 5; writers back to the last injecting one: mad@5; shadow writes of r4 per rep: add=8 mad=4 mul=5 mulhi=4 or=6 rotl=4 rotr=3 shfl=2 xor=6
[2026-10-07T18:53:31Z] load site instr 15: src r3 win 0 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r3 per rep: add=6 mad=3 mul=5 mulhi=2 or=5 rotl=7 rotr=4 shfl=1 sub=3 xor=1
[2026-10-07T18:53:31Z] load site instr 17: src r4 win 2 off 3; last base writer xor at 13; writers back to the last injecting one: xor@13; shadow writes of r4 per rep: add=8 mad=4 mul=5 mulhi=4 or=6 rotl=4 rotr=3 shfl=2 xor=6
[2026-10-07T18:53:31Z] load site instr 22: src r7 win 0 off 0; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r7 per rep: add=6 mad=4 mul=3 mulhi=4 or=2 rotl=1 rotr=4 shfl=4 sub=1 xor=3
[2026-10-07T18:53:31Z] load site instr 27: src r6 win 2 off 0; last base writer sub at 14; writers back to the last injecting one: sub@14; shadow writes of r6 per rep: add=4 mad=3 mul=2 mulhi=3 or=2 rotl=7 rotr=3 shfl=3 sub=7 xor=5
[2026-10-07T18:53:31Z] load site instr 33: src r4 win 1 off 1; last base writer mad at 31; writers back to the last injecting one: mad@31; shadow writes of r4 per rep: add=8 mad=4 mul=5 mulhi=4 or=6 rotl=4 rotr=3 shfl=2 xor=6
[2026-10-07T18:53:31Z] load site instr 34: src r0 win 1 off 1; last base writer rotr at 30; writers back to the last injecting one: rotr@30 mad@26; shadow writes of r0 per rep: add=3 mul=1 mulhi=2 or=2 rotl=6 rotr=2 shfl=3 sub=1 xor=1
[2026-10-07T18:53:31Z] load site instr 37: src r1 win 1 off 0; last base writer sub at 36; writers back to the last injecting one: sub@36; shadow writes of r1 per rep: add=5 mad=3 mul=3 mulhi=2 rotl=3 rotr=3 shfl=3 sub=4
[2026-10-07T18:53:31Z] load site instr 42: src r7 win 2 off 0; last base writer shfl at 39; writers back to the last injecting one: shfl@39; shadow writes of r7 per rep: add=6 mad=4 mul=3 mulhi=4 or=2 rotl=1 rotr=4 shfl=4 sub=1 xor=3
[2026-10-07T18:53:31Z] load site instr 43: src r3 win 1 off 1; last base writer add at 41; writers back to the last injecting one: add@41; shadow writes of r3 per rep: add=6 mad=3 mul=5 mulhi=2 or=5 rotl=7 rotr=4 shfl=1 sub=3 xor=1
[2026-10-07T18:53:31Z] load site instr 48: src r4 win 2 off 1; last base writer xor at 40; writers back to the last injecting one: xor@40; shadow writes of r4 per rep: add=8 mad=4 mul=5 mulhi=4 or=6 rotl=4 rotr=3 shfl=2 xor=6
[2026-10-07T18:53:31Z] load site instr 53: src r1 win 0 off 0; last base writer add at 47; writers back to the last injecting one: add@47; shadow writes of r1 per rep: add=5 mad=3 mul=3 mulhi=2 rotl=3 rotr=3 shfl=3 sub=4
[2026-10-07T18:53:31Z] load site instr 56: src r3 win 2 off 1; last base writer load at 53; writers back to the last injecting one: load@53; shadow writes of r3 per rep: add=6 mad=3 mul=5 mulhi=2 or=5 rotl=7 rotr=4 shfl=1 sub=3 xor=1
[2026-10-07T18:53:31Z] load site instr 60: src r0 win 2 off 2; last base writer add at 57; writers back to the last injecting one: add@57; shadow writes of r0 per rep: add=3 mul=1 mulhi=2 or=2 rotl=6 rotr=2 shfl=3 sub=1 xor=1
[2026-10-07T18:53:31Z] load site instr 62: src r5 win 2 off 0; last base writer rotr at 50; writers back to the last injecting one: rotr@50 xor@45; shadow writes of r5 per rep: add=4 mad=6 mul=6 or=1 rotl=2 rotr=4 shfl=3 sub=3 xor=2
[2026-10-07T18:53:31Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^22) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x0,2^22) (0x800000,2^23) (0x800000,2^23) (0x0,2^23) (0x0,2^22) (0x800000,2^23) (0x400000,2^22) (0x0,2^24) (0x400000,2^22) (0x800000,2^22) (0x0,2^22); expected reads per item by quarter 184.000 120.000 104.000 104.000 (flat uniform 128.000)
[2026-10-07T18:56:09Z] 524288 warps (16777216 nonces) interpreted in 158.5 s (9.677 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:56:09Z] p4107-attack-f8 distinct lines per hash: n 16777216 min 1013 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8712
[2026-10-07T18:56:09Z] p4107-attack-f8 distinct items per hash: n 16777216 min 127 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T18:56:09Z] p4107-attack-f8 distinct lines per warp: n 524288 min 32566 p1 32605 median 32637 p99 32664 max 32687 mean 32636.0980
[2026-10-07T18:56:09Z] p4107-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4651
[2026-10-07T18:56:09Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:56:09Z] positions: largest hi16-bucket (256 items) share 0.0071% at p5 (iteration 0, site 5, instr 27); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p102 (site 6, instr 33)
[2026-10-07T18:56:09Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p16 (site 0, instr 6); saturated sources at one position 0 of 2048 at p0 (site 0, instr 6); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:56:10Z] p4107-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 261 (bin 484487) z_max +11.76 min 55 z_min -6.45 chi2/dof 9.50003 chi2_z +24618.72 top0.1% 0.17621% top0.5% 0.85035% top1% 1.67069%
[2026-10-07T18:56:10Z] p4107-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00061 largest 261 (item 0x76487) at +5.68 sigma smallest at -4.80; buckets64 chi2/dof 1.00265 largest 7052 (bucket 200410) at +4.85 sigma smallest at -4.28
[2026-10-07T18:56:16Z] p4107-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 253 (bin 3626963) z_max +11.05 min 57 z_min -6.28 chi2/dof 9.49942 chi2_z +24616.95 top0.1% 0.17614% top0.5% 0.85010% top1% 1.67040%
[2026-10-07T18:56:16Z] p4107-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99987 largest +5.79 sigma; buckets64 chi2/dof 0.99939 largest +4.82 smallest -4.31
[2026-10-07T18:56:16Z] 6-sigma p4107-attack-f8 items buckets64 against the window density: largest bucket +4.85 sigma, smallest -4.28 -> within 6 sigma
[2026-10-07T18:56:16Z] hot-set p4107-attack-f8 items (windowed control): f 0.1% S_f 0.17621% E_f(control) 0.17614% X_f +0.00007% X_f/f +0.0007 -> no hot set
[2026-10-07T18:56:16Z] hot-set p4107-attack-f8 items (windowed control): f 0.5% S_f 0.85035% E_f(control) 0.85010% X_f +0.00025% X_f/f +0.0005 -> no hot set
[2026-10-07T18:56:16Z] hot-set p4107-attack-f8 items (windowed control): f 1.0% S_f 1.67069% E_f(control) 1.67040% X_f +0.00029% X_f/f +0.0003 -> no hot set
[2026-10-07T18:56:16Z] hot-set p4107-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:56:21Z] p4107-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 13071644) z_max +5.57 min 73 z_min -4.86 chi2/dof 1.00021 chi2_z +0.61 top0.1% 0.13106% top0.5% 0.63246% top1% 1.24332%
[2026-10-07T18:56:21Z] hot-set p4107-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.17621% E_f(control) 0.13106% X_f +0.04515% X_f/f +0.4515 -> no hot set
[2026-10-07T18:56:21Z] hot-set p4107-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.85035% E_f(control) 0.63246% X_f +0.21789% X_f/f +0.4358 -> no hot set
[2026-10-07T18:56:21Z] hot-set p4107-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.67069% E_f(control) 1.24332% X_f +0.42736% X_f/f +0.4274 -> no hot set
[2026-10-07T18:56:21Z] hot-set p4107-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:56:21Z] ratio p4107-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0004x / 1.0003x / 1.0002x (gate 1.2x at 0.1%: within); over the FLAT control 1.3445x / 1.3445x / 1.3437x
[2026-10-07T18:56:21Z] hottest item p4107-attack-f8 (0x076487): 261 reads (0.0000% of all); predicted source none
[2026-10-07T18:56:21Z] program p4107-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T18:56:21Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "101710", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T18:56:21Z] census warps: programs [101710] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:56:22Z] day 20730: cache filled in 0.56 s, fnv 448274a57f508cbc
[2026-10-07T18:56:26Z] table: 16777216 items derived with their 8 lines in 4.5 s; library comparison sample (0 mismatches)
[2026-10-07T18:56:30Z] program p101710-attack-f8: epoch seed 20de618d385b1b6bc3e0b96e74b50544e25a1cf3e9a631640b2db5bc497bfd7d era seed 9250d0838ee83ca2b95ee46642b31dae159f03c80600d121db2c877aad18c34e id 62a749ef32ba9501 attempt 0 class mx8-era1da7acf7+sh256x27 op mix load=16 xor=11 add=7 mad=7 shfl=7 sub=5 mulhi=4 rotr=4 mul=2 rotl=1; era stride mul 0x84c68c49 rot 14 interleave [9, 11, 12, 13] windows 3:0:0 4:1:0 6:1:1 9:1:0 10:0:0 16:2:3 30:0:0 32:1:0 36:0:0 37:0:0 41:0:0 42:0:0 54:1:0 60:2:0 61:1:1 63:0:0
[2026-10-07T18:56:30Z] load site instr 3: src r6 win 0 off 0; last base writer sub at 0; writers back to the last injecting one: sub@0; shadow writes of r6 per rep: add=10 mad=3 mul=5 mulhi=2 rotl=2 rotr=4 shfl=4 sub=3 xor=6
[2026-10-07T18:56:30Z] load site instr 4: src r3 win 1 off 0; last base writer load at 3; writers back to the last injecting one: load@3; shadow writes of r3 per rep: add=7 mad=2 mul=3 mulhi=2 or=1 rotl=4 rotr=3 shfl=5 sub=2 xor=3
[2026-10-07T18:56:30Z] load site instr 6: src r1 win 1 off 1; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r1 per rep: add=2 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=4 shfl=2 sub=2 xor=3
[2026-10-07T18:56:30Z] load site instr 9: src r3 win 1 off 0; last base writer shfl at 5; writers back to the last injecting one: shfl@5; shadow writes of r3 per rep: add=7 mad=2 mul=3 mulhi=2 or=1 rotl=4 rotr=3 shfl=5 sub=2 xor=3
[2026-10-07T18:56:30Z] load site instr 10: src r7 win 0 off 0; last base writer load at 9; writers back to the last injecting one: load@9; shadow writes of r7 per rep: add=6 mad=2 mul=6 mulhi=4 or=1 rotl=3 rotr=3 shfl=2 sub=4 xor=3
[2026-10-07T18:56:30Z] load site instr 16: src r5 win 2 off 3; last base writer xor at 15; writers back to the last injecting one: xor@15; shadow writes of r5 per rep: add=9 mad=3 mul=2 mulhi=3 or=2 rotl=2 rotr=1 shfl=5 sub=1 xor=7
[2026-10-07T18:56:30Z] load site instr 30: src r2 win 0 off 0; last base writer xor at 28; writers back to the last injecting one: xor@28; shadow writes of r2 per rep: add=3 mad=2 mul=6 mulhi=2 or=3 rotl=2 shfl=5 sub=5 xor=7
[2026-10-07T18:56:30Z] load site instr 32: src r6 win 1 off 0; last base writer mad at 24; writers back to the last injecting one: mad@24; shadow writes of r6 per rep: add=10 mad=3 mul=5 mulhi=2 rotl=2 rotr=4 shfl=4 sub=3 xor=6
[2026-10-07T18:56:30Z] load site instr 36: src r5 win 0 off 0; last base writer rotl at 31; writers back to the last injecting one: rotl@31 add@29; shadow writes of r5 per rep: add=9 mad=3 mul=2 mulhi=3 or=2 rotl=2 rotr=1 shfl=5 sub=1 xor=7
[2026-10-07T18:56:30Z] load site instr 37: src r1 win 0 off 0; last base writer load at 30; writers back to the last injecting one: load@30; shadow writes of r1 per rep: add=2 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=4 shfl=2 sub=2 xor=3
[2026-10-07T18:56:30Z] load site instr 41: src r3 win 0 off 0; last base writer mad at 38; writers back to the last injecting one: mad@38; shadow writes of r3 per rep: add=7 mad=2 mul=3 mulhi=2 or=1 rotl=4 rotr=3 shfl=5 sub=2 xor=3
[2026-10-07T18:56:30Z] load site instr 42: src r4 win 0 off 0; last base writer load at 37; writers back to the last injecting one: load@37; shadow writes of r4 per rep: add=3 mad=4 mul=3 mulhi=3 rotl=7 rotr=2 shfl=1 sub=3 xor=4
[2026-10-07T18:56:30Z] load site instr 54: src r5 win 1 off 0; last base writer shfl at 46; writers back to the last injecting one: shfl@46; shadow writes of r5 per rep: add=9 mad=3 mul=2 mulhi=3 or=2 rotl=2 rotr=1 shfl=5 sub=1 xor=7
[2026-10-07T18:56:30Z] load site instr 60: src r1 win 2 off 0; last base writer shfl at 47; writers back to the last injecting one: shfl@47; shadow writes of r1 per rep: add=2 mad=1 mul=2 mulhi=1 or=1 rotl=2 rotr=4 shfl=2 sub=2 xor=3
[2026-10-07T18:56:30Z] load site instr 61: src r6 win 1 off 1; last base writer rotr at 58; writers back to the last injecting one: rotr@58 sub@53; shadow writes of r6 per rep: add=10 mad=3 mul=5 mulhi=2 rotl=2 rotr=4 shfl=4 sub=3 xor=6
[2026-10-07T18:56:30Z] load site instr 63: src r0 win 0 off 0; last base writer mad at 56; writers back to the last injecting one: mad@56; shadow writes of r0 per rep: add=7 mad=6 mul=3 mulhi=1 or=4 rotl=2 rotr=2 shfl=1 sub=1 xor=4
[2026-10-07T18:56:30Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x0,2^22) (0x800000,2^23) (0x0,2^24); expected reads per item by quarter 160.000 128.000 96.000 128.000 (flat uniform 128.000)
[2026-10-07T18:58:50Z] 524288 warps (16777216 nonces) interpreted in 139.6 s (8.523 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T18:58:50Z] p101710-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8713
[2026-10-07T18:58:50Z] p101710-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T18:58:50Z] p101710-attack-f8 distinct lines per warp: n 524288 min 32560 p1 32605 median 32637 p99 32664 max 32686 mean 32636.2319
[2026-10-07T18:58:50Z] p101710-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4838
[2026-10-07T18:58:50Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T18:58:50Z] positions: largest hi16-bucket (256 items) share 0.0070% at p93 (iteration 5, site 13, instr 60); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p27 (site 11, instr 42)
[2026-10-07T18:58:50Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p33 (site 1, instr 4); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T18:58:50Z] p101710-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 230 (bin 2892200) z_max +9.02 min 51 z_min -6.81 chi2/dof 5.03546 chi2_z +11687.94 top0.1% 0.15582% top0.5% 0.74981% top1% 1.47120%
[2026-10-07T18:58:50Z] p101710-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.03671 largest 195 (item 0x708008) at +5.92 sigma smallest at -4.86; buckets64 chi2/dof 3.36265 largest 8837 (bucket 254991) at +7.13 sigma smallest at -5.62
[2026-10-07T18:58:57Z] p101710-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 226 (bin 106244) z_max +8.66 min 50 z_min -6.89 chi2/dof 4.99998 chi2_z +11585.18 top0.1% 0.15528% top0.5% 0.74779% top1% 1.46776%
[2026-10-07T18:58:57Z] p101710-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99997 largest +5.31 sigma; buckets64 chi2/dof 1.00339 largest +4.86 smallest -4.43
[2026-10-07T18:58:57Z] 6-sigma p101710-attack-f8 items buckets64 against the window density: largest bucket +7.13 sigma, smallest -5.62 -> FLAGGED (beyond 6 sigma)
[2026-10-07T18:58:57Z] hot-set p101710-attack-f8 items (windowed control): f 0.1% S_f 0.15582% E_f(control) 0.15528% X_f +0.00053% X_f/f +0.0053 -> no hot set
[2026-10-07T18:58:57Z] hot-set p101710-attack-f8 items (windowed control): f 0.5% S_f 0.74981% E_f(control) 0.74779% X_f +0.00202% X_f/f +0.0040 -> no hot set
[2026-10-07T18:58:57Z] hot-set p101710-attack-f8 items (windowed control): f 1.0% S_f 1.47120% E_f(control) 1.46776% X_f +0.00344% X_f/f +0.0034 -> no hot set
[2026-10-07T18:58:57Z] hot-set p101710-attack-f8 items (windowed control): verdict clear
[2026-10-07T18:59:03Z] p101710-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 11298889) z_max +5.83 min 74 z_min -4.77 chi2/dof 1.00040 chi2_z +1.15 top0.1% 0.13112% top0.5% 0.63261% top1% 1.24353%
[2026-10-07T18:59:03Z] hot-set p101710-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15582% E_f(control) 0.13112% X_f +0.02470% X_f/f +0.2470 -> no hot set
[2026-10-07T18:59:03Z] hot-set p101710-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.74981% E_f(control) 0.63261% X_f +0.11720% X_f/f +0.2344 -> no hot set
[2026-10-07T18:59:03Z] hot-set p101710-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.47120% E_f(control) 1.24353% X_f +0.22766% X_f/f +0.2277 -> no hot set
[2026-10-07T18:59:03Z] hot-set p101710-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T18:59:03Z] ratio p101710-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0034x / 1.0027x / 1.0023x (gate 1.2x at 0.1%: within); over the FLAT control 1.1884x / 1.1853x / 1.1831x
[2026-10-07T18:59:03Z] hottest item p101710-attack-f8 (0x2c21a8): 230 reads (0.0000% of all); predicted source none
[2026-10-07T18:59:03Z] program p101710-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T18:59:03Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "101886", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T18:59:03Z] census warps: programs [101886] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T18:59:04Z] day 20730: cache filled in 0.59 s, fnv 448274a57f508cbc
[2026-10-07T18:59:10Z] table: 16777216 items derived with their 8 lines in 5.2 s; library comparison sample (0 mismatches)
[2026-10-07T18:59:13Z] program p101886-attack-f8: epoch seed 8a3fea6b39394f8f7aee3b6732735420cc22da213837415cbb4d258065c1f7d1 era seed 673dcc8c08c5a016a2e4723959a6c5ac071f153f37aef3d5620cb2a84a428ed9 id 46f640117d2e25a9 attempt 0 class mx8-era6bcec6d6+sh256x27 op mix load=16 add=10 shfl=7 rotr=6 xor=6 mad=5 mulhi=5 mul=4 sub=3 rotl=2; era stride mul 0xd254bce1 rot 1 interleave [4, 6, 11, 15] windows 4:2:0 6:1:1 10:0:0 14:1:0 17:2:1 18:1:0 20:2:2 23:2:2 24:1:1 27:1:0 30:0:0 46:1:1 57:2:0 58:2:1 61:2:3 63:0:0
[2026-10-07T18:59:13Z] load site instr 4: src r1 win 2 off 0; last base writer shfl at 2; writers back to the last injecting one: shfl@2; shadow writes of r1 per rep: add=9 mad=4 mul=6 mulhi=2 or=4 rotl=2 rotr=2 shfl=7 sub=2 xor=2
[2026-10-07T18:59:13Z] load site instr 6: src r7 win 1 off 1; last base writer rotr at 1; writers back to the last injecting one: rotr@1 load@63; shadow writes of r7 per rep: add=7 mul=4 mulhi=1 or=1 rotl=2 rotr=3 shfl=3 sub=2 xor=6
[2026-10-07T18:59:13Z] load site instr 10: src r6 win 0 off 0; last base writer add at 9; writers back to the last injecting one: add@9; shadow writes of r6 per rep: add=6 mad=2 mul=3 mulhi=3 rotl=2 rotr=4 shfl=1 sub=5 xor=4
[2026-10-07T18:59:13Z] load site instr 14: src r2 win 1 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r2 per rep: add=5 mul=4 or=3 rotl=1 rotr=1 shfl=4 sub=5 xor=4
[2026-10-07T18:59:13Z] load site instr 17: src r7 win 2 off 1; last base writer xor at 12; writers back to the last injecting one: xor@12; shadow writes of r7 per rep: add=7 mul=4 mulhi=1 or=1 rotl=2 rotr=3 shfl=3 sub=2 xor=6
[2026-10-07T18:59:13Z] load site instr 18: src r6 win 1 off 0; last base writer load at 14; writers back to the last injecting one: load@14; shadow writes of r6 per rep: add=6 mad=2 mul=3 mulhi=3 rotl=2 rotr=4 shfl=1 sub=5 xor=4
[2026-10-07T18:59:13Z] load site instr 20: src r1 win 2 off 2; last base writer load at 18; writers back to the last injecting one: load@18; shadow writes of r1 per rep: add=9 mad=4 mul=6 mulhi=2 or=4 rotl=2 rotr=2 shfl=7 sub=2 xor=2
[2026-10-07T18:59:13Z] load site instr 23: src r1 win 2 off 2; last base writer add at 21; writers back to the last injecting one: add@21; shadow writes of r1 per rep: add=9 mad=4 mul=6 mulhi=2 or=4 rotl=2 rotr=2 shfl=7 sub=2 xor=2
[2026-10-07T18:59:13Z] load site instr 24: src r6 win 1 off 1; last base writer rotl at 22; writers back to the last injecting one: rotl@22 load@14; shadow writes of r6 per rep: add=6 mad=2 mul=3 mulhi=3 rotl=2 rotr=4 shfl=1 sub=5 xor=4
[2026-10-07T18:59:13Z] load site instr 27: src r5 win 1 off 0; last base writer xor at 25; writers back to the last injecting one: xor@25; shadow writes of r5 per rep: add=5 mad=4 mul=5 or=1 rotl=7 rotr=1 shfl=7 sub=4 xor=1
[2026-10-07T18:59:13Z] load site instr 30: src r1 win 0 off 0; last base writer xor at 26; writers back to the last injecting one: xor@26; shadow writes of r1 per rep: add=9 mad=4 mul=6 mulhi=2 or=4 rotl=2 rotr=2 shfl=7 sub=2 xor=2
[2026-10-07T18:59:13Z] load site instr 46: src r4 win 1 off 1; last base writer add at 42; writers back to the last injecting one: add@42; shadow writes of r4 per rep: add=2 mad=6 mul=2 mulhi=1 rotl=6 rotr=1 shfl=7 sub=4 xor=6
[2026-10-07T18:59:13Z] load site instr 57: src r5 win 2 off 0; last base writer add at 56; writers back to the last injecting one: add@56; shadow writes of r5 per rep: add=5 mad=4 mul=5 or=1 rotl=7 rotr=1 shfl=7 sub=4 xor=1
[2026-10-07T18:59:13Z] load site instr 58: src r3 win 2 off 1; last base writer load at 46; writers back to the last injecting one: load@46; shadow writes of r3 per rep: add=2 mad=3 mul=4 mulhi=4 or=2 rotl=8 rotr=3 shfl=2 sub=3 xor=7
[2026-10-07T18:59:13Z] load site instr 61: src r3 win 2 off 3; last base writer add at 59; writers back to the last injecting one: add@59; shadow writes of r3 per rep: add=2 mad=3 mul=4 mulhi=4 or=2 rotl=8 rotr=3 shfl=2 sub=3 xor=7
[2026-10-07T18:59:13Z] load site instr 63: src r6 win 0 off 0; last base writer mad at 52; writers back to the last injecting one: mad@52; shadow writes of r6 per rep: add=6 mad=2 mul=3 mulhi=3 rotl=2 rotr=4 shfl=1 sub=5 xor=4
[2026-10-07T18:59:13Z] window layer: site item windows (first, items) (0x0,2^22) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x400000,2^22) (0x0,2^23) (0x800000,2^22) (0x800000,2^22) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^22) (0x400000,2^22) (0xc00000,2^22) (0x0,2^24); expected reads per item by quarter 136.000 136.000 136.000 104.000 (flat uniform 128.000)
[2026-10-07T19:01:46Z] 524288 warps (16777216 nonces) interpreted in 152.7 s (9.319 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:01:46Z] p101886-attack-f8 distinct lines per hash: n 16777216 min 1012 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8712
[2026-10-07T19:01:46Z] p101886-attack-f8 distinct items per hash: n 16777216 min 127 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:01:46Z] p101886-attack-f8 distinct lines per warp: n 524288 min 32565 p1 32605 median 32637 p99 32664 max 32688 mean 32636.3190
[2026-10-07T19:01:46Z] p101886-attack-f8 distinct items per warp: n 524288 min 4090 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4942
[2026-10-07T19:01:46Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:01:46Z] positions: largest hi16-bucket (256 items) share 0.0071% at p116 (iteration 7, site 4, instr 17); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 4)
[2026-10-07T19:01:46Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p0 (site 0, instr 4); saturated sources at one position 0 of 2048 at p0 (site 0, instr 4); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:01:46Z] p101886-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 201 (bin 8008368) z_max +6.45 min 59 z_min -6.10 chi2/dof 2.49962 chi2_z +4343.37 top0.1% 0.13743% top0.5% 0.66312% top1% 1.30353%
[2026-10-07T19:01:46Z] p101886-attack-f8 item histogram against the window density: full 2^24 chi2/dof 0.99952 largest 201 (item 0x7a32b0) at +5.57 sigma smallest at -4.54; buckets64 chi2/dof 1.00180 largest 9131 (bucket 152447) at +4.58 sigma smallest at -4.69
[2026-10-07T19:01:53Z] p101886-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 207 (bin 6083881) z_max +6.98 min 56 z_min -6.36 chi2/dof 2.50050 chi2_z +4345.91 top0.1% 0.13743% top0.5% 0.66318% top1% 1.30367%
[2026-10-07T19:01:53Z] p101886-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00018 largest +6.09 sigma; buckets64 chi2/dof 1.00060 largest +5.17 smallest -4.75
[2026-10-07T19:01:53Z] 6-sigma p101886-attack-f8 items buckets64 against the window density: largest bucket +4.58 sigma, smallest -4.69 -> within 6 sigma
[2026-10-07T19:01:53Z] hot-set p101886-attack-f8 items (windowed control): f 0.1% S_f 0.13743% E_f(control) 0.13743% X_f +0.00000% X_f/f +0.0000 -> no hot set
[2026-10-07T19:01:53Z] hot-set p101886-attack-f8 items (windowed control): f 0.5% S_f 0.66312% E_f(control) 0.66318% X_f -0.00006% X_f/f -0.0001 -> no hot set
[2026-10-07T19:01:53Z] hot-set p101886-attack-f8 items (windowed control): f 1.0% S_f 1.30353% E_f(control) 1.30367% X_f -0.00014% X_f/f -0.0001 -> no hot set
[2026-10-07T19:01:53Z] hot-set p101886-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:01:58Z] p101886-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 196 (bin 7313621) z_max +6.01 min 72 z_min -4.95 chi2/dof 1.00032 chi2_z +0.94 top0.1% 0.13107% top0.5% 0.63252% top1% 1.24340%
[2026-10-07T19:01:58Z] hot-set p101886-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.13743% E_f(control) 0.13107% X_f +0.00636% X_f/f +0.0636 -> no hot set
[2026-10-07T19:01:58Z] hot-set p101886-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.66312% E_f(control) 0.63252% X_f +0.03060% X_f/f +0.0612 -> no hot set
[2026-10-07T19:01:58Z] hot-set p101886-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.30353% E_f(control) 1.24340% X_f +0.06014% X_f/f +0.0601 -> no hot set
[2026-10-07T19:01:58Z] hot-set p101886-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:01:58Z] ratio p101886-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0000x / 0.9999x / 0.9999x (gate 1.2x at 0.1%: within); over the FLAT control 1.0485x / 1.0484x / 1.0484x
[2026-10-07T19:01:58Z] hottest item p101886-attack-f8 (0x7a32b0): 201 reads (0.0000% of all); predicted source none
[2026-10-07T19:01:58Z] program p101886-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:01:59Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "6132", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:01:59Z] census warps: programs [6132] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:01:59Z] day 20730: cache filled in 0.63 s, fnv 448274a57f508cbc
[2026-10-07T19:02:04Z] table: 16777216 items derived with their 8 lines in 4.4 s; library comparison sample (0 mismatches)
[2026-10-07T19:02:08Z] program p6132-attack-f8: epoch seed a83b83226e9959d88dc3531f06079e053b05a95975c612bd93c341a98469b1bd era seed 650a66624a399cd9552ca8750c77a63c798b0df51ee5cf3480baddfbd4679019 id b04fe05087ed4937 attempt 0 class mx8-era64c929d7+sh256x27 op mix load=16 add=8 mul=8 xor=7 mad=6 or=5 shfl=4 sub=4 mulhi=2 rotl=2 rotr=2; era stride mul 0x217304b9 rot 13 interleave [4, 5, 11, 13] windows 4:1:1 7:2:1 8:0:0 9:2:1 13:2:2 16:2:2 17:2:0 27:2:3 29:0:0 35:1:0 37:0:0 44:2:3 48:2:3 51:2:0 57:2:2 62:0:0
[2026-10-07T19:02:08Z] load site instr 4: src r2 win 1 off 1; last base writer add at 1; writers back to the last injecting one: add@1; shadow writes of r2 per rep: add=2 mul=2 mulhi=7 or=4 rotl=3 rotr=1 shfl=3 sub=1 xor=2
[2026-10-07T19:02:08Z] load site instr 7: src r4 win 2 off 1; last base writer shfl at 6; writers back to the last injecting one: shfl@6; shadow writes of r4 per rep: add=4 mad=3 mul=5 mulhi=2 rotl=1 rotr=5 shfl=2 sub=1 xor=6
[2026-10-07T19:02:08Z] load site instr 8: src r6 win 0 off 0; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r6 per rep: add=6 mad=3 mul=5 mulhi=3 or=3 rotl=2 rotr=2 shfl=5 sub=2 xor=7
[2026-10-07T19:02:08Z] load site instr 9: src r4 win 2 off 1; last base writer load at 8; writers back to the last injecting one: load@8; shadow writes of r4 per rep: add=4 mad=3 mul=5 mulhi=2 rotl=1 rotr=5 shfl=2 sub=1 xor=6
[2026-10-07T19:02:08Z] load site instr 13: src r3 win 2 off 2; last base writer rotl at 12; writers back to the last injecting one: rotl@12 shfl@63; shadow writes of r3 per rep: add=2 mad=1 mul=1 mulhi=2 or=2 rotl=6 rotr=2 shfl=7 sub=2 xor=5
[2026-10-07T19:02:08Z] load site instr 16: src r7 win 2 off 2; last base writer add at 10; writers back to the last injecting one: add@10; shadow writes of r7 per rep: add=7 mad=10 mul=4 or=1 rotl=3 rotr=2 shfl=7 xor=6
[2026-10-07T19:02:08Z] load site instr 17: src r0 win 2 off 0; last base writer add at 15; writers back to the last injecting one: add@15; shadow writes of r0 per rep: add=8 mad=5 mul=6 mulhi=2 rotl=3 rotr=3 shfl=2 sub=1 xor=7
[2026-10-07T19:02:08Z] load site instr 27: src r3 win 2 off 3; last base writer mad at 24; writers back to the last injecting one: mad@24; shadow writes of r3 per rep: add=2 mad=1 mul=1 mulhi=2 or=2 rotl=6 rotr=2 shfl=7 sub=2 xor=5
[2026-10-07T19:02:08Z] load site instr 29: src r1 win 0 off 0; last base writer add at 22; writers back to the last injecting one: add@22; shadow writes of r1 per rep: add=5 mad=1 mul=4 mulhi=2 or=3 rotl=3 rotr=2 shfl=2 sub=4 xor=6
[2026-10-07T19:02:08Z] load site instr 35: src r1 win 1 off 0; last base writer xor at 33; writers back to the last injecting one: xor@33; shadow writes of r1 per rep: add=5 mad=1 mul=4 mulhi=2 or=3 rotl=3 rotr=2 shfl=2 sub=4 xor=6
[2026-10-07T19:02:08Z] load site instr 37: src r7 win 0 off 0; last base writer load at 29; writers back to the last injecting one: load@29; shadow writes of r7 per rep: add=7 mad=10 mul=4 or=1 rotl=3 rotr=2 shfl=7 xor=6
[2026-10-07T19:02:08Z] load site instr 44: src r7 win 2 off 3; last base writer sub at 43; writers back to the last injecting one: sub@43; shadow writes of r7 per rep: add=7 mad=10 mul=4 or=1 rotl=3 rotr=2 shfl=7 xor=6
[2026-10-07T19:02:08Z] load site instr 48: src r4 win 2 off 3; last base writer shfl at 38; writers back to the last injecting one: shfl@38; shadow writes of r4 per rep: add=4 mad=3 mul=5 mulhi=2 rotl=1 rotr=5 shfl=2 sub=1 xor=6
[2026-10-07T19:02:08Z] load site instr 51: src r1 win 2 off 0; last base writer load at 48; writers back to the last injecting one: load@48; shadow writes of r1 per rep: add=5 mad=1 mul=4 mulhi=2 or=3 rotl=3 rotr=2 shfl=2 sub=4 xor=6
[2026-10-07T19:02:08Z] load site instr 57: src r6 win 2 off 2; last base writer load at 51; writers back to the last injecting one: load@51; shadow writes of r6 per rep: add=6 mad=3 mul=5 mulhi=3 or=3 rotl=2 rotr=2 shfl=5 sub=2 xor=7
[2026-10-07T19:02:08Z] load site instr 62: src r2 win 0 off 0; last base writer load at 57; writers back to the last injecting one: load@57; shadow writes of r2 per rep: add=2 mul=2 mulhi=7 or=4 rotl=3 rotr=1 shfl=3 sub=1 xor=2
[2026-10-07T19:02:08Z] window layer: site item windows (first, items) (0x800000,2^23) (0x400000,2^22) (0x0,2^24) (0x400000,2^22) (0x800000,2^22) (0x800000,2^22) (0x0,2^22) (0xc00000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0xc00000,2^22) (0xc00000,2^22) (0x0,2^22) (0x800000,2^22) (0x0,2^24); expected reads per item by quarter 112.000 112.000 144.000 144.000 (flat uniform 128.000)
[2026-10-07T19:04:11Z] 524288 warps (16777216 nonces) interpreted in 123.0 s (7.507 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:04:11Z] p6132-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8714
[2026-10-07T19:04:11Z] p6132-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:04:11Z] p6132-attack-f8 distinct lines per warp: n 524288 min 32564 p1 32605 median 32637 p99 32664 max 32687 mean 32636.3491
[2026-10-07T19:04:11Z] p6132-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4928
[2026-10-07T19:04:11Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:04:11Z] positions: largest hi16-bucket (256 items) share 0.0070% at p123 (iteration 7, site 11, instr 44); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p9 (site 9, instr 35)
[2026-10-07T19:04:11Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p57 (site 9, instr 35); saturated sources at one position 0 of 2048 at p0 (site 0, instr 4); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:04:11Z] p6132-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 207 (bin 11017463) z_max +6.98 min 61 z_min -5.92 chi2/dof 2.99912 chi2_z +5790.06 top0.1% 0.14335% top0.5% 0.69133% top1% 1.35811%
[2026-10-07T19:04:11Z] p6132-attack-f8 item histogram against the window density: full 2^24 chi2/dof 0.99941 largest 171 (item 0x1af1a4) at +5.57 sigma smallest at -4.82; buckets64 chi2/dof 1.00226 largest 7554 (bucket 92905) at +4.56 sigma smallest at -4.57
[2026-10-07T19:04:19Z] p6132-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 212 (bin 12563240) z_max +7.42 min 62 z_min -5.83 chi2/dof 3.00014 chi2_z +5793.01 top0.1% 0.14340% top0.5% 0.69149% top1% 1.35839%
[2026-10-07T19:04:19Z] p6132-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00048 largest +6.05 sigma; buckets64 chi2/dof 1.00207 largest +5.04 smallest -4.53
[2026-10-07T19:04:19Z] 6-sigma p6132-attack-f8 items buckets64 against the window density: largest bucket +4.56 sigma, smallest -4.57 -> within 6 sigma
[2026-10-07T19:04:19Z] hot-set p6132-attack-f8 items (windowed control): f 0.1% S_f 0.14335% E_f(control) 0.14340% X_f -0.00006% X_f/f -0.0006 -> no hot set
[2026-10-07T19:04:19Z] hot-set p6132-attack-f8 items (windowed control): f 0.5% S_f 0.69133% E_f(control) 0.69149% X_f -0.00016% X_f/f -0.0003 -> no hot set
[2026-10-07T19:04:19Z] hot-set p6132-attack-f8 items (windowed control): f 1.0% S_f 1.35811% E_f(control) 1.35839% X_f -0.00028% X_f/f -0.0003 -> no hot set
[2026-10-07T19:04:19Z] hot-set p6132-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:04:25Z] p6132-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 190 (bin 8700551) z_max +5.48 min 70 z_min -5.13 chi2/dof 1.00069 chi2_z +2.01 top0.1% 0.13113% top0.5% 0.63265% top1% 1.24364%
[2026-10-07T19:04:25Z] hot-set p6132-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.14335% E_f(control) 0.13113% X_f +0.01221% X_f/f +0.1221 -> no hot set
[2026-10-07T19:04:25Z] hot-set p6132-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.69133% E_f(control) 0.63265% X_f +0.05868% X_f/f +0.1174 -> no hot set
[2026-10-07T19:04:25Z] hot-set p6132-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.35811% E_f(control) 1.24364% X_f +0.11446% X_f/f +0.1145 -> no hot set
[2026-10-07T19:04:25Z] hot-set p6132-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:04:25Z] ratio p6132-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 0.9996x / 0.9998x / 0.9998x (gate 1.2x at 0.1%: within); over the FLAT control 1.0931x / 1.0928x / 1.0920x
[2026-10-07T19:04:25Z] hottest item p6132-attack-f8 (0xc9a802): 207 reads (0.0000% of all); predicted source none
[2026-10-07T19:04:25Z] program p6132-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:04:25Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "105915", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:04:25Z] census warps: programs [105915] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:04:26Z] day 20730: cache filled in 0.62 s, fnv 448274a57f508cbc
[2026-10-07T19:04:30Z] table: 16777216 items derived with their 8 lines in 3.8 s; library comparison sample (0 mismatches)
[2026-10-07T19:04:33Z] program p105915-attack-f8: epoch seed 0262cc9244db929e15f0e2b9584482f9619c9cb4f12340cc620d44ba72d0c88b era seed 13f6366b890b73c4c4c097db0b167d3487f8d55f766431b7e549868e56aee92e id 551e35d2a7162781 attempt 2 class mx8-era57398823+sh256x27 op mix load=16 mul=11 mad=9 shfl=8 xor=7 sub=4 add=3 rotr=3 or=2 mulhi=1; era stride mul 0xf3c26ca1 rot 5 interleave [0, 1, 5, 13] windows 7:2:1 8:1:0 11:2:2 12:1:1 16:1:0 17:2:1 19:1:0 21:1:1 27:0:0 38:2:2 39:0:0 44:1:1 45:2:1 48:0:0 52:2:3 58:1:1
[2026-10-07T19:04:33Z] load site instr 7: src r0 win 2 off 1; last base writer xor at 2; writers back to the last injecting one: xor@2; shadow writes of r0 per rep: add=5 mad=5 mul=3 or=2 rotl=3 rotr=1 shfl=2 sub=1 xor=2
[2026-10-07T19:04:33Z] load site instr 8: src r5 win 1 off 0; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r5 per rep: add=3 mad=2 mul=2 mulhi=4 or=2 rotl=5 rotr=3 shfl=2 sub=3 xor=8
[2026-10-07T19:04:33Z] load site instr 11: src r0 win 2 off 2; last base writer shfl at 9; writers back to the last injecting one: shfl@9; shadow writes of r0 per rep: add=5 mad=5 mul=3 or=2 rotl=3 rotr=1 shfl=2 sub=1 xor=2
[2026-10-07T19:04:33Z] load site instr 12: src r7 win 1 off 1; last base writer sub at 5; writers back to the last injecting one: sub@5; shadow writes of r7 per rep: add=6 mad=3 mul=7 mulhi=3 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=8
[2026-10-07T19:04:33Z] load site instr 16: src r7 win 1 off 0; last base writer xor at 15; writers back to the last injecting one: xor@15; shadow writes of r7 per rep: add=6 mad=3 mul=7 mulhi=3 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=8
[2026-10-07T19:04:33Z] load site instr 17: src r4 win 2 off 1; last base writer load at 16; writers back to the last injecting one: load@16; shadow writes of r4 per rep: add=8 mad=7 mul=3 mulhi=4 rotl=4 rotr=1 shfl=1 sub=3 xor=9
[2026-10-07T19:04:33Z] load site instr 19: src r1 win 1 off 0; last base writer load at 17; writers back to the last injecting one: load@17; shadow writes of r1 per rep: add=3 mad=5 mul=3 mulhi=3 or=2 rotl=1 rotr=4 shfl=1 sub=2 xor=6
[2026-10-07T19:04:33Z] load site instr 21: src r7 win 1 off 1; last base writer sub at 20; writers back to the last injecting one: sub@20; shadow writes of r7 per rep: add=6 mad=3 mul=7 mulhi=3 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=8
[2026-10-07T19:04:33Z] load site instr 27: src r5 win 0 off 0; last base writer shfl at 24; writers back to the last injecting one: shfl@24; shadow writes of r5 per rep: add=3 mad=2 mul=2 mulhi=4 or=2 rotl=5 rotr=3 shfl=2 sub=3 xor=8
[2026-10-07T19:04:33Z] load site instr 38: src r3 win 2 off 2; last base writer mad at 32; writers back to the last injecting one: mad@32; shadow writes of r3 per rep: add=9 mad=5 mul=1 mulhi=1 or=2 rotl=3 rotr=4 shfl=3 sub=2 xor=7
[2026-10-07T19:04:33Z] load site instr 39: src r7 win 0 off 0; last base writer shfl at 35; writers back to the last injecting one: shfl@35; shadow writes of r7 per rep: add=6 mad=3 mul=7 mulhi=3 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=8
[2026-10-07T19:04:33Z] load site instr 44: src r2 win 1 off 1; last base writer rotr at 31; writers back to the last injecting one: rotr@31 mad@63; shadow writes of r2 per rep: add=2 mad=4 mul=2 mulhi=3 or=1 rotl=5 rotr=4 shfl=2 sub=1 xor=2
[2026-10-07T19:04:33Z] load site instr 45: src r6 win 2 off 1; last base writer load at 38; writers back to the last injecting one: load@38; shadow writes of r6 per rep: add=7 mad=4 mul=1 mulhi=3 rotl=3 rotr=2 shfl=3 sub=3 xor=3
[2026-10-07T19:04:33Z] load site instr 48: src r0 win 0 off 0; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r0 per rep: add=5 mad=5 mul=3 or=2 rotl=3 rotr=1 shfl=2 sub=1 xor=2
[2026-10-07T19:04:33Z] load site instr 52: src r6 win 2 off 3; last base writer shfl at 50; writers back to the last injecting one: shfl@50; shadow writes of r6 per rep: add=7 mad=4 mul=1 mulhi=3 rotl=3 rotr=2 shfl=3 sub=3 xor=3
[2026-10-07T19:04:33Z] load site instr 58: src r4 win 1 off 1; last base writer xor at 49; writers back to the last injecting one: xor@49; shadow writes of r4 per rep: add=8 mad=7 mul=3 mulhi=4 rotl=4 rotr=1 shfl=1 sub=3 xor=9
[2026-10-07T19:04:33Z] window layer: site item windows (first, items) (0x400000,2^22) (0x0,2^23) (0x800000,2^22) (0x800000,2^23) (0x0,2^23) (0x400000,2^22) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x800000,2^22) (0x0,2^24) (0x800000,2^23) (0x400000,2^22) (0x0,2^24) (0xc00000,2^22) (0x800000,2^23); expected reads per item by quarter 72.000 168.000 152.000 120.000 (flat uniform 128.000)
[2026-10-07T19:06:42Z] 524288 warps (16777216 nonces) interpreted in 128.8 s (7.859 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:06:42Z] p105915-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8710
[2026-10-07T19:06:42Z] p105915-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:06:42Z] p105915-attack-f8 distinct lines per warp: n 524288 min 32566 p1 32605 median 32636 p99 32664 max 32690 mean 32636.0353
[2026-10-07T19:06:42Z] p105915-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4568
[2026-10-07T19:06:42Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:06:42Z] positions: largest hi16-bucket (256 items) share 0.0075% at p9 (iteration 0, site 9, instr 38); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p105 (site 9, instr 38)
[2026-10-07T19:06:42Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p4 (site 4, instr 16); saturated sources at one position 0 of 2048 at p0 (site 0, instr 7); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:06:42Z] p105915-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 444 (bin 8388614) z_max +27.93 min 33 z_min -8.40 chi2/dof 12.38838 chi2_z +32984.27 top0.1% 0.22714% top0.5% 0.97886% top1% 1.80875%
[2026-10-07T19:06:43Z] p105915-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.74805 largest 444 (item 0x800006) at +23.68 sigma smallest at -5.43; buckets64 chi2/dof 2.08357 largest 11565 (bucket 131072) at +18.63 sigma smallest at -5.24
[2026-10-07T19:06:49Z] p105915-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 238 (bin 6701937) z_max +9.72 min 33 z_min -8.40 chi2/dof 11.50029 chi2_z +30412.08 top0.1% 0.16233% top0.5% 0.78240% top1% 1.53646%
[2026-10-07T19:06:49Z] p105915-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00041 largest +5.42 sigma; buckets64 chi2/dof 0.99849 largest +4.38 smallest -4.39
[2026-10-07T19:06:49Z] 6-sigma p105915-attack-f8 items buckets64 against the window density: largest bucket +18.63 sigma, smallest -5.24 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:06:49Z] hot-set p105915-attack-f8 items (windowed control): f 0.1% S_f 0.22714% E_f(control) 0.16233% X_f +0.06481% X_f/f +0.6481 -> no hot set
[2026-10-07T19:06:49Z] hot-set p105915-attack-f8 items (windowed control): f 0.5% S_f 0.97886% E_f(control) 0.78240% X_f +0.19646% X_f/f +0.3929 -> no hot set
[2026-10-07T19:06:49Z] hot-set p105915-attack-f8 items (windowed control): f 1.0% S_f 1.80875% E_f(control) 1.53646% X_f +0.27229% X_f/f +0.2723 -> no hot set
[2026-10-07T19:06:49Z] hot-set p105915-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:06:54Z] p105915-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 1122696) z_max +5.57 min 69 z_min -5.21 chi2/dof 0.99975 chi2_z -0.72 top0.1% 0.13106% top0.5% 0.63246% top1% 1.24326%
[2026-10-07T19:06:54Z] hot-set p105915-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.22714% E_f(control) 0.13106% X_f +0.09608% X_f/f +0.9608 -> no hot set
[2026-10-07T19:06:54Z] hot-set p105915-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.97886% E_f(control) 0.63246% X_f +0.34640% X_f/f +0.6928 -> no hot set
[2026-10-07T19:06:54Z] hot-set p105915-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.80875% E_f(control) 1.24326% X_f +0.56550% X_f/f +0.5655 -> no hot set
[2026-10-07T19:06:54Z] hot-set p105915-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:06:54Z] ratio p105915-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.3993x / 1.2511x / 1.1772x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 1.7331x / 1.5477x / 1.4549x
[2026-10-07T19:06:54Z] hottest item p105915-attack-f8 (0x800006): 444 reads (0.0000% of all); predicted source none
[2026-10-07T19:06:54Z] program p105915-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:06:54Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "5133", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:06:54Z] census warps: programs [5133] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:06:55Z] day 20730: cache filled in 0.66 s, fnv 448274a57f508cbc
[2026-10-07T19:06:59Z] table: 16777216 items derived with their 8 lines in 3.8 s; library comparison sample (0 mismatches)
[2026-10-07T19:07:03Z] program p5133-attack-f8: epoch seed 88bef1a847398bd99eb0b75e5225eab6503b799b42114fe5f39e294fae736b37 era seed 0b69786486999afdd27dff870884916b7509e89effd409dda183e5f8a944f07d id 7de789c76e3c8c92 attempt 0 class mx8-eraec34be39+sh256x27 op mix load=16 add=10 mul=8 rotr=6 mad=5 shfl=5 xor=5 mulhi=4 or=2 sub=2 rotl=1; era stride mul 0x9868e497 rot 30 interleave [3, 9, 10, 15] windows 1:1:1 7:2:3 13:2:2 15:1:1 23:1:1 38:0:0 41:2:1 42:1:1 44:2:3 46:1:0 49:0:0 52:0:0 55:1:1 56:0:0 59:2:3 63:0:0
[2026-10-07T19:07:03Z] load site instr 1: src r6 win 1 off 1; last base writer shfl at 0; writers back to the last injecting one: shfl@0; shadow writes of r6 per rep: add=5 mad=3 mul=2 mulhi=3 or=1 rotl=2 rotr=2 shfl=3 sub=4 xor=3
[2026-10-07T19:07:03Z] load site instr 7: src r7 win 2 off 3; last base writer mad at 6; writers back to the last injecting one: mad@6; shadow writes of r7 per rep: add=5 mad=4 mul=4 mulhi=4 or=3 rotl=2 rotr=5 shfl=4 sub=4 xor=4
[2026-10-07T19:07:03Z] load site instr 13: src r5 win 2 off 2; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r5 per rep: add=9 mad=3 mul=5 mulhi=2 or=4 rotl=3 rotr=5 shfl=3 sub=4 xor=4
[2026-10-07T19:07:03Z] load site instr 15: src r2 win 1 off 1; last base writer sub at 5; writers back to the last injecting one: sub@5; shadow writes of r2 per rep: add=5 mad=2 mul=4 mulhi=2 or=1 rotl=6 rotr=1 shfl=6 sub=3 xor=2
[2026-10-07T19:07:03Z] load site instr 23: src r3 win 1 off 1; last base writer shfl at 19; writers back to the last injecting one: shfl@19; shadow writes of r3 per rep: add=7 mad=1 mul=1 mulhi=2 rotl=1 rotr=3 shfl=1 sub=2 xor=4
[2026-10-07T19:07:03Z] load site instr 38: src r4 win 0 off 0; last base writer mad at 29; writers back to the last injecting one: mad@29; shadow writes of r4 per rep: add=8 mad=5 mul=3 mulhi=3 or=3 rotl=2 rotr=2 shfl=7 sub=1 xor=4
[2026-10-07T19:07:03Z] load site instr 41: src r2 win 2 off 1; last base writer add at 26; writers back to the last injecting one: add@26; shadow writes of r2 per rep: add=5 mad=2 mul=4 mulhi=2 or=1 rotl=6 rotr=1 shfl=6 sub=3 xor=2
[2026-10-07T19:07:03Z] load site instr 42: src r1 win 1 off 1; last base writer xor at 39; writers back to the last injecting one: xor@39; shadow writes of r1 per rep: add=5 mad=5 mul=2 mulhi=1 or=1 rotl=5 rotr=1 shfl=4 sub=2 xor=4
[2026-10-07T19:07:03Z] load site instr 44: src r5 win 2 off 3; last base writer rotr at 43; writers back to the last injecting one: rotr@43 load@38; shadow writes of r5 per rep: add=9 mad=3 mul=5 mulhi=2 or=4 rotl=3 rotr=5 shfl=3 sub=4 xor=4
[2026-10-07T19:07:03Z] load site instr 46: src r2 win 1 off 0; last base writer load at 44; writers back to the last injecting one: load@44; shadow writes of r2 per rep: add=5 mad=2 mul=4 mulhi=2 or=1 rotl=6 rotr=1 shfl=6 sub=3 xor=2
[2026-10-07T19:07:03Z] load site instr 49: src r4 win 0 off 0; last base writer shfl at 48; writers back to the last injecting one: shfl@48; shadow writes of r4 per rep: add=8 mad=5 mul=3 mulhi=3 or=3 rotl=2 rotr=2 shfl=7 sub=1 xor=4
[2026-10-07T19:07:03Z] load site instr 52: src r3 win 0 off 0; last base writer load at 49; writers back to the last injecting one: load@49; shadow writes of r3 per rep: add=7 mad=1 mul=1 mulhi=2 rotl=1 rotr=3 shfl=1 sub=2 xor=4
[2026-10-07T19:07:03Z] load site instr 55: src r3 win 1 off 1; last base writer xor at 54; writers back to the last injecting one: xor@54; shadow writes of r3 per rep: add=7 mad=1 mul=1 mulhi=2 rotl=1 rotr=3 shfl=1 sub=2 xor=4
[2026-10-07T19:07:03Z] load site instr 56: src r7 win 0 off 0; last base writer rotr at 47; writers back to the last injecting one: rotr@47 add@45; shadow writes of r7 per rep: add=5 mad=4 mul=4 mulhi=4 or=3 rotl=2 rotr=5 shfl=4 sub=4 xor=4
[2026-10-07T19:07:03Z] load site instr 59: src r1 win 2 off 3; last base writer load at 52; writers back to the last injecting one: load@52; shadow writes of r1 per rep: add=5 mad=5 mul=2 mulhi=1 or=1 rotl=5 rotr=1 shfl=4 sub=2 xor=4
[2026-10-07T19:07:03Z] load site instr 63: src r2 win 0 off 0; last base writer add at 60; writers back to the last injecting one: add@60; shadow writes of r2 per rep: add=5 mad=2 mul=4 mulhi=2 or=1 rotl=6 rotr=1 shfl=6 sub=3 xor=2
[2026-10-07T19:07:03Z] window layer: site item windows (first, items) (0x800000,2^23) (0xc00000,2^22) (0x800000,2^22) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x400000,2^22) (0x800000,2^23) (0xc00000,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0xc00000,2^22) (0x0,2^24); expected reads per item by quarter 56.000 88.000 152.000 216.000 (flat uniform 128.000)
[2026-10-07T19:09:04Z] 524288 warps (16777216 nonces) interpreted in 121.3 s (7.404 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:09:04Z] p5133-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8705
[2026-10-07T19:09:04Z] p5133-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T19:09:04Z] p5133-attack-f8 distinct lines per warp: n 524288 min 32570 p1 32604 median 32636 p99 32664 max 32691 mean 32635.4745
[2026-10-07T19:09:04Z] p5133-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.3838
[2026-10-07T19:09:04Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:09:04Z] positions: largest hi16-bucket (256 items) share 0.0070% at p70 (iteration 4, site 6, instr 41); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 1)
[2026-10-07T19:09:05Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p0 (site 0, instr 1); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:09:05Z] p5133-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 308 (bin 15670016) z_max +15.91 min 22 z_min -9.37 chi2/dof 30.60000 chi2_z +85730.76 top0.1% 0.20816% top0.5% 1.00316% top1% 1.96963%
[2026-10-07T19:09:05Z] p5133-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.06440 largest 308 (item 0xef1b00) at +6.26 sigma smallest at -5.04; buckets64 chi2/dof 1.00775 largest 5991 (bucket 118087) at +4.78 sigma smallest at -4.28
[2026-10-07T19:09:10Z] p5133-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 291 (bin 13638732) z_max +14.41 min 22 z_min -9.37 chi2/dof 30.50030 chi2_z +85441.98 top0.1% 0.20378% top0.5% 0.98610% top1% 1.94005%
[2026-10-07T19:09:10Z] p5133-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00047 largest +6.15 sigma; buckets64 chi2/dof 0.99813 largest +4.68 smallest -4.53
[2026-10-07T19:09:10Z] 6-sigma p5133-attack-f8 items buckets64 against the window density: largest bucket +4.78 sigma, smallest -4.28 -> within 6 sigma
[2026-10-07T19:09:10Z] hot-set p5133-attack-f8 items (windowed control): f 0.1% S_f 0.20816% E_f(control) 0.20378% X_f +0.00439% X_f/f +0.0439 -> no hot set
[2026-10-07T19:09:10Z] hot-set p5133-attack-f8 items (windowed control): f 0.5% S_f 1.00316% E_f(control) 0.98610% X_f +0.01706% X_f/f +0.0341 -> no hot set
[2026-10-07T19:09:10Z] hot-set p5133-attack-f8 items (windowed control): f 1.0% S_f 1.96963% E_f(control) 1.94005% X_f +0.02958% X_f/f +0.0296 -> no hot set
[2026-10-07T19:09:10Z] hot-set p5133-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:09:15Z] p5133-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 193 (bin 15793706) z_max +5.75 min 69 z_min -5.21 chi2/dof 1.00003 chi2_z +0.08 top0.1% 0.13107% top0.5% 0.63246% top1% 1.24334%
[2026-10-07T19:09:15Z] hot-set p5133-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.20816% E_f(control) 0.13107% X_f +0.07709% X_f/f +0.7709 -> no hot set
[2026-10-07T19:09:15Z] hot-set p5133-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.00316% E_f(control) 0.63246% X_f +0.37071% X_f/f +0.7414 -> no hot set
[2026-10-07T19:09:15Z] hot-set p5133-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.96963% E_f(control) 1.24334% X_f +0.72629% X_f/f +0.7263 -> no hot set
[2026-10-07T19:09:15Z] hot-set p5133-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:09:15Z] ratio p5133-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0215x / 1.0173x / 1.0152x (gate 1.2x at 0.1%: within); over the FLAT control 1.5882x / 1.5861x / 1.5841x
[2026-10-07T19:09:16Z] hottest item p5133-attack-f8 (0xef1b00): 308 reads (0.0000% of all); predicted source none
[2026-10-07T19:09:16Z] program p5133-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:09:16Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "1932", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:09:16Z] census warps: programs [1932] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:09:17Z] day 20730: cache filled in 0.63 s, fnv 448274a57f508cbc
[2026-10-07T19:09:21Z] table: 16777216 items derived with their 8 lines in 3.7 s; library comparison sample (0 mismatches)
[2026-10-07T19:09:29Z] program p1932-attack-f8: epoch seed 39bbff498a9786a2faf68db47b10749f60a22fb57420e1dad6c26ab8c64ba6fc era seed 350b11c6ab4b3fa2a555f444f040c78c6ffb8ce3b07697cb8bce3f45c3b950cb id 9b4b0db53f18f037 attempt 14 class mx8-era0f2bb52d+sh256x27 op mix load=16 add=8 rotl=7 rotr=7 mul=6 xor=5 or=4 mulhi=3 shfl=3 sub=3 mad=2; era stride mul 0xe1a22e51 rot 5 interleave [7, 9, 10, 12] windows 3:2:2 5:2:3 7:2:0 10:2:3 12:1:1 18:2:2 26:0:0 29:2:1 38:1:0 39:2:2 42:0:0 44:0:0 50:0:0 53:1:1 57:2:1 61:0:0
[2026-10-07T19:09:29Z] load site instr 3: src r6 win 2 off 2; last base writer rotl at 2; writers back to the last injecting one: rotl@2 add@55; shadow writes of r6 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=3 sub=3 xor=7
[2026-10-07T19:09:29Z] load site instr 5: src r2 win 2 off 3; last base writer load at 3; writers back to the last injecting one: load@3; shadow writes of r2 per rep: add=4 mad=2 mul=2 mulhi=2 or=4 rotl=6 shfl=4 sub=2 xor=1
[2026-10-07T19:09:29Z] load site instr 7: src r7 win 2 off 0; last base writer rotr at 6; writers back to the last injecting one: rotr@6 mulhi@62 mul@60 mul@59 load@53; shadow writes of r7 per rep: add=8 mad=5 mul=4 mulhi=1 rotl=2 rotr=3 shfl=5 sub=3 xor=3
[2026-10-07T19:09:29Z] load site instr 10: src r6 win 2 off 3; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r6 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=3 sub=3 xor=7
[2026-10-07T19:09:29Z] load site instr 12: src r0 win 1 off 1; last base writer rotl at 8; writers back to the last injecting one: rotl@8 load@5; shadow writes of r0 per rep: add=8 mad=2 mul=3 mulhi=3 or=2 rotl=5 rotr=2 shfl=3 sub=2 xor=5
[2026-10-07T19:09:29Z] load site instr 18: src r2 win 2 off 2; last base writer sub at 9; writers back to the last injecting one: sub@9; shadow writes of r2 per rep: add=4 mad=2 mul=2 mulhi=2 or=4 rotl=6 shfl=4 sub=2 xor=1
[2026-10-07T19:09:29Z] load site instr 26: src r7 win 0 off 0; last base writer rotl at 22; writers back to the last injecting one: rotl@22 rotr@19 rotr@6 mulhi@62 mul@60 mul@59 load@53; shadow writes of r7 per rep: add=8 mad=5 mul=4 mulhi=1 rotl=2 rotr=3 shfl=5 sub=3 xor=3
[2026-10-07T19:09:29Z] load site instr 29: src r1 win 2 off 1; last base writer load at 26; writers back to the last injecting one: load@26; shadow writes of r1 per rep: add=2 mad=5 mul=4 mulhi=7 or=1 rotl=2 rotr=4 shfl=3 sub=4 xor=5
[2026-10-07T19:09:29Z] load site instr 38: src r4 win 1 off 0; last base writer xor at 36; writers back to the last injecting one: xor@36; shadow writes of r4 per rep: add=4 mad=3 mul=9 mulhi=6 or=2 rotl=4 rotr=1 shfl=2 sub=3 xor=4
[2026-10-07T19:09:29Z] load site instr 39: src r2 win 2 off 2; last base writer rotl at 37; writers back to the last injecting one: rotl@37 mad@32; shadow writes of r2 per rep: add=4 mad=2 mul=2 mulhi=2 or=4 rotl=6 shfl=4 sub=2 xor=1
[2026-10-07T19:09:29Z] load site instr 42: src r1 win 0 off 0; last base writer add at 33; writers back to the last injecting one: add@33; shadow writes of r1 per rep: add=2 mad=5 mul=4 mulhi=7 or=1 rotl=2 rotr=4 shfl=3 sub=4 xor=5
[2026-10-07T19:09:29Z] load site instr 44: src r7 win 0 off 0; last base writer load at 39; writers back to the last injecting one: load@39; shadow writes of r7 per rep: add=8 mad=5 mul=4 mulhi=1 rotl=2 rotr=3 shfl=5 sub=3 xor=3
[2026-10-07T19:09:29Z] load site instr 50: src r3 win 0 off 0; last base writer sub at 24; writers back to the last injecting one: sub@24; shadow writes of r3 per rep: add=5 mad=7 mul=2 mulhi=2 or=1 rotl=3 rotr=4 shfl=1 sub=4 xor=3
[2026-10-07T19:09:29Z] load site instr 53: src r4 win 1 off 1; last base writer xor at 52; writers back to the last injecting one: xor@52; shadow writes of r4 per rep: add=4 mad=3 mul=9 mulhi=6 or=2 rotl=4 rotr=1 shfl=2 sub=3 xor=4
[2026-10-07T19:09:29Z] load site instr 57: src r1 win 2 off 1; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r1 per rep: add=2 mad=5 mul=4 mulhi=7 or=1 rotl=2 rotr=4 shfl=3 sub=4 xor=5
[2026-10-07T19:09:29Z] load site instr 61: src r6 win 0 off 0; last base writer add at 55; writers back to the last injecting one: add@55; shadow writes of r6 per rep: add=1 mad=4 mul=3 mulhi=1 or=2 rotl=4 rotr=3 sub=3 xor=7
[2026-10-07T19:09:29Z] window layer: site item windows (first, items) (0x800000,2^22) (0xc00000,2^22) (0x0,2^22) (0xc00000,2^22) (0x800000,2^23) (0x800000,2^22) (0x0,2^24) (0x400000,2^22) (0x0,2^23) (0x800000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x400000,2^22) (0x0,2^24); expected reads per item by quarter 88.000 120.000 168.000 136.000 (flat uniform 128.000)
[2026-10-07T19:11:37Z] 524288 warps (16777216 nonces) interpreted in 128.5 s (7.844 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:11:37Z] p1932-attack-f8 distinct lines per hash: n 16777216 min 992 p1 1016 median 1024 p99 1024 max 1024 mean 1023.3717
[2026-10-07T19:11:37Z] p1932-attack-f8 distinct items per hash: n 16777216 min 124 p1 127 median 128 p99 128 max 128 mean 127.9370
[2026-10-07T19:11:37Z] p1932-attack-f8 distinct lines per warp: n 524288 min 32525 p1 32578 median 32621 p99 32656 max 32685 mean 32620.3185
[2026-10-07T19:11:37Z] p1932-attack-f8 distinct items per warp: n 524288 min 4083 p1 4089 median 4094 p99 4096 max 4096 mean 4093.4767
[2026-10-07T19:11:37Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:11:37Z] positions: largest hi16-bucket (256 items) share 0.0070% at p17 (iteration 1, site 1, instr 5); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p75 (site 11, instr 44)
[2026-10-07T19:11:37Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p0 (site 0, instr 3); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:11:37Z] p1932-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 238 (bin 11443406) z_max +9.72 min 47 z_min -7.16 chi2/dof 7.52986 chi2_z +18912.51 top0.1% 0.16262% top0.5% 0.78355% top1% 1.53821%
[2026-10-07T19:11:38Z] p1932-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.03194 largest 183 (item 0x78e1fd) at +5.75 sigma smallest at -5.06; buckets64 chi2/dof 2.14354 largest 8255 (bucket 91915) at +6.56 sigma smallest at -5.64
[2026-10-07T19:11:43Z] p1932-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 234 (bin 10462631) z_max +9.37 min 45 z_min -7.34 chi2/dof 7.50078 chi2_z +18828.28 top0.1% 0.16223% top0.5% 0.78189% top1% 1.53527%
[2026-10-07T19:11:43Z] p1932-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99993 largest +6.12 sigma; buckets64 chi2/dof 0.99950 largest +4.38 smallest -4.53
[2026-10-07T19:11:43Z] 6-sigma p1932-attack-f8 items buckets64 against the window density: largest bucket +6.56 sigma, smallest -5.64 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:11:43Z] hot-set p1932-attack-f8 items (windowed control): f 0.1% S_f 0.16262% E_f(control) 0.16223% X_f +0.00040% X_f/f +0.0040 -> no hot set
[2026-10-07T19:11:43Z] hot-set p1932-attack-f8 items (windowed control): f 0.5% S_f 0.78355% E_f(control) 0.78189% X_f +0.00166% X_f/f +0.0033 -> no hot set
[2026-10-07T19:11:43Z] hot-set p1932-attack-f8 items (windowed control): f 1.0% S_f 1.53821% E_f(control) 1.53527% X_f +0.00293% X_f/f +0.0029 -> no hot set
[2026-10-07T19:11:43Z] hot-set p1932-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:11:48Z] p1932-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 190 (bin 14492666) z_max +5.48 min 74 z_min -4.77 chi2/dof 1.00029 chi2_z +0.84 top0.1% 0.13105% top0.5% 0.63244% top1% 1.24333%
[2026-10-07T19:11:48Z] hot-set p1932-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16262% E_f(control) 0.13105% X_f +0.03158% X_f/f +0.3158 -> no hot set
[2026-10-07T19:11:48Z] hot-set p1932-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78355% E_f(control) 0.63244% X_f +0.15111% X_f/f +0.3022 -> no hot set
[2026-10-07T19:11:48Z] hot-set p1932-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.53821% E_f(control) 1.24333% X_f +0.29488% X_f/f +0.2949 -> no hot set
[2026-10-07T19:11:48Z] hot-set p1932-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:11:48Z] ratio p1932-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0024x / 1.0021x / 1.0019x (gate 1.2x at 0.1%: within); over the FLAT control 1.2410x / 1.2389x / 1.2372x
[2026-10-07T19:11:48Z] hottest item p1932-attack-f8 (0xae9cce): 238 reads (0.0000% of all); predicted source none
[2026-10-07T19:11:48Z] program p1932-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:11:48Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "2328", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:11:48Z] census warps: programs [2328] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:11:49Z] day 20730: cache filled in 0.62 s, fnv 448274a57f508cbc
[2026-10-07T19:11:52Z] table: 16777216 items derived with their 8 lines in 3.4 s; library comparison sample (0 mismatches)
[2026-10-07T19:11:57Z] program p2328-attack-f8: epoch seed f43db19c8c4f6e5a8fb8e16012b25df73a08dbf41dec315982e62d3d8da65377 era seed f13df287eea1e66703dd8dc65a403db09a9ef6ace2f71bee3c934eccb0a605ea id eb95eb2f3c188643 attempt 7 class mx8-erabae39f40+sh256x27 op mix load=16 add=10 xor=8 sub=6 mul=5 rotr=4 shfl=4 mulhi=3 or=3 rotl=3 mad=2; era stride mul 0xdb92c45b rot 21 interleave [0, 1, 12, 13] windows 2:2:1 9:1:1 16:2:0 18:0:0 25:0:0 29:1:0 30:0:0 38:1:1 43:0:0 44:0:0 47:1:0 48:2:2 53:1:0 56:2:2 61:0:0 62:1:1
[2026-10-07T19:11:57Z] load site instr 2: src r0 win 2 off 1; last base writer add at 1; writers back to the last injecting one: add@1; shadow writes of r0 per rep: add=5 mad=4 mul=2 mulhi=2 or=3 rotl=4 rotr=2 xor=4
[2026-10-07T19:11:57Z] load site instr 9: src r6 win 1 off 1; last base writer rotl at 7; writers back to the last injecting one: rotl@7 add@4; shadow writes of r6 per rep: add=6 mad=3 mul=1 mulhi=6 or=3 rotl=2 rotr=4 shfl=6 sub=1 xor=7
[2026-10-07T19:11:57Z] load site instr 16: src r0 win 2 off 0; last base writer add at 6; writers back to the last injecting one: add@6; shadow writes of r0 per rep: add=5 mad=4 mul=2 mulhi=2 or=3 rotl=4 rotr=2 xor=4
[2026-10-07T19:11:57Z] load site instr 18: src r4 win 0 off 0; last base writer mad at 5; writers back to the last injecting one: mad@5; shadow writes of r4 per rep: add=5 mad=2 mul=7 mulhi=4 or=1 rotl=4 rotr=2 shfl=4 sub=4 xor=3
[2026-10-07T19:11:57Z] load site instr 25: src r1 win 0 off 0; last base writer sub at 23; writers back to the last injecting one: sub@23; shadow writes of r1 per rep: add=9 mad=2 mul=2 mulhi=3 or=1 rotl=4 rotr=2 shfl=1 sub=3 xor=4
[2026-10-07T19:11:57Z] load site instr 29: src r0 win 1 off 0; last base writer sub at 22; writers back to the last injecting one: sub@22; shadow writes of r0 per rep: add=5 mad=4 mul=2 mulhi=2 or=3 rotl=4 rotr=2 xor=4
[2026-10-07T19:11:57Z] load site instr 30: src r3 win 0 off 0; last base writer load at 29; writers back to the last injecting one: load@29; shadow writes of r3 per rep: add=5 mad=2 mul=2 or=4 rotl=2 rotr=4 shfl=2 sub=1 xor=10
[2026-10-07T19:11:57Z] load site instr 38: src r0 win 1 off 1; last base writer sub at 34; writers back to the last injecting one: sub@34; shadow writes of r0 per rep: add=5 mad=4 mul=2 mulhi=2 or=3 rotl=4 rotr=2 xor=4
[2026-10-07T19:11:57Z] load site instr 43: src r7 win 0 off 0; last base writer shfl at 39; writers back to the last injecting one: shfl@39; shadow writes of r7 per rep: add=2 mad=3 mul=2 mulhi=3 or=1 rotl=4 rotr=1 shfl=4 sub=3 xor=6
[2026-10-07T19:11:57Z] load site instr 44: src r4 win 0 off 0; last base writer xor at 40; writers back to the last injecting one: xor@40; shadow writes of r4 per rep: add=5 mad=2 mul=7 mulhi=4 or=1 rotl=4 rotr=2 shfl=4 sub=4 xor=3
[2026-10-07T19:11:57Z] load site instr 47: src r5 win 1 off 0; last base writer load at 44; writers back to the last injecting one: load@44; shadow writes of r5 per rep: add=4 mad=1 mul=4 mulhi=1 or=1 rotl=5 rotr=1 shfl=1 sub=3 xor=6
[2026-10-07T19:11:57Z] load site instr 48: src r6 win 2 off 2; last base writer load at 43; writers back to the last injecting one: load@43; shadow writes of r6 per rep: add=6 mad=3 mul=1 mulhi=6 or=3 rotl=2 rotr=4 shfl=6 sub=1 xor=7
[2026-10-07T19:11:57Z] load site instr 53: src r2 win 1 off 0; last base writer add at 51; writers back to the last injecting one: add@51; shadow writes of r2 per rep: add=3 mad=4 mul=6 mulhi=2 or=2 rotl=3 rotr=8 shfl=5 sub=1 xor=2
[2026-10-07T19:11:57Z] load site instr 56: src r1 win 2 off 2; last base writer load at 48; writers back to the last injecting one: load@48; shadow writes of r1 per rep: add=9 mad=2 mul=2 mulhi=3 or=1 rotl=4 rotr=2 shfl=1 sub=3 xor=4
[2026-10-07T19:11:57Z] load site instr 61: src r4 win 0 off 0; last base writer rotr at 54; writers back to the last injecting one: rotr@54 xor@40; shadow writes of r4 per rep: add=5 mad=2 mul=7 mulhi=4 or=1 rotl=4 rotr=2 shfl=4 sub=4 xor=3
[2026-10-07T19:11:57Z] load site instr 62: src r0 win 1 off 1; last base writer load at 53; writers back to the last injecting one: load@53; shadow writes of r0 per rep: add=5 mad=4 mul=2 mulhi=2 or=3 rotl=4 rotr=2 xor=4
[2026-10-07T19:11:57Z] window layer: site item windows (first, items) (0x400000,2^22) (0x800000,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x0,2^23) (0x800000,2^22) (0x0,2^24) (0x800000,2^23); expected reads per item by quarter 128.000 128.000 160.000 96.000 (flat uniform 128.000)
[2026-10-07T19:13:50Z] 524288 warps (16777216 nonces) interpreted in 113.1 s (6.904 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:13:50Z] p2328-attack-f8 distinct lines per hash: n 16777216 min 983 p1 1008 median 1024 p99 1024 max 1024 mean 1021.8722
[2026-10-07T19:13:50Z] p2328-attack-f8 distinct items per hash: n 16777216 min 123 p1 126 median 128 p99 128 max 128 mean 127.7496
[2026-10-07T19:13:50Z] p2328-attack-f8 distinct lines per warp: n 524288 min 32421 p1 32509 median 32574 p99 32627 max 32670 mean 32572.7498
[2026-10-07T19:13:50Z] p2328-attack-f8 distinct items per warp: n 524288 min 4070 p1 4080 median 4088 p99 4093 max 4096 mean 4087.4869
[2026-10-07T19:13:50Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:13:50Z] positions: largest hi16-bucket (256 items) share 0.0070% at p80 (iteration 5, site 0, instr 2); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p49 (site 1, instr 9)
[2026-10-07T19:13:50Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p29 (site 13, instr 56); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:13:50Z] p2328-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 228 (bin 9020268) z_max +8.84 min 49 z_min -6.98 chi2/dof 5.03123 chi2_z +11675.68 top0.1% 0.15568% top0.5% 0.74945% top1% 1.47064%
[2026-10-07T19:13:50Z] p2328-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.03285 largest 154 (item 0xe8eced) at +5.92 sigma smallest at -5.21; buckets64 chi2/dof 2.82182 largest 6650 (bucket 197293) at +6.46 sigma smallest at -5.78
[2026-10-07T19:13:55Z] p2328-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 226 (bin 9162378) z_max +8.66 min 47 z_min -7.16 chi2/dof 5.00128 chi2_z +11588.94 top0.1% 0.15529% top0.5% 0.74795% top1% 1.46807%
[2026-10-07T19:13:55Z] p2328-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00064 largest +6.63 sigma; buckets64 chi2/dof 1.00345 largest +4.46 smallest -4.34
[2026-10-07T19:13:55Z] 6-sigma p2328-attack-f8 items buckets64 against the window density: largest bucket +6.46 sigma, smallest -5.78 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:13:55Z] hot-set p2328-attack-f8 items (windowed control): f 0.1% S_f 0.15568% E_f(control) 0.15529% X_f +0.00039% X_f/f +0.0039 -> no hot set
[2026-10-07T19:13:55Z] hot-set p2328-attack-f8 items (windowed control): f 0.5% S_f 0.74945% E_f(control) 0.74795% X_f +0.00150% X_f/f +0.0030 -> no hot set
[2026-10-07T19:13:55Z] hot-set p2328-attack-f8 items (windowed control): f 1.0% S_f 1.47064% E_f(control) 1.46807% X_f +0.00257% X_f/f +0.0026 -> no hot set
[2026-10-07T19:13:55Z] hot-set p2328-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:14:00Z] p2328-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 192 (bin 4923434) z_max +5.66 min 73 z_min -4.86 chi2/dof 1.00020 chi2_z +0.57 top0.1% 0.13107% top0.5% 0.63249% top1% 1.24339%
[2026-10-07T19:14:00Z] hot-set p2328-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15568% E_f(control) 0.13107% X_f +0.02461% X_f/f +0.2461 -> no hot set
[2026-10-07T19:14:00Z] hot-set p2328-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.74945% E_f(control) 0.63249% X_f +0.11696% X_f/f +0.2339 -> no hot set
[2026-10-07T19:14:00Z] hot-set p2328-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.47064% E_f(control) 1.24339% X_f +0.22725% X_f/f +0.2272 -> no hot set
[2026-10-07T19:14:00Z] hot-set p2328-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:14:00Z] ratio p2328-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0025x / 1.0020x / 1.0017x (gate 1.2x at 0.1%: within); over the FLAT control 1.1877x / 1.1849x / 1.1828x
[2026-10-07T19:14:00Z] hottest item p2328-attack-f8 (0x89a36c): 228 reads (0.0000% of all); predicted source none
[2026-10-07T19:14:00Z] program p2328-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:14:00Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "3665", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:14:00Z] census warps: programs [3665] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:14:01Z] day 20730: cache filled in 0.62 s, fnv 448274a57f508cbc
[2026-10-07T19:14:05Z] table: 16777216 items derived with their 8 lines in 3.9 s; library comparison sample (0 mismatches)
[2026-10-07T19:14:09Z] program p3665-attack-f8: epoch seed 37359dac4958d4ba6cbcf7779656e6498ebccd3bc9dd184088d326cd4ad1118b era seed e77e64e946a22c24a6f569c7183103bd6e3c691cc2520e9156ea00a707677770 id 93d022aa76d8df35 attempt 0 class mx8-era1f9fdf34+sh256x27 op mix load=16 add=10 mulhi=8 rotr=6 mad=5 mul=5 rotl=4 shfl=4 xor=3 sub=2 or=1; era stride mul 0xab28834f rot 29 interleave [0, 5, 13, 14] windows 6:2:0 12:2:0 20:1:0 21:1:0 26:1:1 28:2:0 29:1:0 31:2:3 33:2:3 35:2:0 40:1:0 41:0:0 53:0:0 54:0:0 55:2:1 58:0:0
[2026-10-07T19:14:09Z] load site instr 6: src r0 win 2 off 0; last base writer rotr at 5; writers back to the last injecting one: rotr@5 add@59; shadow writes of r0 per rep: add=8 mad=4 mul=3 mulhi=1 or=3 rotl=1 rotr=2 shfl=6 sub=5 xor=2
[2026-10-07T19:14:09Z] load site instr 12: src r4 win 2 off 0; last base writer rotr at 10; writers back to the last injecting one: rotr@10 load@6; shadow writes of r4 per rep: add=5 mad=4 mul=2 mulhi=1 or=1 rotl=3 rotr=2 shfl=3 sub=5 xor=4
[2026-10-07T19:14:09Z] load site instr 20: src r7 win 1 off 0; last base writer load at 12; writers back to the last injecting one: load@12; shadow writes of r7 per rep: add=6 mad=2 mul=1 mulhi=5 or=2 rotl=3 rotr=2 shfl=5 sub=3 xor=2
[2026-10-07T19:14:09Z] load site instr 21: src r4 win 1 off 0; last base writer load at 20; writers back to the last injecting one: load@20; shadow writes of r4 per rep: add=5 mad=4 mul=2 mulhi=1 or=1 rotl=3 rotr=2 shfl=3 sub=5 xor=4
[2026-10-07T19:14:09Z] load site instr 26: src r0 win 1 off 1; last base writer rotl at 25; writers back to the last injecting one: rotl@25 rotr@5 add@59; shadow writes of r0 per rep: add=8 mad=4 mul=3 mulhi=1 or=3 rotl=1 rotr=2 shfl=6 sub=5 xor=2
[2026-10-07T19:14:09Z] load site instr 28: src r1 win 2 off 0; last base writer load at 26; writers back to the last injecting one: load@26; shadow writes of r1 per rep: add=5 mul=3 mulhi=3 or=3 rotl=4 rotr=5 shfl=4 sub=3 xor=2
[2026-10-07T19:14:09Z] load site instr 29: src r2 win 1 off 0; last base writer load at 21; writers back to the last injecting one: load@21; shadow writes of r2 per rep: add=2 mad=2 mul=7 mulhi=4 rotl=3 rotr=1 shfl=2 sub=3 xor=2
[2026-10-07T19:14:09Z] load site instr 31: src r2 win 2 off 3; last base writer shfl at 30; writers back to the last injecting one: shfl@30; shadow writes of r2 per rep: add=2 mad=2 mul=7 mulhi=4 rotl=3 rotr=1 shfl=2 sub=3 xor=2
[2026-10-07T19:14:09Z] load site instr 33: src r3 win 2 off 3; last base writer load at 29; writers back to the last injecting one: load@29; shadow writes of r3 per rep: add=5 mad=4 mul=3 mulhi=1 rotl=4 rotr=6 shfl=5 sub=2 xor=3
[2026-10-07T19:14:09Z] load site instr 35: src r6 win 2 off 0; last base writer add at 32; writers back to the last injecting one: add@32; shadow writes of r6 per rep: add=7 mad=7 mul=3 mulhi=3 or=2 rotl=5 rotr=2 shfl=3 sub=5 xor=5
[2026-10-07T19:14:09Z] load site instr 40: src r5 win 1 off 0; last base writer load at 33; writers back to the last injecting one: load@33; shadow writes of r5 per rep: add=4 mad=7 mul=2 mulhi=2 or=2 rotl=3 rotr=1 shfl=3 sub=1 xor=2
[2026-10-07T19:14:09Z] load site instr 41: src r4 win 0 off 0; last base writer add at 38; writers back to the last injecting one: add@38; shadow writes of r4 per rep: add=5 mad=4 mul=2 mulhi=1 or=1 rotl=3 rotr=2 shfl=3 sub=5 xor=4
[2026-10-07T19:14:09Z] load site instr 53: src r2 win 0 off 0; last base writer shfl at 37; writers back to the last injecting one: shfl@37; shadow writes of r2 per rep: add=2 mad=2 mul=7 mulhi=4 rotl=3 rotr=1 shfl=2 sub=3 xor=2
[2026-10-07T19:14:09Z] load site instr 54: src r5 win 0 off 0; last base writer add at 50; writers back to the last injecting one: add@50; shadow writes of r5 per rep: add=4 mad=7 mul=2 mulhi=2 or=2 rotl=3 rotr=1 shfl=3 sub=1 xor=2
[2026-10-07T19:14:09Z] load site instr 55: src r0 win 2 off 1; last base writer load at 54; writers back to the last injecting one: load@54; shadow writes of r0 per rep: add=8 mad=4 mul=3 mulhi=1 or=3 rotl=1 rotr=2 shfl=6 sub=5 xor=2
[2026-10-07T19:14:09Z] load site instr 58: src r4 win 0 off 0; last base writer add at 56; writers back to the last injecting one: add@56; shadow writes of r4 per rep: add=5 mad=4 mul=2 mulhi=1 or=1 rotl=3 rotr=2 shfl=3 sub=5 xor=4
[2026-10-07T19:14:09Z] window layer: site item windows (first, items) (0x0,2^22) (0x0,2^22) (0x0,2^23) (0x0,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^23) (0xc00000,2^22) (0xc00000,2^22) (0x0,2^22) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x400000,2^22) (0x0,2^24); expected reads per item by quarter 224.000 128.000 48.000 112.000 (flat uniform 128.000)
[2026-10-07T19:15:45Z] 524288 warps (16777216 nonces) interpreted in 95.9 s (5.854 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:15:45Z] p3665-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8704
[2026-10-07T19:15:45Z] p3665-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T19:15:45Z] p3665-attack-f8 distinct lines per warp: n 524288 min 32562 p1 32603 median 32636 p99 32663 max 32687 mean 32635.4019
[2026-10-07T19:15:45Z] p3665-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.3787
[2026-10-07T19:15:45Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:15:45Z] positions: largest hi16-bucket (256 items) share 0.0071% at p89 (iteration 5, site 9, instr 35); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 6)
[2026-10-07T19:15:45Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p4 (site 4, instr 26); saturated sources at one position 0 of 2048 at p0 (site 0, instr 6); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:15:45Z] p3665-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 303 (bin 4096165) z_max +15.47 min 17 z_min -9.81 chi2/dof 31.99982 chi2_z +89785.07 top0.1% 0.21062% top0.5% 1.01966% top1% 2.00673%
[2026-10-07T19:15:46Z] p3665-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00012 largest 87 (item 0x992e54) at +5.63 sigma smallest at -5.10; buckets64 chi2/dof 0.99759 largest 8588 (bucket 122860) at +4.38 sigma smallest at -4.39
[2026-10-07T19:15:53Z] p3665-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 300 (bin 1071717) z_max +15.20 min 18 z_min -9.72 chi2/dof 31.99804 chi2_z +89779.90 top0.1% 0.21059% top0.5% 1.01966% top1% 2.00681%
[2026-10-07T19:15:53Z] p3665-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00062 largest +5.48 sigma; buckets64 chi2/dof 1.00273 largest +4.79 smallest -4.36
[2026-10-07T19:15:53Z] 6-sigma p3665-attack-f8 items buckets64 against the window density: largest bucket +4.38 sigma, smallest -4.39 -> within 6 sigma
[2026-10-07T19:15:53Z] hot-set p3665-attack-f8 items (windowed control): f 0.1% S_f 0.21062% E_f(control) 0.21059% X_f +0.00003% X_f/f +0.0003 -> no hot set
[2026-10-07T19:15:53Z] hot-set p3665-attack-f8 items (windowed control): f 0.5% S_f 1.01966% E_f(control) 1.01966% X_f +0.00000% X_f/f +0.0000 -> no hot set
[2026-10-07T19:15:53Z] hot-set p3665-attack-f8 items (windowed control): f 1.0% S_f 2.00673% E_f(control) 2.00681% X_f -0.00008% X_f/f -0.0001 -> no hot set
[2026-10-07T19:15:53Z] hot-set p3665-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:15:57Z] p3665-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 12718831) z_max +5.83 min 70 z_min -5.13 chi2/dof 1.00045 chi2_z +1.31 top0.1% 0.13114% top0.5% 0.63266% top1% 1.24359%
[2026-10-07T19:15:57Z] hot-set p3665-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.21062% E_f(control) 0.13114% X_f +0.07948% X_f/f +0.7948 -> no hot set
[2026-10-07T19:15:57Z] hot-set p3665-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.01966% E_f(control) 0.63266% X_f +0.38700% X_f/f +0.7740 -> no hot set
[2026-10-07T19:15:57Z] hot-set p3665-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.00673% E_f(control) 1.24359% X_f +0.76313% X_f/f +0.7631 -> no hot set
[2026-10-07T19:15:57Z] hot-set p3665-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:15:57Z] ratio p3665-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0002x / 1.0000x / 1.0000x (gate 1.2x at 0.1%: within); over the FLAT control 1.6061x / 1.6117x / 1.6136x
[2026-10-07T19:15:57Z] hottest item p3665-attack-f8 (0x3e80a5): 303 reads (0.0000% of all); predicted source none
[2026-10-07T19:15:57Z] program p3665-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:15:58Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "101643", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:15:58Z] census warps: programs [101643] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:15:58Z] day 20730: cache filled in 0.62 s, fnv 448274a57f508cbc
[2026-10-07T19:16:03Z] table: 16777216 items derived with their 8 lines in 3.8 s; library comparison sample (0 mismatches)
[2026-10-07T19:16:07Z] program p101643-attack-f8: epoch seed b72d46bca1aa32e24634866020de56ed1a848cce9e3b64c0a2bb3747e5e1c22d era seed 435a92078a787476afc5e3bd012ae081606b52e13ae4c453c02efc0f8417eb56 id e9a558df620ce023 attempt 2 class mx8-era1cbe27a7+sh256x27 op mix load=16 mad=10 mul=9 xor=7 rotr=5 add=4 shfl=4 mulhi=3 sub=3 rotl=2 or=1; era stride mul 0xb00c2481 rot 1 interleave [9, 11, 12, 14] windows 3:2:2 5:1:1 10:0:0 19:2:1 20:0:0 29:1:1 30:0:0 34:2:0 37:2:1 39:2:2 40:1:1 43:1:0 53:0:0 57:2:2 59:1:1 63:2:0
[2026-10-07T19:16:07Z] load site instr 3: src r4 win 2 off 2; last base writer mad at 0; writers back to the last injecting one: mad@0; shadow writes of r4 per rep: add=4 mul=1 mulhi=5 or=1 rotl=3 rotr=2 shfl=3 sub=3 xor=1
[2026-10-07T19:16:07Z] load site instr 5: src r0 win 1 off 1; last base writer rotr at 2; writers back to the last injecting one: rotr@2 mad@58; shadow writes of r0 per rep: add=5 mad=5 mul=5 mulhi=1 or=2 rotl=3 rotr=8 shfl=8 sub=1 xor=2
[2026-10-07T19:16:07Z] load site instr 10: src r3 win 0 off 0; last base writer rotr at 6; writers back to the last injecting one: rotr@6 xor@4; shadow writes of r3 per rep: add=6 mad=6 mul=5 mulhi=1 rotl=5 rotr=1 shfl=3 sub=1 xor=7
[2026-10-07T19:16:07Z] load site instr 19: src r2 win 2 off 1; last base writer mad at 15; writers back to the last injecting one: mad@15; shadow writes of r2 per rep: add=4 mad=7 mulhi=1 or=2 rotl=4 rotr=2 shfl=6 sub=1 xor=7
[2026-10-07T19:16:07Z] load site instr 20: src r1 win 0 off 0; last base writer shfl at 12; writers back to the last injecting one: shfl@12; shadow writes of r1 per rep: add=3 mad=1 mul=1 mulhi=5 or=2 rotl=1 rotr=2 shfl=5 xor=5
[2026-10-07T19:16:07Z] load site instr 29: src r0 win 1 off 1; last base writer mad at 21; writers back to the last injecting one: mad@21; shadow writes of r0 per rep: add=5 mad=5 mul=5 mulhi=1 or=2 rotl=3 rotr=8 shfl=8 sub=1 xor=2
[2026-10-07T19:16:07Z] load site instr 30: src r5 win 0 off 0; last base writer mad at 18; writers back to the last injecting one: mad@18; shadow writes of r5 per rep: add=1 mad=2 mul=3 mulhi=1 or=4 rotl=2 rotr=1 shfl=10 sub=3 xor=4
[2026-10-07T19:16:07Z] load site instr 34: src r5 win 2 off 0; last base writer rotl at 32; writers back to the last injecting one: rotl@32 mad@18; shadow writes of r5 per rep: add=1 mad=2 mul=3 mulhi=1 or=4 rotl=2 rotr=1 shfl=10 sub=3 xor=4
[2026-10-07T19:16:07Z] load site instr 37: src r6 win 2 off 1; last base writer load at 29; writers back to the last injecting one: load@29; shadow writes of r6 per rep: add=4 mad=3 mul=3 mulhi=1 or=1 rotl=3 rotr=5 shfl=3 sub=6 xor=3
[2026-10-07T19:16:07Z] load site instr 39: src r4 win 2 off 2; last base writer load at 19; writers back to the last injecting one: load@19; shadow writes of r4 per rep: add=4 mul=1 mulhi=5 or=1 rotl=3 rotr=2 shfl=3 sub=3 xor=1
[2026-10-07T19:16:07Z] load site instr 40: src r6 win 1 off 1; last base writer load at 39; writers back to the last injecting one: load@39; shadow writes of r6 per rep: add=4 mad=3 mul=3 mulhi=1 or=1 rotl=3 rotr=5 shfl=3 sub=6 xor=3
[2026-10-07T19:16:07Z] load site instr 43: src r1 win 1 off 0; last base writer load at 37; writers back to the last injecting one: load@37; shadow writes of r1 per rep: add=3 mad=1 mul=1 mulhi=5 or=2 rotl=1 rotr=2 shfl=5 xor=5
[2026-10-07T19:16:07Z] load site instr 53: src r6 win 0 off 0; last base writer shfl at 50; writers back to the last injecting one: shfl@50; shadow writes of r6 per rep: add=4 mad=3 mul=3 mulhi=1 or=1 rotl=3 rotr=5 shfl=3 sub=6 xor=3
[2026-10-07T19:16:07Z] load site instr 57: src r2 win 2 off 2; last base writer add at 51; writers back to the last injecting one: add@51; shadow writes of r2 per rep: add=4 mad=7 mulhi=1 or=2 rotl=4 rotr=2 shfl=6 sub=1 xor=7
[2026-10-07T19:16:07Z] load site instr 59: src r3 win 1 off 1; last base writer xor at 56; writers back to the last injecting one: xor@56; shadow writes of r3 per rep: add=6 mad=6 mul=5 mulhi=1 rotl=5 rotr=1 shfl=3 sub=1 xor=7
[2026-10-07T19:16:07Z] load site instr 63: src r3 win 2 off 0; last base writer shfl at 60; writers back to the last injecting one: shfl@60; shadow writes of r3 per rep: add=6 mad=6 mul=5 mulhi=1 rotl=5 rotr=1 shfl=3 sub=1 xor=7
[2026-10-07T19:16:07Z] window layer: site item windows (first, items) (0x800000,2^22) (0x800000,2^23) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^22) (0x400000,2^22) (0x800000,2^22) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0x800000,2^22) (0x800000,2^23) (0x0,2^22); expected reads per item by quarter 112.000 112.000 192.000 96.000 (flat uniform 128.000)
[2026-10-07T19:17:52Z] 524288 warps (16777216 nonces) interpreted in 105.5 s (6.441 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:17:52Z] p101643-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8708
[2026-10-07T19:17:52Z] p101643-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:17:52Z] p101643-attack-f8 distinct lines per warp: n 524288 min 32567 p1 32605 median 32636 p99 32664 max 32691 mean 32636.0413
[2026-10-07T19:17:52Z] p101643-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4577
[2026-10-07T19:17:52Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:17:52Z] positions: largest hi16-bucket (256 items) share 0.0070% at p115 (iteration 7, site 3, instr 19); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p34 (site 2, instr 10)
[2026-10-07T19:17:52Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p55 (site 7, instr 34); saturated sources at one position 0 of 2048 at p0 (site 0, instr 3); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:17:52Z] p101643-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 267 (bin 8685295) z_max +12.29 min 51 z_min -6.81 chi2/dof 12.18576 chi2_z +32397.43 top0.1% 0.18336% top0.5% 0.88529% top1% 1.73991%
[2026-10-07T19:17:52Z] p101643-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.21054 largest 189 (item 0x509211) at +7.28 sigma smallest at -5.29; buckets64 chi2/dof 1.03865 largest 7563 (bucket 127304) at +4.67 sigma smallest at -4.61
[2026-10-07T19:17:58Z] p101643-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 267 (bin 8664019) z_max +12.29 min 52 z_min -6.72 chi2/dof 11.99933 chi2_z +31857.46 top0.1% 0.18304% top0.5% 0.88407% top1% 1.73790%
[2026-10-07T19:17:58Z] p101643-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99952 largest +6.33 sigma; buckets64 chi2/dof 1.00038 largest +4.57 smallest -4.36
[2026-10-07T19:17:58Z] 6-sigma p101643-attack-f8 items buckets64 against the window density: largest bucket +4.67 sigma, smallest -4.61 -> within 6 sigma
[2026-10-07T19:17:58Z] hot-set p101643-attack-f8 items (windowed control): f 0.1% S_f 0.18336% E_f(control) 0.18304% X_f +0.00032% X_f/f +0.0032 -> no hot set
[2026-10-07T19:17:58Z] hot-set p101643-attack-f8 items (windowed control): f 0.5% S_f 0.88529% E_f(control) 0.88407% X_f +0.00122% X_f/f +0.0024 -> no hot set
[2026-10-07T19:17:58Z] hot-set p101643-attack-f8 items (windowed control): f 1.0% S_f 1.73991% E_f(control) 1.73790% X_f +0.00201% X_f/f +0.0020 -> no hot set
[2026-10-07T19:17:58Z] hot-set p101643-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:18:02Z] p101643-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 12764751) z_max +5.83 min 70 z_min -5.13 chi2/dof 0.99996 chi2_z -0.12 top0.1% 0.13108% top0.5% 0.63252% top1% 1.24340%
[2026-10-07T19:18:02Z] hot-set p101643-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.18336% E_f(control) 0.13108% X_f +0.05227% X_f/f +0.5227 -> no hot set
[2026-10-07T19:18:02Z] hot-set p101643-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.88529% E_f(control) 0.63252% X_f +0.25277% X_f/f +0.5055 -> no hot set
[2026-10-07T19:18:02Z] hot-set p101643-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.73991% E_f(control) 1.24340% X_f +0.49651% X_f/f +0.4965 -> no hot set
[2026-10-07T19:18:02Z] hot-set p101643-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:18:02Z] ratio p101643-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0017x / 1.0014x / 1.0012x (gate 1.2x at 0.1%: within); over the FLAT control 1.3988x / 1.3996x / 1.3993x
[2026-10-07T19:18:02Z] hottest item p101643-attack-f8 (0x8486ef): 267 reads (0.0000% of all); predicted source none
[2026-10-07T19:18:02Z] program p101643-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:18:02Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "1352", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:18:02Z] census warps: programs [1352] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:18:03Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T19:18:07Z] table: 16777216 items derived with their 8 lines in 3.5 s; library comparison sample (0 mismatches)
[2026-10-07T19:18:11Z] program p1352-attack-f8: epoch seed 7763a71c272124cc5d8cc7803c165b67995f36ede78850aa9c1e8f2d7bd626e3 era seed dd07c7a84a36a44738c572882343ab73c7a0e0850129e8dc3c35485d95dfc5d1 id 806f8974326fe3df attempt 2 class mx8-era42be28bf+sh256x27 op mix load=16 add=7 mad=7 mulhi=7 shfl=6 mul=5 or=5 rotr=4 xor=4 sub=2 rotl=1; era stride mul 0xc434723b rot 18 interleave [2, 5, 9, 10] windows 5:1:1 9:0:0 15:1:1 16:2:1 23:0:0 29:1:0 32:2:2 36:0:0 37:1:0 38:2:0 42:2:3 45:0:0 48:1:1 50:0:0 57:2:3 61:0:0
[2026-10-07T19:18:11Z] load site instr 5: src r3 win 1 off 1; last base writer shfl at 1; writers back to the last injecting one: shfl@1; shadow writes of r3 per rep: add=4 mad=6 mul=3 mulhi=2 or=1 rotl=4 rotr=3 shfl=8 sub=1 xor=1
[2026-10-07T19:18:11Z] load site instr 9: src r0 win 0 off 0; last base writer load at 5; writers back to the last injecting one: load@5; shadow writes of r0 per rep: add=1 mad=1 mul=7 or=1 rotl=1 rotr=2 shfl=4 sub=4 xor=6
[2026-10-07T19:18:11Z] load site instr 15: src r1 win 1 off 1; last base writer sub at 13; writers back to the last injecting one: sub@13; shadow writes of r1 per rep: add=4 mad=5 mul=4 mulhi=1 or=3 rotl=4 rotr=4 shfl=2 sub=2 xor=2
[2026-10-07T19:18:11Z] load site instr 16: src r6 win 2 off 1; last base writer load at 15; writers back to the last injecting one: load@15; shadow writes of r6 per rep: add=3 mad=3 mul=2 mulhi=3 or=2 rotl=9 rotr=2 shfl=3 sub=3 xor=5
[2026-10-07T19:18:11Z] load site instr 23: src r5 win 0 off 0; last base writer shfl at 21; writers back to the last injecting one: shfl@21; shadow writes of r5 per rep: add=9 mad=5 mul=3 mulhi=4 or=2 rotl=6 rotr=2 shfl=5 sub=3 xor=3
[2026-10-07T19:18:11Z] load site instr 29: src r2 win 1 off 0; last base writer shfl at 24; writers back to the last injecting one: shfl@24; shadow writes of r2 per rep: add=7 mad=4 mul=6 mulhi=1 or=4 rotl=2 shfl=3 sub=2 xor=1
[2026-10-07T19:18:11Z] load site instr 32: src r7 win 2 off 2; last base writer add at 31; writers back to the last injecting one: add@31; shadow writes of r7 per rep: add=6 mad=3 mul=3 mulhi=3 rotl=6 shfl=2 sub=3 xor=3
[2026-10-07T19:18:11Z] load site instr 36: src r4 win 0 off 0; last base writer add at 25; writers back to the last injecting one: add@25; shadow writes of r4 per rep: add=5 mad=3 mul=2 mulhi=3 or=1 rotl=1 rotr=2 shfl=4 sub=5 xor=3
[2026-10-07T19:18:11Z] load site instr 37: src r7 win 1 off 0; last base writer add at 35; writers back to the last injecting one: add@35; shadow writes of r7 per rep: add=6 mad=3 mul=3 mulhi=3 rotl=6 shfl=2 sub=3 xor=3
[2026-10-07T19:18:11Z] load site instr 38: src r5 win 2 off 0; last base writer load at 36; writers back to the last injecting one: load@36; shadow writes of r5 per rep: add=9 mad=5 mul=3 mulhi=4 or=2 rotl=6 rotr=2 shfl=5 sub=3 xor=3
[2026-10-07T19:18:11Z] load site instr 42: src r6 win 2 off 3; last base writer load at 38; writers back to the last injecting one: load@38; shadow writes of r6 per rep: add=3 mad=3 mul=2 mulhi=3 or=2 rotl=9 rotr=2 shfl=3 sub=3 xor=5
[2026-10-07T19:18:11Z] load site instr 45: src r1 win 0 off 0; last base writer shfl at 39; writers back to the last injecting one: shfl@39; shadow writes of r1 per rep: add=4 mad=5 mul=4 mulhi=1 or=3 rotl=4 rotr=4 shfl=2 sub=2 xor=2
[2026-10-07T19:18:11Z] load site instr 48: src r3 win 1 off 1; last base writer mad at 43; writers back to the last injecting one: mad@43; shadow writes of r3 per rep: add=4 mad=6 mul=3 mulhi=2 or=1 rotl=4 rotr=3 shfl=8 sub=1 xor=1
[2026-10-07T19:18:11Z] load site instr 50: src r1 win 0 off 0; last base writer mad at 46; writers back to the last injecting one: mad@46; shadow writes of r1 per rep: add=4 mad=5 mul=4 mulhi=1 or=3 rotl=4 rotr=4 shfl=2 sub=2 xor=2
[2026-10-07T19:18:11Z] load site instr 57: src r5 win 2 off 3; last base writer add at 54; writers back to the last injecting one: add@54; shadow writes of r5 per rep: add=9 mad=5 mul=3 mulhi=4 or=2 rotl=6 rotr=2 shfl=5 sub=3 xor=3
[2026-10-07T19:18:11Z] load site instr 61: src r2 win 0 off 0; last base writer rotr at 52; writers back to the last injecting one: rotr@52 load@50; shadow writes of r2 per rep: add=7 mad=4 mul=6 mulhi=1 or=4 rotl=2 shfl=3 sub=2 xor=1
[2026-10-07T19:18:11Z] window layer: site item windows (first, items) (0x800000,2^23) (0x0,2^24) (0x800000,2^23) (0x400000,2^22) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^22) (0xc00000,2^22) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0xc00000,2^22) (0x0,2^24); expected reads per item by quarter 112.000 112.000 128.000 160.000 (flat uniform 128.000)
[2026-10-07T19:19:58Z] 524288 warps (16777216 nonces) interpreted in 106.6 s (6.507 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:19:58Z] p1352-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8706
[2026-10-07T19:19:58Z] p1352-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T19:19:58Z] p1352-attack-f8 distinct lines per warp: n 524288 min 32566 p1 32605 median 32637 p99 32664 max 32688 mean 32636.2511
[2026-10-07T19:19:58Z] p1352-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4840
[2026-10-07T19:19:58Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:19:58Z] positions: largest hi16-bucket (256 items) share 0.0101% at p60 (iteration 3, site 12, instr 48); windowed expectation 0.0031%; largest saturated-source share 0.0000% at p0 (site 0, instr 5)
[2026-10-07T19:19:58Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p50 (site 2, instr 15); saturated sources at one position 0 of 2048 at p0 (site 0, instr 5); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:19:58Z] p1352-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 257 (bin 13728501) z_max +11.40 min 62 z_min -5.83 chi2/dof 4.22824 chi2_z +9349.98 top0.1% 0.16412% top0.5% 0.78026% top1% 1.52188%
[2026-10-07T19:19:58Z] p1352-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.20444 largest 257 (item 0xd17af5) at +7.67 sigma smallest at -5.21; buckets64 chi2/dof 14.08415 largest 10402 (bucket 181673) at +24.42 sigma smallest at -8.41
[2026-10-07T19:20:06Z] p1352-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 230 (bin 16621754) z_max +9.02 min 62 z_min -5.83 chi2/dof 3.99972 chi2_z +8688.12 top0.1% 0.15528% top0.5% 0.74785% top1% 1.46779%
[2026-10-07T19:20:06Z] p1352-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99994 largest +5.67 sigma; buckets64 chi2/dof 1.00025 largest +4.62 smallest -4.67
[2026-10-07T19:20:06Z] 6-sigma p1352-attack-f8 items buckets64 against the window density: largest bucket +24.42 sigma, smallest -8.41 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:20:06Z] hot-set p1352-attack-f8 items (windowed control): f 0.1% S_f 0.16412% E_f(control) 0.15528% X_f +0.00884% X_f/f +0.0884 -> no hot set
[2026-10-07T19:20:06Z] hot-set p1352-attack-f8 items (windowed control): f 0.5% S_f 0.78026% E_f(control) 0.74785% X_f +0.03241% X_f/f +0.0648 -> no hot set
[2026-10-07T19:20:06Z] hot-set p1352-attack-f8 items (windowed control): f 1.0% S_f 1.52188% E_f(control) 1.46779% X_f +0.05409% X_f/f +0.0541 -> no hot set
[2026-10-07T19:20:06Z] hot-set p1352-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:20:11Z] p1352-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 199 (bin 781985) z_max +6.28 min 71 z_min -5.04 chi2/dof 1.00025 chi2_z +0.72 top0.1% 0.13109% top0.5% 0.63252% top1% 1.24338%
[2026-10-07T19:20:11Z] hot-set p1352-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16412% E_f(control) 0.13109% X_f +0.03302% X_f/f +0.3302 -> no hot set
[2026-10-07T19:20:11Z] hot-set p1352-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78026% E_f(control) 0.63252% X_f +0.14775% X_f/f +0.2955 -> no hot set
[2026-10-07T19:20:11Z] hot-set p1352-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.52188% E_f(control) 1.24338% X_f +0.27851% X_f/f +0.2785 -> no hot set
[2026-10-07T19:20:11Z] hot-set p1352-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:20:11Z] ratio p1352-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0569x / 1.0433x / 1.0369x (gate 1.2x at 0.1%: within); over the FLAT control 1.2519x / 1.2336x / 1.2240x
[2026-10-07T19:20:11Z] hottest item p1352-attack-f8 (0xf159c4): 257 reads (0.0000% of all); predicted source none
[2026-10-07T19:20:11Z] program p1352-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:20:12Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100521", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:20:12Z] census warps: programs [100521] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:20:12Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-07T19:20:16Z] table: 16777216 items derived with their 8 lines in 3.9 s; library comparison sample (0 mismatches)
[2026-10-07T19:20:20Z] program p100521-attack-f8: epoch seed 721567a1ba953f153c87013a8f87463bcd6975cc96e29dcd7a33fbaf9d071b6b era seed b5fa469b1e6da9ee3e60337bda004b442fefd4c684d423f067f6bf5c2da2c72d id 8651adc18b85c26d attempt 1 class mx8-erac3cf9cb8+sh256x27 op mix load=16 xor=9 mul=8 add=7 rotr=5 shfl=5 mad=4 rotl=4 sub=3 or=2 mulhi=1; era stride mul 0xfe3adc05 rot 20 interleave [1, 3, 12, 13] windows 4:1:1 8:2:3 10:2:2 11:0:0 14:0:0 17:0:0 26:0:0 29:2:1 31:0:0 33:1:0 34:0:0 37:0:0 43:1:0 44:2:3 58:2:0 60:2:3
[2026-10-07T19:20:20Z] load site instr 4: src r2 win 1 off 1; last base writer mad at 2; writers back to the last injecting one: mad@2; shadow writes of r2 per rep: add=8 mad=4 mul=6 mulhi=1 or=2 rotl=3 rotr=1 shfl=5 sub=1 xor=5
[2026-10-07T19:20:20Z] load site instr 8: src r2 win 2 off 3; last base writer rotr at 5; writers back to the last injecting one: rotr@5 mad@2; shadow writes of r2 per rep: add=8 mad=4 mul=6 mulhi=1 or=2 rotl=3 rotr=1 shfl=5 sub=1 xor=5
[2026-10-07T19:20:20Z] load site instr 10: src r6 win 2 off 2; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r6 per rep: add=6 mad=2 mul=3 mulhi=4 or=1 rotl=3 rotr=1 shfl=3 sub=3 xor=6
[2026-10-07T19:20:20Z] load site instr 11: src r4 win 0 off 0; last base writer load at 8; writers back to the last injecting one: load@8; shadow writes of r4 per rep: add=4 mad=2 mul=2 mulhi=1 rotl=4 rotr=1 shfl=7 xor=6
[2026-10-07T19:20:20Z] load site instr 14: src r0 win 0 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=3 rotl=2 rotr=2 shfl=3 sub=4 xor=2
[2026-10-07T19:20:20Z] load site instr 17: src r2 win 0 off 0; last base writer load at 14; writers back to the last injecting one: load@14; shadow writes of r2 per rep: add=8 mad=4 mul=6 mulhi=1 or=2 rotl=3 rotr=1 shfl=5 sub=1 xor=5
[2026-10-07T19:20:20Z] load site instr 26: src r1 win 0 off 0; last base writer load at 17; writers back to the last injecting one: load@17; shadow writes of r1 per rep: add=4 mad=4 mul=1 mulhi=6 or=1 rotl=6 rotr=4 shfl=3 sub=1 xor=6
[2026-10-07T19:20:20Z] load site instr 29: src r5 win 2 off 1; last base writer load at 26; writers back to the last injecting one: load@26; shadow writes of r5 per rep: add=5 mad=1 mul=4 mulhi=3 or=3 rotl=6 rotr=1 shfl=4 sub=1 xor=4
[2026-10-07T19:20:20Z] load site instr 31: src r0 win 0 off 0; last base writer shfl at 20; writers back to the last injecting one: shfl@20; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=3 rotl=2 rotr=2 shfl=3 sub=4 xor=2
[2026-10-07T19:20:20Z] load site instr 33: src r7 win 1 off 0; last base writer load at 31; writers back to the last injecting one: load@31; shadow writes of r7 per rep: add=5 mad=3 mul=3 mulhi=4 rotl=3 rotr=2 sub=5 xor=5
[2026-10-07T19:20:20Z] load site instr 34: src r3 win 0 off 0; last base writer add at 19; writers back to the last injecting one: add@19; shadow writes of r3 per rep: add=9 mad=2 mul=6 mulhi=4 or=4 rotl=2 rotr=1 shfl=1 xor=4
[2026-10-07T19:20:20Z] load site instr 37: src r4 win 0 off 0; last base writer mad at 36; writers back to the last injecting one: mad@36; shadow writes of r4 per rep: add=4 mad=2 mul=2 mulhi=1 rotl=4 rotr=1 shfl=7 xor=6
[2026-10-07T19:20:20Z] load site instr 43: src r0 win 1 off 0; last base writer shfl at 41; writers back to the last injecting one: shfl@41; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=3 rotl=2 rotr=2 shfl=3 sub=4 xor=2
[2026-10-07T19:20:20Z] load site instr 44: src r7 win 2 off 3; last base writer load at 43; writers back to the last injecting one: load@43; shadow writes of r7 per rep: add=5 mad=3 mul=3 mulhi=4 rotl=3 rotr=2 sub=5 xor=5
[2026-10-07T19:20:20Z] load site instr 58: src r7 win 2 off 0; last base writer rotl at 56; writers back to the last injecting one: rotl@56 load@43; shadow writes of r7 per rep: add=5 mad=3 mul=3 mulhi=4 rotl=3 rotr=2 sub=5 xor=5
[2026-10-07T19:20:20Z] load site instr 60: src r5 win 2 off 3; last base writer xor at 52; writers back to the last injecting one: xor@52; shadow writes of r5 per rep: add=5 mad=1 mul=4 mulhi=3 or=3 rotl=6 rotr=1 shfl=4 sub=1 xor=4
[2026-10-07T19:20:20Z] window layer: site item windows (first, items) (0x800000,2^23) (0xc00000,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x0,2^22) (0xc00000,2^22); expected reads per item by quarter 120.000 120.000 104.000 168.000 (flat uniform 128.000)
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 32 pool cores (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, waited 628 s): adv-accept live-random9-16m
[2026-10-07T19:35:39Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "100521", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:35:39Z] census warps: programs [100521] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:35:39Z] day 20730: cache filled in 0.38 s, fnv 448274a57f508cbc
[2026-10-07T19:35:41Z] table: 16777216 items derived with their 8 lines in 1.7 s; library comparison sample (0 mismatches)
[2026-10-07T19:35:43Z] program p100521-attack-f8: epoch seed 721567a1ba953f153c87013a8f87463bcd6975cc96e29dcd7a33fbaf9d071b6b era seed b5fa469b1e6da9ee3e60337bda004b442fefd4c684d423f067f6bf5c2da2c72d id 8651adc18b85c26d attempt 1 class mx8-erac3cf9cb8+sh256x27 op mix load=16 xor=9 mul=8 add=7 rotr=5 shfl=5 mad=4 rotl=4 sub=3 or=2 mulhi=1; era stride mul 0xfe3adc05 rot 20 interleave [1, 3, 12, 13] windows 4:1:1 8:2:3 10:2:2 11:0:0 14:0:0 17:0:0 26:0:0 29:2:1 31:0:0 33:1:0 34:0:0 37:0:0 43:1:0 44:2:3 58:2:0 60:2:3
[2026-10-07T19:35:43Z] load site instr 4: src r2 win 1 off 1; last base writer mad at 2; writers back to the last injecting one: mad@2; shadow writes of r2 per rep: add=8 mad=4 mul=6 mulhi=1 or=2 rotl=3 rotr=1 shfl=5 sub=1 xor=5
[2026-10-07T19:35:43Z] load site instr 8: src r2 win 2 off 3; last base writer rotr at 5; writers back to the last injecting one: rotr@5 mad@2; shadow writes of r2 per rep: add=8 mad=4 mul=6 mulhi=1 or=2 rotl=3 rotr=1 shfl=5 sub=1 xor=5
[2026-10-07T19:35:43Z] load site instr 10: src r6 win 2 off 2; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r6 per rep: add=6 mad=2 mul=3 mulhi=4 or=1 rotl=3 rotr=1 shfl=3 sub=3 xor=6
[2026-10-07T19:35:43Z] load site instr 11: src r4 win 0 off 0; last base writer load at 8; writers back to the last injecting one: load@8; shadow writes of r4 per rep: add=4 mad=2 mul=2 mulhi=1 rotl=4 rotr=1 shfl=7 xor=6
[2026-10-07T19:35:43Z] load site instr 14: src r0 win 0 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=3 rotl=2 rotr=2 shfl=3 sub=4 xor=2
[2026-10-07T19:35:43Z] load site instr 17: src r2 win 0 off 0; last base writer load at 14; writers back to the last injecting one: load@14; shadow writes of r2 per rep: add=8 mad=4 mul=6 mulhi=1 or=2 rotl=3 rotr=1 shfl=5 sub=1 xor=5
[2026-10-07T19:35:43Z] load site instr 26: src r1 win 0 off 0; last base writer load at 17; writers back to the last injecting one: load@17; shadow writes of r1 per rep: add=4 mad=4 mul=1 mulhi=6 or=1 rotl=6 rotr=4 shfl=3 sub=1 xor=6
[2026-10-07T19:35:43Z] load site instr 29: src r5 win 2 off 1; last base writer load at 26; writers back to the last injecting one: load@26; shadow writes of r5 per rep: add=5 mad=1 mul=4 mulhi=3 or=3 rotl=6 rotr=1 shfl=4 sub=1 xor=4
[2026-10-07T19:35:43Z] load site instr 31: src r0 win 0 off 0; last base writer shfl at 20; writers back to the last injecting one: shfl@20; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=3 rotl=2 rotr=2 shfl=3 sub=4 xor=2
[2026-10-07T19:35:43Z] load site instr 33: src r7 win 1 off 0; last base writer load at 31; writers back to the last injecting one: load@31; shadow writes of r7 per rep: add=5 mad=3 mul=3 mulhi=4 rotl=3 rotr=2 sub=5 xor=5
[2026-10-07T19:35:43Z] load site instr 34: src r3 win 0 off 0; last base writer add at 19; writers back to the last injecting one: add@19; shadow writes of r3 per rep: add=9 mad=2 mul=6 mulhi=4 or=4 rotl=2 rotr=1 shfl=1 xor=4
[2026-10-07T19:35:43Z] load site instr 37: src r4 win 0 off 0; last base writer mad at 36; writers back to the last injecting one: mad@36; shadow writes of r4 per rep: add=4 mad=2 mul=2 mulhi=1 rotl=4 rotr=1 shfl=7 xor=6
[2026-10-07T19:35:43Z] load site instr 43: src r0 win 1 off 0; last base writer shfl at 41; writers back to the last injecting one: shfl@41; shadow writes of r0 per rep: add=6 mad=3 mul=3 mulhi=2 or=3 rotl=2 rotr=2 shfl=3 sub=4 xor=2
[2026-10-07T19:35:43Z] load site instr 44: src r7 win 2 off 3; last base writer load at 43; writers back to the last injecting one: load@43; shadow writes of r7 per rep: add=5 mad=3 mul=3 mulhi=4 rotl=3 rotr=2 sub=5 xor=5
[2026-10-07T19:35:43Z] load site instr 58: src r7 win 2 off 0; last base writer rotl at 56; writers back to the last injecting one: rotl@56 load@43; shadow writes of r7 per rep: add=5 mad=3 mul=3 mulhi=4 rotl=3 rotr=2 sub=5 xor=5
[2026-10-07T19:35:43Z] load site instr 60: src r5 win 2 off 3; last base writer xor at 52; writers back to the last injecting one: xor@52; shadow writes of r5 per rep: add=5 mad=1 mul=4 mulhi=3 or=3 rotl=6 rotr=1 shfl=4 sub=1 xor=4
[2026-10-07T19:35:43Z] window layer: site item windows (first, items) (0x800000,2^23) (0xc00000,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x0,2^22) (0xc00000,2^22); expected reads per item by quarter 120.000 120.000 104.000 168.000 (flat uniform 128.000)
[2026-10-07T19:36:24Z] 524288 warps (16777216 nonces) interpreted in 40.5 s (2.472 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:36:24Z] p100521-attack-f8 distinct lines per hash: n 16777216 min 990 p1 1015 median 1024 p99 1024 max 1024 mean 1022.8782
[2026-10-07T19:36:24Z] p100521-attack-f8 distinct items per hash: n 16777216 min 124 p1 127 median 128 p99 128 max 128 mean 127.8754
[2026-10-07T19:36:24Z] p100521-attack-f8 distinct lines per warp: n 524288 min 32472 p1 32554 median 32606 p99 32647 max 32681 mean 32604.6998
[2026-10-07T19:36:24Z] p100521-attack-f8 distinct items per warp: n 524288 min 4078 p1 4086 median 4092 p99 4096 max 4096 mean 4091.5089
[2026-10-07T19:36:24Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:36:24Z] positions: largest hi16-bucket (256 items) share 0.0144% at p0 (iteration 0, site 0, instr 4); windowed expectation 0.0031%; largest saturated-source share 0.0000% at p0 (site 0, instr 4)
[2026-10-07T19:36:24Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p39 (site 7, instr 29); saturated sources at one position 0 of 2048 at p0 (site 0, instr 4); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:36:24Z] p100521-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 289 (bin 12647817) z_max +14.23 min 50 z_min -6.89 chi2/dof 6.03326 chi2_z +14577.87 top0.1% 0.18704% top0.5% 0.87564% top1% 1.68772%
[2026-10-07T19:36:24Z] p100521-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.54971 largest 210 (item 0x80536a) at +10.39 sigma smallest at -5.48; buckets64 chi2/dof 36.09859 largest 10405 (bucket 131118) at +45.95 sigma smallest at -10.15
[2026-10-07T19:36:26Z] p100521-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 237 (bin 13229832) z_max +9.63 min 56 z_min -6.36 chi2/dof 5.49947 chi2_z +13031.85 top0.1% 0.16220% top0.5% 0.78190% top1% 1.53522%
[2026-10-07T19:36:26Z] p100521-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99962 largest +5.32 sigma; buckets64 chi2/dof 1.00181 largest +4.77 smallest -4.30
[2026-10-07T19:36:26Z] 6-sigma p100521-attack-f8 items buckets64 against the window density: largest bucket +45.95 sigma, smallest -10.15 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:36:26Z] hot-set p100521-attack-f8 items (windowed control): f 0.1% S_f 0.18704% E_f(control) 0.16220% X_f +0.02483% X_f/f +0.2483 -> no hot set
[2026-10-07T19:36:26Z] hot-set p100521-attack-f8 items (windowed control): f 0.5% S_f 0.87564% E_f(control) 0.78190% X_f +0.09374% X_f/f +0.1875 -> no hot set
[2026-10-07T19:36:26Z] hot-set p100521-attack-f8 items (windowed control): f 1.0% S_f 1.68772% E_f(control) 1.53522% X_f +0.15250% X_f/f +0.1525 -> no hot set
[2026-10-07T19:36:26Z] hot-set p100521-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:36:28Z] p100521-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 198 (bin 8823736) z_max +6.19 min 73 z_min -4.86 chi2/dof 0.99970 chi2_z -0.88 top0.1% 0.13105% top0.5% 0.63244% top1% 1.24341%
[2026-10-07T19:36:28Z] hot-set p100521-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.18704% E_f(control) 0.13105% X_f +0.05599% X_f/f +0.5599 -> no hot set
[2026-10-07T19:36:28Z] hot-set p100521-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.87564% E_f(control) 0.63244% X_f +0.24319% X_f/f +0.4864 -> no hot set
[2026-10-07T19:36:28Z] hot-set p100521-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.68772% E_f(control) 1.24341% X_f +0.44431% X_f/f +0.4443 -> no hot set
[2026-10-07T19:36:28Z] hot-set p100521-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:36:28Z] ratio p100521-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.1531x / 1.1199x / 1.0993x (gate 1.2x at 0.1%: within); over the FLAT control 1.4272x / 1.3845x / 1.3573x
[2026-10-07T19:36:28Z] hottest item p100521-attack-f8 (0xc0fd89): 289 reads (0.0000% of all); predicted source none
[2026-10-07T19:36:28Z] program p100521-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:36:29Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "106359", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:36:29Z] census warps: programs [106359] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:36:29Z] day 20730: cache filled in 0.58 s, fnv 448274a57f508cbc
[2026-10-07T19:36:32Z] table: 16777216 items derived with their 8 lines in 2.1 s; library comparison sample (0 mismatches)
[2026-10-07T19:36:35Z] program p106359-attack-f8: epoch seed 1144cc6960ccd5067e9f4401855f45b1ebd392fec220a185b8952e0557f068cb era seed 4150e9d8ced26144064fbd8a1530e3dc17617902a4ecbb7a5ba0ba298b1035de id cfa44e3530a46c89 attempt 12 class mx8-era9a0d4fc4+sh256x27 op mix load=16 add=8 mul=6 rotl=6 rotr=6 xor=5 mad=4 mulhi=4 or=3 shfl=3 sub=3; era stride mul 0xdb95ccc3 rot 27 interleave [3, 4, 5, 10] windows 4:0:0 8:2:3 11:0:0 16:1:0 22:2:2 24:2:1 31:2:1 34:1:0 38:1:1 39:1:1 44:2:3 45:0:0 46:0:0 53:1:0 60:0:0 63:2:3
[2026-10-07T19:36:35Z] load site instr 4: src r4 win 0 off 0; last base writer xor at 2; writers back to the last injecting one: xor@2; shadow writes of r4 per rep: add=5 mad=3 mul=1 mulhi=2 or=1 rotl=3 rotr=4 shfl=2 sub=1 xor=8
[2026-10-07T19:36:35Z] load site instr 8: src r6 win 2 off 3; last base writer xor at 3; writers back to the last injecting one: xor@3; shadow writes of r6 per rep: add=4 mad=8 mul=2 mulhi=5 or=3 rotl=2 rotr=2 shfl=1 sub=2 xor=1
[2026-10-07T19:36:35Z] load site instr 11: src r5 win 0 off 0; last base writer load at 4; writers back to the last injecting one: load@4; shadow writes of r5 per rep: add=5 mad=5 mul=5 mulhi=4 or=2 rotl=1 rotr=7 shfl=2
[2026-10-07T19:36:35Z] load site instr 16: src r1 win 1 off 0; last base writer add at 15; writers back to the last injecting one: add@15; shadow writes of r1 per rep: add=2 mad=2 mul=4 mulhi=1 rotl=4 rotr=2 shfl=3 sub=3 xor=5
[2026-10-07T19:36:35Z] load site instr 22: src r3 win 2 off 2; last base writer rotr at 18; writers back to the last injecting one: rotr@18 load@16; shadow writes of r3 per rep: add=11 mad=3 mul=2 mulhi=2 or=3 rotl=3 rotr=3 shfl=6 sub=2 xor=2
[2026-10-07T19:36:35Z] load site instr 24: src r5 win 2 off 1; last base writer xor at 13; writers back to the last injecting one: xor@13; shadow writes of r5 per rep: add=5 mad=5 mul=5 mulhi=4 or=2 rotl=1 rotr=7 shfl=2
[2026-10-07T19:36:35Z] load site instr 31: src r6 win 2 off 1; last base writer add at 30; writers back to the last injecting one: add@30; shadow writes of r6 per rep: add=4 mad=8 mul=2 mulhi=5 or=3 rotl=2 rotr=2 shfl=1 sub=2 xor=1
[2026-10-07T19:36:35Z] load site instr 34: src r3 win 1 off 0; last base writer shfl at 25; writers back to the last injecting one: shfl@25; shadow writes of r3 per rep: add=11 mad=3 mul=2 mulhi=2 or=3 rotl=3 rotr=3 shfl=6 sub=2 xor=2
[2026-10-07T19:36:35Z] load site instr 38: src r4 win 1 off 1; last base writer mad at 36; writers back to the last injecting one: mad@36; shadow writes of r4 per rep: add=5 mad=3 mul=1 mulhi=2 or=1 rotl=3 rotr=4 shfl=2 sub=1 xor=8
[2026-10-07T19:36:35Z] load site instr 39: src r7 win 1 off 1; last base writer load at 22; writers back to the last injecting one: load@22; shadow writes of r7 per rep: add=4 mad=3 mul=6 mulhi=3 or=1 rotl=3 rotr=5 shfl=3 sub=2 xor=3
[2026-10-07T19:36:35Z] load site instr 44: src r3 win 2 off 3; last base writer load at 39; writers back to the last injecting one: load@39; shadow writes of r3 per rep: add=11 mad=3 mul=2 mulhi=2 or=3 rotl=3 rotr=3 shfl=6 sub=2 xor=2
[2026-10-07T19:36:35Z] load site instr 45: src r7 win 0 off 0; last base writer rotl at 43; writers back to the last injecting one: rotl@43 mad@40; shadow writes of r7 per rep: add=4 mad=3 mul=6 mulhi=3 or=1 rotl=3 rotr=5 shfl=3 sub=2 xor=3
[2026-10-07T19:36:35Z] load site instr 46: src r6 win 0 off 0; last base writer load at 34; writers back to the last injecting one: load@34; shadow writes of r6 per rep: add=4 mad=8 mul=2 mulhi=5 or=3 rotl=2 rotr=2 shfl=1 sub=2 xor=1
[2026-10-07T19:36:35Z] load site instr 53: src r6 win 1 off 0; last base writer rotr at 52; writers back to the last injecting one: rotr@52 rotr@51 rotl@49 rotl@48 load@34; shadow writes of r6 per rep: add=4 mad=8 mul=2 mulhi=5 or=3 rotl=2 rotr=2 shfl=1 sub=2 xor=1
[2026-10-07T19:36:35Z] load site instr 60: src r4 win 0 off 0; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r4 per rep: add=5 mad=3 mul=1 mulhi=2 or=1 rotl=3 rotr=4 shfl=2 sub=1 xor=8
[2026-10-07T19:36:35Z] load site instr 63: src r6 win 2 off 3; last base writer rotr at 56; writers back to the last injecting one: rotr@56 rotr@52 rotr@51 rotl@49 rotl@48 load@34; shadow writes of r6 per rep: add=4 mad=8 mul=2 mulhi=5 or=3 rotl=2 rotr=2 shfl=1 sub=2 xor=1
[2026-10-07T19:36:35Z] window layer: site item windows (first, items) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x0,2^23) (0x800000,2^22) (0x400000,2^22) (0x400000,2^22) (0x0,2^23) (0x800000,2^23) (0x800000,2^23) (0xc00000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0xc00000,2^22); expected reads per item by quarter 88.000 152.000 104.000 168.000 (flat uniform 128.000)
[2026-10-07T19:37:17Z] 524288 warps (16777216 nonces) interpreted in 41.9 s (2.560 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:37:17Z] p106359-attack-f8 distinct lines per hash: n 16777216 min 984 p1 1008 median 1024 p99 1024 max 1024 mean 1022.3726
[2026-10-07T19:37:17Z] p106359-attack-f8 distinct items per hash: n 16777216 min 123 p1 126 median 128 p99 128 max 128 mean 127.8121
[2026-10-07T19:37:17Z] p106359-attack-f8 distinct lines per warp: n 524288 min 32464 p1 32531 median 32590 p99 32637 max 32675 mean 32588.5297
[2026-10-07T19:37:17Z] p106359-attack-f8 distinct items per warp: n 524288 min 4074 p1 4083 median 4090 p99 4095 max 4096 mean 4089.4731
[2026-10-07T19:37:17Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:37:17Z] positions: largest hi16-bucket (256 items) share 0.0070% at p65 (iteration 4, site 1, instr 8); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 4)
[2026-10-07T19:37:17Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p37 (site 5, instr 24); saturated sources at one position 0 of 2048 at p0 (site 0, instr 4); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:37:17Z] p106359-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 235 (bin 16366047) z_max +9.46 min 45 z_min -7.34 chi2/dof 9.50505 chi2_z +24633.27 top0.1% 0.16231% top0.5% 0.78247% top1% 1.53669%
[2026-10-07T19:37:17Z] p106359-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00348 largest 140 (item 0x312128) at +5.54 sigma smallest at -5.01; buckets64 chi2/dof 1.00527 largest 5994 (bucket 41984) at +4.82 sigma smallest at -4.71
[2026-10-07T19:37:19Z] p106359-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 234 (bin 15385497) z_max +9.37 min 48 z_min -7.07 chi2/dof 9.50152 chi2_z +24623.04 top0.1% 0.16230% top0.5% 0.78227% top1% 1.53629%
[2026-10-07T19:37:19Z] p106359-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00019 largest +5.65 sigma; buckets64 chi2/dof 1.00152 largest +4.24 smallest -4.94
[2026-10-07T19:37:19Z] 6-sigma p106359-attack-f8 items buckets64 against the window density: largest bucket +4.82 sigma, smallest -4.71 -> within 6 sigma
[2026-10-07T19:37:19Z] hot-set p106359-attack-f8 items (windowed control): f 0.1% S_f 0.16231% E_f(control) 0.16230% X_f +0.00001% X_f/f +0.0001 -> no hot set
[2026-10-07T19:37:19Z] hot-set p106359-attack-f8 items (windowed control): f 0.5% S_f 0.78247% E_f(control) 0.78227% X_f +0.00020% X_f/f +0.0004 -> no hot set
[2026-10-07T19:37:19Z] hot-set p106359-attack-f8 items (windowed control): f 1.0% S_f 1.53669% E_f(control) 1.53629% X_f +0.00040% X_f/f +0.0004 -> no hot set
[2026-10-07T19:37:19Z] hot-set p106359-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:37:21Z] p106359-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 6341738) z_max +5.83 min 67 z_min -5.39 chi2/dof 0.99947 chi2_z -1.52 top0.1% 0.13106% top0.5% 0.63239% top1% 1.24320%
[2026-10-07T19:37:21Z] hot-set p106359-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16231% E_f(control) 0.13106% X_f +0.03125% X_f/f +0.3125 -> no hot set
[2026-10-07T19:37:21Z] hot-set p106359-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78247% E_f(control) 0.63239% X_f +0.15008% X_f/f +0.3002 -> no hot set
[2026-10-07T19:37:21Z] hot-set p106359-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.53669% E_f(control) 1.24320% X_f +0.29349% X_f/f +0.2935 -> no hot set
[2026-10-07T19:37:21Z] hot-set p106359-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:37:21Z] ratio p106359-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0001x / 1.0003x / 1.0003x (gate 1.2x at 0.1%: within); over the FLAT control 1.2384x / 1.2373x / 1.2361x
[2026-10-07T19:37:21Z] hottest item p106359-attack-f8 (0xf9b9df): 235 reads (0.0000% of all); predicted source none
[2026-10-07T19:37:21Z] program p106359-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:37:21Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "4905", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:37:21Z] census warps: programs [4905] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:37:22Z] day 20730: cache filled in 0.63 s, fnv 448274a57f508cbc
[2026-10-07T19:37:24Z] table: 16777216 items derived with their 8 lines in 1.6 s; library comparison sample (0 mismatches)
[2026-10-07T19:37:28Z] program p4905-attack-f8: epoch seed 86e484ffdd0eaac5cf6962f26007ad30ac8a5928b9c0814095e24c43182a64ff era seed 7eb1119694263a2b0b0e4c263bebb01373736bab1053ff04472b16e5a25ff05f id f38caa367b3d8447 attempt 0 class mx8-era8c0e77af+sh256x27 op mix load=16 add=11 rotl=8 xor=8 mul=5 or=5 mad=3 rotr=3 mulhi=2 sub=2 shfl=1; era stride mul 0x71ec404b rot 9 interleave [2, 3, 5, 6] windows 5:0:0 12:1:0 16:0:0 17:0:0 19:2:0 21:1:1 23:0:0 26:0:0 30:2:3 32:0:0 38:1:0 42:2:0 46:2:1 47:1:1 49:0:0 62:1:1
[2026-10-07T19:37:28Z] load site instr 5: src r4 win 0 off 0; last base writer sub at 4; writers back to the last injecting one: sub@4; shadow writes of r4 per rep: add=4 mad=4 mul=4 mulhi=1 or=1 rotl=3 rotr=1 shfl=2 sub=3 xor=1
[2026-10-07T19:37:28Z] load site instr 12: src r7 win 1 off 0; last base writer add at 7; writers back to the last injecting one: add@7; shadow writes of r7 per rep: add=7 mad=2 mul=3 mulhi=2 or=3 rotl=1 rotr=2 shfl=1 sub=2 xor=4
[2026-10-07T19:37:28Z] load site instr 16: src r1 win 0 off 0; last base writer xor at 14; writers back to the last injecting one: xor@14; shadow writes of r1 per rep: add=4 mad=4 mul=8 or=2 rotl=2 rotr=2 shfl=4 sub=1 xor=9
[2026-10-07T19:37:28Z] load site instr 17: src r0 win 0 off 0; last base writer shfl at 15; writers back to the last injecting one: shfl@15; shadow writes of r0 per rep: add=7 mad=3 mul=3 mulhi=2 rotr=3 shfl=3 sub=4 xor=1
[2026-10-07T19:37:28Z] load site instr 19: src r2 win 2 off 0; last base writer load at 17; writers back to the last injecting one: load@17; shadow writes of r2 per rep: add=8 mad=3 mul=4 mulhi=3 or=6 rotl=4 rotr=3 shfl=7 xor=7
[2026-10-07T19:37:28Z] load site instr 21: src r1 win 1 off 1; last base writer load at 19; writers back to the last injecting one: load@19; shadow writes of r1 per rep: add=4 mad=4 mul=8 or=2 rotl=2 rotr=2 shfl=4 sub=1 xor=9
[2026-10-07T19:37:28Z] load site instr 23: src r4 win 0 off 0; last base writer load at 21; writers back to the last injecting one: load@21; shadow writes of r4 per rep: add=4 mad=4 mul=4 mulhi=1 or=1 rotl=3 rotr=1 shfl=2 sub=3 xor=1
[2026-10-07T19:37:28Z] load site instr 26: src r3 win 0 off 0; last base writer sub at 22; writers back to the last injecting one: sub@22; shadow writes of r3 per rep: add=7 mad=5 mul=3 mulhi=3 or=2 rotr=3 shfl=6 xor=4
[2026-10-07T19:37:28Z] load site instr 30: src r7 win 2 off 3; last base writer rotr at 29; writers back to the last injecting one: rotr@29 add@25; shadow writes of r7 per rep: add=7 mad=2 mul=3 mulhi=2 or=3 rotl=1 rotr=2 shfl=1 sub=2 xor=4
[2026-10-07T19:37:28Z] load site instr 32: src r1 win 0 off 0; last base writer load at 30; writers back to the last injecting one: load@30; shadow writes of r1 per rep: add=4 mad=4 mul=8 or=2 rotl=2 rotr=2 shfl=4 sub=1 xor=9
[2026-10-07T19:37:28Z] load site instr 38: src r5 win 1 off 0; last base writer xor at 34; writers back to the last injecting one: xor@34; shadow writes of r5 per rep: add=3 mad=2 mul=8 mulhi=2 or=2 shfl=3 sub=2 xor=5
[2026-10-07T19:37:28Z] load site instr 42: src r6 win 2 off 0; last base writer load at 32; writers back to the last injecting one: load@32; shadow writes of r6 per rep: add=7 mad=1 mul=2 mulhi=4 or=1 rotl=4 rotr=3 shfl=3 sub=6 xor=7
[2026-10-07T19:37:28Z] load site instr 46: src r7 win 2 off 1; last base writer add at 39; writers back to the last injecting one: add@39; shadow writes of r7 per rep: add=7 mad=2 mul=3 mulhi=2 or=3 rotl=1 rotr=2 shfl=1 sub=2 xor=4
[2026-10-07T19:37:28Z] load site instr 47: src r4 win 1 off 1; last base writer mad at 37; writers back to the last injecting one: mad@37; shadow writes of r4 per rep: add=4 mad=4 mul=4 mulhi=1 or=1 rotl=3 rotr=1 shfl=2 sub=3 xor=1
[2026-10-07T19:37:28Z] load site instr 49: src r2 win 0 off 0; last base writer load at 42; writers back to the last injecting one: load@42; shadow writes of r2 per rep: add=8 mad=3 mul=4 mulhi=3 or=6 rotl=4 rotr=3 shfl=7 xor=7
[2026-10-07T19:37:28Z] load site instr 62: src r0 win 1 off 1; last base writer xor at 53; writers back to the last injecting one: xor@53; shadow writes of r0 per rep: add=7 mad=3 mul=3 mulhi=2 rotr=3 shfl=3 sub=4 xor=1
[2026-10-07T19:37:28Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x0,2^24) (0x0,2^22) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^22) (0x400000,2^22) (0x800000,2^23) (0x0,2^24) (0x800000,2^23); expected reads per item by quarter 152.000 120.000 104.000 136.000 (flat uniform 128.000)
[2026-10-07T19:38:12Z] 524288 warps (16777216 nonces) interpreted in 43.4 s (2.647 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:38:12Z] p4905-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8713
[2026-10-07T19:38:12Z] p4905-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:38:12Z] p4905-attack-f8 distinct lines per warp: n 524288 min 32565 p1 32605 median 32637 p99 32664 max 32697 mean 32636.2817
[2026-10-07T19:38:12Z] p4905-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4889
[2026-10-07T19:38:12Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:38:12Z] positions: largest hi16-bucket (256 items) share 0.0070% at p72 (iteration 4, site 8, instr 30); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 5)
[2026-10-07T19:38:12Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 1 of 2048 at p0 (site 0, instr 5); saturated sources at one position 0 of 2048 at p0 (site 0, instr 5); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:38:12Z] p4905-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 228 (bin 1753107) z_max +8.84 min 57 z_min -6.28 chi2/dof 3.59464 chi2_z +7514.88 top0.1% 0.15005% top0.5% 0.71974% top1% 1.41051%
[2026-10-07T19:38:12Z] p4905-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.09683 largest 191 (item 0x540016) at +6.48 sigma smallest at -4.80; buckets64 chi2/dof 3.12002 largest 7734 (bucket 131072) at +13.21 sigma smallest at -5.68
[2026-10-07T19:38:14Z] p4905-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 222 (bin 1666649) z_max +8.31 min 55 z_min -6.45 chi2/dof 3.49977 chi2_z +7240.10 top0.1% 0.14828% top0.5% 0.71368% top1% 1.40035%
[2026-10-07T19:38:14Z] p4905-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99971 largest +6.08 sigma; buckets64 chi2/dof 1.00008 largest +5.07 smallest -4.24
[2026-10-07T19:38:14Z] 6-sigma p4905-attack-f8 items buckets64 against the window density: largest bucket +13.21 sigma, smallest -5.68 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:38:14Z] hot-set p4905-attack-f8 items (windowed control): f 0.1% S_f 0.15005% E_f(control) 0.14828% X_f +0.00177% X_f/f +0.0177 -> no hot set
[2026-10-07T19:38:14Z] hot-set p4905-attack-f8 items (windowed control): f 0.5% S_f 0.71974% E_f(control) 0.71368% X_f +0.00606% X_f/f +0.0121 -> no hot set
[2026-10-07T19:38:14Z] hot-set p4905-attack-f8 items (windowed control): f 1.0% S_f 1.41051% E_f(control) 1.40035% X_f +0.01016% X_f/f +0.0102 -> no hot set
[2026-10-07T19:38:14Z] hot-set p4905-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:38:17Z] p4905-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 195 (bin 10628297) z_max +5.92 min 75 z_min -4.68 chi2/dof 1.00000 chi2_z +0.00 top0.1% 0.13109% top0.5% 0.63249% top1% 1.24335%
[2026-10-07T19:38:17Z] hot-set p4905-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15005% E_f(control) 0.13109% X_f +0.01896% X_f/f +0.1896 -> no hot set
[2026-10-07T19:38:17Z] hot-set p4905-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.71974% E_f(control) 0.63249% X_f +0.08725% X_f/f +0.1745 -> no hot set
[2026-10-07T19:38:17Z] hot-set p4905-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.41051% E_f(control) 1.24335% X_f +0.16715% X_f/f +0.1672 -> no hot set
[2026-10-07T19:38:17Z] hot-set p4905-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:38:17Z] ratio p4905-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0120x / 1.0085x / 1.0073x (gate 1.2x at 0.1%: within); over the FLAT control 1.1446x / 1.1379x / 1.1344x
[2026-10-07T19:38:17Z] hottest item p4905-attack-f8 (0x1ac013): 228 reads (0.0000% of all); predicted source none
[2026-10-07T19:38:17Z] program p4905-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:38:17Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "102519", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:38:17Z] census warps: programs [102519] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:38:18Z] day 20730: cache filled in 0.62 s, fnv 448274a57f508cbc
[2026-10-07T19:38:20Z] table: 16777216 items derived with their 8 lines in 2.0 s; library comparison sample (0 mismatches)
[2026-10-07T19:38:24Z] program p102519-attack-f8: epoch seed c623193f1253dca70f35b41832338f415a70ed0b9cadb7f978a25c4e45b9cb88 era seed 01c6f92b931179fccad0510c58262dd7772b89fff9b2329c009636789872b333 id eeb0153f9228a8a9 attempt 0 class mx8-era1233d672+sh256x27 op mix load=16 shfl=8 mul=7 mulhi=6 xor=6 add=5 mad=4 sub=4 rotl=3 rotr=3 or=2; era stride mul 0x8959b5a1 rot 25 interleave [1, 4, 6, 14] windows 1:2:2 7:0:0 11:2:1 13:0:0 24:1:1 26:2:1 27:1:0 35:0:0 39:1:1 41:2:3 43:2:1 45:0:0 48:1:1 52:0:0 57:1:1 60:1:0
[2026-10-07T19:38:24Z] load site instr 1: src r0 win 2 off 2; last base writer mad at 58; writers back to the last injecting one: mad@58; shadow writes of r0 per rep: add=7 mad=3 mul=2 mulhi=4 rotl=2 shfl=1 sub=3 xor=3
[2026-10-07T19:38:24Z] load site instr 7: src r5 win 0 off 0; last base writer load at 1; writers back to the last injecting one: load@1; shadow writes of r5 per rep: add=4 mad=1 mul=1 mulhi=2 or=1 rotl=4 rotr=4 shfl=5 sub=2 xor=4
[2026-10-07T19:38:24Z] load site instr 11: src r0 win 2 off 1; last base writer shfl at 5; writers back to the last injecting one: shfl@5; shadow writes of r0 per rep: add=7 mad=3 mul=2 mulhi=4 rotl=2 shfl=1 sub=3 xor=3
[2026-10-07T19:38:24Z] load site instr 13: src r4 win 0 off 0; last base writer load at 11; writers back to the last injecting one: load@11; shadow writes of r4 per rep: add=5 mad=5 mul=3 mulhi=2 or=3 rotl=2 rotr=4 shfl=1 sub=2
[2026-10-07T19:38:24Z] load site instr 24: src r7 win 1 off 1; last base writer rotr at 23; writers back to the last injecting one: rotr@23 xor@22; shadow writes of r7 per rep: add=6 mad=4 mul=3 mulhi=1 or=2 rotl=2 rotr=3 shfl=3 sub=3 xor=7
[2026-10-07T19:38:24Z] load site instr 26: src r5 win 2 off 1; last base writer shfl at 19; writers back to the last injecting one: shfl@19; shadow writes of r5 per rep: add=4 mad=1 mul=1 mulhi=2 or=1 rotl=4 rotr=4 shfl=5 sub=2 xor=4
[2026-10-07T19:38:24Z] load site instr 27: src r3 win 1 off 0; last base writer xor at 25; writers back to the last injecting one: xor@25; shadow writes of r3 per rep: add=6 mad=2 mul=3 mulhi=2 or=2 rotl=2 rotr=1 shfl=4 sub=1 xor=6
[2026-10-07T19:38:24Z] load site instr 35: src r4 win 0 off 0; last base writer mad at 34; writers back to the last injecting one: mad@34; shadow writes of r4 per rep: add=5 mad=5 mul=3 mulhi=2 or=3 rotl=2 rotr=4 shfl=1 sub=2
[2026-10-07T19:38:24Z] load site instr 39: src r2 win 1 off 1; last base writer mad at 21; writers back to the last injecting one: mad@21; shadow writes of r2 per rep: add=4 mad=3 mul=8 mulhi=2 or=2 rotl=2 rotr=4 shfl=4 sub=7 xor=7
[2026-10-07T19:38:24Z] load site instr 41: src r7 win 2 off 3; last base writer shfl at 38; writers back to the last injecting one: shfl@38; shadow writes of r7 per rep: add=6 mad=4 mul=3 mulhi=1 or=2 rotl=2 rotr=3 shfl=3 sub=3 xor=7
[2026-10-07T19:38:24Z] load site instr 43: src r3 win 2 off 1; last base writer load at 39; writers back to the last injecting one: load@39; shadow writes of r3 per rep: add=6 mad=2 mul=3 mulhi=2 or=2 rotl=2 rotr=1 shfl=4 sub=1 xor=6
[2026-10-07T19:38:24Z] load site instr 45: src r5 win 0 off 0; last base writer add at 36; writers back to the last injecting one: add@36; shadow writes of r5 per rep: add=4 mad=1 mul=1 mulhi=2 or=1 rotl=4 rotr=4 shfl=5 sub=2 xor=4
[2026-10-07T19:38:24Z] load site instr 48: src r3 win 1 off 1; last base writer sub at 47; writers back to the last injecting one: sub@47; shadow writes of r3 per rep: add=6 mad=2 mul=3 mulhi=2 or=2 rotl=2 rotr=1 shfl=4 sub=1 xor=6
[2026-10-07T19:38:24Z] load site instr 52: src r0 win 0 off 0; last base writer add at 49; writers back to the last injecting one: add@49; shadow writes of r0 per rep: add=7 mad=3 mul=2 mulhi=4 rotl=2 shfl=1 sub=3 xor=3
[2026-10-07T19:38:24Z] load site instr 57: src r4 win 1 off 1; last base writer load at 52; writers back to the last injecting one: load@52; shadow writes of r4 per rep: add=5 mad=5 mul=3 mulhi=2 or=3 rotl=2 rotr=4 shfl=1 sub=2
[2026-10-07T19:38:24Z] load site instr 60: src r6 win 1 off 0; last base writer xor at 44; writers back to the last injecting one: xor@44; shadow writes of r6 per rep: add=4 mad=4 mul=4 mulhi=1 or=3 rotl=5 rotr=4 shfl=5 sub=4 xor=4
[2026-10-07T19:38:24Z] window layer: site item windows (first, items) (0x800000,2^22) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x800000,2^23) (0x400000,2^22) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0xc00000,2^22) (0x400000,2^22) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^23); expected reads per item by quarter 72.000 168.000 136.000 136.000 (flat uniform 128.000)
[2026-10-07T19:39:06Z] 524288 warps (16777216 nonces) interpreted in 41.6 s (2.540 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:39:06Z] p102519-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8701
[2026-10-07T19:39:06Z] p102519-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T19:39:06Z] p102519-attack-f8 distinct lines per warp: n 524288 min 32570 p1 32605 median 32636 p99 32664 max 32689 mean 32636.0278
[2026-10-07T19:39:06Z] p102519-attack-f8 distinct items per warp: n 524288 min 4090 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4592
[2026-10-07T19:39:06Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:39:06Z] positions: largest hi16-bucket (256 items) share 0.0072% at p96 (iteration 6, site 0, instr 1); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p4 (site 4, instr 24)
[2026-10-07T19:39:06Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p22 (site 6, instr 27); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:39:06Z] p102519-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 234 (bin 4479201) z_max +9.37 min 34 z_min -8.31 chi2/dof 10.50210 chi2_z +27521.01 top0.1% 0.16224% top0.5% 0.78208% top1% 1.53562%
[2026-10-07T19:39:06Z] p102519-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00337 largest 202 (item 0xc38f9a) at +5.66 sigma smallest at -4.71; buckets64 chi2/dof 1.22417 largest 9185 (bucket 180092) at +5.16 sigma smallest at -4.72
[2026-10-07T19:39:08Z] p102519-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 242 (bin 4338316) z_max +10.08 min 35 z_min -8.22 chi2/dof 10.50147 chi2_z +27519.20 top0.1% 0.16226% top0.5% 0.78194% top1% 1.53536%
[2026-10-07T19:39:08Z] p102519-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99992 largest +6.01 sigma; buckets64 chi2/dof 0.99574 largest +4.60 smallest -4.58
[2026-10-07T19:39:08Z] 6-sigma p102519-attack-f8 items buckets64 against the window density: largest bucket +5.16 sigma, smallest -4.72 -> within 6 sigma
[2026-10-07T19:39:08Z] hot-set p102519-attack-f8 items (windowed control): f 0.1% S_f 0.16224% E_f(control) 0.16226% X_f -0.00002% X_f/f -0.0002 -> no hot set
[2026-10-07T19:39:08Z] hot-set p102519-attack-f8 items (windowed control): f 0.5% S_f 0.78208% E_f(control) 0.78194% X_f +0.00014% X_f/f +0.0003 -> no hot set
[2026-10-07T19:39:08Z] hot-set p102519-attack-f8 items (windowed control): f 1.0% S_f 1.53562% E_f(control) 1.53536% X_f +0.00025% X_f/f +0.0003 -> no hot set
[2026-10-07T19:39:08Z] hot-set p102519-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:39:10Z] p102519-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 190 (bin 11899073) z_max +5.48 min 71 z_min -5.04 chi2/dof 1.00060 chi2_z +1.73 top0.1% 0.13105% top0.5% 0.63244% top1% 1.24335%
[2026-10-07T19:39:10Z] hot-set p102519-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16224% E_f(control) 0.13105% X_f +0.03118% X_f/f +0.3118 -> no hot set
[2026-10-07T19:39:10Z] hot-set p102519-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78208% E_f(control) 0.63244% X_f +0.14964% X_f/f +0.2993 -> no hot set
[2026-10-07T19:39:10Z] hot-set p102519-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.53562% E_f(control) 1.24335% X_f +0.29227% X_f/f +0.2923 -> no hot set
[2026-10-07T19:39:10Z] hot-set p102519-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:39:10Z] ratio p102519-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 0.9999x / 1.0002x / 1.0002x (gate 1.2x at 0.1%: within); over the FLAT control 1.2380x / 1.2366x / 1.2351x
[2026-10-07T19:39:10Z] hottest item p102519-attack-f8 (0x4458e1): 234 reads (0.0000% of all); predicted source none
[2026-10-07T19:39:10Z] program p102519-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:39:11Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "101697", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:39:11Z] census warps: programs [101697] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:39:11Z] day 20730: cache filled in 0.37 s, fnv 448274a57f508cbc
[2026-10-07T19:39:13Z] table: 16777216 items derived with their 8 lines in 1.5 s; library comparison sample (0 mismatches)
[2026-10-07T19:39:15Z] program p101697-attack-f8: epoch seed f189d1c446fe93043fb10444699cf6f4e03efd94f179fee03491c0e263ec241b era seed 66db038c6a7bf0212a95ff65419a33af4f6369562f015fe4a1e5320c4de2b834 id dc515e6670e7d85e attempt 1 class mx8-eraf716899f+sh256x27 op mix load=16 mul=8 xor=8 shfl=7 add=6 rotr=6 mad=4 rotl=4 sub=4 mulhi=1; era stride mul 0xa1f081e7 rot 25 interleave [1, 2, 9, 15] windows 1:0:0 2:1:1 3:0:0 6:1:0 13:1:1 15:2:2 19:2:1 24:0:0 30:0:0 37:1:0 40:0:0 41:1:1 45:0:0 58:1:0 61:1:1 62:1:1
[2026-10-07T19:39:15Z] load site instr 1: src r3 win 0 off 0; last base writer rotr at 0; writers back to the last injecting one: rotr@0 sub@60; shadow writes of r3 per rep: add=3 mad=1 mul=3 mulhi=2 rotl=6 rotr=3 shfl=6 sub=7 xor=6
[2026-10-07T19:39:15Z] load site instr 2: src r4 win 1 off 1; last base writer load at 1; writers back to the last injecting one: load@1; shadow writes of r4 per rep: add=4 mad=7 mul=2 mulhi=5 or=2 rotl=3 rotr=3 shfl=1 sub=2 xor=8
[2026-10-07T19:39:15Z] load site instr 3: src r5 win 0 off 0; last base writer load at 2; writers back to the last injecting one: load@2; shadow writes of r5 per rep: add=8 mul=4 or=1 rotl=3 rotr=2 shfl=4 sub=2 xor=2
[2026-10-07T19:39:15Z] load site instr 6: src r4 win 1 off 0; last base writer shfl at 4; writers back to the last injecting one: shfl@4; shadow writes of r4 per rep: add=4 mad=7 mul=2 mulhi=5 or=2 rotl=3 rotr=3 shfl=1 sub=2 xor=8
[2026-10-07T19:39:15Z] load site instr 13: src r5 win 1 off 1; last base writer shfl at 12; writers back to the last injecting one: shfl@12; shadow writes of r5 per rep: add=8 mul=4 or=1 rotl=3 rotr=2 shfl=4 sub=2 xor=2
[2026-10-07T19:39:15Z] load site instr 15: src r2 win 2 off 2; last base writer mad at 11; writers back to the last injecting one: mad@11; shadow writes of r2 per rep: add=9 mad=1 mulhi=3 rotl=4 rotr=3 shfl=5 sub=3 xor=3
[2026-10-07T19:39:15Z] load site instr 19: src r6 win 2 off 1; last base writer load at 13; writers back to the last injecting one: load@13; shadow writes of r6 per rep: add=1 mad=1 mul=3 mulhi=2 or=1 rotl=4 rotr=2 shfl=4 xor=3
[2026-10-07T19:39:15Z] load site instr 24: src r5 win 0 off 0; last base writer mad at 20; writers back to the last injecting one: mad@20; shadow writes of r5 per rep: add=8 mul=4 or=1 rotl=3 rotr=2 shfl=4 sub=2 xor=2
[2026-10-07T19:39:15Z] load site instr 30: src r5 win 0 off 0; last base writer xor at 26; writers back to the last injecting one: xor@26; shadow writes of r5 per rep: add=8 mul=4 or=1 rotl=3 rotr=2 shfl=4 sub=2 xor=2
[2026-10-07T19:39:15Z] load site instr 37: src r0 win 1 off 0; last base writer sub at 32; writers back to the last injecting one: sub@32; shadow writes of r0 per rep: add=1 mad=3 mul=5 mulhi=2 or=2 rotl=3 rotr=2 shfl=4 xor=5
[2026-10-07T19:39:15Z] load site instr 40: src r7 win 0 off 0; last base writer load at 24; writers back to the last injecting one: load@24; shadow writes of r7 per rep: add=6 mad=2 mul=4 mulhi=3 or=1 rotl=2 rotr=4 shfl=4 sub=4 xor=5
[2026-10-07T19:39:15Z] load site instr 41: src r6 win 1 off 1; last base writer load at 40; writers back to the last injecting one: load@40; shadow writes of r6 per rep: add=1 mad=1 mul=3 mulhi=2 or=1 rotl=4 rotr=2 shfl=4 xor=3
[2026-10-07T19:39:15Z] load site instr 45: src r4 win 0 off 0; last base writer add at 43; writers back to the last injecting one: add@43; shadow writes of r4 per rep: add=4 mad=7 mul=2 mulhi=5 or=2 rotl=3 rotr=3 shfl=1 sub=2 xor=8
[2026-10-07T19:39:15Z] load site instr 58: src r6 win 1 off 0; last base writer xor at 42; writers back to the last injecting one: xor@42; shadow writes of r6 per rep: add=1 mad=1 mul=3 mulhi=2 or=1 rotl=4 rotr=2 shfl=4 xor=3
[2026-10-07T19:39:15Z] load site instr 61: src r1 win 1 off 1; last base writer rotr at 56; writers back to the last injecting one: rotr@56 shfl@52; shadow writes of r1 per rep: add=14 mad=3 mul=3 mulhi=2 or=3 rotl=1 rotr=3 shfl=3 sub=2 xor=8
[2026-10-07T19:39:15Z] load site instr 62: src r3 win 1 off 1; last base writer sub at 60; writers back to the last injecting one: sub@60; shadow writes of r3 per rep: add=3 mad=1 mul=3 mulhi=2 rotl=6 rotr=3 shfl=6 sub=7 xor=6
[2026-10-07T19:39:15Z] window layer: site item windows (first, items) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x800000,2^22) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x800000,2^23); expected reads per item by quarter 96.000 128.000 160.000 128.000 (flat uniform 128.000)
[2026-10-07T19:39:48Z] 524288 warps (16777216 nonces) interpreted in 33.4 s (2.042 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:39:48Z] p101697-attack-f8 distinct lines per hash: n 16777216 min 1008 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8711
[2026-10-07T19:39:48Z] p101697-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:39:48Z] p101697-attack-f8 distinct lines per warp: n 524288 min 32566 p1 32605 median 32637 p99 32664 max 32686 mean 32636.2670
[2026-10-07T19:39:48Z] p101697-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4845
[2026-10-07T19:39:48Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:39:48Z] positions: largest hi16-bucket (256 items) share 0.0085% at p5 (iteration 0, site 5, instr 15); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 1)
[2026-10-07T19:39:48Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p3 (site 3, instr 6); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:39:49Z] p101697-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 234 (bin 9400112) z_max +9.37 min 50 z_min -6.89 chi2/dof 5.12638 chi2_z +11951.27 top0.1% 0.15985% top0.5% 0.76802% top1% 1.50518%
[2026-10-07T19:39:49Z] p101697-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.10040 largest 155 (item 0x5cbf9) at +6.02 sigma smallest at -5.22; buckets64 chi2/dof 7.39860 largest 11208 (bucket 161811) at +9.57 sigma smallest at -8.82
[2026-10-07T19:39:51Z] p101697-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 229 (bin 9402400) z_max +8.93 min 52 z_min -6.72 chi2/dof 5.00026 chi2_z +11585.99 top0.1% 0.15532% top0.5% 0.74787% top1% 1.46785%
[2026-10-07T19:39:51Z] p101697-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99991 largest +5.61 sigma; buckets64 chi2/dof 0.99867 largest +4.38 smallest -4.44
[2026-10-07T19:39:51Z] 6-sigma p101697-attack-f8 items buckets64 against the window density: largest bucket +9.57 sigma, smallest -8.82 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:39:51Z] hot-set p101697-attack-f8 items (windowed control): f 0.1% S_f 0.15985% E_f(control) 0.15532% X_f +0.00452% X_f/f +0.0452 -> no hot set
[2026-10-07T19:39:51Z] hot-set p101697-attack-f8 items (windowed control): f 0.5% S_f 0.76802% E_f(control) 0.74787% X_f +0.02015% X_f/f +0.0403 -> no hot set
[2026-10-07T19:39:51Z] hot-set p101697-attack-f8 items (windowed control): f 1.0% S_f 1.50518% E_f(control) 1.46785% X_f +0.03734% X_f/f +0.0373 -> no hot set
[2026-10-07T19:39:51Z] hot-set p101697-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:39:53Z] p101697-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 194 (bin 10939870) z_max +5.83 min 71 z_min -5.04 chi2/dof 0.99947 chi2_z -1.54 top0.1% 0.13106% top0.5% 0.63246% top1% 1.24332%
[2026-10-07T19:39:53Z] hot-set p101697-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.15985% E_f(control) 0.13106% X_f +0.02878% X_f/f +0.2878 -> no hot set
[2026-10-07T19:39:53Z] hot-set p101697-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.76802% E_f(control) 0.63246% X_f +0.13556% X_f/f +0.2711 -> no hot set
[2026-10-07T19:39:53Z] hot-set p101697-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.50518% E_f(control) 1.24332% X_f +0.26187% X_f/f +0.2619 -> no hot set
[2026-10-07T19:39:53Z] hot-set p101697-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:39:53Z] ratio p101697-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0291x / 1.0269x / 1.0254x (gate 1.2x at 0.1%: within); over the FLAT control 1.2196x / 1.2143x / 1.2106x
[2026-10-07T19:39:53Z] hottest item p101697-attack-f8 (0x8f6f30): 234 reads (0.0000% of all); predicted source none
[2026-10-07T19:39:53Z] program p101697-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-07T19:39:53Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "106740", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:39:53Z] census warps: programs [106740] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:39:54Z] day 20730: cache filled in 0.38 s, fnv 448274a57f508cbc
[2026-10-07T19:39:56Z] table: 16777216 items derived with their 8 lines in 1.5 s; library comparison sample (0 mismatches)
[2026-10-07T19:39:58Z] program p106740-attack-f8: epoch seed 87fdc67bf96e44f8ce0bec73b10082b6680ee0edb88f52b87c7fa0ec02290acf era seed 51e7515713be72dd0bb6e552034a27917961bbc09db018b978c748a768a6f11e id 13c12e6a0c3dfba1 attempt 4 class mx8-eraf2949c7e+sh256x27 op mix load=16 mul=8 mulhi=8 add=7 rotl=7 shfl=6 rotr=5 xor=3 mad=2 or=2; era stride mul 0x3c66c63d rot 20 interleave [1, 5, 10, 14] windows 1:1:0 6:0:0 7:1:1 11:0:0 18:2:3 29:0:0 30:2:2 32:1:0 34:2:3 36:2:0 45:2:3 50:2:2 54:0:0 56:2:0 57:1:1 60:0:0
[2026-10-07T19:39:58Z] load site instr 1: src r6 win 1 off 0; last base writer rotl at 0; writers back to the last injecting one: rotl@0 rotl@47 mul@44 mul@39 mulhi@31 mulhi@26 rotr@24 load@18; shadow writes of r6 per rep: add=11 mad=7 mul=2 or=2 rotl=5 rotr=1 shfl=5 sub=2 xor=3
[2026-10-07T19:39:58Z] load site instr 6: src r1 win 0 off 0; last base writer rotr at 3; writers back to the last injecting one: rotr@3 rotl@43 add@42; shadow writes of r1 per rep: add=7 mad=4 mul=3 mulhi=4 or=1 rotl=2 rotr=3 shfl=4 sub=4 xor=6
[2026-10-07T19:39:58Z] load site instr 7: src r4 win 1 off 1; last base writer add at 2; writers back to the last injecting one: add@2; shadow writes of r4 per rep: add=6 mad=4 mul=4 mulhi=3 or=1 rotl=2 rotr=4 shfl=3 xor=3
[2026-10-07T19:39:58Z] load site instr 11: src r5 win 0 off 0; last base writer load at 7; writers back to the last injecting one: load@7; shadow writes of r5 per rep: add=5 mad=4 mul=5 mulhi=1 or=1 rotl=1 rotr=3 shfl=3 sub=2 xor=4
[2026-10-07T19:39:58Z] load site instr 18: src r2 win 2 off 3; last base writer load at 11; writers back to the last injecting one: load@11; shadow writes of r2 per rep: add=5 mad=4 mul=3 mulhi=2 or=2 rotr=2 shfl=3 sub=3 xor=2
[2026-10-07T19:39:58Z] load site instr 29: src r0 win 0 off 0; last base writer rotl at 22; writers back to the last injecting one: rotl@22 load@56; shadow writes of r0 per rep: add=3 mad=3 mul=1 mulhi=4 or=1 rotl=4 rotr=4 shfl=1 sub=2 xor=4
[2026-10-07T19:39:58Z] load site instr 30: src r4 win 2 off 2; last base writer load at 29; writers back to the last injecting one: load@29; shadow writes of r4 per rep: add=6 mad=4 mul=4 mulhi=3 or=1 rotl=2 rotr=4 shfl=3 xor=3
[2026-10-07T19:39:58Z] load site instr 32: src r0 win 1 off 0; last base writer load at 30; writers back to the last injecting one: load@30; shadow writes of r0 per rep: add=3 mad=3 mul=1 mulhi=4 or=1 rotl=4 rotr=4 shfl=1 sub=2 xor=4
[2026-10-07T19:39:58Z] load site instr 34: src r1 win 2 off 3; last base writer rotr at 33; writers back to the last injecting one: rotr@33 load@32; shadow writes of r1 per rep: add=7 mad=4 mul=3 mulhi=4 or=1 rotl=2 rotr=3 shfl=4 sub=4 xor=6
[2026-10-07T19:39:58Z] load site instr 36: src r3 win 2 off 0; last base writer load at 34; writers back to the last injecting one: load@34; shadow writes of r3 per rep: add=9 mad=7 mul=5 mulhi=1 rotl=1 rotr=2 shfl=4 sub=3 xor=2
[2026-10-07T19:39:58Z] load site instr 45: src r7 win 2 off 3; last base writer shfl at 37; writers back to the last injecting one: shfl@37; shadow writes of r7 per rep: add=5 mad=3 mul=5 mulhi=5 or=1 rotl=5 rotr=1 shfl=3 sub=1 xor=5
[2026-10-07T19:39:58Z] load site instr 50: src r1 win 2 off 2; last base writer rotl at 43; writers back to the last injecting one: rotl@43 add@42; shadow writes of r1 per rep: add=7 mad=4 mul=3 mulhi=4 or=1 rotl=2 rotr=3 shfl=4 sub=4 xor=6
[2026-10-07T19:39:58Z] load site instr 54: src r3 win 0 off 0; last base writer rotr at 49; writers back to the last injecting one: rotr@49 add@48; shadow writes of r3 per rep: add=9 mad=7 mul=5 mulhi=1 rotl=1 rotr=2 shfl=4 sub=3 xor=2
[2026-10-07T19:39:58Z] load site instr 56: src r2 win 2 off 0; last base writer load at 54; writers back to the last injecting one: load@54; shadow writes of r2 per rep: add=5 mad=4 mul=3 mulhi=2 or=2 rotr=2 shfl=3 sub=3 xor=2
[2026-10-07T19:39:58Z] load site instr 57: src r0 win 1 off 1; last base writer load at 56; writers back to the last injecting one: load@56; shadow writes of r0 per rep: add=3 mad=3 mul=1 mulhi=4 or=1 rotl=4 rotr=4 shfl=1 sub=2 xor=4
[2026-10-07T19:39:58Z] load site instr 60: src r5 win 0 off 0; last base writer rotl at 59; writers back to the last injecting one: rotl@59 add@58; shadow writes of r5 per rep: add=5 mad=4 mul=5 mulhi=1 or=1 rotl=1 rotr=3 shfl=3 sub=2 xor=4
[2026-10-07T19:39:58Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x800000,2^22) (0x0,2^23) (0xc00000,2^22) (0x0,2^22) (0xc00000,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^22) (0x800000,2^23) (0x0,2^24); expected reads per item by quarter 136.000 72.000 136.000 168.000 (flat uniform 128.000)
[2026-10-07T19:40:31Z] 524288 warps (16777216 nonces) interpreted in 33.6 s (2.051 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:40:31Z] p106740-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8711
[2026-10-07T19:40:31Z] p106740-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-07T19:40:31Z] p106740-attack-f8 distinct lines per warp: n 524288 min 32568 p1 32605 median 32636 p99 32664 max 32688 mean 32636.0951
[2026-10-07T19:40:31Z] p106740-attack-f8 distinct items per warp: n 524288 min 4090 p1 4093 median 4096 p99 4096 max 4096 mean 4095.4620
[2026-10-07T19:40:31Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:40:31Z] positions: largest hi16-bucket (256 items) share 0.0070% at p100 (iteration 6, site 4, instr 18); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p21 (site 5, instr 29)
[2026-10-07T19:40:31Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p30 (site 14, instr 57); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:40:31Z] p106740-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 240 (bin 14554349) z_max +9.90 min 34 z_min -8.31 chi2/dof 10.50125 chi2_z +27518.55 top0.1% 0.16226% top0.5% 0.78204% top1% 1.53544%
[2026-10-07T19:40:32Z] p106740-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00126 largest 240 (item 0xde14ed) at +5.55 sigma smallest at -4.97; buckets64 chi2/dof 1.11591 largest 4939 (bucket 128967) at +4.88 sigma smallest at -4.67
[2026-10-07T19:40:34Z] p106740-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 243 (bin 13609730) z_max +10.16 min 33 z_min -8.40 chi2/dof 10.50116 chi2_z +27518.30 top0.1% 0.16229% top0.5% 0.78198% top1% 1.53538%
[2026-10-07T19:40:34Z] p106740-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99973 largest +5.89 sigma; buckets64 chi2/dof 1.00204 largest +4.74 smallest -4.50
[2026-10-07T19:40:34Z] 6-sigma p106740-attack-f8 items buckets64 against the window density: largest bucket +4.88 sigma, smallest -4.67 -> within 6 sigma
[2026-10-07T19:40:34Z] hot-set p106740-attack-f8 items (windowed control): f 0.1% S_f 0.16226% E_f(control) 0.16229% X_f -0.00002% X_f/f -0.0002 -> no hot set
[2026-10-07T19:40:34Z] hot-set p106740-attack-f8 items (windowed control): f 0.5% S_f 0.78204% E_f(control) 0.78198% X_f +0.00006% X_f/f +0.0001 -> no hot set
[2026-10-07T19:40:34Z] hot-set p106740-attack-f8 items (windowed control): f 1.0% S_f 1.53544% E_f(control) 1.53538% X_f +0.00006% X_f/f +0.0001 -> no hot set
[2026-10-07T19:40:34Z] hot-set p106740-attack-f8 items (windowed control): verdict clear
[2026-10-07T19:40:36Z] p106740-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 201 (bin 13551481) z_max +6.45 min 74 z_min -4.77 chi2/dof 1.00050 chi2_z +1.44 top0.1% 0.13108% top0.5% 0.63249% top1% 1.24337%
[2026-10-07T19:40:36Z] hot-set p106740-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16226% E_f(control) 0.13108% X_f +0.03118% X_f/f +0.3118 -> no hot set
[2026-10-07T19:40:36Z] hot-set p106740-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78204% E_f(control) 0.63249% X_f +0.14955% X_f/f +0.2991 -> no hot set
[2026-10-07T19:40:36Z] hot-set p106740-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.53544% E_f(control) 1.24337% X_f +0.29207% X_f/f +0.2921 -> no hot set
[2026-10-07T19:40:36Z] hot-set p106740-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T19:40:36Z] ratio p106740-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 0.9999x / 1.0001x / 1.0000x (gate 1.2x at 0.1%: within); over the FLAT control 1.2379x / 1.2364x / 1.2349x
[2026-10-07T19:40:36Z] hottest item p106740-attack-f8 (0xde14ed): 240 reads (0.0000% of all); predicted source none
[2026-10-07T19:40:36Z] program p106740-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T19:40:36Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "327", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T19:40:36Z] census warps: programs [327] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T19:40:37Z] day 20730: cache filled in 0.37 s, fnv 448274a57f508cbc
[2026-10-07T19:40:38Z] table: 16777216 items derived with their 8 lines in 1.5 s; library comparison sample (0 mismatches)
[2026-10-07T19:40:42Z] program p327-attack-f8: epoch seed b303f24523c809225e21043bdc80b8cc749dd03d6d1b367a3e2cd03119caba1b era seed 2eb270290bc26a8c8789afcc9fdcb5a3d27715887a3c99a50503fbba24741287 id db888e977e940bf5 attempt 3 class mx8-eraa58b9f85+sh256x27 op mix load=16 rotl=8 add=7 xor=7 mulhi=6 rotr=6 sub=4 mad=3 mul=3 or=2 shfl=2; era stride mul 0x65fc66b7 rot 4 interleave [4, 8, 10, 13] windows 9:0:0 14:2:0 17:0:0 21:0:0 31:1:1 34:1:1 40:0:0 46:0:0 50:2:3 52:1:1 54:2:3 57:1:1 59:2:0 60:0:0 62:1:0 63:2:1
[2026-10-07T19:40:42Z] load site instr 9: src r3 win 0 off 0; last base writer rotl at 6; writers back to the last injecting one: rotl@6 sub@4; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T19:40:42Z] load site instr 14: src r1 win 2 off 0; last base writer sub at 12; writers back to the last injecting one: sub@12; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T19:40:42Z] load site instr 17: src r4 win 0 off 0; last base writer load at 14; writers back to the last injecting one: load@14; shadow writes of r4 per rep: add=7 mad=2 mul=4 mulhi=4 or=3 rotl=3 rotr=2 shfl=2 sub=2 xor=3
[2026-10-07T19:40:42Z] load site instr 21: src r1 win 0 off 0; last base writer rotr at 20; writers back to the last injecting one: rotr@20 sub@12; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T19:40:42Z] load site instr 31: src r4 win 1 off 1; last base writer xor at 30; writers back to the last injecting one: xor@30; shadow writes of r4 per rep: add=7 mad=2 mul=4 mulhi=4 or=3 rotl=3 rotr=2 shfl=2 sub=2 xor=3
[2026-10-07T19:40:42Z] load site instr 34: src r1 win 1 off 1; last base writer add at 27; writers back to the last injecting one: add@27; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T19:40:42Z] load site instr 40: src r3 win 0 off 0; last base writer mad at 39; writers back to the last injecting one: mad@39; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T19:40:42Z] load site instr 46: src r6 win 0 off 0; last base writer add at 41; writers back to the last injecting one: add@41; shadow writes of r6 per rep: add=12 mad=4 mul=2 mulhi=4 or=1 rotl=2 rotr=3 shfl=4 sub=2 xor=4
[2026-10-07T19:40:42Z] load site instr 50: src r3 win 2 off 3; last base writer rotr at 45; writers back to the last injecting one: rotr@45 mad@39; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T19:40:42Z] load site instr 52: src r2 win 1 off 1; last base writer xor at 48; writers back to the last injecting one: xor@48; shadow writes of r2 per rep: add=5 mad=3 mul=5 mulhi=4 or=1 rotl=6 rotr=1 shfl=2 sub=4 xor=3
[2026-10-07T19:40:42Z] load site instr 54: src r0 win 2 off 3; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r0 per rep: add=2 mad=2 mul=5 mulhi=3 rotl=3 rotr=1 shfl=4 sub=1 xor=3
[2026-10-07T19:40:42Z] load site instr 57: src r1 win 1 off 1; last base writer add at 56; writers back to the last injecting one: add@56; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T19:40:42Z] load site instr 59: src r4 win 2 off 0; last base writer load at 57; writers back to the last injecting one: load@57; shadow writes of r4 per rep: add=7 mad=2 mul=4 mulhi=4 or=3 rotl=3 rotr=2 shfl=2 sub=2 xor=3
[2026-10-07T19:40:42Z] load site instr 60: src r3 win 0 off 0; last base writer load at 54; writers back to the last injecting one: load@54; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T19:40:42Z] load site instr 62: src r7 win 1 off 0; last base writer mad at 61; writers back to the last injecting one: mad@61; shadow writes of r7 per rep: add=4 mad=7 mul=1 mulhi=4 or=2 rotl=2 rotr=3 shfl=3 xor=2
[2026-10-07T19:40:42Z] load site instr 63: src r5 win 2 off 1; last base writer load at 59; writers back to the last injecting one: load@59; shadow writes of r5 per rep: add=8 mad=4 mul=2 mulhi=1 rotl=3 rotr=1 shfl=3 sub=2 xor=10
[2026-10-07T19:40:42Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0xc00000,2^22) (0x800000,2^23) (0xc00000,2^22) (0x800000,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^23) (0x400000,2^22); expected reads per item by quarter 128.000 96.000 112.000 176.000 (flat uniform 128.000)
Terminated

View file

@ -0,0 +1,144 @@
lease: holding 32 pool cores (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, waited 0 s, class adv): adv-accept live-random-rest
[2026-10-07T20:13:29Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "327", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T20:13:29Z] census warps: programs [327] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T20:13:29Z] day 20730: cache filled in 0.51 s, fnv 448274a57f508cbc
[2026-10-07T20:13:32Z] table: 16777216 items derived with their 8 lines in 1.7 s; library comparison sample (0 mismatches)
[2026-10-07T20:13:36Z] program p327-attack-f8: epoch seed b303f24523c809225e21043bdc80b8cc749dd03d6d1b367a3e2cd03119caba1b era seed 2eb270290bc26a8c8789afcc9fdcb5a3d27715887a3c99a50503fbba24741287 id db888e977e940bf5 attempt 3 class mx8-eraa58b9f85+sh256x27 op mix load=16 rotl=8 add=7 xor=7 mulhi=6 rotr=6 sub=4 mad=3 mul=3 or=2 shfl=2; era stride mul 0x65fc66b7 rot 4 interleave [4, 8, 10, 13] windows 9:0:0 14:2:0 17:0:0 21:0:0 31:1:1 34:1:1 40:0:0 46:0:0 50:2:3 52:1:1 54:2:3 57:1:1 59:2:0 60:0:0 62:1:0 63:2:1
[2026-10-07T20:13:36Z] load site instr 9: src r3 win 0 off 0; last base writer rotl at 6; writers back to the last injecting one: rotl@6 sub@4; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T20:13:36Z] load site instr 14: src r1 win 2 off 0; last base writer sub at 12; writers back to the last injecting one: sub@12; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T20:13:36Z] load site instr 17: src r4 win 0 off 0; last base writer load at 14; writers back to the last injecting one: load@14; shadow writes of r4 per rep: add=7 mad=2 mul=4 mulhi=4 or=3 rotl=3 rotr=2 shfl=2 sub=2 xor=3
[2026-10-07T20:13:36Z] load site instr 21: src r1 win 0 off 0; last base writer rotr at 20; writers back to the last injecting one: rotr@20 sub@12; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T20:13:36Z] load site instr 31: src r4 win 1 off 1; last base writer xor at 30; writers back to the last injecting one: xor@30; shadow writes of r4 per rep: add=7 mad=2 mul=4 mulhi=4 or=3 rotl=3 rotr=2 shfl=2 sub=2 xor=3
[2026-10-07T20:13:36Z] load site instr 34: src r1 win 1 off 1; last base writer add at 27; writers back to the last injecting one: add@27; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T20:13:36Z] load site instr 40: src r3 win 0 off 0; last base writer mad at 39; writers back to the last injecting one: mad@39; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T20:13:36Z] load site instr 46: src r6 win 0 off 0; last base writer add at 41; writers back to the last injecting one: add@41; shadow writes of r6 per rep: add=12 mad=4 mul=2 mulhi=4 or=1 rotl=2 rotr=3 shfl=4 sub=2 xor=4
[2026-10-07T20:13:36Z] load site instr 50: src r3 win 2 off 3; last base writer rotr at 45; writers back to the last injecting one: rotr@45 mad@39; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T20:13:36Z] load site instr 52: src r2 win 1 off 1; last base writer xor at 48; writers back to the last injecting one: xor@48; shadow writes of r2 per rep: add=5 mad=3 mul=5 mulhi=4 or=1 rotl=6 rotr=1 shfl=2 sub=4 xor=3
[2026-10-07T20:13:36Z] load site instr 54: src r0 win 2 off 3; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r0 per rep: add=2 mad=2 mul=5 mulhi=3 rotl=3 rotr=1 shfl=4 sub=1 xor=3
[2026-10-07T20:13:36Z] load site instr 57: src r1 win 1 off 1; last base writer add at 56; writers back to the last injecting one: add@56; shadow writes of r1 per rep: add=6 mad=5 mul=1 mulhi=3 or=2 rotl=4 rotr=2 shfl=3 xor=7
[2026-10-07T20:13:36Z] load site instr 59: src r4 win 2 off 0; last base writer load at 57; writers back to the last injecting one: load@57; shadow writes of r4 per rep: add=7 mad=2 mul=4 mulhi=4 or=3 rotl=3 rotr=2 shfl=2 sub=2 xor=3
[2026-10-07T20:13:36Z] load site instr 60: src r3 win 0 off 0; last base writer load at 54; writers back to the last injecting one: load@54; shadow writes of r3 per rep: add=3 mad=3 mul=10 mulhi=2 or=1 rotr=4 shfl=3 sub=2 xor=5
[2026-10-07T20:13:36Z] load site instr 62: src r7 win 1 off 0; last base writer mad at 61; writers back to the last injecting one: mad@61; shadow writes of r7 per rep: add=4 mad=7 mul=1 mulhi=4 or=2 rotl=2 rotr=3 shfl=3 xor=2
[2026-10-07T20:13:36Z] load site instr 63: src r5 win 2 off 1; last base writer load at 59; writers back to the last injecting one: load@59; shadow writes of r5 per rep: add=8 mad=4 mul=2 mulhi=1 rotl=3 rotr=1 shfl=3 sub=2 xor=10
[2026-10-07T20:13:36Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0xc00000,2^22) (0x800000,2^23) (0xc00000,2^22) (0x800000,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^23) (0x400000,2^22); expected reads per item by quarter 128.000 96.000 112.000 176.000 (flat uniform 128.000)
[2026-10-07T20:14:19Z] 524288 warps (16777216 nonces) interpreted in 43.3 s (2.644 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T20:14:19Z] p327-attack-f8 distinct lines per hash: n 16777216 min 976 p1 1008 median 1024 p99 1024 max 1024 mean 1021.7521
[2026-10-07T20:14:19Z] p327-attack-f8 distinct items per hash: n 16777216 min 122 p1 126 median 128 p99 128 max 128 mean 127.7346
[2026-10-07T20:14:19Z] p327-attack-f8 distinct lines per warp: n 524288 min 32413 p1 32504 median 32570 p99 32625 max 32680 mean 32568.9041
[2026-10-07T20:14:19Z] p327-attack-f8 distinct items per warp: n 524288 min 4069 p1 4079 median 4087 p99 4093 max 4096 mean 4086.9966
[2026-10-07T20:14:19Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T20:14:19Z] positions: largest hi16-bucket (256 items) share 0.0071% at p90 (iteration 5, site 10, instr 54); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p0 (site 0, instr 9)
[2026-10-07T20:14:19Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 1 of 2048 at p0 (site 0, instr 9); saturated sources at one position 0 of 2048 at p0 (site 0, instr 9); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T20:14:19Z] p327-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 247 (bin 12693468) z_max +10.52 min 51 z_min -6.81 chi2/dof 8.00367 chi2_z +20284.78 top0.1% 0.16921% top0.5% 0.81619% top1% 1.60326%
[2026-10-07T20:14:19Z] p327-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00389 largest 152 (item 0x5a7517) at +5.72 sigma smallest at -4.95; buckets64 chi2/dof 1.00400 largest 8617 (bucket 10854) at +4.70 sigma smallest at -4.41
[2026-10-07T20:14:22Z] p327-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 247 (bin 13524507) z_max +10.52 min 51 z_min -6.81 chi2/dof 8.00053 chi2_z +20275.71 top0.1% 0.16921% top0.5% 0.81606% top1% 1.60302%
[2026-10-07T20:14:22Z] p327-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99972 largest +5.76 sigma; buckets64 chi2/dof 0.99608 largest +4.43 smallest -4.27
[2026-10-07T20:14:22Z] 6-sigma p327-attack-f8 items buckets64 against the window density: largest bucket +4.70 sigma, smallest -4.41 -> within 6 sigma
[2026-10-07T20:14:22Z] hot-set p327-attack-f8 items (windowed control): f 0.1% S_f 0.16921% E_f(control) 0.16921% X_f +0.00000% X_f/f +0.0000 -> no hot set
[2026-10-07T20:14:22Z] hot-set p327-attack-f8 items (windowed control): f 0.5% S_f 0.81619% E_f(control) 0.81606% X_f +0.00013% X_f/f +0.0003 -> no hot set
[2026-10-07T20:14:22Z] hot-set p327-attack-f8 items (windowed control): f 1.0% S_f 1.60326% E_f(control) 1.60302% X_f +0.00024% X_f/f +0.0002 -> no hot set
[2026-10-07T20:14:22Z] hot-set p327-attack-f8 items (windowed control): verdict clear
[2026-10-07T20:14:25Z] p327-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 199 (bin 1419008) z_max +6.28 min 68 z_min -5.30 chi2/dof 1.00019 chi2_z +0.54 top0.1% 0.13111% top0.5% 0.63248% top1% 1.24330%
[2026-10-07T20:14:25Z] hot-set p327-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16921% E_f(control) 0.13111% X_f +0.03810% X_f/f +0.3810 -> no hot set
[2026-10-07T20:14:25Z] hot-set p327-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.81619% E_f(control) 0.63248% X_f +0.18371% X_f/f +0.3674 -> no hot set
[2026-10-07T20:14:25Z] hot-set p327-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.60326% E_f(control) 1.24330% X_f +0.35996% X_f/f +0.3600 -> no hot set
[2026-10-07T20:14:25Z] hot-set p327-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T20:14:25Z] ratio p327-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0000x / 1.0002x / 1.0002x (gate 1.2x at 0.1%: within); over the FLAT control 1.2906x / 1.2905x / 1.2895x
[2026-10-07T20:14:25Z] hottest item p327-attack-f8 (0xe57cc3): 247 reads (0.0000% of all); predicted source none
[2026-10-07T20:14:25Z] program p327-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T20:14:25Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "1180", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T20:14:25Z] census warps: programs [1180] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T20:14:26Z] day 20730: cache filled in 0.63 s, fnv 448274a57f508cbc
[2026-10-07T20:14:28Z] table: 16777216 items derived with their 8 lines in 2.3 s; library comparison sample (0 mismatches)
[2026-10-07T20:14:33Z] program p1180-attack-f8: epoch seed 46f7ab0b7ff21f62836ec66d0ac8a07ce8c050f69ff48aafb489f34a802954cf era seed fc6a213be3cb6ce16e87a767545bafb0d59a214fff19ebadf692c6895b875889 id d3335cac78d0eb13 attempt 8 class mx8-erae4de7744+sh256x27 op mix load=16 add=13 rotl=8 mad=5 sub=5 mul=4 xor=4 mulhi=3 or=3 shfl=2 rotr=1; era stride mul 0x37575593 rot 11 interleave [0, 3, 7, 11] windows 1:2:3 6:1:0 13:1:0 20:0:0 23:1:1 29:1:1 34:2:0 35:0:0 39:1:0 40:1:1 44:1:0 50:1:0 53:2:0 56:2:2 61:0:0 63:2:2
[2026-10-07T20:14:33Z] load site instr 1: src r2 win 2 off 3; last base writer rotl at 0; writers back to the last injecting one: rotl@0 mulhi@46 load@44; shadow writes of r2 per rep: add=2 mad=3 mul=4 mulhi=4 or=2 rotl=3 rotr=1 shfl=5 sub=1 xor=4
[2026-10-07T20:14:33Z] load site instr 6: src r0 win 1 off 0; last base writer shfl at 2; writers back to the last injecting one: shfl@2; shadow writes of r0 per rep: add=6 mad=2 mul=6 mulhi=1 or=2 rotl=3 rotr=2 sub=3 xor=4
[2026-10-07T20:14:33Z] load site instr 13: src r5 win 1 off 0; last base writer rotl at 11; writers back to the last injecting one: rotl@11 add@9; shadow writes of r5 per rep: add=4 mad=2 mul=2 mulhi=2 or=1 rotl=2 rotr=2 shfl=3 sub=2 xor=3
[2026-10-07T20:14:33Z] load site instr 20: src r5 win 0 off 0; last base writer add at 14; writers back to the last injecting one: add@14; shadow writes of r5 per rep: add=4 mad=2 mul=2 mulhi=2 or=1 rotl=2 rotr=2 shfl=3 sub=2 xor=3
[2026-10-07T20:14:33Z] load site instr 23: src r1 win 1 off 1; last base writer load at 13; writers back to the last injecting one: load@13; shadow writes of r1 per rep: add=9 mad=2 mul=6 mulhi=1 or=2 rotl=4 rotr=8 shfl=2 sub=5 xor=8
[2026-10-07T20:14:33Z] load site instr 29: src r3 win 1 off 1; last base writer load at 23; writers back to the last injecting one: load@23; shadow writes of r3 per rep: add=7 mad=2 mulhi=1 or=2 rotr=3 shfl=3 sub=3 xor=5
[2026-10-07T20:14:33Z] load site instr 34: src r1 win 2 off 0; last base writer sub at 28; writers back to the last injecting one: sub@28; shadow writes of r1 per rep: add=9 mad=2 mul=6 mulhi=1 or=2 rotl=4 rotr=8 shfl=2 sub=5 xor=8
[2026-10-07T20:14:33Z] load site instr 35: src r0 win 0 off 0; last base writer sub at 33; writers back to the last injecting one: sub@33; shadow writes of r0 per rep: add=6 mad=2 mul=6 mulhi=1 or=2 rotl=3 rotr=2 sub=3 xor=4
[2026-10-07T20:14:33Z] load site instr 39: src r6 win 1 off 0; last base writer rotl at 31; writers back to the last injecting one: rotl@31 xor@24; shadow writes of r6 per rep: add=7 mad=6 mul=1 mulhi=2 rotl=3 rotr=5 shfl=4 sub=3 xor=2
[2026-10-07T20:14:33Z] load site instr 40: src r5 win 1 off 1; last base writer mad at 25; writers back to the last injecting one: mad@25; shadow writes of r5 per rep: add=4 mad=2 mul=2 mulhi=2 or=1 rotl=2 rotr=2 shfl=3 sub=2 xor=3
[2026-10-07T20:14:33Z] load site instr 44: src r1 win 1 off 0; last base writer rotr at 37; writers back to the last injecting one: rotr@37 rotl@36 sub@28; shadow writes of r1 per rep: add=9 mad=2 mul=6 mulhi=1 or=2 rotl=4 rotr=8 shfl=2 sub=5 xor=8
[2026-10-07T20:14:33Z] load site instr 50: src r5 win 1 off 0; last base writer add at 49; writers back to the last injecting one: add@49; shadow writes of r5 per rep: add=4 mad=2 mul=2 mulhi=2 or=1 rotl=2 rotr=2 shfl=3 sub=2 xor=3
[2026-10-07T20:14:33Z] load site instr 53: src r0 win 2 off 0; last base writer sub at 51; writers back to the last injecting one: sub@51; shadow writes of r0 per rep: add=6 mad=2 mul=6 mulhi=1 or=2 rotl=3 rotr=2 sub=3 xor=4
[2026-10-07T20:14:33Z] load site instr 56: src r1 win 2 off 2; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r1 per rep: add=9 mad=2 mul=6 mulhi=1 or=2 rotl=4 rotr=8 shfl=2 sub=5 xor=8
[2026-10-07T20:14:33Z] load site instr 61: src r5 win 0 off 0; last base writer xor at 60; writers back to the last injecting one: xor@60; shadow writes of r5 per rep: add=4 mad=2 mul=2 mulhi=2 or=1 rotl=2 rotr=2 shfl=3 sub=2 xor=3
[2026-10-07T20:14:33Z] load site instr 63: src r0 win 2 off 2; last base writer load at 61; writers back to the last injecting one: load@61; shadow writes of r0 per rep: add=6 mad=2 mul=6 mulhi=1 or=2 rotl=3 rotr=2 sub=3 xor=4
[2026-10-07T20:14:33Z] window layer: site item windows (first, items) (0xc00000,2^22) (0x0,2^23) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^23) (0x0,2^23) (0x0,2^22) (0x800000,2^22) (0x0,2^24) (0x800000,2^22); expected reads per item by quarter 168.000 104.000 136.000 104.000 (flat uniform 128.000)
[2026-10-07T20:15:22Z] 524288 warps (16777216 nonces) interpreted in 48.8 s (2.980 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T20:15:22Z] p1180-attack-f8 distinct lines per hash: n 16777216 min 991 p1 1015 median 1024 p99 1024 max 1024 mean 1022.8708
[2026-10-07T20:15:22Z] p1180-attack-f8 distinct items per hash: n 16777216 min 124 p1 127 median 128 p99 128 max 128 mean 127.8744
[2026-10-07T20:15:22Z] p1180-attack-f8 distinct lines per warp: n 524288 min 32497 p1 32554 median 32605 p99 32647 max 32679 mean 32604.4163
[2026-10-07T20:15:22Z] p1180-attack-f8 distinct items per warp: n 524288 min 4079 p1 4086 median 4092 p99 4096 max 4096 mean 4091.4769
[2026-10-07T20:15:22Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T20:15:22Z] positions: largest hi16-bucket (256 items) share 0.0070% at p32 (iteration 2, site 0, instr 1); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p37 (site 5, instr 29)
[2026-10-07T20:15:22Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p6 (site 6, instr 34); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T20:15:22Z] p1180-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 237 (bin 3176981) z_max +9.63 min 57 z_min -6.28 chi2/dof 6.50135 chi2_z +15933.61 top0.1% 0.16238% top0.5% 0.78243% top1% 1.53611%
[2026-10-07T20:15:22Z] p1180-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00127 largest 168 (item 0xc9fcb6) at +6.28 sigma smallest at -4.89; buckets64 chi2/dof 1.00415 largest 7062 (bucket 206106) at +4.98 sigma smallest at -4.78
[2026-10-07T20:15:25Z] p1180-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 240 (bin 3572262) z_max +9.90 min 52 z_min -6.72 chi2/dof 6.50084 chi2_z +15932.12 top0.1% 0.16224% top0.5% 0.78195% top1% 1.53537%
[2026-10-07T20:15:25Z] p1180-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00036 largest +5.88 sigma; buckets64 chi2/dof 1.00234 largest +4.99 smallest -4.38
[2026-10-07T20:15:25Z] 6-sigma p1180-attack-f8 items buckets64 against the window density: largest bucket +4.98 sigma, smallest -4.78 -> within 6 sigma
[2026-10-07T20:15:25Z] hot-set p1180-attack-f8 items (windowed control): f 0.1% S_f 0.16238% E_f(control) 0.16224% X_f +0.00014% X_f/f +0.0014 -> no hot set
[2026-10-07T20:15:25Z] hot-set p1180-attack-f8 items (windowed control): f 0.5% S_f 0.78243% E_f(control) 0.78195% X_f +0.00048% X_f/f +0.0010 -> no hot set
[2026-10-07T20:15:25Z] hot-set p1180-attack-f8 items (windowed control): f 1.0% S_f 1.53611% E_f(control) 1.53537% X_f +0.00074% X_f/f +0.0007 -> no hot set
[2026-10-07T20:15:25Z] hot-set p1180-attack-f8 items (windowed control): verdict clear
[2026-10-07T20:15:27Z] p1180-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 192 (bin 15527014) z_max +5.66 min 76 z_min -4.60 chi2/dof 1.00015 chi2_z +0.42 top0.1% 0.13109% top0.5% 0.63248% top1% 1.24334%
[2026-10-07T20:15:27Z] hot-set p1180-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16238% E_f(control) 0.13109% X_f +0.03129% X_f/f +0.3129 -> no hot set
[2026-10-07T20:15:27Z] hot-set p1180-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78243% E_f(control) 0.63248% X_f +0.14995% X_f/f +0.2999 -> no hot set
[2026-10-07T20:15:27Z] hot-set p1180-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.53611% E_f(control) 1.24334% X_f +0.29277% X_f/f +0.2928 -> no hot set
[2026-10-07T20:15:27Z] hot-set p1180-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T20:15:27Z] ratio p1180-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0008x / 1.0006x / 1.0005x (gate 1.2x at 0.1%: within); over the FLAT control 1.2387x / 1.2371x / 1.2355x
[2026-10-07T20:15:27Z] hottest item p1180-attack-f8 (0x307a15): 237 reads (0.0000% of all); predicted source none
[2026-10-07T20:15:27Z] program p1180-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
[2026-10-07T20:15:27Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "101805", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample"]
[2026-10-07T20:15:27Z] census warps: programs [101805] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag false
[2026-10-07T20:15:28Z] day 20730: cache filled in 0.62 s, fnv 448274a57f508cbc
[2026-10-07T20:15:30Z] table: 16777216 items derived with their 8 lines in 2.2 s; library comparison sample (0 mismatches)
[2026-10-07T20:15:35Z] program p101805-attack-f8: epoch seed 9d98af2edc063c51d973f1f7562a2e117bd8f156049f5fcaad03a35a4390c51b era seed 666b90d929a7be8418090591a66a5645fffc75144dea3fe933e50a05cbe366c6 id 87b33d12209f4d34 attempt 1 class mx8-erad3a93d5e+sh256x27 op mix load=16 mul=10 add=8 rotr=6 xor=5 mad=4 or=4 shfl=4 mulhi=3 rotl=2 sub=2; era stride mul 0x1be1d99d rot 17 interleave [0, 5, 7, 14] windows 1:0:0 6:2:1 11:2:3 30:1:0 31:0:0 35:1:1 37:2:1 38:1:0 41:2:1 43:1:0 48:1:0 51:1:0 55:1:0 56:0:0 57:1:1 62:2:3
[2026-10-07T20:15:35Z] load site instr 1: src r0 win 0 off 0; last base writer add at 0; writers back to the last injecting one: add@0; shadow writes of r0 per rep: add=3 mad=7 mul=5 mulhi=1 or=1 rotl=3 rotr=4 shfl=1 sub=1 xor=5
[2026-10-07T20:15:35Z] load site instr 6: src r5 win 2 off 1; last base writer mad at 2; writers back to the last injecting one: mad@2; shadow writes of r5 per rep: add=8 mad=5 rotl=3 rotr=2 shfl=4 sub=4 xor=7
[2026-10-07T20:15:35Z] load site instr 11: src r0 win 2 off 3; last base writer add at 10; writers back to the last injecting one: add@10; shadow writes of r0 per rep: add=3 mad=7 mul=5 mulhi=1 or=1 rotl=3 rotr=4 shfl=1 sub=1 xor=5
[2026-10-07T20:15:35Z] load site instr 30: src r7 win 1 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r7 per rep: add=8 mad=5 mul=1 mulhi=2 or=1 rotl=3 rotr=4 shfl=3 sub=3
[2026-10-07T20:15:35Z] load site instr 31: src r3 win 0 off 0; last base writer load at 30; writers back to the last injecting one: load@30; shadow writes of r3 per rep: add=4 mad=3 mul=1 mulhi=2 or=4 rotl=2 rotr=5 shfl=3 sub=3 xor=4
[2026-10-07T20:15:35Z] load site instr 35: src r3 win 1 off 1; last base writer rotl at 33; writers back to the last injecting one: rotl@33 load@30; shadow writes of r3 per rep: add=4 mad=3 mul=1 mulhi=2 or=4 rotl=2 rotr=5 shfl=3 sub=3 xor=4
[2026-10-07T20:15:35Z] load site instr 37: src r5 win 2 off 1; last base writer add at 36; writers back to the last injecting one: add@36; shadow writes of r5 per rep: add=8 mad=5 rotl=3 rotr=2 shfl=4 sub=4 xor=7
[2026-10-07T20:15:35Z] load site instr 38: src r7 win 1 off 0; last base writer load at 37; writers back to the last injecting one: load@37; shadow writes of r7 per rep: add=8 mad=5 mul=1 mulhi=2 or=1 rotl=3 rotr=4 shfl=3 sub=3
[2026-10-07T20:15:35Z] load site instr 41: src r1 win 2 off 1; last base writer load at 38; writers back to the last injecting one: load@38; shadow writes of r1 per rep: add=4 mad=3 mul=5 mulhi=1 or=4 rotr=3 shfl=1 sub=3 xor=2
[2026-10-07T20:15:35Z] load site instr 43: src r4 win 1 off 0; last base writer load at 41; writers back to the last injecting one: load@41; shadow writes of r4 per rep: add=5 mad=2 mul=5 mulhi=4 or=4 rotl=3 rotr=3 shfl=7 sub=1 xor=9
[2026-10-07T20:15:35Z] load site instr 48: src r0 win 1 off 0; last base writer load at 43; writers back to the last injecting one: load@43; shadow writes of r0 per rep: add=3 mad=7 mul=5 mulhi=1 or=1 rotl=3 rotr=4 shfl=1 sub=1 xor=5
[2026-10-07T20:15:35Z] load site instr 51: src r3 win 1 off 0; last base writer shfl at 42; writers back to the last injecting one: shfl@42; shadow writes of r3 per rep: add=4 mad=3 mul=1 mulhi=2 or=4 rotl=2 rotr=5 shfl=3 sub=3 xor=4
[2026-10-07T20:15:35Z] load site instr 55: src r4 win 1 off 0; last base writer load at 48; writers back to the last injecting one: load@48; shadow writes of r4 per rep: add=5 mad=2 mul=5 mulhi=4 or=4 rotl=3 rotr=3 shfl=7 sub=1 xor=9
[2026-10-07T20:15:35Z] load site instr 56: src r3 win 0 off 0; last base writer load at 55; writers back to the last injecting one: load@55; shadow writes of r3 per rep: add=4 mad=3 mul=1 mulhi=2 or=4 rotl=2 rotr=5 shfl=3 sub=3 xor=4
[2026-10-07T20:15:35Z] load site instr 57: src r4 win 1 off 1; last base writer load at 56; writers back to the last injecting one: load@56; shadow writes of r4 per rep: add=5 mad=2 mul=5 mulhi=4 or=4 rotl=3 rotr=3 shfl=7 sub=1 xor=9
[2026-10-07T20:15:35Z] load site instr 62: src r3 win 2 off 3; last base writer load at 57; writers back to the last injecting one: load@57; shadow writes of r3 per rep: add=4 mad=3 mul=1 mulhi=2 or=4 rotl=2 rotr=5 shfl=3 sub=3 xor=4
[2026-10-07T20:15:35Z] window layer: site item windows (first, items) (0x0,2^24) (0x400000,2^22) (0xc00000,2^22) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x400000,2^22) (0x0,2^23) (0x400000,2^22) (0x0,2^23) (0x0,2^23) (0x0,2^23) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0xc00000,2^22); expected reads per item by quarter 120.000 216.000 56.000 120.000 (flat uniform 128.000)
[2026-10-07T20:16:19Z] 524288 warps (16777216 nonces) interpreted in 44.5 s (2.713 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T20:16:19Z] p101805-attack-f8 distinct lines per hash: n 16777216 min 1007 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8705
[2026-10-07T20:16:19Z] p101805-attack-f8 distinct items per hash: n 16777216 min 126 p1 128 median 128 p99 128 max 128 mean 127.9994
[2026-10-07T20:16:19Z] p101805-attack-f8 distinct lines per warp: n 524288 min 32563 p1 32604 median 32636 p99 32664 max 32688 mean 32635.5928
[2026-10-07T20:16:19Z] p101805-attack-f8 distinct items per warp: n 524288 min 4089 p1 4093 median 4096 p99 4096 max 4096 mean 4095.3991
[2026-10-07T20:16:19Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T20:16:19Z] positions: largest hi16-bucket (256 items) share 0.0113% at p17 (iteration 1, site 1, instr 6); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p9 (site 9, instr 43)
[2026-10-07T20:16:19Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p46 (site 14, instr 57); saturated sources at one position 0 of 2048 at p0 (site 0, instr 1); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T20:16:19Z] p101805-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 310 (bin 4569382) z_max +16.09 min 21 z_min -9.46 chi2/dof 26.75788 chi2_z +74602.79 top0.1% 0.21301% top0.5% 1.02618% top1% 2.01326%
[2026-10-07T20:16:19Z] p101805-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.15245 largest 310 (item 0x45b926) at +6.40 sigma smallest at -5.17; buckets64 chi2/dof 10.75863 largest 15549 (bucket 77475) at +14.67 sigma smallest at -9.54
[2026-10-07T20:16:22Z] p101805-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 304 (bin 4592428) z_max +15.56 min 20 z_min -9.55 chi2/dof 26.49698 chi2_z +73847.15 top0.1% 0.20366% top0.5% 0.98584% top1% 1.93958%
[2026-10-07T20:16:22Z] p101805-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00043 largest +6.82 sigma; buckets64 chi2/dof 1.00437 largest +4.84 smallest -4.49
[2026-10-07T20:16:22Z] 6-sigma p101805-attack-f8 items buckets64 against the window density: largest bucket +14.67 sigma, smallest -9.54 -> FLAGGED (beyond 6 sigma)
[2026-10-07T20:16:22Z] hot-set p101805-attack-f8 items (windowed control): f 0.1% S_f 0.21301% E_f(control) 0.20366% X_f +0.00934% X_f/f +0.0934 -> no hot set
[2026-10-07T20:16:22Z] hot-set p101805-attack-f8 items (windowed control): f 0.5% S_f 1.02618% E_f(control) 0.98584% X_f +0.04034% X_f/f +0.0807 -> no hot set
[2026-10-07T20:16:22Z] hot-set p101805-attack-f8 items (windowed control): f 1.0% S_f 2.01326% E_f(control) 1.93958% X_f +0.07368% X_f/f +0.0737 -> no hot set
[2026-10-07T20:16:22Z] hot-set p101805-attack-f8 items (windowed control): verdict clear
[2026-10-07T20:16:25Z] p101805-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 193 (bin 8661176) z_max +5.75 min 72 z_min -4.95 chi2/dof 1.00032 chi2_z +0.92 top0.1% 0.13106% top0.5% 0.63245% top1% 1.24335%
[2026-10-07T20:16:25Z] hot-set p101805-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.21301% E_f(control) 0.13106% X_f +0.08195% X_f/f +0.8195 -> no hot set
[2026-10-07T20:16:25Z] hot-set p101805-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 1.02618% E_f(control) 0.63245% X_f +0.39373% X_f/f +0.7875 -> no hot set
[2026-10-07T20:16:25Z] hot-set p101805-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 2.01326% E_f(control) 1.24335% X_f +0.76991% X_f/f +0.7699 -> no hot set
[2026-10-07T20:16:25Z] hot-set p101805-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-07T20:16:25Z] ratio p101805-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0459x / 1.0409x / 1.0380x (gate 1.2x at 0.1%: within); over the FLAT control 1.6253x / 1.6225x / 1.6192x
[2026-10-07T20:16:25Z] hottest item p101805-attack-f8 (0x572561): 310 reads (0.0000% of all); predicted source none
[2026-10-07T20:16:25Z] program p101805-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
Terminated
lease: released 32 pool cores after 176 s, exit 0

View file

@ -0,0 +1,225 @@
lease: holding 32 pool cores (63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94, waited 0 s, class adv): adv-accept live-tail3-16m
[2026-10-08T00:07:06Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "228763", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-08T00:07:06Z] census warps: programs [228763] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-08T00:07:07Z] day 20730: cache filled in 0.63 s, fnv 448274a57f508cbc
[2026-10-08T00:07:09Z] table: 16777216 items derived with their 8 lines in 1.5 s; library comparison sample (0 mismatches)
[2026-10-08T00:07:13Z] program p228763-attack-f8: epoch seed 74fda453fcc3c81b387ba7a8d54dcc4f25626ca7c50e0fbdafa3f4b3ededbe41 era seed 14751e8ba414977dc6fa7ed24d216ba40729296a3c6951880c42fcdf1d9e83ce id 2c4be0f6dc44c423 attempt 5 class mx8-era1a1089c0+sh256x27 op mix load=16 add=8 mulhi=6 xor=6 mad=5 rotl=5 rotr=5 shfl=5 mul=4 sub=3 or=1; era stride mul 0xba69f243 rot 8 interleave [0, 6, 9, 12] windows 10:0:0 11:1:0 12:1:1 13:1:0 15:0:0 16:1:1 19:0:0 25:1:1 29:1:1 32:1:1 34:0:0 37:2:1 41:1:1 46:0:0 48:1:0 61:0:0
[2026-10-08T00:07:13Z] load site instr 10: src r4 win 0 off 0; last base writer shfl at 9; writers back to the last injecting one: shfl@9; shadow writes of r4 per rep: add=8 mad=3 mul=2 mulhi=1 rotl=3 rotr=7 shfl=5 sub=1 xor=3
[2026-10-08T00:07:13Z] load site instr 11: src r5 win 1 off 0; last base writer mad at 2; writers back to the last injecting one: mad@2; shadow writes of r5 per rep: add=6 mad=5 mul=5 mulhi=3 or=1 rotl=3 rotr=4 shfl=1 sub=4 xor=1
[2026-10-08T00:07:13Z] load site instr 12: src r4 win 1 off 1; last base writer load at 11; writers back to the last injecting one: load@11; shadow writes of r4 per rep: add=8 mad=3 mul=2 mulhi=1 rotl=3 rotr=7 shfl=5 sub=1 xor=3
[2026-10-08T00:07:13Z] load site instr 13: src r2 win 1 off 0; last base writer load at 10; writers back to the last injecting one: load@10; shadow writes of r2 per rep: add=9 mad=3 mul=4 mulhi=3 or=4 rotl=1 rotr=4 shfl=2 sub=2 xor=1
[2026-10-08T00:07:13Z] load site instr 15: src r1 win 0 off 0; last base writer add at 14; writers back to the last injecting one: add@14; shadow writes of r1 per rep: add=8 mad=3 mul=4 mulhi=2 or=4 rotl=4 rotr=3 shfl=5 xor=4
[2026-10-08T00:07:13Z] load site instr 16: src r6 win 1 off 1; last base writer load at 15; writers back to the last injecting one: load@15; shadow writes of r6 per rep: add=8 mad=4 mul=3 mulhi=1 or=1 rotl=5 rotr=2 sub=4 xor=3
[2026-10-08T00:07:13Z] load site instr 19: src r5 win 0 off 0; last base writer rotl at 17; writers back to the last injecting one: rotl@17 load@16; shadow writes of r5 per rep: add=6 mad=5 mul=5 mulhi=3 or=1 rotl=3 rotr=4 shfl=1 sub=4 xor=1
[2026-10-08T00:07:13Z] load site instr 25: src r5 win 1 off 1; last base writer rotl at 23; writers back to the last injecting one: rotl@23 rotl@17 load@16; shadow writes of r5 per rep: add=6 mad=5 mul=5 mulhi=3 or=1 rotl=3 rotr=4 shfl=1 sub=4 xor=1
[2026-10-08T00:07:13Z] load site instr 29: src r2 win 1 off 1; last base writer load at 19; writers back to the last injecting one: load@19; shadow writes of r2 per rep: add=9 mad=3 mul=4 mulhi=3 or=4 rotl=1 rotr=4 shfl=2 sub=2 xor=1
[2026-10-08T00:07:13Z] load site instr 32: src r0 win 1 off 1; last base writer sub at 31; writers back to the last injecting one: sub@31; shadow writes of r0 per rep: add=8 mad=2 mul=5 mulhi=1 or=2 rotl=3 rotr=4 shfl=7 sub=2 xor=4
[2026-10-08T00:07:13Z] load site instr 34: src r3 win 0 off 0; last base writer load at 29; writers back to the last injecting one: load@29; shadow writes of r3 per rep: add=9 mad=2 mul=3 mulhi=2 or=2 rotl=2 rotr=4 shfl=1 sub=1 xor=4
[2026-10-08T00:07:13Z] load site instr 37: src r7 win 2 off 1; last base writer load at 34; writers back to the last injecting one: load@34; shadow writes of r7 per rep: add=1 mad=3 mul=3 mulhi=2 rotl=2 rotr=2 sub=1 xor=7
[2026-10-08T00:07:13Z] load site instr 41: src r2 win 1 off 1; last base writer add at 39; writers back to the last injecting one: add@39; shadow writes of r2 per rep: add=9 mad=3 mul=4 mulhi=3 or=4 rotl=1 rotr=4 shfl=2 sub=2 xor=1
[2026-10-08T00:07:13Z] load site instr 46: src r5 win 0 off 0; last base writer add at 36; writers back to the last injecting one: add@36; shadow writes of r5 per rep: add=6 mad=5 mul=5 mulhi=3 or=1 rotl=3 rotr=4 shfl=1 sub=4 xor=1
[2026-10-08T00:07:13Z] load site instr 48: src r0 win 1 off 0; last base writer load at 46; writers back to the last injecting one: load@46; shadow writes of r0 per rep: add=8 mad=2 mul=5 mulhi=1 or=2 rotl=3 rotr=4 shfl=7 sub=2 xor=4
[2026-10-08T00:07:13Z] load site instr 61: src r1 win 0 off 0; last base writer xor at 50; writers back to the last injecting one: xor@50; shadow writes of r1 per rep: add=8 mad=3 mul=4 mulhi=2 or=4 rotl=4 rotr=3 shfl=5 xor=4
[2026-10-08T00:07:13Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^23) (0x0,2^24) (0x800000,2^23) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x400000,2^22) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0x0,2^24); expected reads per item by quarter 96.000 128.000 144.000 144.000 (flat uniform 128.000)
[2026-10-08T00:07:50Z] 524288 warps (16777216 nonces) interpreted in 36.9 s (2.253 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-08T00:07:50Z] p228763-attack-f8 distinct lines per hash: n 16777216 min 999 p1 1022 median 1024 p99 1024 max 1024 mean 1023.8357
[2026-10-08T00:07:50Z] p228763-attack-f8 distinct items per hash: n 16777216 min 125 p1 128 median 128 p99 128 max 128 mean 127.9951
[2026-10-08T00:07:50Z] p228763-attack-f8 distinct lines per warp: n 524288 min 32507 p1 32562 median 32615 p99 32654 max 32686 mean 32613.7416
[2026-10-08T00:07:50Z] p228763-attack-f8 distinct items per warp: n 524288 min 4081 p1 4087 median 4093 p99 4096 max 4096 mean 4092.6472
[2026-10-08T00:07:50Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-08T00:07:50Z] positions: largest hi16-bucket (256 items) share 1.0457% at p57 (iteration 3, site 9, instr 32); windowed expectation 0.0031%; largest saturated-source share 0.0000% at p16 (site 0, instr 10)
[2026-10-08T00:07:50Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 30 of 2048 at p105 (site 9, instr 32); saturated sources at one position 0 of 2048 at p0 (site 0, instr 10); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-08T00:07:50Z] p228763-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 1218380 (bin 14863510) z_max +107679.28 min 51 z_min -6.81 chi2/dof 1385.51716 chi2_z +4009989.91 top0.1% 0.26092% top0.5% 0.82289% top1% 1.50517%
[2026-10-08T00:07:50Z] p228763-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1229.01607 largest 1218380 (item 0xe2cc96) at +101519.67 sigma smallest at -5.42; buckets64 chi2/dof 1242.45033 largest 1228732 (bucket 232242) at +12703.29 sigma smallest at -8.66
[2026-10-08T00:07:53Z] p228763-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 212 (bin 9430225) z_max +7.42 min 47 z_min -7.16 chi2/dof 3.99933 chi2_z +8687.00 top0.1% 0.14340% top0.5% 0.69148% top1% 1.35847%
[2026-10-08T00:07:53Z] p228763-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99966 largest +5.67 sigma; buckets64 chi2/dof 0.99562 largest +4.52 smallest -4.45
[2026-10-08T00:07:53Z] 6-sigma p228763-attack-f8 items buckets64 against the window density: largest bucket +12703.29 sigma, smallest -8.66 -> FLAGGED (beyond 6 sigma)
[2026-10-08T00:07:53Z] hot-set p228763-attack-f8 items (windowed control): f 0.1% S_f 0.26092% E_f(control) 0.14340% X_f +0.11752% X_f/f +1.1752 -> HOT SET
[2026-10-08T00:07:53Z] hot-set p228763-attack-f8 items (windowed control): f 0.5% S_f 0.82289% E_f(control) 0.69148% X_f +0.13140% X_f/f +0.2628 -> no hot set
[2026-10-08T00:07:53Z] hot-set p228763-attack-f8 items (windowed control): f 1.0% S_f 1.50517% E_f(control) 1.35847% X_f +0.14669% X_f/f +0.1467 -> no hot set
[2026-10-08T00:07:53Z] hot-set p228763-attack-f8 items (windowed control): verdict FLAGGED
[2026-10-08T00:07:55Z] p228763-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 193 (bin 2682897) z_max +5.75 min 69 z_min -5.21 chi2/dof 1.00041 chi2_z +1.19 top0.1% 0.13112% top0.5% 0.63255% top1% 1.24339%
[2026-10-08T00:07:55Z] hot-set p228763-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.26092% E_f(control) 0.13112% X_f +0.12980% X_f/f +1.2980 -> HOT SET
[2026-10-08T00:07:55Z] hot-set p228763-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.82289% E_f(control) 0.63255% X_f +0.19034% X_f/f +0.3807 -> no hot set
[2026-10-08T00:07:55Z] hot-set p228763-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.50517% E_f(control) 1.24339% X_f +0.26178% X_f/f +0.2618 -> no hot set
[2026-10-08T00:07:55Z] hot-set p228763-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-08T00:07:55Z] ratio p228763-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.8196x / 1.1900x / 1.1080x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 1.9899x / 1.3009x / 1.2105x
[2026-10-08T00:07:56Z] attribution: hot threshold count >= 185 marks 17281 items (0.1030% of items) holding 5696490 reads (0.2653% of reads); top 8 items t=0xe2cc96:1218380 t=0xf1bc0b:1217632 t=0x912bbd:219 t=0x9886ac:217 t=0xe41019:214 t=0xd2fa9b:214 t=0xabf4ac:214 t=0xfa23a8:212
[2026-10-08T00:08:16Z] attribution: reads on hot items per position (flat expectation 0.1030% of each position's 16777216 reads); the 24 largest: p25(it1 s9)=2.471% p57(it3 s9)=2.470% p105(it6 s9)=2.470% p89(it5 s9)=2.469% p41(it2 s9)=2.466% p121(it7 s9)=2.465% p73(it4 s9)=2.463% p37(it2 s5)=0.259% p103(it6 s7)=0.259% p12(it0 s12)=0.259% p120(it7 s8)=0.259% p5(it0 s5)=0.258% p53(it3 s5)=0.258% p114(it7 s2)=0.258% p124(it7 s12)=0.258% p44(it2 s12)=0.258% p60(it3 s12)=0.258% p21(it1 s5)=0.258% p34(it2 s2)=0.257% p39(it2 s7)=0.257% p98(it6 s2)=0.257% p18(it1 s2)=0.257% p104(it6 s8)=0.257% p71(it4 s7)=0.257%
[2026-10-08T00:08:16Z] attribution: hot reads by iteration it0=0.144% it1=0.283% it2=0.283% it3=0.283% it4=0.282% it5=0.282% it6=0.283% it7=0.283% ; by site s0=0.128% s1=0.000% s2=0.257% s3=0.000% s4=0.128% s5=0.257% s6=0.128% s7=0.257% s8=0.257% s9=2.191% s10=0.128% s11=0.000% s12=0.257% s13=0.128% s14=0.000% s15=0.128%
[2026-10-08T00:08:16Z] site 0 (instr 10, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1280% (flat expectation 0.1030%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:08:16Z] site 1 (instr 11, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0001% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 2 (instr 12, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2568% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 3 (instr 13, src r2, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0001% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 4 (instr 15, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1283% (flat expectation 0.1030%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:08:16Z] site 5 (instr 16, src r6, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2568% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 6 (instr 19, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1282% (flat expectation 0.1030%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:08:16Z] site 7 (instr 25, src r5, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2567% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 8 (instr 29, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2568% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 9 (instr 32, src r0, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 2.1911% (flat expectation 0.1030%); index entropy 14.873 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.9115% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 10 (instr 34, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1281% (flat expectation 0.1030%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:08:16Z] site 11 (instr 37, src r7, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0001% (flat expectation 0.1030%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:08:16Z] site 12 (instr 41, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2567% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 13 (instr 46, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1283% (flat expectation 0.1030%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:08:16Z] site 14 (instr 48, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1030%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:08:16Z] site 15 (instr 61, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1283% (flat expectation 0.1030%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:08:16Z] attribution: item 0xe2cc96 (1218380 reads) read from positions p25(it1 s9)x174449 p105(it6 s9)x174396 p41(it2 s9)x174001 p89(it5 s9)x173982 p57(it3 s9)x173935 p121(it7 s9)x173809 p73(it4 s9)x173686 p18(it1 s2)x5 p104(it6 s8)x5 p2(it0 s2)x4 p0(it0 s0)x4 p76(it4 s12)x4
[2026-10-08T00:08:16Z] attribution: item 0xf1bc0b (1217632 reads) read from positions p57(it3 s9)x174735 p89(it5 s9)x174155 p25(it1 s9)x174061 p105(it6 s9)x173917 p73(it4 s9)x173687 p41(it2 s9)x173576 p121(it7 s9)x173355 p24(it1 s8)x6 p28(it1 s12)x5 p7(it0 s7)x4 p23(it1 s7)x4 p37(it2 s5)x4
[2026-10-08T00:08:16Z] attribution: item 0x912bbd (219 reads) read from positions p25(it1 s9)x6 p57(it3 s9)x6 p60(it3 s12)x6 p89(it5 s9)x6 p40(it2 s8)x5 p53(it3 s5)x5 p72(it4 s8)x5 p80(it5 s0)x5 p87(it5 s7)x5 p124(it7 s12)x4 p9(it0 s9)x4 p21(it1 s5)x4
[2026-10-08T00:08:16Z] attribution: item 0x9886ac (217 reads) read from positions p18(it1 s2)x7 p57(it3 s9)x7 p121(it7 s9)x7 p25(it1 s9)x6 p44(it2 s12)x6 p16(it1 s0)x5 p56(it3 s8)x5 p60(it3 s12)x5 p64(it4 s0)x5 p71(it4 s7)x5 p85(it5 s5)x5 p5(it0 s5)x4
[2026-10-08T00:08:16Z] attribution: item 0xe41019 (214 reads) read from positions p50(it3 s2)x7 p89(it5 s9)x7 p105(it6 s9)x7 p121(it7 s9)x6 p41(it2 s9)x6 p108(it6 s12)x6 p53(it3 s5)x5 p40(it2 s8)x5 p72(it4 s8)x5 p76(it4 s12)x5 p98(it6 s2)x5 p24(it1 s8)x5
[2026-10-08T00:08:16Z] attribution: item 0xd2fa9b (214 reads) read from positions p60(it3 s12)x8 p101(it6 s5)x7 p41(it2 s9)x6 p105(it6 s9)x6 p7(it0 s7)x5 p25(it1 s9)x5 p32(it2 s0)x5 p44(it2 s12)x5 p53(it3 s5)x5 p56(it3 s8)x5 p104(it6 s8)x5 p5(it0 s5)x4
[2026-10-08T00:08:16Z] attribution: item 0xabf4ac (214 reads) read from positions p121(it7 s9)x7 p41(it2 s9)x7 p40(it2 s8)x6 p89(it5 s9)x6 p105(it6 s9)x6 p23(it1 s7)x5 p37(it2 s5)x5 p39(it2 s7)x5 p57(it3 s9)x5 p60(it3 s12)x5 p69(it4 s5)x5 p72(it4 s8)x5
[2026-10-08T00:08:16Z] attribution: item 0xfa23a8 (212 reads) read from positions p21(it1 s5)x6 p25(it1 s9)x6 p37(it2 s5)x6 p66(it4 s2)x6 p69(it4 s5)x6 p121(it7 s9)x6 p40(it2 s8)x5 p125(it7 s13)x4 p18(it1 s2)x4 p23(it1 s7)x4 p34(it2 s2)x4 p44(it2 s12)x4
[2026-10-08T00:08:16Z] hottest item p228763-attack-f8 (0xe2cc96): 1218380 reads (0.0567% of all); predicted source none
[2026-10-08T00:08:16Z] program p228763-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set FLAGGED; verdict FLAGGED
[2026-10-08T00:08:16Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "638990", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-08T00:08:16Z] census warps: programs [638990] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-08T00:08:17Z] day 20730: cache filled in 0.64 s, fnv 448274a57f508cbc
[2026-10-08T00:08:18Z] table: 16777216 items derived with their 8 lines in 1.4 s; library comparison sample (0 mismatches)
[2026-10-08T00:08:23Z] program p638990-attack-f8: epoch seed 51c9c4d35ebde26d4ba59588028307076da74a8e404d200f5bbbf41c45ac7013 era seed 19169712cc8ba69309b601b25a6b399d3e0a685a419bb3e449163df8ffd8413a id 682d8a67caf20d92 attempt 2 class mx8-eraf96c64aa+sh256x27 op mix load=16 add=7 mad=7 xor=6 mul=5 sub=5 mulhi=4 rotr=4 shfl=4 or=3 rotl=3; era stride mul 0x65727dc9 rot 3 interleave [3, 7, 10, 11] windows 12:0:0 13:2:0 15:2:2 19:2:2 22:0:0 24:1:0 26:0:0 27:1:0 34:1:1 40:0:0 41:0:0 45:2:3 47:0:0 49:0:0 58:1:1 59:0:0
[2026-10-08T00:08:23Z] load site instr 12: src r7 win 0 off 0; last base writer rotl at 1; writers back to the last injecting one: rotl@1 mulhi@39 mul@29 add@18; shadow writes of r7 per rep: add=3 mad=2 mul=2 mulhi=1 or=5 rotl=4 rotr=3 shfl=3 xor=1
[2026-10-08T00:08:23Z] load site instr 13: src r5 win 2 off 0; last base writer load at 12; writers back to the last injecting one: load@12; shadow writes of r5 per rep: add=7 mad=1 mul=5 mulhi=5 or=1 rotr=2 shfl=2 sub=5 xor=4
[2026-10-08T00:08:23Z] load site instr 15: src r0 win 2 off 2; last base writer mad at 14; writers back to the last injecting one: mad@14; shadow writes of r0 per rep: add=5 mad=4 mul=3 mulhi=6 or=3 rotl=3 rotr=2 shfl=4 sub=3 xor=4
[2026-10-08T00:08:23Z] load site instr 19: src r6 win 2 off 2; last base writer sub at 17; writers back to the last injecting one: sub@17; shadow writes of r6 per rep: add=4 mad=3 mul=1 mulhi=3 rotl=2 shfl=5 sub=2 xor=4
[2026-10-08T00:08:23Z] load site instr 22: src r4 win 0 off 0; last base writer load at 19; writers back to the last injecting one: load@19; shadow writes of r4 per rep: add=3 mad=2 mul=5 mulhi=2 or=1 rotl=2 rotr=3 xor=6
[2026-10-08T00:08:23Z] load site instr 24: src r0 win 1 off 0; last base writer sub at 23; writers back to the last injecting one: sub@23; shadow writes of r0 per rep: add=5 mad=4 mul=3 mulhi=6 or=3 rotl=3 rotr=2 shfl=4 sub=3 xor=4
[2026-10-08T00:08:23Z] load site instr 26: src r1 win 0 off 0; last base writer mad at 25; writers back to the last injecting one: mad@25; shadow writes of r1 per rep: add=5 mad=7 mul=4 mulhi=3 or=5 rotl=2 rotr=2 shfl=3 sub=4 xor=8
[2026-10-08T00:08:23Z] load site instr 27: src r3 win 1 off 0; last base writer load at 24; writers back to the last injecting one: load@24; shadow writes of r3 per rep: add=6 mad=3 mul=3 or=1 rotl=7 rotr=2 shfl=6 sub=6 xor=4
[2026-10-08T00:08:23Z] load site instr 34: src r1 win 1 off 1; last base writer xor at 31; writers back to the last injecting one: xor@31; shadow writes of r1 per rep: add=5 mad=7 mul=4 mulhi=3 or=5 rotl=2 rotr=2 shfl=3 sub=4 xor=8
[2026-10-08T00:08:23Z] load site instr 40: src r2 win 0 off 0; last base writer load at 34; writers back to the last injecting one: load@34; shadow writes of r2 per rep: add=6 mad=5 mul=5 mulhi=3 rotl=5 rotr=2 shfl=1 sub=4 xor=3
[2026-10-08T00:08:23Z] load site instr 41: src r1 win 0 off 0; last base writer sub at 35; writers back to the last injecting one: sub@35; shadow writes of r1 per rep: add=5 mad=7 mul=4 mulhi=3 or=5 rotl=2 rotr=2 shfl=3 sub=4 xor=8
[2026-10-08T00:08:23Z] load site instr 45: src r5 win 2 off 3; last base writer load at 41; writers back to the last injecting one: load@41; shadow writes of r5 per rep: add=7 mad=1 mul=5 mulhi=5 or=1 rotr=2 shfl=2 sub=5 xor=4
[2026-10-08T00:08:23Z] load site instr 47: src r0 win 0 off 0; last base writer rotr at 42; writers back to the last injecting one: rotr@42 load@40; shadow writes of r0 per rep: add=5 mad=4 mul=3 mulhi=6 or=3 rotl=3 rotr=2 shfl=4 sub=3 xor=4
[2026-10-08T00:08:23Z] load site instr 49: src r6 win 0 off 0; last base writer load at 47; writers back to the last injecting one: load@47; shadow writes of r6 per rep: add=4 mad=3 mul=1 mulhi=3 rotl=2 shfl=5 sub=2 xor=4
[2026-10-08T00:08:23Z] load site instr 58: src r4 win 1 off 1; last base writer xor at 38; writers back to the last injecting one: xor@38; shadow writes of r4 per rep: add=3 mad=2 mul=5 mulhi=2 or=1 rotl=2 rotr=3 xor=6
[2026-10-08T00:08:23Z] load site instr 59: src r0 win 0 off 0; last base writer shfl at 52; writers back to the last injecting one: shfl@52; shadow writes of r0 per rep: add=5 mad=4 mul=3 mulhi=6 or=3 rotl=3 rotr=2 shfl=4 sub=3 xor=4
[2026-10-08T00:08:23Z] window layer: site item windows (first, items) (0x0,2^24) (0x0,2^22) (0x800000,2^22) (0x800000,2^22) (0x0,2^24) (0x0,2^23) (0x0,2^24) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x0,2^24) (0x800000,2^23) (0x0,2^24); expected reads per item by quarter 128.000 96.000 160.000 128.000 (flat uniform 128.000)
[2026-10-08T00:09:03Z] 524288 warps (16777216 nonces) interpreted in 40.9 s (2.497 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-08T00:09:03Z] p638990-attack-f8 distinct lines per hash: n 16777216 min 1000 p1 1022 median 1024 p99 1024 max 1024 mean 1023.8499
[2026-10-08T00:09:03Z] p638990-attack-f8 distinct items per hash: n 16777216 min 125 p1 128 median 128 p99 128 max 128 mean 127.9968
[2026-10-08T00:09:03Z] p638990-attack-f8 distinct lines per warp: n 524288 min 32540 p1 32588 median 32629 p99 32661 max 32684 mean 32628.3739
[2026-10-08T00:09:03Z] p638990-attack-f8 distinct items per warp: n 524288 min 4085 p1 4091 median 4095 p99 4096 max 4096 mean 4094.4946
[2026-10-08T00:09:03Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-08T00:09:03Z] positions: largest hi16-bucket (256 items) share 0.5310% at p98 (iteration 6, site 2, instr 15); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p34 (site 2, instr 15)
[2026-10-08T00:09:03Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 12 of 2048 at p98 (site 2, instr 15); saturated sources at one position 0 of 2048 at p0 (site 0, instr 12); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-08T00:09:04Z] p638990-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 581502 (bin 10910018) z_max +51386.69 min 51 z_min -6.81 chi2/dof 321.07905 chi2_z +927047.92 top0.1% 0.23389% top0.5% 0.83904% top1% 1.57079%
[2026-10-08T00:09:04Z] p638990-attack-f8 item histogram against the window density: full 2^24 chi2/dof 253.86325 largest 581502 (item 0xa67942) at +45959.12 sigma smallest at -5.06; buckets64 chi2/dof 253.92911 largest 591702 (bucket 170469) at +5746.08 sigma smallest at -4.66
[2026-10-08T00:09:06Z] p638990-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 227 (bin 11461572) z_max +8.75 min 49 z_min -6.98 chi2/dof 4.99914 chi2_z +11582.75 top0.1% 0.15526% top0.5% 0.74787% top1% 1.46776%
[2026-10-08T00:09:06Z] p638990-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99996 largest +5.92 sigma; buckets64 chi2/dof 0.99834 largest +5.31 smallest -4.54
[2026-10-08T00:09:06Z] 6-sigma p638990-attack-f8 items buckets64 against the window density: largest bucket +5746.08 sigma, smallest -4.66 -> FLAGGED (beyond 6 sigma)
[2026-10-08T00:09:06Z] hot-set p638990-attack-f8 items (windowed control): f 0.1% S_f 0.23389% E_f(control) 0.15526% X_f +0.07863% X_f/f +0.7863 -> no hot set
[2026-10-08T00:09:06Z] hot-set p638990-attack-f8 items (windowed control): f 0.5% S_f 0.83904% E_f(control) 0.74787% X_f +0.09117% X_f/f +0.1823 -> no hot set
[2026-10-08T00:09:06Z] hot-set p638990-attack-f8 items (windowed control): f 1.0% S_f 1.57079% E_f(control) 1.46776% X_f +0.10303% X_f/f +0.1030 -> no hot set
[2026-10-08T00:09:06Z] hot-set p638990-attack-f8 items (windowed control): verdict clear
[2026-10-08T00:09:08Z] p638990-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 195 (bin 12721878) z_max +5.92 min 71 z_min -5.04 chi2/dof 1.00020 chi2_z +0.59 top0.1% 0.13110% top0.5% 0.63257% top1% 1.24346%
[2026-10-08T00:09:08Z] hot-set p638990-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.23389% E_f(control) 0.13110% X_f +0.10279% X_f/f +1.0279 -> HOT SET
[2026-10-08T00:09:08Z] hot-set p638990-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.83904% E_f(control) 0.63257% X_f +0.20647% X_f/f +0.4129 -> no hot set
[2026-10-08T00:09:08Z] hot-set p638990-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.57079% E_f(control) 1.24346% X_f +0.32733% X_f/f +0.3273 -> no hot set
[2026-10-08T00:09:08Z] hot-set p638990-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-08T00:09:08Z] ratio p638990-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.5064x / 1.1219x / 1.0702x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 1.7841x / 1.3264x / 1.2632x
[2026-10-08T00:09:09Z] attribution: hot threshold count >= 200 marks 17093 items (0.1019% of items) holding 5085908 reads (0.2368% of reads); top 8 items t=0xa67942:581502 t=0xb2c6da:364710 t=0xbbddbe:360753 t=0x882b4e:278963 t=0x86c15a:271 t=0x86c15d:270 t=0x86c158:265 t=0x86c15f:262
[2026-10-08T00:09:28Z] attribution: reads on hot items per position (flat expectation 0.1019% of each position's 16777216 reads); the 24 largest: p82(it5 s2)=2.022% p18(it1 s2)=2.019% p50(it3 s2)=2.018% p114(it7 s2)=2.017% p98(it6 s2)=2.016% p66(it4 s2)=2.016% p34(it2 s2)=2.013% p2(it0 s2)=0.603% p67(it4 s3)=0.489% p83(it5 s3)=0.489% p99(it6 s3)=0.488% p115(it7 s3)=0.488% p51(it3 s3)=0.486% p35(it2 s3)=0.485% p3(it0 s3)=0.485% p19(it1 s3)=0.485% p72(it4 s8)=0.247% p88(it5 s8)=0.245% p8(it0 s8)=0.245% p104(it6 s8)=0.244% p14(it0 s14)=0.244% p126(it7 s14)=0.244% p40(it2 s8)=0.244% p24(it1 s8)=0.244%
[2026-10-08T00:09:28Z] attribution: hot reads by iteration it0=0.159% it1=0.248% it2=0.247% it3=0.248% it4=0.248% it5=0.248% it6=0.248% it7=0.248% ; by site s0=0.122% s1=0.000% s2=1.840% s3=0.487% s4=0.122% s5=0.000% s6=0.121% s7=0.000% s8=0.244% s9=0.122% s10=0.122% s11=0.000% s12=0.122% s13=0.122% s14=0.243% s15=0.122%
[2026-10-08T00:09:28Z] site 0 (instr 12, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1223% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] site 1 (instr 13, src r5, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1019%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:09:28Z] site 2 (instr 15, src r0, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 1.8404% (flat expectation 0.1019%); index entropy 13.948 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.4393% (window expectation 0.0061%)
[2026-10-08T00:09:28Z] site 3 (instr 19, src r6, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.4869% (flat expectation 0.1019%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:09:28Z] site 4 (instr 22, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1223% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] site 5 (instr 24, src r0, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-08T00:09:28Z] site 6 (instr 26, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1214% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] site 7 (instr 27, src r3, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:09:28Z] site 8 (instr 34, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2442% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:09:28Z] site 9 (instr 40, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1217% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] site 10 (instr 41, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1219% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] site 11 (instr 45, src r5, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1019%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:09:28Z] site 12 (instr 47, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1217% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] site 13 (instr 49, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1218% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] site 14 (instr 58, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.2431% (flat expectation 0.1019%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-08T00:09:28Z] site 15 (instr 59, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1215% (flat expectation 0.1019%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:09:28Z] attribution: item 0xa67942 (581502 reads) read from positions p98(it6 s2)x88048 p50(it3 s2)x87516 p34(it2 s2)x87255 p66(it4 s2)x87247 p114(it7 s2)x87221 p82(it5 s2)x87148 p18(it1 s2)x56916 p19(it1 s3)x5 p35(it2 s3)x5 p64(it4 s0)x5 p2(it0 s2)x4 p115(it7 s3)x4
[2026-10-08T00:09:28Z] attribution: item 0xb2c6da (364710 reads) read from positions p18(it1 s2)x56700 p50(it3 s2)x51684 p82(it5 s2)x51642 p34(it2 s2)x51332 p114(it7 s2)x51237 p98(it6 s2)x51082 p66(it4 s2)x50891 p115(it7 s3)x8 p88(it5 s8)x6 p3(it0 s3)x5 p51(it3 s3)x5 p56(it3 s8)x5
[2026-10-08T00:09:28Z] attribution: item 0xbbddbe (360753 reads) read from positions p18(it1 s2)x56564 p82(it5 s2)x51090 p34(it2 s2)x50869 p66(it4 s2)x50838 p50(it3 s2)x50662 p98(it6 s2)x50629 p114(it7 s2)x49962 p19(it1 s3)x7 p2(it0 s2)x6 p72(it4 s8)x5 p115(it7 s3)x5 p3(it0 s3)x4
[2026-10-08T00:09:28Z] attribution: item 0x882b4e (278963 reads) read from positions p18(it1 s2)x56772 p114(it7 s2)x37308 p82(it5 s2)x37223 p66(it4 s2)x37158 p34(it2 s2)x37027 p98(it6 s2)x36694 p50(it3 s2)x36647 p51(it3 s3)x7 p94(it5 s14)x6 p126(it7 s14)x5 p8(it0 s8)x5 p118(it7 s6)x5
[2026-10-08T00:09:28Z] attribution: item 0x86c15a (271 reads) read from positions p66(it4 s2)x27 p82(it5 s2)x22 p50(it3 s2)x21 p98(it6 s2)x16 p18(it1 s2)x15 p34(it2 s2)x15 p114(it7 s2)x13 p2(it0 s2)x6 p51(it3 s3)x6 p3(it0 s3)x5 p19(it1 s3)x5 p67(it4 s3)x5
[2026-10-08T00:09:28Z] attribution: item 0x86c15d (270 reads) read from positions p34(it2 s2)x31 p18(it1 s2)x24 p114(it7 s2)x20 p66(it4 s2)x17 p50(it3 s2)x16 p98(it6 s2)x16 p82(it5 s2)x15 p115(it7 s3)x7 p2(it0 s2)x5 p3(it0 s3)x4 p6(it0 s6)x4 p29(it1 s13)x4
[2026-10-08T00:09:28Z] attribution: item 0x86c158 (265 reads) read from positions p34(it2 s2)x26 p82(it5 s2)x20 p66(it4 s2)x18 p98(it6 s2)x17 p50(it3 s2)x15 p114(it7 s2)x15 p18(it1 s2)x10 p35(it2 s3)x7 p2(it0 s2)x6 p40(it2 s8)x5 p67(it4 s3)x5 p19(it1 s3)x4
[2026-10-08T00:09:28Z] attribution: item 0x86c15f (262 reads) read from positions p66(it4 s2)x22 p18(it1 s2)x20 p82(it5 s2)x19 p98(it6 s2)x19 p34(it2 s2)x17 p114(it7 s2)x14 p50(it3 s2)x11 p83(it5 s3)x10 p35(it2 s3)x8 p99(it6 s3)x7 p3(it0 s3)x5 p51(it3 s3)x5
[2026-10-08T00:09:28Z] hottest item p638990-attack-f8 (0xa67942): 581502 reads (0.0271% of all); predicted source none
[2026-10-08T00:09:28Z] program p638990-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set clear; verdict FLAGGED
[2026-10-08T00:09:28Z] attack-f8 0.1.0 (igneum-pow 4); args ["warps", "--program", "623492", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1"]
[2026-10-08T00:09:28Z] census warps: programs [623492] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-08T00:09:29Z] day 20730: cache filled in 0.63 s, fnv 448274a57f508cbc
[2026-10-08T00:09:31Z] table: 16777216 items derived with their 8 lines in 1.8 s; library comparison sample (0 mismatches)
[2026-10-08T00:09:35Z] program p623492-attack-f8: epoch seed 31fb2102508e456c55499a8852e141a26e0cab5682e59b59c5856e165dd9922e era seed 1c0e7565aa716d455f8279d6f97dbffe3f59708f5c5988ec1d379062d023a804 id 283fa56f84e945f7 attempt 3 class mx8-eraf96329ec+sh256x27 op mix load=16 xor=10 add=6 mad=6 mul=5 shfl=5 mulhi=4 rotl=4 or=3 rotr=3 sub=2; era stride mul 0x3503f2a7 rot 16 interleave [3, 8, 9, 13] windows 2:0:0 3:2:3 5:0:0 7:2:1 8:2:1 17:0:0 18:0:0 20:2:3 27:0:0 28:1:1 30:2:2 41:1:0 42:1:1 48:0:0 53:2:1 56:0:0
[2026-10-08T00:09:35Z] load site instr 2: src r4 win 0 off 0; last base writer xor at 1; writers back to the last injecting one: xor@1; shadow writes of r4 per rep: add=7 mad=3 mul=4 mulhi=2 or=3 rotl=4 rotr=5 shfl=2 sub=6 xor=3
[2026-10-08T00:09:35Z] load site instr 3: src r7 win 2 off 3; last base writer shfl at 0; writers back to the last injecting one: shfl@0; shadow writes of r7 per rep: add=3 mad=2 mul=5 mulhi=1 or=1 rotl=3 rotr=2 shfl=3 sub=4 xor=7
[2026-10-08T00:09:35Z] load site instr 5: src r3 win 0 off 0; last base writer rotl at 4; writers back to the last injecting one: rotl@4 xor@58; shadow writes of r3 per rep: add=5 mad=1 mul=2 or=3 rotl=3 rotr=4 shfl=2 sub=2 xor=6
[2026-10-08T00:09:35Z] load site instr 7: src r5 win 2 off 1; last base writer rotl at 6; writers back to the last injecting one: rotl@6 sub@60; shadow writes of r5 per rep: add=5 mad=6 mul=5 rotl=3 rotr=1 shfl=3 sub=2 xor=5
[2026-10-08T00:09:35Z] load site instr 8: src r2 win 2 off 1; last base writer load at 3; writers back to the last injecting one: load@3; shadow writes of r2 per rep: add=5 mad=1 mul=2 mulhi=4 or=2 rotr=2 shfl=5 sub=5 xor=4
[2026-10-08T00:09:35Z] load site instr 17: src r0 win 0 off 0; last base writer add at 15; writers back to the last injecting one: add@15; shadow writes of r0 per rep: add=3 mad=1 mul=4 mulhi=1 rotl=8 rotr=2 shfl=11 sub=5 xor=5
[2026-10-08T00:09:35Z] load site instr 18: src r6 win 0 off 0; last base writer shfl at 11; writers back to the last injecting one: shfl@11; shadow writes of r6 per rep: add=5 mad=2 mul=2 mulhi=3 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=2
[2026-10-08T00:09:35Z] load site instr 20: src r1 win 2 off 3; last base writer shfl at 16; writers back to the last injecting one: shfl@16; shadow writes of r1 per rep: add=5 mad=4 mul=4 mulhi=3 or=2 rotl=7 rotr=2 shfl=3 sub=2 xor=3
[2026-10-08T00:09:35Z] load site instr 27: src r4 win 0 off 0; last base writer xor at 21; writers back to the last injecting one: xor@21; shadow writes of r4 per rep: add=7 mad=3 mul=4 mulhi=2 or=3 rotl=4 rotr=5 shfl=2 sub=6 xor=3
[2026-10-08T00:09:35Z] load site instr 28: src r1 win 1 off 1; last base writer add at 26; writers back to the last injecting one: add@26; shadow writes of r1 per rep: add=5 mad=4 mul=4 mulhi=3 or=2 rotl=7 rotr=2 shfl=3 sub=2 xor=3
[2026-10-08T00:09:35Z] load site instr 30: src r6 win 2 off 2; last base writer xor at 24; writers back to the last injecting one: xor@24; shadow writes of r6 per rep: add=5 mad=2 mul=2 mulhi=3 or=1 rotl=2 rotr=1 shfl=3 sub=2 xor=2
[2026-10-08T00:09:35Z] load site instr 41: src r5 win 1 off 0; last base writer load at 30; writers back to the last injecting one: load@30; shadow writes of r5 per rep: add=5 mad=6 mul=5 rotl=3 rotr=1 shfl=3 sub=2 xor=5
[2026-10-08T00:09:35Z] load site instr 42: src r2 win 1 off 1; last base writer load at 28; writers back to the last injecting one: load@28; shadow writes of r2 per rep: add=5 mad=1 mul=2 mulhi=4 or=2 rotr=2 shfl=5 sub=5 xor=4
[2026-10-08T00:09:35Z] load site instr 48: src r1 win 0 off 0; last base writer mad at 47; writers back to the last injecting one: mad@47; shadow writes of r1 per rep: add=5 mad=4 mul=4 mulhi=3 or=2 rotl=7 rotr=2 shfl=3 sub=2 xor=3
[2026-10-08T00:09:35Z] load site instr 53: src r3 win 2 off 1; last base writer xor at 52; writers back to the last injecting one: xor@52; shadow writes of r3 per rep: add=5 mad=1 mul=2 or=3 rotl=3 rotr=4 shfl=2 sub=2 xor=6
[2026-10-08T00:09:35Z] load site instr 56: src r5 win 0 off 0; last base writer load at 53; writers back to the last injecting one: load@53; shadow writes of r5 per rep: add=5 mad=6 mul=5 rotl=3 rotr=1 shfl=3 sub=2 xor=5
[2026-10-08T00:09:35Z] window layer: site item windows (first, items) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x400000,2^22) (0x400000,2^22) (0x0,2^24) (0x0,2^24) (0xc00000,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^22) (0x0,2^23) (0x800000,2^23) (0x0,2^24) (0x400000,2^22) (0x0,2^24); expected reads per item by quarter 72.000 168.000 120.000 152.000 (flat uniform 128.000)
[2026-10-08T00:10:16Z] 524288 warps (16777216 nonces) interpreted in 41.0 s (2.502 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-08T00:10:16Z] p623492-attack-f8 distinct lines per hash: n 16777216 min 1013 p1 1023 median 1024 p99 1024 max 1024 mean 1023.8710
[2026-10-08T00:10:16Z] p623492-attack-f8 distinct items per hash: n 16777216 min 127 p1 128 median 128 p99 128 max 128 mean 127.9995
[2026-10-08T00:10:16Z] p623492-attack-f8 distinct lines per warp: n 524288 min 32526 p1 32576 median 32620 p99 32655 max 32682 mean 32618.8861
[2026-10-08T00:10:16Z] p623492-attack-f8 distinct items per warp: n 524288 min 4083 p1 4089 median 4093 p99 4096 max 4096 mean 4093.2963
[2026-10-08T00:10:16Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-08T00:10:16Z] positions: largest hi16-bucket (256 items) share 0.0070% at p113 (iteration 7, site 1, instr 3); windowed expectation 0.0061%; largest saturated-source share 0.0000% at p26 (site 10, instr 30)
[2026-10-08T00:10:16Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p14 (site 14, instr 53); saturated sources at one position 0 of 2048 at p0 (site 0, instr 2); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-08T00:10:17Z] p623492-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 238 (bin 5102619) z_max +9.72 min 27 z_min -8.93 chi2/dof 11.50035 chi2_z +30412.26 top0.1% 0.16233% top0.5% 0.78243% top1% 1.53649%
[2026-10-08T00:10:17Z] p623492-attack-f8 item histogram against the window density: full 2^24 chi2/dof 1.00332 largest 125 (item 0x22085a) at +6.25 sigma smallest at -5.30; buckets64 chi2/dof 1.00464 largest 4919 (bucket 8415) at +4.58 sigma smallest at -4.48
[2026-10-08T00:10:19Z] p623492-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 237 (bin 4754134) z_max +9.63 min 32 z_min -8.49 chi2/dof 11.50160 chi2_z +30415.89 top0.1% 0.16230% top0.5% 0.78223% top1% 1.53613%
[2026-10-08T00:10:19Z] p623492-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99985 largest +6.01 sigma; buckets64 chi2/dof 0.99515 largest +4.35 smallest -4.40
[2026-10-08T00:10:19Z] 6-sigma p623492-attack-f8 items buckets64 against the window density: largest bucket +4.58 sigma, smallest -4.48 -> within 6 sigma
[2026-10-08T00:10:19Z] hot-set p623492-attack-f8 items (windowed control): f 0.1% S_f 0.16233% E_f(control) 0.16230% X_f +0.00003% X_f/f +0.0003 -> no hot set
[2026-10-08T00:10:19Z] hot-set p623492-attack-f8 items (windowed control): f 0.5% S_f 0.78243% E_f(control) 0.78223% X_f +0.00019% X_f/f +0.0004 -> no hot set
[2026-10-08T00:10:19Z] hot-set p623492-attack-f8 items (windowed control): f 1.0% S_f 1.53649% E_f(control) 1.53613% X_f +0.00036% X_f/f +0.0004 -> no hot set
[2026-10-08T00:10:19Z] hot-set p623492-attack-f8 items (windowed control): verdict clear
[2026-10-08T00:10:21Z] p623492-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 197 (bin 14323075) z_max +6.10 min 72 z_min -4.95 chi2/dof 1.00012 chi2_z +0.33 top0.1% 0.13109% top0.5% 0.63255% top1% 1.24348%
[2026-10-08T00:10:21Z] hot-set p623492-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.16233% E_f(control) 0.13109% X_f +0.03124% X_f/f +0.3124 -> no hot set
[2026-10-08T00:10:21Z] hot-set p623492-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.78243% E_f(control) 0.63255% X_f +0.14987% X_f/f +0.2997 -> no hot set
[2026-10-08T00:10:21Z] hot-set p623492-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.53649% E_f(control) 1.24348% X_f +0.29301% X_f/f +0.2930 -> no hot set
[2026-10-08T00:10:21Z] hot-set p623492-attack-f8 items (flat control, the auditor's first view): verdict clear
[2026-10-08T00:10:21Z] ratio p623492-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 1.0002x / 1.0002x / 1.0002x (gate 1.2x at 0.1%: within); over the FLAT control 1.2383x / 1.2369x / 1.2356x
[2026-10-08T00:10:22Z] attribution: hot threshold count >= 203 marks 20607 items (0.1228% of items) holding 4263486 reads (0.1985% of reads); top 8 items t=0x4ddc1b:238 t=0x5f1776:237 t=0x7c2da0:235 t=0x66006d:235 t=0x434326:235 t=0x4e065c:234 t=0x443ca8:234 t=0x6ed496:233
[2026-10-08T00:10:41Z] attribution: reads on hot items per position (flat expectation 0.1228% of each position's 16777216 reads); the 24 largest: p52(it3 s4)=0.604% p35(it2 s3)=0.602% p78(it4 s14)=0.601% p36(it2 s4)=0.601% p94(it5 s14)=0.601% p84(it5 s4)=0.601% p68(it4 s4)=0.600% p99(it6 s3)=0.600% p19(it1 s3)=0.600% p51(it3 s3)=0.599% p110(it6 s14)=0.599% p3(it0 s3)=0.599% p116(it7 s4)=0.599% p4(it0 s4)=0.599% p46(it2 s14)=0.599% p30(it1 s14)=0.599% p62(it3 s14)=0.599% p100(it6 s4)=0.598% p83(it5 s3)=0.598% p115(it7 s3)=0.598% p14(it0 s14)=0.598% p20(it1 s4)=0.597% p67(it4 s3)=0.597% p126(it7 s14)=0.596%
[2026-10-08T00:10:41Z] attribution: hot reads by iteration it0=0.198% it1=0.199% it2=0.199% it3=0.199% it4=0.198% it5=0.199% it6=0.199% it7=0.198% ; by site s0=0.152% s1=0.006% s2=0.152% s3=0.599% s4=0.600% s5=0.151% s6=0.151% s7=0.006% s8=0.151% s9=0.003% s10=0.000% s11=0.299% s12=0.003% s13=0.151% s14=0.599% s15=0.151%
[2026-10-08T00:10:41Z] site 0 (instr 2, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1524% (flat expectation 0.1228%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:10:41Z] site 1 (instr 3, src r7, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0065% (flat expectation 0.1228%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:10:41Z] site 2 (instr 5, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1522% (flat expectation 0.1228%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:10:41Z] site 3 (instr 7, src r5, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.5992% (flat expectation 0.1228%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:10:41Z] site 4 (instr 8, src r2, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.5998% (flat expectation 0.1228%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:10:41Z] site 5 (instr 17, src r0, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1509% (flat expectation 0.1228%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:10:41Z] site 6 (instr 18, src r6, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1510% (flat expectation 0.1228%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:10:41Z] site 7 (instr 20, src r1, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0065% (flat expectation 0.1228%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:10:41Z] site 8 (instr 27, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1515% (flat expectation 0.1228%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:10:41Z] site 9 (instr 28, src r1, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0032% (flat expectation 0.1228%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-08T00:10:41Z] site 10 (instr 30, src r6, k_off 2 offset 2, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1228%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:10:41Z] site 11 (instr 41, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2987% (flat expectation 0.1228%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-08T00:10:41Z] site 12 (instr 42, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0032% (flat expectation 0.1228%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-08T00:10:41Z] site 13 (instr 48, src r1, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1513% (flat expectation 0.1228%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:10:41Z] site 14 (instr 53, src r3, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.5990% (flat expectation 0.1228%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-08T00:10:41Z] site 15 (instr 56, src r5, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1510% (flat expectation 0.1228%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-08T00:10:41Z] attribution: item 0x4ddc1b (238 reads) read from positions p19(it1 s3)x12 p52(it3 s4)x10 p30(it1 s14)x9 p126(it7 s14)x9 p14(it0 s14)x8 p84(it5 s4)x8 p51(it3 s3)x7 p94(it5 s14)x7 p4(it0 s4)x6 p20(it1 s4)x6 p35(it2 s3)x6 p62(it3 s14)x6
[2026-10-08T00:10:41Z] attribution: item 0x5f1776 (237 reads) read from positions p78(it4 s14)x9 p83(it5 s3)x9 p14(it0 s14)x8 p36(it2 s4)x8 p62(it3 s14)x8 p27(it1 s11)x7 p51(it3 s3)x7 p116(it7 s4)x6 p30(it1 s14)x6 p35(it2 s3)x6 p52(it3 s4)x6 p67(it4 s3)x6
[2026-10-08T00:10:41Z] attribution: item 0x7c2da0 (235 reads) read from positions p99(it6 s3)x11 p3(it0 s3)x8 p20(it1 s4)x8 p36(it2 s4)x8 p115(it7 s3)x8 p14(it0 s14)x7 p30(it1 s14)x7 p51(it3 s3)x7 p84(it5 s4)x7 p110(it6 s14)x7 p35(it2 s3)x6 p126(it7 s14)x6
[2026-10-08T00:10:41Z] attribution: item 0x66006d (235 reads) read from positions p14(it0 s14)x10 p30(it1 s14)x9 p94(it5 s14)x9 p115(it7 s3)x8 p36(it2 s4)x8 p46(it2 s14)x8 p68(it4 s4)x8 p62(it3 s14)x7 p52(it3 s4)x6 p4(it0 s4)x6 p20(it1 s4)x6 p91(it5 s11)x6
[2026-10-08T00:10:41Z] attribution: item 0x434326 (235 reads) read from positions p3(it0 s3)x10 p100(it6 s4)x9 p68(it4 s4)x9 p30(it1 s14)x8 p4(it0 s4)x7 p14(it0 s14)x7 p27(it1 s11)x7 p43(it2 s11)x7 p51(it3 s3)x6 p62(it3 s14)x6 p78(it4 s14)x6 p83(it5 s3)x6
[2026-10-08T00:10:41Z] attribution: item 0x4e065c (234 reads) read from positions p4(it0 s4)x9 p20(it1 s4)x9 p35(it2 s3)x8 p94(it5 s14)x8 p67(it4 s3)x7 p110(it6 s14)x7 p46(it2 s14)x6 p52(it3 s4)x6 p3(it0 s3)x6 p14(it0 s14)x5 p19(it1 s3)x5 p51(it3 s3)x5
[2026-10-08T00:10:41Z] attribution: item 0x443ca8 (234 reads) read from positions p67(it4 s3)x11 p83(it5 s3)x10 p115(it7 s3)x9 p78(it4 s14)x8 p100(it6 s4)x8 p126(it7 s14)x7 p51(it3 s3)x7 p59(it3 s11)x7 p3(it0 s3)x6 p4(it0 s4)x6 p19(it1 s3)x6 p52(it3 s4)x6
[2026-10-08T00:10:41Z] attribution: item 0x6ed496 (233 reads) read from positions p115(it7 s3)x10 p3(it0 s3)x9 p36(it2 s4)x9 p52(it3 s4)x9 p14(it0 s14)x8 p35(it2 s3)x8 p62(it3 s14)x8 p67(it4 s3)x8 p51(it3 s3)x6 p68(it4 s4)x6 p84(it5 s4)x6 p99(it6 s3)x6
[2026-10-08T00:10:41Z] hottest item p623492-attack-f8 (0x4ddc1b): 238 reads (0.0000% of all); predicted source none
[2026-10-08T00:10:41Z] program p623492-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) clear; hot-set clear; verdict PASS (no test fired)
Terminated
lease: released 32 pool cores after 215 s, exit 0

View file

@ -0,0 +1,25 @@
ended sweep-s02c for the 122960 read: 9406 rows kept, frontier 221536
yielded sweep-s00c (pgid 2678066): 13176 rows kept, frontier 29496
yielded sweep-s06b (pgid 2815857): 5914 rows kept, frontier 609791
yielded sweep-s04 (pgid 2815951): 601 rows kept, frontier 400603
yielded sweep-s08 (pgid 2816061): 0 rows kept, frontier 1
sweep-s00d: 9617 rows kept as part1, frontier 39114
box 2 22:11:45Z: ended sweep-s00e (pgid 3367669) for the deep-4 chain: 1115 rows kept, frontier 40234
box 2 22:12:48Z: ended sweep-s02d (pgid 3390871): 343 rows kept, frontier 221880
box 2 22:20:43Z: ended sweep-s00f (pgid 3400110) for gap-deep4: 582 rows kept, frontier 40822
box 2 22:21:56Z: sweep-s08 346 rows kept, frontier 800349
yielded sweep-s08 (pgid 3463838): 2894 rows kept, frontier 803254
yielded sweep-s06c (pgid 3463887): 2055 rows kept, frontier 611854
yielded sweep-s02e (pgid 3464107): 1641 rows kept, frontier 223522
yielded sweep-s04b (pgid 3463976): 0 rows kept, frontier 400603
yielded sweep-s00g (pgid 3464298): 0 rows kept, frontier 40822
yielded sweep-s08 (pgid 3485795): 46044 rows kept, frontier 849304
yielded sweep-s06c (pgid 3485843): 40679 rows kept, frontier 652538
box 2 00:52:21Z: ended sweep-s09b (pgid 3700581) for adv-accept-3 Q4d: 8251 rows kept, frontier 920229 3 2132e6e5ff80c38b NaN 0.99983 11 3 2 9 3 8 0
box 2 00:52:54Z: re-queued sweep-s09b as sweep-s09c from 920230 (79772 seeds) behind Q4d, pid 3831862 pgid 3831862
box 2 02:25:54Z: re-queued the gave-up shards as s01e (from 150610), s03b (from 300002), s07c (from 706081) after the pool 2 h give-up
box 2 03:56:19Z: withdrew waiter sweep-s01e (pgid 230963, 0 rows) to re-submit on build-1 (coordinator, no-gaps rule)
box 2 03:56:21Z: withdrew waiter sweep-s07c (pgid 231107, 0 rows) to re-submit on build-1 (coordinator, no-gaps rule)
box 2 03:58:05Z: re-queued sweep-s01f (from 151222, 48780 seeds) and sweep-s07c (from 706081, 93921) behind the holders after the build-1 reversal
box 2 03:58:50Z: withdrew waiters s01f/s07c and ended sweep-s05b (pgid 3700668) for the attack-pass F1 flush waiter (16 cores, waited 46 min): 46460 rows kept, frontier 548586 (shard end 600002)
box 2 03:58:58Z: re-queued s05c (from 548586, 51416 seeds), s01f, s07c, s08d (from 849304, 50698), s00h (from 40822, 59180) after the gave-ups and the yield

View file

@ -0,0 +1,8 @@
adv-accept sweep: seeds 2..100002 (100000), 96 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 100000 seeds in 434 s (1.15 seeds/s, 83.4 s per seed per thread)
progress: 1000 of 100000 seeds in 475 s (2.11 seeds/s, 45.6 s per seed per thread)
progress: 1500 of 100000 seeds in 513 s (2.92 seeds/s, 32.8 s per seed per thread)
progress: 2000 of 100000 seeds in 552 s (3.62 seeds/s, 26.5 s per seed per thread)
progress: 2500 of 100000 seeds in 594 s (4.21 seeds/s, 22.8 s per seed per thread)
progress: 3000 of 100000 seeds in 659 s (4.55 seeds/s, 21.1 s per seed per thread)
progress: 3500 of 100000 seeds in 713 s (4.91 seeds/s, 19.6 s per seed per thread)

View file

@ -0,0 +1,16 @@
adv-accept sweep: seeds 3847..100000 (96153), 88 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 96153 seeds in 56 s (8.87 seeds/s, 9.9 s per seed per thread)
progress: 1000 of 96153 seeds in 106 s (9.41 seeds/s, 9.3 s per seed per thread)
progress: 1500 of 96153 seeds in 156 s (9.64 seeds/s, 9.1 s per seed per thread)
progress: 2000 of 96153 seeds in 215 s (9.30 seeds/s, 9.5 s per seed per thread)
progress: 2500 of 96153 seeds in 276 s (9.04 seeds/s, 9.7 s per seed per thread)
progress: 3000 of 96153 seeds in 342 s (8.76 seeds/s, 10.0 s per seed per thread)
progress: 3500 of 96153 seeds in 408 s (8.59 seeds/s, 10.2 s per seed per thread)
progress: 4000 of 96153 seeds in 558 s (7.17 seeds/s, 12.3 s per seed per thread)
progress: 4500 of 96153 seeds in 824 s (5.46 seeds/s, 16.1 s per seed per thread)
progress: 5000 of 96153 seeds in 1102 s (4.54 seeds/s, 19.4 s per seed per thread)
progress: 5500 of 96153 seeds in 1375 s (4.00 seeds/s, 22.0 s per seed per thread)
progress: 6000 of 96153 seeds in 1612 s (3.72 seeds/s, 23.6 s per seed per thread)
progress: 6500 of 96153 seeds in 1849 s (3.52 seeds/s, 25.0 s per seed per thread)
progress: 7000 of 96153 seeds in 2060 s (3.40 seeds/s, 25.9 s per seed per thread)
progress: 7500 of 96153 seeds in 2288 s (3.28 seeds/s, 26.8 s per seed per thread)

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased), a higher class waits ahead; waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,2 @@
lease: 1 of 16 pool cores free (87 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
Terminated

View file

@ -0,0 +1,127 @@
lease: 1 of 16 pool cores free (88 leased); waiting
lease: holding 28 pool cores (28,29,30,31,32,33,37,38,39,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61, waited 5835 s, class adv): adv-accept sweep-s01f
adv-accept sweep: seeds 151222..200002 (48780), 28 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 48780 seeds in 75 s (6.69 seeds/s, 4.2 s per seed per thread)
progress: 1000 of 48780 seeds in 146 s (6.87 seeds/s, 4.1 s per seed per thread)
progress: 1500 of 48780 seeds in 215 s (6.97 seeds/s, 4.0 s per seed per thread)
progress: 2000 of 48780 seeds in 285 s (7.02 seeds/s, 4.0 s per seed per thread)
progress: 2500 of 48780 seeds in 355 s (7.03 seeds/s, 4.0 s per seed per thread)
progress: 3000 of 48780 seeds in 425 s (7.05 seeds/s, 4.0 s per seed per thread)
progress: 3500 of 48780 seeds in 495 s (7.07 seeds/s, 4.0 s per seed per thread)
progress: 4000 of 48780 seeds in 565 s (7.07 seeds/s, 4.0 s per seed per thread)
progress: 4500 of 48780 seeds in 635 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 5000 of 48780 seeds in 704 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 5500 of 48780 seeds in 774 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 6000 of 48780 seeds in 842 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 6500 of 48780 seeds in 912 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 7000 of 48780 seeds in 981 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 7500 of 48780 seeds in 1051 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 8000 of 48780 seeds in 1120 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 8500 of 48780 seeds in 1190 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 9000 of 48780 seeds in 1260 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 9500 of 48780 seeds in 1330 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 10000 of 48780 seeds in 1399 s (7.15 seeds/s, 3.9 s per seed per thread)
progress: 10500 of 48780 seeds in 1469 s (7.15 seeds/s, 3.9 s per seed per thread)
progress: 11000 of 48780 seeds in 1537 s (7.16 seeds/s, 3.9 s per seed per thread)
progress: 11500 of 48780 seeds in 1607 s (7.15 seeds/s, 3.9 s per seed per thread)
progress: 12000 of 48780 seeds in 1676 s (7.16 seeds/s, 3.9 s per seed per thread)
progress: 12500 of 48780 seeds in 1749 s (7.15 seeds/s, 3.9 s per seed per thread)
progress: 13000 of 48780 seeds in 1823 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 13500 of 48780 seeds in 1892 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 14000 of 48780 seeds in 1961 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 14500 of 48780 seeds in 2030 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 15000 of 48780 seeds in 2100 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 15500 of 48780 seeds in 2169 s (7.15 seeds/s, 3.9 s per seed per thread)
progress: 16000 of 48780 seeds in 2244 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 16500 of 48780 seeds in 2317 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 17000 of 48780 seeds in 2392 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 17500 of 48780 seeds in 2463 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 18000 of 48780 seeds in 2532 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 18500 of 48780 seeds in 2602 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 19000 of 48780 seeds in 2671 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 19500 of 48780 seeds in 2741 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 20000 of 48780 seeds in 2810 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 20500 of 48780 seeds in 2882 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 21000 of 48780 seeds in 2954 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 21500 of 48780 seeds in 3028 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 22000 of 48780 seeds in 3103 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 22500 of 48780 seeds in 3176 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 23000 of 48780 seeds in 3245 s (7.09 seeds/s, 4.0 s per seed per thread)
progress: 23500 of 48780 seeds in 3315 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 24000 of 48780 seeds in 3384 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 24500 of 48780 seeds in 3457 s (7.09 seeds/s, 4.0 s per seed per thread)
progress: 25000 of 48780 seeds in 3531 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 25500 of 48780 seeds in 3601 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 26000 of 48780 seeds in 3670 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 26500 of 48780 seeds in 3740 s (7.09 seeds/s, 4.0 s per seed per thread)
progress: 27000 of 48780 seeds in 3810 s (7.09 seeds/s, 4.0 s per seed per thread)
progress: 27500 of 48780 seeds in 3879 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 28000 of 48780 seeds in 3948 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 28500 of 48780 seeds in 4018 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 29000 of 48780 seeds in 4088 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 29500 of 48780 seeds in 4157 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 30000 of 48780 seeds in 4227 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 30500 of 48780 seeds in 4297 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 31000 of 48780 seeds in 4366 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 31500 of 48780 seeds in 4435 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 32000 of 48780 seeds in 4504 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 32500 of 48780 seeds in 4574 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 33000 of 48780 seeds in 4643 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 33500 of 48780 seeds in 4713 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 34000 of 48780 seeds in 4783 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 34500 of 48780 seeds in 4852 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 35000 of 48780 seeds in 4922 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 35500 of 48780 seeds in 4991 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 36000 of 48780 seeds in 5060 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 36500 of 48780 seeds in 5130 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 37000 of 48780 seeds in 5199 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 37500 of 48780 seeds in 5269 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 38000 of 48780 seeds in 5338 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 38500 of 48780 seeds in 5408 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 39000 of 48780 seeds in 5477 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 39500 of 48780 seeds in 5547 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 40000 of 48780 seeds in 5617 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 40500 of 48780 seeds in 5691 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 41000 of 48780 seeds in 5761 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 41500 of 48780 seeds in 5831 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 42000 of 48780 seeds in 5899 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 42500 of 48780 seeds in 5968 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 43000 of 48780 seeds in 6038 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 43500 of 48780 seeds in 6111 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 44000 of 48780 seeds in 6183 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 44500 of 48780 seeds in 6253 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 45000 of 48780 seeds in 6322 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 45500 of 48780 seeds in 6392 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 46000 of 48780 seeds in 6462 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 46500 of 48780 seeds in 6531 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 47000 of 48780 seeds in 6600 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 47500 of 48780 seeds in 6670 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 48000 of 48780 seeds in 6739 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 48500 of 48780 seeds in 6810 s (7.12 seeds/s, 3.9 s per seed per thread)
swept 48780 seeds in 6849.7 s (7.12 seeds/s, 3.9 s per seed per thread); attempts mean 2.116 max 36; attempt histogram 0..10,11+ [15595, 10611, 7360, 4895, 3313, 2215, 1532, 1060, 708, 477, 318, 696]; last-resort programs 0
per-site distinct-index ratio at 256 units: mean 0.9998 min 0.9909; 0 of 48780 below the 0.98 floor at this sample size (the floor is enforced at 2^20)
Q5 structure over accepted programs: 40633 of 48780 with a lossy (or/mul/mulhi) last write to an output register; 0 with under 8 registers written; or per program mean 2.478
lowest per-site distinct-index ratio (headroom over the floor, Q5; the live hot-set candidates for Q1):
seed 187288 id 25458169755740e6 attempt 0 min_ratio 0.9909 (site 2) lossy_last 1 or 6 mul 3 mulhi 3 regs 8
seed 153314 id 8bb983557ab611cd attempt 0 min_ratio 0.9958 (site 0) lossy_last 5 or 4 mul 7 mulhi 6 regs 8
seed 185263 id 00a7006be287af6f attempt 0 min_ratio 0.9959 (site 6) lossy_last 1 or 3 mul 1 mulhi 2 regs 8
seed 163021 id 175a485ddbbe6c7d attempt 0 min_ratio 0.9960 (site 7) lossy_last 0 or 5 mul 8 mulhi 3 regs 8
seed 162547 id 3c01dc7c81fbe5ff attempt 1 min_ratio 0.9960 (site 14) lossy_last 1 or 5 mul 3 mulhi 3 regs 8
seed 171141 id d7688347d3b4d638 attempt 4 min_ratio 0.9960 (site 14) lossy_last 0 or 4 mul 8 mulhi 4 regs 8
seed 174204 id 4f4cd3970b57bae5 attempt 1 min_ratio 0.9960 (site 15) lossy_last 1 or 2 mul 5 mulhi 3 regs 8
seed 190687 id 58a5c4567c08d2d6 attempt 8 min_ratio 0.9960 (site 10) lossy_last 2 or 2 mul 4 mulhi 1 regs 8
seed 152303 id 6eb9ca87d0930f85 attempt 2 min_ratio 0.9960 (site 4) lossy_last 3 or 1 mul 4 mulhi 9 regs 8
seed 168537 id d3b55c9e699fef4a attempt 0 min_ratio 0.9960 (site 6) lossy_last 2 or 4 mul 8 mulhi 3 regs 8
seed 183944 id 3065984969cb5cff attempt 2 min_ratio 0.9960 (site 0) lossy_last 1 or 0 mul 5 mulhi 3 regs 8
seed 187811 id d55e9fc7e132d04b attempt 3 min_ratio 0.9960 (site 8) lossy_last 0 or 1 mul 3 mulhi 3 regs 8
seed 168052 id 82fa1d5a10c6bff0 attempt 10 min_ratio 0.9960 (site 15) lossy_last 0 or 3 mul 4 mulhi 7 regs 8
seed 177220 id 56725d625878149b attempt 2 min_ratio 0.9966 (site 4) lossy_last 1 or 2 mul 4 mulhi 4 regs 8
seed 155393 id 032d29d1dd58b3e0 attempt 0 min_ratio 0.9969 (site 9) lossy_last 1 or 3 mul 7 mulhi 2 regs 8
seed 175683 id d4432e5da1e481a7 attempt 7 min_ratio 0.9970 (site 4) lossy_last 1 or 5 mul 3 mulhi 3 regs 8
seed 155063 id 0ee9c3a05a590d39 attempt 3 min_ratio 0.9970 (site 14) lossy_last 2 or 5 mul 5 mulhi 6 regs 8
seed 191560 id 3aaa9fcba0884320 attempt 1 min_ratio 0.9971 (site 11) lossy_last 2 or 3 mul 1 mulhi 6 regs 8
seed 165978 id 6c28a9708f3ddd05 attempt 1 min_ratio 0.9971 (site 4) lossy_last 2 or 4 mul 7 mulhi 4 regs 8
seed 170330 id cdf06f97e1aa68a7 attempt 0 min_ratio 0.9971 (site 2) lossy_last 1 or 1 mul 4 mulhi 6 regs 8
wrote /srv/builds/_adv-adv-accept/sweep-s01f.txt
sweep DONE
lease: released 28 pool cores after 12685 s, exit 0

View file

@ -0,0 +1,182 @@
lease: 0 of 16 pool cores free (7 leased), a higher class waits ahead; waiting
lease: holding 23 pool cores (8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,34,35,36,40,41,42,95, waited 1256 s, class adv): adv-accept sweep-s02e
adv-accept sweep: seeds 223522..300002 (76480), 23 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 76480 seeds in 107 s (4.68 seeds/s, 4.9 s per seed per thread)
progress: 1000 of 76480 seeds in 210 s (4.76 seeds/s, 4.8 s per seed per thread)
progress: 1500 of 76480 seeds in 313 s (4.79 seeds/s, 4.8 s per seed per thread)
progress: 2000 of 76480 seeds in 417 s (4.79 seeds/s, 4.8 s per seed per thread)
progress: 2500 of 76480 seeds in 521 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 3000 of 76480 seeds in 625 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 3500 of 76480 seeds in 729 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 4000 of 76480 seeds in 837 s (4.78 seeds/s, 4.8 s per seed per thread)
progress: 4500 of 76480 seeds in 942 s (4.78 seeds/s, 4.8 s per seed per thread)
progress: 5000 of 76480 seeds in 1046 s (4.78 seeds/s, 4.8 s per seed per thread)
progress: 5500 of 76480 seeds in 1150 s (4.78 seeds/s, 4.8 s per seed per thread)
progress: 6000 of 76480 seeds in 1252 s (4.79 seeds/s, 4.8 s per seed per thread)
progress: 6500 of 76480 seeds in 1357 s (4.79 seeds/s, 4.8 s per seed per thread)
progress: 7000 of 76480 seeds in 1460 s (4.79 seeds/s, 4.8 s per seed per thread)
progress: 7500 of 76480 seeds in 1564 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 8000 of 76480 seeds in 1665 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 8500 of 76480 seeds in 1770 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 9000 of 76480 seeds in 1873 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 9500 of 76480 seeds in 1977 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 10000 of 76480 seeds in 2081 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 10500 of 76480 seeds in 2185 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 11000 of 76480 seeds in 2290 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 11500 of 76480 seeds in 2393 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 12000 of 76480 seeds in 2498 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 12500 of 76480 seeds in 2601 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 13000 of 76480 seeds in 2705 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 13500 of 76480 seeds in 2810 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 14000 of 76480 seeds in 2914 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 14500 of 76480 seeds in 3017 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 15000 of 76480 seeds in 3121 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 15500 of 76480 seeds in 3225 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 16000 of 76480 seeds in 3329 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 16500 of 76480 seeds in 3432 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 17000 of 76480 seeds in 3536 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 17500 of 76480 seeds in 3639 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 18000 of 76480 seeds in 3743 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 18500 of 76480 seeds in 3847 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 19000 of 76480 seeds in 3951 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 19500 of 76480 seeds in 4057 s (4.81 seeds/s, 4.8 s per seed per thread)
progress: 20000 of 76480 seeds in 4164 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 20500 of 76480 seeds in 4271 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 21000 of 76480 seeds in 4377 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 21500 of 76480 seeds in 4481 s (4.80 seeds/s, 4.8 s per seed per thread)
progress: 22000 of 76480 seeds in 4544 s (4.84 seeds/s, 4.8 s per seed per thread)
progress: 22500 of 76480 seeds in 4608 s (4.88 seeds/s, 4.7 s per seed per thread)
progress: 23000 of 76480 seeds in 4684 s (4.91 seeds/s, 4.7 s per seed per thread)
progress: 23500 of 76480 seeds in 4773 s (4.92 seeds/s, 4.7 s per seed per thread)
progress: 24000 of 76480 seeds in 4858 s (4.94 seeds/s, 4.7 s per seed per thread)
progress: 24500 of 76480 seeds in 4930 s (4.97 seeds/s, 4.6 s per seed per thread)
progress: 25000 of 76480 seeds in 4993 s (5.01 seeds/s, 4.6 s per seed per thread)
progress: 25500 of 76480 seeds in 5049 s (5.05 seeds/s, 4.6 s per seed per thread)
progress: 26000 of 76480 seeds in 5143 s (5.06 seeds/s, 4.5 s per seed per thread)
progress: 26500 of 76480 seeds in 5238 s (5.06 seeds/s, 4.5 s per seed per thread)
progress: 27000 of 76480 seeds in 5330 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 27500 of 76480 seeds in 5420 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 28000 of 76480 seeds in 5510 s (5.08 seeds/s, 4.5 s per seed per thread)
progress: 28500 of 76480 seeds in 5608 s (5.08 seeds/s, 4.5 s per seed per thread)
progress: 29000 of 76480 seeds in 5711 s (5.08 seeds/s, 4.5 s per seed per thread)
progress: 29500 of 76480 seeds in 5813 s (5.08 seeds/s, 4.5 s per seed per thread)
progress: 30000 of 76480 seeds in 5917 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 30500 of 76480 seeds in 6021 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 31000 of 76480 seeds in 6126 s (5.06 seeds/s, 4.5 s per seed per thread)
progress: 31500 of 76480 seeds in 6215 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 32000 of 76480 seeds in 6298 s (5.08 seeds/s, 4.5 s per seed per thread)
progress: 32500 of 76480 seeds in 6377 s (5.10 seeds/s, 4.5 s per seed per thread)
progress: 33000 of 76480 seeds in 6457 s (5.11 seeds/s, 4.5 s per seed per thread)
progress: 33500 of 76480 seeds in 6536 s (5.13 seeds/s, 4.5 s per seed per thread)
progress: 34000 of 76480 seeds in 6616 s (5.14 seeds/s, 4.5 s per seed per thread)
progress: 34500 of 76480 seeds in 6696 s (5.15 seeds/s, 4.5 s per seed per thread)
progress: 35000 of 76480 seeds in 6787 s (5.16 seeds/s, 4.5 s per seed per thread)
progress: 35500 of 76480 seeds in 6891 s (5.15 seeds/s, 4.5 s per seed per thread)
progress: 36000 of 76480 seeds in 6993 s (5.15 seeds/s, 4.5 s per seed per thread)
progress: 36500 of 76480 seeds in 7099 s (5.14 seeds/s, 4.5 s per seed per thread)
progress: 37000 of 76480 seeds in 7203 s (5.14 seeds/s, 4.5 s per seed per thread)
progress: 37500 of 76480 seeds in 7307 s (5.13 seeds/s, 4.5 s per seed per thread)
progress: 38000 of 76480 seeds in 7412 s (5.13 seeds/s, 4.5 s per seed per thread)
progress: 38500 of 76480 seeds in 7515 s (5.12 seeds/s, 4.5 s per seed per thread)
progress: 39000 of 76480 seeds in 7617 s (5.12 seeds/s, 4.5 s per seed per thread)
progress: 39500 of 76480 seeds in 7716 s (5.12 seeds/s, 4.5 s per seed per thread)
progress: 40000 of 76480 seeds in 7819 s (5.12 seeds/s, 4.5 s per seed per thread)
progress: 40500 of 76480 seeds in 7927 s (5.11 seeds/s, 4.5 s per seed per thread)
progress: 41000 of 76480 seeds in 8030 s (5.11 seeds/s, 4.5 s per seed per thread)
progress: 41500 of 76480 seeds in 8134 s (5.10 seeds/s, 4.5 s per seed per thread)
progress: 42000 of 76480 seeds in 8237 s (5.10 seeds/s, 4.5 s per seed per thread)
progress: 42500 of 76480 seeds in 8340 s (5.10 seeds/s, 4.5 s per seed per thread)
progress: 43000 of 76480 seeds in 8444 s (5.09 seeds/s, 4.5 s per seed per thread)
progress: 43500 of 76480 seeds in 8548 s (5.09 seeds/s, 4.5 s per seed per thread)
progress: 44000 of 76480 seeds in 8651 s (5.09 seeds/s, 4.5 s per seed per thread)
progress: 44500 of 76480 seeds in 8754 s (5.08 seeds/s, 4.5 s per seed per thread)
progress: 45000 of 76480 seeds in 8865 s (5.08 seeds/s, 4.5 s per seed per thread)
progress: 45500 of 76480 seeds in 8969 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 46000 of 76480 seeds in 9073 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 46500 of 76480 seeds in 9178 s (5.07 seeds/s, 4.5 s per seed per thread)
progress: 47000 of 76480 seeds in 9284 s (5.06 seeds/s, 4.5 s per seed per thread)
progress: 47500 of 76480 seeds in 9389 s (5.06 seeds/s, 4.5 s per seed per thread)
progress: 48000 of 76480 seeds in 9492 s (5.06 seeds/s, 4.5 s per seed per thread)
progress: 48500 of 76480 seeds in 9596 s (5.05 seeds/s, 4.6 s per seed per thread)
progress: 49000 of 76480 seeds in 9700 s (5.05 seeds/s, 4.6 s per seed per thread)
progress: 49500 of 76480 seeds in 9803 s (5.05 seeds/s, 4.6 s per seed per thread)
progress: 50000 of 76480 seeds in 9907 s (5.05 seeds/s, 4.6 s per seed per thread)
progress: 50500 of 76480 seeds in 10009 s (5.05 seeds/s, 4.6 s per seed per thread)
progress: 51000 of 76480 seeds in 10112 s (5.04 seeds/s, 4.6 s per seed per thread)
progress: 51500 of 76480 seeds in 10217 s (5.04 seeds/s, 4.6 s per seed per thread)
progress: 52000 of 76480 seeds in 10321 s (5.04 seeds/s, 4.6 s per seed per thread)
progress: 52500 of 76480 seeds in 10425 s (5.04 seeds/s, 4.6 s per seed per thread)
progress: 53000 of 76480 seeds in 10528 s (5.03 seeds/s, 4.6 s per seed per thread)
progress: 53500 of 76480 seeds in 10633 s (5.03 seeds/s, 4.6 s per seed per thread)
progress: 54000 of 76480 seeds in 10735 s (5.03 seeds/s, 4.6 s per seed per thread)
progress: 54500 of 76480 seeds in 10839 s (5.03 seeds/s, 4.6 s per seed per thread)
progress: 55000 of 76480 seeds in 10942 s (5.03 seeds/s, 4.6 s per seed per thread)
progress: 55500 of 76480 seeds in 11044 s (5.03 seeds/s, 4.6 s per seed per thread)
progress: 56000 of 76480 seeds in 11146 s (5.02 seeds/s, 4.6 s per seed per thread)
progress: 56500 of 76480 seeds in 11250 s (5.02 seeds/s, 4.6 s per seed per thread)
progress: 57000 of 76480 seeds in 11353 s (5.02 seeds/s, 4.6 s per seed per thread)
progress: 57500 of 76480 seeds in 11456 s (5.02 seeds/s, 4.6 s per seed per thread)
progress: 58000 of 76480 seeds in 11560 s (5.02 seeds/s, 4.6 s per seed per thread)
progress: 58500 of 76480 seeds in 11665 s (5.02 seeds/s, 4.6 s per seed per thread)
progress: 59000 of 76480 seeds in 11769 s (5.01 seeds/s, 4.6 s per seed per thread)
progress: 59500 of 76480 seeds in 11872 s (5.01 seeds/s, 4.6 s per seed per thread)
progress: 60000 of 76480 seeds in 11977 s (5.01 seeds/s, 4.6 s per seed per thread)
progress: 60500 of 76480 seeds in 12081 s (5.01 seeds/s, 4.6 s per seed per thread)
progress: 61000 of 76480 seeds in 12185 s (5.01 seeds/s, 4.6 s per seed per thread)
progress: 61500 of 76480 seeds in 12296 s (5.00 seeds/s, 4.6 s per seed per thread)
progress: 62000 of 76480 seeds in 12400 s (5.00 seeds/s, 4.6 s per seed per thread)
progress: 62500 of 76480 seeds in 12504 s (5.00 seeds/s, 4.6 s per seed per thread)
progress: 63000 of 76480 seeds in 12609 s (5.00 seeds/s, 4.6 s per seed per thread)
progress: 63500 of 76480 seeds in 12711 s (5.00 seeds/s, 4.6 s per seed per thread)
progress: 64000 of 76480 seeds in 12814 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 64500 of 76480 seeds in 12919 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 65000 of 76480 seeds in 13022 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 65500 of 76480 seeds in 13125 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 66000 of 76480 seeds in 13227 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 66500 of 76480 seeds in 13329 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 67000 of 76480 seeds in 13431 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 67500 of 76480 seeds in 13533 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 68000 of 76480 seeds in 13636 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 68500 of 76480 seeds in 13740 s (4.99 seeds/s, 4.6 s per seed per thread)
progress: 69000 of 76480 seeds in 13843 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 69500 of 76480 seeds in 13948 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 70000 of 76480 seeds in 14048 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 70500 of 76480 seeds in 14150 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 71000 of 76480 seeds in 14255 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 71500 of 76480 seeds in 14358 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 72000 of 76480 seeds in 14460 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 72500 of 76480 seeds in 14562 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 73000 of 76480 seeds in 14666 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 73500 of 76480 seeds in 14768 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 74000 of 76480 seeds in 14871 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 74500 of 76480 seeds in 14975 s (4.98 seeds/s, 4.6 s per seed per thread)
progress: 75000 of 76480 seeds in 15079 s (4.97 seeds/s, 4.6 s per seed per thread)
progress: 75500 of 76480 seeds in 15182 s (4.97 seeds/s, 4.6 s per seed per thread)
progress: 76000 of 76480 seeds in 15285 s (4.97 seeds/s, 4.6 s per seed per thread)
swept 76480 seeds in 15384.8 s (4.97 seeds/s, 4.6 s per seed per thread); attempts mean 2.132 max 32; attempt histogram 0..10,11+ [24450, 16548, 11363, 7714, 5247, 3534, 2455, 1616, 1141, 778, 520, 1114]; last-resort programs 0
per-site distinct-index ratio at 256 units: mean 0.9998 min 0.9820; 0 of 76480 below the 0.98 floor at this sample size (the floor is enforced at 2^20)
Q5 structure over accepted programs: 63909 of 76480 with a lossy (or/mul/mulhi) last write to an output register; 0 with under 8 registers written; or per program mean 2.487
lowest per-site distinct-index ratio (headroom over the floor, Q5; the live hot-set candidates for Q1):
seed 228763 id 2c4be0f6dc44c423 attempt 5 min_ratio 0.9820 (site 9) lossy_last 1 or 1 mul 4 mulhi 6 regs 8
seed 271794 id dfdeb4c148fb0303 attempt 4 min_ratio 0.9910 (site 0) lossy_last 0 or 2 mul 6 mulhi 9 regs 8
seed 229586 id 6475a4d314f156de attempt 0 min_ratio 0.9930 (site 8) lossy_last 3 or 3 mul 6 mulhi 1 regs 8
seed 232825 id 5e57016ec7cd7ca6 attempt 4 min_ratio 0.9943 (site 12) lossy_last 4 or 3 mul 2 mulhi 7 regs 8
seed 291126 id 8ec139937e1882a8 attempt 4 min_ratio 0.9945 (site 2) lossy_last 2 or 3 mul 5 mulhi 4 regs 8
seed 292525 id b58e4f6f4e3ecdd4 attempt 2 min_ratio 0.9956 (site 6) lossy_last 1 or 4 mul 4 mulhi 9 regs 8
seed 286294 id 4b0608d86b31ad43 attempt 0 min_ratio 0.9959 (site 0) lossy_last 1 or 4 mul 4 mulhi 5 regs 8
seed 231265 id 89ec664b6aaf85f5 attempt 6 min_ratio 0.9959 (site 10) lossy_last 2 or 2 mul 8 mulhi 3 regs 8
seed 245507 id 7ec741534467b18b attempt 7 min_ratio 0.9960 (site 4) lossy_last 1 or 2 mul 6 mulhi 2 regs 8
seed 299428 id 190028b88d6641c3 attempt 2 min_ratio 0.9960 (site 14) lossy_last 1 or 2 mul 8 mulhi 5 regs 8
seed 232956 id d68fd92c3c09beb6 attempt 1 min_ratio 0.9960 (site 1) lossy_last 2 or 1 mul 3 mulhi 4 regs 8
seed 271424 id 7fbba65cb20310f4 attempt 7 min_ratio 0.9960 (site 4) lossy_last 2 or 0 mul 4 mulhi 4 regs 8
seed 277493 id 1321d98e5ccdafc0 attempt 4 min_ratio 0.9960 (site 6) lossy_last 2 or 0 mul 5 mulhi 4 regs 8
seed 241900 id 10c0c651ea68a62a attempt 4 min_ratio 0.9960 (site 0) lossy_last 2 or 3 mul 8 mulhi 4 regs 8
seed 270535 id 2d69e0bfd1552411 attempt 0 min_ratio 0.9960 (site 3) lossy_last 3 or 3 mul 4 mulhi 1 regs 8
seed 292558 id b484e7fda1511ffe attempt 0 min_ratio 0.9960 (site 11) lossy_last 1 or 1 mul 6 mulhi 0 regs 8
seed 252158 id 3986f5124e162df8 attempt 1 min_ratio 0.9960 (site 11) lossy_last 1 or 2 mul 5 mulhi 10 regs 8
seed 280286 id cef93b9deaaab575 attempt 7 min_ratio 0.9960 (site 7) lossy_last 2 or 5 mul 4 mulhi 6 regs 8
seed 232101 id 6018b0fd960d5de3 attempt 0 min_ratio 0.9960 (site 3) lossy_last 2 or 3 mul 5 mulhi 3 regs 8
seed 225632 id 5d3d6f8b51ed8a93 attempt 0 min_ratio 0.9960 (site 0) lossy_last 0 or 2 mul 4 mulhi 4 regs 8
wrote /srv/builds/_adv-adv-accept/sweep-s02e.txt
sweep DONE
lease: released 23 pool cores after 16641 s, exit 0

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,230 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 27 pool cores (8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,34,35,36,40,41,42,95, waited 2431 s, class adv): adv-accept sweep-s03b
adv-accept sweep: seeds 300002..400002 (100000), 27 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 100000 seeds in 89 s (5.64 seeds/s, 4.8 s per seed per thread)
progress: 1000 of 100000 seeds in 175 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 1500 of 100000 seeds in 262 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 2000 of 100000 seeds in 348 s (5.75 seeds/s, 4.7 s per seed per thread)
progress: 2500 of 100000 seeds in 434 s (5.76 seeds/s, 4.7 s per seed per thread)
progress: 3000 of 100000 seeds in 521 s (5.76 seeds/s, 4.7 s per seed per thread)
progress: 3500 of 100000 seeds in 608 s (5.75 seeds/s, 4.7 s per seed per thread)
progress: 4000 of 100000 seeds in 695 s (5.75 seeds/s, 4.7 s per seed per thread)
progress: 4500 of 100000 seeds in 781 s (5.76 seeds/s, 4.7 s per seed per thread)
progress: 5000 of 100000 seeds in 867 s (5.77 seeds/s, 4.7 s per seed per thread)
progress: 5500 of 100000 seeds in 952 s (5.78 seeds/s, 4.7 s per seed per thread)
progress: 6000 of 100000 seeds in 1039 s (5.77 seeds/s, 4.7 s per seed per thread)
progress: 6500 of 100000 seeds in 1127 s (5.77 seeds/s, 4.7 s per seed per thread)
progress: 7000 of 100000 seeds in 1214 s (5.77 seeds/s, 4.7 s per seed per thread)
progress: 7500 of 100000 seeds in 1303 s (5.76 seeds/s, 4.7 s per seed per thread)
progress: 8000 of 100000 seeds in 1390 s (5.75 seeds/s, 4.7 s per seed per thread)
progress: 8500 of 100000 seeds in 1478 s (5.75 seeds/s, 4.7 s per seed per thread)
progress: 9000 of 100000 seeds in 1567 s (5.74 seeds/s, 4.7 s per seed per thread)
progress: 9500 of 100000 seeds in 1657 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 10000 of 100000 seeds in 1743 s (5.74 seeds/s, 4.7 s per seed per thread)
progress: 10500 of 100000 seeds in 1830 s (5.74 seeds/s, 4.7 s per seed per thread)
progress: 11000 of 100000 seeds in 1916 s (5.74 seeds/s, 4.7 s per seed per thread)
progress: 11500 of 100000 seeds in 2006 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 12000 of 100000 seeds in 2094 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 12500 of 100000 seeds in 2181 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 13000 of 100000 seeds in 2268 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 13500 of 100000 seeds in 2354 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 14000 of 100000 seeds in 2443 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 14500 of 100000 seeds in 2532 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 15000 of 100000 seeds in 2618 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 15500 of 100000 seeds in 2706 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 16000 of 100000 seeds in 2794 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 16500 of 100000 seeds in 2881 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 17000 of 100000 seeds in 2967 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 17500 of 100000 seeds in 3054 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 18000 of 100000 seeds in 3140 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 18500 of 100000 seeds in 3227 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 19000 of 100000 seeds in 3315 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 19500 of 100000 seeds in 3403 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 20000 of 100000 seeds in 3491 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 20500 of 100000 seeds in 3578 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 21000 of 100000 seeds in 3667 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 21500 of 100000 seeds in 3754 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 22000 of 100000 seeds in 3842 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 22500 of 100000 seeds in 3930 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 23000 of 100000 seeds in 4018 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 23500 of 100000 seeds in 4106 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 24000 of 100000 seeds in 4196 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 24500 of 100000 seeds in 4284 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 25000 of 100000 seeds in 4372 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 25500 of 100000 seeds in 4462 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 26000 of 100000 seeds in 4550 s (5.71 seeds/s, 4.7 s per seed per thread)
progress: 26500 of 100000 seeds in 4637 s (5.71 seeds/s, 4.7 s per seed per thread)
progress: 27000 of 100000 seeds in 4725 s (5.71 seeds/s, 4.7 s per seed per thread)
progress: 27500 of 100000 seeds in 4815 s (5.71 seeds/s, 4.7 s per seed per thread)
progress: 28000 of 100000 seeds in 4908 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 28500 of 100000 seeds in 4998 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 29000 of 100000 seeds in 5088 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 29500 of 100000 seeds in 5175 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 30000 of 100000 seeds in 5264 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 30500 of 100000 seeds in 5353 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 31000 of 100000 seeds in 5442 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 31500 of 100000 seeds in 5530 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 32000 of 100000 seeds in 5618 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 32500 of 100000 seeds in 5707 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 33000 of 100000 seeds in 5795 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 33500 of 100000 seeds in 5884 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 34000 of 100000 seeds in 5974 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 34500 of 100000 seeds in 6063 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 35000 of 100000 seeds in 6152 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 35500 of 100000 seeds in 6241 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 36000 of 100000 seeds in 6329 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 36500 of 100000 seeds in 6418 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 37000 of 100000 seeds in 6507 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 37500 of 100000 seeds in 6596 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 38000 of 100000 seeds in 6684 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 38500 of 100000 seeds in 6774 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 39000 of 100000 seeds in 6861 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 39500 of 100000 seeds in 6951 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 40000 of 100000 seeds in 7040 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 40500 of 100000 seeds in 7128 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 41000 of 100000 seeds in 7217 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 41500 of 100000 seeds in 7305 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 42000 of 100000 seeds in 7395 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 42500 of 100000 seeds in 7484 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 43000 of 100000 seeds in 7573 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 43500 of 100000 seeds in 7662 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 44000 of 100000 seeds in 7751 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 44500 of 100000 seeds in 7840 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 45000 of 100000 seeds in 7928 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 45500 of 100000 seeds in 8016 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 46000 of 100000 seeds in 8104 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 46500 of 100000 seeds in 8193 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 47000 of 100000 seeds in 8281 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 47500 of 100000 seeds in 8370 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 48000 of 100000 seeds in 8458 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 48500 of 100000 seeds in 8548 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 49000 of 100000 seeds in 8636 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 49500 of 100000 seeds in 8725 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 50000 of 100000 seeds in 8813 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 50500 of 100000 seeds in 8901 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 51000 of 100000 seeds in 8988 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 51500 of 100000 seeds in 9076 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 52000 of 100000 seeds in 9166 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 52500 of 100000 seeds in 9255 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 53000 of 100000 seeds in 9343 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 53500 of 100000 seeds in 9431 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 54000 of 100000 seeds in 9519 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 54500 of 100000 seeds in 9608 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 55000 of 100000 seeds in 9697 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 55500 of 100000 seeds in 9787 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 56000 of 100000 seeds in 9876 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 56500 of 100000 seeds in 9963 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 57000 of 100000 seeds in 10052 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 57500 of 100000 seeds in 10141 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 58000 of 100000 seeds in 10230 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 58500 of 100000 seeds in 10318 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 59000 of 100000 seeds in 10408 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 59500 of 100000 seeds in 10496 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 60000 of 100000 seeds in 10584 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 60500 of 100000 seeds in 10673 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 61000 of 100000 seeds in 10762 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 61500 of 100000 seeds in 10852 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 62000 of 100000 seeds in 10940 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 62500 of 100000 seeds in 11028 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 63000 of 100000 seeds in 11117 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 63500 of 100000 seeds in 11204 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 64000 of 100000 seeds in 11292 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 64500 of 100000 seeds in 11381 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 65000 of 100000 seeds in 11469 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 65500 of 100000 seeds in 11559 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 66000 of 100000 seeds in 11646 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 66500 of 100000 seeds in 11734 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 67000 of 100000 seeds in 11823 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 67500 of 100000 seeds in 11912 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 68000 of 100000 seeds in 12000 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 68500 of 100000 seeds in 12089 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 69000 of 100000 seeds in 12178 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 69500 of 100000 seeds in 12266 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 70000 of 100000 seeds in 12355 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 70500 of 100000 seeds in 12444 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 71000 of 100000 seeds in 12532 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 71500 of 100000 seeds in 12620 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 72000 of 100000 seeds in 12708 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 72500 of 100000 seeds in 12798 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 73000 of 100000 seeds in 12887 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 73500 of 100000 seeds in 12975 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 74000 of 100000 seeds in 13063 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 74500 of 100000 seeds in 13152 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 75000 of 100000 seeds in 13240 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 75500 of 100000 seeds in 13328 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 76000 of 100000 seeds in 13417 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 76500 of 100000 seeds in 13506 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 77000 of 100000 seeds in 13594 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 77500 of 100000 seeds in 13683 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 78000 of 100000 seeds in 13773 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 78500 of 100000 seeds in 13862 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 79000 of 100000 seeds in 13951 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 79500 of 100000 seeds in 14039 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 80000 of 100000 seeds in 14127 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 80500 of 100000 seeds in 14216 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 81000 of 100000 seeds in 14306 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 81500 of 100000 seeds in 14392 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 82000 of 100000 seeds in 14483 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 82500 of 100000 seeds in 14572 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 83000 of 100000 seeds in 14661 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 83500 of 100000 seeds in 14749 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 84000 of 100000 seeds in 14837 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 84500 of 100000 seeds in 14925 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 85000 of 100000 seeds in 15015 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 85500 of 100000 seeds in 15105 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 86000 of 100000 seeds in 15193 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 86500 of 100000 seeds in 15282 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 87000 of 100000 seeds in 15370 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 87500 of 100000 seeds in 15459 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 88000 of 100000 seeds in 15548 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 88500 of 100000 seeds in 15638 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 89000 of 100000 seeds in 15725 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 89500 of 100000 seeds in 15815 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 90000 of 100000 seeds in 15889 s (5.66 seeds/s, 4.8 s per seed per thread)
progress: 90500 of 100000 seeds in 15956 s (5.67 seeds/s, 4.8 s per seed per thread)
progress: 91000 of 100000 seeds in 16025 s (5.68 seeds/s, 4.8 s per seed per thread)
progress: 91500 of 100000 seeds in 16094 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 92000 of 100000 seeds in 16163 s (5.69 seeds/s, 4.7 s per seed per thread)
progress: 92500 of 100000 seeds in 16232 s (5.70 seeds/s, 4.7 s per seed per thread)
progress: 93000 of 100000 seeds in 16299 s (5.71 seeds/s, 4.7 s per seed per thread)
progress: 93500 of 100000 seeds in 16368 s (5.71 seeds/s, 4.7 s per seed per thread)
progress: 94000 of 100000 seeds in 16436 s (5.72 seeds/s, 4.7 s per seed per thread)
progress: 94500 of 100000 seeds in 16505 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 95000 of 100000 seeds in 16575 s (5.73 seeds/s, 4.7 s per seed per thread)
progress: 95500 of 100000 seeds in 16647 s (5.74 seeds/s, 4.7 s per seed per thread)
progress: 96000 of 100000 seeds in 16717 s (5.74 seeds/s, 4.7 s per seed per thread)
progress: 96500 of 100000 seeds in 16788 s (5.75 seeds/s, 4.7 s per seed per thread)
progress: 97000 of 100000 seeds in 16858 s (5.75 seeds/s, 4.7 s per seed per thread)
progress: 97500 of 100000 seeds in 16926 s (5.76 seeds/s, 4.7 s per seed per thread)
progress: 98000 of 100000 seeds in 16995 s (5.77 seeds/s, 4.7 s per seed per thread)
progress: 98500 of 100000 seeds in 17062 s (5.77 seeds/s, 4.7 s per seed per thread)
progress: 99000 of 100000 seeds in 17131 s (5.78 seeds/s, 4.7 s per seed per thread)
progress: 99500 of 100000 seeds in 17199 s (5.79 seeds/s, 4.7 s per seed per thread)
progress: 100000 of 100000 seeds in 17270 s (5.79 seeds/s, 4.7 s per seed per thread)
swept 100000 seeds in 17270.1 s (5.79 seeds/s, 4.7 s per seed per thread); attempts mean 2.120 max 28; attempt histogram 0..10,11+ [32088, 21744, 14963, 9927, 6677, 4667, 3173, 2156, 1471, 1029, 664, 1441]; last-resort programs 0
per-site distinct-index ratio at 256 units: mean 0.9998 min 0.9891; 0 of 100000 below the 0.98 floor at this sample size (the floor is enforced at 2^20)
Q5 structure over accepted programs: 83545 of 100000 with a lossy (or/mul/mulhi) last write to an output register; 0 with under 8 registers written; or per program mean 2.479
lowest per-site distinct-index ratio (headroom over the floor, Q5; the live hot-set candidates for Q1):
seed 368301 id 9dbfff4177f7ab59 attempt 1 min_ratio 0.9891 (site 1) lossy_last 1 or 2 mul 6 mulhi 6 regs 8
seed 304522 id 5b1201e5c4e40fd6 attempt 8 min_ratio 0.9913 (site 0) lossy_last 1 or 3 mul 5 mulhi 6 regs 8
seed 378587 id aba111ab25bff74b attempt 1 min_ratio 0.9952 (site 2) lossy_last 2 or 2 mul 8 mulhi 1 regs 8
seed 354728 id f7fa32048db3422a attempt 0 min_ratio 0.9958 (site 8) lossy_last 1 or 3 mul 5 mulhi 1 regs 8
seed 332192 id b0a3073f409efac8 attempt 2 min_ratio 0.9959 (site 3) lossy_last 2 or 0 mul 8 mulhi 4 regs 8
seed 318639 id cec5879cb5b8da61 attempt 2 min_ratio 0.9959 (site 9) lossy_last 2 or 5 mul 5 mulhi 4 regs 8
seed 323229 id eeee4af029dc1d39 attempt 7 min_ratio 0.9959 (site 8) lossy_last 1 or 3 mul 5 mulhi 5 regs 8
seed 348333 id e4d942728ed0d107 attempt 0 min_ratio 0.9959 (site 2) lossy_last 1 or 2 mul 4 mulhi 5 regs 8
seed 313603 id c81763cb8932efda attempt 3 min_ratio 0.9959 (site 7) lossy_last 2 or 4 mul 4 mulhi 2 regs 8
seed 392586 id 765f8cd3a4555c36 attempt 1 min_ratio 0.9959 (site 8) lossy_last 2 or 4 mul 4 mulhi 6 regs 8
seed 357988 id 888b1d96629d605a attempt 2 min_ratio 0.9959 (site 11) lossy_last 3 or 5 mul 4 mulhi 3 regs 8
seed 341873 id 04866d6cc6232d89 attempt 0 min_ratio 0.9960 (site 7) lossy_last 2 or 3 mul 2 mulhi 3 regs 8
seed 320020 id 355d9b80883e51ad attempt 0 min_ratio 0.9960 (site 1) lossy_last 1 or 4 mul 9 mulhi 5 regs 8
seed 350897 id 1dedbc393ba273e1 attempt 1 min_ratio 0.9960 (site 0) lossy_last 1 or 0 mul 3 mulhi 2 regs 8
seed 382073 id 4c2e33cffb49b865 attempt 1 min_ratio 0.9960 (site 0) lossy_last 0 or 2 mul 6 mulhi 1 regs 8
seed 300816 id ee39d85c7c82c58a attempt 0 min_ratio 0.9960 (site 3) lossy_last 1 or 0 mul 5 mulhi 3 regs 8
seed 324248 id a283f3fdaa6cd86c attempt 1 min_ratio 0.9960 (site 6) lossy_last 1 or 0 mul 5 mulhi 5 regs 8
seed 377142 id 531ced4b9f7fd0c6 attempt 5 min_ratio 0.9960 (site 7) lossy_last 1 or 1 mul 6 mulhi 4 regs 8
seed 360625 id ae41cafc88f2e6ae attempt 0 min_ratio 0.9960 (site 5) lossy_last 0 or 6 mul 6 mulhi 5 regs 8
seed 326203 id 45ae7d2e9c27273f attempt 0 min_ratio 0.9960 (site 13) lossy_last 0 or 0 mul 7 mulhi 1 regs 8
wrote /srv/builds/_adv-adv-accept/sweep-s03b.txt
sweep DONE
lease: released 27 pool cores after 19701 s, exit 0

View file

@ -0,0 +1,228 @@
lease: 0 of 16 pool cores free (88 leased), a higher class waits ahead; waiting
lease: holding 16 pool cores (63,64,65,66,67,68,69,70,87,88,89,90,91,92,93,94, waited 1915 s, class adv): adv-accept sweep-s04b
adv-accept sweep: seeds 400603..500002 (99399), 16 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 99399 seeds in 152 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 1000 of 99399 seeds in 306 s (3.27 seeds/s, 4.9 s per seed per thread)
progress: 1500 of 99399 seeds in 455 s (3.30 seeds/s, 4.8 s per seed per thread)
progress: 2000 of 99399 seeds in 605 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 2500 of 99399 seeds in 754 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 3000 of 99399 seeds in 905 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 3500 of 99399 seeds in 1059 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 4000 of 99399 seeds in 1224 s (3.27 seeds/s, 4.9 s per seed per thread)
progress: 4500 of 99399 seeds in 1373 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 5000 of 99399 seeds in 1525 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 5500 of 99399 seeds in 1679 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 6000 of 99399 seeds in 1828 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 6500 of 99399 seeds in 1978 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 7000 of 99399 seeds in 2130 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 7500 of 99399 seeds in 2282 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 8000 of 99399 seeds in 2433 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 8500 of 99399 seeds in 2588 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 9000 of 99399 seeds in 2744 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 9500 of 99399 seeds in 2896 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 10000 of 99399 seeds in 3046 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 10500 of 99399 seeds in 3198 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 11000 of 99399 seeds in 3349 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 11500 of 99399 seeds in 3500 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 12000 of 99399 seeds in 3650 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 12500 of 99399 seeds in 3798 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 13000 of 99399 seeds in 3947 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 13500 of 99399 seeds in 4096 s (3.30 seeds/s, 4.9 s per seed per thread)
progress: 14000 of 99399 seeds in 4246 s (3.30 seeds/s, 4.9 s per seed per thread)
progress: 14500 of 99399 seeds in 4397 s (3.30 seeds/s, 4.9 s per seed per thread)
progress: 15000 of 99399 seeds in 4556 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 15500 of 99399 seeds in 4721 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 16000 of 99399 seeds in 4873 s (3.28 seeds/s, 4.9 s per seed per thread)
progress: 16500 of 99399 seeds in 5022 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 17000 of 99399 seeds in 5171 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 17500 of 99399 seeds in 5322 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 18000 of 99399 seeds in 5473 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 18500 of 99399 seeds in 5619 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 19000 of 99399 seeds in 5770 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 19500 of 99399 seeds in 5918 s (3.30 seeds/s, 4.9 s per seed per thread)
progress: 20000 of 99399 seeds in 6066 s (3.30 seeds/s, 4.9 s per seed per thread)
progress: 20500 of 99399 seeds in 6213 s (3.30 seeds/s, 4.8 s per seed per thread)
progress: 21000 of 99399 seeds in 6361 s (3.30 seeds/s, 4.8 s per seed per thread)
progress: 21500 of 99399 seeds in 6510 s (3.30 seeds/s, 4.8 s per seed per thread)
progress: 22000 of 99399 seeds in 6658 s (3.30 seeds/s, 4.8 s per seed per thread)
progress: 22500 of 99399 seeds in 6807 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 23000 of 99399 seeds in 6957 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 23500 of 99399 seeds in 7105 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 24000 of 99399 seeds in 7257 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 24500 of 99399 seeds in 7404 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 25000 of 99399 seeds in 7553 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 25500 of 99399 seeds in 7702 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 26000 of 99399 seeds in 7845 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 26500 of 99399 seeds in 7995 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 27000 of 99399 seeds in 8143 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 27500 of 99399 seeds in 8292 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 28000 of 99399 seeds in 8442 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 28500 of 99399 seeds in 8590 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 29000 of 99399 seeds in 8737 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 29500 of 99399 seeds in 8885 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 30000 of 99399 seeds in 9034 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 30500 of 99399 seeds in 9182 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 31000 of 99399 seeds in 9330 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 31500 of 99399 seeds in 9480 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 32000 of 99399 seeds in 9628 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 32500 of 99399 seeds in 9778 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 33000 of 99399 seeds in 9927 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 33500 of 99399 seeds in 10073 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 34000 of 99399 seeds in 10220 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 34500 of 99399 seeds in 10370 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 35000 of 99399 seeds in 10518 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 35500 of 99399 seeds in 10666 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 36000 of 99399 seeds in 10815 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 36500 of 99399 seeds in 10964 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 37000 of 99399 seeds in 11113 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 37500 of 99399 seeds in 11262 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 38000 of 99399 seeds in 11410 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 38500 of 99399 seeds in 11560 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 39000 of 99399 seeds in 11708 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 39500 of 99399 seeds in 11858 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 40000 of 99399 seeds in 12008 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 40500 of 99399 seeds in 12157 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 41000 of 99399 seeds in 12306 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 41500 of 99399 seeds in 12456 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 42000 of 99399 seeds in 12606 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 42500 of 99399 seeds in 12754 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 43000 of 99399 seeds in 12903 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 43500 of 99399 seeds in 13052 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 44000 of 99399 seeds in 13202 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 44500 of 99399 seeds in 13351 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 45000 of 99399 seeds in 13502 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 45500 of 99399 seeds in 13651 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 46000 of 99399 seeds in 13799 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 46500 of 99399 seeds in 13948 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 47000 of 99399 seeds in 14099 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 47500 of 99399 seeds in 14247 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 48000 of 99399 seeds in 14397 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 48500 of 99399 seeds in 14546 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 49000 of 99399 seeds in 14694 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 49500 of 99399 seeds in 14842 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 50000 of 99399 seeds in 14992 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 50500 of 99399 seeds in 15141 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 51000 of 99399 seeds in 15293 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 51500 of 99399 seeds in 15440 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 52000 of 99399 seeds in 15590 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 52500 of 99399 seeds in 15741 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 53000 of 99399 seeds in 15892 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 53500 of 99399 seeds in 16041 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 54000 of 99399 seeds in 16191 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 54500 of 99399 seeds in 16342 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 55000 of 99399 seeds in 16492 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 55500 of 99399 seeds in 16642 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 56000 of 99399 seeds in 16787 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 56500 of 99399 seeds in 16934 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 57000 of 99399 seeds in 17079 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 57500 of 99399 seeds in 17229 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 58000 of 99399 seeds in 17378 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 58500 of 99399 seeds in 17528 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 59000 of 99399 seeds in 17677 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 59500 of 99399 seeds in 17826 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 60000 of 99399 seeds in 17976 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 60500 of 99399 seeds in 18125 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 61000 of 99399 seeds in 18275 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 61500 of 99399 seeds in 18425 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 62000 of 99399 seeds in 18572 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 62500 of 99399 seeds in 18722 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 63000 of 99399 seeds in 18871 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 63500 of 99399 seeds in 19019 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 64000 of 99399 seeds in 19169 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 64500 of 99399 seeds in 19317 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 65000 of 99399 seeds in 19466 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 65500 of 99399 seeds in 19615 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 66000 of 99399 seeds in 19763 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 66500 of 99399 seeds in 19911 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 67000 of 99399 seeds in 20062 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 67500 of 99399 seeds in 20212 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 68000 of 99399 seeds in 20361 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 68500 of 99399 seeds in 20509 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 69000 of 99399 seeds in 20659 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 69500 of 99399 seeds in 20810 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 70000 of 99399 seeds in 20959 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 70500 of 99399 seeds in 21109 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 71000 of 99399 seeds in 21258 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 71500 of 99399 seeds in 21407 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 72000 of 99399 seeds in 21556 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 72500 of 99399 seeds in 21707 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 73000 of 99399 seeds in 21858 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 73500 of 99399 seeds in 22009 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 74000 of 99399 seeds in 22159 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 74500 of 99399 seeds in 22311 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 75000 of 99399 seeds in 22460 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 75500 of 99399 seeds in 22609 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 76000 of 99399 seeds in 22758 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 76500 of 99399 seeds in 22907 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 77000 of 99399 seeds in 23057 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 77500 of 99399 seeds in 23206 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 78000 of 99399 seeds in 23356 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 78500 of 99399 seeds in 23504 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 79000 of 99399 seeds in 23631 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 79500 of 99399 seeds in 23742 s (3.35 seeds/s, 4.8 s per seed per thread)
progress: 80000 of 99399 seeds in 23853 s (3.35 seeds/s, 4.8 s per seed per thread)
progress: 80500 of 99399 seeds in 23963 s (3.36 seeds/s, 4.8 s per seed per thread)
progress: 81000 of 99399 seeds in 24075 s (3.36 seeds/s, 4.8 s per seed per thread)
progress: 81500 of 99399 seeds in 24186 s (3.37 seeds/s, 4.7 s per seed per thread)
progress: 82000 of 99399 seeds in 24294 s (3.38 seeds/s, 4.7 s per seed per thread)
progress: 82500 of 99399 seeds in 24399 s (3.38 seeds/s, 4.7 s per seed per thread)
progress: 83000 of 99399 seeds in 24508 s (3.39 seeds/s, 4.7 s per seed per thread)
progress: 83500 of 99399 seeds in 24618 s (3.39 seeds/s, 4.7 s per seed per thread)
progress: 84000 of 99399 seeds in 24731 s (3.40 seeds/s, 4.7 s per seed per thread)
progress: 84500 of 99399 seeds in 24842 s (3.40 seeds/s, 4.7 s per seed per thread)
progress: 85000 of 99399 seeds in 24953 s (3.41 seeds/s, 4.7 s per seed per thread)
progress: 85500 of 99399 seeds in 25041 s (3.41 seeds/s, 4.7 s per seed per thread)
progress: 86000 of 99399 seeds in 25112 s (3.42 seeds/s, 4.7 s per seed per thread)
progress: 86500 of 99399 seeds in 25183 s (3.43 seeds/s, 4.7 s per seed per thread)
progress: 87000 of 99399 seeds in 25253 s (3.45 seeds/s, 4.6 s per seed per thread)
progress: 87500 of 99399 seeds in 25324 s (3.46 seeds/s, 4.6 s per seed per thread)
progress: 88000 of 99399 seeds in 25395 s (3.47 seeds/s, 4.6 s per seed per thread)
progress: 88500 of 99399 seeds in 25466 s (3.48 seeds/s, 4.6 s per seed per thread)
progress: 89000 of 99399 seeds in 25537 s (3.49 seeds/s, 4.6 s per seed per thread)
progress: 89500 of 99399 seeds in 25608 s (3.50 seeds/s, 4.6 s per seed per thread)
progress: 90000 of 99399 seeds in 25678 s (3.50 seeds/s, 4.6 s per seed per thread)
progress: 90500 of 99399 seeds in 25749 s (3.51 seeds/s, 4.6 s per seed per thread)
progress: 91000 of 99399 seeds in 25820 s (3.52 seeds/s, 4.5 s per seed per thread)
progress: 91500 of 99399 seeds in 25890 s (3.53 seeds/s, 4.5 s per seed per thread)
progress: 92000 of 99399 seeds in 25961 s (3.54 seeds/s, 4.5 s per seed per thread)
progress: 92500 of 99399 seeds in 26031 s (3.55 seeds/s, 4.5 s per seed per thread)
progress: 93000 of 99399 seeds in 26101 s (3.56 seeds/s, 4.5 s per seed per thread)
progress: 93500 of 99399 seeds in 26173 s (3.57 seeds/s, 4.5 s per seed per thread)
progress: 94000 of 99399 seeds in 26243 s (3.58 seeds/s, 4.5 s per seed per thread)
progress: 94500 of 99399 seeds in 26314 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 95000 of 99399 seeds in 26385 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 95500 of 99399 seeds in 26455 s (3.61 seeds/s, 4.4 s per seed per thread)
progress: 96000 of 99399 seeds in 26526 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 96500 of 99399 seeds in 26597 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 97000 of 99399 seeds in 26667 s (3.64 seeds/s, 4.4 s per seed per thread)
progress: 97500 of 99399 seeds in 26738 s (3.65 seeds/s, 4.4 s per seed per thread)
progress: 98000 of 99399 seeds in 26808 s (3.66 seeds/s, 4.4 s per seed per thread)
progress: 98500 of 99399 seeds in 26878 s (3.66 seeds/s, 4.4 s per seed per thread)
progress: 99000 of 99399 seeds in 26950 s (3.67 seeds/s, 4.4 s per seed per thread)
swept 99399 seeds in 27005.6 s (3.68 seeds/s, 4.3 s per seed per thread); attempts mean 2.109 max 30; attempt histogram 0..10,11+ [31985, 21577, 14716, 10047, 6730, 4635, 3151, 2099, 1438, 1012, 670, 1339]; last-resort programs 0
per-site distinct-index ratio at 256 units: mean 0.9998 min 0.9885; 0 of 99399 below the 0.98 floor at this sample size (the floor is enforced at 2^20)
Q5 structure over accepted programs: 82982 of 99399 with a lossy (or/mul/mulhi) last write to an output register; 0 with under 8 registers written; or per program mean 2.473
lowest per-site distinct-index ratio (headroom over the floor, Q5; the live hot-set candidates for Q1):
seed 460489 id 677ddda5b220d522 attempt 0 min_ratio 0.9885 (site 8) lossy_last 0 or 2 mul 5 mulhi 5 regs 8
seed 461929 id 37d7f81c3d4c60f0 attempt 10 min_ratio 0.9901 (site 0) lossy_last 2 or 2 mul 7 mulhi 1 regs 8
seed 433176 id 9a839003ba8577dd attempt 6 min_ratio 0.9932 (site 7) lossy_last 2 or 6 mul 2 mulhi 2 regs 8
seed 455266 id 54ddacc443198b7d attempt 3 min_ratio 0.9940 (site 9) lossy_last 3 or 4 mul 4 mulhi 2 regs 8
seed 476012 id 75e97f193c845974 attempt 2 min_ratio 0.9950 (site 7) lossy_last 1 or 2 mul 3 mulhi 3 regs 8
seed 433530 id a55031840bff0058 attempt 0 min_ratio 0.9958 (site 9) lossy_last 2 or 6 mul 6 mulhi 1 regs 8
seed 457899 id fdca9161013b4cf9 attempt 1 min_ratio 0.9959 (site 14) lossy_last 1 or 2 mul 9 mulhi 2 regs 8
seed 480232 id 7275c8f9cd812a3b attempt 1 min_ratio 0.9959 (site 13) lossy_last 1 or 1 mul 4 mulhi 3 regs 8
seed 423369 id d49ac9b330ac1b12 attempt 3 min_ratio 0.9959 (site 0) lossy_last 2 or 1 mul 7 mulhi 5 regs 8
seed 450485 id 555bf30e6b985b99 attempt 2 min_ratio 0.9960 (site 14) lossy_last 4 or 4 mul 3 mulhi 5 regs 8
seed 476181 id cca043e31395ce51 attempt 2 min_ratio 0.9960 (site 0) lossy_last 1 or 6 mul 3 mulhi 5 regs 8
seed 415843 id 6aacd2a9efd85757 attempt 2 min_ratio 0.9960 (site 2) lossy_last 0 or 4 mul 3 mulhi 3 regs 8
seed 414948 id b3c6cc2752aa12d8 attempt 1 min_ratio 0.9960 (site 11) lossy_last 2 or 4 mul 3 mulhi 2 regs 8
seed 409436 id b6bf44a3a6b687fb attempt 1 min_ratio 0.9960 (site 9) lossy_last 2 or 1 mul 4 mulhi 5 regs 8
seed 474168 id ce5d221b837eeced attempt 3 min_ratio 0.9960 (site 14) lossy_last 2 or 3 mul 3 mulhi 6 regs 8
seed 472840 id 49ee90a2296fa7c6 attempt 6 min_ratio 0.9960 (site 2) lossy_last 3 or 1 mul 7 mulhi 3 regs 8
seed 423358 id 6bab0d6b54a4fdaa attempt 8 min_ratio 0.9960 (site 13) lossy_last 1 or 2 mul 4 mulhi 3 regs 8
seed 464061 id c63850d5222b9698 attempt 1 min_ratio 0.9960 (site 13) lossy_last 2 or 3 mul 4 mulhi 5 regs 8
seed 442380 id f74bc0b7f4f20b98 attempt 0 min_ratio 0.9960 (site 10) lossy_last 3 or 3 mul 5 mulhi 5 regs 8
seed 496523 id 62a081a76c8fc9f2 attempt 0 min_ratio 0.9961 (site 0) lossy_last 3 or 3 mul 3 mulhi 4 regs 8
wrote /srv/builds/_adv-adv-accept/sweep-s04b.txt
sweep DONE
lease: released 16 pool cores after 28921 s, exit 0

View file

@ -0,0 +1,96 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 16 pool cores (71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86, waited 495 s, class adv): adv-accept sweep-s05b
adv-accept sweep: seeds 502127..600002 (97875), 16 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 97875 seeds in 152 s (3.29 seeds/s, 4.9 s per seed per thread)
progress: 1000 of 97875 seeds in 302 s (3.31 seeds/s, 4.8 s per seed per thread)
progress: 1500 of 97875 seeds in 449 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 2000 of 97875 seeds in 599 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 2500 of 97875 seeds in 696 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 3000 of 97875 seeds in 782 s (3.84 seeds/s, 4.2 s per seed per thread)
progress: 3500 of 97875 seeds in 869 s (4.03 seeds/s, 4.0 s per seed per thread)
progress: 4000 of 97875 seeds in 955 s (4.19 seeds/s, 3.8 s per seed per thread)
progress: 4500 of 97875 seeds in 1045 s (4.30 seeds/s, 3.7 s per seed per thread)
progress: 5000 of 97875 seeds in 1134 s (4.41 seeds/s, 3.6 s per seed per thread)
progress: 5500 of 97875 seeds in 1248 s (4.41 seeds/s, 3.6 s per seed per thread)
progress: 6000 of 97875 seeds in 1398 s (4.29 seeds/s, 3.7 s per seed per thread)
progress: 6500 of 97875 seeds in 1548 s (4.20 seeds/s, 3.8 s per seed per thread)
progress: 7000 of 97875 seeds in 1697 s (4.12 seeds/s, 3.9 s per seed per thread)
progress: 7500 of 97875 seeds in 1845 s (4.06 seeds/s, 3.9 s per seed per thread)
progress: 8000 of 97875 seeds in 1995 s (4.01 seeds/s, 4.0 s per seed per thread)
progress: 8500 of 97875 seeds in 2144 s (3.96 seeds/s, 4.0 s per seed per thread)
progress: 9000 of 97875 seeds in 2292 s (3.93 seeds/s, 4.1 s per seed per thread)
progress: 9500 of 97875 seeds in 2441 s (3.89 seeds/s, 4.1 s per seed per thread)
progress: 10000 of 97875 seeds in 2589 s (3.86 seeds/s, 4.1 s per seed per thread)
progress: 10500 of 97875 seeds in 2734 s (3.84 seeds/s, 4.2 s per seed per thread)
progress: 11000 of 97875 seeds in 2880 s (3.82 seeds/s, 4.2 s per seed per thread)
progress: 11500 of 97875 seeds in 3025 s (3.80 seeds/s, 4.2 s per seed per thread)
progress: 12000 of 97875 seeds in 3173 s (3.78 seeds/s, 4.2 s per seed per thread)
progress: 12500 of 97875 seeds in 3326 s (3.76 seeds/s, 4.3 s per seed per thread)
progress: 13000 of 97875 seeds in 3473 s (3.74 seeds/s, 4.3 s per seed per thread)
progress: 13500 of 97875 seeds in 3621 s (3.73 seeds/s, 4.3 s per seed per thread)
progress: 14000 of 97875 seeds in 3769 s (3.71 seeds/s, 4.3 s per seed per thread)
progress: 14500 of 97875 seeds in 3917 s (3.70 seeds/s, 4.3 s per seed per thread)
progress: 15000 of 97875 seeds in 4065 s (3.69 seeds/s, 4.3 s per seed per thread)
progress: 15500 of 97875 seeds in 4213 s (3.68 seeds/s, 4.3 s per seed per thread)
progress: 16000 of 97875 seeds in 4358 s (3.67 seeds/s, 4.4 s per seed per thread)
progress: 16500 of 97875 seeds in 4502 s (3.66 seeds/s, 4.4 s per seed per thread)
progress: 17000 of 97875 seeds in 4645 s (3.66 seeds/s, 4.4 s per seed per thread)
progress: 17500 of 97875 seeds in 4793 s (3.65 seeds/s, 4.4 s per seed per thread)
progress: 18000 of 97875 seeds in 4941 s (3.64 seeds/s, 4.4 s per seed per thread)
progress: 18500 of 97875 seeds in 5088 s (3.64 seeds/s, 4.4 s per seed per thread)
progress: 19000 of 97875 seeds in 5238 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 19500 of 97875 seeds in 5386 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 20000 of 97875 seeds in 5532 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 20500 of 97875 seeds in 5681 s (3.61 seeds/s, 4.4 s per seed per thread)
progress: 21000 of 97875 seeds in 5830 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 21500 of 97875 seeds in 5980 s (3.60 seeds/s, 4.5 s per seed per thread)
progress: 22000 of 97875 seeds in 6129 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 22500 of 97875 seeds in 6280 s (3.58 seeds/s, 4.5 s per seed per thread)
progress: 23000 of 97875 seeds in 6429 s (3.58 seeds/s, 4.5 s per seed per thread)
progress: 23500 of 97875 seeds in 6576 s (3.57 seeds/s, 4.5 s per seed per thread)
progress: 24000 of 97875 seeds in 6728 s (3.57 seeds/s, 4.5 s per seed per thread)
progress: 24500 of 97875 seeds in 6877 s (3.56 seeds/s, 4.5 s per seed per thread)
progress: 25000 of 97875 seeds in 7022 s (3.56 seeds/s, 4.5 s per seed per thread)
progress: 25500 of 97875 seeds in 7169 s (3.56 seeds/s, 4.5 s per seed per thread)
progress: 26000 of 97875 seeds in 7319 s (3.55 seeds/s, 4.5 s per seed per thread)
progress: 26500 of 97875 seeds in 7470 s (3.55 seeds/s, 4.5 s per seed per thread)
progress: 27000 of 97875 seeds in 7616 s (3.55 seeds/s, 4.5 s per seed per thread)
progress: 27500 of 97875 seeds in 7746 s (3.55 seeds/s, 4.5 s per seed per thread)
progress: 28000 of 97875 seeds in 7870 s (3.56 seeds/s, 4.5 s per seed per thread)
progress: 28500 of 97875 seeds in 8001 s (3.56 seeds/s, 4.5 s per seed per thread)
progress: 29000 of 97875 seeds in 8131 s (3.57 seeds/s, 4.5 s per seed per thread)
progress: 29500 of 97875 seeds in 8259 s (3.57 seeds/s, 4.5 s per seed per thread)
progress: 30000 of 97875 seeds in 8388 s (3.58 seeds/s, 4.5 s per seed per thread)
progress: 30500 of 97875 seeds in 8515 s (3.58 seeds/s, 4.5 s per seed per thread)
progress: 31000 of 97875 seeds in 8644 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 31500 of 97875 seeds in 8767 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 32000 of 97875 seeds in 8892 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 32500 of 97875 seeds in 9017 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 33000 of 97875 seeds in 9140 s (3.61 seeds/s, 4.4 s per seed per thread)
progress: 33500 of 97875 seeds in 9264 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 34000 of 97875 seeds in 9392 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 34500 of 97875 seeds in 9521 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 35000 of 97875 seeds in 9645 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 35500 of 97875 seeds in 9771 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 36000 of 97875 seeds in 9904 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 36500 of 97875 seeds in 10053 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 37000 of 97875 seeds in 10203 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 37500 of 97875 seeds in 10351 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 38000 of 97875 seeds in 10500 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 38500 of 97875 seeds in 10649 s (3.62 seeds/s, 4.4 s per seed per thread)
progress: 39000 of 97875 seeds in 10798 s (3.61 seeds/s, 4.4 s per seed per thread)
progress: 39500 of 97875 seeds in 10948 s (3.61 seeds/s, 4.4 s per seed per thread)
progress: 40000 of 97875 seeds in 11091 s (3.61 seeds/s, 4.4 s per seed per thread)
progress: 40500 of 97875 seeds in 11235 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 41000 of 97875 seeds in 11386 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 41500 of 97875 seeds in 11533 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 42000 of 97875 seeds in 11680 s (3.60 seeds/s, 4.4 s per seed per thread)
progress: 42500 of 97875 seeds in 11828 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 43000 of 97875 seeds in 11971 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 43500 of 97875 seeds in 12116 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 44000 of 97875 seeds in 12260 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 44500 of 97875 seeds in 12406 s (3.59 seeds/s, 4.5 s per seed per thread)
progress: 45000 of 97875 seeds in 12554 s (3.58 seeds/s, 4.5 s per seed per thread)
progress: 45500 of 97875 seeds in 12699 s (3.58 seeds/s, 4.5 s per seed per thread)
progress: 46000 of 97875 seeds in 12845 s (3.58 seeds/s, 4.5 s per seed per thread)
lease: released 16 pool cores after 13476 s, exit 143

View file

@ -0,0 +1,132 @@
lease: 1 of 16 pool cores free (88 leased); waiting
lease: holding 17 pool cores (62,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86, waited 577 s, class adv): adv-accept sweep-s05c
adv-accept sweep: seeds 548586..600002 (51416), 17 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 51416 seeds in 142 s (3.52 seeds/s, 4.8 s per seed per thread)
progress: 1000 of 51416 seeds in 284 s (3.52 seeds/s, 4.8 s per seed per thread)
progress: 1500 of 51416 seeds in 426 s (3.52 seeds/s, 4.8 s per seed per thread)
progress: 2000 of 51416 seeds in 568 s (3.52 seeds/s, 4.8 s per seed per thread)
progress: 2500 of 51416 seeds in 706 s (3.54 seeds/s, 4.8 s per seed per thread)
progress: 3000 of 51416 seeds in 847 s (3.54 seeds/s, 4.8 s per seed per thread)
progress: 3500 of 51416 seeds in 988 s (3.54 seeds/s, 4.8 s per seed per thread)
progress: 4000 of 51416 seeds in 1128 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 4500 of 51416 seeds in 1269 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 5000 of 51416 seeds in 1410 s (3.54 seeds/s, 4.8 s per seed per thread)
progress: 5500 of 51416 seeds in 1551 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 6000 of 51416 seeds in 1691 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 6500 of 51416 seeds in 1831 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 7000 of 51416 seeds in 1972 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 7500 of 51416 seeds in 2113 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 8000 of 51416 seeds in 2254 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 8500 of 51416 seeds in 2396 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 9000 of 51416 seeds in 2531 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 9500 of 51416 seeds in 2673 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 10000 of 51416 seeds in 2816 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 10500 of 51416 seeds in 2957 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 11000 of 51416 seeds in 3099 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 11500 of 51416 seeds in 3239 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 12000 of 51416 seeds in 3381 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 12500 of 51416 seeds in 3522 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 13000 of 51416 seeds in 3662 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 13500 of 51416 seeds in 3802 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 14000 of 51416 seeds in 3942 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 14500 of 51416 seeds in 4085 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 15000 of 51416 seeds in 4227 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 15500 of 51416 seeds in 4369 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 16000 of 51416 seeds in 4511 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 16500 of 51416 seeds in 4652 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 17000 of 51416 seeds in 4793 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 17500 of 51416 seeds in 4935 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 18000 of 51416 seeds in 5074 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 18500 of 51416 seeds in 5215 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 19000 of 51416 seeds in 5351 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 19500 of 51416 seeds in 5492 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 20000 of 51416 seeds in 5634 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 20500 of 51416 seeds in 5774 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 21000 of 51416 seeds in 5914 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 21500 of 51416 seeds in 6054 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 22000 of 51416 seeds in 6195 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 22500 of 51416 seeds in 6333 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 23000 of 51416 seeds in 6473 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 23500 of 51416 seeds in 6613 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 24000 of 51416 seeds in 6753 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 24500 of 51416 seeds in 6896 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 25000 of 51416 seeds in 7034 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 25500 of 51416 seeds in 7175 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 26000 of 51416 seeds in 7318 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 26500 of 51416 seeds in 7457 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 27000 of 51416 seeds in 7597 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 27500 of 51416 seeds in 7737 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 28000 of 51416 seeds in 7877 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 28500 of 51416 seeds in 8017 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 29000 of 51416 seeds in 8160 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 29500 of 51416 seeds in 8299 s (3.55 seeds/s, 4.8 s per seed per thread)
progress: 30000 of 51416 seeds in 8439 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 30500 of 51416 seeds in 8579 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 31000 of 51416 seeds in 8719 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 31500 of 51416 seeds in 8860 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 32000 of 51416 seeds in 9001 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 32500 of 51416 seeds in 9141 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 33000 of 51416 seeds in 9281 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 33500 of 51416 seeds in 9421 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 34000 of 51416 seeds in 9560 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 34500 of 51416 seeds in 9703 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 35000 of 51416 seeds in 9844 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 35500 of 51416 seeds in 9983 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 36000 of 51416 seeds in 10124 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 36500 of 51416 seeds in 10265 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 37000 of 51416 seeds in 10406 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 37500 of 51416 seeds in 10546 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 38000 of 51416 seeds in 10688 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 38500 of 51416 seeds in 10829 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 39000 of 51416 seeds in 10969 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 39500 of 51416 seeds in 11108 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 40000 of 51416 seeds in 11251 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 40500 of 51416 seeds in 11391 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 41000 of 51416 seeds in 11532 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 41500 of 51416 seeds in 11672 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 42000 of 51416 seeds in 11813 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 42500 of 51416 seeds in 11954 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 43000 of 51416 seeds in 12095 s (3.56 seeds/s, 4.8 s per seed per thread)
progress: 43500 of 51416 seeds in 12194 s (3.57 seeds/s, 4.8 s per seed per thread)
progress: 44000 of 51416 seeds in 12289 s (3.58 seeds/s, 4.7 s per seed per thread)
progress: 44500 of 51416 seeds in 12385 s (3.59 seeds/s, 4.7 s per seed per thread)
progress: 45000 of 51416 seeds in 12479 s (3.61 seeds/s, 4.7 s per seed per thread)
progress: 45500 of 51416 seeds in 12575 s (3.62 seeds/s, 4.7 s per seed per thread)
progress: 46000 of 51416 seeds in 12670 s (3.63 seeds/s, 4.7 s per seed per thread)
progress: 46500 of 51416 seeds in 12766 s (3.64 seeds/s, 4.7 s per seed per thread)
progress: 47000 of 51416 seeds in 12862 s (3.65 seeds/s, 4.7 s per seed per thread)
progress: 47500 of 51416 seeds in 12956 s (3.67 seeds/s, 4.6 s per seed per thread)
progress: 48000 of 51416 seeds in 13051 s (3.68 seeds/s, 4.6 s per seed per thread)
progress: 48500 of 51416 seeds in 13146 s (3.69 seeds/s, 4.6 s per seed per thread)
progress: 49000 of 51416 seeds in 13242 s (3.70 seeds/s, 4.6 s per seed per thread)
progress: 49500 of 51416 seeds in 13338 s (3.71 seeds/s, 4.6 s per seed per thread)
progress: 50000 of 51416 seeds in 13434 s (3.72 seeds/s, 4.6 s per seed per thread)
progress: 50500 of 51416 seeds in 13528 s (3.73 seeds/s, 4.6 s per seed per thread)
progress: 51000 of 51416 seeds in 13599 s (3.75 seeds/s, 4.5 s per seed per thread)
swept 51416 seeds in 13655.6 s (3.77 seeds/s, 4.5 s per seed per thread); attempts mean 2.140 max 30; attempt histogram 0..10,11+ [16347, 11213, 7597, 5073, 3592, 2438, 1677, 1133, 755, 506, 324, 761]; last-resort programs 0
per-site distinct-index ratio at 256 units: mean 0.9998 min 0.9886; 0 of 51416 below the 0.98 floor at this sample size (the floor is enforced at 2^20)
Q5 structure over accepted programs: 42997 of 51416 with a lossy (or/mul/mulhi) last write to an output register; 0 with under 8 registers written; or per program mean 2.480
lowest per-site distinct-index ratio (headroom over the floor, Q5; the live hot-set candidates for Q1):
seed 593254 id 065244c2e0b14926 attempt 1 min_ratio 0.9886 (site 4) lossy_last 3 or 0 mul 5 mulhi 6 regs 8
seed 574564 id 5f91a5d15948f8e0 attempt 6 min_ratio 0.9894 (site 4) lossy_last 2 or 6 mul 2 mulhi 2 regs 8
seed 572072 id 6efacda35d03d2e7 attempt 1 min_ratio 0.9907 (site 3) lossy_last 3 or 1 mul 8 mulhi 1 regs 8
seed 560328 id df102b84be1c0020 attempt 2 min_ratio 0.9959 (site 6) lossy_last 2 or 4 mul 6 mulhi 3 regs 8
seed 589193 id e2e1f62322367d46 attempt 0 min_ratio 0.9959 (site 14) lossy_last 0 or 4 mul 4 mulhi 4 regs 8
seed 571817 id 5b1654decd643d37 attempt 0 min_ratio 0.9959 (site 9) lossy_last 1 or 1 mul 7 mulhi 4 regs 8
seed 558478 id 14e48e5cc9b6d418 attempt 3 min_ratio 0.9959 (site 7) lossy_last 1 or 4 mul 5 mulhi 4 regs 8
seed 575408 id 534361aaa8f8f120 attempt 4 min_ratio 0.9959 (site 9) lossy_last 1 or 2 mul 6 mulhi 3 regs 8
seed 586716 id a39ff8eae066dd82 attempt 9 min_ratio 0.9959 (site 3) lossy_last 2 or 3 mul 4 mulhi 4 regs 8
seed 596683 id d364613d0f0914b9 attempt 8 min_ratio 0.9960 (site 3) lossy_last 3 or 3 mul 2 mulhi 3 regs 8
seed 594747 id f60dd3978c41b7df attempt 7 min_ratio 0.9960 (site 3) lossy_last 2 or 1 mul 5 mulhi 4 regs 8
seed 552289 id 4da092876696bbec attempt 0 min_ratio 0.9960 (site 7) lossy_last 1 or 1 mul 4 mulhi 2 regs 8
seed 561183 id c18cd8bc52bc1dec attempt 3 min_ratio 0.9960 (site 8) lossy_last 1 or 0 mul 5 mulhi 1 regs 8
seed 571351 id 9355aa0404c8e661 attempt 5 min_ratio 0.9966 (site 12) lossy_last 1 or 4 mul 7 mulhi 2 regs 8
seed 559899 id 6645b089fb296d61 attempt 1 min_ratio 0.9967 (site 4) lossy_last 2 or 3 mul 5 mulhi 5 regs 8
seed 574759 id 4250edc3e78b7b4f attempt 2 min_ratio 0.9968 (site 2) lossy_last 1 or 2 mul 8 mulhi 3 regs 8
seed 549144 id 808e70578157da24 attempt 1 min_ratio 0.9969 (site 3) lossy_last 4 or 1 mul 5 mulhi 5 regs 8
seed 578109 id bd2b25d2d6b974a1 attempt 1 min_ratio 0.9971 (site 6) lossy_last 1 or 4 mul 10 mulhi 5 regs 8
seed 590735 id f10f57a4950c56f4 attempt 1 min_ratio 0.9971 (site 7) lossy_last 2 or 1 mul 5 mulhi 5 regs 8
seed 560372 id f2e91c482e815bf8 attempt 0 min_ratio 0.9971 (site 11) lossy_last 1 or 3 mul 4 mulhi 6 regs 8
wrote /srv/builds/_adv-adv-accept/sweep-s05c.txt
sweep DONE
lease: released 17 pool cores after 14233 s, exit 0

View file

@ -0,0 +1,124 @@
lease: 0 of 16 pool cores free (88 leased), a higher class waits ahead; waiting
lease: holding 32 pool cores (24,25,26,27,28,29,30,31,32,33,37,38,39,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61, waited 993 s, class adv): adv-accept sweep-s06c
adv-accept sweep: seeds 652538..700002 (47464), 32 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 47464 seeds in 66 s (7.63 seeds/s, 4.2 s per seed per thread)
progress: 1000 of 47464 seeds in 127 s (7.87 seeds/s, 4.1 s per seed per thread)
progress: 1500 of 47464 seeds in 192 s (7.83 seeds/s, 4.1 s per seed per thread)
progress: 2000 of 47464 seeds in 259 s (7.73 seeds/s, 4.1 s per seed per thread)
progress: 2500 of 47464 seeds in 331 s (7.56 seeds/s, 4.2 s per seed per thread)
progress: 3000 of 47464 seeds in 396 s (7.58 seeds/s, 4.2 s per seed per thread)
progress: 3500 of 47464 seeds in 458 s (7.65 seeds/s, 4.2 s per seed per thread)
progress: 4000 of 47464 seeds in 520 s (7.69 seeds/s, 4.2 s per seed per thread)
progress: 4500 of 47464 seeds in 583 s (7.72 seeds/s, 4.1 s per seed per thread)
progress: 5000 of 47464 seeds in 648 s (7.71 seeds/s, 4.1 s per seed per thread)
progress: 5500 of 47464 seeds in 716 s (7.68 seeds/s, 4.2 s per seed per thread)
progress: 6000 of 47464 seeds in 781 s (7.68 seeds/s, 4.2 s per seed per thread)
progress: 6500 of 47464 seeds in 844 s (7.70 seeds/s, 4.2 s per seed per thread)
progress: 7000 of 47464 seeds in 906 s (7.73 seeds/s, 4.1 s per seed per thread)
progress: 7500 of 47464 seeds in 967 s (7.76 seeds/s, 4.1 s per seed per thread)
progress: 8000 of 47464 seeds in 1030 s (7.77 seeds/s, 4.1 s per seed per thread)
progress: 8500 of 47464 seeds in 1099 s (7.73 seeds/s, 4.1 s per seed per thread)
progress: 9000 of 47464 seeds in 1171 s (7.69 seeds/s, 4.2 s per seed per thread)
progress: 9500 of 47464 seeds in 1238 s (7.67 seeds/s, 4.2 s per seed per thread)
progress: 10000 of 47464 seeds in 1304 s (7.67 seeds/s, 4.2 s per seed per thread)
progress: 10500 of 47464 seeds in 1370 s (7.67 seeds/s, 4.2 s per seed per thread)
progress: 11000 of 47464 seeds in 1434 s (7.67 seeds/s, 4.2 s per seed per thread)
progress: 11500 of 47464 seeds in 1502 s (7.66 seeds/s, 4.2 s per seed per thread)
progress: 12000 of 47464 seeds in 1573 s (7.63 seeds/s, 4.2 s per seed per thread)
progress: 12500 of 47464 seeds in 1640 s (7.62 seeds/s, 4.2 s per seed per thread)
progress: 13000 of 47464 seeds in 1709 s (7.61 seeds/s, 4.2 s per seed per thread)
progress: 13500 of 47464 seeds in 1780 s (7.59 seeds/s, 4.2 s per seed per thread)
progress: 14000 of 47464 seeds in 1851 s (7.56 seeds/s, 4.2 s per seed per thread)
progress: 14500 of 47464 seeds in 1920 s (7.55 seeds/s, 4.2 s per seed per thread)
progress: 15000 of 47464 seeds in 1991 s (7.53 seeds/s, 4.2 s per seed per thread)
progress: 15500 of 47464 seeds in 2073 s (7.48 seeds/s, 4.3 s per seed per thread)
progress: 16000 of 47464 seeds in 2143 s (7.47 seeds/s, 4.3 s per seed per thread)
progress: 16500 of 47464 seeds in 2212 s (7.46 seeds/s, 4.3 s per seed per thread)
progress: 17000 of 47464 seeds in 2280 s (7.46 seeds/s, 4.3 s per seed per thread)
progress: 17500 of 47464 seeds in 2347 s (7.46 seeds/s, 4.3 s per seed per thread)
progress: 18000 of 47464 seeds in 2418 s (7.44 seeds/s, 4.3 s per seed per thread)
progress: 18500 of 47464 seeds in 2485 s (7.44 seeds/s, 4.3 s per seed per thread)
progress: 19000 of 47464 seeds in 2557 s (7.43 seeds/s, 4.3 s per seed per thread)
progress: 19500 of 47464 seeds in 2628 s (7.42 seeds/s, 4.3 s per seed per thread)
progress: 20000 of 47464 seeds in 2696 s (7.42 seeds/s, 4.3 s per seed per thread)
progress: 20500 of 47464 seeds in 2764 s (7.42 seeds/s, 4.3 s per seed per thread)
progress: 21000 of 47464 seeds in 2833 s (7.41 seeds/s, 4.3 s per seed per thread)
progress: 21500 of 47464 seeds in 2902 s (7.41 seeds/s, 4.3 s per seed per thread)
progress: 22000 of 47464 seeds in 2970 s (7.41 seeds/s, 4.3 s per seed per thread)
progress: 22500 of 47464 seeds in 3039 s (7.40 seeds/s, 4.3 s per seed per thread)
progress: 23000 of 47464 seeds in 3105 s (7.41 seeds/s, 4.3 s per seed per thread)
progress: 23500 of 47464 seeds in 3173 s (7.41 seeds/s, 4.3 s per seed per thread)
progress: 24000 of 47464 seeds in 3242 s (7.40 seeds/s, 4.3 s per seed per thread)
progress: 24500 of 47464 seeds in 3309 s (7.40 seeds/s, 4.3 s per seed per thread)
progress: 25000 of 47464 seeds in 3382 s (7.39 seeds/s, 4.3 s per seed per thread)
progress: 25500 of 47464 seeds in 3455 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 26000 of 47464 seeds in 3523 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 26500 of 47464 seeds in 3596 s (7.37 seeds/s, 4.3 s per seed per thread)
progress: 27000 of 47464 seeds in 3666 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 27500 of 47464 seeds in 3737 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 28000 of 47464 seeds in 3805 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 28500 of 47464 seeds in 3873 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 29000 of 47464 seeds in 3940 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 29500 of 47464 seeds in 4007 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 30000 of 47464 seeds in 4075 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 30500 of 47464 seeds in 4144 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 31000 of 47464 seeds in 4214 s (7.36 seeds/s, 4.4 s per seed per thread)
progress: 31500 of 47464 seeds in 4285 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 32000 of 47464 seeds in 4351 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 32500 of 47464 seeds in 4419 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 33000 of 47464 seeds in 4483 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 33500 of 47464 seeds in 4545 s (7.37 seeds/s, 4.3 s per seed per thread)
progress: 34000 of 47464 seeds in 4609 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 34500 of 47464 seeds in 4673 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 35000 of 47464 seeds in 4740 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 35500 of 47464 seeds in 4808 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 36000 of 47464 seeds in 4878 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 36500 of 47464 seeds in 4944 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 37000 of 47464 seeds in 5007 s (7.39 seeds/s, 4.3 s per seed per thread)
progress: 37500 of 47464 seeds in 5071 s (7.40 seeds/s, 4.3 s per seed per thread)
progress: 38000 of 47464 seeds in 5135 s (7.40 seeds/s, 4.3 s per seed per thread)
progress: 38500 of 47464 seeds in 5206 s (7.39 seeds/s, 4.3 s per seed per thread)
progress: 39000 of 47464 seeds in 5274 s (7.39 seeds/s, 4.3 s per seed per thread)
progress: 39500 of 47464 seeds in 5346 s (7.39 seeds/s, 4.3 s per seed per thread)
progress: 40000 of 47464 seeds in 5418 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 40500 of 47464 seeds in 5494 s (7.37 seeds/s, 4.3 s per seed per thread)
progress: 41000 of 47464 seeds in 5573 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 41500 of 47464 seeds in 5642 s (7.36 seeds/s, 4.4 s per seed per thread)
progress: 42000 of 47464 seeds in 5711 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 42500 of 47464 seeds in 5782 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 43000 of 47464 seeds in 5851 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 43500 of 47464 seeds in 5922 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 44000 of 47464 seeds in 5989 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 44500 of 47464 seeds in 6051 s (7.35 seeds/s, 4.4 s per seed per thread)
progress: 45000 of 47464 seeds in 6114 s (7.36 seeds/s, 4.3 s per seed per thread)
progress: 45500 of 47464 seeds in 6177 s (7.37 seeds/s, 4.3 s per seed per thread)
progress: 46000 of 47464 seeds in 6240 s (7.37 seeds/s, 4.3 s per seed per thread)
progress: 46500 of 47464 seeds in 6302 s (7.38 seeds/s, 4.3 s per seed per thread)
progress: 47000 of 47464 seeds in 6368 s (7.38 seeds/s, 4.3 s per seed per thread)
swept 47464 seeds in 6427.7 s (7.38 seeds/s, 4.3 s per seed per thread); attempts mean 2.129 max 31; attempt histogram 0..10,11+ [15226, 10409, 7039, 4638, 3216, 2182, 1528, 1039, 686, 455, 315, 731]; last-resort programs 0
per-site distinct-index ratio at 256 units: mean 0.9998 min 0.9810; 0 of 47464 below the 0.98 floor at this sample size (the floor is enforced at 2^20)
Q5 structure over accepted programs: 39712 of 47464 with a lossy (or/mul/mulhi) last write to an output register; 0 with under 8 registers written; or per program mean 2.476
lowest per-site distinct-index ratio (headroom over the floor, Q5; the live hot-set candidates for Q1):
seed 672527 id fd399b25cc8950b0 attempt 0 min_ratio 0.9810 (site 1) lossy_last 1 or 4 mul 9 mulhi 3 regs 8
seed 681453 id 3c914b1a86dd48f7 attempt 2 min_ratio 0.9903 (site 7) lossy_last 2 or 4 mul 3 mulhi 4 regs 8
seed 688006 id 64857af075936d7d attempt 6 min_ratio 0.9905 (site 12) lossy_last 1 or 5 mul 8 mulhi 1 regs 8
seed 674785 id 829c858e057cb88c attempt 5 min_ratio 0.9923 (site 15) lossy_last 0 or 6 mul 5 mulhi 0 regs 8
seed 685389 id 4f373304509d4c31 attempt 1 min_ratio 0.9937 (site 0) lossy_last 1 or 1 mul 4 mulhi 6 regs 8
seed 696237 id e00e3892db5472d9 attempt 7 min_ratio 0.9957 (site 9) lossy_last 2 or 3 mul 5 mulhi 5 regs 8
seed 676279 id f2c685ea67017b18 attempt 4 min_ratio 0.9959 (site 6) lossy_last 2 or 6 mul 9 mulhi 4 regs 8
seed 663056 id 83e67d19d37ed9b4 attempt 0 min_ratio 0.9959 (site 0) lossy_last 2 or 2 mul 9 mulhi 5 regs 8
seed 670623 id 3c4fb5df38f59f2f attempt 5 min_ratio 0.9959 (site 13) lossy_last 2 or 1 mul 9 mulhi 3 regs 8
seed 671214 id cee90022131a5abe attempt 1 min_ratio 0.9959 (site 1) lossy_last 1 or 3 mul 4 mulhi 8 regs 8
seed 690865 id d9ef43fe257893e7 attempt 0 min_ratio 0.9959 (site 8) lossy_last 2 or 1 mul 4 mulhi 6 regs 8
seed 680360 id 9faba875c7b0caea attempt 3 min_ratio 0.9959 (site 5) lossy_last 3 or 2 mul 5 mulhi 6 regs 8
seed 666899 id 7599b4d0a4eac309 attempt 3 min_ratio 0.9960 (site 15) lossy_last 2 or 3 mul 7 mulhi 9 regs 8
seed 680040 id 92ce94cfe6e9ac3b attempt 1 min_ratio 0.9960 (site 0) lossy_last 3 or 3 mul 7 mulhi 5 regs 8
seed 679952 id 40695f5f5135b2b8 attempt 1 min_ratio 0.9960 (site 0) lossy_last 2 or 3 mul 4 mulhi 3 regs 8
seed 679226 id 18c5e531bd851747 attempt 5 min_ratio 0.9960 (site 5) lossy_last 2 or 4 mul 1 mulhi 0 regs 8
seed 699546 id 47b25e8b360e2d53 attempt 0 min_ratio 0.9960 (site 6) lossy_last 1 or 2 mul 4 mulhi 2 regs 8
seed 698596 id 6c490f43d529fc0d attempt 2 min_ratio 0.9960 (site 7) lossy_last 1 or 5 mul 3 mulhi 6 regs 8
seed 693125 id 23220d98360577f6 attempt 0 min_ratio 0.9960 (site 0) lossy_last 3 or 1 mul 7 mulhi 2 regs 8
seed 669964 id e1ad7a218b386da5 attempt 6 min_ratio 0.9960 (site 9) lossy_last 1 or 3 mul 3 mulhi 7 regs 8
wrote /srv/builds/_adv-adv-accept/sweep-s06d.txt
sweep DONE
lease: released 32 pool cores after 7421 s, exit 0

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,2 @@
lease: 1 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased), a higher class waits ahead; waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,2 @@
lease: 1 of 16 pool cores free (87 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,19 @@
lease: holding 16 pool cores (63,64,65,66,67,68,69,70,87,88,89,90,91,92,93,94, waited 0 s, class adv): adv-accept sweep-s09b
adv-accept sweep: seeds 911979..1000002 (88023), 16 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 88023 seeds in 151 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 1000 of 88023 seeds in 302 s (3.32 seeds/s, 4.8 s per seed per thread)
progress: 1500 of 88023 seeds in 450 s (3.33 seeds/s, 4.8 s per seed per thread)
progress: 2000 of 88023 seeds in 599 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 2500 of 88023 seeds in 748 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 3000 of 88023 seeds in 898 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 3500 of 88023 seeds in 1047 s (3.34 seeds/s, 4.8 s per seed per thread)
progress: 4000 of 88023 seeds in 1177 s (3.40 seeds/s, 4.7 s per seed per thread)
progress: 4500 of 88023 seeds in 1290 s (3.49 seeds/s, 4.6 s per seed per thread)
progress: 5000 of 88023 seeds in 1402 s (3.57 seeds/s, 4.5 s per seed per thread)
progress: 5500 of 88023 seeds in 1517 s (3.63 seeds/s, 4.4 s per seed per thread)
progress: 6000 of 88023 seeds in 1628 s (3.69 seeds/s, 4.3 s per seed per thread)
progress: 6500 of 88023 seeds in 1761 s (3.69 seeds/s, 4.3 s per seed per thread)
progress: 7000 of 88023 seeds in 1911 s (3.66 seeds/s, 4.4 s per seed per thread)
progress: 7500 of 88023 seeds in 2061 s (3.64 seeds/s, 4.4 s per seed per thread)
progress: 8000 of 88023 seeds in 2210 s (3.62 seeds/s, 4.4 s per seed per thread)
lease: released 16 pool cores after 2287 s, exit 143

View file

@ -0,0 +1,189 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 28 pool cores (28,29,30,31,32,33,37,38,39,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61, waited 5792 s, class adv): adv-accept sweep-s09c
adv-accept sweep: seeds 920230..1000002 (79772), 28 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 79772 seeds in 74 s (6.77 seeds/s, 4.1 s per seed per thread)
progress: 1000 of 79772 seeds in 144 s (6.93 seeds/s, 4.0 s per seed per thread)
progress: 1500 of 79772 seeds in 215 s (6.97 seeds/s, 4.0 s per seed per thread)
progress: 2000 of 79772 seeds in 284 s (7.04 seeds/s, 4.0 s per seed per thread)
progress: 2500 of 79772 seeds in 353 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 3000 of 79772 seeds in 424 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 3500 of 79772 seeds in 493 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 4000 of 79772 seeds in 562 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 4500 of 79772 seeds in 631 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 5000 of 79772 seeds in 701 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 5500 of 79772 seeds in 770 s (7.14 seeds/s, 3.9 s per seed per thread)
progress: 6000 of 79772 seeds in 842 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 6500 of 79772 seeds in 913 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 7000 of 79772 seeds in 986 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 7500 of 79772 seeds in 1057 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 8000 of 79772 seeds in 1126 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 8500 of 79772 seeds in 1195 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 9000 of 79772 seeds in 1266 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 9500 of 79772 seeds in 1336 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 10000 of 79772 seeds in 1405 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 10500 of 79772 seeds in 1476 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 11000 of 79772 seeds in 1544 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 11500 of 79772 seeds in 1615 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 12000 of 79772 seeds in 1687 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 12500 of 79772 seeds in 1758 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 13000 of 79772 seeds in 1830 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 13500 of 79772 seeds in 1903 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 14000 of 79772 seeds in 1974 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 14500 of 79772 seeds in 2047 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 15000 of 79772 seeds in 2118 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 15500 of 79772 seeds in 2187 s (7.09 seeds/s, 4.0 s per seed per thread)
progress: 16000 of 79772 seeds in 2256 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 16500 of 79772 seeds in 2327 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 17000 of 79772 seeds in 2400 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 17500 of 79772 seeds in 2471 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 18000 of 79772 seeds in 2542 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 18500 of 79772 seeds in 2613 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 19000 of 79772 seeds in 2688 s (7.07 seeds/s, 4.0 s per seed per thread)
progress: 19500 of 79772 seeds in 2767 s (7.05 seeds/s, 4.0 s per seed per thread)
progress: 20000 of 79772 seeds in 2839 s (7.04 seeds/s, 4.0 s per seed per thread)
progress: 20500 of 79772 seeds in 2909 s (7.05 seeds/s, 4.0 s per seed per thread)
progress: 21000 of 79772 seeds in 2979 s (7.05 seeds/s, 4.0 s per seed per thread)
progress: 21500 of 79772 seeds in 3049 s (7.05 seeds/s, 4.0 s per seed per thread)
progress: 22000 of 79772 seeds in 3119 s (7.05 seeds/s, 4.0 s per seed per thread)
progress: 22500 of 79772 seeds in 3188 s (7.06 seeds/s, 4.0 s per seed per thread)
progress: 23000 of 79772 seeds in 3257 s (7.06 seeds/s, 4.0 s per seed per thread)
progress: 23500 of 79772 seeds in 3327 s (7.06 seeds/s, 4.0 s per seed per thread)
progress: 24000 of 79772 seeds in 3396 s (7.07 seeds/s, 4.0 s per seed per thread)
progress: 24500 of 79772 seeds in 3466 s (7.07 seeds/s, 4.0 s per seed per thread)
progress: 25000 of 79772 seeds in 3535 s (7.07 seeds/s, 4.0 s per seed per thread)
progress: 25500 of 79772 seeds in 3605 s (7.07 seeds/s, 4.0 s per seed per thread)
progress: 26000 of 79772 seeds in 3674 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 26500 of 79772 seeds in 3743 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 27000 of 79772 seeds in 3813 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 27500 of 79772 seeds in 3883 s (7.08 seeds/s, 4.0 s per seed per thread)
progress: 28000 of 79772 seeds in 3952 s (7.09 seeds/s, 4.0 s per seed per thread)
progress: 28500 of 79772 seeds in 4021 s (7.09 seeds/s, 4.0 s per seed per thread)
progress: 29000 of 79772 seeds in 4091 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 29500 of 79772 seeds in 4159 s (7.09 seeds/s, 3.9 s per seed per thread)
progress: 30000 of 79772 seeds in 4228 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 30500 of 79772 seeds in 4298 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 31000 of 79772 seeds in 4367 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 31500 of 79772 seeds in 4437 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 32000 of 79772 seeds in 4508 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 32500 of 79772 seeds in 4577 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 33000 of 79772 seeds in 4647 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 33500 of 79772 seeds in 4716 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 34000 of 79772 seeds in 4786 s (7.10 seeds/s, 3.9 s per seed per thread)
progress: 34500 of 79772 seeds in 4855 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 35000 of 79772 seeds in 4924 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 35500 of 79772 seeds in 4993 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 36000 of 79772 seeds in 5063 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 36500 of 79772 seeds in 5133 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 37000 of 79772 seeds in 5202 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 37500 of 79772 seeds in 5272 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 38000 of 79772 seeds in 5342 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 38500 of 79772 seeds in 5408 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 39000 of 79772 seeds in 5480 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 39500 of 79772 seeds in 5550 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 40000 of 79772 seeds in 5621 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 40500 of 79772 seeds in 5691 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 41000 of 79772 seeds in 5759 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 41500 of 79772 seeds in 5827 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 42000 of 79772 seeds in 5898 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 42500 of 79772 seeds in 5967 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 43000 of 79772 seeds in 6037 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 43500 of 79772 seeds in 6106 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 44000 of 79772 seeds in 6175 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 44500 of 79772 seeds in 6245 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 45000 of 79772 seeds in 6314 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 45500 of 79772 seeds in 6385 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 46000 of 79772 seeds in 6454 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 46500 of 79772 seeds in 6524 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 47000 of 79772 seeds in 6594 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 47500 of 79772 seeds in 6663 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 48000 of 79772 seeds in 6733 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 48500 of 79772 seeds in 6803 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 49000 of 79772 seeds in 6873 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 49500 of 79772 seeds in 6942 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 50000 of 79772 seeds in 7015 s (7.13 seeds/s, 3.9 s per seed per thread)
progress: 50500 of 79772 seeds in 7093 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 51000 of 79772 seeds in 7172 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 51500 of 79772 seeds in 7245 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 52000 of 79772 seeds in 7315 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 52500 of 79772 seeds in 7385 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 53000 of 79772 seeds in 7453 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 53500 of 79772 seeds in 7527 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 54000 of 79772 seeds in 7599 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 54500 of 79772 seeds in 7669 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 55000 of 79772 seeds in 7739 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 55500 of 79772 seeds in 7808 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 56000 of 79772 seeds in 7877 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 56500 of 79772 seeds in 7949 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 57000 of 79772 seeds in 8022 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 57500 of 79772 seeds in 8093 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 58000 of 79772 seeds in 8161 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 58500 of 79772 seeds in 8231 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 59000 of 79772 seeds in 8301 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 59500 of 79772 seeds in 8371 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 60000 of 79772 seeds in 8442 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 60500 of 79772 seeds in 8512 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 61000 of 79772 seeds in 8583 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 61500 of 79772 seeds in 8652 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 62000 of 79772 seeds in 8721 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 62500 of 79772 seeds in 8792 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 63000 of 79772 seeds in 8861 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 63500 of 79772 seeds in 8930 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 64000 of 79772 seeds in 9000 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 64500 of 79772 seeds in 9070 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 65000 of 79772 seeds in 9139 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 65500 of 79772 seeds in 9209 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 66000 of 79772 seeds in 9278 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 66500 of 79772 seeds in 9347 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 67000 of 79772 seeds in 9417 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 67500 of 79772 seeds in 9489 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 68000 of 79772 seeds in 9558 s (7.11 seeds/s, 3.9 s per seed per thread)
progress: 68500 of 79772 seeds in 9627 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 69000 of 79772 seeds in 9696 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 69500 of 79772 seeds in 9766 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 70000 of 79772 seeds in 9835 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 70500 of 79772 seeds in 9905 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 71000 of 79772 seeds in 9974 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 71500 of 79772 seeds in 10043 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 72000 of 79772 seeds in 10113 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 72500 of 79772 seeds in 10182 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 73000 of 79772 seeds in 10252 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 73500 of 79772 seeds in 10324 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 74000 of 79772 seeds in 10397 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 74500 of 79772 seeds in 10466 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 75000 of 79772 seeds in 10536 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 75500 of 79772 seeds in 10605 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 76000 of 79772 seeds in 10675 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 76500 of 79772 seeds in 10744 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 77000 of 79772 seeds in 10817 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 77500 of 79772 seeds in 10887 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 78000 of 79772 seeds in 10957 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 78500 of 79772 seeds in 11027 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 79000 of 79772 seeds in 11096 s (7.12 seeds/s, 3.9 s per seed per thread)
progress: 79500 of 79772 seeds in 11166 s (7.12 seeds/s, 3.9 s per seed per thread)
swept 79772 seeds in 11204.0 s (7.12 seeds/s, 3.9 s per seed per thread); attempts mean 2.119 max 38; attempt histogram 0..10,11+ [25500, 17354, 11825, 8051, 5513, 3731, 2496, 1718, 1182, 782, 505, 1115]; last-resort programs 0
per-site distinct-index ratio at 256 units: mean 0.9998 min 0.9874; 0 of 79772 below the 0.98 floor at this sample size (the floor is enforced at 2^20)
Q5 structure over accepted programs: 66740 of 79772 with a lossy (or/mul/mulhi) last write to an output register; 0 with under 8 registers written; or per program mean 2.482
lowest per-site distinct-index ratio (headroom over the floor, Q5; the live hot-set candidates for Q1):
seed 991629 id e7b918e9382b6e73 attempt 9 min_ratio 0.9874 (site 3) lossy_last 3 or 3 mul 4 mulhi 4 regs 8
seed 961401 id 179f00758115b1fa attempt 5 min_ratio 0.9926 (site 6) lossy_last 1 or 1 mul 5 mulhi 5 regs 8
seed 984337 id 04c6e22e92e8d355 attempt 3 min_ratio 0.9947 (site 12) lossy_last 1 or 5 mul 5 mulhi 4 regs 8
seed 945757 id e3a87bc3ad3604d3 attempt 4 min_ratio 0.9949 (site 7) lossy_last 0 or 5 mul 7 mulhi 4 regs 8
seed 989202 id 925188ed49cf9f17 attempt 0 min_ratio 0.9955 (site 15) lossy_last 2 or 5 mul 3 mulhi 2 regs 8
seed 945778 id ede21dca661d64c9 attempt 1 min_ratio 0.9956 (site 7) lossy_last 1 or 4 mul 3 mulhi 4 regs 8
seed 953057 id 1a21b58d09b6bd45 attempt 8 min_ratio 0.9957 (site 1) lossy_last 2 or 3 mul 4 mulhi 3 regs 8
seed 941401 id 56d2a53963bc338c attempt 4 min_ratio 0.9958 (site 11) lossy_last 2 or 3 mul 5 mulhi 1 regs 8
seed 970528 id 33491ff7fdde6609 attempt 0 min_ratio 0.9959 (site 15) lossy_last 2 or 4 mul 7 mulhi 2 regs 8
seed 929373 id 67f06514dd3129af attempt 4 min_ratio 0.9959 (site 4) lossy_last 3 or 0 mul 6 mulhi 3 regs 8
seed 928932 id eb5b8f3144c5eae3 attempt 1 min_ratio 0.9959 (site 3) lossy_last 1 or 1 mul 3 mulhi 7 regs 8
seed 982801 id 3c1d5e3a59614c97 attempt 1 min_ratio 0.9959 (site 12) lossy_last 2 or 1 mul 5 mulhi 3 regs 8
seed 963055 id 7eab83b1e653fda1 attempt 2 min_ratio 0.9959 (site 10) lossy_last 0 or 1 mul 2 mulhi 4 regs 8
seed 927913 id 15793ccde9eeecb7 attempt 1 min_ratio 0.9959 (site 4) lossy_last 1 or 2 mul 6 mulhi 3 regs 8
seed 949268 id 5ff5586d478d6af9 attempt 0 min_ratio 0.9959 (site 13) lossy_last 1 or 4 mul 6 mulhi 3 regs 8
seed 980287 id d4832cfabac19257 attempt 1 min_ratio 0.9959 (site 8) lossy_last 3 or 2 mul 10 mulhi 5 regs 8
seed 990532 id 49f94329c8f8b5b1 attempt 2 min_ratio 0.9959 (site 1) lossy_last 0 or 0 mul 6 mulhi 2 regs 8
seed 962087 id 9cb48da1f75f948d attempt 0 min_ratio 0.9959 (site 10) lossy_last 3 or 2 mul 4 mulhi 7 regs 8
seed 978319 id b61c514d4e02c80c attempt 8 min_ratio 0.9960 (site 2) lossy_last 2 or 2 mul 3 mulhi 5 regs 8
seed 949090 id 33691d83a1961447 attempt 1 min_ratio 0.9960 (site 7) lossy_last 1 or 2 mul 3 mulhi 3 regs 8
wrote /srv/builds/_adv-adv-accept/sweep-s09c.txt
sweep DONE
lease: released 28 pool cores after 16996 s, exit 0

View file

@ -0,0 +1,6 @@
yielded sweep-s01c (pgid 2041574): 11842 rows kept, frontier 150610
yielded attempts-20k (pgid 1954092) at: progress: 12500 of 20000 seeds in 1608 s (its rows are written only at its end: lost)
sweep-s09: 11977 rows kept as part1, frontier 911979
build-1 03:56:39Z: submitted sweep-s01e (from 150610, 49392 seeds) and sweep-s07c (from 706081, 93921) at 32/16 (coordinator, no-gaps rule)
build-1 03:57:42Z: ended sweep-s01e (pgid 49098) on main reversal (F1 census stays alone): 603 rows kept, frontier 151222
build-1 03:57:45Z: ended sweep-s07c (pgid 49143) on main reversal (F1 census stays alone): 1 rows kept, frontier #

View file

@ -0,0 +1,10 @@
adv-accept sweep: seeds 100002..200002 (100000), 96 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 100000 seeds in 54 s (9.18 seeds/s, 10.5 s per seed per thread)
progress: 1000 of 100000 seeds in 260 s (3.84 seeds/s, 25.0 s per seed per thread)
progress: 1500 of 100000 seeds in 304 s (4.93 seeds/s, 19.5 s per seed per thread)
progress: 2000 of 100000 seeds in 359 s (5.58 seeds/s, 17.2 s per seed per thread)
progress: 2500 of 100000 seeds in 411 s (6.09 seeds/s, 15.8 s per seed per thread)
progress: 3000 of 100000 seeds in 460 s (6.53 seeds/s, 14.7 s per seed per thread)
progress: 3500 of 100000 seeds in 505 s (6.93 seeds/s, 13.8 s per seed per thread)
progress: 4000 of 100000 seeds in 551 s (7.26 seeds/s, 13.2 s per seed per thread)
progress: 4500 of 100000 seeds in 589 s (7.64 seeds/s, 12.6 s per seed per thread)

View file

@ -0,0 +1,14 @@
adv-accept sweep: seeds 104649..200002 (95353), 88 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 95353 seeds in 59 s (8.44 seeds/s, 10.4 s per seed per thread)
progress: 1000 of 95353 seeds in 157 s (6.39 seeds/s, 13.8 s per seed per thread)
progress: 1500 of 95353 seeds in 259 s (5.79 seeds/s, 15.2 s per seed per thread)
progress: 2000 of 95353 seeds in 365 s (5.48 seeds/s, 16.1 s per seed per thread)
progress: 2500 of 95353 seeds in 447 s (5.59 seeds/s, 15.7 s per seed per thread)
progress: 3000 of 95353 seeds in 535 s (5.60 seeds/s, 15.7 s per seed per thread)
progress: 3500 of 95353 seeds in 707 s (4.95 seeds/s, 17.8 s per seed per thread)
progress: 4000 of 95353 seeds in 914 s (4.37 seeds/s, 20.1 s per seed per thread)
progress: 4500 of 95353 seeds in 1157 s (3.89 seeds/s, 22.6 s per seed per thread)
progress: 5000 of 95353 seeds in 1411 s (3.54 seeds/s, 24.8 s per seed per thread)
progress: 5500 of 95353 seeds in 1692 s (3.25 seeds/s, 27.1 s per seed per thread)
progress: 6000 of 95353 seeds in 1931 s (3.11 seeds/s, 28.3 s per seed per thread)
progress: 6500 of 95353 seeds in 2222 s (2.93 seeds/s, 30.1 s per seed per thread)

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,4 @@
lease: holding 32 pool cores (56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87, waited 1 s, class adv): adv-accept sweep-s01e
adv-accept sweep: seeds 150610..200002 (49392), 32 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 49392 seeds in 57 s (8.76 seeds/s, 3.7 s per seed per thread)
lease: released 32 pool cores after 69 s, exit 143

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,24 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 32 pool cores (8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,76,77,78,79,80,81,82,83, waited 213 s, class adv): adv-accept sweep-s05
adv-accept sweep: seeds 502127..600002 (97875), 32 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
progress: 500 of 97875 seeds in 83 s (6.04 seeds/s, 5.3 s per seed per thread)
progress: 1000 of 97875 seeds in 161 s (6.22 seeds/s, 5.1 s per seed per thread)
progress: 1500 of 97875 seeds in 238 s (6.30 seeds/s, 5.1 s per seed per thread)
progress: 2000 of 97875 seeds in 315 s (6.35 seeds/s, 5.0 s per seed per thread)
progress: 2500 of 97875 seeds in 394 s (6.35 seeds/s, 5.0 s per seed per thread)
progress: 3000 of 97875 seeds in 470 s (6.38 seeds/s, 5.0 s per seed per thread)
progress: 3500 of 97875 seeds in 548 s (6.39 seeds/s, 5.0 s per seed per thread)
progress: 4000 of 97875 seeds in 625 s (6.40 seeds/s, 5.0 s per seed per thread)
progress: 4500 of 97875 seeds in 701 s (6.42 seeds/s, 5.0 s per seed per thread)
progress: 5000 of 97875 seeds in 778 s (6.43 seeds/s, 5.0 s per seed per thread)
progress: 5500 of 97875 seeds in 855 s (6.43 seeds/s, 5.0 s per seed per thread)
progress: 6000 of 97875 seeds in 932 s (6.44 seeds/s, 5.0 s per seed per thread)
progress: 6500 of 97875 seeds in 1007 s (6.45 seeds/s, 5.0 s per seed per thread)
progress: 7000 of 97875 seeds in 1084 s (6.46 seeds/s, 5.0 s per seed per thread)
progress: 7500 of 97875 seeds in 1160 s (6.47 seeds/s, 4.9 s per seed per thread)
progress: 8000 of 97875 seeds in 1239 s (6.45 seeds/s, 5.0 s per seed per thread)
progress: 8500 of 97875 seeds in 1319 s (6.44 seeds/s, 5.0 s per seed per thread)
progress: 9000 of 97875 seeds in 1396 s (6.45 seeds/s, 5.0 s per seed per thread)
progress: 9500 of 97875 seeds in 1481 s (6.42 seeds/s, 5.0 s per seed per thread)
Terminated
lease: released 32 pool cores after 1698 s, exit 143

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,4 @@
lease: 8 of 16 pool cores free (80 leased); waiting
lease: holding 32 pool cores (56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87, waited 71 s, class adv): adv-accept sweep-s07c
adv-accept sweep: seeds 706081..800002 (93921), 32 threads, ratio at 256 units per site (floor 0.98 at 2^20, dataset 2^28), full report false
lease: released 32 pool cores after 72 s, exit 143

View file

@ -0,0 +1,2 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: gave up waiting for 16 free pool cores after 2 h

View file

@ -0,0 +1,129 @@
lease: 0 of 16 pool cores free (88 leased); waiting
lease: holding 32 pool cores (41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72, waited 628 s): adv-accept v5-exemplar
[2026-10-07T19:35:39Z] state stream /srv/builds/igneum-wt-adv-accept/tools/attack/adv-accept-v5/inputs/v5-dn3-epoch0-state.igsd1: block 4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925 number 0 root 7e37a9fb19b154d32daf5bf30a50d339a75029fbc9eec9ea20e95439dba5a311 records 11 -> 11 leaves fnv f141bfee2a8b11b0
[2026-10-07T19:35:39Z] adv-live-v5 0.1.0 (igneum-pow class v5, generator 5); args ["warps", "--program", "100767", "--nonces", "1000000", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--plant", "const-item", "--state", "/srv/builds/igneum-wt-adv-accept/tools/attack/adv-accept-v5/inputs/v5-dn3-epoch0-state.igsd1"]
[2026-10-07T19:35:39Z] census warps: programs [100767] day 20730 nonces 1000000 threads 32 plant const-item validate sample check_every 997 diag false
[2026-10-07T19:35:39Z] class v5: state leaves 11 (fnv f141bfee2a8b11b0), root 7e37a9fb19b154d32daf5bf30a50d339a75029fbc9eec9ea20e95439dba5a311
[2026-10-07T19:35:39Z] day 20730: cache filled in 0.39 s, fnv 448274a57f508cbc
[2026-10-07T19:35:41Z] table: 16777216 items derived with their 8 lines in 1.5 s; library comparison skipped under the plant (0 mismatches)
[2026-10-07T19:35:45Z] program p100767-attack-f8: epoch seed 74484b391756fc49568cdd716bcfd839a55d31a45633c223c65c7f2ab4617fd4 era seed 7a65a05391dcd87b8fdaf7f74813aa17c6e13f7c56a03da2aaa6176987ef038b id 2fd83dbae09c366d attempt 2 class mx8-era763e5847+sh256x27+state op mix load=16 add=8 mad=6 mul=6 rotl=6 mulhi=5 xor=5 rotr=4 shfl=4 or=2 sub=2; era stride mul 0x54387173 rot 28 interleave [4, 11, 13, 15] windows 6:1:0 9:0:0 11:2:1 12:0:0 13:1:1 19:1:1 23:2:0 32:2:0 36:1:1 39:1:1 41:0:0 45:1:0 50:2:3 58:0:0 59:0:0 63:1:0
[2026-10-07T19:35:45Z] load site instr 6: src r6 win 1 off 0; last base writer mad at 4; writers back to the last injecting one: mad@4; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T19:35:45Z] load site instr 9: src r7 win 0 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:45Z] load site instr 11: src r5 win 2 off 1; last base writer xor at 5; writers back to the last injecting one: xor@5; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T19:35:45Z] load site instr 12: src r3 win 0 off 0; last base writer load at 9; writers back to the last injecting one: load@9; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T19:35:45Z] load site instr 13: src r2 win 1 off 1; last base writer load at 12; writers back to the last injecting one: load@12; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T19:35:45Z] load site instr 19: src r4 win 1 off 1; last base writer add at 7; writers back to the last injecting one: add@7; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T19:35:45Z] load site instr 23: src r6 win 2 off 0; last base writer mad at 22; writers back to the last injecting one: mad@22; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T19:35:45Z] load site instr 32: src r0 win 2 off 0; last base writer xor at 20; writers back to the last injecting one: xor@20; shadow writes of r0 per rep: add=7 mad=1 mul=3 mulhi=3 or=3 rotl=3 rotr=2 shfl=5 sub=2 xor=3
[2026-10-07T19:35:45Z] load site instr 36: src r7 win 1 off 1; last base writer rotr at 31; writers back to the last injecting one: rotr@31 load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:45Z] load site instr 39: src r7 win 1 off 1; last base writer rotl at 38; writers back to the last injecting one: rotl@38 add@37; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:45Z] load site instr 41: src r4 win 0 off 0; last base writer rotl at 40; writers back to the last injecting one: rotl@40 load@32; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T19:35:45Z] load site instr 45: src r5 win 1 off 0; last base writer rotr at 27; writers back to the last injecting one: rotr@27 shfl@24; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T19:35:45Z] load site instr 50: src r7 win 2 off 3; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:45Z] load site instr 58: src r3 win 0 off 0; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T19:35:45Z] load site instr 59: src r2 win 0 off 0; last base writer xor at 46; writers back to the last injecting one: xor@46; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T19:35:45Z] load site instr 63: src r1 win 1 off 0; last base writer rotr at 62; writers back to the last injecting one: rotr@62 add@56; shadow writes of r1 per rep: add=5 mad=4 mul=6 mulhi=3 or=2 rotl=2 rotr=3 shfl=5 sub=3 xor=2
[2026-10-07T19:35:45Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^22) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23); expected reads per item by quarter 9.060 7.153 6.199 8.106 (flat uniform 7.629)
[2026-10-07T19:35:47Z] 31250 warps (1000000 nonces) interpreted in 2.5 s (2.595 ms per warp per thread); Epoch::hash_warp agreement on 0 warps: 0 mismatches (library comparison skipped under the plant)
[2026-10-07T19:35:47Z] p100767-attack-f8 distinct lines per hash: n 1000000 min 928 p1 952 median 968 p99 968 max 968 mean 965.6766
[2026-10-07T19:35:47Z] p100767-attack-f8 distinct items per hash: n 1000000 min 116 p1 119 median 121 p99 121 max 121 mean 120.7235
[2026-10-07T19:35:47Z] p100767-attack-f8 distinct lines per warp: n 31250 min 30415 p1 30476 median 30543 p99 30597 max 30631 mean 30542.0418
[2026-10-07T19:35:47Z] p100767-attack-f8 distinct items per warp: n 31250 min 3817 p1 3824 median 3832 p99 3838 max 3840 mean 3831.7148
[2026-10-07T19:35:47Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:35:47Z] positions: largest hi16-bucket (256 items) share 100.0000% at p0 (iteration 0, site 0, instr 6); windowed expectation 0.0031%; largest saturated-source share 0.0145% at p118 (site 6, instr 23)
[2026-10-07T19:35:47Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 2 of 2048 at p43 (site 11, instr 45); saturated sources at one position 1 of 2048 at p54 (site 6, instr 23); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:35:47Z] p100767-attack-f8 item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 8000004 (bin 4660) z_max +2896308.06 min 0 z_min -2.76 chi2/dof 500000.76099 chi2_z +1448153952.46 top0.1% 6.57882% top0.5% 7.45855% top1% 8.45863%
[2026-10-07T19:35:48Z] p100767-attack-f8 item histogram against the window density: full 2^24 chi2/dof 421053.20520 largest 8000004 (item 0x1234) at +2657834.08 sigma smallest at -3.01; buckets64 chi2/dof 421050.05541 largest 8000496 (bucket 72) at +332225.99 sigma smallest at -7.09
[2026-10-07T19:35:48Z] p100767-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 27 (bin 919726) z_max +7.01 min 0 z_min -2.76 chi2/dof 1.14901 chi2_z +431.58 top0.1% 0.25578% top0.5% 1.15209% top1% 2.18797%
[2026-10-07T19:35:48Z] p100767-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 1.00017 largest +6.64 sigma; buckets64 chi2/dof 0.99639 largest +4.40 smallest -4.40
[2026-10-07T19:35:48Z] 6-sigma p100767-attack-f8 items buckets64 against the window density: largest bucket +332225.99 sigma, smallest -7.09 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (windowed control): f 0.1% S_f 6.57882% E_f(control) 0.25578% X_f +6.32304% X_f/f +63.2304 -> HOT SET
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (windowed control): f 0.5% S_f 7.45855% E_f(control) 1.15209% X_f +6.30646% X_f/f +12.6129 -> HOT SET
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (windowed control): f 1.0% S_f 8.45863% E_f(control) 2.18797% X_f +6.27066% X_f/f +6.2707 -> HOT SET
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (windowed control): verdict FLAGGED
[2026-10-07T19:35:48Z] p100767-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 128000000 mean 7.629 sigma 2.762 max 26 (bin 10438708) z_max +6.65 min 0 z_min -2.76 chi2/dof 0.99974 chi2_z -0.75 top0.1% 0.24260% top0.5% 1.09881% top1% 2.08683%
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 6.57882% E_f(control) 0.24260% X_f +6.33622% X_f/f +63.3622 -> HOT SET
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 7.45855% E_f(control) 1.09881% X_f +6.35974% X_f/f +12.7195 -> HOT SET
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 8.45863% E_f(control) 2.08683% X_f +6.37180% X_f/f +6.3718 -> HOT SET
[2026-10-07T19:35:48Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T19:35:48Z] ratio p100767-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 25.7206x / 6.4739x / 3.8660x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 27.1176x / 6.7878x / 4.0533x
[2026-10-07T19:35:48Z] hottest item p100767-attack-f8 (0x001234): 8000004 reads (6.2500% of all); predicted source none
[2026-10-07T19:35:48Z] program p100767-attack-f8 DONE: 1000000 nonces; 6-sigma (windowed) FLAGGED; hot-set FLAGGED; verdict FLAGGED
[2026-10-07T19:35:49Z] state stream /srv/builds/igneum-wt-adv-accept/tools/attack/adv-accept-v5/inputs/v5-dn3-epoch0-state.igsd1: block 4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925 number 0 root 7e37a9fb19b154d32daf5bf30a50d339a75029fbc9eec9ea20e95439dba5a311 records 11 -> 11 leaves fnv f141bfee2a8b11b0
[2026-10-07T19:35:49Z] adv-live-v5 0.1.0 (igneum-pow class v5, generator 5); args ["warps", "--program", "100767", "--nonces", "16777216", "--threads", "32", "--out", "/srv/builds/_adv-adv-accept/live", "--validate", "sample", "--diag", "1", "--state", "/srv/builds/igneum-wt-adv-accept/tools/attack/adv-accept-v5/inputs/v5-dn3-epoch0-state.igsd1"]
[2026-10-07T19:35:49Z] census warps: programs [100767] day 20730 nonces 16777216 threads 32 plant none validate sample check_every 997 diag true
[2026-10-07T19:35:49Z] class v5: state leaves 11 (fnv f141bfee2a8b11b0), root 7e37a9fb19b154d32daf5bf30a50d339a75029fbc9eec9ea20e95439dba5a311
[2026-10-07T19:35:49Z] day 20730: cache filled in 0.41 s, fnv 448274a57f508cbc
[2026-10-07T19:35:52Z] table: 16777216 items derived with their 8 lines in 2.1 s; library comparison sample (0 mismatches)
[2026-10-07T19:35:54Z] program p100767-attack-f8: epoch seed 74484b391756fc49568cdd716bcfd839a55d31a45633c223c65c7f2ab4617fd4 era seed 7a65a05391dcd87b8fdaf7f74813aa17c6e13f7c56a03da2aaa6176987ef038b id 2fd83dbae09c366d attempt 2 class mx8-era763e5847+sh256x27+state op mix load=16 add=8 mad=6 mul=6 rotl=6 mulhi=5 xor=5 rotr=4 shfl=4 or=2 sub=2; era stride mul 0x54387173 rot 28 interleave [4, 11, 13, 15] windows 6:1:0 9:0:0 11:2:1 12:0:0 13:1:1 19:1:1 23:2:0 32:2:0 36:1:1 39:1:1 41:0:0 45:1:0 50:2:3 58:0:0 59:0:0 63:1:0
[2026-10-07T19:35:54Z] load site instr 6: src r6 win 1 off 0; last base writer mad at 4; writers back to the last injecting one: mad@4; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T19:35:54Z] load site instr 9: src r7 win 0 off 0; last base writer load at 6; writers back to the last injecting one: load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:54Z] load site instr 11: src r5 win 2 off 1; last base writer xor at 5; writers back to the last injecting one: xor@5; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T19:35:54Z] load site instr 12: src r3 win 0 off 0; last base writer load at 9; writers back to the last injecting one: load@9; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T19:35:54Z] load site instr 13: src r2 win 1 off 1; last base writer load at 12; writers back to the last injecting one: load@12; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T19:35:54Z] load site instr 19: src r4 win 1 off 1; last base writer add at 7; writers back to the last injecting one: add@7; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T19:35:54Z] load site instr 23: src r6 win 2 off 0; last base writer mad at 22; writers back to the last injecting one: mad@22; shadow writes of r6 per rep: add=5 mad=7 mul=1 mulhi=1 rotl=3 rotr=2 shfl=3 sub=1 xor=6
[2026-10-07T19:35:54Z] load site instr 32: src r0 win 2 off 0; last base writer xor at 20; writers back to the last injecting one: xor@20; shadow writes of r0 per rep: add=7 mad=1 mul=3 mulhi=3 or=3 rotl=3 rotr=2 shfl=5 sub=2 xor=3
[2026-10-07T19:35:54Z] load site instr 36: src r7 win 1 off 1; last base writer rotr at 31; writers back to the last injecting one: rotr@31 load@6; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:54Z] load site instr 39: src r7 win 1 off 1; last base writer rotl at 38; writers back to the last injecting one: rotl@38 add@37; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:54Z] load site instr 41: src r4 win 0 off 0; last base writer rotl at 40; writers back to the last injecting one: rotl@40 load@32; shadow writes of r4 per rep: add=5 mad=5 mul=4 mulhi=5 or=1 rotl=4 rotr=5 shfl=3 sub=5 xor=2
[2026-10-07T19:35:54Z] load site instr 45: src r5 win 1 off 0; last base writer rotr at 27; writers back to the last injecting one: rotr@27 shfl@24; shadow writes of r5 per rep: add=10 mul=5 mulhi=1 rotl=3 rotr=1 shfl=4 sub=3 xor=4
[2026-10-07T19:35:54Z] load site instr 50: src r7 win 2 off 3; last base writer load at 45; writers back to the last injecting one: load@45; shadow writes of r7 per rep: add=5 mad=5 mul=4 mulhi=5 rotl=1 rotr=5 shfl=3 sub=4 xor=5
[2026-10-07T19:35:54Z] load site instr 58: src r3 win 0 off 0; last base writer load at 50; writers back to the last injecting one: load@50; shadow writes of r3 per rep: mad=6 mul=2 mulhi=4 or=1 rotl=4 rotr=2 xor=4
[2026-10-07T19:35:54Z] load site instr 59: src r2 win 0 off 0; last base writer xor at 46; writers back to the last injecting one: xor@46; shadow writes of r2 per rep: add=3 mad=2 mul=4 mulhi=2 or=6 rotl=1 rotr=1 shfl=5 sub=2 xor=4
[2026-10-07T19:35:54Z] load site instr 63: src r1 win 1 off 0; last base writer rotr at 62; writers back to the last injecting one: rotr@62 add@56; shadow writes of r1 per rep: add=5 mad=4 mul=6 mulhi=3 or=2 rotl=2 rotr=3 shfl=5 sub=3 xor=2
[2026-10-07T19:35:54Z] window layer: site item windows (first, items) (0x0,2^23) (0x0,2^24) (0x400000,2^22) (0x0,2^24) (0x800000,2^23) (0x800000,2^23) (0x0,2^22) (0x0,2^22) (0x800000,2^23) (0x800000,2^23) (0x0,2^24) (0x0,2^23) (0xc00000,2^22) (0x0,2^24) (0x0,2^24) (0x0,2^23); expected reads per item by quarter 152.000 120.000 104.000 136.000 (flat uniform 128.000)
[2026-10-07T19:36:32Z] 524288 warps (16777216 nonces) interpreted in 38.0 s (2.321 ms per warp per thread); Epoch::hash_warp agreement on 589 warps: 0 mismatches
[2026-10-07T19:36:32Z] p100767-attack-f8 distinct lines per hash: n 16777216 min 983 p1 1008 median 1024 p99 1024 max 1024 mean 1021.6620
[2026-10-07T19:36:32Z] p100767-attack-f8 distinct items per hash: n 16777216 min 123 p1 126 median 128 p99 128 max 128 mean 127.7233
[2026-10-07T19:36:32Z] p100767-attack-f8 distinct lines per warp: n 524288 min 32424 p1 32500 median 32567 p99 32622 max 32670 mean 32566.0828
[2026-10-07T19:36:32Z] p100767-attack-f8 distinct items per warp: n 524288 min 4070 p1 4079 median 4087 p99 4093 max 4096 mean 4086.6480
[2026-10-07T19:36:32Z] uniform expectation: distinct lines per hash 1023.875 of 1024 reads, per warp 32640.3 of 32768 reads (2^22 lines); distinct items per hash 127.9995 of 128, per warp 4095.50 of 4096 (2^24 items)
[2026-10-07T19:36:32Z] positions: largest hi16-bucket (256 items) share 0.0286% at p6 (iteration 0, site 6, instr 23); windowed expectation 0.0061%; largest saturated-source share 0.0126% at p38 (site 6, instr 23)
[2026-10-07T19:36:32Z] acceptance-style (2,048 evaluations, the rule's sample size): the most repeated address at one position 3 of 2048 at p6 (site 6, instr 23); saturated sources at one position 2 of 2048 at p6 (site 6, instr 23); uniform expectation: repeats 1 to 2, saturated 0
[2026-10-07T19:36:32Z] p100767-attack-f8 item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 29722 (bin 0) z_max +2615.76 min 57 z_min -6.28 chi2/dof 5.05098 chi2_z +11732.89 top0.1% 0.30343% top0.5% 0.97966% top1% 1.72521%
[2026-10-07T19:36:32Z] p100767-attack-f8 item histogram against the window density: full 2^24 chi2/dof 2.30691 largest 29722 (item 0x0) at +2398.44 sigma smallest at -5.03; buckets64 chi2/dof 1.85474 largest 39148 (bucket 0) at +298.28 sigma smallest at -4.43
[2026-10-07T19:36:35Z] p100767-attack-f8 WINDOWED CONTROL item histogram (flat): bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 215 (bin 2100831) z_max +7.69 min 56 z_min -6.36 chi2/dof 3.49942 chi2_z +7239.08 top0.1% 0.14829% top0.5% 0.71360% top1% 1.40031%
[2026-10-07T19:36:35Z] p100767-attack-f8 WINDOWED CONTROL against the window density: full chi2/dof 0.99988 largest +5.98 sigma; buckets64 chi2/dof 0.99505 largest +5.11 smallest -4.81
[2026-10-07T19:36:35Z] 6-sigma p100767-attack-f8 items buckets64 against the window density: largest bucket +298.28 sigma, smallest -4.43 -> FLAGGED (beyond 6 sigma)
[2026-10-07T19:36:35Z] hot-set p100767-attack-f8 items (windowed control): f 0.1% S_f 0.30343% E_f(control) 0.14829% X_f +0.15514% X_f/f +1.5514 -> HOT SET
[2026-10-07T19:36:35Z] hot-set p100767-attack-f8 items (windowed control): f 0.5% S_f 0.97966% E_f(control) 0.71360% X_f +0.26605% X_f/f +0.5321 -> no hot set
[2026-10-07T19:36:35Z] hot-set p100767-attack-f8 items (windowed control): f 1.0% S_f 1.72521% E_f(control) 1.40031% X_f +0.32490% X_f/f +0.3249 -> no hot set
[2026-10-07T19:36:35Z] hot-set p100767-attack-f8 items (windowed control): verdict FLAGGED
[2026-10-07T19:36:37Z] p100767-attack-f8 FLAT CONTROL item histogram: bins 16777216 reads 2147483648 mean 128.000 sigma 11.314 max 191 (bin 10083710) z_max +5.57 min 71 z_min -5.04 chi2/dof 1.00035 chi2_z +1.01 top0.1% 0.13110% top0.5% 0.63254% top1% 1.24340%
[2026-10-07T19:36:37Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.1% S_f 0.30343% E_f(control) 0.13110% X_f +0.17233% X_f/f +1.7233 -> HOT SET
[2026-10-07T19:36:37Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 0.5% S_f 0.97966% E_f(control) 0.63254% X_f +0.34711% X_f/f +0.6942 -> no hot set
[2026-10-07T19:36:37Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): f 1.0% S_f 1.72521% E_f(control) 1.24340% X_f +0.48180% X_f/f +0.4818 -> no hot set
[2026-10-07T19:36:37Z] hot-set p100767-attack-f8 items (flat control, the auditor's first view): verdict FLAGGED
[2026-10-07T19:36:37Z] ratio p100767-attack-f8: top 0.1% / 0.5% / 1% share over the WINDOW-MODEL control 2.0462x / 1.3728x / 1.2320x (gate 1.2x at 0.1%: BEYOND); over the FLAT control 2.3145x / 1.5488x / 1.3875x
[2026-10-07T19:36:39Z] attribution: hot threshold count >= 257 marks 17086 items (0.1018% of items) holding 6595489 reads (0.3071% of reads); top 8 items t=0x000000:29722 t=0x200000:10078 t=0x300000:7889 t=0x180000:6223 t=0x100000:5739 t=0x0c0000:4809 t=0x080000:4756 t=0x380000:4599
[2026-10-07T19:36:57Z] attribution: reads on hot items per position (flat expectation 0.1018% of each position's 16777216 reads); the 24 largest: p86(it5 s6)=3.360% p6(it0 s6)=3.359% p54(it3 s6)=3.359% p38(it2 s6)=3.359% p118(it7 s6)=3.358% p22(it1 s6)=3.357% p102(it6 s6)=3.355% p70(it4 s6)=3.354% p103(it6 s7)=0.416% p119(it7 s7)=0.416% p23(it1 s7)=0.416% p7(it0 s7)=0.415% p87(it5 s7)=0.415% p39(it2 s7)=0.415% p55(it3 s7)=0.414% p71(it4 s7)=0.414% p0(it0 s0)=0.210% p31(it1 s15)=0.210% p75(it4 s11)=0.209% p11(it0 s11)=0.209% p59(it3 s11)=0.209% p112(it7 s0)=0.209% p95(it5 s15)=0.208% p107(it6 s11)=0.208%
[2026-10-07T19:36:57Z] attribution: hot reads by iteration it0=0.307% it1=0.307% it2=0.307% it3=0.307% it4=0.307% it5=0.307% it6=0.307% it7=0.307% ; by site s0=0.208% s1=0.103% s2=0.000% s3=0.104% s4=0.000% s5=0.000% s6=3.358% s7=0.415% s8=0.000% s9=0.000% s10=0.103% s11=0.208% s12=0.000% s13=0.104% s14=0.104% s15=0.207%
[2026-10-07T19:36:57Z] site 0 (instr 6, src r6, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2078% (flat expectation 0.1018%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:36:57Z] site 1 (instr 9, src r7, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1032% (flat expectation 0.1018%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:36:57Z] site 2 (instr 11, src r5, k_off 2 offset 1, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1018%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:36:57Z] site 3 (instr 12, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1039% (flat expectation 0.1018%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:36:57Z] site 4 (instr 13, src r2, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1018%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:36:57Z] site 5 (instr 19, src r4, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1018%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:36:57Z] site 6 (instr 23, src r6, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 3.3578% (flat expectation 0.1018%); index entropy 13.999 bits of 14 uniform-on-window; saturated source 0.0121%; largest 256-item bucket 0.0279% (window expectation 0.0061%)
[2026-10-07T19:36:57Z] site 7 (instr 32, src r0, k_off 2 offset 0, window 2^22 items): share of its reads into the top 0.1% 0.4151% (flat expectation 0.1018%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:36:57Z] site 8 (instr 36, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1018%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:36:57Z] site 9 (instr 39, src r7, k_off 1 offset 1, window 2^23 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1018%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:36:57Z] site 10 (instr 41, src r4, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1035% (flat expectation 0.1018%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:36:57Z] site 11 (instr 45, src r5, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2077% (flat expectation 0.1018%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0032% (window expectation 0.0031%)
[2026-10-07T19:36:57Z] site 12 (instr 50, src r7, k_off 2 offset 3, window 2^22 items): share of its reads into the top 0.1% 0.0000% (flat expectation 0.1018%); index entropy 14.000 bits of 14 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0064% (window expectation 0.0061%)
[2026-10-07T19:36:57Z] site 13 (instr 58, src r3, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1039% (flat expectation 0.1018%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:36:57Z] site 14 (instr 59, src r2, k_off 0 offset 0, window 2^24 items): share of its reads into the top 0.1% 0.1038% (flat expectation 0.1018%); index entropy 16.000 bits of 16 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0017% (window expectation 0.0015%)
[2026-10-07T19:36:57Z] site 15 (instr 63, src r1, k_off 1 offset 0, window 2^23 items): share of its reads into the top 0.1% 0.2072% (flat expectation 0.1018%); index entropy 15.000 bits of 15 uniform-on-window; saturated source 0.0000%; largest 256-item bucket 0.0033% (window expectation 0.0031%)
[2026-10-07T19:36:57Z] attribution: item 0x000000 (29722 reads) read from positions p38(it2 s6)x3787 p6(it0 s6)x3774 p102(it6 s6)x3732 p86(it5 s6)x3713 p70(it4 s6)x3696 p22(it1 s6)x3673 p54(it3 s6)x3620 p118(it7 s6)x3602 p15(it0 s15)x6 p43(it2 s11)x5 p79(it4 s15)x5 p39(it2 s7)x4
[2026-10-07T19:36:57Z] attribution: item 0x200000 (10078 reads) read from positions p54(it3 s6)x1320 p70(it4 s6)x1305 p102(it6 s6)x1269 p22(it1 s6)x1246 p118(it7 s6)x1242 p86(it5 s6)x1219 p38(it2 s6)x1199 p6(it0 s6)x1171 p119(it7 s7)x5 p27(it1 s11)x5 p71(it4 s7)x5 p80(it5 s0)x5
[2026-10-07T19:36:57Z] attribution: item 0x300000 (7889 reads) read from positions p22(it1 s6)x988 p118(it7 s6)x987 p6(it0 s6)x982 p70(it4 s6)x980 p86(it5 s6)x963 p54(it3 s6)x961 p102(it6 s6)x957 p38(it2 s6)x956 p119(it7 s7)x8 p7(it0 s7)x7 p47(it2 s15)x6 p1(it0 s1)x5
[2026-10-07T19:36:57Z] attribution: item 0x180000 (6223 reads) read from positions p118(it7 s6)x814 p86(it5 s6)x784 p22(it1 s6)x772 p102(it6 s6)x770 p38(it2 s6)x761 p54(it3 s6)x749 p70(it4 s6)x737 p6(it0 s6)x716 p103(it6 s7)x7 p87(it5 s7)x5 p43(it2 s11)x4 p55(it3 s7)x4
[2026-10-07T19:36:57Z] attribution: item 0x100000 (5739 reads) read from positions p38(it2 s6)x725 p102(it6 s6)x723 p86(it5 s6)x707 p70(it4 s6)x699 p6(it0 s6)x697 p22(it1 s6)x688 p54(it3 s6)x687 p118(it7 s6)x681 p11(it0 s11)x6 p7(it0 s7)x4 p23(it1 s7)x4 p58(it3 s10)x4
[2026-10-07T19:36:57Z] attribution: item 0x0c0000 (4809 reads) read from positions p70(it4 s6)x655 p22(it1 s6)x611 p86(it5 s6)x610 p102(it6 s6)x587 p38(it2 s6)x573 p54(it3 s6)x566 p6(it0 s6)x551 p118(it7 s6)x534 p23(it1 s7)x6 p11(it0 s11)x5 p87(it5 s7)x5 p7(it0 s7)x4
[2026-10-07T19:36:57Z] attribution: item 0x080000 (4756 reads) read from positions p102(it6 s6)x593 p70(it4 s6)x590 p118(it7 s6)x581 p38(it2 s6)x578 p22(it1 s6)x577 p6(it0 s6)x573 p54(it3 s6)x569 p86(it5 s6)x563 p7(it0 s7)x10 p119(it7 s7)x6 p71(it4 s7)x6 p103(it6 s7)x6
[2026-10-07T19:36:57Z] attribution: item 0x380000 (4599 reads) read from positions p102(it6 s6)x590 p6(it0 s6)x576 p54(it3 s6)x568 p22(it1 s6)x567 p118(it7 s6)x556 p86(it5 s6)x549 p70(it4 s6)x541 p38(it2 s6)x534 p55(it3 s7)x8 p103(it6 s7)x6 p95(it5 s15)x6 p43(it2 s11)x5
[2026-10-07T19:36:57Z] hottest item p100767-attack-f8 (0x000000): 29722 reads (0.0014% of all); predicted source site-instr6:r6:zero:last-writer-mad@4
[2026-10-07T19:36:57Z] program p100767-attack-f8 DONE: 16777216 nonces; 6-sigma (windowed) FLAGGED; hot-set FLAGGED; verdict FLAGGED
Terminated
lease: released 32 pool cores after 706 s, exit 0

View file

@ -0,0 +1,972 @@
# Report: adversarial pass on the program acceptance rule (class v4 sub-version 3)
internal adversarial pass, not an independent review
- Target commit: 017e70376489251e18564c0abce7e466e606c8b3 (class v4 sub-version 3, object byte 7).
- Crate built: igneum-pow at the frozen commit (this worktree's igneum-pow/ is reset to it; build/master
diverged by 635 deletions and is not used). Harness: tools/attack/adv-accept (depends on igneum-pow by path).
- Re-base (19:3x BST): build/master moved to 7a7caa34 whose igneum-pow IS the frozen object; merged at
8748e955ceb48be5a6cbf7f8718a4884d3de9828; `git diff --quiet 017e7037 HEAD -- igneum-pow` prints IDENTICAL.
Nothing measured here was on a stale tree: igneum-pow/ had been reset to the frozen object before the first build.
- Binary sha256 (first build, box 2): e3d35f4464937f91aac0648e2ee7134f33c85c7aa314b87b33f91059dedc6682 (adv-accept
single-binary build); the two-binary build (adv-accept, adv-live = the unmodified f8 harness) sha256 is logged per
box in the run sections below.
- Boxes: igneum-build-1 (CPU-bound sweeps, by the coordinator's order) and igneum-build-2 (shard 0, already there).
nice 10 on every idle core, the capacity layer's yield (run-box.sh). Logs under
/srv/builds/igneum-wt-adv-accept/adv/ on each box (spared from the checkout clean by .igneum-scratch-spare; the
first 10k log on box 2 was wiped by a rebuild before the spare existed and is void anyway: old labels, old binary).
- Lane scope since 19:2x BST: THE BYPASS (Q1, Q2, Q5). Q3 is lane adv-accept-3's, Q4 lane adv-accept-2's.
- Seed space: the attack-pass F8 label space (program k = seed_words("igneum-attack-f8/program/k"), era
".../era/k"), so `adv-live warps --program k` measures the live hot set of exactly the program the sweep reports.
- rustc 1.99.0 both sides. First results by 8 October 2026 18:00 UTC. GPU: not available, so any per-card
hash-rate confirmation of a gain is BLOCKED and said so.
- Box-hours spent: about 15.1 (running time, both boxes; the standing table carries the breakdown). Budget 8, crossed at about 02:15 BST; the coordinator's line then ran the shards on to 16 box-hours or 10:15 BST, whichever first. The last shard ended at 09:37 BST and the sweep closed at 09:47 BST with nothing holding or waiting on either box.
## Draw-path validation (must pass before any claim)
The shared devnet epoch-0 class v4 program drawn through Epoch::chain_program(ProgramClass::V4) has
program id a785001687d8688a at attempt 1 (class mx8-erad810f22d+sh256x27), which matches the frozen
pack proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.json and the brief. So my draw path is the
chain's. Command: `adv-accept derive-check` on box 2. Devnet 3 epoch-0 (id fce15bf61030be57) derive
check is owed once I copy its program.json read-only from build-1.
## Status board
| Q | Method | Known-failed shape (must fire) | Gate | Result | Status |
|---|---|---|---|---|---|
| Q1 | Steering/hot set: the chain's class v4 draw over the F8 label space (shards of 100k seeds; 19:27 BST to 19:4x BST under the SIGSTOP yield, since 19:4x BST nice 10 on cores 8-95, no yield), the stand-in per-site ratio at 256 units as the proxy, the live hot set by the unmodified f8 harness (adv-live) on the lowest-ratio seeds and on a consecutive-seed census | adv-live const-item plant FLAGGED (21.8x, X_1% +6.49); clean control 0.9996x PASS | X_f >= f flags a hot set; gain = implied on-die SRAM copy size | 796,042 accepted programs drawn (final, 09:47 BST); nine pass the rule and flag the f8 hot-set test at 2^24 nonces (100767, 4346, 5245, 1738, 170, 106924, 107022, 122960, 228763; X_0.1% +0.102% to +0.221%, 1.54x to 2.24x), 100767 also under the class v5 dataset; 37 lowest stand-in-ratio seeds live: 22 beyond the f8 1.2x gate, 9 hot sets; 20 random: 1 beyond, 0 hot sets; every hot set is 1 MB of items holding 0.26 to 0.41% of reads: gain 1.002x; the class v5 floor at 0.995 refuses all nine read at 2^20 (0.9809 to 0.9919) | FINDING, bounded: a program-dataflow distinguisher (site 6, a near-zero source under the 1% (c') limit) that survives the class v5 dataset; not an exploitable bypass; the 256-unit selector is weak (7 of 12 false positives); shards and 23 live rows re-queued in the lease pool |
| Q2 | Stand-in gap: a validated mirror runs the rule's own units on the closed form and on the live dataset; per-site ratio at 2^20 and the (c) metrics compared | zero-dataset plant: live 0.9733 REJECT against closed accept (fired) | any false accept that reads a hot set on the live set | 54 programs: max per-site gap 0.0004 (the 2^20 sampling noise), mean min-ratio gap 0.00002, 0 verdict disagreements, (c) metrics agree to 0.019 of 128 | BOUND |
| Q3 | Row 90 (exhaustion census) claimed by this lane, owner adv-accept-3 (unspawned): every candidate of 10,000 seeds through the real rule, first failing part recorded | forced-exhaust plant hit the cap and printed the last-resort program (accepted as drawn, no lossy op) | P(exhaust) bounded; last resort characterised | 20,000 seeds, 42,711 rejections: (a') 83.5%, (a) 11.6%, (b) 3.0%, (c'') 1.1%, the rest under 1%; per-candidate rejection 0.681 flat across attempts; P(exhaust) 2e-43; 0 exhaustions; max attempt 28 | BOUND (owner adv-accept-3, unspawned) |
| Q4 | Handed to lane adv-accept-2 | | | | HANDED OVER |
| Q5 | Generator distinguishers over accepted programs: lossy last write, register-set collapse, the per-site ratio tail against the 0.98 floor | the five lowest-ratio seeds reproduce as live tail programs (done); F8 p15/p18/p19/p56 reproduction owed | a structural shape that lowers the live distinct-item count | first 864: lossy last write in 83%, 0 register collapse, min ratio 0.9986 at 256 units; at 2^20 the tail reaches 0.9832 (floor 0.98) | RUNNING |
| Q6 | Fixed (c) sample grindability; live-size invariance of the (c) verdict | | BOUND unless something fires | not started | PENDING |
The plant (known-failed shape for the harness itself) fired: planting an `or` write of a load's
source register immediately before the load makes the rule reject with "(a') load at 1 reads r4, not
fresh by dataflow in the loop's steady state". So the harness reads the real rule, not a copy.
Command: `adv-accept plant --seed 0` on box 2.
## Q1 and Q5: the accepted-program sweep (RUNNING, sharded)
Ten shards of 100,000 seeds (k = 2..1,000,001 of the F8 label space), each
`adv-accept sweep --seed-start S --seeds 100000 --threads 96 --ratio-units 256 --out
/srv/builds/igneum-wt-adv-accept/adv/sweep-sNN.txt`, started through run-box.sh (nice 10, yield to
builds, pid/pgid/yield pid files beside the log). Shard 00 (S = 2) on box 2, started 19:27 BST. Shard 01
(S = 100,002) on box 1, started 19:30 BST. Shards 02..09 sit as self-contained scripts in
/srv/builds/_adv/accept/queue/ on box 2 (claim by mkdir under claims/), to be run back to back on
whichever box has idle cores. Every row is written as it lands, so a partial shard is data.
Live hot set (the measure the chip model prices): `adv-live warps --program k --nonces N` (the
unmodified f8 harness: the day's items derived into a table, the cross-hash item histogram, the
hot-set test X_f >= f against the window-model control, the 6-sigma test, library agreement checks).
Known-failed shape run first: `--plant const-item` on program 2 at 10^6 nonces (box 1, 19:30 BST, log
adv/live-plant-p2.log) beside its clean control (adv/live-control-p2.log). The plant must be FLAGGED
and the control clear before any live number below is trusted.
Seeds: epoch bytes = LE words of seed_words_from_bytes("igneum-attack-f8/program/k"), era bytes of
".../era/k"; each drawn through the chain path generate_era(V4_CLASS, V3_ALLOWED), which runs the
full attempt loop and the real acceptance rule.
Per accepted program the sweep records: attempt, program id, the closed-form distinct-item mean per
hash (the rule's own (c) metric; 128 is ideal, the rule floor is a mean above 120), the minimum
per-site distinct-index ratio at 256 units (the (c'') metric sampled cheaply; the enforced floor is
0.98 at 2^20 units), the saturated-final count and the output-bias max.
This is the closed-form proxy for Q1 and the headroom characterization for Q5. The live-dataset hot
set (the memory-hard cache, items derived into a table, the cross-hash histogram with the hot-set
test) is the next run and is what the chip model prices; the closed-form distinct mean is a cheap
upper bound on how concentrated an accepted program can be on the stand-in.
Numbers land here when the run finishes (first results by 8 October 18:00 UTC).
## Results as they land
### Tool validation (box 1, 19:30 BST, 10^6 nonces each, about 30 s per run on 32 threads)
| Run | Hot-set test (window-model control) | Top 0.1% share ratio over the window model | 6-sigma | Verdict |
|---|---|---|---|---|
| `adv-live warps --program 2 --plant const-item` (known-failed shape) | f 1%: S_f 8.58%, E_f 2.09%, X_f +6.49% (X_f/f 6.49) HOT SET | 21.80x (flat control 26.85x) | FLAGGED | FLAGGED |
| `adv-live warps --program 2` (clean control) | f 1%: S_f 2.56%, E_f 2.09%, X_f +0.47% (X_f/f 0.47) no hot set | 0.9996x (flat 1.2312x, the window layer) | clear | PASS |
The plant fires and the control is clean, so the live hot-set numbers below are trusted. Logs
adv/live-plant-p2.log and adv/live-control-p2.log on box 1.
### Sweep shard 01, first 864 accepted programs (box 1, seeds 100,002..., read at 19:33 BST)
| Metric | Value |
|---|---|
| Attempt histogram 0..9 | 273, 191, 134, 90, 59, 38, 34, 12, 7, 11; max 26 |
| Min per-site distinct-index ratio at 256 units | 0.9986 (floor 0.98 at 2^20; every row above 0.998) |
| Programs with a lossy (or/mul/mulhi) last write to an output register | 715 of 864 (83%) |
| Programs writing fewer than 8 registers | 0 |
| Last-resort programs | 0 |
| Lowest-ratio seeds (live hot set queued) | 100211 (0.9986), 100629 (0.9987), 100064, 100767 (0.9988), 100159 |
Reading: on the stand-in the accepted population sits 0.02 above the 0.98 floor at this sample size; the
floor leaves headroom (Q5), and no accepted program in this sample comes near it. Whether any of the
lossy-last-write programs concentrate reads on the LIVE set is what the live census answers.
### Rule change in the method column (box-hours honesty)
19:27 BST to 19:4x BST: shards ran under the capacity layer's SIGSTOP yield and were paused almost the whole
time (a build slot held nearly continuously on both boxes). Ruling at 19:4x BST: yield dropped, every sweep at
nice 10 on cores 8-95 (cores 0-7 reserved for release builds, the seed and the observer). Shards 00 and 01
SIGCONTed and re-pinned at 19:4x BST. Box-hours before the ruling: about 0.1 of running time.
### Live hot set of the five lowest-ratio shard-01 programs (box 1, 19:37 BST, 10^6 nonces each)
All five pass the rule (they are the chain's accepted programs). Log logs/adv-accept/live-lowratio-s01.log.
Columns: the f8 gate (top 0.1% share over the window-model control, gate 1.2x), the hot-set excess X_f at
f = 0.1% and 1% (a hot set needs X_f >= f), the windowed 6-sigma test, the hottest item and its traced source.
| Seed | id | attempt | closed ratio (256 u) | top 0.1% over window model | X_0.1% / X_1% | 6-sigma (buckets64) | hottest item, reads, share, source |
|---|---|---|---|---|---|---|---|
| 100211 | d07885a437e237c7 | 0 | 0.9986 | 1.08x | +0.026% / +0.049% | +42.4 sigma FLAGGED | 0x454585, 1238 (0.0010%), site instr 4 reads r0 one-zero-bit, writer load@3 |
| 100629 | 37c849d9741c5994 | 0 | 0.9987 | 1.01x | +0.003% / +0.015% | +5.6 within | 30 reads, none |
| 100064 | 2442abf9d56f6611 | 2 | 0.9988 | 1.17x | +0.044% / +0.189% | +77.3 sigma FLAGGED | 54 reads; the flag is a 256-item bucket at p43 (iteration 2, site 11, instr 33) holding 0.048% of that position's reads against 0.0061% expected (8x) |
| 100767 | 9d68e6286fc817d4 | 2 | 0.9988 | 1.34x BEYOND the 1.2x gate | +0.087% / +0.138% | +68.0 sigma FLAGGED | 0x000000, 1677 (0.0013%), site instr 6 reads r6 = zero, writer mad@4; saturated-source share 0.013% at that position (the (c') limit is 1%) |
| 100159 | 573d650159a8b04e | 3 | 0.9988 | 1.07x | +0.020% / +0.124% | +37.5 sigma FLAGGED | 37 reads, none |
| p2 control (19:30 BST) | f8 seed 2 | | | 0.9996x | +0.00% / +0.47% (flat) | clear | 32 reads |
Reading, as an attacker. (1) The stand-in ratio does correlate with live concentration: four of the five
lowest-ratio seeds flag the windowed 6-sigma test at 10^6 nonces where the random control is clear, and one
sits beyond the f8 gate. (2) The concentration is NOT a hot set a chip can use: the top 0.1% of items (16.7k
items, 1 MB) take at most 0.34% of reads against 0.26% expected; the hottest single item takes 0.0013% of
reads. An on-die copy of these items saves under 0.1% of DRAM reads: no row of chip-model-v3.md moves.
(3) The mechanism is the known one, a near-saturated source (zero, or one bit off all ones) at one site in
one iteration, below the (c') 1% limit (0.013% here), so (c') never fires, and the per-site ratio at 0.98 is
loose enough (these sit at 0.9986) that (c'') never fires either.
### FINDING (bounded): seed 100767 at 2^24 nonces passes the rule and flags the f8 hot-set test (box 1, 19:4x BST)
Reproduce in one command, from the frozen crate (017e7037) with the unmodified f8-uniform harness built as
adv-live (tools/attack/adv-accept, `cargo build --release`):
adv-live warps --program 100767 --nonces 16777216 --threads 32 --diag 1 --validate sample --out <dir>
The program is the chain's class v4 draw for epoch seed bytes = the little-endian words of
seed_words_from_bytes("igneum-attack-f8/program/100767") =
74484b391756fc49568cdd716bcfd839a55d31a45633c223c65c7f2ab4617fd4 and era seed bytes = the same of
"igneum-attack-f8/era/100767" = 7a65a05391dcd87b8fdaf7f74813aa17c6e13f7c56a03da2aaa6176987ef038b
(f8's program_spec(k) for k >= 2; `adv-accept gap --seeds 100767` prints the same id), through
generate_era(V4_CLASS, V3_ALLOWED): attempt 2, program id 9d68e6286fc817d4, class
mx8-era763e5847+sh256x27, day bytes "igneum-day/" || 20730_le64 (f8's default day). The run's log is
logs/adv-accept/live-confirm-16m.log in this branch (copied from box 1,
/srv/builds/_adv-adv-accept/live-confirm-16m.log); the harness checks its mirror against Epoch::hash_warp
on 64 warps plus every 997th (0 mismatches in the log). Accepted by every part of the rule: it is the
program try_generate_class returns for the seed (attempt 0 and 1 rejected).
| Measure | Value | Uniform / control |
|---|---|---|
| Hot-set test f = 0.1% | S_f 0.303%, E_f 0.148%, X_f +0.155%, X_f/f 1.55: HOT SET | X_f >= f fires |
| Hot-set test f = 0.5%, 1% | X_f +0.266% (X/f 0.53), +0.325% (0.33): no hot set | |
| Top 0.1% share over the window-model control | 2.05x (0.5%: 1.37x, 1%: 1.23x); flat control 2.31x | f8 gate 1.2x; population 0.998x to 1.043x (14 random accepted programs, census, 10^6 nonces) |
| Windowed 6-sigma, 64-item buckets | largest bucket +294.8 sigma | population +4.4 to +30.6 at 10^6 nonces |
| Hot items (top 0.1% = 17,034 items, 1.0 MB) | 6,579,906 of 2,147,483,648 reads (0.306%) | 0.148% expected |
| Top 8 items | 0x000000 (29,355 reads), 0x200000, 0x300000, 0x180000, 0x100000, 0x080000, 0x380000, 0x0c0000: multiples of 2^19, read almost only from site 6 in every iteration | |
| Site attribution | site 6 (instr 23, src r6, quarter window) puts 3.35% of its reads into the hot items; site 7 (instr 32, src r0) 0.41%; every other site 0.00 to 0.21% (expected 0.10%) | |
| Site 6 source | r6, last written by mad at instr 4; saturated (zero) in 0.0126% of evaluations at that position (the (c') limit is 1%); the hot items are the images of small source values under the era stride | |
Gain, priced against chip-model-v3.md section 5.7: an on-die copy of the top 0.1% of items (1 MB of SRAM)
serves 0.31% of this program's loads instead of 0.15%, so it removes 0.16% of DRAM reads. The f = 1 chip's
rate is lanes over latency per read; 0.16% fewer reads is a gain of 1.002x. No row moves. The rule has let
through a program with a measurable, attributable hot set, and the hot set is worthless to a chip. The
distinguisher is real; the bypass is not exploitable at this size.
The other three lowest-ratio seeds at 2^24 nonces (same log): all BEYOND the f8 1.2x gate on the live
set, none a hot set by X_f >= f.
| Seed | top 0.1% over window model | X_0.1% (X/f) | 6-sigma | hot-set verdict |
|---|---|---|---|---|
| 100211 | 1.33x | +0.066% (0.66) | FLAGGED | clear |
| 100064 | 1.63x | +0.094% (0.94) | FLAGGED | clear |
| 100159 | 1.29x | +0.048% (0.48) | FLAGGED | clear |
| 23 random accepted programs (census, 10^6 nonces) | 0.998x to 1.043x, 0 over 1.2x | | 5 of 14 flagged weakly (+6 to +31) | |
So the stand-in's per-site ratio, read at 256 units in the sweep, is a working proxy for live concentration:
the five lowest of 4,600 all fail the f8 gate on the live set while the population passes it. A seed-steering
attacker (lane adv-accept-3's question) has a cheap selector. What it buys is the number above: a 1 MB hot
set holding 0.3% of reads.
What a larger search adds: the sweep ranks seeds by the stand-in ratio, and the worst of 4,600 accepted
programs gave X_0.1% = 0.155%. If the tail scales as the extreme of the population, 10^6 seeds reach a few
times that, still under 1% of reads. The census over consecutive seeds (random accepted programs) says how
often the hot-set test fires in the population; that number lands below.
### The selector's base rate (rows read at 01:08 BST, 8 October: 269,250 accepted programs, 46 shard files de-duplicated by seed)
The stand-in per-site ratio at 256 units, over every accepted program (one row per seed; every seed of the
F8 label space yields an accepted program through the chain draw):
| Quantile | min | 0.1% | 1% | median | max |
|---|---|---|---|---|---|
| ratio | 0.9811 | 0.9981 | 0.9993 | 0.9999 | 1.0000 |
| Threshold | Programs under it | Tries per hit |
|---|---|---|
| ratio < 0.9990 | 1,567 of 269,250 | 1 in 172 |
| ratio < 0.9980 (the lowest 25 measured live sat at or under this) | 271 | 1 in 994 |
| ratio < 0.9970 | 119 | 1 in 2,263 |
| ratio < 0.9960 | 70 | 1 in 3,846 |
| ratio < 0.9950 | 17 | 1 in 15,838 |
Over the 269,250: accepted attempt 0..11 = 86,535, 58,888, 39,382, 26,829, 18,609, 12,389, 8,531, 5,805,
3,937, 2,683, 1,764, 1,216; max 32; mean 2.121; last-resort programs 0; a lossy last write to an output
register in 224,724 (83.5 percent); register-set collapse 0. Of the ten lowest (148927 at 0.9811, 228763
at 0.9820, 638990 at 0.9879, 122960, 130488, 150347, 19921, 29307, 623492 at 0.9921, 34501), seven are
measured live and at 2^20 (two concentrate live: 122960 a hot set, 29307 a single hot item; five are clean
live, the floor's false refusals) and three surfaced after the 23:50 count (228763, 638990, 623492) and are
queued live and at 2^20.
Cost of the selector: one chain draw per try (about 3 s of one core: the accepted attempt's 2^20 ratio pass
dominates) plus a 256-unit ratio read (milliseconds). A seed-steering attacker who can choose among epoch
seeds needs about 1,000 candidate seeds per seed under 0.9980, where the live hot-set rate was 7 of 25.
### Row 90 (owner adv-accept-3, unspawned; claimed): the attempt loop, the cap and the last resort
Known-failed shape fired (box 2, 19:50 BST, `adv-accept attempts --seed-start 2 --seeds 3 --force-exhaust`,
log adv/attempts-plant.log): with every verdict read as a rejection the loop hits its cap and hands the
last-resort program, which the tool prints and re-checks. The three last-resort programs (cap 8 under the
plant): every or, mul and mulhi rewritten to xor (op mix xor 17 to 19, load 16, 0 lossy ops, 8 registers
written), and the real rule accepts each one as drawn (distinct mean 127.86 to 128.00, 0 saturated, bias
max 58 to 66). Reading: the last resort is predictable (a deterministic function of attempt 256's draw) and
is NOT weak by the rule's own measures; it is a program with no lossy op at all, which the live hot-set
measure has not yet been run on (owed). The 20k-seed census of real attempts (per-part rejections, cap
reached, P(exhaust)) is running (attempts-20k.log); its numbers land here.
### The defender's question 3: the concentration at the acceptance's own 2^20 sample (box 2, 20:4x BST)
`adv-accept gap --seeds 100767,100211,100064,100159,100629,2,3664` (lease 32, log logs/adv-accept/gap-rep8.log
when it ends): per site, over the rule's own 4,096 units x 32 lanes x 8 iterations = 2^20 random-nonce
evaluations, the share of the site's reads that land on word indices read 8 or more times (a uniform site on
a 2^26-word window repeats an index 2 or 3 times at most, so this share is 0.000 percent for a clean site).
| Program | the low site | distinct-index ratio closed / live | reads on indices read >= 8 times, closed / live | every other site |
|---|---|---|---|---|
| 100767 (the exemplar) | site 6 (instr 23, r6) | 0.9919 / 0.9920 | 0.168% / 0.151% | 0.000% |
| 100211 | site 9 (instr 31) | 0.9907 / 0.9908 | 0.186% / 0.179% | 0.000% |
| 100064 | min site 0.9832 / 0.9831 | | under 0.01% at every site | |
| 100159 | min site 0.9834 / 0.9832 | | under 0.01% at every site | |
| 100629 | min site 0.9834 / 0.9834 | | under 0.01% at every site | |
| 2 (control) | none under 0.9999 | | 0.000% everywhere | |
| 3664 (the lowest 256-unit read, 0.9945) | min site 6 at 0.9944 / 0.9943 | | under 0.01% | its 256-unit read was not noise: the 2^20 ratio agrees |
All seven done (log logs/adv-accept/gap-rep8.log). Two of the seven carry a site with over 0.1 percent of its
reads on heavily repeated indices (100767 site 6, 100211 site 9); the other low-ratio programs reach 0.983
at 2^20 through spread repeats under 0.01 percent per site, a different shape: a site that is slightly
less than uniform everywhere rather than one hot image.
So the concentration the sequential 2^24 run shows (site 6 putting 3.35 percent of its reads into the top
0.1 percent of ITEMS, 17k items) appears at the acceptance's own random-nonce sample as 0.17 percent of
site 6's reads on heavily repeated WORD indices and a ratio of 0.9919: the two readings agree once items
(16 words each, 2^24 of them) are told from words (2^28), and the rule's sample does see it; its floor at
0.98 is set below it.
### Two mechanisms, not one (sibling input from adv-cache-2, 23:1x BST, and this lane's check)
adv-cache-2 reports (their measurement, not re-run here) a mechanism for the mild biased-site class: with
`load_index` = rotl(x * M, R) then the 28-bit mask and an odd M, the low bits of the product are a
function of the low bits of x alone, so a source whose low bits carry a product's law (P(bit 0) = 1/4, bit 1
3/8, bit 2 7/16, measured on Devnet 3 site 0 and their era-drawn-10 site 7) carries that bias into address
bits R, R+1, R+2; with R = 29 (the devnet era) those bits sit above the mask and vanish, with R in 1..27 they
land in the item index. Their controlled pair (one base program under two eras) reads 1.00x to 1.01x under
R = 29 and 1.06x to 1.51x under R of 3 to 22; 5 of their 50 programs read over 1.2x at one site.
This lane's check, from the era line each live run prints (logs in logs/adv-accept/):
| Live verdict | seeds and their era rotation R |
|---|---|
| hot set by X_f >= f (8) | 100767 R 28, 4346 R 19, 5245 R 29, 1738 R 29, 170 R 29, 106924 R 11, 107022 R 30, 122960 R 10 |
| beyond the gate, no hot set (10) | R = 31, 9, 7, 2, 10, 5, 28, 27, 25, 5 |
| clean low-ratio seeds (6) | R = 3, 24, 1, 4, 9, 28 |
| random clean (17) | R = 27, 14, 1, 13, 30, 5, 21, 29, 1, 18, 20, 27, 9, 25, 4, 11, 17 |
adv-cache-2's correction (23:2x BST): rotl by R sends product bit b to address bit (b + R) mod 32, so the
28-bit mask cuts product bits 28 - R to 31 - R; R of 28, 29 and 30 cut the biased bits 0 to 2 (R = 31 keeps
bit 1 at address bit 0), and R in 1..27 keeps them inside the index, so 28 of 31 rotations let the law
through; the devnet era's R = 29 is a lucky one (its 32 programs read clean against 8 of 20 drawn-era
programs with a site over 1.04x). They also name a second sub-class: a warp-uniform source (a high product
of two small words is 0 in every lane and the shuffles keep the lanes equal) at about one warp in 16,000,
which reads as one item taken 512 times by 16 whole warps (their era-fixed-20 and era-drawn-20, site 11,
1.22x to 1.26x); the rule's lane-constant test (c) runs 64 units and cannot see a 1-in-16,000 event. Their
new seed: era-drawn-17 (epoch "igneum-adv-cache-2/epoch/17", era ".../era/17", R = 11, attempt 1, id
5d2d50b934b23e2d), site 0 at 1.21x. Chip gain of both sub-classes: nil (0.05 percent of a hash's reads).
Reading: five of the eight hot sets carry R of 28 to 30, where the product-law bits are cut by the mask, so
the hot-set class is not adv-cache-2's mechanism. It is the near-saturated-source class: a source that
reaches zero or all-ones maps to ONE item whatever M and R (zero gives index 0: item 0x000000 is the hottest
in 100767, 4346, 5245 and 170; all-ones gives the fixed image of -M), and that is why these programs
concentrate hundreds of thousands of reads on a few items where the product-law class spreads a 1.1x to 1.5x
excess over a window. The two live-clean shapes (106924 at R 11, 107022 at R 30) are a third, smaller
set with neither signature traced. For the rule: the per-site distinct-index ratio catches the first class
(0.9821 to 0.9919 at 2^20, all refused by 0.995) and misses the second (0.9992 to 0.9997); the second class
is the stride's and is what a change to `load_index` (R restricted, or the low product bits folded) would
address, not a floor.
### The class v5 floor at 0.995 against the measured concentrations (main's five-program job, box 2, 21:35 BST)
`adv-accept gap --day 20733 --hex <devnet3>:<devnet3>:devnet3-epoch0-v4` and `adv-accept gap --day 20730
--seeds 4346,5245,106924,107022 --hex <era-fixed-20> --hex <era-drawn-2>`, each through `lease pool 8
--min 4` (logs logs/adv-accept/gap-five-d20733.log, gap-five-d20730.log, gap-hot2.log). The minimum per-site
distinct-index ratio at the acceptance's own 2^20 sample, against the class v5 floor (c''') of 0.995:
| Program | id, attempt | min site | ratio closed / live | against 0.995 | live concentration measured |
|---|---|---|---|---|---|
| seed 4346 (this lane) | bbb38e847011c354, 2 | 2 (instr 19) | 0.9840 / 0.9839 | refused | hot set, X_0.1% +0.178%, 2.24x |
| seed 5245 | beaad44840bb9e4e, 5 | 8 (instr 37) | 0.9831 / 0.9833 | refused | hot set, +0.129%, 1.86x |
| seed 106924 | 8aa3c604dba9d11b, 1 | 10 (instr 45) | 0.9821 / 0.9823 | refused | hot set, +0.221%, 2.21x (the second shape) |
| seed 107022 | 0fd1d15a8bd627d4, 1 | 10 (instr 44) | 0.9877 / 0.9876 | refused | hot set, +0.138%, 1.82x (the second shape) |
| seed 100767 (earlier read) | 9d68e6286fc817d4, 2 | 6 (instr 23) | 0.9919 / 0.9920 | refused | hot set, +0.155%, 2.05x |
| seed 1738 (gap-hot3.log, build-1, 21:37 BST) | 33ece54e2df5ea44, 4 | 13 (instr 54) | 0.9868 / 0.9870 | refused | hot set, +0.102%, 1.68x |
| seed 170 (gap-hot4.log, build-1, 21:48 BST) | 53a02a7c9c9b86f3, 4 | 2 (instr 11) | 0.9880 / 0.9877 | refused | hot set, +0.143%, 2.02x |
| seed 122960 (gap-122960.log, build-2, 22:41 BST; the deepest tail seed) | 4be7393ab6c84802, 0 | 12 (instr 45, src r6, full window) | 0.9824 / 0.9822; 1.31% of the site's reads on indices read 8 or more times | refused | hot set, +0.111%, 1.54x; hottest item 0.022% of all reads |
| seed 130488 (gap-newlow5.log, box 2, 23:08 BST) | 24d5e6511a1b83dc | 5 | 0.9898 | refused | CLEAN live: 1.0002x, X_0.1% +0.000% (a false refusal) |
| seed 19921 | fe35af21bc43a4cc | 4 | 0.9912 | refused | CLEAN live: 1.0005x (a false refusal) |
| seed 600738 | ef6d49f3871af472 | 8 | 0.9934 | refused | CLEAN live: 1.0002x (a false refusal) |
| seed 602822 | d8b5571c7abc80df | 3 | 0.9951 | at or above 0.995: passes | CLEAN live: 1.0003x (a true pass) |
| seed 148927 (gap-deep4.log, box 2, 23:23 BST; the lowest 256-unit read of 143,734) | c789fe5789ea71f0 | 0 | 0.9814 | refused | CLEAN live: 1.0028x (a false refusal) |
| seed 150347 | 23bc0a65fff5682b | 3 | 0.9896 | refused | CLEAN live: 1.0000x (a false refusal) |
| seed 34501 | 8b048a553cb6de4c | 0 | 0.9929 | refused | CLEAN live: 0.9998x (a false refusal) |
| seed 29307 | 0243919aa1b29078 | 1 (instr 3, src r3) | 0.9912 | refused | beyond the gate at 1.29x, no hot set by X_f; one item takes 0.027% of all reads (the third shape) |
| seed 228763 (gap-tail3.log, box 2, 01:12 BST) | 2c4be0f6dc44c423 | 9 (instr 32, src r0) | 0.9809 (the lowest minimum site of the pass) | refused | HOT SET, +0.118%, 1.82x; one item takes 0.057% of all reads (the third shape at scale) |
| seed 638990 | 682d8a67caf20d92 | 2 (instr 15, src r0) | 0.9872 | refused | beyond at 1.51x, no hot set; one item at 0.027% (the third shape) |
| seed 623492 | 283fa56f84e945f7 | 0 | 0.9922 | refused | CLEAN live: 1.0002x (a false refusal) |
| Devnet 3 epoch 0, class v4 | fce15bf61030be57, 0 (day 20733) | 0 (instr 3, src r6) | 0.9992 / 0.9993 | AT OR ABOVE: a residual the floor misses | adv-cache-2: site 0 bit law P(bit 0..2 = 1) = 0.250 / 0.375 / 0.4375, chi2/dof 3.70 at 2^26 |
| adv-cache-2 era-fixed-20 | 11f9f955b21d56c9, 1 | 11 (instr 46) | 0.9997 / 0.9997 | AT OR ABOVE: a residual | adv-cache-2: top 0.1% 1.26x its window control, one item read 512 times |
| adv-cache-2 era-drawn-2 | 7ceb797d31eedb3e, 0 | 13 (instr 55) | 0.9992 / 0.9993 | AT OR ABOVE: a residual | adv-cache-2: chi2/dof 2.04, top 0.1% 1.27x |
Reading. The floor at 0.995 refuses every program whose live hot set passes the f8 test X_f >= f (all
nine of this lane's, minimum sites 0.9809 to 0.9919) and both single-item programs (29307, 638990). It also
refuses programs with NO live concentration: of the twelve deepest 256-unit seeds read at 2^20, seven
(130488, 19921, 600738, 148927, 150347, 34501, 623492) read 0.9814 to 0.9934 at their minimum site and are
clean on the live set (0.9998x to 1.0028x of the window model, X_0.1% at 0.000 percent), one (602822)
passes at 0.9951 and is clean, and four (122960, 29307, 228763, 638990) are refused and concentrate live. So the (c'') statistic, repeated word indices at one site over 2^20 random
nonces, measures a stand-in deficiency that on the live set is usually spread thin (many indices read twice
or three times, no item above the noise in the top 0.1 percent) and only sometimes a hot set; the six are
the floor's false refusals, the population its 2.4 percent clean rejection rate pays, and each costs the
chain one redraw and nothing else. The 256-unit proxy and the 2^20 read agree on these deep seeds (148927:
0.9811 and 0.9814), so the proxy's weakness at the extreme is not sampling noise but this: a low ratio is
not a hot set.
The floor does not reach the three milder concentrations (top 0.1
percent share 1.26x to 1.27x, chi2/dof 2 to 3.7) whose minimum site reads 0.9992 to 0.9997, inside the clean
population's spread at 2^20 (clean median 0.9999, clean first percentile about 0.9993 over 29,032 programs).
Devnet 3's own first program is one of those three. What those residuals are worth to a chip: a 1.26x share
of the top 0.1 percent of items is 0.19 percent of reads on 1 MB against 0.15 expected, a gain of 1.0004x;
they are distinguishers at the chi-square level, not hot sets, and no floor on the distinct-index ratio that
keeps the clean rejection rate near 2.4 percent reaches them. The 1738 hot set's ratio (gap-hot3 on build-1)
lands when its lease gets cores.
### Row 90 result (owner adv-accept-3, unspawned; claimed by this lane): the attempt loop over 20,000 seeds (box 2, 23:22 and 01:33 BST)
`adv-accept attempts --seed-start 2 --seeds 10000` and `--seed-start 10002 --seeds 10000`, each at
`--threads 32` through `lease pool 32 --min 16` (logs logs/adv-accept/attempts-10k-a.log and -b.log, rows
attempts-10k-a.txt and -b.txt): every candidate of every seed walked through the real rule, the first
failing part recorded; 940 s and 1,112 s on 32 cores. The two halves agree to a tenth of a percent on
every share, so the table carries their sum.
| Measure | Value (20,000 seeds; the halves in brackets) |
|---|---|
| Seeds, accepted, exhausted | 20,000, 20,000, 0 (cap 256) |
| Rejected candidates | 42,711 (21,119 and 21,592); per-candidate rejection probability 0.681 (0.6787, 0.6835) |
| Rejection by part, all candidates | (a') unfresh 83.5%, (a) stale 11.6%, (b) no injecting write 3.0%, (c'') low-entropy site 1.1% (459), (c) constant bit 0.4%, (c) saturated 0.3%, (c') saturated source 0.05%, (c) distinct addresses 0.04%, (c) lane-constant 0, (c) bias 0, (c'') repeated 0 (not wired) |
| Attempt 0 | 20,000 candidates, 13,507 rejected (67.5%) |
| Attempts 1, 2, 3 | 67.8%, 68.3%, 69.7% rejected: the per-attempt rate does not drift |
| Accepted-attempt histogram 0..11 | 6,493, 4,346, 2,901, 1,890, 1,411, 906, 648, 452, 284, 234, 141, 86; max 28 (one seed); mean 2.136 |
| P(256 consecutive rejections) if attempts are independent | 0.681^256 = 2e-43 |
| Closed-form distinct-item mean of the accepted programs | 127.95 of 128; minimum 123.67 (the floor is 120) |
Reading. Rule (a') does the work: five of six rejections are the dataflow freshness check at the draw's
boundary, (a) and (b) one in seven, and the dynamic parts under 2 percent together, with (c'') the largest
of them at 1.1 percent (238 candidates, the per-site floor at 0.98). The per-attempt rejection rate is flat
at 68 percent across attempts 0 to 3, so attempts are independent draws and the cap of 256 is unreachable
in practice (8e-44 per seed; the devnet at one epoch an hour would need 10^39 years). The last resort is
therefore a path no chain reaches by chance; it is reachable only by a rule that rejects everything (the
plant above), and what it hands over is a program with no lossy op that the rule accepts as drawn. For an
attacker who steers the seed: the attempt index adds no freedom beyond the seed (each attempt is a fresh
seed-word set), and the accepted attempt's distribution is the same for every seed, so nothing in the
attempt scheme is a lever. Owner adv-accept-3 (unspawned); rows 91 and 92 are theirs.
### Q2, the stand-in gap: first bound (box 2, 19:46 BST, `adv-accept gap`)
Tool: a mirror interpreter with per-site index capture, run on the rule's own base nonces (seed-keyed
acceptance stream) with init words = seed words, once on the closed-form dataset and once on the LIVE
memory-hard dataset (day 20730, the kit's day). Validation on every program: the mirror's 32 hashes equal
the library's hash_warp on 8 units on both datasets, and the mirror's closed-form per-site distinct counts
equal the library's distinct_indices_v4 on all 4096 units. Known-failed shape `--plant zero-dataset`
(every live word 0): live min ratio 0.9733, verdict live REJECT against closed accept, live distinct
mean 115.99 against 128.00: the tool reports a gap when there is one. Logs adv/gap-plant.log, gap-first.log.
| Seed | id | min per-site ratio closed (2^20) | min live (2^20) | largest site gap | (c) on 64 units: distinct mean, saturated, bias max (closed / live) | verdict closed / live |
|---|---|---|---|---|---|---|
| 100767 (the finding) | 9d68e6286fc817d4 | 0.9919 | 0.9920 | +0.0002 | 127.714, 0, 82 / 127.730, 1, 53 | accept / accept |
| 2 (control) | 8a0047b2eb071ade | 0.9999 | 0.9999 | -0.0002 | 128.000, 1, 56 / 128.000, 0, 57 | accept / accept |
| 100211 | d07885a437e237c7 | 0.9907 | 0.9908 | +0.0002 | 128.000, 0, 61 / 128.000, 0, 57 | accept / accept |
| 100064 | 2442abf9d56f6611 | 0.9832 | 0.9831 | +0.0002 | 128.000, 11, 64 / 128.000, 6, 51 | accept / accept |
Reading. The per-site index distribution is set by the program and the register init, and the dataset words
it folds in act as fresh randomness on both sides: the closed form and the live set give the same ratio to
2 parts in 10,000 at 2^20 evaluations, and the same (c) verdicts. No stand-in gap to steer into on these four.
Also: the cheap 256-unit proxy did rank real tail programs, and 100064 sits 0.0032 above the 0.98 floor at
2^20, so the floor is live in the population tail, not idle.
Q2 BOUND over 50 consecutive accepted programs (seeds 3..52, box 2, 20:0x BST, `adv-accept gap --seeds 3,...,52
--threads 32`, log logs/adv-accept/gap-50.log; about 10 s per program):
| Measure over 50 programs, 800 site rows, 2^20 evaluations per site | Value |
|---|---|
| Largest closed-vs-live gap in any site's distinct-index ratio | 0.0004 |
| Mean of (closed min ratio - live min ratio) | 0.00002 |
| Verdict disagreements under the 0.98 floor | 0 of 50 (min closed 0.9927, min live 0.9928) |
| (c) on 64 units: largest closed-vs-live gap in distinct mean per hash | 0.019 of 128 |
| (c) saturated finals: sum of (closed - live) over 50 | -21 of 16,384 x 50 (noise about the 0 line) |
| Either side over the saturation limit (164) or the bias limit (136) | 0 |
Bound: on 54 accepted programs the stand-in and the live dataset agree on every verdict and on every
per-site ratio to 4 parts in 10,000, which is the sampling noise of a 2^20 draw (one standard deviation of
the distinct count is about 90 of 1,040,000, or 0.0001 in the ratio). The threshold-edge disagreements the
spec reports (39 in 100,000) are consistent with this spread; a program would have to sit within 0.0004 of
the floor for the two sides to disagree, and nothing an attacker chooses moves the live side away from the
closed side by more than that, because the words folded in are uniform on both. Steering through the gap is
not available. What a longer pass adds: more programs near the floor to count the edge cases, which the
sweep's ratio column already locates (rows under 0.9810 at 256 units, then a 2^20 gap read on each).
### Widened live confirmation: the 20 lowest and 20 random (RUNNING, 2^24 nonces each)
- box 1, 19:5x BST: `adv-live warps --program k --nonces 16777216 --threads 48 --diag 1` for the 20 lowest
stand-in-ratio seeds of the 16,337 (3664, 103378, 105756, 6610, 106474, 4765, 106700, 4346, 5245,
101905, 1605, 1738, 105371, 6842, 838, 3387, 103265, 170, 106924, 107022; ratios 0.9945 to 0.9980), log
live-low20-16m.log. This row answers the defender's false-positive question: of the lowest 20 (plus the
five already confirmed), how many are NOT beyond 1.2x live.
- box 2, 19:5x BST: the same at 32 threads for 20 random accepted seeds (4107, 101710, 101886, 6132,
105915, 5133, 1932, 2328, 3665, 101643, 1352, 100521, 106359, 4905, 102519, 101697, 106740, 327, 1180,
101805; ratios 0.9994 to 0.9999), log live-random20-16m.log: the control for the correlation.
| Seed | stand-in ratio (256 u) | live top 0.1% over window model | X_0.1% (X/f) | hot set |
|---|---|---|---|---|
| 3664 (lowest of 16,337) | 0.9945 | 1.311x BEYOND | +0.074% (0.74) | clear |
| 103378 | 0.9960 | 1.157x within | +0.028% (0.28) | clear |
| 105756 | 0.9960 | 0.9996x within | -0.000% (0.00) | clear |
| 6610 | 0.9960 | 1.062x within | +0.010% (0.10) | clear |
| 106474 | 0.9960 | 0.9996x within | -0.000% (0.00) | clear |
| 4765 | 0.9960 | 1.020x within | +0.003% (0.03) | clear |
| 106700 | 0.9960 | 1.0006x within | +0.000% (0.00) | clear |
| 4346 | 0.9968 | 2.241x BEYOND | +0.178% (1.78) | HOT SET |
| 5245 | 0.9970 | 1.857x BEYOND | +0.129% (1.29) | HOT SET |
| 101905 | 0.9973 | 1.336x BEYOND | +0.050% (0.50) | clear |
| 1605 | 0.9976 | 1.367x BEYOND | +0.054% (0.54) | clear |
| 1738 | 0.9977 | 1.678x BEYOND | +0.102% (1.02) | HOT SET |
| 105371 | 0.9977 | 1.369x BEYOND | +0.070% (0.70) | clear |
| 6842 | 0.9979 | 1.205x BEYOND | +0.036% (0.36) | clear |
| 838 | 0.9979 | 1.331x BEYOND | +0.054% (0.54) | clear |
| 327 (random) | 0.9999 | 1.0000x within | +0.000% | clear |
| 1180 (random) | 0.9999 | 1.0008x within | +0.000% | clear |
| 101805 (random) | 0.9999 | 1.046x within | +0.009% | clear |
Tally at 21:17 BST, 20 random rows complete and 20 of the lowest 25 measured, all at 2^24 nonces:
| Set | n | beyond the f8 1.2x gate | hot set (X_f >= f) |
|---|---|---|---|
| lowest stand-in-ratio seeds (the selector) | 20 | 13 (65%) | 4 (100767, 4346, 5245, 1738) |
| random accepted seeds (the control) | 20 | 1 (5%) | 0 |
Selector enrichment 13x on the gate (65 against 5 percent, binomial error about 11 points at n = 20) and
4 of 20 against 0 of 20 on the hot-set test. The false-positive rate of the 256-unit selector against the
gate is 7 of 20.
The chain's last six (21:27 BST), completing the lowest 25:
| Seed | stand-in ratio (256 u) | live top 0.1% over window model | X_0.1% (X/f) | hot set |
|---|---|---|---|---|
| 3387 | 0.9979 | 1.670x BEYOND | +0.092% (0.92) | clear |
| 103265 | 0.9980 | 1.2000x at the gate (within) | +0.035% (0.35) | clear |
| 170 | 0.9980 | 2.016x BEYOND | +0.143% (1.43) | HOT SET |
| 106924 | 0.9980 | 2.208x BEYOND | +0.221% (2.21) | HOT SET |
| 107022 | 0.9980 | 1.816x BEYOND | +0.138% (1.38) | HOT SET |
| 100629 (re-read at 2^24) | 0.9987 | 1.119x within | +0.018% (0.18) | clear |
Final tally at 2^24 nonces (21:30 BST):
| Set | n | beyond the f8 1.2x gate | hot set (X_f >= f) | largest X_0.1% |
|---|---|---|---|---|
| lowest 25 stand-in-ratio seeds of 29,032 (the selector) | 25 | 17 (68%) | 7 (100767, 4346, 5245, 1738, 170, 106924, 107022) | +0.221% (106924) |
| random accepted seeds (the control) | 20 | 1 (5%) | 0 | +0.065% (105915) |
The five lowest of the 88,051 (box 2, 22:05 BST, 2^24 nonces, --diag 1, log live-newlow5-16m.log):
| Seed | stand-in ratio (256 u) | live top 0.1% over window model | X_0.1% (X/f) | hot set |
|---|---|---|---|---|
| 122960 (the lowest of 88,051) | 0.9885 | 1.543x BEYOND | +0.111% (1.11) | HOT SET |
| 130488 | 0.9890 | 1.0002x within | +0.000% | clear |
| 19921 | 0.9914 | 1.0005x within | +0.000% | clear |
| 600738 | 0.9930 | 1.0002x within | +0.000% | clear |
| 602822 | 0.9942 | 1.0003x within | +0.000% | clear |
Seed 122960 (id 4be7393ab6c84802): the hot 0.1 percent (19,159 items) holds 0.343 percent of reads; its
hottest item 0x81ad88 takes 475,616 reads, 0.022 percent of all reads from one item, 16 times the hottest
item of 100767; traced to site instr 4 reading r4 = all-ones, last writer shfl@3; site 12 (instr 45, src
r6, full window) sends 2.17 percent of its reads into the hot set with a saturated-source share of 0.353
percent, a third of the (c') 1 percent limit, the closest to that limit seen. The other four lowest by the
256-unit read are clean live (1.0002x to 1.0005x), so the 256-unit proxy is noise at its own extreme: the
2^20 ratio the rule computes is the real selector (their 2^20 reads are in the floor table when they land).
The four lowest of the 143,734 not yet measured (box 2, 23:19 BST, 2^24 nonces, --diag 1, log
live-deep4-16m.log):
| Seed | stand-in ratio (256 u) | live top 0.1% over window model | X_0.1% (X/f) | hot set | note |
|---|---|---|---|---|---|
| 148927 (the lowest of 143,734) | 0.9811 | 1.0028x within | +0.000% | clear | clean live |
| 150347 | 0.9897 | 1.0000x within | -0.000% | clear | clean live |
| 29307 | 0.9914 | 1.291x BEYOND | +0.055% (0.55) | clear | hottest item 0x349d07 takes 579,069 reads, 0.027% of ALL reads, the largest single item of the night; no saturated or one-bit source maps to it; site 1 (instr 3, src r3, full window) 0.99% of its reads into the hot set |
| 34501 | 0.9929 | 0.9998x within | -0.000% | clear | clean live |
Seed 29307 is a third shape: one item takes 0.027 percent of all reads from a source that is neither zero,
all-ones nor one bit off either, and the rest of the program is uniform, so the f8 test (which asks for a
0.1 percent SET) does not fire while the gate does. For a chip it is one 64-byte item, worth 0.027 percent
of DRAM reads: nothing. For the rule it is the shape the per-site ratio reads most cheaply (one value
repeated 579k times in 2^24 x 8 evaluations at one site), and its 2^20 ratio is in the queued gap read.
The three tail seeds that surfaced after the 23:50 count (box 2, 01:11 BST, 2^24 nonces, --diag 1, log
live-tail3-16m.log):
| Seed | stand-in ratio (256 u) | live top 0.1% over window model | X_0.1% (X/f) | hot set | note |
|---|---|---|---|---|---|
| 228763 | 0.9820 | 1.820x BEYOND | +0.118% (1.18) | HOT SET | the ninth; hottest item 0xe2cc96 takes 1,218,380 reads, 0.057% of ALL reads, the largest single item of the pass (40x 100767's); no saturated or one-bit source maps to it; site 9 (instr 32, src r0, half window) 2.19% of its reads into the hot set, saturated-source share 0.000% |
| 638990 | 0.9879 | 1.506x BEYOND | +0.079% (0.79) | clear | one item 0xa67942 takes 581,502 reads (0.027% of all), the third shape again; site 2 (instr 15, src r0, quarter window) 1.84% |
| 623492 | 0.9921 | 1.0002x within | +0.000% | clear | clean live |
The third shape now has three members (29307, 638990, 228763): one item taking 0.03 to 0.06 percent of all
reads from a source that is neither zero nor all-ones nor one bit off, twice from a load reading r0 (the
register the iteration samples as `sel`), with the rest of the program uniform. For a chip it is one
64-byte item; for the rule it is one repeated index at one site, which the 2^20 ratio reads (29307 at
0.9912; the two new ones are in the gap-tail3 read).
So the stand-in tail is where the live hot sets live: 7 of 25 against 0 of 20 (the binomial error at n = 20
puts the control's rate under 15 percent), 8 of 30 with the five deepest, 8 of 34 with the four deepest of
143,734, and 9 of 37 with the three that surfaced in the 269,250; the 256-unit proxy below 0.995 is as often
clean as hot (six of the twelve deepest reads are clean). Every hot set is of the same size class: the top 0.1 percent of
items (about 1 MB) holding 0.28 to 0.37 percent of reads against 0.15 expected. Gain to a chip holding that
1 MB on die: 1.002x at the largest. The selector's false-positive rate against the gate: 8 of 25.
Reading at 21:1x BST (the re-submitted chain's first four, build-1, 2^24 nonces, --diag 1): two more hot sets.
The lowest-16 live set now reads 9 beyond the f8 gate of 16 (56 percent) and 3 hot sets by X_f >= f (100767,
4346, 5245) against 1 beyond of 17 random and 0 hot sets; the hot-set rate among the stand-in tail is 3 of 16
against 0 of 17. Seed 4346's excess (+0.178 percent at f = 0.1 percent) is the largest seen: still a 1 MB
item set holding about 0.33 percent of reads, gain about 1.002x. The distinguisher is real and repeatable;
its price does not move.
Attribution of the two new hot sets (log live-low14-16m.log, copied to logs/adv-accept/ at the chain's end):
| Seed, id, attempt | hot items (top 0.1%) and their reads | hottest item and traced source | sites carrying it |
|---|---|---|---|
| 4346, bbb38e847011c354, attempt 2 | 17,103 items, 0.326% of reads | 0x000000 with 97,943 reads (0.0046% of all); site instr 4 reads r4 = zero, last writer mad@1 | site 2 (instr 19, src r1, full window) puts 2.17% of its reads into the hot set; sites 8 and 9 (instrs 44 and 49) 0.67% each; largest saturated-source share 0.044% at site 2 |
| 5245, beaad44840bb9e4e, attempt 5 | 16,899 items, 0.281% of reads | 0x000000 with 47,936 reads (0.0022% of all); site instr 7 reads r2 = zero, last writer load@6 | site 8 (instr 37, src r2, quarter window) puts 3.36% of its reads into the hot set; the top 8 items are again multiples of 2^19 |
The same mechanism each time: one load site whose source register reaches zero (or a value near zero or
all-ones) in a few hundredths of a percent of evaluations, under the (c') 1 percent limit, with the era
stride mapping those values to a fixed item set; item 0x000000 is the hottest in all three programs.
The four hot sets of the chain's second half (same log), two of each shape:
| Seed, id, attempt | hot items (top 0.1%) and their reads | hottest item and traced source | the site | shape |
|---|---|---|---|---|
| 1738, 33ece54e2df5ea44, attempt 4 | 17,107 items, 0.256% of reads | 0xc00000, 38,597 reads; site instr 7 reads r3 one bit set, last writer load@6 | site 13 (instr 54, src r6, quarter window) 2.34% of its reads; saturated source 0.012% | near-saturated source |
| 170, 53a02a7c9c9b86f3, attempt 4 | 16,792 items, 0.285% | 0x000000, 37,780 reads; site instr 8 reads r2 = zero, last writer sub@6 | site 2 (instr 11, src r1, half window) 3.04%; saturated 0.016% | near-saturated source |
| 106924, 8aa3c604dba9d11b, attempt 1 | 16,951 items, 0.407% of reads (the largest) | 0x6e9c4c, 19,020 reads; NO saturated or one-bit source maps to it | site 10 (instr 45, src r4, full window) 4.70% of its reads; saturated source 0.000% | a second shape: a low-entropy source band that is not saturation |
| 107022, 0fd1d15a8bd627d4, attempt 1 | 16,782 items, 0.307% | 0xbd2a43, 24,317 reads; no saturated source maps to it | site 10 (instr 44, src r3, half window) 2.84%; saturated 0.000% | the second shape |
The second shape matters for the rule's design: in 106924 and 107022 the hot items are not the images of
zero or all-ones, so the (c') saturated-source count reads 0.000 percent at the site and only the per-site
distinct-index ratio (c'') sees them; a floor set on that ratio is the one instrument that catches both
shapes. Their 2^20 ratios are in the gap reads below when they land.
| 1352 (random) | 0.9999 | 1.057x within | +0.009% | clear |
| 100521 (random) | 0.9999 | 1.153x within | +0.025% (0.25) | clear |
| 106359 (random) | 0.9999 | 1.0001x within | +0.000% | clear |
| 4905 (random) | 0.9999 | 1.012x within | +0.002% | clear |
| 102519 (random) | 0.9999 | 0.9999x within | -0.000% | clear |
| 4107 (random) | 0.9999 | 1.0004x within | +0.000% | clear |
| 101710 (random) | 0.9998 | 1.0034x within | +0.001% | clear |
| 101886 (random) | 0.9998 | 1.0000x within | +0.000% | clear |
| 6132 (random) | 0.9999 | 0.9996x within | -0.000% | clear |
| 105915 (random, the lowest ratio of the random 20) | 0.9994 | 1.399x BEYOND | +0.065% (0.65) | clear |
| 5133 (random) | 0.9999 | 1.0215x within | +0.004% | clear |
| 1932 (random) | 0.9999 | 1.0024x within | +0.000% | clear |
| 2328 (random) | 0.9999 | 1.0025x within | +0.000% | clear |
| 3665 (random) | 0.9998 | 1.0002x within | +0.000% | clear |
| 101643 (random) | 0.9999 | 1.0017x within | +0.000% | clear |
| (17 lowest and 10 random rows land as the runs end, 20:2x BST) | | | | |
Base rate, corrected at 20:20 BST: at 2^24 nonces the f8 gate fires on random accepted programs too. Of the
first 10 random seeds, 1 (105915) is beyond 1.2x at 1.40x, and it is the one with the lowest stand-in ratio
of the random set (0.9994 against 0.9998 to 0.9999 for the other nine). So "beyond 1.2x at 2^24" has a base
rate near 1 in 10 among accepted programs (the 10^6-nonce census read 0 of 47 beyond because the gate is
sharper at 2^24), and the selector's 6 of 8 is an enrichment of about 6x over that base rate, not a clean
separation. The hot-set test proper (X_f >= f) has fired on 1 of 18 programs measured at 2^24 (100767).
Reading at 20:25 BST (final for tonight's rows; corrected: 100629 was within at 10^6, 1.011x), honestly:
the 256-unit selector is weak. Of the 12 lowest-ratio seeds measured live (100211, 100064, 100767, 100159,
100629, then 3664, 103378, 105756, 6610, 106474, 4765, 106700), 5 are beyond the f8 1.2x gate and 7 are not;
the random control is 1 of 11 beyond (105915 at 1.40x). The five that are beyond are four of the first
five (256-unit ratios 0.9986 to 0.9988, 2^20 ratios 0.9832 to 0.9919) and 3664 (0.9945); the seven that are
not include five that sit LOWER on the 256-unit read (0.9960), which says the 256-unit read is noise-dominated
at that level (one standard deviation of a 65,536-evaluation distinct count is about 0.001 in the ratio) and
the real selector is the 2^20 ratio the rule itself computes (2.8 s per candidate: 100064's 0.9832,
100211's 0.9907 and 100767's 0.9919 are genuinely low; 3664's 2^20 ratio is in the re-queued gap read). So:
selector enrichment about 4.6x over the base rate (42 percent beyond against 9 percent), false-positive rate
7 of 12 on the 256-unit read; the error on both is binomial at n = 12 and n = 11, about plus or minus 14
points. The hot-set test proper (X_f >= f) fired on 1 of 22 programs measured at 2^24 (100767), and on none
of the 11 random.
### Confirming row for the class v5 acceptance floor (c'''): pre-floor draw against post-floor refusal (box 2, 20:36 BST)
Not a class v5 finding. Does seed 100767 (id 9d68e6286fc817d4 under class v4) still read hot when the
dataset is class v5's state-derived one? Tool: tools/attack/adv-accept-v5 (the same f8 harness over the
vendored igneum-pow of branch class-v5 at 25c8063f, read-only input, which is the class v5 crate BEFORE
commit ab6f980b: it has no per-site floor (c''') yet). Under that pre-floor crate the class v5 draw of the
seed lands on attempt 2, id 2fd83dbae09c366d, the same base program and era as the v4 id. Under the frozen
class v5 rule (ab6f980b and later) the defender reports the same seed is REFUSED at attempt 2 by the new
per-site floor (c'''), which names site 6 at 0.991, and the v5 draw lands on attempt 4, id 734fbb8e3e4cd20f
(stated by the class v5 lane; not derived here). So this row measures the pre-floor program on the v5
dataset and shows what the floor was built to refuse: generator 5; the dataset XORs the window's state leaf
into every item before the first mixer. State stream: the Devnet 3 v5 pack's state.igsd1 (inputs/v5-dn3-epoch0-state.igsd1, 11
records, root 7e37a9fb...a311, leaves fnv f141bfee2a8b11b0), the only public state stream. Commands, through
the lease pool (lease 32, 16 cores taken), log logs/adv-accept/v5-exemplar.log:
adv-live-v5 warps --program 100767 --nonces 1000000 --plant const-item --state <stream> (known-failed shape)
adv-live-v5 warps --program 100767 --nonces 16777216 --diag 1 --validate sample --state <stream>
| Measure | class v4 (live-confirm-16m.log) | class v5 with the state leaves | plant (const-item, 10^6) |
|---|---|---|---|
| Hash agreement with the library's Epoch::hash_warp | 0 mismatches | 589 warps, 0 mismatches | skipped under the plant |
| Hot-set test f = 0.1% | X_f +0.15503%, X/f 1.55, HOT SET | X_f +0.15514%, X/f 1.55, HOT SET | X_f +6.32%, X/f 63 |
| Top 0.1% share over the window model | 2.0455x | 2.0462x | 25.7x |
| Windowed 6-sigma, largest 64-item bucket | +294.8 | +298.3 | +332,226 |
| Hot items (top 0.1%) and their reads | 17,034 items, 0.3064% of reads | 17,086 items, 0.3071% of reads | |
| Top 8 items | 0x000000 (29,355), 0x200000, 0x300000, 0x180000, 0x100000, 0x080000, 0x380000, 0x0c0000 | the same eight: 0x000000 (29,722), 0x200000, 0x300000, 0x180000, 0x100000, 0x0c0000, 0x080000, 0x380000 | 0x001234 (the plant) |
| Site attribution | site 6 3.350%, site 7 0.414% | site 6 3.358%, site 7 0.415% | |
| Hottest item's traced source | site instr 6, r6 = zero, writer mad@4 | the same | |
Reading. The state leaf changes every dataset WORD, and the hot set does not move by a part in a thousand:
the concentration is a property of the program's register dataflow at site 6 (r6 reaching zero through the
mad at instruction 4 in about 0.013 percent of evaluations, then the era stride mapping small values to
items at multiples of 2^19), not of the dataset's values. Any dataset keyed the same way through the same
load address function inherits it. So the class v5 change does not touch this finding; what would is a rule
on the program (the (c') saturation limit at 1 percent sits 80x above this program's 0.013 percent, and the
0.98 per-site floor sits 0.012 below its 0.9919) or a load address that does not map small sources to a
fixed item set. Price unchanged: 1 MB of on-die items serves 0.31 percent of loads, gain 1.002x, no row of
chip-model-v3.md moves under either class.
### Rule change 19:55 BST (box-hours honesty)
The bounded class became 88 cores per box in total across all lanes: no new sweep starts except under the
per-box lock `flock /srv/builds/_adv/locks/sweep.lock`, one sweep per box at a time; the running shards 00
and 01 finish as they are; my adv-live confirmations and the row-90 census count against the ceiling, so
nothing new starts until they end. Shards 02 to 09, the class-v5 check and any re-run go through the lock.
### Live hot-set census (RUNNING)
- box 2, 19:5x BST: `adv-live census --programs 2..201 --nonces 1000000 --threads 32` (200 consecutive accepted
programs of shard 00's range: the random sample), log adv/live-census-s00-2-201.log.
- box 1, 19:5x BST: `adv-live warps --program k --nonces 1000000` for the five lowest-ratio shard-01 seeds, log
adv/live-lowratio-s01.log.
## Ledger: the kill of 20:21 BST and the re-queue through the lease
Main's rule (relayed 20:2x BST): no sweep, census or verdict run on a box except through the build-server
lane's `lease pool <threads> -- cmd` (landing within the quarter hour); hand-started binaries killed by their
pid files now, not left to finish; release builds and the class v5 suites outrank every sweep tonight.
| Run | Box | Killed at (UK) | Reached | Lost | Re-queue |
|---|---|---|---|---|---|
| sweep shard 00 (seeds 3847..) | build-2 | 20:21:20 | 7,944 rows (plus 3,812 of part 0) | the rest of the shard | lease pool, from the frontier seed |
| sweep shard 01 (seeds 104649..) | build-1 | 20:21:13 | 6,943 rows (plus 4,622 of part 0) | the rest of the shard | lease pool, from the frontier seed |
| live census, 10^6 nonces, programs 2..201 | build-2 | 20:21:18 | 51 programs (32 in the mirror copy, 19 after) | programs 53..201 | lease pool |
| 20 lowest at 2^24 | build-1 | 20:21:12 | 6 of 20 | 14 rows | lease pool |
| 20 random at 2^24 | build-2 | 20:21:19 | 11 of 20 | 9 rows | lease pool |
| row 90 attempts census, 20k seeds | build-2 | 20:21:17 | no summary (prints at the end) | the whole run | lease pool, with progress lines added first |
| class v5 exemplar (queue 10), repeated-index read (queue 11) | build-2 | 20:21:52 | never ran (waiting on the sweep lock) | nothing | lease pool |
Accepted programs in hand after the kill: 23,319 distinct seeds (11,755 of shard 00 up to seed 11829;
11,564 of shard 01 up to 111630; 138 seeds in flight at the kills are gaps below the frontiers). Every
partial row above stays in this report as partial. Box-hours running before the kill: about 2.9.
Re-queue through `lease pool` (live on both boxes from 20:22 BST; every lease at most 48 cores, --min 16;
the pool rule: release builds and the class v5 suites outrank every sweep, and a waiter labelled "v5 gate"
or "v5 kit" means finish the shard in hand and release):
| Order | Run | Box | Queued (UK) | Lease |
|---|---|---|---|---|
| 1 | 14 remaining lowest-ratio seeds plus 100629, 2^24, --diag 1 | build-1 | 20:25:04 | 48 / min 16 |
| 1 | 9 remaining random seeds, 2^24 | build-2 | 20:25:11 | 32 / 16 |
| 2 | class v5 exemplar: const-item plant at 10^6, then 100767 at 2^24 with --diag 1, state = the Devnet 3 v5 pack's stream | build-2 | 20:25:11 | 32 / 16 |
| 3 | repeated-index gap read (seeds 100767, 100211, 100064, 100159, 100629, 2, 3664) | build-2 | 20:25:11 | 32 / 16 |
| 4 | row 90 attempts census, 20k seeds (after the rebuild with progress lines) | build-1 | 20:27:12 | 48 / 16 |
| 5 | shard 00 from seed 11830 (88,172 seeds); shards 02, 04, 06, 08 | build-2 | 20:2x | 32 / 16 each |
| 5 | shard 01 from seed 111631 (88,371 seeds); shards 03, 05, 07, 09 | build-1 | 20:2x | 32 / 16 each |
At 20:25 BST the pool on build-2 had 0 free cores (adv-accept-3 and another lane ahead in the queue); my
leases wait their turn. At 20:28 BST: all 15 of my leases wait with 0 free cores on both boxes (build-1: 12
leases of other lanes holding, 10 waiting; build-2: 3 holding, 11 waiting; load 100 and 89). Nothing of
mine runs; the lease waits up to 2 h and then gives up, so a lease that never gets cores by 22:25 BST is
re-queued again and says so here. The 00:00 BST reading carries the partial rows above if no cores free.
Yield rule widened at 20:3x BST: whenever `lease status` shows a waiter whose owner is class-v5 or whose
label contains "v5" (the v5 census is queued as "class v5 c3 census"), any run of mine HOLDING pool cores is
ended by its pgid file and re-queued at the back of the pool (a sweep from its frontier seed, its rows kept;
a live chain minus the programs already done). I do this by hand from the status polls; nothing changes
while my leases are waiters. Refined at 20:3x BST: the test is by OWNER: yield to a waiter whose owner is
class-v5, or whose owner is attack-pass with "v5" in its label; never to a waiter whose owner starts with
adv- (so my own "v5-exemplar" label and the sibling lanes' leases are not yield triggers).
Yield executed 20:41 BST on box 2 (the class v5 (c''') census, owner class-v5, 88 cores, waiting since
20:39 behind my leases): ended by pgid file live-random9-16m (6 of 9 done), gap-rep8 (7 of 7 done, nothing
lost) and sweep-s02 (2,474 rows kept, frontier 202482); withdrawn by pid the four waiting shards and the
re-queues made a moment earlier; box 2 then showed 0 holders and 0 waiters of mine at 20:41:38. By main's
order I take no lease on box 2 until the census is confirmed running; the box-2 order then resumes (3 random
seeds, shard 02 from 202482, shard 00 from 11830, shards 04/06/08). Build-1 unchanged.
Ranked lease (build-server lane, 20:40 BST, lease sha 5d84d644): classes release > v5 > measure > adv; an
adv holder above 32 threads is pre-empted after a higher class has waited 120 s; holders at 32 or fewer
never are; waiters started under the old tool are unranked. So at 20:42:52 BST on build-1 I killed my six
old waiters by pgid file and re-submitted each once at 32 threads with --min 16 (the 14-seed live chain,
row 90, shards 03/05/07/09); the holder sweep-s01b (32 cores, 2,134 rows at that moment) stays. No label
of mine contains a promoted word; the "v5-exemplar" tag is retired (its run is complete) and any re-run
will be tagged class5-exemplar.
20:44 BST: box 2 shows the class v5 census holding 48 of 88 pool cores since 20:41:55 (10 s after my
release). My box-2 queue stayed withdrawn until the coordinator's word.
21:13 BST: box 2 opened to adv-* (the census ended, no pool lease there, load 11); the box-2 queue
re-submitted through the ranked lease at 32/16 in order: the 3 remaining random seeds, shard 02 from
202482, shard 00 from 11830, shards 04/06/08. The yield stays mechanical: a class-v5 or attack-pass
v5-labelled waiter means release at shard end unasked.
21:26 to 21:36 BST, clearances for the decisive 2^20 reads (main's five-program job and my 1738 read were
starved behind my own shard holders): box 2, ended sweep-s00b (4,482 rows kept as part 1, frontier 16319)
and withdrew the waiting shards, then ended sweep-s02 (9,642 rows kept, frontier 212128) and withdrew again,
so gap-hot2 took 8 cores at 21:31 and the two five-program leases ran at 21:32 to 21:35; re-queued at 21:36:
s02c from 212128, s00c from 16319, s04/06/08. Box 1, ended sweep-s05 (2,124 rows kept, frontier 502127) and
withdrew attempts-20k and the shards, then ended sweep-s01b (27,131 rows kept as part 1, frontier 138766),
re-queued s01c from 138766 plus attempts-20k, s05 from 502127, s03/07/09; gap-hot3 still waited at 21:36
(other lanes' adv waiters ahead by arrival). Every end was by pgid file; no rows were lost (every sweep
writes its rows as they land); the inline-deletion rule of 21:33 BST touches nothing here (run-box.sh has no
rm and no truncation inside a bash -c string; the clearances renamed logs with mv).
21:50 BST: build-1, ended sweep-s07 (6,076 rows kept as part 1, frontier 706081) so row 90 (attempts-20k,
next of mine by arrival) can take cores before 00:00; the freed cores went to another lane's adv holder
first, so attempts-20k still waits by arrival; s07b re-queued from 706081. Sweep rows on the boxes at
21:50: about 46,700 on build-1 and 36,400 on build-2 across all shard files (with the frontier overlaps
of the re-launches), to be de-duplicated by seed for the 00:00 count.
21:54 BST: build-2, ended sweep-s06 (3,873 rows kept as part 1, frontier 603875) and withdrew the waiting
s04 and s08 so the live hot-set chain on the five new lowest seeds of 88,051 (122960, 130488, 19921, 600738,
602822; stand-in ratios 0.9885 to 0.9942) queues ahead of them; s06b from 603875, s04 and s08 re-queued
behind it. Build-1: the 2^20 ratio read of the same five queued at 8 cores, min 4 (gap-newlow5).
22:07 to 22:18 BST, box 2: the mechanical yield fired. At 22:08 an attack-pass "v5 gate" waiter (class v5)
appeared while I held three sweeps; main's order followed at 22:17 (the F8 gate on the frozen class v5 tip,
two halves of 32 at min 24, cannot start because the pool pre-empts only above 32 threads). Ended by pgid
file: sweep-s02c (9,406 rows kept, frontier 221536, ended 22:07 to make room for the 122960 read),
sweep-s00c (13,176 rows, frontier 29496), sweep-s06b (5,914 rows, frontier 609791), sweep-s04 (601 rows,
frontier 400603), sweep-s08 (no rows yet). Box 2 read 0 sweep holders of mine at 22:17:57 and both F8
halves held 32 and 30 cores. Kept on box 2: gap-122960 at 8 cores (the decisive 2^20 read of the deepest hot
set), queued at 22:06 and still waiting for cores at 22:18 (its first 600 s window passed with no DONE line;
a blank summary from that window is not a result and is not reported). The box-2 shards re-queue from their
frontiers once the halves finish. Rule from here, mechanical: on any box where `lease status` shows a class
v5 waiter, an adv-accept lease releases at its shard end whatever its size.
22:20 BST, build-1: the same rule fired there (9 class-v5 or v5-labelled attack-pass waiters). Ended by pgid
file: sweep-s01c (11,842 rows kept, frontier 150610) and the row-90 census attempts-20k at 12,500 of 20,000
seeds (it writes its rows only at its end, so those seeds are lost and are re-run). Re-queued at 32/16:
sweep-s01d from 150610, and the census as two halves of 10,000 (attempts-10k-a from seed 2, -b from 10002)
so a future release keeps a half. Build-1 then read 0 sweep holders of mine.
22:21 BST rule (build-server lane, lease sha ce30e357): a release or v5 waiter that has waited 120 s
pre-empts adv holders at any size, oldest first, SIGTERM at the shard boundary; the lane re-queues the same
line. My sweeps already keep every row as it lands and re-queue from the frontier; the gap tool prints per
program (about 15 s each). The row-90 census wrote its rows only at its end, so it is changed (22:2x BST)
to write each accepted row as it lands and to print the running per-part rejection totals and the
accepted-attempt histogram at every 500-seed tick; the two queued halves were ended by pgid file before the
rebuild and are re-queued with the new binary (done 22:24 BST: attempts-10k-a from seed 2 and -b from
10002, 32/16 on build-1). The box-2 shards re-queue automatically from their recorded frontiers (s00 from
29496, s02 from 221536, s06 from 609791, s04 from 400603, s08 from 800002) the minute `lease status` on box 2
shows no class v5 lease or waiter.
22:43 BST, box 2: by main's allowance (one shard at 24 may run beside the two F8 halves) sweep-s00d started
from 29496 at 24 cores, min 16; the other four shards wait on a watcher that fires when the class v5 work
clears. Record of a slip: the loop that ended the earlier full-clearance watcher matched its own command
line (the grep pattern sat in it, the pgrep self-match class of the standing rules) and ended its own shell
before the start; the start was re-issued and verified by `lease status` (queued 22:43:59, 0 free at that
moment). Every lease of this lane holding or waiting on either box is re-queueable from its recorded
frontier; the frontiers file is /srv/builds/_adv-adv-accept/frontiers.txt on each box.
23:03 BST, box 2: the class v5 work cleared (the F8 halves done, no class-v5 lease or waiter) and the four
remaining shards re-queued from their frontiers at 32/16: s02d from 221536, s06c from 609791, s04b from
400603, s08 from 800002; s00d (24 cores) had run beside the halves since 22:43.
23:05 BST, build-1: the pool held 11 attack-pass leases and my arrival order put four shards ahead of the
two named deliverables (row 90's halves and the five new-lowest 2^20 ratios), so sweep-s09 was ended by
pgid file (11,977 rows kept as part 1, frontier 911979) and the four shard waiters withdrawn, leaving
gap-newlow5 and attempts-10k-a/-b as my only waiters there; the shards re-queued behind them (s09b from
911979, s05 from 502127, s03 from 300002, s07b from 706081, s01d from 150610).
23:07 BST: build-1's pool stayed held by attack-pass (the freed cores went to adv-cache-2 by arrival), so
the two deliverables moved to box 2: gap-newlow5 (the five new-lowest 2^20 ratios, 8 cores) and
attempts-10k-a (row 90's first half, 32 cores) took cores there at 23:07:30 after I ended sweep-s00d
(9,617 rows kept as part 1, frontier 39114) and withdrew the four box-2 shard waiters; the box-2 shards
re-queued behind them (s00e from 39114, s02d, s06c, s04b, s08 from their frontiers). Row 90's second half
(attempts-10k-b) and the five build-1 shards wait on build-1.
23:10 to 23:12 BST, box 2: the four unmeasured deep-tail seeds (148927, 150347, 29307, 34501) queued as a
2^24 live chain (32/16) and a 2^20 read (8/4) ahead of my shard waiters (the four waiting shards withdrawn
and re-queued behind); sweep-s00e then ended by pgid file (its rows kept as part 1, frontier recorded in
frontiers.txt) so the chain takes cores; s00f re-queued from that frontier. The freed cores went to my own
re-queued sweep-s02d by arrival, so at 23:12 it too was ended (343 rows kept, frontier 221880; s02e
re-queued) and live-deep4 took 23 cores; gap-deep4 (8, min 4) waits beside it.
23:20 BST, box 2: the deep-4 live chain done (rows above); gap-deep4 still waited behind my own re-queued
sweep-s00f, so s00f was ended (rows kept, frontier recorded; s00g re-queued) and gap-deep4 takes its cores.
Record: row 90's first half on box 2 (attempts-10k-a, 8,000 of 10,000 at 23:20) runs box 2's binary from
before the pre-emption-safe change (that rebuild went to build-1 only), so it prints progress without the
running totals and writes its rows at its end; it is minutes from done and is left to finish; box 2 is
rebuilt now for any later run (done 23:21 BST).
23:22 BST, box 2: the freed cores went to my re-queued sweep-s08 rather than gap-deep4 (the pool's order
among adv waiters is not strictly by arrival), so every shard of mine on box 2 was ended or withdrawn
(s08 at 346 rows, frontier 800349) until gap-deep4 held its 8 cores, then the five shards re-queued from
their frontiers (s08 from 800349, s06c from 609791, s04b from 400603, s02e from 221880, s00g from 40822).
23:28 BST, box 2: the mechanical yield fired again (a class-v5 waiter, "c3 reading on listed programs",
16 cores, while my shards s08, s06c and s02e held cores). Ended by pgid file: s08 (2,894 rows kept, frontier
803254), s06c (2,055, frontier 611854), s02e (1,641, frontier 223522); s04b and s00g withdrawn before any
row; the waiter held 6 cores within seconds; the five shards re-queued from their frontiers at 23:29. Box 2
then read 0 holders of mine.
01:04 BST (8 October), box 2: the class v5 lane asked for cores for its release-class pinned-packs test
and the full igneum-pow suite (waiting since 00:55 with 0 free; my three holders sat at or under the
32-thread line where the pool's pre-emption did not reach them). Ended by pgid file: sweep-s08 (46,044 rows
kept, frontier 849304) and sweep-s06c (40,679 rows kept, frontier 652538); my two adv waiters (s04b, s00g)
withdrawn so they do not take the freed cores; sweep-s02e (23 cores) left running. The four shards re-queue
from their frontiers once the v5 runs hold cores (or after 20 minutes). Record: at 01:04 and 01:07 BST
`lease status` on box 2 showed no class-v5 or release waiter or holder at all, so the v5 lane's two runs
go through another path than the pool (the bounded suite slot, most likely) and the 64 freed cores stood
free; at 01:07 the live chain on the three tail seeds that surfaced after the 23:50 count (228763, 638990,
623492) took 32 of them, with their 2^20 read queued beside it at 8 cores.
01:13 BST, build-1: none of my leases left; row 90's second half (queued 21:24) and the five build-1
shards (queued 23:05) reached the lease's 2 h give-up behind the 12 attack-pass holders without ever
taking cores, so build-1 gave this lane nothing from 20:42 BST on. Box 2 had room (load 49, no class v5
lease), so at 01:14 row 90's second half (attempts-10k-b, seeds 10002 to 20001) and the five shards (s09b
from 911979, s05b from 502127, s03 from 300002, s07b from 706081, s01d from 150610) were queued there at
32/16, behind sweep-s02e; the four box-2 shards yielded at 01:04 re-queued at 01:25 BST (s08 from 849304,
s06c from 652538, s04b from 400603, s00g from 40822) after the watcher's 20-minute window passed with no
class v5 or release lease ever appearing in the pool listing.
### Ledger, 8 October after the reading
01:33 BST, box 2: row 90's second half (attempts-10k-b) finished, 1,112 s on 32 cores; merged above.
01:52 BST, box 2 (coordinator's order): adv-accept-3's Q4d (spec read-back against 56eebc0d, 16 cores) was
the only waiter with 0 free and this lane held 87 of the 88 pool cores. Ended sweep-s09b by pgid file
(8,251 rows kept, frontier 920229); Q4d took the 16 cores 61 s after queueing. Re-queued the remainder as
sweep-s09c from 920230 (79,772 seeds), 32/16, behind Q4d. The other holders (s02e 23, s05b 16, s06c 32)
stayed; s04b took 16 cores at 01:57 BST when they came free.
About 02:15 BST: box-hours crossed the plan's 8 (running time). The reading went to the coordinator at
03:25 BST with the count and the choice (shards run on in the pool's gaps, or end at their frontiers).
Until told otherwise they run on.
03:24 BST: the owner-rule yield watcher closed its window on both boxes with no trigger (no class-v5 or
v5-labelled attack-pass waiter appeared); restarted on box 2 only, nothing of this lane holds on build-1.
03:25 BST, box 2: sweep-s03, sweep-s07b and sweep-s01d had given up after the pool's 2 h wait without a
row. Re-queued from their frontiers as sweep-s03b (from 300002, 100,000 seeds), sweep-s07c (from 706081,
93,921) and sweep-s01e (from 150610, 49,392), 32/16. Queue on box 2 at 03:26 BST: holders s02e, s05b, s06c,
s04b; waiters s08, s00g, s09c, s01e, s03b, s07c. Accepted programs on disk 408,067 (80,234 build-1,
327,833 box 2, ranges disjoint).
03:2x BST, coordinator's call on line 16: the shards run on in the pool's gaps under the mechanical yield
until this lane's running box-hours reach 16 or main says stop, whichever first. At 16 every shard ends by
pgid file at its frontier, the sweep is written as partial at that count with the frontiers in this
ledger, pushed, and the final line (tip, box-hours, count, tally) goes to the coordinator. No new row
type: the shards only tighten the count. At about one box-hour per hour of holding, 16 falls at about
10:10 BST if the shards hold without a gap; a monitor on this side reads the holders every five minutes
and accrues only the minutes with a holder.
04:56 BST (coordinator's order under the no-gaps rule): build-1 read load 22 with no adv lease and a free
pool while sweep-s01e and sweep-s07c waited behind this lane's own four holders on box 2. Withdrew both
waiters on box 2 by pgid file (0 rows each) and submitted them on build-1 at 32/16 from the same frontiers
(s01e from 150610, 49,392 seeds; s07c from 706081, 93,921). s01e took 32 cores in 1 s; s07c waited with 8
free. The box 2 holders stay. The owner-rule yield watcher runs on build-1 as well. Ranges stay disjoint
per box, so nothing double-counts. Running box-hours 10.6 at 04:54 BST.
04:57 BST, reversal from main within the minute: build-1 carries the attack-pass lane's F1 census (release
class, 2 days 19 hours banked, nothing on disk until its end, projected to about 10:00 BST) and this lane's
shards push that projection. Ended sweep-s01e on build-1 by pgid file (603 rows kept, frontier 151222) and
withdrew sweep-s07c's waiter (no rows); build-1 then read 0 leases and no process of the lane; the build-1
watcher stopped. Re-queued on box 2 as sweep-s01f from 151222 (48,780 seeds) and sweep-s07c from 706081.
04:58 BST, order from main: the attack-pass flush known-failed test (4,000 programs, `lease pool 16 --min
8`) waited at 1 free behind this lane's holders on box 2. Ended sweep-s05b by pgid file (46,460 rows kept,
frontier 548586); the test took its 16 cores 5 s later. Re-queued as sweep-s05c from 548586 (51,416
seeds). Also at 04:58: sweep-s02e and sweep-s06c had finished their ranges (exit 0, 16,641 s and 7,421 s);
sweep-s08 and sweep-s00g had given up after the pool's 2 h wait without a row and are re-queued as
sweep-s08d from 849304 (50,698) and sweep-s00h from 40822 (59,180). Box 2 at 04:59 BST: holders s03b 27,
s04b 16, s09c 28 cores; waiters s05c, s01f, s07c, s08d, s00h.
05:22 BST: the box 2 yield watcher closed its window with no trigger and was restarted. Box 2 then held
s03b 27, s04b 16, s09c 28 and s05c 17 cores (s05c took its cores at 05:08 BST when the F1 flush test
ended) with s01f, s07c, s08d and s00h waiting. Box-hours 11.0 at 05:19 BST.
### Closing entry, 09:47 BST 8 October (the founder's default through main: end at 10:15 BST or 16 box-hours)
Nothing to end: at 09:45 BST both boxes read 0 adv-accept leases and no process of the lane. The shards
finished or gave up on their own before the deadline. Every row file on both boxes checked: every row's
first field is a seed, no odd rows.
| Shard | Range swept | How it ended |
|---|---|---|
| 00 | 2..40885 | parts 0 to g; s00h (from 40822) gave up after the pool's 2 h wait, 0 rows; 40886..100001 unswept (59,116 seeds) |
| 01 | 100002..200001 | complete: parts on build-1 to 151222, s01f on box 2 to the end (exit 0, 12,685 s) |
| 02 | 200002..300001 | complete: s02e exit 0 (16,641 s) |
| 03 | 300002..400001 | complete: s03b exit 0 (19,701 s) |
| 04 | 400002..500001 | complete: s04b exit 0 (28,921 s from queueing, the last to end, 09:37 BST) |
| 05 | 500002..600001 | complete: s05c exit 0 (14,233 s) |
| 06 | 600002..700001 | complete: s06c and s06d exit 0 |
| 07 | 700002..706080 | s07c gave up twice (box 2, 2 h wait) and was ended on build-1 after 72 s with 0 rows; 706081..800001 unswept (93,921) |
| 08 | 800002..849303 | s08d gave up (2 h wait), 0 rows; 849304..900001 unswept (50,698) |
| 09 | 900002..1000001 | complete: s09c exit 0 (16,996 s) |
Distinct accepted programs across both boxes: 796,042 (build-1 80,835, box 2 724,727, the s05b range
present on both; seeds-by-file listing in logs/adv-accept/). Seeds covered by the ranges: 796,265; the 223
short are the seeds in flight at the kills, as the 20:21 BST ledger says. Box-hours at the close: about
15.1 (the monitor's 355 holding minutes on the 9.2 base). Every shard log, both frontier ledgers and the
monitor log are copied under logs/adv-accept/sweep-build-server, sweep-build-server-2 and
box-hours-monitor.log. The row files stay on the boxes under /srv/builds/_adv-adv-accept/ (about 800,000
rows).
Final tally of the bypass: 9 live hot sets, all from the stand-in tail (37 lowest-ratio programs measured
live at 2^24 nonces, 22 beyond the f8 1.2x gate), 0 among 20 random; each a single hot item of about 1 MB
worth at most 1.002x to a chip. The class v5 per-site floor at 0.995 refuses all 9 (minimum sites 0.9809
to 0.9919), misses 3 mild concentrations of at most 1.0004x, and refuses 7 clean programs of the 12
deepest. BOUND, no BREAK; internal adversarial pass, not an independent review.
## Where the pass stands: the 00:00 BST reading (count refreshed 01:08 BST, 8 October; pool state at 23:50 BST)
| Item | Reading |
|---|---|
| Box-hours spent (running time, both boxes, nice 10; pod-hours 0, no GPU, no pod) | about 15.1 at the close (9.2 at 03:25 BST, then a five-minute monitor accruing only the minutes with a holder on either box, 355 minutes to the last shard's end at 09:37 BST; logs/adv-accept/box-hours-monitor.log; the 8 crossed at about 02:15 BST): the two 88-thread shards for 1.9 h of wall under contention until the 20:21 kill, then shards at 32 or fewer cores through the lease pool with repeated releases to the class v5 work (every release by pgid file, rows kept, re-queued from the recorded frontier); two adv-live confirmation chains, the 10^6-nonce census (51 programs), 34 live rows at 2^24 of the stand-in tail plus 20 random, the gap tool on 61 programs plus 17 decisive 2^20 reads, row 90 on 20,000 seeds, the class v5 exemplar check |
| Q1, the bypass: bound reached | 796,042 distinct accepted programs drawn through the chain path by the close at 09:47 BST (79.6 percent of the 10^6 planned; 41 shard files across the two boxes de-duplicated by seed; the three unswept ranges are in the closing ledger entry; 269,250 by 01:08 BST and 46 shard files de-duplicated by seed; 182,646 at the 23:50 reading; at 23:50 three shards of mine held 87 cores on build-2 and the rest waited: build-1's pool stayed held by attack-pass from 20:42 on, so row 90's second half and four shards never ran there). Nine pass every part of the rule and flag the f8 hot-set test on the LIVE dataset at 2^24 nonces (100767, 4346, 5245, 1738, 170, 106924, 107022, 122960, 228763: X_0.1% +0.102 to +0.221 percent, 1.54x to 2.24x over the window model), all nine in the lowest 37 stand-in-ratio seeds; 20 random accepted programs: 1 beyond the f8 gate, 0 hot sets. Every hot set is the top 0.1 percent of items (about 1 MB) holding 0.26 to 0.41 percent of reads against 0.15 expected: an on-die copy saves under 0.3 percent of DRAM reads, gain 1.002x at the largest; no row of chip-model-v3.md moves. Mechanism: a load site whose source reaches zero or all-ones (or one bit off) in hundredths of a percent of evaluations, under the (c') 1 percent limit, mapped by the era stride to one fixed item (item 0x000000 the hottest in four); two further shapes seen (a low-entropy band without saturation; one constant image from a non-saturated source, seed 29307). The exemplar reads the same hot set under the class v5 dataset (the pre-floor draw) |
| Q1 against the class v5 per-site floor at 0.995 | all 9 live hot sets refused (minimum sites 0.9809 to 0.9919 at the acceptance's own 2^20 sample); 3 mild concentrations missed (Devnet 3 epoch 0 site 0 at 0.9992, adv-cache-2's era-fixed-20 at 0.9997 and era-drawn-2 at 0.9992: about 1.0004x to a chip, adv-cache-2's rotation class); 7 clean-live programs refused and 1 clean passed among the 12 deepest 256-unit seeds (the floor's 2.4 percent clean rejection) |
| The selector | the 256-unit stand-in ratio enriches the live gate 13x (17 beyond of the lowest 25 against 1 of 20 random) and finds the hot sets (8 of 34 against 0 of 20), with false positives 8 of 25 on the gate and 26 of 34 on the hot-set test; below 0.995 it is not sampling noise but a different fact: a low ratio is a thin spread of repeated indices, not a hot set. The 2^20 ratio the rule computes is the real selector; one chain draw costs about 3 s of one core and a seed under 0.998 costs about 1,000 draws |
| Q2, the stand-in gap: bound reached | 54 programs plus 17 decisive reads: closed-form and live per-site ratios agree to 0.0004 at 2^20 (the sampling noise), 0 verdict disagreements, (c) metrics agree to 0.019 of 128; the zero-dataset plant fires. No steering through the gap |
| Q5, distinguishers | a lossy last write to an output register in 83.5 percent of 269,250 accepted programs, no live effect beyond Q1's; register-set collapse 0; the 0.98 floor is live in the tail (0.9811 at 256 units, 0.9814 at 2^20 seen) |
| Row 90 (owner adv-accept-3, unspawned; claimed) | 20,000 seeds: rejection by part (a') 83.5, (a) 11.6, (b) 3.0, (c'') 1.1, the rest under 1 percent; per-candidate rejection 0.681 flat across attempts; P(exhaust) 2e-43; 0 exhaustions; max attempt 28; the last resort reachable only by a rule that rejects everything (plant fired) and then accepted as drawn |
| BLOCKED | per-card hash-rate confirmation of any gain (no GPU tonight); priced analytically against chip-model-v3.md |
| Partial, named as partial | the sweep closed at 796,042 of 10^6 seeds (three ranges unswept, 203,735 seeds, plus 223 seeds in flight at the kills; every hot set found is in the 1.002x class the v5 floor refuses); 37 of the stand-in tail and 20 random measured live; row 90 complete at 20,000; the 2^20 read of seed 3664 and the live attribution of the clean deep seeds not taken further |
| What a longer pass adds | the other 73 percent of the 10^6 seeds, the 2^20 ratio (not the 256-unit proxy) as the ranking, and a live row for every seed under 0.985 at 2^20: more rows of the same three shapes, not a different answer unless a seed reads a hot set over 1 percent of reads, which 269,250 draws and 54 live rows did not produce. The open design question is adv-cache-2's: the stride rotation that lets a product's low bits into the item index, a load_index change rather than a floor |
## Running notes
- Box-hours and commands are logged in each section with the seed, so every claim is reproducible by
re-running the exact command on box 2.
- No cargo on the Mac. Pushes to the build mirror only. Commits as igneum-labs.

View file

@ -0,0 +1,313 @@
# Attack plan: the program acceptance rule and its generator (class v4 sub-version 3)
internal adversarial pass, not an independent review
Author lane: adv-accept. Date: 7 October 2026, 19:xx BST. Branch: adv-accept off build/master.
Target commit: 017e70376489251e18564c0abce7e466e606c8b3 (class v4 sub-version 3, object byte 7).
Box: igneum-build-2, core band 0-31, nice 10, one slot at a time.
I am an outside attacker with the public kit. I have never worked on the hash code. Everything
below is priced against the chip model of docs/analysis/chip-model-v3.md.
## 0. Frozen-crate check (the outsider rule)
The brief said build/master's igneum-pow/ is byte-identical to the frozen commit and that
`git diff --stat 017e7037 HEAD -- igneum-pow` must print nothing. It does NOT print nothing.
git diff --stat 017e70376489251e18564c0abce7e466e606c8b3 3f0afcd5 -- igneum-pow
6 files changed, 30 insertions(+), 635 deletions(-)
(accept.rs 292 lines changed, generator.rs 320, emit.rs, packcheck.rs, tests/mixer.rs, tests/recheck.rs)
So build/master (HEAD 3f0afcd5) has moved past the frozen commit and has stripped most of the
class v4 sub-version-3 acceptance and generator code. To obey the outsider rule I pinned my
worktree to the frozen crate and packs:
git checkout 017e70376489251e18564c0abce7e466e606c8b3 -- igneum-pow proto-cuda/packs-ca3-v4
git diff --stat 017e7037 -- igneum-pow proto-cuda/packs-ca3-v4 # prints nothing: my tree == frozen
Every build and run in this pass is against the frozen crate. My harness crate depends on it by
path (../../../igneum-pow), as f8-uniform does.
Re-base (coordinator's order, 19:3x BST): build/master moved to 7a7caa34, whose igneum-pow/ IS the
frozen object. Merged into this branch at 8748e955ceb48be5a6cbf7f8718a4884d3de9828;
`git diff --quiet 017e7037 HEAD -- igneum-pow` prints IDENTICAL, and the same check against
build/master 7a7caa34 prints IDENTICAL. Nothing I built or measured was on the stale tree: this
worktree's igneum-pow/ had already been reset to the frozen object (byte-identical) before the first
build, so the harness binaries are of the frozen crate; they are rebuilt at the merged HEAD anyway.
## 1. Files I opened
Only the public kit, read at the frozen commit unless marked HEAD:
- igneum-pow/src/accept.rs, generator.rs, verify.rs, seed.rs, memhard.rs, bind.rs, main.rs, lib.rs
- igneum-pow/Cargo.toml, Cargo.lock
- docs/spec/01-lottery-hash.md (sections 1.3, 1.4, 1.4.6, 1.5, 1.6, 1.7, 1.8.5, 1.11, 1.12, 1.13.1, 1.13.3, 1.14-1.17)
- docs/analysis/chip-model-v3.md (HEAD; sections 1, 2, 5, 6)
- proto-cuda/packs-ca3-v4/ program.json of all eight packs; v4-devnet-epoch0 and v4-era-0 headers and seeds.txt
- tools/attack/f8-uniform/src/main.rs, Cargo.toml (copied from the Mac worktree, originals untouched)
- tools/attack/f4-weakday/src/main.rs, Cargo.toml (from build/attack-pass)
- tools/build-remote.sh, infra/build-server/lib.sh, infra/build-server/remote-run.sh
I did not open anything else under docs/, no site/, no proto-metal/, no other branch's source, no
git log. I extracted emit.rs to scratch but did not need to read it.
Kit zip check owed: the brief gives sha256 4f2445c5...f829154 for packs-ca3-v4-sub3; I verify the
on-disk packs match the frozen tree by git, not the zip (I was not handed the zip). Devnet class v4
epoch-0 program id in the pack is a785001687d8688a, which matches the brief. Devnet 3's epoch-0 id
fce15bf61030be57 is my derive check in Q3.
Second public-kit input (relayed by the adv-cache lane, 7 October 2026, public-kit class): the
Devnet 3 epoch-0 pack, v4-devnet3-epoch0.zip sha256
e025750f71175ed14d6e2a24e387ebbf1979b1cd0faee9139c41a7671165b334, program_id 0xfce15bf61030be57 at
attempt 0 (sub-version 3), day bytes le64(20733), 2^24 fingerprint from base 0 e510ad92b4d24846. A
second REAL program accepted at attempt 0 under the frozen rule, beside the shared devnet's (which is
attempt 1). I treat it as data, verify the sha before any use, and use it only as a known-passing
program for Q1 (hot set) and Q3 (derive check: my draw of Devnet 3 epoch 0 must give id
fce15bf61030be57 and fingerprint e510ad92b4d24846, else my draw path is wrong). It lives on build-1;
I copy the file read-only, I do not build or run on box 1.
## 2. The target, in my own words
### 2.1 The generator (spec 1.4, generator.rs candidate_from_words_class with V4_CLASS)
An epoch seed (32 bytes) gives seed words S[0..7] = seed_words_from_bytes(seed) for attempt 0, or
seed_words_from_bytes(seed || k_le32) for attempt k. The program stream is SplitMix64 seeded with
(S0 | S1<<32) XOR ((S2 | S3<<32) * 0x9E3779B97F4A7C15).
Class v4 = class v3 (mx8, era draw) plus a 256-instruction shadow block run 27 times per iteration.
Draw order:
1. 16 load slots: partial Fisher-Yates over instruction indices 1..63 (slot 0 is never a load).
2. 64 instructions, 9 draws each (op by weight, dst, src, src2, imm, imm2, rot, bit, mask), plus the
class v3/v4 width roll (consumed, width pinned to 4 bytes) and two era window draws (win=below(3),
off). A load's src is drawn only from registers that are FRESH by dataflow: written by an earlier
instruction, no load has read since, and (v4) the last writer kept entropy. Freshness value rule:
load/scratch/hot keep fresh iff source fresh; add/sub/xor/mad/shfl fresh iff dst or src fresh;
rotl/rotr fresh iff dst fresh; or/mul/mulhi never fresh. A shared-operand idiom (or-then-xor,
or-then-sub, xor-then-or on one operand) marks the result not fresh.
3. 256 shadow instructions, all ALU, drawn from the same stream after the base program.
### 2.2 The acceptance rule (spec 1.4.6, accept.rs check)
A candidate passes iff:
- (a) check_stale_loads: no load reads a register unwritten since the previous load from it, cyclic
over the 64 base instructions (two passes to close the wrap).
- (b) check_injecting_writes: every r0..r7 is the dst of an injecting op (add, sub, xor, mad, shfl,
load/variants).
- (a') check_fresh_sources_v4 (v4 shape only): run the freshness fixpoint over base||shadow to its
fixpoint (<=9 passes), then one checking pass; every load's source must be fresh.
- (c) check_dynamic: interpret 64 units x 32 lanes = 2,048 evaluations on the closed-form dataset
dataset_elem(idx, S0, S1) at 2^28 words, init words = S, base nonces low32(next()) & ~31 from
SplitMix64(FNV-1a("igneum-accept/" || S as LE bytes)). The shadow block IS executed (sub-version 3
fix). Tests: no register bit constant across all 2,048 finals; no load site reads one address in
all 32 lanes of any unit; <164 of 16,384 final regs saturated (0 or 2^32-1); every output bit ones
within 136 of 1,024; distinct masked addresses per lane per eval, summed, > 245,760 (mean >120/128).
- (c') SaturatedSource (v4): per load site, count of evaluations whose source value was 0/all-ones
< 164 over 16,384.
- (c'') (v4): LowEntropySite = per-site distinct dataset word indices over 2^20 evaluations
(ACCEPT_UNITS_DISTINCT_V4=4096 units) against uniform expectation N - N^2/2W on the site window,
ratio must reach MIN_DISTINCT_RATIO_V4 = 0.98. The RepeatedSource / most_repeated path (limit 8)
is present but NOT wired into check() (the finding is caught by the ratio instead).
Redraw: attempt 0,1,2,... up to MAX_ATTEMPTS_V4 = 256 for the v4 shape (32 otherwise). If all 256
fail, last_resort_v4 rewrites every or/mul/mulhi in base and shadow to xor and returns it, accepted
as drawn (no further check). Reached with probability about (2/3)^256.
### 2.3 What the rule is defending (chip model)
The live dataset is memory-hard (256 MiB cache, 8 dependent reads per item, mixer x8). The stand-in
is a pure closed form. The lottery is fair only if an accepted program reads a near-uniform, wide set
of dataset items on the LIVE dataset, so no on-die SRAM copy of a hot subset lets a chip skip the
memory. chip-model-v3.md section 5 prices the on-die-cache recompute chip at 0.92x and the stored
(f=1) chip over 2x per joule; a hot-set that concentrates reads would hand a chip exactly what
section 5.7's "hot set" lever asks about. Items per hash target: 128 distinct of 128 loads.
## 2.4 Re-scope (main, 7 October 2026, 19:2x BST) and the operating changes
The acceptance rule now has three lanes. This lane (adv-accept) is THE BYPASS: a program that passes
(a) to (c'') on the closed-form stand-in and has exploitable locality on the LIVE dataset. That is Q1
(the 10^6-seed passing-program search with the hot-set measure), Q2 (the stand-in gap reproduced and
bounded) and Q5 (the generator distinguishers that pass the rule). Q4 (header grinding) is lane
adv-accept-2's and Q3 (exhaustion and steering of the draw, the 256 cap, the last resort, the program
id) is lane adv-accept-3's; their methods below stay as written for the record and are handed over,
not run here. Shared queue for spill-over: /srv/builds/_adv/accept/queue/ on build-2, claimed by
mkdir under claims/. Operating changes from the coordinator: both boxes, nice 10 on every idle core
(no core band), the capacity layer's yield (SIGSTOP the run's process group while any build slot or
hold is taken, SIGCONT when clear; copied into run-box.sh), sweeps queued back to back, 8 box-hours
is a reading not a stop (ask line 16), first results by 00:00 BST tonight.
The seed space of the sweep is the attack-pass F8 harness's own label space
("igneum-attack-f8/program/k", ".../era/k"), so the unmodified f8 harness (built here as adv-live)
measures the live hot set of exactly the program my sweep reports for seed k.
## 3. The questions, in my order
Q1 (rank 1). Steering: a program that passes every part of the rule but concentrates its 128 live
loads on a small hot set of items/lines. The rule checks the CLOSED-FORM stand-in; the live set can
differ. This is the break that matters most, because it is the one the chip model prices.
Q2. The stand-in gap: closed-form verdict vs live-dataset verdict disagree. Bound the count and
whether any disagreement is exploitable (an accept that should be a reject on the live set).
Q3. Attempt grinding: whoever influences or predicts the epoch seed grinds attempt k from seed||k
for a favourable program. What the 256 cap and last_resort_v4 hand an attacker.
Q4. Header grinding for locality: the miner picks header bytes behind the pre-PoW hash, which only
enter the init words I (bind.rs), not the program. Can a cheap header search cluster a 32-lane
group's loads into fewer DRAM rows/lines.
Q5. Generator distinguishers: structural weaknesses of drawn programs that pass the rule (a lossy
last write, a contraction, register-set collapse, low-entropy sites the 0.98 floor still admits).
Q6. Anything else.
## 4. Method per question, with the known-failed shape each tool must fire on
All harness code: tools/attack/adv-accept/ (own crate, depends on igneum-pow by path). I reuse the
real draw and the real accept::check through the library; I never re-implement the rule. Where I need
the live dataset I build it through Epoch::chain_dataset_day(ProgramClass::V4), as f8-uniform does.
### Q1. Steering / hot set on the live dataset
Method. Over >= 10^6 epoch seeds, draw the chain's class v4 program (generate_era over V4_CLASS with
V3_ALLOWED, the era seed = a second label-derived seed, as f8 does), keep only accepted programs
(accept::check Ok). For each accepted program, run its 128 loads per hash over many nonces on the
LIVE memory-hard dataset (one day's cache, items derived into a table as a GPU holds them, the
f8-uniform warps census path), build the cross-hash item histogram and the per-site histogram, and
measure the hot set: the share S_f of reads taken by the top f of items for f in {0.1%, 1%} against a
uniform (and window-model) control, excess X_f = S_f - E_f, flag when X_f >= f. Also the per-site
distinct-index entropy and the distinct items/lines per hash and per warp. Rank seeds by X_0.1% and
by hottest-item share. f8-uniform already does most of this for its 64 labelled seeds; I extend the
seed sweep to >= 10^6 and keep the accept filter and the hot-set metric.
Known-failed shape. f8-uniform's --plant const-item feeds one constant item at the first load site;
--plant quarter-lines / half-lines mask the line index to a quarter/half. My sweep must FLAG the
planted program (X_f large, hot-set FLAGGED) and must leave the clean control within noise. If the
plant does not fire, the metric is wrong and nothing else counts.
Gain. The hot set measured as the fraction of items taking 0.1% and 1% of reads vs uniform, turned
into the chip's on-die copy size (section 5.7): a hot set holding share p of reads in q of the items
lets a chip store q items in SRAM and serve p of loads on die. I report p and q and the implied
SRAM MB and the gain row it lands on.
Box-hours. Seed sweep at 10^6 seeds, accept-filtered, ratio pass is the dear part: accept::check on a
v4 program is about 2.8 s per chosen candidate (the 2^20 ratio pass dominates) per the code comment,
but the cheap filter is (a)(b)(a')(c)(c') first; most seeds die before the ratio. I run the draw+
static+cheap-dynamic filter at ~10^6 seeds (a few core-hours on 32 cores) and the full live-dataset
histogram only on the top few hundred by a cheap proxy (per-site closed-form distinct count). Budget:
3 box-hours for Q1 (one build, one long nohup run, poll the log).
### Q2. The stand-in gap (closed form vs live)
Method. For accepted programs, compare the (c) verdict metrics computed on the closed form against
the same metrics computed on the live memory-hard dataset at 2^28: the distinct-address sum, the
saturation counts, the output bias, and the per-site distinct-index ratio. Count programs where the
live metric would reject but the closed-form accepts (a false accept) or vice versa. The spec claims
the two agree on all but 39 of 100,000 threshold-edge cases; I re-measure on my sweep and look for a
systematic (not threshold) disagreement I can steer into.
Known-failed shape. Construct a program by hand whose closed-form distinct count sits just above the
245,760 floor but whose live distinct count I force low by planting a source that is near-constant on
the live dataset only (e.g. a load whose source on the live set collapses because the live item map
folds it). The tool must report that planted program as a closed-form accept / live reject.
Gain / bound. Either a BREAK (a seed family that is a false accept and reads a hot set on the live
set — folds into Q1) or a BOUND: the measured disagreement count and margin over my sweep, stated
with the seed count.
Box-hours. Rides on Q1's live-dataset build (the cache fill is the cost, shared). 1 box-hour.
### Q3. Attempt grinding and the last resort
Method. Analytic plus a measured sweep. (a) The attempt stream: attempt k uses
seed_words_from_bytes(seed || k_le32); the program is a deterministic function of (seed, k). An
attacker who sets the epoch seed picks the (seed, k=first-accept) pair; an attacker who only predicts
it cannot change it. I quantify: over many seeds, how much does the hot-set metric of Q1 vary across
the first N accepted attempts of ONE seed vs across seeds, i.e. can grinding k (without changing the
seed) reach a worse program than attempt 0. Since k changes the whole seed-word set, each attempt is
an independent draw, so grinding k is just grinding seeds at a fixed epoch seed only if the attacker
controls nothing; if the attacker controls the epoch seed, k adds no freedom beyond the seed. (b)
The 256 cap and last_resort_v4: I drive a seed that exhausts (the test names igneum-f9/331672) and
measure what last_resort_v4 produces — is it predictable (yes, a deterministic function of attempt
256's draw with or/mul/mulhi->xor) and is it weak (every register fresh by construction, but does it
read a hot set or fail (c) on the live set though (a') passes). last_resort has NO (c)/(c'')/(c')
check, so it is the one accepted program the hot-set rule never sees.
Known-failed shape. I force the last-resort path on a planted exhausting seed (or by calling
last_resort_v4 directly on a rejected candidate, as the crate's own test does) and run its live hot
set through the Q1 metric. The tool fires if the last-resort program's hot set beats the floor the
rule enforces on normal programs.
Derive check. I derive Devnet 3's epoch-0 program id and confirm it equals fce15bf61030be57 (the
brief's check); a mismatch means my draw path is wrong and Q3 is void until fixed.
Box-hours. 1 box-hour (mostly the exhausting-seed search and the last-resort live run).
### Q4. Header grinding for locality
Method. The header bytes enter only the init words I = seed_words_from_bytes("igneum-block/" || H ||
nonce_hi) (bind.rs), not the program and not the dataset. A 32-lane group's 128 loads per lane are a
function of (program, I, base lane nonce). I measure, for one fixed accepted program and one live
dataset, how the distinct DRAM rows / cache lines touched by a 32-lane group vary over header
choices (vary H and nonce_hi), and whether a cheap search finds a header whose group clusters into
materially fewer lines than the mean. Cost vs gain: the search is hashing headers and running the
warp; the gain is fewer lines per group. I bound the best clustering found over a header budget and
the search cost in hashes per unit of clustering.
Known-failed shape. Plant a program whose loads are already clustered (reuse Q1's const-item plant)
so the per-group line count is low for every header; the tool must show the low count and show that
header choice does not move it (clustering is a program property, not a header one) — the control
that header grinding gives nothing. The positive known-fail: artificially make the address a function
of I alone (a one-line patch in my harness mirror, never in the library) and show the search then
finds a clustering header, so the search itself works.
Box-hours. 1 box-hour (one program, one cache, a header sweep).
### Q5. Generator distinguishers
Method. Over the Q1 sweep of accepted programs, count structural shapes: a lossy op (or/mul/mulhi)
as the last write to an output register; a contraction (mul/mulhi) feeding the fold; the register-set
reachability (does the program collapse to fewer than 8 live registers at the fold); low-entropy load
sites that pass the 0.98 ratio floor but sit in its tail (the open F8 seeds p4/p8/p10/p34 at 0.9927
to 0.9963). For each shape I ask whether it lowers the live distinct-item count or raises the hot
set. The 0.98 floor itself: I measure the distribution of the per-site ratio over accepted programs
and the gap between the floor and the clean median, to see how much low-entropy headroom the rule
leaves.
Known-failed shape. The crate's own diag tests name the band: F8's p23 (shared-operand andnot),
p15/p18/p19/p56 (fail the ratio), p4/p8/p10/p34 (open tail). My tool must reproduce the ratio verdict
on p15/p18/p19/p56 (rejected) and p23 attempt 1 (accepted), matching the crate's test, before I
trust any new finding.
Box-hours. Rides on Q1. 0.5 box-hours.
### Q6. Anything else
Free lane: the (c) base-nonce stream is keyed only on the seed words, not the day or the header, so
every node runs the SAME 2,048 acceptance evaluations for a seed forever; I check whether that fixed
sample is itself grindable (a program tuned to pass the 2,048 fixed nonces but fail off-sample). The
closed-form dataset is fixed at 2^28 whatever the live size; I check whether the live size change
(growth doublings) moves any accepted program off its (c) verdict. Bounds only unless something fires.
## 5. Box-hour budget
| Step | Box-hours | What |
|---|---|---|
| Build the harness (release) | 0.3 | one build-remote.sh --box 2 build |
| Q1 seed sweep + live hot set | 3.0 | nohup long run, poll |
| Q2 stand-in gap | 1.0 | rides on Q1 cache |
| Q3 attempt grind + last resort | 1.0 | |
| Q4 header locality | 1.0 | |
| Q5 distinguishers | 0.5 | rides on Q1 |
| Q6 + re-runs | 1.0 | |
| Total | 7.8 | within the 8 box-hour budget for first results |
GPU is not available tonight, so any per-card hash-rate confirmation of a hot-set gain is BLOCKED and
said so; I report the hot set and the implied SRAM size analytically against chip-model-v3.md.
## 6. Running rules I follow
Build: from tools/attack/adv-accept, `tools/build-remote.sh --box 2 -- build --release`. Long runs:
build first, then nohup the built binary on the box under nice 10 taskset 0-31, pid file beside the
log, logs under /srv/builds/igneum-wt-adv-accept/adv/, poll the log, kill by pid file only. One box
slot at a time. Commit as igneum-labs, push only to the build mirror (git push build adv-accept),
never origin. No cargo on this Mac.

112
tools/attack/adv-accept-v5/Cargo.lock generated Normal file
View file

@ -0,0 +1,112 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "adv-accept-v5"
version = "0.1.0"
dependencies = [
"igneum-pow",
]
[[package]]
name = "igneum-pow"
version = "0.2.0"
dependencies = [
"serde_json",
]
[[package]]
name = "itoa"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "memchr"
version = "2.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
[[package]]
name = "proc-macro2"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
[[package]]
name = "serde"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
dependencies = [
"serde_core",
]
[[package]]
name = "serde_core"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.151"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
dependencies = [
"itoa",
"memchr",
"serde",
"serde_core",
"zmij",
]
[[package]]
name = "syn"
version = "3.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
[[package]]
name = "zmij"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"

View file

@ -0,0 +1,21 @@
[package]
name = "adv-accept-v5"
version = "0.1.0"
edition = "2021"
description = "adv-accept lane: the f8 hot-set harness over class v5 (vendored igneum-pow of branch class-v5, the dataset keyed by the window's state leaves), to ask whether a class v4 finding still reads hot under class v5"
license = "MIT"
publish = false
[[bin]]
name = "adv-live-v5"
path = "src/live.rs"
[dependencies]
igneum-pow = { path = "igneum-pow" }
[workspace]
[profile.release]
opt-level = 3
lto = true
codegen-units = 1

View file

@ -0,0 +1 @@
target/

View file

@ -0,0 +1,105 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "igneum-pow"
version = "0.2.0"
dependencies = [
"serde_json",
]
[[package]]
name = "itoa"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "memchr"
version = "2.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
[[package]]
name = "proc-macro2"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
[[package]]
name = "serde"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
dependencies = [
"serde_core",
]
[[package]]
name = "serde_core"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.151"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
dependencies = [
"itoa",
"memchr",
"serde",
"serde_core",
"zmij",
]
[[package]]
name = "syn"
version = "3.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
[[package]]
name = "zmij"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"

View file

@ -0,0 +1,30 @@
[package]
name = "igneum-pow"
version = "0.2.0"
edition = "2021"
description = "Igneum random-program GPU proof-of-work: seed, program generator (version 2: fixed load count, fresh sources, acceptance rule), memory-hard dataset, CPU warp verifier and kernel emitters; the source of every program pack"
license = "MIT"
publish = false
[lib]
name = "igneum_pow"
path = "src/lib.rs"
[[bin]]
name = "igneum-pow"
path = "src/main.rs"
[dependencies]
[dev-dependencies]
serde_json = "1"
# The cache fill is 2^22 ChaCha12 blocks and the vector tests derive thousands of items.
# Unoptimised builds would make `cargo test` take minutes, so the dev profile is optimised too.
[profile.dev]
opt-level = 3
[profile.release]
opt-level = 3
lto = true
codegen-units = 1

View file

@ -0,0 +1,181 @@
# igneum-pow
The Igneum lottery hash in Rust: the generator, the acceptance rule, the memory-hard dataset, the CPU verifier and the
kernel emitters. This is the crate the rusty-kaspa fork calls (`docs/fork-map.md`, rows a1 to a3) and, since
4 October 2026, the source of every program pack in `proto-cuda/packs/`. No dependency outside the standard
library; `serde_json` is a dev-dependency for reading the packs in the tests.
Dates: 3 October 2026 (crate, bit-exact with the Swift prototype), 4 October 2026 (generator version 2 and the
acceptance rule; every vector re-cut). Toolchain: rustc 1.99.0 via rustup (the Homebrew 1.69 on PATH is too old;
use `~/.cargo/bin/cargo`). Crate version 0.2.0.
## Modules
| Module | What it is | Swift namesake |
|---|---|---|
| `seed` | 32-byte seed words from bytes (FNV-1a 64, four salts, finalised); `seed_words_from_bytes` is the boundary where the chain feeds the epoch seed; SplitMix64 | `seedWordsBytes`, `SplitMix64` |
| `generator` | version 2: 16 load slots drawn first from instructions 1..63, fresh-source loads, the other 48 ops from the ten non-load weights; attempts `k = 0, 1, ...` of a seed; the program id. The retired version 1 generator stays as `generate_v1` for the census and the lever measurements | `generateProgramV2`, `candidateProgram`, `generateProgramV1` |
| `accept` | the acceptance rule of spec 01 section 1.4.6: two static tests and the 64-unit dynamic test on the seed-keyed closed-form dataset | `acceptProgram` |
| `memhard` | 256 MiB cache (2^16 chains of 64 ChaCha12 blocks), mixer parameters, 8-round item derivation with the 32 lanes interleaved, `MemhardCpu::fetch` | `cpuFillCache`, `MixParams`, `deriveItems`, `MemhardCPU` |
| `verify` | the 32-lane warp interpreter, `DatasetMode::{ClosedForm, MemoryHard}`, `Epoch`, `hash_warp`, `verify_block` | `cpuWarp`, `DatasetSource` |
| `emit` | Metal, CUDA and OpenCL source, program.h, memhard.h, vectors.h, program.json, vectors.json, the header-bound kernels, `export_pack` | `generateMSL`, `generateCUDA`, `generateOpenCL`, `exportPack` |
| `bind` | header binding (spec 01 section 1.6): init words from `"igneum-block/" \|\| H \|\| nonce_hi_le32`, bound hash API on `Epoch`, the 256-bit pow mapping, the interim day seed bytes | `blockInitWords` |
## Generator version 2 (4 October 2026)
Adopted from `docs/analysis/weak-program-census-2026-10-03.md` (ledger M5 and M6). Three parts, all in this crate
and mirrored in `proto-metal/main.swift` so the Metal worker derives the same program from the same seed:
| Part | Rule | Where |
|---|---|---|
| G1, exact load count | 16 `load` instructions per program, a uniform 16-subset of slots 1..63 drawn first by partial Fisher-Yates over the program stream; the other 48 ops from `add 12, xor 10, mul 8, mad 8, shfl 8, rotl 7, sub 6, mulhi 6, rotr 6, or 4` (sum 75). 128 loads per hash, 4,096 items per unit | `generator::candidate_from_words` |
| G2, fresh source | a load's source is drawn from the registers other than `dst` written by an earlier instruction and not read by a load since, so no load repeats an earlier load's address in the hash | same |
| R, acceptance | (a) no load whose source is unwritten since the previous load from it, cyclically; (b) every register has an `add`, `sub`, `xor`, `mad`, `shfl` or `load` write; (c) 64 units at base nonces from `SplitMix64(FNV-1a-64("igneum-accept/" \|\| seed words LE))`, init words = seed words, closed-form dataset `dataset_elem(idx, S[0], S[1])` at 2^28 words: no constant register bit, no lane-constant load site in any unit, fewer than 164 saturated final values, every output bit within 136 of 1,024, distinct addresses above 245,760 over the 2,048 hashes | `accept::check` |
| Attempts | a rejected candidate is replaced by `seed_words_from_bytes(seed \|\| k_le32)` for `k = 1, 2, ...`; 32 consecutive rejections are a consensus fault (probability below 2^-136 at the measured 5 percent rate) | `generator::generate_from_seed_bytes` |
| Program id | `FNV-1a-64("igneum-program/" \|\| 2_le32 \|\| seed words LE \|\| attempt_le32)`, written into program.json and program.h with the generator version and the attempt, so a version 1 pack or another attempt can never pass for the current program | `Program::program_id` |
Measured on this crate (`igneum-pow accept`): `igneum-genesis` attempt 0 accepted, program id `bcc1248b10cc90f2`,
op mix `load=16 add=8 shfl=8 xor=6 mad=5 mul=5 mulhi=5 sub=4 rotl=3 rotr=3 or=1`, 128.000 distinct addresses per
hash; `igneum-hourly` attempt 0, id `a4c4d00961c855df`; seeds `igneum-census-2026-10-03/22`, `/37` and `/51` have
attempt 0 rejected ((b) r7 without an injecting write; (c) 119.74 distinct addresses; (b) r4) and attempt 1
accepted (ids `22ed0609d079f4cf`, `947705cc4eb1df0a`, `9869afcc028bf9f1`); those three are the conformance vectors
for the attempt rule. The rule costs 1.3 to 3.4 ms per seed on one core. The 20,000-program census under this
generator is in `docs/bench-log.md` (4 October 2026 entry).
## The API the fork calls
```rust
use igneum_pow::{Epoch, DatasetMode};
// Once per epoch and day: derives the accepted program and fills the 256 MiB cache (about 0.2 s on one core).
let epoch = Epoch::memory_hard("igneum-genesis", "2026-10-03");
let h: u64 = epoch.hash(nonce); // one nonce (computes its aligned 32-nonce warp)
let w: [u64; 32] = epoch.hash_warp(base_nonce); // one warp
let ok: bool = epoch.verify_block(nonce, target_u64);
// Miner programs for the epoch: the pack every worker compiles.
let pack = igneum_pow::emit::export_pack(&epoch, "2026-10-03", "igneum node");
pack.write_to(std::path::Path::new("out"))?; // kernel.cu, kernel.cl, program.metal, memhard.h, ...
```
## The header-bound form (what the chain uses)
The pack form above initialises the lane registers from the program's own seed words, so one nonce has one
hash per epoch whatever block is mined. On the chain the init words commit to the block (spec 01 section 1.6,
`src/bind.rs`):
```
H = header hash with the nonce field zeroed, every other field as mined
(rusty-kaspa hash_override_nonce_time(header, 0, header.timestamp))
nonce = 64 bits; lane nonce n = low 32 bits; nonce_hi = high 32 bits
I = seed_words_from_bytes("igneum-block/" || H || nonce_hi_le32) (49 bytes in)
hash = interpret(program, I, n) (section 1.7 of the spec)
pow256 = hash in the top 64 bits, low 192 bits zero (little-endian bytes 24..32)
valid = pow256 <= target256, which is exactly hash <= target256 >> 192
```
`H` keeps the timestamp (Kaspa zeroes it in the pre-PoW hash and absorbs it in cSHAKE afterwards; the lane hash has
no afterwards, so a nonce would otherwise be reusable across timestamps). The interim day seed is
`"igneum-day/" || day_le64` with `day = timestamp_ms / 86,400,000`. The epoch seed bytes are the 32 bytes of the
epoch block hash (devnet); the program is `generate_from_seed_bytes(epoch_seed)`, attempts included.
```rust
use igneum_pow::{bind, Epoch};
let epoch = Epoch::from_seed_bytes(epoch_hash.as_bytes(), &bind::day_bytes(day), "label");
let lane: u64 = epoch.hash_bound(&prehash, nonce); // one 64-bit nonce
let warp: [u64; 32] = epoch.hash_warp_bound(&prehash, nonce); // its aligned 32-nonce group
let init = bind::block_init_words(&prehash, nonce); // what a GPU kernel takes as its argument
let same = epoch.hash_warp_init(&init, nonce as u32 & !31); // == warp
let pow: [u8; 32] = epoch.pow_bound(&prehash, nonce);
let ok = epoch.verify_block_bound(&prehash, nonce, bind::target64_from_le256(&target_le));
```
On the GPU the init words are a kernel argument: `igneum_hash_bound` in `program_bound.metal` takes
`constant uint* initw [[buffer(3)]]`, `kernel_bound.cu` takes `IgneumInitWords iw` by value, `kernel_bound.cl` an
`initw` buffer. All three differ from `igneum_hash` only in the kernel name, the argument and the eight init lines.
Bound vectors (seed `igneum-genesis`, day `2026-10-03`, memory-hard, 2^28 words, generator v2; `igneum-pow hash-bound`):
| H | nonce | hash_bound |
|---|---|---|
| 32 zero bytes | 0 | `746c567b090acf6a` |
| 32 zero bytes | 1 | `45a619f860880c73` |
| 32 zero bytes | 31 | `9aa495e43dedbfe6` |
| 32 zero bytes | 4096 | `2e6ffd7624d3cba2` |
| 32 zero bytes | 4294967296 (1 << 32) | `38a5cea1fb01431a` |
| bytes 00 01 02 .. 1f | 0 | `2a79c5e4797bf6aa` |
| bytes 00 01 02 .. 1f | 4294967301 ((1 << 32) + 5) | `a243e0c61aa1b82e` |
| bytes 00 01 02 .. 1f | 18446744073709551615 (u64::MAX) | `9c7bbfbd064fe1a4` |
Init words for H = 32 zero bytes, nonce 0: `595a8f8a 37647e95 faadade1 cbbcf2a4 54f7cc13 f6851b5e 8c68ca04 7991ea9c`
(unchanged by v2: the binding does not depend on the program). The eight are pinned in `bind::tests::bound_vectors`.
The version 1 bound vectors of 3 October 2026 are retired.
`Epoch` is `Send + Sync`; build one and share it. `DatasetMode::ClosedForm` is the interpreter regression dataset
of the packs `igneum-genesis` and `igneum-hourly` and is not memory-hard.
## CLI
```
cargo build --release
./target/release/igneum-pow bench --seed igneum-genesis [--warps 20] [--closed-form] [--day 2026-10-03]
./target/release/igneum-pow export --seed igneum-genesis --out <dir> [--closed-form]
./target/release/igneum-pow export --epoch-hex <64 hex> --day-hex <hex> --out <dir> the chain's byte seeds
./target/release/igneum-pow hash --seed igneum-genesis --nonce 4103
./target/release/igneum-pow hash-bound --seed igneum-genesis --prehash <64 hex> --nonce <u64>
./target/release/igneum-pow accept --seed igneum-census-2026-10-03/22 every candidate with its verdict
./target/release/igneum-pow show --seed igneum-genesis the accepted program, one line per instruction
```
The packs were regenerated on 4 October 2026 with exactly these commands:
```
igneum-pow export --closed-form --seed igneum-genesis --out ../proto-cuda/packs/igneum-genesis
igneum-pow export --closed-form --seed igneum-hourly --out ../proto-cuda/packs/igneum-hourly
igneum-pow export --seed igneum-genesis --out ../proto-cuda/packs/igneum-genesis-mh
igneum-pow export --epoch-hex edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 \
--day-hex 69676e65756d2d6461792ffa50000000000000 --out ../proto-cuda/packs/igneum-devnet-v4-epoch0
```
The last is the chain's own derivation for devnet v4 epoch 0: the devnet genesis hash as the epoch seed and
`bind::day_bytes(20730)` (2026-10-04) as the day bytes.
## Tests
`cargo test --release` (39 tests, about 2 s after compile; the dev profile is optimised so the cache fill is quick):
| Check | Pack | Result |
|---|---|---|
| program.json instruction by instruction from `seed_bytes`, generator 2, attempt, program id, op mix, 128 loads, acceptance | all four | match |
| Mixer parameters (key, rot, mul, rc) | igneum-genesis-mh, igneum-devnet-v4-epoch0 | match |
| Cache head, last line, FNV-1a 64 (`48c4f5bf24166b2e` for day 2026-10-03, `448274a57f508cbc` for day bytes 20730) | the two memory-hard packs | match |
| Dataset head (16), `[MASK]`, 64 sampled words | all four | match |
| 96 hash vectors (3 warps x 32 lanes) | all four | 96/96 each |
| kernel.cu, kernel_bound.cu, program.metal, program_bound.metal, kernel.cl, kernel_bound.cl, program.h, program.json byte-identical; 16 masked loads per kernel | all four | identical |
| memhard.h, memhard.metal byte-identical | the two memory-hard packs | identical |
| vectors.json, vectors.h byte-identical; no stale file in any pack directory | all four | identical |
| bound vectors (8), bound warp == bound single, H and nonce_hi enter the hash | igneum-genesis-mh | pass |
| the devnet pack equals `Epoch::from_seed_bytes(genesis, day_bytes(20730))` | igneum-devnet-v4-epoch0 | pass |
| acceptance: instrumented interpreter == `hash_warp`, cyclic stale-load detection, injecting-write detection, rejection under 12.5 percent and distinct loads above 127 on 400 census seeds, version 1 programs mostly rejected | unit tests | pass |
| generator: 16 loads, none at instruction 0, contract on 200 candidates; fresh sources; attempt words; program ids separate versions and attempts | unit tests | pass |
## Measured, Apple M5 Max, one core, release build
| Step | 3 October 2026 (v1, 104 loads) | 4 October 2026 (v2, 128 loads, 4,096 items) |
|---|---|---|
| Cache fill, 256 MiB | 175 to 181 ms | 179 ms |
| CPU verify per warp, igneum-genesis, avg of 20 | 0.441 ms (3,328 items) | 0.631 ms |
| Cold single warps (bases 0, 4096, 1000000) | 0.41 to 0.87 ms | 0.67 to 0.81 ms |
| Acceptance rule per candidate | | 1.3 to 3.4 ms |
| Closed form, igneum-genesis | 0.002 ms | 0.002 ms |
The 10 ms gate holds with a margin of about 16x steady on this core. Every verified unit now derives exactly 4,096
items, the design bound of spec section 1.11.
## Not done here
- No GPU. The vectors tie this crate to the Metal, CUDA and OpenCL results through the packs; nothing here runs a kernel.
- The epoch seed enters at `Epoch::from_seed_bytes` (the epoch block hash on devnet); the VDF output replaces it there.
- The dynamic acceptance test is specified on the closed-form dataset at 2^28 words; if the prototype mask ever changes, the rule's constant stays at 2^28.

View file

@ -0,0 +1 @@
class-v5 igneum-pow at commit 25c8063ff38e248b7a92d91575e975a81d953894

View file

@ -0,0 +1,2 @@
max_width = 120
use_small_heuristics = "Max"

View file

@ -0,0 +1,869 @@
//! Program acceptance (spec 01 section 1.4.6, adopted 4 October 2026 from the weak-program census of
//! `docs/analysis/weak-program-census-2026-10-03.md`, section 6).
//!
//! A candidate program is accepted only if every test below holds. Every conforming implementation evaluates
//! exactly these tests on exactly these inputs, so every node skips the same seeds.
//!
//! | Part | Test |
//! |---|---|
//! | (a) static | for every `load`, some instruction between the previous `load` from the same source register and this one, in cyclic order over the 64 instructions, writes that register |
//! | (b) static | every register `r0..r7` is the destination of at least one `add`, `sub`, `xor`, `mad`, `shfl` or `load` |
//! | (c) dynamic | the program is interpreted for [`ACCEPT_UNITS`] (64) units of 32 lanes at base nonces drawn from SplitMix64 seeded with `FNV-1a-64("igneum-accept/" \|\| seed words as little-endian bytes)`, each `low32(next()) AND NOT 31`, with init words equal to the seed words and the closed-form dataset `dataset_elem(idx, S[0], S[1])` at [`ACCEPT_DATASET_LOG2`] (2^28 words) in place of the memory-hard dataset. Over the 2,048 evaluations: no register has a bit equal in every final value; no load site (iteration, instruction) reads one address in all 32 lanes of any unit; fewer than [`MAX_SATURATED`] (164, 1 percent of 16,384) final register values are 0 or 2^32 - 1; every output bit's ones count is within [`BIAS_TOLERANCE`] (136, 6 sigma) of 1,024; the distinct masked addresses read by one lane in one evaluation, summed over the 2,048 evaluations, exceed [`MIN_DISTINCT_SUM`] (245,760, a mean above 120 of the 128 loads) |
//!
//! The dynamic test uses the closed form so that it is a pure function of the program (no cache, no day) and
//! costs about a millisecond on one core. A hot-table load (`docs/plans/hot-table.md`) reads the closed form keyed by
//! seed words 2 and 3 at its multiply-shift index, a second pure table beside the dataset stand-in (words 0 and 1). The census (section 7.3) checked on 100,000 programs that the
//! closed-form verdict agrees with the memory-hard one on all but 39 threshold-edge cases.
use crate::generator::{Instr, LoadClass, Op, Program, ShadowClass, INSTR_COUNT, ITERATIONS, LANES, V4_CLASS, V4_SHADOW_INSTRS};
use crate::seed::{fnv1a64, SplitMix64};
use crate::memhard::hot_index;
use crate::verify::{dataset_elem, fold_words, load_index, splitmix32, ScratchModel};
/// Units (32-lane warps) the dynamic test interprets.
pub const ACCEPT_UNITS: usize = 64;
/// Class v4 sub-version 3, rule (c''): the per-site distinct-index RATIO (AP-F8-1's low-entropy-band class, 7 October
/// 2026, the attack-pass gate's numbers through main), keyed on the class v4 shape. Over [`ACCEPT_UNITS_DISTINCT_V4`]
/// units (2^20 evaluations per site) the count of distinct dataset word indices a load site reads, against the
/// expectation of a uniform source on the site's window (N - N^2 / 2W), must reach [`MIN_DISTINCT_RATIO_V4`]. The
/// floor sits between the 55 clean F8 seeds' minimum over their site rows (0.9960; the clean p1 0.9990, the median
/// 1.0000) and the strong failing seeds' maximum (p56 0.9654; p23 0.8361, p18 0.9274, p19 0.9335, p15 0.9432),
/// 0.015 from each. The open tail: F8's p4, p8, p10 and p34 (1.22x to 1.50x on the gate) read 0.9927 to 0.9963 at
/// 2^20, inside the clean spread, and a 2^24 pass does not separate them either (p34 0.9181, p4 0.9614, p8 0.9630,
/// p10 0.9612 against the clean p44 0.9612, p52 0.9613, p3 0.9971, p2 and p5 1.0004); they stay unattributed and
/// chased in `docs/fud-ledger.md` AP-F8-1. A candidate under the floor is rejected and the next attempt drawn under
/// the 256 cap and the last resort. Measured on one box-2 core with the shadow executed: 2.8 s per chosen candidate.
pub const ACCEPT_UNITS_DISTINCT_V4: usize = 4096;
/// The ratio floor at 2^20.
pub const MIN_DISTINCT_RATIO_V4: f64 = 0.98;
/// Kept for the record and the driver, not wired: the most repeated source value per site over the (c) units'
/// 16,384 evaluations (a uniform site repeats a value 2 or 3 times; the finding's bands sit under the ratio instead).
pub const MAX_SOURCE_REPEAT_V4: u32 = 8;
/// Hashes the dynamic test evaluates: 2,048.
pub const ACCEPT_HASHES: usize = ACCEPT_UNITS * LANES;
/// Domain tag of the base-nonce stream.
pub const ACCEPT_TAG: &[u8] = b"igneum-accept/";
/// log2 of the closed-form dataset the test addresses: the prototype's 2^28 words, MASK 0x0fffffff.
pub const ACCEPT_DATASET_LOG2: u32 = 28;
/// Final register values equal to 0 or 2^32 - 1 must number fewer than this (1 percent of 8 x 2,048).
pub const MAX_SATURATED: u32 = 164;
/// Every output bit's ones count must be within this of 1,024 (6 x sqrt(2048) / 2, rounded).
pub const BIAS_TOLERANCE: u32 = 136;
/// Distinct addresses per lane per evaluation, summed over 2,048 evaluations, must exceed this (mean above 120).
pub const MIN_DISTINCT_SUM: u64 = 245_760;
/// The distinct-address bound for a program with `loads` dataset loads per hash: the same 120 of 128 ratio, so
/// [`MIN_DISTINCT_SUM`] for the lottery hash and `loads x 1,920` for the read-width classes with other counts.
/// Variant 5's scratch read-modify-writes are not dataset loads: their slots repeat by design (a later
/// read-modify-write sees an earlier write), so they are neither counted nor bounded here.
pub fn min_distinct_sum(loads: usize) -> u64 {
loads as u64 * ACCEPT_HASHES as u64 * 120 / 128
}
/// Why a candidate was rejected. The verdict (accept or reject) is what consensus depends on; the reason is the
/// first failing test in the order of the module table.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Reject {
/// (a): instruction `instr` loads from `reg`, which no instruction wrote since the previous load from it.
StaleLoadSource { instr: u8, reg: u8 },
/// (b): no injecting op writes `reg`.
NoInjectingWrite { reg: u8 },
/// (c): `reg` has `bits` bits equal in all 2,048 final values.
ConstantBit { reg: u8, bits: u8 },
/// (c): the load at `instr` in `iteration` read one address in all 32 lanes of `unit`.
LaneConstantSite { iteration: u8, instr: u8, unit: u8 },
/// (c): `count` final register values were 0 or all ones.
Saturated { count: u32 },
/// (a'), class v4 sub-version 2 (AP-F8-1): the load at `instr` reads `reg`, which is not fresh by dataflow in the
/// steady state of the loop (the freshness fixpoint over the base program and the shadow block).
UnfreshLoadSource { instr: u8, reg: u8 },
/// (c'), class v4 sub-version 2 (AP-F8-1): the load at `site` read a source value of 0 or all ones in `count` of
/// its 16,384 evaluations (64 units x 32 lanes x 8 iterations); limit [`MAX_SATURATED`] - 1, the same 1 percent as (c).
SaturatedSource { site: u8, count: u32 },
/// (c'') (B), class v4 sub-version 3: the load at `site` read the value `value` in `count` of its 16,384 (c)
/// evaluations (limit [`MAX_SOURCE_REPEAT_V4`] - 1): one constant upstream that the lineage rule cannot see.
RepeatedSource { site: u8, value: u32, count: u32 },
/// (c''), class v4 sub-version 3: the load at `site` read `distinct` distinct dataset word indices over
/// `evaluations`, `ratio_milli` / 1000 of a uniform source on its window, under the floor: a low-entropy index band
/// (F8's p23, p18, p19, p15, p56).
LowEntropySite { site: u8, distinct: u32, evaluations: u32, ratio_milli: u32 },
/// (c): output bit `bit` was set in `ones` of 2,048 hashes.
OutputBias { bit: u8, ones: u32 },
/// (c): the distinct-address sum was `sum`.
DistinctAddresses { sum: u64 },
}
impl std::fmt::Display for Reject {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Reject::StaleLoadSource { instr, reg } => {
write!(f, "(a) load at instruction {instr} reads r{reg}, unwritten since the previous load from it")
}
Reject::NoInjectingWrite { reg } => write!(f, "(b) r{reg} has no add, sub, xor, mad, shfl or load write"),
Reject::ConstantBit { reg, bits } => write!(f, "(c) r{reg} has {bits} nonce-independent bits"),
Reject::LaneConstantSite { iteration, instr, unit } => {
write!(f, "(c) load at iteration {iteration} instruction {instr} reads one address in all lanes of unit {unit}")
}
Reject::Saturated { count } => write!(f, "(c) {count} of 16384 final register values saturated (limit 163)"),
Reject::UnfreshLoadSource { instr, reg } => write!(f, "(a') load at {instr} reads r{reg}, not fresh by dataflow in the loop's steady state (class v4 sub-version 2)"),
Reject::RepeatedSource { site, value, count } => write!(f, "(c'') load site {site} read the value {value:#010x} in {count} of 16384 evaluations (limit {})", MAX_SOURCE_REPEAT_V4 - 1),
Reject::LowEntropySite { site, distinct, evaluations, ratio_milli } => write!(f, "(c'') load site {site} read {distinct} distinct word indices over {evaluations} evaluations, {}.{:03} of a uniform source on its window (floor {MIN_DISTINCT_RATIO_V4} at 2^20)", ratio_milli / 1000, ratio_milli % 1000),
Reject::SaturatedSource { site, count } => write!(f, "(c') load site {site} read a saturated source value in {count} of 16384 evaluations (limit 163)"),
Reject::OutputBias { bit, ones } => write!(f, "(c) output bit {bit} set in {ones} of 2048 hashes"),
Reject::DistinctAddresses { sum } => {
write!(f, "(c) distinct dataset addresses {sum} over 2048 hashes (mean {:.2}, needs above 120 of 128 of the dataset loads)", *sum as f64 / 2048.0)
}
}
}
}
/// What the dynamic test measured on an accepted program.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct AcceptReport {
/// Distinct masked addresses per lane per evaluation, summed over the 2,048 evaluations.
pub distinct_sum: u64,
/// Final register values equal to 0 or all ones.
pub saturated: u32,
/// The largest `|ones - 1024|` over the 64 output bits.
pub bias_max: u32,
}
impl AcceptReport {
/// Mean distinct addresses per hash (128 at most).
pub fn distinct_mean(&self) -> f64 {
self.distinct_sum as f64 / ACCEPT_HASHES as f64
}
}
/// Part (a): no load whose source is unwritten since the previous load from it, cyclically.
fn check_stale_loads(instrs: &[Instr]) -> Result<(), Reject> {
// `pending[r]`: a load has read r and nothing has written r since. Two passes over the list so the second
// pass sees the state carried over the iteration boundary.
let mut pending = [false; 8];
for _pass in 0..2 {
for (k, ins) in instrs.iter().enumerate() {
if ins.op.is_load() && pending[ins.src as usize] {
return Err(Reject::StaleLoadSource { instr: k as u8, reg: ins.src });
}
pending[ins.dst as usize] = false;
if ins.op.is_load() {
pending[ins.src as usize] = true;
}
}
}
Ok(())
}
/// Part (b): every register has an injecting write.
fn check_injecting_writes(instrs: &[Instr]) -> Result<(), Reject> {
let mut injected = [false; 8];
for ins in instrs {
if ins.op.injects() {
injected[ins.dst as usize] = true;
}
}
for (reg, ok) in injected.iter().enumerate() {
if !ok {
return Err(Reject::NoInjectingWrite { reg: reg as u8 });
}
}
Ok(())
}
/// The most repeated value of `values` (sorted in place) and that value: (B), kept for the driver, not wired.
#[allow(dead_code)]
fn most_repeated(values: &mut [u32]) -> (u32, u32) {
values.sort_unstable();
let (mut best, mut best_v, mut run) = (0u32, 0u32, 0u32);
for i in 0..values.len() {
run = if i > 0 && values[i] == values[i - 1] { run + 1 } else { 1 };
if run > best {
best = run;
best_v = values[i];
}
}
(best, best_v)
}
/// (c''), class v4 sub-version 3: the 2^20 ratio pass on the chosen candidate (the constants above).
pub fn check_distinct_indices_v4(p: &Program) -> Result<(), Reject> {
distinct_ratio_pass(p, ACCEPT_UNITS_DISTINCT_V4, MIN_DISTINCT_RATIO_V4).map(|_| ())
}
/// One ratio pass over `units`: every load site's distinct word indices against the uniform expectation on its
/// window (`N - N^2 / 2W`, the window `2^28 >> min(win, 2)` words of the closed-form dataset), `Err` at the first
/// site under `floor`, else the minimum ratio and its site.
pub fn distinct_ratio_pass(p: &Program, units: usize, floor: f64) -> Result<(f64, usize), Reject> {
let n = (units * LANES * ITERATIONS) as f64;
let d = distinct_indices_v4(p, units)?;
let mut min = (f64::MAX, 0usize);
let mut site = 0usize;
for i in &p.instrs {
if !i.op.is_load() {
continue;
}
let wsize = ((1u64 << ACCEPT_DATASET_LOG2) >> (i.win as u64).min(2)) as f64;
let ratio = d[site] as f64 / (n - n * n / (2.0 * wsize));
if ratio < floor {
return Err(Reject::LowEntropySite { site: site as u8, distinct: d[site], evaluations: n as u32, ratio_milli: (ratio * 1000.0) as u32 });
}
if ratio < min.0 {
min = (ratio, site);
}
site += 1;
}
Ok(min)
}
/// The distinct dataset word indices every load site reads over `units` units of the seed's acceptance stream on
/// the closed-form words (the sample caps the count near `units x 32 x 8`, so a site's index entropy is read only
/// below about log2 of that).
pub fn distinct_indices_v4(p: &Program, units: usize) -> Result<Vec<u32>, Reject> {
let loads = p.loads_per_hash();
let sites = loads / ITERATIONS;
let mut acc = Acc {
sources: None,
indices: Some(vec![Vec::with_capacity(units * LANES * ITERATIONS); sites]),
sat_source: vec![0; sites],
and_acc: [u32::MAX; 8],
or_acc: [0; 8],
saturated: 0,
bit_ones: [0; 64],
distinct_sum: 0,
};
let mut lane_addrs = vec![0u32; LANES * loads];
for (unit, &base) in accept_base_nonces_n(&p.seed, units).iter().enumerate() {
run_unit(p, unit, base, &mut acc, &mut lane_addrs)?;
}
let mut out = Vec::with_capacity(sites);
for ix in acc.indices.take().unwrap().iter_mut() {
ix.sort_unstable();
ix.dedup();
out.push(ix.len() as u32);
}
Ok(out)
}
/// Whether `class` is the class v4 shape (the 256-instruction shadow block over the class v3 base, the pass count and
/// the era set aside): the shape the sub-version 2 rules (a') and (c') apply to, on every draw path.
pub fn is_class_v4_shape(class: &LoadClass) -> bool {
matches!(class.shadow, Some(ShadowClass { instrs: V4_SHADOW_INSTRS, .. }))
// class v5 (docs/design/class-v5-stored-state.md) is judged under the same rules: its state flag is set aside
&& LoadClass { era: None, shadow: None, state: false, ..*class } == LoadClass { shadow: None, ..V4_CLASS }
}
/// One pass of the dataflow freshness over the base program then the shadow block (the order of one iteration),
/// from `fresh`; `check` reports the first load that reads a register that is not fresh. The rule (AP-F8-1,
/// `docs/analysis/ca3-v4-uniform.md`): a load leaves its destination fresh only if its source was (a saturated
/// source reads one fixed word); add, sub, xor, mad and shfl if either operand was; rotl and rotr if the operand
/// was (a rotate maps all-ones and zero to themselves); or, mul and mulhi never.
fn freshness_pass(p: &Program, fresh: &mut [bool; 8], pair_op: &mut [Option<(Op, usize)>; 8], check: bool) -> Result<(), Reject> {
for (k, i) in p.instrs.iter().chain(p.shadow.iter()).enumerate() {
let (d, a) = (i.dst as usize, i.src as usize);
if check && i.op.is_load() && !fresh[a] {
return Err(Reject::UnfreshLoadSource { instr: k as u8, reg: i.src });
}
// the shared-operand idiom (sub-version 3): or-then-xor or or-then-sub on one operand is `d & ~s`, xor-then-or
// is `d | s`: lossy, though the second op would inject on its own (F8's p23: `or r6 |= r4; xor r6 ^= r4`)
let masked = matches!((pair_op[d], i.op), (Some((Op::Or, s)), Op::Xor) | (Some((Op::Or, s)), Op::Sub) | (Some((Op::Xor, s)), Op::Or) if s == a);
fresh[d] = !masked
&& match i.op {
Op::Load | Op::WLoad | Op::Scratch | Op::Hot => fresh[a],
Op::Add | Op::Sub | Op::Xor | Op::Mad | Op::Shfl => fresh[d] || fresh[a],
Op::Rotl | Op::Rotr => fresh[d],
Op::Or | Op::Mul | Op::MulHi => false,
};
pair_op[d] = if matches!(i.op, Op::Or | Op::Xor) && !masked { Some((i.op, a)) } else { None };
for r in 0..8 {
if r != d {
if let Some((_, s)) = pair_op[r] {
if s == d {
pair_op[r] = None;
}
}
}
}
}
Ok(())
}
/// Part (a'), class v4 sub-version 2: every load's source is fresh by dataflow in the loop's steady state. The draw
/// of `candidate_from_words_class` keeps in-pass sources fresh; this closes the iteration boundary (a source last
/// written late in the previous iteration or in the shadow block, which the draw's no-eligible fallback can pick:
/// F8's p11, an `or` at 63 feeding a load at 1). The state starts all fresh (the init words are a per-lane hash of
/// the nonce) and is run to its fixpoint (it only ever falls, so at most 8 passes change it), then one checking pass.
pub fn check_fresh_sources_v4(p: &Program) -> Result<(), Reject> {
if !is_class_v4_shape(&p.class) {
return Ok(());
}
let mut fresh = [true; 8];
let mut pair_op: [Option<(Op, usize)>; 8] = [None; 8];
for _ in 0..9 {
let before = (fresh, pair_op);
freshness_pass(p, &mut fresh, &mut pair_op, false)?;
if (fresh, pair_op) == before {
break;
}
}
freshness_pass(p, &mut fresh, &mut pair_op, true)
}
/// Parts (a), (b) and, for class v4 sub-version 2, (a').
pub fn check_static(p: &Program) -> Result<(), Reject> {
if p.instrs.len() != INSTR_COUNT {
panic!("acceptance needs a {INSTR_COUNT}-instruction program");
}
check_stale_loads(&p.instrs)?;
check_injecting_writes(&p.instrs)?;
check_fresh_sources_v4(p)
}
/// The 64 base nonces of the dynamic test for seed words `seed`.
pub fn accept_base_nonces(seed: &[u32; 8]) -> [u32; ACCEPT_UNITS] {
let v = accept_base_nonces_n(seed, ACCEPT_UNITS);
let mut out = [0u32; ACCEPT_UNITS];
out.copy_from_slice(&v);
out
}
/// The first `n` base nonces of the seed's acceptance stream (the (c) units are the first [`ACCEPT_UNITS`]).
pub fn accept_base_nonces_n(seed: &[u32; 8], n: usize) -> Vec<u32> {
let mut b = Vec::with_capacity(ACCEPT_TAG.len() + 32);
b.extend_from_slice(ACCEPT_TAG);
for w in seed {
b.extend_from_slice(&w.to_le_bytes());
}
let mut rng = SplitMix64::new(fnv1a64(&b));
(0..n).map(|_| (rng.next() as u32) & !31).collect()
}
#[inline(always)]
fn mulhi32(a: u32, b: u32) -> u32 {
((a as u64 * b as u64) >> 32) as u32
}
/// Accumulators of the dynamic test over the 64 units.
struct Acc {
/// (c'') (B): every load's source value per site, recorded when present.
sources: Option<Vec<Vec<u32>>>,
/// (c'') (A): every load's dataset index per site, recorded when present (the distinct-index pass only).
indices: Option<Vec<Vec<u32>>>,
/// (c'): per load site (the load's index within the iteration), how many of its evaluations read a source value
/// of 0 or all ones (class v4 sub-version 2; counted for every class, judged for class v4 only).
sat_source: Vec<u32>,
and_acc: [u32; 8],
or_acc: [u32; 8],
saturated: u32,
bit_ones: [u32; 64],
distinct_sum: u64,
}
/// One unit of the dynamic test: the interpreter of `verify.rs` with the closed-form dataset, instrumented.
/// Returns the first lane-constant load site, if any.
fn run_unit(p: &Program, unit: usize, base: u32, acc: &mut Acc, lane_addrs: &mut [u32]) -> Result<(), Reject> {
let seed = &p.seed;
let mask: u32 = (1u32 << ACCEPT_DATASET_LOG2) - 1;
let (d0, d1) = (seed[0], seed[1]);
let (h0, h1) = (seed[2], seed[3]);
let hot_words = p.hot_words();
let loads = p.loads_per_hash();
let mut r = [[0u32; LANES]; 8];
for lane in 0..LANES {
let nonce = base.wrapping_add(lane as u32);
for i in 0..8 {
let mut x = nonce ^ seed[i];
x = x.wrapping_add(0x9e3779b9u32.wrapping_mul(i as u32 + 1));
x = splitmix32(x);
r[i][lane] = x ^ seed[(i + 1) & 7];
}
}
let mut idx = [0u32; LANES];
let mut nload = 0usize;
let mut scratch = if p.has_scratch() { Some(ScratchModel::new(p.class.scratch_slots_per_lane())) } else { None };
let slot_mask = p.class.scratch_slot_mask();
let era = p.class.era;
// Class v4 sub-version 3 (AP-F8-3, 7 October 2026): the acceptance interpreter runs the latency-shadow block
// after instruction 63 of every iteration, `reps` times with the iteration's `sel`, exactly as the hash does
// (verify.rs). Until this commit it ran the 64 base instructions only, so every dynamic test (c) judged a class v4
// program the chain never hashes. The shadow block holds no load, so its instructions take the same arms.
let shadow_reps = p.shadow_reps();
for it in 0..ITERATIONS {
let sel = r[0];
let shadow_pass = (0..shadow_reps).flat_map(|_| p.shadow.iter().enumerate().map(|(k, i)| (INSTR_COUNT + k, i)));
for (k, ins) in p.instrs.iter().enumerate().chain(shadow_pass) {
let d = ins.dst as usize;
let a = ins.src as usize;
match ins.op {
Op::Scratch => {
// Variant 5: the slot stands in for the address (bit 31 set so it never aliases a dataset word).
let m = scratch.as_mut().expect("a scratch op needs a scratch class");
for lane in 0..LANES {
idx[lane] = r[a][lane] & slot_mask;
}
if idx.iter().all(|&x| x == idx[0]) {
return Err(Reject::LaneConstantSite { iteration: it as u8, instr: k as u8, unit: unit as u8 });
}
for lane in 0..LANES {
r[d][lane] = m.rmw(&p.seed, base, lane, idx[lane], r[d][lane]);
lane_addrs[lane * loads + nload] = 0x8000_0000 | idx[lane];
}
nload += 1;
}
Op::Add => {
let (imm, imm2, bit) = (ins.imm, ins.imm2, ins.bit as u32);
let src = r[a];
for lane in 0..LANES {
let s = (sel[lane] >> bit) & 1;
let c = if s != 0 { imm2 } else { imm };
r[d][lane] = r[d][lane].wrapping_add(src[lane]).wrapping_add(c);
}
}
Op::Sub => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = r[d][lane].wrapping_sub(src[lane]);
}
}
Op::Mul => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = r[d][lane].wrapping_mul(src[lane]);
}
}
Op::MulHi => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = mulhi32(r[d][lane], src[lane]);
}
}
Op::Xor => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] ^= src[lane];
}
}
Op::Or => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] |= src[lane];
}
}
Op::Rotl => {
let n = ins.rot;
for lane in 0..LANES {
r[d][lane] = r[d][lane].rotate_left(n);
}
}
Op::Rotr => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = r[d][lane].rotate_right(src[lane] & 31);
}
}
Op::Mad => {
let src = r[a];
let src2 = r[ins.src2 as usize];
for lane in 0..LANES {
r[d][lane] = src[lane].wrapping_mul(src2[lane]).wrapping_add(r[d][lane]);
}
}
Op::Shfl => {
let src = r[a];
let m = ins.mask as usize;
for lane in 0..LANES {
r[d][lane] ^= src[lane ^ m];
}
}
Op::Load => {
// Read-width experiment: a load of `width` words reads from the aligned address and folds every
// word (verify::fold_words); width 1 is the lottery hash's xor of one word.
let width = ins.width as usize;
let align = !(ins.width as u32 - 1);
let site = nload % (loads / ITERATIONS);
for lane in 0..LANES {
let v = r[a][lane];
acc.sat_source[site] += (v == 0 || v == u32::MAX) as u32;
if let Some(src) = acc.sources.as_mut() {
src[site].push(v);
}
idx[lane] = load_index(era.as_ref(), ins, v, mask, ACCEPT_DATASET_LOG2) & align;
if let Some(ix) = acc.indices.as_mut() {
ix[site].push(idx[lane]);
}
}
if idx.iter().all(|&x| x == idx[0]) {
return Err(Reject::LaneConstantSite { iteration: it as u8, instr: k as u8, unit: unit as u8 });
}
for lane in 0..LANES {
if width == 1 {
r[d][lane] ^= dataset_elem(idx[lane], d0, d1);
} else {
let mut w = [0u32; 16];
for j in 0..width {
w[j] = dataset_elem(idx[lane] + j as u32, d0, d1);
}
r[d][lane] = fold_words(r[d][lane], &w[..width]);
}
lane_addrs[lane * loads + nload] = idx[lane];
}
nload += 1;
}
Op::Hot => {
// Hot table: the stand-in is dataset_elem keyed by seed words 2 and 3; the address is tagged with
// bit 30 so a hot word and a dataset word at one index count as two addresses.
for lane in 0..LANES {
idx[lane] = hot_index(r[a][lane], hot_words);
}
if idx.iter().all(|&x| x == idx[0]) {
return Err(Reject::LaneConstantSite { iteration: it as u8, instr: k as u8, unit: unit as u8 });
}
for lane in 0..LANES {
r[d][lane] ^= dataset_elem(idx[lane], h0, h1);
lane_addrs[lane * loads + nload] = 0x4000_0000 | idx[lane];
}
nload += 1;
}
Op::WLoad => {
let b = (r[a][0] & mask) & !31;
for lane in 0..LANES {
idx[lane] = b + lane as u32;
r[d][lane] ^= dataset_elem(idx[lane], d0, d1);
lane_addrs[lane * loads + nload] = idx[lane];
}
nload += 1;
}
}
}
}
for i in 0..8 {
for lane in 0..LANES {
let v = r[i][lane];
acc.and_acc[i] &= v;
acc.or_acc[i] |= v;
acc.saturated += (v == 0 || v == u32::MAX) as u32;
}
}
for lane in 0..LANES {
let lo = r[0][lane] ^ r[1][lane].rotate_left(7) ^ r[2][lane].rotate_left(14) ^ r[3][lane].rotate_left(21);
let hi = r[4][lane] ^ r[5][lane].rotate_left(9) ^ r[6][lane].rotate_left(18) ^ r[7][lane].rotate_left(27);
let h = ((hi as u64) << 32) | lo as u64;
for j in 0..64 {
acc.bit_ones[j] += ((h >> j) & 1) as u32;
}
let sl = &mut lane_addrs[lane * loads..(lane + 1) * loads];
sl.sort_unstable();
let mut distinct = 0u64;
for k in 0..loads {
// scratch slots carry bit 31 (variant 5) and are not dataset addresses
if sl[k] & 0x8000_0000 == 0 && (k == 0 || sl[k] != sl[k - 1]) {
distinct += 1;
}
}
acc.distinct_sum += distinct;
}
Ok(())
}
/// Part (c).
pub fn check_dynamic(p: &Program) -> Result<AcceptReport, Reject> {
let loads = p.loads_per_hash();
let v4 = is_class_v4_shape(&p.class);
let sites = loads / ITERATIONS;
let mut acc = Acc {
sources: None,
indices: None,
sat_source: vec![0; sites],
and_acc: [u32::MAX; 8],
or_acc: [0; 8],
saturated: 0,
bit_ones: [0; 64],
distinct_sum: 0,
};
let mut lane_addrs = vec![0u32; LANES * loads];
for (unit, &base) in accept_base_nonces(&p.seed).iter().enumerate() {
run_unit(p, unit, base, &mut acc, &mut lane_addrs)?;
}
for reg in 0..8 {
let bits = (acc.and_acc[reg] | !acc.or_acc[reg]).count_ones();
if bits != 0 {
return Err(Reject::ConstantBit { reg: reg as u8, bits: bits as u8 });
}
}
if acc.saturated >= MAX_SATURATED {
return Err(Reject::Saturated { count: acc.saturated });
}
// (c'), class v4 sub-version 2 (AP-F8-1, 7 October 2026): a load whose source is saturated reads one fixed word,
// whatever delivered the saturation (an or-written value, a rotate of one, a load after a saturated load); the
// source rule of the draw removes the writers it can see and this count catches every delivery. Keyed on the
// class v4 shape as the draw's rule is, so v2 and v3 verdicts do not move.
if v4 {
if let Some((site, &count)) = acc.sat_source.iter().enumerate().find(|(_, &c)| c >= MAX_SATURATED) {
return Err(Reject::SaturatedSource { site: site as u8, count });
}
// (c''), the ratio on the candidate that passed everything else (the draw's last and dearest test)
check_distinct_indices_v4(p)?;
}
let half = (ACCEPT_HASHES / 2) as u32;
let mut bias_max = 0u32;
for (bit, &ones) in acc.bit_ones.iter().enumerate() {
let d = ones.abs_diff(half);
if d > BIAS_TOLERANCE {
return Err(Reject::OutputBias { bit: bit as u8, ones });
}
bias_max = bias_max.max(d);
}
if acc.distinct_sum <= min_distinct_sum(loads - p.scratch_ops_per_hash()) {
return Err(Reject::DistinctAddresses { sum: acc.distinct_sum });
}
Ok(AcceptReport { distinct_sum: acc.distinct_sum, saturated: acc.saturated, bias_max })
}
/// The whole rule: (a), (b), then (c).
pub fn check(p: &Program) -> Result<AcceptReport, Reject> {
check_static(p)?;
check_dynamic(p)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::generator::{candidate, candidate_class, generate, generate_class, GeneratorConfig, generate_v1, LoadClass};
use crate::verify::{DatasetMode, DatasetSource};
#[test]
fn distinct_bound_scales_with_the_load_count() {
assert_eq!(min_distinct_sum(128), MIN_DISTINCT_SUM);
assert_eq!(min_distinct_sum(32), 61_440);
}
/// The read-width classes pass the rule at about the version 2 rate, and the instrumented interpreter agrees
/// with `verify.rs` on every class (the fold is shared, the addresses are aligned the same way).
#[test]
fn classes_pass_and_match_verify() {
for name in ["w16", "w64", "w64x4", "50,35,15", "25,50,25", "scr2k32", "scr8k128"] {
let c = LoadClass::parse(name).unwrap();
let p = generate_class("igneum-genesis", c);
assert!(check(&p).is_ok(), "{name}");
let mut rejected = 0;
for i in 0..60u32 {
let s = format!("igneum-rw-accept/{i}");
let q = candidate_class(&s, s.as_bytes(), 0, c);
if check(&q).is_err() {
rejected += 1;
}
}
assert!(rejected < 15, "{name}: {rejected} of 60 rejected");
let ds = DatasetSource::from_key(p.seed, DatasetMode::ClosedForm, ACCEPT_DATASET_LOG2);
let bases = accept_base_nonces(&p.seed);
let loads = p.loads_per_hash();
let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 };
let mut la = vec![0u32; LANES * loads];
let mut ones = [0u32; 64];
for (u, &b) in bases.iter().enumerate() {
run_unit(&p, u, b, &mut acc, &mut la).unwrap();
for h in crate::verify::hash_warp(&p, b, &ds) {
for j in 0..64 {
ones[j] += ((h >> j) & 1) as u32;
}
}
}
assert_eq!(acc.bit_ones, ones, "{name}: bit counts match the reference interpreter");
}
}
/// AP-F8-3 (7 October 2026): the acceptance's execution and `verify.rs` agree on a class v4 program WITH its
/// shadow block (the output bit counts over the 64 units on the closed-form dataset, the same sel per iteration),
/// so the two paths cannot diverge again: until sub-version 3 the acceptance ran the base program only and judged
/// a program the chain never hashes. The devnet epoch-0 seed and the six test eras, 8 x 256 x 27 shadow
/// instructions per hash each; the same program with its shadow stripped gives other counts.
#[test]
fn acceptance_executes_the_shadow_block_as_the_verifier_does() {
use crate::generator::{generate_era, EraParams, V3_ALLOWED, V4_CLASS};
let hx = |h: &str| -> Vec<u8> { (0..h.len()).step_by(2).map(|i| u8::from_str_radix(&h[i..i + 2], 16).unwrap()).collect() };
let g = hx("edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07");
let mut eras = vec![g.clone()];
for n in 0..6 {
eras.push(EraParams::test_era_bytes(&format!("igneum-era-test/{n}")).to_vec());
}
for era in &eras {
let p = generate_era("igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", &g, V4_CLASS, era, &V3_ALLOWED);
assert_eq!(p.shadow.len(), 256);
assert_eq!(p.shadow_reps(), 27);
let ds = DatasetSource::from_key(p.seed, DatasetMode::ClosedForm, ACCEPT_DATASET_LOG2);
let bases = accept_base_nonces(&p.seed);
let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 };
let mut la = vec![0u32; LANES * p.loads_per_hash()];
let mut ones = [0u32; 64];
for (u, &b) in bases.iter().enumerate() {
run_unit(&p, u, b, &mut acc, &mut la).unwrap();
for h in crate::verify::hash_warp(&p, b, &ds) {
for j in 0..64 {
ones[j] += ((h >> j) & 1) as u32;
}
}
}
assert_eq!(acc.bit_ones, ones, "the acceptance's execution of a class v4 program (shadow block included) matches the verifier's hashes");
// and the same program with its shadow stripped hashes differently: the shadow is executed, not skipped
let mut bare = p.clone();
bare.shadow.clear();
let mut acc2 = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 };
for (u, &b) in bases.iter().enumerate() {
let _ = run_unit(&bare, u, b, &mut acc2, &mut la);
}
assert_ne!(acc.bit_ones, acc2.bit_ones, "the shadow block changes the acceptance's execution");
}
}
/// The instrumented interpreter agrees with `verify.rs` on the closed-form dataset keyed by the seed words.
#[test]
fn instrumented_interpreter_matches_verify() {
for i in 0..20u32 {
let s = format!("igneum-accept-test/{i}");
let p = candidate(&s, s.as_bytes(), 0);
let ds = DatasetSource::from_key(p.seed, DatasetMode::ClosedForm, ACCEPT_DATASET_LOG2);
let bases = accept_base_nonces(&p.seed);
let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 };
let mut la = vec![0u32; LANES * p.loads_per_hash()];
let mut ones = [0u32; 64];
let mut any = false;
for (u, &b) in bases.iter().enumerate() {
if run_unit(&p, u, b, &mut acc, &mut la).is_err() {
continue;
}
any = true;
let w = crate::verify::hash_warp(&p, b, &ds);
for h in w {
for j in 0..64 {
ones[j] += ((h >> j) & 1) as u32;
}
}
}
if any {
assert_eq!(acc.bit_ones, ones, "bit counts of {s} match the reference interpreter's hashes");
}
}
}
/// Hot-table experiment: the hot classes pass the rule at about the version 2 rate, and the hot addresses are
/// uniform over the table (16 buckets of the index over 64 units x 32 lanes x 32 hot loads).
#[test]
fn hot_classes_pass_and_hot_loads_are_uniform() {
for name in ["hot32k4", "hot64k4", "hot96k4", "hot64k2", "hot64k8", "scr4k32+hot64k4", "hot32k4a", "hot64k4a", "hot96k4a"] {
let c = LoadClass::parse(name).unwrap();
let p = generate_class("igneum-genesis", c);
assert!(check(&p).is_ok(), "{name}");
let mut rejected = 0;
for i in 0..60u32 {
let s = format!("igneum-hot-accept/{i}");
let q = candidate_class(&s, s.as_bytes(), 0, c);
if check(&q).is_err() {
rejected += 1;
}
}
assert!(rejected < 15, "{name}: {rejected} of 60 rejected");
}
let p = generate_class("igneum-genesis", LoadClass::hot(96, 4));
let words = p.hot_words();
let loads = p.loads_per_hash();
let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 };
let mut la = vec![0u32; LANES * loads];
let mut buckets = [0u64; 16];
let mut hot_count = 0u64;
for (u, &b) in accept_base_nonces(&p.seed).iter().enumerate() {
run_unit(&p, u, b, &mut acc, &mut la).unwrap();
for &a in &la {
if a & 0xC000_0000 == 0x4000_0000 {
let idx = a & 0x3FFF_FFFF;
assert!(idx < words);
buckets[(idx as u64 * 16 / words as u64) as usize] += 1;
hot_count += 1;
}
}
}
assert_eq!(hot_count, 64 * 32 * 32, "32 hot loads per hash over 2,048 hashes");
let mean = hot_count as f64 / 16.0;
for (i, &b) in buckets.iter().enumerate() {
assert!((b as f64 - mean).abs() < 0.15 * mean, "bucket {i}: {b} against a mean of {mean}");
}
// the dataset distinct count still holds for the dataset loads alone
let r = check(&p).unwrap();
assert!(r.distinct_mean() > 120.0);
}
#[test]
fn base_nonces_are_aligned_and_seed_dependent() {
let a = accept_base_nonces(&[1, 2, 3, 4, 5, 6, 7, 8]);
let b = accept_base_nonces(&[1, 2, 3, 4, 5, 6, 7, 9]);
assert!(a.iter().all(|x| x & 31 == 0));
assert_ne!(a, b);
assert_eq!(a, accept_base_nonces(&[1, 2, 3, 4, 5, 6, 7, 8]));
}
#[test]
fn stale_load_detection_is_cyclic() {
let mut p = candidate("igneum-genesis", b"igneum-genesis", 0);
assert!(check_stale_loads(&p.instrs).is_ok(), "an accepted candidate has no stale load");
// Make the last instruction a load from r3 and the first a load from r3 with no write between (wrap).
let (first, last) = (0usize, INSTR_COUNT - 1);
p.instrs[last].op = Op::Load;
p.instrs[last].src = 3;
p.instrs[last].dst = 4;
p.instrs[first].op = Op::Load;
p.instrs[first].src = 3;
p.instrs[first].dst = 5;
assert_eq!(check_stale_loads(&p.instrs), Err(Reject::StaleLoadSource { instr: 0, reg: 3 }));
}
#[test]
fn injecting_write_detection() {
let mut p = candidate("igneum-genesis", b"igneum-genesis", 0);
for ins in p.instrs.iter_mut() {
if ins.dst == 6 && ins.op.injects() {
ins.op = Op::Rotl;
}
}
assert_eq!(check_injecting_writes(&p.instrs), Err(Reject::NoInjectingWrite { reg: 6 }));
}
/// The census's measured rates: about 5 percent of candidates rejected, 128 distinct loads for the rest.
#[test]
fn rejection_rate_and_distinct_loads_on_a_sample() {
let mut rejected = 0;
let mut dsum = 0.0;
let mut accepted = 0;
for i in 0..400u32 {
let s = format!("igneum-census-2026-10-03/{i}");
match check(&candidate(&s, s.as_bytes(), 0)) {
Ok(r) => {
accepted += 1;
dsum += r.distinct_mean();
assert!(r.distinct_mean() > 120.0);
}
Err(_) => rejected += 1,
}
}
assert!(rejected < 50, "{rejected} of 400 rejected");
assert!(dsum / accepted as f64 > 127.0, "mean distinct {}", dsum / accepted as f64);
}
/// The retired generator fails the rule on nearly every program (the census: 95 percent).
#[test]
fn v1_programs_are_mostly_rejected() {
let mut rejected = 0;
for i in 0..100u32 {
let s = format!("igneum-census-2026-10-03/{i}");
if check(&generate_v1(&s, &GeneratorConfig::default())).is_err() {
rejected += 1;
}
}
assert!(rejected > 80, "{rejected} of 100 rejected");
}
#[test]
fn generated_programs_pass() {
for s in ["igneum-genesis", "igneum-hourly", "igneum-second-seed"] {
assert!(check(&generate(s)).is_ok());
}
}
}

View file

@ -0,0 +1,234 @@
//! Header binding: the init words of the lottery hash commit to the block being mined.
//!
//! `docs/spec/01-lottery-hash.md` section 1.6 (open item O-1.9) proposes the rule implemented here:
//!
//! * The header nonce is 64 bits. Its low 32 bits are the lane nonce `n` (the per-thread nonce of the kernel).
//! * Its high 32 bits and the 256-bit pre-PoW header hash `H` form the init words:
//! `I = seed_words_from_bytes("igneum-block/" || H || nonce_hi_le32)`.
//! * `I` is a kernel argument, not a compile-time constant. The program (from the epoch seed) is compiled once per
//! epoch; `I` changes per block template.
//!
//! Choices the spec leaves open, fixed here (3 October 2026):
//!
//! | Choice | Rule | Why |
//! |---|---|---|
//! | `H` | the header hash with the nonce field set to zero and every other field as mined (rusty-kaspa `hash_override_nonce_time(header, 0, header.timestamp)`) | Kaspa's pre-PoW hash also zeroes the timestamp and absorbs it later in cSHAKE. The lane hash has no later step, so the timestamp must be inside `H` or a miner could reuse one nonce for many timestamps |
//! | 256-bit pow value | lane hash in the top 64 bits (little-endian bytes 24..32), low 192 bits zero | `pow <= target256` is then exactly `lane <= target256 >> 192` (section 1.10 candidate), so a GPU worker and the node compare the same 64-bit numbers; the block level is `leading_zeros(lane)` shifted |
//! | Day seed bytes (O-1.10 interim) | `"igneum-day/" || day_le64` with `day = header.timestamp_ms / 86,400,000` | The spec's proposal ties the day key to the first epoch seed of the day, which needs the VDF schedule. The interim rule keeps one 256 MiB cache per calendar day and needs no chain walk |
//! | Epoch seed bytes | the 32 bytes of the epoch block hash (devnet v0: the last selected-chain block below the epoch's start DAA score, genesis for epoch 0) | Section 1.12: `S_e = seed_words_from_bytes(program_seed_e)`; the VDF output replaces the block hash later without touching this crate |
//!
//! The packs' vectors (init words equal to the program seed) stay the conformance vectors for the generator,
//! interpreter and dataset. The bound vectors are in `README.md` and in the tests below (re-cut for generator
//! version 2 on 4 October 2026).
use crate::generator::LANES;
use crate::seed::seed_words_from_bytes;
use crate::verify::{interpret_warp_init, Epoch, WarpResult};
/// Domain tag of the init words.
pub const BLOCK_TAG: &[u8] = b"igneum-block/";
/// Domain tag of the interim day seed.
pub const DAY_TAG: &[u8] = b"igneum-day/";
/// Milliseconds per day, the clock of the interim day seed.
pub const DAY_MS: u64 = 86_400_000;
/// The lane nonce: low 32 bits of the header nonce.
#[inline]
pub fn lane_nonce(nonce: u64) -> u32 {
nonce as u32
}
/// The high 32 bits of the header nonce (the extra nonce that enters the init words).
#[inline]
pub fn nonce_hi(nonce: u64) -> u32 {
(nonce >> 32) as u32
}
/// `"igneum-block/" || H || nonce_hi_le32`, the bytes the init words are derived from.
pub fn block_init_bytes(header_prehash: &[u8; 32], nonce: u64) -> [u8; 49] {
let mut b = [0u8; 49];
b[..13].copy_from_slice(BLOCK_TAG);
b[13..45].copy_from_slice(header_prehash);
b[45..49].copy_from_slice(&nonce_hi(nonce).to_le_bytes());
b
}
/// The init words `I` for a header and a 64-bit nonce (only the high 32 bits of the nonce matter).
pub fn block_init_words(header_prehash: &[u8; 32], nonce: u64) -> [u32; 8] {
seed_words_from_bytes(&block_init_bytes(header_prehash, nonce))
}
/// Interim day seed bytes: `"igneum-day/" || day_le64`.
pub fn day_bytes(day_index: u64) -> [u8; 19] {
let mut b = [0u8; 19];
b[..11].copy_from_slice(DAY_TAG);
b[11..19].copy_from_slice(&day_index.to_le_bytes());
b
}
/// Day index of a header timestamp in milliseconds.
#[inline]
pub fn day_index(timestamp_ms: u64) -> u64 {
timestamp_ms / DAY_MS
}
/// The 256-bit pow value as little-endian bytes: the lane hash in bytes 24..32, zero elsewhere.
pub fn pow256_from_lane(lane: u64) -> [u8; 32] {
let mut b = [0u8; 32];
b[24..32].copy_from_slice(&lane.to_le_bytes());
b
}
/// The 64-bit target from a little-endian 256-bit target: its top 64 bits.
pub fn target64_from_le256(target: &[u8; 32]) -> u64 {
u64::from_le_bytes(target[24..32].try_into().unwrap())
}
/// Lower-case hex of bytes.
pub fn hex(bytes: &[u8]) -> String {
bytes.iter().map(|b| format!("{b:02x}")).collect()
}
/// Bytes from hex (either case). `None` on odd length or a bad digit.
pub fn unhex(s: &str) -> Option<Vec<u8>> {
if s.len() % 2 != 0 {
return None;
}
(0..s.len()).step_by(2).map(|i| u8::from_str_radix(&s[i..i + 2], 16).ok()).collect()
}
impl Epoch {
/// The 32 bound hashes of the aligned warp that contains `nonce`: lane `l` is the hash of
/// `(nonce_hi << 32) | ((lane_nonce & !31) + l)`.
pub fn hash_warp_bound(&self, header_prehash: &[u8; 32], nonce: u64) -> [u64; LANES] {
self.interpret_warp_bound(header_prehash, nonce).hashes
}
pub fn interpret_warp_bound(&self, header_prehash: &[u8; 32], nonce: u64) -> WarpResult {
let init = block_init_words(header_prehash, nonce);
interpret_warp_init(&self.program, &init, lane_nonce(nonce) & !31, &self.dataset)
}
/// The 32 bound hashes for already-derived init words (what a GPU worker computes per dispatch).
pub fn hash_warp_init(&self, init: &[u32; 8], base_lane_nonce: u32) -> [u64; LANES] {
interpret_warp_init(&self.program, init, base_lane_nonce, &self.dataset).hashes
}
/// The bound 64-bit lane hash of one header nonce.
pub fn hash_bound(&self, header_prehash: &[u8; 32], nonce: u64) -> u64 {
self.hash_warp_bound(header_prehash, nonce)[(lane_nonce(nonce) & 31) as usize]
}
/// The bound 256-bit pow value (little-endian): the lane hash in the top 64 bits.
pub fn pow_bound(&self, header_prehash: &[u8; 32], nonce: u64) -> [u8; 32] {
pow256_from_lane(self.hash_bound(header_prehash, nonce))
}
/// `hash_bound(H, nonce) <= target64`.
pub fn verify_block_bound(&self, header_prehash: &[u8; 32], nonce: u64, target64: u64) -> bool {
self.hash_bound(header_prehash, nonce) <= target64
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::verify::DatasetMode;
use std::sync::OnceLock;
fn epoch() -> &'static Epoch {
static E: OnceLock<Epoch> = OnceLock::new();
E.get_or_init(|| Epoch::memory_hard("igneum-genesis", "2026-10-03"))
}
fn prehash_a() -> [u8; 32] {
[0u8; 32]
}
fn prehash_b() -> [u8; 32] {
let mut h = [0u8; 32];
for (i, b) in h.iter_mut().enumerate() {
*b = i as u8;
}
h
}
#[test]
fn init_bytes_layout() {
let b = block_init_bytes(&prehash_b(), 0x0000_0102_0000_0007);
assert_eq!(&b[..13], b"igneum-block/");
assert_eq!(&b[13..45], &prehash_b());
assert_eq!(&b[45..49], &[0x02, 0x01, 0x00, 0x00]);
assert_eq!(
block_init_words(&prehash_b(), 0x0000_0102_0000_0007),
block_init_words(&prehash_b(), 0x0000_0102_ffff_ffff)
);
assert_ne!(block_init_words(&prehash_b(), 0), block_init_words(&prehash_b(), 1 << 32));
}
#[test]
fn day_bytes_layout() {
let b = day_bytes(20_729);
assert_eq!(&b[..11], b"igneum-day/");
assert_eq!(&b[11..], &20_729u64.to_le_bytes());
assert_eq!(day_index(0x1a0ff0f7c00), 20_729);
}
#[test]
fn pow256_and_target64() {
let p = pow256_from_lane(0x0123_4567_89ab_cdef);
assert_eq!(&p[..24], &[0u8; 24]);
assert_eq!(target64_from_le256(&p), 0x0123_4567_89ab_cdef);
assert_eq!(hex(&p[24..]), "efcdab8967452301");
assert_eq!(unhex("efcdab8967452301").unwrap(), p[24..].to_vec());
assert!(unhex("abc").is_none());
}
/// The bound form is a different hash from the unbound one, depends on H and on the high nonce bits, and the
/// single-nonce form agrees with the warp form.
#[test]
fn bound_hash_properties() {
let e = epoch();
let a = prehash_a();
let b = prehash_b();
assert_ne!(e.hash_bound(&a, 0), e.hash(0), "bound differs from the pack vector");
assert_ne!(e.hash_bound(&a, 0), e.hash_bound(&b, 0), "H enters the hash");
assert_ne!(e.hash_bound(&a, 0), e.hash_bound(&a, 1 << 32), "nonce_hi enters the hash");
let w = e.hash_warp_bound(&a, (1 << 32) | 37);
assert_eq!(w[5], e.hash_bound(&a, (1 << 32) | 37));
assert_eq!(w[0], e.hash_bound(&a, 1 << 32 | 32));
let init = block_init_words(&a, 1 << 32);
assert_eq!(e.hash_warp_init(&init, 32), w);
let t = e.hash_bound(&a, 7);
assert!(e.verify_block_bound(&a, 7, t));
assert!(!e.verify_block_bound(&a, 7, t - 1));
assert_eq!(e.pow_bound(&a, 7), pow256_from_lane(t));
}
/// The 8 bound vectors printed in README.md (seed igneum-genesis, day 2026-10-03, memory-hard, 2^28 words,
/// generator v2 since 4 October 2026).
#[test]
fn bound_vectors() {
let e = epoch();
let a = prehash_a();
let b = prehash_b();
let cases: [(&[u8; 32], u64, u64); 8] = [
(&a, 0, 0x746c567b090acf6a),
(&a, 1, 0x45a619f860880c73),
(&a, 31, 0x9aa495e43dedbfe6),
(&a, 4096, 0x2e6ffd7624d3cba2),
(&a, 1 << 32, 0x38a5cea1fb01431a),
(&b, 0, 0x2a79c5e4797bf6aa),
(&b, (1 << 32) | 5, 0xa243e0c61aa1b82e),
(&b, u64::MAX, 0x9c7bbfbd064fe1a4),
];
for (h, nonce, want) in cases {
assert_eq!(e.hash_bound(h, nonce), want, "H {} nonce {nonce}", hex(h));
}
}
#[test]
fn closed_form_bound_also_works() {
let e = Epoch::new("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 28);
assert_ne!(e.hash_bound(&prehash_a(), 0), e.hash(0));
}
}

View file

@ -0,0 +1,152 @@
//! BLAKE2b (RFC 7693), the chain's own hash family (spec 01 section 0.6), written out here so the crate keeps its
//! rule of no dependency outside the standard library. Used by class v5's state leaves (`crate::state`):
//! `blake2b_512` for a leaf digest, `blake2b_256` for the sample order. Unkeyed, no salt, no personalisation.
//! Checked against the RFC's "abc" vector and the empty-input vector in the tests.
const IV: [u64; 8] = [
0x6a09e667f3bcc908,
0xbb67ae8584caa73b,
0x3c6ef372fe94f82b,
0xa54ff53a5f1d36f1,
0x510e527fade682d1,
0x9b05688c2b3e6c1f,
0x1f83d9abfb41bd6b,
0x5be0cd19137e2179,
];
const SIGMA: [[usize; 16]; 12] = [
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3],
[11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4],
[7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8],
[9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13],
[2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9],
[12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11],
[13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10],
[6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5],
[10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3],
];
#[inline(always)]
fn g(v: &mut [u64; 16], a: usize, b: usize, c: usize, d: usize, x: u64, y: u64) {
v[a] = v[a].wrapping_add(v[b]).wrapping_add(x);
v[d] = (v[d] ^ v[a]).rotate_right(32);
v[c] = v[c].wrapping_add(v[d]);
v[b] = (v[b] ^ v[c]).rotate_right(24);
v[a] = v[a].wrapping_add(v[b]).wrapping_add(y);
v[d] = (v[d] ^ v[a]).rotate_right(16);
v[c] = v[c].wrapping_add(v[d]);
v[b] = (v[b] ^ v[c]).rotate_right(63);
}
fn compress(h: &mut [u64; 8], block: &[u8; 128], t: u128, last: bool) {
let mut m = [0u64; 16];
for (i, w) in m.iter_mut().enumerate() {
*w = u64::from_le_bytes(block[i * 8..i * 8 + 8].try_into().unwrap());
}
let mut v = [0u64; 16];
v[..8].copy_from_slice(h);
v[8..].copy_from_slice(&IV);
v[12] ^= t as u64;
v[13] ^= (t >> 64) as u64;
if last {
v[14] = !v[14];
}
for s in SIGMA.iter() {
g(&mut v, 0, 4, 8, 12, m[s[0]], m[s[1]]);
g(&mut v, 1, 5, 9, 13, m[s[2]], m[s[3]]);
g(&mut v, 2, 6, 10, 14, m[s[4]], m[s[5]]);
g(&mut v, 3, 7, 11, 15, m[s[6]], m[s[7]]);
g(&mut v, 0, 5, 10, 15, m[s[8]], m[s[9]]);
g(&mut v, 1, 6, 11, 12, m[s[10]], m[s[11]]);
g(&mut v, 2, 7, 8, 13, m[s[12]], m[s[13]]);
g(&mut v, 3, 4, 9, 14, m[s[14]], m[s[15]]);
}
for i in 0..8 {
h[i] ^= v[i] ^ v[i + 8];
}
}
/// Unkeyed BLAKE2b of `data` with an output of `out_len` bytes (1..=64), written into `out[..out_len]`.
pub fn blake2b(out: &mut [u8], out_len: usize, data: &[u8]) {
assert!((1..=64).contains(&out_len) && out.len() >= out_len);
let mut h = IV;
h[0] ^= 0x0101_0000 ^ out_len as u64;
let mut t: u128 = 0;
let n = data.len();
// every full block but the last; the last block (possibly empty) is compressed with the final flag
let full = if n == 0 { 0 } else { (n - 1) / 128 };
for i in 0..full {
let block: &[u8; 128] = data[i * 128..i * 128 + 128].try_into().unwrap();
t += 128;
compress(&mut h, block, t, false);
}
let mut last = [0u8; 128];
let rest = &data[full * 128..];
last[..rest.len()].copy_from_slice(rest);
t += rest.len() as u128;
compress(&mut h, &last, t, true);
let mut bytes = [0u8; 64];
for (i, w) in h.iter().enumerate() {
bytes[i * 8..i * 8 + 8].copy_from_slice(&w.to_le_bytes());
}
out[..out_len].copy_from_slice(&bytes[..out_len]);
}
/// BLAKE2b-512 of the concatenation of `parts`.
pub fn blake2b_512(parts: &[&[u8]]) -> [u8; 64] {
let mut data = Vec::with_capacity(parts.iter().map(|p| p.len()).sum());
for p in parts {
data.extend_from_slice(p);
}
let mut out = [0u8; 64];
blake2b(&mut out, 64, &data);
out
}
/// BLAKE2b-256 of the concatenation of `parts`.
pub fn blake2b_256(parts: &[&[u8]]) -> [u8; 32] {
let mut data = Vec::with_capacity(parts.iter().map(|p| p.len()).sum());
for p in parts {
data.extend_from_slice(p);
}
let mut out = [0u8; 32];
blake2b(&mut out, 32, &data);
out
}
#[cfg(test)]
mod tests {
use super::*;
fn hex(b: &[u8]) -> String {
b.iter().map(|x| format!("{x:02x}")).collect()
}
/// RFC 7693 appendix A ("abc"), the empty input, and a two-block input against the reference implementation's
/// known values (the three-block "The quick brown fox" vector of the BLAKE2 test suite).
#[test]
fn rfc_7693_vectors() {
assert_eq!(
hex(&blake2b_512(&[b"abc"])),
"ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923"
);
assert_eq!(
hex(&blake2b_512(&[b""])),
"786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"
);
assert_eq!(hex(&blake2b_256(&[b"abc"])), "bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319");
assert_eq!(hex(&blake2b_256(&[b""])), "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8");
// a 128-byte input is exactly one full block compressed as the last; 129 bytes takes two
let one = [0x61u8; 128];
let two = [0x61u8; 129];
assert_ne!(blake2b_512(&[&one]), blake2b_512(&[&two]));
assert_eq!(blake2b_512(&[&one[..64], &one[64..]]), blake2b_512(&[&one]), "parts concatenate");
assert_eq!(
hex(&blake2b_512(&[b"The quick brown fox jumps over the lazy dog"])),
"a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918"
);
}
}

View file

@ -0,0 +1,978 @@
//! The per-day item-derivation program (Counter ASIC 3.0 item 2, `docs/plans/counter-asic-3-derivation.md`):
//! RandomX's SuperscalarHash idea (`vendor/RandomX/src/superscalar.cpp`, read 6 October 2026 at commit 7607fb2)
//! rebuilt for a 16-word item on a GPU. In place of the fixed-shape mixer `M_r` of spec 01 section 1.8.4, each of
//! the nine mixer slots of an item (one before each of the 8 dependent cache reads, one after the last) runs a
//! straight-line program of [`DERIVE_LEN`] instructions drawn once a day from the day key stream, from a fixed
//! set of twelve two-register forms. The 8 dependent cache reads per item are untouched.
//!
//! Rules of the draw (the dependency chain of SuperscalarHash, made strict):
//! * every instruction reads the chain register `c`, the register the previous instruction wrote (`s[0]`, the
//! address word, at the start of each round program), and writes a register `d != c`, which becomes the chain;
//! so no two instructions of a program can run in parallel, and no two consecutive instructions write one
//! register (the "ror r,C1; ror r,C2" and "xor r,r2; xor r,r2" merges of SuperscalarHash's `selectDestination`
//! cannot arise);
//! * every form is a bijection on the 16-word state (the old `d` enters through `+=`, `-=`, `^=`, an odd multiply,
//! or a rotation of itself), so a program loses no entropy, the property `M_r` has;
//! * the forms are integer only, modulo 2^32, with rotations by 1..31: bit-exact on Metal, CUDA and OpenCL by the
//! same argument as the lottery hash's families (spec 01 section 1.14); no division, no float, no branch;
//! * four draws per instruction in a fixed order, so the stream position of every draw is fixed by the index.
//!
//! The acceptance test ([`DeriveProgram::check`]) rejects a degenerate draw and the next attempt is drawn from the
//! continuation of the stream, the rule the program generator uses (spec 01 section 1.4.6).
use crate::memhard::ITEM_ROUNDS;
use crate::seed::SplitMix64;
/// Registers of the item state (the item is 16 words).
pub const DERIVE_REGS: usize = 16;
/// Round programs per item: one before each cache read and one after the last (`ITEM_ROUNDS + 1`).
pub const DERIVE_PROGRAMS: usize = ITEM_ROUNDS + 1;
/// Instructions per round program for the x8-equivalent operation count (the candidate, class "dr736"): 9 x 736
/// = 6,624 instructions per item at a mean of 1.62 GPU operations (1.52 chip operations) each, about 10,730 GPU
/// operations, 10,070 chip operations and 1,460 multiplies per item. The x8 mixer, counted from the code
/// (`memhard::mixer`, 16 x (xor, add, mul) + 8 quarter rounds x 12 = 144 operations as written, 128 with the
/// `RC + rk` adds hoisted as constants, 16 multiplies; `chip-model-v3.md` section 1 prices 130 from the spec text):
/// 72 applications = 10,368 as written, 9,216 hoisted, 1,152 multiplies. The floors below are those three.
pub const DERIVE_LEN_X8: u32 = 736;
/// Draws per instruction: the op roll, the destination roll, the second-source roll and the immediate.
pub const DRAWS_PER_INSTR: u64 = 4;
/// The floor of chip operations per item (the x8 mixer with its constants hoisted: 72 x 128).
pub const OPS_FLOOR_X8: u64 = 9_216;
/// The floor of GPU operations per item (the x8 mixer as written: 72 x 144).
pub const GPU_OPS_FLOOR_X8: u64 = 10_368;
/// The floor of multiplies per item (the x8 mixer's 72 x 16).
pub const MULS_FLOOR_X8: u64 = 1_152;
/// Distinct rotation amounts an item's programs must use, at least.
pub const DISTINCT_ROTS_FLOOR: usize = 8;
/// Attempts before the generator gives up (never reached: see [`DeriveProgram::draw`]).
pub const MAX_ATTEMPTS: u32 = 64;
/// The twelve forms. `c` is the chain register (the previous destination), `d` the destination (`d != c`), `b` a
/// third register (`b != d`, `b != c`), `k` a rotation in 1..31, `i` a 32-bit constant (odd for `MulC`).
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum DOp {
/// `d += c`
Add = 0,
/// `d -= c`
Sub = 1,
/// `d ^= c`
Xor = 2,
/// `d *= (c OR 1)`: the multiply-lo form, odd so it is a bijection on `d`
Mul = 3,
/// `d = rotl(d, k) + c`
Rot = 4,
/// `d = rotl(d ^ c, k)`
XRot = 5,
/// `d += c + i`
AddC = 6,
/// `d ^= c ^ i`
XorC = 7,
/// `d = (d ^ c) * i`, `i` odd: the per-word form of `M_r` with the chain in place of the round constant
MulC = 8,
/// `d = d * i + c`, `i` odd
MulC2 = 9,
/// `d ^= (c AND b)`
AndX = 10,
/// `d += (c OR b)`
OrX = 11,
}
/// The op weights in percent, in draw order (sum 100). Fixed at genesis; only the order, the registers and the
/// constants are drawn.
pub const DOP_WEIGHTS: [(DOp, u64); 12] = [
(DOp::Add, 14),
(DOp::Sub, 10),
(DOp::Xor, 14),
(DOp::Mul, 10),
(DOp::Rot, 10),
(DOp::XRot, 10),
(DOp::AddC, 6),
(DOp::XorC, 6),
(DOp::MulC, 8),
(DOp::MulC2, 4),
(DOp::AndX, 4),
(DOp::OrX, 4),
];
impl DOp {
pub fn from_u8(v: u8) -> Option<DOp> {
DOP_WEIGHTS.iter().map(|(o, _)| *o).find(|o| *o as u8 == v)
}
pub fn name(self) -> &'static str {
match self {
DOp::Add => "add",
DOp::Sub => "sub",
DOp::Xor => "xor",
DOp::Mul => "mul",
DOp::Rot => "rot",
DOp::XRot => "xrot",
DOp::AddC => "addc",
DOp::XorC => "xorc",
DOp::MulC => "mulc",
DOp::MulC2 => "mulc2",
DOp::AndX => "andx",
DOp::OrX => "orx",
}
}
/// Integer operations as a GPU executes the form (every `|`, `&`, `+`, `^`, `*`, rotate counts one).
pub fn gpu_ops(self) -> u64 {
match self {
DOp::Add | DOp::Sub | DOp::Xor => 1,
_ => 2,
}
}
/// Integer operations as the chip model counts them (`c OR 1` is a wire on a chip, so `Mul` is one multiply;
/// a constant folded into a chain value is still an add or an xor, so every other two-op form stays two).
pub fn chip_ops(self) -> u64 {
match self {
DOp::Add | DOp::Sub | DOp::Xor | DOp::Mul => 1,
_ => 2,
}
}
pub fn is_mul(self) -> bool {
matches!(self, DOp::Mul | DOp::MulC | DOp::MulC2)
}
pub fn has_rot(self) -> bool {
matches!(self, DOp::Rot | DOp::XRot)
}
pub fn has_third(self) -> bool {
matches!(self, DOp::AndX | DOp::OrX)
}
pub fn has_imm(self) -> bool {
matches!(self, DOp::AddC | DOp::XorC | DOp::MulC | DOp::MulC2)
}
/// The op of a roll in 0..99.
pub fn for_roll(roll: u64) -> DOp {
let mut acc = 0u64;
for (op, w) in DOP_WEIGHTS {
acc += w;
if roll < acc {
return op;
}
}
DOp::OrX
}
}
/// One instruction. `src` is the chain register (carried so the interpreter and the emitter need no state).
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct DInstr {
pub op: DOp,
pub dst: u8,
pub src: u8,
/// The third register of `AndX` and `OrX`; 0 on every other form (drawn and unused).
pub src2: u8,
/// The rotation 1..31 of `Rot` and `XRot`, else 0.
pub rot: u8,
/// The constant of `AddC`, `XorC` (any), `MulC` and `MulC2` (odd); 0 on every other form.
pub imm: u32,
}
/// The nine round programs of an item for one day, with the attempt that passed the acceptance test.
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct DeriveProgram {
pub len: u32,
pub attempt: u32,
pub rounds: Vec<Vec<DInstr>>,
}
/// Why a candidate was rejected.
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum DeriveReject {
/// A register no instruction of round program `round` writes.
RegisterNeverWritten { round: usize, reg: u8 },
/// Fewer than [`DISTINCT_ROTS_FLOOR`] distinct rotation amounts over the item's programs.
RotationsDegenerate { distinct: usize },
/// Chip operations per item under [`OPS_FLOOR_X8`] scaled to the length.
OpsUnderFloor { ops: u64, floor: u64 },
/// GPU operations per item under [`GPU_OPS_FLOOR_X8`] scaled to the length.
GpuOpsUnderFloor { ops: u64, floor: u64 },
/// Multiplies per item under [`MULS_FLOOR_X8`] scaled to the length.
MulsUnderFloor { muls: u64, floor: u64 },
}
impl std::fmt::Display for DeriveReject {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
DeriveReject::RegisterNeverWritten { round, reg } => write!(f, "register {reg} never written in round program {round}"),
DeriveReject::RotationsDegenerate { distinct } => write!(f, "only {distinct} distinct rotation amounts"),
DeriveReject::OpsUnderFloor { ops, floor } => write!(f, "{ops} chip operations per item, floor {floor}"),
DeriveReject::GpuOpsUnderFloor { ops, floor } => write!(f, "{ops} GPU operations per item, floor {floor}"),
DeriveReject::MulsUnderFloor { muls, floor } => write!(f, "{muls} multiplies per item, floor {floor}"),
}
}
}
impl DeriveProgram {
/// Draw one candidate of `len` instructions per round program from `rng` (four draws per instruction).
pub fn draw_candidate(rng: &mut SplitMix64, len: u32, attempt: u32) -> DeriveProgram {
let mut rounds = Vec::with_capacity(DERIVE_PROGRAMS);
for _ in 0..DERIVE_PROGRAMS {
let mut prog = Vec::with_capacity(len as usize);
let mut chain = 0u8;
for _ in 0..len {
let op = DOp::for_roll(rng.below(100));
// the destination: the 15 registers other than the chain, in ascending order
let d_roll = rng.below((DERIVE_REGS - 1) as u64) as u8;
let dst = if d_roll >= chain { d_roll + 1 } else { d_roll };
// the third register: the 14 registers other than dst and the chain, in ascending order
let b_roll = rng.below((DERIVE_REGS - 2) as u64) as u8;
let (lo, hi) = if dst < chain { (dst, chain) } else { (chain, dst) };
let mut b = b_roll;
if b >= lo {
b += 1;
}
if b >= hi {
b += 1;
}
let x = rng.next() as u32;
let mut ins = DInstr { op, dst, src: chain, src2: 0, rot: 0, imm: 0 };
if op.has_third() {
ins.src2 = b;
}
if op.has_rot() {
ins.rot = 1 + (x % 31) as u8;
}
if op.has_imm() {
ins.imm = if matches!(op, DOp::MulC | DOp::MulC2) { x | 1 } else { x };
}
prog.push(ins);
chain = dst;
}
rounds.push(prog);
}
DeriveProgram { len, attempt, rounds }
}
/// Draw the program of a day: candidates from `rng` in turn until one passes [`DeriveProgram::check`].
/// Panics after [`MAX_ATTEMPTS`] (the floors sit more than 7 standard deviations under the expected counts, so
/// a rejection is a rare event and 64 in a row is not one that happens).
pub fn draw(rng: &mut SplitMix64, len: u32) -> DeriveProgram {
for attempt in 0..MAX_ATTEMPTS {
let p = Self::draw_candidate(rng, len, attempt);
if p.check().is_ok() {
return p;
}
}
panic!("derivation program: {MAX_ATTEMPTS} candidates rejected in a row");
}
/// The floors for this length (chip operations, GPU operations, multiplies): the x8 floors scaled by
/// `len / DERIVE_LEN_X8`, so a shorter class, measured as a fallback, has its own proportional floors.
pub fn floors(len: u32) -> (u64, u64, u64) {
let scale = |f: u64| f * len as u64 / DERIVE_LEN_X8 as u64;
(scale(OPS_FLOOR_X8), scale(GPU_OPS_FLOOR_X8), scale(MULS_FLOOR_X8))
}
/// The acceptance test: every register written in every round program; at least [`DISTINCT_ROTS_FLOOR`]
/// distinct rotation amounts; chip operations, GPU operations and multiplies per item at or above the floors
/// (the x8 mixer's counts from the code). The structural
/// rules (`dst != src`, the third register distinct, rotations in 1..31, odd multiplier constants) hold by
/// construction and are asserted.
pub fn check(&self) -> Result<(), DeriveReject> {
let mut rots = [false; 32];
for (r, prog) in self.rounds.iter().enumerate() {
let mut written = [false; DERIVE_REGS];
let mut chain = 0u8;
for ins in prog {
assert!(ins.src == chain && ins.dst != ins.src && (ins.dst as usize) < DERIVE_REGS, "chain rule");
if ins.op.has_third() {
assert!(ins.src2 != ins.dst && ins.src2 != ins.src && (ins.src2 as usize) < DERIVE_REGS, "third register");
}
if ins.op.has_rot() {
assert!((1..=31).contains(&ins.rot), "rotation");
rots[ins.rot as usize] = true;
}
if matches!(ins.op, DOp::MulC | DOp::MulC2) {
assert!(ins.imm & 1 == 1, "odd multiplier");
}
written[ins.dst as usize] = true;
chain = ins.dst;
}
if let Some(reg) = written.iter().position(|w| !w) {
return Err(DeriveReject::RegisterNeverWritten { round: r, reg: reg as u8 });
}
}
let distinct = rots.iter().filter(|r| **r).count();
if distinct < DISTINCT_ROTS_FLOOR {
return Err(DeriveReject::RotationsDegenerate { distinct });
}
let (ops_floor, gpu_floor, muls_floor) = Self::floors(self.len);
let ops = self.chip_ops();
if ops < ops_floor {
return Err(DeriveReject::OpsUnderFloor { ops, floor: ops_floor });
}
let gpu = self.gpu_ops();
if gpu < gpu_floor {
return Err(DeriveReject::GpuOpsUnderFloor { ops: gpu, floor: gpu_floor });
}
let muls = self.muls();
if muls < muls_floor {
return Err(DeriveReject::MulsUnderFloor { muls, floor: muls_floor });
}
Ok(())
}
pub fn instr_count(&self) -> u64 {
self.rounds.iter().map(|p| p.len() as u64).sum()
}
pub fn gpu_ops(&self) -> u64 {
self.rounds.iter().flatten().map(|i| i.op.gpu_ops()).sum()
}
pub fn chip_ops(&self) -> u64 {
self.rounds.iter().flatten().map(|i| i.op.chip_ops()).sum()
}
pub fn muls(&self) -> u64 {
self.rounds.iter().flatten().filter(|i| i.op.is_mul()).count() as u64
}
/// Count per op, in [`DOP_WEIGHTS`] order.
pub fn op_counts(&self) -> [u64; 12] {
let mut c = [0u64; 12];
for i in self.rounds.iter().flatten() {
c[i.op as usize] += 1;
}
c
}
/// "add=887 sub=..." in weight order.
pub fn op_mix(&self) -> String {
let c = self.op_counts();
DOP_WEIGHTS.iter().map(|(o, _)| format!("{}={}", o.name(), c[*o as usize])).collect::<Vec<_>>().join(" ")
}
/// FNV-1a 64 over the instruction stream (op, dst, src, src2, rot, imm as bytes): the program's fingerprint
/// for packs and logs.
pub fn fingerprint(&self) -> u64 {
let mut b = Vec::with_capacity(self.instr_count() as usize * 9);
for i in self.rounds.iter().flatten() {
b.push(i.op as u8);
b.push(i.dst);
b.push(i.src);
b.push(i.src2);
b.push(i.rot);
b.extend_from_slice(&i.imm.to_le_bytes());
}
crate::seed::fnv1a64(&b)
}
}
/// Lanes of the SoA interpreter: the verifier derives up to 32 distinct items per load (one per lane of the
/// unit), so each instruction runs across 32 item states at once and the dispatch is paid once per 32 items.
pub const SOA_LANES: usize = 32;
/// The item states of a batch, word-major: `st[reg][lane]`.
pub type SoaState = [[u32; SOA_LANES]; DERIVE_REGS];
#[inline(always)]
fn rotl(x: u32, n: u32) -> u32 {
x.rotate_left(n)
}
/// The twelve forms over a batch, one function each, every one a straight loop over the lanes the compiler
/// vectorises. The destination row and the source rows are distinct by the chain rule (`dst != src`, and the third
/// register distinct from both: asserted by [`DeriveProgram::check`] and checked here in debug builds), so the
/// rows are addressed through raw pointers rather than copied out of the state.
mod forms {
use super::{rotl, DInstr, SoaState, SOA_LANES};
#[inline(always)]
pub fn add(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = d.wrapping_add(*c);
}
}
}
#[inline(always)]
pub fn sub(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = d.wrapping_sub(*c);
}
}
}
#[inline(always)]
pub fn xor(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d ^= *c;
}
}
}
#[inline(always)]
pub fn mul(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = d.wrapping_mul(*c | 1);
}
}
}
#[inline(always)]
pub fn rot(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
let r = ins.rot as u32;
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = rotl(*d, r).wrapping_add(*c);
}
}
}
#[inline(always)]
pub fn xrot(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
let r = ins.rot as u32;
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = rotl(*d ^ *c, r);
}
}
}
#[inline(always)]
pub fn addc(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
let i = ins.imm;
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = d.wrapping_add(c.wrapping_add(i));
}
}
}
#[inline(always)]
pub fn xorc(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
let i = ins.imm;
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d ^= *c ^ i;
}
}
}
#[inline(always)]
pub fn mulc(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
let i = ins.imm;
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = (*d ^ *c).wrapping_mul(i);
}
}
}
#[inline(always)]
pub fn mulc2(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src);
let i = ins.imm;
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
*d = d.wrapping_mul(i).wrapping_add(*c);
}
}
}
#[inline(always)]
pub fn andx(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src && ins.src2 != ins.dst && ins.src2 != ins.src);
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
let bp = st.as_ptr().add(ins.src2 as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
let b = &*bp.add(k);
*d ^= *c & *b;
}
}
}
#[inline(always)]
pub fn orx(ins: &DInstr, st: &mut SoaState) {
debug_assert!(ins.dst != ins.src && ins.src2 != ins.dst && ins.src2 != ins.src);
// SAFETY: dst, src (and src2) are distinct registers below DERIVE_REGS, so the rows do not alias and the
// pointers stay inside `st`.
unsafe {
let dp = st.as_mut_ptr().add(ins.dst as usize) as *mut u32;
let cp = st.as_ptr().add(ins.src as usize) as *const u32;
let bp = st.as_ptr().add(ins.src2 as usize) as *const u32;
for k in 0..SOA_LANES {
let d = &mut *dp.add(k);
let c = &*cp.add(k);
let b = &*bp.add(k);
*d = d.wrapping_add(*c | *b);
}
}
}
}
/// One instruction over the batch (the single dispatch; [`run_round`] dispatches on pairs).
#[inline(always)]
pub fn run_instr(ins: &DInstr, st: &mut SoaState) {
match ins.op {
DOp::Add => forms::add(ins, st),
DOp::Sub => forms::sub(ins, st),
DOp::Xor => forms::xor(ins, st),
DOp::Mul => forms::mul(ins, st),
DOp::Rot => forms::rot(ins, st),
DOp::XRot => forms::xrot(ins, st),
DOp::AddC => forms::addc(ins, st),
DOp::XorC => forms::xorc(ins, st),
DOp::MulC => forms::mulc(ins, st),
DOp::MulC2 => forms::mulc2(ins, st),
DOp::AndX => forms::andx(ins, st),
DOp::OrX => forms::orx(ins, st),
}
}
/// Run one round program over the batch. The dispatch is on PAIRS of instructions (144 arms, one indirect branch
/// per two instructions): the op sequence of a drawn program is random, so the branch predictor misses most
/// dispatches, and the miss (about 3.7 ns of the 7.2 ns an instruction cost per batch on one M5 Max core, measured
/// with `examples/derive_perf.rs` on 6 October 2026, a functional run) is paid once per pair instead of once per
/// instruction. The result is bit for bit that of [`run_instr`] in sequence.
#[inline(never)]
pub fn run_round(prog: &[DInstr], st: &mut SoaState) {
let mut it = prog.chunks_exact(2);
for pair in &mut it {
let (a, b) = (&pair[0], &pair[1]);
match (a.op as u8) * 12 + b.op as u8 {
0 => { forms::add(a, st); forms::add(b, st); }
1 => { forms::add(a, st); forms::sub(b, st); }
2 => { forms::add(a, st); forms::xor(b, st); }
3 => { forms::add(a, st); forms::mul(b, st); }
4 => { forms::add(a, st); forms::rot(b, st); }
5 => { forms::add(a, st); forms::xrot(b, st); }
6 => { forms::add(a, st); forms::addc(b, st); }
7 => { forms::add(a, st); forms::xorc(b, st); }
8 => { forms::add(a, st); forms::mulc(b, st); }
9 => { forms::add(a, st); forms::mulc2(b, st); }
10 => { forms::add(a, st); forms::andx(b, st); }
11 => { forms::add(a, st); forms::orx(b, st); }
12 => { forms::sub(a, st); forms::add(b, st); }
13 => { forms::sub(a, st); forms::sub(b, st); }
14 => { forms::sub(a, st); forms::xor(b, st); }
15 => { forms::sub(a, st); forms::mul(b, st); }
16 => { forms::sub(a, st); forms::rot(b, st); }
17 => { forms::sub(a, st); forms::xrot(b, st); }
18 => { forms::sub(a, st); forms::addc(b, st); }
19 => { forms::sub(a, st); forms::xorc(b, st); }
20 => { forms::sub(a, st); forms::mulc(b, st); }
21 => { forms::sub(a, st); forms::mulc2(b, st); }
22 => { forms::sub(a, st); forms::andx(b, st); }
23 => { forms::sub(a, st); forms::orx(b, st); }
24 => { forms::xor(a, st); forms::add(b, st); }
25 => { forms::xor(a, st); forms::sub(b, st); }
26 => { forms::xor(a, st); forms::xor(b, st); }
27 => { forms::xor(a, st); forms::mul(b, st); }
28 => { forms::xor(a, st); forms::rot(b, st); }
29 => { forms::xor(a, st); forms::xrot(b, st); }
30 => { forms::xor(a, st); forms::addc(b, st); }
31 => { forms::xor(a, st); forms::xorc(b, st); }
32 => { forms::xor(a, st); forms::mulc(b, st); }
33 => { forms::xor(a, st); forms::mulc2(b, st); }
34 => { forms::xor(a, st); forms::andx(b, st); }
35 => { forms::xor(a, st); forms::orx(b, st); }
36 => { forms::mul(a, st); forms::add(b, st); }
37 => { forms::mul(a, st); forms::sub(b, st); }
38 => { forms::mul(a, st); forms::xor(b, st); }
39 => { forms::mul(a, st); forms::mul(b, st); }
40 => { forms::mul(a, st); forms::rot(b, st); }
41 => { forms::mul(a, st); forms::xrot(b, st); }
42 => { forms::mul(a, st); forms::addc(b, st); }
43 => { forms::mul(a, st); forms::xorc(b, st); }
44 => { forms::mul(a, st); forms::mulc(b, st); }
45 => { forms::mul(a, st); forms::mulc2(b, st); }
46 => { forms::mul(a, st); forms::andx(b, st); }
47 => { forms::mul(a, st); forms::orx(b, st); }
48 => { forms::rot(a, st); forms::add(b, st); }
49 => { forms::rot(a, st); forms::sub(b, st); }
50 => { forms::rot(a, st); forms::xor(b, st); }
51 => { forms::rot(a, st); forms::mul(b, st); }
52 => { forms::rot(a, st); forms::rot(b, st); }
53 => { forms::rot(a, st); forms::xrot(b, st); }
54 => { forms::rot(a, st); forms::addc(b, st); }
55 => { forms::rot(a, st); forms::xorc(b, st); }
56 => { forms::rot(a, st); forms::mulc(b, st); }
57 => { forms::rot(a, st); forms::mulc2(b, st); }
58 => { forms::rot(a, st); forms::andx(b, st); }
59 => { forms::rot(a, st); forms::orx(b, st); }
60 => { forms::xrot(a, st); forms::add(b, st); }
61 => { forms::xrot(a, st); forms::sub(b, st); }
62 => { forms::xrot(a, st); forms::xor(b, st); }
63 => { forms::xrot(a, st); forms::mul(b, st); }
64 => { forms::xrot(a, st); forms::rot(b, st); }
65 => { forms::xrot(a, st); forms::xrot(b, st); }
66 => { forms::xrot(a, st); forms::addc(b, st); }
67 => { forms::xrot(a, st); forms::xorc(b, st); }
68 => { forms::xrot(a, st); forms::mulc(b, st); }
69 => { forms::xrot(a, st); forms::mulc2(b, st); }
70 => { forms::xrot(a, st); forms::andx(b, st); }
71 => { forms::xrot(a, st); forms::orx(b, st); }
72 => { forms::addc(a, st); forms::add(b, st); }
73 => { forms::addc(a, st); forms::sub(b, st); }
74 => { forms::addc(a, st); forms::xor(b, st); }
75 => { forms::addc(a, st); forms::mul(b, st); }
76 => { forms::addc(a, st); forms::rot(b, st); }
77 => { forms::addc(a, st); forms::xrot(b, st); }
78 => { forms::addc(a, st); forms::addc(b, st); }
79 => { forms::addc(a, st); forms::xorc(b, st); }
80 => { forms::addc(a, st); forms::mulc(b, st); }
81 => { forms::addc(a, st); forms::mulc2(b, st); }
82 => { forms::addc(a, st); forms::andx(b, st); }
83 => { forms::addc(a, st); forms::orx(b, st); }
84 => { forms::xorc(a, st); forms::add(b, st); }
85 => { forms::xorc(a, st); forms::sub(b, st); }
86 => { forms::xorc(a, st); forms::xor(b, st); }
87 => { forms::xorc(a, st); forms::mul(b, st); }
88 => { forms::xorc(a, st); forms::rot(b, st); }
89 => { forms::xorc(a, st); forms::xrot(b, st); }
90 => { forms::xorc(a, st); forms::addc(b, st); }
91 => { forms::xorc(a, st); forms::xorc(b, st); }
92 => { forms::xorc(a, st); forms::mulc(b, st); }
93 => { forms::xorc(a, st); forms::mulc2(b, st); }
94 => { forms::xorc(a, st); forms::andx(b, st); }
95 => { forms::xorc(a, st); forms::orx(b, st); }
96 => { forms::mulc(a, st); forms::add(b, st); }
97 => { forms::mulc(a, st); forms::sub(b, st); }
98 => { forms::mulc(a, st); forms::xor(b, st); }
99 => { forms::mulc(a, st); forms::mul(b, st); }
100 => { forms::mulc(a, st); forms::rot(b, st); }
101 => { forms::mulc(a, st); forms::xrot(b, st); }
102 => { forms::mulc(a, st); forms::addc(b, st); }
103 => { forms::mulc(a, st); forms::xorc(b, st); }
104 => { forms::mulc(a, st); forms::mulc(b, st); }
105 => { forms::mulc(a, st); forms::mulc2(b, st); }
106 => { forms::mulc(a, st); forms::andx(b, st); }
107 => { forms::mulc(a, st); forms::orx(b, st); }
108 => { forms::mulc2(a, st); forms::add(b, st); }
109 => { forms::mulc2(a, st); forms::sub(b, st); }
110 => { forms::mulc2(a, st); forms::xor(b, st); }
111 => { forms::mulc2(a, st); forms::mul(b, st); }
112 => { forms::mulc2(a, st); forms::rot(b, st); }
113 => { forms::mulc2(a, st); forms::xrot(b, st); }
114 => { forms::mulc2(a, st); forms::addc(b, st); }
115 => { forms::mulc2(a, st); forms::xorc(b, st); }
116 => { forms::mulc2(a, st); forms::mulc(b, st); }
117 => { forms::mulc2(a, st); forms::mulc2(b, st); }
118 => { forms::mulc2(a, st); forms::andx(b, st); }
119 => { forms::mulc2(a, st); forms::orx(b, st); }
120 => { forms::andx(a, st); forms::add(b, st); }
121 => { forms::andx(a, st); forms::sub(b, st); }
122 => { forms::andx(a, st); forms::xor(b, st); }
123 => { forms::andx(a, st); forms::mul(b, st); }
124 => { forms::andx(a, st); forms::rot(b, st); }
125 => { forms::andx(a, st); forms::xrot(b, st); }
126 => { forms::andx(a, st); forms::addc(b, st); }
127 => { forms::andx(a, st); forms::xorc(b, st); }
128 => { forms::andx(a, st); forms::mulc(b, st); }
129 => { forms::andx(a, st); forms::mulc2(b, st); }
130 => { forms::andx(a, st); forms::andx(b, st); }
131 => { forms::andx(a, st); forms::orx(b, st); }
132 => { forms::orx(a, st); forms::add(b, st); }
133 => { forms::orx(a, st); forms::sub(b, st); }
134 => { forms::orx(a, st); forms::xor(b, st); }
135 => { forms::orx(a, st); forms::mul(b, st); }
136 => { forms::orx(a, st); forms::rot(b, st); }
137 => { forms::orx(a, st); forms::xrot(b, st); }
138 => { forms::orx(a, st); forms::addc(b, st); }
139 => { forms::orx(a, st); forms::xorc(b, st); }
140 => { forms::orx(a, st); forms::mulc(b, st); }
141 => { forms::orx(a, st); forms::mulc2(b, st); }
142 => { forms::orx(a, st); forms::andx(b, st); }
143 => { forms::orx(a, st); forms::orx(b, st); }
_ => unreachable!(),
}
}
for ins in it.remainder() {
run_instr(ins, st);
}
}
/// The scalar reference: one instruction on one 16-word state, the text the kernels carry (`emit.rs`,
/// `derive_instr_text`) restated in Rust. The tests pin the SoA interpreter against it.
pub fn run_round_scalar(prog: &[DInstr], s: &mut [u32; DERIVE_REGS]) {
for ins in prog {
let d = ins.dst as usize;
let c = s[ins.src as usize];
match ins.op {
DOp::Add => s[d] = s[d].wrapping_add(c),
DOp::Sub => s[d] = s[d].wrapping_sub(c),
DOp::Xor => s[d] ^= c,
DOp::Mul => s[d] = s[d].wrapping_mul(c | 1),
DOp::Rot => s[d] = rotl(s[d], ins.rot as u32).wrapping_add(c),
DOp::XRot => s[d] = rotl(s[d] ^ c, ins.rot as u32),
DOp::AddC => s[d] = s[d].wrapping_add(c.wrapping_add(ins.imm)),
DOp::XorC => s[d] ^= c ^ ins.imm,
DOp::MulC => s[d] = (s[d] ^ c).wrapping_mul(ins.imm),
DOp::MulC2 => s[d] = s[d].wrapping_mul(ins.imm).wrapping_add(c),
DOp::AndX => s[d] ^= c & s[ins.src2 as usize],
DOp::OrX => s[d] = s[d].wrapping_add(c | s[ins.src2 as usize]),
}
}
}
/// The source text of one instruction in the C-family dialects (the same text in Metal, CUDA C and OpenCL C:
/// `s` is the 16-word state, `mh_rotl` the rotate of the memhard core).
pub fn instr_text(ins: &DInstr) -> String {
let (d, c, b) = (ins.dst, ins.src, ins.src2);
match ins.op {
DOp::Add => format!("s[{d}] += s[{c}];"),
DOp::Sub => format!("s[{d}] -= s[{c}];"),
DOp::Xor => format!("s[{d}] ^= s[{c}];"),
DOp::Mul => format!("s[{d}] *= (s[{c}] | 1u);"),
DOp::Rot => format!("s[{d}] = mh_rotl(s[{d}], {}u) + s[{c}];", ins.rot),
DOp::XRot => format!("s[{d}] = mh_rotl(s[{d}] ^ s[{c}], {}u);", ins.rot),
DOp::AddC => format!("s[{d}] += s[{c}] + {:#010x}u;", ins.imm),
DOp::XorC => format!("s[{d}] ^= s[{c}] ^ {:#010x}u;", ins.imm),
DOp::MulC => format!("s[{d}] = (s[{d}] ^ s[{c}]) * {:#010x}u;", ins.imm),
DOp::MulC2 => format!("s[{d}] = s[{d}] * {:#010x}u + s[{c}];", ins.imm),
DOp::AndX => format!("s[{d}] ^= (s[{c}] & s[{b}]);"),
DOp::OrX => format!("s[{d}] += (s[{c}] | s[{b}]);"),
}
}
/// One instruction as a line of program.json: `"add d=3 c=0"`, `"mulc d=5 c=3 imm=0x..."`.
pub fn instr_line(ins: &DInstr) -> String {
let mut s = format!("{} d={} c={}", ins.op.name(), ins.dst, ins.src);
if ins.op.has_third() {
s.push_str(&format!(" b={}", ins.src2));
}
if ins.op.has_rot() {
s.push_str(&format!(" k={}", ins.rot));
}
if ins.op.has_imm() {
s.push_str(&format!(" imm={:#010x}", ins.imm));
}
s
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn weights_sum_and_ops() {
assert_eq!(DOP_WEIGHTS.iter().map(|(_, w)| w).sum::<u64>(), 100);
for (i, (op, _)) in DOP_WEIGHTS.iter().enumerate() {
assert_eq!(*op as usize, i);
assert_eq!(DOp::from_u8(i as u8), Some(*op));
}
assert_eq!(DOp::for_roll(0), DOp::Add);
assert_eq!(DOp::for_roll(13), DOp::Add);
assert_eq!(DOp::for_roll(14), DOp::Sub);
assert_eq!(DOp::for_roll(99), DOp::OrX);
// the expected chip operations per instruction, 1.52 (1.62 on a GPU), put 736 x 9 over the x8 floors
let mean: f64 = DOP_WEIGHTS.iter().map(|(o, w)| o.chip_ops() as f64 * *w as f64 / 100.0).sum();
assert!((mean - 1.52).abs() < 1e-9, "{mean}");
let gpu_mean: f64 = DOP_WEIGHTS.iter().map(|(o, w)| o.gpu_ops() as f64 * *w as f64 / 100.0).sum();
assert!((gpu_mean - 1.62).abs() < 1e-9, "{gpu_mean}");
assert!(9.0 * DERIVE_LEN_X8 as f64 * mean > OPS_FLOOR_X8 as f64);
assert!(9.0 * DERIVE_LEN_X8 as f64 * gpu_mean > GPU_OPS_FLOOR_X8 as f64);
assert_eq!(DeriveProgram::floors(DERIVE_LEN_X8), (9_216, 10_368, 1_152));
assert_eq!(DeriveProgram::floors(368), (4_608, 5_184, 576));
let mul_share: f64 = DOP_WEIGHTS.iter().filter(|(o, _)| o.is_mul()).map(|(_, w)| *w as f64 / 100.0).sum();
assert!(9.0 * DERIVE_LEN_X8 as f64 * mul_share > MULS_FLOOR_X8 as f64);
}
#[test]
fn draw_is_structural_and_accepted() {
let mut rng = SplitMix64::new(0x1234_5678_9abc_def0);
let p = DeriveProgram::draw(&mut rng, DERIVE_LEN_X8);
assert_eq!(p.attempt, 0, "the first candidate of this seed passes");
assert_eq!(p.rounds.len(), DERIVE_PROGRAMS);
assert_eq!(p.instr_count(), 9 * DERIVE_LEN_X8 as u64);
assert!(p.check().is_ok());
assert!(p.chip_ops() >= OPS_FLOOR_X8 && p.gpu_ops() >= GPU_OPS_FLOOR_X8 && p.muls() >= MULS_FLOOR_X8);
assert!(p.gpu_ops() > p.chip_ops());
// every instruction consumes the newest result
for prog in &p.rounds {
let mut chain = 0u8;
for ins in prog {
assert_eq!(ins.src, chain);
assert_ne!(ins.dst, chain);
chain = ins.dst;
}
}
// four draws per instruction: the same program again from the same seed, and a different one one draw on
let mut rng2 = SplitMix64::new(0x1234_5678_9abc_def0);
assert_eq!(DeriveProgram::draw(&mut rng2, DERIVE_LEN_X8), p);
let mut rng3 = SplitMix64::new(0x1234_5678_9abc_def0);
rng3.next();
assert_ne!(DeriveProgram::draw(&mut rng3, DERIVE_LEN_X8), p);
}
#[test]
fn soa_matches_scalar_and_is_a_bijection() {
let mut rng = SplitMix64::new(7);
let p = DeriveProgram::draw(&mut rng, 64);
let mut st: SoaState = [[0u32; SOA_LANES]; DERIVE_REGS];
let mut scalars = [[0u32; DERIVE_REGS]; SOA_LANES];
let mut x = SplitMix64::new(99);
for k in 0..SOA_LANES {
for r in 0..DERIVE_REGS {
let v = x.next() as u32;
st[r][k] = v;
scalars[k][r] = v;
}
}
let before = scalars;
for prog in &p.rounds {
run_round(prog, &mut st);
for k in 0..SOA_LANES {
run_round_scalar(prog, &mut scalars[k]);
}
}
for k in 0..SOA_LANES {
for r in 0..DERIVE_REGS {
assert_eq!(st[r][k], scalars[k][r], "lane {k} reg {r}");
}
}
// distinct inputs stay distinct (a bijection on the state, spot-checked: 32 lanes, no collision)
for a in 0..SOA_LANES {
for b in a + 1..SOA_LANES {
assert_ne!(scalars[a], scalars[b]);
assert_ne!(before[a], before[b]);
}
}
}
#[test]
fn acceptance_rejects_degenerate_draws() {
let mut rng = SplitMix64::new(3);
let mut p = DeriveProgram::draw(&mut rng, 64);
// a register never written: make every write of round 2 go to the chain's neighbour
let mut q = p.clone();
for ins in q.rounds[2].iter_mut() {
ins.dst = if ins.src == 1 { 2 } else { 1 };
}
let mut chain = 0u8;
for ins in q.rounds[2].iter_mut() {
ins.src = chain;
ins.dst = if chain == 1 { 2 } else { 1 };
chain = ins.dst;
}
assert!(matches!(q.check(), Err(DeriveReject::RegisterNeverWritten { round: 2, .. })));
// all rotations equal
let mut q = p.clone();
for ins in q.rounds.iter_mut().flatten() {
if ins.op.has_rot() {
ins.rot = 5;
}
}
assert!(matches!(q.check(), Err(DeriveReject::RotationsDegenerate { distinct: 1 })));
// every op an add apart from the xor-rotates (so the rotations stay distinct): under the ops floor
for ins in p.rounds.iter_mut().flatten() {
if ins.op != DOp::XRot {
ins.op = DOp::Add;
ins.rot = 0;
ins.imm = 0;
ins.src2 = 0;
}
}
assert!(matches!(p.check(), Err(DeriveReject::OpsUnderFloor { .. })), "{:?}", p.check());
// no multiplies at all but the ops floor met: under the multiply floor
let mut q = DeriveProgram::draw(&mut SplitMix64::new(11), 64);
for ins in q.rounds.iter_mut().flatten() {
if ins.op.is_mul() {
ins.op = DOp::AddC;
}
}
assert!(matches!(q.check(), Err(DeriveReject::MulsUnderFloor { .. })), "{:?}", q.check());
}
#[test]
fn text_forms() {
let i = DInstr { op: DOp::MulC, dst: 5, src: 3, src2: 0, rot: 0, imm: 0x9e37_79b9 };
assert_eq!(instr_text(&i), "s[5] = (s[5] ^ s[3]) * 0x9e3779b9u;");
assert_eq!(instr_line(&i), "mulc d=5 c=3 imm=0x9e3779b9");
let i = DInstr { op: DOp::XRot, dst: 0, src: 15, src2: 0, rot: 17, imm: 0 };
assert_eq!(instr_text(&i), "s[0] = mh_rotl(s[0] ^ s[15], 17u);");
let i = DInstr { op: DOp::AndX, dst: 2, src: 9, src2: 14, rot: 0, imm: 0 };
assert_eq!(instr_text(&i), "s[2] ^= (s[9] & s[14]);");
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,43 @@
//! igneum-pow: the Igneum lottery hash, bit-exact with the Swift prototype in `proto-metal/main.swift`.
//!
//! The crate has five parts, each mirroring one section of the prototype:
//!
//! * [`seed`]: the 32-byte seed words from a string (FNV-1a 64, four salts) and the SplitMix64 stream.
//! * [`generator`]: the 64-instruction program drawn from a seed (version 2: 16 load slots, fresh sources).
//! * [`accept`]: the acceptance rule every candidate program must pass; a rejected candidate is replaced by the
//! next attempt of the same seed.
//! * [`memhard`]: the 256 MiB ChaCha12 cache and the 8-round dataset item derivation (`proto-metal/MEMHARD.md`).
//! * [`derive`]: the per-day item-derivation program of Counter ASIC 3.0 item 2 (a prototype behind a load class).
//! * [`verify`]: the 32-lane warp interpreter that computes the 64-bit hash on the CPU, deriving dataset
//! words on demand from the cache (or from the closed form, for the old packs).
//! * [`emit`]: the Metal, CUDA and OpenCL kernel text for a program, byte-identical to the Swift exporter.
//! * [`bind`]: the header binding (init words from the pre-PoW header hash and the nonce) and the 256-bit mapping.
//!
//! Nothing here depends on a crate outside the standard library. The integration points for the
//! rusty-kaspa fork (`docs/fork-map.md`) are [`verify::Epoch`], [`verify::Epoch::verify_block`] and
//! [`verify::Epoch::hash_warp`]; the node hands [`emit::Pack`] files to miners.
// The lane loops are written index style on purpose so they read like the kernels they mirror, and the
// SplitMix64 `next` keeps the Swift name.
#![allow(clippy::needless_range_loop, clippy::should_implement_trait, clippy::large_enum_variant)]
#![allow(clippy::manual_slice_size_calculation, clippy::too_many_arguments)]
pub mod accept;
pub mod bind;
pub mod blake2b;
pub mod derive;
pub mod emit;
pub mod generator;
pub mod memhard;
pub mod packcheck;
pub mod seed;
pub mod state;
pub mod verify;
pub use bind::{block_init_words, day_bytes, pow256_from_lane, target64_from_le256};
pub use accept::{check as accept_program, AcceptReport, Reject};
pub use generator::{generate, generate_from_seed_bytes, generate_from_seed_bytes_program_class, generate_from_seed_bytes_program_class_shadow, v4_class_at, v4_counted_ops, v4_rung_reps, v5_class_at, v5_rung_reps, Instr, LoadClass, Op, Program, ProgramClass, GENERATOR_VERSION, GENERATOR_VERSION_V3, GENERATOR_VERSION_V4, GENERATOR_VERSION_V5, V3_CLASS, V4_CLASS, V4_SHADOW_INSTRS, V4_SHADOW_REPS, V5_CLASS, PROGRAM_SUBVERSION_V4};
pub use memhard::{cache_log2_words, dataset_log2_words, days_since_genesis, growth_doublings, Cache, MemhardCpu, MixParams, Shape};
pub use seed::{fnv1a64, seed_words, SplitMix64};
pub use state::{StateLeaves, StateStream};
pub use verify::{hash_warp, interpret_warp_init, verify_block, DatasetMode, DatasetSource, Epoch};

View file

@ -0,0 +1,502 @@
//! igneum-pow CLI.
//!
//! igneum-pow bench --seed <s> [--day <d>] [--closed-form] [--dataset-log2 28] [--warps 20]
//! igneum-pow export --seed <s> --out <dir> [--day <d>] [--closed-form] [--dataset-log2 28] [--epoch-hex <64 hex> --day-hex <hex>]
//! igneum-pow hash --seed <s> --nonce <n> [--day <d>] [--closed-form] [--dataset-log2 28]
//! igneum-pow hash-bound --seed <s> --prehash <64 hex> --nonce <u64> [--day <d>] [--closed-form] [--dataset-log2 28]
//! [--epoch-hex <64 hex> --day-hex <hex>] byte seeds instead of strings (Epoch::from_seed_bytes)
//! igneum-pow accept --seed <s> [--epoch-hex <64 hex>] every candidate of the seed with its verdict (spec 01 section 1.4.6)
//! igneum-pow show --seed <s> [--epoch-hex <64 hex>] the accepted program, one instruction per line
//!
//! Read-width experiment (5 October 2026, docs/plans/read-width.md): `--class v2|w4|w16|w64|w64x4|p4,p16,p64[xN]`
//! on every command selects the load class (default v2, the lottery hash). Nothing in a v2 run changes.
//!
//! Era layout (5 October 2026, docs/plans/era-layout.md): `--era igneum-era-test/<n>` (a test era seed: the 32 bytes
//! of seed_words_from_bytes of the string, era index n) or `--era <n>:<64 hex>` (the chain's 32-byte era seed E_n)
//! turns the chosen class into its era class; `--era-widths 4` (default: the read-width decision of 5 October 2026
//! keeps v2's 4-byte load) is the allowed width set the era draws from; `4,16,64` lets the era draw the width.
use igneum_pow::generator::{EraParams, GENERATOR_VERSION_V3};
use igneum_pow::emit::export_pack;
use igneum_pow::generator::{LoadClass, ProgramClass};
use igneum_pow::memhard::{Cache, Shape};
use igneum_pow::seed::day_key;
use igneum_pow::verify::{DatasetMode, DatasetSource, Epoch, DEFAULT_DATASET_LOG2};
use std::time::Instant;
struct Args {
cmd: String,
seed: String,
day: String,
out: Option<String>,
closed_form: bool,
dataset_log2: u32,
warps: usize,
nonce: u64,
/// `hash-bound --count N`: N consecutive nonces from --nonce, one epoch build (gate G2, 5 October 2026).
count: u64,
prehash: String,
epoch_hex: Option<String>,
day_hex: Option<String>,
/// Class v5: the window's state stream file (`--state <file>`, the IGSD1 format of `igneum_pow::state`), whose
/// leaves every item of the dataset is keyed by.
state: Option<String>,
class: LoadClass,
/// Days since genesis for the cache growth rule of a class with `growth` (0: the genesis cache).
days: u64,
/// The program class (Counter ASIC 2.0 seam): v2 (default), v3 (V3_CLASS, generator 3) or v4 (V4_CLASS, generator 4).
program_class: Option<ProgramClass>,
/// The shadow pass count of a class v4 program at a rung of the latency ladder (`--shadow-reps`, 0 = the class's
/// own 27; `docs/design/latency-ladder.md`); read under `--program-class v4` only.
shadow_reps: u16,
/// The era seed bytes a class v3 chain program records (`--era-hex`).
era_hex: Option<String>,
/// Era layout: `--era igneum-era-test/<n>` or `--era <n>:<64 hex>` composes the era class over `--class` with
/// generator 3 and the era bytes recorded (the measurement packs: v2's mixer under the era layout).
era: Option<(u64, Vec<u8>, String)>,
era_widths: Vec<u8>,
}
/// `igneum-era-test/<n>` or `<n>:<64 hex>` -> (index, 32 era bytes, label).
fn parse_era(s: &str) -> Option<(u64, Vec<u8>, String)> {
if let Some(n) = s.strip_prefix("igneum-era-test/") {
let index: u64 = n.parse().ok()?;
return Some((index, EraParams::test_era_bytes(s).to_vec(), s.to_string()));
}
let (n, hex) = s.split_once(':')?;
let index: u64 = n.parse().ok()?;
let bytes = igneum_pow::bind::unhex(hex)?;
if bytes.len() != 32 {
return None;
}
Some((index, bytes, format!("igneum-era/{index}/{hex}")))
}
/// "4,16,64" (bytes) -> ascending words.
fn parse_widths(s: &str) -> Option<Vec<u8>> {
let mut v: Vec<u8> = s
.split(',')
.map(|x| match x.trim() {
"4" => Some(1u8),
"16" => Some(4),
"64" => Some(16),
_ => None,
})
.collect::<Option<Vec<_>>>()?;
v.sort_unstable();
v.dedup();
if v.is_empty() {
return None;
}
Some(v)
}
fn usage() -> ! {
eprintln!(
"igneum-pow <bench|export|hash> --seed <string> [--day 2026-10-03] [--closed-form] [--dataset-log2 28]\n\
\x20 bench [--warps 20] fill the cache, then time the CPU verifier per 32-lane warp\n\
\x20 export --out <dir> write the program pack (kernel.cu, kernel.cl, program.metal, memhard.h, ...)\n\
\x20 hash --nonce <n> print the 64-bit hash of one nonce (pack form, init words = seed words)\n\
\x20 hash-bound --prehash <64 hex> --nonce <u64> [--count N] print the header-bound hash (bind.rs) of one 64-bit nonce (N consecutive: \"nonce hash\" lines)\n\
\x20 accept every candidate of the seed (or --epoch-hex) with its acceptance verdict\n\
\x20 show the accepted program, one instruction per line\n\
\x20 --class C load class: v2 (default), mx4, mx8 (class v3: mixer x8, cache growth), dr<len> (Counter ASIC 3.0 item 2: the per-day derivation program, dr736 = the x8-equivalent), w4, w16, w64, w64x4, p4,p16,p64[xN], <class>m<mult>[g]\n\
\x20 also: w4, w16, w64, w64x4, p4,p16,p64[xN], <class>m<mult>[g], <class>+sh<S>x<R> (latency-shadow block of S ALU instructions x R passes per iteration, Counter ASIC 3.0 item 8)\n\
\x20 --days N days since genesis for the cache growth rule of a class with it (default 0: the 2^26-word cache)\n\
\x20 --program-class v2|v3|v4|v5 the program class of the seam (v3 = generator 3 on V3_CLASS, v4 = generator 4 on V4_CLASS = mx8+sh256x27, v5 = generator 5 on V5_CLASS = mx8+sh256x27+state, the chain's own derivation; --era-hex records the era seed)\n\
\x20 --state <file> class v5 (or any --class ...+state): the window's state stream (IGSD1 file, igneum-day-stream --out), whose leaves key every item\n\
\x20 --shadow-reps N class v4 at a rung of the latency ladder: the shadow block's pass count (0 = the class's own 27; docs/design/latency-ladder.md), with --program-class v4\n\
\x20 --era E era layout over --class: igneum-era-test/<n> or <n>:<64 hex> (the 32-byte era seed E_n)\n\
\x20 --era-widths 4[,16,64] the width set the era draws from, in bytes (default 4: pinned; more lets the era draw it)"
);
std::process::exit(2)
}
fn parse() -> Args {
let mut a = Args {
cmd: String::new(),
seed: "igneum-genesis".into(),
day: "2026-10-03".into(),
out: None,
closed_form: false,
state: None,
dataset_log2: DEFAULT_DATASET_LOG2,
warps: 20,
nonce: 0,
count: 1,
prehash: "00".repeat(32),
epoch_hex: None,
day_hex: None,
class: LoadClass::V2,
days: 0,
program_class: None,
era_hex: None,
shadow_reps: 0,
era: None,
era_widths: vec![1],
};
let mut it = std::env::args().skip(1);
a.cmd = it.next().unwrap_or_else(|| usage());
while let Some(k) = it.next() {
let mut val = || it.next().unwrap_or_else(|| usage());
match k.as_str() {
"--seed" => a.seed = val(),
"--day" => a.day = val(),
"--out" => a.out = Some(val()),
"--closed-form" => a.closed_form = true,
"--dataset-log2" => a.dataset_log2 = val().parse().unwrap_or_else(|_| usage()),
"--warps" => a.warps = val().parse().unwrap_or_else(|_| usage()),
"--nonce" => a.nonce = val().parse().unwrap_or_else(|_| usage()),
"--count" => a.count = val().parse().unwrap_or_else(|_| usage()),
"--prehash" => a.prehash = val(),
"--epoch-hex" => a.epoch_hex = Some(val()),
"--day-hex" => a.day_hex = Some(val()),
"--class" => a.class = LoadClass::parse(&val()).unwrap_or_else(|| usage()),
"--days" => a.days = val().parse().unwrap_or_else(|_| usage()),
"--program-class" => a.program_class = Some(ProgramClass::parse(&val()).unwrap_or_else(|| usage())),
"--state" => a.state = Some(val()),
"--era-hex" => a.era_hex = Some(val()),
"--shadow-reps" => a.shadow_reps = val().parse().unwrap_or_else(|_| usage()),
"--era" => a.era = Some(parse_era(&val()).unwrap_or_else(|| usage())),
"--era-widths" => a.era_widths = parse_widths(&val()).unwrap_or_else(|| usage()),
_ => usage(),
}
}
if let Some((_, bytes, _)) = &a.era {
a.class = LoadClass::era(a.class, bytes, &a.era_widths);
}
a
}
/// An era program is a class v3 program: generator 3 and the era bytes recorded (what the chain's
/// `Epoch::from_chain_seeds` does); the pack then carries IGNEUM_PROGRAM_CLASS "v3" and IGNEUM_ERA_SEED_HEX.
fn stamp_era(e: &mut Epoch, a: &Args) {
if let Some((_, bytes, _)) = &a.era {
// generator 4 on V4_CLASS (class v4, Counter ASIC 3.0), 3 on every other era program
e.program.generator = igneum_pow::generator::era_generator_of(&e.program.class);
e.program.era_bytes = Some(bytes.clone());
}
}
fn main() {
let a = parse();
let mode = if a.closed_form { DatasetMode::ClosedForm } else { DatasetMode::MemoryHard };
match a.cmd.as_str() {
"bench" => bench(&a, mode),
"export" => export(&a, mode),
"accept" => accept(&a),
"show" => show(&a),
"hash" => {
let (e, _) = epoch_of(&a, mode);
println!("{:016x}", e.hash(a.nonce as u32));
}
"hash-bound" => {
let bytes = igneum_pow::bind::unhex(&a.prehash).unwrap_or_else(|| usage());
let prehash: [u8; 32] = bytes.as_slice().try_into().unwrap_or_else(|_| usage());
// --epoch-hex / --day-hex: the chain's byte seeds (Epoch::from_seed_bytes), as the worker protocol carries them
let (e, _) = epoch_of(&a, mode);
if a.count > 1 {
// gate G2 (5 October 2026, ported from branch ca2-era for the class v4 gate run): `--count N` prints
// "nonce hash" for N consecutive 64-bit nonces from --nonce, one epoch build, to re-hash a worker's
// found lines (the same prehash, target ff..ff)
for k in 0..a.count {
let n = a.nonce.wrapping_add(k);
println!("{n} {:016x}", e.hash_bound(&prehash, n));
}
return;
}
let init = igneum_pow::bind::block_init_words(&prehash, a.nonce);
println!("init words {}", init.iter().map(|w| format!("{w:08x}")).collect::<Vec<_>>().join(" "));
println!("{:016x}", e.hash_bound(&prehash, a.nonce));
}
_ => usage(),
}
}
/// The epoch every command works on, and the day label for packs. `--epoch-hex`/`--day-hex` give the chain's byte
/// seeds (the day label then names the day bytes); else the string seed and day. `--program-class v3` draws the
/// program through the seam (generator 3 on `V3_CLASS`, the era bytes of `--era-hex` recorded) and sizes the
/// dataset for `--days` through `Epoch::chain_dataset_day`; `--class` is ignored under a program class (the class
/// names the load class). Closed-form mode is only for string seeds under the default class.
fn epoch_of(a: &Args, mode: DatasetMode) -> (Epoch, String) {
let (mut e, label) = epoch_of_class(a, mode);
stamp_era(&mut e, a);
// class v5: the leaves of --state, built for the dataset's size; a state class without --state is refused here
// rather than at the first derivation
if e.program.class.state {
let Some(path) = &a.state else {
eprintln!("class {} keys every item by the window's state: give --state <stream file> (igneum-day-stream --out)", e.program.class.name());
std::process::exit(2);
};
let stream = igneum_pow::state::StateStream::read_file(std::path::Path::new(path)).unwrap_or_else(|err| {
eprintln!("{err}");
std::process::exit(2)
});
let leaves = igneum_pow::state::StateLeaves::from_stream(&stream, e.dataset.log2_words);
eprintln!(
"state stream {}: chain block {} {}, root {}, {} records, {} leaves{}",
path,
stream.number,
igneum_pow::emit::hex_bytes(&stream.block),
igneum_pow::emit::hex_bytes(&stream.root),
stream.records.len(),
leaves.n(),
if leaves.sampled { " (sampled)" } else { "" }
);
e.dataset = e.dataset.with_leaves(std::sync::Arc::new(leaves));
} else if a.state.is_some() {
eprintln!("--state given for a class without state leaves ({}); use --program-class v5 or --class <class>+state", e.program.class.name());
std::process::exit(2);
}
(e, label)
}
fn epoch_of_class(a: &Args, mode: DatasetMode) -> (Epoch, String) {
let era = a.era_hex.as_ref().map(|h| igneum_pow::bind::unhex(h).unwrap_or_else(|| usage()));
match (&a.epoch_hex, &a.day_hex) {
(Some(eh), Some(dh)) => {
let eb = igneum_pow::bind::unhex(eh).unwrap_or_else(|| usage());
let db = igneum_pow::bind::unhex(dh).unwrap_or_else(|| usage());
let label = format!("igneum-epoch/{eh}/day/{dh}");
let e = match a.program_class {
Some(pc) => Epoch {
program: Epoch::chain_program_shadow(&eb, era.as_deref(), pc, a.shadow_reps, &label),
dataset: Epoch::chain_dataset_day(&db, pc, a.days, a.dataset_log2),
},
None => Epoch::from_seed_bytes_day(&eb, &db, &label, a.class, a.days, a.dataset_log2),
};
(e, format!("bytes:{dh}"))
}
_ => {
let e = match a.program_class {
Some(pc) => {
let program = igneum_pow::generator::generate_from_seed_bytes_program_class_shadow(&a.seed, a.seed.as_bytes(), pc, era.as_deref(), a.shadow_reps);
let lc = pc.load_class();
let shape = Shape::for_class_day(&lc, a.days);
let log2 = if lc.growth { igneum_pow::memhard::dataset_log2_words(a.dataset_log2, a.days) } else { a.dataset_log2 };
Epoch { program, dataset: DatasetSource::new_shape(&a.day, mode, log2, shape) }
}
None => Epoch::new_class_day(&a.seed, &a.day, mode, a.dataset_log2, a.class, a.days),
};
(e, a.day.clone())
}
}
}
fn bench(a: &Args, mode: DatasetMode) {
println!(
"igneum-pow bench: seed \"{}\", day \"{}\", dataset 2^{} words ({})",
a.seed,
a.day,
a.dataset_log2,
mode.name()
);
let shape = Shape::for_class_day(&a.program_class.map(|pc| pc.load_class()).unwrap_or(a.class), a.days);
if mode == DatasetMode::MemoryHard {
// Time the cache fill on its own first (one core), then build the epoch (which fills it again).
let t0 = Instant::now();
let c = Cache::fill_log2(day_key(&a.day), shape.cache_log2_words);
let fill_ms = t0.elapsed().as_secs_f64() * 1e3;
println!(
"cache: fill {fill_ms:.1} ms on one core (2^{} words, {} MiB, {} chains of 64 ChaCha12 blocks), FNV-1a 64 {:016x}",
shape.cache_log2_words,
shape.cache_words() * 4 / (1 << 20),
c.segments(),
c.fnv1a64()
);
drop(c);
}
if let Some(h) = a.class.hot {
// the hot table of the epoch on its own first (one core), then the epoch (which fills it again)
let t0 = Instant::now();
let t = igneum_pow::memhard::HotTable::for_seed_bytes(a.seed.as_bytes(), h.mb as u32);
let fill_ms = t0.elapsed().as_secs_f64() * 1e3;
println!("hot table: {} MiB filled in {fill_ms:.1} ms on one core ({} chains of 64 ChaCha12 blocks), FNV-1a 64 {:016x}", h.mb, igneum_pow::memhard::hot_segments(h.mb as u32), t.fnv1a64());
}
let t0 = Instant::now();
let (e, _) = epoch_of(a, mode);
let build_ms = t0.elapsed().as_secs_f64() * 1e3;
println!(
"program: class {}, {} loads/hash, {} bytes/hash, widths (1,4,16 words) {:?}, {} items/warp, mixer x{} ({} mixers/item), cache 2^{} words, op mix {}; epoch built in {build_ms:.1} ms",
e.program.class.name(),
e.program.loads_per_hash(),
e.program.bytes_per_hash(),
e.program.width_counts(),
e.program.items_per_warp(),
shape.mixer_mult,
shape.mixers_per_item(),
shape.cache_log2_words,
e.program.op_mix()
);
if let Some(dp) = e.dataset.memhard().and_then(|m| m.params.derive.as_ref()) {
// Counter ASIC 3.0 item 2: the day's derivation program
println!(
"derivation program: {} instructions per round program, {} per item ({} GPU ops, {} chip ops, {} multiplies per item), attempt {}, fingerprint {:016x}, op mix {}",
dp.len,
dp.instr_count(),
dp.gpu_ops(),
dp.chip_ops(),
dp.muls(),
dp.attempt,
dp.fingerprint(),
dp.op_mix()
);
}
if e.program.has_shadow() {
println!(
"shadow: {} instructions x {} passes per iteration, {} shadow instructions per hash, op mix {}",
e.program.shadow.len(),
e.program.shadow_reps(),
e.program.shadow_instrs_per_hash(),
e.program.shadow_op_mix()
);
}
let bases = [0u32, 4096, 1_000_000];
for &b in &bases {
let t = Instant::now();
let r = e.interpret_warp(b);
let ms = t.elapsed().as_secs_f64() * 1e3;
println!(
"warp base {b}: single cold run {ms:.3} ms, {} items derived, lane0 {:016x} lane31 {:016x}",
r.items_derived, r.hashes[0], r.hashes[31]
);
}
let n = a.warps.max(1);
let t = Instant::now();
let mut sink = 0u64;
for i in 0..n {
let w = e.hash_warp((i as u32) * 32 + 65536);
sink ^= w[0];
}
let avg = t.elapsed().as_secs_f64() * 1e3 / n as f64;
println!("CPU verify: {avg:.3} ms per 32-lane warp, avg of {n} (checksum {sink:016x})");
}
fn export(a: &Args, mode: DatasetMode) {
let out = a.out.clone().unwrap_or_else(|| usage());
let t0 = Instant::now();
// --epoch-hex / --day-hex: the chain's byte seeds; the day label then names the day bytes
let (e, day_label) = epoch_of(a, mode);
let build_ms = t0.elapsed().as_secs_f64() * 1e3;
println!("igneum-pow export {out}");
println!(
"seed \"{}\", day \"{}\", dataset 2^{} words ({}), generator v{} attempt {} program id {:016x}, loads/hash {}; epoch built in {build_ms:.1} ms",
e.program.seed_string,
day_label,
e.dataset.log2_words,
e.dataset.mode().name(),
e.program.generator,
e.program.attempt,
e.program.program_id(),
e.program.loads_per_hash()
);
println!("op mix: {}; class {}, {} bytes/hash, widths (1,4,16 words) {:?}", e.program.op_mix(), e.program.class.name(), e.program.bytes_per_hash(), e.program.width_counts());
let source = format!("igneum-pow (Rust) CPU interpreter, generator v{}, {} dataset", e.program.generator, e.dataset.mode().name());
let pack = export_pack(&e, &day_label, &source);
let dir = std::path::Path::new(&out);
if let Err(err) = pack.write_to(dir) {
eprintln!("FAIL: write error {err}");
std::process::exit(1);
}
for (name, text) in &pack.files {
println!("wrote {}/{name} ({} bytes)", dir.display(), text.len());
}
for (i, b) in pack.bases.iter().enumerate() {
println!("vector warp base {b}: lane0 {:016x} lane31 {:016x}", pack.outs[i][0], pack.outs[i][31]);
}
if e.dataset.mode() == DatasetMode::MemoryHard {
println!("cache FNV-1a 64 {:016x}", pack.vectors.cache_fnv);
}
println!("OVERALL: PASS (pack written)");
}
fn seed_bytes_of(a: &Args) -> (String, Vec<u8>) {
match &a.epoch_hex {
Some(eh) => (format!("igneum-epoch/{eh}"), igneum_pow::bind::unhex(eh).unwrap_or_else(|| usage())),
None => (a.seed.clone(), a.seed.as_bytes().to_vec()),
}
}
fn accept(a: &Args) {
let (label, bytes) = seed_bytes_of(a);
let t0 = Instant::now();
let tries = igneum_pow::generator::attempts_class(&label, &bytes, a.class);
let ms = t0.elapsed().as_secs_f64() * 1e3;
for (p, verdict) in &tries {
match verdict {
Ok(()) => {
let r = igneum_pow::accept::check(p).unwrap();
println!(
"attempt {}: ACCEPTED program id {:016x}, op mix {}, distinct {:.3} per hash, saturated {}, bias max {}",
p.attempt,
p.program_id(),
p.op_mix(),
r.distinct_mean(),
r.saturated,
r.bias_max
);
}
Err(r) => println!("attempt {}: rejected, {r}", p.attempt),
}
}
println!("{} candidates in {ms:.2} ms", tries.len());
}
fn show(a: &Args) {
let (label, bytes) = seed_bytes_of(a);
// --program-class: the chain's own derivation (the era from --era-hex), as the node and the miner draw it; else
// the load class of --class, the era of --era composed over it
let era_hex_bytes = a.era_hex.as_deref().map(|h| igneum_pow::bind::unhex(h).unwrap_or_else(|| usage()));
let mut p = match a.program_class {
Some(pc) => igneum_pow::generator::generate_from_seed_bytes_program_class_shadow(&label, &bytes, pc, era_hex_bytes.as_deref(), a.shadow_reps),
None => igneum_pow::generator::generate_from_seed_bytes_class(&label, &bytes, a.class),
};
if let (None, Some((_, eb, _))) = (a.program_class, &a.era) {
p.generator = igneum_pow::generator::era_generator_of(&p.class);
p.era_bytes = Some(eb.clone());
}
println!(
"seed \"{}\" generator v{} class {} attempt {} program id {:016x} seed words {}",
p.seed_string,
p.generator,
p.class.name(),
p.attempt,
p.program_id(),
p.seed.iter().map(|w| format!("{w:08x}")).collect::<Vec<_>>().join(" ")
);
println!("op mix {} loads/hash {} bytes/hash {}", p.op_mix(), p.loads_per_hash(), p.bytes_per_hash());
if let Some(e) = p.class.era {
println!(
"era {} ({}): width {} B, stride mul {:#010x} rot {}, interleave {:?}, windows (site:shrink:offset) {}",
e.label(),
a.era.as_ref().map(|x| x.2.as_str()).unwrap_or("?"),
e.width_words as u32 * 4,
e.stride_mul,
e.stride_rot,
e.pos,
p.instrs
.iter()
.enumerate()
.filter(|(_, i)| i.op == igneum_pow::generator::Op::Load)
.map(|(k, i)| format!("{k}:{}:{}", i.win, i.off))
.collect::<Vec<_>>()
.join(" ")
);
}
for (k, i) in p.instrs.iter().enumerate() {
println!(
"{k:2}: {:5} dst={} src={} src2={} imm={:#010x} imm2={:#010x} rot={} bit={} mask={}{}",
i.op.name(),
i.dst,
i.src,
i.src2,
i.imm,
i.imm2,
i.rot,
i.bit,
i.mask,
if i.op == igneum_pow::generator::Op::Load && i.width > 1 { format!(" width={}B", i.width as u32 * 4) } else { String::new() }
);
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,464 @@
//! A program pack on disk, read the way the one-click workers read it (`proto-cuda/nvrtc/packfile.h`, `pf_load`),
//! and checked against the seeds the node is on.
//!
//! The rule (5 October 2026, the epoch 34 incident on both PCs): a pack's `IGNEUM_SEEDW_INIT` is the seed words of
//! the program's ATTEMPT, `attempt_words(epoch_seed, IGNEUM_PROGRAM_ATTEMPT)`, not the words of the bare seed. The
//! generator retries a rejected candidate with `seed || k_le32` (spec 01 section 1.4.6), so from attempt 1 on the
//! bare-seed words and the pack's words differ. The workers derived the expected words from the bare seed, refused
//! every pack of a retried program ("the epoch seed bytes do not give the pack's IGNEUM_SEEDW_INIT") and the miner
//! and the app restarted them forever. Epoch 34 (seed `009858237e11...`) was the first live epoch whose program is
//! a later attempt. This module is the one place that rule is written in Rust; the miner checks every pack it
//! writes with it before a worker sees the pack, and the tests pin the attempt vectors the C side also pins.
use crate::generator::{attempt_words, ProgramClass};
use crate::seed::seed_words_from_bytes;
use std::fmt;
use std::path::Path;
/// What a pack says about itself.
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PackIdentity {
pub epoch_hex: String,
pub day_hex: String,
pub attempt: u32,
pub seedw: [u32; 8],
pub keyw: [u32; 8],
/// `IGNEUM_GENERATOR` (2, 3 or 4; a pack without the line is generator 1, which no worker runs).
pub generator: u32,
/// The program class the generator version names (Counter ASIC 2.0).
pub class: ProgramClass,
/// `IGNEUM_ERA_SEED_HEX` when the pack carries one (class v3 chain packs).
pub era_hex: Option<String>,
/// `IGNEUM_STATE_ROOT_HEX` of a class v5 pack (the window's state root the leaves derive from).
pub state_root_hex: Option<String>,
}
/// Why a pack is not the one a worker should mine with. `Display` is the plain-words line the logs carry.
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PackFault {
/// program.h or seeds.txt is missing or does not parse.
Unreadable(String),
/// A well-formed pack for other seeds than the node's: the pack is stale (or the node moved on).
OutOfDate { pack_epoch: String, pack_day: String, want_epoch: String, want_day: String },
/// The files of one pack contradict each other (seeds.txt against program.h, or the init words against the
/// seeds and the attempt): a half-written or hand-edited pack, or a worker and an exporter on different rules.
Disagree(String),
/// The pack is of another program class than the one the chain is on (spec 01 section 1.4.5: an implementation
/// refuses a pack whose generator version is not its own), or its era seed is not the era the job names.
WrongClass(String),
}
impl fmt::Display for PackFault {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
PackFault::Unreadable(w) => write!(f, "program pack unreadable: {w}"),
PackFault::OutOfDate { pack_epoch, pack_day, want_epoch, want_day } => write!(
f,
"program pack out of date: the pack is for epoch {} day {}, the node is on epoch {} day {}",
short(pack_epoch),
day_label(pack_day),
short(want_epoch),
day_label(want_day)
),
PackFault::Disagree(w) => write!(f, "program pack and its seeds disagree: {w}"),
PackFault::WrongClass(w) => write!(f, "program pack of the wrong class: {w}"),
}
}
}
impl std::error::Error for PackFault {}
fn short(hex: &str) -> &str {
if hex.len() >= 16 {
&hex[..16]
} else {
hex
}
}
/// The day bytes are `igneum-day/` followed by the little-endian day index (`bind::day_bytes`); print the index
/// when the hex has that shape, else the hex.
fn day_label(hex: &str) -> String {
const PREFIX: &str = "69676e65756d2d6461792f"; // "igneum-day/"
if let Some(rest) = hex.strip_prefix(PREFIX) {
if let Some(bytes) = unhex(rest) {
let mut v = 0u64;
for (i, b) in bytes.iter().enumerate().take(8) {
v |= (*b as u64) << (8 * i);
}
return v.to_string();
}
}
hex.to_string()
}
pub fn hex(bytes: &[u8]) -> String {
bytes.iter().map(|b| format!("{b:02x}")).collect()
}
fn unhex(s: &str) -> Option<Vec<u8>> {
if s.len() % 2 != 0 {
return None;
}
(0..s.len()).step_by(2).map(|i| u8::from_str_radix(&s[i..i + 2], 16).ok()).collect()
}
/// `#define NAME <rest of line>` in a header; the value as text, trimmed, with a trailing `//` comment removed.
fn define(text: &str, name: &str) -> Option<String> {
for line in text.lines() {
let t = line.trim_start();
let Some(rest) = t.strip_prefix("#define ") else { continue };
let rest = rest.trim_start();
let Some(after) = rest.strip_prefix(name) else { continue };
if !after.starts_with(|c: char| c.is_whitespace()) {
continue;
}
let v = after.trim();
let v = v.split("//").next().unwrap_or("").trim();
return Some(v.to_string());
}
None
}
fn define_str(text: &str, name: &str) -> Option<String> {
let v = define(text, name)?;
let v = v.strip_prefix('"')?.strip_suffix('"')?;
Some(v.to_string())
}
fn define_u32(text: &str, name: &str) -> Option<u32> {
let v = define(text, name)?;
let v = v.trim_end_matches('u');
if let Some(h) = v.strip_prefix("0x") {
u32::from_str_radix(h, 16).ok()
} else {
v.parse().ok()
}
}
fn define_words(text: &str, name: &str) -> Option<[u32; 8]> {
let v = define(text, name)?;
let inner = v.trim().strip_prefix('{')?.strip_suffix('}')?;
let mut out = [0u32; 8];
let mut n = 0;
for part in inner.split(',') {
let p = part.trim().trim_end_matches('u');
if p.is_empty() {
continue;
}
if n >= 8 {
return None;
}
out[n] = if let Some(h) = p.strip_prefix("0x") { u32::from_str_radix(h, 16).ok()? } else { p.parse().ok()? };
n += 1;
}
(n == 8).then_some(out)
}
/// One `key value` line of seeds.txt.
fn seeds_line(text: &str, key: &str) -> Option<String> {
text.lines().find_map(|l| l.strip_prefix(key).and_then(|r| r.strip_prefix(' ')).map(|v| v.trim().to_string()))
}
/// Checks the texts of a pack (program.h, and seeds.txt when it exists) against the seeds a worker will be asked
/// to mine with. Pure: the miner and the tests call it with file contents.
pub fn verify_pack_texts(program_h: &str, seeds_txt: Option<&str>, want_epoch: &[u8], want_day: &[u8]) -> Result<PackIdentity, PackFault> {
verify_pack_texts_chain(program_h, seeds_txt, want_epoch, want_day, None, None)
}
/// [`verify_pack_texts`] that also demands a program class and, for class v3 and v4, the era seed the chain is on
/// (Counter ASIC 2.0, 5 October 2026; class v4 Counter ASIC 3.0, 6 October 2026). `want_class` `None` accepts any
/// class; `want_era` `None` skips the era. A pack whose `IGNEUM_GENERATOR` is not 2, 3 or 4 is refused whatever is wanted.
pub fn verify_pack_texts_chain(
program_h: &str,
seeds_txt: Option<&str>,
want_epoch: &[u8],
want_day: &[u8],
want_class: Option<ProgramClass>,
want_era: Option<&[u8]>,
) -> Result<PackIdentity, PackFault> {
let generator = define_u32(program_h, "IGNEUM_GENERATOR").unwrap_or(1);
let Some(class) = ProgramClass::from_generator(generator) else {
return Err(PackFault::WrongClass(format!("IGNEUM_GENERATOR {generator} is not a generator version this software runs (2, 3 or 4)")));
};
// IGNEUM_PROGRAM_CLASS, when present, must name the class the generator version names
if let Some(named) = define_str(program_h, "IGNEUM_PROGRAM_CLASS") {
if ProgramClass::parse(&named) != Some(class) {
return Err(PackFault::Disagree(format!("IGNEUM_PROGRAM_CLASS {named:?} does not match IGNEUM_GENERATOR {generator}")));
}
}
let era_hex = define_str(program_h, "IGNEUM_ERA_SEED_HEX").map(|h| h.to_ascii_lowercase());
// Counter ASIC 3.0 (6 October 2026): the shadow block is the mark of class v4, so a generator 4 pack carries
// IGNEUM_SHADOW_INSTRS and a generator 3 pack does not; a pack exported as class v4 but stamped generator 3 (the
// seven gate packs of 6 October, which carried the v3 control's program id because `program_id(3, ..)` is
// class-independent) is refused here instead of mining as class v3 under the wrong id, and a generator 4 pack
// without the block is no v4 pack. A generator 2 pack with a shadow (the measurement ladder of
// proto-cuda/packs-ca3-shadow) carries a class-bearing id and stays loadable.
let shadow = define_u32(program_h, "IGNEUM_SHADOW_INSTRS").unwrap_or(0);
// Class v5 (docs/design/class-v5-stored-state.md): the state lines are the mark of class v5, so a generator 5 pack
// carries IGNEUM_STATE_ROOT_HEX (and the shadow block of v4) and no other generator does.
let state_root_hex = define_str(program_h, "IGNEUM_STATE_ROOT_HEX");
match (class, state_root_hex.is_some()) {
(ProgramClass::V5, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 5 (class v5) without IGNEUM_STATE_ROOT_HEX: not a class v5 pack".into())),
(ProgramClass::V5, true) => {}
(_, true) => return Err(PackFault::Disagree(format!("IGNEUM_GENERATOR {generator} with class v5 state lines: a program over state leaves is generator 5 (export the pack as class v5)"))),
_ => {}
}
match (class, shadow > 0) {
(ProgramClass::V4, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 4 (class v4) without IGNEUM_SHADOW_INSTRS: not a class v4 pack".into())),
(ProgramClass::V5, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 5 (class v5) without IGNEUM_SHADOW_INSTRS: not a class v5 pack".into())),
// the class v4 stream sub-version (AP-F8-1 amendment, 7 October 2026): a generator 4 pack from before the
// load-source rule carries no IGNEUM_PROGRAM_SUBVERSION and its program id is another stream's; refused
(ProgramClass::V4, true) if define_u32(program_h, "IGNEUM_PROGRAM_SUBVERSION") != Some(u32::from(crate::generator::PROGRAM_SUBVERSION_V4)) => {
return Err(PackFault::Disagree(format!(
"IGNEUM_GENERATOR 4 (class v4) with IGNEUM_PROGRAM_SUBVERSION {}: this software runs sub-version {} (a class v4 pack from before the load-source rule, or after another amendment)",
define_u32(program_h, "IGNEUM_PROGRAM_SUBVERSION").map(|v| v.to_string()).unwrap_or_else(|| "absent".into()),
crate::generator::PROGRAM_SUBVERSION_V4
)))
}
(ProgramClass::V3, true) => {
return Err(PackFault::Disagree(format!("IGNEUM_GENERATOR 3 (class v3) with a shadow block (IGNEUM_SHADOW_INSTRS {shadow}): a class v4 program is generator 4 (export the pack as class v4)")))
}
_ => {}
}
if let Some(want) = want_class {
if want != class {
return Err(PackFault::WrongClass(format!("the pack is program class {} (generator {generator}), the chain is on class {}", class.name(), want.name())));
}
}
if let (Some(want), true) = (want_era, class.has_era()) {
let want_hex = hex(want);
match &era_hex {
Some(h) if *h == want_hex => {}
Some(h) => return Err(PackFault::WrongClass(format!("the pack's era seed {} is not the era seed {} the job names", short(h), short(&want_hex)))),
None => return Err(PackFault::WrongClass(format!("a class {} pack without IGNEUM_ERA_SEED_HEX; the job names an era seed", class.name()))),
}
}
let seedw = define_words(program_h, "IGNEUM_SEEDW_INIT").ok_or_else(|| PackFault::Unreadable("program.h has no IGNEUM_SEEDW_INIT with 8 words".into()))?;
let keyw = define_words(program_h, "IGNEUM_KEY_INIT").ok_or_else(|| PackFault::Unreadable("program.h has no IGNEUM_KEY_INIT with 8 words".into()))?;
let attempt = define_u32(program_h, "IGNEUM_PROGRAM_ATTEMPT").unwrap_or(0);
let mut epoch_hex = define_str(program_h, "IGNEUM_SEED_BYTES_HEX").unwrap_or_default();
let mut day_hex = define_str(program_h, "IGNEUM_DAY_BYTES_HEX").unwrap_or_default();
if let Some(s) = seeds_txt {
let e = seeds_line(s, "epoch_seed_hex").ok_or_else(|| PackFault::Unreadable("seeds.txt has no epoch_seed_hex line".into()))?;
let d = seeds_line(s, "day_seed_hex").ok_or_else(|| PackFault::Unreadable("seeds.txt has no day_seed_hex line".into()))?;
if !epoch_hex.is_empty() && !epoch_hex.eq_ignore_ascii_case(&e) {
return Err(PackFault::Disagree(format!("seeds.txt names epoch {} but program.h was generated for epoch {} (a pack half rewritten?)", short(&e), short(&epoch_hex))));
}
if !day_hex.is_empty() && !day_hex.eq_ignore_ascii_case(&d) {
return Err(PackFault::Disagree(format!("seeds.txt names day {} but program.h was generated for day {}", day_label(&d), day_label(&day_hex))));
}
epoch_hex = e.to_ascii_lowercase();
day_hex = d.to_ascii_lowercase();
}
if epoch_hex.is_empty() || day_hex.is_empty() {
return Err(PackFault::Unreadable("no seeds: neither seeds.txt nor IGNEUM_SEED_BYTES_HEX / IGNEUM_DAY_BYTES_HEX in program.h".into()));
}
let epoch_bytes = unhex(&epoch_hex).filter(|b| b.len() == 32).ok_or_else(|| PackFault::Unreadable("the epoch seed is not 32 bytes of hex".into()))?;
let day_bytes = unhex(&day_hex).ok_or_else(|| PackFault::Unreadable("the day seed hex is malformed".into()))?;
// The pack's own consistency first: a pack that contradicts itself is never "out of date", it is broken
let want_w = attempt_words(&epoch_bytes, attempt);
if want_w != seedw {
return Err(PackFault::Disagree(format!(
"IGNEUM_SEEDW_INIT is not attempt {attempt} of the epoch seed {} (the words of attempt {attempt} are {:08x} {:08x} ..., the pack has {:08x} {:08x} ...)",
short(&epoch_hex),
want_w[0],
want_w[1],
seedw[0],
seedw[1]
)));
}
let want_k = seed_words_from_bytes(&day_bytes);
if want_k != keyw {
return Err(PackFault::Disagree(format!("IGNEUM_KEY_INIT is not the key of the day seed {} ", day_label(&day_hex))));
}
let want_epoch_hex = hex(want_epoch);
let want_day_hex = hex(want_day);
if epoch_hex != want_epoch_hex || day_hex != want_day_hex {
return Err(PackFault::OutOfDate { pack_epoch: epoch_hex, pack_day: day_hex, want_epoch: want_epoch_hex, want_day: want_day_hex });
}
Ok(PackIdentity { epoch_hex, day_hex, attempt, seedw, keyw, generator, class, era_hex, state_root_hex })
}
/// [`verify_pack_texts`] over a pack directory.
pub fn verify_pack_dir(dir: &Path, want_epoch: &[u8], want_day: &[u8]) -> Result<PackIdentity, PackFault> {
verify_pack_dir_chain(dir, want_epoch, want_day, None, None)
}
/// [`verify_pack_texts_chain`] over a pack directory.
pub fn verify_pack_dir_chain(dir: &Path, want_epoch: &[u8], want_day: &[u8], want_class: Option<ProgramClass>, want_era: Option<&[u8]>) -> Result<PackIdentity, PackFault> {
let program_h = std::fs::read_to_string(dir.join("program.h")).map_err(|e| PackFault::Unreadable(format!("cannot read {}/program.h: {e}", dir.display())))?;
let seeds = std::fs::read_to_string(dir.join("seeds.txt")).ok();
verify_pack_texts_chain(&program_h, seeds.as_deref(), want_epoch, want_day, want_class, want_era)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::emit::program_header;
use crate::generator::generate_from_seed_bytes;
use crate::verify::Epoch;
// The two live devnet epochs of 5 October 2026 (epoch 33 mined, epoch 34 refused by the one-click workers)
const EPOCH_33: &str = "bed7ab62cbece66cf791485336d81d90fa1452ffed28ecd8a7416960ef64164c";
const EPOCH_34: &str = "009858237e118f69abc8d096e9b1af21c24539eaecdfd1b896588825660a69ec";
// "igneum-day/" || le64(20731)
const DAY_20731: &str = "69676e65756d2d6461792ffb50000000000000";
fn bytes(h: &str) -> Vec<u8> {
unhex(h).unwrap()
}
/// The attempt vectors the C side pins too (proto-cuda/nvrtc/emu/packfile-test.c): a change to either
/// derivation fails on one side first.
#[test]
fn attempt_words_vectors_shared_with_the_workers() {
let e = bytes(EPOCH_34);
assert_eq!(attempt_words(&e, 0), [0x06af2a61, 0x4d67274e, 0x4ebda738, 0xad1dea73, 0x6233cd8c, 0x50371601, 0x39d0b873, 0x6af024a2]);
assert_eq!(attempt_words(&e, 1), [0x0dcff56b, 0x6b1beb0d, 0x234dc70c, 0xe4016fa9, 0x72397152, 0xb558aa79, 0x3ffb3299, 0x72b9962e]);
// epoch 33's bare words, as the CUDA worker printed them on 5 October ("seed words be5983a6 f750dab7 ...")
assert_eq!(attempt_words(&bytes(EPOCH_33), 0)[..2], [0xbe5983a6, 0xf750dab7]);
}
/// The incident: epoch 34's program is a later attempt, epoch 33's is the bare seed. A worker that derives the
/// words from the bare seed accepts 33 and refuses 34.
#[test]
fn epoch_34_program_is_a_later_attempt() {
let p34 = generate_from_seed_bytes("epoch 34", &bytes(EPOCH_34));
assert!(p34.attempt >= 1, "epoch 34 must be a retried program for the incident to reproduce; attempt {}", p34.attempt);
assert_eq!(p34.seed, attempt_words(&bytes(EPOCH_34), p34.attempt));
assert_ne!(p34.seed, attempt_words(&bytes(EPOCH_34), 0));
let p33 = generate_from_seed_bytes("epoch 33", &bytes(EPOCH_33));
assert_eq!(p33.attempt, 0);
}
fn pack_texts(epoch_hex: &str, day_hex: &str) -> (String, String, u32) {
let (e, d) = (bytes(epoch_hex), bytes(day_hex));
let epoch = Epoch::from_seed_bytes(&e, &d, "test");
let h = program_header(&epoch.program, "test day", &epoch.dataset);
let s = format!("epoch_seed_hex {epoch_hex}\nday_seed_hex {day_hex}\nday_index 20731\n");
(h, s, epoch.program.attempt)
}
/// Known-good: the pack of a retried program verifies against its own seeds, with its attempt.
#[test]
fn known_good_pack_of_a_later_attempt_verifies() {
let (h, s, attempt) = pack_texts(EPOCH_34, DAY_20731);
assert!(attempt >= 1);
let id = verify_pack_texts(&h, Some(&s), &bytes(EPOCH_34), &bytes(DAY_20731)).expect("the pack verifies");
assert_eq!(id.attempt, attempt);
assert_eq!(id.epoch_hex, EPOCH_34);
assert_eq!(id.seedw, attempt_words(&bytes(EPOCH_34), attempt));
// without seeds.txt program.h's own bytes carry the pack
assert!(verify_pack_texts(&h, None, &bytes(EPOCH_34), &bytes(DAY_20731)).is_ok());
}
/// Known-mismatched: a well-formed pack for the previous epoch is "out of date" against the new one, in plain
/// words with both epochs named.
#[test]
fn known_mismatched_pack_is_out_of_date() {
let (h, s, _) = pack_texts(EPOCH_33, DAY_20731);
let err = verify_pack_texts(&h, Some(&s), &bytes(EPOCH_34), &bytes(DAY_20731)).unwrap_err();
assert!(matches!(err, PackFault::OutOfDate { .. }), "{err}");
assert_eq!(err.to_string(), "program pack out of date: the pack is for epoch bed7ab62cbece66c day 20731, the node is on epoch 009858237e118f69 day 20731");
}
/// A pack that contradicts itself is "disagree", never "out of date": seeds.txt of one epoch with program.h of
/// another (a half rewritten directory), or init words that are not the attempt's words (a worker on the old
/// rule would have produced this verdict for every retried program).
#[test]
fn inconsistent_pack_disagrees() {
let (h33, _, _) = pack_texts(EPOCH_33, DAY_20731);
let s34 = format!("epoch_seed_hex {EPOCH_34}\nday_seed_hex {DAY_20731}\n");
let err = verify_pack_texts(&h33, Some(&s34), &bytes(EPOCH_34), &bytes(DAY_20731)).unwrap_err();
assert!(matches!(err, PackFault::Disagree(_)), "{err}");
assert!(err.to_string().starts_with("program pack and its seeds disagree: seeds.txt names epoch 009858237e118f69"), "{err}");
let (h34, s, _) = pack_texts(EPOCH_34, DAY_20731);
let bare = attempt_words(&bytes(EPOCH_34), 0);
let edited = h34.lines().map(|l| if l.starts_with("#define IGNEUM_SEEDW_INIT") { format!("#define IGNEUM_SEEDW_INIT {{ {} }}", bare.iter().map(|w| format!("0x{w:08x}")).collect::<Vec<_>>().join(", ")) } else { l.to_string() }).collect::<Vec<_>>().join("\n");
let err = verify_pack_texts(&edited, Some(&s), &bytes(EPOCH_34), &bytes(DAY_20731)).unwrap_err();
assert!(err.to_string().contains("IGNEUM_SEEDW_INIT is not attempt"), "{err}");
// and a pack with no attempt line at all is read as attempt 0 (the packs before generator version 2)
let no_attempt = h34.lines().filter(|l| !l.starts_with("#define IGNEUM_PROGRAM_ATTEMPT")).collect::<Vec<_>>().join("\n");
assert!(verify_pack_texts(&no_attempt, Some(&s), &bytes(EPOCH_34), &bytes(DAY_20731)).is_err());
}
#[test]
fn day_label_reads_the_index() {
assert_eq!(day_label(DAY_20731), "20731");
assert_eq!(day_label("abcd"), "abcd");
}
/// Counter ASIC 2.0: a class v3 chain pack carries generator 3, the class line and the era seed; it is refused
/// when the chain wants class v2, when the era differs, and a v2 pack is refused when the chain wants v3; a
/// generator this software does not run is refused whatever is wanted.
#[test]
fn program_class_and_era_are_checked() {
let e = bytes(EPOCH_34);
let d = bytes(DAY_20731);
let era = [0x5au8; 32];
let v3 = Epoch::from_chain_seeds(&e, &d, Some(&era), ProgramClass::V3, "class test");
let h3 = program_header(&v3.program, "test day", &v3.dataset);
assert!(h3.contains("#define IGNEUM_GENERATOR 3\n"));
assert!(h3.contains("#define IGNEUM_PROGRAM_CLASS \"v3\"\n"));
assert!(h3.contains(&format!("#define IGNEUM_ERA_SEED_HEX \"{}\"\n", hex(&era))));
let id = verify_pack_texts_chain(&h3, None, &e, &d, Some(ProgramClass::V3), Some(&era)).unwrap();
assert_eq!((id.generator, id.class, id.era_hex.as_deref()), (3, ProgramClass::V3, Some(hex(&era).as_str())));
assert_eq!(id.attempt, v3.program.attempt);
assert!(verify_pack_texts(&h3, None, &e, &d).is_ok(), "no class wanted: either class passes");
let err = verify_pack_texts_chain(&h3, None, &e, &d, Some(ProgramClass::V2), None).unwrap_err();
assert!(matches!(err, PackFault::WrongClass(_)), "{err}");
assert!(err.to_string().contains("program pack of the wrong class"), "{err}");
let err = verify_pack_texts_chain(&h3, None, &e, &d, Some(ProgramClass::V3), Some(&[1u8; 32])).unwrap_err();
assert!(err.to_string().contains("era seed"), "{err}");
// the v2 pack of the same seeds: generator 2, no class line, no era line, refused when v3 is wanted
let v2 = Epoch::from_chain_seeds(&e, &d, Some(&era), ProgramClass::V2, "class test");
let h2 = program_header(&v2.program, "test day", &v2.dataset);
assert!(h2.contains("#define IGNEUM_GENERATOR 2\n"));
assert!(!h2.contains("IGNEUM_PROGRAM_CLASS") && !h2.contains("IGNEUM_ERA_SEED_HEX"));
let plain = Epoch::from_seed_bytes(&e, &d, "class test");
assert_eq!(program_header(&plain.program, "test day", &plain.dataset), h2, "class v2 from the chain is the v2 export byte for byte");
let id = verify_pack_texts_chain(&h2, None, &e, &d, Some(ProgramClass::V2), Some(&era)).unwrap();
assert_eq!((id.generator, id.class, id.era_hex), (2, ProgramClass::V2, None));
assert!(matches!(verify_pack_texts_chain(&h2, None, &e, &d, Some(ProgramClass::V3), None), Err(PackFault::WrongClass(_))));
// a generator nobody runs
let h9 = h2.replace("#define IGNEUM_GENERATOR 2\n", "#define IGNEUM_GENERATOR 9\n");
assert!(matches!(verify_pack_texts(&h9, None, &e, &d), Err(PackFault::WrongClass(_))));
// a class line that contradicts the generator
let bad = h3.replace("#define IGNEUM_PROGRAM_CLASS \"v3\"\n", "#define IGNEUM_PROGRAM_CLASS \"v2\"\n");
assert!(matches!(verify_pack_texts(&bad, None, &e, &d), Err(PackFault::Disagree(_))));
// Counter ASIC 3.0: a class v4 chain pack carries generator 4, the class line and the era seed; it is refused
// when v3 (or v2) is wanted, and a v3 pack is refused when v4 is wanted; the era rule applies to v4 as to v3
let v4 = Epoch::from_chain_seeds(&e, &d, Some(&era), ProgramClass::V4, "class test");
let h4 = program_header(&v4.program, "test day", &v4.dataset);
assert!(h4.contains("#define IGNEUM_GENERATOR 4\n"));
assert!(h4.contains("#define IGNEUM_PROGRAM_CLASS \"v4\"\n"));
assert!(h4.contains(&format!("#define IGNEUM_ERA_SEED_HEX \"{}\"\n", hex(&era))));
assert!(h4.contains("#define IGNEUM_SHADOW_INSTRS 256\n") && h4.contains("#define IGNEUM_SHADOW_REPS 27\n"), "{h4}");
let id = verify_pack_texts_chain(&h4, None, &e, &d, Some(ProgramClass::V4), Some(&era)).unwrap();
assert_eq!((id.generator, id.class, id.era_hex.as_deref()), (4, ProgramClass::V4, Some(hex(&era).as_str())));
assert_eq!(id.attempt, v3.program.attempt, "the v4 attempt is the v3 attempt of the same seed");
assert!(verify_pack_texts(&h4, None, &e, &d).is_ok(), "no class wanted: any class passes");
assert!(matches!(verify_pack_texts_chain(&h4, None, &e, &d, Some(ProgramClass::V3), None), Err(PackFault::WrongClass(_))));
assert!(matches!(verify_pack_texts_chain(&h4, None, &e, &d, Some(ProgramClass::V2), None), Err(PackFault::WrongClass(_))));
assert!(matches!(verify_pack_texts_chain(&h3, None, &e, &d, Some(ProgramClass::V4), None), Err(PackFault::WrongClass(_))));
assert!(matches!(verify_pack_texts_chain(&h2, None, &e, &d, Some(ProgramClass::V4), None), Err(PackFault::WrongClass(_))));
let err = verify_pack_texts_chain(&h4, None, &e, &d, Some(ProgramClass::V4), Some(&[1u8; 32])).unwrap_err();
assert!(err.to_string().contains("era seed"), "{err}");
let no_era = h4.replace(&format!("#define IGNEUM_ERA_SEED_HEX \"{}\"\n", hex(&era)), "");
let err = verify_pack_texts_chain(&no_era, None, &e, &d, Some(ProgramClass::V4), Some(&era)).unwrap_err();
assert!(err.to_string().contains("class v4 pack without IGNEUM_ERA_SEED_HEX"), "{err}");
// the v3 pack of the same seeds is unchanged by the v4 class existing
assert_eq!(program_header(&v3.program, "test day", &v3.dataset), h3);
// the 6 October trap: a v4 program stamped generator 3 (the CLI's old --era path) is refused for its shadow
// block, whatever class is wanted; and a generator 4 header without the block is refused too
let stamped3 = h4.replace("#define IGNEUM_GENERATOR 4\n", "#define IGNEUM_GENERATOR 3\n").replace("#define IGNEUM_PROGRAM_CLASS \"v4\"\n", "#define IGNEUM_PROGRAM_CLASS \"v3\"\n");
let err = verify_pack_texts(&stamped3, None, &e, &d).unwrap_err();
assert!(matches!(err, PackFault::Disagree(_)) && err.to_string().contains("shadow block"), "{err}");
assert!(verify_pack_texts_chain(&stamped3, None, &e, &d, Some(ProgramClass::V3), Some(&era)).is_err());
let no_shadow = h4.replace("#define IGNEUM_SHADOW_INSTRS 256\n", "");
let err = verify_pack_texts(&no_shadow, None, &e, &d).unwrap_err();
assert!(matches!(err, PackFault::Disagree(_)) && err.to_string().contains("without IGNEUM_SHADOW_INSTRS"), "{err}");
}
}

View file

@ -0,0 +1,114 @@
//! Seed derivation and the SplitMix64 stream, exactly as `proto-metal/main.swift` does them.
//!
//! Today a seed is a string ("igneum-genesis", "day/2026-10-03"). On the chain the epoch seed will be the
//! output of a class-group VDF over a certified checkpoint hash. [`seed_words_from_bytes`] is the function
//! boundary for that: whatever bytes the chain settles on go through the same FNV-1a construction, so the
//! generator and the day key never need to know where the bytes came from.
/// FNV-1a 64 over `bytes` with the standard basis. Used for the cache fingerprint in the packs.
pub fn fnv1a64(bytes: &[u8]) -> u64 {
fnv1a64_with_basis(0xcbf29ce484222325, bytes)
}
#[inline]
fn fnv1a64_with_basis(basis: u64, bytes: &[u8]) -> u64 {
let mut h = basis;
for &b in bytes {
h ^= b as u64;
h = h.wrapping_mul(0x100000001b3);
}
h
}
/// FNV-1a 64 over 32-bit words in little-endian byte order (the cache is hashed as raw memory).
pub fn fnv1a64_words(words: &[u32]) -> u64 {
let mut h: u64 = 0xcbf29ce484222325;
for &w in words {
for b in w.to_le_bytes() {
h ^= b as u64;
h = h.wrapping_mul(0x100000001b3);
}
}
h
}
/// The 32-byte seed (8 x u32) from arbitrary bytes: FNV-1a 64 with four salts, each finalised with the
/// murmur-style mix `h ^= h >> 33; h *= 0xff51afd7ed558ccd; h ^= h >> 33`; low word then high word.
pub fn seed_words_from_bytes(bytes: &[u8]) -> [u32; 8] {
let mut words = [0u32; 8];
for salt in 0..4u64 {
let basis = 0xcbf29ce484222325u64 ^ salt.wrapping_mul(0x9E3779B97F4A7C15);
let mut h = fnv1a64_with_basis(basis, bytes);
h ^= h >> 33;
h = h.wrapping_mul(0xff51afd7ed558ccd);
h ^= h >> 33;
words[2 * salt as usize] = h as u32;
words[2 * salt as usize + 1] = (h >> 32) as u32;
}
words
}
/// The 32-byte seed from a string (its UTF-8 bytes). `seedWords` in the Swift.
pub fn seed_words(s: &str) -> [u32; 8] {
seed_words_from_bytes(s.as_bytes())
}
/// The day key: the 8 words of `seed_words("day/" + day)`. `K` in MEMHARD.md; `d0, d1` are `K[0], K[1]`.
pub fn day_key(day: &str) -> [u32; 8] {
seed_words(&format!("day/{day}"))
}
/// SplitMix64, the one deterministic stream every draw in the prototype comes from.
#[derive(Clone, Copy, Debug)]
pub struct SplitMix64 {
pub s: u64,
}
impl SplitMix64 {
pub fn new(s: u64) -> Self {
Self { s }
}
#[inline]
pub fn next(&mut self) -> u64 {
self.s = self.s.wrapping_add(0x9E3779B97F4A7C15);
let mut z = self.s;
z = (z ^ (z >> 30)).wrapping_mul(0xBF58476D1CE4E5B9);
z = (z ^ (z >> 27)).wrapping_mul(0x94D049BB133111EB);
z ^ (z >> 31)
}
/// `next() % n` as the Swift `below` does it (modulo, not rejection sampling).
#[inline]
pub fn below(&mut self, n: u64) -> u64 {
self.next() % n
}
}
/// The generator's stream for a seed: `(w0 | w1 << 32) ^ ((w2 | w3 << 32) * 0x9E3779B97F4A7C15)`.
pub fn program_rng(seed: &[u32; 8]) -> SplitMix64 {
let lo = seed[0] as u64 | ((seed[1] as u64) << 32);
let hi = seed[2] as u64 | ((seed[3] as u64) << 32);
SplitMix64::new(lo ^ hi.wrapping_mul(0x9E3779B97F4A7C15))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn genesis_seed_words() {
// From proto-cuda/packs/igneum-genesis/program.json.
assert_eq!(
seed_words("igneum-genesis"),
[0x67a9a7be, 0x1a155b25, 0xfddfb732, 0x4b5af2e8, 0xc55caf33, 0xa27c13b7, 0x06628a48, 0x03852469]
);
}
#[test]
fn day_key_2026_10_03() {
// MEMHARD.md section 1.1.
assert_eq!(
day_key("2026-10-03"),
[0x3067619f, 0x3c269176, 0x84a03b03, 0xf8c63294, 0xff977c5b, 0xe60def3e, 0x63630141, 0xb8fbcb58]
);
}
}

View file

@ -0,0 +1,287 @@
//! Class v5, proof of stored state and of following (`docs/design/class-v5-stored-state.md`, 7 October 2026): the
//! leaves the item derivation XORs in (section 2 of the page), built from the canonical state stream of the
//! window's reference block.
//!
//! `D[i] = Blake2b-512("igneum-sd1/" || root || i_le32 || record_i)` for the `n` records of the stream, and item
//! `t` takes `leaf(t) = D[t mod n]`: every item is keyed by the state, so a hasher without it is wrong on every
//! item (the known-failed case, the first test). When the stream has more records than the dataset has items, the
//! records are ordered by `Blake2b-256("igneum-sd1-sample/" || root || record)` and the first `items` are taken, a
//! sample nobody can choose without the whole state and the root.
//!
//! The stream file (`StateStream`): the plain format every side reads without a serialisation library, `IGSD1\0`,
//! the chain block number (le64) and hash (32), the state root (32), the record count (le32), then each record as
//! its length (le32) and bytes. The node's executor writes it (`igneum/exec/src/day_stream.rs`), the miner fetches
//! it, the CLI's `--state` reads it, and a pack carries the leaves it yields as `leaves.bin`.
use crate::blake2b::{blake2b_256, blake2b_512};
use crate::seed::fnv1a64_words;
pub const LEAF_TAG: &[u8] = b"igneum-sd1/";
pub const SAMPLE_TAG: &[u8] = b"igneum-sd1-sample/";
pub const STREAM_MAGIC: &[u8; 6] = b"IGSD1\0";
/// The canonical state stream at one chain block: what the executor serialises and what the leaves derive from.
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct StateStream {
pub number: u64,
pub block: [u8; 32],
pub root: [u8; 32],
pub records: Vec<Vec<u8>>,
}
impl StateStream {
pub fn encode(&self) -> Vec<u8> {
let mut b = Vec::with_capacity(6 + 8 + 32 + 32 + 4 + self.records.iter().map(|r| 4 + r.len()).sum::<usize>());
b.extend_from_slice(STREAM_MAGIC);
b.extend_from_slice(&self.number.to_le_bytes());
b.extend_from_slice(&self.block);
b.extend_from_slice(&self.root);
b.extend_from_slice(&(self.records.len() as u32).to_le_bytes());
for r in &self.records {
b.extend_from_slice(&(r.len() as u32).to_le_bytes());
b.extend_from_slice(r);
}
b
}
pub fn decode(bytes: &[u8]) -> Result<StateStream, String> {
if bytes.len() < 6 + 8 + 32 + 32 + 4 || &bytes[..6] != STREAM_MAGIC {
return Err("not a state stream file (magic IGSD1)".into());
}
let mut at = 6;
let number = u64::from_le_bytes(bytes[at..at + 8].try_into().unwrap());
at += 8;
let block: [u8; 32] = bytes[at..at + 32].try_into().unwrap();
at += 32;
let root: [u8; 32] = bytes[at..at + 32].try_into().unwrap();
at += 32;
let n = u32::from_le_bytes(bytes[at..at + 4].try_into().unwrap()) as usize;
at += 4;
let mut records = Vec::with_capacity(n.min(1 << 20));
for i in 0..n {
if at + 4 > bytes.len() {
return Err(format!("state stream truncated at record {i} of {n}"));
}
let len = u32::from_le_bytes(bytes[at..at + 4].try_into().unwrap()) as usize;
at += 4;
if at + len > bytes.len() {
return Err(format!("state stream truncated inside record {i} of {n}"));
}
records.push(bytes[at..at + len].to_vec());
at += len;
}
if at != bytes.len() {
return Err(format!("state stream has {} trailing bytes", bytes.len() - at));
}
Ok(StateStream { number, block, root, records })
}
pub fn read_file(path: &std::path::Path) -> Result<StateStream, String> {
let bytes = std::fs::read(path).map_err(|e| format!("read {}: {e}", path.display()))?;
Self::decode(&bytes)
}
}
/// `D[i]`: the 64-byte digest of record `i` under `root`, as 16 little-endian words.
pub fn leaf_digest(root: &[u8; 32], i: u32, record: &[u8]) -> [u32; 16] {
let d = blake2b_512(&[LEAF_TAG, root, &i.to_le_bytes(), record]);
let mut w = [0u32; 16];
for (k, x) in w.iter_mut().enumerate() {
*x = u32::from_le_bytes(d[k * 4..k * 4 + 4].try_into().unwrap());
}
w
}
/// The sample order key of a record under `root`.
pub fn sample_key(root: &[u8; 32], record: &[u8]) -> [u8; 32] {
blake2b_256(&[SAMPLE_TAG, root, record])
}
/// The leaves of one window (or day) of class v5: `n` digests of 64 bytes, `leaf(t) = D[t mod n]`.
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct StateLeaves {
pub root: [u8; 32],
pub block: [u8; 32],
pub number: u64,
/// Records in the stream before any sample.
pub records_total: u64,
/// Whether the stream had more records than the dataset has items (the sample rule applied).
pub sampled: bool,
leaves: Vec<[u32; 16]>,
}
impl StateLeaves {
/// The items a dataset of `2^log2_words` words has: `2^(log2_words - 4)`.
pub fn items_of(log2_words: u32) -> u64 {
1u64 << log2_words.saturating_sub(4)
}
/// The leaves of `records` (canonical order) under `root` for a dataset of `2^log2_words` words. An empty stream
/// yields one leaf, the digest of the empty record, so `n` is never 0.
pub fn build(root: [u8; 32], block: [u8; 32], number: u64, records: &[Vec<u8>], log2_words: u32) -> StateLeaves {
let items = Self::items_of(log2_words);
let records_total = records.len() as u64;
let empty: Vec<Vec<u8>> = vec![Vec::new()];
let records = if records.is_empty() { &empty[..] } else { records };
let sampled = records.len() as u64 > items;
let chosen: Vec<&Vec<u8>> = if sampled {
let mut keyed: Vec<([u8; 32], &Vec<u8>)> = records.iter().map(|r| (sample_key(&root, r), r)).collect();
keyed.sort_unstable_by(|a, b| a.0.cmp(&b.0).then_with(|| a.1.cmp(b.1)));
keyed.into_iter().take(items as usize).map(|(_, r)| r).collect()
} else {
records.iter().collect()
};
let leaves = chosen.iter().enumerate().map(|(i, r)| leaf_digest(&root, i as u32, r)).collect();
StateLeaves { root, block, number, records_total, sampled, leaves }
}
pub fn from_stream(s: &StateStream, log2_words: u32) -> StateLeaves {
Self::build(s.root, s.block, s.number, &s.records, log2_words)
}
/// Leaves from the raw words of a `leaves.bin` (16 words per leaf), for a worker or a test that holds no stream.
pub fn from_words(root: [u8; 32], block: [u8; 32], number: u64, words: &[u32]) -> StateLeaves {
assert!(!words.is_empty() && words.len() % 16 == 0, "leaves are 16 words each");
let leaves = words.chunks_exact(16).map(|c| c.try_into().unwrap()).collect::<Vec<[u32; 16]>>();
StateLeaves { root, block, number, records_total: leaves.len() as u64, sampled: false, leaves }
}
#[inline(always)]
pub fn n(&self) -> u32 {
self.leaves.len() as u32
}
/// `leaf(t) = D[t mod n]`.
#[inline(always)]
pub fn leaf(&self, t: u32) -> &[u32; 16] {
&self.leaves[(t % self.n()) as usize]
}
pub fn leaves(&self) -> &[[u32; 16]] {
&self.leaves
}
/// The flat words of `leaves.bin`.
pub fn words(&self) -> Vec<u32> {
self.leaves.iter().flat_map(|l| l.iter().copied()).collect()
}
/// The bytes of `leaves.bin` (little-endian words).
pub fn bytes(&self) -> Vec<u8> {
self.words().iter().flat_map(|w| w.to_le_bytes()).collect()
}
/// FNV-1a 64 over the leaves as little-endian bytes (the pack's `IGNEUM_STATE_LEAVES_FNV64`).
pub fn fnv1a64(&self) -> u64 {
fnv1a64_words(&self.words())
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::generator::{generate_class, V5_CLASS};
use crate::memhard::{derive_item_leaves, Cache, MixParams, Shape};
use crate::seed::day_key;
use crate::verify::{hash_warp, DatasetMode, DatasetSource};
use std::sync::Arc;
fn records(n: usize, salt: u8) -> Vec<Vec<u8>> {
(0..n).map(|i| vec![salt, i as u8, (i >> 8) as u8, 7]).collect()
}
fn leaves(root: u8, n: usize, log2_words: u32) -> Arc<StateLeaves> {
Arc::new(StateLeaves::build([root; 32], [0x22; 32], 5, &records(n, root), log2_words))
}
/// The known-failed case, first: a hasher without the state (no leaves, the leaves of another root, the leaves
/// of a stream one record short, the previous window's leaves) is wrong on every item and every lane.
#[test]
fn a_stateless_hasher_is_wrong_on_every_item() {
let key = day_key("2026-10-03");
let shape = Shape { mixer_mult: 8, cache_log2_words: 16, derive_len: 0, state: true };
let cache = Arc::new(Cache::fill_log2(key, 16));
let mp = MixParams::with_shape(key, shape);
let good = leaves(0x11, 93, 20);
let other_root = leaves(0x12, 93, 20);
let one_short = Arc::new(StateLeaves::build([0x13; 32], [0x22; 32], 5, &records(92, 0x11), 20)); // a record short means another root
let previous_window = leaves(0x10, 93, 20);
for (name, bad) in [("another root", other_root.clone()), ("one record short", one_short.clone()), ("the previous window", previous_window.clone())] {
let equal = (0..64u32).filter(|&t| derive_item_leaves(t * 7919, &mp, &cache, Some(&good)) == derive_item_leaves(t * 7919, &mp, &cache, Some(&bad))).count();
assert_eq!(equal, 0, "{name}: {equal} of 64 items equal");
}
let stateless = Shape { state: false, ..shape };
let mp_stateless = MixParams::with_shape(key, stateless);
let equal = (0..64u32).filter(|&t| derive_item_leaves(t * 7919, &mp, &cache, Some(&good)) == derive_item_leaves(t * 7919, &mp_stateless, &cache, None)).count();
assert_eq!(equal, 0, "no leaves at all: {equal} of 64 items equal");
// the warp: a class v5 program over a small dataset, the same program and cache, other leaves
let program = generate_class("igneum-genesis", V5_CLASS);
let ds = DatasetSource::new_shape("2026-10-03", DatasetMode::MemoryHard, 20, shape).with_leaves(good.clone());
let ds_other = DatasetSource::new_shape("2026-10-03", DatasetMode::MemoryHard, 20, shape).with_leaves(previous_window.clone());
let a = hash_warp(&program, 0, &ds);
let b = hash_warp(&program, 0, &ds_other);
assert_eq!(a.iter().zip(b.iter()).filter(|(x, y)| x == y).count(), 0, "0 of 32 lanes agree");
assert_eq!(hash_warp(&program, 0, &ds), a, "the same leaves hash the same");
}
/// Every item takes a leaf: `leaf(t) = D[t mod n]`, so items `t` and `t + n` share a leaf and still differ.
#[test]
fn every_item_is_keyed_and_the_leaf_wraps() {
let l = leaves(0x11, 93, 28);
assert_eq!(l.n(), 93);
assert!(!l.sampled);
assert_eq!(l.records_total, 93);
for t in [0u32, 1, 92, 93, 94, 1_000_000, u32::MAX] {
assert_eq!(l.leaf(t), l.leaf(t % 93));
assert_eq!(*l.leaf(t), leaf_digest(&[0x11; 32], t % 93, &records(93, 0x11)[(t % 93) as usize]));
}
let key = day_key("2026-10-03");
let shape = Shape { mixer_mult: 8, cache_log2_words: 16, derive_len: 0, state: true };
let cache = Cache::fill_log2(key, 16);
let mp = MixParams::with_shape(key, shape);
assert_ne!(derive_item_leaves(5, &mp, &cache, Some(&l)), derive_item_leaves(5 + 93, &mp, &cache, Some(&l)));
// an empty stream yields one leaf (the digest of the empty record), never a division by zero
let empty = StateLeaves::build([0x11; 32], [0; 32], 0, &[], 28);
assert_eq!(empty.n(), 1);
assert_eq!(empty.records_total, 0);
assert_eq!(*empty.leaf(12_345), leaf_digest(&[0x11; 32], 0, &[]));
}
/// Above the dataset size the records are sampled in the keyed order: a different root picks a different set,
/// and the set cannot be the first `items` records of the stream.
#[test]
fn the_sample_above_the_dataset_size_is_keyed_by_the_root() {
let recs = records(40, 0x33);
let a = StateLeaves::build([0x11; 32], [0; 32], 0, &recs, 8);
let b = StateLeaves::build([0x12; 32], [0; 32], 0, &recs, 8);
assert_eq!(StateLeaves::items_of(8), 16);
assert_eq!((a.n(), a.sampled, a.records_total), (16, true, 40));
assert_ne!(a.leaves(), b.leaves(), "another root, another sample");
// the positional first 16 are not the sample (with overwhelming probability for 40 choose 16)
let positional = StateLeaves::build([0x11; 32], [0; 32], 0, &recs[..16], 8);
assert_ne!(a.leaves(), positional.leaves());
// the same inputs sample the same
assert_eq!(StateLeaves::build([0x11; 32], [0; 32], 0, &recs, 8), a);
// at the dataset size exactly, no sample
let c = StateLeaves::build([0x11; 32], [0; 32], 0, &recs[..16], 8);
assert!(!c.sampled && c.n() == 16);
}
#[test]
fn stream_file_round_trip_and_refusals() {
let s = StateStream { number: 159_357, block: [0xaf; 32], root: [0x1c; 32], records: records(93, 1) };
let bytes = s.encode();
assert_eq!(&bytes[..6], STREAM_MAGIC);
assert_eq!(StateStream::decode(&bytes).unwrap(), s);
assert!(StateStream::decode(&bytes[..bytes.len() - 1]).is_err(), "truncated");
let mut trailing = bytes.clone();
trailing.push(0);
assert!(StateStream::decode(&trailing).is_err(), "trailing bytes");
assert!(StateStream::decode(b"IGSD0\0").is_err(), "wrong magic");
let l = StateLeaves::from_stream(&s, 28);
let back = StateLeaves::from_words(s.root, s.block, s.number, &l.words());
assert_eq!(back.leaves(), l.leaves());
assert_eq!(l.bytes().len(), 93 * 64);
assert_eq!(l.fnv1a64(), back.fnv1a64());
}
}

View file

@ -0,0 +1,935 @@
//! The CPU reference interpreter for one 32-lane warp (`cpuWarpTraced` in the Swift) and the API the node
//! calls. Dataset words come from the memory-hard cache (default) or from the closed form (old packs).
use crate::generator::{generate, generate_class, EraParams, Instr, LoadClass, Op, Program, ProgramClass, ITERATIONS, LANES};
use crate::memhard::{hot_index, HotTable, Layout, MemhardCpu, Shape};
use crate::seed::day_key;
/// The load address of an era program (`docs/plans/era-layout.md` section 1.3): `y = rotl(x * M, R)`, then the
/// window of the load site, `k = min(win, D - 26)` (0 when `D <= 26`), `idx = ((y & (MASK >> k)) | ((off &
/// (2^k - 1)) << (D - k))) & MASK`. For every other class `idx = x & MASK`, the lottery hash's address. `mask` is
/// `2^D - 1`. The acceptance mirror calls this at the rule's constant `D = 28`.
#[inline(always)]
pub fn load_index(era: Option<&EraParams>, ins: &Instr, x: u32, mask: u32, log2: u32) -> u32 {
match era {
None => x & mask,
Some(e) => {
let (wm, off) = window(ins, mask, log2);
let y = x.wrapping_mul(e.stride_mul).rotate_left(e.stride_rot);
((y & wm) | off) & mask
}
}
}
/// The window of a load site at a dataset of `2^log2` words: `(window mask, offset)` such that
/// `idx = (y & window mask) | offset` lies in the site's aligned window of `2^(log2 - k)` words.
#[inline(always)]
pub fn window(ins: &Instr, mask: u32, log2: u32) -> (u32, u32) {
let k = (ins.win as u32).min(log2.saturating_sub(26));
let wm = mask >> k;
let off = ((ins.off as u32) & ((1u32 << k) - 1)) << (log2 - k);
(wm, off)
}
/// Read-width experiment (5 October 2026): a `load` of `W` words folds every word into `dst`:
/// `x = dst XOR w[0]; for j in 1..W: x = (rotl(x, FOLD_ROT) * FOLD_MUL) XOR w[j]; dst = x`. For `W = 1` this is the
/// lottery hash's `dst XOR dataset[...]`. The fold is state-dependent (the rotate-multiply sits between the words),
/// so no function of the line alone replaces it: two different lines give two different maps of `dst`, and a
/// dataset of folded lines cannot be stored in place of the dataset (see `docs/plans/read-width.md`).
pub const FOLD_ROT: u32 = 11;
pub const FOLD_MUL: u32 = 0x9E3779B1;
/// The fold of `words` into `dst` (at least one word).
#[inline(always)]
pub fn fold_words(dst: u32, words: &[u32]) -> u32 {
let mut x = dst ^ words[0];
for &w in &words[1..] {
x = x.rotate_left(FOLD_ROT).wrapping_mul(FOLD_MUL) ^ w;
}
x
}
/// Variant 5 (scratch): the fill value of word `j` (0..2) of slot `slot` of lane `lane` of the unit at base nonce
/// `base`, under program seed words `seed`. The scratch of a unit starts as these values; a slot written during
/// the unit's hash holds what was written. Mirrored as `scr_fill` in every emitted kernel.
#[inline(always)]
pub fn scratch_fill(seed: &[u32; 8], base: u32, lane: u32, slot: u32, j: u32) -> u32 {
splitmix32(
(base.wrapping_add(lane) ^ seed[j as usize])
.wrapping_add(slot.wrapping_mul(0x9E3779B1))
.wrapping_add((j + 1).wrapping_mul(0x85EBCA77)),
)
}
/// Variant 5: the 16-byte slot after a read-modify-write that read `w` and folded to `x`: `(x ^ w1, rotl(x, 7) ^ w2,
/// x + w0)` behind the slot's tag.
#[inline(always)]
pub fn scratch_rewrite(x: u32, w: &[u32; 3]) -> [u32; 3] {
[x ^ w[1], x.rotate_left(7) ^ w[2], x.wrapping_add(w[0])]
}
/// The CPU model of one unit's scratch (variant 5): per lane, the written slots and their words. Unwritten slots
/// read as [`scratch_fill`]. A unit touches at most `scratch ops x 32` slots; a GPU keeps the real scratch per
/// resident warp with a per-unit tag per slot.
pub struct ScratchModel {
slots: usize,
written: Vec<bool>,
data: Vec<[u32; 3]>,
pub reads: usize,
pub writes: usize,
/// Soundness tests (`tests/scratch.rs`, `docs/analysis/scratch-soundness.md`): when `Some`, every
/// read-modify-write is appended as it happened. `None` on every verification path.
pub trace: Option<Vec<ScratchEvent>>,
}
/// One scratch read-modify-write as the interpreter saw it (variant 5 soundness tests).
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ScratchEvent {
pub lane: u8,
pub slot: u32,
/// The slot had been written earlier in this unit (a re-hit): the words read were a rewrite, not the fill.
pub hit: bool,
pub read: [u32; 3],
/// The fold result, the new value of `dst`.
pub x: u32,
pub written: [u32; 3],
}
impl ScratchModel {
pub fn new(slots_per_lane: usize) -> Self {
Self {
slots: slots_per_lane,
written: vec![false; LANES * slots_per_lane],
data: vec![[0; 3]; LANES * slots_per_lane],
reads: 0,
writes: 0,
trace: None,
}
}
/// Read slot `slot` of `lane`, then rewrite it from the fold result `x`. Returns the three words read.
#[inline]
pub fn rmw(&mut self, seed: &[u32; 8], base: u32, lane: usize, slot: u32, dst: u32) -> u32 {
let i = lane * self.slots + slot as usize;
let w = if self.written[i] {
self.data[i]
} else {
[
scratch_fill(seed, base, lane as u32, slot, 0),
scratch_fill(seed, base, lane as u32, slot, 1),
scratch_fill(seed, base, lane as u32, slot, 2),
]
};
let x = fold_words(dst, &w);
let out = scratch_rewrite(x, &w);
if let Some(t) = self.trace.as_mut() {
t.push(ScratchEvent { lane: lane as u8, slot, hit: self.written[i], read: w, x, written: out });
}
self.data[i] = out;
self.written[i] = true;
self.reads += 1;
self.writes += 1;
x
}
}
/// Dataset element, closed form of (day words, index). The original prototype's six-operation element.
#[inline(always)]
pub fn dataset_elem(i: u32, d0: u32, d1: u32) -> u32 {
let mut x = i ^ d0;
x = x.wrapping_mul(0x9E3779B1);
x ^= x >> 15;
x = x.wrapping_add(d1);
x = x.wrapping_mul(0x85EBCA77);
x ^= x >> 13;
x = x.wrapping_mul(0xC2B2AE3D);
x ^= x >> 16;
x
}
/// splitmix32, used for the register init.
#[inline(always)]
pub fn splitmix32(v: u32) -> u32 {
let mut x = v;
x ^= x >> 16;
x = x.wrapping_mul(0x7feb352d);
x ^= x >> 15;
x = x.wrapping_mul(0x846ca68b);
x ^= x >> 16;
x
}
/// Which construction fills the dataset words.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum DatasetMode {
/// The six-operation closed form (packs igneum-genesis and igneum-hourly). Not memory-hard.
ClosedForm,
/// The 256 MiB cache and 8 dependent reads per item (pack igneum-genesis-mh, MEMHARD.md). The default.
MemoryHard,
}
impl DatasetMode {
pub fn name(self) -> &'static str {
match self {
DatasetMode::ClosedForm => "closed-form",
DatasetMode::MemoryHard => "memory-hard",
}
}
}
/// Where the interpreter reads dataset words from.
pub enum Dataset {
ClosedForm { d0: u32, d1: u32 },
MemoryHard(MemhardCpu),
}
/// A dataset of `2^log2` words plus the construction that fills it.
pub struct DatasetSource {
pub log2_words: u32,
pub mask: u32,
/// The day key `K`; `d0, d1 = K[0], K[1]`.
pub key: [u32; 8],
/// The bytes `K` was derived from (`"day/<day>"` for a string day, `bind::day_bytes` on the chain), recorded
/// in packs so any implementation can rebuild the key. Empty when the key was given directly.
pub key_bytes: Vec<u8>,
pub dataset: Dataset,
/// The hot table of the epoch (hot-table experiment, `docs/plans/hot-table.md`): `Some` when the program's
/// class has one; filled by [`Epoch::new_class`] and [`Epoch::from_seed_bytes_class`] from the program's seed
/// bytes. A hot load reads `hot[hot_index(src, words)]`.
pub hot: Option<HotTable>,
}
impl DatasetSource {
/// Build the source for a day. Memory-hard mode fills the 256 MiB cache on the calling thread.
pub fn new(day: &str, mode: DatasetMode, log2_words: u32) -> Self {
Self::new_shape(day, mode, log2_words, Shape::V2)
}
/// [`DatasetSource::new`] with the construction's shape (mixer multiplier, cache size; Counter ASIC 2.0).
pub fn new_shape(day: &str, mode: DatasetMode, log2_words: u32, shape: Shape) -> Self {
let mut ds = Self::from_key_shape(day_key(day), mode, log2_words, shape);
ds.key_bytes = format!("day/{day}").into_bytes();
ds
}
pub fn from_key(key: [u32; 8], mode: DatasetMode, log2_words: u32) -> Self {
Self::from_key_shape(key, mode, log2_words, Shape::V2)
}
/// [`DatasetSource::from_key`] with the construction's shape. Memory-hard mode fills a cache of
/// `2^shape.cache_log2_words` words on the calling thread.
pub fn from_key_shape(key: [u32; 8], mode: DatasetMode, log2_words: u32, shape: Shape) -> Self {
assert!((4..=32).contains(&log2_words), "dataset log2 must be in 4..=32");
let mask = if log2_words == 32 { u32::MAX } else { (1u32 << log2_words) - 1 };
let dataset = match mode {
DatasetMode::ClosedForm => Dataset::ClosedForm { d0: key[0], d1: key[1] },
DatasetMode::MemoryHard => Dataset::MemoryHard(MemhardCpu::with_shape(key, shape)),
};
Self { log2_words, mask, key, key_bytes: Vec::new(), dataset, hot: None }
}
/// This source with the window's state leaves (class v5, `docs/design/class-v5-stored-state.md`): memory-hard mode
/// under a shape with `state` only.
pub fn with_leaves(mut self, leaves: std::sync::Arc<crate::state::StateLeaves>) -> Self {
match &mut self.dataset {
Dataset::MemoryHard(m) => {
assert!(m.params.shape.state, "state leaves on a dataset whose shape has no state");
m.leaves = Some(leaves);
}
Dataset::ClosedForm { .. } => panic!("state leaves on a closed-form dataset"),
}
self
}
/// A source of the same day with other leaves, the 256 MiB cache shared (the class v5 window refresh).
pub fn refreshed(&self, leaves: std::sync::Arc<crate::state::StateLeaves>) -> Self {
let dataset = match &self.dataset {
Dataset::MemoryHard(m) => Dataset::MemoryHard(m.refreshed(leaves)),
Dataset::ClosedForm { .. } => panic!("state leaves on a closed-form dataset"),
};
Self { log2_words: self.log2_words, mask: self.mask, key: self.key, key_bytes: self.key_bytes.clone(), dataset, hot: None }
}
/// A copy of this source sharing its cache (and leaves), for a caller that needs an owned source from a shared one.
pub fn refreshed_or_clone(&self) -> Self {
let dataset = match &self.dataset {
Dataset::MemoryHard(m) => Dataset::MemoryHard(crate::memhard::MemhardCpu { params: m.params.clone(), cache: m.cache.clone(), leaves: m.leaves.clone() }),
Dataset::ClosedForm { d0, d1 } => Dataset::ClosedForm { d0: *d0, d1: *d1 },
};
Self { log2_words: self.log2_words, mask: self.mask, key: self.key, key_bytes: self.key_bytes.clone(), dataset, hot: None }
}
/// The window's state leaves, when the source carries them.
pub fn leaves(&self) -> Option<&std::sync::Arc<crate::state::StateLeaves>> {
self.memhard().and_then(|m| m.leaves.as_ref())
}
/// This source with the hot table of the epoch whose program seed bytes are `seed_bytes` (`mb` MiB).
pub fn with_hot(mut self, seed_bytes: &[u8], mb: u32) -> Self {
self.hot = Some(HotTable::for_seed_bytes(seed_bytes, mb));
self
}
/// The hot table of a program's class, filled from its seed bytes (none for a class without one).
pub fn attach_hot_for(&mut self, program: &Program) {
self.hot = program.class.hot.map(|h| HotTable::for_seed_bytes(&program.seed_bytes, h.mb as u32));
}
/// The shape of the memory-hard construction ([`Shape::V2`] for the closed form, which has none).
pub fn shape(&self) -> Shape {
self.memhard().map(|m| m.shape()).unwrap_or(Shape::V2)
}
pub fn mode(&self) -> DatasetMode {
match self.dataset {
Dataset::ClosedForm { .. } => DatasetMode::ClosedForm,
Dataset::MemoryHard(_) => DatasetMode::MemoryHard,
}
}
pub fn memhard(&self) -> Option<&MemhardCpu> {
match &self.dataset {
Dataset::MemoryHard(m) => Some(m),
_ => None,
}
}
/// `dataset[w & mask]` under the linear layout (the lottery hash).
pub fn word(&self, w: u32) -> u32 {
self.word_at(Layout::LINEAR, w)
}
/// `dataset[w & mask]` under a program's layout (era layout). The closed form has no items and ignores it.
pub fn word_at(&self, layout: Layout, w: u32) -> u32 {
let w = w & self.mask;
match &self.dataset {
Dataset::ClosedForm { d0, d1 } => dataset_elem(w, *d0, *d1),
Dataset::MemoryHard(m) => m.word_at(layout, w),
}
}
/// `out[k] = dataset[idx[k]]`; indices are already masked. Returns items derived (0 for the closed form).
#[inline]
fn fetch(&self, idx: &[u32; LANES], out: &mut [u32; LANES], layout: Layout) -> usize {
match &self.dataset {
Dataset::ClosedForm { d0, d1 } => {
for k in 0..LANES {
out[k] = dataset_elem(idx[k], *d0, *d1);
}
0
}
Dataset::MemoryHard(m) => m.fetch(idx, out, layout),
}
}
/// `out[k][j] = dataset[base[k] + j]` for `j < width`; bases are masked and aligned to `width` words
/// (`width` 4 or 16, so a lane's words lie in one item). Returns items derived (0 for the closed form).
#[inline]
fn fetch_wide(&self, base: &[u32; LANES], width: usize, out: &mut [[u32; 16]; LANES], layout: Layout) -> usize {
match &self.dataset {
Dataset::ClosedForm { d0, d1 } => {
for k in 0..LANES {
for j in 0..width {
out[k][j] = dataset_elem(base[k] + j as u32, *d0, *d1);
}
}
0
}
Dataset::MemoryHard(m) => m.fetch_wide(base, width, out, layout),
}
}
}
/// The result of interpreting one warp.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct WarpResult {
pub hashes: [u64; LANES],
/// Distinct dataset items derived from the cache (0 in closed-form mode).
pub items_derived: usize,
}
#[inline(always)]
fn mulhi32(a: u32, b: u32) -> u32 {
((a as u64 * b as u64) >> 32) as u32
}
/// Interpret `program` for the 32 nonces `base_nonce .. base_nonce + 31` (wrapping). Registers are kept
/// register-major (`r[reg][lane]`) so the per-lane loops vectorise; the semantics are those of the Metal
/// and CUDA kernels instruction for instruction.
pub fn interpret_warp(program: &Program, base_nonce: u32, ds: &DatasetSource) -> WarpResult {
interpret_warp_init(program, &program.seed, base_nonce, ds)
}
/// [`interpret_warp`] with explicit init words `I` (section 1.6 of the spec). The packs use `I = program.seed`;
/// a block uses `I = bind::block_init_words(H, nonce)`.
pub fn interpret_warp_init(program: &Program, seed: &[u32; 8], base_nonce: u32, ds: &DatasetSource) -> WarpResult {
interpret_warp_scratch(program, seed, base_nonce, ds, false).0
}
/// [`interpret_warp_init`] that also returns every scratch read-modify-write of the unit in execution order
/// (lane-minor within an instruction, as the interpreter runs them) when `trace` is set; empty otherwise and for
/// a class without a scratch. For the soundness tests of variant 5 only.
pub fn interpret_warp_scratch(
program: &Program,
seed: &[u32; 8],
base_nonce: u32,
ds: &DatasetSource,
trace: bool,
) -> (WarpResult, Vec<ScratchEvent>) {
let mask = ds.mask;
let log2 = ds.log2_words;
let era = program.class.era;
let layout = program.class.layout();
let mut r = [[0u32; LANES]; 8];
for lane in 0..LANES {
let nonce = base_nonce.wrapping_add(lane as u32);
for i in 0..8 {
let mut x = nonce ^ seed[i];
x = x.wrapping_add(0x9e3779b9u32.wrapping_mul(i as u32 + 1));
x = splitmix32(x);
r[i][lane] = x ^ seed[(i + 1) & 7];
}
}
let mut items_derived = 0usize;
let mut idx = [0u32; LANES];
let mut val = [0u32; LANES];
let mut scratch = if program.has_scratch() { Some(ScratchModel::new(program.class.scratch_slots_per_lane())) } else { None };
if trace {
if let Some(m) = scratch.as_mut() {
m.trace = Some(Vec::new());
}
}
let slot_mask = program.class.scratch_slot_mask();
if program.has_hot() {
let h = ds.hot.as_ref().expect("a hot-table program needs the epoch's hot table on the dataset source");
assert_eq!(h.n_words(), program.hot_words(), "the hot table's size is the class's");
}
for _ in 0..ITERATIONS {
let sel = r[0];
for ins in &program.instrs {
step(ins, &mut r, &sel, mask, log2, era.as_ref(), layout, ds, &mut idx, &mut val, &mut items_derived);
if ins.op == Op::Scratch {
let m = scratch.as_mut().expect("a scratch op needs a scratch class");
let (d, a) = (ins.dst as usize, ins.src as usize);
for lane in 0..LANES {
let slot = r[a][lane] & slot_mask;
r[d][lane] = m.rmw(&program.seed, base_nonce, lane, slot, r[d][lane]);
}
}
}
// Latency-shadow block (Counter ASIC 3.0 item 8): the block runs `reps` times after instruction 63 with the
// iteration's `sel`; it is empty on every class without a shadow, so version 2 and class v3 run nothing here.
for _ in 0..program.shadow_reps() {
for ins in &program.shadow {
step(ins, &mut r, &sel, mask, log2, era.as_ref(), layout, ds, &mut idx, &mut val, &mut items_derived);
}
}
}
let mut hashes = [0u64; LANES];
for lane in 0..LANES {
let lo = r[0][lane] ^ r[1][lane].rotate_left(7) ^ r[2][lane].rotate_left(14) ^ r[3][lane].rotate_left(21);
let hi = r[4][lane] ^ r[5][lane].rotate_left(9) ^ r[6][lane].rotate_left(18) ^ r[7][lane].rotate_left(27);
hashes[lane] = ((hi as u64) << 32) | lo as u64;
}
let events = scratch.and_then(|m| m.trace).unwrap_or_default();
(WarpResult { hashes, items_derived }, events)
}
#[inline(always)]
#[allow(clippy::too_many_arguments)]
fn step(
ins: &Instr,
r: &mut [[u32; LANES]; 8],
sel: &[u32; LANES],
mask: u32,
log2: u32,
era: Option<&EraParams>,
layout: Layout,
ds: &DatasetSource,
idx: &mut [u32; LANES],
val: &mut [u32; LANES],
items_derived: &mut usize,
) {
let d = ins.dst as usize;
let a = ins.src as usize;
match ins.op {
Op::Add => {
let (imm, imm2, bit) = (ins.imm, ins.imm2, ins.bit as u32);
let src = r[a];
for lane in 0..LANES {
let s = (sel[lane] >> bit) & 1;
let c = if s != 0 { imm2 } else { imm };
r[d][lane] = r[d][lane].wrapping_add(src[lane]).wrapping_add(c);
}
}
Op::Sub => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = r[d][lane].wrapping_sub(src[lane]);
}
}
Op::Mul => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = r[d][lane].wrapping_mul(src[lane]);
}
}
Op::MulHi => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = mulhi32(r[d][lane], src[lane]);
}
}
Op::Xor => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] ^= src[lane];
}
}
Op::Or => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] |= src[lane];
}
}
Op::Rotl => {
let n = ins.rot;
for lane in 0..LANES {
r[d][lane] = r[d][lane].rotate_left(n);
}
}
Op::Rotr => {
let src = r[a];
for lane in 0..LANES {
r[d][lane] = r[d][lane].rotate_right(src[lane] & 31);
}
}
Op::Mad => {
let src = r[a];
let src2 = r[ins.src2 as usize];
for lane in 0..LANES {
r[d][lane] = src[lane].wrapping_mul(src2[lane]).wrapping_add(r[d][lane]);
}
}
Op::Shfl => {
let src = r[a];
let m = ins.mask as usize;
for lane in 0..LANES {
r[d][lane] ^= src[lane ^ m];
}
}
Op::Load if ins.width == 1 => {
for lane in 0..LANES {
idx[lane] = load_index(era, ins, r[a][lane], mask, log2);
}
*items_derived += ds.fetch(idx, val, layout);
for lane in 0..LANES {
r[d][lane] ^= val[lane];
}
}
Op::Load => {
// Read-width experiment: `width` words from the aligned address, every word folded into dst.
let width = ins.width as usize;
let align = !(ins.width as u32 - 1);
for lane in 0..LANES {
idx[lane] = load_index(era, ins, r[a][lane], mask, log2) & align;
}
let mut vals = [[0u32; 16]; LANES];
*items_derived += ds.fetch_wide(idx, width, &mut vals, layout);
for lane in 0..LANES {
r[d][lane] = fold_words(r[d][lane], &vals[lane][..width]);
}
}
Op::Scratch => {
// handled by the caller (interpret_warp_init), which owns the unit's scratch model
}
Op::Hot => {
// Hot-table experiment: one word of the epoch table at the multiply-shift index, plain xor fold.
let h = ds.hot.as_ref().expect("a hot load needs the hot table");
let n = h.n_words();
for lane in 0..LANES {
r[d][lane] ^= h.at(hot_index(r[a][lane], n));
}
}
Op::WLoad => {
// Lane 0's register, masked, aligned down to 32 words; lane l reads word base + l.
let base = (r[a][0] & mask) & !31;
for lane in 0..LANES {
idx[lane] = base + lane as u32;
}
*items_derived += ds.fetch(idx, val, Layout::LINEAR);
for lane in 0..LANES {
r[d][lane] ^= val[lane];
}
}
}
}
/// The 32 hashes of one warp (`cpuWarp` in the Swift).
pub fn hash_warp(program: &Program, base_nonce: u32, ds: &DatasetSource) -> [u64; LANES] {
interpret_warp(program, base_nonce, ds).hashes
}
/// Everything a node needs to verify blocks of one epoch on one day: the program for the epoch seed and the
/// dataset source for the day key. Building one in memory-hard mode fills the 256 MiB cache (about 0.2 s on
/// one core); keep it for the whole epoch and share it between threads (`&Epoch` is `Send + Sync`).
pub struct Epoch {
pub program: Program,
pub dataset: DatasetSource,
}
/// Default dataset size: 2^28 words = 1 GiB.
pub const DEFAULT_DATASET_LOG2: u32 = 28;
/// Days a day index lies after the network's genesis day (0 for the genesis day and any day before it). The node's
/// entry; the same function as `memhard::days_since_genesis`.
pub fn days_since_genesis(day_index: u64, genesis_day_index: u64) -> u64 {
crate::memhard::days_since_genesis(day_index, genesis_day_index)
}
impl Epoch {
pub fn new(seed: &str, day: &str, mode: DatasetMode, dataset_log2: u32) -> Self {
Self { program: generate(seed), dataset: DatasetSource::new(day, mode, dataset_log2) }
}
/// [`Epoch::new`] with a load class (read-width experiment; Counter ASIC 2.0: the class's mixer multiplier
/// shapes the dataset, the cache is the genesis size since a string day has no day index).
pub fn new_class(seed: &str, day: &str, mode: DatasetMode, dataset_log2: u32, class: LoadClass) -> Self {
Self::new_class_day(seed, day, mode, dataset_log2, class, 0)
}
/// [`Epoch::new_class`] on day `days_since_genesis` of the growth schedule (the cache of
/// `memhard::cache_log2_words` for a class with the growth rule; the dataset size is the caller's).
pub fn new_class_day(seed: &str, day: &str, mode: DatasetMode, dataset_log2: u32, class: LoadClass, days_since_genesis: u64) -> Self {
let shape = Shape::for_class_day(&class, days_since_genesis);
let program = generate_class(seed, class);
let mut dataset = DatasetSource::new_shape(day, mode, dataset_log2, shape);
// hot-table experiment: a hot class fills its table from the seed bytes
dataset.attach_hot_for(&program);
Self { program, dataset }
}
/// `dataset[w]` as this epoch's program reads it: under the program's layout (era layout; linear for v2).
pub fn dataset_word(&self, w: u32) -> u32 {
self.dataset.word_at(self.program.class.layout(), w)
}
/// The production shape: memory-hard, 1 GiB dataset.
pub fn memory_hard(seed: &str, day: &str) -> Self {
Self::new(seed, day, DatasetMode::MemoryHard, DEFAULT_DATASET_LOG2)
}
/// The chain's shape: program from the 32-byte epoch seed (devnet: the epoch block hash; later the VDF
/// output) through the version 2 generator and its acceptance rule, and the cache from
/// `seed_words_from_bytes(day_bytes)` (`bind::day_bytes`). Memory-hard, 1 GiB dataset. `label` is only
/// recorded in emitted packs.
pub fn from_seed_bytes(epoch_seed: &[u8], day_bytes: &[u8], label: &str) -> Self {
Self::from_seed_bytes_class(epoch_seed, day_bytes, label, LoadClass::V2)
}
/// [`Epoch::from_seed_bytes`] with a load class (read-width experiment; Counter ASIC 2.0: the class's mixer
/// multiplier shapes the dataset). Day 0 of the growth schedule: the 2^26-word cache and the 2^28-word dataset,
/// which is every devnet pack and vector. A node past the first doubling calls [`Epoch::from_seed_bytes_day`].
pub fn from_seed_bytes_class(epoch_seed: &[u8], day_bytes: &[u8], label: &str, class: LoadClass) -> Self {
Self::from_seed_bytes_day(epoch_seed, day_bytes, label, class, 0, DEFAULT_DATASET_LOG2)
}
/// The chain's shape on day `days_since_genesis` (`memhard::days_since_genesis(day_index(header), day_index(genesis))`,
/// the node's two day indices): the program of the class, and under the class's growth rule the cache of
/// `memhard::cache_log2_words(d)` and the dataset of `memhard::dataset_log2_words(genesis_dataset_log2, d)`
/// (the genesis size is 28 for the 1 GiB devnet, 29 for the designed 2 GiB). Without the growth rule the cache
/// is 2^26 words and the dataset `2^genesis_dataset_log2` on every day.
pub fn from_seed_bytes_day(epoch_seed: &[u8], day_bytes: &[u8], label: &str, class: LoadClass, days_since_genesis: u64, genesis_dataset_log2: u32) -> Self {
let program = crate::generator::generate_from_seed_bytes_class(label, epoch_seed, class);
let key = crate::seed::seed_words_from_bytes(day_bytes);
let shape = Shape::for_class_day(&class, days_since_genesis);
let dataset_log2 = if class.growth { crate::memhard::dataset_log2_words(genesis_dataset_log2, days_since_genesis) } else { genesis_dataset_log2 };
let mut dataset = DatasetSource::from_key_shape(key, DatasetMode::MemoryHard, dataset_log2, shape);
dataset.key_bytes = day_bytes.to_vec();
dataset.attach_hot_for(&program);
Self { program, dataset }
}
/// The chain's shape with the program class (Counter ASIC 2.0, 5 October 2026): what the node's engine and the
/// miner's pack export build from the seeds a block template carries. Class v2 is [`Epoch::from_seed_bytes`]
/// exactly (the era bytes are ignored and not recorded); class v3 draws from [`crate::generator::V3_CLASS`]
/// with generator version 3 and records the era seed bytes (`E_n`) in the program for the pack.
pub fn from_chain_seeds(epoch_seed: &[u8], day_bytes: &[u8], era_bytes: Option<&[u8]>, class: ProgramClass, label: &str) -> Self {
Self { program: Self::chain_program(epoch_seed, era_bytes, class, label), dataset: Self::chain_dataset(day_bytes, class) }
}
/// The program alone of [`Epoch::from_chain_seeds`] (no cache fill): for an engine that shares the day's cache.
pub fn chain_program(epoch_seed: &[u8], era_bytes: Option<&[u8]>, class: ProgramClass, label: &str) -> Program {
crate::generator::generate_from_seed_bytes_program_class(label, epoch_seed, class, era_bytes)
}
/// [`Epoch::chain_program`] at a rung of the latency ladder (`docs/design/latency-ladder.md`): `shadow_reps` is
/// the shadow pass count the chain's step gives the epoch (0 = the class's own, which is [`Epoch::chain_program`]
/// byte for byte). The node's engine and the miner's pack export call this with the step the template names.
pub fn chain_program_shadow(epoch_seed: &[u8], era_bytes: Option<&[u8]>, class: ProgramClass, shadow_reps: u16, label: &str) -> Program {
crate::generator::generate_from_seed_bytes_program_class_shadow(label, epoch_seed, class, era_bytes, shadow_reps)
}
/// The day's cache and dataset of [`Epoch::from_chain_seeds`], the one entry the node's engine builds a day
/// cache through. The class is an argument because the Counter ASIC 2.0 integration gives class v3 its own item
/// construction (the mixer multiplier) and cache size schedule (ca2-mixer); today both classes build the day of
/// [`Epoch::from_seed_bytes`], and the engine keys its day caches on `(day, class)` so the two never share one.
pub fn chain_dataset(day_bytes: &[u8], class: ProgramClass) -> DatasetSource {
Self::chain_dataset_day(day_bytes, class, 0, DEFAULT_DATASET_LOG2)
}
/// [`Epoch::chain_dataset`] with the day's position since genesis and the network's genesis dataset size: the
/// entry the node's engine and the miner's export build every day cache through, so the cache growth schedule
/// of spec 01 section 1.13.3 has one place to act (ca2-mixer, 5 October 2026, `docs/plans/mixer-x4.md`): the
/// class's load class gives the mixer multiplier and whether the growth rule applies (`Shape::for_class_day`);
/// under the rule the cache is `2^memhard::cache_log2_words(d)` words and the dataset
/// `2^memhard::dataset_log2_words(genesis_dataset_log2, d)`; without it (class v2) the cache is 2^26 words and
/// the dataset the genesis size on every day. `days_since_genesis` is [`days_since_genesis`] of the block's and
/// the genesis header's day indices.
pub fn chain_dataset_day(day_bytes: &[u8], class: ProgramClass, days_since_genesis: u64, genesis_dataset_log2: u32) -> DatasetSource {
let lc = class.load_class();
let shape = Shape::for_class_day(&lc, days_since_genesis);
let dataset_log2 = if lc.growth { crate::memhard::dataset_log2_words(genesis_dataset_log2, days_since_genesis) } else { genesis_dataset_log2 };
let key = crate::seed::seed_words_from_bytes(day_bytes);
let mut dataset = DatasetSource::from_key_shape(key, DatasetMode::MemoryHard, dataset_log2, shape);
dataset.key_bytes = day_bytes.to_vec();
dataset
}
/// The 32 hashes of the warp starting at `base_nonce`.
pub fn hash_warp(&self, base_nonce: u32) -> [u64; LANES] {
hash_warp(&self.program, base_nonce, &self.dataset)
}
pub fn interpret_warp(&self, base_nonce: u32) -> WarpResult {
interpret_warp(&self.program, base_nonce, &self.dataset)
}
/// The hash of one nonce. The verification unit is a warp, so the 31 sibling nonces of the aligned
/// 32-nonce group are computed too (the shuffles couple the lanes).
pub fn hash(&self, nonce: u32) -> u64 {
self.hash_warp(nonce & !31)[(nonce & 31) as usize]
}
/// `hash(nonce) <= target`. The hash is 64 bits; the fork maps it into its 256-bit target space.
pub fn verify_block(&self, nonce: u32, target: u64) -> bool {
self.hash(nonce) <= target
}
}
/// One-shot `verify_block(seed, nonce, target)`: builds the epoch (cache fill included) and checks. For a
/// node use [`Epoch`] and keep it; this exists for scripts and tests.
pub fn verify_block(seed: &str, day: &str, nonce: u32, target: u64) -> bool {
Epoch::memory_hard(seed, day).verify_block(nonce, target)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn closed_form_head_matches_pack() {
// vectors.json dataset_head for igneum-genesis (closed form), day 2026-10-03.
let ds = DatasetSource::new("2026-10-03", DatasetMode::ClosedForm, 28);
assert_eq!(ds.word(0), 0x82174c0f);
assert_eq!(ds.word(1), 0x577bdb9c);
assert_eq!(ds.word(0x0fffffff), 0xf78c84a4);
}
/// Read-width experiment: the fold for one word is a plain xor; a wide fetch hands each lane the words the
/// scalar path would; two distinct lines give two distinct maps of dst (one point suffices as a smoke check).
#[test]
fn fold_and_wide_fetch() {
assert_eq!(fold_words(0x1234_5678, &[0xdead_beef]), 0x1234_5678 ^ 0xdead_beef);
let w = [1u32, 2, 3, 4];
let x = fold_words(7, &w);
let mut y: u32 = 7 ^ 1;
for &v in &w[1..] {
y = y.rotate_left(FOLD_ROT).wrapping_mul(FOLD_MUL) ^ v;
}
assert_eq!(x, y);
assert_ne!(fold_words(7, &[1, 2, 3, 4]), fold_words(7, &[1, 2, 3, 5]));
let ds = DatasetSource::new("2026-10-03", DatasetMode::MemoryHard, 20);
let mut base = [0u32; LANES];
for (k, b) in base.iter_mut().enumerate() {
*b = ((k as u32).wrapping_mul(0x9E37_79B1) & ds.mask) & !15;
}
let mut out = [[0u32; 16]; LANES];
let items = ds.fetch_wide(&base, 16, &mut out, Layout::LINEAR);
assert!(items >= 1 && items <= LANES);
for k in 0..LANES {
for j in 0..16 {
assert_eq!(out[k][j], ds.word(base[k] + j as u32), "lane {k} word {j}");
}
}
let mut base4 = base;
for b in base4.iter_mut() {
*b += 8;
}
let items4 = ds.fetch_wide(&base4, 4, &mut out, Layout::LINEAR);
assert_eq!(items4, items);
for k in 0..LANES {
for j in 0..4 {
assert_eq!(out[k][j], ds.word(base4[k] + j as u32));
}
}
}
/// A wide-load program interprets identically on the closed form and through the memory-hard path's fold
/// (the same fold code), and a mixed-class epoch builds and hashes.
/// Variant 5: a fill word is deterministic, a rewrite changes the slot, and a second read of a written slot
/// returns the rewrite, not the fill.
#[test]
fn scratch_model() {
let seed = [1u32, 2, 3, 4, 5, 6, 7, 8];
assert_eq!(scratch_fill(&seed, 32, 3, 100, 1), scratch_fill(&seed, 32, 3, 100, 1));
assert_ne!(scratch_fill(&seed, 32, 3, 100, 1), scratch_fill(&seed, 32, 3, 100, 2));
assert_ne!(scratch_fill(&seed, 32, 3, 100, 1), scratch_fill(&seed, 64, 3, 100, 1));
let mut m = ScratchModel::new(256);
let w = [scratch_fill(&seed, 32, 3, 100, 0), scratch_fill(&seed, 32, 3, 100, 1), scratch_fill(&seed, 32, 3, 100, 2)];
let x = m.rmw(&seed, 32, 3, 100, 0xabcd);
assert_eq!(x, fold_words(0xabcd, &w));
let x2 = m.rmw(&seed, 32, 3, 100, 0xabcd);
assert_eq!(x2, fold_words(0xabcd, &scratch_rewrite(x, &w)));
assert_eq!(m.reads, 2);
let e = Epoch::new_class("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 20, LoadClass::scratch(4, 128));
assert_eq!(e.program.scratch_ops_per_hash(), 32);
assert_eq!(e.hash_warp(0), e.hash_warp(0));
}
/// Era layout: the load address stays inside the site's window and below the mask at every dataset size (the
/// window floor of 2^26 words clamps the shrink), the interleaved memory-hard dataset reads item(t(w))[j(w)] and
/// is the same prefix at 2^20 and 2^22 words, the wide fetch agrees word for word, and an era epoch hashes
/// deterministically through the interpreter and the single-nonce API.
#[test]
fn era_windows_layout_and_epochs() {
let eb = EraParams::test_era_bytes("igneum-era-test/1");
let c = LoadClass::era(LoadClass::V2, &eb, &[1]);
let e = c.era.unwrap();
let mut ins = Instr { op: Op::Load, dst: 0, src: 1, src2: 0, imm: 0, imm2: 0, rot: 1, bit: 0, mask: 1, width: 1, win: 2, off: 3 };
let mut s = crate::seed::SplitMix64::new(7);
for log2 in [20u32, 26, 27, 28, 29] {
let mask = (1u64 << log2) as u32 - 1;
let k = ins.win.min(log2.saturating_sub(26) as u8) as u32;
for _ in 0..1000 {
let x = s.next() as u32;
let idx = load_index(Some(&e), &ins, x, mask, log2);
assert!(idx <= mask);
let (wm, off) = window(&ins, mask, log2);
assert_eq!(idx & !wm, off, "log2 {log2}");
assert_eq!(wm, mask >> k);
assert_eq!(idx, ((x.wrapping_mul(e.stride_mul).rotate_left(e.stride_rot) & wm) | off) & mask);
}
}
ins.win = 0;
assert_eq!(load_index(None, &ins, 0xdead_beef, 0x0fff_ffff, 28), 0xdead_beef & 0x0fff_ffff);
// the interleaved dataset: one day cache, the layout per program
let l = e.layout();
assert_eq!(l.pos, [1, 3, 8, 13]);
let small = DatasetSource::new("2026-10-03", DatasetMode::MemoryHard, 20);
let big = DatasetSource::new("2026-10-03", DatasetMode::MemoryHard, 22);
let m = small.memhard().unwrap();
for w in [0u32, 1, 4, 5, 255, 256, 4095, 8192, 0x0f_ffff] {
let (t, j) = l.split(w);
assert_eq!(small.word_at(l, w), crate::memhard::derive_item(t, &m.params, &m.cache)[j as usize], "w {w}");
assert_eq!(small.word_at(l, w), big.word_at(l, w), "prefix at w {w}");
assert_eq!(small.word(w), small.word_at(Layout::LINEAR, w));
}
let mut idx = [0u32; LANES];
for (k, i) in idx.iter_mut().enumerate() {
*i = (k as u32).wrapping_mul(0x9E37_79B1) & small.mask;
}
let mut out = [0u32; LANES];
small.fetch(&idx, &mut out, l);
for k in 0..LANES {
assert_eq!(out[k], small.word_at(l, idx[k]));
}
// a 16-byte era: the wide fetch keeps a lane's four words in one item
let eb3 = EraParams::test_era_bytes("igneum-era-test/3");
let c3 = LoadClass::era(LoadClass::fixed(4, 16), &eb3, &[4]);
let l3 = c3.layout();
assert_eq!(l3.pos[..2], [0, 1]);
let mut base = [0u32; LANES];
for (k, b) in base.iter_mut().enumerate() {
*b = ((k as u32).wrapping_mul(0x9E37_79B1) & small.mask) & !3;
}
let mut wide = [[0u32; 16]; LANES];
small.fetch_wide(&base, 4, &mut wide, l3);
for k in 0..LANES {
for j in 0..4 {
assert_eq!(wide[k][j], small.word_at(l3, base[k] + j as u32), "lane {k} word {j}");
}
}
// era epochs hash deterministically, differ per era, and the single-nonce API agrees with the warp
let mut seen = std::collections::HashSet::new();
for (n, c) in [(1u64, c), (3, c3)] {
let ep = Epoch::new_class("igneum-genesis", "2026-10-03", DatasetMode::MemoryHard, 20, c);
assert_eq!(ep.dataset_word(5), ep.dataset.word_at(c.layout(), 5));
let a = ep.hash_warp(64);
assert_eq!(a, ep.hash_warp(64));
assert_eq!(ep.hash(64 + 5), a[5]);
assert!(seen.insert(a[0]), "era {n}");
let closed = Epoch::new_class("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 20, c);
assert_ne!(closed.hash_warp(64), a);
}
}
/// Hot-table experiment: an epoch of a hot class carries the table, hashes deterministically and differs from
/// version 2; the reference interpreter agrees with a hand-stepped hot load; a hot program without its table is
/// refused.
#[test]
fn hot_epochs_hash() {
let e = Epoch::new_class("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 20, LoadClass::hot(32, 4));
let h = e.dataset.hot.as_ref().expect("the epoch fills the hot table");
assert_eq!(h.n_words(), 1 << 23);
assert_eq!(h.key, crate::memhard::hot_key(b"igneum-genesis"));
let v2 = Epoch::new_class("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 20, LoadClass::V2);
let a = e.hash_warp(0);
assert_eq!(a, e.hash_warp(0));
assert_ne!(a, v2.hash_warp(0));
assert_ne!(a[0], a[1]);
// the same program under a 64 MiB table reads other words
let e64 = Epoch::new_class("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 20, LoadClass::hot(64, 4));
assert_eq!(e64.program.instrs, e.program.instrs);
assert_ne!(e64.hash_warp(0), a);
// from seed bytes, the chain's shape, with a hot class
let genesis = crate::bind::unhex("edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07").unwrap();
let ec = Epoch::from_seed_bytes_class(&genesis, &crate::bind::day_bytes(20_730), "devnet", LoadClass::hot(32, 2));
assert_eq!(ec.dataset.hot.as_ref().unwrap().key, crate::memhard::hot_key(&genesis));
assert_eq!(ec.hash_warp(0), ec.hash_warp(0));
}
#[test]
#[should_panic(expected = "needs the epoch's hot table")]
fn hot_program_without_a_table_is_refused() {
let p = generate_class("igneum-genesis", LoadClass::hot(32, 4));
let ds = DatasetSource::new("2026-10-03", DatasetMode::ClosedForm, 20);
let _ = hash_warp(&p, 0, &ds);
}
#[test]
fn wide_class_epochs_hash() {
for name in ["w16", "w64x4", "50,35,15"] {
let c = LoadClass::parse(name).unwrap();
let e = Epoch::new_class("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 20, c);
assert_eq!(e.program.class, c);
let a = e.hash_warp(0);
let b = e.hash_warp(0);
assert_eq!(a, b);
assert_ne!(a[0], a[1]);
}
}
#[test]
fn closed_form_genesis_vector_lane0() {
// Generator v2 vectors (4 October 2026), proto-cuda/packs/igneum-genesis/vectors.json.
let e = Epoch::new("igneum-genesis", "2026-10-03", DatasetMode::ClosedForm, 28);
let w = e.hash_warp(0);
assert_eq!(w[0], 0x31e7555c3dfd007f);
assert_eq!(w[31], 0xaab617183923ab2a);
assert_eq!(e.hash(0), w[0]);
assert_eq!(e.hash(31), w[31]);
assert!(e.verify_block(0, u64::MAX));
assert!(e.verify_block(0, w[0]));
assert!(!e.verify_block(0, w[0] - 1));
}
}

View file

@ -0,0 +1,275 @@
//! The per-day item-derivation program (Counter ASIC 3.0 item 2, `docs/plans/counter-asic-3-derivation.md`): the
//! soundness runs on the CPU.
//!
//! 1. By hand: the derived item of class dr736 restated with the scalar reference on a small cache equals the
//! verifier's batched (SoA) derivation, at the item boundary and the index wrap.
//! 2. The v2 and v3 paths are untouched: the derivation field is 0 on both, their items are the fixed-mixer items.
//! 3. Determinism and the stream: two epochs agree on every vector and file; the program is the continuation of the
//! mixer's stream (the first draw of the program follows the 40 mixer draws); a different day draws a different
//! program; the class is in the program id and the name.
//! 4. Stats beside x8: bit balance and single-bit avalanche of the derived items and of the hash, on the same seeds.
//! 5. A program whose text is the kernels': every instruction's C text evaluated by hand on one state matches the
//! scalar reference (the text forms are what Metal, CUDA and OpenCL compile).
use igneum_pow::derive::{instr_text, run_round_scalar, DOp, DeriveProgram, DERIVE_LEN_X8, DERIVE_PROGRAMS};
use igneum_pow::emit::export_pack;
use igneum_pow::generator::{generate_from_seed_bytes_class, LoadClass, V3_CLASS};
use igneum_pow::memhard::{derive_item, derive_items, mixer, round_key, Cache, MixParams, Shape, ITEM_ROUNDS};
use igneum_pow::seed::{day_key, SplitMix64};
use igneum_pow::verify::{DatasetMode, DatasetSource, Epoch};
const DAY: &str = "2026-10-03";
/// The item of a derivation class restated by hand with the scalar reference.
fn item_by_hand(t: u32, mp: &MixParams, cache: &Cache) -> [u32; 16] {
let prog = mp.derive.as_ref().expect("a derivation class");
let mut s = [0u32; 16];
s[..8].copy_from_slice(&mp.key);
for i in 0..8 {
s[8 + i] = t.wrapping_mul(mp.mul[i]).wrapping_add(mp.rc[i]);
}
for r in 0..ITEM_ROUNDS {
run_round_scalar(&prog.rounds[r], &mut s);
let line = cache.line(s[0]);
for i in 0..16 {
s[i] ^= line[i];
}
}
run_round_scalar(&prog.rounds[ITEM_ROUNDS], &mut s);
s
}
#[test]
fn derived_item_by_hand_and_in_batches() {
let key = day_key(DAY);
let cache = Cache::fill_log2(key, 16);
let shape = Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: DERIVE_LEN_X8, state: false };
let mp = MixParams::with_shape(key, shape);
let prog = mp.derive.as_ref().unwrap();
assert_eq!(prog.rounds.len(), DERIVE_PROGRAMS);
assert!(prog.check().is_ok());
assert_eq!(shape.derive_instrs_per_item(), 9 * DERIVE_LEN_X8);
assert_eq!(shape.mixers_per_item(), 0);
for t in [0u32, 1, 2, 15, 16, 17, 12_345, (1 << 28) - 1, u32::MAX - 1, u32::MAX] {
assert_eq!(derive_item(t, &mp, &cache), item_by_hand(t, &mp, &cache), "t {t}");
}
// a batch of 32 distinct items against one at a time, and a short batch
let ts: Vec<u32> = (0..32).map(|k| k * 7_919 + 3).collect();
let mut out = [[0u32; 16]; 32];
derive_items(&ts, &mp, &cache, &mut out);
for (k, &t) in ts.iter().enumerate() {
assert_eq!(out[k], item_by_hand(t, &mp, &cache), "batch slot {k}");
}
let mut out5 = [[0u32; 16]; 5];
derive_items(&ts[..5], &mp, &cache, &mut out5);
assert_eq!(&out5[..], &out[..5]);
// the fixed mixer of the same key gives other items
let v3 = MixParams::with_shape(key, Shape { mixer_mult: 8, cache_log2_words: 16, derive_len: 0, state: false });
assert!(v3.derive.is_none());
assert_ne!(derive_item(0, &v3, &cache), derive_item(0, &mp, &cache));
}
#[test]
fn v2_and_v3_are_untouched() {
assert_eq!(LoadClass::V2.derive_len, 0);
assert_eq!(V3_CLASS.derive_len, 0);
assert_eq!(LoadClass::MX8.derive_len, 0);
assert_eq!(Shape::V2.derive_len, 0);
assert!(!Shape::for_class(&V3_CLASS).is_derived());
let key = day_key(DAY);
let cache = Cache::fill_log2(key, 16);
// the version 2 item restated by hand (the mixer_mult_by_hand test of memhard.rs, m = 1)
let v2 = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: 0, state: false });
let t = 12_345u32;
let mut s = [0u32; 16];
s[..8].copy_from_slice(&key);
for i in 0..8 {
s[8 + i] = t.wrapping_mul(v2.mul[i]).wrapping_add(v2.rc[i]);
}
for r in 0..8usize {
mixer(&mut s, round_key(r), &v2);
let line = cache.line(s[0]);
for i in 0..16 {
s[i] ^= line[i];
}
}
mixer(&mut s, round_key(8), &v2);
assert_eq!(derive_item(t, &v2, &cache), s);
// the mixer constants of the derivation class are the v2 draws (the stream continues after them)
let dr = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: DERIVE_LEN_X8, state: false });
assert_eq!((dr.rot, dr.mul, dr.rc), (v2.rot, v2.mul, v2.rc));
}
#[test]
fn stream_class_name_and_id() {
let key = day_key(DAY);
// the program is the continuation of the mixer stream: 40 draws, then the program
let mut rng = SplitMix64::new(key[0] as u64 | ((key[1] as u64) << 32));
for _ in 0..40 {
rng.next();
}
let expect = DeriveProgram::draw(&mut rng, DERIVE_LEN_X8);
let mp = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 26, derive_len: DERIVE_LEN_X8, state: false });
assert_eq!(mp.derive.as_ref().unwrap(), &expect);
// another day, another program; another length, another program
let other = MixParams::with_shape(day_key("2026-10-04"), Shape { mixer_mult: 1, cache_log2_words: 26, derive_len: DERIVE_LEN_X8, state: false });
assert_ne!(other.derive.as_ref().unwrap().fingerprint(), expect.fingerprint());
let short = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 26, derive_len: 368, state: false });
assert_eq!(short.derive.as_ref().unwrap().instr_count(), 9 * 368);
// the class: name, parse, id, and the v2 program stream (v2 loads, no width roll)
let c = LoadClass::DR736;
assert_eq!(c.name(), "dr736");
assert_eq!(LoadClass::parse("dr736"), Some(c));
assert_eq!(LoadClass::parse("dr368"), Some(LoadClass::MX4.with_derive(368)));
assert_eq!(LoadClass::parse("dr0"), None);
assert_eq!(LoadClass::parse("dr5000"), None);
assert!(c.v2_loads() && !c.takes_width_roll() && c.growth && c.mixer_mult == 1 && c.is_derived());
let p = generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", c);
let v2 = generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", LoadClass::V2);
let mx8 = generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", LoadClass::MX8);
assert_eq!(p.instrs, v2.instrs, "the v2 program of the seed");
assert_ne!(p.program_id(), v2.program_id());
assert_ne!(p.program_id(), mx8.program_id());
assert_ne!(
generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", LoadClass::MX4.with_derive(368)).program_id(),
p.program_id()
);
}
#[test]
fn determinism_and_pack_text() {
let a = Epoch::new_class("igneum-genesis", DAY, DatasetMode::MemoryHard, 20, LoadClass::DR736);
let b = Epoch::new_class("igneum-genesis", DAY, DatasetMode::MemoryHard, 20, LoadClass::DR736);
let pa = export_pack(&a, DAY, "test");
let pb = export_pack(&b, DAY, "test");
assert_eq!(pa.outs, pb.outs);
assert_eq!(pa.files, pb.files);
let names: Vec<&str> = pa.files.iter().map(|(n, _)| n.as_str()).collect();
assert!(names.contains(&"memhard.h") && names.contains(&"memhard.metal"));
for (name, text) in &pa.files {
if name == "memhard.h" || name == "memhard.metal" || name == "kernel.cl" {
for r in 0..DERIVE_PROGRAMS {
assert!(text.contains(&format!("mh_round_{r}(")), "{name} carries round program {r}");
}
assert!(!text.contains("mh_mixer(s,"), "{name}: no mixer application under a derivation program");
let dp = a.dataset.memhard().unwrap().params.derive.as_ref().unwrap();
// every instruction's text appears, in order, inside the round functions
let first = instr_text(&dp.rounds[0][0]);
assert!(text.contains(&first), "{name} carries the first instruction {first}");
}
if name == "program.h" {
assert!(text.contains("#define IGNEUM_LOAD_CLASS \"dr736\""));
assert!(text.contains("#define IGNEUM_DERIVE_LEN 736"));
assert!(text.contains("#define IGNEUM_CLASS_DERIVE_LEN 736"));
assert!(!text.contains("#define IGNEUM_MIXER_MULT"));
assert!(text.contains("#define IGNEUM_GENERATOR 2"));
}
if name == "program.json" {
assert!(text.contains("\"derive_len\": 736"));
assert!(text.contains("\"programs\": ["));
serde_json::from_str::<serde_json::Value>(text).expect("valid JSON");
}
}
// the vectors are the interpreter's
assert_eq!(pa.outs[0], a.hash_warp(0));
}
/// Bit balance and single-bit avalanche of the derived items (t flipped one bit) and of the hash, beside x8.
#[test]
fn stats_beside_x8() {
let key = day_key(DAY);
let cache = Cache::fill_log2(key, 18);
let dr = MixParams::with_shape(key, Shape { mixer_mult: 1, cache_log2_words: 18, derive_len: DERIVE_LEN_X8, state: false });
let x8 = MixParams::with_shape(key, Shape { mixer_mult: 8, cache_log2_words: 18, derive_len: 0, state: false });
for (label, mp) in [("dr736", &dr), ("x8", &x8)] {
let n = 2048u32;
let mut ones = [0u32; 512];
let mut flips = 0u64;
let mut flip_n = 0u64;
let mut seen = std::collections::HashSet::new();
for t in 0..n {
let a = derive_item(t * 2_654_435_761, mp, &cache);
assert!(seen.insert(a), "{label}: duplicate item");
for i in 0..16 {
for b in 0..32 {
ones[i * 32 + b] += (a[i] >> b) & 1;
}
}
let bit = t % 32;
let c = derive_item((t * 2_654_435_761) ^ (1 << bit), mp, &cache);
for i in 0..16 {
flips += (a[i] ^ c[i]).count_ones() as u64;
}
flip_n += 512;
}
let avalanche = flips as f64 / flip_n as f64 * 100.0;
let worst_z = ones.iter().map(|&o| ((o as f64 - n as f64 / 2.0) / (n as f64 / 4.0).sqrt()).abs()).fold(0.0, f64::max);
println!("{label}: avalanche {avalanche:.2} percent, worst bit z {worst_z:.2}");
assert!((48.5..=51.5).contains(&avalanche), "{label}: avalanche {avalanche}");
assert!(worst_z < 4.5, "{label}: worst bit z {worst_z}");
}
// the hash on the same seeds: avalanche across a nonce flip within the unit
let e = Epoch::new_class("igneum-genesis", DAY, DatasetMode::MemoryHard, 20, LoadClass::DR736);
let w0 = e.hash_warp(0);
let w1 = e.hash_warp(32);
let mut d = 0u64;
for l in 0..32 {
d += (w0[l] ^ w1[l]).count_ones() as u64;
}
let av = d as f64 / (32.0 * 64.0) * 100.0;
println!("hash unit 0 against unit 1: {av:.2} percent of bits differ");
assert!((44.0..=56.0).contains(&av));
}
/// The kernels' text forms: every form's C text, read back into the scalar reference's arithmetic by hand.
#[test]
fn text_forms_match_scalar_reference() {
let mut rng = SplitMix64::new(42);
let p = DeriveProgram::draw_candidate(&mut rng, 64, 0);
let mut s = [0u32; 16];
for (i, v) in s.iter_mut().enumerate() {
*v = 0x9e37_79b9u32.wrapping_mul(i as u32 + 1);
}
let mut seen = [false; 12];
for ins in p.rounds.iter().flatten() {
seen[ins.op as usize] = true;
let before = s;
run_round_scalar(std::slice::from_ref(ins), &mut s);
let (d, c, b) = (ins.dst as usize, ins.src as usize, ins.src2 as usize);
let (dv, cv, bv) = (before[d], before[c], before[b]);
let want = match ins.op {
DOp::Add => dv.wrapping_add(cv),
DOp::Sub => dv.wrapping_sub(cv),
DOp::Xor => dv ^ cv,
DOp::Mul => dv.wrapping_mul(cv | 1),
DOp::Rot => dv.rotate_left(ins.rot as u32).wrapping_add(cv),
DOp::XRot => (dv ^ cv).rotate_left(ins.rot as u32),
DOp::AddC => dv.wrapping_add(cv.wrapping_add(ins.imm)),
DOp::XorC => dv ^ cv ^ ins.imm,
DOp::MulC => (dv ^ cv).wrapping_mul(ins.imm),
DOp::MulC2 => dv.wrapping_mul(ins.imm).wrapping_add(cv),
DOp::AndX => dv ^ (cv & bv),
DOp::OrX => dv.wrapping_add(cv | bv),
};
assert_eq!(s[d], want, "{}", instr_text(ins));
for i in 0..16 {
if i != d {
assert_eq!(s[i], before[i], "only the destination changes: {}", instr_text(ins));
}
}
assert!(instr_text(ins).starts_with(&format!("s[{d}]")));
}
assert!(seen.iter().all(|s| *s), "64 x 9 draws cover every form");
}
/// The dataset source of the class on a day: the verifier's `word` path derives through the program.
#[test]
fn dataset_source_word_path() {
let ds = DatasetSource::new_shape(DAY, DatasetMode::MemoryHard, 20, Shape { mixer_mult: 1, cache_log2_words: 16, derive_len: DERIVE_LEN_X8, state: false });
let m = ds.memhard().unwrap();
let item = derive_item(3, &m.params, &m.cache);
for j in 0..16u32 {
assert_eq!(ds.word(3 * 16 + j), item[j as usize]);
}
assert_eq!(ds.word((1 << 20) + 5), ds.word(5), "the mask");
}

View file

@ -0,0 +1,356 @@
//! The class v3 dataset construction (mixer x4, cache growth option C; `docs/plans/mixer-x4.md`): the soundness
//! runs the brief asks for, on the CPU, with the packs for the GPU runs written on request.
//!
//! 1. Fuzz: `IGNEUM_MIXER_FUZZ` (default 200) programs through the seam (`ProgramClass::V3`), the contract on every
//! instruction (the v2 program of the seed, instruction for instruction), 4 units each across the 32-bit range
//! including the wrap, interpreted twice on the CPU; with `IGNEUM_MIXER_PACKS_OUT=<dir>` every program is written
//! as a pack with its 4 bases in vectors.json for `packbench` and the OpenCL host (the Metal fuzz).
//! 2. Stats: bit balance and single-bit-flip avalanche of the v3 hash against v2 on the same programs and nonces.
//! 3. Edge: the dataset at word 0, word MASK and the item boundary, derived through the interpreter's fetch path and
//! by hand at every multiplier 1, 2, 4, 8, on a small cache.
//! 4. Determinism: two independent epochs of the same seed and day agree on every vector and every emitted file.
//!
//! Counter ASIC 3.0 gate run (6 October 2026): `IGNEUM_MIXER_CLASS=<class>` (a `LoadClass::parse` name, for example
//! `mx8+sh256x27`) runs the fuzz, the stats and the determinism test on that class instead of `V3_CLASS`;
//! `IGNEUM_MIXER_ERA=igneum-era-test/<n>` composes that era over the class as the chain composes it inside class v3
//! (`LoadClass::era(class, E_n, &V3_ALLOWED)`, generator 3). The fuzz contract on a shadow class also checks the block:
//! `S` instructions, none a load, every field in range, and the 64 base instructions equal to the class's without the
//! shadow, draw for draw. The edge test is the dataset's alone (the shadow touches no dataset word) and takes no class.
use igneum_pow::emit::{export_pack, vectors_json};
use igneum_pow::generator::{era_generator_of, generate_era, generate_from_seed_bytes, generate_from_seed_bytes_class, generate_from_seed_bytes_program_class, EraParams, LoadClass, Op, Program, ProgramClass, GENERATOR_VERSION_V3, GENERATOR_VERSION_V4, INSTR_COUNT, V3_ALLOWED, V3_CLASS, V4_CLASS, V4_SHADOW_INSTRS};
use igneum_pow::memhard::{derive_item, mixer, round_key, Cache, MixParams, Shape};
use igneum_pow::seed::{day_key, SplitMix64};
use igneum_pow::verify::{DatasetMode, DatasetSource, Epoch};
use std::collections::HashMap;
use std::path::PathBuf;
const DAY: &str = "2026-10-03";
/// The class under test (`IGNEUM_MIXER_CLASS`, default `V3_CLASS`) and the era composed over it (`IGNEUM_MIXER_ERA`,
/// `igneum-era-test/<n>`, default none). With an era the class returned is the era class (the name carries `-era<hex>`).
fn class_under_test() -> (LoadClass, Option<[u8; 32]>) {
let class = std::env::var("IGNEUM_MIXER_CLASS").ok().map(|s| LoadClass::parse(&s).expect("a load class")).unwrap_or(V3_CLASS);
let era = std::env::var("IGNEUM_MIXER_ERA").ok().map(|s| {
assert!(s.starts_with("igneum-era-test/"), "IGNEUM_MIXER_ERA is igneum-era-test/<n>");
EraParams::test_era_bytes(&s)
});
match era {
Some(eb) => (LoadClass::era(class, &eb, &V3_ALLOWED), Some(eb)),
None => (class, None),
}
}
/// The program of `seed` under `class` (an era class carries its era bytes): the seam for `V3_CLASS`, `generate_era`
/// for an era class, the plain class generator otherwise.
fn program_of(seed: &str, class: LoadClass, era: Option<[u8; 32]>) -> Program {
match era {
Some(eb) => generate_era(seed, seed.as_bytes(), LoadClass { era: None, ..class }, &eb, &V3_ALLOWED),
None if class == V3_CLASS => generate_from_seed_bytes_program_class(seed, seed.as_bytes(), ProgramClass::V3, None),
None => generate_from_seed_bytes_class(seed, seed.as_bytes(), class),
}
}
fn contract(p: &Program, seed: &str, class: LoadClass, era: Option<[u8; 32]>) {
if class == V3_CLASS {
assert_eq!(p.generator, GENERATOR_VERSION_V3);
} else if era.is_some() {
// the generator of an era class is the class's (ca3-v4-node 7c22d0d): 4 on V4_CLASS, 3 otherwise
assert_eq!(p.generator, era_generator_of(&LoadClass { era: None, ..class }));
}
assert_eq!(p.class, class);
assert_eq!(p.instrs.len(), INSTR_COUNT);
assert_eq!(p.instrs.iter().filter(|i| i.op == Op::Load).count(), 16);
for (k, i) in p.instrs.iter().enumerate() {
assert!(i.src != i.dst, "#{k}: src == dst");
assert!((1..=31).contains(&i.rot), "#{k}: rot {}", i.rot);
assert!([1u8, 2, 4, 8, 16].contains(&i.mask), "#{k}: mask {}", i.mask);
assert!(i.dst < 8 && i.src < 8 && i.src2 < 8);
assert_eq!(i.width, 1, "#{k}: a v3 load reads one word");
}
assert!(igneum_pow::accept::check(p).is_ok(), "an accepted program");
if era.is_none() {
// no era: the base program is the v2 program of the seed (the mixer and the shadow draw nothing before it)
let v2 = generate_from_seed_bytes(seed, seed.as_bytes());
assert_eq!(p.instrs, v2.instrs, "the v2 program of the seed under the v3 construction");
assert_eq!(p.attempt, v2.attempt);
}
match class.shadow {
None => assert!(p.shadow.is_empty() && !p.has_shadow()),
Some(sh) => {
// the latency-shadow block (Counter ASIC 3.0 item 8): S ALU instructions, no load, every field in range,
// and the base program is the class's without the shadow, draw for draw (the block is drawn after it)
assert_eq!(p.shadow.len(), sh.instrs as usize, "{seed}: shadow block length");
assert!(p.has_shadow());
assert_eq!(p.shadow_instrs_per_hash(), sh.instrs as usize * sh.reps as usize * 8);
for (k, i) in p.shadow.iter().enumerate() {
assert!(!i.op.is_load() && i.op != Op::WLoad, "shadow #{k}: a load");
assert!(i.src != i.dst, "shadow #{k}: src == dst");
assert!((1..=31).contains(&i.rot), "shadow #{k}: rot {}", i.rot);
assert!([1u8, 2, 4, 8, 16].contains(&i.mask), "shadow #{k}: mask {}", i.mask);
assert!(i.dst < 8 && i.src < 8 && i.src2 < 8 && i.bit < 32, "shadow #{k}: register or bit out of range");
assert_eq!((i.width, i.win, i.off), (1, 0, 0), "shadow #{k}: no load fields");
}
let base = program_of(seed, LoadClass { shadow: None, ..class }, era);
let v4_shape = LoadClass { era: None, shadow: None, ..class } == LoadClass { shadow: None, ..V4_CLASS } && sh.instrs == V4_SHADOW_INSTRS;
if v4_shape {
// the amended class v4 (AP-F8-1, sub-version 2): on every draw path a load's source is a register
// fresh by dataflow (a load keeps freshness only from a fresh source; add, sub, xor, mad, shfl from
// either operand; rotates from their operand; or, mul, mulhi never), so its base program is its own
// stream, not class v3's; what holds is the rule itself, checked here on every load site in draw order
let mut fresh = [true; 8];
for (k, i) in p.instrs.iter().enumerate() {
let (d, a) = (i.dst as usize, i.src as usize);
if i.op.is_load() {
assert!(fresh[a], "{seed}: load #{k} reads r{} which is not fresh by dataflow", i.src);
}
fresh[d] = match i.op {
Op::Load | Op::WLoad | Op::Scratch | Op::Hot => fresh[a],
Op::Add | Op::Sub | Op::Xor | Op::Mad | Op::Shfl => fresh[d] || fresh[a],
Op::Rotl | Op::Rotr => fresh[d],
Op::Or | Op::Mul | Op::MulHi => false,
};
}
} else {
assert_eq!(p.instrs, base.instrs, "{seed}: the base program is the class's without the shadow");
assert_eq!(p.attempt, base.attempt);
}
if era.is_none() || p.generator == GENERATOR_VERSION_V4 {
// a generator-2 program carries the shadow in its id bytes; a class v4 program is generator 4
// (ca3-v4-node 7c22d0d), so its id differs from the generator-3 id of the same seeds
assert_ne!(p.program_id(), base.program_id(), "{seed}: the shadow is in the program id");
} else {
// a generator-3 program's id is program_id(3, seed, attempt), class-independent by construction
// (generator.rs program_id): under the chain's path a class v4 program shares its id with the class
// v3 program of the same seeds until the v4 seam gives it its own generator or puts the class in the
// id (Counter ASIC 3.0 gate run, 6 October 2026: an item for gates G4 and G6, not a hash fault)
assert_eq!(p.generator, GENERATOR_VERSION_V3);
if p.program_id() == base.program_id() {
println!("{seed}: generator-3 program id {:016x} is the same with and without the shadow (the v4 seam item)", p.program_id());
}
}
}
}
}
/// Write a pack whose vectors.json carries `bases` instead of the three standard bases (packbench and the OpenCL
/// host check every unit standalone and the ones inside the batch window).
fn write_pack_with_bases(dir: &PathBuf, e: &Epoch, day: &str, bases: &[u32], source: &str) {
let mut pack = export_pack(e, day, source);
let outs: Vec<[u64; 32]> = bases.iter().map(|&b| e.hash_warp(b)).collect();
let vj = vectors_json(&e.program, day, e.dataset.log2_words, bases, &outs, &pack.vectors, e.dataset.mask, source, true);
for f in pack.files.iter_mut() {
if f.0 == "vectors.json" {
f.1 = vj.clone();
}
}
pack.write_to(dir).unwrap();
}
#[test]
fn fuzz_v3_programs_cpu() {
let n: usize = std::env::var("IGNEUM_MIXER_FUZZ").ok().and_then(|s| s.parse().ok()).unwrap_or(200);
// IGNEUM_FUZZ_SEED_BASE (default 0) offsets the seed index so a continuous fuzzer (the box's capacity layer,
// infra/build-server/capacity) walks fresh programs round after round; the default run is unchanged
let base: usize = std::env::var("IGNEUM_FUZZ_SEED_BASE").ok().and_then(|s| s.parse().ok()).unwrap_or(0);
let out = std::env::var("IGNEUM_MIXER_PACKS_OUT").ok().map(PathBuf::from);
// IGNEUM_MIXER_CLASS=mx8 fuzzes the x8 candidate as a load class (generator 2 with the class in the id); the
// default is V3_CLASS through the seam; IGNEUM_MIXER_ERA composes a test era over the class (class_under_test)
let (class, era) = class_under_test();
let mut rng = SplitMix64::new(0x6967_6e65_756d_2d6d); // "igneum-m"
let shape = Shape::for_class(&class);
assert_eq!(shape.cache_log2_words, 26);
assert!(shape.mixer_mult > 1);
// one memory-hard source per dataset size (the 256 MiB cache fill is 0.2 s each)
let mut mh: HashMap<u32, DatasetSource> = HashMap::new();
let mut manifest = String::from("pack\tlog2\tprogram_id\tbases\n");
let mut units = 0usize;
let mut wraps = 0usize;
for i in base..base + n {
let seed = format!("igneum-mixer-fuzz/{i}");
let p = program_of(&seed, class, era);
contract(&p, &seed, class, era);
let b0 = (rng.below(8) as u32) * 32;
let b1 = 0x8000_0000u32.wrapping_sub(256).wrapping_add((rng.below(16) as u32) * 32);
let b2 = 0xffff_ff00u32.wrapping_add((rng.below(8) as u32) * 32);
let b3 = (rng.next() as u32) & !31;
let bases = [b0, b1, b2, b3];
wraps += bases.iter().filter(|&&b| b >= 0xffff_ff00).count();
let log2 = [24u32, 26, 28][rng.below(3) as usize];
let ds = mh.remove(&log2).unwrap_or_else(|| DatasetSource::new_shape(DAY, DatasetMode::MemoryHard, log2, shape));
let e = Epoch { program: p, dataset: ds };
for &b in &bases {
let r1 = e.interpret_warp(b);
let r2 = e.interpret_warp(b);
assert_eq!(r1.hashes, r2.hashes);
assert!(r1.items_derived >= 120 * 32 / 32 && r1.items_derived <= 4_096, "{seed}: {} items", r1.items_derived);
units += 1;
}
if let Some(dir) = &out {
let pack_name = format!("fuzz-{i:03}-{}-l{log2}", class.name());
write_pack_with_bases(&dir.join(&pack_name), &e, DAY, &bases, "igneum-pow tests/mixer.rs fuzz");
manifest.push_str(&format!(
"{pack_name}\t{log2}\t{:016x}\t{}\n",
e.program.program_id(),
bases.iter().map(|b| format!("{b}")).collect::<Vec<_>>().join(",")
));
}
mh.insert(log2, e.dataset);
}
println!("fuzz: {n} {} programs, {units} units on the CPU, {wraps} units in the top 256 nonces, seeds {base}..{}", class.name(), base + n);
assert_eq!(units, 4 * n);
assert_eq!(wraps, n);
if let Some(dir) = &out {
std::fs::create_dir_all(dir).unwrap();
std::fs::write(dir.join("manifest.tsv"), manifest).unwrap();
println!("packs written to {}", dir.display());
}
}
/// Bit balance and avalanche of the v3 hash beside v2 on the same program (the TESTS.md section 3 shape, on the
/// CPU, 2^13 nonces per seed): every output bit within 5 sigma of half ones; a single nonce-bit flip moves 50 percent
/// of the output bits within 2 points; no duplicate among the outputs.
#[test]
fn stats_v3_against_v2() {
let n_warps = 256usize; // 8,192 nonces
let (class, era) = class_under_test();
let class_name = if class == V3_CLASS { "v3".to_string() } else { class.name() };
for seed in ["igneum-genesis", "igneum-genesis/stats1"] {
let v3 = Epoch {
program: program_of(seed, class, era),
dataset: DatasetSource::new_shape(DAY, DatasetMode::MemoryHard, 24, Shape::for_class(&class)),
};
let v2 = Epoch::new(seed, DAY, DatasetMode::MemoryHard, 24);
for (name, e) in [(class_name.as_str(), &v3), ("v2", &v2)] {
let mut ones = [0u64; 64];
let mut outs = Vec::with_capacity(n_warps * 32);
for w in 0..n_warps {
let h = e.hash_warp(w as u32 * 32);
for &x in &h {
outs.push(x);
for b in 0..64 {
ones[b] += (x >> b) & 1;
}
}
}
let total = (n_warps * 32) as f64;
let sigma = (total / 4.0).sqrt();
for (b, &c) in ones.iter().enumerate() {
let z = (c as f64 - total / 2.0).abs() / sigma;
assert!(z < 5.0, "{seed} {name}: bit {b} ones {c} of {total}, z {z:.2}");
}
// avalanche: flip one bit of the nonce within the unit (lanes 0..31 differ in the low 5 bits) and across
// units (bit 5 and up): compare lane l of unit u with lane l ^ (1 << k) and with unit u ^ (1 << k)
let mut flips = 0u64;
let mut moved = 0u64;
for w in 0..64usize {
let h = e.hash_warp(w as u32 * 32);
for k in 0..5 {
for l in 0..32usize {
moved += (h[l] ^ h[l ^ (1 << k)]).count_ones() as u64;
flips += 1;
}
}
let h2 = e.hash_warp((w ^ 1) as u32 * 32);
for l in 0..32usize {
moved += (h[l] ^ h2[l]).count_ones() as u64;
flips += 1;
}
}
let avg = moved as f64 / flips as f64 / 64.0 * 100.0;
assert!((avg - 50.0).abs() < 2.0, "{seed} {name}: avalanche {avg:.2} percent");
outs.sort_unstable();
let dups = outs.windows(2).filter(|p| p[0] == p[1]).count();
assert_eq!(dups, 0, "{seed} {name}: duplicate outputs");
println!("{seed} {name}: {} outputs, avalanche {avg:.2} percent, worst bit z {:.2}", outs.len(), ones.iter().map(|&c| (c as f64 - total / 2.0).abs() / sigma).fold(0.0, f64::max));
}
assert_ne!(v3.hash_warp(0), v2.hash_warp(0));
}
}
/// The dataset edges under every multiplier on a small cache: word 0, word MASK, the last word of item 0 and the
/// first of item 1, through `DatasetSource::word` and by hand.
#[test]
fn edge_items_every_multiplier() {
let key = day_key(DAY);
let cache = Cache::fill_log2(key, 14);
for m in [1u32, 2, 4, 8] {
let mp = MixParams::with_shape(key, Shape { mixer_mult: m, cache_log2_words: 14, derive_len: 0, state: false });
let by_hand = |t: u32| -> [u32; 16] {
let mut s = [0u32; 16];
s[..8].copy_from_slice(&key);
for i in 0..8 {
s[8 + i] = t.wrapping_mul(mp.mul[i]).wrapping_add(mp.rc[i]);
}
for r in 0..8usize {
for j in 0..m as usize {
mixer(&mut s, round_key(r * m as usize + j), &mp);
}
let line = cache.line(s[0]);
for i in 0..16 {
s[i] ^= line[i];
}
}
for j in 0..m as usize {
mixer(&mut s, round_key(8 * m as usize + j), &mp);
}
s
};
for t in [0u32, 1, 0x0fff_ffff, 0xffff_ffff] {
assert_eq!(derive_item(t, &mp, &cache), by_hand(t), "m {m} item {t}");
}
}
// the interpreter's fetch path at the genesis cache: words 0, 15, 16 and MASK of a 2^20-word dataset agree with
// the item derivation, under v3
let ds = DatasetSource::new_shape(DAY, DatasetMode::MemoryHard, 20, Shape::for_class(&V3_CLASS));
let m = ds.memhard().unwrap();
for w in [0u32, 15, 16, 17, ds.mask - 1, ds.mask] {
assert_eq!(ds.word(w), derive_item(w >> 4, &m.params, &m.cache)[(w & 15) as usize]);
assert_eq!(ds.word(w), m.word(w));
}
// a load at an out-of-range register masks to the dataset: the word at mask + 1 is the word at 0
assert_eq!(ds.word(ds.mask.wrapping_add(1)), ds.word(0));
}
/// Two independent epochs of the same seed and day: every vector and every emitted file identical; the pinned v3
/// pack is what a third export writes.
#[test]
fn determinism_v3() {
let (class, era) = class_under_test();
let build = || Epoch {
program: program_of("igneum-genesis", class, era),
dataset: DatasetSource::new_shape(DAY, DatasetMode::MemoryHard, 28, Shape::for_class(&class)),
};
let a = build();
let b = build();
let pa = export_pack(&a, DAY, "a");
let pb = export_pack(&b, DAY, "a");
assert_eq!(pa.outs, pb.outs);
assert_eq!(pa.vectors, pb.vectors);
assert_eq!(pa.files, pb.files);
for (w, warp) in [(0u32, 0usize), (4096, 1), (1_000_000, 2)] {
assert_eq!(a.hash_warp(w), pa.outs[warp]);
}
// the pinned pack of the class: mx8-genesis for V3_CLASS, packs-ca3-shadow/<block> for a shadow class over mx8
// (igneum-genesis, the same day); a class with no pinned pack skips the on-disk comparison and says so
let pinned = if class == V3_CLASS {
Some("../proto-cuda/packs-ca2-mixer/mx8-genesis".to_string())
} else {
class.name().strip_prefix("mx8+").map(|b| format!("../proto-cuda/packs-ca3-shadow/{b}"))
};
let dir = match pinned.map(|d| PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(d)).filter(|d| d.is_dir()) {
Some(d) => d,
None => {
println!("determinism {}: two builds equal; no pinned pack on disk for this class", class.name());
return;
}
};
println!("determinism {}: two builds equal, against the pinned pack {}", class.name(), dir.display());
for (name, text) in &pa.files {
if name == "vectors.json" || name == "vectors.h" {
continue; // the source string differs ("a" here)
}
let on_disk = std::fs::read_to_string(dir.join(name)).unwrap();
assert_eq!(&on_disk, text, "{name}");
}
}

View file

@ -0,0 +1,999 @@
//! The checked-in packs under proto-cuda/packs/ against this crate (their source since generator version 2,
//! 4 October 2026): every program instruction by instruction from its seed bytes, the generator version, attempt
//! and program id, the dataset and cache self-test words, the 96 hash vectors per pack, and every emitted file
//! byte for byte. A pack that drifts from the emitters, or a generator change that moves a vector, fails here.
//!
//! Packs: igneum-genesis-mh and igneum-devnet-v4-epoch0 (memory-hard; the latter from the devnet genesis hash as
//! the epoch seed and the day bytes of 2026-10-04), igneum-genesis and igneum-hourly (closed-form dataset,
//! interpreter regression only); and, under `proto-cuda/packs-ca2-mixer/`, the class v3 packs mx8-genesis and
//! mx8-devnet-epoch0 (Counter ASIC 2.0, 5 October 2026: generator 3 on `V3_CLASS` = mixer x8 with the cache growth
//! rule, decided 22:05 UTC under the delegated rule; the same seeds and days as the two memory-hard v2 packs, so the
//! v2 program and cache carry over and only the dataset words and the hashes change) and the x4 candidate's packs
//! mx4-genesis and mx4-devnet-epoch0 (generator 2 with the load class in the id, the record of the x4 rows).
use igneum_pow::accept;
use igneum_pow::emit::{
cuda_kernel, cuda_kernel_bound, cuda_memhard_header, export_pack, metal_memhard, metal_memhard_for, metal_program,
metal_program_bound, opencl_kernel, opencl_kernel_bound, program_header, program_json, LoadSource,
};
use igneum_pow::generator::{generate_from_seed_bytes, generate_from_seed_bytes_class, generate_from_seed_bytes_program_class, LoadClass, Op, ProgramClass, GENERATOR_VERSION, GENERATOR_VERSION_V3, LOAD_SLOTS, V3_CLASS};
use igneum_pow::memhard::{Shape, CACHE_WORDS};
use igneum_pow::verify::{DatasetMode, DatasetSource, Epoch};
use serde_json::Value;
use std::path::PathBuf;
use std::sync::OnceLock;
const PACKS: [&str; 8] = [
"igneum-genesis-mh",
"igneum-devnet-v4-epoch0",
"igneum-genesis",
"igneum-hourly",
"mx8-genesis",
"mx8-devnet-epoch0",
"mx4-genesis",
"mx4-devnet-epoch0",
];
/// The class v3 packs (generator 3 through the seam).
const PACKS_V3: [&str; 2] = ["mx8-genesis", "mx8-devnet-epoch0"];
fn packs_dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../proto-cuda/packs")
}
/// The directory a pack lives in: the class v3 packs under packs-ca2-mixer, the rest under packs.
fn pack_dir(pack: &str) -> PathBuf {
if pack.starts_with("mx4-") || pack.starts_with("mx8-") {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../proto-cuda/packs-ca2-mixer").join(pack)
} else {
packs_dir().join(pack)
}
}
fn read(pack: &str, file: &str) -> String {
let p = pack_dir(pack).join(file);
std::fs::read_to_string(&p).unwrap_or_else(|e| panic!("read {}: {e}", p.display()))
}
fn json(pack: &str, file: &str) -> Value {
serde_json::from_str(&read(pack, file)).unwrap_or_else(|e| panic!("{pack}/{file}: {e}"))
}
fn hex32(v: &Value) -> u32 {
u32::from_str_radix(v.as_str().unwrap().trim_start_matches("0x"), 16).unwrap()
}
fn hex64(v: &Value) -> u64 {
u64::from_str_radix(v.as_str().unwrap().trim_start_matches("0x"), 16).unwrap()
}
fn unhex(v: &Value) -> Vec<u8> {
igneum_pow::bind::unhex(v.as_str().unwrap()).unwrap()
}
/// The epoch a pack describes, rebuilt from program.json alone: the program from `seed_bytes`, the dataset from
/// `dataset.day_bytes` in the pack's mode and size. Memory-hard packs fill a 256 MiB cache (about 0.2 s), so
/// each is built once.
fn epoch(pack: &str) -> &'static Epoch {
static E: OnceLock<Vec<(String, Epoch)>> = OnceLock::new();
let all = E.get_or_init(|| {
PACKS
.iter()
.map(|p| {
let j = json(p, "program.json");
let seed = j["seed"].as_str().unwrap();
let seed_bytes = unhex(&j["seed_bytes"]);
let day_bytes = unhex(&j["dataset"]["day_bytes"]);
let mode = match j["dataset_mode"].as_str().unwrap() {
"memory-hard" => DatasetMode::MemoryHard,
_ => DatasetMode::ClosedForm,
};
let log2 = j["dataset"]["log2_words"].as_u64().unwrap() as u32;
// a class v3 pack: generator 3 on V3_CLASS through the seam, the era bytes it records, the dataset
// in the class's shape on day 0 (the growth rule's genesis cache: every pinned pack is a day-0 size)
let program = match j["generator"].as_u64().unwrap() as u32 {
GENERATOR_VERSION_V3 => {
let era = j.get("era_seed_bytes").map(unhex);
generate_from_seed_bytes_program_class(seed, &seed_bytes, ProgramClass::V3, era.as_deref())
}
// a generator 2 pack with a load class (the x4 candidate's packs): the class from program.json
_ => match j.get("load_class").and_then(|c| c.as_str()) {
Some(c) => generate_from_seed_bytes_class(seed, &seed_bytes, LoadClass::parse(c).expect("a load class name")),
None => generate_from_seed_bytes(seed, &seed_bytes),
},
};
let shape = Shape::for_class(&program.class);
let mut dataset =
DatasetSource::from_key_shape(igneum_pow::seed::seed_words_from_bytes(&day_bytes), mode, log2, shape);
dataset.key_bytes = day_bytes;
(p.to_string(), Epoch { program, dataset })
})
.collect()
});
&all.iter().find(|(n, _)| n == pack).unwrap().1
}
fn day_label(pack: &str) -> String {
json(pack, "program.json")["dataset"]["day"].as_str().unwrap().to_string()
}
fn check_program_json(pack: &str) {
let j = json(pack, "program.json");
let p = &epoch(pack).program;
assert_eq!(j["format"].as_str().unwrap(), "igneum-program-pack-3");
assert_eq!(j["generator"].as_u64().unwrap() as u32, p.generator, "{pack}: generator version");
assert_eq!(p.generator, if PACKS_V3.contains(&pack) { GENERATOR_VERSION_V3 } else { GENERATOR_VERSION });
assert_eq!(j["attempt"].as_u64().unwrap() as u32, p.attempt, "{pack}: attempt");
assert_eq!(hex64(&j["program_id"]), p.program_id(), "{pack}: program id");
let sw: Vec<u32> = j["seed_words"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(p.seed.to_vec(), sw, "{pack}: seed words");
assert_eq!(p.loads_per_hash() as u64, j["loads_per_hash"].as_u64().unwrap(), "{pack}: loads per hash");
assert_eq!(p.loads_per_hash(), 8 * LOAD_SLOTS);
assert!(accept::check(p).is_ok(), "{pack}: the pack's program passes the acceptance rule");
let instrs = j["instructions"].as_array().unwrap();
assert_eq!(instrs.len(), p.instrs.len(), "{pack}: instruction count");
for (k, (ins, ji)) in p.instrs.iter().zip(instrs).enumerate() {
assert_eq!(ji["i"].as_u64().unwrap() as usize, k);
assert_eq!(Op::from_name(ji["op"].as_str().unwrap()).unwrap(), ins.op, "{pack} #{k} op");
assert_eq!(ji["dst"].as_u64().unwrap(), ins.dst as u64, "{pack} #{k} dst");
assert_eq!(ji["src"].as_u64().unwrap(), ins.src as u64, "{pack} #{k} src");
assert_eq!(ji["src2"].as_u64().unwrap(), ins.src2 as u64, "{pack} #{k} src2");
assert_eq!(hex32(&ji["imm"]), ins.imm, "{pack} #{k} imm");
assert_eq!(hex32(&ji["imm2"]), ins.imm2, "{pack} #{k} imm2");
assert_eq!(ji["rot"].as_u64().unwrap(), ins.rot as u64, "{pack} #{k} rot");
assert_eq!(ji["bit"].as_u64().unwrap(), ins.bit as u64, "{pack} #{k} bit");
assert_eq!(ji["mask"].as_u64().unwrap(), ins.mask as u64, "{pack} #{k} mask");
}
let mix = j["op_mix"].as_object().unwrap();
for (name, count) in p.histogram() {
assert_eq!(mix[name].as_u64().unwrap() as usize, count, "{pack}: op_mix {name}");
}
assert_eq!(mix.len(), p.histogram().len());
}
#[test]
fn program_json_matches_all_packs() {
for pack in PACKS {
check_program_json(pack);
}
}
/// The genesis program of generator v2 (spec 01 section 1.4.3 vector).
#[test]
fn genesis_program_shape() {
let p = &epoch("igneum-genesis-mh").program;
assert_eq!(p.attempt, 0);
assert_eq!(p.op_mix(), "load=16 add=8 shfl=8 xor=6 mad=5 mul=5 mulhi=5 sub=4 rotl=3 rotr=3 or=1");
assert_eq!(p.program_id(), 0xbcc1248b10cc90f2);
assert_eq!(&epoch("igneum-genesis").program, p, "closed-form and memory-hard packs share the program");
}
#[test]
fn mixer_params_match_pack() {
for pack in ["igneum-genesis-mh", "igneum-devnet-v4-epoch0", "mx8-genesis", "mx8-devnet-epoch0", "mx4-genesis", "mx4-devnet-epoch0"] {
let j = json(pack, "program.json");
let mp = &epoch(pack).dataset.memhard().unwrap().params;
let key: Vec<u32> = j["dataset"]["key"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(mp.key.to_vec(), key);
let rot: Vec<u32> =
j["dataset"]["mixer"]["rot"].as_array().unwrap().iter().map(|v| v.as_u64().unwrap() as u32).collect();
assert_eq!(mp.rot.to_vec(), rot);
let mul: Vec<u32> = j["dataset"]["mixer"]["mul"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(mp.mul.to_vec(), mul);
let rc: Vec<u32> = j["dataset"]["mixer"]["rc"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(mp.rc.to_vec(), rc);
assert_eq!(hex32(&j["dataset"]["d0"]), mp.key[0]);
assert_eq!(hex32(&j["dataset"]["d1"]), mp.key[1]);
}
}
#[test]
fn cache_matches_vectors() {
let v = json("igneum-genesis-mh", "vectors.json");
let m = epoch("igneum-genesis-mh").dataset.memhard().unwrap();
let w = m.cache.words();
assert_eq!(w.len(), CACHE_WORDS);
let head: Vec<u32> = v["cache_head"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(&w[..16], &head[..]);
let last: Vec<u32> = v["cache_last_line"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(&w[CACHE_WORDS - 16..], &last[..]);
assert_eq!(m.cache.fnv1a64(), 0x48c4f5bf24166b2e, "cache FNV-1a 64 of day 2026-10-03 (MEMHARD.md), unchanged by v2");
assert_eq!(m.cache.fnv1a64(), hex64(&v["cache_fnv1a64"]));
let v = json("igneum-devnet-v4-epoch0", "vectors.json");
let m = epoch("igneum-devnet-v4-epoch0").dataset.memhard().unwrap();
assert_eq!(m.cache.fnv1a64(), hex64(&v["cache_fnv1a64"]));
assert_eq!(m.cache.fnv1a64(), 0x448274a57f508cbc, "cache FNV-1a 64 of day bytes igneum-day/20730");
}
fn check_dataset_words(pack: &str) {
let v = json(pack, "vectors.json");
let e = epoch(pack);
let ds = &e.dataset;
// a pack's self-test words are read under its program's layout (the era layout; linear for every v2 pack)
let head: Vec<u32> = v["dataset_head"].as_array().unwrap().iter().map(hex32).collect();
for (i, h) in head.iter().enumerate() {
assert_eq!(e.dataset_word(i as u32), *h, "{pack}: dataset[{i}]");
}
let last_index = v["dataset_last_index"].as_u64().unwrap() as u32;
assert_eq!(last_index, ds.mask);
assert_eq!(e.dataset_word(last_index), hex32(&v["dataset_last"]), "{pack}: dataset[MASK]");
let samples = v["dataset_samples"].as_array().unwrap();
assert_eq!(samples.len(), 64);
for s in samples {
let idx = s["index"].as_u64().unwrap() as u32;
assert_eq!(e.dataset_word(idx), hex32(&s["value"]), "{pack}: dataset[{idx}]");
}
}
#[test]
fn dataset_words_match_all_packs() {
for pack in PACKS {
check_dataset_words(pack);
}
}
/// Returns the number of hashes compared (3 warps x 32 lanes = 96).
fn check_vectors(pack: &str) -> usize {
let v = json(pack, "vectors.json");
let e = epoch(pack);
assert_eq!(v["dataset_mode"].as_str().unwrap(), e.dataset.mode().name());
assert_eq!(v["dataset_log2_words"].as_u64().unwrap() as u32, e.dataset.log2_words);
let warps = v["warps"].as_array().unwrap();
assert_eq!(warps.len(), 3);
let mut n = 0;
for w in warps {
let base = w["base_nonce"].as_u64().unwrap() as u32;
let expected: Vec<u64> = w["expected"].as_array().unwrap().iter().map(hex64).collect();
let got = e.hash_warp(base);
for lane in 0..32 {
assert_eq!(got[lane], expected[lane], "{pack}: base {base} lane {lane}");
n += 1;
}
// The single-nonce API agrees with the warp.
assert_eq!(e.hash(base + 7), expected[7]);
assert!(e.verify_block(base + 7, expected[7]));
assert!(!e.verify_block(base + 7, expected[7] - 1));
}
n
}
#[test]
fn vectors_96_per_pack() {
for pack in PACKS {
assert_eq!(check_vectors(pack), 96, "{pack}");
}
}
/// The spec 01 section 1.17 vectors (igneum-genesis-mh, generator v2).
#[test]
fn spec_vectors_genesis_mh() {
let e = epoch("igneum-genesis-mh");
let w = e.hash_warp(0);
assert_eq!(w[0], 0x42246ba99fc58e4f);
assert_eq!(w[31], 0xb08446b1f2de7793);
assert_eq!(e.hash_warp(4096)[0], 0x3d3903e310ca038f);
assert_eq!(e.hash_warp(1_000_000)[0], 0xf218c1bd58e6dfe0);
}
fn assert_same_text(pack: &str, file: &str, got: &str) {
let want = read(pack, file);
if got != want {
let (gl, wl): (Vec<&str>, Vec<&str>) = (got.lines().collect(), want.lines().collect());
for i in 0..gl.len().max(wl.len()) {
let g = gl.get(i).copied().unwrap_or("<eof>");
let w = wl.get(i).copied().unwrap_or("<eof>");
if g != w {
panic!("{pack}/{file} differs at line {}:\n pack: {w}\n rust: {g}", i + 1);
}
}
panic!("{pack}/{file} differs only in trailing bytes (len {} vs {})", got.len(), want.len());
}
}
fn check_sources(pack: &str) {
let e = epoch(pack);
let p = &e.program;
let day = day_label(pack);
let mp = e.dataset.memhard().map(|m| &m.params);
assert_same_text(pack, "kernel.cu", &cuda_kernel(p, mp));
assert_same_text(pack, "kernel_bound.cu", &cuda_kernel_bound(p, mp));
assert_same_text(pack, "program.metal", &metal_program(p, e.dataset.log2_words, LoadSource::Stored));
assert_same_text(pack, "program_bound.metal", &metal_program_bound(p, e.dataset.log2_words));
assert_same_text(pack, "kernel.cl", &opencl_kernel(p, mp));
assert_same_text(pack, "kernel_bound.cl", &opencl_kernel_bound(p, mp));
assert_same_text(pack, "program.h", &program_header(p, &day, &e.dataset));
if let Some(mp) = mp {
assert_same_text(pack, "memhard.h", &cuda_memhard_header(p, mp));
assert_same_text(pack, "memhard.metal", &igneum_pow::emit::metal_memhard_layout(mp, p.class.layout()));
}
let got = program_json(p, &day, &e.dataset);
assert_same_text(pack, "program.json", &got);
let _: Value = serde_json::from_str(&got).expect("program.json is valid JSON");
// Every load in every emitted hash kernel has the masked form, and there are exactly 16 of them (a class with
// the era layout inside has the era form instead: `((rotl_imm(rN * M, R) & WM) | OFF) & mask`, checked by
// era_emitted_sources_match_and_loads_have_the_era_form over the era packs, and here by the same count).
let era_load = if p.class.era.is_some() { "((rotl_imm(r" } else { "" };
for (file, load, masked) in [
("kernel.cu", "ds[r", " & mask]"),
("kernel_bound.cu", "ds[r", " & mask]"),
("program.metal", "dataset[r", " & MASK]"),
("program_bound.metal", "dataset[r", " & MASK]"),
] {
let text = read(pack, file);
let load = if era_load.is_empty() { load } else { era_load };
assert_eq!(text.matches(load).count(), LOAD_SLOTS, "{pack}/{file}: 16 loads");
assert_eq!(text.matches(masked).count(), LOAD_SLOTS, "{pack}/{file}: 16 masked loads");
}
}
#[test]
fn emitted_sources_match_all_packs() {
for pack in PACKS {
check_sources(pack);
}
}
/// The whole pack as `export` writes it: vectors.json and vectors.h match, and the file list is the full set.
/// The class v3 packs (Counter ASIC 2.0, `docs/plans/mixer-x4.md`): generator 3 on V3_CLASS = mx8; the program of
/// each is the v2 program of the same seed instruction for instruction (v2 loads take no width roll); the cache is
/// the v2 cache (day 0 of the growth rule: 2^26 words, the same FNV-1a 64); the dataset words differ from v2's;
/// program.json, program.h and the emitted memhard core say so; the id carries generator 3.
#[test]
fn v3_packs_are_the_v2_seeds_under_mixer_x8() {
assert_eq!(V3_CLASS.name(), "mx8");
assert_eq!(V3_CLASS.mixer_mult, 8);
assert!(V3_CLASS.growth);
assert_eq!(LoadClass { mixer_mult: 4, ..V3_CLASS }, LoadClass::MX4, "the x4 candidate differs from v3 in the multiplier alone");
for (v3, v2) in [("mx8-genesis", "igneum-genesis-mh"), ("mx8-devnet-epoch0", "igneum-devnet-v4-epoch0")] {
let e3 = epoch(v3);
let e2 = epoch(v2);
let j = json(v3, "program.json");
assert_eq!(j["program_class"].as_str().unwrap(), "v3");
assert!(j["load_class"].as_str().unwrap().starts_with("mx8"), "{v3}: mx8, or mx8 with the era inside");
assert_eq!(j["mixer_mult"].as_u64().unwrap(), 8);
assert_eq!(j["cache_growth"].as_bool().unwrap(), true);
assert_eq!(j["dataset"]["mixer_mult"].as_u64().unwrap(), 8);
assert_eq!(j["dataset"]["cache"]["log2_words"].as_u64().unwrap(), 26);
assert_eq!(e3.program.generator, GENERATOR_VERSION_V3);
if e3.program.era_bytes.is_some() {
// the era layout composed into class v3 (docs/plans/era-layout.md, 5 October 2026): a chain pack carries an
// era, so its class is V3_CLASS with the era drawn inside and its stream takes two window draws per
// instruction; the v2 program carries over only in the seed, the attempt and the day
assert_eq!(LoadClass { era: None, ..e3.program.class }, V3_CLASS, "{v3}: the composed class");
assert!(e3.program.class.era.is_some());
assert_ne!(e3.program.instrs, e2.program.instrs, "{v3}: the era windows change the stream");
} else {
assert_eq!(e3.program.class, V3_CLASS);
assert_eq!(e3.program.instrs, e2.program.instrs, "{v3}: the v2 program under the v3 construction");
}
assert_eq!(e3.program.seed, e2.program.seed);
assert_eq!(e3.program.attempt, e2.program.attempt);
assert_ne!(e3.program.program_id(), e2.program.program_id());
assert_eq!(e3.program.program_id(), igneum_pow::generator::program_id(GENERATOR_VERSION_V3, &e3.program.seed, e3.program.attempt));
let m3 = e3.dataset.memhard().unwrap();
let m2 = e2.dataset.memhard().unwrap();
assert_eq!(m3.shape(), Shape { mixer_mult: 8, cache_log2_words: 26, derive_len: 0, state: false });
assert_eq!(m3.cache.fnv1a64(), m2.cache.fnv1a64(), "{v3}: the same cache as v2 on day 0");
assert_eq!(m3.params.rot, m2.params.rot);
assert_eq!(e3.dataset.log2_words, 28);
assert_ne!(e3.dataset.word(0), e2.dataset.word(0), "{v3}: the dataset words differ");
assert_ne!(e3.hash_warp(0), e2.hash_warp(0));
let h = read(v3, "program.h");
assert!(h.contains("#define IGNEUM_GENERATOR 3\n"));
assert!(h.contains("#define IGNEUM_PROGRAM_CLASS \"v3\"\n"));
assert!(h.contains("#define IGNEUM_MIXER_MULT 8"));
assert!(h.contains("#define IGNEUM_CACHE_GROWTH 1"));
assert!(h.contains("#define IGNEUM_CACHE_LOG2_WORDS 26\n"));
assert!(h.contains("#define IGNEUM_LOAD_CLASS \"mx8"), "mx8, or mx8 with the era inside");
for file in ["memhard.h", "memhard.metal", "kernel.cl"] {
let text = read(v3, file);
assert_eq!(text.matches("j < 8u; ++j) mh_mixer(s, 0x9E3779B9u * (r * 8u + j + 1u))").count(), 1, "{v3}/{file}");
assert_eq!(text.matches("j < 8u; ++j) mh_mixer(s, 0x9E3779B9u * (64u + j + 1u))").count(), 1, "{v3}/{file}");
}
for file in ["memhard.h", "memhard.metal", "kernel.cl"] {
let text = read(v2, file);
assert_eq!(text.matches("j < 8u").count(), 0, "{v2}/{file}: the v2 text has no multiplier loop");
}
}
// the devnet v3 pack records era 0's stand-in, the devnet genesis hash
let j = json("mx8-devnet-epoch0", "program.json");
assert_eq!(unhex(&j["era_seed_bytes"]), unhex(&j["seed_bytes"]));
assert!(read("mx8-devnet-epoch0", "program.h").contains("#define IGNEUM_ERA_SEED_HEX \"edc4fa844da9dc98"));
assert!(json("mx8-genesis", "program.json").get("era_seed_bytes").is_none());
// the x4 candidate's packs: generator 2, the class in the id, the v2 program of the seed, mixer x4
for (x4, v2) in [("mx4-genesis", "igneum-genesis-mh"), ("mx4-devnet-epoch0", "igneum-devnet-v4-epoch0")] {
let e4 = epoch(x4);
let j = json(x4, "program.json");
assert_eq!(e4.program.generator, GENERATOR_VERSION);
assert_eq!(j["load_class"].as_str().unwrap(), "mx4");
assert_eq!(e4.program.class, LoadClass::MX4);
assert_eq!(e4.program.instrs, epoch(v2).program.instrs);
assert_eq!(e4.dataset.memhard().unwrap().shape(), Shape { mixer_mult: 4, cache_log2_words: 26, derive_len: 0, state: false });
assert!(read(x4, "memhard.h").contains("j < 4u; ++j) mh_mixer(s, 0x9E3779B9u * (r * 4u + j + 1u))"));
}
}
fn check_export(pack: &str) {
let e = epoch(pack);
let v = json(pack, "vectors.json");
let source = v["source"].as_str().unwrap();
let out = export_pack(e, &day_label(pack), source);
let file = |name: &str| -> &str { &out.files.iter().find(|(n, _)| n == name).unwrap().1 };
assert_same_text(pack, "vectors.json", file("vectors.json"));
assert_same_text(pack, "vectors.h", file("vectors.h"));
let mut expected = vec![
"program.json",
"vectors.json",
"kernel.cu",
"kernel.cl",
"program.h",
"vectors.h",
"program.metal",
"program_bound.metal",
"kernel_bound.cu",
"kernel_bound.cl",
];
if e.dataset.mode() == DatasetMode::MemoryHard {
expected.extend(["memhard.h", "memhard.metal"]);
}
assert_eq!(out.files.iter().map(|(n, _)| n.as_str()).collect::<Vec<_>>(), expected);
let mut on_disk: Vec<String> = std::fs::read_dir(pack_dir(pack))
.unwrap()
.map(|d| d.unwrap().file_name().to_string_lossy().to_string())
.filter(|n| !n.starts_with('.'))
.collect();
on_disk.sort();
let mut want: Vec<String> = expected.iter().map(|s| s.to_string()).collect();
want.sort();
assert_eq!(on_disk, want, "{pack}: no stale file in the pack directory");
}
#[test]
fn export_pack_matches_all_packs() {
for pack in PACKS {
check_export(pack);
}
}
#[test]
fn item_is_independent_of_dataset_size() {
// MEMHARD.md 1.7: a smaller dataset is a prefix of items, so dataset[w] is the same at every size.
let big = &epoch("igneum-genesis-mh").dataset;
let m = big.memhard().unwrap();
for w in [0u32, 1, 15, 16, 17, 0x00ff_ffff, 0x03ff_ffff] {
assert_eq!(big.word(w), m.word(w));
}
}
/// The devnet pack is the chain's own derivation: epoch seed = the devnet genesis hash, day bytes = `bind::day_bytes(20730)`.
#[test]
fn devnet_pack_is_the_chain_derivation() {
let j = json("igneum-devnet-v4-epoch0", "program.json");
let genesis = igneum_pow::bind::unhex("edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07").unwrap();
assert_eq!(unhex(&j["seed_bytes"]), genesis);
assert_eq!(unhex(&j["dataset"]["day_bytes"]), igneum_pow::bind::day_bytes(20_730).to_vec());
let e = Epoch::from_seed_bytes(&genesis, &igneum_pow::bind::day_bytes(20_730), "devnet");
assert_eq!(e.program.instrs, epoch("igneum-devnet-v4-epoch0").program.instrs);
assert_eq!(e.hash_warp(0), epoch("igneum-devnet-v4-epoch0").hash_warp(0));
}
// ---------------------------------------------------------------------------------------------------------
// Era layout packs (5 October 2026, docs/plans/era-layout.md): proto-cuda/packs-ca2-era/era-<n>, n in 0..5, the
// devnet epoch seed and day bytes under the era class of test era seed igneum-era-test/<n>, the width pinned at
// 4 bytes (allowed_widths in program.json). Checked like the pinned packs, plus the one load form of 1.3 by text search.
// ---------------------------------------------------------------------------------------------------------
use igneum_pow::generator::{generate_era, EraParams, V3_ALLOWED};
const ERA_PACKS: [&str; 6] = ["era-0", "era-1", "era-2", "era-3", "era-4", "era-5"];
fn era_packs_dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../proto-cuda/packs-ca2-era")
}
fn era_read(pack: &str, file: &str) -> String {
let p = era_packs_dir().join(pack).join(file);
std::fs::read_to_string(&p).unwrap_or_else(|e| panic!("read {}: {e}", p.display()))
}
fn era_json(pack: &str, file: &str) -> Value {
serde_json::from_str(&era_read(pack, file)).unwrap_or_else(|e| panic!("{pack}/{file}: {e}"))
}
/// The era class of a pack: the era bytes from program.json (`era_seed_bytes`, the chain's `E_n`; the test seed
/// `igneum-era-test/<n>` of the pack's number gives the same bytes), the allowed set from `era.allowed_widths`
/// (class v3's `V3_ALLOWED`); the pack's recorded stream words and draw must be the class's.
fn era_class(pack: &str) -> LoadClass {
let j = era_json(pack, "program.json");
let n: u64 = pack.trim_start_matches("era-").parse().unwrap();
let eb = unhex(&j["era_seed_bytes"]);
assert_eq!(eb, EraParams::test_era_bytes(&format!("igneum-era-test/{n}")).to_vec(), "{pack}: the era bytes of test seed {n}");
let allowed: Vec<u8> = j["era"]["allowed_widths"].as_array().unwrap().iter().map(|v| v.as_u64().unwrap() as u8).collect();
assert_eq!(allowed, V3_ALLOWED.to_vec(), "{pack}: class v3's width set");
// the measurement packs of 5 October 2026: the era layout over version 2's construction (mixer x1, the genesis
// cache), generator 3 and the era bytes recorded; the chain's class v3 composes the same draw over LoadClass::MX4
// (generator tests era_programs_are_accepted and program_classes), and the integration re-exports these packs
let c = LoadClass::era(LoadClass::V2, &eb, &allowed);
let e = c.era.unwrap();
let words: Vec<u32> = j["era"]["seed_words"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(e.words.to_vec(), words, "{pack}: era seed words");
assert_eq!(e.width_words as u64, j["era"]["width_words"].as_u64().unwrap(), "{pack}: width");
assert_eq!(e.stride_mul, hex32(&j["era"]["stride_mul"]), "{pack}: stride mul");
assert_eq!(e.stride_rot as u64, j["era"]["stride_rot"].as_u64().unwrap(), "{pack}: stride rot");
let pos: Vec<u8> = j["era"]["interleave"].as_array().unwrap().iter().map(|v| v.as_u64().unwrap() as u8).collect();
assert_eq!(e.pos.to_vec(), pos, "{pack}: interleave");
c
}
fn era_epoch(pack: &str) -> &'static Epoch {
static E: OnceLock<Vec<(String, Epoch)>> = OnceLock::new();
let all = E.get_or_init(|| {
ERA_PACKS
.iter()
.map(|p| {
let j = era_json(p, "program.json");
let seed = j["seed"].as_str().unwrap();
let seed_bytes = unhex(&j["seed_bytes"]);
let day_bytes = unhex(&j["dataset"]["day_bytes"]);
assert_eq!(j["dataset_mode"].as_str().unwrap(), "memory-hard");
let log2 = j["dataset"]["log2_words"].as_u64().unwrap() as u32;
let class = era_class(p);
assert_eq!(log2, igneum_pow::verify::DEFAULT_DATASET_LOG2);
let eb = unhex(&j["era_seed_bytes"]);
let program = generate_era(seed, &seed_bytes, LoadClass::V2, &eb, &V3_ALLOWED);
assert_eq!(program.class, class, "{p}: the pack's era class");
assert_eq!(program.generator, GENERATOR_VERSION_V3);
assert_eq!(program.era_bytes.as_deref(), Some(&eb[..]));
let mut dataset = DatasetSource::from_key(igneum_pow::seed::seed_words_from_bytes(&day_bytes), DatasetMode::MemoryHard, log2);
dataset.key_bytes = day_bytes;
(p.to_string(), Epoch { program, dataset })
})
.collect()
});
&all.iter().find(|(n, _)| n == pack).unwrap().1
}
/// program.json of an era pack: generator, attempt, id, class, every instruction with width, win and off, and the
/// program passes the acceptance rule.
#[test]
fn era_program_json_matches() {
for pack in ERA_PACKS {
let j = era_json(pack, "program.json");
let p = &era_epoch(pack).program;
assert_eq!(j["generator"].as_u64().unwrap() as u32, GENERATOR_VERSION_V3, "{pack}: a class v3 pack");
assert_eq!(j["program_class"].as_str().unwrap(), "v3");
assert_eq!(j["attempt"].as_u64().unwrap() as u32, p.attempt, "{pack}: attempt");
assert_eq!(hex64(&j["program_id"]), p.program_id(), "{pack}: program id");
assert_eq!(j["load_class"].as_str().unwrap(), p.class.name(), "{pack}: class");
assert_eq!(j["bytes_per_hash"].as_u64().unwrap() as usize, p.bytes_per_hash());
assert_eq!(p.loads_per_hash(), 8 * LOAD_SLOTS);
assert!(accept::check(p).is_ok(), "{pack}: acceptance");
let instrs = j["instructions"].as_array().unwrap();
assert_eq!(instrs.len(), p.instrs.len());
for (k, (ins, ji)) in p.instrs.iter().zip(instrs).enumerate() {
assert_eq!(Op::from_name(ji["op"].as_str().unwrap()).unwrap(), ins.op, "{pack} #{k} op");
assert_eq!(ji["dst"].as_u64().unwrap(), ins.dst as u64);
assert_eq!(ji["src"].as_u64().unwrap(), ins.src as u64);
assert_eq!(hex32(&ji["imm"]), ins.imm);
assert_eq!(ji["width"].as_u64().unwrap(), ins.width as u64, "{pack} #{k} width");
assert_eq!(ji["win"].as_u64().unwrap(), ins.win as u64, "{pack} #{k} win");
assert_eq!(ji["off"].as_u64().unwrap(), ins.off as u64, "{pack} #{k} off");
if ins.op == Op::Load {
assert_eq!(ins.width, p.class.era.unwrap().width_words);
assert!(ins.win <= 2 && (ins.off as u32) < (1u32 << ins.win));
}
}
}
}
/// The six era packs are the same program seed under six draws: the instruction lists agree, the widths and layouts
/// follow the draw, and the dataset words differ from the linear layout exactly when the interleave is not linear.
#[test]
fn era_packs_share_the_program_and_differ_in_layout() {
let linear = &epoch("igneum-devnet-v4-epoch0").dataset;
for pack in ERA_PACKS {
let e = era_epoch(pack);
assert_eq!(e.program.seed_bytes, epoch("igneum-devnet-v4-epoch0").program.seed_bytes, "{pack}: the devnet seed");
let strip = |p: &igneum_pow::generator::Program| {
p.instrs.iter().map(|i| (i.op, i.dst, i.src, i.src2, i.imm, i.imm2, i.rot, i.bit, i.mask, i.win, i.off)).collect::<Vec<_>>()
};
assert_eq!(strip(&e.program), strip(&era_epoch("era-0").program), "{pack}: same stream as era-0");
let l = e.program.class.layout();
let same_at_1 = (0..64u32).all(|w| e.dataset_word(w * 977 + 1) == linear.word(w * 977 + 1));
assert_eq!(same_at_1, l.is_linear(), "{pack}: layout {:?}", l.pos);
assert_eq!(e.dataset_word(0), linear.word(0), "{pack}: word 0 is item 0 word 0 in every layout");
// the chain's shared day cache serves every era: the day's dataset source is the pinned pack's, bit for bit
assert_eq!(e.dataset.key, linear.key);
assert_eq!(e.dataset.memhard().unwrap().cache.fnv1a64(), linear.memhard().unwrap().cache.fnv1a64());
}
}
#[test]
fn era_dataset_words_and_vectors_match() {
for pack in ERA_PACKS {
let v = era_json(pack, "vectors.json");
let e = era_epoch(pack);
let ds = &e.dataset;
let head: Vec<u32> = v["dataset_head"].as_array().unwrap().iter().map(hex32).collect();
for (i, h) in head.iter().enumerate() {
assert_eq!(e.dataset_word(i as u32), *h, "{pack}: dataset[{i}]");
}
assert_eq!(e.dataset_word(ds.mask), hex32(&v["dataset_last"]), "{pack}: dataset[MASK]");
for s in v["dataset_samples"].as_array().unwrap() {
let idx = s["index"].as_u64().unwrap() as u32;
assert_eq!(e.dataset_word(idx), hex32(&s["value"]), "{pack}: dataset[{idx}]");
}
assert_eq!(ds.memhard().unwrap().cache.fnv1a64(), hex64(&v["cache_fnv1a64"]));
let mut n = 0;
for w in v["warps"].as_array().unwrap() {
let base = w["base_nonce"].as_u64().unwrap() as u32;
let expected: Vec<u64> = w["expected"].as_array().unwrap().iter().map(hex64).collect();
let got = e.hash_warp(base);
for lane in 0..32 {
assert_eq!(got[lane], expected[lane], "{pack}: base {base} lane {lane}");
n += 1;
}
assert_eq!(e.hash(base + 7), expected[7]);
}
assert_eq!(n, 96, "{pack}");
}
}
/// Every emitted file of every era pack matches the emitters byte for byte, the export reproduces vectors.json and
/// vectors.h, and every dataset load in every hash kernel has the one era form (no plain `ds[rN & mask]` remains).
#[test]
fn era_emitted_sources_match_and_loads_have_the_era_form() {
for pack in ERA_PACKS {
let e = era_epoch(pack);
let day = era_json(pack, "program.json")["dataset"]["day"].as_str().unwrap().to_string();
let source = era_json(pack, "vectors.json")["source"].as_str().unwrap().to_string();
let out = export_pack(e, &day, &source);
for (name, text) in &out.files {
let want = era_read(pack, name);
assert!(text == &want, "{pack}/{name} differs from the emitter");
}
let mut on_disk: Vec<String> = std::fs::read_dir(era_packs_dir().join(pack))
.unwrap()
.map(|d| d.unwrap().file_name().to_string_lossy().to_string())
.filter(|n| !n.starts_with('.') && n != "seeds.txt")
.collect();
on_disk.sort();
let mut want: Vec<String> = out.files.iter().map(|(n, _)| n.clone()).collect();
want.sort();
assert_eq!(on_disk, want, "{pack}: the pack holds the export's files and seeds.txt only");
let era = e.program.class.era.unwrap();
let mul = format!("0x{:08x}u", era.stride_mul);
for (file, mask) in [
("kernel.cu", "mask"),
("kernel_bound.cu", "mask"),
("kernel.cl", "mask"),
("kernel_bound.cl", "mask"),
("program.metal", "MASK"),
("program_bound.metal", "MASK"),
] {
let text = era_read(pack, file);
let kernels = if file.starts_with("kernel_bound") || file == "kernel.cu" || file == "kernel.cl" || file.starts_with("program") { 1 } else { 1 };
// kernel_bound.cl carries igneum_hash and igneum_hash_bound: two kernels
let kernels = if file == "kernel_bound.cl" { 2 } else { kernels };
let era_form: usize = text
.lines()
.filter(|l| l.contains("rotl_imm(r") && l.contains(&format!(" * {mul}, {}u) & ", era.stride_rot)) && l.contains(&format!(") & {mask}")))
.filter(|l| l.contains("ds[") || l.contains("dataset[") || l.contains("b_ = "))
.count();
assert_eq!(era_form, LOAD_SLOTS * kernels, "{pack}/{file}: {} loads of the era form", LOAD_SLOTS * kernels);
let plain = text.lines().filter(|l| l.contains("ds[r") || l.contains("dataset[r")).count();
assert_eq!(plain, 0, "{pack}/{file}: a load without the era form");
}
// the layout helpers appear exactly when the layout is not linear
let mh = era_read(pack, "memhard.h");
assert_eq!(mh.contains("mh_addr("), !era.layout().is_linear(), "{pack}: memhard.h layout helpers");
}
}
/// An era pack's dataset is a prefix at every size of at least 2^16 words: the 2^20-word source gives the pack's
/// words below 2^20.
#[test]
fn era_dataset_is_a_prefix_at_smaller_sizes() {
for pack in ["era-1", "era-3"] {
let e = era_epoch(pack);
let small = DatasetSource::from_key(e.dataset.key, DatasetMode::MemoryHard, 20);
let l = e.program.class.layout();
for w in [0u32, 1, 2, 3, 16, 255, 4096, 65_535, 65_536, 0x000f_ffff] {
assert_eq!(small.word_at(l, w), e.dataset_word(w), "{pack}: w {w}");
}
}
}
// ---------------------------------------------------------------------------------------------------------
// Hot-table experiment (5 October 2026, docs/plans/hot-table.md): the five packs under proto-cuda/packs-ca2-hot/ are
// pinned the same way (program, vectors, every emitted file byte for byte), plus the hot table's fingerprint and the
// one-form load check: exactly 16 - k masked dataset loads and exactly k hot loads in every hash kernel.
// ---------------------------------------------------------------------------------------------------------
const HOT_PACKS: [&str; 8] = ["hot32k4", "hot64k4", "hot96k4", "hot64k2", "hot64k8", "hot32k4a", "hot64k4a", "hot96k4a"];
fn hot_packs_dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../proto-cuda/packs-ca2-hot")
}
fn hread(pack: &str, file: &str) -> String {
let p = hot_packs_dir().join(pack).join(file);
std::fs::read_to_string(&p).unwrap_or_else(|e| panic!("read {}: {e}", p.display()))
}
fn hjson(pack: &str, file: &str) -> Value {
serde_json::from_str(&hread(pack, file)).unwrap_or_else(|e| panic!("{pack}/{file}: {e}"))
}
/// The epoch of a hot pack from program.json alone: the class from `load_class`, the program from the seed bytes,
/// the dataset from the day bytes, the hot table from the seed bytes (what `Epoch::from_seed_bytes_class` does).
fn hepoch(pack: &str) -> &'static Epoch {
static E: OnceLock<Vec<(String, Epoch)>> = OnceLock::new();
let all = E.get_or_init(|| {
HOT_PACKS
.iter()
.map(|p| {
let j = hjson(p, "program.json");
let seed = j["seed"].as_str().unwrap();
let seed_bytes = unhex(&j["seed_bytes"]);
let day_bytes = unhex(&j["dataset"]["day_bytes"]);
assert_eq!(j["dataset_mode"].as_str().unwrap(), "memory-hard");
let class = LoadClass::parse(j["load_class"].as_str().unwrap()).unwrap();
assert_eq!(class.name(), *p, "the pack directory is the class name");
let log2 = j["dataset"]["log2_words"].as_u64().unwrap() as u32;
let program = generate_from_seed_bytes_class(seed, &seed_bytes, class);
let mut dataset =
DatasetSource::from_key(igneum_pow::seed::seed_words_from_bytes(&day_bytes), DatasetMode::MemoryHard, log2);
dataset.key_bytes = day_bytes;
dataset.attach_hot_for(&program);
(p.to_string(), Epoch { program, dataset })
})
.collect()
});
&all.iter().find(|(n, _)| n == pack).unwrap().1
}
fn hassert_same_text(pack: &str, file: &str, got: &str) {
let want = hread(pack, file);
if got != want {
let (gl, wl): (Vec<&str>, Vec<&str>) = (got.lines().collect(), want.lines().collect());
for i in 0..gl.len().max(wl.len()) {
let g = gl.get(i).copied().unwrap_or("<eof>");
let w = wl.get(i).copied().unwrap_or("<eof>");
if g != w {
panic!("{pack}/{file} differs at line {}:\n pack: {w}\n rust: {g}", i + 1);
}
}
panic!("{pack}/{file} differs only in trailing bytes (len {} vs {})", got.len(), want.len());
}
}
#[test]
fn hot_packs_program_and_vectors() {
for pack in HOT_PACKS {
let e = hepoch(pack);
let p = &e.program;
let j = hjson(pack, "program.json");
let h = p.class.hot.unwrap();
assert_eq!(j["generator"].as_u64().unwrap() as u32, GENERATOR_VERSION);
assert_eq!(j["attempt"].as_u64().unwrap() as u32, p.attempt);
assert_eq!(hex64(&j["program_id"]), p.program_id(), "{pack}: program id");
let dataset_slots = if h.added { 16 } else { 16 - h.k as usize };
assert_eq!(j["loads_per_hash"].as_u64().unwrap() as usize, (dataset_slots + h.k as usize) * 8);
assert_eq!(j["hot_table"]["mb"].as_u64().unwrap(), h.mb as u64);
assert_eq!(j["hot_table"]["slots"].as_u64().unwrap(), h.k as u64);
assert_eq!(j["hot_table"]["dataset_slots"].as_u64().unwrap() as usize, dataset_slots);
assert_eq!(j["hot_table"]["words"].as_u64().unwrap() as u32, p.hot_words());
assert_eq!(j["op_mix"]["hot"].as_u64().unwrap(), h.k as u64, "{pack}: k hot instructions");
assert_eq!(j["op_mix"]["load"].as_u64().unwrap() as usize, dataset_slots);
assert_eq!(p.items_per_warp(), dataset_slots * 8 * 32);
assert!(accept::check(p).is_ok(), "{pack}: passes the acceptance rule");
let v2 = &epoch("igneum-genesis-mh").program;
if !h.added {
// replaced form: the version 2 genesis program with k loads redirected (attempt 0 on both)
assert_eq!(p.attempt, v2.attempt);
for (a, b) in p.instrs.iter().zip(v2.instrs.iter()) {
if a.op == Op::Hot {
assert_eq!(b.op, Op::Load);
} else {
assert_eq!(a, b);
}
}
} else {
// added form: 16 + k load slots, so another slot draw and another program; 16 dataset loads stay
assert_ne!(p.instrs, v2.instrs);
assert_eq!(p.instrs.iter().filter(|i| i.op == Op::Load).count(), 16);
assert!(p.instrs.iter().all(|i| i.width == 1));
}
// the hot table: the pack's head, last line and fingerprint
let v = hjson(pack, "vectors.json");
let t = e.dataset.hot.as_ref().unwrap();
assert_eq!(t.n_words(), p.hot_words());
let head: Vec<u32> = v["hot_head"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(&t.words()[..16], &head[..]);
let last: Vec<u32> = v["hot_last_line"].as_array().unwrap().iter().map(hex32).collect();
assert_eq!(&t.words()[t.words().len() - 16..], &last[..]);
assert_eq!(t.fnv1a64(), hex64(&v["hot_fnv1a64"]), "{pack}: hot_fnv1a64");
assert_eq!(t.key, igneum_pow::memhard::hot_key(&p.seed_bytes));
// the cache is the day's, unchanged by the class
assert_eq!(e.dataset.memhard().unwrap().cache.fnv1a64(), 0x48c4f5bf24166b2e);
// 96 vectors
let warps = v["warps"].as_array().unwrap();
assert_eq!(warps.len(), 3);
for w in warps {
let base = w["base_nonce"].as_u64().unwrap() as u32;
let expected: Vec<u64> = w["expected"].as_array().unwrap().iter().map(hex64).collect();
let got = e.hash_warp(base);
for lane in 0..32 {
assert_eq!(got[lane], expected[lane], "{pack}: base {base} lane {lane}");
}
assert_eq!(e.hash(base + 5), expected[5]);
}
// the dataset words are the day's
let head: Vec<u32> = v["dataset_head"].as_array().unwrap().iter().map(hex32).collect();
for (i, hd) in head.iter().enumerate() {
assert_eq!(e.dataset.word(i as u32), *hd);
}
}
// the same k at three sizes: identical programs, three fingerprints, three vector sets
let a = hepoch("hot32k4");
let b = hepoch("hot64k4");
let c = hepoch("hot96k4");
assert_eq!(a.program.instrs, b.program.instrs);
assert_eq!(b.program.instrs, c.program.instrs);
assert_ne!(a.hash_warp(0), b.hash_warp(0));
assert_ne!(b.hash_warp(0), c.hash_warp(0));
}
#[test]
fn hot_packs_emitted_sources_and_load_forms() {
for pack in HOT_PACKS {
let e = hepoch(pack);
let p = &e.program;
let k = p.class.hot.unwrap().k as usize;
let dataset_loads = p.class.dataset_slots();
let day = hjson(pack, "program.json")["dataset"]["day"].as_str().unwrap().to_string();
let mp = &e.dataset.memhard().unwrap().params;
hassert_same_text(pack, "kernel.cu", &cuda_kernel(p, Some(mp)));
hassert_same_text(pack, "kernel_bound.cu", &cuda_kernel_bound(p, Some(mp)));
hassert_same_text(pack, "program.metal", &metal_program(p, e.dataset.log2_words, LoadSource::Stored));
hassert_same_text(pack, "program_bound.metal", &metal_program_bound(p, e.dataset.log2_words));
hassert_same_text(pack, "kernel.cl", &opencl_kernel(p, Some(mp)));
hassert_same_text(pack, "kernel_bound.cl", &opencl_kernel_bound(p, Some(mp)));
hassert_same_text(pack, "program.h", &program_header(p, &day, &e.dataset));
hassert_same_text(pack, "memhard.h", &cuda_memhard_header(p, mp));
hassert_same_text(pack, "memhard.metal", &metal_memhard_for(p, mp));
assert_ne!(metal_memhard_for(p, mp), metal_memhard(mp), "{pack}: the hot fill kernel is in memhard.metal");
let got = program_json(p, &day, &e.dataset);
hassert_same_text(pack, "program.json", &got);
let _: Value = serde_json::from_str(&got).expect("program.json is valid JSON");
let v = hjson(pack, "vectors.json");
let out = export_pack(e, &day, v["source"].as_str().unwrap());
let file = |name: &str| -> &str { &out.files.iter().find(|(n, _)| n == name).unwrap().1 };
hassert_same_text(pack, "vectors.json", file("vectors.json"));
hassert_same_text(pack, "vectors.h", file("vectors.h"));
assert_eq!(out.files.len(), 12);
// One form per dialect, exactly 16 - k masked dataset loads and k hot loads in every hash kernel; the fill
// kernel is present once per source that builds the table.
for (file, load, masked, hot) in [
("kernel.cu", "ds[r", " & mask]", "hot[__umulhi(r"),
("kernel_bound.cu", "ds[r", " & mask]", "hot[__umulhi(r"),
("program.metal", "dataset[r", " & MASK]", "hot[mulhi(r"),
("program_bound.metal", "dataset[r", " & MASK]", "hot[mulhi(r"),
("kernel.cl", "ds[r", " & mask]", "hot[mul_hi(r"),
] {
let text = hread(pack, file);
assert_eq!(text.matches(load).count(), dataset_loads, "{pack}/{file}: {dataset_loads} dataset loads");
assert_eq!(text.matches(masked).count(), dataset_loads, "{pack}/{file}: masked loads");
assert_eq!(text.matches(hot).count(), k, "{pack}/{file}: {k} hot loads");
assert!(text.contains(&format!("#define HOT_WORDS 0x{:08x}u", p.hot_words())), "{pack}/{file}: HOT_WORDS literal");
}
// kernel_bound.cl carries both kernels
let text = hread(pack, "kernel_bound.cl");
assert_eq!(text.matches("hot[mul_hi(r").count(), 2 * k);
assert_eq!(text.matches("ds[r").count(), 2 * dataset_loads);
for file in ["kernel.cu", "kernel.cl", "kernel_bound.cl", "memhard.metal"] {
assert_eq!(hread(pack, file).matches("igneum_hot_fill(").count(), 1, "{pack}/{file}: one hot fill kernel");
}
assert_eq!(hread(pack, "memhard.h").matches("void ht_segment(").count(), 1);
let ph = hread(pack, "program.h");
assert!(ph.contains(&format!("#define IGNEUM_HOT_MB {}", p.class.hot.unwrap().mb)));
assert!(ph.contains(&format!("#define IGNEUM_HOT_SLOTS {k}")));
assert!(ph.contains("igneum_launch_hot_fill("));
}
}
// ---------------------------------------------------------------------------------------------------------------
// Class v5 (docs/design/class-v5-stored-state.md, 7 October 2026): the pinned pack under proto-cuda/packs-ca3-v5/
// ---------------------------------------------------------------------------------------------------------------
fn v5_packs_dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../proto-cuda/packs-ca3-v5")
}
fn v5_read(pack: &str, file: &str) -> String {
std::fs::read_to_string(v5_packs_dir().join(pack).join(file)).unwrap_or_else(|e| panic!("{pack}/{file}: {e}"))
}
fn v5_json(pack: &str, file: &str) -> Value {
serde_json::from_str(&v5_read(pack, file)).unwrap()
}
/// The epoch of a pinned class v4 or v5 pack of the string seed and day: the program through the seam, the dataset at
/// the day-0 size, and for a v5 pack the leaves of its `state.igsd1` (the devnet's state stream of 7 October 2026,
/// node 1's exec snapshot at chain block 159,357: 93 records, root 0x1c583d35...).
fn v5_epoch(pack: &str) -> Epoch {
let j = v5_json(pack, "program.json");
let seed = j["seed"].as_str().unwrap();
let class = ProgramClass::parse(j["program_class"].as_str().unwrap()).unwrap();
let program = generate_from_seed_bytes_program_class(seed, seed.as_bytes(), class, None);
let day = j["dataset"]["day"].as_str().unwrap();
let log2 = j["dataset"]["log2_words"].as_u64().unwrap() as u32;
let shape = Shape::for_class(&program.class);
let mut dataset = DatasetSource::new_shape(day, DatasetMode::MemoryHard, log2, shape);
if class == ProgramClass::V5 {
let stream = igneum_pow::StateStream::read_file(&v5_packs_dir().join(pack).join("state.igsd1")).unwrap();
dataset = dataset.with_leaves(std::sync::Arc::new(igneum_pow::StateLeaves::from_stream(&stream, log2)));
}
Epoch { program, dataset }
}
/// The class v5 pack is the class v4 program of the same seed over the state leaves: generator 5 and
/// `program_id(5, seed, attempt)`, the base program, the shadow block and the dataset's cache equal to the v4 pack's,
/// every vector and dataset word different, every emitted file byte for byte what the crate exports (leaves.bin
/// included, its FNV in program.h), and the hash kernel text of kernel.cu equal to the v4 pack's but for the build
/// kernel and the class lines. The known-failed case first: the v4 control pack's vectors under the v5 epoch agree on
/// no lane.
#[test]
fn v5_pack_is_the_v4_program_over_the_state_leaves() {
let e5 = v5_epoch("v5-genesis");
let e4 = v5_epoch("v4-genesis");
let v4 = v5_json("v4-genesis", "vectors.json");
// the known-failed case: the v4 pack's hashes are not the v5 epoch's on any lane
let out4: Vec<u64> = v4["warps"][0]["expected"].as_array().unwrap().iter().map(hex64).collect();
let got5 = e5.hash_warp(0);
assert_eq!(out4.iter().zip(got5.iter()).filter(|(a, b)| a == b).count(), 0, "0 of 32 lanes of the v4 pack agree with the v5 epoch");
assert_eq!(e4.hash_warp(0).to_vec(), out4, "the v4 control pack is the v4 epoch");
// the program: v4's draw, generator 5, the state in the class and the id
assert_eq!(e5.program.generator, igneum_pow::GENERATOR_VERSION_V5);
assert_eq!(e5.program.class, igneum_pow::V5_CLASS);
assert_eq!(e5.program.class.name(), "mx8+sh256x27+state");
assert_eq!(e5.program.instrs, e4.program.instrs);
assert_eq!(e5.program.shadow, e4.program.shadow);
assert_eq!((e5.program.seed, e5.program.attempt), (e4.program.seed, e4.program.attempt));
assert_eq!(e5.program.program_id(), igneum_pow::generator::program_id(igneum_pow::GENERATOR_VERSION_V5, &e5.program.seed, e5.program.attempt));
assert_ne!(e5.program.program_id(), e4.program.program_id());
// the dataset: the same cache, other items
let m5 = e5.dataset.memhard().unwrap();
let m4 = e4.dataset.memhard().unwrap();
assert_eq!(m5.cache.fnv1a64(), m4.cache.fnv1a64(), "one day cache");
assert!(m5.shape().state && !m4.shape().state);
let leaves = e5.dataset.leaves().unwrap();
assert_eq!((leaves.n(), leaves.records_total, leaves.sampled), (93, 93, false));
assert_ne!(e5.dataset_word(0), e4.dataset_word(0));
// every file as the crate exports it, leaves.bin included
for pack in ["v4-genesis", "v5-genesis"] {
let e = if pack == "v5-genesis" { &e5 } else { &e4 };
let v = v5_json(pack, "vectors.json");
let out = export_pack(e, v["day"].as_str().unwrap(), v["source"].as_str().unwrap());
for (name, text) in &out.files {
assert_eq!(v5_read(pack, name), *text, "{pack}/{name} differs from the export");
}
for (name, bytes) in &out.binaries {
assert_eq!(std::fs::read(v5_packs_dir().join(pack).join(name)).unwrap(), *bytes, "{pack}/{name}");
}
assert_eq!(out.binaries.len(), (pack == "v5-genesis") as usize);
}
let h5 = v5_read("v5-genesis", "program.h");
assert!(h5.contains("#define IGNEUM_PROGRAM_CLASS \"v5\"") && h5.contains("#define IGNEUM_STATE_LEAVES 93") && h5.contains(&format!("#define IGNEUM_STATE_LEAVES_FNV64 {}", igneum_pow::emit::hex64(leaves.fnv1a64()))));
assert!(h5.contains("igneum_launch_build(uint32_t* ds, const uint32_t* cache, const uint32_t* leaves, uint32_t nLeaves, uint32_t nItems)"));
// the hash kernel text is class v4's byte for byte; the build kernel and the class lines are what differ
let hash_text = |s: &str| {
let a = s.find("__global__ void igneum_hash(").unwrap();
let b = s.find("// Host-side launch wrappers").unwrap();
s[a..b].to_string()
};
let k5 = v5_read("v5-genesis", "kernel.cu");
let k4 = v5_read("v4-genesis", "kernel.cu");
assert_eq!(hash_text(&k5), hash_text(&k4), "the hash kernel is class v4's");
assert!(k5.contains("mh_item(cache, mh_leaf(leaves, nLeaves, t), t, s)") && !k4.contains("mh_leaf"));
let mh5 = v5_read("v5-genesis", "memhard.h");
assert!(mh5.contains("s[i] ^= leaf[i]"), "the leaf XOR before the first mixer");
}

View file

@ -0,0 +1,143 @@
//! The miner's CPU re-check against the worker's reference path, class v3 and class v4 (6 October 2026).
//!
//! The fleet's 10-member pool run (18:14Z to 18:24Z): 0 shares accepted in ten minutes, every GPU answer refused as
//! `WORKER MISMATCH`, because the pool fork's miner re-hashed each share with a fixed class v2 program while the 0.3.14
//! CUDA worker hashed the class v3 program of the epoch. The rule since: the re-check builds its program through the
//! chain seam (`Epoch::chain_program` and `Epoch::chain_dataset_day`, what the node's `IgneumEngine` calls) from the
//! template's `(epoch seed, day, program class, era seed)`, never from a fixed class.
//!
//! This test pins that seam against the worker's reference for both classes the packs carry: the program the pack's
//! kernels were emitted from (program.json, generator 3 or 4, with its id) and the pack's 96 vectors; then one known
//! nonce through the worker's path (`block_init_words` plus `interpret_warp_init` on the pack's program) and through
//! the re-check's path (the same on the seam's program and dataset) must agree, and the other class's program and
//! the fixed-v2 program of the same seed must disagree (the mismatch the fleet saw).
use igneum_pow::bind::{block_init_words, lane_nonce, unhex};
use igneum_pow::verify::DatasetSource;
use igneum_pow::{interpret_warp_init, DatasetMode, Epoch, ProgramClass, Shape};
use serde_json::Value;
use std::path::PathBuf;
fn pack_dir(rel: &str) -> PathBuf {
let p = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../proto-cuda").join(rel);
assert!(p.join("program.json").is_file(), "pack {} is missing; this test never skips", p.display());
p
}
fn json(dir: &std::path::Path, f: &str) -> Value {
serde_json::from_str(&std::fs::read_to_string(dir.join(f)).unwrap_or_else(|e| panic!("{}: {e}", dir.join(f).display()))).unwrap()
}
fn hex64(v: &Value) -> u64 {
u64::from_str_radix(v.as_str().unwrap().trim_start_matches("0x"), 16).unwrap()
}
struct PackRef {
class: ProgramClass,
seed_label: String,
seed_bytes: Vec<u8>,
era: Vec<u8>,
day_bytes: Vec<u8>,
log2: u32,
/// The worker's reference: the pack's program and day dataset, checked against the pack's vectors
reference: Epoch,
}
/// The pack as the worker sees it: program.json's program (generator, id and class as recorded) over the pack's
/// day dataset, trusted only after its 96 vectors reproduce.
fn load(rel: &str, want: ProgramClass) -> PackRef {
let dir = pack_dir(rel);
let j = json(&dir, "program.json");
let class = match j["program_class"].as_str().unwrap() {
"v3" => ProgramClass::V3,
"v4" => ProgramClass::V4,
other => panic!("{rel}: class {other}"),
};
assert_eq!(class, want, "{rel}: the pack's class");
let seed_label = j["seed"].as_str().unwrap().to_string();
let seed_bytes = unhex(j["seed_bytes"].as_str().unwrap()).unwrap();
let era = unhex(j["era_seed_bytes"].as_str().unwrap()).unwrap();
let day_bytes = unhex(j["dataset"]["day_bytes"].as_str().unwrap()).unwrap();
let log2 = j["dataset"]["log2_words"].as_u64().unwrap() as u32;
let program = igneum_pow::generate_from_seed_bytes_program_class(&seed_label, &seed_bytes, class, Some(&era));
assert_eq!(program.generator, j["generator"].as_u64().unwrap() as u32, "{rel}: generator");
assert_eq!(program.generator, class.generator_version(), "{rel}: the generator is the class's");
assert_eq!(program.program_id(), hex64(&j["program_id"]), "{rel}: program id");
let shape = Shape::for_class(&program.class);
let mut dataset = DatasetSource::from_key_shape(igneum_pow::seed::seed_words_from_bytes(&day_bytes), DatasetMode::MemoryHard, log2, shape);
dataset.key_bytes = day_bytes.clone();
let reference = Epoch { program, dataset };
let v = json(&dir, "vectors.json");
let warps = v["warps"].as_array().unwrap();
assert_eq!(warps.len(), 3, "{rel}: three vector warps");
for w in warps {
let base = w["base_nonce"].as_u64().unwrap() as u32;
let got = reference.hash_warp(base);
for (lane, e) in w["expected"].as_array().unwrap().iter().enumerate() {
assert_eq!(got[lane], hex64(e), "{rel}: vector base {base} lane {lane}");
}
}
PackRef { class, seed_label, seed_bytes, era, day_bytes, log2, reference }
}
/// The re-check's epoch: the chain seam the node engine and the miner call, from the template's four values.
/// The packs are day-0 caches, so days since genesis is 0 and the genesis dataset size is the pack's.
fn recheck_epoch(p: &PackRef) -> Epoch {
Epoch { program: Epoch::chain_program(&p.seed_bytes, Some(&p.era), p.class, &p.seed_label), dataset: Epoch::chain_dataset_day(&p.day_bytes, p.class, 0, p.log2) }
}
const PREHASH: [u8; 32] = [0x5a; 32];
const NONCE: u64 = 0x1234_5678_0000_0bb7; // high word 0x12345678, lane 0x0bb7 (warp base 0x0ba0, lane 23)
/// The bound lane hash of one nonce on an epoch, the way a worker computes it (init words from the prehash and the
/// nonce's high word, the warp at the lane's base) and the way `EpochRef::hash_bound` re-checks it.
fn bound(e: &Epoch, prehash: &[u8; 32], nonce: u64) -> u64 {
let init = block_init_words(prehash, nonce);
let lane = lane_nonce(nonce);
interpret_warp_init(&e.program, &init, lane & !31, &e.dataset).hashes[(lane & 31) as usize]
}
#[test]
fn cpu_recheck_equals_the_worker_reference_for_class_v3_and_class_v4() {
let v3 = load("packs-ca2-mixer/mx8-devnet-epoch0", ProgramClass::V3);
let v4 = load("packs-ca3-v4/v4-devnet-epoch0", ProgramClass::V4);
assert_eq!(v3.seed_bytes, v4.seed_bytes, "the two packs share the epoch seed (devnet genesis), so only the class differs");
assert_eq!(v3.era, v4.era);
let mut hashes = Vec::new();
for p in [&v3, &v4] {
let re = recheck_epoch(p);
assert_eq!(re.program.program_id(), p.reference.program.program_id(), "{:?}: the seam's program is the pack's", p.class);
assert_eq!(re.program.generator, p.reference.program.generator);
assert_eq!(re.program.instrs.len(), p.reference.program.instrs.len());
let worker = bound(&p.reference, &PREHASH, NONCE);
let cpu = bound(&re, &PREHASH, NONCE);
assert_eq!(cpu, worker, "{:?}: CPU re-check {cpu:016x} against the worker's reference {worker:016x}", p.class);
// the same nonce through a second prehash, so the agreement is not one lucky lane
let (w2, c2) = (bound(&p.reference, &[0xa5; 32], NONCE ^ 0x1f), bound(&re, &[0xa5; 32], NONCE ^ 0x1f));
assert_eq!(c2, w2, "{:?}: second nonce", p.class);
hashes.push(cpu);
}
assert_ne!(hashes[0], hashes[1], "class v3 and class v4 programs of one seed hash a nonce differently");
// the fleet's mismatch: a fixed class v2 program on the class v3 epoch's seed
let v2 = Epoch { program: Epoch::chain_program(&v3.seed_bytes, None, ProgramClass::V2, &v3.seed_label), dataset: Epoch::chain_dataset_day(&v3.day_bytes, ProgramClass::V2, 0, v3.log2) };
assert_ne!(bound(&v2, &PREHASH, NONCE), hashes[0], "a class v2 re-check refuses a class v3 share");
assert_ne!(bound(&v2, &PREHASH, NONCE), hashes[1], "a class v2 re-check refuses a class v4 share");
}
/// The generator-4 program id rule (counter-asic-3-status.md, the blocker closed 6 October 2026): the v4 program of
/// a seed carries another id than the v3 program of the same seed, so a stale worker across the activation sees the
/// mismatch, while v2 and v3 ids stay as the packs pinned them.
#[test]
fn program_ids_differ_between_class_v3_and_class_v4_of_one_seed() {
let v3 = load("packs-ca2-mixer/mx8-devnet-epoch0", ProgramClass::V3);
let v4 = load("packs-ca3-v4/v4-devnet-epoch0", ProgramClass::V4);
assert_eq!(v3.reference.program.program_id(), 0x73bc_bfe8_ccf9_88f1, "the v3 control's id as pinned");
// the amended class v4 (AP-F8-1, AP-F8-3): sub-version 3 (object byte 7; the acceptance executes the shadow block)
// is the pinned id below; c120d7963abdcd96 (the 6 October stream, byte 4), 1a4230699a6b9c60 (sub-version 1, the
// one-writer rule, 0.3.20's and 0.3.21's byte 5) and a788661687db4bb3 (sub-version 2, never shipped) must differ
assert_ne!(v4.reference.program.program_id(), 0xc120_d796_3abd_cd96, "the pre-amendment v4 id must differ");
assert_ne!(v4.reference.program.program_id(), 0x1a42_3069_9a6b_9c60, "the sub-version-1 id must differ");
assert_ne!(v4.reference.program.program_id(), 0xa788_6616_87db_4bb3, "the sub-version-2 id must differ");
assert_eq!(v4.reference.program.program_id(), 0xa785_0016_87d8_688a, "the sub-version-3 v4 id as pinned");
assert_ne!(v3.reference.program.program_id(), v4.reference.program.program_id());
}

View file

@ -0,0 +1,769 @@
//! Soundness tests of layer 3 of `docs/plans/counter-asic-2.md`: the per-warp scratch with read-modify-writes
//! (variant 5 of the read-width experiment, `LoadClass::scratch(k, kb)`). Analysis and results:
//! `docs/analysis/scratch-soundness.md`. Every test is parametric over the class's slot count
//! (`scratch_slots_per_lane()`), so the 32 and 128 KiB geometries and any later one run the same checks.
//!
//! What runs under plain `cargo test`:
//! 1. `rewrite_is_a_bijection_of_the_fold_value`, `fill_is_a_bijection_of_the_nonce`: the written words as
//! functions (question 1).
//! 2. `written_words_unbiased_and_rehit_rates`: bit bias of every written word over 2^11 units x 3 seeds per class
//! (the TESTS.md section 3 shape), and the measured slot re-hit rate against the birthday formula (question 2).
//! 3. `edge_programs_match_the_hand_model`: hand-built programs that drive every read-modify-write of a hash to
//! slot 0, slot MASK, through out-of-range registers, to one slot per lane, alternating two slots, and 16
//! read-modify-writes per iteration on one slot; the interpreter against an independent hand model, and the
//! hand model shown to have teeth (question 3, CPU half).
//! 4. `scr_packs_regenerate_and_pass_the_static_scratch_check`: every emitted kernel of every scr pack under
//! `proto-cuda/packs-readwidth` regenerates from its program.json and passes the static scratch-mask check;
//! the check is shown to fail on four deliberate breaks (question 4).
//! 5. `fuzz_scr_programs_cpu`: 200 generated scratch programs over the six classes, generator contract on every
//! instruction, 4 units each at base nonces across the 32-bit range including the wrap; with
//! `IGNEUM_SCRATCH_PACKS_OUT=<dir>` it also writes the packs (and the edge packs) for the Metal runs of
//! `proto-metal/packbench` (question 3 GPU half, question 4, `TESTS.md` section 9 shape).
use igneum_pow::emit::{
cuda_kernel, cuda_kernel_bound, export_pack, metal_program, metal_program_bound, opencl_kernel,
opencl_kernel_bound, vectors_json, LoadSource,
};
use igneum_pow::generator::{
generate_class, generate_from_seed_bytes_class, Instr, LoadClass, Op, Program, GENERATOR_VERSION, INSTR_COUNT,
ITERATIONS, LANES,
};
use igneum_pow::seed::{seed_words_from_bytes, SplitMix64};
use igneum_pow::verify::{
fold_words, interpret_warp_scratch, scratch_fill, scratch_rewrite, splitmix32, DatasetMode, DatasetSource,
Epoch, ScratchEvent, FOLD_MUL, FOLD_ROT,
};
use serde_json::Value;
use std::collections::HashMap;
use std::path::PathBuf;
/// The classes under study: the two capped geometries (32 and 128 KiB per warp: 64 and 256 slots per lane) at the
/// RMW shares the readwidth branch measures.
const CLASSES: [&str; 6] = ["scr2k32", "scr4k32", "scr8k32", "scr2k128", "scr4k128", "scr8k128"];
fn class(name: &str) -> LoadClass {
LoadClass::parse(name).unwrap_or_else(|| panic!("class {name}"))
}
// ---------------------------------------------------------------------------------------------------------------
// 1. The written words as functions (question 1)
// ---------------------------------------------------------------------------------------------------------------
/// For a fixed slot content `w`, each of the three rewritten words is a bijection of the fold value `x`
/// (`x ^ w1`, `rotl(x, 7) ^ w2`, `x + w0`), so the rewrite is injective in `x` and a uniform `x` gives a uniform
/// word in every position. Checked over 2^16 consecutive `x` for 16 random `w`.
#[test]
fn rewrite_is_a_bijection_of_the_fold_value() {
let mut rng = SplitMix64::new(0x7363_7261_7463_6801);
for _ in 0..16 {
let w = [rng.next() as u32, rng.next() as u32, rng.next() as u32];
let x0 = rng.next() as u32;
let mut seen = [vec![false; 1 << 16], vec![false; 1 << 16], vec![false; 1 << 16]];
for i in 0..(1u32 << 16) {
let x = x0.wrapping_add(i);
let out = scratch_rewrite(x, &w);
for j in 0..3 {
// a bijection of x maps 2^16 consecutive x to 2^16 distinct words; the low 16 bits alone are
// distinct for the xor words (x ^ c) and for the add word (x + c), since both act on the low 16
// bits as bijections of the low 16 bits of x; the rotl word is checked on its rotated-back bits
let key = if j == 1 { out[j].rotate_right(7) & 0xffff } else { out[j] & 0xffff };
assert!(!seen[j][key as usize], "word {j} repeats inside 2^16 consecutive x");
seen[j][key as usize] = true;
}
}
}
// The rewrite inverts: from the old content and any ONE written word the fold value is recovered, so a
// rewritten slot carries exactly 32 bits of new state (the point of question 2's arithmetic).
let w = [0x1234_5678, 0x9abc_def0, 0x0fed_cba9];
let x = 0xdead_beef;
let out = scratch_rewrite(x, &w);
assert_eq!(out[0] ^ w[1], x);
assert_eq!((out[1] ^ w[2]).rotate_right(7), x);
assert_eq!(out[2].wrapping_sub(w[0]), x);
}
/// For a fixed (seed, slot, j) the fill is a bijection of the lane nonce: `splitmix32` is a bijection of its
/// 32-bit input and the input `((base + lane) ^ s) + c` is a bijection of `base + lane`. Over 2^16 consecutive
/// nonces no fill word repeats, for 8 slots x 3 words.
#[test]
fn fill_is_a_bijection_of_the_nonce() {
let seed = seed_words_from_bytes(b"igneum-genesis");
for slot in [0u32, 1, 63, 64, 255, 1023, 2047] {
for j in 0..3u32 {
let mut words: Vec<u32> = (0..(1u32 << 16)).map(|n| scratch_fill(&seed, n, 0, slot, j)).collect();
words.sort_unstable();
words.dedup();
assert_eq!(words.len(), 1 << 16, "slot {slot} word {j}: fill words of 2^16 consecutive nonces are distinct");
}
}
// base + lane is the lane nonce: the fill of lane l at base b is the fill of lane 0 at base b + l
assert_eq!(scratch_fill(&seed, 0x1000, 7, 5, 2), scratch_fill(&seed, 0x1007, 0, 5, 2));
// and it wraps with the nonce: base 0xffffffe0, lane 31 is nonce 0xffffffff; lane 32 would be nonce 0
assert_eq!(scratch_fill(&seed, 0xffff_ffe0, 32, 5, 2), scratch_fill(&seed, 0, 0, 5, 2));
// the three word positions of one slot and nonce are three different permutation outputs
let f: Vec<u32> = (0..3).map(|j| scratch_fill(&seed, 12345, 7, 17, j)).collect();
assert!(f[0] != f[1] && f[1] != f[2] && f[0] != f[2]);
}
// ---------------------------------------------------------------------------------------------------------------
// 2. Uniformity of the written words and the slot re-hit rate (questions 1 and 2)
// ---------------------------------------------------------------------------------------------------------------
/// Birthday arithmetic: the expected number of distinct slots after `n` uniform draws from `s` slots.
fn expected_distinct(s: usize, n: usize) -> f64 {
let s = s as f64;
s * (1.0 - (1.0 - 1.0 / s).powi(n as i32))
}
struct ClassStats {
units: usize,
events: usize,
hits: usize,
/// ones count per bit of the written words, 3 x 32
ones: [[u64; 32]; 3],
/// ones count per bit of written XOR read (the change the rewrite makes to the slot)
delta_ones: [[u64; 32]; 3],
/// re-hit depth histogram: how many earlier RMWs the slot had seen in this unit (0 = first touch)
depth: Vec<usize>,
max_depth: usize,
/// how often each slot index was addressed (the slot comes from a register's low bits)
slot_hist: Vec<u64>,
}
fn class_stats(name: &str, seeds: &[&str], units_per_seed: usize) -> ClassStats {
let c = class(name);
let mut st = ClassStats {
units: 0,
events: 0,
hits: 0,
ones: [[0; 32]; 3],
delta_ones: [[0; 32]; 3],
depth: vec![0; 256],
max_depth: 0,
slot_hist: vec![0; c.scratch_slots_per_lane()],
};
let ds = DatasetSource::new("2026-10-03", DatasetMode::ClosedForm, 28);
for seed in seeds {
let p = generate_class(seed, c);
assert_eq!(p.scratch_ops_per_hash(), c.scratch_slots() * ITERATIONS);
for u in 0..units_per_seed {
let base = (u as u32).wrapping_mul(32).wrapping_add(0x4000_0000);
let (_, ev) = interpret_warp_scratch(&p, &p.seed, base, &ds, true);
assert_eq!(ev.len(), p.scratch_ops_per_hash() * LANES);
let mut count: HashMap<(u8, u32), usize> = HashMap::new();
for e in &ev {
assert!(e.slot < c.scratch_slots_per_lane() as u32, "slot inside the lane's scratch");
let d = count.entry((e.lane, e.slot)).or_insert(0);
assert_eq!(e.hit, *d > 0, "hit flag agrees with the unit's own history");
assert_eq!(e.written, scratch_rewrite(e.x, &e.read));
if !e.hit {
let fill = [
scratch_fill(&p.seed, base, e.lane as u32, e.slot, 0),
scratch_fill(&p.seed, base, e.lane as u32, e.slot, 1),
scratch_fill(&p.seed, base, e.lane as u32, e.slot, 2),
];
assert_eq!(e.read, fill, "a first touch reads the fill");
}
st.depth[(*d).min(255)] += 1;
st.max_depth = st.max_depth.max(*d);
st.slot_hist[e.slot as usize] += 1;
*d += 1;
st.events += 1;
st.hits += e.hit as usize;
for j in 0..3 {
for b in 0..32 {
st.ones[j][b] += ((e.written[j] >> b) & 1) as u64;
st.delta_ones[j][b] += (((e.written[j] ^ e.read[j]) >> b) & 1) as u64;
}
}
}
st.units += 1;
}
}
st
}
/// Bit bias of every written word (and of the change each rewrite makes) within 6 sigma of a fair coin, over
/// 3 seeds x 2^11 units per class (131,072 hashes per seed set); the slot re-hit rate against the birthday
/// formula within 3 percent relative. The table printed here is the one in the analysis.
#[test]
fn written_words_unbiased_and_rehit_rates() {
let seeds = ["igneum-genesis", "igneum-genesis/stats1", "igneum-genesis/stats2"];
let units = 1usize << 11;
println!("class | slots/lane | RMW/hash | events | re-hits | re-hit % | birthday % | slot chi2 z (spread) | max depth | max bias sigma | max delta bias sigma");
for name in CLASSES {
let c = class(name);
let st = class_stats(name, &seeds, units);
let n = st.events as f64;
let sigma = (n / 4.0).sqrt();
let mut worst = 0.0f64;
let mut worst_delta = 0.0f64;
for j in 0..3 {
for b in 0..32 {
let z = (st.ones[j][b] as f64 - n / 2.0).abs() / sigma;
let zd = (st.delta_ones[j][b] as f64 - n / 2.0).abs() / sigma;
assert!(z <= 6.0, "{name}: written word {j} bit {b} biased: {z:.2} sigma");
assert!(zd <= 6.0, "{name}: rewrite delta word {j} bit {b} biased: {zd:.2} sigma");
worst = worst.max(z);
worst_delta = worst_delta.max(zd);
}
}
let per_lane_hash = c.scratch_slots() * ITERATIONS;
let s = c.scratch_slots_per_lane();
let exp_hits = per_lane_hash as f64 - expected_distinct(s, per_lane_hash);
let exp_pct = 100.0 * exp_hits / per_lane_hash as f64;
let got_pct = 100.0 * st.hits as f64 / st.events as f64;
// chi-square of the slot histogram against uniform (df = s - 1): the slot is a register's low bits, and
// the measured re-hit rate runs above the uniform birthday rate (the finding of the analysis, question 2)
let expect_per_slot = n / s as f64;
let chi2: f64 = st.slot_hist.iter().map(|&h| (h as f64 - expect_per_slot).powi(2) / expect_per_slot).sum();
let chi2_z = (chi2 - (s as f64 - 1.0)) / (2.0 * (s as f64 - 1.0)).sqrt();
let hot = *st.slot_hist.iter().max().unwrap() as f64 / expect_per_slot;
let cold = *st.slot_hist.iter().min().unwrap() as f64 / expect_per_slot;
println!(
"{name} | {s} | {per_lane_hash} | {} | {} | {got_pct:.2} | {exp_pct:.2} | {chi2_z:.1} (hottest slot {hot:.2}x, coldest {cold:.2}x) | {} | {worst:.2} | {worst_delta:.2}",
st.events, st.hits, st.max_depth
);
// a regression band, not a uniformity claim: the rate sits between the uniform birthday rate and twice it
assert!(
got_pct >= 0.9 * exp_pct && got_pct <= 2.0 * exp_pct,
"{name}: re-hit rate {got_pct:.2}% against birthday {exp_pct:.2}%"
);
// depth histogram: the number of earlier RMWs a re-hit slot had seen in the unit
let shown: Vec<String> = st.depth.iter().take(st.max_depth + 1).enumerate().map(|(d, n)| format!("{d}:{n}")).collect();
println!(" depth histogram {}", shown.join(" "));
}
}
// ---------------------------------------------------------------------------------------------------------------
// 3. Hand-built edge programs against an independent hand model (question 3, CPU half)
// ---------------------------------------------------------------------------------------------------------------
fn ins(op: Op, dst: u8, src: u8) -> Instr {
Instr { op, dst, src, src2: 0, imm: 0, imm2: 0, rot: 1, bit: 0, mask: 1, width: 1, win: 0, off: 0 }
}
fn add_imm(dst: u8, src: u8, imm: u32) -> Instr {
Instr { op: Op::Add, dst, src, src2: 0, imm, imm2: imm, rot: 1, bit: 0, mask: 1, width: 1, win: 0, off: 0 }
}
/// A hand-built program of class `c` named `name` (its seed is the name, so its fill words and init words are
/// its own). These bypass the generator and the acceptance rule, like `TESTS.md` section 2; `sub r, r` zeroes a
/// register as the Swift edge set does.
fn edge(name: &str, c: LoadClass, instrs: Vec<Instr>) -> Program {
let seed_string = format!("igneum-scratch-edge/{name}");
let seed_bytes = seed_string.as_bytes().to_vec();
let k = instrs.iter().filter(|i| i.op == Op::Scratch).count();
assert_eq!(k, c.scratch_slots(), "{name}: the class carries the program's scratch count");
Program {
seed: seed_words_from_bytes(&seed_bytes),
seed_string,
seed_bytes,
generator: GENERATOR_VERSION,
attempt: 0,
class: c,
era_bytes: None,
instrs,
shadow: Vec::new(),
}
}
/// The edge set for a scratch of `kb` KiB per warp. Each entry: (name, what it drives, program).
fn edge_programs(kb: u8) -> Vec<(String, &'static str, Program)> {
let m = LoadClass::scratch(1, kb).scratch_slot_mask();
let dsts = [2u8, 3, 4, 5, 6, 7, 0, 2, 3, 4, 5, 6, 7, 0, 2, 3];
let scr = |n: usize, src: u8| -> Vec<Instr> { (0..n).map(|i| ins(Op::Scratch, dsts[i], src)).collect() };
let mut v = Vec::new();
// every RMW of the hash to slot 0 through a zero register: 64 dependent RMWs on one slot per lane
let mut p = vec![ins(Op::Sub, 1, 1)];
p.extend(scr(8, 1));
v.push(("slot0".to_string(), "r1 = 0: every RMW to slot 0", edge(&format!("slot0/k{kb}"), LoadClass::scratch(8, kb), p)));
// slot MASK through the in-range register MASK
let mut p = vec![ins(Op::Sub, 1, 1), ins(Op::Sub, 2, 2), add_imm(1, 2, m)];
p.extend(scr(8, 1));
v.push(("slotmask".to_string(), "r1 = MASK: every RMW to the last slot", edge(&format!("slotmask/k{kb}"), LoadClass::scratch(8, kb), p)));
// slot MASK through the out-of-range register 0xffffffff
let mut p = vec![ins(Op::Sub, 1, 1), ins(Op::Sub, 2, 2), add_imm(2, 1, 1), ins(Op::Sub, 1, 2)];
p.extend(scr(8, 1));
v.push(("ones".to_string(), "r1 = 0xffffffff: masked to the last slot", edge(&format!("ones/k{kb}"), LoadClass::scratch(8, kb), p)));
// slot 0 through the out-of-range register MASK + 1
let mut p = vec![ins(Op::Sub, 1, 1), ins(Op::Sub, 2, 2), add_imm(1, 2, m.wrapping_add(1))];
p.extend(scr(8, 1));
v.push(("maskplus1".to_string(), "r1 = MASK + 1: masked to slot 0", edge(&format!("maskplus1/k{kb}"), LoadClass::scratch(8, kb), p)));
// 16 RMWs per iteration on slot 0: 128 dependent RMWs on one slot per lane per hash
let mut p = vec![ins(Op::Sub, 1, 1)];
p.extend(scr(16, 1));
v.push(("sixteen".to_string(), "16 RMWs per iteration on slot 0", edge(&format!("sixteen/k{kb}"), LoadClass::scratch(16, kb), p)));
// one slot per lane from the init words: lanes with equal slots would show any cross-lane aliasing
// (r5 is the slot register and is never a destination here)
let p: Vec<Instr> = [0u8, 1, 2, 3, 4, 6, 7, 0].iter().map(|&d| ins(Op::Scratch, d, 5)).collect();
v.push(("lanevar".to_string(), "r5 never written: one init-dependent slot per lane", edge(&format!("lanevar/k{kb}"), LoadClass::scratch(8, kb), p)));
// alternating slot 0 and slot MASK inside one iteration
let mut p = vec![ins(Op::Sub, 1, 1), ins(Op::Sub, 2, 2), add_imm(2, 1, m)];
for (i, &d) in [3u8, 4, 5, 6, 7, 0, 3, 4].iter().enumerate() {
// r1 and r2 hold the two slots and are never destinations
p.push(ins(Op::Scratch, d, if i % 2 == 0 { 1 } else { 2 }));
}
v.push(("twoslots".to_string(), "slot 0 and slot MASK alternating", edge(&format!("twoslots/k{kb}"), LoadClass::scratch(8, kb), p)));
v
}
/// The hand model: a second, minimal interpreter for the ops the edge programs use (sub, add, scratch), with its
/// own slot store keyed by (lane, slot). `mutate` swaps the rewrite's words to show the comparison has teeth.
fn hand_model(p: &Program, base: u32, mutate: bool) -> [u64; 32] {
let seed = &p.seed;
let m = p.class.scratch_slot_mask();
let mut r = [[0u32; LANES]; 8];
for lane in 0..LANES {
let nonce = base.wrapping_add(lane as u32);
for i in 0..8 {
let mut x = nonce ^ seed[i];
x = x.wrapping_add(0x9e3779b9u32.wrapping_mul(i as u32 + 1));
x = splitmix32(x);
r[i][lane] = x ^ seed[(i + 1) & 7];
}
}
let mut store: HashMap<(usize, u32), [u32; 3]> = HashMap::new();
for _ in 0..ITERATIONS {
let sel = r[0];
for ins in &p.instrs {
let (d, a) = (ins.dst as usize, ins.src as usize);
match ins.op {
Op::Sub => {
for lane in 0..LANES {
r[d][lane] = r[d][lane].wrapping_sub(r[a][lane]);
}
}
Op::Add => {
for lane in 0..LANES {
let c = if (sel[lane] >> ins.bit) & 1 != 0 { ins.imm2 } else { ins.imm };
r[d][lane] = r[d][lane].wrapping_add(r[a][lane]).wrapping_add(c);
}
}
Op::Scratch => {
for lane in 0..LANES {
let slot = r[a][lane] & m;
let w = *store.entry((lane, slot)).or_insert_with(|| {
let mut f = [0u32; 3];
for j in 0..3u32 {
// the fill, written out in full rather than through verify::scratch_fill
let n = base.wrapping_add(lane as u32);
f[j as usize] = splitmix32(
(n ^ seed[j as usize])
.wrapping_add(slot.wrapping_mul(0x9E37_79B1))
.wrapping_add((j + 1).wrapping_mul(0x85EB_CA77)),
);
}
f
});
let mut x = r[d][lane] ^ w[0];
x = x.rotate_left(FOLD_ROT).wrapping_mul(FOLD_MUL) ^ w[1];
x = x.rotate_left(FOLD_ROT).wrapping_mul(FOLD_MUL) ^ w[2];
r[d][lane] = x;
let out = if mutate {
[x.rotate_left(7) ^ w[2], x ^ w[1], x.wrapping_add(w[0])]
} else {
[x ^ w[1], x.rotate_left(7) ^ w[2], x.wrapping_add(w[0])]
};
store.insert((lane, slot), out);
}
}
other => panic!("the hand model does not implement {other:?}"),
}
}
}
let mut out = [0u64; 32];
for lane in 0..LANES {
let lo = r[0][lane] ^ r[1][lane].rotate_left(7) ^ r[2][lane].rotate_left(14) ^ r[3][lane].rotate_left(21);
let hi = r[4][lane] ^ r[5][lane].rotate_left(9) ^ r[6][lane].rotate_left(18) ^ r[7][lane].rotate_left(27);
out[lane] = ((hi as u64) << 32) | lo as u64;
}
out
}
/// The four unit bases of every edge vector: 0 and 32 (two consecutive units, the pair a one-warp persistent
/// launch runs on one arena), a unit straddling 2^31, and the unit that wraps past 2^32.
const EDGE_BASES: [u32; 4] = [0, 32, 0x7fff_fff0, 0xffff_ffe0];
#[test]
fn edge_programs_match_the_hand_model() {
let ds = DatasetSource::new("2026-10-03", DatasetMode::ClosedForm, 24);
let mut cases = 0;
for kb in [32u8, 128] {
for (name, what, p) in edge_programs(kb) {
let slots = p.class.scratch_slots_per_lane();
for base in EDGE_BASES {
let (res, ev) = interpret_warp_scratch(&p, &p.seed, base, &ds, true);
let hand = hand_model(&p, base, false);
assert_eq!(res.hashes, hand, "{name} k{kb} base {base:#x}: interpreter against the hand model ({what})");
assert_ne!(res.hashes, hand_model(&p, base, true), "{name} k{kb}: the comparison has teeth");
// the slots the trace saw are the ones the program was built to drive
let slot_set: std::collections::BTreeSet<u32> = ev.iter().map(|e| e.slot).collect();
let m = (slots - 1) as u32;
match name.as_str() {
"slot0" | "maskplus1" | "sixteen" => assert_eq!(slot_set.into_iter().collect::<Vec<_>>(), vec![0]),
"slotmask" | "ones" => assert_eq!(slot_set.into_iter().collect::<Vec<_>>(), vec![m]),
"twoslots" => assert_eq!(slot_set.into_iter().collect::<Vec<_>>(), vec![0, m]),
"lanevar" => {
for e in &ev {
assert!(e.slot <= m);
}
}
_ => unreachable!(),
}
// the chain depth on the driven slot: every RMW after the first per lane is a re-hit
let per_lane = p.scratch_ops_per_hash();
let hits = ev.iter().filter(|e| e.hit).count();
let expected_hits = match name.as_str() {
"twoslots" => (per_lane - 2) * LANES,
_ => (per_lane - 1) * LANES,
};
assert_eq!(hits, expected_hits, "{name} k{kb}: re-hits");
cases += 1;
}
}
}
assert_eq!(cases, 2 * 7 * 4);
}
// ---------------------------------------------------------------------------------------------------------------
// 4. The static scratch check over every emitted kernel of every scr pack (question 4)
// ---------------------------------------------------------------------------------------------------------------
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Dialect {
Metal,
Cuda,
OpenCl,
}
/// The static scratch check: every scratch read-modify-write in an emitted kernel has the one masked form the
/// emitter writes, the arena is the lane's own `slots x 4` words, the tag is `salt + unit`, and nothing else
/// touches the scratch. Like the dataset mask check of `TESTS.md` section 5 and `tests/packs.rs`, a text check:
/// the guarantee is that the emitter has one template and it masks.
pub fn scratch_text_check(text: &str, dialect: Dialect, k: usize, slots: usize, kernels: usize) -> Result<(), String> {
assert!(kernels >= 1);
// every count below is per hash kernel; an OpenCL bound file carries igneum_hash and igneum_hash_bound
let k = k * kernels;
assert!(slots.is_power_of_two() && slots >= 1);
let mask = (slots - 1) as u32;
let wpl = slots * 4;
let (u, load, store, ptr) = match dialect {
Dialect::Metal => ("uint", "uint4 v_ = *(device const uint4*)(arena + s_ * 4u);", "*(device uint4*)(arena + s_ * 4u) = uint4(tag, x_ ^ w1_, rotl_imm(x_, 7u) ^ w2_, x_ + w0_); }", "device uint* arena"),
Dialect::Cuda => ("uint32_t", "uint4 v_ = *(const uint4*)(arena + s_ * 4u);", "*(uint4*)(arena + s_ * 4u) = make_uint4(tag, x_ ^ w1_, rotl_imm(x_, 7u) ^ w2_, x_ + w0_); }", "uint32_t* arena"),
Dialect::OpenCl => ("uint", "uint4 v_ = vload4(s_, arena);", "vstore4(IGNEUM_U4(tag, x_ ^ w1_, rotl_imm(x_, 7u) ^ w2_, x_ + w0_), s_, arena); }", "__global uint* arena"),
};
let count = |needle: &str| text.matches(needle).count();
let mut errs = Vec::new();
let mut expect = |what: &str, got: usize, want: usize| {
if got != want {
errs.push(format!("{what}: {got}, expected {want}"));
}
};
// k slot computations, each masked with exactly the class's mask and immediately followed by the one load form
expect("slot definitions `{ u s_ = r`", count(&format!("{{ {u} s_ = r")), k);
expect("masked slot followed by the load", count(&format!(" & {mask}u; {load}")), k);
expect("stores of the tagged slot", count(store), k);
expect("tag compares", count("(v_.x == tag)"), k);
expect("fill calls (three per RMW)", count("scr_fill(gbase, lane, s_, "), 3 * k);
// the arena: one definition with the class's words per lane, and 2k uses (one load, one store per RMW)
expect("arena definition", count(&format!("{ptr} = scratch + ((size_t)warp_ * 32u + lane) * {wpl}u;")), kernels);
expect("arena mentions (definition + load + store per RMW)", count("arena"), kernels + 2 * k);
expect("tag definition `tag = salt + g_`", count(&format!("{u} tag = salt + g_;")), kernels);
expect("direct scratch indexing", count("scratch["), 0);
expect("scratch pointer arithmetic outside the arena definition", count("scratch +"), kernels);
// no other mask value on a slot: every `s_ = r` line carries the class mask and nothing else carries ` & Nu; uint4 v_`
let any_mask_load = count(&format!("u; {load}"));
expect("loads preceded by some mask (must all be the class mask)", any_mask_load, k);
if errs.is_empty() {
Ok(())
} else {
Err(errs.join("; "))
}
}
fn packs_rw_dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../proto-cuda/packs-readwidth")
}
fn scr_packs() -> Vec<String> {
let mut v: Vec<String> = std::fs::read_dir(packs_rw_dir())
.unwrap()
.map(|d| d.unwrap().file_name().to_string_lossy().to_string())
.filter(|n| n.starts_with("scr"))
.collect();
v.sort();
v
}
fn read_pack(pack: &str, file: &str) -> String {
let p = packs_rw_dir().join(pack).join(file);
std::fs::read_to_string(&p).unwrap_or_else(|e| panic!("read {}: {e}", p.display()))
}
/// Every scr pack regenerates from its program.json (seed bytes, class, day bytes, size) to the same six kernel
/// texts, byte for byte, and every one of those texts passes the static scratch check for the class's k and slot
/// count; the check fails on four deliberate breaks of a copy of the Metal text (mask dropped, mask changed, arena
/// stride changed, a stray scratch access) and on the OpenCL and CUDA twins of the first.
#[test]
fn scr_packs_regenerate_and_pass_the_static_scratch_check() {
let packs = scr_packs();
assert!(packs.len() >= 6, "the scr packs: {packs:?}");
let mut checked = 0;
let mut sample_metal = String::new();
let mut sample_cl = String::new();
let mut sample_cu = String::new();
let mut sample_k = 0;
let mut sample_slots = 0;
for pack in &packs {
let j: Value = serde_json::from_str(&read_pack(pack, "program.json")).unwrap();
let name = j["load_class"].as_str().unwrap();
let c = class(name);
assert_eq!(&format!("{name}"), pack, "pack directory named after its class");
let seed = j["seed"].as_str().unwrap();
let seed_bytes = igneum_pow::bind::unhex(j["seed_bytes"].as_str().unwrap()).unwrap();
let day_bytes = igneum_pow::bind::unhex(j["dataset"]["day_bytes"].as_str().unwrap()).unwrap();
let log2 = j["dataset"]["log2_words"].as_u64().unwrap() as u32;
assert_eq!(j["dataset_mode"].as_str().unwrap(), "memory-hard");
let program = generate_from_seed_bytes_class(seed, &seed_bytes, c);
assert_eq!(program.class, c);
assert_eq!(program.program_id(), u64::from_str_radix(j["program_id"].as_str().unwrap().trim_start_matches("0x"), 16).unwrap());
let mut dataset = DatasetSource::from_key(seed_words_from_bytes(&day_bytes), DatasetMode::MemoryHard, log2);
dataset.key_bytes = day_bytes;
let e = Epoch { program, dataset };
let p = &e.program;
let mp = e.dataset.memhard().map(|m| &m.params);
let k = c.scratch_slots();
let slots = c.scratch_slots_per_lane();
assert_eq!(p.scratch_ops_per_hash(), k * ITERATIONS);
for (file, text, dialect, kernels) in [
("program.metal", metal_program(p, log2, LoadSource::Stored), Dialect::Metal, 1),
("program_bound.metal", metal_program_bound(p, log2), Dialect::Metal, 1),
("kernel.cu", cuda_kernel(p, mp), Dialect::Cuda, 1),
("kernel_bound.cu", cuda_kernel_bound(p, mp), Dialect::Cuda, 1),
("kernel.cl", opencl_kernel(p, mp), Dialect::OpenCl, 1),
// the OpenCL bound file carries igneum_hash and igneum_hash_bound
("kernel_bound.cl", opencl_kernel_bound(p, mp), Dialect::OpenCl, 2),
] {
let on_disk = read_pack(pack, file);
assert_eq!(on_disk, text, "{pack}/{file}: the pack is the emitter's text");
// scr0 is the persistent control: an arena and a tag, no read-modify-write; the check holds with k = 0
scratch_text_check(&on_disk, dialect, k, slots, kernels).unwrap_or_else(|e| panic!("{pack}/{file}: {e}"));
checked += 1;
}
// the vectors of the pack are the CPU's
let v: Value = serde_json::from_str(&read_pack(pack, "vectors.json")).unwrap();
for w in v["warps"].as_array().unwrap() {
let base = w["base_nonce"].as_u64().unwrap() as u32;
let got = e.hash_warp(base);
for (lane, x) in w["expected"].as_array().unwrap().iter().enumerate() {
let want = u64::from_str_radix(x.as_str().unwrap().trim_start_matches("0x"), 16).unwrap();
assert_eq!(got[lane], want, "{pack}: base {base} lane {lane}");
}
}
if k == 4 && slots == 64 {
sample_metal = read_pack(pack, "program.metal");
sample_cl = read_pack(pack, "kernel.cl");
sample_cu = read_pack(pack, "kernel.cu");
sample_k = k;
sample_slots = slots;
}
}
assert_eq!(checked, packs.len() * 6);
println!("static scratch check: {checked} kernels over {} scr packs", packs.len());
// The deliberate breaks (the watcher rule of CLAUDE.md: a check is trusted once it fails on a known-broken
// case). Each must be caught; the message names what.
assert!(sample_k == 4 && sample_slots == 64, "scr4k32 is in the pack set");
let mask = format!(" & {}u; uint4 v_", sample_slots - 1);
let broken_mask = sample_metal.replacen(&mask, "; uint4 v_", 1);
assert_ne!(broken_mask, sample_metal);
let e = scratch_text_check(&broken_mask, Dialect::Metal, 4, 64, 1).unwrap_err();
assert!(e.contains("masked slot followed by the load: 3, expected 4"), "{e}");
println!("break 1 (one mask dropped, Metal): {e}");
let wrong_mask = sample_metal.replace(" & 63u;", " & 127u;");
let e = scratch_text_check(&wrong_mask, Dialect::Metal, 4, 64, 1).unwrap_err();
assert!(e.contains("masked slot followed by the load: 0, expected 4"), "{e}");
println!("break 2 (mask 63 -> 127 on every RMW, Metal): {e}");
let wrong_stride = sample_metal.replace("* 256u;", "* 128u;");
let e = scratch_text_check(&wrong_stride, Dialect::Metal, 4, 64, 1).unwrap_err();
assert!(e.contains("arena definition: 0, expected 1"), "{e}");
println!("break 3 (arena stride 256 -> 128 words, Metal): {e}");
let stray = format!("{sample_metal}\n// stray\n// arena[0] = 0u; scratch[1] = 1u;\n");
let e = scratch_text_check(&stray, Dialect::Metal, 4, 64, 1).unwrap_err();
assert!(e.contains("arena mentions") && e.contains("direct scratch indexing: 1, expected 0"), "{e}");
println!("break 4 (a stray arena and scratch access, Metal): {e}");
let e = scratch_text_check(&sample_cl.replacen(" & 63u; uint4 v_ = vload4", "; uint4 v_ = vload4", 1), Dialect::OpenCl, 4, 64, 1).unwrap_err();
assert!(e.contains("masked slot followed by the load: 3, expected 4"), "{e}");
println!("break 5 (one mask dropped, OpenCL): {e}");
let e = scratch_text_check(&sample_cu.replacen(" & 63u; uint4 v_ = *(const uint4*)", "; uint4 v_ = *(const uint4*)", 1), Dialect::Cuda, 4, 64, 1).unwrap_err();
assert!(e.contains("masked slot followed by the load: 3, expected 4"), "{e}");
println!("break 6 (one mask dropped, CUDA): {e}");
// and the unbroken texts pass under the same calls
scratch_text_check(&sample_metal, Dialect::Metal, 4, 64, 1).unwrap();
scratch_text_check(&sample_cl, Dialect::OpenCl, 4, 64, 1).unwrap();
scratch_text_check(&sample_cu, Dialect::Cuda, 4, 64, 1).unwrap();
// a wrong slot count, RMW count or kernel count against a right text fails too (the check is tied to the class)
assert!(scratch_text_check(&sample_metal, Dialect::Metal, 4, 256, 1).is_err());
assert!(scratch_text_check(&sample_metal, Dialect::Metal, 3, 64, 1).is_err());
assert!(scratch_text_check(&sample_metal, Dialect::Metal, 4, 64, 2).is_err());
}
// ---------------------------------------------------------------------------------------------------------------
// 5. The fuzz: 200 generated scratch programs, contract on every instruction, 4 units each across the 32-bit
// range including the wrap; with IGNEUM_SCRATCH_PACKS_OUT the packs for the Metal runs (question 3, 4)
// ---------------------------------------------------------------------------------------------------------------
/// Write a pack whose vectors.json carries `bases` (any number of units) instead of the three standard bases.
fn write_pack_with_bases(dir: &PathBuf, e: &Epoch, day: &str, bases: &[u32], source: &str) -> Vec<[u64; 32]> {
let mut pack = export_pack(e, day, source);
let outs: Vec<[u64; 32]> = bases.iter().map(|&b| e.hash_warp(b)).collect();
let vj = vectors_json(&e.program, day, e.dataset.log2_words, bases, &outs, &pack.vectors, e.dataset.mask, source, true);
for f in pack.files.iter_mut() {
if f.0 == "vectors.json" {
f.1 = vj.clone();
}
}
pack.write_to(dir).unwrap();
outs
}
fn contract(p: &Program) {
assert_eq!(p.instrs.len(), INSTR_COUNT);
assert_eq!(p.instrs.iter().filter(|i| i.op == Op::Load).count() + p.instrs.iter().filter(|i| i.op == Op::Scratch).count(), 16);
assert_eq!(p.instrs.iter().filter(|i| i.op == Op::Scratch).count(), p.class.scratch_slots());
assert!(p.instrs[0].op != Op::Load && p.instrs[0].op != Op::Scratch, "instruction 0 is never a memory op");
for (k, i) in p.instrs.iter().enumerate() {
assert!(i.src != i.dst, "#{k}: src == dst");
assert!((1..=31).contains(&i.rot), "#{k}: rot {}", i.rot);
assert!([1u8, 2, 4, 8, 16].contains(&i.mask), "#{k}: mask {}", i.mask);
assert!(i.dst < 8 && i.src < 8 && i.src2 < 8);
assert_eq!(i.width, 1, "#{k}: a scratch class reads one-word loads");
}
assert!(igneum_pow::accept::check(p).is_ok(), "an accepted program");
}
#[test]
fn fuzz_scr_programs_cpu() {
let n: usize = std::env::var("IGNEUM_SCRATCH_FUZZ").ok().and_then(|s| s.parse().ok()).unwrap_or(200);
// IGNEUM_FUZZ_SEED_BASE (default 0): the seed index offset for the continuous fuzzer (infra/build-server/capacity)
let base: usize = std::env::var("IGNEUM_FUZZ_SEED_BASE").ok().and_then(|s| s.parse().ok()).unwrap_or(0);
let out = std::env::var("IGNEUM_SCRATCH_PACKS_OUT").ok().map(PathBuf::from);
let mut rng = SplitMix64::new(0x6967_6e65_756d_2d73); // "igneum-s"
let day = "2026-10-03";
let closed = DatasetSource::new(day, DatasetMode::ClosedForm, 28);
// memory-hard sources per size, built once each (the cache fill is 0.2 s); only when packs are written
let mut mh: HashMap<u32, DatasetSource> = HashMap::new();
let mut manifest = String::from("pack\tclass\tlog2\tprogram_id\tscratch_ops_per_hash\tbases\n");
let mut per_class: HashMap<String, usize> = HashMap::new();
let mut units = 0usize;
let mut wraps = 0usize;
if let Some(dir) = &out {
std::fs::create_dir_all(dir).unwrap();
// the edge packs first: 64 MiB datasets (no dataset load in them), the four edge bases
for kb in [32u8, 128] {
for (name, _what, p) in edge_programs(kb) {
let log2 = 24;
let ds = mh.remove(&log2).unwrap_or_else(|| DatasetSource::new(day, DatasetMode::MemoryHard, log2));
let e = Epoch { program: p, dataset: ds };
let pack_name = format!("edge-{name}-k{kb}");
write_pack_with_bases(&dir.join(&pack_name), &e, day, &EDGE_BASES, "igneum-pow tests/scratch.rs edge");
manifest.push_str(&format!(
"{pack_name}\t{}\t{log2}\t{:016x}\t{}\t{}\n",
e.program.class.name(),
e.program.program_id(),
e.program.scratch_ops_per_hash(),
EDGE_BASES.iter().map(|b| format!("{b}")).collect::<Vec<_>>().join(",")
));
mh.insert(log2, e.dataset);
}
}
}
for i in base..base + n {
let name = CLASSES[rng.below(CLASSES.len() as u64) as usize];
let c = class(name);
let seed = format!("igneum-scratch-fuzz/{i}");
let p = generate_class(&seed, c);
contract(&p);
*per_class.entry(name.to_string()).or_insert(0) += 1;
// four bases: one inside a 256-nonce batch (in-batch check on the GPU), one straddling 2^31, one in
// the last 256 nonces (the unit wraps past 2^32 or ends on it), one uniform
let b0 = (rng.below(8) as u32) * 32;
let b1 = 0x8000_0000u32.wrapping_sub(256).wrapping_add((rng.below(16) as u32) * 32);
let b2 = 0xffff_ff00u32.wrapping_add((rng.below(8) as u32) * 32);
let b3 = (rng.next() as u32) & !31;
let bases = [b0, b1, b2, b3];
// an aligned unit never straddles 2^32 (spec 1.9); the top unit ends on 0xffffffff and the persistent
// kernel's unit sequence wraps inside a launch, which the Metal run checks with packbench --batch-base
wraps += bases.iter().filter(|&&b| b >= 0xffff_ff00).count();
// the CPU: the interpreter is deterministic and every scratch event is inside the lane's slots
for &b in &bases {
let (r1, ev) = interpret_warp_scratch(&p, &p.seed, b, &closed, true);
let r2 = interpret_warp_scratch(&p, &p.seed, b, &closed, false).0;
assert_eq!(r1.hashes, r2.hashes);
assert_eq!(ev.len(), p.scratch_ops_per_hash() * LANES);
assert!(ev.iter().all(|e: &ScratchEvent| e.slot < c.scratch_slots_per_lane() as u32));
units += 1;
}
if let Some(dir) = &out {
let log2 = [24u32, 26, 28][rng.below(3) as usize];
let ds = mh.remove(&log2).unwrap_or_else(|| DatasetSource::new(day, DatasetMode::MemoryHard, log2));
let e = Epoch { program: p, dataset: ds };
let pack_name = format!("fuzz-{i:03}-{name}-l{log2}");
write_pack_with_bases(&dir.join(&pack_name), &e, day, &bases, "igneum-pow tests/scratch.rs fuzz");
manifest.push_str(&format!(
"{pack_name}\t{name}\t{log2}\t{:016x}\t{}\t{}\n",
e.program.program_id(),
e.program.scratch_ops_per_hash(),
bases.iter().map(|b| format!("{b}")).collect::<Vec<_>>().join(",")
));
mh.insert(log2, e.dataset);
} else {
let _ = rng.below(3);
}
}
let mut classes: Vec<_> = per_class.iter().collect();
classes.sort();
println!("fuzz: {n} programs, {units} units on the CPU, {wraps} units in the top 256 nonces, classes {classes:?}, seeds {base}..{}", base + n);
assert_eq!(units, 4 * n);
assert_eq!(wraps, n, "every program has a unit in the top 256 nonces");
if let Some(dir) = &out {
std::fs::write(dir.join("manifest.tsv"), manifest).unwrap();
println!("packs written to {}", dir.display());
}
}
/// The fold and rewrite, restated: a slot after `d` dependent RMWs holds 96 bits that are a function of the fill
/// (3 words, a pure function of nonce, slot and seed) and the `d` fold values; a chip that keeps the `d` fold
/// values (32 bits each) instead of the 96-bit slot recomputes the slot in `d` rewrites. This test pins the
/// arithmetic the analysis uses (question 2): the replay from the fold values reproduces the slot.
#[test]
fn slot_is_replayable_from_its_fold_values() {
let seed = seed_words_from_bytes(b"igneum-genesis");
let (base, lane, slot) = (0x1234_5600u32, 5u32, 17u32);
let fill = [scratch_fill(&seed, base, lane, slot, 0), scratch_fill(&seed, base, lane, slot, 1), scratch_fill(&seed, base, lane, slot, 2)];
let mut rng = SplitMix64::new(99);
let dsts: Vec<u32> = (0..64).map(|_| rng.next() as u32).collect();
// the honest sequence: read, fold, rewrite, 64 times
let mut w = fill;
let mut xs = Vec::new();
for &d in &dsts {
let x = fold_words(d, &w);
xs.push(x);
w = scratch_rewrite(x, &w);
}
// the replay: from the fill and the stored fold values alone
let mut w2 = fill;
for &x in &xs {
w2 = scratch_rewrite(x, &w2);
}
assert_eq!(w, w2);
// and nothing shorter: the fold value at step d depends on the slot content at step d, which depends on
// every earlier fold value (drop one and the chain diverges)
let mut w3 = fill;
for (i, &x) in xs.iter().enumerate() {
if i != 10 {
w3 = scratch_rewrite(x, &w3);
}
}
assert_ne!(w, w3);
}

View file

@ -0,0 +1,416 @@
{
"format": "igneum-program-pack-3",
"generator": 5,
"attempt": 0,
"program_id": "0xe5a4ac5978462156",
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
"dataset_mode": "memory-hard",
"seed": "igneum-epoch/4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925/day/69676e65756d2d6461792ffd50000000000000",
"seed_bytes": "4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925",
"seed_words": ["0xbe8c5a0c", "0x7646e626", "0x508e29d0", "0xfb8a5b4a", "0x53c50955", "0x685d62fc", "0x6065c013", "0x881096eb"],
"seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32",
"generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried",
"lanes": 32,
"registers": 8,
"iterations": 8,
"instruction_count": 64,
"loads_per_hash": 128,
"program_class": "v5",
"era_seed_bytes": "4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925",
"state": {
"block": "4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925",
"block_number": 0,
"root": "7e37a9fb19b154d32daf5bf30a50d339a75029fbc9eec9ea20e95439dba5a311",
"leaves": 11,
"records": 11,
"sampled": false,
"leaves_fnv1a64": "0xf141bfee2a8b11b0",
"leaf_derivation": "leaves[i] = Blake2b-512('igneum-sd1/' || root || i_le32 || record_i) as 16 little-endian words; item t XORs leaves[t mod leaves] into its 16 initial words before the first mixer",
"file": "leaves.bin"
},
"load_class": "mx8-eraaf3a9139+sh256x27+state",
"mixer_mult": 8,
"cache_growth": true,
"mixer": "class v3 (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): every mixer application of the item derivation is 8 applications with round keys (r * 8 + j + 1) * 0x9E3779B9, the 8 dependent cache reads per item unchanged; cache growth rule option C: cache words = 2^(26 + doublings(day)), dataset words = 2^(genesis_log2 + doublings(day)), doublings(day) = floor(log2(1 + day / 1460)) for day = days since genesis",
"load_slots": 16,
"load_mix_percent_4_16_64": [100, 0, 0],
"load_width_counts_4_16_64": [16, 0, 0],
"bytes_per_hash": 512,
"wide_load": "read-width experiment (5 October 2026, docs/plans/read-width.md), NOT the lottery hash: a load of W words (width field, 4 or 16) reads dataset[b .. b + W) with b = (src & mask) & ~(W - 1) and folds every word into dst: x = dst ^ w[0]; for j in 1..W: x = (rotl(x, 11) * 0x9e3779b1) ^ w[j]; dst = x; width 1 is the plain load; the width is drawn per instruction from the class mix with one extra below(100) draw after the nine of version 2, and the program id is FNV-1a 64 over 'igneum-program-rw/' || generator_le32 || seed words || attempt_le32 || mix[3] || load_slots",
"era": {
"label": "af3a9139",
"seed_words": ["0xaf3a9139", "0x894db311", "0xd6173573", "0xc346bc0f", "0x2d547cec", "0xd5634ab8", "0xb9584827", "0x305d030e"],
"draw": "docs/plans/era-layout.md 1.1: SplitMix64 seeded with seed_words[0] | seed_words[1] << 32 of seed_words_from_bytes('igneum-era/' || n_le64 || E_n); width = allowed[below(|allowed|)], stride_mul = low32(next()) | 1, stride_rot = 1 + below(31), then four next() draws for a partial Fisher-Yates over positions log2(W)..15 of which 4 - log2(W) are used",
"allowed_widths": [1],
"width_words": 1,
"stride_mul": "0x2cb18b35",
"stride_rot": 9,
"interleave": [1, 9, 13, 14],
"address": "y = rotl(src * stride_mul, stride_rot); k = min(win, D - 26); idx = ((y & (mask >> k)) | ((off & (2^k - 1)) << (D - k))) & mask; a wide load aligns idx down to W words",
"windows": "per instruction, after the width roll: win = below(3), off = low32(next()) & (2^win - 1); used on a load slot (the instruction's win and off fields)",
"dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed",
"program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]"
},
"op_mix": {"load": 16, "add": 11, "shfl": 7, "mad": 6, "xor": 6, "mul": 4, "mulhi": 4, "rotr": 4, "rotl": 3, "sub": 2, "or": 1},
"register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]",
"splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16",
"iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order",
"output": "lo = r0 ^ rotl(r1,7) ^ rotl(r2,14) ^ rotl(r3,21); hi = r4 ^ rotl(r5,9) ^ rotl(r6,18) ^ rotl(r7,27); out = (hi << 32) | lo",
"op_semantics": {
"add": "dst = dst + src + (bit `bit` of sel ? imm2 : imm)",
"sub": "dst = dst - src",
"mul": "dst = dst * src (low 32)",
"mulhi": "dst = high 32 bits of dst * src",
"xor": "dst = dst ^ src",
"or": "dst = dst | src",
"rotl": "dst = rotl(dst, rot), rot in 1..31",
"rotr": "dst = rotr(dst, src & 31)",
"mad": "dst = src * src2 + dst",
"shfl": "dst = dst ^ (src of lane (lane ^ mask)), mask in {1,2,4,8,16}, within the 32-lane warp",
"load": "dst = dst ^ dataset[src & dataset.mask]",
"wload": "base = (src of lane 0 & dataset.mask) & ~31; dst = dst ^ dataset[base + lane] (warp-coalesced 128-byte load, lever b, only when --wide-frac > 0)"
},
"dataset": {
"log2_words": 28,
"bytes": 1073741824,
"mask": "0x0fffffff",
"day": "bytes:69676e65756d2d6461792ffd50000000000000",
"day_bytes": "69676e65756d2d6461792ffd50000000000000",
"day_words_from": "seed_words_from_bytes(day_bytes)",
"d0": "0xe23f9008",
"d1": "0xde33e763",
"mode": "memory-hard",
"spec": "proto-metal/MEMHARD.md",
"key": ["0xe23f9008", "0xde33e763", "0xc5ba415d", "0x8ddf6786", "0x59f4a4be", "0x8a3bc680", "0x701b8e40", "0x3b59025a"],
"key_derivation": "the 8 words of seed_words_from_bytes(day_bytes); d0, d1 are key[0], key[1]",
"cache": {"log2_words": 26, "bytes": 268435456, "line_words": 16, "segment_lines": 64, "segments": 65536, "block": "ChaCha12 core + feed-forward, rotations 16 12 8 7", "sigma": ["0x61707865", "0x3320646e", "0x79622d32", "0x6b206574"], "tag": ["0x49676e65", "0x756d4d48"], "chain": "in_j = prev_line ^ (sigma[0..3] || key[0..7] || seg || j || tag[0..1]); line_j = block(in_j); prev_0 = 0"},
"mixer": {"draw": "SplitMix64 seeded with key[0] | key[1] << 32: rot[0..7] = 1 + next() % 31, mul[0..15] = low32(next()) | 1, rc[0..15] = low32(next())", "rot": [28, 11, 18, 18, 13, 28, 5, 13], "mul": ["0xd1d79e7f", "0xbcb61f8b", "0x970e91ab", "0xd749d96d", "0x143d7339", "0x2cde0d69", "0x12d0a8c1", "0x2d335be9", "0x80a8aae9", "0x7ac896c7", "0x9de23db7", "0xc362827d", "0x5f4cdb5b", "0xfc6c5097", "0x6f547f83", "0x1ac31b47"], "rc": ["0xe5bef5a3", "0xdb2a7d90", "0xcd1fa7e1", "0x30289419", "0x0a730d58", "0x432f8579", "0x6ab978a5", "0x8c984f49", "0x788c3c9e", "0x051eef02", "0x05e77db9", "0x8b3cd4f3", "0x6948d6cf", "0x0d8677f6", "0xf9505c8c", "0x4513c163"], "round": "for i in 0..15: s[i] = (s[i] ^ (rc[i] + (r+1) * 0x9E3779B9)) * mul[i]; then quarter rounds on columns (0,4,8,12) (1,5,9,13) (2,6,10,14) (3,7,11,15) with rot[0..3] and diagonals (0,5,10,15) (1,6,11,12) (2,7,8,13) (3,4,9,14) with rot[4..7]", "quarter_round": "a += b; d ^= a; d = rotl(d, r1); c += d; b ^= c; b = rotl(b, r2); a += b; d ^= a; d = rotl(d, r3); c += d; b ^= c; b = rotl(b, r4)"},
"mixer_mult": 8,
"item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s",
"word": "dataset[w] = item(w >> 4)[w & 15]"
},
"shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "mad": 31, "shfl": 31, "xor": 30, "rotl": 28, "mul": 22, "or": 18, "mulhi": 17, "rotr": 17, "sub": 17}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [
{"i": 0, "op": "or", "dst": 6, "src": 0, "src2": 2, "imm": "0xc1eb1523", "imm2": "0x925958ea", "rot": 14, "bit": 14, "mask": 8},
{"i": 1, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0xc7044334", "imm2": "0x755566b6", "rot": 19, "bit": 17, "mask": 8},
{"i": 2, "op": "mad", "dst": 3, "src": 5, "src2": 5, "imm": "0x33b52f17", "imm2": "0xcc459a7a", "rot": 5, "bit": 19, "mask": 16},
{"i": 3, "op": "add", "dst": 7, "src": 4, "src2": 4, "imm": "0x97d3d105", "imm2": "0x38e58a06", "rot": 11, "bit": 6, "mask": 1},
{"i": 4, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x29b87b9a", "imm2": "0x9629673d", "rot": 16, "bit": 20, "mask": 8},
{"i": 5, "op": "shfl", "dst": 6, "src": 2, "src2": 5, "imm": "0xb61f2e77", "imm2": "0x30e3807c", "rot": 1, "bit": 7, "mask": 1},
{"i": 6, "op": "mad", "dst": 5, "src": 3, "src2": 5, "imm": "0x0de66253", "imm2": "0xfdfdd03e", "rot": 4, "bit": 27, "mask": 4},
{"i": 7, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x688514dd", "imm2": "0x139d08b5", "rot": 5, "bit": 1, "mask": 1},
{"i": 8, "op": "add", "dst": 0, "src": 7, "src2": 3, "imm": "0xa7c1fb0f", "imm2": "0x4a5f55e1", "rot": 15, "bit": 12, "mask": 1},
{"i": 9, "op": "mul", "dst": 5, "src": 7, "src2": 2, "imm": "0x1a64de5a", "imm2": "0xe37b0875", "rot": 5, "bit": 27, "mask": 16},
{"i": 10, "op": "xor", "dst": 4, "src": 5, "src2": 3, "imm": "0x750d4f1a", "imm2": "0x2f3d9402", "rot": 3, "bit": 14, "mask": 2},
{"i": 11, "op": "mulhi", "dst": 6, "src": 4, "src2": 5, "imm": "0x2eaa86c6", "imm2": "0x9fd5b22f", "rot": 30, "bit": 10, "mask": 1},
{"i": 12, "op": "rotl", "dst": 5, "src": 2, "src2": 4, "imm": "0x8df50473", "imm2": "0x23d780ce", "rot": 13, "bit": 9, "mask": 1},
{"i": 13, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0xa956a7e6", "imm2": "0x58dbb356", "rot": 31, "bit": 11, "mask": 8},
{"i": 14, "op": "mulhi", "dst": 2, "src": 4, "src2": 6, "imm": "0x6fbfb145", "imm2": "0x064eb015", "rot": 20, "bit": 2, "mask": 4},
{"i": 15, "op": "or", "dst": 3, "src": 1, "src2": 5, "imm": "0xd313bc27", "imm2": "0x9f0fc235", "rot": 17, "bit": 16, "mask": 1},
{"i": 16, "op": "sub", "dst": 0, "src": 5, "src2": 0, "imm": "0x86cbd336", "imm2": "0x94715167", "rot": 17, "bit": 31, "mask": 8},
{"i": 17, "op": "mul", "dst": 0, "src": 6, "src2": 3, "imm": "0x95911c6b", "imm2": "0x816cea32", "rot": 23, "bit": 1, "mask": 2},
{"i": 18, "op": "shfl", "dst": 5, "src": 1, "src2": 3, "imm": "0xf563dcad", "imm2": "0xb2889856", "rot": 14, "bit": 24, "mask": 4},
{"i": 19, "op": "or", "dst": 3, "src": 4, "src2": 2, "imm": "0x7bb48d19", "imm2": "0xbf95ad6f", "rot": 8, "bit": 30, "mask": 16},
{"i": 20, "op": "mad", "dst": 6, "src": 3, "src2": 2, "imm": "0xeb686a8d", "imm2": "0x8bda9f8a", "rot": 11, "bit": 18, "mask": 1},
{"i": 21, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x0915df51", "imm2": "0xa1365cda", "rot": 11, "bit": 25, "mask": 1},
{"i": 22, "op": "rotl", "dst": 3, "src": 0, "src2": 3, "imm": "0xc09e4cdc", "imm2": "0x50c1369d", "rot": 25, "bit": 31, "mask": 2},
{"i": 23, "op": "xor", "dst": 6, "src": 4, "src2": 1, "imm": "0xce01abec", "imm2": "0x5ff8c52e", "rot": 30, "bit": 19, "mask": 8},
{"i": 24, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xdacf9e4b", "imm2": "0x086a5684", "rot": 2, "bit": 10, "mask": 2},
{"i": 25, "op": "add", "dst": 1, "src": 6, "src2": 3, "imm": "0x53e74799", "imm2": "0xfc2f6d17", "rot": 8, "bit": 7, "mask": 16},
{"i": 26, "op": "rotr", "dst": 7, "src": 6, "src2": 7, "imm": "0xc89a75a0", "imm2": "0x67813253", "rot": 24, "bit": 13, "mask": 1},
{"i": 27, "op": "add", "dst": 7, "src": 5, "src2": 4, "imm": "0xb8fae90e", "imm2": "0x787048dc", "rot": 26, "bit": 27, "mask": 1},
{"i": 28, "op": "xor", "dst": 4, "src": 1, "src2": 0, "imm": "0x4c90c2ea", "imm2": "0x2ce7865b", "rot": 4, "bit": 7, "mask": 2},
{"i": 29, "op": "xor", "dst": 6, "src": 1, "src2": 6, "imm": "0x6131ab08", "imm2": "0xd1825676", "rot": 4, "bit": 30, "mask": 2},
{"i": 30, "op": "mulhi", "dst": 2, "src": 0, "src2": 1, "imm": "0xbe4a545f", "imm2": "0xdc29e823", "rot": 17, "bit": 5, "mask": 8},
{"i": 31, "op": "rotr", "dst": 1, "src": 4, "src2": 1, "imm": "0x4d2f9cdc", "imm2": "0xdee1cc73", "rot": 5, "bit": 16, "mask": 4},
{"i": 32, "op": "xor", "dst": 7, "src": 4, "src2": 5, "imm": "0x9d277aaa", "imm2": "0xa902fca5", "rot": 11, "bit": 3, "mask": 1},
{"i": 33, "op": "mad", "dst": 3, "src": 2, "src2": 6, "imm": "0x7db09644", "imm2": "0x077bf3d9", "rot": 30, "bit": 19, "mask": 2},
{"i": 34, "op": "add", "dst": 3, "src": 1, "src2": 1, "imm": "0xd2dc42eb", "imm2": "0x9ffd510b", "rot": 17, "bit": 12, "mask": 2},
{"i": 35, "op": "add", "dst": 4, "src": 7, "src2": 0, "imm": "0xad8eda6f", "imm2": "0xf871ba37", "rot": 24, "bit": 7, "mask": 4},
{"i": 36, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xb0cef8f4", "imm2": "0xd02d30ca", "rot": 22, "bit": 3, "mask": 16},
{"i": 37, "op": "mad", "dst": 4, "src": 3, "src2": 2, "imm": "0x6ed99a66", "imm2": "0x83dc97c0", "rot": 4, "bit": 1, "mask": 4},
{"i": 38, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0xe24fdd24", "imm2": "0x360f5c8b", "rot": 19, "bit": 9, "mask": 8},
{"i": 39, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x2bd506e2", "imm2": "0x82e98a22", "rot": 28, "bit": 26, "mask": 1},
{"i": 40, "op": "rotl", "dst": 0, "src": 2, "src2": 1, "imm": "0xdb1faed3", "imm2": "0xf968a20d", "rot": 21, "bit": 30, "mask": 16},
{"i": 41, "op": "or", "dst": 1, "src": 0, "src2": 1, "imm": "0xe6dfe522", "imm2": "0xb75813da", "rot": 10, "bit": 13, "mask": 1},
{"i": 42, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xc0386e49", "imm2": "0x6435f6d8", "rot": 26, "bit": 28, "mask": 16},
{"i": 43, "op": "mulhi", "dst": 1, "src": 0, "src2": 4, "imm": "0xda497f7d", "imm2": "0xc4b748f4", "rot": 30, "bit": 10, "mask": 4},
{"i": 44, "op": "add", "dst": 5, "src": 6, "src2": 0, "imm": "0x3a8921a4", "imm2": "0x1f682c68", "rot": 12, "bit": 12, "mask": 1},
{"i": 45, "op": "add", "dst": 4, "src": 5, "src2": 6, "imm": "0xeeca4334", "imm2": "0xf246e180", "rot": 26, "bit": 1, "mask": 1},
{"i": 46, "op": "xor", "dst": 2, "src": 3, "src2": 5, "imm": "0x052178c3", "imm2": "0xaab31f10", "rot": 28, "bit": 16, "mask": 8},
{"i": 47, "op": "xor", "dst": 2, "src": 5, "src2": 0, "imm": "0x91fd7273", "imm2": "0xacc42b07", "rot": 22, "bit": 27, "mask": 4},
{"i": 48, "op": "mad", "dst": 7, "src": 4, "src2": 1, "imm": "0x05a2970f", "imm2": "0x14876824", "rot": 10, "bit": 5, "mask": 1},
{"i": 49, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x4440d6de", "imm2": "0x352023f9", "rot": 10, "bit": 25, "mask": 8},
{"i": 50, "op": "mad", "dst": 7, "src": 0, "src2": 7, "imm": "0xa6f82633", "imm2": "0x78465772", "rot": 13, "bit": 8, "mask": 4},
{"i": 51, "op": "add", "dst": 5, "src": 6, "src2": 5, "imm": "0x745776d8", "imm2": "0x41bd68cc", "rot": 29, "bit": 26, "mask": 1},
{"i": 52, "op": "shfl", "dst": 3, "src": 0, "src2": 6, "imm": "0x8f94ebac", "imm2": "0xe4a208a0", "rot": 5, "bit": 16, "mask": 1},
{"i": 53, "op": "or", "dst": 4, "src": 0, "src2": 5, "imm": "0x7b1235f3", "imm2": "0x408b4ea9", "rot": 27, "bit": 19, "mask": 8},
{"i": 54, "op": "mad", "dst": 0, "src": 2, "src2": 4, "imm": "0x30114050", "imm2": "0xe71dff8f", "rot": 6, "bit": 30, "mask": 1},
{"i": 55, "op": "rotl", "dst": 5, "src": 1, "src2": 7, "imm": "0x69f92198", "imm2": "0x65496f29", "rot": 9, "bit": 20, "mask": 4},
{"i": 56, "op": "mul", "dst": 5, "src": 7, "src2": 6, "imm": "0x88b884d4", "imm2": "0x041b67f7", "rot": 25, "bit": 8, "mask": 16},
{"i": 57, "op": "rotl", "dst": 7, "src": 5, "src2": 6, "imm": "0x7d1e18bc", "imm2": "0xf54ade27", "rot": 27, "bit": 20, "mask": 1},
{"i": 58, "op": "sub", "dst": 7, "src": 6, "src2": 4, "imm": "0xa457bbab", "imm2": "0x4b05eb29", "rot": 6, "bit": 6, "mask": 4},
{"i": 59, "op": "rotl", "dst": 2, "src": 7, "src2": 7, "imm": "0x4890bdda", "imm2": "0xadcb3d99", "rot": 22, "bit": 26, "mask": 16},
{"i": 60, "op": "shfl", "dst": 7, "src": 1, "src2": 7, "imm": "0xe4da58eb", "imm2": "0x1d50080d", "rot": 22, "bit": 26, "mask": 2},
{"i": 61, "op": "add", "dst": 4, "src": 0, "src2": 5, "imm": "0x60d0ff55", "imm2": "0xcba6a161", "rot": 6, "bit": 7, "mask": 8},
{"i": 62, "op": "mul", "dst": 1, "src": 5, "src2": 1, "imm": "0x0fdc702e", "imm2": "0x6b1bd03a", "rot": 9, "bit": 23, "mask": 4},
{"i": 63, "op": "mulhi", "dst": 7, "src": 6, "src2": 1, "imm": "0xcc44ed62", "imm2": "0x931dd006", "rot": 1, "bit": 0, "mask": 2},
{"i": 64, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x448c3aba", "imm2": "0x1136818a", "rot": 23, "bit": 7, "mask": 1},
{"i": 65, "op": "rotr", "dst": 2, "src": 5, "src2": 1, "imm": "0xb520dfb8", "imm2": "0xdce7d8f4", "rot": 22, "bit": 10, "mask": 8},
{"i": 66, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x19fada48", "imm2": "0x3cc04e0e", "rot": 1, "bit": 24, "mask": 16},
{"i": 67, "op": "or", "dst": 0, "src": 7, "src2": 3, "imm": "0x1c5905b4", "imm2": "0xf896dfb7", "rot": 31, "bit": 30, "mask": 8},
{"i": 68, "op": "rotl", "dst": 0, "src": 1, "src2": 5, "imm": "0xa28511c1", "imm2": "0xbf649695", "rot": 19, "bit": 27, "mask": 1},
{"i": 69, "op": "rotl", "dst": 0, "src": 7, "src2": 5, "imm": "0x22e2fef3", "imm2": "0x468bec9e", "rot": 1, "bit": 28, "mask": 1},
{"i": 70, "op": "or", "dst": 2, "src": 3, "src2": 6, "imm": "0xcb542821", "imm2": "0xe084cf11", "rot": 15, "bit": 5, "mask": 8},
{"i": 71, "op": "mad", "dst": 3, "src": 7, "src2": 5, "imm": "0xf06b8f6a", "imm2": "0x7382e15f", "rot": 6, "bit": 28, "mask": 16},
{"i": 72, "op": "mad", "dst": 7, "src": 0, "src2": 4, "imm": "0x4f64c588", "imm2": "0x47b63ee9", "rot": 8, "bit": 10, "mask": 2},
{"i": 73, "op": "or", "dst": 4, "src": 3, "src2": 2, "imm": "0xff138eea", "imm2": "0x6fd90eda", "rot": 23, "bit": 3, "mask": 16},
{"i": 74, "op": "xor", "dst": 3, "src": 1, "src2": 0, "imm": "0x6011ece1", "imm2": "0x89579f15", "rot": 11, "bit": 2, "mask": 4},
{"i": 75, "op": "add", "dst": 1, "src": 3, "src2": 4, "imm": "0x3f4ffea2", "imm2": "0x8e35924e", "rot": 12, "bit": 15, "mask": 2},
{"i": 76, "op": "mul", "dst": 1, "src": 3, "src2": 7, "imm": "0x15efa846", "imm2": "0xa1c971f1", "rot": 14, "bit": 20, "mask": 1},
{"i": 77, "op": "mad", "dst": 0, "src": 3, "src2": 2, "imm": "0x8660530a", "imm2": "0xa013524b", "rot": 14, "bit": 12, "mask": 8},
{"i": 78, "op": "shfl", "dst": 2, "src": 0, "src2": 0, "imm": "0xcc2e96bd", "imm2": "0xe32c6f87", "rot": 10, "bit": 11, "mask": 16},
{"i": 79, "op": "mulhi", "dst": 1, "src": 0, "src2": 6, "imm": "0x61931e3f", "imm2": "0x86383e7f", "rot": 17, "bit": 3, "mask": 1},
{"i": 80, "op": "mulhi", "dst": 0, "src": 4, "src2": 7, "imm": "0xd9991afc", "imm2": "0xd00e8678", "rot": 24, "bit": 15, "mask": 16},
{"i": 81, "op": "mul", "dst": 4, "src": 2, "src2": 3, "imm": "0x472f70f4", "imm2": "0x9fde4236", "rot": 10, "bit": 5, "mask": 4},
{"i": 82, "op": "sub", "dst": 5, "src": 7, "src2": 6, "imm": "0x55a7acb1", "imm2": "0x9fde8df1", "rot": 30, "bit": 29, "mask": 16},
{"i": 83, "op": "mad", "dst": 0, "src": 2, "src2": 3, "imm": "0x1c487c40", "imm2": "0xd9d9a1c3", "rot": 9, "bit": 5, "mask": 4},
{"i": 84, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0x515c0a72", "imm2": "0x6df5c83d", "rot": 28, "bit": 21, "mask": 4},
{"i": 85, "op": "xor", "dst": 1, "src": 2, "src2": 4, "imm": "0x917f1174", "imm2": "0x8e72e519", "rot": 9, "bit": 18, "mask": 16},
{"i": 86, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0xda856cc2", "imm2": "0x932ae8d8", "rot": 28, "bit": 1, "mask": 16},
{"i": 87, "op": "mad", "dst": 3, "src": 0, "src2": 0, "imm": "0x4ef22321", "imm2": "0x5666ada3", "rot": 4, "bit": 4, "mask": 1},
{"i": 88, "op": "rotl", "dst": 0, "src": 1, "src2": 3, "imm": "0xbb3ec00c", "imm2": "0xffe78937", "rot": 20, "bit": 19, "mask": 4},
{"i": 89, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x8f295708", "imm2": "0x6608577f", "rot": 17, "bit": 18, "mask": 16},
{"i": 90, "op": "shfl", "dst": 6, "src": 4, "src2": 5, "imm": "0xd953aa15", "imm2": "0x4ef9f062", "rot": 19, "bit": 9, "mask": 16},
{"i": 91, "op": "xor", "dst": 5, "src": 1, "src2": 5, "imm": "0x6c02cde2", "imm2": "0x118dbd2b", "rot": 2, "bit": 20, "mask": 16},
{"i": 92, "op": "rotl", "dst": 5, "src": 0, "src2": 5, "imm": "0x9f0b0c61", "imm2": "0xe26dbe7a", "rot": 12, "bit": 17, "mask": 2},
{"i": 93, "op": "mad", "dst": 6, "src": 1, "src2": 2, "imm": "0x78a44a91", "imm2": "0x3ce118a9", "rot": 18, "bit": 16, "mask": 16},
{"i": 94, "op": "rotr", "dst": 2, "src": 5, "src2": 3, "imm": "0x02295fcb", "imm2": "0xc3353c64", "rot": 5, "bit": 31, "mask": 16},
{"i": 95, "op": "or", "dst": 0, "src": 4, "src2": 4, "imm": "0x727120c3", "imm2": "0x528f4416", "rot": 6, "bit": 20, "mask": 8},
{"i": 96, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x919c42ea", "imm2": "0x87526aa5", "rot": 28, "bit": 1, "mask": 8},
{"i": 97, "op": "or", "dst": 5, "src": 0, "src2": 7, "imm": "0x8a0a100c", "imm2": "0xb2c65cc3", "rot": 13, "bit": 7, "mask": 4},
{"i": 98, "op": "add", "dst": 3, "src": 1, "src2": 1, "imm": "0xbcfdd8a7", "imm2": "0x386bb642", "rot": 8, "bit": 13, "mask": 8},
{"i": 99, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0xc921a021", "imm2": "0xa3962d03", "rot": 31, "bit": 9, "mask": 1},
{"i": 100, "op": "rotr", "dst": 1, "src": 0, "src2": 3, "imm": "0x918c6f69", "imm2": "0x1a125801", "rot": 18, "bit": 29, "mask": 16},
{"i": 101, "op": "add", "dst": 2, "src": 4, "src2": 1, "imm": "0x70da4067", "imm2": "0xc5990c5c", "rot": 3, "bit": 18, "mask": 4},
{"i": 102, "op": "rotl", "dst": 2, "src": 7, "src2": 0, "imm": "0x9048d081", "imm2": "0xc25a9f56", "rot": 3, "bit": 25, "mask": 16},
{"i": 103, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x70ca1427", "imm2": "0x6632093d", "rot": 18, "bit": 28, "mask": 4},
{"i": 104, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x0637204c", "imm2": "0x3b1b7f94", "rot": 1, "bit": 12, "mask": 2},
{"i": 105, "op": "add", "dst": 4, "src": 3, "src2": 5, "imm": "0x1a5880cb", "imm2": "0xb15aec75", "rot": 31, "bit": 28, "mask": 1},
{"i": 106, "op": "shfl", "dst": 4, "src": 0, "src2": 4, "imm": "0x7c22cb00", "imm2": "0xc4df7949", "rot": 3, "bit": 15, "mask": 2},
{"i": 107, "op": "shfl", "dst": 7, "src": 0, "src2": 0, "imm": "0xd43c76ca", "imm2": "0x8d5b9751", "rot": 31, "bit": 28, "mask": 4},
{"i": 108, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x69879993", "imm2": "0x3c4e18b0", "rot": 19, "bit": 25, "mask": 4},
{"i": 109, "op": "mad", "dst": 0, "src": 2, "src2": 3, "imm": "0x8ce3a4a6", "imm2": "0x1b3f0b74", "rot": 19, "bit": 8, "mask": 2},
{"i": 110, "op": "or", "dst": 2, "src": 4, "src2": 5, "imm": "0xcdbdac98", "imm2": "0x8d0e9f92", "rot": 19, "bit": 13, "mask": 1},
{"i": 111, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0xe74157f6", "imm2": "0xf92dead6", "rot": 4, "bit": 14, "mask": 1},
{"i": 112, "op": "mad", "dst": 2, "src": 5, "src2": 3, "imm": "0x200831bc", "imm2": "0x1ee98048", "rot": 29, "bit": 14, "mask": 1},
{"i": 113, "op": "mulhi", "dst": 4, "src": 0, "src2": 7, "imm": "0xd6827ead", "imm2": "0xc0ee1933", "rot": 26, "bit": 23, "mask": 16},
{"i": 114, "op": "rotl", "dst": 7, "src": 2, "src2": 2, "imm": "0x6ae1be2b", "imm2": "0x83216a4e", "rot": 29, "bit": 25, "mask": 16},
{"i": 115, "op": "sub", "dst": 3, "src": 7, "src2": 1, "imm": "0xa1d1646e", "imm2": "0x6fa998ce", "rot": 15, "bit": 29, "mask": 2},
{"i": 116, "op": "mulhi", "dst": 0, "src": 1, "src2": 4, "imm": "0xd7921c15", "imm2": "0x8b2345a7", "rot": 10, "bit": 19, "mask": 4},
{"i": 117, "op": "rotl", "dst": 4, "src": 0, "src2": 4, "imm": "0xc1b1b0ab", "imm2": "0xd19b3f39", "rot": 12, "bit": 16, "mask": 1},
{"i": 118, "op": "add", "dst": 1, "src": 4, "src2": 5, "imm": "0x24494ad3", "imm2": "0xc5e98ee5", "rot": 22, "bit": 7, "mask": 16},
{"i": 119, "op": "add", "dst": 0, "src": 4, "src2": 6, "imm": "0x1b2d1c83", "imm2": "0xa97bc949", "rot": 8, "bit": 4, "mask": 16},
{"i": 120, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0xb93015ff", "imm2": "0xc22366cd", "rot": 23, "bit": 16, "mask": 4},
{"i": 121, "op": "shfl", "dst": 3, "src": 2, "src2": 5, "imm": "0xc0aaacdb", "imm2": "0xaaa7d229", "rot": 31, "bit": 29, "mask": 8},
{"i": 122, "op": "rotl", "dst": 7, "src": 1, "src2": 3, "imm": "0xcce6a73f", "imm2": "0x517b6b86", "rot": 3, "bit": 16, "mask": 8},
{"i": 123, "op": "rotr", "dst": 4, "src": 6, "src2": 0, "imm": "0x8e156aca", "imm2": "0x0a894b3e", "rot": 2, "bit": 12, "mask": 2},
{"i": 124, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xd88c8446", "imm2": "0xf49fedf3", "rot": 3, "bit": 23, "mask": 1},
{"i": 125, "op": "rotl", "dst": 5, "src": 2, "src2": 0, "imm": "0xd10b27cf", "imm2": "0x2dde1faa", "rot": 21, "bit": 7, "mask": 2},
{"i": 126, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0x619e1818", "imm2": "0x62add310", "rot": 26, "bit": 1, "mask": 4},
{"i": 127, "op": "add", "dst": 0, "src": 3, "src2": 6, "imm": "0xff14c08d", "imm2": "0xa7f6bb54", "rot": 25, "bit": 24, "mask": 4},
{"i": 128, "op": "xor", "dst": 7, "src": 4, "src2": 4, "imm": "0x34224086", "imm2": "0x5e9f858e", "rot": 4, "bit": 16, "mask": 8},
{"i": 129, "op": "mulhi", "dst": 3, "src": 5, "src2": 6, "imm": "0x89c3cbdd", "imm2": "0x4e80334c", "rot": 29, "bit": 4, "mask": 1},
{"i": 130, "op": "shfl", "dst": 5, "src": 7, "src2": 1, "imm": "0x37d4c3e2", "imm2": "0xbd54378c", "rot": 14, "bit": 26, "mask": 8},
{"i": 131, "op": "mulhi", "dst": 6, "src": 4, "src2": 3, "imm": "0x4f5fac7c", "imm2": "0x74070028", "rot": 5, "bit": 25, "mask": 8},
{"i": 132, "op": "xor", "dst": 5, "src": 3, "src2": 0, "imm": "0x690eb003", "imm2": "0x8516a581", "rot": 20, "bit": 21, "mask": 2},
{"i": 133, "op": "rotl", "dst": 0, "src": 5, "src2": 7, "imm": "0x42b31885", "imm2": "0x08249acb", "rot": 19, "bit": 6, "mask": 8},
{"i": 134, "op": "rotr", "dst": 4, "src": 3, "src2": 3, "imm": "0x07d729ed", "imm2": "0xf564da8a", "rot": 17, "bit": 9, "mask": 16},
{"i": 135, "op": "shfl", "dst": 1, "src": 2, "src2": 0, "imm": "0x19130ef2", "imm2": "0xf59815e5", "rot": 17, "bit": 12, "mask": 16},
{"i": 136, "op": "sub", "dst": 5, "src": 2, "src2": 5, "imm": "0xdeb56168", "imm2": "0x871104c4", "rot": 13, "bit": 17, "mask": 16},
{"i": 137, "op": "xor", "dst": 3, "src": 5, "src2": 4, "imm": "0x884fc7da", "imm2": "0x83a4a5bf", "rot": 23, "bit": 12, "mask": 4},
{"i": 138, "op": "sub", "dst": 0, "src": 2, "src2": 6, "imm": "0x3e67a6fd", "imm2": "0x844d2039", "rot": 3, "bit": 24, "mask": 4},
{"i": 139, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x965933b4", "imm2": "0xf37ef93d", "rot": 6, "bit": 9, "mask": 4},
{"i": 140, "op": "add", "dst": 5, "src": 3, "src2": 3, "imm": "0x82ab98f4", "imm2": "0x2d465ca8", "rot": 11, "bit": 24, "mask": 1},
{"i": 141, "op": "add", "dst": 4, "src": 1, "src2": 7, "imm": "0x80594390", "imm2": "0x237a9d8e", "rot": 14, "bit": 11, "mask": 8},
{"i": 142, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xd37861a1", "imm2": "0x2fe70eae", "rot": 2, "bit": 11, "mask": 16},
{"i": 143, "op": "or", "dst": 0, "src": 3, "src2": 5, "imm": "0x1a018e2c", "imm2": "0x301aa5f6", "rot": 15, "bit": 26, "mask": 1},
{"i": 144, "op": "mulhi", "dst": 0, "src": 1, "src2": 5, "imm": "0x69d22dfc", "imm2": "0x4a90cb1e", "rot": 21, "bit": 9, "mask": 16},
{"i": 145, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xf3f41f47", "imm2": "0xdf8d33e9", "rot": 22, "bit": 0, "mask": 8},
{"i": 146, "op": "shfl", "dst": 7, "src": 1, "src2": 1, "imm": "0xf8a52377", "imm2": "0x0613ef41", "rot": 24, "bit": 12, "mask": 16},
{"i": 147, "op": "add", "dst": 0, "src": 1, "src2": 3, "imm": "0x07f15148", "imm2": "0xe68cf57e", "rot": 2, "bit": 18, "mask": 4},
{"i": 148, "op": "or", "dst": 7, "src": 3, "src2": 0, "imm": "0xbfd39b49", "imm2": "0xc7f6e97c", "rot": 13, "bit": 27, "mask": 2},
{"i": 149, "op": "xor", "dst": 4, "src": 2, "src2": 7, "imm": "0x47409e43", "imm2": "0x04ef7db9", "rot": 8, "bit": 6, "mask": 4},
{"i": 150, "op": "xor", "dst": 7, "src": 1, "src2": 1, "imm": "0x5d42a156", "imm2": "0xc2f77c48", "rot": 27, "bit": 17, "mask": 4},
{"i": 151, "op": "rotr", "dst": 5, "src": 2, "src2": 7, "imm": "0x7c170030", "imm2": "0xa3102916", "rot": 5, "bit": 6, "mask": 1},
{"i": 152, "op": "mul", "dst": 0, "src": 7, "src2": 5, "imm": "0x16d009af", "imm2": "0x2a89533b", "rot": 26, "bit": 8, "mask": 4},
{"i": 153, "op": "rotl", "dst": 4, "src": 5, "src2": 0, "imm": "0x6e54eb71", "imm2": "0xe2d27256", "rot": 16, "bit": 18, "mask": 1},
{"i": 154, "op": "rotr", "dst": 6, "src": 4, "src2": 5, "imm": "0x128f24a4", "imm2": "0x59888463", "rot": 15, "bit": 17, "mask": 16},
{"i": 155, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0x34f276ff", "imm2": "0xef5086b4", "rot": 2, "bit": 10, "mask": 4},
{"i": 156, "op": "or", "dst": 6, "src": 3, "src2": 4, "imm": "0x16cc2c2f", "imm2": "0xfae5a09b", "rot": 12, "bit": 31, "mask": 4},
{"i": 157, "op": "add", "dst": 1, "src": 6, "src2": 7, "imm": "0x14878c5a", "imm2": "0x84c2a09d", "rot": 30, "bit": 19, "mask": 8},
{"i": 158, "op": "sub", "dst": 4, "src": 1, "src2": 0, "imm": "0xfe18e4b0", "imm2": "0x239df0cc", "rot": 14, "bit": 20, "mask": 2},
{"i": 159, "op": "mad", "dst": 4, "src": 6, "src2": 7, "imm": "0xbdfcc4e0", "imm2": "0x0870dee8", "rot": 1, "bit": 7, "mask": 8},
{"i": 160, "op": "mul", "dst": 1, "src": 5, "src2": 1, "imm": "0xc837b43d", "imm2": "0x027ac950", "rot": 4, "bit": 22, "mask": 16},
{"i": 161, "op": "or", "dst": 4, "src": 0, "src2": 2, "imm": "0x9c28f8f6", "imm2": "0x3db71fe6", "rot": 11, "bit": 6, "mask": 16},
{"i": 162, "op": "rotl", "dst": 7, "src": 3, "src2": 6, "imm": "0xb6e56f55", "imm2": "0x5fcbd27c", "rot": 21, "bit": 10, "mask": 1},
{"i": 163, "op": "sub", "dst": 0, "src": 1, "src2": 4, "imm": "0x8d95ae70", "imm2": "0xd4f10284", "rot": 15, "bit": 12, "mask": 8},
{"i": 164, "op": "mul", "dst": 1, "src": 0, "src2": 6, "imm": "0xa9bdf99e", "imm2": "0x1f3dceb6", "rot": 21, "bit": 20, "mask": 16},
{"i": 165, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xda245058", "imm2": "0x2038e7f6", "rot": 30, "bit": 11, "mask": 2},
{"i": 166, "op": "shfl", "dst": 0, "src": 6, "src2": 3, "imm": "0xbbc8eee8", "imm2": "0xa73472fb", "rot": 23, "bit": 4, "mask": 2},
{"i": 167, "op": "sub", "dst": 0, "src": 4, "src2": 2, "imm": "0x43540d69", "imm2": "0xb3f116ca", "rot": 28, "bit": 2, "mask": 2},
{"i": 168, "op": "rotr", "dst": 1, "src": 6, "src2": 6, "imm": "0x57cea752", "imm2": "0xc1136e71", "rot": 25, "bit": 3, "mask": 8},
{"i": 169, "op": "rotr", "dst": 7, "src": 1, "src2": 5, "imm": "0x4550a465", "imm2": "0x14362935", "rot": 25, "bit": 9, "mask": 16},
{"i": 170, "op": "mad", "dst": 3, "src": 1, "src2": 3, "imm": "0x8c961d80", "imm2": "0x7de2e1db", "rot": 10, "bit": 6, "mask": 4},
{"i": 171, "op": "shfl", "dst": 2, "src": 0, "src2": 0, "imm": "0xda047fca", "imm2": "0x459e17ab", "rot": 22, "bit": 26, "mask": 4},
{"i": 172, "op": "sub", "dst": 2, "src": 1, "src2": 2, "imm": "0xbcc341fd", "imm2": "0x17a3b229", "rot": 8, "bit": 25, "mask": 8},
{"i": 173, "op": "xor", "dst": 7, "src": 6, "src2": 7, "imm": "0x2302b424", "imm2": "0x78780982", "rot": 23, "bit": 7, "mask": 8},
{"i": 174, "op": "rotr", "dst": 4, "src": 1, "src2": 2, "imm": "0xcad6fb5f", "imm2": "0x1807628e", "rot": 8, "bit": 21, "mask": 4},
{"i": 175, "op": "shfl", "dst": 4, "src": 7, "src2": 7, "imm": "0xf5057e8e", "imm2": "0xd14d6cc5", "rot": 3, "bit": 12, "mask": 2},
{"i": 176, "op": "mul", "dst": 6, "src": 2, "src2": 1, "imm": "0xc2926356", "imm2": "0xae74dc32", "rot": 1, "bit": 21, "mask": 8},
{"i": 177, "op": "shfl", "dst": 0, "src": 2, "src2": 7, "imm": "0x8d94d98e", "imm2": "0x7bd6f4dc", "rot": 27, "bit": 14, "mask": 4},
{"i": 178, "op": "add", "dst": 6, "src": 4, "src2": 6, "imm": "0x4fa43965", "imm2": "0x509871e6", "rot": 28, "bit": 21, "mask": 4},
{"i": 179, "op": "xor", "dst": 0, "src": 6, "src2": 6, "imm": "0xe278fe6c", "imm2": "0x75d8a63f", "rot": 21, "bit": 15, "mask": 2},
{"i": 180, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xfb3c4bd8", "imm2": "0xb95b8a53", "rot": 22, "bit": 0, "mask": 4},
{"i": 181, "op": "mul", "dst": 6, "src": 3, "src2": 2, "imm": "0x5a1347ec", "imm2": "0x3ccc5389", "rot": 27, "bit": 26, "mask": 4},
{"i": 182, "op": "rotl", "dst": 7, "src": 4, "src2": 7, "imm": "0xdc6db2f7", "imm2": "0x7cdff0c6", "rot": 1, "bit": 2, "mask": 4},
{"i": 183, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xc448a197", "imm2": "0x7047b7cf", "rot": 24, "bit": 11, "mask": 8},
{"i": 184, "op": "mul", "dst": 3, "src": 5, "src2": 0, "imm": "0xa5c0e492", "imm2": "0xaf7d8a86", "rot": 11, "bit": 16, "mask": 8},
{"i": 185, "op": "shfl", "dst": 5, "src": 7, "src2": 1, "imm": "0x5965794b", "imm2": "0x36ddca6b", "rot": 7, "bit": 25, "mask": 1},
{"i": 186, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0xdfdbcc0f", "imm2": "0xac7b7091", "rot": 11, "bit": 31, "mask": 8},
{"i": 187, "op": "mulhi", "dst": 4, "src": 7, "src2": 5, "imm": "0x3d8999e9", "imm2": "0xf1848db8", "rot": 15, "bit": 21, "mask": 8},
{"i": 188, "op": "mad", "dst": 2, "src": 7, "src2": 2, "imm": "0xda3af48c", "imm2": "0x8e33a97c", "rot": 6, "bit": 30, "mask": 4},
{"i": 189, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xa32da8c1", "imm2": "0xf7486d06", "rot": 25, "bit": 16, "mask": 4},
{"i": 190, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0x2fceaf49", "imm2": "0x5caccc5d", "rot": 24, "bit": 19, "mask": 2},
{"i": 191, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0x2a71f5e6", "imm2": "0xb9b51e89", "rot": 31, "bit": 25, "mask": 1},
{"i": 192, "op": "add", "dst": 7, "src": 1, "src2": 7, "imm": "0xba0cee62", "imm2": "0x857bb5fe", "rot": 4, "bit": 20, "mask": 2},
{"i": 193, "op": "rotl", "dst": 6, "src": 3, "src2": 3, "imm": "0xc7fe35cf", "imm2": "0x515c1201", "rot": 22, "bit": 7, "mask": 16},
{"i": 194, "op": "xor", "dst": 3, "src": 7, "src2": 4, "imm": "0xe496d1f1", "imm2": "0x11046e3e", "rot": 16, "bit": 9, "mask": 4},
{"i": 195, "op": "mul", "dst": 7, "src": 0, "src2": 2, "imm": "0xc7d5c4c2", "imm2": "0x077e940b", "rot": 23, "bit": 29, "mask": 4},
{"i": 196, "op": "xor", "dst": 3, "src": 5, "src2": 3, "imm": "0xbe6db14a", "imm2": "0xf736da5a", "rot": 19, "bit": 6, "mask": 2},
{"i": 197, "op": "add", "dst": 5, "src": 1, "src2": 5, "imm": "0x8519428c", "imm2": "0xeae84577", "rot": 18, "bit": 29, "mask": 1},
{"i": 198, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xb272a029", "imm2": "0x071f6a5c", "rot": 5, "bit": 28, "mask": 8},
{"i": 199, "op": "add", "dst": 3, "src": 6, "src2": 3, "imm": "0x468639d3", "imm2": "0x0bfdbfa1", "rot": 20, "bit": 8, "mask": 16},
{"i": 200, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xffba18b7", "imm2": "0xbdcf9e81", "rot": 13, "bit": 31, "mask": 8},
{"i": 201, "op": "shfl", "dst": 2, "src": 7, "src2": 7, "imm": "0xb7533191", "imm2": "0x8d58cc8c", "rot": 7, "bit": 29, "mask": 4},
{"i": 202, "op": "add", "dst": 7, "src": 4, "src2": 6, "imm": "0x18ec9a69", "imm2": "0x53ee8e50", "rot": 12, "bit": 23, "mask": 16},
{"i": 203, "op": "xor", "dst": 6, "src": 0, "src2": 5, "imm": "0x12011ff1", "imm2": "0xfbb57ac6", "rot": 16, "bit": 25, "mask": 16},
{"i": 204, "op": "add", "dst": 4, "src": 5, "src2": 3, "imm": "0x3e81485b", "imm2": "0xac63376e", "rot": 1, "bit": 4, "mask": 1},
{"i": 205, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0xeb9eee5c", "imm2": "0x3f1daecd", "rot": 19, "bit": 29, "mask": 4},
{"i": 206, "op": "shfl", "dst": 1, "src": 5, "src2": 2, "imm": "0x4fc50d06", "imm2": "0xb5533b31", "rot": 22, "bit": 27, "mask": 16},
{"i": 207, "op": "mul", "dst": 4, "src": 0, "src2": 5, "imm": "0x202d6001", "imm2": "0x50388f85", "rot": 5, "bit": 18, "mask": 16},
{"i": 208, "op": "or", "dst": 1, "src": 6, "src2": 7, "imm": "0x8743c0d4", "imm2": "0x9df69539", "rot": 14, "bit": 16, "mask": 1},
{"i": 209, "op": "add", "dst": 6, "src": 4, "src2": 6, "imm": "0x66ccb75d", "imm2": "0x5b745519", "rot": 28, "bit": 28, "mask": 8},
{"i": 210, "op": "rotr", "dst": 1, "src": 3, "src2": 1, "imm": "0xe9933132", "imm2": "0x6702fe85", "rot": 16, "bit": 19, "mask": 1},
{"i": 211, "op": "sub", "dst": 5, "src": 4, "src2": 4, "imm": "0xfe04b942", "imm2": "0x40dd2ce8", "rot": 24, "bit": 8, "mask": 4},
{"i": 212, "op": "xor", "dst": 4, "src": 7, "src2": 7, "imm": "0x10827878", "imm2": "0xef0de8fc", "rot": 17, "bit": 11, "mask": 8},
{"i": 213, "op": "add", "dst": 1, "src": 7, "src2": 1, "imm": "0x0ce0553d", "imm2": "0x1c3dccf7", "rot": 26, "bit": 8, "mask": 1},
{"i": 214, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xa71d7581", "imm2": "0xe567c74c", "rot": 2, "bit": 29, "mask": 2},
{"i": 215, "op": "add", "dst": 3, "src": 6, "src2": 2, "imm": "0x96bfec89", "imm2": "0xfadc9205", "rot": 30, "bit": 9, "mask": 16},
{"i": 216, "op": "rotl", "dst": 0, "src": 2, "src2": 5, "imm": "0x947ca474", "imm2": "0xd2a1b650", "rot": 4, "bit": 1, "mask": 1},
{"i": 217, "op": "xor", "dst": 6, "src": 4, "src2": 5, "imm": "0x0b7617de", "imm2": "0xc6c0a9a2", "rot": 31, "bit": 15, "mask": 2},
{"i": 218, "op": "shfl", "dst": 6, "src": 7, "src2": 1, "imm": "0x738f0a8f", "imm2": "0xfc868560", "rot": 2, "bit": 20, "mask": 2},
{"i": 219, "op": "mad", "dst": 7, "src": 0, "src2": 1, "imm": "0x2960f2bc", "imm2": "0x7e9ef9b7", "rot": 21, "bit": 4, "mask": 16},
{"i": 220, "op": "mul", "dst": 4, "src": 0, "src2": 2, "imm": "0x6014d800", "imm2": "0xd19ac7d1", "rot": 1, "bit": 13, "mask": 1},
{"i": 221, "op": "mad", "dst": 2, "src": 6, "src2": 0, "imm": "0x4b558fc2", "imm2": "0x2d48bd3c", "rot": 18, "bit": 31, "mask": 2},
{"i": 222, "op": "xor", "dst": 5, "src": 4, "src2": 6, "imm": "0x0260f3ab", "imm2": "0x8fce22f1", "rot": 21, "bit": 26, "mask": 16},
{"i": 223, "op": "mul", "dst": 0, "src": 5, "src2": 0, "imm": "0xe07ab58f", "imm2": "0x5349a41d", "rot": 20, "bit": 3, "mask": 1},
{"i": 224, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0x61495681", "imm2": "0x66b15c04", "rot": 24, "bit": 9, "mask": 16},
{"i": 225, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x291268bd", "imm2": "0xf046aa79", "rot": 27, "bit": 15, "mask": 4},
{"i": 226, "op": "mad", "dst": 2, "src": 3, "src2": 3, "imm": "0xfd6dfa6c", "imm2": "0x2c0db93d", "rot": 29, "bit": 2, "mask": 16},
{"i": 227, "op": "xor", "dst": 6, "src": 0, "src2": 4, "imm": "0xd4ae1ee2", "imm2": "0xe6a67972", "rot": 26, "bit": 1, "mask": 4},
{"i": 228, "op": "rotl", "dst": 4, "src": 7, "src2": 3, "imm": "0xf6627a9d", "imm2": "0x99078da3", "rot": 30, "bit": 5, "mask": 16},
{"i": 229, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x70d05c34", "imm2": "0x25bc17c2", "rot": 20, "bit": 29, "mask": 4},
{"i": 230, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0xef874bea", "imm2": "0x3bfbfecc", "rot": 17, "bit": 2, "mask": 2},
{"i": 231, "op": "add", "dst": 1, "src": 4, "src2": 5, "imm": "0x32a28384", "imm2": "0x2d8728f3", "rot": 1, "bit": 8, "mask": 8},
{"i": 232, "op": "rotl", "dst": 1, "src": 6, "src2": 3, "imm": "0x877c54ab", "imm2": "0x1d5e5014", "rot": 6, "bit": 24, "mask": 2},
{"i": 233, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xcf0949f1", "imm2": "0x61e81fe6", "rot": 2, "bit": 21, "mask": 16},
{"i": 234, "op": "rotl", "dst": 4, "src": 5, "src2": 5, "imm": "0x5017c32c", "imm2": "0x1ab34dfe", "rot": 2, "bit": 1, "mask": 2},
{"i": 235, "op": "sub", "dst": 2, "src": 6, "src2": 2, "imm": "0xadbdb811", "imm2": "0x2c2d4f2b", "rot": 30, "bit": 29, "mask": 8},
{"i": 236, "op": "or", "dst": 6, "src": 3, "src2": 4, "imm": "0x700e204f", "imm2": "0x27294e7b", "rot": 13, "bit": 0, "mask": 4},
{"i": 237, "op": "shfl", "dst": 7, "src": 5, "src2": 4, "imm": "0xc39f71ba", "imm2": "0x9a90263d", "rot": 28, "bit": 9, "mask": 4},
{"i": 238, "op": "xor", "dst": 1, "src": 3, "src2": 6, "imm": "0x9f84a5b3", "imm2": "0x95691d15", "rot": 14, "bit": 22, "mask": 1},
{"i": 239, "op": "rotl", "dst": 2, "src": 4, "src2": 0, "imm": "0xa3b79ed5", "imm2": "0x05f568bc", "rot": 1, "bit": 15, "mask": 4},
{"i": 240, "op": "rotr", "dst": 5, "src": 2, "src2": 7, "imm": "0xaaabbb0d", "imm2": "0x71ce4cd6", "rot": 2, "bit": 26, "mask": 4},
{"i": 241, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x8146fbd3", "imm2": "0xde65fc31", "rot": 10, "bit": 9, "mask": 4},
{"i": 242, "op": "add", "dst": 6, "src": 2, "src2": 7, "imm": "0xe204fb50", "imm2": "0x0a67565d", "rot": 5, "bit": 16, "mask": 1},
{"i": 243, "op": "shfl", "dst": 1, "src": 3, "src2": 7, "imm": "0xcb7a3c1b", "imm2": "0x863f002c", "rot": 18, "bit": 1, "mask": 2},
{"i": 244, "op": "shfl", "dst": 0, "src": 1, "src2": 3, "imm": "0x92eb030c", "imm2": "0x3cff4c6d", "rot": 1, "bit": 22, "mask": 16},
{"i": 245, "op": "shfl", "dst": 5, "src": 7, "src2": 6, "imm": "0x046c969c", "imm2": "0xd21d7e76", "rot": 5, "bit": 31, "mask": 2},
{"i": 246, "op": "xor", "dst": 4, "src": 5, "src2": 1, "imm": "0x2e3015f0", "imm2": "0x1b305a5c", "rot": 22, "bit": 16, "mask": 8},
{"i": 247, "op": "xor", "dst": 7, "src": 2, "src2": 0, "imm": "0x8238cf71", "imm2": "0xb7874d94", "rot": 9, "bit": 1, "mask": 2},
{"i": 248, "op": "shfl", "dst": 0, "src": 6, "src2": 7, "imm": "0x437cbc99", "imm2": "0x7fb41fed", "rot": 17, "bit": 1, "mask": 16},
{"i": 249, "op": "mulhi", "dst": 1, "src": 3, "src2": 2, "imm": "0xeb293d88", "imm2": "0xb92f5968", "rot": 3, "bit": 20, "mask": 2},
{"i": 250, "op": "add", "dst": 7, "src": 5, "src2": 3, "imm": "0x3d6daffd", "imm2": "0x5a79fd6f", "rot": 6, "bit": 31, "mask": 2},
{"i": 251, "op": "add", "dst": 6, "src": 0, "src2": 3, "imm": "0x84334aea", "imm2": "0x6beb28c2", "rot": 27, "bit": 28, "mask": 2},
{"i": 252, "op": "sub", "dst": 7, "src": 1, "src2": 6, "imm": "0xe6177638", "imm2": "0x814d3fc5", "rot": 25, "bit": 2, "mask": 2},
{"i": 253, "op": "rotr", "dst": 5, "src": 2, "src2": 7, "imm": "0x95560bac", "imm2": "0xbf8b01a9", "rot": 14, "bit": 5, "mask": 16},
{"i": 254, "op": "mulhi", "dst": 2, "src": 5, "src2": 1, "imm": "0x318956e5", "imm2": "0x7c20b373", "rot": 13, "bit": 30, "mask": 2},
{"i": 255, "op": "mul", "dst": 6, "src": 3, "src2": 3, "imm": "0xe1998e49", "imm2": "0x59353e5a", "rot": 15, "bit": 2, "mask": 4}
]},
"instructions": [
{"i": 0, "op": "sub", "dst": 6, "src": 3, "src2": 3, "imm": "0x77dfbe60", "imm2": "0x404c8b9c", "rot": 24, "bit": 8, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 1, "op": "or", "dst": 2, "src": 6, "src2": 7, "imm": "0xb2e79058", "imm2": "0xc2485073", "rot": 21, "bit": 23, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 2, "op": "add", "dst": 4, "src": 0, "src2": 6, "imm": "0x1a579b38", "imm2": "0x7731324b", "rot": 6, "bit": 4, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 3, "op": "load", "dst": 3, "src": 6, "src2": 0, "imm": "0x683f5bc5", "imm2": "0xc8a218fe", "rot": 25, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 4, "op": "shfl", "dst": 0, "src": 6, "src2": 4, "imm": "0x4d7cdcbb", "imm2": "0x1a5bf1a4", "rot": 8, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 5, "op": "xor", "dst": 4, "src": 1, "src2": 0, "imm": "0xa2b86827", "imm2": "0x94a44439", "rot": 21, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 6, "op": "mad", "dst": 3, "src": 5, "src2": 3, "imm": "0x58a4ea3f", "imm2": "0x467879fa", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 7, "op": "mul", "dst": 1, "src": 6, "src2": 1, "imm": "0x31fcc19c", "imm2": "0x176cb88f", "rot": 1, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 8, "op": "load", "dst": 2, "src": 0, "src2": 3, "imm": "0x89b12386", "imm2": "0x661ed5e5", "rot": 11, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 2},
{"i": 9, "op": "xor", "dst": 0, "src": 4, "src2": 1, "imm": "0x69150105", "imm2": "0x8e1f04b9", "rot": 3, "bit": 30, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 10, "op": "add", "dst": 0, "src": 7, "src2": 5, "imm": "0xee083919", "imm2": "0xb10fcef8", "rot": 9, "bit": 30, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 11, "op": "mulhi", "dst": 0, "src": 2, "src2": 3, "imm": "0x99ac7c83", "imm2": "0x34eb2845", "rot": 18, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 12, "op": "xor", "dst": 5, "src": 4, "src2": 0, "imm": "0x97cfc887", "imm2": "0x0458f053", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 13, "op": "mad", "dst": 7, "src": 3, "src2": 0, "imm": "0x503e87b4", "imm2": "0x2c5d2617", "rot": 3, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 14, "op": "load", "dst": 3, "src": 4, "src2": 4, "imm": "0xfae98035", "imm2": "0x6c127281", "rot": 19, "bit": 29, "mask": 4, "width": 1, "win": 1, "off": 0},
{"i": 15, "op": "load", "dst": 2, "src": 5, "src2": 2, "imm": "0x67601ed5", "imm2": "0x3c546ed1", "rot": 28, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 16, "op": "shfl", "dst": 7, "src": 5, "src2": 6, "imm": "0x7789be79", "imm2": "0x87496b8e", "rot": 22, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 17, "op": "mul", "dst": 7, "src": 6, "src2": 2, "imm": "0x559099bb", "imm2": "0x6a72e1a6", "rot": 1, "bit": 11, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 18, "op": "mad", "dst": 2, "src": 3, "src2": 1, "imm": "0x4f5bae5e", "imm2": "0x4c8c5762", "rot": 27, "bit": 31, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 19, "op": "rotr", "dst": 5, "src": 2, "src2": 4, "imm": "0x5dc5e6bf", "imm2": "0x36bc207d", "rot": 9, "bit": 4, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 20, "op": "load", "dst": 5, "src": 3, "src2": 7, "imm": "0x4a278885", "imm2": "0xcd1044b0", "rot": 30, "bit": 0, "mask": 4, "width": 1, "win": 1, "off": 1},
{"i": 21, "op": "shfl", "dst": 6, "src": 4, "src2": 3, "imm": "0x48b94ffc", "imm2": "0xd8e14d80", "rot": 2, "bit": 31, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 22, "op": "mulhi", "dst": 1, "src": 2, "src2": 7, "imm": "0x47bd8492", "imm2": "0x28fa8d0b", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 23, "op": "xor", "dst": 6, "src": 5, "src2": 1, "imm": "0x4ed6baf4", "imm2": "0xa8c31f74", "rot": 30, "bit": 2, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 24, "op": "mad", "dst": 5, "src": 2, "src2": 0, "imm": "0x6174747d", "imm2": "0xfc912524", "rot": 18, "bit": 29, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 25, "op": "mad", "dst": 6, "src": 3, "src2": 7, "imm": "0x113a6442", "imm2": "0xbe52ec57", "rot": 15, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 26, "op": "load", "dst": 6, "src": 5, "src2": 1, "imm": "0x9d3eb1cc", "imm2": "0x375c73bb", "rot": 29, "bit": 7, "mask": 8, "width": 1, "win": 1, "off": 1},
{"i": 27, "op": "mad", "dst": 1, "src": 5, "src2": 5, "imm": "0x150088c3", "imm2": "0x7f17e789", "rot": 8, "bit": 25, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 28, "op": "load", "dst": 0, "src": 6, "src2": 3, "imm": "0x4b412223", "imm2": "0x9192ceeb", "rot": 16, "bit": 28, "mask": 1, "width": 1, "win": 1, "off": 1},
{"i": 29, "op": "add", "dst": 7, "src": 4, "src2": 6, "imm": "0xd5e6c37c", "imm2": "0x0b1f02c7", "rot": 2, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 30, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x4e45ba51", "imm2": "0x2d6e8bd1", "rot": 7, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 31, "op": "xor", "dst": 0, "src": 2, "src2": 7, "imm": "0xef601d89", "imm2": "0x805402db", "rot": 7, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 32, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x1c91b2a1", "imm2": "0x351422d2", "rot": 1, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 33, "op": "mulhi", "dst": 4, "src": 5, "src2": 7, "imm": "0x7cf21567", "imm2": "0x1075ee0d", "rot": 26, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 34, "op": "rotr", "dst": 3, "src": 5, "src2": 6, "imm": "0x60d8f191", "imm2": "0x40523707", "rot": 3, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 35, "op": "load", "dst": 3, "src": 0, "src2": 5, "imm": "0xb1dc3f6e", "imm2": "0x74440531", "rot": 21, "bit": 10, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 36, "op": "rotl", "dst": 4, "src": 6, "src2": 4, "imm": "0xf0d17569", "imm2": "0xd281fd01", "rot": 13, "bit": 4, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 37, "op": "add", "dst": 6, "src": 1, "src2": 6, "imm": "0x3f2970f7", "imm2": "0x64a28251", "rot": 4, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 38, "op": "mul", "dst": 2, "src": 0, "src2": 3, "imm": "0x6463770c", "imm2": "0xb85d603f", "rot": 27, "bit": 1, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 39, "op": "add", "dst": 3, "src": 4, "src2": 3, "imm": "0x3b7b3317", "imm2": "0x7378c955", "rot": 28, "bit": 15, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 40, "op": "load", "dst": 0, "src": 7, "src2": 3, "imm": "0xd0fb5982", "imm2": "0x2e4d31a8", "rot": 25, "bit": 27, "mask": 4, "width": 1, "win": 2, "off": 3},
{"i": 41, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xe96a9e6e", "imm2": "0x8d73cc3e", "rot": 17, "bit": 11, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 42, "op": "add", "dst": 3, "src": 0, "src2": 6, "imm": "0x6678b059", "imm2": "0xb31f6a64", "rot": 11, "bit": 2, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 43, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x65a841c5", "imm2": "0x6aae1403", "rot": 9, "bit": 9, "mask": 1, "width": 1, "win": 1, "off": 0},
{"i": 44, "op": "shfl", "dst": 3, "src": 7, "src2": 6, "imm": "0x650ba38d", "imm2": "0x07218508", "rot": 12, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 45, "op": "mulhi", "dst": 1, "src": 5, "src2": 7, "imm": "0x18736788", "imm2": "0x9f820eed", "rot": 13, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 46, "op": "rotl", "dst": 0, "src": 1, "src2": 5, "imm": "0x48deba75", "imm2": "0xefc508fa", "rot": 6, "bit": 6, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 47, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0x28a04384", "imm2": "0xc67cb0ac", "rot": 5, "bit": 5, "mask": 2, "width": 1, "win": 1, "off": 1},
{"i": 48, "op": "add", "dst": 4, "src": 0, "src2": 5, "imm": "0x43095946", "imm2": "0x5feccee6", "rot": 22, "bit": 17, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 49, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0x3e78cdd8", "imm2": "0x7c170311", "rot": 10, "bit": 5, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 50, "op": "sub", "dst": 2, "src": 3, "src2": 7, "imm": "0xaff0cdb2", "imm2": "0xde0b7ee0", "rot": 21, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 51, "op": "add", "dst": 7, "src": 2, "src2": 1, "imm": "0xf45ecdf8", "imm2": "0x26e2b582", "rot": 28, "bit": 24, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 52, "op": "load", "dst": 5, "src": 7, "src2": 7, "imm": "0x67353e69", "imm2": "0xb2d56082", "rot": 27, "bit": 14, "mask": 2, "width": 1, "win": 2, "off": 3},
{"i": 53, "op": "load", "dst": 6, "src": 3, "src2": 1, "imm": "0x5a58c787", "imm2": "0x53a0467b", "rot": 6, "bit": 16, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 54, "op": "shfl", "dst": 7, "src": 5, "src2": 4, "imm": "0x3c237ad5", "imm2": "0xf2681187", "rot": 14, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 55, "op": "rotr", "dst": 1, "src": 2, "src2": 3, "imm": "0x1c25c077", "imm2": "0x125de1ff", "rot": 13, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 56, "op": "shfl", "dst": 0, "src": 5, "src2": 0, "imm": "0x6465afe2", "imm2": "0x23b41d56", "rot": 31, "bit": 28, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 57, "op": "rotl", "dst": 5, "src": 0, "src2": 2, "imm": "0xa427ff6e", "imm2": "0x014a0deb", "rot": 12, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 58, "op": "add", "dst": 5, "src": 3, "src2": 7, "imm": "0x6b4f35e8", "imm2": "0x473b1718", "rot": 25, "bit": 4, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 59, "op": "rotr", "dst": 4, "src": 1, "src2": 3, "imm": "0x66cc96ef", "imm2": "0xcb8c8e56", "rot": 7, "bit": 6, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 60, "op": "shfl", "dst": 4, "src": 5, "src2": 5, "imm": "0x461bbf9f", "imm2": "0xc1ffd350", "rot": 19, "bit": 2, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 61, "op": "load", "dst": 7, "src": 0, "src2": 1, "imm": "0x4d893571", "imm2": "0x5583e644", "rot": 19, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1},
{"i": 62, "op": "load", "dst": 5, "src": 7, "src2": 3, "imm": "0x7a9049b4", "imm2": "0xbb7ebdf8", "rot": 15, "bit": 11, "mask": 8, "width": 1, "win": 1, "off": 1},
{"i": 63, "op": "mul", "dst": 4, "src": 1, "src2": 7, "imm": "0xe7ae8a83", "imm2": "0x1ded64e8", "rot": 21, "bit": 1, "mask": 8, "width": 1, "win": 0, "off": 0}
]
}

File diff suppressed because it is too large Load diff

14
tools/attack/adv-accept/Cargo.lock generated Normal file
View file

@ -0,0 +1,14 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "adv-accept"
version = "0.1.0"
dependencies = [
"igneum-pow",
]
[[package]]
name = "igneum-pow"
version = "0.2.0"

View file

@ -0,0 +1,25 @@
[package]
name = "adv-accept"
version = "0.1.0"
edition = "2021"
description = "Internal adversarial pass on the program acceptance rule and its generator (class v4 sub-version 3, frozen commit 017e7037): draw-path check, accepted-program sweep, closed-form distinct and per-site ratio, with plant hooks"
license = "MIT"
publish = false
[[bin]]
name = "adv-accept"
path = "src/main.rs"
[dependencies]
igneum-pow = { path = "../../../igneum-pow" }
[workspace]
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
[[bin]]
name = "adv-live"
path = "src/live.rs"

View file

@ -0,0 +1,406 @@
{
"format": "igneum-program-pack-3",
"generator": 4,
"attempt": 0,
"program_id": "0xfce15bf61030be57",
"program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32",
"dataset_mode": "memory-hard",
"seed": "igneum-epoch/4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925/day/69676e65756d2d6461792ffd50000000000000",
"seed_bytes": "4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925",
"seed_words": ["0xbe8c5a0c", "0x7646e626", "0x508e29d0", "0xfb8a5b4a", "0x53c50955", "0x685d62fc", "0x6065c013", "0x881096eb"],
"seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32",
"generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried",
"lanes": 32,
"registers": 8,
"iterations": 8,
"instruction_count": 64,
"loads_per_hash": 128,
"program_class": "v4",
"sub_version": 3,
"era_seed_bytes": "4020cb4382e3fe4b281c817c02582e147d8f851f566ae9172b28912b8e68b925",
"load_class": "mx8-eraaf3a9139+sh256x27",
"mixer_mult": 8,
"cache_growth": true,
"mixer": "class v3 (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): every mixer application of the item derivation is 8 applications with round keys (r * 8 + j + 1) * 0x9E3779B9, the 8 dependent cache reads per item unchanged; cache growth rule option C: cache words = 2^(26 + doublings(day)), dataset words = 2^(genesis_log2 + doublings(day)), doublings(day) = floor(log2(1 + day / 1460)) for day = days since genesis",
"load_slots": 16,
"load_mix_percent_4_16_64": [100, 0, 0],
"load_width_counts_4_16_64": [16, 0, 0],
"bytes_per_hash": 512,
"wide_load": "read-width experiment (5 October 2026, docs/plans/read-width.md), NOT the lottery hash: a load of W words (width field, 4 or 16) reads dataset[b .. b + W) with b = (src & mask) & ~(W - 1) and folds every word into dst: x = dst ^ w[0]; for j in 1..W: x = (rotl(x, 11) * 0x9e3779b1) ^ w[j]; dst = x; width 1 is the plain load; the width is drawn per instruction from the class mix with one extra below(100) draw after the nine of version 2, and the program id is FNV-1a 64 over 'igneum-program-rw/' || generator_le32 || seed words || attempt_le32 || mix[3] || load_slots",
"era": {
"label": "af3a9139",
"seed_words": ["0xaf3a9139", "0x894db311", "0xd6173573", "0xc346bc0f", "0x2d547cec", "0xd5634ab8", "0xb9584827", "0x305d030e"],
"draw": "docs/plans/era-layout.md 1.1: SplitMix64 seeded with seed_words[0] | seed_words[1] << 32 of seed_words_from_bytes('igneum-era/' || n_le64 || E_n); width = allowed[below(|allowed|)], stride_mul = low32(next()) | 1, stride_rot = 1 + below(31), then four next() draws for a partial Fisher-Yates over positions log2(W)..15 of which 4 - log2(W) are used",
"allowed_widths": [1],
"width_words": 1,
"stride_mul": "0x2cb18b35",
"stride_rot": 9,
"interleave": [1, 9, 13, 14],
"address": "y = rotl(src * stride_mul, stride_rot); k = min(win, D - 26); idx = ((y & (mask >> k)) | ((off & (2^k - 1)) << (D - k))) & mask; a wide load aligns idx down to W words",
"windows": "per instruction, after the width roll: win = below(3), off = low32(next()) & (2^win - 1); used on a load slot (the instruction's win and off fields)",
"dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed",
"program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]"
},
"op_mix": {"load": 16, "add": 11, "shfl": 7, "mad": 6, "xor": 6, "mul": 4, "mulhi": 4, "rotr": 4, "rotl": 3, "sub": 2, "or": 1},
"register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]",
"splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16",
"iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order",
"output": "lo = r0 ^ rotl(r1,7) ^ rotl(r2,14) ^ rotl(r3,21); hi = r4 ^ rotl(r5,9) ^ rotl(r6,18) ^ rotl(r7,27); out = (hi << 32) | lo",
"op_semantics": {
"add": "dst = dst + src + (bit `bit` of sel ? imm2 : imm)",
"sub": "dst = dst - src",
"mul": "dst = dst * src (low 32)",
"mulhi": "dst = high 32 bits of dst * src",
"xor": "dst = dst ^ src",
"or": "dst = dst | src",
"rotl": "dst = rotl(dst, rot), rot in 1..31",
"rotr": "dst = rotr(dst, src & 31)",
"mad": "dst = src * src2 + dst",
"shfl": "dst = dst ^ (src of lane (lane ^ mask)), mask in {1,2,4,8,16}, within the 32-lane warp",
"load": "dst = dst ^ dataset[src & dataset.mask]",
"wload": "base = (src of lane 0 & dataset.mask) & ~31; dst = dst ^ dataset[base + lane] (warp-coalesced 128-byte load, lever b, only when --wide-frac > 0)"
},
"dataset": {
"log2_words": 28,
"bytes": 1073741824,
"mask": "0x0fffffff",
"day": "bytes:69676e65756d2d6461792ffd50000000000000",
"day_bytes": "69676e65756d2d6461792ffd50000000000000",
"day_words_from": "seed_words_from_bytes(day_bytes)",
"d0": "0xe23f9008",
"d1": "0xde33e763",
"mode": "memory-hard",
"spec": "proto-metal/MEMHARD.md",
"key": ["0xe23f9008", "0xde33e763", "0xc5ba415d", "0x8ddf6786", "0x59f4a4be", "0x8a3bc680", "0x701b8e40", "0x3b59025a"],
"key_derivation": "the 8 words of seed_words_from_bytes(day_bytes); d0, d1 are key[0], key[1]",
"cache": {"log2_words": 26, "bytes": 268435456, "line_words": 16, "segment_lines": 64, "segments": 65536, "block": "ChaCha12 core + feed-forward, rotations 16 12 8 7", "sigma": ["0x61707865", "0x3320646e", "0x79622d32", "0x6b206574"], "tag": ["0x49676e65", "0x756d4d48"], "chain": "in_j = prev_line ^ (sigma[0..3] || key[0..7] || seg || j || tag[0..1]); line_j = block(in_j); prev_0 = 0"},
"mixer": {"draw": "SplitMix64 seeded with key[0] | key[1] << 32: rot[0..7] = 1 + next() % 31, mul[0..15] = low32(next()) | 1, rc[0..15] = low32(next())", "rot": [28, 11, 18, 18, 13, 28, 5, 13], "mul": ["0xd1d79e7f", "0xbcb61f8b", "0x970e91ab", "0xd749d96d", "0x143d7339", "0x2cde0d69", "0x12d0a8c1", "0x2d335be9", "0x80a8aae9", "0x7ac896c7", "0x9de23db7", "0xc362827d", "0x5f4cdb5b", "0xfc6c5097", "0x6f547f83", "0x1ac31b47"], "rc": ["0xe5bef5a3", "0xdb2a7d90", "0xcd1fa7e1", "0x30289419", "0x0a730d58", "0x432f8579", "0x6ab978a5", "0x8c984f49", "0x788c3c9e", "0x051eef02", "0x05e77db9", "0x8b3cd4f3", "0x6948d6cf", "0x0d8677f6", "0xf9505c8c", "0x4513c163"], "round": "for i in 0..15: s[i] = (s[i] ^ (rc[i] + (r+1) * 0x9E3779B9)) * mul[i]; then quarter rounds on columns (0,4,8,12) (1,5,9,13) (2,6,10,14) (3,7,11,15) with rot[0..3] and diagonals (0,5,10,15) (1,6,11,12) (2,7,8,13) (3,4,9,14) with rot[4..7]", "quarter_round": "a += b; d ^= a; d = rotl(d, r1); c += d; b ^= c; b = rotl(b, r2); a += b; d ^= a; d = rotl(d, r3); c += d; b ^= c; b = rotl(b, r4)"},
"mixer_mult": 8,
"item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s",
"word": "dataset[w] = item(w >> 4)[w & 15]"
},
"shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "mad": 31, "shfl": 31, "xor": 30, "rotl": 28, "mul": 22, "or": 18, "mulhi": 17, "rotr": 17, "sub": 17}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [
{"i": 0, "op": "or", "dst": 6, "src": 0, "src2": 2, "imm": "0xc1eb1523", "imm2": "0x925958ea", "rot": 14, "bit": 14, "mask": 8},
{"i": 1, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0xc7044334", "imm2": "0x755566b6", "rot": 19, "bit": 17, "mask": 8},
{"i": 2, "op": "mad", "dst": 3, "src": 5, "src2": 5, "imm": "0x33b52f17", "imm2": "0xcc459a7a", "rot": 5, "bit": 19, "mask": 16},
{"i": 3, "op": "add", "dst": 7, "src": 4, "src2": 4, "imm": "0x97d3d105", "imm2": "0x38e58a06", "rot": 11, "bit": 6, "mask": 1},
{"i": 4, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x29b87b9a", "imm2": "0x9629673d", "rot": 16, "bit": 20, "mask": 8},
{"i": 5, "op": "shfl", "dst": 6, "src": 2, "src2": 5, "imm": "0xb61f2e77", "imm2": "0x30e3807c", "rot": 1, "bit": 7, "mask": 1},
{"i": 6, "op": "mad", "dst": 5, "src": 3, "src2": 5, "imm": "0x0de66253", "imm2": "0xfdfdd03e", "rot": 4, "bit": 27, "mask": 4},
{"i": 7, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x688514dd", "imm2": "0x139d08b5", "rot": 5, "bit": 1, "mask": 1},
{"i": 8, "op": "add", "dst": 0, "src": 7, "src2": 3, "imm": "0xa7c1fb0f", "imm2": "0x4a5f55e1", "rot": 15, "bit": 12, "mask": 1},
{"i": 9, "op": "mul", "dst": 5, "src": 7, "src2": 2, "imm": "0x1a64de5a", "imm2": "0xe37b0875", "rot": 5, "bit": 27, "mask": 16},
{"i": 10, "op": "xor", "dst": 4, "src": 5, "src2": 3, "imm": "0x750d4f1a", "imm2": "0x2f3d9402", "rot": 3, "bit": 14, "mask": 2},
{"i": 11, "op": "mulhi", "dst": 6, "src": 4, "src2": 5, "imm": "0x2eaa86c6", "imm2": "0x9fd5b22f", "rot": 30, "bit": 10, "mask": 1},
{"i": 12, "op": "rotl", "dst": 5, "src": 2, "src2": 4, "imm": "0x8df50473", "imm2": "0x23d780ce", "rot": 13, "bit": 9, "mask": 1},
{"i": 13, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0xa956a7e6", "imm2": "0x58dbb356", "rot": 31, "bit": 11, "mask": 8},
{"i": 14, "op": "mulhi", "dst": 2, "src": 4, "src2": 6, "imm": "0x6fbfb145", "imm2": "0x064eb015", "rot": 20, "bit": 2, "mask": 4},
{"i": 15, "op": "or", "dst": 3, "src": 1, "src2": 5, "imm": "0xd313bc27", "imm2": "0x9f0fc235", "rot": 17, "bit": 16, "mask": 1},
{"i": 16, "op": "sub", "dst": 0, "src": 5, "src2": 0, "imm": "0x86cbd336", "imm2": "0x94715167", "rot": 17, "bit": 31, "mask": 8},
{"i": 17, "op": "mul", "dst": 0, "src": 6, "src2": 3, "imm": "0x95911c6b", "imm2": "0x816cea32", "rot": 23, "bit": 1, "mask": 2},
{"i": 18, "op": "shfl", "dst": 5, "src": 1, "src2": 3, "imm": "0xf563dcad", "imm2": "0xb2889856", "rot": 14, "bit": 24, "mask": 4},
{"i": 19, "op": "or", "dst": 3, "src": 4, "src2": 2, "imm": "0x7bb48d19", "imm2": "0xbf95ad6f", "rot": 8, "bit": 30, "mask": 16},
{"i": 20, "op": "mad", "dst": 6, "src": 3, "src2": 2, "imm": "0xeb686a8d", "imm2": "0x8bda9f8a", "rot": 11, "bit": 18, "mask": 1},
{"i": 21, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x0915df51", "imm2": "0xa1365cda", "rot": 11, "bit": 25, "mask": 1},
{"i": 22, "op": "rotl", "dst": 3, "src": 0, "src2": 3, "imm": "0xc09e4cdc", "imm2": "0x50c1369d", "rot": 25, "bit": 31, "mask": 2},
{"i": 23, "op": "xor", "dst": 6, "src": 4, "src2": 1, "imm": "0xce01abec", "imm2": "0x5ff8c52e", "rot": 30, "bit": 19, "mask": 8},
{"i": 24, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xdacf9e4b", "imm2": "0x086a5684", "rot": 2, "bit": 10, "mask": 2},
{"i": 25, "op": "add", "dst": 1, "src": 6, "src2": 3, "imm": "0x53e74799", "imm2": "0xfc2f6d17", "rot": 8, "bit": 7, "mask": 16},
{"i": 26, "op": "rotr", "dst": 7, "src": 6, "src2": 7, "imm": "0xc89a75a0", "imm2": "0x67813253", "rot": 24, "bit": 13, "mask": 1},
{"i": 27, "op": "add", "dst": 7, "src": 5, "src2": 4, "imm": "0xb8fae90e", "imm2": "0x787048dc", "rot": 26, "bit": 27, "mask": 1},
{"i": 28, "op": "xor", "dst": 4, "src": 1, "src2": 0, "imm": "0x4c90c2ea", "imm2": "0x2ce7865b", "rot": 4, "bit": 7, "mask": 2},
{"i": 29, "op": "xor", "dst": 6, "src": 1, "src2": 6, "imm": "0x6131ab08", "imm2": "0xd1825676", "rot": 4, "bit": 30, "mask": 2},
{"i": 30, "op": "mulhi", "dst": 2, "src": 0, "src2": 1, "imm": "0xbe4a545f", "imm2": "0xdc29e823", "rot": 17, "bit": 5, "mask": 8},
{"i": 31, "op": "rotr", "dst": 1, "src": 4, "src2": 1, "imm": "0x4d2f9cdc", "imm2": "0xdee1cc73", "rot": 5, "bit": 16, "mask": 4},
{"i": 32, "op": "xor", "dst": 7, "src": 4, "src2": 5, "imm": "0x9d277aaa", "imm2": "0xa902fca5", "rot": 11, "bit": 3, "mask": 1},
{"i": 33, "op": "mad", "dst": 3, "src": 2, "src2": 6, "imm": "0x7db09644", "imm2": "0x077bf3d9", "rot": 30, "bit": 19, "mask": 2},
{"i": 34, "op": "add", "dst": 3, "src": 1, "src2": 1, "imm": "0xd2dc42eb", "imm2": "0x9ffd510b", "rot": 17, "bit": 12, "mask": 2},
{"i": 35, "op": "add", "dst": 4, "src": 7, "src2": 0, "imm": "0xad8eda6f", "imm2": "0xf871ba37", "rot": 24, "bit": 7, "mask": 4},
{"i": 36, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xb0cef8f4", "imm2": "0xd02d30ca", "rot": 22, "bit": 3, "mask": 16},
{"i": 37, "op": "mad", "dst": 4, "src": 3, "src2": 2, "imm": "0x6ed99a66", "imm2": "0x83dc97c0", "rot": 4, "bit": 1, "mask": 4},
{"i": 38, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0xe24fdd24", "imm2": "0x360f5c8b", "rot": 19, "bit": 9, "mask": 8},
{"i": 39, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x2bd506e2", "imm2": "0x82e98a22", "rot": 28, "bit": 26, "mask": 1},
{"i": 40, "op": "rotl", "dst": 0, "src": 2, "src2": 1, "imm": "0xdb1faed3", "imm2": "0xf968a20d", "rot": 21, "bit": 30, "mask": 16},
{"i": 41, "op": "or", "dst": 1, "src": 0, "src2": 1, "imm": "0xe6dfe522", "imm2": "0xb75813da", "rot": 10, "bit": 13, "mask": 1},
{"i": 42, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xc0386e49", "imm2": "0x6435f6d8", "rot": 26, "bit": 28, "mask": 16},
{"i": 43, "op": "mulhi", "dst": 1, "src": 0, "src2": 4, "imm": "0xda497f7d", "imm2": "0xc4b748f4", "rot": 30, "bit": 10, "mask": 4},
{"i": 44, "op": "add", "dst": 5, "src": 6, "src2": 0, "imm": "0x3a8921a4", "imm2": "0x1f682c68", "rot": 12, "bit": 12, "mask": 1},
{"i": 45, "op": "add", "dst": 4, "src": 5, "src2": 6, "imm": "0xeeca4334", "imm2": "0xf246e180", "rot": 26, "bit": 1, "mask": 1},
{"i": 46, "op": "xor", "dst": 2, "src": 3, "src2": 5, "imm": "0x052178c3", "imm2": "0xaab31f10", "rot": 28, "bit": 16, "mask": 8},
{"i": 47, "op": "xor", "dst": 2, "src": 5, "src2": 0, "imm": "0x91fd7273", "imm2": "0xacc42b07", "rot": 22, "bit": 27, "mask": 4},
{"i": 48, "op": "mad", "dst": 7, "src": 4, "src2": 1, "imm": "0x05a2970f", "imm2": "0x14876824", "rot": 10, "bit": 5, "mask": 1},
{"i": 49, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x4440d6de", "imm2": "0x352023f9", "rot": 10, "bit": 25, "mask": 8},
{"i": 50, "op": "mad", "dst": 7, "src": 0, "src2": 7, "imm": "0xa6f82633", "imm2": "0x78465772", "rot": 13, "bit": 8, "mask": 4},
{"i": 51, "op": "add", "dst": 5, "src": 6, "src2": 5, "imm": "0x745776d8", "imm2": "0x41bd68cc", "rot": 29, "bit": 26, "mask": 1},
{"i": 52, "op": "shfl", "dst": 3, "src": 0, "src2": 6, "imm": "0x8f94ebac", "imm2": "0xe4a208a0", "rot": 5, "bit": 16, "mask": 1},
{"i": 53, "op": "or", "dst": 4, "src": 0, "src2": 5, "imm": "0x7b1235f3", "imm2": "0x408b4ea9", "rot": 27, "bit": 19, "mask": 8},
{"i": 54, "op": "mad", "dst": 0, "src": 2, "src2": 4, "imm": "0x30114050", "imm2": "0xe71dff8f", "rot": 6, "bit": 30, "mask": 1},
{"i": 55, "op": "rotl", "dst": 5, "src": 1, "src2": 7, "imm": "0x69f92198", "imm2": "0x65496f29", "rot": 9, "bit": 20, "mask": 4},
{"i": 56, "op": "mul", "dst": 5, "src": 7, "src2": 6, "imm": "0x88b884d4", "imm2": "0x041b67f7", "rot": 25, "bit": 8, "mask": 16},
{"i": 57, "op": "rotl", "dst": 7, "src": 5, "src2": 6, "imm": "0x7d1e18bc", "imm2": "0xf54ade27", "rot": 27, "bit": 20, "mask": 1},
{"i": 58, "op": "sub", "dst": 7, "src": 6, "src2": 4, "imm": "0xa457bbab", "imm2": "0x4b05eb29", "rot": 6, "bit": 6, "mask": 4},
{"i": 59, "op": "rotl", "dst": 2, "src": 7, "src2": 7, "imm": "0x4890bdda", "imm2": "0xadcb3d99", "rot": 22, "bit": 26, "mask": 16},
{"i": 60, "op": "shfl", "dst": 7, "src": 1, "src2": 7, "imm": "0xe4da58eb", "imm2": "0x1d50080d", "rot": 22, "bit": 26, "mask": 2},
{"i": 61, "op": "add", "dst": 4, "src": 0, "src2": 5, "imm": "0x60d0ff55", "imm2": "0xcba6a161", "rot": 6, "bit": 7, "mask": 8},
{"i": 62, "op": "mul", "dst": 1, "src": 5, "src2": 1, "imm": "0x0fdc702e", "imm2": "0x6b1bd03a", "rot": 9, "bit": 23, "mask": 4},
{"i": 63, "op": "mulhi", "dst": 7, "src": 6, "src2": 1, "imm": "0xcc44ed62", "imm2": "0x931dd006", "rot": 1, "bit": 0, "mask": 2},
{"i": 64, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x448c3aba", "imm2": "0x1136818a", "rot": 23, "bit": 7, "mask": 1},
{"i": 65, "op": "rotr", "dst": 2, "src": 5, "src2": 1, "imm": "0xb520dfb8", "imm2": "0xdce7d8f4", "rot": 22, "bit": 10, "mask": 8},
{"i": 66, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x19fada48", "imm2": "0x3cc04e0e", "rot": 1, "bit": 24, "mask": 16},
{"i": 67, "op": "or", "dst": 0, "src": 7, "src2": 3, "imm": "0x1c5905b4", "imm2": "0xf896dfb7", "rot": 31, "bit": 30, "mask": 8},
{"i": 68, "op": "rotl", "dst": 0, "src": 1, "src2": 5, "imm": "0xa28511c1", "imm2": "0xbf649695", "rot": 19, "bit": 27, "mask": 1},
{"i": 69, "op": "rotl", "dst": 0, "src": 7, "src2": 5, "imm": "0x22e2fef3", "imm2": "0x468bec9e", "rot": 1, "bit": 28, "mask": 1},
{"i": 70, "op": "or", "dst": 2, "src": 3, "src2": 6, "imm": "0xcb542821", "imm2": "0xe084cf11", "rot": 15, "bit": 5, "mask": 8},
{"i": 71, "op": "mad", "dst": 3, "src": 7, "src2": 5, "imm": "0xf06b8f6a", "imm2": "0x7382e15f", "rot": 6, "bit": 28, "mask": 16},
{"i": 72, "op": "mad", "dst": 7, "src": 0, "src2": 4, "imm": "0x4f64c588", "imm2": "0x47b63ee9", "rot": 8, "bit": 10, "mask": 2},
{"i": 73, "op": "or", "dst": 4, "src": 3, "src2": 2, "imm": "0xff138eea", "imm2": "0x6fd90eda", "rot": 23, "bit": 3, "mask": 16},
{"i": 74, "op": "xor", "dst": 3, "src": 1, "src2": 0, "imm": "0x6011ece1", "imm2": "0x89579f15", "rot": 11, "bit": 2, "mask": 4},
{"i": 75, "op": "add", "dst": 1, "src": 3, "src2": 4, "imm": "0x3f4ffea2", "imm2": "0x8e35924e", "rot": 12, "bit": 15, "mask": 2},
{"i": 76, "op": "mul", "dst": 1, "src": 3, "src2": 7, "imm": "0x15efa846", "imm2": "0xa1c971f1", "rot": 14, "bit": 20, "mask": 1},
{"i": 77, "op": "mad", "dst": 0, "src": 3, "src2": 2, "imm": "0x8660530a", "imm2": "0xa013524b", "rot": 14, "bit": 12, "mask": 8},
{"i": 78, "op": "shfl", "dst": 2, "src": 0, "src2": 0, "imm": "0xcc2e96bd", "imm2": "0xe32c6f87", "rot": 10, "bit": 11, "mask": 16},
{"i": 79, "op": "mulhi", "dst": 1, "src": 0, "src2": 6, "imm": "0x61931e3f", "imm2": "0x86383e7f", "rot": 17, "bit": 3, "mask": 1},
{"i": 80, "op": "mulhi", "dst": 0, "src": 4, "src2": 7, "imm": "0xd9991afc", "imm2": "0xd00e8678", "rot": 24, "bit": 15, "mask": 16},
{"i": 81, "op": "mul", "dst": 4, "src": 2, "src2": 3, "imm": "0x472f70f4", "imm2": "0x9fde4236", "rot": 10, "bit": 5, "mask": 4},
{"i": 82, "op": "sub", "dst": 5, "src": 7, "src2": 6, "imm": "0x55a7acb1", "imm2": "0x9fde8df1", "rot": 30, "bit": 29, "mask": 16},
{"i": 83, "op": "mad", "dst": 0, "src": 2, "src2": 3, "imm": "0x1c487c40", "imm2": "0xd9d9a1c3", "rot": 9, "bit": 5, "mask": 4},
{"i": 84, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0x515c0a72", "imm2": "0x6df5c83d", "rot": 28, "bit": 21, "mask": 4},
{"i": 85, "op": "xor", "dst": 1, "src": 2, "src2": 4, "imm": "0x917f1174", "imm2": "0x8e72e519", "rot": 9, "bit": 18, "mask": 16},
{"i": 86, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0xda856cc2", "imm2": "0x932ae8d8", "rot": 28, "bit": 1, "mask": 16},
{"i": 87, "op": "mad", "dst": 3, "src": 0, "src2": 0, "imm": "0x4ef22321", "imm2": "0x5666ada3", "rot": 4, "bit": 4, "mask": 1},
{"i": 88, "op": "rotl", "dst": 0, "src": 1, "src2": 3, "imm": "0xbb3ec00c", "imm2": "0xffe78937", "rot": 20, "bit": 19, "mask": 4},
{"i": 89, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x8f295708", "imm2": "0x6608577f", "rot": 17, "bit": 18, "mask": 16},
{"i": 90, "op": "shfl", "dst": 6, "src": 4, "src2": 5, "imm": "0xd953aa15", "imm2": "0x4ef9f062", "rot": 19, "bit": 9, "mask": 16},
{"i": 91, "op": "xor", "dst": 5, "src": 1, "src2": 5, "imm": "0x6c02cde2", "imm2": "0x118dbd2b", "rot": 2, "bit": 20, "mask": 16},
{"i": 92, "op": "rotl", "dst": 5, "src": 0, "src2": 5, "imm": "0x9f0b0c61", "imm2": "0xe26dbe7a", "rot": 12, "bit": 17, "mask": 2},
{"i": 93, "op": "mad", "dst": 6, "src": 1, "src2": 2, "imm": "0x78a44a91", "imm2": "0x3ce118a9", "rot": 18, "bit": 16, "mask": 16},
{"i": 94, "op": "rotr", "dst": 2, "src": 5, "src2": 3, "imm": "0x02295fcb", "imm2": "0xc3353c64", "rot": 5, "bit": 31, "mask": 16},
{"i": 95, "op": "or", "dst": 0, "src": 4, "src2": 4, "imm": "0x727120c3", "imm2": "0x528f4416", "rot": 6, "bit": 20, "mask": 8},
{"i": 96, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x919c42ea", "imm2": "0x87526aa5", "rot": 28, "bit": 1, "mask": 8},
{"i": 97, "op": "or", "dst": 5, "src": 0, "src2": 7, "imm": "0x8a0a100c", "imm2": "0xb2c65cc3", "rot": 13, "bit": 7, "mask": 4},
{"i": 98, "op": "add", "dst": 3, "src": 1, "src2": 1, "imm": "0xbcfdd8a7", "imm2": "0x386bb642", "rot": 8, "bit": 13, "mask": 8},
{"i": 99, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0xc921a021", "imm2": "0xa3962d03", "rot": 31, "bit": 9, "mask": 1},
{"i": 100, "op": "rotr", "dst": 1, "src": 0, "src2": 3, "imm": "0x918c6f69", "imm2": "0x1a125801", "rot": 18, "bit": 29, "mask": 16},
{"i": 101, "op": "add", "dst": 2, "src": 4, "src2": 1, "imm": "0x70da4067", "imm2": "0xc5990c5c", "rot": 3, "bit": 18, "mask": 4},
{"i": 102, "op": "rotl", "dst": 2, "src": 7, "src2": 0, "imm": "0x9048d081", "imm2": "0xc25a9f56", "rot": 3, "bit": 25, "mask": 16},
{"i": 103, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x70ca1427", "imm2": "0x6632093d", "rot": 18, "bit": 28, "mask": 4},
{"i": 104, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x0637204c", "imm2": "0x3b1b7f94", "rot": 1, "bit": 12, "mask": 2},
{"i": 105, "op": "add", "dst": 4, "src": 3, "src2": 5, "imm": "0x1a5880cb", "imm2": "0xb15aec75", "rot": 31, "bit": 28, "mask": 1},
{"i": 106, "op": "shfl", "dst": 4, "src": 0, "src2": 4, "imm": "0x7c22cb00", "imm2": "0xc4df7949", "rot": 3, "bit": 15, "mask": 2},
{"i": 107, "op": "shfl", "dst": 7, "src": 0, "src2": 0, "imm": "0xd43c76ca", "imm2": "0x8d5b9751", "rot": 31, "bit": 28, "mask": 4},
{"i": 108, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x69879993", "imm2": "0x3c4e18b0", "rot": 19, "bit": 25, "mask": 4},
{"i": 109, "op": "mad", "dst": 0, "src": 2, "src2": 3, "imm": "0x8ce3a4a6", "imm2": "0x1b3f0b74", "rot": 19, "bit": 8, "mask": 2},
{"i": 110, "op": "or", "dst": 2, "src": 4, "src2": 5, "imm": "0xcdbdac98", "imm2": "0x8d0e9f92", "rot": 19, "bit": 13, "mask": 1},
{"i": 111, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0xe74157f6", "imm2": "0xf92dead6", "rot": 4, "bit": 14, "mask": 1},
{"i": 112, "op": "mad", "dst": 2, "src": 5, "src2": 3, "imm": "0x200831bc", "imm2": "0x1ee98048", "rot": 29, "bit": 14, "mask": 1},
{"i": 113, "op": "mulhi", "dst": 4, "src": 0, "src2": 7, "imm": "0xd6827ead", "imm2": "0xc0ee1933", "rot": 26, "bit": 23, "mask": 16},
{"i": 114, "op": "rotl", "dst": 7, "src": 2, "src2": 2, "imm": "0x6ae1be2b", "imm2": "0x83216a4e", "rot": 29, "bit": 25, "mask": 16},
{"i": 115, "op": "sub", "dst": 3, "src": 7, "src2": 1, "imm": "0xa1d1646e", "imm2": "0x6fa998ce", "rot": 15, "bit": 29, "mask": 2},
{"i": 116, "op": "mulhi", "dst": 0, "src": 1, "src2": 4, "imm": "0xd7921c15", "imm2": "0x8b2345a7", "rot": 10, "bit": 19, "mask": 4},
{"i": 117, "op": "rotl", "dst": 4, "src": 0, "src2": 4, "imm": "0xc1b1b0ab", "imm2": "0xd19b3f39", "rot": 12, "bit": 16, "mask": 1},
{"i": 118, "op": "add", "dst": 1, "src": 4, "src2": 5, "imm": "0x24494ad3", "imm2": "0xc5e98ee5", "rot": 22, "bit": 7, "mask": 16},
{"i": 119, "op": "add", "dst": 0, "src": 4, "src2": 6, "imm": "0x1b2d1c83", "imm2": "0xa97bc949", "rot": 8, "bit": 4, "mask": 16},
{"i": 120, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0xb93015ff", "imm2": "0xc22366cd", "rot": 23, "bit": 16, "mask": 4},
{"i": 121, "op": "shfl", "dst": 3, "src": 2, "src2": 5, "imm": "0xc0aaacdb", "imm2": "0xaaa7d229", "rot": 31, "bit": 29, "mask": 8},
{"i": 122, "op": "rotl", "dst": 7, "src": 1, "src2": 3, "imm": "0xcce6a73f", "imm2": "0x517b6b86", "rot": 3, "bit": 16, "mask": 8},
{"i": 123, "op": "rotr", "dst": 4, "src": 6, "src2": 0, "imm": "0x8e156aca", "imm2": "0x0a894b3e", "rot": 2, "bit": 12, "mask": 2},
{"i": 124, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xd88c8446", "imm2": "0xf49fedf3", "rot": 3, "bit": 23, "mask": 1},
{"i": 125, "op": "rotl", "dst": 5, "src": 2, "src2": 0, "imm": "0xd10b27cf", "imm2": "0x2dde1faa", "rot": 21, "bit": 7, "mask": 2},
{"i": 126, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0x619e1818", "imm2": "0x62add310", "rot": 26, "bit": 1, "mask": 4},
{"i": 127, "op": "add", "dst": 0, "src": 3, "src2": 6, "imm": "0xff14c08d", "imm2": "0xa7f6bb54", "rot": 25, "bit": 24, "mask": 4},
{"i": 128, "op": "xor", "dst": 7, "src": 4, "src2": 4, "imm": "0x34224086", "imm2": "0x5e9f858e", "rot": 4, "bit": 16, "mask": 8},
{"i": 129, "op": "mulhi", "dst": 3, "src": 5, "src2": 6, "imm": "0x89c3cbdd", "imm2": "0x4e80334c", "rot": 29, "bit": 4, "mask": 1},
{"i": 130, "op": "shfl", "dst": 5, "src": 7, "src2": 1, "imm": "0x37d4c3e2", "imm2": "0xbd54378c", "rot": 14, "bit": 26, "mask": 8},
{"i": 131, "op": "mulhi", "dst": 6, "src": 4, "src2": 3, "imm": "0x4f5fac7c", "imm2": "0x74070028", "rot": 5, "bit": 25, "mask": 8},
{"i": 132, "op": "xor", "dst": 5, "src": 3, "src2": 0, "imm": "0x690eb003", "imm2": "0x8516a581", "rot": 20, "bit": 21, "mask": 2},
{"i": 133, "op": "rotl", "dst": 0, "src": 5, "src2": 7, "imm": "0x42b31885", "imm2": "0x08249acb", "rot": 19, "bit": 6, "mask": 8},
{"i": 134, "op": "rotr", "dst": 4, "src": 3, "src2": 3, "imm": "0x07d729ed", "imm2": "0xf564da8a", "rot": 17, "bit": 9, "mask": 16},
{"i": 135, "op": "shfl", "dst": 1, "src": 2, "src2": 0, "imm": "0x19130ef2", "imm2": "0xf59815e5", "rot": 17, "bit": 12, "mask": 16},
{"i": 136, "op": "sub", "dst": 5, "src": 2, "src2": 5, "imm": "0xdeb56168", "imm2": "0x871104c4", "rot": 13, "bit": 17, "mask": 16},
{"i": 137, "op": "xor", "dst": 3, "src": 5, "src2": 4, "imm": "0x884fc7da", "imm2": "0x83a4a5bf", "rot": 23, "bit": 12, "mask": 4},
{"i": 138, "op": "sub", "dst": 0, "src": 2, "src2": 6, "imm": "0x3e67a6fd", "imm2": "0x844d2039", "rot": 3, "bit": 24, "mask": 4},
{"i": 139, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x965933b4", "imm2": "0xf37ef93d", "rot": 6, "bit": 9, "mask": 4},
{"i": 140, "op": "add", "dst": 5, "src": 3, "src2": 3, "imm": "0x82ab98f4", "imm2": "0x2d465ca8", "rot": 11, "bit": 24, "mask": 1},
{"i": 141, "op": "add", "dst": 4, "src": 1, "src2": 7, "imm": "0x80594390", "imm2": "0x237a9d8e", "rot": 14, "bit": 11, "mask": 8},
{"i": 142, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xd37861a1", "imm2": "0x2fe70eae", "rot": 2, "bit": 11, "mask": 16},
{"i": 143, "op": "or", "dst": 0, "src": 3, "src2": 5, "imm": "0x1a018e2c", "imm2": "0x301aa5f6", "rot": 15, "bit": 26, "mask": 1},
{"i": 144, "op": "mulhi", "dst": 0, "src": 1, "src2": 5, "imm": "0x69d22dfc", "imm2": "0x4a90cb1e", "rot": 21, "bit": 9, "mask": 16},
{"i": 145, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xf3f41f47", "imm2": "0xdf8d33e9", "rot": 22, "bit": 0, "mask": 8},
{"i": 146, "op": "shfl", "dst": 7, "src": 1, "src2": 1, "imm": "0xf8a52377", "imm2": "0x0613ef41", "rot": 24, "bit": 12, "mask": 16},
{"i": 147, "op": "add", "dst": 0, "src": 1, "src2": 3, "imm": "0x07f15148", "imm2": "0xe68cf57e", "rot": 2, "bit": 18, "mask": 4},
{"i": 148, "op": "or", "dst": 7, "src": 3, "src2": 0, "imm": "0xbfd39b49", "imm2": "0xc7f6e97c", "rot": 13, "bit": 27, "mask": 2},
{"i": 149, "op": "xor", "dst": 4, "src": 2, "src2": 7, "imm": "0x47409e43", "imm2": "0x04ef7db9", "rot": 8, "bit": 6, "mask": 4},
{"i": 150, "op": "xor", "dst": 7, "src": 1, "src2": 1, "imm": "0x5d42a156", "imm2": "0xc2f77c48", "rot": 27, "bit": 17, "mask": 4},
{"i": 151, "op": "rotr", "dst": 5, "src": 2, "src2": 7, "imm": "0x7c170030", "imm2": "0xa3102916", "rot": 5, "bit": 6, "mask": 1},
{"i": 152, "op": "mul", "dst": 0, "src": 7, "src2": 5, "imm": "0x16d009af", "imm2": "0x2a89533b", "rot": 26, "bit": 8, "mask": 4},
{"i": 153, "op": "rotl", "dst": 4, "src": 5, "src2": 0, "imm": "0x6e54eb71", "imm2": "0xe2d27256", "rot": 16, "bit": 18, "mask": 1},
{"i": 154, "op": "rotr", "dst": 6, "src": 4, "src2": 5, "imm": "0x128f24a4", "imm2": "0x59888463", "rot": 15, "bit": 17, "mask": 16},
{"i": 155, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0x34f276ff", "imm2": "0xef5086b4", "rot": 2, "bit": 10, "mask": 4},
{"i": 156, "op": "or", "dst": 6, "src": 3, "src2": 4, "imm": "0x16cc2c2f", "imm2": "0xfae5a09b", "rot": 12, "bit": 31, "mask": 4},
{"i": 157, "op": "add", "dst": 1, "src": 6, "src2": 7, "imm": "0x14878c5a", "imm2": "0x84c2a09d", "rot": 30, "bit": 19, "mask": 8},
{"i": 158, "op": "sub", "dst": 4, "src": 1, "src2": 0, "imm": "0xfe18e4b0", "imm2": "0x239df0cc", "rot": 14, "bit": 20, "mask": 2},
{"i": 159, "op": "mad", "dst": 4, "src": 6, "src2": 7, "imm": "0xbdfcc4e0", "imm2": "0x0870dee8", "rot": 1, "bit": 7, "mask": 8},
{"i": 160, "op": "mul", "dst": 1, "src": 5, "src2": 1, "imm": "0xc837b43d", "imm2": "0x027ac950", "rot": 4, "bit": 22, "mask": 16},
{"i": 161, "op": "or", "dst": 4, "src": 0, "src2": 2, "imm": "0x9c28f8f6", "imm2": "0x3db71fe6", "rot": 11, "bit": 6, "mask": 16},
{"i": 162, "op": "rotl", "dst": 7, "src": 3, "src2": 6, "imm": "0xb6e56f55", "imm2": "0x5fcbd27c", "rot": 21, "bit": 10, "mask": 1},
{"i": 163, "op": "sub", "dst": 0, "src": 1, "src2": 4, "imm": "0x8d95ae70", "imm2": "0xd4f10284", "rot": 15, "bit": 12, "mask": 8},
{"i": 164, "op": "mul", "dst": 1, "src": 0, "src2": 6, "imm": "0xa9bdf99e", "imm2": "0x1f3dceb6", "rot": 21, "bit": 20, "mask": 16},
{"i": 165, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xda245058", "imm2": "0x2038e7f6", "rot": 30, "bit": 11, "mask": 2},
{"i": 166, "op": "shfl", "dst": 0, "src": 6, "src2": 3, "imm": "0xbbc8eee8", "imm2": "0xa73472fb", "rot": 23, "bit": 4, "mask": 2},
{"i": 167, "op": "sub", "dst": 0, "src": 4, "src2": 2, "imm": "0x43540d69", "imm2": "0xb3f116ca", "rot": 28, "bit": 2, "mask": 2},
{"i": 168, "op": "rotr", "dst": 1, "src": 6, "src2": 6, "imm": "0x57cea752", "imm2": "0xc1136e71", "rot": 25, "bit": 3, "mask": 8},
{"i": 169, "op": "rotr", "dst": 7, "src": 1, "src2": 5, "imm": "0x4550a465", "imm2": "0x14362935", "rot": 25, "bit": 9, "mask": 16},
{"i": 170, "op": "mad", "dst": 3, "src": 1, "src2": 3, "imm": "0x8c961d80", "imm2": "0x7de2e1db", "rot": 10, "bit": 6, "mask": 4},
{"i": 171, "op": "shfl", "dst": 2, "src": 0, "src2": 0, "imm": "0xda047fca", "imm2": "0x459e17ab", "rot": 22, "bit": 26, "mask": 4},
{"i": 172, "op": "sub", "dst": 2, "src": 1, "src2": 2, "imm": "0xbcc341fd", "imm2": "0x17a3b229", "rot": 8, "bit": 25, "mask": 8},
{"i": 173, "op": "xor", "dst": 7, "src": 6, "src2": 7, "imm": "0x2302b424", "imm2": "0x78780982", "rot": 23, "bit": 7, "mask": 8},
{"i": 174, "op": "rotr", "dst": 4, "src": 1, "src2": 2, "imm": "0xcad6fb5f", "imm2": "0x1807628e", "rot": 8, "bit": 21, "mask": 4},
{"i": 175, "op": "shfl", "dst": 4, "src": 7, "src2": 7, "imm": "0xf5057e8e", "imm2": "0xd14d6cc5", "rot": 3, "bit": 12, "mask": 2},
{"i": 176, "op": "mul", "dst": 6, "src": 2, "src2": 1, "imm": "0xc2926356", "imm2": "0xae74dc32", "rot": 1, "bit": 21, "mask": 8},
{"i": 177, "op": "shfl", "dst": 0, "src": 2, "src2": 7, "imm": "0x8d94d98e", "imm2": "0x7bd6f4dc", "rot": 27, "bit": 14, "mask": 4},
{"i": 178, "op": "add", "dst": 6, "src": 4, "src2": 6, "imm": "0x4fa43965", "imm2": "0x509871e6", "rot": 28, "bit": 21, "mask": 4},
{"i": 179, "op": "xor", "dst": 0, "src": 6, "src2": 6, "imm": "0xe278fe6c", "imm2": "0x75d8a63f", "rot": 21, "bit": 15, "mask": 2},
{"i": 180, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xfb3c4bd8", "imm2": "0xb95b8a53", "rot": 22, "bit": 0, "mask": 4},
{"i": 181, "op": "mul", "dst": 6, "src": 3, "src2": 2, "imm": "0x5a1347ec", "imm2": "0x3ccc5389", "rot": 27, "bit": 26, "mask": 4},
{"i": 182, "op": "rotl", "dst": 7, "src": 4, "src2": 7, "imm": "0xdc6db2f7", "imm2": "0x7cdff0c6", "rot": 1, "bit": 2, "mask": 4},
{"i": 183, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xc448a197", "imm2": "0x7047b7cf", "rot": 24, "bit": 11, "mask": 8},
{"i": 184, "op": "mul", "dst": 3, "src": 5, "src2": 0, "imm": "0xa5c0e492", "imm2": "0xaf7d8a86", "rot": 11, "bit": 16, "mask": 8},
{"i": 185, "op": "shfl", "dst": 5, "src": 7, "src2": 1, "imm": "0x5965794b", "imm2": "0x36ddca6b", "rot": 7, "bit": 25, "mask": 1},
{"i": 186, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0xdfdbcc0f", "imm2": "0xac7b7091", "rot": 11, "bit": 31, "mask": 8},
{"i": 187, "op": "mulhi", "dst": 4, "src": 7, "src2": 5, "imm": "0x3d8999e9", "imm2": "0xf1848db8", "rot": 15, "bit": 21, "mask": 8},
{"i": 188, "op": "mad", "dst": 2, "src": 7, "src2": 2, "imm": "0xda3af48c", "imm2": "0x8e33a97c", "rot": 6, "bit": 30, "mask": 4},
{"i": 189, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xa32da8c1", "imm2": "0xf7486d06", "rot": 25, "bit": 16, "mask": 4},
{"i": 190, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0x2fceaf49", "imm2": "0x5caccc5d", "rot": 24, "bit": 19, "mask": 2},
{"i": 191, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0x2a71f5e6", "imm2": "0xb9b51e89", "rot": 31, "bit": 25, "mask": 1},
{"i": 192, "op": "add", "dst": 7, "src": 1, "src2": 7, "imm": "0xba0cee62", "imm2": "0x857bb5fe", "rot": 4, "bit": 20, "mask": 2},
{"i": 193, "op": "rotl", "dst": 6, "src": 3, "src2": 3, "imm": "0xc7fe35cf", "imm2": "0x515c1201", "rot": 22, "bit": 7, "mask": 16},
{"i": 194, "op": "xor", "dst": 3, "src": 7, "src2": 4, "imm": "0xe496d1f1", "imm2": "0x11046e3e", "rot": 16, "bit": 9, "mask": 4},
{"i": 195, "op": "mul", "dst": 7, "src": 0, "src2": 2, "imm": "0xc7d5c4c2", "imm2": "0x077e940b", "rot": 23, "bit": 29, "mask": 4},
{"i": 196, "op": "xor", "dst": 3, "src": 5, "src2": 3, "imm": "0xbe6db14a", "imm2": "0xf736da5a", "rot": 19, "bit": 6, "mask": 2},
{"i": 197, "op": "add", "dst": 5, "src": 1, "src2": 5, "imm": "0x8519428c", "imm2": "0xeae84577", "rot": 18, "bit": 29, "mask": 1},
{"i": 198, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xb272a029", "imm2": "0x071f6a5c", "rot": 5, "bit": 28, "mask": 8},
{"i": 199, "op": "add", "dst": 3, "src": 6, "src2": 3, "imm": "0x468639d3", "imm2": "0x0bfdbfa1", "rot": 20, "bit": 8, "mask": 16},
{"i": 200, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xffba18b7", "imm2": "0xbdcf9e81", "rot": 13, "bit": 31, "mask": 8},
{"i": 201, "op": "shfl", "dst": 2, "src": 7, "src2": 7, "imm": "0xb7533191", "imm2": "0x8d58cc8c", "rot": 7, "bit": 29, "mask": 4},
{"i": 202, "op": "add", "dst": 7, "src": 4, "src2": 6, "imm": "0x18ec9a69", "imm2": "0x53ee8e50", "rot": 12, "bit": 23, "mask": 16},
{"i": 203, "op": "xor", "dst": 6, "src": 0, "src2": 5, "imm": "0x12011ff1", "imm2": "0xfbb57ac6", "rot": 16, "bit": 25, "mask": 16},
{"i": 204, "op": "add", "dst": 4, "src": 5, "src2": 3, "imm": "0x3e81485b", "imm2": "0xac63376e", "rot": 1, "bit": 4, "mask": 1},
{"i": 205, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0xeb9eee5c", "imm2": "0x3f1daecd", "rot": 19, "bit": 29, "mask": 4},
{"i": 206, "op": "shfl", "dst": 1, "src": 5, "src2": 2, "imm": "0x4fc50d06", "imm2": "0xb5533b31", "rot": 22, "bit": 27, "mask": 16},
{"i": 207, "op": "mul", "dst": 4, "src": 0, "src2": 5, "imm": "0x202d6001", "imm2": "0x50388f85", "rot": 5, "bit": 18, "mask": 16},
{"i": 208, "op": "or", "dst": 1, "src": 6, "src2": 7, "imm": "0x8743c0d4", "imm2": "0x9df69539", "rot": 14, "bit": 16, "mask": 1},
{"i": 209, "op": "add", "dst": 6, "src": 4, "src2": 6, "imm": "0x66ccb75d", "imm2": "0x5b745519", "rot": 28, "bit": 28, "mask": 8},
{"i": 210, "op": "rotr", "dst": 1, "src": 3, "src2": 1, "imm": "0xe9933132", "imm2": "0x6702fe85", "rot": 16, "bit": 19, "mask": 1},
{"i": 211, "op": "sub", "dst": 5, "src": 4, "src2": 4, "imm": "0xfe04b942", "imm2": "0x40dd2ce8", "rot": 24, "bit": 8, "mask": 4},
{"i": 212, "op": "xor", "dst": 4, "src": 7, "src2": 7, "imm": "0x10827878", "imm2": "0xef0de8fc", "rot": 17, "bit": 11, "mask": 8},
{"i": 213, "op": "add", "dst": 1, "src": 7, "src2": 1, "imm": "0x0ce0553d", "imm2": "0x1c3dccf7", "rot": 26, "bit": 8, "mask": 1},
{"i": 214, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xa71d7581", "imm2": "0xe567c74c", "rot": 2, "bit": 29, "mask": 2},
{"i": 215, "op": "add", "dst": 3, "src": 6, "src2": 2, "imm": "0x96bfec89", "imm2": "0xfadc9205", "rot": 30, "bit": 9, "mask": 16},
{"i": 216, "op": "rotl", "dst": 0, "src": 2, "src2": 5, "imm": "0x947ca474", "imm2": "0xd2a1b650", "rot": 4, "bit": 1, "mask": 1},
{"i": 217, "op": "xor", "dst": 6, "src": 4, "src2": 5, "imm": "0x0b7617de", "imm2": "0xc6c0a9a2", "rot": 31, "bit": 15, "mask": 2},
{"i": 218, "op": "shfl", "dst": 6, "src": 7, "src2": 1, "imm": "0x738f0a8f", "imm2": "0xfc868560", "rot": 2, "bit": 20, "mask": 2},
{"i": 219, "op": "mad", "dst": 7, "src": 0, "src2": 1, "imm": "0x2960f2bc", "imm2": "0x7e9ef9b7", "rot": 21, "bit": 4, "mask": 16},
{"i": 220, "op": "mul", "dst": 4, "src": 0, "src2": 2, "imm": "0x6014d800", "imm2": "0xd19ac7d1", "rot": 1, "bit": 13, "mask": 1},
{"i": 221, "op": "mad", "dst": 2, "src": 6, "src2": 0, "imm": "0x4b558fc2", "imm2": "0x2d48bd3c", "rot": 18, "bit": 31, "mask": 2},
{"i": 222, "op": "xor", "dst": 5, "src": 4, "src2": 6, "imm": "0x0260f3ab", "imm2": "0x8fce22f1", "rot": 21, "bit": 26, "mask": 16},
{"i": 223, "op": "mul", "dst": 0, "src": 5, "src2": 0, "imm": "0xe07ab58f", "imm2": "0x5349a41d", "rot": 20, "bit": 3, "mask": 1},
{"i": 224, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0x61495681", "imm2": "0x66b15c04", "rot": 24, "bit": 9, "mask": 16},
{"i": 225, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x291268bd", "imm2": "0xf046aa79", "rot": 27, "bit": 15, "mask": 4},
{"i": 226, "op": "mad", "dst": 2, "src": 3, "src2": 3, "imm": "0xfd6dfa6c", "imm2": "0x2c0db93d", "rot": 29, "bit": 2, "mask": 16},
{"i": 227, "op": "xor", "dst": 6, "src": 0, "src2": 4, "imm": "0xd4ae1ee2", "imm2": "0xe6a67972", "rot": 26, "bit": 1, "mask": 4},
{"i": 228, "op": "rotl", "dst": 4, "src": 7, "src2": 3, "imm": "0xf6627a9d", "imm2": "0x99078da3", "rot": 30, "bit": 5, "mask": 16},
{"i": 229, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x70d05c34", "imm2": "0x25bc17c2", "rot": 20, "bit": 29, "mask": 4},
{"i": 230, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0xef874bea", "imm2": "0x3bfbfecc", "rot": 17, "bit": 2, "mask": 2},
{"i": 231, "op": "add", "dst": 1, "src": 4, "src2": 5, "imm": "0x32a28384", "imm2": "0x2d8728f3", "rot": 1, "bit": 8, "mask": 8},
{"i": 232, "op": "rotl", "dst": 1, "src": 6, "src2": 3, "imm": "0x877c54ab", "imm2": "0x1d5e5014", "rot": 6, "bit": 24, "mask": 2},
{"i": 233, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xcf0949f1", "imm2": "0x61e81fe6", "rot": 2, "bit": 21, "mask": 16},
{"i": 234, "op": "rotl", "dst": 4, "src": 5, "src2": 5, "imm": "0x5017c32c", "imm2": "0x1ab34dfe", "rot": 2, "bit": 1, "mask": 2},
{"i": 235, "op": "sub", "dst": 2, "src": 6, "src2": 2, "imm": "0xadbdb811", "imm2": "0x2c2d4f2b", "rot": 30, "bit": 29, "mask": 8},
{"i": 236, "op": "or", "dst": 6, "src": 3, "src2": 4, "imm": "0x700e204f", "imm2": "0x27294e7b", "rot": 13, "bit": 0, "mask": 4},
{"i": 237, "op": "shfl", "dst": 7, "src": 5, "src2": 4, "imm": "0xc39f71ba", "imm2": "0x9a90263d", "rot": 28, "bit": 9, "mask": 4},
{"i": 238, "op": "xor", "dst": 1, "src": 3, "src2": 6, "imm": "0x9f84a5b3", "imm2": "0x95691d15", "rot": 14, "bit": 22, "mask": 1},
{"i": 239, "op": "rotl", "dst": 2, "src": 4, "src2": 0, "imm": "0xa3b79ed5", "imm2": "0x05f568bc", "rot": 1, "bit": 15, "mask": 4},
{"i": 240, "op": "rotr", "dst": 5, "src": 2, "src2": 7, "imm": "0xaaabbb0d", "imm2": "0x71ce4cd6", "rot": 2, "bit": 26, "mask": 4},
{"i": 241, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x8146fbd3", "imm2": "0xde65fc31", "rot": 10, "bit": 9, "mask": 4},
{"i": 242, "op": "add", "dst": 6, "src": 2, "src2": 7, "imm": "0xe204fb50", "imm2": "0x0a67565d", "rot": 5, "bit": 16, "mask": 1},
{"i": 243, "op": "shfl", "dst": 1, "src": 3, "src2": 7, "imm": "0xcb7a3c1b", "imm2": "0x863f002c", "rot": 18, "bit": 1, "mask": 2},
{"i": 244, "op": "shfl", "dst": 0, "src": 1, "src2": 3, "imm": "0x92eb030c", "imm2": "0x3cff4c6d", "rot": 1, "bit": 22, "mask": 16},
{"i": 245, "op": "shfl", "dst": 5, "src": 7, "src2": 6, "imm": "0x046c969c", "imm2": "0xd21d7e76", "rot": 5, "bit": 31, "mask": 2},
{"i": 246, "op": "xor", "dst": 4, "src": 5, "src2": 1, "imm": "0x2e3015f0", "imm2": "0x1b305a5c", "rot": 22, "bit": 16, "mask": 8},
{"i": 247, "op": "xor", "dst": 7, "src": 2, "src2": 0, "imm": "0x8238cf71", "imm2": "0xb7874d94", "rot": 9, "bit": 1, "mask": 2},
{"i": 248, "op": "shfl", "dst": 0, "src": 6, "src2": 7, "imm": "0x437cbc99", "imm2": "0x7fb41fed", "rot": 17, "bit": 1, "mask": 16},
{"i": 249, "op": "mulhi", "dst": 1, "src": 3, "src2": 2, "imm": "0xeb293d88", "imm2": "0xb92f5968", "rot": 3, "bit": 20, "mask": 2},
{"i": 250, "op": "add", "dst": 7, "src": 5, "src2": 3, "imm": "0x3d6daffd", "imm2": "0x5a79fd6f", "rot": 6, "bit": 31, "mask": 2},
{"i": 251, "op": "add", "dst": 6, "src": 0, "src2": 3, "imm": "0x84334aea", "imm2": "0x6beb28c2", "rot": 27, "bit": 28, "mask": 2},
{"i": 252, "op": "sub", "dst": 7, "src": 1, "src2": 6, "imm": "0xe6177638", "imm2": "0x814d3fc5", "rot": 25, "bit": 2, "mask": 2},
{"i": 253, "op": "rotr", "dst": 5, "src": 2, "src2": 7, "imm": "0x95560bac", "imm2": "0xbf8b01a9", "rot": 14, "bit": 5, "mask": 16},
{"i": 254, "op": "mulhi", "dst": 2, "src": 5, "src2": 1, "imm": "0x318956e5", "imm2": "0x7c20b373", "rot": 13, "bit": 30, "mask": 2},
{"i": 255, "op": "mul", "dst": 6, "src": 3, "src2": 3, "imm": "0xe1998e49", "imm2": "0x59353e5a", "rot": 15, "bit": 2, "mask": 4}
]},
"instructions": [
{"i": 0, "op": "sub", "dst": 6, "src": 3, "src2": 3, "imm": "0x77dfbe60", "imm2": "0x404c8b9c", "rot": 24, "bit": 8, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 1, "op": "or", "dst": 2, "src": 6, "src2": 7, "imm": "0xb2e79058", "imm2": "0xc2485073", "rot": 21, "bit": 23, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 2, "op": "add", "dst": 4, "src": 0, "src2": 6, "imm": "0x1a579b38", "imm2": "0x7731324b", "rot": 6, "bit": 4, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 3, "op": "load", "dst": 3, "src": 6, "src2": 0, "imm": "0x683f5bc5", "imm2": "0xc8a218fe", "rot": 25, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 4, "op": "shfl", "dst": 0, "src": 6, "src2": 4, "imm": "0x4d7cdcbb", "imm2": "0x1a5bf1a4", "rot": 8, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 5, "op": "xor", "dst": 4, "src": 1, "src2": 0, "imm": "0xa2b86827", "imm2": "0x94a44439", "rot": 21, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 6, "op": "mad", "dst": 3, "src": 5, "src2": 3, "imm": "0x58a4ea3f", "imm2": "0x467879fa", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 7, "op": "mul", "dst": 1, "src": 6, "src2": 1, "imm": "0x31fcc19c", "imm2": "0x176cb88f", "rot": 1, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 8, "op": "load", "dst": 2, "src": 0, "src2": 3, "imm": "0x89b12386", "imm2": "0x661ed5e5", "rot": 11, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 2},
{"i": 9, "op": "xor", "dst": 0, "src": 4, "src2": 1, "imm": "0x69150105", "imm2": "0x8e1f04b9", "rot": 3, "bit": 30, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 10, "op": "add", "dst": 0, "src": 7, "src2": 5, "imm": "0xee083919", "imm2": "0xb10fcef8", "rot": 9, "bit": 30, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 11, "op": "mulhi", "dst": 0, "src": 2, "src2": 3, "imm": "0x99ac7c83", "imm2": "0x34eb2845", "rot": 18, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 12, "op": "xor", "dst": 5, "src": 4, "src2": 0, "imm": "0x97cfc887", "imm2": "0x0458f053", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 13, "op": "mad", "dst": 7, "src": 3, "src2": 0, "imm": "0x503e87b4", "imm2": "0x2c5d2617", "rot": 3, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 14, "op": "load", "dst": 3, "src": 4, "src2": 4, "imm": "0xfae98035", "imm2": "0x6c127281", "rot": 19, "bit": 29, "mask": 4, "width": 1, "win": 1, "off": 0},
{"i": 15, "op": "load", "dst": 2, "src": 5, "src2": 2, "imm": "0x67601ed5", "imm2": "0x3c546ed1", "rot": 28, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 16, "op": "shfl", "dst": 7, "src": 5, "src2": 6, "imm": "0x7789be79", "imm2": "0x87496b8e", "rot": 22, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 17, "op": "mul", "dst": 7, "src": 6, "src2": 2, "imm": "0x559099bb", "imm2": "0x6a72e1a6", "rot": 1, "bit": 11, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 18, "op": "mad", "dst": 2, "src": 3, "src2": 1, "imm": "0x4f5bae5e", "imm2": "0x4c8c5762", "rot": 27, "bit": 31, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 19, "op": "rotr", "dst": 5, "src": 2, "src2": 4, "imm": "0x5dc5e6bf", "imm2": "0x36bc207d", "rot": 9, "bit": 4, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 20, "op": "load", "dst": 5, "src": 3, "src2": 7, "imm": "0x4a278885", "imm2": "0xcd1044b0", "rot": 30, "bit": 0, "mask": 4, "width": 1, "win": 1, "off": 1},
{"i": 21, "op": "shfl", "dst": 6, "src": 4, "src2": 3, "imm": "0x48b94ffc", "imm2": "0xd8e14d80", "rot": 2, "bit": 31, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 22, "op": "mulhi", "dst": 1, "src": 2, "src2": 7, "imm": "0x47bd8492", "imm2": "0x28fa8d0b", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 23, "op": "xor", "dst": 6, "src": 5, "src2": 1, "imm": "0x4ed6baf4", "imm2": "0xa8c31f74", "rot": 30, "bit": 2, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 24, "op": "mad", "dst": 5, "src": 2, "src2": 0, "imm": "0x6174747d", "imm2": "0xfc912524", "rot": 18, "bit": 29, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 25, "op": "mad", "dst": 6, "src": 3, "src2": 7, "imm": "0x113a6442", "imm2": "0xbe52ec57", "rot": 15, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 26, "op": "load", "dst": 6, "src": 5, "src2": 1, "imm": "0x9d3eb1cc", "imm2": "0x375c73bb", "rot": 29, "bit": 7, "mask": 8, "width": 1, "win": 1, "off": 1},
{"i": 27, "op": "mad", "dst": 1, "src": 5, "src2": 5, "imm": "0x150088c3", "imm2": "0x7f17e789", "rot": 8, "bit": 25, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 28, "op": "load", "dst": 0, "src": 6, "src2": 3, "imm": "0x4b412223", "imm2": "0x9192ceeb", "rot": 16, "bit": 28, "mask": 1, "width": 1, "win": 1, "off": 1},
{"i": 29, "op": "add", "dst": 7, "src": 4, "src2": 6, "imm": "0xd5e6c37c", "imm2": "0x0b1f02c7", "rot": 2, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 30, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x4e45ba51", "imm2": "0x2d6e8bd1", "rot": 7, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 31, "op": "xor", "dst": 0, "src": 2, "src2": 7, "imm": "0xef601d89", "imm2": "0x805402db", "rot": 7, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 32, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x1c91b2a1", "imm2": "0x351422d2", "rot": 1, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 33, "op": "mulhi", "dst": 4, "src": 5, "src2": 7, "imm": "0x7cf21567", "imm2": "0x1075ee0d", "rot": 26, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 34, "op": "rotr", "dst": 3, "src": 5, "src2": 6, "imm": "0x60d8f191", "imm2": "0x40523707", "rot": 3, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 35, "op": "load", "dst": 3, "src": 0, "src2": 5, "imm": "0xb1dc3f6e", "imm2": "0x74440531", "rot": 21, "bit": 10, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 36, "op": "rotl", "dst": 4, "src": 6, "src2": 4, "imm": "0xf0d17569", "imm2": "0xd281fd01", "rot": 13, "bit": 4, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 37, "op": "add", "dst": 6, "src": 1, "src2": 6, "imm": "0x3f2970f7", "imm2": "0x64a28251", "rot": 4, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 38, "op": "mul", "dst": 2, "src": 0, "src2": 3, "imm": "0x6463770c", "imm2": "0xb85d603f", "rot": 27, "bit": 1, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 39, "op": "add", "dst": 3, "src": 4, "src2": 3, "imm": "0x3b7b3317", "imm2": "0x7378c955", "rot": 28, "bit": 15, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 40, "op": "load", "dst": 0, "src": 7, "src2": 3, "imm": "0xd0fb5982", "imm2": "0x2e4d31a8", "rot": 25, "bit": 27, "mask": 4, "width": 1, "win": 2, "off": 3},
{"i": 41, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xe96a9e6e", "imm2": "0x8d73cc3e", "rot": 17, "bit": 11, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 42, "op": "add", "dst": 3, "src": 0, "src2": 6, "imm": "0x6678b059", "imm2": "0xb31f6a64", "rot": 11, "bit": 2, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 43, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x65a841c5", "imm2": "0x6aae1403", "rot": 9, "bit": 9, "mask": 1, "width": 1, "win": 1, "off": 0},
{"i": 44, "op": "shfl", "dst": 3, "src": 7, "src2": 6, "imm": "0x650ba38d", "imm2": "0x07218508", "rot": 12, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 45, "op": "mulhi", "dst": 1, "src": 5, "src2": 7, "imm": "0x18736788", "imm2": "0x9f820eed", "rot": 13, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 46, "op": "rotl", "dst": 0, "src": 1, "src2": 5, "imm": "0x48deba75", "imm2": "0xefc508fa", "rot": 6, "bit": 6, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 47, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0x28a04384", "imm2": "0xc67cb0ac", "rot": 5, "bit": 5, "mask": 2, "width": 1, "win": 1, "off": 1},
{"i": 48, "op": "add", "dst": 4, "src": 0, "src2": 5, "imm": "0x43095946", "imm2": "0x5feccee6", "rot": 22, "bit": 17, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 49, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0x3e78cdd8", "imm2": "0x7c170311", "rot": 10, "bit": 5, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 50, "op": "sub", "dst": 2, "src": 3, "src2": 7, "imm": "0xaff0cdb2", "imm2": "0xde0b7ee0", "rot": 21, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 51, "op": "add", "dst": 7, "src": 2, "src2": 1, "imm": "0xf45ecdf8", "imm2": "0x26e2b582", "rot": 28, "bit": 24, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 52, "op": "load", "dst": 5, "src": 7, "src2": 7, "imm": "0x67353e69", "imm2": "0xb2d56082", "rot": 27, "bit": 14, "mask": 2, "width": 1, "win": 2, "off": 3},
{"i": 53, "op": "load", "dst": 6, "src": 3, "src2": 1, "imm": "0x5a58c787", "imm2": "0x53a0467b", "rot": 6, "bit": 16, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 54, "op": "shfl", "dst": 7, "src": 5, "src2": 4, "imm": "0x3c237ad5", "imm2": "0xf2681187", "rot": 14, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 55, "op": "rotr", "dst": 1, "src": 2, "src2": 3, "imm": "0x1c25c077", "imm2": "0x125de1ff", "rot": 13, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0},
{"i": 56, "op": "shfl", "dst": 0, "src": 5, "src2": 0, "imm": "0x6465afe2", "imm2": "0x23b41d56", "rot": 31, "bit": 28, "mask": 16, "width": 1, "win": 0, "off": 0},
{"i": 57, "op": "rotl", "dst": 5, "src": 0, "src2": 2, "imm": "0xa427ff6e", "imm2": "0x014a0deb", "rot": 12, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 58, "op": "add", "dst": 5, "src": 3, "src2": 7, "imm": "0x6b4f35e8", "imm2": "0x473b1718", "rot": 25, "bit": 4, "mask": 8, "width": 1, "win": 0, "off": 0},
{"i": 59, "op": "rotr", "dst": 4, "src": 1, "src2": 3, "imm": "0x66cc96ef", "imm2": "0xcb8c8e56", "rot": 7, "bit": 6, "mask": 4, "width": 1, "win": 0, "off": 0},
{"i": 60, "op": "shfl", "dst": 4, "src": 5, "src2": 5, "imm": "0x461bbf9f", "imm2": "0xc1ffd350", "rot": 19, "bit": 2, "mask": 1, "width": 1, "win": 0, "off": 0},
{"i": 61, "op": "load", "dst": 7, "src": 0, "src2": 1, "imm": "0x4d893571", "imm2": "0x5583e644", "rot": 19, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1},
{"i": 62, "op": "load", "dst": 5, "src": 7, "src2": 3, "imm": "0x7a9049b4", "imm2": "0xbb7ebdf8", "rot": 15, "bit": 11, "mask": 8, "width": 1, "win": 1, "off": 1},
{"i": 63, "op": "mul", "dst": 4, "src": 1, "src2": 7, "imm": "0xe7ae8a83", "imm2": "0x1ded64e8", "rot": 21, "bit": 1, "mask": 8, "width": 1, "win": 0, "off": 0}
]
}

Some files were not shown because too many files have changed in this diff Show more