@mikeargento/bitgraph-player 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,159 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; font-src data:; img-src data: blob:; media-src blob:; connect-src 'none'; form-action 'none'; base-uri 'none';">
7
+ <title>BitGraph | Verify a BitGraph</title>
8
+ <style>
9
+ /* The site's data font (JetBrains Mono, latin, OFL), embedded so the page
10
+ loads nothing; hashes, positions, and time windows render as on the
11
+ proof page. */
12
+ @font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 100 800; font-display: swap; src: url(data:font/woff2;base64,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) format("woff2"); }
13
+ /* The home page (bitgraph.ing), measured: same nav, same title, same deck,
14
+ same box, same column. Values are the site's computed values at desktop;
15
+ the box fills the viewport the way the camera does. This page lives only
16
+ inside the BitGraph Folder and is opened from disk, so it loads nothing:
17
+ the site's webfont is not fetched (the kit is domain-locked and would not
18
+ load from file:// anyway) and the system stack stands in for it. */
19
+ * { margin: 0; padding: 0; box-sizing: border-box; }
20
+ html, body { background: #f5f5f5; color: #111827; }
21
+ body { font-family: acumin-pro, -apple-system, system-ui, "SF Pro Text", sans-serif; font-size: 16px; line-height: 1.5; -webkit-font-smoothing: antialiased; }
22
+ a { color: inherit; text-decoration: none; }
23
+ /* Wrap and frame: the site's rules verbatim. --bg-wrap-min and --bg-cam-avail
24
+ are measured by fit() below exactly as app/page.tsx measures them (room =
25
+ innerHeight minus the nav at both ends; the frame gets what the siblings
26
+ leave), so the frame is the same size as the home camera at any viewport. */
27
+ .bitgraph-wrap { width: 90%; max-width: 800px; margin: 0 auto; padding: 40px 0; display: flex; flex-direction: column; align-items: stretch; justify-content: center; gap: 24px; min-height: var(--bg-wrap-min, auto); }
28
+ .bitgraph-hero { display: flex; flex-direction: column; text-align: center; animation: slideIn .3s ease-out; }
29
+ /* Results mode: the proof page's column, not the camera's. Top-aligned with
30
+ the proof page's padding, and the title is the proof page's "BitGraph
31
+ Recorded": left, the one title size, the card directly under it. */
32
+ .bitgraph-wrap.bitgraph-results { justify-content: flex-start; min-height: auto; padding: 40px 0 80px; }
33
+ .bitgraph-hero.results { text-align: left; }
34
+ .title-row { display: block; }
35
+ .title-action:empty { display: none; }
36
+ .bitgraph-hero.results .title-row { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin: 0 0 20px; }
37
+ .bitgraph-hero.results h1.bg-page-title { font-size: clamp(26px, 6vw, 32px); text-align: left; margin: 0; }
38
+ .title-action { flex-shrink: 0; }
39
+ .bitgraph-hero.results .hero-more { text-align: left; margin-top: 18px; }
40
+ @keyframes slideIn { from { opacity: 0; transform: translateY(12px) } to { opacity: 1; transform: translateY(0) } }
41
+ h1.bg-page-title { font-size: clamp(26px, 6vw, 40px); font-weight: 600; letter-spacing: -0.03em; line-height: 1.1; color: #111827; margin: 0 0 12px; text-align: center; }
42
+ .hero-why { margin: 0 0 36px; }
43
+ .hero-why p { margin: 0; font-size: clamp(14px, 2.5vw, 16px); line-height: 1.6; color: #4b5563; text-wrap: pretty; }
44
+ .hero-why[hidden] { display: none; }
45
+ /* The one action, framed: a white card holding the choose link at the
46
+ Folder page's download size. A click anywhere on the card opens the folder
47
+ dialog; a drop on it still works. Solid card border, not the dashed drop
48
+ edge: the link is the affordance, the drop is a courtesy. */
49
+ .bitgraph-camera { align-self: center; margin: 0 auto; display: flex; justify-content: center; }
50
+ .bitgraph-camera[hidden] { display: none; }
51
+ #drop { position: relative; display: inline-block; background-color: #fff; border: 1px solid #d0d5dd; border-radius: 0; padding: 22px 32px; cursor: pointer; text-align: center; transition: background-color .2s, border-color .2s; outline: none; }
52
+ #drop:hover, #drop.hot { background-color: #fafbfd; }
53
+ #drop.over { background-color: #f0f6ff; border-color: #0065A4; }
54
+ #drop.busy { opacity: 0.6; }
55
+ #drop:focus-visible { box-shadow: 0 0 0 2px rgba(0,101,164,0.2); }
56
+ #drop input { display: none; }
57
+ .choose-link { color: #0065A4; font-weight: 600; font-size: clamp(17.5px, 4vw, 19px); letter-spacing: -0.015em; line-height: 1.4; display: inline; }
58
+ .choose-link .arrow { display: inline-block; transition: transform .15s; }
59
+ #drop:hover .choose-link .arrow, #drop.hot .choose-link .arrow { transform: translateX(3px); }
60
+ #status { min-height: 0; font-size: 14px; color: #4b5563; text-align: center; }
61
+ #status:empty { display: none; }
62
+ /* Results: the proof page's card grid, in the same column. */
63
+ #results { display: grid; grid-template-columns: 1fr; gap: 10px; text-align: left; }
64
+ #results[hidden] { display: none; }
65
+ .card { background: #fff; border: 1px solid #d0d5dd; border-radius: 0; overflow: hidden; }
66
+ .card.primary { padding: 4px 0; }
67
+ /* The proof page's card rows. */
68
+ .notice { padding: 14px 16px; border-bottom: 1px solid #e2e5e9; font-size: 14px; line-height: 1.5; color: #374151; }
69
+ .notice.false { color: #b42318; }
70
+ .when { display: flex; flex-direction: column; gap: 5px; padding: 14px 16px; border-bottom: 1px solid #e2e5e9; }
71
+ .when-date { font-size: 14px; font-weight: 700; color: #111827; letter-spacing: -0.01em; }
72
+ .when-line { font-size: 12px; line-height: 1.6; font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
73
+ .when-grey { color: #4b5563; }
74
+ .when-dark { color: #111827; }
75
+ .file-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; border-bottom: 1px solid #e2e5e9; }
76
+ .file-row.above { border-top: 1px solid #eef0f1; }
77
+ .file-ident { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; color: #4b5563; }
78
+ .file-name { font-weight: 600; color: #111827; }
79
+ .file-right { display: inline-flex; align-items: center; gap: 12px; flex-shrink: 0; }
80
+ .file-missing { font-size: 13px; color: #4b5563; }
81
+ .excerpt { margin: 0; padding: 16px; font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; line-height: 1.6; color: #374151; white-space: pre-wrap; word-break: break-word; max-height: 320px; overflow: hidden; }
82
+ .field-link { font-size: 13px; color: #0065A4; word-break: break-all; }
83
+ .action-box { padding: 0 16px; }
84
+ .bg-action-link { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 600; color: #0065A4; padding: 14px 0; text-decoration: none; }
85
+ .bg-action-link .arrow { display: inline-block; transition: transform .15s; }
86
+ .bg-action-link:hover .arrow { transform: translateX(3px); }
87
+ .field { display: flex; flex-direction: column; gap: 5px; padding: 14px 16px; border-bottom: 1px solid #e2e5e9; }
88
+ .card > .field:last-child, .opener-body > .field:last-child { border-bottom: none; }
89
+ .field-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
90
+ .field-label { font-size: 14px; color: #374151; font-weight: 700; }
91
+ .field-value { font-size: 14px; color: #111827; word-break: break-word; }
92
+ .field-value.mono, .mono { font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; line-height: 1.6; word-break: break-all; }
93
+ .mark { font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 11.5px; font-weight: 700; letter-spacing: 0.06em; white-space: nowrap; }
94
+ .mark.true { color: #0065A4; }
95
+ .mark.false { color: #b42318; }
96
+ .mark.undet { color: #6b7280; }
97
+ .opener-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; font-size: 14px; font-weight: 700; letter-spacing: 0.04em; color: #0065A4; padding: 14px 16px; background: #fff; border: none; text-align: left; font-family: inherit; cursor: pointer; transition: background .12s; }
98
+ .opener-head.open { background: rgba(0,101,164,0.07); border-bottom: 1px solid #e2e5e9; }
99
+ .opener-head:hover { background: rgba(0,101,164,0.07); }
100
+ .opener-head.danger { color: #b42318; }
101
+ .chev { display: inline-flex; flex-shrink: 0; color: #0065A4; transition: transform .18s; }
102
+ .chev.open { transform: rotate(90deg); }
103
+ .opener-head.danger .chev { color: #b42318; }
104
+ .opener-body { padding: 4px 0; }
105
+ .opener-body[hidden] { display: none; }
106
+ .list { padding: 12px 16px 12px 34px; font-size: 14px; color: #374151; }
107
+ .list li { margin: 4px 0; }
108
+ .json { padding: 12px 16px; font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 11.5px; line-height: 1.45; color: #374151; white-space: pre; overflow-x: auto; }
109
+ /* The link under the box, where the home page keeps "See an example". */
110
+ .hero-more { margin-top: 42px; text-align: center; }
111
+ .edition { font-size: 14px; line-height: 21px; color: #4b5563; margin-bottom: 4px; }
112
+ .hero-more[hidden] { display: none; }
113
+ .bg-arrow-link { color: #0065A4; font-weight: 600; font-size: 14px; line-height: 21px; padding: 13px 0; margin: -13px 0; display: inline; }
114
+ .bg-arrow-link .arrow { display: inline-block; transition: transform .15s; }
115
+ .bg-arrow-link:hover .arrow { transform: translateX(3px); }
116
+ @media (max-width: 640px) { .field-head { flex-direction: column; align-items: flex-start; gap: 4px; } }
117
+ </style>
118
+ </head>
119
+ <body>
120
+ <main>
121
+ <div class="bitgraph-wrap">
122
+ <div class="bitgraph-hero">
123
+ <div class="title-row" id="title-row"><h1 class="bg-page-title" id="title">Verify a BitGraph</h1><span class="title-action" id="title-action"></span></div>
124
+ <div class="hero-why" id="deck"><p>Verify your BitGraphs offline</p></div>
125
+ <div class="bitgraph-camera" id="camera">
126
+ <div id="drop" role="button" tabindex="0" aria-label="Choose a BitGraph folder to verify">
127
+ <input id="pick-folder" type="file" webkitdirectory directory multiple aria-label="Choose a folder">
128
+ <input id="pick-files" type="file" multiple>
129
+ <span class="choose-link">Choose a BitGraph folder to verify <span class="arrow" aria-hidden="true">→</span></span>
130
+ </div>
131
+ </div>
132
+ <div id="status"></div>
133
+ <div id="results" hidden></div>
134
+ <div class="hero-more" id="more"><div class="edition" id="edition" data-version="1.14.0">BitGraph Folder 1.14.0</div><a class="bg-arrow-link" id="folder-link" href="https://bitgraph.ing/docs/folder">Check for updates <span class="arrow" aria-hidden="true">→</span></a></div>
135
+ </div>
136
+ </div>
137
+ </main>
138
+ <script>
139
+ "use strict";(()=>{var jr=Object.create;var Fn=Object.defineProperty;var Vr=Object.getOwnPropertyDescriptor;var zr=Object.getOwnPropertyNames;var Gr=Object.getPrototypeOf,qr=Object.prototype.hasOwnProperty;var Wr=(t,e)=>()=>(t&&(e=t(t=0)),e);var Et=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Jr=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of zr(e))!qr.call(t,r)&&r!==n&&Fn(t,r,{get:()=>e[r],enumerable:!(o=Vr(e,r))||o.enumerable});return t};var Xr=(t,e,n)=>(n=t!=null?jr(Gr(t)):{},Jr(e||!t||!t.__esModule?Fn(n,"default",{value:t,enumerable:!0}):n,t));var Kn=Et(Ze=>{"use strict";y();Ze.byteLength=Zr;Ze.toByteArray=ei;Ze.fromByteArray=oi;var G=[],j=[],Yr=typeof Uint8Array<"u"?Uint8Array:Array,kt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(ge=0,On=kt.length;ge<On;++ge)G[ge]=kt[ge],j[kt.charCodeAt(ge)]=ge;var ge,On;j[45]=62;j[95]=63;function _n(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");n===-1&&(n=e);var o=n===e?0:4-n%4;return[n,o]}function Zr(t){var e=_n(t),n=e[0],o=e[1];return(n+o)*3/4-o}function Qr(t,e,n){return(e+n)*3/4-n}function ei(t){var e,n=_n(t),o=n[0],r=n[1],i=new Yr(Qr(t,o,r)),s=0,a=r>0?o-4:o,c;for(c=0;c<a;c+=4)e=j[t.charCodeAt(c)]<<18|j[t.charCodeAt(c+1)]<<12|j[t.charCodeAt(c+2)]<<6|j[t.charCodeAt(c+3)],i[s++]=e>>16&255,i[s++]=e>>8&255,i[s++]=e&255;return r===2&&(e=j[t.charCodeAt(c)]<<2|j[t.charCodeAt(c+1)]>>4,i[s++]=e&255),r===1&&(e=j[t.charCodeAt(c)]<<10|j[t.charCodeAt(c+1)]<<4|j[t.charCodeAt(c+2)]>>2,i[s++]=e>>8&255,i[s++]=e&255),i}function ti(t){return G[t>>18&63]+G[t>>12&63]+G[t>>6&63]+G[t&63]}function ni(t,e,n){for(var o,r=[],i=e;i<n;i+=3)o=(t[i]<<16&16711680)+(t[i+1]<<8&65280)+(t[i+2]&255),r.push(ti(o));return r.join("")}function oi(t){for(var e,n=t.length,o=n%3,r=[],i=16383,s=0,a=n-o;s<a;s+=i)r.push(ni(t,s,s+i>a?a:s+i));return o===1?(e=t[n-1],r.push(G[e>>2]+G[e<<4&63]+"==")):o===2&&(e=(t[n-2]<<8)+t[n-1],r.push(G[e>>10]+G[e>>4&63]+G[e<<2&63]+"=")),r.join("")}});var jn=Et(At=>{y();At.read=function(t,e,n,o,r){var i,s,a=r*8-o-1,c=(1<<a)-1,u=c>>1,d=-7,h=n?r-1:0,f=n?-1:1,l=t[e+h];for(h+=f,i=l&(1<<-d)-1,l>>=-d,d+=a;d>0;i=i*256+t[e+h],h+=f,d-=8);for(s=i&(1<<-d)-1,i>>=-d,d+=o;d>0;s=s*256+t[e+h],h+=f,d-=8);if(i===0)i=1-u;else{if(i===c)return s?NaN:(l?-1:1)*(1/0);s=s+Math.pow(2,o),i=i-u}return(l?-1:1)*s*Math.pow(2,i-o)};At.write=function(t,e,n,o,r,i){var s,a,c,u=i*8-r-1,d=(1<<u)-1,h=d>>1,f=r===23?Math.pow(2,-24)-Math.pow(2,-77):0,l=o?0:i-1,g=o?1:-1,m=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=d):(s=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+h>=1?e+=f/c:e+=f*Math.pow(2,1-h),e*c>=2&&(s++,c/=2),s+h>=d?(a=0,s=d):s+h>=1?(a=(e*c-1)*Math.pow(2,r),s=s+h):(a=e*Math.pow(2,h-1)*Math.pow(2,r),s=0));r>=8;t[n+l]=a&255,l+=g,a/=256,r-=8);for(s=s<<r|a,u+=r;u>0;t[n+l]=s&255,l+=g,s/=256,u-=8);t[n+l-g]|=m*128}});var so=Et($e=>{"use strict";y();var It=Kn(),He=jn(),Vn=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;$e.Buffer=p;$e.SlowBuffer=ui;$e.INSPECT_MAX_BYTES=50;var Qe=2147483647;$e.kMaxLength=Qe;p.TYPED_ARRAY_SUPPORT=ri();!p.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function ri(){try{let t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),t.foo()===42}catch{return!1}}Object.defineProperty(p.prototype,"parent",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}});Object.defineProperty(p.prototype,"offset",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}});function Q(t){if(t>Qe)throw new RangeError('The value "'+t+'" is invalid for option "size"');let e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,n){if(typeof t=="number"){if(typeof e=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return St(t)}return Wn(t,e,n)}p.poolSize=8192;function Wn(t,e,n){if(typeof t=="string")return si(t,e);if(ArrayBuffer.isView(t))return ai(t);if(t==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(q(t,ArrayBuffer)||t&&q(t.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(q(t,SharedArrayBuffer)||t&&q(t.buffer,SharedArrayBuffer)))return Ct(t,e,n);if(typeof t=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let o=t.valueOf&&t.valueOf();if(o!=null&&o!==t)return p.from(o,e,n);let r=ci(t);if(r)return r;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof t[Symbol.toPrimitive]=="function")return p.from(t[Symbol.toPrimitive]("string"),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}p.from=function(t,e,n){return Wn(t,e,n)};Object.setPrototypeOf(p.prototype,Uint8Array.prototype);Object.setPrototypeOf(p,Uint8Array);function Jn(t){if(typeof t!="number")throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function ii(t,e,n){return Jn(t),t<=0?Q(t):e!==void 0?typeof n=="string"?Q(t).fill(e,n):Q(t).fill(e):Q(t)}p.alloc=function(t,e,n){return ii(t,e,n)};function St(t){return Jn(t),Q(t<0?0:Pt(t)|0)}p.allocUnsafe=function(t){return St(t)};p.allocUnsafeSlow=function(t){return St(t)};function si(t,e){if((typeof e!="string"||e==="")&&(e="utf8"),!p.isEncoding(e))throw new TypeError("Unknown encoding: "+e);let n=Xn(t,e)|0,o=Q(n),r=o.write(t,e);return r!==n&&(o=o.slice(0,r)),o}function Ht(t){let e=t.length<0?0:Pt(t.length)|0,n=Q(e);for(let o=0;o<e;o+=1)n[o]=t[o]&255;return n}function ai(t){if(q(t,Uint8Array)){let e=new Uint8Array(t);return Ct(e.buffer,e.byteOffset,e.byteLength)}return Ht(t)}function Ct(t,e,n){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(n||0))throw new RangeError('"length" is outside of buffer bounds');let o;return e===void 0&&n===void 0?o=new Uint8Array(t):n===void 0?o=new Uint8Array(t,e):o=new Uint8Array(t,e,n),Object.setPrototypeOf(o,p.prototype),o}function ci(t){if(p.isBuffer(t)){let e=Pt(t.length)|0,n=Q(e);return n.length===0||t.copy(n,0,0,e),n}if(t.length!==void 0)return typeof t.length!="number"||Rt(t.length)?Q(0):Ht(t);if(t.type==="Buffer"&&Array.isArray(t.data))return Ht(t.data)}function Pt(t){if(t>=Qe)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Qe.toString(16)+" bytes");return t|0}function ui(t){return+t!=t&&(t=0),p.alloc(+t)}p.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==p.prototype};p.compare=function(e,n){if(q(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),q(n,Uint8Array)&&(n=p.from(n,n.offset,n.byteLength)),!p.isBuffer(e)||!p.isBuffer(n))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===n)return 0;let o=e.length,r=n.length;for(let i=0,s=Math.min(o,r);i<s;++i)if(e[i]!==n[i]){o=e[i],r=n[i];break}return o<r?-1:r<o?1:0};p.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}};p.concat=function(e,n){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(e.length===0)return p.alloc(0);let o;if(n===void 0)for(n=0,o=0;o<e.length;++o)n+=e[o].length;let r=p.allocUnsafe(n),i=0;for(o=0;o<e.length;++o){let s=e[o];if(q(s,Uint8Array))i+s.length>r.length?(p.isBuffer(s)||(s=p.from(s)),s.copy(r,i)):Uint8Array.prototype.set.call(r,s,i);else if(p.isBuffer(s))s.copy(r,i);else throw new TypeError('"list" argument must be an Array of Buffers');i+=s.length}return r};function Xn(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||q(t,ArrayBuffer))return t.byteLength;if(typeof t!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);let n=t.length,o=arguments.length>2&&arguments[2]===!0;if(!o&&n===0)return 0;let r=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return $t(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return n*2;case"hex":return n>>>1;case"base64":return io(t).length;default:if(r)return o?-1:$t(t).length;e=(""+e).toLowerCase(),r=!0}}p.byteLength=Xn;function di(t,e,n){let o=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((n===void 0||n>this.length)&&(n=this.length),n<=0)||(n>>>=0,e>>>=0,n<=e))return"";for(t||(t="utf8");;)switch(t){case"hex":return xi(this,e,n);case"utf8":case"utf-8":return Zn(this,e,n);case"ascii":return bi(this,e,n);case"latin1":case"binary":return wi(this,e,n);case"base64":return gi(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return vi(this,e,n);default:if(o)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),o=!0}}p.prototype._isBuffer=!0;function ye(t,e,n){let o=t[e];t[e]=t[n],t[n]=o}p.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let n=0;n<e;n+=2)ye(this,n,n+1);return this};p.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let n=0;n<e;n+=4)ye(this,n,n+3),ye(this,n+1,n+2);return this};p.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let n=0;n<e;n+=8)ye(this,n,n+7),ye(this,n+1,n+6),ye(this,n+2,n+5),ye(this,n+3,n+4);return this};p.prototype.toString=function(){let e=this.length;return e===0?"":arguments.length===0?Zn(this,0,e):di.apply(this,arguments)};p.prototype.toLocaleString=p.prototype.toString;p.prototype.equals=function(e){if(!p.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:p.compare(this,e)===0};p.prototype.inspect=function(){let e="",n=$e.INSPECT_MAX_BYTES;return e=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(e+=" ... "),"<Buffer "+e+">"};Vn&&(p.prototype[Vn]=p.prototype.inspect);p.prototype.compare=function(e,n,o,r,i){if(q(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),!p.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(n===void 0&&(n=0),o===void 0&&(o=e?e.length:0),r===void 0&&(r=0),i===void 0&&(i=this.length),n<0||o>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&n>=o)return 0;if(r>=i)return-1;if(n>=o)return 1;if(n>>>=0,o>>>=0,r>>>=0,i>>>=0,this===e)return 0;let s=i-r,a=o-n,c=Math.min(s,a),u=this.slice(r,i),d=e.slice(n,o);for(let h=0;h<c;++h)if(u[h]!==d[h]){s=u[h],a=d[h];break}return s<a?-1:a<s?1:0};function Yn(t,e,n,o,r){if(t.length===0)return-1;if(typeof n=="string"?(o=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,Rt(n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0)if(r)n=0;else return-1;if(typeof e=="string"&&(e=p.from(e,o)),p.isBuffer(e))return e.length===0?-1:zn(t,e,n,o,r);if(typeof e=="number")return e=e&255,typeof Uint8Array.prototype.indexOf=="function"?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):zn(t,[e],n,o,r);throw new TypeError("val must be string, number or Buffer")}function zn(t,e,n,o,r){let i=1,s=t.length,a=e.length;if(o!==void 0&&(o=String(o).toLowerCase(),o==="ucs2"||o==="ucs-2"||o==="utf16le"||o==="utf-16le")){if(t.length<2||e.length<2)return-1;i=2,s/=2,a/=2,n/=2}function c(d,h){return i===1?d[h]:d.readUInt16BE(h*i)}let u;if(r){let d=-1;for(u=n;u<s;u++)if(c(t,u)===c(e,d===-1?0:u-d)){if(d===-1&&(d=u),u-d+1===a)return d*i}else d!==-1&&(u-=u-d),d=-1}else for(n+a>s&&(n=s-a),u=n;u>=0;u--){let d=!0;for(let h=0;h<a;h++)if(c(t,u+h)!==c(e,h)){d=!1;break}if(d)return u}return-1}p.prototype.includes=function(e,n,o){return this.indexOf(e,n,o)!==-1};p.prototype.indexOf=function(e,n,o){return Yn(this,e,n,o,!0)};p.prototype.lastIndexOf=function(e,n,o){return Yn(this,e,n,o,!1)};function hi(t,e,n,o){n=Number(n)||0;let r=t.length-n;o?(o=Number(o),o>r&&(o=r)):o=r;let i=e.length;o>i/2&&(o=i/2);let s;for(s=0;s<o;++s){let a=parseInt(e.substr(s*2,2),16);if(Rt(a))return s;t[n+s]=a}return s}function fi(t,e,n,o){return et($t(e,t.length-n),t,n,o)}function li(t,e,n,o){return et(Ai(e),t,n,o)}function pi(t,e,n,o){return et(io(e),t,n,o)}function mi(t,e,n,o){return et(Ii(e,t.length-n),t,n,o)}p.prototype.write=function(e,n,o,r){if(n===void 0)r="utf8",o=this.length,n=0;else if(o===void 0&&typeof n=="string")r=n,o=this.length,n=0;else if(isFinite(n))n=n>>>0,isFinite(o)?(o=o>>>0,r===void 0&&(r="utf8")):(r=o,o=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let i=this.length-n;if((o===void 0||o>i)&&(o=i),e.length>0&&(o<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let s=!1;for(;;)switch(r){case"hex":return hi(this,e,n,o);case"utf8":case"utf-8":return fi(this,e,n,o);case"ascii":case"latin1":case"binary":return li(this,e,n,o);case"base64":return pi(this,e,n,o);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return mi(this,e,n,o);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}};p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function gi(t,e,n){return e===0&&n===t.length?It.fromByteArray(t):It.fromByteArray(t.slice(e,n))}function Zn(t,e,n){n=Math.min(t.length,n);let o=[],r=e;for(;r<n;){let i=t[r],s=null,a=i>239?4:i>223?3:i>191?2:1;if(r+a<=n){let c,u,d,h;switch(a){case 1:i<128&&(s=i);break;case 2:c=t[r+1],(c&192)===128&&(h=(i&31)<<6|c&63,h>127&&(s=h));break;case 3:c=t[r+1],u=t[r+2],(c&192)===128&&(u&192)===128&&(h=(i&15)<<12|(c&63)<<6|u&63,h>2047&&(h<55296||h>57343)&&(s=h));break;case 4:c=t[r+1],u=t[r+2],d=t[r+3],(c&192)===128&&(u&192)===128&&(d&192)===128&&(h=(i&15)<<18|(c&63)<<12|(u&63)<<6|d&63,h>65535&&h<1114112&&(s=h))}}s===null?(s=65533,a=1):s>65535&&(s-=65536,o.push(s>>>10&1023|55296),s=56320|s&1023),o.push(s),r+=a}return yi(o)}var Gn=4096;function yi(t){let e=t.length;if(e<=Gn)return String.fromCharCode.apply(String,t);let n="",o=0;for(;o<e;)n+=String.fromCharCode.apply(String,t.slice(o,o+=Gn));return n}function bi(t,e,n){let o="";n=Math.min(t.length,n);for(let r=e;r<n;++r)o+=String.fromCharCode(t[r]&127);return o}function wi(t,e,n){let o="";n=Math.min(t.length,n);for(let r=e;r<n;++r)o+=String.fromCharCode(t[r]);return o}function xi(t,e,n){let o=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>o)&&(n=o);let r="";for(let i=e;i<n;++i)r+=Hi[t[i]];return r}function vi(t,e,n){let o=t.slice(e,n),r="";for(let i=0;i<o.length-1;i+=2)r+=String.fromCharCode(o[i]+o[i+1]*256);return r}p.prototype.slice=function(e,n){let o=this.length;e=~~e,n=n===void 0?o:~~n,e<0?(e+=o,e<0&&(e=0)):e>o&&(e=o),n<0?(n+=o,n<0&&(n=0)):n>o&&(n=o),n<e&&(n=e);let r=this.subarray(e,n);return Object.setPrototypeOf(r,p.prototype),r};function P(t,e,n){if(t%1!==0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}p.prototype.readUintLE=p.prototype.readUIntLE=function(e,n,o){e=e>>>0,n=n>>>0,o||P(e,n,this.length);let r=this[e],i=1,s=0;for(;++s<n&&(i*=256);)r+=this[e+s]*i;return r};p.prototype.readUintBE=p.prototype.readUIntBE=function(e,n,o){e=e>>>0,n=n>>>0,o||P(e,n,this.length);let r=this[e+--n],i=1;for(;n>0&&(i*=256);)r+=this[e+--n]*i;return r};p.prototype.readUint8=p.prototype.readUInt8=function(e,n){return e=e>>>0,n||P(e,1,this.length),this[e]};p.prototype.readUint16LE=p.prototype.readUInt16LE=function(e,n){return e=e>>>0,n||P(e,2,this.length),this[e]|this[e+1]<<8};p.prototype.readUint16BE=p.prototype.readUInt16BE=function(e,n){return e=e>>>0,n||P(e,2,this.length),this[e]<<8|this[e+1]};p.prototype.readUint32LE=p.prototype.readUInt32LE=function(e,n){return e=e>>>0,n||P(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};p.prototype.readUint32BE=p.prototype.readUInt32BE=function(e,n){return e=e>>>0,n||P(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};p.prototype.readBigUInt64LE=ue(function(e){e=e>>>0,Ce(e,"offset");let n=this[e],o=this[e+7];(n===void 0||o===void 0)&&Fe(e,this.length-8);let r=n+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,i=this[++e]+this[++e]*2**8+this[++e]*2**16+o*2**24;return BigInt(r)+(BigInt(i)<<BigInt(32))});p.prototype.readBigUInt64BE=ue(function(e){e=e>>>0,Ce(e,"offset");let n=this[e],o=this[e+7];(n===void 0||o===void 0)&&Fe(e,this.length-8);let r=n*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],i=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+o;return(BigInt(r)<<BigInt(32))+BigInt(i)});p.prototype.readIntLE=function(e,n,o){e=e>>>0,n=n>>>0,o||P(e,n,this.length);let r=this[e],i=1,s=0;for(;++s<n&&(i*=256);)r+=this[e+s]*i;return i*=128,r>=i&&(r-=Math.pow(2,8*n)),r};p.prototype.readIntBE=function(e,n,o){e=e>>>0,n=n>>>0,o||P(e,n,this.length);let r=n,i=1,s=this[e+--r];for(;r>0&&(i*=256);)s+=this[e+--r]*i;return i*=128,s>=i&&(s-=Math.pow(2,8*n)),s};p.prototype.readInt8=function(e,n){return e=e>>>0,n||P(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]};p.prototype.readInt16LE=function(e,n){e=e>>>0,n||P(e,2,this.length);let o=this[e]|this[e+1]<<8;return o&32768?o|4294901760:o};p.prototype.readInt16BE=function(e,n){e=e>>>0,n||P(e,2,this.length);let o=this[e+1]|this[e]<<8;return o&32768?o|4294901760:o};p.prototype.readInt32LE=function(e,n){return e=e>>>0,n||P(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};p.prototype.readInt32BE=function(e,n){return e=e>>>0,n||P(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};p.prototype.readBigInt64LE=ue(function(e){e=e>>>0,Ce(e,"offset");let n=this[e],o=this[e+7];(n===void 0||o===void 0)&&Fe(e,this.length-8);let r=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(o<<24);return(BigInt(r)<<BigInt(32))+BigInt(n+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24)});p.prototype.readBigInt64BE=ue(function(e){e=e>>>0,Ce(e,"offset");let n=this[e],o=this[e+7];(n===void 0||o===void 0)&&Fe(e,this.length-8);let r=(n<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+o)});p.prototype.readFloatLE=function(e,n){return e=e>>>0,n||P(e,4,this.length),He.read(this,e,!0,23,4)};p.prototype.readFloatBE=function(e,n){return e=e>>>0,n||P(e,4,this.length),He.read(this,e,!1,23,4)};p.prototype.readDoubleLE=function(e,n){return e=e>>>0,n||P(e,8,this.length),He.read(this,e,!0,52,8)};p.prototype.readDoubleBE=function(e,n){return e=e>>>0,n||P(e,8,this.length),He.read(this,e,!1,52,8)};function N(t,e,n,o,r,i){if(!p.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||e<i)throw new RangeError('"value" argument is out of bounds');if(n+o>t.length)throw new RangeError("Index out of range")}p.prototype.writeUintLE=p.prototype.writeUIntLE=function(e,n,o,r){if(e=+e,n=n>>>0,o=o>>>0,!r){let a=Math.pow(2,8*o)-1;N(this,e,n,o,a,0)}let i=1,s=0;for(this[n]=e&255;++s<o&&(i*=256);)this[n+s]=e/i&255;return n+o};p.prototype.writeUintBE=p.prototype.writeUIntBE=function(e,n,o,r){if(e=+e,n=n>>>0,o=o>>>0,!r){let a=Math.pow(2,8*o)-1;N(this,e,n,o,a,0)}let i=o-1,s=1;for(this[n+i]=e&255;--i>=0&&(s*=256);)this[n+i]=e/s&255;return n+o};p.prototype.writeUint8=p.prototype.writeUInt8=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,1,255,0),this[n]=e&255,n+1};p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,2,65535,0),this[n]=e&255,this[n+1]=e>>>8,n+2};p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,2,65535,0),this[n]=e>>>8,this[n+1]=e&255,n+2};p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,4,4294967295,0),this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=e&255,n+4};p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,4,4294967295,0),this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=e&255,n+4};function Qn(t,e,n,o,r){ro(e,o,r,t,n,7);let i=Number(e&BigInt(4294967295));t[n++]=i,i=i>>8,t[n++]=i,i=i>>8,t[n++]=i,i=i>>8,t[n++]=i;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=s,s=s>>8,t[n++]=s,s=s>>8,t[n++]=s,s=s>>8,t[n++]=s,n}function eo(t,e,n,o,r){ro(e,o,r,t,n,7);let i=Number(e&BigInt(4294967295));t[n+7]=i,i=i>>8,t[n+6]=i,i=i>>8,t[n+5]=i,i=i>>8,t[n+4]=i;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=s,s=s>>8,t[n+2]=s,s=s>>8,t[n+1]=s,s=s>>8,t[n]=s,n+8}p.prototype.writeBigUInt64LE=ue(function(e,n=0){return Qn(this,e,n,BigInt(0),BigInt("0xffffffffffffffff"))});p.prototype.writeBigUInt64BE=ue(function(e,n=0){return eo(this,e,n,BigInt(0),BigInt("0xffffffffffffffff"))});p.prototype.writeIntLE=function(e,n,o,r){if(e=+e,n=n>>>0,!r){let c=Math.pow(2,8*o-1);N(this,e,n,o,c-1,-c)}let i=0,s=1,a=0;for(this[n]=e&255;++i<o&&(s*=256);)e<0&&a===0&&this[n+i-1]!==0&&(a=1),this[n+i]=(e/s>>0)-a&255;return n+o};p.prototype.writeIntBE=function(e,n,o,r){if(e=+e,n=n>>>0,!r){let c=Math.pow(2,8*o-1);N(this,e,n,o,c-1,-c)}let i=o-1,s=1,a=0;for(this[n+i]=e&255;--i>=0&&(s*=256);)e<0&&a===0&&this[n+i+1]!==0&&(a=1),this[n+i]=(e/s>>0)-a&255;return n+o};p.prototype.writeInt8=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,1,127,-128),e<0&&(e=255+e+1),this[n]=e&255,n+1};p.prototype.writeInt16LE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,2,32767,-32768),this[n]=e&255,this[n+1]=e>>>8,n+2};p.prototype.writeInt16BE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,2,32767,-32768),this[n]=e>>>8,this[n+1]=e&255,n+2};p.prototype.writeInt32LE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,4,2147483647,-2147483648),this[n]=e&255,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24,n+4};p.prototype.writeInt32BE=function(e,n,o){return e=+e,n=n>>>0,o||N(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=e&255,n+4};p.prototype.writeBigInt64LE=ue(function(e,n=0){return Qn(this,e,n,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});p.prototype.writeBigInt64BE=ue(function(e,n=0){return eo(this,e,n,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function to(t,e,n,o,r,i){if(n+o>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function no(t,e,n,o,r){return e=+e,n=n>>>0,r||to(t,e,n,4,34028234663852886e22,-34028234663852886e22),He.write(t,e,n,o,23,4),n+4}p.prototype.writeFloatLE=function(e,n,o){return no(this,e,n,!0,o)};p.prototype.writeFloatBE=function(e,n,o){return no(this,e,n,!1,o)};function oo(t,e,n,o,r){return e=+e,n=n>>>0,r||to(t,e,n,8,17976931348623157e292,-17976931348623157e292),He.write(t,e,n,o,52,8),n+8}p.prototype.writeDoubleLE=function(e,n,o){return oo(this,e,n,!0,o)};p.prototype.writeDoubleBE=function(e,n,o){return oo(this,e,n,!1,o)};p.prototype.copy=function(e,n,o,r){if(!p.isBuffer(e))throw new TypeError("argument should be a Buffer");if(o||(o=0),!r&&r!==0&&(r=this.length),n>=e.length&&(n=e.length),n||(n=0),r>0&&r<o&&(r=o),r===o||e.length===0||this.length===0)return 0;if(n<0)throw new RangeError("targetStart out of bounds");if(o<0||o>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-n<r-o&&(r=e.length-n+o);let i=r-o;return this===e&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(n,o,r):Uint8Array.prototype.set.call(e,this.subarray(o,r),n),i};p.prototype.fill=function(e,n,o,r){if(typeof e=="string"){if(typeof n=="string"?(r=n,n=0,o=this.length):typeof o=="string"&&(r=o,o=this.length),r!==void 0&&typeof r!="string")throw new TypeError("encoding must be a string");if(typeof r=="string"&&!p.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(e.length===1){let s=e.charCodeAt(0);(r==="utf8"&&s<128||r==="latin1")&&(e=s)}}else typeof e=="number"?e=e&255:typeof e=="boolean"&&(e=Number(e));if(n<0||this.length<n||this.length<o)throw new RangeError("Out of range index");if(o<=n)return this;n=n>>>0,o=o===void 0?this.length:o>>>0,e||(e=0);let i;if(typeof e=="number")for(i=n;i<o;++i)this[i]=e;else{let s=p.isBuffer(e)?e:p.from(e,r),a=s.length;if(a===0)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(i=0;i<o-n;++i)this[i+n]=s[i%a]}return this};var Ie={};function Tt(t,e,n){Ie[t]=class extends n{constructor(){super(),Object.defineProperty(this,"message",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${t}]`,this.stack,delete this.name}get code(){return t}set code(r){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:r,writable:!0})}toString(){return`${this.name} [${t}]: ${this.message}`}}}Tt("ERR_BUFFER_OUT_OF_BOUNDS",function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError);Tt("ERR_INVALID_ARG_TYPE",function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`},TypeError);Tt("ERR_OUT_OF_RANGE",function(t,e,n){let o=`The value of "${t}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=qn(String(n)):typeof n=="bigint"&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=qn(r)),r+="n"),o+=` It must be ${e}. Received ${r}`,o},RangeError);function qn(t){let e="",n=t.length,o=t[0]==="-"?1:0;for(;n>=o+4;n-=3)e=`_${t.slice(n-3,n)}${e}`;return`${t.slice(0,n)}${e}`}function Bi(t,e,n){Ce(e,"offset"),(t[e]===void 0||t[e+n]===void 0)&&Fe(e,t.length-(n+1))}function ro(t,e,n,o,r,i){if(t>n||t<e){let s=typeof e=="bigint"?"n":"",a;throw i>3?e===0||e===BigInt(0)?a=`>= 0${s} and < 2${s} ** ${(i+1)*8}${s}`:a=`>= -(2${s} ** ${(i+1)*8-1}${s}) and < 2 ** ${(i+1)*8-1}${s}`:a=`>= ${e}${s} and <= ${n}${s}`,new Ie.ERR_OUT_OF_RANGE("value",a,t)}Bi(o,r,i)}function Ce(t,e){if(typeof t!="number")throw new Ie.ERR_INVALID_ARG_TYPE(e,"number",t)}function Fe(t,e,n){throw Math.floor(t)!==t?(Ce(t,n),new Ie.ERR_OUT_OF_RANGE(n||"offset","an integer",t)):e<0?new Ie.ERR_BUFFER_OUT_OF_BOUNDS:new Ie.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${e}`,t)}var Ei=/[^+/0-9A-Za-z-_]/g;function ki(t){if(t=t.split("=")[0],t=t.trim().replace(Ei,""),t.length<2)return"";for(;t.length%4!==0;)t=t+"=";return t}function $t(t,e){e=e||1/0;let n,o=t.length,r=null,i=[];for(let s=0;s<o;++s){if(n=t.charCodeAt(s),n>55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&i.push(239,191,189);continue}else if(s+1===o){(e-=3)>-1&&i.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&i.push(239,191,189),r=n;continue}n=(r-55296<<10|n-56320)+65536}else r&&(e-=3)>-1&&i.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;i.push(n)}else if(n<2048){if((e-=2)<0)break;i.push(n>>6|192,n&63|128)}else if(n<65536){if((e-=3)<0)break;i.push(n>>12|224,n>>6&63|128,n&63|128)}else if(n<1114112){if((e-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,n&63|128)}else throw new Error("Invalid code point")}return i}function Ai(t){let e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n)&255);return e}function Ii(t,e){let n,o,r,i=[];for(let s=0;s<t.length&&!((e-=2)<0);++s)n=t.charCodeAt(s),o=n>>8,r=n%256,i.push(r),i.push(o);return i}function io(t){return It.toByteArray(ki(t))}function et(t,e,n,o){let r;for(r=0;r<o&&!(r+n>=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function q(t,e){return t instanceof e||t!=null&&t.constructor!=null&&t.constructor.name!=null&&t.constructor.name===e.name}function Rt(t){return t!==t}var Hi=(function(){let t="0123456789abcdef",e=new Array(256);for(let n=0;n<16;++n){let o=n*16;for(let r=0;r<16;++r)e[o+r]=t[n]+t[r]}return e})();function ue(t){return typeof BigInt>"u"?Ci:t}function Ci(){throw new Error("BigInt not supported")}});var w,y=Wr(()=>{"use strict";w=Xr(so(),1);globalThis.Buffer=w.Buffer});y();y();var $i={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:M,n:tt,Gx:ao,Gy:co,a:Mt,d:Dt}=$i,Si=8n,Oe=32,Lt=64,V=(t="")=>{throw new Error(t)},Pi=t=>typeof t=="bigint",mo=t=>typeof t=="string",Ti=t=>t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array",Pe=(t,e)=>!Ti(t)||typeof e=="number"&&e>0&&t.length!==e?V("Uint8Array expected"):t,it=t=>new Uint8Array(t),Ot=t=>Uint8Array.from(t),go=(t,e)=>t.toString(16).padStart(e,"0"),_t=t=>Array.from(Pe(t)).map(e=>go(e,2)).join(""),ee={_0:48,_9:57,A:65,F:70,a:97,f:102},uo=t=>{if(t>=ee._0&&t<=ee._9)return t-ee._0;if(t>=ee.A&&t<=ee.F)return t-(ee.A-10);if(t>=ee.a&&t<=ee.f)return t-(ee.a-10)},Kt=t=>{let e="hex invalid";if(!mo(t))return V(e);let n=t.length,o=n/2;if(n%2)return V(e);let r=it(o);for(let i=0,s=0;i<o;i++,s+=2){let a=uo(t.charCodeAt(s)),c=uo(t.charCodeAt(s+1));if(a===void 0||c===void 0)return V(e);r[i]=a*16+c}return r},nt=(t,e)=>Pe(mo(t)?Kt(t):Ot(Pe(t)),e),yo=()=>globalThis?.crypto,Ri=()=>yo()?.subtle??V("crypto.subtle must be defined"),Nt=(...t)=>{let e=it(t.reduce((o,r)=>o+Pe(r).length,0)),n=0;return t.forEach(o=>{e.set(o,n),n+=o.length}),e},Mi=(t=Oe)=>yo().getRandomValues(it(t)),ot=BigInt,be=(t,e,n,o="bad number: out of range")=>Pi(t)&&e<=t&&t<n?t:V(o),x=(t,e=M)=>{let n=t%e;return n>=0n?n:e+n},Di=t=>x(t,tt),bo=(t,e)=>{(t===0n||e<=0n)&&V("no inverse n="+t+" mod="+e);let n=x(t,e),o=e,r=0n,i=1n,s=1n,a=0n;for(;n!==0n;){let c=o/n,u=o%n,d=r-s*c,h=i-a*c;o=n,n=u,r=s,i=a,s=d,a=h}return o===1n?x(r,e):V("no inverse")};var ho=t=>t instanceof te?t:V("Point expected"),Ut=2n**256n,te=class t{static BASE;static ZERO;ex;ey;ez;et;constructor(e,n,o,r){let i=Ut;this.ex=be(e,0n,i),this.ey=be(n,0n,i),this.ez=be(o,1n,i),this.et=be(r,0n,i),Object.freeze(this)}static fromAffine(e){return new t(e.x,e.y,1n,x(e.x*e.y))}static fromBytes(e,n=!1){let o=Dt,r=Ot(Pe(e,Oe)),i=e[31];r[31]=i&-129;let s=jt(r);be(s,0n,n?Ut:M);let c=x(s*s),u=x(c-1n),d=x(o*c+1n),{isValid:h,value:f}=Ui(u,d);h||V("bad point: y not sqrt");let l=(f&1n)===1n,g=(i&128)!==0;return!n&&f===0n&&g&&V("bad point: x==0, isLastByteOdd"),g!==l&&(f=x(-f)),new t(f,s,1n,x(f*s))}assertValidity(){let e=Mt,n=Dt,o=this;if(o.is0())throw new Error("bad point: ZERO");let{ex:r,ey:i,ez:s,et:a}=o,c=x(r*r),u=x(i*i),d=x(s*s),h=x(d*d),f=x(c*e),l=x(d*x(f+u)),g=x(h+x(n*x(c*u)));if(l!==g)throw new Error("bad point: equation left != right (1)");let m=x(r*i),v=x(s*a);if(m!==v)throw new Error("bad point: equation left != right (2)");return this}equals(e){let{ex:n,ey:o,ez:r}=this,{ex:i,ey:s,ez:a}=ho(e),c=x(n*a),u=x(i*r),d=x(o*a),h=x(s*r);return c===u&&d===h}is0(){return this.equals(Se)}negate(){return new t(x(-this.ex),this.ey,this.ez,x(-this.et))}double(){let{ex:e,ey:n,ez:o}=this,r=Mt,i=x(e*e),s=x(n*n),a=x(2n*x(o*o)),c=x(r*i),u=e+n,d=x(x(u*u)-i-s),h=c+s,f=h-a,l=c-s,g=x(d*f),m=x(h*l),v=x(d*l),b=x(f*h);return new t(g,m,b,v)}add(e){let{ex:n,ey:o,ez:r,et:i}=this,{ex:s,ey:a,ez:c,et:u}=ho(e),d=Mt,h=Dt,f=x(n*s),l=x(o*a),g=x(i*h*u),m=x(r*c),v=x((n+o)*(s+a)-f-l),b=x(m-g),A=x(m+g),B=x(l-d*f),S=x(v*b),R=x(A*B),k=x(v*B),I=x(b*A);return new t(S,R,I,k)}multiply(e,n=!0){if(!n&&(e===0n||this.is0()))return Se;if(be(e,1n,tt),e===1n)return this;if(this.equals(Te))return zi(e).p;let o=Se,r=Te;for(let i=this;e>0n;i=i.double(),e>>=1n)e&1n?o=o.add(i):n&&(r=r.add(i));return o}toAffine(){let{ex:e,ey:n,ez:o}=this;if(this.equals(Se))return{x:0n,y:1n};let r=bo(o,M);return x(o*r)!==1n&&V("invalid inverse"),{x:x(e*r),y:x(n*r)}}toBytes(){let{x:e,y:n}=this.assertValidity().toAffine(),o=Li(n);return o[31]|=e&1n?128:0,o}toHex(){return _t(this.toBytes())}clearCofactor(){return this.multiply(ot(Si),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let e=this.multiply(tt/2n,!1).double();return tt%2n&&(e=e.add(this)),e.is0()}static fromHex(e,n){return t.fromBytes(nt(e),n)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}toRawBytes(){return this.toBytes()}},Te=new te(ao,co,1n,x(ao*co)),Se=new te(0n,1n,1n,0n);te.BASE=Te;te.ZERO=Se;var Li=t=>Kt(go(be(t,0n,Ut),Lt)).reverse(),jt=t=>ot("0x"+_t(Ot(Pe(t)).reverse())),W=(t,e)=>{let n=t;for(;e-- >0n;)n*=n,n%=M;return n},Ni=t=>{let n=t*t%M*t%M,o=W(n,2n)*n%M,r=W(o,1n)*t%M,i=W(r,5n)*r%M,s=W(i,10n)*i%M,a=W(s,20n)*s%M,c=W(a,40n)*a%M,u=W(c,80n)*c%M,d=W(u,80n)*c%M,h=W(d,10n)*i%M;return{pow_p_5_8:W(h,2n)*t%M,b2:n}},fo=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,Ui=(t,e)=>{let n=x(e*e*e),o=x(n*n*e),r=Ni(t*o).pow_p_5_8,i=x(t*n*r),s=x(e*i*i),a=i,c=x(i*fo),u=s===t,d=s===x(-t),h=s===x(-t*fo);return u&&(i=a),(d||h)&&(i=c),(x(i)&1n)===1n&&(i=x(-i)),{isValid:u||d,value:i}},Fi=t=>Di(jt(t)),Oi=(...t)=>st.sha512Async(...t);var _i=t=>Oi(t.hashable).then(t.finish);var wo={zip215:!0},Ki=(t,e,n,o=wo)=>{t=nt(t,Lt),e=nt(e),n=nt(n,Oe);let{zip215:r}=o,i,s,a,c,u=Uint8Array.of();try{i=te.fromHex(n,r),s=te.fromHex(t.slice(0,Oe),r),a=jt(t.slice(Oe,Lt)),c=Te.multiply(a,!1),u=Nt(s.toBytes(),i.toBytes(),e)}catch{}return{hashable:u,finish:h=>{if(c==null||!r&&i.isSmallOrder())return!1;let f=Fi(h);return s.add(i.multiply(f,!1)).add(c.negate()).clearCofactor().is0()}}},Vt=async(t,e,n,o=wo)=>_i(Ki(t,e,n,o));var st={sha512Async:async(...t)=>{let e=Ri(),n=Nt(...t);return it(await e.digest("SHA-512",n.buffer))},sha512Sync:void 0,bytesToHex:_t,hexToBytes:Kt,concatBytes:Nt,mod:x,invert:bo,randomBytes:Mi};var rt=8,ji=256,xo=Math.ceil(ji/rt)+1,Ft=2**(rt-1),Vi=()=>{let t=[],e=Te,n=e;for(let o=0;o<xo;o++){n=e,t.push(n);for(let r=1;r<Ft;r++)n=n.add(e),t.push(n);e=n.double()}return t},lo,po=(t,e)=>{let n=e.negate();return t?n:e},zi=t=>{let e=lo||(lo=Vi()),n=Se,o=Te,r=2**rt,i=r,s=ot(r-1),a=ot(rt);for(let c=0;c<xo;c++){let u=Number(t&s);t>>=a,u>Ft&&(u-=i,t+=1n);let d=c*Ft,h=d,f=d+Math.abs(u)-1,l=c%2!==0,g=u<0;u===0?o=o.add(po(l,e[h])):n=n.add(po(g,e[f]))}return{p:n,f:o}};y();y();y();function qi(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function zt(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("positive integer expected, got "+t)}function we(t,...e){if(!qi(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error("Uint8Array expected of length "+e+", got length="+t.length)}function Me(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function at(t,e){we(t);let n=e.outputLen;if(t.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function vo(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function J(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function ct(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function z(t,e){return t<<32-e|t>>>e}var Wi=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ji(t){return t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}function Xi(t){for(let e=0;e<t.length;e++)t[e]=Ji(t[e]);return t}var Gt=Wi?t=>t:Xi;function Yi(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function _e(t){return typeof t=="string"&&(t=Yi(t)),we(t),t}var Re=class{};function Ke(t){let e=o=>t().update(_e(o)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function Zi(t,e,n,o){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,o);let r=BigInt(32),i=BigInt(4294967295),s=Number(n>>r&i),a=Number(n&i),c=o?4:0,u=o?0:4;t.setUint32(e+c,s,o),t.setUint32(e+u,a,o)}function Bo(t,e,n){return t&e^~t&n}function Eo(t,e,n){return t&e^t&n^e&n}var je=class extends Re{constructor(e,n,o,r){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=n,this.padOffset=o,this.isLE=r,this.buffer=new Uint8Array(e),this.view=ct(this.buffer)}update(e){Me(this),e=_e(e),we(e);let{view:n,buffer:o,blockLen:r}=this,i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let c=ct(e);for(;r<=i-s;s+=r)this.process(c,s);continue}o.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Me(this),at(e,this),this.finished=!0;let{buffer:n,view:o,blockLen:r,isLE:i}=this,{pos:s}=this;n[s++]=128,J(this.buffer.subarray(s)),this.padOffset>r-s&&(this.process(o,0),s=0);for(let h=s;h<r;h++)n[h]=0;Zi(o,r-8,BigInt(this.length*8),i),this.process(o,0);let a=ct(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,d=this.get();if(u>d.length)throw new Error("_sha2: outputLen bigger than state");for(let h=0;h<u;h++)a.setUint32(4*h,d[h],i)}digest(){let{buffer:e,outputLen:n}=this;this.digestInto(e);let o=e.slice(0,n);return this.destroy(),o}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:n,buffer:o,length:r,finished:i,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=i,e.length=r,e.pos=a,r%n&&e.buffer.set(o),e}clone(){return this._cloneInto()}},ne=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var T=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);y();var ut=BigInt(4294967295),ko=BigInt(32);function Qi(t,e=!1){return e?{h:Number(t&ut),l:Number(t>>ko&ut)}:{h:Number(t>>ko&ut)|0,l:Number(t&ut)|0}}function dt(t,e=!1){let n=t.length,o=new Uint32Array(n),r=new Uint32Array(n);for(let i=0;i<n;i++){let{h:s,l:a}=Qi(t[i],e);[o[i],r[i]]=[s,a]}return[o,r]}var qt=(t,e,n)=>t>>>n,Wt=(t,e,n)=>t<<32-n|e>>>n,xe=(t,e,n)=>t>>>n|e<<32-n,ve=(t,e,n)=>t<<32-n|e>>>n,Ve=(t,e,n)=>t<<64-n|e>>>n-32,ze=(t,e,n)=>t>>>n-32|e<<64-n;var Ao=(t,e,n)=>t<<n|e>>>32-n,Io=(t,e,n)=>e<<n|t>>>32-n,Ho=(t,e,n)=>e<<n-32|t>>>64-n,Co=(t,e,n)=>t<<n-32|e>>>64-n;function X(t,e,n,o){let r=(e>>>0)+(o>>>0);return{h:t+n+(r/2**32|0)|0,l:r|0}}var $o=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),So=(t,e,n,o)=>e+n+o+(t/2**32|0)|0,Po=(t,e,n,o)=>(t>>>0)+(e>>>0)+(n>>>0)+(o>>>0),To=(t,e,n,o,r)=>e+n+o+r+(t/2**32|0)|0,Ro=(t,e,n,o,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(o>>>0)+(r>>>0),Mo=(t,e,n,o,r,i)=>e+n+o+r+i+(t/2**32|0)|0;var ts=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),de=new Uint32Array(64),ht=class extends je{constructor(e=32){super(64,e,8,!1),this.A=ne[0]|0,this.B=ne[1]|0,this.C=ne[2]|0,this.D=ne[3]|0,this.E=ne[4]|0,this.F=ne[5]|0,this.G=ne[6]|0,this.H=ne[7]|0}get(){let{A:e,B:n,C:o,D:r,E:i,F:s,G:a,H:c}=this;return[e,n,o,r,i,s,a,c]}set(e,n,o,r,i,s,a,c){this.A=e|0,this.B=n|0,this.C=o|0,this.D=r|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,n){for(let h=0;h<16;h++,n+=4)de[h]=e.getUint32(n,!1);for(let h=16;h<64;h++){let f=de[h-15],l=de[h-2],g=z(f,7)^z(f,18)^f>>>3,m=z(l,17)^z(l,19)^l>>>10;de[h]=m+de[h-7]+g+de[h-16]|0}let{A:o,B:r,C:i,D:s,E:a,F:c,G:u,H:d}=this;for(let h=0;h<64;h++){let f=z(a,6)^z(a,11)^z(a,25),l=d+f+Bo(a,c,u)+ts[h]+de[h]|0,m=(z(o,2)^z(o,13)^z(o,22))+Eo(o,r,i)|0;d=u,u=c,c=a,a=s+l|0,s=i,i=r,r=o,o=l+m|0}o=o+this.A|0,r=r+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,d=d+this.H|0,this.set(o,r,i,s,a,c,u,d)}roundClean(){J(de)}destroy(){this.set(0,0,0,0,0,0,0,0),J(this.buffer)}};var Do=dt(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),ns=Do[0],os=Do[1],he=new Uint32Array(80),fe=new Uint32Array(80),Jt=class extends je{constructor(e=64){super(128,e,16,!1),this.Ah=T[0]|0,this.Al=T[1]|0,this.Bh=T[2]|0,this.Bl=T[3]|0,this.Ch=T[4]|0,this.Cl=T[5]|0,this.Dh=T[6]|0,this.Dl=T[7]|0,this.Eh=T[8]|0,this.El=T[9]|0,this.Fh=T[10]|0,this.Fl=T[11]|0,this.Gh=T[12]|0,this.Gl=T[13]|0,this.Hh=T[14]|0,this.Hl=T[15]|0}get(){let{Ah:e,Al:n,Bh:o,Bl:r,Ch:i,Cl:s,Dh:a,Dl:c,Eh:u,El:d,Fh:h,Fl:f,Gh:l,Gl:g,Hh:m,Hl:v}=this;return[e,n,o,r,i,s,a,c,u,d,h,f,l,g,m,v]}set(e,n,o,r,i,s,a,c,u,d,h,f,l,g,m,v){this.Ah=e|0,this.Al=n|0,this.Bh=o|0,this.Bl=r|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=u|0,this.El=d|0,this.Fh=h|0,this.Fl=f|0,this.Gh=l|0,this.Gl=g|0,this.Hh=m|0,this.Hl=v|0}process(e,n){for(let B=0;B<16;B++,n+=4)he[B]=e.getUint32(n),fe[B]=e.getUint32(n+=4);for(let B=16;B<80;B++){let S=he[B-15]|0,R=fe[B-15]|0,k=xe(S,R,1)^xe(S,R,8)^qt(S,R,7),I=ve(S,R,1)^ve(S,R,8)^Wt(S,R,7),H=he[B-2]|0,D=fe[B-2]|0,ke=xe(H,D,19)^Ve(H,D,61)^qt(H,D,6),Ae=ve(H,D,19)^ze(H,D,61)^Wt(H,D,6),se=Po(I,Ae,fe[B-7],fe[B-16]),ae=To(se,k,ke,he[B-7],he[B-16]);he[B]=ae|0,fe[B]=se|0}let{Ah:o,Al:r,Bh:i,Bl:s,Ch:a,Cl:c,Dh:u,Dl:d,Eh:h,El:f,Fh:l,Fl:g,Gh:m,Gl:v,Hh:b,Hl:A}=this;for(let B=0;B<80;B++){let S=xe(h,f,14)^xe(h,f,18)^Ve(h,f,41),R=ve(h,f,14)^ve(h,f,18)^ze(h,f,41),k=h&l^~h&m,I=f&g^~f&v,H=Ro(A,R,I,os[B],fe[B]),D=Mo(H,b,S,k,ns[B],he[B]),ke=H|0,Ae=xe(o,r,28)^Ve(o,r,34)^Ve(o,r,39),se=ve(o,r,28)^ze(o,r,34)^ze(o,r,39),ae=o&i^o&a^i&a,Ne=r&s^r&c^s&c;b=m|0,A=v|0,m=l|0,v=g|0,l=h|0,g=f|0,{h,l:f}=X(u|0,d|0,D|0,ke|0),u=a|0,d=c|0,a=i|0,c=s|0,i=o|0,s=r|0;let ce=$o(ke,se,Ne);o=So(ce,D,Ae,ae),r=ce|0}({h:o,l:r}=X(this.Ah|0,this.Al|0,o|0,r|0)),{h:i,l:s}=X(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=X(this.Ch|0,this.Cl|0,a|0,c|0),{h:u,l:d}=X(this.Dh|0,this.Dl|0,u|0,d|0),{h,l:f}=X(this.Eh|0,this.El|0,h|0,f|0),{h:l,l:g}=X(this.Fh|0,this.Fl|0,l|0,g|0),{h:m,l:v}=X(this.Gh|0,this.Gl|0,m|0,v|0),{h:b,l:A}=X(this.Hh|0,this.Hl|0,b|0,A|0),this.set(o,r,i,s,a,c,u,d,h,f,l,g,m,v,b,A)}roundClean(){J(he,fe)}destroy(){J(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var Lo=Ke(()=>new ht);var ft=Ke(()=>new Jt);y();y();y();function U(t){return()=>{throw new Error(`${t} is not available in the browser verifier`)}}var No=U("fs.createReadStream"),Wc=U("fs.readFileSync"),Jc=U("fs.existsSync"),Xc=U("fs.writeFileSync"),rs=U("fs.open"),is=U("fs.readdir"),Uo=U("fs.readFile"),ss=U("fs.stat"),Yc=U("fs.mkdir"),Zc=U("fs.writeFile"),Fo=U("path.join"),Qc=U("path.basename"),Oo=U("zlib.createGunzip"),as=U("zlib.gzipSync");y();var C=Lo;y();y();y();var Yt=globalThis.crypto,Xt=class{hasher;constructor(e){let n=e.toLowerCase().replace("-","");if(n==="sha256")this.hasher=C.create();else if(n==="sha512")this.hasher=ft.create();else throw new Error(`createHash: unsupported algorithm ${e} in the browser verifier`)}update(e){return this.hasher.update(typeof e=="string"?new TextEncoder().encode(e):e),this}digest(e){let n=this.hasher.digest(),o=w.Buffer.from(n);return e===void 0?o:o.toString(e)}};function Zt(t){return new Xt(t)}function Qt(t){return{update(){return this},verify(){throw new Error("P-256 agency signature verification is not available in the browser verifier")}}}y();function Be(t){let e=_o(t);return new TextEncoder().encode(e)}function _o(t){return JSON.stringify(en(t))}function en(t){if(t===null||typeof t!="object"){if(typeof t>"u")throw new TypeError("bitgraph-core/canonical: undefined values are not serializable to canonical JSON");if(typeof t=="function"||typeof t=="symbol")throw new TypeError(`bitgraph-core/canonical: ${typeof t} values are not serializable to canonical JSON`);if(typeof t=="bigint")throw new TypeError("bitgraph-core/canonical: BigInt values are not serializable to canonical JSON; convert to string (decimal) before canonicalizing");return t}if(Array.isArray(t))return t.map(en);let e={};for(let n of Object.keys(t).sort()){let o=t[n];typeof o>"u"||(e[n]=en(o))}return e}function lt(t,e){if(t.length!==e.length)return!1;let n=0;for(let o=0;o<t.length;o++)n|=t[o]^e[o];return n===0}async function nn(t){let{proof:e,bytes:n,trustAnchors:o}=t,r=await Ko(e,n,o);return r===null?{valid:!0}:ms(r)}async function qe(t){let{proof:e,trustAnchors:n}=t,o=await Ko(e,void 0,n);return o===null?{valid:!0,artifactBinding:"not-checked"}:{valid:!1,artifactBinding:"not-checked",reason:o}}async function Ko(t,e,n){let o=us(t);if(o!==null)return o;let r=e===void 0?void 0:C(e),i;try{i=De(t.artifact.digestB64)}catch{return"artifact.digestB64 is not valid base64"}if(r!==void 0&&!lt(r,i))return"artifact digest mismatch: the provided bytes do not match the committed digest";let s;try{s=De(t.signer.publicKeyB64)}catch{return"signer.publicKeyB64 is not valid base64"}if(s.length!==32)return`signer.publicKeyB64 decodes to ${s.length} bytes; expected 32 (Ed25519)`;let a={version:t.version,artifact:t.artifact,commit:t.commit,publicKeyB64:t.signer.publicKeyB64,enforcement:t.environment.enforcement,measurement:t.environment.measurement};t.environment.attestation!==void 0&&(a.attestationFormat=t.environment.attestation.format),t.agency!==void 0&&(a.actor=t.agency.actor),t.policy!==void 0&&(a.policy=t.policy),t.attribution!==void 0&&(a.attribution=t.attribution);let c=Be(a),u;try{u=De(t.signer.signatureB64)}catch{return"signer.signatureB64 is not valid base64"}if(u.length!==64)return`signer.signatureB64 decodes to ${u.length} bytes; expected 64 (Ed25519)`;let d;try{d=await Vt(u,c,s)}catch(h){return`signature verification error: ${h instanceof Error?h.message:String(h)}`}if(!d)return"signature verification failed: signature does not match";if(t.agency!==void 0){let h=hs(t);if(h!==null)return h}if(t.slotAllocation!==void 0){let h=await fs(t);if(h!==null)return h}if(t.commit.epochLink!==void 0){let h=ps(t);if(h!==null)return h}if(n!==void 0){let h=ds(t,n);if(h!==null)return h}return null}var cs=new Set(["stub","hw-key","measured-tee"]);function us(t){if(t===null||typeof t!="object")return"proof must be an object";let e=t;if(e.version!=="bitgraph/1")return`unsupported proof version: ${String(e.version)}`;if(!Ge(e.artifact))return"proof.artifact is missing or not an object";let n=e.artifact;if(n.hashAlg!=="sha256")return`unsupported hashAlg: ${String(n.hashAlg)}`;if(typeof n.digestB64!="string"||n.digestB64.length===0)return"proof.artifact.digestB64 must be a non-empty string";if(!Ge(e.commit))return"proof.commit is missing or not an object";let o=e.commit;if(typeof o.nonceB64!="string"||o.nonceB64.length===0)return"proof.commit.nonceB64 must be a non-empty string";if(o.counter!==void 0&&typeof o.counter!="string")return"proof.commit.counter must be a string when present";if(o.time!==void 0&&(typeof o.time!="number"||!Number.isFinite(o.time)||o.time<0))return"proof.commit.time must be a non-negative finite number when present";if(o.prevB64!==void 0&&typeof o.prevB64!="string")return"proof.commit.prevB64 must be a string when present";if(o.epochId!==void 0&&typeof o.epochId!="string")return"proof.commit.epochId must be a string when present";if(!Ge(e.signer))return"proof.signer is missing or not an object";let r=e.signer;if(typeof r.publicKeyB64!="string"||r.publicKeyB64.length===0)return"proof.signer.publicKeyB64 must be a non-empty string";if(typeof r.signatureB64!="string"||r.signatureB64.length===0)return"proof.signer.signatureB64 must be a non-empty string";if(!Ge(e.environment))return"proof.environment is missing or not an object";let i=e.environment;if(typeof i.enforcement!="string"||!cs.has(i.enforcement))return"proof.environment.enforcement must be one of: stub, hw-key, measured-tee";if(typeof i.measurement!="string"||i.measurement.length===0)return"proof.environment.measurement must be a non-empty string";if(i.attestation!==void 0){if(!Ge(i.attestation))return"proof.environment.attestation must be an object when present";let s=i.attestation;if(typeof s.format!="string"||s.format.length===0)return"proof.environment.attestation.format must be a non-empty string";if(typeof s.reportB64!="string"||s.reportB64.length===0)return"proof.environment.attestation.reportB64 must be a non-empty string"}return null}function ds(t,e){if(e.requireEnforcement!==void 0&&t.environment.enforcement!==e.requireEnforcement)return`enforcement tier "${t.environment.enforcement}" does not meet required tier "${e.requireEnforcement}"`;if(e.allowedMeasurements!==void 0&&e.allowedMeasurements.length>0&&!e.allowedMeasurements.includes(t.environment.measurement))return`measurement "${t.environment.measurement}" is not in the allowed set`;if(e.allowedPublicKeys!==void 0&&e.allowedPublicKeys.length>0&&!e.allowedPublicKeys.includes(t.signer.publicKeyB64))return"proof public key is not in the allowed set";if(e.requireAttestation===!0&&t.environment.attestation===void 0)return"policy requires attestation but proof has none";if(e.requireAttestationFormat!==void 0&&e.requireAttestationFormat.length>0){if(t.environment.attestation===void 0)return"policy requires attestation format but proof has no attestation";if(!e.requireAttestationFormat.includes(t.environment.attestation.format))return`attestation format "${t.environment.attestation.format}" is not in the required set`}if(e.minCounter!==void 0||e.maxCounter!==void 0){if(t.commit.counter===void 0)return"policy requires a counter but proof has none";let n;try{n=BigInt(t.commit.counter)}catch{return"could not parse proof counter value as integer"}if(e.minCounter!==void 0){let o;try{o=BigInt(e.minCounter)}catch{return"could not parse policy minCounter as integer"}if(n<o)return`counter ${t.commit.counter} is below minimum ${e.minCounter}`}if(e.maxCounter!==void 0){let o;try{o=BigInt(e.maxCounter)}catch{return"could not parse policy maxCounter as integer"}if(n>o)return`counter ${t.commit.counter} is above maximum ${e.maxCounter}`}}if(e.minTime!==void 0||e.maxTime!==void 0){if(t.commit.time===void 0)return"policy requires a time field but proof has none";if(e.minTime!==void 0&&t.commit.time<e.minTime)return`commit time ${t.commit.time} is before minimum ${e.minTime}`;if(e.maxTime!==void 0&&t.commit.time>e.maxTime)return`commit time ${t.commit.time} is after maximum ${e.maxTime}`}if(e.requireEpochId===!0&&(t.commit.epochId===void 0||t.commit.epochId.length===0))return"policy requires epochId but proof has none";if(e.requireActor===!0&&t.agency===void 0)return"policy requires actor (agency) but proof has none";if(e.allowedActorKeyIds!==void 0&&e.allowedActorKeyIds.length>0){if(t.agency===void 0)return"policy requires allowed actor key ID but proof has no agency";if(!e.allowedActorKeyIds.includes(t.agency.actor.keyId))return"actor key ID is not in the allowed set"}if(e.allowedActorProviders!==void 0&&e.allowedActorProviders.length>0){if(t.agency===void 0)return"policy requires allowed actor provider but proof has no agency";if(!e.allowedActorProviders.includes(t.agency.actor.provider))return`actor provider "${t.agency.actor.provider}" is not in the allowed set`}return e.requireSlot===!0&&t.slotAllocation===void 0?"policy requires slotAllocation (BitGraph causal slot) but proof has none":null}function hs(t){let e=t.agency,{actor:n,authorization:o}=e,r="format"in o&&o.format==="webauthn";if(typeof n.keyId!="string"||n.keyId.length===0)return"agency.actor.keyId must be a non-empty string";if(typeof n.publicKeyB64!="string"||n.publicKeyB64.length===0)return"agency.actor.publicKeyB64 must be a non-empty string";if(n.algorithm!=="ES256")return`agency.actor.algorithm must be "ES256", got "${String(n.algorithm)}"`;if(typeof n.provider!="string"||n.provider.length===0)return"agency.actor.provider must be a non-empty string";if(o.purpose!=="bitgraph/commit-authorize/v1")return`agency.authorization.purpose must be "bitgraph/commit-authorize/v1", got "${String(o.purpose)}"`;if(typeof o.signatureB64!="string"||o.signatureB64.length===0)return"agency.authorization.signatureB64 must be a non-empty string";let i;try{i=w.Buffer.from(n.publicKeyB64,"base64")}catch{return"agency.actor.publicKeyB64 is not valid base64"}if(Zt("sha256").update(i).digest("hex")!==n.keyId)return"agency: actor.keyId does not match SHA-256 of public key";if(o.actorKeyId!==n.keyId)return"agency: authorization.actorKeyId does not match actor.keyId";if(o.artifactHash!==t.artifact.digestB64){let c=e.batchContext;if(!c||!Array.isArray(c.batchDigests)||!c.batchDigests.includes(t.artifact.digestB64)||c.batchDigests[0]!==o.artifactHash)return"agency: authorization.artifactHash does not match proof.artifact.digestB64"}let a;try{a=w.Buffer.from(o.signatureB64,"base64")}catch{return"agency.authorization.signatureB64 is not valid base64"}try{if(r){let c=o;if(typeof c.clientDataJSON!="string"||!c.clientDataJSON)return"agency: WebAuthn authorization missing clientDataJSON";if(typeof c.authenticatorDataB64!="string"||!c.authenticatorDataB64)return"agency: WebAuthn authorization missing authenticatorDataB64";let u;try{u=JSON.parse(c.clientDataJSON)}catch{return"agency: clientDataJSON is not valid JSON"}if(u.type!=="webauthn.get")return`agency: clientDataJSON.type must be "webauthn.get", got "${u.type}"`;if(!u.challenge)return"agency: clientDataJSON missing challenge field";let d=u.challenge.replace(/-/g,"+").replace(/_/g,"/");for(;d.length%4;)d+="=";if(d!==o.challenge)return"agency: clientDataJSON challenge does not match authorization.challenge";let h=w.Buffer.from(c.authenticatorDataB64,"base64");if(h.length<37)return"agency: authenticatorData too short";let f=h[32];if(!(f&1))return"agency: authenticatorData UP flag not set";if(!(f&4))return"agency: authenticatorData UV flag not set";let l=Zt("sha256").update(w.Buffer.from(c.clientDataJSON,"utf8")).digest(),g=w.Buffer.concat([h,l]),m=Qt("SHA256");if(m.update(g),!m.verify({key:i,format:"der",type:"spki"},a))return"agency: WebAuthn P-256 signature verification failed"}else{let c={purpose:o.purpose,actorKeyId:o.actorKeyId,artifactHash:o.artifactHash,challenge:o.challenge,timestamp:o.timestamp};"protocolVersion"in o&&o.protocolVersion!==void 0&&(c.protocolVersion=o.protocolVersion);let u=w.Buffer.from(JSON.stringify(c,Object.keys(c).sort()),"utf8"),d=Qt("SHA256");if(d.update(u),!d.verify({key:i,format:"der",type:"spki"},a))return"agency: P-256 signature verification failed"}}catch(c){return`agency: P-256 signature verification error: ${c instanceof Error?c.message:String(c)}`}return null}async function fs(t){let e=t.slotAllocation;if(e.version!=="bitgraph/slot/1")return`slotAllocation.version must be "bitgraph/slot/1", got "${String(e.version)}"`;if(typeof e.nonceB64!="string"||e.nonceB64.length===0)return"slotAllocation.nonceB64 must be a non-empty string";if(typeof e.counter!="string"||e.counter.length===0)return"slotAllocation.counter must be a non-empty string";if(e.time!==void 0&&(typeof e.time!="number"||!Number.isFinite(e.time)||e.time<0))return"slotAllocation.time must be a non-negative finite number when present";if(typeof e.epochId!="string"||e.epochId.length===0)return"slotAllocation.epochId must be a non-empty string";if(typeof e.publicKeyB64!="string"||e.publicKeyB64.length===0)return"slotAllocation.publicKeyB64 must be a non-empty string";if(typeof e.signatureB64!="string"||e.signatureB64.length===0)return"slotAllocation.signatureB64 must be a non-empty string";let n={version:e.version,nonceB64:e.nonceB64,counter:e.counter,...e.time!==void 0?{time:e.time}:{},epochId:e.epochId,publicKeyB64:e.publicKeyB64,...e.chainId?{chainId:e.chainId}:{}},o=Be(n),r,i;try{r=De(e.signatureB64),i=De(e.publicKeyB64)}catch{return"slotAllocation contains invalid base64"}if(r.length!==64)return`slotAllocation.signatureB64 decodes to ${r.length} bytes; expected 64 (Ed25519)`;if(i.length!==32)return`slotAllocation.publicKeyB64 decodes to ${i.length} bytes; expected 32 (Ed25519)`;let s;try{s=await Vt(r,o,i)}catch(h){return`slotAllocation signature verification error: ${h instanceof Error?h.message:String(h)}`}if(!s)return"slotAllocation signature verification failed";let a=new Set(["digestB64","artifact","hashAlg","signatureB64"]),c=Object.keys(n);for(let h of c)if(a.has(h))return`slotAllocation body contains forbidden field '${h}' \u2014 causal independence violated`;if(typeof t.commit.slotHashB64!="string"||t.commit.slotHashB64.length===0)return"commit.slotHashB64 must be present when slotAllocation is present";let u=C(o),d;try{d=De(t.commit.slotHashB64)}catch{return"commit.slotHashB64 is not valid base64"}if(!lt(u,d))return"commit.slotHashB64 does not match SHA-256 of canonical slot body \u2014 slot binding broken";if(e.nonceB64!==t.commit.nonceB64)return"slotAllocation.nonceB64 does not match commit.nonceB64";if(typeof t.commit.slotCounter!="string"||t.commit.slotCounter.length===0)return"commit.slotCounter must be present when slotAllocation is present";if(t.commit.slotCounter!==e.counter)return"commit.slotCounter does not match slotAllocation.counter";if(t.commit.counter===void 0)return"commit.counter must be present for slot ordering verification";try{let h=BigInt(e.counter),f=BigInt(t.commit.counter);if(h>=f)return`slotAllocation.counter (${e.counter}) must be less than commit.counter (${t.commit.counter})`}catch{return"could not parse slot or commit counter as integer"}return e.publicKeyB64!==t.signer.publicKeyB64?"slotAllocation.publicKeyB64 does not match signer.publicKeyB64 \u2014 different enclave":t.commit.epochId!==void 0&&e.epochId!==t.commit.epochId?"slotAllocation.epochId does not match commit.epochId \u2014 different lifecycle":null}var tn=new Map;function ls(t){let e=`${t.prevEpochId}|${t.prevCounter}|${t.prevProofHashB64}`,n=C(new TextEncoder().encode(e));return w.Buffer.from(n).toString("base64")}function ps(t){let e=t.commit.epochLink;if(typeof e.prevEpochId!="string"||e.prevEpochId.length===0)return"epochLink.prevEpochId must be a non-empty string";if(typeof e.prevPublicKeyB64!="string"||e.prevPublicKeyB64.length===0)return"epochLink.prevPublicKeyB64 must be a non-empty string";if(typeof e.prevCounter!="string"||e.prevCounter.length===0)return"epochLink.prevCounter must be a non-empty string";if(typeof e.prevProofHashB64!="string"||e.prevProofHashB64.length===0)return"epochLink.prevProofHashB64 must be a non-empty string";if(typeof e.toEpochId!="string"||e.toEpochId.length===0)return"epochLink.toEpochId must be a non-empty string";if(typeof e.toPublicKeyB64!="string"||e.toPublicKeyB64.length===0)return"epochLink.toPublicKeyB64 must be a non-empty string";try{BigInt(e.prevCounter)}catch{return"epochLink.prevCounter is not a valid decimal string"}if(t.commit.epochId!==void 0&&e.toEpochId!==t.commit.epochId)return`epochLink.toEpochId "${e.toEpochId}" does not match proof commit.epochId "${t.commit.epochId}" \u2014 successor binding broken`;if(e.toPublicKeyB64!==t.signer.publicKeyB64)return"epochLink.toPublicKeyB64 does not match proof signer.publicKeyB64 \u2014 successor binding broken";if(e.prevEpochId===e.toEpochId)return"epochLink.prevEpochId equals toEpochId \u2014 epoch link must cross epoch boundary";if(e.prevPublicKeyB64===e.toPublicKeyB64)return"epochLink.prevPublicKeyB64 equals toPublicKeyB64 \u2014 epochs must have different keys";let n=ls(e),o=tn.get(n);if(o!==void 0){if(o!==e.toEpochId)return`FORK DETECTED: predecessor (epoch=${e.prevEpochId.slice(0,12)}..., counter=${e.prevCounter}) already consumed by epoch ${o.slice(0,12)}..., but this proof claims consumption by epoch ${e.toEpochId.slice(0,12)}... \u2014 single-successor invariant violated`}else tn.set(n,e.toEpochId);return null}function Le(){tn.clear()}function ms(t){return{valid:!1,reason:t}}function Ge(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function De(t){let e=w.Buffer.from(t,"base64");if(e.toString("base64")!==t)throw new Error(`invalid base64 string: "${t}"`);return new Uint8Array(e)}y();function pt(t){let e=t,n=e.signer,o=e.environment,r={version:e.version,artifact:e.artifact,commit:e.commit,publicKeyB64:n?.publicKeyB64,enforcement:o?.enforcement,measurement:o?.measurement};e.attribution&&(r.attribution=e.attribution),o?.attestation&&(r.attestationFormat=o.attestation.format);let i=Be(r),s=C(i);return Vo(s)}var jo=["proofHash","ethereum"];function on(t){let e=t,n=e;if(jo.some(r=>Object.prototype.hasOwnProperty.call(e,r))){n={};for(let r of Object.keys(e))jo.includes(r)||(n[r]=e[r])}let o=Be(n);return Vo(C(o))}function Vo(t){if(typeof w.Buffer<"u")return w.Buffer.from(t).toString("base64");let e="";for(let n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return btoa(e)}y();async function*Go(t,e){let n=new sn(t,e?.maxTotalBytes),o=e?.maxEntryCount??Number.POSITIVE_INFINITY,r=e?.maxMetadataEntryBytes??Number.POSITIVE_INFINITY,i=null,s=null,a=null,c=0,u=(d,h)=>{if(d>r)throw new Error(`tar: ${h} metadata entry of ${d} bytes exceeds the ${r}-byte cap`)};for(;;){let d=await n.readExact(512);if(d===null||ws(d))return;if(++c>o)throw new Error(`tar: archive exceeds the maximum of ${o} entries`);let h=ys(d),f=h.typeflag;if(f==="x"||f==="g"){u(h.size,"PAX");let B=await zo(n,h.size);await n.skip(mt(h.size));let S=xs(B);f==="x"?i=S:s=vs(s,S);continue}if(f==="L"){u(h.size,"GNU long-name");let B=await zo(n,h.size);await n.skip(mt(h.size)),a=Ee(Bs(B));continue}if(f==="K"){await n.skip(h.size+mt(h.size));continue}let l=h.name;s!==null&&s.has("path")&&(l=s.get("path")),a!==null&&(l=a),i!==null&&i.has("path")&&(l=i.get("path"));let g=h.size,m=i?.get("size")??s?.get("size");if(m!==void 0){let B=Number(m);if(!Number.isSafeInteger(B)||B<0)throw new Error("tar: invalid PAX size value");g=B}i=null,a=null;let v=f==="0"||f==="\0",b={remaining:g},A=gs(n,b);yield{path:l,size:g,kind:v?"file":"other",typeflag:f,body:A},b.remaining>0&&(await n.skip(b.remaining),b.remaining=0),await n.skip(mt(g))}}async function*gs(t,e){for(;e.remaining>0;){let n=await t.readSome(e.remaining);if(n===null)throw new Error("tar: truncated archive (unexpected end of stream inside entry body)");e.remaining-=n.length,yield n}}async function zo(t,e){if(e===0)return new Uint8Array(0);let n=await t.readExact(e);if(n===null)throw new Error("tar: truncated archive (unexpected end of stream)");return n}function ys(t){bs(t);let e=t[156],n=e===0?"\0":String.fromCharCode(e),o=Ee(rn(t,0,100));if(Ee(rn(t,257,6))==="ustar"){let s=Ee(rn(t,345,155));s.length>0&&(o=`${s}/${o}`)}let i=qo(t.subarray(124,136));return{name:o,size:i,typeflag:n}}function rn(t,e,n){let o=t.subarray(e,e+n),r=o.indexOf(0);return r===-1&&(r=o.length),o.subarray(0,r)}function qo(t){if(t.length>0&&(t[0]&128)!==0){let o=0n;for(let r=0;r<t.length;r++){let i=r===0?t[0]&127:t[r];o=o<<8n|BigInt(i)}if(o>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("tar: numeric field exceeds the supported range");return Number(o)}let e=Ee(t).trim().replace(/\0+$/,"").trim();if(e.length===0)return 0;let n=Number.parseInt(e,8);if(!Number.isSafeInteger(n)||n<0)throw new Error(`tar: invalid octal numeric field: "${e}"`);return n}function bs(t){let e=qo(t.subarray(148,156)),n=0;for(let o=0;o<512;o++)n+=o>=148&&o<156?32:t[o];if(n!==e)throw new Error("tar: header checksum mismatch (corrupt or not a tar archive)")}function ws(t){for(let e=0;e<t.length;e++)if(t[e]!==0)return!1;return!0}function xs(t){let e=new Map,n=0;for(;n<t.length;){let o=n;for(;o<t.length&&t[o]!==32;)o++;if(o>=t.length)throw new Error("tar: malformed PAX record (no length delimiter)");let r=Number(Ee(t.subarray(n,o)));if(!Number.isInteger(r)||r<=0||n+r>t.length)throw new Error("tar: malformed PAX record (bad length)");let i=t.subarray(o+1,n+r);if(i.length===0||i[i.length-1]!==10)throw new Error("tar: malformed PAX record (missing newline)");let s=Ee(i.subarray(0,i.length-1)),a=s.indexOf("=");if(a===-1)throw new Error("tar: malformed PAX record (missing '=')");e.set(s.slice(0,a),s.slice(a+1)),n+=r}return e}function vs(t,e){let n=new Map(t??[]);for(let[o,r]of e)n.set(o,r);return n}function Ee(t){return new TextDecoder("utf-8").decode(t)}function Bs(t){let e=t.length;for(;e>0&&t[e-1]===0;)e--;return t.subarray(0,e)}var sn=class{iter;chunks=[];head=0;available=0;ended=!1;totalPulled=0;maxTotalBytes;constructor(e,n){this.iter=e[Symbol.asyncIterator](),this.maxTotalBytes=n??Number.POSITIVE_INFINITY}async fill(){if(this.ended)return!1;let e=await this.iter.next();if(e.done===!0)return this.ended=!0,!1;let n=e.value;if(n.length>0){if(this.totalPulled+=n.length,this.totalPulled>this.maxTotalBytes)throw new Error(`tar: archive exceeds the maximum decompressed size of ${this.maxTotalBytes} bytes`);this.chunks.push(n),this.available+=n.length}return!0}async readExact(e){for(;this.available<e;)if(!await this.fill()){if(this.available===0)return null;throw new Error("tar: truncated archive (unexpected end of stream)")}return this.take(e)}async readSome(e){for(;this.available===0;)if(!await this.fill())return null;let n=this.chunks[0],o=Math.min(e,n.length-this.head),r=n.subarray(this.head,this.head+o);return this.advance(o,n),r}async skip(e){let n=e;for(;n>0;){let o=await this.readSome(n);if(o===null)throw new Error("tar: truncated archive (unexpected end of stream)");n-=o.length}}take(e){let n=new Uint8Array(e),o=0;for(;o<e;){let r=this.chunks[0],i=Math.min(e-o,r.length-this.head);n.set(r.subarray(this.head,this.head+i),o),o+=i,this.advance(i,r)}return n}advance(e,n){this.head+=e,this.available-=e,this.head===n.length&&(this.chunks.shift(),this.head=0)}};function mt(t){return(512-t%512)%512}y();var Pu=new Uint8Array([0]);function Wo(t){let e=Array.from(t,o=>({pathBytes:Es(o.path),entryDigest:o.entryDigest}));e.sort((o,r)=>ks(o.pathBytes,r.pathBytes));let n=C.create();for(let o of e)n.update(o.entryDigest);return w.Buffer.from(n.digest()).toString("base64")}function Es(t){if(t.includes("\0"))throw new TypeError("bitgraph-audit: bundle entry paths must not contain NUL bytes");return new TextEncoder().encode(t)}function ks(t,e){let n=Math.min(t.length,e.length);for(let o=0;o<n;o++){let r=t[o]-e[o];if(r!==0)return r}return t.length-e.length}var Jo=8*1024*1024,Qo={maxTotalBytes:2*1024*1024*1024,maxEntryCount:1e6,maxMetadataEntryBytes:8*1024*1024},Xo=new Uint8Array([0]),Yo="manifest.json",an="bitgraph-bundle/1",As="bitgraph-anchor-witness/1";var er=new WeakMap;async function cn(t,e){let n=[],o=0,r=0,i=[],s=new Map,a=Array.from(t).sort((u,d)=>u.path<d.path?-1:u.path>d.path?1:0);for(let u of a){r++;let d=nr(u.path);if(d.unsafe){o++,n.push({code:"unsafe-path",path:u.path,message:`entry skipped: ${d.reason}`});continue}let h=await $s(d.path,void 0,void 0,tr(u.open()));i.push(Ss(d.path,h)),s.set(d.path,u)}let c=Hs({bundlePath:e?.label??"",container:"memory",scanned:i,strippedRootPrefix:void 0,findings:n,entriesScanned:r,skippedUnsafePaths:o});return er.set(c,s),c}async function*tr(t){let e=await Promise.resolve(t);if(e instanceof Uint8Array){yield e;return}for await(let n of t)yield n}async function Is(t){let e=[],n=0;for await(let o of tr(t.open()))e.push(o),n+=o.length;return dn(e,n)}function Hs(t){let{bundlePath:e,container:n,scanned:o,strippedRootPrefix:r,findings:i,entriesScanned:s,skippedUnsafePaths:a}=t,c=new Map;for(let k of o){let I=k.rawPath,H=k.entryDigestFull;r!==void 0&&(I=k.rawPath.slice(r.length+1),H=k.entryDigestStripped),c.has(I)&&i.push({code:"duplicate-path",path:I,message:"multiple archive entries normalized to the same path; the last entry wins"}),c.set(I,{path:I,sha256Hex:k.sha256Hex,byteLength:k.byteLength,entryDigest:H,...k.json!==void 0?{json:k.json}:{}})}let u=Array.from(c.values()),d=Wo(u.filter(k=>k.path!==Yo).map(k=>({path:k.path,entryDigest:k.entryDigest}))),h=[],f=new Map,l=[],g=[],m=new Map,v,b=0,A=0,B=0;for(let k of u){if(k.path===Yo){v=Ls(k,d,i);continue}let I=k.json;if(I!==void 0&&Ts(I)){let H=I.version;if(H==="bitgraph/1"){b++;let D=Rs(k,I,f,h,i);D==="exact-duplicate"&&A++,D==="semantic-duplicate"&&B++;continue}l.push({code:"unsupported-version",path:k.path,version:H,fileSha256Hex:k.sha256Hex}),i.push({code:"unsupported-version",path:k.path,message:`proof-shaped file rejected: version "${H}" is not "bitgraph/1"`,details:{version:H}}),Zo(k,m);continue}if(I!==void 0&&I.version===As){g.push({path:k.path,fileSha256Hex:k.sha256Hex,witness:I});continue}Zo(k,m)}for(let k of h){let I=Ds(k.proof.artifact);if(I===null)continue;let H=m.get(I);H!==void 0&&H.matchedProofHashes.push(k.proofHash)}let S=Array.from(m.values()),R={observed:h.length,proofFiles:b,exactDuplicates:A,semanticDuplicates:B,unsupportedVersion:l.length,artifacts:S.length,witnesses:g.length,skippedUnsafePaths:a};return{bundlePath:e,container:n,...r!==void 0?{strippedRootPrefix:r}:{},entriesScanned:s,proofs:h,unsupportedVersions:l,artifacts:S,witnesses:g,...v!==void 0?{manifest:v}:{},computedContentsHashB64:d,findings:i,counts:R}}async function*un(t){let e=t.artifacts.filter(s=>s.matchedProofHashes.length>0);if(e.length===0)return;if(t.container==="memory"){let s=er.get(t);if(s===void 0)return;for(let a of e)for(let c of a.paths){let u=s.get(c);if(u===void 0)continue;let d;try{d=await Is(u)}catch{continue}if(gt(C(d))===a.sha256Hex){yield{sha256Hex:a.sha256Hex,path:c,bytes:d};break}}return}if(t.container==="directory"){for(let s of e)for(let a of s.paths){let c;try{c=new Uint8Array(await Uo(Fo(t.bundlePath,...a.split("/"))))}catch{continue}if(gt(C(c))===s.sha256Hex){yield{sha256Hex:s.sha256Hex,path:a,bytes:c};break}}return}let n=new Map;for(let s of e)for(let a of s.paths)n.set(a,s);let o=new Set,{stream:r,close:i}=Cs(t.bundlePath,t.container);try{for await(let s of Go(r,Qo)){if(o.size===e.length)break;if(s.kind!=="file")continue;let a=nr(s.path);if(a.unsafe)continue;let c=a.path;if(t.strippedRootPrefix!==void 0){if(!c.startsWith(`${t.strippedRootPrefix}/`))continue;c=c.slice(t.strippedRootPrefix.length+1)}let u=n.get(c);if(u===void 0||o.has(u.sha256Hex))continue;let d=[],h=0;for await(let l of s.body)d.push(l.slice()),h+=l.length;let f=dn(d,h);gt(C(f))===u.sha256Hex&&(o.add(u.sha256Hex),yield{sha256Hex:u.sha256Hex,path:c,bytes:f})}}finally{i()}}function Cs(t,e){let n=No(t);if(e==="tar-gz"){let o=Oo();return n.pipe(o),n.on("error",r=>o.destroy(r)),{stream:o,close:()=>{o.destroy(),n.destroy()}}}return{stream:n,close:()=>n.destroy()}}async function $s(t,e,n,o){let r=new TextEncoder,i=C.create(),s=C.create();s.update(r.encode(t)),s.update(Xo);let a=e===void 0?void 0:C.create();a!==void 0&&(a.update(r.encode(e)),a.update(Xo));let c=n===void 0||n<=Jo,u=[],d=0;for await(let h of o)i.update(h),s.update(h),a?.update(h),d+=h.length,c&&(d>Jo?(u.length=0,c=!1):u.push(h.slice()));return{sha256Hex:gt(i.digest()),byteLength:d,entryDigestFull:s.digest(),...a!==void 0?{entryDigestStripped:a.digest()}:{},...c?{buffered:dn(u,d)}:{}}}function Ss(t,e){let n=e.buffered===void 0?void 0:Ps(e.buffered);return{rawPath:t,sha256Hex:e.sha256Hex,byteLength:e.byteLength,entryDigestFull:e.entryDigestFull,...e.entryDigestStripped!==void 0?{entryDigestStripped:e.entryDigestStripped}:{},...n!==void 0?{json:n}:{}}}function Ps(t){let e=t;e.length>=3&&e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3));let n;try{n=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch{return}let o;try{o=JSON.parse(n)}catch{return}if(!(o===null||typeof o!="object"||Array.isArray(o)))return o}function nr(t){if(t.includes("\0"))return{path:t,unsafe:!0,reason:"path contains a NUL byte"};let e=t.startsWith("/"),n=t.split("/").filter(r=>r!==""&&r!=="."),o=n.join("/");return e?{path:o,unsafe:!0,reason:"absolute path"}:n.some(r=>r==="..")?{path:o,unsafe:!0,reason:"path escapes the bundle root"}:o===""?{path:o,unsafe:!0,reason:"empty path"}:{path:o,unsafe:!1}}function F(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Ts(t){return F(t)?typeof t.version=="string"&&F(t.artifact)&&F(t.commit)&&F(t.signer):!1}function Rs(t,e,n,o,r){let i=pt(e),s={path:t.path,fileSha256Hex:t.sha256Hex,byteLength:t.byteLength},a=Ms(e,i);a==="mismatch"&&r.push({code:"proofhash-mismatch",path:t.path,message:"embedded proofHash does not match the computed canonical proof hash",details:{embedded:e.proofHash,computed:i}});let c=n.get(i);if(c!==void 0){let v=c.sources.some(b=>b.fileSha256Hex===s.fileSha256Hex);return c.sources.push(s),a==="mismatch"&&(c.embeddedProofHash="mismatch"),r.push({code:v?"exact-duplicate":"semantic-duplicate",path:t.path,message:v?"byte-identical copy of an already observed proof":"different byte encoding of an already observed proof (same canonical identity)",details:{proofHash:i,firstObservedAt:c.sources[0].path}}),v?"exact-duplicate":"semantic-duplicate"}let u=F(e.commit)?e.commit:{},d=F(e.signer)?e.signer:{},h=F(e.environment)?e.environment:{},f=K(u.counter),l=K(u.epochId),g=K(u.chainId),m={proofHash:i,chainHash:on(e),proof:e,sources:[s],version:"bitgraph/1",...f!==void 0?{counter:f}:{},...K(u.slotCounter)!==void 0?{slotCounter:K(u.slotCounter)}:{},...K(u.prevB64)!==void 0?{prevB64:K(u.prevB64)}:{},...l!==void 0?{epochId:l}:{},chainId:g!==void 0&&g.length>0?g:"global",...K(d.publicKeyB64)!==void 0?{publicKeyB64:K(d.publicKeyB64)}:{},...K(h.measurement)!==void 0?{measurement:K(h.measurement)}:{},...K(h.enforcement)!==void 0?{enforcement:K(h.enforcement)}:{},hasSlotAllocation:F(e.slotAllocation),hasAttestation:F(h.attestation),hasAgency:F(e.agency),hasEpochLink:F(u.epochLink),embeddedProofHash:a,chainless:f===void 0&&l===void 0};return n.set(i,m),o.push(m),"new"}function Ms(t,e){let n=t.proofHash;return n===void 0?"absent":typeof n=="string"&&n===e?"match":"mismatch"}function K(t){return typeof t=="string"?t:void 0}function Zo(t,e){let n=e.get(t.sha256Hex);if(n!==void 0){n.paths.push(t.path);return}e.set(t.sha256Hex,{sha256Hex:t.sha256Hex,sha256B64:w.Buffer.from(t.sha256Hex,"hex").toString("base64"),byteLength:t.byteLength,paths:[t.path],matchedProofHashes:[]})}function Ds(t){if(!F(t))return null;let e=t.digestB64;if(typeof e!="string"||e.length===0)return null;let n=w.Buffer.from(e,"base64");return n.toString("base64")!==e||n.length!==32?null:n.toString("hex")}function Ls(t,e,n){if(t.json===void 0)return n.push({code:"manifest-unparseable",path:t.path,message:"root manifest.json did not parse as a single JSON object; proceeding as if no manifest were present"}),{path:t.path,parsed:!1,recognized:!1,problems:[]};let o=t.json,r=o.version;if(r!==an)return n.push({code:"manifest-unrecognized-version",path:t.path,message:`manifest version ${JSON.stringify(r)} is not "${an}"; the manifest was not interpreted`,...typeof r=="string"?{details:{version:r}}:{}}),{path:t.path,parsed:!0,...typeof r=="string"?{version:r}:{},recognized:!1,problems:[]};let i=Ns(o);for(let c of i)n.push({code:"manifest-field-invalid",path:t.path,message:c});let s={path:t.path,parsed:!0,version:an,recognized:!0,manifest:o,problems:i},a=o.contentsHashB64;if(typeof a=="string"&&a.length>0){let c=a===e;s.contentsHash={declaredB64:a,computedB64:e,match:c},c||n.push({code:"manifest-contents-hash-mismatch",path:t.path,message:"manifest contentsHashB64 does not match the computed contents hash; the bundle held is not byte-for-byte the bundle the manifest describes. Advisory: this does not fail any proof.",details:{declared:a,computed:e}})}return s}function Ns(t){let e=[],n=o=>Array.isArray(o)&&o.every(r=>typeof r=="string");if(t.epochIds!==void 0&&!n(t.epochIds)&&e.push("manifest.epochIds must be an array of strings when present"),t.chainIds!==void 0&&!n(t.chainIds)&&e.push("manifest.chainIds must be an array of strings when present"),t.proofCount!==void 0&&(typeof t.proofCount!="number"||!Number.isInteger(t.proofCount)||t.proofCount<0)&&e.push("manifest.proofCount must be a non-negative integer when present"),t.counterRanges!==void 0&&(Array.isArray(t.counterRanges)&&t.counterRanges.every(r=>F(r)&&typeof r.epochId=="string"&&typeof r.chainId=="string"&&typeof r.min=="string"&&typeof r.max=="string")||e.push("manifest.counterRanges must be an array of { epochId, chainId, min, max } string fields when present")),t.generatedAt!==void 0&&typeof t.generatedAt!="string"&&e.push("manifest.generatedAt must be a string when present"),t.contentsHashB64!==void 0){let o=t.contentsHashB64,r=typeof o=="string"&&o.length>0;if(r){let i=w.Buffer.from(o,"base64");r=i.toString("base64")===o&&i.length===32}r||e.push("manifest.contentsHashB64 must be standard base64 of 32 bytes when present")}return t.artifactsIncluded!==void 0&&typeof t.artifactsIncluded!="boolean"&&e.push("manifest.artifactsIncluded must be a boolean when present"),t.openEpochs!==void 0&&(Array.isArray(t.openEpochs)&&t.openEpochs.every(r=>F(r)&&typeof r.epochId=="string"&&typeof r.counterAtSnapshot=="string")||e.push("manifest.openEpochs must be an array of { epochId, counterAtSnapshot } string fields when present")),e}function gt(t){return w.Buffer.from(t).toString("hex")}function dn(t,e){let n=new Uint8Array(e),o=0;for(let r of t)n.set(r,o),o+=r.length;return n}y();async function hn(t,e){Le();let n=e?.trustAnchors,o=new Map(t.proofs.map(u=>[u.proofHash,u])),r=new Map;for(let u of t.artifacts){if(u.matchedProofHashes.length===0)continue;let d=u.matchedProofHashes.map(h=>o.get(h)).filter(h=>h!==void 0);r.set(u.sha256Hex,d)}for await(let u of un(t)){let d=r.get(u.sha256Hex)??[];for(let h of d){if(h.verification!==void 0)continue;let f=await nn({proof:h.proof,bytes:u.bytes,...n!==void 0?{trustAnchors:n}:{}}),l={tier:"full",status:f.valid?"verified":"failed",...f.reason!==void 0?{reason:f.reason}:{},artifactPath:u.path};h.verification=l}}for(let u of t.proofs){if(u.verification!==void 0)continue;let d=await qe({proof:u.proof,...n!==void 0?{trustAnchors:n}:{}}),h={tier:"integrity",status:d.valid?"artifact-unavailable":"failed",...d.reason!==void 0?{reason:d.reason}:{}};u.verification=h}let i=0,s=0,a=0,c=0;for(let u of t.proofs){let d=u.verification?.status;d==="verified"?i++:d==="failed"?s++:d==="artifact-unavailable"&&a++,u.chainless&&c++}return{total:t.proofs.length,verified:i,failed:s,artifactUnavailable:a,chainless:c}}y();y();var or=new WeakMap;async function oe(t){let e=t.verification?.status;if(e==="verified"||e==="artifact-unavailable")return!0;let n=or.get(t);if(n!==void 0)return n;Le();let o=!1;try{o=(await qe({proof:t.proof})).valid}catch{o=!1}return Le(),or.set(t,o),o}function $(t){if(!(t===void 0||t.length===0||!/^[0-9]+$/.test(t)))return BigInt(t)}function Y(t,e){let n=$(t.counter),o=$(e.counter);return n!==void 0&&o!==void 0&&n!==o?n<o?-1:1:n!==void 0&&o===void 0?-1:n===void 0&&o!==void 0?1:t.proofHash<e.proofHash?-1:t.proofHash>e.proofHash?1:0}function O(t,e,n){let o=t.get(e);o===void 0?t.set(e,[n]):o.push(n)}async function ln(t){let e=[],n=[],o=new Map;for(let u of t.proofs){if(u.chainless){e.push(u.proofHash);continue}if(u.publicKeyB64===void 0){n.push(u.proofHash);continue}let d={publicKeyB64:u.publicKeyB64,...u.epochId!==void 0?{epochId:u.epochId}:{},chainId:u.chainId},h=JSON.stringify([d.publicKeyB64,d.epochId??null,d.chainId]),f=o.get(h);f===void 0?o.set(h,{key:d,members:[u]}):f.members.push(u)}let r=[...o.values()].sort((u,d)=>Us(u.key,d.key)),i=[],s=new Set,a=new Map;for(let u of r){let d=Fs(u.key,u.members,s);i.push(d);for(let h of d.memberProofHashes)a.set(h,u.key)}let c=await Ks(t,i,s,a);return{partitions:i,unchainedProofHashes:e,unpartitionedProofHashes:n,epochRelationships:c}}function Us(t,e){if(t.chainId!==e.chainId)return t.chainId<e.chainId?-1:1;let n=t.epochId??"",o=e.epochId??"";return n!==o?n<o?-1:1:t.publicKeyB64!==e.publicKeyB64?t.publicKeyB64<e.publicKeyB64?-1:1:0}function Fs(t,e,n){let o=new Map(e.map(f=>[f.chainHash,f])),r=new Map,i=new Set,s=new Map;for(let f of e)s.set(f.proofHash,f.proofHash);let a=f=>{let l=f;for(;s.get(l)!==l;)l=s.get(l);let g=f;for(;g!==l;){let m=s.get(g);s.set(g,l),g=m}return l},c=(f,l)=>{let g=a(f),m=a(l);g!==m&&s.set(g,m)};for(let f of e){if(f.prevB64===void 0)continue;let l=o.get(f.prevB64);l===void 0||l.proofHash===f.proofHash||(i.add(f.proofHash),O(r,l.proofHash,f),n.add(l.proofHash),c(l.proofHash,f.proofHash))}let u=new Map;for(let f of e)O(u,a(f.proofHash),f);let d=[];for(let f of u.values())d.push(Os(f,r,i));d.sort(_s);let h=[...e].sort(Y).map(f=>f.proofHash);return{key:t,memberProofHashes:h,components:d}}function Os(t,e,n){let o=[...t].sort(Y),r=o.filter(f=>f.prevB64===void 0),i=o.filter(f=>f.prevB64!==void 0&&!n.has(f.proofHash)),s=o.filter(f=>(e.get(f.proofHash)??[]).length===0),a=new Set,c=[],u=f=>{let l=[f];for(;l.length>0;){let g=l.pop();if(a.has(g))continue;a.add(g),c.push(g);let m=[...e.get(g)??[]].sort(Y);for(let v=m.length-1;v>=0;v--)l.push(m[v].proofHash)}};for(let f of[...r,...i])u(f.proofHash);for(let f of o)a.has(f.proofHash)||u(f.proofHash);let d,h;for(let f of t)for(let l of[f.counter,f.slotCounter]){let g=$(l);g!==void 0&&((d===void 0||g<d)&&(d=g),(h===void 0||g>h)&&(h=g))}return{memberProofHashes:c,genesisProofHashes:r.map(f=>f.proofHash),brokenLinkProofHashes:i.map(f=>f.proofHash),terminalProofHashes:s.map(f=>f.proofHash),hasCounterEvidence:d!==void 0,...d!==void 0&&h!==void 0?{positionRange:{min:String(d),max:String(h)}}:{}}}function _s(t,e){let n=t.positionRange?.min,o=e.positionRange?.min;if(n!==void 0&&o!==void 0&&n!==o)return BigInt(n)<BigInt(o)?-1:1;if(n!==void 0&&o===void 0)return-1;if(n===void 0&&o!==void 0)return 1;let r=t.memberProofHashes[0]??"",i=e.memberProofHashes[0]??"";return r<i?-1:r>i?1:0}async function Ks(t,e,n,o){let r=new Map;for(let f of e){let l=f.key.epochId;if(l===void 0)continue;let g=r.get(l);g===void 0&&(g={chainIds:new Set,publicKeys:new Set,proofCount:0},r.set(l,g)),g.chainIds.add(f.key.chainId),g.publicKeys.add(f.key.publicKeyB64),g.proofCount+=f.memberProofHashes.length}let i=new Map(t.proofs.map(f=>[f.chainHash,f])),s=[];for(let f of t.proofs){if(!f.hasEpochLink)continue;let l=js(f);l!==null&&s.push(await Vs(l,f,i,r,n,o))}let a=Gs(s),c=new Set,u=new Map,d=new Map;for(let f of s)f.hardEdge&&(c.add(f.fromEpochId),c.add(f.toEpochId),fn(u,f.toEpochId,f.fromEpochId),fn(d,f.fromEpochId,f.toEpochId));return{epochs:[...r.entries()].sort(([f],[l])=>f<l?-1:f>l?1:0).map(([f,l])=>({epochId:f,chainIds:[...l.chainIds].sort(),publicKeysB64:[...l.publicKeys].sort(),proofCount:l.proofCount,ordering:c.has(f)?"linked":"observed-but-unordered",linkedPredecessorEpochIds:[...u.get(f)??[]].sort(),linkedSuccessorEpochIds:[...d.get(f)??[]].sort()})),edges:s,orderedPairs:a}}function js(t){let e=t.proof.commit;if(e===null||typeof e!="object")return null;let n=e.epochLink;if(n===null||typeof n!="object"||Array.isArray(n))return null;let o=n,r=["prevEpochId","prevPublicKeyB64","prevCounter","prevProofHashB64","toEpochId","toPublicKeyB64"],i={};for(let s of r){let a=o[s];if(typeof a!="string"||a.length===0)return null;i[s]=a}return i}async function Vs(t,e,n,o,r,i){let s=await oe(e),a=n.get(t.prevProofHashB64);if(a===void 0){let f=o.has(t.prevEpochId);return{fromEpochId:t.prevEpochId,toEpochId:t.toEpochId,viaProofHash:e.proofHash,link:t,resolution:f?"terminal-missing":"dangling",viaProofValid:s,hardEdge:!1}}let c=[];a.epochId!==t.prevEpochId&&c.push(`the referenced proof's epochId (${a.epochId??"absent"}) does not match epochLink.prevEpochId (${t.prevEpochId})`),a.publicKeyB64!==t.prevPublicKeyB64&&c.push("the referenced proof's signer key does not match epochLink.prevPublicKeyB64"),zs(a.counter,t.prevCounter)||c.push(`the referenced proof's counter (${a.counter??"absent"}) does not match epochLink.prevCounter (${t.prevCounter})`);let u=await oe(a),d=c.length===0,h=i.has(a.proofHash);return{fromEpochId:t.prevEpochId,toEpochId:t.toEpochId,viaProofHash:e.proofHash,link:t,resolution:"matched",predecessorProofHash:a.proofHash,metadataConsistent:d,...d?{}:{inconsistencies:c},...h?{referencedProofIsTerminal:!r.has(a.proofHash)}:{},viaProofValid:s,predecessorValid:u,hardEdge:d&&s&&u}}function zs(t,e){if(t===void 0)return!1;if(t===e)return!0;let n=$(t),o=$(e);return n!==void 0&&o!==void 0&&n===o}function Gs(t){let e=new Map,n=new Set;for(let i of t)i.hardEdge&&(fn(e,i.fromEpochId,i.toEpochId),n.add(i.fromEpochId),n.add(i.toEpochId));let o=new Set;for(let i of n){let s=new Set,a=[...e.get(i)??[]];for(;a.length>0;){let c=a.pop();if(!s.has(c)){s.add(c);for(let u of e.get(c)??[])a.push(u)}}for(let c of s)c!==i&&o.add(`${i}\0${c}`)}let r=[];for(let i of o){let[s,a]=i.split("\0");o.has(`${a}\0${s}`)||r.push({beforeEpochId:s,afterEpochId:a})}return r.sort((i,s)=>i.beforeEpochId!==s.beforeEpochId?i.beforeEpochId<s.beforeEpochId?-1:1:i.afterEpochId<s.afterEpochId?-1:i.afterEpochId>s.afterEpochId?1:0),r}function fn(t,e,n){let o=t.get(e);o===void 0?t.set(e,new Set([n])):o.add(n)}y();var qs=1e4;async function pn(t,e){let n=[],o=[],r=[],i=new Map(t.proofs.map(c=>[c.proofHash,c])),s=new Map(t.proofs.map(c=>[c.chainHash,c])),a=new Map;for(let c of e.partitions)for(let u of c.memberProofHashes)a.set(u,c.key);for(let c of e.partitions){let u=c.memberProofHashes.map(d=>i.get(d));Ws(c,u,n),await rr(c,u,"counter",n,o),await rr(c,u,"slot",n,o),await Js(c,u,n,o),await Xs(c,u,s,n,o),Ys(c,u,s,a,n,r),await Qs(c,u,n,o),ea(c,u,n)}return await ta(e.epochRelationships.edges,i,n,o),{anomalies:n,divergences:o,boundaryEntryPoints:r}}function Ws(t,e,n){let o=new Set;for(let h of e){let f=$(h.counter);f!==void 0&&o.add(f);let l=$(h.slotCounter);l!==void 0&&o.add(l)}if(o.size<2)return;let r=[...o].sort((h,f)=>h<f?-1:h>f?1:0),i=[],s=[],a=0n;for(let h=1;h<r.length;h++){let f=r[h-1]+1n,l=r[h]-1n;if(!(f>l)){i.push({start:String(f),end:String(l)}),a+=l-f+1n;for(let g=f;g<=l&&s.length<qs;g++)s.push(String(g))}}if(i.length===0)return;let c={count:String(a),ranges:i,positions:s,truncated:a>BigInt(s.length)},u=String(r[0]),d=String(r[r.length-1]);n.push({code:"unexplained-counter-positions",partition:t.key,proofHashes:[],message:`${a} counter position${a===1n?"":"s"} within the observed range [${u}, ${d}] of this partition ${a===1n?"is":"are"} neither a commit position nor a referenced slot position in the supplied bundle. Such ${a===1n?"a position":"positions"} may mean a proof is absent from the bundle, or a slot that was allocated but never committed (a routine, benign occurrence); this offline audit cannot distinguish the two. It does not, by itself, establish that the authority failed to create or withheld any proof.`,details:c})}async function rr(t,e,n,o,r){let i=new Map;for(let s of e){let a=n==="counter"?s.counter:s.slotCounter;if(a===void 0)continue;let c=$(a);O(i,c!==void 0?String(c):`raw:${a}`,s)}for(let[s,a]of mn(i)){if(a.length<2)continue;let{parties:c,context:u}=await yt(a);if(c.length<2)continue;let d=s.startsWith("raw:")?s.slice(4):s,h=n==="counter"?"counter-collision":"slot-collision";o.push({code:h,partition:t.key,proofHashes:a.map(f=>f.proofHash),message:n==="counter"?`${c.length} distinct valid proofs claim commit counter ${d} in one partition. The audit does not choose between them; all parties are preserved for adjudication.`:`${c.length} distinct valid proofs reference slot counter ${d} in one partition. A slot position is consumed exactly once; all parties are preserved for adjudication.`,details:{position:d,validParties:c.map(f=>f.proofHash),invalidObserved:u.map(f=>f.proofHash)}}),r.push({kind:h,partition:t.key,contested:n==="counter"?{counter:d}:{slotCounter:d},parties:c.map(Z),invalidContext:u.map(Z),explanation:n==="counter"?`Two or more independently valid proof objects claim commit counter ${d} in the same signer, epoch, and chain partition. A commit counter position can be consumed only once, so at most one of these can belong to the authoritative sequence. The audit tool does not choose between them; every party and its predecessor relationship is preserved for adjudication.`:`Two or more independently valid proof objects reference slot counter ${d} in the same signer, epoch, and chain partition. A slot position is allocated once and consumed by one commit, so at most one of these can belong to the authoritative sequence. The audit tool does not choose between them.`})}}async function Js(t,e,n,o){let r=new Map,i=new Map;for(let a of e){let c=$(a.counter);c!==void 0&&O(r,String(c),a);let u=$(a.slotCounter);u!==void 0&&O(i,String(u),a)}let s=[...r.keys()].filter(a=>i.has(a)).sort((a,c)=>BigInt(a)<BigInt(c)?-1:BigInt(a)>BigInt(c)?1:0);for(let a of s){let c=r.get(a),u=i.get(a),d=[];for(let b of c)await oe(b)&&d.push(b);let h=[];for(let b of u)await oe(b)&&h.push(b);if(!d.some(b=>h.some(A=>A.proofHash!==b.proofHash)))continue;let l=new Map;for(let b of[...d,...h])l.set(b.proofHash,b);let g=[...l.values()],m=new Map;for(let b of[...c,...u])m.set(b.proofHash,b);let v=[...m.values()].filter(b=>!l.has(b.proofHash));n.push({code:"cross-kind-position-reuse",partition:t.key,proofHashes:[...m.keys()],message:`Counter position ${a} is committed by one proof and reserved as a slot by a different proof in the same partition. A single causal position is consumed once, as a slot or as a commit, never both across distinct proofs. The audit does not choose between them; all parties are preserved for adjudication.`,details:{position:a,commitParties:d.map(b=>b.proofHash),slotParties:h.map(b=>b.proofHash),validParties:g.map(b=>b.proofHash),invalidObserved:v.map(b=>b.proofHash)}}),o.push({kind:"cross-kind-position-reuse",partition:t.key,contested:{position:a},parties:g.map(Z),invalidContext:v.map(Z),explanation:`Two or more independently valid proof objects allocate counter position ${a} in the same signer, epoch, and chain partition through different roles: at least one commits at it and at least one reserves it as a slot. Each position in a chain is consumed exactly once, so at most one of these allocations can belong to the authoritative sequence. This pattern only arises through enclave malfunction, replay, or compromise. The audit tool does not choose between them; every party is preserved for adjudication.`})}}async function Xs(t,e,n,o,r){let i=new Map;for(let s of e)s.prevB64!==void 0&&O(i,s.prevB64,s);for(let[s,a]of mn(i)){if(a.length<2)continue;let{parties:c,context:u}=await yt(a);if(c.length<2)continue;let d=n.has(s);o.push({code:"predecessor-reuse",partition:t.key,proofHashes:a.map(h=>h.proofHash),message:`${c.length} distinct valid proofs claim the same predecessor hash: a detectable fork. All branches are preserved; the audit does not choose between them.`,details:{prevB64:s,predecessorObserved:d,validParties:c.map(h=>h.proofHash),invalidObserved:u.map(h=>h.proofHash)}}),r.push({kind:"predecessor-reuse",partition:t.key,contested:{prevB64:s},parties:c.map(Z),invalidContext:u.map(Z),explanation:`Two or more independently valid proof objects name the same predecessor proof in their prevB64 hash link. Each proof has exactly one successor in an intact chain, so this is a fork: the history diverges into multiple branches at that predecessor${d?", which is itself observed in the bundle":", which is absent from the bundle"}. All branches are shown; the audit tool does not select one.`})}}function Ys(t,e,n,o,r,i){let s=new Set(e.map(c=>c.chainHash)),a;for(let c of e){let u=$(c.counter);u!==void 0&&(a===void 0||u<a)&&(a=u)}for(let c of[...e].sort(Y)){if(c.prevB64===void 0||s.has(c.prevB64))continue;if(!Zs(c.prevB64)){r.push({code:"chain-break-malformed",partition:t.key,proofHashes:[c.proofHash],message:"commit.prevB64 is not standard base64 of 32 bytes, so it can never match a canonical proof hash. The predecessor link is unusable as reconstruction evidence.",details:{prevB64:c.prevB64}});continue}let u=n.get(c.prevB64);if(u!==void 0){let f=o.get(u.proofHash);r.push({code:"chain-break-cross-partition",partition:t.key,proofHashes:[c.proofHash,u.proofHash],message:"commit.prevB64 resolves to an observed proof outside this proof's own signer, epoch, and chain partition. prevB64 never bridges partitions (each epoch and chain keeps its own hash chain), so this link does not join the two.",details:{prevB64:c.prevB64,predecessorProofHash:u.proofHash,predecessorPartition:f!==void 0?{publicKeyB64:f.publicKeyB64,...f.epochId!==void 0?{epochId:f.epochId}:{},chainId:f.chainId}:"unchained-or-unpartitioned"}});continue}let d=$(c.counter);if(d===void 0||a===void 0||d<=a){i.push({partition:t.key,proofHash:c.proofHash,prevB64:c.prevB64});continue}r.push({code:"chain-break-missing",partition:t.key,proofHashes:[c.proofHash],message:"commit.prevB64 references a predecessor proof that is absent from the supplied bundle, and a lower-positioned proof IS present, so this is an interior break (a hole), not the excerpt's starting boundary. The chain cannot be reconstructed across this link from the supplied evidence; this does not, by itself, establish that the predecessor never existed.",details:{prevB64:c.prevB64}})}}function Zs(t){if(t.length===0)return!1;let e=w.Buffer.from(t,"base64");return e.length===32&&e.toString("base64")===t}async function Qs(t,e,n,o){let r=[...e.filter(a=>a.prevB64===void 0)].sort(Y);if(r.length<2)return;let{parties:i,context:s}=await yt(r);n.push({code:"multiple-genesis",partition:t.key,proofHashes:r.map(a=>a.proofHash),message:`${r.length} proofs in one partition carry no prevB64 link. An epoch has exactly one first proof, so at most one of these can be the genesis of this partition's chain.`,details:{validParties:i.map(a=>a.proofHash),invalidObserved:s.map(a=>a.proofHash)}}),!(i.length<2)&&o.push({kind:"multiple-genesis",partition:t.key,contested:{...t.key.epochId!==void 0?{epochId:t.key.epochId}:{},chainId:t.key.chainId},parties:i.map(Z),invalidContext:s.map(Z),explanation:"Two or more independently valid proof objects in the same signer, epoch, and chain partition carry no predecessor link, each presenting itself as the first proof of the chain. An epoch has exactly one first proof, so at most one of these can be the genesis. The audit tool does not choose between them."})}function ea(t,e,n){for(let o of[...e].sort(Y)){let r=$(o.slotCounter),i=$(o.counter);r===void 0||i===void 0||r<i||n.push({code:"slot-order-violation",partition:t.key,proofHashes:[o.proofHash],message:"commit.slotCounter is not strictly less than commit.counter. The slot must be allocated before the commit that consumes it, so this proof's declared positions contradict the nonce-first construction order.",details:{slotCounter:o.slotCounter,counter:o.counter}})}}async function ta(t,e,n,o){for(let s of t)s.resolution==="terminal-missing"?n.push({code:"epochlink-terminal-missing",proofHashes:[s.viaProofHash],message:"commit.epochLink references a prior epoch that is observed in the bundle, but the referenced terminal proof is absent from the bundle. The lineage claim cannot be confirmed from the supplied evidence; this does not, by itself, establish that the terminal never existed.",details:{link:{...s.link}}}):s.resolution==="dangling"?n.push({code:"epochlink-dangling",proofHashes:[s.viaProofHash],message:"commit.epochLink references a prior epoch and terminal proof, neither of which is observed in the bundle. The lineage claim dangles into unobserved history; it cannot be confirmed from the supplied evidence.",details:{link:{...s.link}}}):s.metadataConsistent===!1&&n.push({code:"epochlink-mismatch",proofHashes:[s.viaProofHash,...s.predecessorProofHash!==void 0?[s.predecessorProofHash]:[]],message:"commit.epochLink's prevProofHashB64 matches an observed proof, but the link's declared epoch, signer key, or counter disagrees with that proof. The hash reference and the declared metadata cannot both be right.",details:{link:{...s.link},inconsistencies:s.inconsistencies??[]}});let r=new Map;for(let s of t)O(r,`${s.link.prevEpochId}|${s.link.prevCounter}|${s.link.prevProofHashB64}`,s);for(let[,s]of mn(r)){let a=new Set(s.map(f=>f.link.toEpochId));if(a.size<2)continue;let c=s.map(f=>e.get(f.viaProofHash)),{parties:u,context:d}=await yt(c),h=s[0].link;n.push({code:"epochlink-fork",proofHashes:s.map(f=>f.viaProofHash),message:`The same predecessor terminal (epoch ${h.prevEpochId}, counter ${h.prevCounter}) is consumed by genesis proofs of ${a.size} distinct successor epochs. A predecessor may be consumed by at most one successor epoch, so this is a detectable fork at the epoch boundary. All branches are preserved.`,details:{prevEpochId:h.prevEpochId,prevCounter:h.prevCounter,prevProofHashB64:h.prevProofHashB64,successorEpochIds:[...a].sort(),validParties:u.map(f=>f.proofHash),invalidObserved:d.map(f=>f.proofHash)}}),!(u.length<2)&&o.push({kind:"epochlink-fork",contested:{prevEpochId:h.prevEpochId,prevCounter:h.prevCounter,prevProofHashB64:h.prevProofHashB64},parties:u.map(Z),invalidContext:d.map(Z),explanation:"Two or more independently valid epoch-genesis proofs consume the same terminal proof of a prior epoch through their epochLink. The single-successor rule allows a terminal to be consumed by exactly one successor epoch, so at most one of these lineages can be the authoritative continuation. Note that whichever party verified second in this run carries a fork-detection failure from the canonical verifier; that ordering is an artifact of verification order, not evidence of which branch is authoritative. The audit tool does not choose between them."})}let i=new Map;for(let s of t){if(s.resolution!=="matched")continue;let a=i.get(s.fromEpochId);a===void 0?i.set(s.fromEpochId,new Set([s.toEpochId])):a.add(s.toEpochId)}for(let s of na(i)){let a=t.filter(c=>c.resolution==="matched"&&s.includes(c.fromEpochId)&&s.includes(c.toEpochId)).map(c=>c.viaProofHash);n.push({code:"epochlink-cycle",proofHashes:a,message:`Epoch lineage links form a cycle among ${s.length} epochs. Each link claims its successor epoch came after its predecessor, so a cycle means these ordering claims contradict each other; no ordering is asserted for the epochs involved.`,details:{epochIds:s}})}}function na(t){let e=new Map,n=new Set,o=[...t.keys()].sort();for(let r of o){if(n.has(r))continue;let i=[],s=new Set,a=new Map,c=[r];for(;c.length>0;){let u=c[c.length-1];s.has(u)||(s.add(u),i.push(u),a.set(u,[...t.get(u)??[]].sort()));let h=a.get(u).shift();if(h===void 0){c.pop(),s.delete(u),i.pop(),n.add(u);continue}if(s.has(h)){let f=i.indexOf(h),l=i.slice(f),g=oa(l);e.set(g.join("|"),g);continue}n.has(h)||c.push(h)}}return[...e.values()].sort((r,i)=>{let s=r.join("|"),a=i.join("|");return s<a?-1:s>a?1:0})}function oa(t){let e=0;for(let n=1;n<t.length;n++)t[n]<t[e]&&(e=n);return[...t.slice(e),...t.slice(0,e)]}async function yt(t){let e=[],n=[];for(let o of t)await oe(o)?e.push(o):n.push(o);return{parties:e,context:n}}function Z(t){let e=t.verification;return{proofHash:t.proofHash,sourcePaths:t.sources.map(n=>n.path),...e!==void 0?{verificationTier:e.tier,verificationStatus:e.status,...e.reason!==void 0?{verificationReason:e.reason}:{}}:{},...t.counter!==void 0?{counter:t.counter}:{},...t.slotCounter!==void 0?{slotCounter:t.slotCounter}:{},...t.prevB64!==void 0?{prevB64:t.prevB64}:{},...t.publicKeyB64!==void 0?{publicKeyB64:t.publicKeyB64}:{},...t.epochId!==void 0?{epochId:t.epochId}:{},chainId:t.chainId,...t.measurement!==void 0?{measurement:t.measurement}:{}}}function mn(t){return[...t.entries()].sort(([e],[n])=>{let o=/^[0-9]+$/.test(e)?BigInt(e):void 0,r=/^[0-9]+$/.test(n)?BigInt(n):void 0;return o!==void 0&&r!==void 0&&o!==r?o<r?-1:1:o!==void 0&&r===void 0?-1:o===void 0&&r!==void 0?1:e<n?-1:e>n?1:0})}y();function gn(t){let e=new Map;for(let a of t.proofs){let c=JSON.stringify([a.measurement??null,a.publicKeyB64??null,a.epochId??null,a.chainId,a.hasAttestation]),u=e.get(c);if(u!==void 0){u.proofHashes.push(a.proofHash);continue}e.set(c,{...a.measurement!==void 0?{measurement:a.measurement}:{},...a.publicKeyB64!==void 0?{publicKeyB64:a.publicKeyB64}:{},...a.epochId!==void 0?{epochId:a.epochId}:{},chainId:a.chainId,attestationPresent:a.hasAttestation,proofHashes:[a.proofHash]})}let n=[...e.values()].sort(ra),o=new Map;for(let a of t.proofs)a.epochId!==void 0&&O(o,a.epochId,a);let r=[];for(let[a,c]of[...o.entries()].sort(([u],[d])=>u<d?-1:u>d?1:0)){let u=new Set,d=new Set;for(let h of c)h.publicKeyB64!==void 0&&u.add(h.publicKeyB64),h.measurement!==void 0&&d.add(h.measurement);u.size>=2&&r.push({code:"mid-epoch-signer-change",proofHashes:c.map(h=>h.proofHash),message:`${u.size} distinct signer keys appear within epoch ${a}. A single enclave boot generates exactly one keypair per epoch, so multiple keys under one epochId cannot come from one healthy authority lifecycle. All key groups are preserved for adjudication.`,details:{epochId:a,publicKeysB64:[...u].sort()}}),d.size>=2&&r.push({code:"mid-epoch-measurement-change",proofHashes:c.map(h=>h.proofHash),message:`${d.size} distinct declared measurements appear within epoch ${a}. A single enclave boot has exactly one measurement, so multiple declared measurements under one epochId cannot come from one healthy authority lifecycle. Declared measurements are self-reported; attestation validation is reported separately.`,details:{epochId:a,measurements:[...d].sort()}})}let i=new Map;for(let a of t.proofs){if(a.publicKeyB64===void 0||a.epochId===void 0)continue;let c=i.get(a.publicKeyB64);c===void 0?i.set(a.publicKeyB64,new Set([a.epochId])):c.add(a.epochId)}let s=[...i.entries()].filter(([,a])=>a.size>=2).map(([a,c])=>({publicKeyB64:a,epochIds:[...c].sort()})).sort((a,c)=>a.publicKeyB64<c.publicKeyB64?-1:a.publicKeyB64>c.publicKeyB64?1:0);return{groups:n,anomalies:r,sharedSignersAcrossEpochs:s}}function ra(t,e){if(t.chainId!==e.chainId)return t.chainId<e.chainId?-1:1;let n=t.epochId??"",o=e.epochId??"";if(n!==o)return n<o?-1:1;let r=t.publicKeyB64??"",i=e.publicKeyB64??"";if(r!==i)return r<i?-1:1;let s=t.measurement??"",a=e.measurement??"";return s!==a?s<a?-1:1:t.attestationPresent!==e.attestationPresent?t.attestationPresent?-1:1:0}y();var ia="Ethereum Anchor",ir="ethereum-anchor",sa=/^https:\/\/etherscan\.io\/block\/([0-9]+)$/;function wn(t){let e=[],n=[],o=[];for(let r of t.proofs){let i=yn(r,"name"),s=aa(r);if(!(i===ia)){s===ir&&(n.push(r.proofHash),o.push({code:"anchor-metadata-only-claim",...bn(r),message:"unsigned metadata.type claims ethereum-anchor, but the signed attribution does not identify this proof as an anchor. Metadata is advisory and unsigned; the proof is not treated as an anchor.",details:{proofHash:r.proofHash}}));continue}let c=s===ir?"agrees":s===void 0?"absent":"disagrees";c==="disagrees"&&o.push({code:"anchor-metadata-disagreement",...bn(r),message:`signed attribution identifies an Ethereum anchor, but unsigned metadata.type is ${JSON.stringify(s)}. The signed field governs; the disagreement is recorded.`,details:{proofHash:r.proofHash,metadataType:s}});let u=yn(r,"message"),d=yn(r,"title"),h=d!==void 0?sa.exec(d)?.[1]??void 0:void 0;h===void 0&&o.push({code:"anchor-title-unparseable",...bn(r),message:d===void 0?"anchor proof carries no signed attribution.title; the signed block number is absent":"anchor attribution.title does not parse as an Etherscan block URL; the signed block number is treated as absent",details:{proofHash:r.proofHash,...d!==void 0?{title:d}:{}}});let f=r.verification;e.push({proofHash:r.proofHash,...r.epochId!==void 0?{epochId:r.epochId}:{},chainId:r.chainId,...r.counter!==void 0?{counter:r.counter}:{},...r.slotCounter!==void 0?{slotCounter:r.slotCounter}:{},...u!==void 0?{blockHash:u}:{},...h!==void 0?{blockNumber:h}:{},metadataCorroboration:c,...f!==void 0?{verificationTier:f.tier,verificationStatus:f.status,...f.reason!==void 0?{verificationReason:f.reason}:{}}:{}})}return{anchors:e,metadataOnlyProofHashes:n,findings:o}}function yn(t,e){let n=t.proof.attribution;if(n===null||typeof n!="object"||Array.isArray(n))return;let o=n[e];return typeof o=="string"?o:void 0}function aa(t){let e=t.proof.metadata;if(e===null||typeof e!="object"||Array.isArray(e))return;let n=e.type;return typeof n=="string"?n:void 0}function bn(t){let e=t.sources[0]?.path;return e!==void 0?{path:e}:{}}y();y();var ca=BigInt(0),We=BigInt(1),ua=BigInt(2),da=BigInt(7),ha=BigInt(256),fa=BigInt(113),cr=[],ur=[],dr=[];for(let t=0,e=We,n=1,o=0;t<24;t++){[n,o]=[o,(2*n+3*o)%5],cr.push(2*(5*o+n)),ur.push((t+1)*(t+2)/2%64);let r=ca;for(let i=0;i<7;i++)e=(e<<We^(e>>da)*fa)%ha,e&ua&&(r^=We<<(We<<BigInt(i))-We);dr.push(r)}var hr=dt(dr,!0),la=hr[0],pa=hr[1],sr=(t,e,n)=>n>32?Ho(t,e,n):Ao(t,e,n),ar=(t,e,n)=>n>32?Co(t,e,n):Io(t,e,n);function ma(t,e=24){let n=new Uint32Array(10);for(let o=24-e;o<24;o++){for(let s=0;s<10;s++)n[s]=t[s]^t[s+10]^t[s+20]^t[s+30]^t[s+40];for(let s=0;s<10;s+=2){let a=(s+8)%10,c=(s+2)%10,u=n[c],d=n[c+1],h=sr(u,d,1)^n[a],f=ar(u,d,1)^n[a+1];for(let l=0;l<50;l+=10)t[s+l]^=h,t[s+l+1]^=f}let r=t[2],i=t[3];for(let s=0;s<24;s++){let a=ur[s],c=sr(r,i,a),u=ar(r,i,a),d=cr[s];r=t[d],i=t[d+1],t[d]=c,t[d+1]=u}for(let s=0;s<50;s+=10){for(let a=0;a<10;a++)n[a]=t[s+a];for(let a=0;a<10;a++)t[s+a]^=~n[(a+2)%10]&n[(a+4)%10]}t[0]^=la[o],t[1]^=pa[o]}J(n)}var xn=class t extends Re{constructor(e,n,o,r=!1,i=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=e,this.suffix=n,this.outputLen=o,this.enableXOF=r,this.rounds=i,zt(o),!(0<e&&e<200))throw new Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=vo(this.state)}clone(){return this._cloneInto()}keccak(){Gt(this.state32),ma(this.state32,this.rounds),Gt(this.state32),this.posOut=0,this.pos=0}update(e){Me(this),e=_e(e),we(e);let{blockLen:n,state:o}=this,r=e.length;for(let i=0;i<r;){let s=Math.min(n-this.pos,r-i);for(let a=0;a<s;a++)o[this.pos++]^=e[i++];this.pos===n&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:e,suffix:n,pos:o,blockLen:r}=this;e[o]^=n,(n&128)!==0&&o===r-1&&this.keccak(),e[r-1]^=128,this.keccak()}writeInto(e){Me(this,!1),we(e),this.finish();let n=this.state,{blockLen:o}=this;for(let r=0,i=e.length;r<i;){this.posOut>=o&&this.keccak();let s=Math.min(o-this.posOut,i-r);e.set(n.subarray(this.posOut,this.posOut+s),r),this.posOut+=s,r+=s}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return zt(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(at(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,J(this.state)}_cloneInto(e){let{blockLen:n,suffix:o,outputLen:r,rounds:i,enableXOF:s}=this;return e||(e=new t(n,o,r,s,i)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=i,e.suffix=o,e.outputLen=r,e.enableXOF=s,e.destroyed=this.destroyed,e}},ga=(t,e,n)=>Ke(()=>new xn(e,t,n));var fr=ga(1,136,256/8);y();function mr(t){if(t.length===0)throw new Error("RLP: empty input");let{item:e,next:n}=gr(t,0);if(n!==t.length)throw new Error(`RLP: ${t.length-n} trailing byte(s) after the top-level item`);if(!Array.isArray(e))throw new Error("RLP: top-level item is not a list");return e}function gr(t,e){let n=yr(t,e);if(n<128)return{item:t.subarray(e,e+1),next:e+1};if(n<=183){let a=n-128,c=bt(t,e+1,a);return{item:t.subarray(e+1,c),next:c}}if(n<=191){let a=n-183,c=pr(t,e+1,a),u=e+1+a,d=bt(t,u,c);return{item:t.subarray(u,d),next:d}}if(n<=247){let a=n-192,c=bt(t,e+1,a);return{item:lr(t,e+1,c),next:c}}let o=n-247,r=pr(t,e+1,o),i=e+1+o,s=bt(t,i,r);return{item:lr(t,i,s),next:s}}function lr(t,e,n){let o=[],r=e;for(;r<n;){let i=gr(t,r);if(i.next>n)throw new Error("RLP: list item overruns its list payload");o.push(i.item),r=i.next}return o}function pr(t,e,n){if(n<1||n>8)throw new Error(`RLP: invalid length-of-length ${n}`);let o=0;for(let r=0;r<n;r++)o=o*256+yr(t,e+r);if(o>t.length)throw new Error("RLP: declared length exceeds the input size");return o}function bt(t,e,n){let o=e+n;if(o>t.length)throw new Error("RLP: item is truncated");return o}function yr(t,e){let n=t[e];if(n===void 0)throw new Error("RLP: unexpected end of input");return n}function vn(t){let e=0n;for(let n of t)e=e<<8n|BigInt(n);return e}function br(t){if(!t.startsWith("0x"))return null;let e=t.slice(2);if(e.length%2!==0||!/^[0-9a-fA-F]*$/.test(e))return null;let n=new Uint8Array(e.length/2);for(let o=0;o<n.length;o++)n[o]=Number.parseInt(e.slice(o*2,o*2+2),16);return n}function wr(t){return`0x${w.Buffer.from(t).toString("hex")}`}var xr=8,vr=11,ya=/^0x[0-9a-fA-F]{64}$/,ba=/^https:\/\/etherscan\.io\/block\/([0-9]+)$/;async function En(t,e){let n=[],o=[],r=new Map(t.proofs.map(i=>[i.proofHash,i]));for(let i of t.witnesses){let s=wa(i);if(s.failure!==void 0){let d={witnessPath:i.path,verified:!1,reason:s.failure.reason,detail:s.failure.detail};n.push(d),o.push(Bn(d));continue}let a=s.computedHash,c=s.claimedHash.toLowerCase(),u=e.anchors.filter(d=>{let h=d.blockHash?.toLowerCase();return h!==void 0&&(h===a||h===c)});if(u.length===0){let d={witnessPath:i.path,verified:!1,reason:"witness-unmatched",detail:"neither the locally recomputed block hash nor the claimed blockHash matches any observed anchor's signed attribution.message",computedBlockHash:a};n.push(d),o.push(Bn(d));continue}for(let d of u){let h=r.get(d.proofHash),f=h!==void 0&&await oe(h),l=xa(s,i.path,d.proofHash,h,f);n.push(l),l.verified||o.push(Bn(l))}}return{outcomes:n,findings:o}}function wa(t){let e=t.witness,n=e.headerRlpHex;if(typeof n!="string")return wt("headerRlpHex is missing or not a string");let o=e.blockNumber;if(typeof o!="number"||!Number.isInteger(o)||o<0)return wt("blockNumber is missing or not a non-negative integer");let r=e.blockHash;if(typeof r!="string"||!ya.test(r))return wt("blockHash is missing or not 0x followed by 64 hex characters");let i=br(n);if(i===null)return wt("headerRlpHex is not 0x-prefixed even-length hex");let s;try{s=mr(i)}catch(c){return{failure:{reason:"witness-rlp-invalid",detail:c instanceof Error?c.message:String(c)}}}return{computedHash:wr(fr(i)),items:s,claimedHash:r,claimedNumber:BigInt(o)}}function wt(t){return{failure:{reason:"witness-malformed",detail:t}}}function xa(t,e,n,o,r){let i=t.computedHash,s={witnessPath:e,anchorProofHash:n,computedBlockHash:i},a=(b,A,B)=>({...s,verified:!1,reason:b,detail:A,...B?.blockNumber!==void 0?{blockNumber:B.blockNumber}:{}});if(o===void 0||!r)return a("witness-anchor-invalid","the candidate anchor proof is not cryptographically valid; the witness confers nothing");let c=va(o);if(c===void 0||c.toLowerCase()!==i)return a("witness-hash-mismatch",c===void 0?"the anchor carries no signed attribution.message to compare against":"the locally recomputed block hash does not equal the anchor's signed attribution.message");let u=ka(Ea(o));if(u===null)return a("witness-digest-mismatch","the anchor's artifact.digestB64 does not strictly decode as base64 of 32 bytes");let d=C(new TextEncoder().encode(c));if(!Aa(d,u))return a("witness-digest-mismatch","SHA-256 of the exact signed attribution.message string does not equal the anchor's artifact digest");let h=t.items,f=h[xr];if(f===void 0||!(f instanceof Uint8Array))return a("witness-header-shape",`header RLP item ${xr} (block number) is missing or not a byte string`);let l=vn(f);if(l!==t.claimedNumber)return a("witness-block-number-mismatch",`the witness claims blockNumber ${t.claimedNumber}, but the header's number field is ${l}`,{blockNumber:String(l)});let g=Ba(o);if(g!==void 0){let b=ba.exec(g)?.[1];if(b!==void 0&&BigInt(b)!==l)return a("witness-block-number-mismatch",`the anchor's signed Etherscan URL names block ${b}, but the header's number field is ${l}`,{blockNumber:String(l)})}if(t.claimedHash.toLowerCase()!==i)return a("witness-claimed-hash-mismatch","the witness's claimed blockHash does not equal the locally recomputed block hash",{blockNumber:String(l)});let m=h[vr];if(m===void 0||!(m instanceof Uint8Array))return a("witness-header-shape",`header RLP item ${vr} (timestamp) is missing or not a byte string`,{blockNumber:String(l)});let v=vn(m);return v>BigInt(Number.MAX_SAFE_INTEGER)?a("witness-header-shape","header timestamp does not fit a safe integer",{blockNumber:String(l)}):{...s,verified:!0,blockNumber:String(l),timestamp:Number(v)}}function va(t){return Br(t,"message")}function Ba(t){return Br(t,"title")}function Br(t,e){let n=t.proof.attribution;if(n===null||typeof n!="object"||Array.isArray(n))return;let o=n[e];return typeof o=="string"?o:void 0}function Ea(t){let e=t.proof.artifact;if(e===null||typeof e!="object"||Array.isArray(e))return;let n=e.digestB64;return typeof n=="string"?n:void 0}function ka(t){if(t===void 0||t.length===0)return null;let e=w.Buffer.from(t,"base64");return e.length!==32||e.toString("base64")!==t?null:new Uint8Array(e)}function Aa(t,e){if(t.length!==e.length)return!1;let n=0;for(let o=0;o<t.length;o++)n|=t[o]^e[o];return n===0}function Bn(t){return{code:t.reason,path:t.witnessPath,message:`anchor witness rejected: ${t.detail??"verification failed"}. The witness confers nothing; the anchor proof's own standing is unchanged.`,details:{...t.anchorProofHash!==void 0?{anchorProofHash:t.anchorProofHash}:{},...t.computedBlockHash!==void 0?{computedBlockHash:t.computedBlockHash}:{}}}}y();function kn(t,e,n,o){let r=new Map(t.proofs.map(d=>[d.proofHash,d])),i=new Map;for(let d of o.outcomes)!d.verified||d.anchorProofHash===void 0||i.has(d.anchorProofHash)||i.set(d.anchorProofHash,{anchorProofHash:d.anchorProofHash,timestamp:d.timestamp,blockHash:d.computedBlockHash,...d.blockNumber!==void 0?{blockNumber:d.blockNumber}:{}});let s=[...i.keys()].sort(),a=n.anchors.map(d=>d.proofHash).filter(d=>!i.has(d)).sort(),c=[];for(let d of e.partitions)c.push(...Ia(d,r,i));let u=Ta(e,c);return{segments:c,anchorOrderedPairs:u,verifiedAnchorProofHashes:s,unverifiedAnchorProofHashes:a}}function Ia(t,e,n){let o=t.memberProofHashes.map(f=>e.get(f)),r=new Map(o.map(f=>[f.chainHash,f])),i=o.filter(f=>n.has(f.proofHash)),s=new Map;for(let f of o){if(f.prevB64===void 0)continue;let l=r.get(f.prevB64);l===void 0||l.proofHash===f.proofHash||O(s,l.proofHash,f)}let a=new Map,c=new Map;for(let f of i)a.set(f.proofHash,Ca(f,s)),c.set(f.proofHash,$a(f,r));let u=o.map(f=>{let l=new Map,g=new Map,m=$(f.counter);for(let v of i){let b=v.proofHash,A=$(v.counter);f.proofHash===b||a.get(b).has(f.proofHash)?l.set(b,"chain-link"):m!==void 0&&A!==void 0&&m>A&&(l.has(b)||l.set(b,"counter-order")),c.get(b).has(f.proofHash)?g.set(b,"chain-link"):f.proofHash!==b&&m!==void 0&&A!==void 0&&m<A&&(g.has(b)||g.set(b,"counter-order"))}return{member:f,lower:Er("not-before",l,n),upper:Er("not-after",g,n)}}),d=new Map;for(let f of u)O(d,Ha(f),f);let h=[];for(let f of d.values()){let l=f.map(B=>B.member).sort(Y),g=f[0],m=g.lower,v=g.upper,b=m.length>0&&v.length>0?"bracketed":m.length>0?"lower-bounded":v.length>0?"upper-bounded":"ordered-but-unanchored",A=Sa(l);h.push({partition:t.key,memberProofHashes:l.map(B=>B.proofHash),...A!==void 0?{positionRange:A}:{},status:b,lowerBounds:m,upperBounds:v})}return h.sort(Pa),h}function Er(t,e,n){if(e.size===0)return[];let o=[...e.entries()].map(([c,u])=>({anchorHash:c,evidenceKind:u,info:n.get(c)})),r=(c,u)=>u===void 0?!0:c.info.timestamp!==u.info.timestamp?t==="not-before"?c.info.timestamp>u.info.timestamp:c.info.timestamp<u.info.timestamp:c.evidenceKind!==u.evidenceKind?c.evidenceKind==="chain-link":c.anchorHash<u.anchorHash,i,s;for(let c of o)r(c,i)&&(i=c),c.evidenceKind==="chain-link"&&r(c,s)&&(s=c);let a=[kr(t,i)];return s!==void 0&&(i.anchorHash!==s.anchorHash||i.evidenceKind!=="chain-link")&&a.push(kr(t,s)),a}function kr(t,e){let{info:n,evidenceKind:o}=e,r=new Date(n.timestamp*1e3).toISOString(),i=n.blockNumber!==void 0?`Ethereum block ${n.blockNumber}`:"an Ethereum block",s=o==="chain-link"?"Evidence: a verified hash-link path connects these proofs and the anchor.":"Evidence: commit-counter ordering within the partition only, which relies on the authority's counter discipline rather than verifiable hash links (weaker).",a=t==="not-before"?`These proofs were committed no earlier than ${r} (unix ${n.timestamp}), the timestamp of ${i}: the block hash was unpredictable before that time and the anchor commit consumed it. Reading this as a wall-clock floor additionally assumes the anchored header is a genuine, publicly published Ethereum block: this offline audit checks the header's structure and hash binding, not proof-of-work, consensus, or chain membership, so it cannot confirm the block is real. ${s}`:`These proofs existed before the anchor commit that consumed the hash of ${i} (block timestamp ${r}, unix ${n.timestamp}). The block timestamp proves the anchor commit came at or after it, not how promptly; reading it as a wall-clock ceiling additionally assumes the anchor consumed a recently published block. ${s}`;return{kind:t,anchorProofHash:e.anchorHash,...n.blockNumber!==void 0?{blockNumber:n.blockNumber}:{},blockHash:n.blockHash,timestamp:n.timestamp,evidence:o,weaker:o==="counter-order",basis:t==="not-before"?"block-hash-unpredictability":"causal-precedence",claim:a}}function Ha(t){let e=n=>n.map(o=>`${o.anchorProofHash}:${o.evidence}`).join(",");return`${e(t.lower)}|${e(t.upper)}`}function Ca(t,e){let n=new Set,o=[...e.get(t.proofHash)??[]];for(;o.length>0;){let r=o.pop();if(!n.has(r.proofHash)){n.add(r.proofHash);for(let i of e.get(r.proofHash)??[])o.push(i)}}return n}function $a(t,e){let n=new Set,o=t;for(;o!==void 0&&o.prevB64!==void 0;){let r=e.get(o.prevB64);if(r===void 0||n.has(r.proofHash)||r.proofHash===t.proofHash)break;n.add(r.proofHash),o=r}return n}function Sa(t){let e,n;for(let o of t)for(let r of[o.counter,o.slotCounter]){let i=$(r);i!==void 0&&((e===void 0||i<e)&&(e=i),(n===void 0||i>n)&&(n=i))}return e!==void 0&&n!==void 0?{min:String(e),max:String(n)}:void 0}function Pa(t,e){let n=t.positionRange?.min,o=e.positionRange?.min;if(n!==void 0&&o!==void 0&&n!==o)return BigInt(n)<BigInt(o)?-1:1;if(n!==void 0&&o===void 0)return-1;if(n===void 0&&o!==void 0)return 1;let r=t.memberProofHashes[0]??"",i=e.memberProofHashes[0]??"";return r<i?-1:r>i?1:0}function Ar(t){return t?" The representative bound rests on commit-counter ordering rather than a verified hash-link path, which relies on the authority's counter discipline (weaker evidence).":""}function Ta(t,e){let n=new Map;for(let i of t.epochRelationships.epochs)n.set(i.epochId,{totalProofCount:i.proofCount,lowerCovered:new Set,upperCovered:new Set});for(let i of e){let s=i.partition.epochId;if(s===void 0)continue;let a=n.get(s);if(a!==void 0){for(let c of i.lowerBounds){for(let u of i.memberProofHashes)a.lowerCovered.add(u);(a.lowerMin===void 0||c.timestamp<a.lowerMin.timestamp||c.timestamp===a.lowerMin.timestamp&&a.lowerMin.weaker&&!c.weaker)&&(a.lowerMin={timestamp:c.timestamp,anchorProofHash:c.anchorProofHash,blockHash:c.blockHash,...c.blockNumber!==void 0?{blockNumber:c.blockNumber}:{},evidence:c.evidence,weaker:c.weaker})}for(let c of i.upperBounds){for(let u of i.memberProofHashes)a.upperCovered.add(u);(a.upperMax===void 0||c.timestamp>a.upperMax.timestamp||c.timestamp===a.upperMax.timestamp&&a.upperMax.weaker&&!c.weaker)&&(a.upperMax={timestamp:c.timestamp,anchorProofHash:c.anchorProofHash,blockHash:c.blockHash,...c.blockNumber!==void 0?{blockNumber:c.blockNumber}:{},evidence:c.evidence,weaker:c.weaker})}}}for(let i of t.epochRelationships.epochs){let s=n.get(i.epochId),a=[];s.lowerMin!==void 0&&a.push({kind:"not-before",anchorProofHash:s.lowerMin.anchorProofHash,...s.lowerMin.blockNumber!==void 0?{blockNumber:s.lowerMin.blockNumber}:{},blockHash:s.lowerMin.blockHash,witnessTimestamp:s.lowerMin.timestamp,coverage:"members-after-anchor",coveredProofCount:s.lowerCovered.size,totalProofCount:s.totalProofCount,basis:"block-hash-unpredictability",evidence:s.lowerMin.evidence,weaker:s.lowerMin.weaker,claim:`${s.lowerCovered.size} of ${s.totalProofCount} observed proofs of this epoch were committed no earlier than unix ${s.lowerMin.timestamp}, grounded in block-hash unpredictability through verified anchor witnesses. This additionally assumes the anchored header is a genuine, publicly published Ethereum block, which this offline audit cannot confirm.`+Ar(s.lowerMin.weaker)+" The remaining proofs sit causally before the covering anchors and carry no lower bound from this evidence."}),s.upperMax!==void 0&&a.push({kind:"not-after",anchorProofHash:s.upperMax.anchorProofHash,...s.upperMax.blockNumber!==void 0?{blockNumber:s.upperMax.blockNumber}:{},blockHash:s.upperMax.blockHash,witnessTimestamp:s.upperMax.timestamp,coverage:"members-before-anchor",coveredProofCount:s.upperCovered.size,totalProofCount:s.totalProofCount,basis:"causal-precedence",evidence:s.upperMax.evidence,weaker:s.upperMax.weaker,claim:`${s.upperCovered.size} of ${s.totalProofCount} observed proofs of this epoch existed before an anchor commit that consumed a block published at unix ${s.upperMax.timestamp}. Reading that timestamp as a wall-clock ceiling additionally assumes the anchor consumed a recently published block; the causal precedence itself is verified.`+Ar(s.upperMax.weaker)+" Proofs after the covering anchors are not covered."}),a.length>0&&(i.anchorBounds=a)}let o=[],r=t.epochRelationships.epochs;for(let i of r){let s=n.get(i.epochId);if(s.upperMax!==void 0)for(let a of r){if(a.epochId===i.epochId)continue;let c=n.get(a.epochId);if(c.lowerMin===void 0||s.upperMax.timestamp>=c.lowerMin.timestamp)continue;let u=s.upperMax.evidence,d=c.lowerMin.evidence,h=s.upperMax.weaker||c.lowerMin.weaker;o.push({beforeEpochId:i.epochId,afterEpochId:a.epochId,upperAnchorProofHash:s.upperMax.anchorProofHash,upperBoundTimestamp:s.upperMax.timestamp,lowerAnchorProofHash:c.lowerMin.anchorProofHash,lowerBoundTimestamp:c.lowerMin.timestamp,basis:"anchor-bounds",assumptionDependent:!0,upperEvidence:u,lowerEvidence:d,weaker:h,beforeCoveredProofCount:s.upperCovered.size,beforeTotalProofCount:s.totalProofCount,afterCoveredProofCount:c.lowerCovered.size,afterTotalProofCount:c.totalProofCount,note:`The anchor-covered portion of epoch ${i.epochId} (${s.upperCovered.size} of ${s.totalProofCount} proofs) precedes the anchor-covered portion of epoch ${a.epochId} (${c.lowerCovered.size} of ${c.totalProofCount} proofs): the first is bounded not-after unix ${s.upperMax.timestamp} and the second not-before unix ${c.lowerMin.timestamp}. One-sided evidence about the covered portions only; the not-after side rests on the anchor-freshness assumption documented on its bound.`+(h?" At least one side rests on commit-counter ordering rather than a verified hash-link path (weaker evidence), which relies on the authority's counter discipline.":"")+" This is ordering evidence, never divergence."})}}return o.sort((i,s)=>i.beforeEpochId!==s.beforeEpochId?i.beforeEpochId<s.beforeEpochId?-1:1:i.afterEpochId<s.afterEpochId?-1:i.afterEpochId>s.afterEpochId?1:0),o}y();y();var Ir=`-----BEGIN CERTIFICATE-----
140
+ MIICETCCAZagAwIBAgIRAPkxdWgbkK/hHUbMtOTn+FYwCgYIKoZIzj0EAwMwSTEL
141
+ MAkGA1UEBhMCVVMxDzANBgNVBAoMBkFtYXpvbjEMMAoGA1UECwwDQVdTMRswGQYD
142
+ VQQDDBJhd3Mubml0cm8tZW5jbGF2ZXMwHhcNMTkxMDI4MTMyODA1WhcNNDkxMDI4
143
+ MTQyODA1WjBJMQswCQYDVQQGEwJVUzEPMA0GA1UECgwGQW1hem9uMQwwCgYDVQQL
144
+ DANBV1MxGzAZBgNVBAMMEmF3cy5uaXRyby1lbmNsYXZlczB2MBAGByqGSM49AgEG
145
+ BSuBBAAiA2IABPwCVOumCMHzaHDimtqQvkY4MpJzbolL//Zy2YlES1BR5TSksfbb
146
+ 48C8WBoyt7F2Bw7eEtaaP+ohG2bnUs990d0JX28TcPQXCEPZ3BABIeTPYwEoCWZE
147
+ h8l5YoQwTcU/9KNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUkCW1DdkF
148
+ R+eWw5b6cp3PmanfS5YwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYC
149
+ MQCjfy+Rocm9Xue4YnwWmNJVA44fA0P5W2OpYow9OYCVRaEevL8uO1XYru5xtMPW
150
+ rfMCMQCi85sWBbJwKKXdS6BptQFuZbT73o/gBh1qUxl/nNr12UO8Yfwr6wPLb+6N
151
+ IwLz3/Y=
152
+ -----END CERTIFICATE-----`;function Ra(){return Ir.replace(/-----BEGIN CERTIFICATE-----/,"").replace(/-----END CERTIFICATE-----/,"").replace(/\s+/g,"")}function Hr(){return new Uint8Array(w.Buffer.from(Ra(),"base64"))}async function $r(t,e){let n=[],o={},r,i,s,a,c,u=()=>({documentValid:!1,checks:n,failure:[...n].reverse().find(d=>!d.pass)?.detail,...r!==void 0?{pcr0:r}:{},pcrs:o,...i!==void 0?{moduleId:i}:{},...s!==void 0?{timestamp:s}:{},...a!==void 0?{certChainLength:a}:{},...c!==void 0?{userDataB64:c}:{}});try{let d=La(t);if(d===null)return n.push({name:"CBOR Decode",pass:!1,detail:"reportB64 is not valid base64"}),u();let h=re(d,0).value;if(!Array.isArray(h)||h.length<4)return n.push({name:"CBOR Decode",pass:!1,detail:"Not a valid COSE_Sign1 array"}),u();n.push({name:"CBOR Decode",pass:!0,detail:"COSE_Sign1 envelope parsed"});let f=h[0],l=h[2],g=h[3];if(!(f instanceof Uint8Array)||!(l instanceof Uint8Array)||!(g instanceof Uint8Array))return n.push({name:"COSE Structure",pass:!1,detail:"Missing protected/payload/signature"}),u();let m=re(l,0).value;if(!m||typeof m!="object"||Array.isArray(m))return n.push({name:"Payload Decode",pass:!1,detail:"Could not decode attestation payload"}),u();o=Ka(m),r=o[0],i=typeof m.module_id=="string"?m.module_id:void 0,s=typeof m.timestamp=="number"?m.timestamp:void 0;let v=m.user_data;c=v instanceof Uint8Array&&v.length>0?w.Buffer.from(v).toString("base64"):void 0;let b=m.cabundle,A=m.certificate;if(!(A instanceof Uint8Array))return n.push({name:"Leaf Certificate",pass:!1,detail:"No leaf certificate in attestation"}),u();a=(Array.isArray(b)?b.length:0)+1;let B=Hn(A),S=Fa(f,l),R=await Cn(g,S,B.publicKey);if(n.push({name:"ECDSA P-384 Signature",pass:R,detail:R?"Attestation signed by leaf certificate":"Signature verification failed against leaf certificate public key"}),!R)return u();if(!Array.isArray(b)||b.length===0||!b.every(_=>_ instanceof Uint8Array))return n.push({name:"Certificate Chain",pass:!1,detail:"Empty cabundle"}),u();let k=[...b,A].map(Hn),I=!0,H="";for(let _=1;_<k.length;_++){let me=k[_],Kr=k[_-1];if(!await Cn(me.signature,me.tbsCertificate,Kr.publicKey)){I=!1,H=`Certificate ${_} signature invalid (parent: ${_-1})`;break}}if(n.push({name:"Certificate Chain",pass:I,detail:I?`${k.length} certificates, each signed by parent`:H}),!I)return u();let D=e?.trustedRootCaDer===void 0,ke=Hn(e?.trustedRootCaDer??Hr()),Ae=k[0],se=await Cn(Ae.signature,Ae.tbsCertificate,ke.publicKey);if(n.push({name:"AWS Nitro Root CA",pass:se,detail:se?D?"Chain anchored to AWS Nitro Root G1 (CN=aws.nitro-enclaves)":"Chain anchored to the supplied trust root (non-default trust material)":D?"Top of chain not signed by AWS Nitro Root CA":"Top of chain not signed by the supplied trust root"}),!se)return u();let ae=!0,Ne=`All ${k.length} certificate validity windows contain the document timestamp`;if(s===void 0)ae=!1,Ne="Attestation document carries no timestamp; certificate validity cannot be evaluated offline";else for(let _=0;_<k.length;_++){let me=k[_];if(s<me.notBeforeMs||s>me.notAfterMs){ae=!1,Ne=`Certificate ${_} validity window [${new Date(me.notBeforeMs).toISOString()}, ${new Date(me.notAfterMs).toISOString()}] does not contain the document timestamp ${new Date(s).toISOString()}`;break}}if(n.push({name:"Certificate Validity Window",pass:ae,detail:Ne}),!ae)return u();let ce;e?.expectedPcr0!==void 0&&(ce=r===e.expectedPcr0,n.push({name:"PCR0 Match",pass:ce,detail:ce?"PCR0 inside attestation matches declared measurement":`PCR0 mismatch: expected ${e.expectedPcr0.slice(0,16)}..., got ${(r??"").slice(0,16)}...`}));let Ue;return e?.expectedUserDataB64!==void 0&&(Ue=c!==void 0&&c===e.expectedUserDataB64,n.push({name:"Bound to this proof",pass:Ue,detail:Ue?"Attestation user_data matches this proof's canonical hash":c!==void 0?"Attestation user_data does not match this proof":"Attestation carries no user_data to bind"})),{documentValid:!0,checks:n,...r!==void 0?{pcr0:r}:{},pcrs:o,...i!==void 0?{moduleId:i}:{},...s!==void 0?{timestamp:s}:{},certChainLength:a,...c!==void 0?{userDataB64:c}:{},...ce!==void 0?{pcr0Matches:ce}:{},...Ue!==void 0?{userDataMatches:Ue}:{}}}catch(d){return n.push({name:"Verification Error",pass:!1,detail:d instanceof Error?d.message:String(d)}),u()}}async function $n(t,e,n){let o=[],r=[],i={proofsWithDeclaredMeasurement:0,proofsWithDocument:0,documentsValidated:0,documentsFailed:0,pcr0Matches:0,pcr0Mismatches:0,userDataBound:0,userDataUnbound:0};for(let s of t.proofs){let a=s.measurement!==void 0&&s.measurement.length>0?s.measurement:void 0;a!==void 0&&i.proofsWithDeclaredMeasurement++;let c=Da(s),u={proofHash:s.proofHash,declaredMeasurementPresent:a!==void 0,...a!==void 0?{declaredMeasurement:a}:{},documentPresent:c!==void 0,...c?.format!==void 0?{attestationFormat:c.format}:{},documentValidated:!1,checks:[]};if(c!==void 0){i.proofsWithDocument++;let d=await $r(c.reportB64,{...a!==void 0?{expectedPcr0:a}:{},expectedUserDataB64:s.proofHash,...n?.trustedRootCaDer!==void 0?{trustedRootCaDer:n.trustedRootCaDer}:{}});u.documentValidated=d.documentValid,u.checks=d.checks,d.pcr0!==void 0&&(u.attestedPcr0=d.pcr0),u.pcrs=d.pcrs,d.moduleId!==void 0&&(u.moduleId=d.moduleId),d.timestamp!==void 0&&(u.timestamp=d.timestamp),d.certChainLength!==void 0&&(u.certChainLength=d.certChainLength),d.userDataB64!==void 0&&(u.userDataB64=d.userDataB64),d.documentValid?(i.documentsValidated++,d.pcr0Matches!==void 0&&(u.pcr0MatchesDeclared=d.pcr0Matches,d.pcr0Matches?i.pcr0Matches++:(i.pcr0Mismatches++,r.push({code:"attestation-measurement-mismatch",...An(s),message:"the validated attestation document's PCR0 does not equal the proof's declared environment.measurement. Declared and attested measurements are reported separately and disagree here.",details:{proofHash:s.proofHash,declared:a,...d.pcr0!==void 0?{attested:d.pcr0}:{}}}))),d.userDataMatches!==void 0&&(u.userDataBoundToProof=d.userDataMatches,d.userDataMatches?i.userDataBound++:(i.userDataUnbound++,r.push({code:"attestation-user-data-mismatch",...An(s),message:"the validated attestation document's user_data is not bound to this proof's canonical hash. A genuine attestation lifted from another proof would look exactly like this.",details:{proofHash:s.proofHash,...d.userDataB64!==void 0?{userDataB64:d.userDataB64}:{}}})))):(i.documentsFailed++,d.failure!==void 0&&(u.validationFailure=d.failure),r.push({code:"attestation-invalid",...An(s),message:`attestation document failed offline validation: ${d.failure??"unknown"}. Presence of a document is reported separately and proves nothing by itself.`,details:{proofHash:s.proofHash}}))}o.push(u)}return e!==void 0&&Ma(e,o),{records:o,findings:r,counts:i}}function Ma(t,e){let n=new Map(e.map(o=>[o.proofHash,o]));for(let o of t.groups){if(!o.attestationPresent)continue;let r=o.proofHashes.map(u=>n.get(u)).filter(u=>u!==void 0&&u.documentPresent);if(r.length===0)continue;let i=r.filter(u=>u.documentValidated),s=r.length-i.length,a=[...new Set(i.map(u=>u.attestedPcr0).filter(u=>u!==void 0))].sort(),c=a.length===1?a[0]:void 0;o.attested={status:s===0&&i.length>0?"validated":"validation-failed",...c!==void 0?{attestedMeasurement:c}:{},...c!==void 0&&o.measurement!==void 0?{matchesDeclared:c===o.measurement}:{},validatedProofCount:i.length,failedProofCount:s,...a.length>1?{attestedMeasurements:a}:{}}}}function Da(t){let e=t.proof.environment;if(e===null||typeof e!="object"||Array.isArray(e))return;let n=e.attestation;if(n===null||typeof n!="object"||Array.isArray(n))return;let o=n.reportB64;if(typeof o!="string"||o.length===0)return;let r=n.format;return{reportB64:o,...typeof r=="string"?{format:r}:{}}}function An(t){let e=t.sources[0]?.path;return e!==void 0?{path:e}:{}}function La(t){let e=t.replace(/-/g,"+").replace(/_/g,"/");for(;e.length%4!==0;)e+="=";let n=w.Buffer.from(e,"base64");return n.toString("base64")!==e?null:new Uint8Array(n)}function Sn(t){return t<24?new Uint8Array([t]):t<256?new Uint8Array([24,t]):t<65536?new Uint8Array([25,t>>8,t&255]):new Uint8Array([26,t>>>24&255,t>>>16&255,t>>>8&255,t&255])}function In(t){let e=Sn(t.length);e[0]=e[0]&31|64;let n=new Uint8Array(e.length+t.length);return n.set(e,0),n.set(t,e.length),n}function Na(t){let e=new TextEncoder().encode(t),n=Sn(e.length);n[0]=n[0]&31|96;let o=new Uint8Array(n.length+e.length);return o.set(n,0),o.set(e,n.length),o}function Ua(t){let e=Sn(t.length);e[0]=e[0]&31|128;let n=e.length+t.reduce((i,s)=>i+s.length,0),o=new Uint8Array(n),r=0;o.set(e,r),r+=e.length;for(let i of t)o.set(i,r),r+=i.length;return o}function Fa(t,e){return Ua([Na("Signature1"),In(t),In(new Uint8Array(0)),In(e)])}function re(t,e=0){let n=t[e];if(n===void 0)throw new Error("CBOR: unexpected end of input");let o=n>>5,r=n&31;e++;let i=a=>{let c=t[a];if(c===void 0)throw new Error("CBOR: unexpected end of input");return c};function s(){if(r<24)return r;if(r===24){let a=i(e);return e+=1,a}if(r===25){let a=i(e)<<8|i(e+1);return e+=2,a}if(r===26){let a=(i(e)<<24|i(e+1)<<16|i(e+2)<<8|i(e+3))>>>0;return e+=4,a}if(r===27){let a=0;for(let c=0;c<8;c++)a=a*256+i(e+c);return e+=8,a}throw new Error(`Unsupported CBOR length info: ${r}`)}switch(o){case 0:return{value:s(),offset:e};case 1:return{value:-1-s(),offset:e};case 2:{let a=s();if(e+a>t.length)throw new Error("CBOR: byte string is truncated");return{value:t.slice(e,e+a),offset:e+a}}case 3:{let a=s();if(e+a>t.length)throw new Error("CBOR: text string is truncated");return{value:new TextDecoder().decode(t.slice(e,e+a)),offset:e+a}}case 4:{if(r===31){let u=[];for(;i(e)!==255;){let d=re(t,e);u.push(d.value),e=d.offset}return{value:u,offset:e+1}}let a=s(),c=[];for(let u=0;u<a;u++){let d=re(t,e);c.push(d.value),e=d.offset}return{value:c,offset:e}}case 5:{if(r===31){let u={};for(;i(e)!==255;){let d=re(t,e);e=d.offset;let h=re(t,e);e=h.offset,u[String(d.value)]=h.value}return{value:u,offset:e+1}}let a=s(),c={};for(let u=0;u<a;u++){let d=re(t,e);e=d.offset;let h=re(t,e);e=h.offset,c[String(d.value)]=h.value}return{value:c,offset:e}}case 6:return s(),re(t,e);case 7:{if(r===20)return{value:!1,offset:e};if(r===21)return{value:!0,offset:e};if(r===22)return{value:null,offset:e};if(r===23)return{value:void 0,offset:e};throw new Error(`Unsupported CBOR simple value: ${r}`)}default:throw new Error(`Unsupported CBOR major type: ${o}`)}}function Hn(t){let n=Je(t,0).contentStart,o=L(t,n),r=t.slice(n,o.end);n=o.end,n=L(t,n).end;let s=L(t,n),a=t.slice(s.contentStart+1,s.end),c=_a(a,48),{publicKey:u,notBeforeMs:d,notAfterMs:h}=Oa(r);return{tbsCertificate:r,signature:c,publicKey:u,notBeforeMs:d,notAfterMs:h}}function L(t,e){let n=t[e];if(n===void 0)throw new Error("DER: unexpected end of input");let o=e+1,r=t[o++];if(r===void 0)throw new Error("DER: unexpected end of input");if(r&128){let s=r&127;r=0;for(let a=0;a<s;a++){let c=t[o++];if(c===void 0)throw new Error("DER: unexpected end of input");r=r*256+c}}let i=o+r;if(i>t.length)throw new Error("DER: element is truncated");return{tag:n,contentStart:o,contentEnd:i,end:i}}function Je(t,e){let n=L(t,e);if(n.tag!==48)throw new Error(`Expected SEQUENCE at offset ${e}, got tag 0x${n.tag.toString(16)}`);return n}function Oa(t){let n=Je(t,0).contentStart;t[n]===160&&(n=L(t,n).end),n=L(t,n).end,n=L(t,n).end,n=L(t,n).end;let o=Je(t,n),r=o.contentStart,i=L(t,r);r=i.end;let s=L(t,r),a=Cr(t,i),c=Cr(t,s);n=o.end,n=L(t,n).end;let d=Je(t,n).contentStart;d=L(t,d).end;let f=L(t,d);return{publicKey:t.slice(f.contentStart+1,f.end),notBeforeMs:a,notAfterMs:c}}function Cr(t,e){let n=String.fromCharCode(...t.slice(e.contentStart,e.contentEnd)),o,r;if(e.tag===23){if(!/^\d{12}Z$/.test(n))throw new Error(`DER: malformed UTCTime "${n}"`);let d=Number.parseInt(n.slice(0,2),10);o=d<50?2e3+d:1900+d,r=n.slice(2)}else if(e.tag===24){if(!/^\d{14}Z$/.test(n))throw new Error(`DER: malformed GeneralizedTime "${n}"`);o=Number.parseInt(n.slice(0,4),10),r=n.slice(4)}else throw new Error(`DER: expected a Time value, got tag 0x${e.tag.toString(16)}`);let i=Number.parseInt(r.slice(0,2),10),s=Number.parseInt(r.slice(2,4),10),a=Number.parseInt(r.slice(4,6),10),c=Number.parseInt(r.slice(6,8),10),u=Number.parseInt(r.slice(8,10),10);return Date.UTC(o,i-1,s,a,c,u)}function _a(t,e){let o=Je(t,0).contentStart,r=L(t,o);if(r.tag!==2)throw new Error("Expected INTEGER for r");let i=t.slice(r.contentStart,r.end);o=r.end;let s=L(t,o);if(s.tag!==2)throw new Error("Expected INTEGER for s");let a=t.slice(s.contentStart,s.end);if(i[0]===0&&i.length>e&&(i=i.slice(1)),a[0]===0&&a.length>e&&(a=a.slice(1)),i.length>e||a.length>e)throw new Error("ECDSA signature component longer than the curve coordinate size");let c=new Uint8Array(e*2);return c.set(i,e-i.length),c.set(a,e*2-a.length),c}async function Cn(t,e,n){if(n.length!==97||n[0]!==4||t.length!==96)return!1;try{let o=await Yt.subtle.importKey("raw",n,{name:"ECDSA",namedCurve:"P-384"},!1,["verify"]);return await Yt.subtle.verify({name:"ECDSA",hash:"SHA-384"},o,t,e)}catch{return!1}}function Ka(t){let e={},n=t.pcrs;if(!n||typeof n!="object")return e;for(let[o,r]of Object.entries(n))if(r instanceof Uint8Array){let i=w.Buffer.from(r).toString("hex");i.replace(/0/g,"").length>0&&(e[Number(o)]=i)}return e}y();var xt="0.2.0";function Sr(){return xt}async function Pn(t,e){let n=e?.startedAt??new Date().toISOString(),o=await hn(t,e?.trustAnchors!==void 0?{trustAnchors:e.trustAnchors}:void 0),r=await ln(t),i=await pn(t,r),s=gn(t),a=wn(t),c=await En(t,a),u=kn(t,r,a,c),d=await $n(t,s,e?.trustedRootCaDer!==void 0?{trustedRootCaDer:e.trustedRootCaDer}:void 0);return{runMetadata:{toolVersion:Sr(),startedAt:n,bundlePath:t.bundlePath,container:t.container},ingest:t,verification:o,reconstruction:r,anomalies:i,authorities:s,anchors:a,witnesses:c,temporal:u,attestations:d}}y();y();y();y();y();function vt(t){let e=!1;for(let n of t){if(n==="FALSE")return"FALSE";n==="UNDETERMINED"&&(e=!0)}return e?"UNDETERMINED":"TRUE"}y();y();var Tn="0.4.0";var qa=[{pcr0:"8530a6399399c4f23d89f5a1faa2e8bf2e09a5959f117070fca08148377f92c902c695fc926c17f67f35f110327dca92",label:"genesis",period:"2026-05-15 to 2026-06-27"},{pcr0:"bb9dd158703603ec222fe565495ceaa7edc08f665da5c1cddad91442ac2211731390267036d79deb720d13fb704f648a",label:"enclave v2 (reproducible)",period:"2026-06-27 to 2026-07-05"},{pcr0:"e2fccbae77ee40aac4830e84f195e05d69eb4547bbd961f4d3459feba10807140424aca42ad03810354982598c86b9cb",label:"enclave v4 (reproducible)",period:"2026-07-05 to 2026-07-29"},{pcr0:"6483cedffed74680ffb287507744a398b288c3fb943eb3f2e4fe889f8b60b3d575ad8942350360b69a1bd7bf713df27f",label:"enclave v5 (reproducible)",period:"2026-07-29 onward"}],Wa=new Set(["unexplained-counter-positions","chain-break-missing","epochlink-terminal-missing","epochlink-dangling"]);async function Mr(t,e){let n=await Pn(t,{startedAt:""});return Ja(n,e)}function Ja(t,e){let n=e?.webCryptoAvailable??!0,o=new Map(t.anchors.anchors.map(m=>[m.proofHash,m])),r=new Map(t.attestations.records.map(m=>[m.proofHash,m])),i=new Map;for(let m of t.temporal.segments)for(let v of m.memberProofHashes)i.set(v,m);let s=new Map;for(let m of t.witnesses.outcomes){if(m.anchorProofHash===void 0)continue;let v=s.get(m.anchorProofHash)??[];v.push(m),s.set(m.anchorProofHash,v)}let a=new Map;for(let m of t.ingest.artifacts)for(let v of m.matchedProofHashes)!a.has(v)&&m.paths[0]!==void 0&&a.set(v,m.paths[0]);let c=[],u=[];for(let m of t.ingest.proofs){let v=o.get(m.proofHash);v!==void 0?u.push(nc(m,v,s.get(m.proofHash)??[])):c.push(Xa(m,r.get(m.proofHash),i.get(m.proofHash),a.get(m.proofHash),n))}Pr(c),Pr(u);let d=oc(t),h=rc(t,c,u),f=ic(u.length>0),l=[...c.map(m=>m.result),...u.map(m=>m.result),...d.map(m=>m.result)],g=l.length===0?"UNDETERMINED":vt(l);return{check:"bitgraph-check/1",result:g,summary:sc(g,c,u,d),recordings:c,anchors:u,contradictions:d,notes:h,notChecked:f,evaluator:{name:"bitgraph-player",version:Tn,audit:xt},network:"none"}}function Pr(t){let e=n=>[n.epochId??"",n.counter!==void 0&&/^[0-9]+$/.test(n.counter)?BigInt(n.counter):void 0];t.sort((n,o)=>{let[r,i]=e(n),[s,a]=e(o);return r!==s?r<s?-1:1:i===void 0||a===void 0?i===void 0?a===void 0?0:1:-1:i<a?-1:i>a?1:0})}function Xa(t,e,n,o,r){let i=[],s=t.verification,a=t.proof.artifact.digestB64;s?.tier==="full"?i.push({name:"file",result:s.status==="verified"||s.status==="failed"?"TRUE":"UNDETERMINED",detail:s.status==="verified"||s.status==="failed"?`${o??"the matched file"} hashes to the recorded digest ${a}`:`no file in this bundle hashes to the recorded digest ${a}`}):i.push({name:"file",result:"UNDETERMINED",detail:`no file in this bundle hashes to the recorded digest ${a}; the recording cannot be bound to bytes in hand`}),s===void 0?i.push({name:"signature",result:"UNDETERMINED",detail:"the proof was not verified"}):s.status==="failed"?i.push({name:"signature",result:"FALSE",detail:`the proof does not verify: ${s.reason??"unspecified failure"}`}):i.push({name:"signature",result:"TRUE",detail:`Ed25519 signature and slot binding verify under signer key ${Mn(t.publicKeyB64)}`});let c=Ya(e,r);i.push(c.line),i.push(Za(c.attestedPcr0,c.line.result));let u=vt(i.map(d=>d.result));return{proofHash:t.proofHash,digestB64:a,...t.epochId!==void 0?{epochId:t.epochId}:{},chainId:t.chainId,...t.counter!==void 0?{counter:t.counter}:{},...t.slotCounter!==void 0?{slotCounter:t.slotCounter}:{},...t.publicKeyB64!==void 0?{publicKeyB64:t.publicKeyB64}:{},...o!==void 0&&s?.tier==="full"?{filePath:o}:{},lines:i,result:u,bounds:Qa(n)}}function Ya(t,e){return t===void 0||!t.documentPresent?{line:{name:"attestation",result:"UNDETERMINED",detail:"no attestation document in this proof"}}:e?t.documentValidated?t.userDataBoundToProof!==!0?{line:{name:"attestation",result:"FALSE",detail:"attestation document validates but its user_data is not this proof: the document belongs to some other proof"},attestedPcr0:t.attestedPcr0}:t.pcr0MatchesDeclared!==!0?{line:{name:"attestation",result:"FALSE",detail:`attestation validates and binds this proof, but its PCR0 ${Xe(t.attestedPcr0)} is not the measurement the signed body declares ${Xe(t.declaredMeasurement)}`},attestedPcr0:t.attestedPcr0}:{line:{name:"attestation",result:"TRUE",detail:`AWS Nitro attestation validates to the AWS root, binds this exact proof (user_data), and attests PCR0 ${Xe(t.attestedPcr0)}`},attestedPcr0:t.attestedPcr0}:{line:{name:"attestation",result:"FALSE",detail:`attestation document does not validate: ${t.validationFailure??"unspecified failure"}`}}:{line:{name:"attestation",result:"UNDETERMINED",detail:"attestation not checked: this environment cannot verify ECDSA P-384 (no WebCrypto); open the verifier from a file or https page, or run bitgraph-play check"}}}function Za(t,e){if(e!=="TRUE"||t===void 0)return{name:"enclave",result:"UNDETERMINED",detail:"enclave identity rests on a validated attestation, which this recording does not have here"};let n=qa.find(o=>o.pcr0===t.toLowerCase());return n===void 0?{name:"enclave",result:"UNDETERMINED",detail:`PCR0 ${Xe(t)} is not among the BitGraph enclave measurements this verifier knows (player ${Tn}); compare it against the measurements published at bitgraph.ing/docs/self-host-tee`}:{name:"enclave",result:"TRUE",detail:`PCR0 ${Xe(t)} is the published BitGraph ${n.label} measurement (${n.period})`}}function Qa(t){if(t===void 0)return{status:"unanchored",detail:"no verified Ethereum anchor bounds this recording in this bundle"};let e=Tr(t.lowerBounds,"not-before"),n=Tr(t.upperBounds,"not-after"),o=e===void 0?void 0:Rr(e),r=n===void 0?void 0:Rr(n),i=o!==void 0&&r!==void 0?"bracketed":o!==void 0?"lower-bounded":r!==void 0?"upper-bounded":"unanchored",s=i==="unanchored"?"no verified Ethereum anchor bounds this recording in this bundle":`recorded ${ec(i,o,r)}`;return{status:i,...o!==void 0?{notBefore:o}:{},...r!==void 0?{notAfter:r}:{},detail:s}}function ec(t,e,n){switch(t){case"bracketed":return`after Ethereum block ${le(e)} and before block ${le(n)} (both headers verified in this bundle)`+Rn(e.weaker||n.weaker);case"lower-bounded":return`after Ethereum block ${le(e)} (header verified in this bundle); no verified upper bound here`+Rn(e.weaker);case"upper-bounded":return`before Ethereum block ${le(n)} (header verified in this bundle); no verified lower bound here`+Rn(n.weaker);default:return"with no verified Ethereum bound in this bundle"}}function Tr(t,e){let n=t.filter(r=>r.kind===e);return n.length===0?void 0:[...n].sort((r,i)=>{let s=r.blockNumber!==void 0?BigInt(r.blockNumber):BigInt(r.timestamp),a=i.blockNumber!==void 0?BigInt(i.blockNumber):BigInt(i.timestamp);return s!==a?e==="not-before"?s>a?-1:1:s<a?-1:1:r.weaker!==i.weaker?r.weaker?1:-1:0})[0]}function Rr(t){return{...t.blockNumber!==void 0?{blockNumber:t.blockNumber}:{},blockHash:t.blockHash,timestamp:t.timestamp,anchorProofHash:t.anchorProofHash,evidence:t.evidence,weaker:t.weaker}}function tc(t){switch(t.status){case"bracketed":return`between Ethereum blocks ${le(t.notBefore)} and ${le(t.notAfter)}`;case"lower-bounded":return`after Ethereum block ${le(t.notBefore)}`;case"upper-bounded":return`before Ethereum block ${le(t.notAfter)}`;default:return"with no Ethereum bound in this bundle"}}function le(t){return t.blockNumber!==void 0?t.blockNumber:t.blockHash}function Rn(t){return t?"; ordered by counter position within the epoch, since the recordings between are not in this bundle":""}function nc(t,e,n){let o=[],r=t.verification;r===void 0?o.push({name:"signature",result:"UNDETERMINED",detail:"the anchor proof was not verified"}):r.status==="failed"?o.push({name:"signature",result:"FALSE",detail:`the anchor proof does not verify: ${r.reason??"unspecified failure"}`}):o.push({name:"signature",result:"TRUE",detail:`anchor proof verifies under signer key ${Mn(t.publicKeyB64)}`});let i;if(n.length>0){let s=n.find(a=>a.verified);if(s!==void 0)i=s.witnessPath,o.push({name:"witness",result:"TRUE",detail:`block header ${s.witnessPath} hashes (keccak-256) to the anchored block hash${e.blockNumber!==void 0?` of block ${e.blockNumber}`:""}`});else{let a=n[0];i=a.witnessPath,o.push({name:"witness",result:"FALSE",detail:`block header ${a.witnessPath} contradicts this anchor: ${a.detail??a.reason??"witness verification failed"}`})}}return{proofHash:t.proofHash,...t.epochId!==void 0?{epochId:t.epochId}:{},chainId:t.chainId,...t.counter!==void 0?{counter:t.counter}:{},...e.blockNumber!==void 0?{blockNumber:e.blockNumber}:{},...e.blockHash!==void 0?{blockHash:e.blockHash}:{},...i!==void 0?{witnessPath:i}:{},lines:o,result:vt(o.map(s=>s.result))}}function oc(t){let e=[],n=new Set,o=r=>{n.has(r)||(n.add(r),e.push({name:"contradiction",result:"FALSE",detail:r}))};for(let r of t.anomalies.anomalies)Wa.has(r.code)||o(`${r.code}: ${r.message}`);for(let r of t.anomalies.divergences)o(`${r.kind}: ${r.explanation}`);for(let r of t.authorities.anomalies)o(`${r.code}: ${r.message}`);for(let r of t.witnesses.findings)(r.code==="witness-unmatched"||r.code==="witness-malformed"||r.code==="witness-rlp-invalid")&&o(`${r.code}: ${r.message}`);for(let r of t.ingest.findings)r.code==="proofhash-mismatch"&&o(`${r.code}: ${r.message}${r.path!==void 0?` (${r.path})`:""}`);return e}function rc(t,e,n){let o=[],r=0n,i=0;for(let u of t.anomalies.anomalies)if(u.code==="unexplained-counter-positions"){let d=u.details?.count;d!==void 0&&/^[0-9]+$/.test(d)&&(r+=BigInt(d))}else u.code==="chain-break-missing"&&(i+=u.proofHashes.length);r>0n&&o.push(`${r} causal position${r===1n?"":"s"} between the earliest and latest recording here ${r===1n?"is":"are"} not in this bundle: normal for an export, which is an excerpt of the chain; a full-epoch audit checks them`),i>0&&o.push(`${i} recording${i===1?"":"s"} link${i===1?"s":""} to a predecessor that is not in this bundle: normal for an export`);let s=t.ingest.artifacts.filter(u=>u.matchedProofHashes.length===0);if(s.length>0&&e.length>0){let u=s.slice(0,5).map(d=>`${d.paths[0]??"(unnamed)"} (sha256:${d.sha256Hex.slice(0,16)}\u2026)`).join(", ");o.push(`${s.length} file${s.length===1?"":"s"} in this bundle match${s.length===1?"es":""} no recording here: ${u}${s.length>5?", \u2026":""}. If ${s.length===1?"it":"one of them"} was meant to be a recorded file, its bytes differ from what was recorded`)}let a=n.filter(u=>u.witnessPath===void 0);a.length>0&&o.push(`${a.length} Ethereum anchor${a.length===1?"":"s"} in this bundle ha${a.length===1?"s":"ve"} no block-header witness file, so ${a.length===1?"its":"their"} block hash${a.length===1?" is":"es are"} not verified here and no bound is derived from ${a.length===1?"it":"them"}`);for(let u of t.ingest.unsupportedVersions)o.push(`${u.path} is proof-shaped but its version "${u.version}" is not bitgraph/1; it was not checked`);let c=t.ingest.counts;if((c.exactDuplicates>0||c.semanticDuplicates>0)&&o.push(`${c.exactDuplicates+c.semanticDuplicates} duplicate proof file${c.exactDuplicates+c.semanticDuplicates===1?"":"s"} collapsed to one recording each`),t.ingest.manifest!==void 0)for(let u of t.ingest.findings)typeof u.code=="string"&&u.code.startsWith("manifest-")&&o.push(`${u.code}: ${u.message}`);return e.length===0&&n.length===0&&o.push("no BitGraph proofs were found in this bundle"),o}function ic(t){let e=[];return t&&e.push("whether the anchored Ethereum blocks are canonical: their headers are recomputed here, but canonicality needs an Ethereum node or a block explorer"),e.push("whether the public ledger holds these exact recordings at these positions: this is an offline check; drop the file on bitgraph.ing to compare against the ledger"),e.push("whether an epoch key was later quarantined: that is published outside any bundle"),e}function sc(t,e,n,o){if(e.length===0&&n.length===0)return"UNDETERMINED: no BitGraph proofs were found in this bundle.";let r=e.length,i=`${r} recording${r===1?"":"s"}`;if(t==="TRUE"){let a=e[0];return r===1&&a!==void 0?`TRUE: this file was recorded${a.counter!==void 0?` at position ${a.counter}${a.epochId!==void 0?` of epoch ${Mn(a.epochId)}`:""}`:""}, ${tc(a.bounds)}.`:`TRUE: ${i} verified: files match, signatures and attestations hold, enclave measurements published${n.length>0?", Ethereum bounds verified from block headers in the bundle":""}.`}if(t==="FALSE")return`FALSE: evidence in this bundle contradicts itself. ${[...e.flatMap(c=>c.lines.filter(u=>u.result==="FALSE").map(u=>`${u.name}: ${u.detail}`)),...n.flatMap(c=>c.lines.filter(u=>u.result==="FALSE").map(u=>`${u.name}: ${u.detail}`)),...o.map(c=>c.detail)][0]??""}`.trim();let s=[...e.flatMap(a=>a.lines.filter(c=>c.result==="UNDETERMINED").map(c=>c.detail)),...n.flatMap(a=>a.lines.filter(c=>c.result==="UNDETERMINED").map(c=>c.detail))];return`UNDETERMINED: nothing here contradicts the ${i}, but the evidence does not fully decide. ${s[0]??""}`.trim()}function Mn(t){return t===void 0?"(none)":t.length>12?`${t.slice(0,12)}\u2026`:t}function Xe(t){return t===void 0?"(none)":t.length>16?`${t.slice(0,16)}\u2026`:t}st.sha512Async=async(...t)=>ft(st.concatBytes(...t));var Or=typeof globalThis.crypto<"u"&&globalThis.crypto.subtle!==void 0;function _r(t){return new Promise((e,n)=>{let o=[],r=()=>{t.readEntries(i=>{if(i.length===0){e(o);return}o.push(...i),r()},n)};r()})}function ac(t){return new Promise((e,n)=>t.file(e,n))}async function Nn(t,e,n){if(t.isFile){let o=await ac(t);n.push({path:e+t.name,file:o});return}if(t.isDirectory){let o=t.createReader(),r=await _r(o);for(let i of r)i.name!==".DS_Store"&&await Nn(i,`${e}${t.name}/`,n)}}async function cc(t){let n=Array.from(t.items??[]).map(r=>typeof r.webkitGetAsEntry=="function"?r.webkitGetAsEntry():null).filter(r=>r!==null);if(n.length===0)return Array.from(t.files??[]).map(r=>({path:r.name,file:r}));let o=[];if(n.length===1&&n[0]!==void 0&&n[0].isDirectory){let r=n[0];for(let i of await _r(r.createReader()))i.name!==".DS_Store"&&await Nn(i,"",o)}else for(let r of n)await Nn(r,"",o);return o.length===0?Array.from(t.files??[]).map(r=>({path:r.name,file:r})):o}function Dr(t){let e=Array.from(t.files??[]),n=e.map(s=>s.webkitRelativePath||s.name),o=n.map(s=>s.indexOf("/")),r=n.length>0&&o.every(s=>s>0)?n[0].slice(0,o[0]):void 0,i=r!==void 0&&n.every(s=>s.startsWith(`${r}/`));return e.map((s,a)=>({path:i?n[a].slice(r.length+1):n[a],file:s})).filter(s=>!s.path.endsWith("/.DS_Store")&&s.path!==".DS_Store")}function uc(t){return t.map(e=>({path:e.path,open:()=>e.file.arrayBuffer().then(n=>new Uint8Array(n))}))}function E(t,e={},n=[]){let o=document.createElement(t);for(let[r,i]of Object.entries(e))r==="class"?o.className=i:o.setAttribute(r,i);for(let r of n)o.append(typeof r=="string"?document.createTextNode(r):r);return o}function Un(t){return t==="TRUE"?null:E("span",{class:t==="FALSE"?"mark false":"mark undet"},[t])}function Ye(t,e,n={}){let o=E("div",{class:"field-head"},[E("span",{class:"field-label"},[t])]),r=n.mark!==void 0?Un(n.mark):null;return r!==null&&o.append(r),E("div",{class:"field"},[o,E("span",{class:n.mono?"field-value mono":"field-value"},[e])])}function pe(t,e,n={}){let o=n.open===!0,r=E("span",{class:"chev","aria-hidden":"true"});r.innerHTML='<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="square" stroke-linejoin="miter"><path d="M9 6 L15 12 L9 18"/></svg>';let i=E("button",{class:`opener-head${n.tone==="danger"?" danger":""}`,type:"button","aria-expanded":String(o)},[E("span",{},[t]),r]),s=E("div",{class:"opener-body"},e),a=E("section",{class:"card"},[i,s]),c=()=>{i.classList.toggle("open",o),i.setAttribute("aria-expanded",String(o)),s.hidden=!o,r.classList.toggle("open",o)};return i.addEventListener("click",()=>{o=!o,c()}),c(),a}function dc(t){return t==="TRUE"?"BitGraph Verified":t==="FALSE"?"Verification Failed":"Not Fully Verified"}function hc(t){return t===void 0?"":`#${Number(t).toLocaleString("en-US")}`}function fc(t){return new Date(t*1e3).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"})}function Bt(t,e){return new Date(t*1e3).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",second:"2-digit",...e?{timeZoneName:"short"}:{}})}function lc(t){return new Date(t*1e3).toLocaleString("en-US",{month:"numeric",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",second:"2-digit",timeZoneName:"short"})}function Lr(t){let e=t.bounds,n=i=>E("span",{class:"when-grey"},[i]),o=i=>E("span",{class:"when-dark"},[i]),r=E("div",{class:"when"});if(e.notBefore!==void 0||e.notAfter!==void 0){let i=e.notBefore??e.notAfter;r.append(E("div",{class:"when-date"},[fc(i.timestamp)]));let s=E("div",{class:"when-line"});e.notBefore!==void 0&&e.notAfter!==void 0?s.append(n("between "),o(Bt(e.notBefore.timestamp,!1)),n(" and "),o(Bt(e.notAfter.timestamp,!0))):e.notBefore!==void 0?s.append(n("after "),o(Bt(e.notBefore.timestamp,!0))):e.notAfter!==void 0&&s.append(n("before "),o(Bt(e.notAfter.timestamp,!0))),r.append(s)}else r.append(E("div",{class:"when-line"},[n("no verified Ethereum bound in this bundle")]));return r}var pc=/\.(jpe?g|png|gif|webp|avif|bmp|svg)$/i,mc=/\.(mp4|m4v|mov|webm|ogv)$/i,gc=/\.(mp3|wav|m4a|aac|flac|ogg|oga)$/i,yc=/\.(txt|md|markdown|json|csv|tsv|log|xml|yaml|yml|html?|css|js|ts|py|sh|rtf)$/i;function bc(t){let e=t.subarray(0,Math.min(2048,t.length));if(!e.length)return!1;let n=0;for(let o of e){if(o===0)return!1;(o===9||o===10||o===13||o>=32)&&n++}return n/e.length>.97}function wc(t,e){let n=t.toLowerCase();return n.endsWith(".pdf")?"pdf":pc.test(n)?"image":mc.test(n)?"video":gc.test(n)?"audio":yc.test(n)||bc(e)?"text":"other"}function xc(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(t<10*1024?1:0)} KB`:t<1024*1024*1024?`${(t/(1024*1024)).toFixed(1)} MB`:`${(t/(1024*1024*1024)).toFixed(2)} GB`}function vc(t,e,n){if(n==="image"||n==="video"){let o=URL.createObjectURL(t),r=n==="image"?E("img",{src:o,alt:t.name,style:"display:block;max-width:100%;max-height:min(70vh,640px);width:auto;height:auto;object-fit:contain;border-radius:0"}):E("video",{src:o,controls:"",style:"display:block;max-width:100%;max-height:min(70vh,640px);border-radius:0"});return E("div",{style:"padding:20px;display:flex;align-items:center;justify-content:center"},[r])}if(n==="audio"){let o=URL.createObjectURL(t);return E("div",{style:"padding:20px 16px"},[E("audio",{src:o,controls:"",style:"display:block;width:100%"})])}if(n==="text")try{let o=new TextDecoder("utf-8",{fatal:!1}).decode(e.subarray(0,6e3)),r=o.split(`
153
+ `),i=r.slice(0,24).join(`
154
+ `).slice(0,3e3),s=r.length>24||o.length>i.length||e.byteLength>6e3;return E("pre",{class:"excerpt"},[i+(s?`
155
+ \u2026`:"")])}catch{return null}return null}function Nr(t,e,n,o){let r=t.lines.find(s=>s.name==="file"),i=E("div",{class:o?"file-row above":"file-row"});if(t.filePath!==void 0){let s=E("span",{class:"file-ident"},[E("span",{class:"file-name"},[t.filePath])]);e!==void 0&&s.append(document.createTextNode(` \xB7 ${xc(e.size)}`)),i.append(s);let a=E("span",{class:"file-right"});e!==void 0&&n!==void 0&&(n==="image"||n==="text"||n==="pdf")&&a.append(E("a",{class:"bg-arrow-link",href:URL.createObjectURL(e),target:"_blank",rel:"noopener"},["Open ",E("span",{class:"arrow","aria-hidden":"true"},["\u2192"])]));let c=r!==void 0?Un(r.result):null;c!==null&&a.append(c),a.childNodes.length>0&&i.append(a)}else{i.append(E("span",{class:"file-missing"},["file not in this bundle"]));let s=r!==void 0?Un(r.result):null;s!==null&&i.append(s)}return i}function ie(t,e,n=!1){return Ye(t,e,{mono:n})}function Ur(t,e){let n=document.getElementById("title-action");if(n===null)return;let o=E("a",{class:"bg-arrow-link",href:"#"},[t+" ",E("span",{class:"arrow","aria-hidden":"true"},["\u2192"])]);o.addEventListener("click",r=>{r.preventDefault(),e()}),n.replaceChildren(o)}function Fr(t){let e={file:"File",signature:"Signature",attestation:"Hardware Enclave attestation",enclave:"Enclave identity",witness:"Block header",contradiction:"Contradiction"};return t.lines.map(n=>Ye(e[n.name]??n.name,n.detail,{mark:n.result}))}function Bc(t,e,n,o){let r=e==="before"?"Recorded after this block":e==="after"?"Recorded before this block":`Ethereum anchor ${n+1}`,i=[];if(t.blockNumber!==void 0&&i.push(ie("Block",hc(t.blockNumber),!0)),o!==void 0&&i.push(ie("Block Time",lc(o))),t.blockHash!==void 0&&i.push(ie("Block Hash",t.blockHash,!0)),t.counter!==void 0&&i.push(ie("Anchor position",`#${t.counter}`,!0)),t.blockNumber!==void 0){let s=E("a",{class:"field-link",href:`https://etherscan.io/block/${t.blockNumber}`,target:"_blank",rel:"noopener"},[`https://etherscan.io/block/${t.blockNumber}`]);i.push(E("div",{class:"field"},[E("span",{class:"field-label"},["Etherscan"]),s]))}for(let s of t.lines)i.push(Ye(s.name==="witness"?"Block header":"Anchor signature",s.detail,{mark:s.result}));return t.witnessPath===void 0&&i.push(Ye("Block header","no block-header witness in this bundle, so this anchor's block hash is not verified here and it bounds nothing")),pe(t.result==="TRUE"?r:`${r} [${t.result}]`,i)}async function Ec(t,e,n,o){e.replaceChildren();let r=()=>location.reload();if(t.recordings.length===0&&t.anchors.length===0){n.textContent="No BitGraph Found",e.append(E("section",{class:"card primary"},[E("div",{class:"notice"},["No BitGraph proof was found in what you chose. In your BitGraph Folder a recording is a folder inside Recordings, under the day it was sealed, named for the file: BitGraph (photo.jpg). It holds proof.json beside the file, and its Ethereum anchors."])])),Ur("Choose a recording folder",r),e.append(pe("Report JSON",[E("pre",{class:"json"},[JSON.stringify(t,null,2)])]));let u=document.getElementById("more");u.replaceChildren(),u.hidden=!0;return}n.textContent=dc(t.result);let i=t.recordings.length===1?t.recordings[0]:void 0,s=E("section",{class:"card primary"});if(t.result!=="TRUE"&&s.append(E("div",{class:`notice ${t.result.toLowerCase()}`},[t.summary])),i!==void 0){s.append(Lr(i));let u=i.filePath!==void 0?o.get(i.filePath):void 0,d,h=null;if(u!==void 0){let f=new Uint8Array(await u.arrayBuffer());d=wc(u.name,f),h=vc(u,f,d)}h!==null&&s.append(h),s.append(Nr(i,u,d,h!==null)),i.counter!==void 0&&s.append(ie("Position",`#${i.counter}${i.epochId!==void 0?` \xB7 epoch ${i.epochId}`:""}`,!0)),s.append(ie("File Hash",i.digestB64,!0))}else if(t.recordings.length>1)for(let u of t.recordings)s.append(Nr(u,u.filePath!==void 0?o.get(u.filePath):void 0,void 0,!1));else s.append(ie("Recordings","no recordings in this bundle"));if(e.append(s),Ur("Check another BitGraph",r),i!==void 0){let u=i.lines.filter(d=>d.result!=="TRUE").length;e.append(pe(u===0?"Recording checks":`Recording checks ${u} not verified`,Fr(i),{open:t.result!=="TRUE"}))}else t.recordings.forEach((u,d)=>{e.append(pe(`Recording ${d+1}: ${u.filePath??u.digestB64.slice(0,16)+"\u2026"} [${u.result}]`,[Lr(u),...u.counter!==void 0?[ie("Position",`#${u.counter}${u.epochId!==void 0?` \xB7 epoch ${u.epochId}`:""}`,!0)]:[],ie("File Hash",u.digestB64,!0),...Fr(u)],{open:u.result!=="TRUE"}))});let a=new Map;for(let u of t.recordings)u.bounds.notBefore&&a.set(u.bounds.notBefore.anchorProofHash,u.bounds.notBefore.timestamp),u.bounds.notAfter&&a.set(u.bounds.notAfter.anchorProofHash,u.bounds.notAfter.timestamp);t.anchors.forEach((u,d)=>{let h="other";i!==void 0&&(i.bounds.notBefore?.anchorProofHash===u.proofHash?h="before":i.bounds.notAfter?.anchorProofHash===u.proofHash&&(h="after")),e.append(Bc(u,h,d,a.get(u.proofHash)))}),t.contradictions.length>0&&e.append(pe(`Contradictions ${t.contradictions.length}`,t.contradictions.map(u=>Ye("Contradiction",u.detail,{mark:"FALSE"})),{open:!0,tone:"danger"})),t.notes.length>0&&e.append(pe(`Notes ${t.notes.length}`,[E("ul",{class:"list"},t.notes.map(u=>E("li",{},[u])))])),e.append(pe("Not checked",[E("ul",{class:"list"},t.notChecked.map(u=>E("li",{},[u])))])),e.append(pe("Report JSON",[E("pre",{class:"json"},[JSON.stringify(t,null,2)])]));let c=document.getElementById("more");c.replaceChildren(),c.hidden=!0}async function Dn(t){let e=document.getElementById("drop"),n=document.getElementById("results"),o=document.getElementById("status");if(t.length===0){o.textContent="Nothing readable was dropped.";return}e.classList.add("busy"),o.textContent=`Checking ${t.length} file${t.length===1?"":"s"}\u2026`;try{let r=await cn(uc(t),{label:"dropped"}),i=await Mr(r,{webCryptoAvailable:Or});document.getElementById("camera").hidden=!0,document.getElementById("deck").hidden=!0,document.querySelector(".bitgraph-wrap")?.classList.add("bitgraph-results"),document.querySelector(".bitgraph-hero")?.classList.add("results"),o.textContent="",n.hidden=!1;let s=new Map(t.map(a=>[a.path,a.file]));await Ec(i,n,document.getElementById("title"),s),document.title=`${i.result} \xB7 BitGraph verify`}catch(r){o.textContent=`The check could not run: ${r.message}`}finally{e.classList.remove("busy")}}function Ln(){let t=document.querySelector(".bitgraph-wrap");t&&t.style.setProperty("--bg-wrap-min",`${Math.round(window.innerHeight)}px`)}function kc(){let t=document.getElementById("drop"),e=document.getElementById("status"),n=document.getElementById("pick-files"),o=document.getElementById("pick-folder");Ln(),window.addEventListener("resize",Ln),window.addEventListener("orientationchange",Ln),Or||(e.textContent="This browser context has no WebCrypto, so attestations will read UNDETERMINED here; open the file directly (file://) or over https, or run bitgraph-play check.");let r=!1,i=!1,s=!1,a=()=>{t.classList.toggle("hot",r||i||s),t.classList.toggle("over",s)};t.addEventListener("mouseenter",()=>{r=!0,a()}),t.addEventListener("mouseleave",()=>{r=!1,a()}),t.addEventListener("focusin",()=>{i=!0,a()}),t.addEventListener("focusout",()=>{i=!1,a()});let c=u=>{u.preventDefault(),u.stopPropagation()};for(let u of["dragenter","dragover"])t.addEventListener(u,d=>{c(d),s=!0,a()}),document.body.addEventListener(u,c);for(let u of["dragleave","drop"])t.addEventListener(u,d=>{c(d),s=!1,a()}),document.body.addEventListener(u,c);t.addEventListener("drop",u=>{let d=u.dataTransfer;d!==null&&(e.textContent="Reading the drop\u2026",cc(d).then(h=>{if(h.length===0){e.textContent="Nothing readable was dropped. Click the box and choose the recording's folder instead.";return}return Dn(h)},h=>{e.textContent=`The drop could not be read here: ${h.message}. Click the box and choose the recording's folder instead.`}))}),t.addEventListener("click",()=>o.click()),t.addEventListener("keydown",u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),o.click())}),n.addEventListener("change",()=>void Dn(Dr(n))),o.addEventListener("change",()=>void Dn(Dr(o)))}document.addEventListener("DOMContentLoaded",kc);})();
156
+
157
+ </script>
158
+ </body>
159
+ </html>