claim169 0.1.0-alpha.2 → 0.2.0-alpha

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 CHANGED
@@ -60,7 +60,8 @@ const result = decode(qrText, { allowUnverified: true });
60
60
  const options: DecodeOptions = {
61
61
  maxDecompressedBytes: 32768, // 32KB limit
62
62
  skipBiometrics: true, // Skip biometric parsing
63
- validateTimestamps: false, // Disabled by default in WASM
63
+ // Timestamp validation is enabled by default (host-side). Set to false to disable:
64
+ validateTimestamps: false,
64
65
  allowUnverified: true, // Explicit opt-out (testing only)
65
66
  };
66
67
 
@@ -94,7 +95,6 @@ const result = new Decoder(qrText)
94
95
  const result = new Decoder(qrText)
95
96
  .verifyWithEd25519(publicKey)
96
97
  .skipBiometrics() // Skip biometric data
97
- .withTimestampValidation() // Enable timestamp validation
98
98
  .clockSkewTolerance(60) // 60 seconds tolerance
99
99
  .maxDecompressedBytes(32768) // 32KB max size
100
100
  .decode();
@@ -106,11 +106,14 @@ const result = new Decoder(qrText)
106
106
  |--------|-------------|
107
107
  | `verifyWithEd25519(publicKey)` | Verify with Ed25519 (32 bytes) |
108
108
  | `verifyWithEcdsaP256(publicKey)` | Verify with ECDSA P-256 (33 or 65 bytes) |
109
+ | `verifyWith(callback)` | Verify with custom callback (HSM, cloud KMS, etc.) |
109
110
  | `decryptWithAes256(key)` | Decrypt with AES-256-GCM (32 bytes) |
110
111
  | `decryptWithAes128(key)` | Decrypt with AES-128-GCM (16 bytes) |
112
+ | `decryptWith(callback)` | Decrypt with custom callback (HSM, cloud KMS, etc.) |
111
113
  | `allowUnverified()` | Skip verification (testing only) |
112
114
  | `skipBiometrics()` | Skip biometric data parsing |
113
- | `withTimestampValidation()` | Enable exp/nbf validation |
115
+ | `withTimestampValidation()` | Enable timestamp validation (host-side) |
116
+ | `withoutTimestampValidation()` | Disable timestamp validation |
114
117
  | `clockSkewTolerance(seconds)` | Set clock skew tolerance |
115
118
  | `maxDecompressedBytes(bytes)` | Set max decompressed size |
116
119
  | `decode()` | Execute the decode operation |
@@ -162,8 +165,10 @@ const qrData = new Encoder(claim169, cwtMeta)
162
165
  |--------|-------------|
163
166
  | `signWithEd25519(privateKey)` | Sign with Ed25519 |
164
167
  | `signWithEcdsaP256(privateKey)` | Sign with ECDSA P-256 |
168
+ | `signWith(callback, algorithm, keyId?)` | Sign with custom callback (HSM, cloud KMS, etc.) |
165
169
  | `encryptWithAes256(key)` | Encrypt with AES-256-GCM |
166
170
  | `encryptWithAes128(key)` | Encrypt with AES-128-GCM |
171
+ | `encryptWith(callback, algorithm)` | Encrypt with custom callback (HSM, cloud KMS, etc.) |
167
172
  | `allowUnsigned()` | Allow unsigned (testing only) |
168
173
  | `skipBiometrics()` | Skip biometric fields |
169
174
  | `encode()` | Produce the QR string |
@@ -178,6 +183,130 @@ import { generateNonce } from 'claim169';
178
183
  const nonce = generateNonce(); // Returns 12-byte Uint8Array
179
184
  ```
180
185
 
186
+ ## Custom Crypto Providers
187
+
188
+ For integrating with external key management systems like HSMs, cloud KMS (AWS KMS, Google Cloud KMS, Azure Key Vault), smart cards, TPMs, or remote signing services, use the custom callback methods.
189
+
190
+ ### Custom Signer
191
+
192
+ ```typescript
193
+ import { Encoder, SignerCallback, Claim169Input, CwtMetaInput } from 'claim169';
194
+
195
+ // Example: Sign with a cloud KMS
196
+ const mySigner: SignerCallback = (algorithm, keyId, data) => {
197
+ // Call your crypto provider
198
+ // algorithm: "EdDSA" or "ES256"
199
+ // keyId: optional key identifier (Uint8Array or null)
200
+ // data: the COSE Sig_structure to sign (Uint8Array)
201
+ const signature = myKms.sign({ keyId, data, algorithm });
202
+ return signature; // Uint8Array: 64 bytes for EdDSA, 64 bytes for ES256
203
+ };
204
+
205
+ const claim: Claim169Input = { id: "123", fullName: "John Doe" };
206
+ const meta: CwtMetaInput = { issuer: "https://issuer.example" };
207
+
208
+ const qrData = new Encoder(claim, meta)
209
+ .signWith(mySigner, "EdDSA", new Uint8Array([1, 2, 3])) // optional keyId
210
+ .encode();
211
+ ```
212
+
213
+ ### Custom Verifier
214
+
215
+ ```typescript
216
+ import { Decoder, VerifierCallback } from 'claim169';
217
+
218
+ // Example: Verify with an HSM
219
+ const myVerifier: VerifierCallback = (algorithm, keyId, data, signature) => {
220
+ // Call your crypto provider
221
+ // Throw an error if verification fails
222
+ const result = myHsm.verify({ keyId, data, signature, algorithm });
223
+ if (!result.valid) {
224
+ throw new Error("Signature verification failed");
225
+ }
226
+ };
227
+
228
+ const result = new Decoder(qrText)
229
+ .verifyWith(myVerifier)
230
+ .decode();
231
+ ```
232
+
233
+ ### Custom Encryptor
234
+
235
+ ```typescript
236
+ import { Encoder, EncryptorCallback } from 'claim169';
237
+
238
+ // Example: Encrypt with cloud KMS
239
+ const myEncryptor: EncryptorCallback = (algorithm, keyId, nonce, aad, plaintext) => {
240
+ // algorithm: "A256GCM" or "A128GCM"
241
+ // nonce: 12-byte IV
242
+ // aad: additional authenticated data
243
+ // plaintext: data to encrypt
244
+ const ciphertext = myKms.encrypt({ keyId, nonce, aad, plaintext });
245
+ return ciphertext; // Uint8Array: plaintext + 16-byte auth tag
246
+ };
247
+
248
+ const qrData = new Encoder(claim, meta)
249
+ .signWithEd25519(signingKey)
250
+ .encryptWith(myEncryptor, "A256GCM")
251
+ .encode();
252
+ ```
253
+
254
+ ### Custom Decryptor
255
+
256
+ ```typescript
257
+ import { Decoder, DecryptorCallback } from 'claim169';
258
+
259
+ // Example: Decrypt with cloud KMS
260
+ const myDecryptor: DecryptorCallback = (algorithm, keyId, nonce, aad, ciphertext) => {
261
+ // algorithm: "A256GCM" or "A128GCM"
262
+ // ciphertext includes the auth tag
263
+ const plaintext = myKms.decrypt({ keyId, nonce, aad, ciphertext });
264
+ return plaintext; // Uint8Array
265
+ };
266
+
267
+ const result = new Decoder(qrText)
268
+ .decryptWith(myDecryptor)
269
+ .verifyWithEd25519(publicKey)
270
+ .decode();
271
+ ```
272
+
273
+ ### Callback Type Definitions
274
+
275
+ ```typescript
276
+ // Signer: (algorithm, keyId, data) => signature
277
+ type SignerCallback = (
278
+ algorithm: string,
279
+ keyId: Uint8Array | null,
280
+ data: Uint8Array
281
+ ) => Uint8Array;
282
+
283
+ // Verifier: (algorithm, keyId, data, signature) => void (throw on failure)
284
+ type VerifierCallback = (
285
+ algorithm: string,
286
+ keyId: Uint8Array | null,
287
+ data: Uint8Array,
288
+ signature: Uint8Array
289
+ ) => void;
290
+
291
+ // Encryptor: (algorithm, keyId, nonce, aad, plaintext) => ciphertext
292
+ type EncryptorCallback = (
293
+ algorithm: string,
294
+ keyId: Uint8Array | null,
295
+ nonce: Uint8Array,
296
+ aad: Uint8Array,
297
+ plaintext: Uint8Array
298
+ ) => Uint8Array;
299
+
300
+ // Decryptor: (algorithm, keyId, nonce, aad, ciphertext) => plaintext
301
+ type DecryptorCallback = (
302
+ algorithm: string,
303
+ keyId: Uint8Array | null,
304
+ nonce: Uint8Array,
305
+ aad: Uint8Array,
306
+ ciphertext: Uint8Array
307
+ ) => Uint8Array;
308
+ ```
309
+
181
310
  ## Data Model
182
311
 
183
312
  ### DecodeResult
@@ -280,12 +409,12 @@ Error messages indicate the specific failure:
280
409
 
281
410
  ### Timestamp Validation
282
411
 
283
- Timestamp validation is disabled by default because WebAssembly does not have reliable access to system time. Enable it explicitly if your environment provides accurate time:
412
+ Timestamp validation is performed in the host (JavaScript) and is enabled by default. Disable it explicitly if you intentionally want to skip time checks:
284
413
 
285
414
  ```typescript
286
415
  const result = new Decoder(qrText)
287
416
  .verifyWithEd25519(publicKey)
288
- .withTimestampValidation()
417
+ .withoutTimestampValidation()
289
418
  .clockSkewTolerance(60) // Allow 60 seconds clock drift
290
419
  .decode();
291
420
  ```
package/dist/index.d.ts CHANGED
@@ -78,14 +78,14 @@
78
78
  *
79
79
  * ## Notes
80
80
  *
81
- * - **Timestamp validation**: Disabled by default because WASM doesn't have
82
- * reliable access to system time. Enable with `.withTimestampValidation()`.
81
+ * - **Timestamp validation**: Enabled by default in JS (host-side). Disable with
82
+ * `.withoutTimestampValidation()` if you intentionally want to skip time checks.
83
83
  *
84
84
  * @module claim169
85
85
  */
86
- export type { Biometric, Claim169, Claim169Input, CwtMeta, CwtMetaInput, DecodeResult, IDecoder, IEncoder, VerificationStatus, } from "./types.js";
86
+ export type { Algorithm, AlgorithmName, Biometric, CertificateHash, Claim169, Claim169Input, CwtMeta, CwtMetaInput, DecodeResult, DecryptorCallback, EncryptorCallback, IDecoder, IEncoder, SignerCallback, VerificationStatus, VerifierCallback, X509Headers, } from "./types.js";
87
87
  export { Claim169Error } from "./types.js";
88
- import type { Claim169Input, CwtMetaInput, DecodeResult, IDecoder, IEncoder } from "./types.js";
88
+ import type { Claim169Input, CwtMetaInput, DecodeResult, DecryptorCallback, EncryptorCallback, IDecoder, IEncoder, SignerCallback, VerifierCallback } from "./types.js";
89
89
  /**
90
90
  * Get the library version
91
91
  */
@@ -135,6 +135,8 @@ export declare function bytesToHex(bytes: Uint8Array): string;
135
135
  */
136
136
  export declare class Decoder implements IDecoder {
137
137
  private wasmDecoder;
138
+ private validateTimestamps;
139
+ private clockSkewToleranceSeconds;
138
140
  /**
139
141
  * Create a new Decoder instance.
140
142
  * @param qrText - The QR code text content (Base45 encoded)
@@ -154,9 +156,26 @@ export declare class Decoder implements IDecoder {
154
156
  * @throws {Claim169Error} If the public key is invalid
155
157
  */
156
158
  verifyWithEcdsaP256(publicKey: Uint8Array): Decoder;
159
+ /**
160
+ * Verify signature with Ed25519 public key in PEM format.
161
+ * Supports SPKI format with "BEGIN PUBLIC KEY" headers.
162
+ * @param pem - PEM-encoded Ed25519 public key
163
+ * @returns The decoder instance for chaining
164
+ * @throws {Claim169Error} If the PEM is invalid
165
+ */
166
+ verifyWithEd25519Pem(pem: string): Decoder;
167
+ /**
168
+ * Verify signature with ECDSA P-256 public key in PEM format.
169
+ * Supports SPKI format with "BEGIN PUBLIC KEY" headers.
170
+ * @param pem - PEM-encoded P-256 public key
171
+ * @returns The decoder instance for chaining
172
+ * @throws {Claim169Error} If the PEM is invalid
173
+ */
174
+ verifyWithEcdsaP256Pem(pem: string): Decoder;
157
175
  /**
158
176
  * Allow decoding without signature verification.
159
- * WARNING: Unverified credentials cannot be trusted. Use for testing only.
177
+ * WARNING: Credentials decoded with verification skipped (`verificationStatus === "skipped"`)
178
+ * cannot be trusted. Use for testing only.
160
179
  * @returns The decoder instance for chaining
161
180
  */
162
181
  allowUnverified(): Decoder;
@@ -183,14 +202,19 @@ export declare class Decoder implements IDecoder {
183
202
  /**
184
203
  * Enable timestamp validation.
185
204
  * When enabled, expired or not-yet-valid credentials will throw an error.
186
- * Disabled by default because WASM doesn't have reliable access to system time.
205
+ * Implemented in the host (JavaScript) to avoid WASM runtime time limitations.
187
206
  * @returns The decoder instance for chaining
188
207
  */
189
208
  withTimestampValidation(): Decoder;
209
+ /**
210
+ * Disable timestamp validation.
211
+ * @returns The decoder instance for chaining
212
+ */
213
+ withoutTimestampValidation(): Decoder;
190
214
  /**
191
215
  * Set clock skew tolerance in seconds.
192
216
  * Allows credentials to be accepted when clocks are slightly out of sync.
193
- * Only applies when timestamp validation is enabled.
217
+ * Applies when timestamp validation is enabled.
194
218
  * @param seconds - The tolerance in seconds
195
219
  * @returns The decoder instance for chaining
196
220
  */
@@ -202,6 +226,42 @@ export declare class Decoder implements IDecoder {
202
226
  * @returns The decoder instance for chaining
203
227
  */
204
228
  maxDecompressedBytes(bytes: number): Decoder;
229
+ /**
230
+ * Verify signature with a custom verifier callback.
231
+ * Use for external crypto providers (HSM, cloud KMS, remote signing, etc.)
232
+ *
233
+ * @param verifier - Function that verifies signatures
234
+ * @returns The decoder instance for chaining
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const result = new Decoder(qrText)
239
+ * .verifyWith((algorithm, keyId, data, signature) => {
240
+ * // Call your crypto provider here
241
+ * myKms.verify(keyId, data, signature);
242
+ * })
243
+ * .decode();
244
+ * ```
245
+ */
246
+ verifyWith(verifier: VerifierCallback): Decoder;
247
+ /**
248
+ * Decrypt with a custom decryptor callback.
249
+ * Use for external crypto providers (HSM, cloud KMS, etc.)
250
+ *
251
+ * @param decryptor - Function that decrypts ciphertext
252
+ * @returns The decoder instance for chaining
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * const result = new Decoder(qrText)
257
+ * .decryptWith((algorithm, keyId, nonce, aad, ciphertext) => {
258
+ * // Call your crypto provider here
259
+ * return myKms.decrypt(keyId, ciphertext, { nonce, aad });
260
+ * })
261
+ * .decode();
262
+ * ```
263
+ */
264
+ decryptWith(decryptor: DecryptorCallback): Decoder;
205
265
  /**
206
266
  * Decode the QR code with the configured options.
207
267
  * Requires either a verifier (verifyWithEd25519/verifyWithEcdsaP256) or
@@ -216,7 +276,7 @@ export declare class Decoder implements IDecoder {
216
276
  *
217
277
  * Notes:
218
278
  * - If you don't provide a verification key, you must explicitly set `allowUnverified: true` (testing only).
219
- * - Timestamp validation is disabled by default in WASM; set `validateTimestamps: true` to enable it.
279
+ * - Timestamp validation is enabled by default in JS (host-side). Set `validateTimestamps: false` to disable.
220
280
  */
221
281
  export interface DecodeOptions {
222
282
  verifyWithEd25519?: Uint8Array;
@@ -304,6 +364,44 @@ export declare class Encoder implements IEncoder {
304
364
  * @returns The encoder instance for chaining
305
365
  */
306
366
  skipBiometrics(): Encoder;
367
+ /**
368
+ * Sign with a custom signer callback.
369
+ * Use for external crypto providers (HSM, cloud KMS, remote signing, etc.)
370
+ *
371
+ * @param signer - Function that signs data
372
+ * @param algorithm - Signature algorithm: "EdDSA" or "ES256"
373
+ * @param keyId - Optional key identifier passed to the signer callback
374
+ * @returns The encoder instance for chaining
375
+ *
376
+ * @example
377
+ * ```typescript
378
+ * const qrData = new Encoder(claim169, cwtMeta)
379
+ * .signWith((algorithm, keyId, data) => {
380
+ * return myKms.sign({ keyId, data });
381
+ * }, "EdDSA")
382
+ * .encode();
383
+ * ```
384
+ */
385
+ signWith(signer: SignerCallback, algorithm: "EdDSA" | "ES256", keyId?: Uint8Array | null): Encoder;
386
+ /**
387
+ * Encrypt with a custom encryptor callback.
388
+ * Use for external crypto providers (HSM, cloud KMS, etc.)
389
+ *
390
+ * @param encryptor - Function that encrypts data
391
+ * @param algorithm - Encryption algorithm: "A256GCM" or "A128GCM"
392
+ * @returns The encoder instance for chaining
393
+ *
394
+ * @example
395
+ * ```typescript
396
+ * const qrData = new Encoder(claim169, cwtMeta)
397
+ * .signWithEd25519(signKey)
398
+ * .encryptWith((algorithm, keyId, nonce, aad, plaintext) => {
399
+ * return myKms.encrypt({ keyId, nonce, aad, plaintext });
400
+ * }, "A256GCM")
401
+ * .encode();
402
+ * ```
403
+ */
404
+ encryptWith(encryptor: EncryptorCallback, algorithm: "A256GCM" | "A128GCM"): Encoder;
307
405
  /**
308
406
  * Encode the credential to a Base45 QR string.
309
407
  * @returns Base45-encoded string suitable for QR code generation
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAEH,YAAY,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,eAAe,EACf,QAAQ,EACR,aAAa,EACb,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAqBlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMpD;AA4PD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,OAAQ,YAAW,QAAQ;IACtC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,yBAAyB,CAAK;IAEtC;;;OAGG;gBACS,MAAM,EAAE,MAAM;IAI1B;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO;IAYjD;;;;;OAKG;IACH,mBAAmB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO;IAYnD;;;;;;OAMG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAY1C;;;;;;OAMG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAY5C;;;;;OAKG;IACH,eAAe,IAAI,OAAO;IAK1B;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAY3C;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAY3C;;;;OAIG;IACH,cAAc,IAAI,OAAO;IAKzB;;;;;OAKG;IACH,uBAAuB,IAAI,OAAO;IAKlC;;;OAGG;IACH,0BAA0B,IAAI,OAAO;IAKrC;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAK5C;;;;;OAKG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAK5C;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IAY/C;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO;IAYlD;;;;;;OAMG;IACH,MAAM,IAAI,YAAY;CAsBvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAuCd;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,OAAQ,YAAW,QAAQ;IACtC,OAAO,CAAC,WAAW,CAAmB;IAEtC;;;;OAIG;gBACS,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY;IAW1D;;;;OAIG;IACH,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAYhD;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAYlD;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAY3C;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAY3C;;;;OAIG;IACH,aAAa,IAAI,OAAO;IAKxB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAKzB;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CACN,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,OAAO,GAAG,OAAO,EAC5B,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACxB,OAAO;IAiBV;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,CACT,SAAS,EAAE,iBAAiB,EAC5B,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,OAAO;IAYV;;;;OAIG;IACH,MAAM,IAAI,MAAM;CAUjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAE1C"}