zklicensing 0.1.0-beta.2 → 0.1.0-beta.21
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 +417 -201
- package/build/agent.d.ts +371 -0
- package/build/agent.d.ts.map +1 -0
- package/build/agent.js +553 -0
- package/build/agent.js.map +1 -0
- package/build/agentActions.d.ts +841 -0
- package/build/agentActions.d.ts.map +1 -0
- package/build/agentActions.js +581 -0
- package/build/agentActions.js.map +1 -0
- package/build/agentRecord.d.ts +83 -0
- package/build/agentRecord.d.ts.map +1 -0
- package/build/agentRecord.js +69 -0
- package/build/agentRecord.js.map +1 -0
- package/build/agentVendor.d.ts +220 -0
- package/build/agentVendor.d.ts.map +1 -0
- package/build/agentVendor.js +306 -0
- package/build/agentVendor.js.map +1 -0
- package/build/appsLookup.d.ts +14 -0
- package/build/appsLookup.d.ts.map +1 -0
- package/build/appsLookup.js +12 -0
- package/build/appsLookup.js.map +1 -0
- package/build/archiveBootstrap.d.ts +31 -5
- package/build/archiveBootstrap.d.ts.map +1 -0
- package/build/archiveBootstrap.js +140 -47
- package/build/archiveBootstrap.js.map +1 -0
- package/build/atomicJson.d.ts +5 -0
- package/build/atomicJson.d.ts.map +1 -0
- package/build/atomicJson.js +55 -0
- package/build/atomicJson.js.map +1 -0
- package/build/bindClient.d.ts +85 -0
- package/build/bindClient.d.ts.map +1 -0
- package/build/bindClient.js +187 -0
- package/build/bindClient.js.map +1 -0
- package/build/buyClient.d.ts +27 -4
- package/build/buyClient.d.ts.map +1 -0
- package/build/buyClient.js +72 -26
- package/build/buyClient.js.map +1 -0
- package/build/chainHead.d.ts +61 -0
- package/build/chainHead.d.ts.map +1 -0
- package/build/chainHead.js +88 -0
- package/build/chainHead.js.map +1 -0
- package/build/compactMerkleMap.d.ts +72 -0
- package/build/compactMerkleMap.d.ts.map +1 -0
- package/build/compactMerkleMap.js +224 -0
- package/build/compactMerkleMap.js.map +1 -0
- package/build/contractInterface.d.ts +191 -51
- package/build/contractInterface.d.ts.map +1 -0
- package/build/contractInterface.js +234 -43
- package/build/contractInterface.js.map +1 -0
- package/build/contractTypes.d.ts +9 -0
- package/build/contractTypes.d.ts.map +1 -0
- package/build/contractTypes.js +28 -0
- package/build/contractTypes.js.map +1 -0
- package/build/countryStats.d.ts +12 -3
- package/build/countryStats.d.ts.map +1 -0
- package/build/countryStats.js +87 -23
- package/build/countryStats.js.map +1 -0
- package/build/deployClient.d.ts +138 -24
- package/build/deployClient.d.ts.map +1 -0
- package/build/deployClient.js +91 -31
- package/build/deployClient.js.map +1 -0
- package/build/deviceIdentity.d.ts +68 -0
- package/build/deviceIdentity.d.ts.map +1 -0
- package/build/deviceIdentity.js +209 -0
- package/build/deviceIdentity.js.map +1 -0
- package/build/freezeClient.d.ts +26 -6
- package/build/freezeClient.d.ts.map +1 -0
- package/build/freezeClient.js +30 -6
- package/build/freezeClient.js.map +1 -0
- package/build/generationClient.d.ts +6 -3
- package/build/generationClient.d.ts.map +1 -0
- package/build/generationClient.js +25 -38
- package/build/generationClient.js.map +1 -0
- package/build/holderSecret.d.ts +70 -0
- package/build/holderSecret.d.ts.map +1 -0
- package/build/holderSecret.js +76 -0
- package/build/holderSecret.js.map +1 -0
- package/build/index.d.ts +38 -38
- package/build/index.d.ts.map +1 -0
- package/build/index.js +97 -121
- package/build/index.js.map +1 -0
- package/build/keysClient.d.ts +142 -0
- package/build/keysClient.d.ts.map +1 -0
- package/build/keysClient.js +109 -0
- package/build/keysClient.js.map +1 -0
- package/build/licenseLeaf.d.ts +76 -0
- package/build/licenseLeaf.d.ts.map +1 -0
- package/build/licenseLeaf.js +189 -0
- package/build/licenseLeaf.js.map +1 -0
- package/build/licenseRecord.d.ts +68 -5
- package/build/licenseRecord.d.ts.map +1 -0
- package/build/licenseRecord.js +26 -1
- package/build/licenseRecord.js.map +1 -0
- package/build/licenseStore.d.ts +81 -4
- package/build/licenseStore.d.ts.map +1 -0
- package/build/licenseStore.js +400 -30
- package/build/licenseStore.js.map +1 -0
- package/build/licenseTrustless.d.ts +43 -0
- package/build/licenseTrustless.d.ts.map +1 -0
- package/build/licenseTrustless.js +180 -0
- package/build/licenseTrustless.js.map +1 -0
- package/build/manifestVerify.d.ts +29 -1
- package/build/manifestVerify.d.ts.map +1 -0
- package/build/manifestVerify.js +46 -4
- package/build/manifestVerify.js.map +1 -0
- package/build/minaPriceHistory.d.ts +9 -0
- package/build/minaPriceHistory.d.ts.map +1 -0
- package/build/minaPriceHistory.js +152 -0
- package/build/minaPriceHistory.js.map +1 -0
- package/build/onChainRoot.d.ts +60 -0
- package/build/onChainRoot.d.ts.map +1 -0
- package/build/onChainRoot.js +74 -0
- package/build/onChainRoot.js.map +1 -0
- package/build/ownershipLicenseHash.d.ts +25 -0
- package/build/ownershipLicenseHash.d.ts.map +1 -0
- package/build/ownershipLicenseHash.js +29 -0
- package/build/ownershipLicenseHash.js.map +1 -0
- package/build/ownershipSignature.d.ts +153 -0
- package/build/ownershipSignature.d.ts.map +1 -0
- package/build/ownershipSignature.js +297 -0
- package/build/ownershipSignature.js.map +1 -0
- package/build/permitCheckFlow.d.ts +155 -0
- package/build/permitCheckFlow.d.ts.map +1 -0
- package/build/permitCheckFlow.js +196 -0
- package/build/permitCheckFlow.js.map +1 -0
- package/build/permitDescribe.d.ts +124 -0
- package/build/permitDescribe.d.ts.map +1 -0
- package/build/permitDescribe.js +324 -0
- package/build/permitDescribe.js.map +1 -0
- package/build/permitInterface.d.ts +85 -0
- package/build/permitInterface.d.ts.map +1 -0
- package/build/permitInterface.js +121 -0
- package/build/permitInterface.js.map +1 -0
- package/build/permitMessages.d.ts +313 -0
- package/build/permitMessages.d.ts.map +1 -0
- package/build/permitMessages.js +462 -0
- package/build/permitMessages.js.map +1 -0
- package/build/permitProof.d.ts +108 -0
- package/build/permitProof.d.ts.map +1 -0
- package/build/permitProof.js +202 -0
- package/build/permitProof.js.map +1 -0
- package/build/permitRegistryRebuild.d.ts +166 -0
- package/build/permitRegistryRebuild.d.ts.map +1 -0
- package/build/permitRegistryRebuild.js +347 -0
- package/build/permitRegistryRebuild.js.map +1 -0
- package/build/permitTree.d.ts +88 -0
- package/build/permitTree.d.ts.map +1 -0
- package/build/permitTree.js +230 -0
- package/build/permitTree.js.map +1 -0
- package/build/permitsClient.d.ts +680 -0
- package/build/permitsClient.d.ts.map +1 -0
- package/build/permitsClient.js +597 -0
- package/build/permitsClient.js.map +1 -0
- package/build/proveErrors.d.ts +50 -0
- package/build/proveErrors.d.ts.map +1 -0
- package/build/proveErrors.js +76 -0
- package/build/proveErrors.js.map +1 -0
- package/build/receipt.d.ts +95 -0
- package/build/receipt.d.ts.map +1 -0
- package/build/receipt.js +84 -0
- package/build/receipt.js.map +1 -0
- package/build/refundClient.d.ts +7 -12
- package/build/refundClient.d.ts.map +1 -0
- package/build/refundClient.js +52 -21
- package/build/refundClient.js.map +1 -0
- package/build/registryTrustVerify.d.ts +78 -0
- package/build/registryTrustVerify.d.ts.map +1 -0
- package/build/registryTrustVerify.js +129 -0
- package/build/registryTrustVerify.js.map +1 -0
- package/build/releaseClient.d.ts +26 -0
- package/build/releaseClient.d.ts.map +1 -0
- package/build/releaseClient.js +65 -0
- package/build/releaseClient.js.map +1 -0
- package/build/renewClient.d.ts +28 -2
- package/build/renewClient.d.ts.map +1 -0
- package/build/renewClient.js +31 -27
- package/build/renewClient.js.map +1 -0
- package/build/seatName.d.ts +8 -0
- package/build/seatName.d.ts.map +1 -0
- package/build/seatName.js +136 -0
- package/build/seatName.js.map +1 -0
- package/build/slotConstants.d.ts +15 -0
- package/build/slotConstants.d.ts.map +1 -0
- package/build/slotConstants.js +17 -0
- package/build/slotConstants.js.map +1 -0
- package/build/statsClient.d.ts +61 -7
- package/build/statsClient.d.ts.map +1 -0
- package/build/statsClient.js +44 -5
- package/build/statsClient.js.map +1 -0
- package/build/successorChain.d.ts +35 -0
- package/build/successorChain.d.ts.map +1 -0
- package/build/successorChain.js +69 -0
- package/build/successorChain.js.map +1 -0
- package/build/taxId.d.ts +44 -0
- package/build/taxId.d.ts.map +1 -0
- package/build/taxId.js +212 -0
- package/build/taxId.js.map +1 -0
- package/build/trustAnchorVerify.d.ts +49 -0
- package/build/trustAnchorVerify.d.ts.map +1 -0
- package/build/trustAnchorVerify.js +432 -0
- package/build/trustAnchorVerify.js.map +1 -0
- package/build/trustAnchorVerifyCli.d.ts +45 -0
- package/build/trustAnchorVerifyCli.d.ts.map +1 -0
- package/build/trustAnchorVerifyCli.js +235 -0
- package/build/trustAnchorVerifyCli.js.map +1 -0
- package/build/txBroadcastClient.d.ts +26 -0
- package/build/txBroadcastClient.d.ts.map +1 -0
- package/build/txBroadcastClient.js +20 -0
- package/build/txBroadcastClient.js.map +1 -0
- package/build/unbindClient.d.ts +77 -0
- package/build/unbindClient.d.ts.map +1 -0
- package/build/unbindClient.js +169 -0
- package/build/unbindClient.js.map +1 -0
- package/build/units.d.ts +28 -0
- package/build/units.d.ts.map +1 -0
- package/build/units.js +65 -0
- package/build/units.js.map +1 -0
- package/build/vatRates.d.ts +54 -0
- package/build/vatRates.d.ts.map +1 -0
- package/build/vatRates.js +82 -0
- package/build/vatRates.js.map +1 -0
- package/build/vatRatesData.d.ts +5 -0
- package/build/vatRatesData.d.ts.map +1 -0
- package/build/vatRatesData.js +42 -0
- package/build/vatRatesData.js.map +1 -0
- package/build/vendorAccountClient.d.ts +66 -0
- package/build/vendorAccountClient.d.ts.map +1 -0
- package/build/vendorAccountClient.js +47 -0
- package/build/vendorAccountClient.js.map +1 -0
- package/build/verifyCore.d.ts +4 -1
- package/build/verifyCore.d.ts.map +1 -0
- package/build/verifyCore.js +21 -10
- package/build/verifyCore.js.map +1 -0
- package/build/verifyOffline.d.ts +85 -0
- package/build/verifyOffline.d.ts.map +1 -0
- package/build/verifyOffline.js +139 -0
- package/build/verifyOffline.js.map +1 -0
- package/build/verifyService.d.ts.map +1 -0
- package/build/verifyService.js +571 -501
- package/build/verifyService.js.map +1 -0
- package/build/verifyWithAncestors.d.ts +19 -0
- package/build/verifyWithAncestors.d.ts.map +1 -0
- package/build/verifyWithAncestors.js +127 -0
- package/build/verifyWithAncestors.js.map +1 -0
- package/build/zipToState.d.ts +2 -0
- package/build/zipToState.d.ts.map +1 -0
- package/build/zipToState.js +94 -0
- package/build/zipToState.js.map +1 -0
- package/package.json +141 -16
- package/src/agent.ts +682 -0
- package/src/agentActions.ts +637 -0
- package/src/agentRecord.ts +121 -0
- package/src/agentVendor.ts +356 -0
- package/src/appsLookup.ts +48 -0
- package/src/archiveBootstrap.ts +386 -0
- package/src/atomicJson.ts +53 -0
- package/src/bindClient.ts +297 -0
- package/src/buyClient.ts +344 -0
- package/src/chainHead.ts +106 -0
- package/src/compactMerkleMap.ts +222 -0
- package/src/contractInterface.ts +465 -0
- package/src/contractTypes.ts +31 -0
- package/src/countryStats.ts +200 -0
- package/src/deployClient.ts +517 -0
- package/src/deviceIdentity.ts +249 -0
- package/src/freezeClient.ts +162 -0
- package/src/generationClient.ts +145 -0
- package/src/holderSecret.ts +91 -0
- package/src/index.ts +362 -0
- package/src/keysClient.ts +135 -0
- package/src/licenseLeaf.ts +221 -0
- package/src/licenseRecord.ts +190 -0
- package/src/licenseStore.ts +767 -0
- package/src/licenseTrustless.ts +207 -0
- package/src/manifestVerify.ts +164 -0
- package/src/minaPriceHistory.ts +166 -0
- package/src/onChainRoot.ts +90 -0
- package/src/ownershipLicenseHash.ts +31 -0
- package/src/ownershipSignature.ts +421 -0
- package/src/permitCheckFlow.ts +227 -0
- package/src/permitDescribe.ts +362 -0
- package/src/permitInterface.ts +146 -0
- package/src/permitMessages.ts +572 -0
- package/src/permitProof.ts +230 -0
- package/src/permitRegistryRebuild.ts +423 -0
- package/src/permitTree.ts +232 -0
- package/src/permitsClient.ts +746 -0
- package/src/proveErrors.ts +98 -0
- package/src/receipt.ts +156 -0
- package/src/refundClient.ts +177 -0
- package/src/registryTrustVerify.ts +192 -0
- package/src/releaseClient.ts +101 -0
- package/src/renewClient.ts +234 -0
- package/src/seatName.ts +165 -0
- package/src/slotConstants.ts +18 -0
- package/src/statsClient.ts +249 -0
- package/src/successorChain.ts +87 -0
- package/src/taxId.ts +227 -0
- package/src/trustAnchorVerify.ts +550 -0
- package/src/trustAnchorVerifyCli.ts +234 -0
- package/src/txBroadcastClient.ts +48 -0
- package/src/unbindClient.ts +233 -0
- package/src/units.ts +74 -0
- package/src/vatRates.ts +100 -0
- package/src/vatRatesData.ts +43 -0
- package/src/vendorAccountClient.ts +120 -0
- package/src/verifyCore.ts +100 -0
- package/src/verifyOffline.ts +212 -0
- package/src/verifyService.ts +982 -0
- package/src/verifyWithAncestors.ts +163 -0
- package/src/zipToState.ts +94 -0
- package/build/licenseProof.d.ts +0 -26
- package/build/licenseProof.js +0 -41
- package/build/migrateClient.d.ts +0 -43
- package/build/migrateClient.js +0 -47
- package/build/ownership.d.ts +0 -34
- package/build/ownership.js +0 -147
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
-
//
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
3
|
/**
|
|
4
4
|
* archiveBootstrap.ts
|
|
5
5
|
*
|
|
@@ -12,19 +12,22 @@
|
|
|
12
12
|
* licenseIssued → applyLicenseIssued
|
|
13
13
|
* licenseIssuedNoEscrow → applyLicenseIssued (escrowless: true)
|
|
14
14
|
* licenseRenewed → updateExpiry
|
|
15
|
-
*
|
|
15
|
+
* appCreated (successor) → carryOverRecords from its predecessor (lazyBootstrap)
|
|
16
|
+
* appRetired → ignored (the app is frozen; its successor carries on)
|
|
16
17
|
* refundIssued → recordRefund
|
|
17
18
|
* fundsReleased → recordRelease
|
|
19
|
+
* deviceBound → applyDeviceBound (non-custodial binding)
|
|
20
|
+
* deviceUnbound → applyDeviceUnbound (non-custodial binding)
|
|
18
21
|
* priceUpdated → ignored (price-history tracking lives in the private
|
|
19
|
-
* zklicensing-app
|
|
22
|
+
* zklicensing-app backend alongside vendor-stats)
|
|
20
23
|
*
|
|
21
24
|
* Uses LicensingAppEventsContract (from contractInterface) for fetchEvents —
|
|
22
25
|
* this lets the public verify service read events without depending on the
|
|
23
26
|
* private LicensingApp circuit source.
|
|
24
27
|
*/
|
|
25
|
-
import { PublicKey
|
|
26
|
-
import { LicensingAppEventsContract, MONTHLY_SLOTS_N, ONE_YEAR_SLOTS_N, FIVE_YEAR_SLOTS_N, } from './contractInterface.js';
|
|
27
|
-
import { applyLicenseIssued,
|
|
28
|
+
import { PublicKey } from 'o1js';
|
|
29
|
+
import { LicensingAppEventsContract, MONTHLY_SLOTS_N, ONE_YEAR_SLOTS_N, FIVE_YEAR_SLOTS_N, PERPETUAL_SLOTS_N, } from './contractInterface.js';
|
|
30
|
+
import { applyLicenseIssued, applyLicenseRenewed, applyDeviceBound, applyDeviceUnbound, applyLicenseTransferred, recordRefund, recordRelease, readRecords, carryOverRecords, } from './licenseStore.js';
|
|
28
31
|
export const SYNC_CHUNK_SLOTS = 10_000;
|
|
29
32
|
export const MAX_LOOKBACK_SLOTS = 525_600;
|
|
30
33
|
// Back-derive the duration tier from (expirySlot - purchaseSlot). Tolerance
|
|
@@ -37,16 +40,36 @@ export function tierFromExpiryDelta(slots) {
|
|
|
37
40
|
return 'yearly';
|
|
38
41
|
if (within(FIVE_YEAR_SLOTS_N))
|
|
39
42
|
return 'fiveYear';
|
|
43
|
+
if (within(PERPETUAL_SLOTS_N))
|
|
44
|
+
return 'perpetual';
|
|
40
45
|
return null;
|
|
41
46
|
}
|
|
42
47
|
export async function bootstrapFromArchive(zkAppAddress, range = {}) {
|
|
43
48
|
const pubKey = PublicKey.fromBase58(zkAppAddress);
|
|
44
49
|
const zkApp = new LicensingAppEventsContract(pubKey);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
// o1js's fetchEvents(from, to) passes these directly to the archive-node
|
|
51
|
+
// GraphQL as `from`/`to`, which the reference Mina archive interprets as
|
|
52
|
+
// BLOCK HEIGHTS, not global slots. We track everything in slots, so the two
|
|
53
|
+
// never match and every query returned zero events. Fetch all events for
|
|
54
|
+
// the address and filter by globalSlot client-side — over-fetches per
|
|
55
|
+
// chunked call, but is the only correct behavior against this archive.
|
|
56
|
+
const allEvents = await zkApp.fetchEvents();
|
|
57
|
+
const fromSlot = range.from ?? 0;
|
|
58
|
+
const toSlot = range.to ?? Number.MAX_SAFE_INTEGER;
|
|
59
|
+
// Filter out only orphaned events; keep both 'canonical' and 'pending'.
|
|
60
|
+
// The devnet-archive-node-api.gcp.o1test.net archive returns everything
|
|
61
|
+
// with chainStatus='pending' (it doesn't finalize the flag), so a strict
|
|
62
|
+
// `=== 'canonical'` filter drops every event and the mirror stays empty.
|
|
63
|
+
// Mina's k-block finality means recently-landed events on the best chain
|
|
64
|
+
// are safe to replay; if one later reorgs out, the next sync sweep will
|
|
65
|
+
// re-derive state from the new canonical events (a no-op if none of them
|
|
66
|
+
// touch this record).
|
|
48
67
|
const canonical = [...allEvents]
|
|
49
|
-
.filter(e => e.chainStatus
|
|
68
|
+
.filter(e => e.chainStatus !== 'orphaned')
|
|
69
|
+
.filter(e => {
|
|
70
|
+
const slot = Number(e.globalSlot.toString());
|
|
71
|
+
return slot >= fromSlot && slot <= toSlot;
|
|
72
|
+
})
|
|
50
73
|
.sort((a, b) => Number(a.globalSlot.toString()) - Number(b.globalSlot.toString()));
|
|
51
74
|
const events = [];
|
|
52
75
|
for (const ev of canonical) {
|
|
@@ -60,6 +83,7 @@ export async function bootstrapFromArchive(zkAppAddress, range = {}) {
|
|
|
60
83
|
priceMonthly: BigInt(data.priceMonthly.toString()),
|
|
61
84
|
priceYearly: BigInt(data.priceYearly.toString()),
|
|
62
85
|
priceFiveYear: BigInt(data.priceFiveYear.toString()),
|
|
86
|
+
pricePerpetual: BigInt(data.pricePerpetual.toString()),
|
|
63
87
|
});
|
|
64
88
|
break;
|
|
65
89
|
}
|
|
@@ -72,6 +96,8 @@ export async function bootstrapFromArchive(zkAppAddress, range = {}) {
|
|
|
72
96
|
amount: BigInt(data.amount.toString()),
|
|
73
97
|
issuedSlot: Number(data.slot.toString()),
|
|
74
98
|
expirySlot: Number(data.expirySlot.toString()),
|
|
99
|
+
buyerAddress: data.buyer.toBase58(),
|
|
100
|
+
cap: Number(data.cap.toString()),
|
|
75
101
|
});
|
|
76
102
|
break;
|
|
77
103
|
}
|
|
@@ -84,6 +110,8 @@ export async function bootstrapFromArchive(zkAppAddress, range = {}) {
|
|
|
84
110
|
amount: BigInt(data.amount.toString()),
|
|
85
111
|
issuedSlot: Number(data.slot.toString()),
|
|
86
112
|
expirySlot: Number(data.expirySlot.toString()),
|
|
113
|
+
buyerAddress: data.buyer.toBase58(),
|
|
114
|
+
cap: Number(data.cap.toString()),
|
|
87
115
|
});
|
|
88
116
|
break;
|
|
89
117
|
}
|
|
@@ -97,23 +125,53 @@ export async function bootstrapFromArchive(zkAppAddress, range = {}) {
|
|
|
97
125
|
});
|
|
98
126
|
break;
|
|
99
127
|
}
|
|
100
|
-
case '
|
|
128
|
+
case 'appCreated': {
|
|
101
129
|
const data = ev.event.data;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
slot,
|
|
105
|
-
licenseHash: data.licenseHash.toString(),
|
|
106
|
-
expirySlot: Number(data.expirySlot.toString()),
|
|
107
|
-
ancestorGen: Number(data.ancestorGen.toString()),
|
|
108
|
-
});
|
|
130
|
+
const pred = data.predecessor;
|
|
131
|
+
events.push({ kind: 'appCreated', slot, predecessor: pred.equals(PublicKey.empty()).toBoolean() ? null : pred.toBase58() });
|
|
109
132
|
break;
|
|
110
133
|
}
|
|
134
|
+
case 'appRetired':
|
|
135
|
+
events.push({ kind: 'appRetired', slot, licensesRoot: ev.event.data.licensesRoot.toString() });
|
|
136
|
+
break;
|
|
111
137
|
case 'refundIssued':
|
|
112
138
|
events.push({ kind: 'refundIssued', slot, licenseHash: ev.event.data.toString() });
|
|
113
139
|
break;
|
|
114
140
|
case 'fundsReleased':
|
|
115
141
|
events.push({ kind: 'fundsReleased', slot, licenseHash: ev.event.data.toString() });
|
|
116
142
|
break;
|
|
143
|
+
case 'deviceBound': {
|
|
144
|
+
const data = ev.event.data;
|
|
145
|
+
events.push({
|
|
146
|
+
kind: 'deviceBound',
|
|
147
|
+
slot,
|
|
148
|
+
licenseHash: data.licenseHash.toString(),
|
|
149
|
+
slotIndex: Number(data.slotIndex.toString()),
|
|
150
|
+
deviceCommitment: data.deviceCommitment.toString(),
|
|
151
|
+
// Proof-time slot, NOT the block slot. The circuit packs this into
|
|
152
|
+
// the leaf's freedAt field, so the mirror must use the same value
|
|
153
|
+
// or the reconstructed leaf hash won't match the on-chain root.
|
|
154
|
+
boundAtSlot: Number(data.boundAtSlot.toString()),
|
|
155
|
+
});
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
case 'licenseTransferred': {
|
|
159
|
+
const data = ev.event.data;
|
|
160
|
+
events.push({ kind: 'licenseTransferred', slot, from: data.from.toString(), to: data.to.toString(), wallet: data.wallet.toBase58() });
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case 'deviceUnbound': {
|
|
164
|
+
const data = ev.event.data;
|
|
165
|
+
events.push({
|
|
166
|
+
kind: 'deviceUnbound',
|
|
167
|
+
slot,
|
|
168
|
+
licenseHash: data.licenseHash.toString(),
|
|
169
|
+
slotIndex: Number(data.slotIndex.toString()),
|
|
170
|
+
// Proof-time slot; see deviceBound comment above.
|
|
171
|
+
freedAtSlot: Number(data.freedAtSlot.toString()),
|
|
172
|
+
});
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
117
175
|
}
|
|
118
176
|
}
|
|
119
177
|
const maxSeenSlot = canonical.length === 0
|
|
@@ -134,6 +192,8 @@ export async function applyEventsToStore(zkAppAddress, events) {
|
|
|
134
192
|
expirySlot: ev.expirySlot,
|
|
135
193
|
purchaseSlot: ev.issuedSlot,
|
|
136
194
|
purchaseAmount: ev.amount.toString(),
|
|
195
|
+
buyerAddress: ev.buyerAddress,
|
|
196
|
+
deviceCap: ev.cap,
|
|
137
197
|
...(tier ? { tier } : {}),
|
|
138
198
|
});
|
|
139
199
|
count++;
|
|
@@ -146,29 +206,24 @@ export async function applyEventsToStore(zkAppAddress, events) {
|
|
|
146
206
|
purchaseSlot: ev.issuedSlot,
|
|
147
207
|
purchaseAmount: ev.amount.toString(),
|
|
148
208
|
escrowless: true,
|
|
209
|
+
buyerAddress: ev.buyerAddress,
|
|
210
|
+
deviceCap: ev.cap,
|
|
149
211
|
...(tier ? { tier } : {}),
|
|
150
212
|
});
|
|
151
213
|
count++;
|
|
152
214
|
break;
|
|
153
215
|
}
|
|
154
216
|
case 'licenseRenewed': {
|
|
155
|
-
const ok = await
|
|
156
|
-
markRenewed: true,
|
|
157
|
-
});
|
|
217
|
+
const ok = await applyLicenseRenewed(zkAppAddress, ev.licenseHash, { newExpiry: ev.newExpiry });
|
|
158
218
|
if (!ok)
|
|
159
219
|
warnings.push(`renew for unknown license ${ev.licenseHash.slice(0, 16)}…`);
|
|
160
220
|
break;
|
|
161
221
|
}
|
|
162
|
-
case '
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
purchaseAmount: '0',
|
|
167
|
-
escrowless: true,
|
|
168
|
-
});
|
|
169
|
-
count++;
|
|
222
|
+
case 'appCreated':
|
|
223
|
+
case 'appRetired':
|
|
224
|
+
// A successor's carried-over licenses are copied by lazyBootstrap
|
|
225
|
+
// (from its predecessor) before its own events apply.
|
|
170
226
|
break;
|
|
171
|
-
}
|
|
172
227
|
case 'refundIssued': {
|
|
173
228
|
const ok = await recordRefund(zkAppAddress, ev.licenseHash);
|
|
174
229
|
if (!ok)
|
|
@@ -181,6 +236,31 @@ export async function applyEventsToStore(zkAppAddress, events) {
|
|
|
181
236
|
warnings.push(`release for unknown license ${ev.licenseHash.slice(0, 16)}…`);
|
|
182
237
|
break;
|
|
183
238
|
}
|
|
239
|
+
case 'deviceBound': {
|
|
240
|
+
const ok = await applyDeviceBound(zkAppAddress, ev.licenseHash, {
|
|
241
|
+
slotIndex: ev.slotIndex,
|
|
242
|
+
deviceCommitment: ev.deviceCommitment,
|
|
243
|
+
boundAtSlot: ev.boundAtSlot,
|
|
244
|
+
});
|
|
245
|
+
if (!ok)
|
|
246
|
+
warnings.push(`bind for unknown license ${ev.licenseHash.slice(0, 16)}…`);
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
case 'licenseTransferred': {
|
|
250
|
+
const ok = await applyLicenseTransferred(zkAppAddress, ev.from, ev.to, { wallet: ev.wallet });
|
|
251
|
+
if (!ok)
|
|
252
|
+
warnings.push(`transfer of unknown license ${ev.from.slice(0, 16)}…`);
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
case 'deviceUnbound': {
|
|
256
|
+
const ok = await applyDeviceUnbound(zkAppAddress, ev.licenseHash, {
|
|
257
|
+
slotIndex: ev.slotIndex,
|
|
258
|
+
freedAtSlot: ev.freedAtSlot,
|
|
259
|
+
});
|
|
260
|
+
if (!ok)
|
|
261
|
+
warnings.push(`unbind for unknown license ${ev.licenseHash.slice(0, 16)}…`);
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
184
264
|
}
|
|
185
265
|
}
|
|
186
266
|
return { count, warnings };
|
|
@@ -189,20 +269,21 @@ export async function discoverAppCreatedSlot(zkAppAddress, nowSlot, lookbackSlot
|
|
|
189
269
|
const pubKey = PublicKey.fromBase58(zkAppAddress);
|
|
190
270
|
const zkApp = new LicensingAppEventsContract(pubKey);
|
|
191
271
|
const floor = Math.max(1, nowSlot - lookbackSlots);
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
272
|
+
// See bootstrapFromArchive: fetchEvents(from, to) filters by BLOCK HEIGHT
|
|
273
|
+
// in the reference archive, not slot. One full fetch + client-side slot
|
|
274
|
+
// filter is the only correct approach. Also keeps chainStatus='pending'
|
|
275
|
+
// events — o1test.net's devnet archive doesn't finalize that flag; strict
|
|
276
|
+
// 'canonical' filtering leaves discovery empty on freshly-deployed apps.
|
|
277
|
+
const events = await zkApp.fetchEvents();
|
|
278
|
+
const created = events
|
|
279
|
+
.filter(e => e.chainStatus !== 'orphaned' && e.type === 'appCreated')
|
|
280
|
+
.filter(e => {
|
|
281
|
+
const slot = Number(e.globalSlot.toString());
|
|
282
|
+
return slot >= floor && slot <= nowSlot;
|
|
283
|
+
})
|
|
284
|
+
.sort((a, b) => Number(a.globalSlot.toString()) - Number(b.globalSlot.toString()));
|
|
285
|
+
if (created.length > 0)
|
|
286
|
+
return Number(created[0].globalSlot.toString());
|
|
206
287
|
return null;
|
|
207
288
|
}
|
|
208
289
|
const inFlightBootstraps = new Map();
|
|
@@ -212,14 +293,26 @@ export async function lazyBootstrap(zkAppAddress) {
|
|
|
212
293
|
return existing;
|
|
213
294
|
const short = zkAppAddress.slice(0, 12) + '…';
|
|
214
295
|
const p = (async () => {
|
|
296
|
+
const started = Date.now();
|
|
215
297
|
try {
|
|
216
298
|
const { events } = await bootstrapFromArchive(zkAppAddress);
|
|
299
|
+
// A redeployed app's successor starts with its predecessor's licenses:
|
|
300
|
+
// rebuild those first (recursively), then copy them across.
|
|
301
|
+
const created = events.find(e => e.kind === 'appCreated');
|
|
302
|
+
if (created?.kind === 'appCreated' && created.predecessor) {
|
|
303
|
+
if (!(await readRecords()).some(r => r.zkAppAddress === created.predecessor))
|
|
304
|
+
await lazyBootstrap(created.predecessor);
|
|
305
|
+
await carryOverRecords(created.predecessor, zkAppAddress);
|
|
306
|
+
}
|
|
217
307
|
const { count, warnings } = await applyEventsToStore(zkAppAddress, events);
|
|
218
308
|
for (const w of warnings)
|
|
219
309
|
console.warn(`[lazy-bootstrap] ${short}: ${w}`);
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
310
|
+
// Always log the outcome — count=0 with a mismatch trigger is the
|
|
311
|
+
// interesting case: it means either the archive is behind Mina's own
|
|
312
|
+
// best chain (transient) or the local mirror silently drifted and the
|
|
313
|
+
// replay didn't fix it (a real bug — verify will keep looping through
|
|
314
|
+
// this until the next mutation event lands). Silence would hide both.
|
|
315
|
+
console.log(`[lazy-bootstrap] ${short}: replayed ${count} record(s) in ${Date.now() - started}ms`);
|
|
223
316
|
}
|
|
224
317
|
catch (e) {
|
|
225
318
|
console.warn(`[lazy-bootstrap] ${short}: ${e?.message ?? e}`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archiveBootstrap.js","sourceRoot":"","sources":["../src/archiveBootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomicJson.d.ts","sourceRoot":"","sources":["../src/atomicJson.ts"],"names":[],"mappings":"AAmBA,wBAAsB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAazE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/G"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
|
+
/**
|
|
4
|
+
* atomicJson.ts — `zklicensing/internal/atomicJson`
|
|
5
|
+
*
|
|
6
|
+
* Crash-safe JSON files. A write goes to a temporary file in the same
|
|
7
|
+
* directory, is flushed to disk, and replaces the target with one rename, so
|
|
8
|
+
* a crash leaves either the old or the new file — never half of one. A read
|
|
9
|
+
* returns the fallback only when the file doesn't exist; a file that exists
|
|
10
|
+
* but doesn't parse is an error, so a damaged store is never mistaken for an
|
|
11
|
+
* empty one (and then overwritten with nothing).
|
|
12
|
+
*/
|
|
13
|
+
// Only a default import of fs/promises (no named imports from Node modules):
|
|
14
|
+
// browser bundles that reach this file through licenseStore get Vite's empty
|
|
15
|
+
// stub for it instead of a build error.
|
|
16
|
+
import fs from 'fs/promises';
|
|
17
|
+
export async function readJsonOr(path, fallback) {
|
|
18
|
+
let text;
|
|
19
|
+
try {
|
|
20
|
+
text = await fs.readFile(path, 'utf8');
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
if (e?.code === 'ENOENT')
|
|
24
|
+
return fallback;
|
|
25
|
+
throw e;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(text);
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
throw new Error(`${path} exists but is not valid JSON (${e?.message ?? e}); restore it from a backup — refusing to treat it as empty`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function writeJsonAtomic(path, value, opts = {}) {
|
|
35
|
+
// Same directory as the target (rename is only atomic within a file system).
|
|
36
|
+
const slash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));
|
|
37
|
+
const suffix = [...crypto.getRandomValues(new Uint8Array(6))].map(b => b.toString(16).padStart(2, '0')).join('');
|
|
38
|
+
const tmp = `${path.slice(0, slash + 1)}.${path.slice(slash + 1)}.${suffix}.tmp`;
|
|
39
|
+
const fh = await fs.open(tmp, 'w', opts.mode ?? 0o600);
|
|
40
|
+
try {
|
|
41
|
+
await fh.writeFile(JSON.stringify(value, null, 2), 'utf8');
|
|
42
|
+
await fh.sync();
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
await fh.close();
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
await fs.rename(tmp, path);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
await fs.rm(tmp, { force: true });
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=atomicJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomicJson.js","sourceRoot":"","sources":["../src/atomicJson.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oCAAoC;AAEpC;;;;;;;;;GASG;AAEH,6EAA6E;AAC7E,6EAA6E;AAC7E,wCAAwC;AACxC,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,IAAY,EAAE,QAAW;IAC3D,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC1C,MAAM,CAAC,CAAC;IACV,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,CAAC,EAAE,OAAO,IAAI,CAAC,6DAA6D,CAAC,CAAC;IACzI,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAc,EAAE,OAA0B,EAAE;IAC9F,6EAA6E;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,MAAM,CAAC;IACjF,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bindClient.ts
|
|
3
|
+
*
|
|
4
|
+
* Browser-safe client for the non-custodial device-binding flow.
|
|
5
|
+
* Mirrors `buyClient.ts` in shape: the caller drives the wallet step
|
|
6
|
+
* between `proveBind` and `confirmBind`, so the SDK stays
|
|
7
|
+
* wallet-agnostic.
|
|
8
|
+
*
|
|
9
|
+
* Binding is a root-mutating tx on the same per-app in-flight slot
|
|
10
|
+
* that buy / renew / refund use — a concurrent request
|
|
11
|
+
* against the same app returns 409 `ProveQueueBusyError`, which the
|
|
12
|
+
* caller must catch and retry (see the retry loop in
|
|
13
|
+
* examples/src/bind.ts).
|
|
14
|
+
*
|
|
15
|
+
* The signature scheme is Pallas Schnorr and is re-verified INSIDE
|
|
16
|
+
* the on-chain circuit via `Signature.verify()` — a compromised
|
|
17
|
+
* backend cannot forge a bind because it can't produce a signature
|
|
18
|
+
* that satisfies the in-circuit check.
|
|
19
|
+
*/
|
|
20
|
+
import { PrivateKey } from 'o1js';
|
|
21
|
+
export type ProveBindRequest = {
|
|
22
|
+
keeperUrl: string;
|
|
23
|
+
network: 'devnet' | 'mainnet';
|
|
24
|
+
zkAppAddress: string;
|
|
25
|
+
licenseHash: string;
|
|
26
|
+
ownerPrivateKey: PrivateKey;
|
|
27
|
+
deviceCommitment: string;
|
|
28
|
+
slotIndex: number;
|
|
29
|
+
buyerAddress: string;
|
|
30
|
+
nonce?: string;
|
|
31
|
+
slotState?: string;
|
|
32
|
+
expirySlot?: number;
|
|
33
|
+
fetcher?: typeof fetch;
|
|
34
|
+
signal?: AbortSignal;
|
|
35
|
+
};
|
|
36
|
+
export type ProveBindResponse = {
|
|
37
|
+
provenTxJson: string;
|
|
38
|
+
licenseHash: string;
|
|
39
|
+
slotIndex: number;
|
|
40
|
+
};
|
|
41
|
+
export type ConfirmBindRequest = {
|
|
42
|
+
keeperUrl: string;
|
|
43
|
+
zkAppAddress: string;
|
|
44
|
+
licenseHash: string;
|
|
45
|
+
txHash: string;
|
|
46
|
+
fetcher?: typeof fetch;
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
};
|
|
49
|
+
export declare function fetchBindingState(opts: {
|
|
50
|
+
keeperUrl: string;
|
|
51
|
+
network: 'devnet' | 'mainnet';
|
|
52
|
+
zkAppAddress: string;
|
|
53
|
+
licenseHash: string;
|
|
54
|
+
slotIndex: number;
|
|
55
|
+
fetcher?: typeof fetch;
|
|
56
|
+
signal?: AbortSignal;
|
|
57
|
+
}): Promise<{
|
|
58
|
+
slotState: string;
|
|
59
|
+
expirySlot: number;
|
|
60
|
+
}>;
|
|
61
|
+
export declare function proveBind(req: ProveBindRequest): Promise<ProveBindResponse>;
|
|
62
|
+
export declare function confirmBind(req: ConfirmBindRequest): Promise<{
|
|
63
|
+
ok: true;
|
|
64
|
+
}>;
|
|
65
|
+
export type BindStatus = {
|
|
66
|
+
status: 'confirmed' | 'pending' | 'unknown';
|
|
67
|
+
slotIndex?: number;
|
|
68
|
+
deviceCommitment?: string;
|
|
69
|
+
elapsedMs?: number;
|
|
70
|
+
};
|
|
71
|
+
export type PollBindStatusOptions = {
|
|
72
|
+
keeperUrl: string;
|
|
73
|
+
network: 'devnet' | 'mainnet';
|
|
74
|
+
zkAppAddress: string;
|
|
75
|
+
licenseHash: string;
|
|
76
|
+
slotIndex: number;
|
|
77
|
+
deviceCommitment: string;
|
|
78
|
+
fetcher?: typeof fetch;
|
|
79
|
+
intervalMs?: number;
|
|
80
|
+
timeoutMs?: number;
|
|
81
|
+
signal?: AbortSignal;
|
|
82
|
+
onTick?: (status: BindStatus) => void;
|
|
83
|
+
};
|
|
84
|
+
export declare function pollBindStatus(opts: PollBindStatusOptions): Promise<BindStatus>;
|
|
85
|
+
//# sourceMappingURL=bindClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindClient.d.ts","sourceRoot":"","sources":["../src/bindClient.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAS,UAAU,EAAwB,MAAM,MAAM,CAAC;AAS/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAS,MAAM,CAAC;IAGzB,OAAO,EAAW,QAAQ,GAAG,SAAS,CAAC;IAGvC,YAAY,EAAM,MAAM,CAAC;IAKzB,WAAW,EAAO,MAAM,CAAC;IAIzB,eAAe,EAAG,UAAU,CAAC;IAK7B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,SAAS,EAAS,MAAM,CAAC;IAEzB,YAAY,EAAM,MAAM,CAAC;IAKzB,KAAK,CAAC,EAAY,MAAM,CAAC;IAOzB,SAAS,CAAC,EAAQ,MAAM,CAAC;IACzB,UAAU,CAAC,EAAO,MAAM,CAAC;IACzB,OAAO,CAAC,EAAU,OAAO,KAAK,CAAC;IAC/B,MAAM,CAAC,EAAW,WAAW,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,SAAS,EAAK,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAK,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,MAAM,EAAQ,MAAM,CAAC;IACrB,OAAO,CAAC,EAAM,OAAO,KAAK,CAAC;IAC3B,MAAM,CAAC,EAAO,WAAW,CAAC;CAC3B,CAAC;AAmCF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAK,MAAM,CAAC;IACrB,OAAO,EAAO,QAAQ,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,SAAS,EAAK,MAAM,CAAC;IACrB,OAAO,CAAC,EAAM,OAAO,KAAK,CAAC;IAC3B,MAAM,CAAC,EAAO,WAAW,CAAC;CAC3B,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBrD;AAQD,wBAAsB,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyCjF;AAMD,wBAAsB,WAAW,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAchF;AAED,MAAM,MAAM,UAAU,GAAG;IAKvB,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAS,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAS,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAS,MAAM,CAAC;IACzB,OAAO,EAAW,QAAQ,GAAG,SAAS,CAAC;IACvC,YAAY,EAAM,MAAM,CAAC;IACzB,WAAW,EAAO,MAAM,CAAC;IACzB,SAAS,EAAS,MAAM,CAAC;IAKzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAU,OAAO,KAAK,CAAC;IAG/B,UAAU,CAAC,EAAO,MAAM,CAAC;IACzB,SAAS,CAAC,EAAQ,MAAM,CAAC;IACzB,MAAM,CAAC,EAAW,WAAW,CAAC;IAC9B,MAAM,CAAC,EAAW,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAChD,CAAC;AAKF,wBAAsB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4CrF"}
|