chit402-verify 0.3.4 → 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.
- package/LICENSE +201 -201
- package/README.md +270 -82
- package/dist/anchor-trust.d.ts +144 -0
- package/dist/anchor-trust.d.ts.map +1 -0
- package/dist/anchor-trust.js +441 -0
- package/dist/anchor-trust.js.map +1 -0
- package/dist/anchor-witness.d.ts +265 -0
- package/dist/anchor-witness.d.ts.map +1 -0
- package/dist/anchor-witness.js +833 -0
- package/dist/anchor-witness.js.map +1 -0
- package/dist/base-payer.d.ts +65 -0
- package/dist/base-payer.d.ts.map +1 -0
- package/dist/base-payer.js +222 -0
- package/dist/base-payer.js.map +1 -0
- package/dist/binding.d.ts +52 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/binding.js +80 -0
- package/dist/binding.js.map +1 -0
- package/dist/canonical-preimage.d.ts +9 -0
- package/dist/canonical-preimage.d.ts.map +1 -0
- package/dist/canonical-preimage.js +25 -0
- package/dist/canonical-preimage.js.map +1 -0
- package/dist/carry-forward.d.ts +79 -0
- package/dist/carry-forward.d.ts.map +1 -0
- package/dist/carry-forward.js +184 -0
- package/dist/carry-forward.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2090 -0
- package/dist/cli.js.map +1 -0
- package/dist/epoch.d.ts +143 -0
- package/dist/epoch.d.ts.map +1 -0
- package/dist/epoch.js +352 -0
- package/dist/epoch.js.map +1 -0
- package/dist/head-binding.d.ts +24 -0
- package/dist/head-binding.d.ts.map +1 -0
- package/dist/head-binding.js +61 -0
- package/dist/head-binding.js.map +1 -0
- package/dist/index.d.ts +585 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1648 -0
- package/dist/index.js.map +1 -0
- package/dist/issuer-history.d.ts +151 -0
- package/dist/issuer-history.d.ts.map +1 -0
- package/dist/issuer-history.js +595 -0
- package/dist/issuer-history.js.map +1 -0
- package/dist/issuer-pin.d.ts +126 -0
- package/dist/issuer-pin.d.ts.map +1 -0
- package/dist/issuer-pin.js +567 -0
- package/dist/issuer-pin.js.map +1 -0
- package/dist/jcs.d.ts +8 -0
- package/dist/jcs.d.ts.map +1 -0
- package/dist/jcs.js +64 -0
- package/dist/jcs.js.map +1 -0
- package/dist/jws.d.ts +46 -0
- package/dist/jws.d.ts.map +1 -0
- package/dist/jws.js +129 -0
- package/dist/jws.js.map +1 -0
- package/dist/payer.d.ts +65 -0
- package/dist/payer.d.ts.map +1 -0
- package/dist/payer.js +148 -0
- package/dist/payer.js.map +1 -0
- package/dist/preimage.d.ts +78 -0
- package/dist/preimage.d.ts.map +1 -0
- package/dist/preimage.js +363 -0
- package/dist/preimage.js.map +1 -0
- package/dist/receipt-lane.d.ts +235 -0
- package/dist/receipt-lane.d.ts.map +1 -0
- package/dist/receipt-lane.js +446 -0
- package/dist/receipt-lane.js.map +1 -0
- package/dist/receipt-version.d.ts +98 -0
- package/dist/receipt-version.d.ts.map +1 -0
- package/dist/receipt-version.js +364 -0
- package/dist/receipt-version.js.map +1 -0
- package/dist/refusal.d.ts +93 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +249 -0
- package/dist/refusal.js.map +1 -0
- package/dist/request-binding.d.ts +7 -0
- package/dist/request-binding.d.ts.map +1 -0
- package/dist/request-binding.js +26 -0
- package/dist/request-binding.js.map +1 -0
- package/dist/row-hash.d.ts +22 -0
- package/dist/row-hash.d.ts.map +1 -0
- package/dist/row-hash.js +26 -0
- package/dist/row-hash.js.map +1 -0
- package/dist/shell.d.ts +65 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +268 -0
- package/dist/shell.js.map +1 -0
- package/dist/solana-payer.d.ts +99 -0
- package/dist/solana-payer.d.ts.map +1 -0
- package/dist/solana-payer.js +258 -0
- package/dist/solana-payer.js.map +1 -0
- package/dist/v11-receipt.d.ts +23 -0
- package/dist/v11-receipt.d.ts.map +1 -0
- package/dist/v11-receipt.js +368 -0
- package/dist/v11-receipt.js.map +1 -0
- package/dist/verdict.d.ts +94 -0
- package/dist/verdict.d.ts.map +1 -0
- package/dist/verdict.js +381 -0
- package/dist/verdict.js.map +1 -0
- package/issuer-history.snapshot.json +1 -0
- package/package.json +70 -59
- package/cli.js +0 -27
- package/index.cjs +0 -8
- package/index.d.ts +0 -5
- package/index.js +0 -7
package/dist/preimage.js
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LEAF_NOT_BOUND = void 0;
|
|
4
|
+
exports.auditLeafBinding = auditLeafBinding;
|
|
5
|
+
exports.requiredPreimageFields = requiredPreimageFields;
|
|
6
|
+
exports.verifyPublishedPreimages = verifyPublishedPreimages;
|
|
7
|
+
/**
|
|
8
|
+
* Recompute published receipt preimages.
|
|
9
|
+
* A missing or mismatched preimage fails closed when the caller requires it,
|
|
10
|
+
* and whenever a `preimages` block is present.
|
|
11
|
+
*/
|
|
12
|
+
const node_crypto_1 = require("node:crypto");
|
|
13
|
+
const ethers_1 = require("ethers");
|
|
14
|
+
const anchor_witness_js_1 = require("./anchor-witness.js");
|
|
15
|
+
const row_hash_js_1 = require("./row-hash.js");
|
|
16
|
+
const ALWAYS_REQUIRED = [
|
|
17
|
+
'row_hash',
|
|
18
|
+
'book_chain.row_hash',
|
|
19
|
+
'book_row.row_hash',
|
|
20
|
+
'inclusion.leaf',
|
|
21
|
+
'binding.expected_commitment',
|
|
22
|
+
'job_spec_hash',
|
|
23
|
+
'response_hash',
|
|
24
|
+
];
|
|
25
|
+
function sha256(buf) {
|
|
26
|
+
return (0, node_crypto_1.createHash)('sha256').update(buf).digest();
|
|
27
|
+
}
|
|
28
|
+
function bytesOf(entry) {
|
|
29
|
+
if (!entry)
|
|
30
|
+
return null;
|
|
31
|
+
if (typeof entry.preimage_hex === 'string' && entry.preimage_hex !== '') {
|
|
32
|
+
const hex = entry.preimage_hex.replace(/^0x/, '');
|
|
33
|
+
if (!/^[0-9a-fA-F]*$/.test(hex) || hex.length % 2)
|
|
34
|
+
return null;
|
|
35
|
+
return Buffer.from(hex, 'hex');
|
|
36
|
+
}
|
|
37
|
+
if (typeof entry.preimage_utf8 === 'string')
|
|
38
|
+
return Buffer.from(entry.preimage_utf8, 'utf8');
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
function leafInput(leaf) {
|
|
42
|
+
if (typeof leaf.preimage_hex === 'string' && leaf.preimage_hex !== '') {
|
|
43
|
+
return bytesOf(leaf);
|
|
44
|
+
}
|
|
45
|
+
if (typeof leaf.preimage_utf8 === 'string') {
|
|
46
|
+
return Buffer.concat([Buffer.from([0x00]), Buffer.from(leaf.preimage_utf8, 'utf8')]);
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
function merkleRoot(leaves) {
|
|
51
|
+
const level = [];
|
|
52
|
+
for (const leaf of leaves) {
|
|
53
|
+
const input = leafInput(leaf);
|
|
54
|
+
if (!input)
|
|
55
|
+
return null;
|
|
56
|
+
level.push(sha256(input));
|
|
57
|
+
}
|
|
58
|
+
if (!level.length)
|
|
59
|
+
return null;
|
|
60
|
+
let nodes = level;
|
|
61
|
+
while (nodes.length > 1) {
|
|
62
|
+
const next = [];
|
|
63
|
+
for (let i = 0; i < nodes.length; i += 2) {
|
|
64
|
+
if (i + 1 === nodes.length)
|
|
65
|
+
next.push(nodes[i]);
|
|
66
|
+
else
|
|
67
|
+
next.push(sha256(Buffer.concat([Buffer.from([0x01]), nodes[i], nodes[i + 1]])));
|
|
68
|
+
}
|
|
69
|
+
nodes = next;
|
|
70
|
+
}
|
|
71
|
+
return nodes[0].toString('hex');
|
|
72
|
+
}
|
|
73
|
+
function hasAuditPath(entry) {
|
|
74
|
+
return !!entry.audit_path && !!entry.leaf && Array.isArray(entry.audit_path.siblings);
|
|
75
|
+
}
|
|
76
|
+
/** The audit path folds to this receipt's leaf. A different leaf in the same prefix is not this receipt. */
|
|
77
|
+
exports.LEAF_NOT_BOUND = 'leaf_not_bound';
|
|
78
|
+
function receiptTaskId(receipt) {
|
|
79
|
+
return receipt.task_id == null || receipt.task_id === '' ? '' : String(receipt.task_id);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The row hash the leaf must name. `boundRowHash` agrees top-level
|
|
83
|
+
* `row_hash`, `book_chain.row_hash`, and `inclusion.row_hash`. Null and `''`
|
|
84
|
+
* are missing: do not hash `task_id|`. A disagreement is missing here too.
|
|
85
|
+
*/
|
|
86
|
+
function agreedRowHash(receipt) {
|
|
87
|
+
const inclusion = receipt.inclusion;
|
|
88
|
+
const extra = inclusion && typeof inclusion === 'object'
|
|
89
|
+
? inclusion
|
|
90
|
+
: null;
|
|
91
|
+
const bound = (0, row_hash_js_1.boundRowHash)(receipt, extra);
|
|
92
|
+
if (!bound.ok || bound.row == null || bound.row === '')
|
|
93
|
+
return null;
|
|
94
|
+
return bound.row;
|
|
95
|
+
}
|
|
96
|
+
function decodeHexBytes(value) {
|
|
97
|
+
const hex = value.replace(/^0x/, '');
|
|
98
|
+
if (hex.length === 0 || hex.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(hex))
|
|
99
|
+
return null;
|
|
100
|
+
return Buffer.from(hex, 'hex');
|
|
101
|
+
}
|
|
102
|
+
function unknownPreimageKey(leaf) {
|
|
103
|
+
return Object.keys(leaf).some((key) => key.startsWith('preimage_') && key !== 'preimage_utf8' && key !== 'preimage_hex');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* One leaf body, in bytes. `preimage_utf8` is that body. `preimage_hex` is
|
|
107
|
+
* either the same body or `0x00 || body` (the hash input). A leading `0x00`
|
|
108
|
+
* is the domain byte; a body that itself starts with `0x00` is ambiguous.
|
|
109
|
+
* Two encodings must name the same body. Any other encoding is rejected.
|
|
110
|
+
*/
|
|
111
|
+
function canonicalMerkleBody(leaf) {
|
|
112
|
+
if (!leaf || typeof leaf !== 'object' || unknownPreimageKey(leaf))
|
|
113
|
+
return null;
|
|
114
|
+
const utf8Present = typeof leaf.preimage_utf8 === 'string';
|
|
115
|
+
const hexPresent = typeof leaf.preimage_hex === 'string' && leaf.preimage_hex !== '';
|
|
116
|
+
if (!utf8Present && !hexPresent)
|
|
117
|
+
return null;
|
|
118
|
+
if (utf8Present && leaf.preimage_utf8 === '')
|
|
119
|
+
return null;
|
|
120
|
+
const utf8Body = utf8Present ? Buffer.from(leaf.preimage_utf8, 'utf8') : null;
|
|
121
|
+
let hexBody = null;
|
|
122
|
+
if (hexPresent) {
|
|
123
|
+
const raw = decodeHexBytes(leaf.preimage_hex);
|
|
124
|
+
if (!raw || raw.length === 0)
|
|
125
|
+
return null;
|
|
126
|
+
if (raw[0] === 0x00) {
|
|
127
|
+
if (raw.length < 2 || raw[1] === 0x00)
|
|
128
|
+
return null;
|
|
129
|
+
hexBody = raw.subarray(1);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
hexBody = raw;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (utf8Body && hexBody && !utf8Body.equals(hexBody))
|
|
136
|
+
return null;
|
|
137
|
+
return utf8Body ?? hexBody;
|
|
138
|
+
}
|
|
139
|
+
/** SHA-256 input for an audit-path leaf: `0x00 ||` the canonical body. */
|
|
140
|
+
function auditLeafHashInput(leaf) {
|
|
141
|
+
const body = canonicalMerkleBody(leaf);
|
|
142
|
+
if (!body)
|
|
143
|
+
return null;
|
|
144
|
+
return Buffer.concat([Buffer.from([0x00]), body]);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Bind an audit path to this receipt. Returns `leaf_not_bound` when any
|
|
148
|
+
* check fails, including when the agreed row hash is null, empty, or
|
|
149
|
+
* disagreed, or the leaf encoding does not canonicalize to `task_id|row_hash`.
|
|
150
|
+
* Inclusion leaf hash and leaf index are checked only when that field is present.
|
|
151
|
+
* Inclusion tree size is not compared: the witness can cover a longer log.
|
|
152
|
+
*/
|
|
153
|
+
function auditLeafBinding(receipt, entry) {
|
|
154
|
+
const leaf = entry.leaf;
|
|
155
|
+
const path = entry.audit_path;
|
|
156
|
+
if (!leaf || !path)
|
|
157
|
+
return exports.LEAF_NOT_BOUND;
|
|
158
|
+
const taskId = receiptTaskId(receipt);
|
|
159
|
+
if (!taskId || leaf.task_id == null || String(leaf.task_id) !== taskId)
|
|
160
|
+
return exports.LEAF_NOT_BOUND;
|
|
161
|
+
const rowHash = agreedRowHash(receipt);
|
|
162
|
+
const body = canonicalMerkleBody(leaf);
|
|
163
|
+
if (rowHash == null || !body)
|
|
164
|
+
return exports.LEAF_NOT_BOUND;
|
|
165
|
+
const expected = Buffer.from(`${taskId}|${rowHash}`, 'utf8');
|
|
166
|
+
if (!body.equals(expected))
|
|
167
|
+
return exports.LEAF_NOT_BOUND;
|
|
168
|
+
const inclusion = receipt.inclusion;
|
|
169
|
+
if (inclusion && typeof inclusion === 'object') {
|
|
170
|
+
const claimedLeaf = inclusion.leaf;
|
|
171
|
+
if (claimedLeaf != null && claimedLeaf !== '') {
|
|
172
|
+
const input = auditLeafHashInput(leaf);
|
|
173
|
+
if (!input)
|
|
174
|
+
return exports.LEAF_NOT_BOUND;
|
|
175
|
+
const hashed = sha256(input).toString('hex');
|
|
176
|
+
const want = String(claimedLeaf).replace(/^0x/, '').toLowerCase();
|
|
177
|
+
if (hashed !== want)
|
|
178
|
+
return exports.LEAF_NOT_BOUND;
|
|
179
|
+
}
|
|
180
|
+
const claimedIndex = inclusion.leaf_index;
|
|
181
|
+
if (claimedIndex != null && claimedIndex !== '') {
|
|
182
|
+
const want = Number(claimedIndex);
|
|
183
|
+
const got = Number(path.index);
|
|
184
|
+
if (!Number.isSafeInteger(want) || got !== want)
|
|
185
|
+
return exports.LEAF_NOT_BOUND;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Recompute the prefix root from this leaf and the sibling hashes.
|
|
192
|
+
* A full `leaves` array is the pre-redaction shape and is not read here.
|
|
193
|
+
*/
|
|
194
|
+
function auditRoot(entry) {
|
|
195
|
+
const path = entry.audit_path;
|
|
196
|
+
const leaf = entry.leaf;
|
|
197
|
+
if (!path || !leaf || !Array.isArray(path.siblings))
|
|
198
|
+
return null;
|
|
199
|
+
const index = Number(path.index);
|
|
200
|
+
const treeSize = Number(path.tree_size);
|
|
201
|
+
if (!Number.isSafeInteger(index) || !Number.isSafeInteger(treeSize))
|
|
202
|
+
return null;
|
|
203
|
+
if (leaf.index != null && Number(leaf.index) !== index)
|
|
204
|
+
return null;
|
|
205
|
+
const input = auditLeafHashInput(leaf);
|
|
206
|
+
if (!input)
|
|
207
|
+
return null;
|
|
208
|
+
const got = (0, anchor_witness_js_1.inclusionRoot)(sha256(input), index, treeSize, path.siblings.map((step) => ({ hash: String(step?.hash || '') })));
|
|
209
|
+
if (!got)
|
|
210
|
+
return null;
|
|
211
|
+
if (path.root != null && path.root !== '') {
|
|
212
|
+
const claimed = String(path.root).replace(/^0x/, '').toLowerCase();
|
|
213
|
+
if (claimed !== got)
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
return got;
|
|
217
|
+
}
|
|
218
|
+
function digestHex(entry) {
|
|
219
|
+
if (hasAuditPath(entry))
|
|
220
|
+
return auditRoot(entry);
|
|
221
|
+
if (entry.merkle === 'rfc6962' && Array.isArray(entry.leaves) && entry.leaves.length > 0) {
|
|
222
|
+
return merkleRoot(entry.leaves);
|
|
223
|
+
}
|
|
224
|
+
const bytes = bytesOf(entry);
|
|
225
|
+
if (!bytes)
|
|
226
|
+
return null;
|
|
227
|
+
if (entry.alg === 'keccak256')
|
|
228
|
+
return (0, ethers_1.keccak256)(bytes).toLowerCase();
|
|
229
|
+
if (entry.alg === 'sha256') {
|
|
230
|
+
const hex = sha256(bytes).toString('hex');
|
|
231
|
+
const published = String(entry.hash || '');
|
|
232
|
+
if (published.startsWith('0x') || published.startsWith('sha256:'))
|
|
233
|
+
return `0x${hex}`;
|
|
234
|
+
return hex;
|
|
235
|
+
}
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
function sameHash(left, right) {
|
|
239
|
+
const norm = (value) => value.trim().toLowerCase().replace(/^sha256=/, '');
|
|
240
|
+
return norm(left) === norm(right);
|
|
241
|
+
}
|
|
242
|
+
function readPath(receipt, field) {
|
|
243
|
+
if (field === 'job_spec_hash') {
|
|
244
|
+
return receipt.job_spec_hash
|
|
245
|
+
?? receipt.board?.job_spec_hash
|
|
246
|
+
?? receipt.a2a_escrow?.job_spec_hash
|
|
247
|
+
?? null;
|
|
248
|
+
}
|
|
249
|
+
return field.split('.').reduce((obj, key) => {
|
|
250
|
+
if (obj == null || typeof obj !== 'object')
|
|
251
|
+
return undefined;
|
|
252
|
+
return obj[key];
|
|
253
|
+
}, receipt);
|
|
254
|
+
}
|
|
255
|
+
function hasHash(value) {
|
|
256
|
+
return value != null && value !== '';
|
|
257
|
+
}
|
|
258
|
+
function withheld(block, field) {
|
|
259
|
+
return (block?.not_recomputable || []).some((row) => row.field === field);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Fields a stranger is expected to recompute when they are present.
|
|
263
|
+
* Coverage and tree_head_hash count only when the issuer published a preimage.
|
|
264
|
+
* Output, HMAC, and book-row universe hashes do not.
|
|
265
|
+
*/
|
|
266
|
+
function requiredPreimageFields(receipt) {
|
|
267
|
+
const block = (receipt.preimages || null);
|
|
268
|
+
const fields = [];
|
|
269
|
+
for (const field of ALWAYS_REQUIRED) {
|
|
270
|
+
if (hasHash(readPath(receipt, field)) && !withheld(block, field))
|
|
271
|
+
fields.push(field);
|
|
272
|
+
}
|
|
273
|
+
for (const field of ['tree_head_hash', 'coverage.universe_hash', 'coverage.enumerated_hash']) {
|
|
274
|
+
if (block?.fields?.[field])
|
|
275
|
+
fields.push(field);
|
|
276
|
+
}
|
|
277
|
+
return [...new Set(fields)];
|
|
278
|
+
}
|
|
279
|
+
async function loadRemote(entry, fetchImpl, hosts) {
|
|
280
|
+
if (!entry.url)
|
|
281
|
+
return null;
|
|
282
|
+
let url;
|
|
283
|
+
try {
|
|
284
|
+
url = new URL(entry.url);
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
if (url.protocol !== 'https:' || !hosts.some((host) => host.toLowerCase() === url.hostname.toLowerCase())) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
const res = await fetchImpl(entry.url);
|
|
293
|
+
if (!res.ok)
|
|
294
|
+
return null;
|
|
295
|
+
const body = await res.json();
|
|
296
|
+
return body && typeof body === 'object' ? { ...entry, ...body } : null;
|
|
297
|
+
}
|
|
298
|
+
async function verifyPublishedPreimages(receipt, { requirePreimages = false, fetchImpl = globalThis.fetch, trustedHosts = ['api.chit402.com'], } = {}) {
|
|
299
|
+
const block = (receipt.preimages || null);
|
|
300
|
+
const required = requiredPreimageFields(receipt);
|
|
301
|
+
if (!block && !requirePreimages) {
|
|
302
|
+
return { checked: false, ok: true, errors: [], fields: [] };
|
|
303
|
+
}
|
|
304
|
+
if (!block && required.length === 0) {
|
|
305
|
+
return { checked: true, ok: true, errors: [], fields: [] };
|
|
306
|
+
}
|
|
307
|
+
const errors = [];
|
|
308
|
+
const fields = [];
|
|
309
|
+
const published = block?.fields || {};
|
|
310
|
+
const targets = new Set([...required, ...Object.keys(published)]);
|
|
311
|
+
for (const field of targets) {
|
|
312
|
+
if (withheld(block, field) && !published[field])
|
|
313
|
+
continue;
|
|
314
|
+
let entry = published[field];
|
|
315
|
+
if (!entry) {
|
|
316
|
+
const message = `preimage missing for ${field}`;
|
|
317
|
+
errors.push(message);
|
|
318
|
+
fields.push({ field, ok: false, reason: 'preimage_missing' });
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
if (entry.recomputable === false)
|
|
322
|
+
continue;
|
|
323
|
+
if (hasAuditPath(entry)) {
|
|
324
|
+
const bound = auditLeafBinding(receipt, entry);
|
|
325
|
+
if (bound) {
|
|
326
|
+
errors.push(`preimage leaf is not this receipt for ${field}`);
|
|
327
|
+
fields.push({ field, ok: false, reason: bound });
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
if (!bytesOf(entry) && !(entry.leaves && entry.leaves.length) && !hasAuditPath(entry) && entry.url && fetchImpl) {
|
|
332
|
+
try {
|
|
333
|
+
const remote = await loadRemote(entry, fetchImpl, trustedHosts);
|
|
334
|
+
if (remote)
|
|
335
|
+
entry = remote;
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
/* fall through to missing */
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
const digest = digestHex(entry);
|
|
342
|
+
const expected = entry.hash != null ? String(entry.hash) : '';
|
|
343
|
+
const onReceipt = readPath(receipt, field);
|
|
344
|
+
if (digest == null) {
|
|
345
|
+
errors.push(`preimage missing for ${field}`);
|
|
346
|
+
fields.push({ field, ok: false, reason: 'preimage_missing' });
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (!sameHash(digest, expected)) {
|
|
350
|
+
errors.push(`preimage mismatch for ${field}: hash does not match the published bytes`);
|
|
351
|
+
fields.push({ field, ok: false, reason: 'preimage_mismatch' });
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
if (hasHash(onReceipt) && !sameHash(digest, String(onReceipt))) {
|
|
355
|
+
errors.push(`preimage mismatch for ${field}: recomputed hash does not match the receipt`);
|
|
356
|
+
fields.push({ field, ok: false, reason: 'preimage_mismatch' });
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
fields.push({ field, ok: true });
|
|
360
|
+
}
|
|
361
|
+
return { checked: true, ok: errors.length === 0, errors, fields };
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=preimage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preimage.js","sourceRoot":"","sources":["../src/preimage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unsigned receipt-lane decision beside book_seq.
|
|
3
|
+
*
|
|
4
|
+
* Design by Turbo on 1F916 (post 6579, comments 88201 and 88403):
|
|
5
|
+
* freeze a receipt-lane row only when seq is present, settled_by is
|
|
6
|
+
* `receipt`, the anchored tree head changed after that row was bound, and
|
|
7
|
+
* the row is not settled. anchor_changed_since_binding alone does not freeze.
|
|
8
|
+
*
|
|
9
|
+
* Comment 88596 freezes that ordering — seq + settled_by + (anchor_changed
|
|
10
|
+
* AND not settled) — and states the boundary: complete over registry marks,
|
|
11
|
+
* blind to payments the registry never joined. A binding past expiry with
|
|
12
|
+
* settled_by, receipt_id, observed_tx_hash, and observed_transfer_id all
|
|
13
|
+
* null is unverifiable_from_registry, not unpaid.
|
|
14
|
+
*
|
|
15
|
+
* These fields are derived. They are not inside the payment JWS and not
|
|
16
|
+
* inside the signed book_seq claims. payload_version is unchanged.
|
|
17
|
+
*
|
|
18
|
+
* Keep this rule in lockstep with services/gateway/src/receipt-lane.js.
|
|
19
|
+
*/
|
|
20
|
+
export declare const RECEIPT_LANE_SCHEMA = "chit402.receipt_lane.v1";
|
|
21
|
+
export declare const RECEIPT_LANE_RULE: string;
|
|
22
|
+
/** Frozen partition order. `settled_by` here is the receipt-lane conjunct (value `receipt`). */
|
|
23
|
+
export declare const RECEIPT_LANE_ORDERING = "seq + settled_by + (anchor_changed AND not settled)";
|
|
24
|
+
/** The ordering reads registry marks only. A transfer the registry never joined is outside it. */
|
|
25
|
+
export declare const RECEIPT_LANE_BOUNDARY = "complete over registry marks, blind to payments the registry never joined";
|
|
26
|
+
/**
|
|
27
|
+
* Base mainnet USDC. Same contract as USDC_ADDRESSES.base in
|
|
28
|
+
* services/gateway/src/foreign-x402-ingest.js. The hint does not call RPC.
|
|
29
|
+
*/
|
|
30
|
+
export declare const BASE_USDC_ADDRESS = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
|
|
31
|
+
export type SettledBy = 'observed_transfer' | 'receipt' | null;
|
|
32
|
+
export type RegistryClassification = 'receipt' | 'observed_transfer' | 'anchor_changed_unsettled' | 'unsettled' | 'unverifiable_from_registry';
|
|
33
|
+
export interface LocalCheckHint {
|
|
34
|
+
method: 'base_usdc_transfer';
|
|
35
|
+
chain_id: 8453;
|
|
36
|
+
token: string;
|
|
37
|
+
payee: string;
|
|
38
|
+
amount_atomic: string;
|
|
39
|
+
claims_paid: false;
|
|
40
|
+
}
|
|
41
|
+
export interface AnchorIdentity {
|
|
42
|
+
root: string | null;
|
|
43
|
+
tree_size: number | null;
|
|
44
|
+
anchor_tx: string | null;
|
|
45
|
+
solana_signature: string | null;
|
|
46
|
+
}
|
|
47
|
+
export interface ReceiptLane {
|
|
48
|
+
schema: typeof RECEIPT_LANE_SCHEMA;
|
|
49
|
+
signed: false;
|
|
50
|
+
book_seq: number | null;
|
|
51
|
+
settled_by: SettledBy;
|
|
52
|
+
settled: boolean | null;
|
|
53
|
+
anchor_at_binding: AnchorIdentity | null;
|
|
54
|
+
anchor_current: AnchorIdentity | null;
|
|
55
|
+
anchor_changed_since_binding: boolean | null;
|
|
56
|
+
freeze: boolean;
|
|
57
|
+
reason: 'unsettled_anchor_changed' | null;
|
|
58
|
+
rule: string;
|
|
59
|
+
ordering: typeof RECEIPT_LANE_ORDERING;
|
|
60
|
+
boundary: typeof RECEIPT_LANE_BOUNDARY;
|
|
61
|
+
classification: RegistryClassification;
|
|
62
|
+
local_check: LocalCheckHint | null;
|
|
63
|
+
}
|
|
64
|
+
export interface LanePayer {
|
|
65
|
+
checked?: boolean;
|
|
66
|
+
valid?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface LaneEntry {
|
|
69
|
+
book_seq?: number | null;
|
|
70
|
+
seq?: number | null;
|
|
71
|
+
book_chain?: {
|
|
72
|
+
seq?: number | null;
|
|
73
|
+
} | null;
|
|
74
|
+
payment?: {
|
|
75
|
+
ref?: string | null;
|
|
76
|
+
rail?: string | null;
|
|
77
|
+
collected?: boolean | null;
|
|
78
|
+
} | null;
|
|
79
|
+
payment_ref?: string | null;
|
|
80
|
+
rail?: string | null;
|
|
81
|
+
collected?: boolean | null;
|
|
82
|
+
evidence?: string | null;
|
|
83
|
+
source?: string | null;
|
|
84
|
+
foreign_x402?: boolean;
|
|
85
|
+
arrival_status?: string | null;
|
|
86
|
+
ingress_receipt?: {
|
|
87
|
+
ref?: string | null;
|
|
88
|
+
} | null;
|
|
89
|
+
settlement_status?: string | null;
|
|
90
|
+
usage_settled?: {
|
|
91
|
+
settlement_status?: string | null;
|
|
92
|
+
} | null;
|
|
93
|
+
expiry?: number | string | null;
|
|
94
|
+
receipt_id?: string | number | null;
|
|
95
|
+
observed_tx_hash?: string | null;
|
|
96
|
+
observed_transfer_id?: string | number | null;
|
|
97
|
+
settled_by?: SettledBy;
|
|
98
|
+
anchor_changed_since_binding?: boolean | null;
|
|
99
|
+
chain_id?: number | string | null;
|
|
100
|
+
chainId?: number | string | null;
|
|
101
|
+
token?: string | null;
|
|
102
|
+
asset?: string | null;
|
|
103
|
+
payout_address?: string | null;
|
|
104
|
+
address?: string | null;
|
|
105
|
+
payee?: string | null;
|
|
106
|
+
amount_atomic?: string | number | null;
|
|
107
|
+
docket_id?: string | null;
|
|
108
|
+
}
|
|
109
|
+
export interface ReceiptTreeHead {
|
|
110
|
+
root?: string | null;
|
|
111
|
+
tree_size?: number | null;
|
|
112
|
+
anchor_tx?: string | null;
|
|
113
|
+
anchor?: {
|
|
114
|
+
tx?: string | null;
|
|
115
|
+
status?: string | null;
|
|
116
|
+
} | null;
|
|
117
|
+
anchors?: {
|
|
118
|
+
base?: {
|
|
119
|
+
tx?: string | null;
|
|
120
|
+
status?: string | null;
|
|
121
|
+
} | null;
|
|
122
|
+
solana?: {
|
|
123
|
+
signature?: string | null;
|
|
124
|
+
status?: string | null;
|
|
125
|
+
} | null;
|
|
126
|
+
} | null;
|
|
127
|
+
}
|
|
128
|
+
export declare function normalizeRoot(root: string | null | undefined): string | null;
|
|
129
|
+
export declare function anchorIdentity(head: ReceiptTreeHead | null | undefined): AnchorIdentity | null;
|
|
130
|
+
export declare function anchorChangedSinceBinding(heads: ReceiptTreeHead[] | null | undefined, leafIndex: number | null | undefined): {
|
|
131
|
+
changed: boolean | null;
|
|
132
|
+
at: AnchorIdentity | null;
|
|
133
|
+
current: AnchorIdentity | null;
|
|
134
|
+
};
|
|
135
|
+
/** A 1F916 payout binding carries expiry plus a registry mark key. A book row does not. */
|
|
136
|
+
export declare function isPayoutBinding(input: LaneEntry | null | undefined): boolean;
|
|
137
|
+
/** Unix seconds, unix ms, or an ISO timestamp. Null when the field is absent or not a time. */
|
|
138
|
+
export declare function expiryMillis(expiry: number | string | null | undefined): number | null;
|
|
139
|
+
export declare function isPastExpiry(expiry: number | string | null | undefined, nowMs?: number): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Partition a row. Expired and unmarked is unverifiable_from_registry, ahead
|
|
142
|
+
* of the clean-unsettled and anchor-changed buckets, and behind a joined
|
|
143
|
+
* settled_by (receipt or observed_transfer).
|
|
144
|
+
*/
|
|
145
|
+
export declare function classifyReceiptLane({ entry, settled_by, settled, anchor_changed_since_binding, now, }?: {
|
|
146
|
+
entry?: LaneEntry | null;
|
|
147
|
+
settled_by?: SettledBy;
|
|
148
|
+
settled?: boolean | null;
|
|
149
|
+
anchor_changed_since_binding?: boolean | null;
|
|
150
|
+
now?: number;
|
|
151
|
+
}): RegistryClassification;
|
|
152
|
+
/**
|
|
153
|
+
* Payee and amount a stranger can feed to the existing per-tx Base USDC check.
|
|
154
|
+
* Null unless this row is Base mainnet USDC. Does not claim the transfer happened
|
|
155
|
+
* and does not read the chain.
|
|
156
|
+
*/
|
|
157
|
+
export declare function baseUsdcLocalCheckHint(entry: LaneEntry | null | undefined): LocalCheckHint | null;
|
|
158
|
+
export declare function deriveSettledBy(input: LaneEntry | null | undefined, { payer, issuerAssertsSettlement }?: {
|
|
159
|
+
payer?: LanePayer | null;
|
|
160
|
+
issuerAssertsSettlement?: boolean | null;
|
|
161
|
+
}): SettledBy;
|
|
162
|
+
export declare function deriveSettled(input: LaneEntry | null | undefined, { payer }?: {
|
|
163
|
+
payer?: LanePayer | null;
|
|
164
|
+
}): boolean | null;
|
|
165
|
+
export declare function bookSeqOf(input: LaneEntry | null | undefined): number | null;
|
|
166
|
+
export declare function receiptLaneDecision(input: {
|
|
167
|
+
book_seq: number | null;
|
|
168
|
+
settled_by: SettledBy;
|
|
169
|
+
settled: boolean | null;
|
|
170
|
+
anchor_changed_since_binding: boolean | null;
|
|
171
|
+
}): {
|
|
172
|
+
freeze: boolean;
|
|
173
|
+
reason: 'unsettled_anchor_changed' | null;
|
|
174
|
+
};
|
|
175
|
+
export declare function buildReceiptLane({ entry, payer, leafIndex, heads, issuerAssertsSettlement, anchorAtBinding, anchorCurrent, now, }?: {
|
|
176
|
+
entry?: LaneEntry | null;
|
|
177
|
+
payer?: LanePayer | null;
|
|
178
|
+
leafIndex?: number | null;
|
|
179
|
+
heads?: ReceiptTreeHead[] | null;
|
|
180
|
+
issuerAssertsSettlement?: boolean | null;
|
|
181
|
+
anchorAtBinding?: AnchorIdentity | null;
|
|
182
|
+
anchorCurrent?: AnchorIdentity | null;
|
|
183
|
+
now?: number;
|
|
184
|
+
}): ReceiptLane;
|
|
185
|
+
interface SignedClaims {
|
|
186
|
+
schema?: string | null;
|
|
187
|
+
payment?: {
|
|
188
|
+
ref?: string | null;
|
|
189
|
+
rail?: string | null;
|
|
190
|
+
collected?: boolean | null;
|
|
191
|
+
} | null;
|
|
192
|
+
settlement?: {
|
|
193
|
+
kind?: string | null;
|
|
194
|
+
} | null;
|
|
195
|
+
}
|
|
196
|
+
interface ReceiptLaneSource {
|
|
197
|
+
book_seq?: number | null;
|
|
198
|
+
book_chain?: {
|
|
199
|
+
seq?: number | null;
|
|
200
|
+
} | null;
|
|
201
|
+
tree_head?: ReceiptTreeHead | null;
|
|
202
|
+
head?: ReceiptTreeHead | null;
|
|
203
|
+
expiry?: number | string | null;
|
|
204
|
+
receipt_id?: string | number | null;
|
|
205
|
+
observed_tx_hash?: string | null;
|
|
206
|
+
observed_transfer_id?: string | number | null;
|
|
207
|
+
settled_by?: SettledBy;
|
|
208
|
+
anchor_changed_since_binding?: boolean | null;
|
|
209
|
+
chain_id?: number | string | null;
|
|
210
|
+
token?: string | null;
|
|
211
|
+
payout_address?: string | null;
|
|
212
|
+
address?: string | null;
|
|
213
|
+
amount_atomic?: string | number | null;
|
|
214
|
+
docket_id?: string | null;
|
|
215
|
+
receipt_lane?: {
|
|
216
|
+
anchor_at_binding?: AnchorIdentity | null;
|
|
217
|
+
anchor_current?: AnchorIdentity | null;
|
|
218
|
+
freeze?: boolean;
|
|
219
|
+
anchor_changed_since_binding?: boolean | null;
|
|
220
|
+
} | null;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Stranger view. Uses verified signed claims and an on-chain payer check.
|
|
224
|
+
* Ignores a stamped freeze bit. Unsigned payment.ref is not an assertion.
|
|
225
|
+
*/
|
|
226
|
+
export declare function receiptLaneFromVerification({ receipt, claims, issuerValid, payer, head, now, }: {
|
|
227
|
+
receipt: ReceiptLaneSource | null | undefined;
|
|
228
|
+
claims?: SignedClaims | null;
|
|
229
|
+
issuerValid?: boolean;
|
|
230
|
+
payer?: LanePayer | null;
|
|
231
|
+
head?: ReceiptTreeHead | null;
|
|
232
|
+
now?: number;
|
|
233
|
+
}): ReceiptLane;
|
|
234
|
+
export {};
|
|
235
|
+
//# sourceMappingURL=receipt-lane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-lane.d.ts","sourceRoot":"","sources":["../src/receipt-lane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAE7D,eAAO,MAAM,iBAAiB,QAE0E,CAAC;AAEzG,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,wDAAwD,CAAC;AAE3F,kGAAkG;AAClG,eAAO,MAAM,qBAAqB,8EAC2C,CAAC;AAE9E;;;GAGG;AACH,eAAO,MAAM,iBAAiB,+CAA+C,CAAC;AA+B9E,MAAM,MAAM,SAAS,GAAG,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAAC;AAE/D,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,mBAAmB,GACnB,0BAA0B,GAC1B,WAAW,GACX,4BAA4B,CAAC;AAEjC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,MAAM,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,SAAS,CAAC;IACtB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,iBAAiB,EAAE,cAAc,GAAG,IAAI,CAAC;IACzC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,4BAA4B,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,qBAAqB,CAAC;IACvC,QAAQ,EAAE,OAAO,qBAAqB,CAAC;IACvC,cAAc,EAAE,sBAAsB,CAAC;IACvC,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3F,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4BAA4B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC;QAC7D,MAAM,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC;KACvE,GAAG,IAAI,CAAC;CACV;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAI5E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAkB9F;AAUD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,GAAG,SAAS,EAC3C,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC;IAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE,CAqBxF;AAkCD,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI5E;AAYD,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAStF;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,KAAK,GAAE,MAAmB,GACzB,OAAO,CAIT;AASD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,KAAY,EACZ,UAAiB,EACjB,OAAc,EACd,4BAAmC,EACnC,GAAgB,GACjB,GAAE;IACD,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,4BAA4B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC;CACT,GAAG,sBAAsB,CAQ9B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAsBjG;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EACnC,EAAE,KAAY,EAAE,uBAA8B,EAAE,GAAE;IAChD,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,uBAAuB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC,GACL,SAAS,CAmBX;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EACnC,EAAE,KAAY,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAAO,GAClD,OAAO,GAAG,IAAI,CAchB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK5E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,SAAS,CAAC;IACtB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,4BAA4B,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI,CAAA;CAAE,CAUjE;AAcD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAY,EACZ,KAAY,EACZ,SAAgB,EAChB,KAAY,EACZ,uBAA8B,EAC9B,eAAsB,EACtB,aAAoB,EACpB,GAAgB,GACjB,GAAE;IACD,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;CACT,GAAG,WAAW,CA4CnB;AAED,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3F,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9C;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4BAA4B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE;QACb,iBAAiB,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QAC1C,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;QACvC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,4BAA4B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KAC/C,GAAG,IAAI,CAAC;CACV;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,OAAO,EACP,MAAa,EACb,WAAmB,EACnB,KAAY,EACZ,IAAW,EACX,GAAgB,GACjB,EAAE;IACD,OAAO,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,WAAW,CAwDd"}
|