@ftptech/canton-agent-wallet 0.1.15 → 0.1.17
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/README.md +30 -2
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +11 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli.js +122 -3
- package/dist/cli.js.map +1 -1
- package/dist/hosted-onboard.d.ts +88 -0
- package/dist/hosted-onboard.d.ts.map +1 -0
- package/dist/hosted-onboard.js +207 -0
- package/dist/hosted-onboard.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/onboard.d.ts +8 -0
- package/dist/onboard.d.ts.map +1 -1
- package/dist/onboard.js +13 -4
- package/dist/onboard.js.map +1 -1
- package/dist/pay.d.ts +27 -0
- package/dist/pay.d.ts.map +1 -1
- package/dist/pay.js +33 -12
- package/dist/pay.js.map +1 -1
- package/dist/relay-client.d.ts +96 -0
- package/dist/relay-client.d.ts.map +1 -1
- package/dist/relay-client.js +36 -0
- package/dist/relay-client.js.map +1 -1
- package/dist/relay-signer.d.ts +15 -0
- package/dist/relay-signer.d.ts.map +1 -1
- package/dist/relay-signer.js +127 -1
- package/dist/relay-signer.js.map +1 -1
- package/dist/tx.d.ts +228 -0
- package/dist/tx.d.ts.map +1 -1
- package/dist/tx.js +416 -1
- package/dist/tx.js.map +1 -1
- package/dist/verify-prepared.d.ts +231 -0
- package/dist/verify-prepared.d.ts.map +1 -1
- package/dist/verify-prepared.js +1046 -13
- package/dist/verify-prepared.js.map +1 -1
- package/package.json +2 -2
|
@@ -38,6 +38,16 @@ interface DecodedNode {
|
|
|
38
38
|
kind?: NodeKind | undefined;
|
|
39
39
|
/** For exercise nodes: the choice id + chosen value (money-critical args). */
|
|
40
40
|
exercise?: DecodedExercise | undefined;
|
|
41
|
+
/** For create nodes: the created template's `module:entity` qualified name
|
|
42
|
+
* (package-id dropped — it changes across upgrades) + the raw `Create.argument`
|
|
43
|
+
* Value bytes. Lets an arm pin a NUMERIC (non-party) field of a CONSEQUENCE
|
|
44
|
+
* create — e.g. the `amount` recorded on a created `X402Escrow` — which the
|
|
45
|
+
* party-leaf backstop cannot see. undefined for non-create nodes / a create
|
|
46
|
+
* carrying no decodable template / argument. */
|
|
47
|
+
create?: {
|
|
48
|
+
templateQualifiedName?: string | undefined;
|
|
49
|
+
argument?: Uint8Array | undefined;
|
|
50
|
+
} | undefined;
|
|
41
51
|
/** node_id references this node declares as its children (Exercise.children /
|
|
42
52
|
* Rollback.children). Used to prove reachability from the single root so no
|
|
43
53
|
* orphan (extra-leg) node can hide in DamlTransaction.nodes. */
|
|
@@ -165,6 +175,17 @@ export declare class PreparedTransferMismatchError extends Error {
|
|
|
165
175
|
* even though the numeric value is identical. Pure string math (no float) so
|
|
166
176
|
* large amounts keep full precision. A non-numeric input is returned as-is, so
|
|
167
177
|
* it still mismatches (fail-closed).
|
|
178
|
+
*
|
|
179
|
+
* UNIT-BY-SCHEME invariant: BOTH sides of every amount compare here are
|
|
180
|
+
* on-ledger Daml **Decimals** — `t.amount` is decoded from the prepared tx's
|
|
181
|
+
* `Value.numeric` (always a ledger Decimal) and `expect.amount` is the caller's
|
|
182
|
+
* INTENDED ledger Decimal (the relay/agent path sources `opts.amount` as the
|
|
183
|
+
* Decimal, never the x402 wire atomic value). `canonicalAmount` therefore only
|
|
184
|
+
* pads Decimals; it must NEVER be fed an atomic integer (an atomic "1" would
|
|
185
|
+
* canonicalize to "1.0000000000" and silently mis-compare against the ledger
|
|
186
|
+
* "0.0000000001"). If a future caller ever sources `expect.amount` from an
|
|
187
|
+
* atomic-scheme wire, it MUST first convert via
|
|
188
|
+
* `wireAmountToLedgerDecimal(scheme, amount)` from @ftptech/x402-canton-core.
|
|
168
189
|
*/
|
|
169
190
|
export declare function canonicalAmount(raw: string): string;
|
|
170
191
|
export declare function assertPreparedTransferMatches(preparedTransactionB64: string, expect: PreparedTransferExpectation): void;
|
|
@@ -259,6 +280,216 @@ export interface PreparedAcceptExpectation {
|
|
|
259
280
|
* the agent throws.
|
|
260
281
|
*/
|
|
261
282
|
export declare function assertPreparedAcceptMatches(preparedTransactionB64: string, expect: PreparedAcceptExpectation): void;
|
|
283
|
+
interface ExtractedAllocation {
|
|
284
|
+
sender: string;
|
|
285
|
+
receiver: string;
|
|
286
|
+
amount: string;
|
|
287
|
+
instrumentAdmin: string;
|
|
288
|
+
instrumentId: string;
|
|
289
|
+
executor: string;
|
|
290
|
+
/** Decimal-string of the Value.timestamp varint (µs since epoch), or
|
|
291
|
+
* undefined if not present as a timestamp leaf. */
|
|
292
|
+
allocateBefore?: string;
|
|
293
|
+
settleBefore?: string;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Extract the allocation's money/escrow-critical leaves from the
|
|
297
|
+
* `AllocationFactory_Allocate` choice argument, BY TYPE at each Daml
|
|
298
|
+
* DECLARATION-ORDER POSITION (what the participant binds), NOT by label — with
|
|
299
|
+
* the same label/position-divergence guard the cip56/v1 arms use. Fails closed
|
|
300
|
+
* on any wrong-type / missing money-critical field.
|
|
301
|
+
*/
|
|
302
|
+
export declare function extractAllocation(chosenValue: Uint8Array): ExtractedAllocation;
|
|
303
|
+
/** Caller-intent expectation for an `AllocationFactory_Allocate`. Every field is
|
|
304
|
+
* CALLER INTENT — none is taken from the relay's resolve response. */
|
|
305
|
+
export interface PreparedAllocationExpectation {
|
|
306
|
+
/** The agent's own party — must be the transferLeg.sender. */
|
|
307
|
+
sender: string;
|
|
308
|
+
/**
|
|
309
|
+
* OWN-PARTY PIN (hardening). The agent's OWN party id, known independently of
|
|
310
|
+
* the relay (the wallet's party). The `AllocationFactory_Allocate` controller
|
|
311
|
+
* IS the sender, so the extracted `transferLeg.sender` MUST equal this value.
|
|
312
|
+
*
|
|
313
|
+
* This is asserted FIRST — before the positional `sender` pin and the foreign-
|
|
314
|
+
* party backstop — and is the load-bearing defense against a sender/receiver
|
|
315
|
+
* TRANSPOSITION: `transferLeg.sender` and `transferLeg.receiver` are BOTH Party
|
|
316
|
+
* leaves at ADJACENT declaration-order positions (field order CONFIRMED against
|
|
317
|
+
* canonical Splice source — see the field-order authority note above
|
|
318
|
+
* `extractAllocation`). If a malicious relay transposes those two leaves, it
|
|
319
|
+
* could otherwise present the agent as
|
|
320
|
+
* the RECEIVER while a position-pin alone might still line up. Pinning the
|
|
321
|
+
* extracted sender to the agent's own party fails CLOSED on ANY such transposition
|
|
322
|
+
* or wrong-position sender, REGARDLESS of field order — defense-in-depth, without
|
|
323
|
+
* needing the live vector. REQUIRED: callers thread `wallet.party` here.
|
|
324
|
+
*/
|
|
325
|
+
expectedSender: string;
|
|
326
|
+
/** The intended recipient (merchant payTo from the 402). */
|
|
327
|
+
receiver: string;
|
|
328
|
+
/** The EXACT amount string the agent asked to pay. */
|
|
329
|
+
amount: string;
|
|
330
|
+
/** The instrument id the agent expects (e.g. "Amulet"). Caller intent. */
|
|
331
|
+
instrumentId: string;
|
|
332
|
+
/** The facilitator party that MUST be settlement.executor (extra.executor =
|
|
333
|
+
* extra.facilitatorParty). Pinned by exact equality, fail-closed. This is the
|
|
334
|
+
* escrow-trust anchor: only the executor (+ baked-in sender/receiver auth) can
|
|
335
|
+
* later move the locked funds, so a relay naming an ATTACKER executor must be
|
|
336
|
+
* refused. */
|
|
337
|
+
executor: string;
|
|
338
|
+
/** Optional, independently-trusted instrument admin (DSO) to pin AND exclude
|
|
339
|
+
* from the foreign-party backstop outside its root position. */
|
|
340
|
+
instrumentAdmin?: string;
|
|
341
|
+
/** Optional, caller-intent synchronizer id. Pins SIGNED Metadata.synchronizer_id. */
|
|
342
|
+
synchronizerId?: string;
|
|
343
|
+
/** Optional, caller-intent template `module:entity` of the AllocationFactory. */
|
|
344
|
+
templateQualifiedName?: string;
|
|
345
|
+
/** Optional, caller-intent contract id of the AllocationFactory the exercise
|
|
346
|
+
* targets. Pins Exercise.contract_id (resolve→prepare TOCTOU). */
|
|
347
|
+
expectedContractId?: string;
|
|
348
|
+
/** Inject Date.now() for testability of the timing sanity checks. */
|
|
349
|
+
nowMs?: number;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Assert the relay-returned `preparedTransaction` encodes EXACTLY the
|
|
353
|
+
* `AllocationFactory_Allocate` the agent intended. Throws
|
|
354
|
+
* `PreparedTransferMismatchError` on any mismatch and `PreparedDecodeError` if
|
|
355
|
+
* the bytes are not a decodable PreparedTransaction carrying a single allocate
|
|
356
|
+
* exercise. Call BEFORE signing the hash. Fail-closed: anything not positively
|
|
357
|
+
* proven to match the intent throws.
|
|
358
|
+
*/
|
|
359
|
+
export declare function assertPreparedAllocationMatches(preparedTransactionB64: string, expect: PreparedAllocationExpectation): void;
|
|
360
|
+
/** Caller-intent expectation for an `Allocation_Withdraw` (reclaim) prepare. */
|
|
361
|
+
export interface PreparedAllocationWithdrawExpectation {
|
|
362
|
+
/** The agent's own party — must be the authoritative submitter (act_as) AND
|
|
363
|
+
* the choice's sole controller (allocation.transferLeg.sender). The ONLY
|
|
364
|
+
* party permitted anywhere in the signed transaction. */
|
|
365
|
+
selfParty: string;
|
|
366
|
+
/** Caller intent: the AmuletAllocation cid being reclaimed. The root
|
|
367
|
+
* exercise's `Exercise.contract_id` MUST equal this — REQUIRED (not optional
|
|
368
|
+
* as in the pay arms), so the relay cannot point the withdraw at a different
|
|
369
|
+
* contract than the one the caller resolved (resolve→prepare TOCTOU). */
|
|
370
|
+
allocationCid: string;
|
|
371
|
+
/** Inject Date.now() for testability of the timing sanity checks. */
|
|
372
|
+
nowMs?: number;
|
|
373
|
+
/** CALLER-INTENT reference parties that legitimately appear in a lock-expiry
|
|
374
|
+
* withdraw but are NOT the sender: the allocation's executor / lock holder
|
|
375
|
+
* (the facilitator) and the instrument admin (DSO). When the choice-context
|
|
376
|
+
* carries `expire-lock`, the unlock + disclosed AmuletRules/round reference
|
|
377
|
+
* these two parties, so they must be permitted — but ONLY as caller-pinned
|
|
378
|
+
* values (never relay-derived), so a relay cannot smuggle a foreign recipient
|
|
379
|
+
* by aliasing it to one of these. Omit on the empty-context (no-lock) path. */
|
|
380
|
+
facilitator?: string;
|
|
381
|
+
instrumentAdmin?: string;
|
|
382
|
+
/** CALLER-INTENT allocation RECEIVER (the merchant). In a "Design B" DIRECT
|
|
383
|
+
* allocation the receiver is the MERCHANT (not the facilitator, as in the
|
|
384
|
+
* "Design A" escrow where receiver == executor == facilitator), so the
|
|
385
|
+
* legitimate on-ledger `Allocation_Withdraw` expire-lock choice-context
|
|
386
|
+
* references the merchant party. When supplied, EXACTLY this one party is
|
|
387
|
+
* added to the allowed-party set for the withdraw backstop (alongside
|
|
388
|
+
* self/facilitator/instrumentAdmin) — never a wildcard. It MUST be pinned to
|
|
389
|
+
* the allocation's known receiver by the caller (`reclaimAllocation`), never
|
|
390
|
+
* taken from the relay, so a relay cannot smuggle a foreign recipient by
|
|
391
|
+
* aliasing it to this value. Omit for Design A (receiver == facilitator) /
|
|
392
|
+
* the empty-context (no-lock) path — behavior is then exactly as before. */
|
|
393
|
+
receiver?: string;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Assert the relay-returned `preparedTransaction` for the reclaim path encodes
|
|
397
|
+
* EXACTLY a single `Allocation_Withdraw` exercise, on the caller's own
|
|
398
|
+
* allocation cid, submitted by the agent — and is NOT a different (value-moving)
|
|
399
|
+
* choice, a withdraw of a different contract, an outbound drain, or a
|
|
400
|
+
* foreign-party submission. Throws `PreparedTransferMismatchError` on any
|
|
401
|
+
* mismatch and `PreparedDecodeError` if the bytes are not a decodable
|
|
402
|
+
* PreparedTransaction. Call BEFORE signing the hash. Fail-closed: anything not
|
|
403
|
+
* positively proven to be a self-withdraw of the caller's own allocation throws.
|
|
404
|
+
*/
|
|
405
|
+
export declare function assertPreparedAllocationWithdrawMatches(preparedTransactionB64: string, expect: PreparedAllocationWithdrawExpectation): void;
|
|
406
|
+
/** Caller-intent expectation for an `X402EscrowOffer_Accept` (escrow ACCEPT). */
|
|
407
|
+
export interface PreparedEscrowAcceptExpectation {
|
|
408
|
+
/** The agent's own party — the SENDER. Must be the authoritative submitter
|
|
409
|
+
* (act_as) AND the choice's sole controller. Also an allowed escrow party. */
|
|
410
|
+
selfParty: string;
|
|
411
|
+
/** Caller intent: the `X402EscrowOffer` cid being accepted. The root exercise's
|
|
412
|
+
* `Exercise.contract_id` MUST equal this — REQUIRED (not optional as in the pay
|
|
413
|
+
* arms): the relay cannot point the accept at a different offer than the one the
|
|
414
|
+
* caller resolved (resolve→prepare TOCTOU). */
|
|
415
|
+
offerCid: string;
|
|
416
|
+
/** Caller intent: the facilitator party. The created `X402Escrow` is signed by
|
|
417
|
+
* {facilitator, sender}; the facilitator is the party that later settles the
|
|
418
|
+
* allocation ALONE, so a relay-substituted facilitator could steer settlement
|
|
419
|
+
* to an attacker. Pinned by exact equality and added to the allowed-party set;
|
|
420
|
+
* a different facilitator anywhere is rejected. REQUIRED. */
|
|
421
|
+
facilitator: string;
|
|
422
|
+
/** Optional caller intent: the merchant party recorded (reference-only) on the
|
|
423
|
+
* created `X402Escrow`. When the honest offer/escrow names a distinct merchant
|
|
424
|
+
* party, the create's argument carries it — supply it so the backstop allows it;
|
|
425
|
+
* omit it only when merchant == facilitator/sender (Design A collapses roles).
|
|
426
|
+
* A relay cannot widen the allowed set with it: it is pinned to caller intent. */
|
|
427
|
+
merchant?: string;
|
|
428
|
+
/** Optional caller intent: the instrument admin (DSO) recorded (reference-only)
|
|
429
|
+
* on the created `X402Escrow`. Supply the independently-trusted DSO so the
|
|
430
|
+
* create's instrumentAdmin field is allowed; omit when it coincides with an
|
|
431
|
+
* already-allowed party. Never taken from the relay. */
|
|
432
|
+
instrumentAdmin?: string;
|
|
433
|
+
/** Optional caller intent: the Decimal `amount` the sender intends the escrow to
|
|
434
|
+
* settle. When supplied, the created `X402Escrow`'s recorded `amount` (a Numeric
|
|
435
|
+
* the party-leaf backstop CANNOT see) is pinned by canonical equality — closing
|
|
436
|
+
* the amount-swap bypass where a malicious/buggy facilitator authored the offer
|
|
437
|
+
* with an inflated amount and the sender blind-signs the accept, durably
|
|
438
|
+
* authorizing an escrow that `X402Escrow_Settle` later settles at the larger
|
|
439
|
+
* value (the on-ledger settle pins `leg.amount == escrow.amount`). Omit only when
|
|
440
|
+
* the caller has no intended amount to assert. Never taken from the relay. */
|
|
441
|
+
amount?: string;
|
|
442
|
+
/** Optional caller-intent template `module:entity` of the `X402EscrowOffer`
|
|
443
|
+
* (e.g. "X402Escrow:X402EscrowOffer"). Pins Exercise.template_id. */
|
|
444
|
+
templateQualifiedName?: string;
|
|
445
|
+
/** Optional caller-intent synchronizer id. Pins SIGNED Metadata.synchronizer_id. */
|
|
446
|
+
synchronizerId?: string;
|
|
447
|
+
/** Inject Date.now() for testability of the timing sanity checks. */
|
|
448
|
+
nowMs?: number;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Assert the relay-returned `preparedTransaction` for the escrow-accept path
|
|
452
|
+
* encodes EXACTLY a single `X402EscrowOffer_Accept` exercise, on the caller's own
|
|
453
|
+
* offer cid, submitted by the agent (sender) — and is NOT a different
|
|
454
|
+
* (value-moving) choice, an accept of a different contract, an outbound drain, or
|
|
455
|
+
* a foreign-party submission, and creates an `X402Escrow` only among the
|
|
456
|
+
* caller-intended parties. Throws `PreparedTransferMismatchError` on any mismatch
|
|
457
|
+
* and `PreparedDecodeError` if the bytes are not a decodable PreparedTransaction.
|
|
458
|
+
* Call BEFORE signing the hash. Fail-closed: anything not positively proven to be
|
|
459
|
+
* a self-submitted accept of the caller's own offer throws.
|
|
460
|
+
*/
|
|
461
|
+
export declare function assertPreparedEscrowAcceptMatches(preparedTransactionB64: string, expect: PreparedEscrowAcceptExpectation): void;
|
|
462
|
+
/** Caller-intent expectation for a `SenderConsent` / `MerchantConsent` create. */
|
|
463
|
+
export interface PreparedConsentCreateExpectation {
|
|
464
|
+
/** The agent's own party — the SIGNING party (sole signatory + sole submitter).
|
|
465
|
+
* The created consent's [0] self-party (sender for SenderConsent, merchant for
|
|
466
|
+
* MerchantConsent) MUST equal this; it is also the ONLY non-facilitator party
|
|
467
|
+
* allowed anywhere. */
|
|
468
|
+
selfParty: string;
|
|
469
|
+
/** Caller intent: the facilitator party the consent names (its [1] field +
|
|
470
|
+
* observer). A relay-substituted facilitator could later mint a both-party
|
|
471
|
+
* consent and settle the agent's allocations, so it is pinned by exact equality
|
|
472
|
+
* and is the only OTHER allowed party. REQUIRED. */
|
|
473
|
+
facilitator: string;
|
|
474
|
+
/** Which standing consent this is — selects the created-template qualified-name
|
|
475
|
+
* pin and the [0] self-party field label ("sender" | "merchant"). */
|
|
476
|
+
consent: "sender" | "merchant";
|
|
477
|
+
/** Optional caller-intent synchronizer id. Pins SIGNED Metadata.synchronizer_id. */
|
|
478
|
+
synchronizerId?: string;
|
|
479
|
+
/** Inject Date.now() for testability of the timing sanity checks. */
|
|
480
|
+
nowMs?: number;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Assert the relay-returned `preparedTransaction` for the x402-direct consent-create
|
|
484
|
+
* path encodes EXACTLY a single `SenderConsent` / `MerchantConsent` create, signed
|
|
485
|
+
* by the agent, naming {selfParty, facilitator} — and is NOT a value-moving choice,
|
|
486
|
+
* a second leg, a relay-substituted facilitator, or a foreign-party submission.
|
|
487
|
+
* Throws `PreparedTransferMismatchError` on any mismatch and `PreparedDecodeError`
|
|
488
|
+
* if the bytes are not a decodable PreparedTransaction. Call BEFORE signing. Fail-
|
|
489
|
+
* closed: anything not positively proven to be a self-submitted consent create among
|
|
490
|
+
* exactly {selfParty, facilitator} throws.
|
|
491
|
+
*/
|
|
492
|
+
export declare function assertPreparedConsentCreateMatches(preparedTransactionB64: string, expect: PreparedConsentCreateExpectation): void;
|
|
262
493
|
/**
|
|
263
494
|
* How to bind the relay-returned `hash` to the `preparedTransaction` bytes the
|
|
264
495
|
* agent just structurally validated. Exactly one of these must hold for a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-prepared.d.ts","sourceRoot":"","sources":["../src/verify-prepared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-prepared.d.ts","sourceRoot":"","sources":["../src/verify-prepared.ts"],"names":[],"mappings":"AAy2BA,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,UAAU,CAAC;IACxB;;;;kEAI8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;qDAIiD;IACjD,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED;iFACiF;AACjF,KAAK,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC;AAE9E;;;;;;;GAOG;AACH,UAAU,WAAW;IACnB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf;;;qCAGiC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B;0EACsE;IACtE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACvC;;;;;qDAKiD;IACjD,MAAM,CAAC,EACH;QAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;KAAE,GACjF,SAAS,CAAC;IACd;;qEAEiE;IACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;+EAG2E;IAC3E,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB;;;;;;qEAMiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;6EACyE;IACzE,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B;qEACiE;IACjE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;mFAE+E;IAC/E,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;;2EAGuE;IACvE,mBAAmB,EAAE,UAAU,EAAE,CAAC;IAClC;;;;;;sEAMkE;IAClE,sBAAsB,EAAE,MAAM,EAAE,CAAC;CAClC;AA6LD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,sBAAsB,EAAE,MAAM,GAAG,eAAe,CAuI9E;AA+oBD,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAyED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,GAAG,iBAAiB,CAwD1E;AAMD,MAAM,WAAW,2BAA2B;IAC1C,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;mFAI+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;kCAG8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;+CAG2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;mFAG+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAyBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,wBAAgB,6BAA6B,CAC3C,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,2BAA2B,GAClC,IAAI,CA0FN;AAyCD,UAAU,8BAA8B;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd;;gEAE4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;kFAC8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,UAAU,GACtB,8BAA8B,CAwDhC;AAED;uEACuE;AACvE,MAAM,WAAW,wCAAwC;IACvD,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf;mFAC+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;uCAMmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;uFAEmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;+DAE2D;IAC3D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;sDAGkD;IAClD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,0CAA0C,CACxD,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,wCAAwC,GAC/C,IAAI,CAyIN;AAqCD,oFAAoF;AACpF,MAAM,WAAW,yBAAyB;IACxC,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAyBN;AAsFD,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB;wDACoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,GAAG,mBAAmB,CAmE9E;AAED;uEACuE;AACvE,MAAM,WAAW,6BAA6B;IAC5C,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB;;;;mBAIe;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB;qEACiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;uEACmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC7C,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,6BAA6B,GACpC,IAAI,CAgLN;AA+DD,gFAAgF;AAChF,MAAM,WAAW,qCAAqC;IACpD;;8DAE0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB;;;8EAG0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;oFAMgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;iFAU6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uCAAuC,CACrD,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,qCAAqC,GAC5C,IAAI,CAyEN;AAmMD,iFAAiF;AACjF,MAAM,WAAW,+BAA+B;IAC9C;mFAC+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB;;;oDAGgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;kEAI8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;uFAImF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;6DAGyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;mFAO+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;0EACsE;IACtE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAC/C,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,+BAA+B,GACtC,IAAI,CAgFN;AA4CD,kFAAkF;AAClF,MAAM,WAAW,gCAAgC;IAC/C;;;4BAGwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB;;;yDAGqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB;0EACsE;IACtE,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC/B,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA+BD;;;;;;;;;GASG;AACH,wBAAgB,kCAAkC,CAChD,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,gCAAgC,GACvC,IAAI,CAyEN;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,CAAC,EAAE,CAAC,sBAAsB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7E;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,iFAAiF;AACjF,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,iBAAiB,CACrC,sBAAsB,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA4Df;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,sBAAsB,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM,GACd,OAAO,CAIT;AAoDD;6EAC6E;AAC7E,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,uEAAuE;AACvE,MAAM,WAAW,6BAA6B;IAC5C,+EAA+E;IAC/E,gBAAgB,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AA+BD;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,yBAAyB,EAAE,MAAM,EAAE,EACnC,MAAM,EAAE,6BAA6B,GACpC,IAAI,CA0EN"}
|