passkey-kit 0.16.4 → 0.17.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/README.md +72 -33
- package/dist/contract-errors.d.ts +1 -1
- package/dist/contract-errors.d.ts.map +1 -1
- package/dist/contract-errors.js +6 -2
- package/dist/contract-errors.js.map +1 -1
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indexer/index.d.ts +1 -1
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/mercury.d.ts +8 -12
- package/dist/indexer/mercury.d.ts.map +1 -1
- package/dist/indexer/mercury.js +110 -37
- package/dist/indexer/mercury.js.map +1 -1
- package/dist/indexer/types.d.ts +41 -5
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/kit/birth-verification.d.ts +45 -0
- package/dist/kit/birth-verification.d.ts.map +1 -0
- package/dist/kit/birth-verification.js +127 -0
- package/dist/kit/birth-verification.js.map +1 -0
- package/dist/kit/deploy-ops.d.ts +2 -2
- package/dist/kit/deploy-ops.d.ts.map +1 -1
- package/dist/kit/deploy-ops.js +2 -2
- package/dist/kit/deploy-ops.js.map +1 -1
- package/dist/kit/wallet-ops.d.ts +14 -2
- package/dist/kit/wallet-ops.d.ts.map +1 -1
- package/dist/kit/wallet-ops.js +50 -3
- package/dist/kit/wallet-ops.js.map +1 -1
- package/dist/kit/webauthn-ops.d.ts +3 -1
- package/dist/kit/webauthn-ops.d.ts.map +1 -1
- package/dist/kit/webauthn-ops.js +8 -2
- package/dist/kit/webauthn-ops.js.map +1 -1
- package/dist/kit/webauthn-verify.d.ts +166 -0
- package/dist/kit/webauthn-verify.d.ts.map +1 -0
- package/dist/kit/webauthn-verify.js +328 -0
- package/dist/kit/webauthn-verify.js.map +1 -0
- package/dist/kit.d.ts +63 -41
- package/dist/kit.d.ts.map +1 -1
- package/dist/kit.js +339 -115
- package/dist/kit.js.map +1 -1
- package/dist/managers/credential-manager.d.ts +2 -2
- package/dist/managers/credential-manager.d.ts.map +1 -1
- package/dist/managers/credential-manager.js +3 -3
- package/dist/managers/credential-manager.js.map +1 -1
- package/dist/managers/signer-manager.d.ts +10 -4
- package/dist/managers/signer-manager.d.ts.map +1 -1
- package/dist/managers/signer-manager.js +11 -5
- package/dist/managers/signer-manager.js.map +1 -1
- package/dist/managers/submission-manager.d.ts +4 -1
- package/dist/managers/submission-manager.d.ts.map +1 -1
- package/dist/managers/submission-manager.js +11 -3
- package/dist/managers/submission-manager.js.map +1 -1
- package/dist/server.d.ts +7 -5
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -5
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +10 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +4 -8
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -8
- package/dist/utils.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/kit.js
CHANGED
|
@@ -6,25 +6,35 @@
|
|
|
6
6
|
* pipeline, WebAuthn ceremonies, deploy path, and signer writes now live in
|
|
7
7
|
* dependency-injected managers ({@link CredentialManager}, {@link SignerManager},
|
|
8
8
|
* {@link SubmissionManager}) wired here with late-bound closures. All Protocol-27
|
|
9
|
-
* probe shims
|
|
10
|
-
*
|
|
9
|
+
* probe shims and dead commented experiments are gone. The kit targets
|
|
10
|
+
* stellar-sdk >= 16 and the current wallet.
|
|
11
11
|
*
|
|
12
12
|
* @packageDocumentation
|
|
13
13
|
*/
|
|
14
|
-
import { Keypair, xdr } from "@stellar/stellar-sdk";
|
|
15
|
-
import { Server } from "@stellar/stellar-sdk/rpc";
|
|
14
|
+
import { Horizon, Keypair, Networks, xdr } from "@stellar/stellar-sdk";
|
|
15
|
+
import { Api, Server } from "@stellar/stellar-sdk/rpc";
|
|
16
16
|
import { startAuthentication, startRegistration, } from "@simplewebauthn/browser";
|
|
17
|
-
import { Client as PasskeyClient } from "passkey-kit-sdk";
|
|
17
|
+
import { Client as PasskeyClient, } from "passkey-kit-sdk";
|
|
18
18
|
import base64url from "./base64url.js";
|
|
19
|
-
import { SignerKey, } from "./types.js";
|
|
20
|
-
import { ConfigurationError, PasskeyKitError, PasskeyKitErrorCode, WalletNotConnectedError, WalletOwnershipError, } from "./errors.js";
|
|
19
|
+
import { SignerKey, SignerStore, } from "./types.js";
|
|
20
|
+
import { ConfigurationError, PasskeyKitError, PasskeyKitErrorCode, WalletNotConnectedError, WalletOwnershipError, WalletAmbiguousError, } from "./errors.js";
|
|
21
21
|
import { PasskeyEventEmitter } from "./events.js";
|
|
22
22
|
import { isDefaultDeployer } from "./utils.js";
|
|
23
23
|
import { DEFAULT_TIMEOUT_SECONDS } from "./constants.js";
|
|
24
|
+
import { PasskeySigner } from "./signers.js";
|
|
24
25
|
import { calculateExpiration } from "./kit/tx-ops.js";
|
|
25
26
|
import { CredentialManager, SignerManager, SubmissionManager, } from "./managers/index.js";
|
|
26
27
|
import { resolveDeployer } from "./kit/deploy-ops.js";
|
|
27
|
-
import {
|
|
28
|
+
import { buildSecp256r1Signer, } from "./kit/wallet-ops.js";
|
|
29
|
+
import { verifyWalletBirth, } from "./kit/birth-verification.js";
|
|
30
|
+
import { bindingChallenge, verifyBindingRecord, verifyFreshAssertion, verifyStoredProof, } from "./kit/webauthn-verify.js";
|
|
31
|
+
/** Extract the generated contract spec from a wallet client. */
|
|
32
|
+
function specOf(wallet) {
|
|
33
|
+
return wallet.spec;
|
|
34
|
+
}
|
|
35
|
+
function bytesEqual(a, b) {
|
|
36
|
+
return Buffer.from(a).equals(Buffer.from(b));
|
|
37
|
+
}
|
|
28
38
|
export class PasskeyKit {
|
|
29
39
|
rpc;
|
|
30
40
|
rpcUrl;
|
|
@@ -32,11 +42,17 @@ export class PasskeyKit {
|
|
|
32
42
|
walletWasmHash;
|
|
33
43
|
/** Accepted code identities, lowercase hex. Never empty. */
|
|
34
44
|
acceptedWasmHashes;
|
|
45
|
+
/** Accepted immutable birth code identities, lowercase hex. Never empty. */
|
|
46
|
+
acceptedBirthWasmHashes;
|
|
47
|
+
/** Full-history source for immutable wallet-birth verification. */
|
|
48
|
+
history;
|
|
35
49
|
rpId;
|
|
36
50
|
/** Lifecycle event emitter (walletCreated, walletConnected, …). */
|
|
37
51
|
events = new PasskeyEventEmitter();
|
|
38
52
|
timeoutInSeconds;
|
|
39
53
|
webAuthn;
|
|
54
|
+
allowedOrigins;
|
|
55
|
+
requireUserVerification;
|
|
40
56
|
credentialManager;
|
|
41
57
|
signerManager;
|
|
42
58
|
submissionManager;
|
|
@@ -63,7 +79,22 @@ export class PasskeyKit {
|
|
|
63
79
|
this.acceptedWasmHashes = (config.acceptedWasmHashes?.length
|
|
64
80
|
? config.acceptedWasmHashes
|
|
65
81
|
: [config.walletWasmHash]).map((h) => h.toLowerCase());
|
|
66
|
-
this.
|
|
82
|
+
this.acceptedBirthWasmHashes = (config.acceptedBirthWasmHashes?.length
|
|
83
|
+
? config.acceptedBirthWasmHashes
|
|
84
|
+
: [config.walletWasmHash]).map((h) => h.toLowerCase());
|
|
85
|
+
const horizonUrl = config.horizonUrl ??
|
|
86
|
+
(config.networkPassphrase === Networks.PUBLIC
|
|
87
|
+
? "https://horizon.stellar.org"
|
|
88
|
+
: config.networkPassphrase === Networks.TESTNET
|
|
89
|
+
? "https://horizon-testnet.stellar.org"
|
|
90
|
+
: undefined);
|
|
91
|
+
this.history = horizonUrl ? new Horizon.Server(horizonUrl) : undefined;
|
|
92
|
+
const browserLocation = typeof globalThis.location === "object" ? globalThis.location : undefined;
|
|
93
|
+
this.rpId = config.rpId ?? browserLocation?.hostname;
|
|
94
|
+
this.allowedOrigins =
|
|
95
|
+
config.allowedOrigins ??
|
|
96
|
+
(browserLocation?.origin ? [browserLocation.origin] : undefined);
|
|
97
|
+
this.requireUserVerification = config.requireUserVerification ?? false;
|
|
67
98
|
this.timeoutInSeconds = config.timeoutInSeconds ?? DEFAULT_TIMEOUT_SECONDS;
|
|
68
99
|
this.webAuthn =
|
|
69
100
|
config.WebAuthn ?? { startRegistration, startAuthentication };
|
|
@@ -126,130 +157,230 @@ export class PasskeyKit {
|
|
|
126
157
|
return this.credentialManager.createKey(appName, userName, options?.authenticatorSelection);
|
|
127
158
|
}
|
|
128
159
|
/**
|
|
129
|
-
* Register a passkey and
|
|
130
|
-
* first signer.
|
|
131
|
-
* `
|
|
160
|
+
* Register a passkey and build a smart-wallet deployment initialized with it
|
|
161
|
+
* as the first signer. The kit remains disconnected until the caller confirms
|
|
162
|
+
* submission and calls `connectWallet`.
|
|
132
163
|
*/
|
|
133
164
|
async createWallet(appName, userName, options) {
|
|
134
165
|
const created = await this.createKey(appName, userName, options);
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
this.keyId = created.keyId;
|
|
166
|
+
const contractId = this.submissionManager.deriveWalletAddress(created.keyIdBuffer);
|
|
167
|
+
const signer = buildSecp256r1Signer(created.keyIdBuffer, created.publicKey, undefined, SignerStore.Persistent);
|
|
168
|
+
const proof = await this.createBindingProof(contractId, signer, "Genesis");
|
|
169
|
+
const deployTx = await this.submissionManager.buildDeployTransaction(created.keyIdBuffer, created.publicKey, proof);
|
|
170
|
+
if (deployTx.result.options.contractId !== contractId) {
|
|
171
|
+
throw new WalletOwnershipError("Wallet deployment returned an unexpected address", { expected: contractId, actual: deployTx.result.options.contractId });
|
|
172
|
+
}
|
|
143
173
|
const signedTx = await this.submissionManager.signDeploy(deployTx);
|
|
144
|
-
await this.credentialManager.rememberPasskey({
|
|
145
|
-
keyId: created.keyId,
|
|
146
|
-
publicKey: created.publicKey,
|
|
147
|
-
contractId,
|
|
148
|
-
createdAt: Date.now(),
|
|
149
|
-
});
|
|
150
|
-
this.events.emit("walletCreated", { contractId, keyId: created.keyId });
|
|
151
174
|
return {
|
|
152
175
|
rawResponse: created.rawResponse,
|
|
153
176
|
keyId: created.keyIdBuffer,
|
|
154
177
|
keyIdBase64: created.keyId,
|
|
178
|
+
publicKey: created.publicKey,
|
|
155
179
|
contractId,
|
|
156
180
|
signedTx,
|
|
157
181
|
};
|
|
158
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Verify a successful wallet deployment and persist its immutable birth data.
|
|
185
|
+
* Call this only after the relayer returns a successful transaction hash.
|
|
186
|
+
*/
|
|
187
|
+
async confirmWalletCreation(created, creationTransactionHash) {
|
|
188
|
+
const txHash = creationTransactionHash.toLowerCase();
|
|
189
|
+
if (!/^[0-9a-f]{64}$/.test(txHash)) {
|
|
190
|
+
throw new WalletOwnershipError("The wallet creation transaction hash is malformed", { contractId: created.contractId });
|
|
191
|
+
}
|
|
192
|
+
const response = await this.rpc.getTransaction(txHash);
|
|
193
|
+
let creationLedger;
|
|
194
|
+
if (response.status === Api.GetTransactionStatus.SUCCESS) {
|
|
195
|
+
creationLedger = response.ledger;
|
|
196
|
+
}
|
|
197
|
+
else if (response.status === Api.GetTransactionStatus.NOT_FOUND && this.history) {
|
|
198
|
+
const historical = await this.history
|
|
199
|
+
.transactions()
|
|
200
|
+
.transaction(txHash)
|
|
201
|
+
.call();
|
|
202
|
+
if (historical.successful)
|
|
203
|
+
creationLedger = historical.ledger_attr;
|
|
204
|
+
}
|
|
205
|
+
if (creationLedger === undefined) {
|
|
206
|
+
throw new WalletOwnershipError("The wallet creation transaction is not available as a successful history transaction", { contractId: created.contractId, creationTransactionHash: txHash });
|
|
207
|
+
}
|
|
208
|
+
const candidate = {
|
|
209
|
+
contractId: created.contractId,
|
|
210
|
+
birthWasmHash: this.walletWasmHash,
|
|
211
|
+
creationTransactionHash: txHash,
|
|
212
|
+
creationLedger,
|
|
213
|
+
};
|
|
214
|
+
const verified = await verifyWalletBirth({
|
|
215
|
+
rpc: this.rpc,
|
|
216
|
+
history: this.history,
|
|
217
|
+
networkPassphrase: this.networkPassphrase,
|
|
218
|
+
acceptedBirthWasmHashes: this.acceptedBirthWasmHashes,
|
|
219
|
+
}, candidate);
|
|
220
|
+
if (!verified.ok) {
|
|
221
|
+
throw new WalletOwnershipError(`Wallet birth verification failed: ${verified.detail}`, { contractId: created.contractId, reason: verified.reason });
|
|
222
|
+
}
|
|
223
|
+
await this.credentialManager.rememberPasskey({
|
|
224
|
+
keyId: created.keyIdBase64,
|
|
225
|
+
publicKey: created.publicKey,
|
|
226
|
+
...verified.birth,
|
|
227
|
+
createdAt: Date.now(),
|
|
228
|
+
});
|
|
229
|
+
this.events.emit("walletCreated", {
|
|
230
|
+
contractId: created.contractId,
|
|
231
|
+
keyId: created.keyIdBase64,
|
|
232
|
+
});
|
|
233
|
+
return verified.birth;
|
|
234
|
+
}
|
|
159
235
|
/**
|
|
160
236
|
* Connect an existing wallet from a passkey.
|
|
161
237
|
*
|
|
162
|
-
* Resolves
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
* Derivation is deliberately last: it is only correct for a wallet's first
|
|
167
|
-
* credential and is the one path a squatted contract can hijack.
|
|
238
|
+
* Resolves wallet candidates from verified local storage or one complete
|
|
239
|
+
* indexer response. Every candidate must prove its immutable birth, current
|
|
240
|
+
* code, signer binding, and fresh passkey possession. The method connects
|
|
241
|
+
* only when one candidate passes every check.
|
|
168
242
|
*
|
|
169
243
|
* @throws {WalletOwnershipError} If the keyId is not a signer on the wallet.
|
|
170
244
|
*/
|
|
171
245
|
async connectWallet(options) {
|
|
172
246
|
let rawResponse;
|
|
247
|
+
let authenticationChallenge;
|
|
173
248
|
let keyId = options?.keyId;
|
|
174
249
|
if (!keyId) {
|
|
175
|
-
const auth = await this.credentialManager.authenticate();
|
|
250
|
+
const auth = await this.credentialManager.authenticate(keyId);
|
|
176
251
|
keyId = auth.keyId;
|
|
177
252
|
rawResponse = auth.rawResponse;
|
|
253
|
+
authenticationChallenge = auth.challenge;
|
|
178
254
|
}
|
|
179
255
|
const keyIdBase64 = keyId instanceof Uint8Array ? base64url(Buffer.from(keyId)) : keyId;
|
|
180
256
|
const keyIdBuffer = keyId instanceof Uint8Array ? Buffer.from(keyId) : base64url.toBuffer(keyId);
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
// Whether the address came from trusted local state. An indexer row or a
|
|
192
|
-
// derived address is a CLAIM by an untrusted party: any contract can emit
|
|
193
|
-
// the signer events an indexer keys on, and any contract can write the
|
|
194
|
-
// signer ledger entry we read back. Both are checked against accepted code
|
|
195
|
-
// identity below; trusted state is not, so an upgraded wallet still opens.
|
|
196
|
-
const fromTrustedState = contractId !== undefined;
|
|
197
|
-
if (!contractId && options?.getContractId) {
|
|
198
|
-
contractId = await options.getContractId(keyIdBase64);
|
|
199
|
-
}
|
|
200
|
-
if (!contractId) {
|
|
201
|
-
// Transport errors (429/5xx/timeout) propagate — only an authoritative
|
|
202
|
-
// not-found leaves the derived address unresolved.
|
|
203
|
-
const derived = this.submissionManager.deriveWalletAddress(keyIdBuffer);
|
|
204
|
-
if (await contractInstanceExists(this.rpc, derived)) {
|
|
205
|
-
contractId = derived;
|
|
257
|
+
const storedPasskey = await this.credentialManager.getPasskey(keyIdBase64);
|
|
258
|
+
const storedCandidate = storedPasskey?.contractId &&
|
|
259
|
+
storedPasskey.birthWasmHash &&
|
|
260
|
+
storedPasskey.creationTransactionHash &&
|
|
261
|
+
Number.isSafeInteger(storedPasskey.creationLedger)
|
|
262
|
+
? {
|
|
263
|
+
contractId: storedPasskey.contractId,
|
|
264
|
+
birthWasmHash: storedPasskey.birthWasmHash,
|
|
265
|
+
creationTransactionHash: storedPasskey.creationTransactionHash,
|
|
266
|
+
creationLedger: storedPasskey.creationLedger,
|
|
206
267
|
}
|
|
268
|
+
: undefined;
|
|
269
|
+
let candidates = storedCandidate
|
|
270
|
+
? [storedCandidate]
|
|
271
|
+
: [];
|
|
272
|
+
if (!storedCandidate && options?.getWalletCandidates) {
|
|
273
|
+
const lookupFloor = (await this.rpc.getLatestLedger()).sequence;
|
|
274
|
+
const lookup = await options.getWalletCandidates(keyIdBase64);
|
|
275
|
+
if (!lookup.complete ||
|
|
276
|
+
lookup.schema !== 2 ||
|
|
277
|
+
lookup.indexedThroughLedger < lookupFloor) {
|
|
278
|
+
throw new WalletOwnershipError("The wallet lookup is incomplete or stale and cannot prove unique ownership", {
|
|
279
|
+
keyId: keyIdBase64,
|
|
280
|
+
indexedThroughLedger: lookup.indexedThroughLedger,
|
|
281
|
+
requiredLedger: lookupFloor,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
candidates = lookup.candidates;
|
|
207
285
|
}
|
|
208
|
-
if (
|
|
286
|
+
if (candidates.length === 0) {
|
|
209
287
|
throw new PasskeyKitError("Could not resolve a wallet for the given passkey", PasskeyKitErrorCode.WALLET_NOT_FOUND, { context: { keyId: keyIdBase64 } });
|
|
210
288
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
//
|
|
221
|
-
|
|
289
|
+
if (!rawResponse || !authenticationChallenge) {
|
|
290
|
+
const auth = await this.credentialManager.authenticate(keyIdBase64);
|
|
291
|
+
if (auth.keyId !== keyIdBase64) {
|
|
292
|
+
throw new WalletOwnershipError("The passkey returned a different credential during ownership proof", { expected: keyIdBase64, actual: auth.keyId });
|
|
293
|
+
}
|
|
294
|
+
rawResponse = auth.rawResponse;
|
|
295
|
+
authenticationChallenge = auth.challenge;
|
|
296
|
+
}
|
|
297
|
+
const verified = new Map();
|
|
298
|
+
// The last definitive rejection, rethrown verbatim when nothing verifies so
|
|
299
|
+
// its context (e.g. the rejected wasm hash) is not replaced by a summary.
|
|
300
|
+
let lastMismatch;
|
|
301
|
+
for (const candidate of candidates) {
|
|
302
|
+
const wallet = new PasskeyClient({
|
|
303
|
+
contractId: candidate.contractId,
|
|
304
|
+
rpcUrl: this.rpcUrl,
|
|
305
|
+
networkPassphrase: this.networkPassphrase,
|
|
306
|
+
});
|
|
307
|
+
this.wallet = wallet;
|
|
308
|
+
this.keyId = keyIdBase64;
|
|
222
309
|
try {
|
|
223
|
-
await
|
|
310
|
+
const birth = await verifyWalletBirth({
|
|
311
|
+
rpc: this.rpc,
|
|
312
|
+
history: this.history,
|
|
313
|
+
networkPassphrase: this.networkPassphrase,
|
|
314
|
+
acceptedBirthWasmHashes: this.acceptedBirthWasmHashes,
|
|
315
|
+
}, candidate);
|
|
316
|
+
if (!birth.ok) {
|
|
317
|
+
lastMismatch = new WalletOwnershipError(`Wallet birth verification failed: ${birth.detail}`, { contractId: candidate.contractId, reason: birth.reason });
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
await this.assertWalletWasmHash(candidate.contractId);
|
|
321
|
+
const signerVal = await this.signerManager.getSigner(SignerKey.Secp256r1(keyIdBase64));
|
|
322
|
+
if (!signerVal || signerVal.tag !== "Secp256r1") {
|
|
323
|
+
lastMismatch = new WalletOwnershipError("The passkey is not a live signer on the candidate wallet", { contractId: candidate.contractId, keyId: keyIdBase64 });
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
if (!rawResponse || !authenticationChallenge) {
|
|
327
|
+
throw new Error("signer provenance requires a fresh WebAuthn assertion");
|
|
328
|
+
}
|
|
329
|
+
await this.assertSignerProvenance(wallet, candidate.contractId, keyIdBuffer, signerVal, rawResponse, authenticationChallenge);
|
|
330
|
+
verified.set(candidate.contractId, {
|
|
331
|
+
wallet,
|
|
332
|
+
birth: birth.birth,
|
|
333
|
+
signer: signerVal,
|
|
334
|
+
});
|
|
224
335
|
}
|
|
225
336
|
catch (err) {
|
|
226
337
|
this.wallet = undefined;
|
|
227
338
|
this.keyId = undefined;
|
|
339
|
+
if (err instanceof WalletOwnershipError) {
|
|
340
|
+
lastMismatch = err;
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
228
343
|
throw err;
|
|
229
344
|
}
|
|
230
345
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
catch (err) {
|
|
240
|
-
this.wallet = undefined;
|
|
241
|
-
this.keyId = undefined;
|
|
242
|
-
throw err;
|
|
346
|
+
this.wallet = undefined;
|
|
347
|
+
this.keyId = undefined;
|
|
348
|
+
if (verified.size === 0) {
|
|
349
|
+
throw (lastMismatch ??
|
|
350
|
+
new WalletOwnershipError("The passkey is not a signer on any resolved wallet", {
|
|
351
|
+
candidates: candidates.map(({ contractId }) => contractId),
|
|
352
|
+
keyId: keyIdBase64,
|
|
353
|
+
}));
|
|
243
354
|
}
|
|
244
|
-
if (
|
|
245
|
-
|
|
246
|
-
this.keyId = undefined;
|
|
247
|
-
throw new WalletOwnershipError("The passkey is not a signer on the resolved wallet", { contractId, keyId: keyIdBase64 });
|
|
355
|
+
if (verified.size > 1) {
|
|
356
|
+
throw new WalletAmbiguousError([...verified.keys()]);
|
|
248
357
|
}
|
|
358
|
+
const [[contractId, match]] = [...verified.entries()];
|
|
359
|
+
const { wallet, birth, signer } = match;
|
|
360
|
+
this.wallet = wallet;
|
|
361
|
+
this.keyId = keyIdBase64;
|
|
362
|
+
await this.credentialManager.rememberPasskey({
|
|
363
|
+
keyId: keyIdBase64,
|
|
364
|
+
publicKey: signer.values[0],
|
|
365
|
+
...birth,
|
|
366
|
+
createdAt: storedPasskey?.createdAt ?? Date.now(),
|
|
367
|
+
...(storedPasskey?.nickname ? { nickname: storedPasskey.nickname } : {}),
|
|
368
|
+
lastUsedAt: Date.now(),
|
|
369
|
+
});
|
|
249
370
|
this.events.emit("walletConnected", { contractId, keyId: keyIdBase64 });
|
|
250
371
|
return { rawResponse, keyId: keyIdBuffer, keyIdBase64, contractId };
|
|
251
372
|
}
|
|
252
373
|
async assertWalletWasmHash(contractId) {
|
|
374
|
+
const wasmHash = await this.contractWasmHash(contractId);
|
|
375
|
+
if (!this.acceptedWasmHashes.includes(wasmHash)) {
|
|
376
|
+
throw new WalletOwnershipError("Wallet code identity is not accepted", {
|
|
377
|
+
contractId,
|
|
378
|
+
accepted: this.acceptedWasmHashes,
|
|
379
|
+
actual: wasmHash,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
async contractWasmHash(contractId) {
|
|
253
384
|
const instance = await this.rpc.getContractData(contractId, xdr.ScVal.scvLedgerKeyContractInstance());
|
|
254
385
|
const executable = instance.val
|
|
255
386
|
.contractData()
|
|
@@ -261,13 +392,93 @@ export class PasskeyKit {
|
|
|
261
392
|
contractId,
|
|
262
393
|
});
|
|
263
394
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
395
|
+
return executable.wasmHash().toString("hex");
|
|
396
|
+
}
|
|
397
|
+
/** Create the address-bound proof required for a Secp256r1 signer write. */
|
|
398
|
+
async createBindingProof(contractId, signer, purpose) {
|
|
399
|
+
this.assertWebAuthnVerificationConfig();
|
|
400
|
+
if (signer.tag !== "Secp256r1") {
|
|
401
|
+
throw new TypeError("binding signer must be Secp256r1");
|
|
402
|
+
}
|
|
403
|
+
const [keyId, publicKey] = signer.values;
|
|
404
|
+
const wallet = new PasskeyClient({
|
|
405
|
+
contractId,
|
|
406
|
+
rpcUrl: this.rpcUrl,
|
|
407
|
+
networkPassphrase: this.networkPassphrase,
|
|
408
|
+
});
|
|
409
|
+
const challenge = bindingChallenge({
|
|
410
|
+
spec: specOf(wallet),
|
|
411
|
+
networkPassphrase: this.networkPassphrase,
|
|
412
|
+
contractId,
|
|
413
|
+
purpose,
|
|
414
|
+
signer,
|
|
415
|
+
});
|
|
416
|
+
const prepared = await new PasskeySigner(keyId).sign(Buffer.from(challenge), this.signerContext());
|
|
417
|
+
if (prepared.key.tag !== "Secp256r1" ||
|
|
418
|
+
prepared.value?.tag !== "Secp256r1" ||
|
|
419
|
+
!bytesEqual(prepared.key.values[0], keyId)) {
|
|
420
|
+
throw new WalletOwnershipError("The passkey returned a different credential for the binding proof", { contractId });
|
|
421
|
+
}
|
|
422
|
+
const proof = prepared.value.values[0];
|
|
423
|
+
const verified = await verifyStoredProof({
|
|
424
|
+
authenticatorData: proof.authenticator_data,
|
|
425
|
+
clientDataJSON: proof.client_data_json,
|
|
426
|
+
signature: proof.signature,
|
|
427
|
+
}, {
|
|
428
|
+
expectedChallenge: challenge,
|
|
429
|
+
rpId: this.rpId,
|
|
430
|
+
publicKey,
|
|
431
|
+
allowedOrigins: this.allowedOrigins,
|
|
432
|
+
requireUserVerification: this.requireUserVerification,
|
|
433
|
+
});
|
|
434
|
+
if (!verified.ok) {
|
|
435
|
+
throw new WalletOwnershipError("The passkey binding proof failed local verification", { contractId, reason: verified.reason, detail: verified.detail });
|
|
436
|
+
}
|
|
437
|
+
return proof;
|
|
438
|
+
}
|
|
439
|
+
/** Verify stored address consent and fresh passkey possession. */
|
|
440
|
+
async assertSignerProvenance(wallet, contractId, keyId, signerVal, freshResponse, freshChallenge) {
|
|
441
|
+
this.assertWebAuthnVerificationConfig();
|
|
442
|
+
const record = (await wallet.get_secp256r1_binding({ key_id: keyId })).result;
|
|
443
|
+
if (!record) {
|
|
444
|
+
throw new WalletOwnershipError("Wallet has no signer binding record for the passkey", { contractId, keyId: base64url(keyId) });
|
|
445
|
+
}
|
|
446
|
+
const publicKey = signerVal.values[0];
|
|
447
|
+
const binding = await verifyBindingRecord(record, { keyId, publicKey }, {
|
|
448
|
+
spec: specOf(wallet),
|
|
449
|
+
networkPassphrase: this.networkPassphrase,
|
|
450
|
+
contractId,
|
|
451
|
+
rpId: this.rpId,
|
|
452
|
+
allowedOrigins: this.allowedOrigins,
|
|
453
|
+
requireUserVerification: this.requireUserVerification,
|
|
454
|
+
});
|
|
455
|
+
if (!binding.ok) {
|
|
456
|
+
throw new WalletOwnershipError("Wallet signer binding record is invalid", { contractId, reason: binding.reason, detail: binding.detail });
|
|
457
|
+
}
|
|
458
|
+
await this.assertFreshAssertion(contractId, keyId, signerVal, freshResponse, freshChallenge);
|
|
459
|
+
}
|
|
460
|
+
/** Verify one fresh WebAuthn assertion against the live signer key. */
|
|
461
|
+
async assertFreshAssertion(contractId, keyId, signerVal, freshResponse, freshChallenge) {
|
|
462
|
+
this.assertWebAuthnVerificationConfig();
|
|
463
|
+
const publicKey = signerVal.values[0];
|
|
464
|
+
const fresh = await verifyFreshAssertion(freshResponse, {
|
|
465
|
+
expectedChallenge: freshChallenge,
|
|
466
|
+
expectedKeyId: keyId,
|
|
467
|
+
rpId: this.rpId,
|
|
468
|
+
publicKey,
|
|
469
|
+
allowedOrigins: this.allowedOrigins,
|
|
470
|
+
requireUserVerification: this.requireUserVerification,
|
|
471
|
+
});
|
|
472
|
+
if (!fresh.ok) {
|
|
473
|
+
throw new WalletOwnershipError("Fresh passkey assertion is invalid", { contractId, reason: fresh.reason, detail: fresh.detail });
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
assertWebAuthnVerificationConfig() {
|
|
477
|
+
if (!this.rpId) {
|
|
478
|
+
throw new ConfigurationError("rpId is required to verify signer provenance outside a browser", PasskeyKitErrorCode.INVALID_CONFIG);
|
|
479
|
+
}
|
|
480
|
+
if (!this.allowedOrigins?.length) {
|
|
481
|
+
throw new ConfigurationError("allowedOrigins is required to verify signer provenance outside a browser", PasskeyKitErrorCode.INVALID_CONFIG);
|
|
271
482
|
}
|
|
272
483
|
}
|
|
273
484
|
/** Disconnect the current wallet. */
|
|
@@ -290,26 +501,34 @@ export class PasskeyKit {
|
|
|
290
501
|
}
|
|
291
502
|
// -- Signer management -------------------------------------------------------
|
|
292
503
|
async addSecp256r1(keyId, publicKey, limits, store, expiration) {
|
|
293
|
-
const tx = await this.signerManager.addSecp256r1(keyId, publicKey, limits, store, expiration);
|
|
294
|
-
// Persist the keyId → wallet mapping so a later connectWallet(keyId) resolves
|
|
295
|
-
// this wallet from trusted storage instead of derivation (derive(keyId) of a
|
|
296
|
-
// secondary passkey is a squattable address). Without this record a pure-SDK
|
|
297
|
-
// consumer has nothing but derivation to fall back on for a second signer.
|
|
298
|
-
// ponytail: optimistic — written at build time, before the caller submits.
|
|
299
|
-
// If the add tx never lands the keyId is not a signer anywhere, so the F7
|
|
300
|
-
// ownership check in connectWallet rejects the stale hint rather than
|
|
301
|
-
// mis-binding. Requires a connected wallet (add_signer is wallet-authorized).
|
|
302
504
|
const contractId = this.contractId;
|
|
303
|
-
if (contractId) {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
505
|
+
if (!contractId) {
|
|
506
|
+
throw new WalletNotConnectedError("add a Secp256r1 signer");
|
|
507
|
+
}
|
|
508
|
+
const publicKeyBytes = publicKey instanceof Uint8Array
|
|
509
|
+
? publicKey
|
|
510
|
+
: base64url.toBuffer(publicKey);
|
|
511
|
+
const contractSigner = buildSecp256r1Signer(keyId, publicKeyBytes, limits, store, expiration);
|
|
512
|
+
const proof = await this.createBindingProof(contractId, contractSigner, "Add");
|
|
513
|
+
const tx = await this.signerManager.addSecp256r1(keyId, publicKey, limits, store, proof, expiration);
|
|
514
|
+
const connectedRecord = this.keyId
|
|
515
|
+
? await this.credentialManager.getPasskey(this.keyId)
|
|
516
|
+
: null;
|
|
517
|
+
if (!connectedRecord) {
|
|
518
|
+
throw new WalletOwnershipError("The connected wallet has no verified birth record", { contractId });
|
|
312
519
|
}
|
|
520
|
+
// The new signer uses the already verified immutable birth record. This
|
|
521
|
+
// optimistic association remains safe because connectWallet still requires
|
|
522
|
+
// a live signer, its ADD proof, and fresh passkey possession.
|
|
523
|
+
await this.credentialManager.rememberPasskey({
|
|
524
|
+
keyId: keyId instanceof Uint8Array ? base64url(Buffer.from(keyId)) : keyId,
|
|
525
|
+
publicKey: publicKeyBytes,
|
|
526
|
+
contractId,
|
|
527
|
+
birthWasmHash: connectedRecord.birthWasmHash,
|
|
528
|
+
creationTransactionHash: connectedRecord.creationTransactionHash,
|
|
529
|
+
creationLedger: connectedRecord.creationLedger,
|
|
530
|
+
createdAt: Date.now(),
|
|
531
|
+
});
|
|
313
532
|
return tx;
|
|
314
533
|
}
|
|
315
534
|
/**
|
|
@@ -325,8 +544,13 @@ export class PasskeyKit {
|
|
|
325
544
|
updateEd25519(publicKey, limits, store, expiration) {
|
|
326
545
|
return this.signerManager.updateEd25519(publicKey, limits, store, expiration);
|
|
327
546
|
}
|
|
328
|
-
|
|
329
|
-
|
|
547
|
+
/**
|
|
548
|
+
* Add a policy signer. Throws a `ValidationError` if the policy's `install`
|
|
549
|
+
* hook adds wallet-authorized sub-invocations to the auth entry, unless
|
|
550
|
+
* `options.allowInstallSubInvocations` is set.
|
|
551
|
+
*/
|
|
552
|
+
addPolicy(policy, limits, store, expiration, options) {
|
|
553
|
+
return this.signerManager.addPolicy(policy, limits, store, expiration, options);
|
|
330
554
|
}
|
|
331
555
|
updatePolicy(policy, limits, store, expiration) {
|
|
332
556
|
return this.signerManager.updatePolicy(policy, limits, store, expiration);
|
package/dist/kit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../src/kit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../src/kit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAGlB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EACL,MAAM,IAAI,aAAa,GAKxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,SAAS,EACT,WAAW,GAKZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAmC,MAAM,cAAc,CAAC;AAI9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,oBAAoB,GAGrB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EACL,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,gEAAgE;AAChE,SAAS,MAAM,CAAC,MAAqB;IACnC,OAAQ,MAA4C,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CAAC,CAAa,EAAE,CAAa;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAoED,MAAM,OAAO,UAAU;IACZ,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,iBAAiB,CAAS;IAC1B,cAAc,CAAS;IAChC,4DAA4D;IACnD,kBAAkB,CAAoB;IAC/C,4EAA4E;IACnE,uBAAuB,CAAoB;IACpD,mEAAmE;IAC1D,OAAO,CAAkB;IACzB,IAAI,CAAU;IAEvB,mEAAmE;IAC1D,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAE3B,gBAAgB,CAAS;IACzB,QAAQ,CAAiB;IACzB,cAAc,CAAqB;IACnC,uBAAuB,CAAU;IAEjC,iBAAiB,CAAoB;IACrC,aAAa,CAAgB;IAC7B,iBAAiB,CAAoB;IAEtD,uDAAuD;IACvD,KAAK,CAAqB;IAC1B,2CAA2C;IAC3C,MAAM,CAA4B;IAElC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,EACpB,mBAAmB,CAAC,cAAc,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC9B,MAAM,IAAI,kBAAkB,CAC1B,+BAA+B,EAC/B,mBAAmB,CAAC,cAAc,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,kBAAkB,CAC1B,4BAA4B,EAC5B,mBAAmB,CAAC,cAAc,CACnC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,0EAA0E;QAC1E,sEAAsE;QACtE,IAAI,CAAC,kBAAkB,GAAG,CACxB,MAAM,CAAC,kBAAkB,EAAE,MAAM;YAC/B,CAAC,CAAC,MAAM,CAAC,kBAAkB;YAC3B,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAC5B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,uBAAuB,GAAG,CAC7B,MAAM,CAAC,uBAAuB,EAAE,MAAM;YACpC,CAAC,CAAC,MAAM,CAAC,uBAAuB;YAChC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAC5B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9B,MAAM,UAAU,GACd,MAAM,CAAC,UAAU;YACjB,CAAC,MAAM,CAAC,iBAAiB,KAAK,QAAQ,CAAC,MAAM;gBAC3C,CAAC,CAAC,6BAA6B;gBAC/B,CAAC,CAAC,MAAM,CAAC,iBAAiB,KAAK,QAAQ,CAAC,OAAO;oBAC7C,CAAC,CAAC,qCAAqC;oBACvC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,MAAM,eAAe,GACnB,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,eAAe,EAAE,QAAQ,CAAC;QACrD,IAAI,CAAC,cAAc;YACjB,MAAM,CAAC,cAAc;gBACrB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,IAAI,KAAK,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,uBAAuB,CAAC;QAC3E,IAAI,CAAC,QAAQ;YACX,MAAM,CAAC,QAAQ,IAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAqB,CAAC;QAEpF,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,cAAmC,CAAC;QACxC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,kBAAkB,CAC1B,uDAAuD,EACvD,mBAAmB,CAAC,cAAc,CACnC,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;YAC3D,2EAA2E;YAC3E,4EAA4E;YAC5E,2EAA2E;YAC3E,wEAAwE;YACxE,wDAAwD;YACxD,cAAc,GAAG,eAAe,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC;YAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC;YACrC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM;YAC5B,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU;YACpD,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;YAC5C,mBAAmB,EAAE,GAAG,EAAE,CACxB,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAClF,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC;YAC7C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe;YACf,cAAc;YACd,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAC;IACL,CAAC;IAED,kDAAkD;IAClD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;IACzC,CAAC;IAED,yDAAyD;IACzD,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;IAClD,CAAC;IAEO,aAAa;QACnB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAChF,CAAC;IAED,8EAA8E;IAE9E,sEAAsE;IACtE,SAAS,CACP,OAAe,EACf,QAAgB,EAChB,OAAuB;QAEvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CACrC,OAAO,EACP,QAAQ,EACR,OAAO,EAAE,sBAAsB,CAChC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,QAAgB,EAChB,OAAuB;QAEvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,oBAAoB,CACjC,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,SAAS,EACjB,SAAS,EACT,WAAW,CAAC,UAAU,CACvB,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CACzC,UAAU,EACV,MAAM,EACN,SAAS,CACV,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAClE,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,SAAS,EACjB,KAAK,CACN,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACtD,MAAM,IAAI,oBAAoB,CAC5B,kDAAkD,EAClD,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEnE,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,KAAK,EAAE,OAAO,CAAC,WAAW;YAC1B,WAAW,EAAE,OAAO,CAAC,KAAK;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU;YACV,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB,CACzB,OAA2B,EAC3B,uBAA+B;QAE/B,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,oBAAoB,CAC5B,mDAAmD,EACnD,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CACnC,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,cAAkC,CAAC;QACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;YACzD,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;QACnC,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,oBAAoB,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO;iBAClC,YAAY,EAAE;iBACd,WAAW,CAAC,MAAM,CAAC;iBACnB,IAAI,EAAE,CAAC;YACV,IAAI,UAAU,CAAC,UAAU;gBAAE,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC;QACrE,CAAC;QACD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,oBAAoB,CAC5B,sFAAsF,EACtF,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,uBAAuB,EAAE,MAAM,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAoB;YACjC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,uBAAuB,EAAE,MAAM;YAC/B,cAAc;SACf,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC;YACE,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;SACtD,EACD,SAAS,CACV,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,oBAAoB,CAC5B,qCAAqC,QAAQ,CAAC,MAAM,EAAE,EACtD,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,WAAW;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,QAAQ,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,WAAW;SAC3B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,aAAa,CAAC,OAAwB;QAC1C,IAAI,WAAmD,CAAC;QACxD,IAAI,uBAA2C,CAAC;QAChD,IAAI,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;QAE3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC9D,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3C,CAAC;QAED,MAAM,WAAW,GACf,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,MAAM,WAAW,GACf,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/E,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3E,MAAM,eAAe,GACnB,aAAa,EAAE,UAAU;YACzB,aAAa,CAAC,aAAa;YAC3B,aAAa,CAAC,uBAAuB;YACrC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC;YAChD,CAAC,CAAC;gBACE,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,uBAAuB,EAAE,aAAa,CAAC,uBAAuB;gBAC9D,cAAc,EAAE,aAAa,CAAC,cAAc;aAC7C;YACH,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,UAAU,GAA+B,eAAe;YAC1D,CAAC,CAAC,CAAC,eAAe,CAAC;YACnB,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,eAAe,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAC9D,IACE,CAAC,MAAM,CAAC,QAAQ;gBAChB,MAAM,CAAC,MAAM,KAAK,CAAC;gBACnB,MAAM,CAAC,oBAAoB,GAAG,WAAW,EACzC,CAAC;gBACD,MAAM,IAAI,oBAAoB,CAC5B,4EAA4E,EAC5E;oBACE,KAAK,EAAE,WAAW;oBAClB,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;oBACjD,cAAc,EAAE,WAAW;iBAC5B,CACF,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACjC,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,eAAe,CACvB,kDAAkD,EAClD,mBAAmB,CAAC,gBAAgB,EACpC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CACpC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,IAAI,oBAAoB,CAC5B,oEAAoE,EACpE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAC9C,CAAC;YACJ,CAAC;YACD,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAOrB,CAAC;QACJ,4EAA4E;QAC5E,0EAA0E;QAC1E,IAAI,YAA8C,CAAC;QAEnD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;gBAC/B,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;aAC1C,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YAEzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,iBAAiB,CACnC;oBACE,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;oBACzC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;iBACtD,EACD,SAAS,CACV,CAAC;gBACF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;oBACd,YAAY,GAAG,IAAI,oBAAoB,CACrC,qCAAqC,KAAK,CAAC,MAAM,EAAE,EACnD,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAC3D,CAAC;oBACF,SAAS;gBACX,CAAC;gBAED,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAClD,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CACjC,CAAC;gBACF,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;oBAChD,YAAY,GAAG,IAAI,oBAAoB,CACrC,0DAA0D,EAC1D,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CACzD,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,WAAW,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAC7C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBAC3E,CAAC;gBACD,MAAM,IAAI,CAAC,sBAAsB,CAC/B,MAAM,EACN,SAAS,CAAC,UAAU,EACpB,WAAW,EACX,SAAS,EACT,WAAW,EACX,uBAAuB,CACxB,CAAC;gBACF,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE;oBACjC,MAAM;oBACN,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACvB,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;oBACxC,YAAY,GAAG,GAAG,CAAC;oBACnB,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QAEvB,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CACJ,YAAY;gBACZ,IAAI,oBAAoB,CACtB,oDAAoD,EACpD;oBACE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;oBAC1D,KAAK,EAAE,WAAW;iBACnB,CACF,CACF,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,oBAAoB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAM,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QAEzB,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3B,GAAG,KAAK;YACR,SAAS,EAAE,aAAa,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YACjD,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAExE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IACtE,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,UAAkB;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,oBAAoB,CAAC,sCAAsC,EAAE;gBACrE,UAAU;gBACV,QAAQ,EAAE,IAAI,CAAC,kBAAkB;gBACjC,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAC7C,UAAU,EACV,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,CACzC,CAAC;QACF,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG;aAC5B,YAAY,EAAE;aACd,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,UAAU,EAAE,CAAC;QAChB,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC1D,MAAM,IAAI,oBAAoB,CAAC,+BAA+B,EAAE;gBAC9D,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,4EAA4E;IACpE,KAAK,CAAC,kBAAkB,CAC9B,UAAkB,EAClB,MAAsB,EACtB,OAA8B;QAE9B,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAEzC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;YAC/B,UAAU;YACV,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,gBAAgB,CAAC;YACjC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,UAAU;YACV,OAAO;YACP,MAAM;SACP,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAClD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EACtB,IAAI,CAAC,aAAa,EAAE,CACrB,CAAC;QACF,IACE,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,WAAW;YAChC,QAAQ,CAAC,KAAK,EAAE,GAAG,KAAK,WAAW;YACnC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAC1C,CAAC;YACD,MAAM,IAAI,oBAAoB,CAC5B,mEAAmE,EACnE,EAAE,UAAU,EAAE,CACf,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC;YACE,iBAAiB,EAAE,KAAK,CAAC,kBAAkB;YAC3C,cAAc,EAAE,KAAK,CAAC,gBAAgB;YACtC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,EACD;YACE,iBAAiB,EAAE,SAAS;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAK;YAChB,SAAS;YACT,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;SACtD,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,oBAAoB,CAC5B,qDAAqD,EACrD,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kEAAkE;IAC1D,KAAK,CAAC,sBAAsB,CAClC,MAAqB,EACrB,UAAkB,EAClB,KAAa,EACb,SAAmD,EACnD,aAAyC,EACzC,cAAsB;QAEtB,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAExC,MAAM,MAAM,GAAG,CACb,MAAM,MAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CACtD,CAAC,MAAM,CAAC;QACT,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oBAAoB,CAC5B,qDAAqD,EACrD,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CACvC,MAAM,EACN,EAAE,KAAK,EAAE,SAAS,EAAE,EACpB;YACE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,IAAK;YAChB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;SACtD,CACF,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,oBAAoB,CAC5B,yCAAyC,EACzC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAC/D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,oBAAoB,CAC7B,UAAU,EACV,KAAK,EACL,SAAS,EACT,aAAa,EACb,cAAc,CACf,CAAC;IACJ,CAAC;IAED,uEAAuE;IAC/D,KAAK,CAAC,oBAAoB,CAChC,UAAkB,EAClB,KAAa,EACb,SAAmD,EACnD,aAAyC,EACzC,cAAsB;QAEtB,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAExC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,aAAa,EAAE;YACtD,iBAAiB,EAAE,cAAc;YACjC,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,IAAI,CAAC,IAAK;YAChB,SAAS;YACT,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;SACtD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,IAAI,oBAAoB,CAC5B,oCAAoC,EACpC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,gCAAgC;QACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAC1B,gEAAgE,EAChE,mBAAmB,CAAC,cAAc,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,kBAAkB,CAC1B,0EAA0E,EAC1E,mBAAmB,CAAC,cAAc,CACnC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,UAAU;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,+EAA+E;IAE/E,2EAA2E;IAC3E,aAAa,CACX,KAAoC,EACpC,MAAe,EACf,OAAqB;QAErB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,2DAA2D;IAC3D,IAAI,CACF,GAA4B,EAC5B,MAAe,EACf,OAAqB;QAErB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,+EAA+E;IAE/E,KAAK,CAAC,YAAY,CAChB,KAA0B,EAC1B,SAA8B,EAC9B,MAAoB,EACpB,KAAkB,EAClB,UAAmB;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,cAAc,GAClB,SAAS,YAAY,UAAU;YAC7B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG,oBAAoB,CACzC,KAAK,EACL,cAAc,EACd,MAAM,EACN,KAAK,EACL,UAAU,CACX,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CACzC,UAAU,EACV,cAAc,EACd,KAAK,CACN,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAC9C,KAAK,EACL,SAAS,EACT,MAAM,EACN,KAAK,EACL,KAAK,EACL,UAAU,CACX,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK;YAChC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,oBAAoB,CAC5B,mDAAmD,EACnD,EAAE,UAAU,EAAE,CACf,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,2EAA2E;QAC3E,8DAA8D;QAC9D,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YAC1E,SAAS,EAAE,cAAc;YACzB,UAAU;YACV,aAAa,EAAE,eAAe,CAAC,aAAa;YAC5C,uBAAuB,EAAE,eAAe,CAAC,uBAAuB;YAChE,cAAc,EAAE,eAAe,CAAC,cAAc;YAC9C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,eAAe,CACb,KAA0B,EAC1B,MAAoB,EACpB,KAAkB,EAClB,UAAmB;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;IACD,UAAU,CACR,SAAiB,EACjB,MAAoB,EACpB,KAAkB,EAClB,UAAmB;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IACD,aAAa,CACX,SAAiB,EACjB,MAAoB,EACpB,KAAkB,EAClB,UAAmB;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC;IACD;;;;OAIG;IACH,SAAS,CACP,MAAc,EACd,MAAoB,EACpB,KAAkB,EAClB,UAAmB,EACnB,OAA+B;QAE/B,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IACD,YAAY,CACV,MAAc,EACd,MAAoB,EACpB,KAAkB,EAClB,UAAmB;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,CAAC,SAAoB;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,8EAA8E;IAC9E,OAAO,CAAC,WAAgC;QACtC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,yEAAyE;IACzE,SAAS,CAAC,SAAoB;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,4CAA4C;IAC5C,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,uBAAuB,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
|