@noble/post-quantum 0.5.4 → 0.6.1

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/slh-dsa.js CHANGED
@@ -33,14 +33,25 @@ import { shake256 } from '@noble/hashes/sha3.js';
33
33
  import { bytesToHex, concatBytes, createView, hexToBytes, } from '@noble/hashes/utils.js';
34
34
  import { abytes, checkHash, cleanBytes, copyBytes, equalBytes, getMask, getMessage, getMessagePrehash, randomBytes, splitCoder, validateSigOpts, validateVerOpts, vecCoder, } from "./utils.js";
35
35
  /** Winternitz signature params. */
36
- export const PARAMS = {
37
- '128f': { W: 16, N: 16, H: 66, D: 22, K: 33, A: 6, securityLevel: 128 },
38
- '128s': { W: 16, N: 16, H: 63, D: 7, K: 14, A: 12, securityLevel: 128 },
39
- '192f': { W: 16, N: 24, H: 66, D: 22, K: 33, A: 8, securityLevel: 192 },
40
- '192s': { W: 16, N: 24, H: 63, D: 7, K: 17, A: 14, securityLevel: 192 },
41
- '256f': { W: 16, N: 32, H: 68, D: 17, K: 35, A: 9, securityLevel: 256 },
42
- '256s': { W: 16, N: 32, H: 64, D: 8, K: 22, A: 14, securityLevel: 256 },
43
- };
36
+ /**
37
+ * Built-in SLH-DSA Table 2 subset keyed by strength/profile.
38
+ * SHA2 and SHAKE pairs share the same numeric rows here, so the hash family is chosen separately.
39
+ * `securityLevel` stores 128/192/256-bit strengths for `checkHash(...)`,
40
+ * not Table 2's category labels 1/3/5.
41
+ * Other Table 2 columns such as `m`, public-key bytes, and signature bytes
42
+ * stay derived at the export layer.
43
+ */
44
+ export const PARAMS = /* @__PURE__ */ (() => Object.freeze({
45
+ '128f': Object.freeze({ W: 16, N: 16, H: 66, D: 22, K: 33, A: 6, securityLevel: 128 }),
46
+ '128s': Object.freeze({ W: 16, N: 16, H: 63, D: 7, K: 14, A: 12, securityLevel: 128 }),
47
+ '192f': Object.freeze({ W: 16, N: 24, H: 66, D: 22, K: 33, A: 8, securityLevel: 192 }),
48
+ '192s': Object.freeze({ W: 16, N: 24, H: 63, D: 7, K: 17, A: 14, securityLevel: 192 }),
49
+ '256f': Object.freeze({ W: 16, N: 32, H: 68, D: 17, K: 35, A: 9, securityLevel: 256 }),
50
+ '256s': Object.freeze({ W: 16, N: 32, H: 64, D: 8, K: 22, A: 14, securityLevel: 256 }),
51
+ }))();
52
+ // FIPS 205 `ADRS.setTypeAndClear(...)` selectors. Local names shorten the spec labels
53
+ // (`WOTS_HASH` -> `WOTS`, `TREE` -> `HASHTREE`, `FORS_ROOTS` -> `FORSPK`), and `setAddr({ type })`
54
+ // below only writes the type word; callers still need to preserve or overwrite the trailing words.
44
55
  const AddressType = {
45
56
  WOTS: 0,
46
57
  WOTSPK: 1,
@@ -55,14 +66,17 @@ function hexToNumber(hex) {
55
66
  throw new Error('hex string expected, got ' + typeof hex);
56
67
  return BigInt(hex === '' ? '0' : '0x' + hex); // Big Endian
57
68
  }
58
- // BE: Big Endian, LE: Little Endian
69
+ // BE: Big Endian, LE: Little Endian. This is the local FIPS 205 `toInt(...)` equivalent.
59
70
  function bytesToNumberBE(bytes) {
60
71
  return hexToNumber(bytesToHex(bytes));
61
72
  }
73
+ // Local in-range FIPS 205 `toByte(x, n)` equivalent; callers must keep `n < 256^len`.
62
74
  function numberToBytesBE(n, len) {
63
75
  return hexToBytes(n.toString(16).padStart(len * 2, '0'));
64
76
  }
65
- // Same as bitsCoder.decode, but maybe spec will change and unify with base2bBE.
77
+ // Local FIPS 205 Algorithm 4 `base_2^b(...)` implementation. Bits are consumed in big-endian
78
+ // order within each input byte, and callers must provide at least `ceil(outLen * b / 8)` bytes;
79
+ // short inputs are not rejected and would zero-extend implicitly.
66
80
  const base2b = (outLen, b) => {
67
81
  const mask = getMask(b);
68
82
  return (bytes) => {
@@ -81,7 +95,13 @@ const base2b = (outLen, b) => {
81
95
  function getMaskBig(bits) {
82
96
  return (1n << BigInt(bits)) - 1n; // 4 -> 0b1111
83
97
  }
84
- function gen(opts, hashOpts) {
98
+ /** One parameter/hash instantiation of the public SLH-DSA API.
99
+ * `keygen(seed)` is a deterministic 3N-byte library hook around the internal keygen flow,
100
+ * and `getPublicKey(secretKey)` only extracts the embedded public key
101
+ * instead of recomputing `PK.root`.
102
+ */
103
+ function gen(opts, hashOpts_) {
104
+ const hashOpts = hashOpts_;
85
105
  const { N, W, H, D, K, A, securityLevel: securityLevel } = opts;
86
106
  const getContext = hashOpts.getContext(opts);
87
107
  if (W !== 16)
@@ -111,6 +131,11 @@ function gen(opts, hashOpts) {
111
131
  OFFSET_TREE_INDEX += 10;
112
132
  OFFSET_HASH_ADDR += 10;
113
133
  }
134
+ // Mutates and returns `addr` in place. For the built-in parameter sets, the layer / chain /
135
+ // hash / height / keypair values fit in the low byte(s), and the tree value fits in 64 bits,
136
+ // so the untouched leading bytes in the wider FIPS 205 ADRS / ADRS_c fields stay zero.
137
+ // `height` / `chain` and `index` / `hash` share the same spec words, so callers must use the
138
+ // address-type-specific combinations instead of mixing both meanings in one call.
114
139
  const setAddr = (opts, addr = new Uint8Array(ADDR_BYTES)) => {
115
140
  const { type, height, tree, layer, index, chain, hash, keypair } = opts;
116
141
  const { subtreeAddr, keypairAddr } = opts;
@@ -150,7 +175,8 @@ function gen(opts, hashOpts) {
150
175
  let csum = 0;
151
176
  for (let i = 0; i < W1.length; i++)
152
177
  csum += W - 1 - W1[i]; // ▷ Compute checksum
153
- csum <<= (8 - ((WOTS_LEN2 * WOTS_LOGW) % 8)) % 8; // csum ← csum ≪ ((8 − ((len2 · lg(w)) mod 8)) mod 8
178
+ // csum ← csum ≪ ((8 − ((len2 · lg(w)) mod 8)) mod 8
179
+ csum <<= (8 - ((WOTS_LEN2 * WOTS_LOGW) % 8)) % 8;
154
180
  // Checksum to base(LOG_W)
155
181
  const W2 = chainCoder(numberToBytesBE(csum, Math.ceil((WOTS_LEN2 * WOTS_LOGW) / 8)));
156
182
  // W1 || W2 (concatBytes cannot concat TypedArrays)
@@ -163,14 +189,23 @@ function gen(opts, hashOpts) {
163
189
  const TREE_BITS = TREE_HEIGHT * (D - 1);
164
190
  const LEAF_BITS = TREE_HEIGHT;
165
191
  const hashMsgCoder = splitCoder('hashedMessage', Math.ceil((A * K) / 8), Math.ceil(TREE_BITS / 8), Math.ceil(TREE_HEIGHT / 8));
192
+ // `pkSeed` is the full public key byte string `PK.seed || PK.root`; after splitting `Hmsg`,
193
+ // mask away any spare high bits so `idx_tree` / `idx_leaf` match the spec's final mod-2^k steps.
166
194
  const hashMessage = (R, pkSeed, msg, context) => {
167
- const digest = context.Hmsg(R, pkSeed, msg, hashMsgCoder.bytesLen); // digest ← Hmsg(R, PK.seed, PK.root, M)
195
+ const rawContext = context;
196
+ // digest ← Hmsg(R, PK.seed, PK.root, M)
197
+ const digest = rawContext.Hmsg(R, pkSeed, msg, hashMsgCoder.bytesLen);
168
198
  const [md, tmpIdxTree, tmpIdxLeaf] = hashMsgCoder.decode(digest);
169
199
  const tree = bytesToNumberBE(tmpIdxTree) & getMaskBig(TREE_BITS);
170
200
  const leafIdx = Number(bytesToNumberBE(tmpIdxLeaf)) & getMask(LEAF_BITS);
171
201
  return { tree, leafIdx, md };
172
202
  };
203
+ // Iterative `xmss_node` / `xmss_sign` core: mutate `treeAddr` in place, collapse completed
204
+ // sibling pairs on `stack`, and record the sibling whenever the current subtree is the auth-path
205
+ // neighbor of the target leaf at that height.
173
206
  const treehash = (height, fn) => function treehash_i(context, leafIdx, idxOffset, treeAddr, info) {
207
+ const rawContext = context;
208
+ const leafFn = fn;
174
209
  const maxIdx = (1 << height) - 1;
175
210
  const stack = new Uint8Array(height * N);
176
211
  const authPath = new Uint8Array(height * N);
@@ -179,7 +214,7 @@ function gen(opts, hashOpts) {
179
214
  const cur0 = current.subarray(0, N);
180
215
  const cur1 = current.subarray(N);
181
216
  const addrOffset = idx + idxOffset;
182
- cur1.set(fn(leafIdx, addrOffset, context, info));
217
+ cur1.set(leafFn(leafIdx, addrOffset, rawContext, info));
183
218
  let h = 0;
184
219
  for (let i = idx, o = idxOffset, l = leafIdx;; h++, i >>>= 1, l >>>= 1, o >>>= 1) {
185
220
  if (h === height)
@@ -190,7 +225,7 @@ function gen(opts, hashOpts) {
190
225
  break;
191
226
  setAddr({ height: h + 1, index: (i >> 1) + (o >> 1) }, treeAddr);
192
227
  cur0.set(stack.subarray(h * N).subarray(0, N));
193
- cur1.set(context.thashN(2, current, treeAddr));
228
+ cur1.set(rawContext.thashN(2, current, treeAddr));
194
229
  }
195
230
  stack.subarray(h * N).set(cur1); // stack.push(cur1)
196
231
  }
@@ -198,7 +233,10 @@ function gen(opts, hashOpts) {
198
233
  throw new Error('Unreachable code path reached, report this error');
199
234
  };
200
235
  const wotsTreehash = treehash(TREE_HEIGHT, (leafIdx, addrOffset, context, info) => {
236
+ const rawContext = context;
201
237
  const wotsPk = new Uint8Array(WOTS_LEN * N);
238
+ // `keygen()` passes `leafIdx = ~0 >>> 0`, so no real XMSS leaf matches and this suppresses
239
+ // WOTS signature capture while still hashing every chain to its public-key endpoint.
202
240
  const wotsKmask = addrOffset === leafIdx ? 0 : ~0 >>> 0;
203
241
  setAddr({ keypair: addrOffset }, info.leafAddr);
204
242
  setAddr({ keypair: addrOffset }, info.pkAddr);
@@ -206,7 +244,7 @@ function gen(opts, hashOpts) {
206
244
  const wotsK = info.wotsSteps[i] | wotsKmask;
207
245
  const pk = wotsPk.subarray(i * N, (i + 1) * N);
208
246
  setAddr({ chain: i, hash: 0, type: AddressType.WOTSPRF }, info.leafAddr);
209
- pk.set(context.PRFaddr(info.leafAddr));
247
+ pk.set(rawContext.PRFaddr(info.leafAddr));
210
248
  setAddr({ type: AddressType.WOTS }, info.leafAddr);
211
249
  for (let k = 0;; k++) {
212
250
  if (k === wotsK)
@@ -214,17 +252,20 @@ function gen(opts, hashOpts) {
214
252
  if (k === W - 1)
215
253
  break;
216
254
  setAddr({ hash: k }, info.leafAddr);
217
- pk.set(context.thash1(pk, info.leafAddr));
255
+ pk.set(rawContext.thash1(pk, info.leafAddr));
218
256
  }
219
257
  }
220
- return context.thashN(WOTS_LEN, wotsPk, info.pkAddr);
258
+ return rawContext.thashN(WOTS_LEN, wotsPk, info.pkAddr);
221
259
  });
222
260
  const forsTreehash = treehash(A, (_, addrOffset, context, forsLeafAddr) => {
261
+ const rawContext = context;
223
262
  setAddr({ type: AddressType.FORSPRF, index: addrOffset }, forsLeafAddr);
224
- const prf = context.PRFaddr(forsLeafAddr);
263
+ const prf = rawContext.PRFaddr(forsLeafAddr);
225
264
  setAddr({ type: AddressType.FORSTREE }, forsLeafAddr);
226
- return context.thash1(prf, forsLeafAddr);
265
+ return rawContext.thash1(prf, forsLeafAddr);
227
266
  });
267
+ // Fuse `xmss_sign` with the subtree-root computation needed by `ht_sign`, so one tree walk
268
+ // yields both the WOTS/auth-path signature and the root that the next hypertree layer signs.
228
269
  const merkleSign = (context, wotsAddr, treeAddr, leafIdx, prevRoot = new Uint8Array(N)) => {
229
270
  setAddr({ type: AddressType.HASHTREE }, treeAddr);
230
271
  // State variables
@@ -242,9 +283,14 @@ function gen(opts, hashOpts) {
242
283
  };
243
284
  };
244
285
  const computeRoot = (leaf, leafIdx, idxOffset, authPath, treeHeight, context, addr) => {
286
+ const rawContext = context;
245
287
  const buffer = new Uint8Array(2 * N);
246
288
  const b0 = buffer.subarray(0, N);
247
289
  const b1 = buffer.subarray(N, 2 * N);
290
+ // Algorithm 11 hashes `node || AUTH[k]` for even nodes and `AUTH[k] || node` for odd ones,
291
+ // so reuse one `2N` buffer and just swap which half receives the sibling at each level.
292
+ // `idxOffset` carries the subtree base for the shared FORS path, so `leafIdx + idxOffset`
293
+ // tracks the same tree-global index updates that Algorithms 11 and 17 apply to ADRS.
248
294
  // First iter
249
295
  if ((leafIdx & 1) !== 0) {
250
296
  b1.set(leaf.subarray(0, N));
@@ -261,17 +307,17 @@ function gen(opts, hashOpts) {
261
307
  setAddr({ height: i + 1, index: leafIdx + idxOffset }, addr);
262
308
  const a = authPath.subarray((i + 1) * N, (i + 2) * N);
263
309
  if ((leafIdx & 1) !== 0) {
264
- b1.set(context.thashN(2, buffer, addr));
310
+ b1.set(rawContext.thashN(2, buffer, addr));
265
311
  b0.set(a);
266
312
  }
267
313
  else {
268
- buffer.set(context.thashN(2, buffer, addr));
314
+ buffer.set(rawContext.thashN(2, buffer, addr));
269
315
  b1.set(a);
270
316
  }
271
317
  }
272
318
  // Root
273
319
  setAddr({ height: treeHeight, index: leafIdx + idxOffset }, addr);
274
- return context.thashN(2, buffer, addr);
320
+ return rawContext.thashN(2, buffer, addr);
275
321
  };
276
322
  const seedCoder = splitCoder('seed', N, N, N);
277
323
  const publicCoder = splitCoder('publicKey', N, N);
@@ -279,15 +325,15 @@ function gen(opts, hashOpts) {
279
325
  const forsCoder = vecCoder(splitCoder('fors', N, N * A), K);
280
326
  const wotsCoder = vecCoder(splitCoder('wots', WOTS_LEN * N, TREE_HEIGHT * N), D);
281
327
  const sigCoder = splitCoder('signature', N, forsCoder, wotsCoder); // random || fors || wots
282
- const internal = {
283
- info: { type: 'internal-slh-dsa' },
284
- lengths: {
328
+ const internal = Object.freeze({
329
+ info: Object.freeze({ type: 'internal-slh-dsa' }),
330
+ lengths: Object.freeze({
285
331
  publicKey: publicCoder.bytesLen,
286
332
  secretKey: secretCoder.bytesLen,
287
333
  signature: sigCoder.bytesLen,
288
334
  seed: seedCoder.bytesLen,
289
335
  signRand: N,
290
- },
336
+ }),
291
337
  keygen(seed) {
292
338
  if (seed !== undefined)
293
339
  abytes(seed, seedCoder.bytesLen, 'seed');
@@ -304,7 +350,10 @@ function gen(opts, hashOpts) {
304
350
  const secretKey = secretCoder.encode([secretSeed, secretPRF, publicKey]);
305
351
  context.clean();
306
352
  cleanBytes(secretSeed, secretPRF, root, wotsAddr, topTreeAddr);
307
- return { publicKey, secretKey };
353
+ return {
354
+ publicKey: publicKey,
355
+ secretKey: secretKey,
356
+ };
308
357
  },
309
358
  getPublicKey: (secretKey) => {
310
359
  const [_skSeed, _skPRF, pk] = secretCoder.decode(secretKey);
@@ -433,9 +482,9 @@ function gen(opts, hashOpts) {
433
482
  }
434
483
  return equalBytes(root, pubRoot);
435
484
  },
436
- };
437
- return {
438
- info: { type: 'slh-dsa' },
485
+ });
486
+ return Object.freeze({
487
+ info: Object.freeze({ type: 'slh-dsa' }),
439
488
  internal,
440
489
  securityLevel: securityLevel,
441
490
  lengths: internal.lengths,
@@ -454,29 +503,34 @@ function gen(opts, hashOpts) {
454
503
  },
455
504
  prehash: (hash) => {
456
505
  checkHash(hash, securityLevel);
457
- return {
458
- info: { type: 'hashslh-dsa' },
506
+ const rawHash = hash;
507
+ return Object.freeze({
508
+ info: Object.freeze({ type: 'hashslh-dsa' }),
459
509
  lengths: internal.lengths,
460
510
  keygen: internal.keygen,
461
511
  getPublicKey: internal.getPublicKey,
462
512
  sign: (msg, secretKey, opts = {}) => {
463
513
  validateSigOpts(opts);
464
- const M = getMessagePrehash(hash, msg, opts.context);
514
+ const M = getMessagePrehash(rawHash, msg, opts.context);
465
515
  const res = internal.sign(M, secretKey, opts);
466
516
  cleanBytes(M);
467
517
  return res;
468
518
  },
469
519
  verify: (sig, msg, publicKey, opts = {}) => {
470
520
  validateVerOpts(opts);
471
- return internal.verify(sig, getMessagePrehash(hash, msg, opts.context), publicKey);
521
+ return internal.verify(sig, getMessagePrehash(rawHash, msg, opts.context), publicKey);
472
522
  },
473
- };
523
+ });
474
524
  },
475
- };
525
+ });
476
526
  }
527
+ // FIPS 205 §11.1 SHAKE instantiation: this path hashes the full uncompressed address bytes,
528
+ // unlike the compressed 22-byte SHA2 path in §11.2.
477
529
  const genShake = () => (opts) => (pubSeed, skSeed) => {
478
530
  const { N } = opts;
479
531
  const stats = { prf: 0, thash: 0, hmsg: 0, gen_message_random: 0 };
532
+ // §11.1 prefixes PRF/F/H/T_l with `PK.seed`, so cache that absorbed prefix once and clone it
533
+ // for each address-bound call instead of reabsorbing the same seed every time.
480
534
  const h0 = shake256.create({}).update(pubSeed);
481
535
  const h0tmp = h0.clone();
482
536
  const thash = (blocks, input, addr) => {
@@ -497,7 +551,13 @@ const genShake = () => (opts) => (pubSeed, skSeed) => {
497
551
  },
498
552
  PRFmsg: (skPRF, random, msg) => {
499
553
  stats.gen_message_random++;
500
- return shake256.create({}).update(skPRF).update(random).update(msg).digest().subarray(0, N);
554
+ return shake256
555
+ .create({})
556
+ .update(skPRF)
557
+ .update(random)
558
+ .update(msg)
559
+ .digest()
560
+ .subarray(0, N);
501
561
  },
502
562
  Hmsg: (R, pk, m, outLen) => {
503
563
  stats.hmsg++;
@@ -512,19 +572,46 @@ const genShake = () => (opts) => (pubSeed, skSeed) => {
512
572
  },
513
573
  };
514
574
  };
515
- const SHAKE_SIMPLE = { getContext: genShake() };
516
- /** SLH-DSA: 128-bit fast SHAKE version. */
517
- export const slh_dsa_shake_128f = /* @__PURE__ */ gen(PARAMS['128f'], SHAKE_SIMPLE);
518
- /** SLH-DSA: 128-bit short SHAKE version. */
519
- export const slh_dsa_shake_128s = /* @__PURE__ */ gen(PARAMS['128s'], SHAKE_SIMPLE);
520
- /** SLH-DSA: 192-bit fast SHAKE version. */
521
- export const slh_dsa_shake_192f = /* @__PURE__ */ gen(PARAMS['192f'], SHAKE_SIMPLE);
522
- /** SLH-DSA: 192-bit short SHAKE version. */
523
- export const slh_dsa_shake_192s = /* @__PURE__ */ gen(PARAMS['192s'], SHAKE_SIMPLE);
524
- /** SLH-DSA: 256-bit fast SHAKE version. */
525
- export const slh_dsa_shake_256f = /* @__PURE__ */ gen(PARAMS['256f'], SHAKE_SIMPLE);
526
- /** SLH-DSA: 256-bit short SHAKE version. */
527
- export const slh_dsa_shake_256s = /* @__PURE__ */ gen(PARAMS['256s'], SHAKE_SIMPLE);
575
+ const SHAKE_SIMPLE = /* @__PURE__ */ (() => ({ getContext: genShake() }))();
576
+ /**
577
+ * SLH-DSA-SHAKE-128f: Table 2 row `n=16, h=66, d=22, h'=3, a=6, k=33, lg w=4, m=34`;
578
+ * lengths `publicKey=32`, `secretKey=64`, `signature=17088`, `seed=48`, `signRand=16`.
579
+ * Also exposes `.prehash(...)`.
580
+ */
581
+ export const slh_dsa_shake_128f = /* @__PURE__ */ (() => gen(PARAMS['128f'], SHAKE_SIMPLE))();
582
+ /**
583
+ * SLH-DSA-SHAKE-128s: Table 2 row `n=16, h=63, d=7, h'=9, a=12, k=14, lg w=4, m=30`;
584
+ * lengths `publicKey=32`, `secretKey=64`, `signature=7856`, `seed=48`, `signRand=16`.
585
+ * Also exposes `.prehash(...)`.
586
+ */
587
+ export const slh_dsa_shake_128s = /* @__PURE__ */ (() => gen(PARAMS['128s'], SHAKE_SIMPLE))();
588
+ /**
589
+ * SLH-DSA-SHAKE-192f: Table 2 row `n=24, h=66, d=22, h'=3, a=8, k=33, lg w=4, m=42`;
590
+ * lengths `publicKey=48`, `secretKey=96`, `signature=35664`, `seed=72`, `signRand=24`.
591
+ * Also exposes `.prehash(...)`.
592
+ */
593
+ export const slh_dsa_shake_192f = /* @__PURE__ */ (() => gen(PARAMS['192f'], SHAKE_SIMPLE))();
594
+ /**
595
+ * SLH-DSA-SHAKE-192s: Table 2 row `n=24, h=63, d=7, h'=9, a=14, k=17, lg w=4, m=39`;
596
+ * lengths `publicKey=48`, `secretKey=96`, `signature=16224`, `seed=72`, `signRand=24`.
597
+ * Also exposes `.prehash(...)`.
598
+ */
599
+ export const slh_dsa_shake_192s = /* @__PURE__ */ (() => gen(PARAMS['192s'], SHAKE_SIMPLE))();
600
+ /**
601
+ * SLH-DSA-SHAKE-256f: Table 2 row `n=32, h=68, d=17, h'=4, a=9, k=35, lg w=4, m=49`;
602
+ * lengths `publicKey=64`, `secretKey=128`, `signature=49856`, `seed=96`, `signRand=32`.
603
+ * Also exposes `.prehash(...)`.
604
+ */
605
+ export const slh_dsa_shake_256f = /* @__PURE__ */ (() => gen(PARAMS['256f'], SHAKE_SIMPLE))();
606
+ /**
607
+ * SLH-DSA-SHAKE-256s: Table 2 row `n=32, h=64, d=8, h'=8, a=14, k=22, lg w=4, m=47`;
608
+ * lengths `publicKey=64`, `secretKey=128`, `signature=29792`, `seed=96`, `signRand=32`.
609
+ * Also exposes `.prehash(...)`.
610
+ */
611
+ export const slh_dsa_shake_256s = /* @__PURE__ */ (() => gen(PARAMS['256s'], SHAKE_SIMPLE))();
612
+ // FIPS 205 §11.2 SHA2 instantiation. The `h0` / `h1` split is intentional:
613
+ // category-1 keeps everything on SHA-256, while category-3/5 keep `PRFaddr` / `thash1`
614
+ // on SHA-256 but switch `PRFmsg`, `Hmsg`, and multi-block `thashN` to SHA-512.
528
615
  const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
529
616
  const { N } = opts;
530
617
  /*
@@ -536,6 +623,8 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
536
623
  const stats = { prf: 0, thash: 0, hmsg: 0, gen_message_random: 0, mgf1: 0 };
537
624
  const counterB = new Uint8Array(4);
538
625
  const counterV = createView(counterB);
626
+ // §11.2 prefixes SHA2 PRF/F/H/T_l with `PK.seed || toByte(0, blockLen-N)`, so cache the
627
+ // zero-padded seed block once for the SHA-256 lane and once for the SHA-512 lane.
539
628
  const h0ps = h0
540
629
  .create()
541
630
  .update(pub_seed)
@@ -547,6 +636,9 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
547
636
  const h0tmp = h0ps.clone();
548
637
  const h1tmp = h1ps.clone();
549
638
  // https://www.rfc-editor.org/rfc/rfc8017.html#appendix-B.2.1
639
+ // This local helper is intentionally stricter than generic MGF1 reuse: current SLH-DSA callers
640
+ // only request tiny `m`-byte outputs, but the guard below rejects `length > 2^32` instead of
641
+ // RFC 8017's broader `maskLen > 2^32 * hLen` bound.
550
642
  function mgf1(seed, length, hash) {
551
643
  stats.mgf1++;
552
644
  const out = new Uint8Array(Math.ceil(length / hash.outputLen) * hash.outputLen);
@@ -585,7 +677,12 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
585
677
  },
586
678
  PRFmsg: (skPRF, random, msg) => {
587
679
  stats.gen_message_random++;
588
- return hmac.create(h1, skPRF).update(random).update(msg).digest().subarray(0, N);
680
+ return hmac
681
+ .create(h1, skPRF)
682
+ .update(random)
683
+ .update(msg)
684
+ .digest()
685
+ .subarray(0, N);
589
686
  },
590
687
  Hmsg: (R, pk, m, outLen) => {
591
688
  stats.hmsg++;
@@ -603,24 +700,48 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
603
700
  },
604
701
  };
605
702
  };
606
- const SHA256_SIMPLE = {
703
+ const SHA256_SIMPLE = /* @__PURE__ */ (() => ({
607
704
  isCompressed: true,
608
705
  getContext: genSha(sha256, sha256),
609
- };
610
- const SHA512_SIMPLE = {
706
+ }))();
707
+ const SHA512_SIMPLE = /* @__PURE__ */ (() => ({
611
708
  isCompressed: true,
612
709
  getContext: genSha(sha256, sha512),
613
- };
614
- /** SLH-DSA: 128-bit fast SHA2 version. */
615
- export const slh_dsa_sha2_128f = /* @__PURE__ */ gen(PARAMS['128f'], SHA256_SIMPLE);
616
- /** SLH-DSA: 128-bit small SHA2 version. */
617
- export const slh_dsa_sha2_128s = /* @__PURE__ */ gen(PARAMS['128s'], SHA256_SIMPLE);
618
- /** SLH-DSA: 192-bit fast SHA2 version. */
619
- export const slh_dsa_sha2_192f = /* @__PURE__ */ gen(PARAMS['192f'], SHA512_SIMPLE);
620
- /** SLH-DSA: 192-bit small SHA2 version. */
621
- export const slh_dsa_sha2_192s = /* @__PURE__ */ gen(PARAMS['192s'], SHA512_SIMPLE);
622
- /** SLH-DSA: 256-bit fast SHA2 version. */
623
- export const slh_dsa_sha2_256f = /* @__PURE__ */ gen(PARAMS['256f'], SHA512_SIMPLE);
624
- /** SLH-DSA: 256-bit small SHA2 version. */
625
- export const slh_dsa_sha2_256s = /* @__PURE__ */ gen(PARAMS['256s'], SHA512_SIMPLE);
710
+ }))();
711
+ /**
712
+ * SLH-DSA-SHA2-128f: Table 2 row `n=16, h=66, d=22, h'=3, a=6, k=33, lg w=4, m=34`;
713
+ * lengths `publicKey=32`, `secretKey=64`, `signature=17088`, `seed=48`, `signRand=16`.
714
+ * Also exposes `.prehash(...)`.
715
+ */
716
+ export const slh_dsa_sha2_128f = /* @__PURE__ */ (() => gen(PARAMS['128f'], SHA256_SIMPLE))();
717
+ /**
718
+ * SLH-DSA-SHA2-128s: Table 2 row `n=16, h=63, d=7, h'=9, a=12, k=14, lg w=4, m=30`;
719
+ * lengths `publicKey=32`, `secretKey=64`, `signature=7856`, `seed=48`, `signRand=16`.
720
+ * Also exposes `.prehash(...)`.
721
+ */
722
+ export const slh_dsa_sha2_128s = /* @__PURE__ */ (() => gen(PARAMS['128s'], SHA256_SIMPLE))();
723
+ /**
724
+ * SLH-DSA-SHA2-192f: Table 2 row `n=24, h=66, d=22, h'=3, a=8, k=33, lg w=4, m=42`;
725
+ * lengths `publicKey=48`, `secretKey=96`, `signature=35664`, `seed=72`, `signRand=24`.
726
+ * Also exposes `.prehash(...)`.
727
+ */
728
+ export const slh_dsa_sha2_192f = /* @__PURE__ */ (() => gen(PARAMS['192f'], SHA512_SIMPLE))();
729
+ /**
730
+ * SLH-DSA-SHA2-192s: Table 2 row `n=24, h=63, d=7, h'=9, a=14, k=17, lg w=4, m=39`;
731
+ * lengths `publicKey=48`, `secretKey=96`, `signature=16224`, `seed=72`, `signRand=24`.
732
+ * Also exposes `.prehash(...)`.
733
+ */
734
+ export const slh_dsa_sha2_192s = /* @__PURE__ */ (() => gen(PARAMS['192s'], SHA512_SIMPLE))();
735
+ /**
736
+ * SLH-DSA-SHA2-256f: Table 2 row `n=32, h=68, d=17, h'=4, a=9, k=35, lg w=4, m=49`;
737
+ * lengths `publicKey=64`, `secretKey=128`, `signature=49856`, `seed=96`, `signRand=32`.
738
+ * Also exposes `.prehash(...)`.
739
+ */
740
+ export const slh_dsa_sha2_256f = /* @__PURE__ */ (() => gen(PARAMS['256f'], SHA512_SIMPLE))();
741
+ /**
742
+ * SLH-DSA-SHA2-256s: Table 2 row `n=32, h=64, d=8, h'=8, a=14, k=22, lg w=4, m=47`;
743
+ * lengths `publicKey=64`, `secretKey=128`, `signature=29792`, `seed=96`, `signRand=32`.
744
+ * Also exposes `.prehash(...)`.
745
+ */
746
+ export const slh_dsa_sha2_256s = /* @__PURE__ */ (() => gen(PARAMS['256s'], SHA512_SIMPLE))();
626
747
  //# sourceMappingURL=slh-dsa.js.map
package/slh-dsa.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"slh-dsa.js","sourceRoot":"","sources":["src/slh-dsa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slh-dsa.js","sourceRoot":"","sources":["src/slh-dsa.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,4EAA4E;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,GAEX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,eAAe,EACf,eAAe,EACf,QAAQ,GAMT,MAAM,YAAY,CAAC;AAgCpB,mCAAmC;AACnC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAgC,eAAe,CAAC,CAAC,GAAG,EAAE,CACvE,MAAM,CAAC,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IACtF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IACtF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IACtF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IACtF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IACtF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;CAC9E,CAAC,CAAC,EAAE,CAAC;AAEjB,sFAAsF;AACtF,mGAAmG;AACnG,mGAAmG;AACnG,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;CACF,CAAC;AA8DX,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,OAAO,GAAG,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa;AAC7D,CAAC;AAED,yFAAyF;AACzF,SAAS,eAAe,CAAC,KAAuB;IAC9C,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,sFAAsF;AACtF,SAAS,eAAe,CAAC,CAAkB,EAAE,GAAW;IACtD,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,6FAA6F;AAC7F,gGAAgG;AAChG,kEAAkE;AAClE,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,CAAS,EAAE,EAAE;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CAAC,KAAuB,EAAqB,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACpE,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;gBAChB,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpC,IAAI,IAAI,CAAC,CAAC;YACZ,CAAC;YACD,IAAI,IAAI,CAAC,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;QACvC,CAAC;QACD,OAAO,KAA0B,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc;AAClD,CAAC;AASD;;;;GAIG;AACH,SAAS,GAAG,CAAC,IAAiB,EAAE,SAAgC;IAC9D,MAAM,QAAQ,GAAG,SAA4B,CAAC;IAC9C,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAChE,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEvC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,UAAU,GAAG,EAAE,CAAC;QAChB,YAAY,IAAI,CAAC,CAAC;QAClB,WAAW,IAAI,CAAC,CAAC;QACjB,WAAW,IAAI,EAAE,CAAC;QAClB,eAAe,IAAI,EAAE,CAAC;QACtB,eAAe,IAAI,EAAE,CAAC;QACtB,iBAAiB,IAAI,EAAE,CAAC;QACxB,iBAAiB,IAAI,EAAE,CAAC;QACxB,gBAAgB,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,4FAA4F;IAC5F,6FAA6F;IAC7F,uFAAuF;IACvF,6FAA6F;IAC7F,kFAAkF;IAClF,MAAM,OAAO,GAAG,CACd,IAWE,EACF,OAAmB,IAAI,UAAU,CAAC,UAAU,CAAC,EAC7C,EAAE;QACF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACxE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC1C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;QACpD,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QACjD,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;QACzD,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;QACtD,IAAI,KAAK,KAAK,SAAS;YAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACtE,IAAI,WAAW;YAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,IAAI,KAAK,SAAS;YAAE,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;YAChC,IAAI,WAAW,GAAG,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;YACrD,IAAI,WAAW,GAAG,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,CAAC,GAAqB,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;QAChF,oDAAoD;QACpD,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,0BAA0B;QAC1B,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,mDAAmD;QACnD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,MAAM,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,WAAW,CAAC;IAC9B,MAAM,YAAY,GAAG,UAAU,CAC7B,eAAe,EACf,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EACtB,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EACxB,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAC3B,CAAC;IACF,4FAA4F;IAC5F,iGAAiG;IACjG,MAAM,WAAW,GAAG,CAClB,CAAmB,EACnB,MAAwB,EACxB,GAAqB,EACrB,OAAsB,EACtB,EAAE;QACF,MAAM,UAAU,GAAG,OAAkB,CAAC;QACtC,wCAAwC;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEF,2FAA2F;IAC3F,iGAAiG;IACjG,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,CACf,MAAc,EACd,EAAwF,EACxF,EAAE,CACF,SAAS,UAAU,CACjB,OAAsB,EACtB,OAAe,EACf,SAAiB,EACjB,QAAoB,EACpB,IAAO;QAEP,MAAM,UAAU,GAAG,OAAkB,CAAC;QACtC,MAAM,MAAM,GAAG,EAKA,CAAC;QAChB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,KAAK,IAAI,GAAG,GAAG,CAAC,GAAI,GAAG,EAAE,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,UAAU,GAAG,GAAG,GAAG,SAAS,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,OAAO,GAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClF,IAAI,CAAC,KAAK,MAAM;oBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,oBAAoB;gBACvE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;oBAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB;gBAC7E,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,MAAM;oBAAE,MAAM;gBACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACjE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB;QACtD,CAAC;QACD,aAAa;QACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC,CAAC;IAQJ,MAAM,YAAY,GAAG,QAAQ,CAC3B,WAAW,EACX,CAAC,OAAe,EAAE,UAAkB,EAAE,OAAsB,EAAE,IAAoB,EAAE,EAAE;QACpF,MAAM,UAAU,GAAG,OAAkB,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC5C,2FAA2F;QAC3F,qFAAqF;QACrF,MAAM,SAAS,GAAG,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;YAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,KAAK;oBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;gBACvE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBAAE,MAAM;gBACvB,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,QAAQ,CAC3B,CAAC,EACD,CAAC,CAAS,EAAE,UAAkB,EAAE,OAAsB,EAAE,YAAgC,EAAE,EAAE;QAC1F,MAAM,UAAU,GAAG,OAAkB,CAAC;QACtC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;QACtD,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC,CACF,CAAC;IAEF,2FAA2F;IAC3F,6FAA6F;IAC7F,MAAM,UAAU,GAAG,CACjB,OAAsB,EACtB,QAAoB,EACpB,QAAoB,EACpB,OAAe,EACf,WAA6B,IAAI,UAAU,CAAC,CAAC,CAAC,EACwB,EAAE;QACxE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClD,kBAAkB;QAClB,MAAM,IAAI,GAAG;YACX,OAAO,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC3C,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC;YACjC,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;YAC5C,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;SACrE,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7E,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;YAC/C,OAAO,EAAE,QAAQ;SACsD,CAAC;IAC5E,CAAC,CAAC;IAIF,MAAM,WAAW,GAAG,CAClB,IAAsB,EACtB,OAAe,EACf,SAAiB,EACjB,QAA0B,EAC1B,UAAkB,EAClB,OAAsB,EACtB,IAAgB,EAChB,EAAE;QACF,MAAM,UAAU,GAAG,OAAkB,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,2FAA2F;QAC3F,wFAAwF;QACxF,0FAA0F;QAC1F,qFAAqF;QACrF,aAAa;QACb,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5B,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5B,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,CAAC;QACf,SAAS,MAAM,CAAC,CAAC;QACjB,OAAO;QACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC3C,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC/C,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO;QACP,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,yBAAyB;IAC5F,MAAM,QAAQ,GAAiB,MAAM,CAAC,MAAM,CAAC;QAC3C,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QACjD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,SAAS,EAAE,WAAW,CAAC,QAAQ;YAC/B,SAAS,EAAE,WAAW,CAAC,QAAQ;YAC/B,SAAS,EAAE,QAAQ,CAAC,QAAQ;YAC5B,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,QAAQ,EAAE,CAAC;SACZ,CAAC;QACF,MAAM,CAAC,IAAuB;YAC5B,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjE,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9E,oDAAoD;YACpD,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACnD,8BAA8B;YAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,oDAAoD;YACpD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC/D,OAAO;gBACL,SAAS,EAAE,SAA6B;gBACxC,SAAS,EAAE,SAA6B;aACzC,CAAC;QACJ,CAAC;QACD,YAAY,EAAE,CAAC,SAA2B,EAAoB,EAAE;YAC9D,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5D,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAqB,CAAC;QACjD,CAAC;QACD,IAAI,EAAE,CAAC,GAAqB,EAAE,EAAoB,EAAE,OAAsB,EAAE,EAAE,EAAE;YAC9E,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACpC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;YAChE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3C,8DAA8D;YAC9D,IAAI,MAAM,KAAK,KAAK;gBAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;iBAC5C,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;;gBAClD,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAClB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3C,sBAAsB;YACtB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,kCAAkC;YAChF,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7D,yBAAyB;YACzB,MAAM,QAAQ,GAAG,OAAO,CAAC;gBACvB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI;gBACJ,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,IAAI,GAA+B,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,OAAO,CACL;oBACE,IAAI,EAAE,WAAW,CAAC,OAAO;oBACzB,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS;iBAC9B,EACD,YAAY,CACb,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC1C,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,CACrC,OAAO,EACP,OAAO,CAAC,CAAC,CAAC,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,CACT,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC;gBACzB,IAAI,EAAE,WAAW,CAAC,MAAM;gBACxB,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;YAClE,kBAAkB;YAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,MAAM,IAAI,GAA+B,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,KAAK,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACtC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC/D,MAAM,EACJ,OAAO,EACP,OAAO,EACP,IAAI,EAAE,CAAC,GACR,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACZ,UAAU,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9B,OAAO,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7C,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAClF,OAAO,GAAuB,CAAC;QACjC,CAAC;QACD,MAAM,EAAE,CAAC,GAAqB,EAAE,GAAqB,EAAE,SAA2B,EAAE,EAAE;YACpF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,SAAS,CAAC;YACrB,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACnD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,OAAO,CAAC;gBACvB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI;gBACJ,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;YACH,iBAAiB;YACjB,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,OAAO,CAAC;gBAC3B,IAAI,EAAE,WAAW,CAAC,QAAQ;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;gBACpE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;gBAC/C,gEAAgE;gBAChE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YAC3F,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC;gBACzB,IAAI,EAAE,WAAW,CAAC,MAAM;gBACxB,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YACH,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB;YAClF,iBAAiB;YACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,KAAK,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACtC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC/D,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;gBAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;oBAChC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACjC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBACpD,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;wBAC/B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC1D,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC9E,OAAO,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,QAAQ;QACR,aAAa,EAAE,aAAa;QAC5B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,IAAI,EAAE,CAAC,GAAqB,EAAE,SAA2B,EAAE,OAAsB,EAAE,EAAE,EAAE;YACrF,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9C,UAAU,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,GAAuB,CAAC;QACjC,CAAC;QACD,MAAM,EAAE,CACN,GAAqB,EACrB,GAAqB,EACrB,SAA2B,EAC3B,OAAsB,EAAE,EACxB,EAAE;YACF,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,CAAC,IAAiB,EAAgB,EAAE;YAC3C,SAAS,CAAC,IAAa,EAAE,aAAa,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,IAAa,CAAC;YAC9B,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;gBAC5C,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,IAAI,EAAE,CAAC,GAAqB,EAAE,SAA2B,EAAE,OAAsB,EAAE,EAAE,EAAE;oBACrF,eAAe,CAAC,IAAI,CAAC,CAAC;oBACtB,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC9C,UAAU,CAAC,CAAC,CAAC,CAAC;oBACd,OAAO,GAAuB,CAAC;gBACjC,CAAC;gBACD,MAAM,EAAE,CACN,GAAqB,EACrB,GAAqB,EACrB,SAA2B,EAC3B,OAAsB,EAAE,EACxB,EAAE;oBACF,eAAe,CAAC,IAAI,CAAC,CAAC;oBACtB,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxF,CAAC;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,4FAA4F;AAC5F,oDAAoD;AACpD,MAAM,QAAQ,GACZ,GAAqB,EAAE,CACvB,CAAC,IAAiB,EAAE,EAAE,CACtB,CAAC,OAAyB,EAAE,MAAyB,EAAiB,EAAE;IACtE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IACnB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACnE,6FAA6F;IAC7F,+EAA+E;IAC/E,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,KAAuB,EAAE,IAAgB,EAAoB,EAAE;QAC5F,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,EAAE;aACN,UAAU,CAAC,KAAK,CAAC;aACjB,MAAM,CAAC,IAAI,CAAC;aACZ,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAqB,CAAC;IAChC,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,IAAgB,EAAoB,EAAE;YAC9C,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,OAAO,GAAuB,CAAC;QACjC,CAAC;QACD,MAAM,EAAE,CACN,KAAuB,EACvB,MAAwB,EACxB,GAAqB,EACH,EAAE;YACpB,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC3B,OAAO,QAAQ;iBACZ,MAAM,CAAC,EAAE,CAAC;iBACV,MAAM,CAAC,KAAK,CAAC;iBACb,MAAM,CAAC,MAAM,CAAC;iBACd,MAAM,CAAC,GAAG,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;QACxC,CAAC;QACD,IAAI,EAAE,CACJ,CAAmB,EACnB,EAAoB,EACpB,CAAmB,EACnB,MAAM,EACY,EAAE;YACpB,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3B,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,GAAG,EAAE;YACV,EAAE,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,qBAAqB;QACvB,CAAC;KACe,CAAC;AACrB,CAAC,CAAC;AAEJ,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC3E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;AACvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC3E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;AACvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC3E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;AACvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC3E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;AACvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC3E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;AACvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC3E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;AAGvC,2EAA2E;AAC3E,uFAAuF;AACvF,+EAA+E;AAC/E,MAAM,MAAM,GACV,CAAC,EAAW,EAAE,EAAW,EAAoB,EAAE,CAC/C,CAAC,IAAI,EAAE,EAAE,CACT,CAAC,QAA0B,EAAE,OAA0B,EAAiB,EAAE;IACxE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IACnB;;;;;MAKE;IACF,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,wFAAwF;IACxF,kFAAkF;IAClF,MAAM,IAAI,GAAG,EAAE;SACZ,MAAM,EAAE;SACR,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,EAAE;SACZ,MAAM,EAAE;SACR,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAE3B,6DAA6D;IAC7D,+FAA+F;IAC/F,6FAA6F;IAC7F,oDAAoD;IACpD,SAAS,IAAI,CAAC,IAAsB,EAAE,MAAc,EAAE,IAAa;QACjE,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAChF,aAAa;QACb,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACvD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACnD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAqB,CAAC;IACrD,CAAC;IAED,MAAM,KAAK,GACT,CAAC,CAAU,EAAE,CAAc,EAAE,IAAiB,EAAE,EAAE,CAClD,CAAC,MAAc,EAAE,KAAuB,EAAE,IAAgB,EAAoB,EAAE;QAC9E,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,CAAC;aACR,UAAU,CAAC,IAAW,CAAC;aACvB,MAAM,CAAC,IAAI,CAAC;aACZ,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;aACrC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;IAC9C,CAAC,CAAC;IACJ,OAAO;QACL,OAAO,EAAE,CAAC,IAAgB,EAAoB,EAAE;YAC9C,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5C,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI;iBACb,UAAU,CAAC,KAAY,CAAC;iBACxB,MAAM,CAAC,IAAI,CAAC;iBACZ,MAAM,CAAC,OAAO,CAAC;iBACf,MAAM,EAAE;iBACR,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,OAAO,GAAuB,CAAC;QACjC,CAAC;QACD,MAAM,EAAE,CACN,KAAuB,EACvB,MAAwB,EACxB,GAAqB,EACH,EAAE;YACpB,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC3B,OAAO,IAAI;iBACR,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;iBACjB,MAAM,CAAC,MAAM,CAAC;iBACd,MAAM,CAAC,GAAG,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;QACxC,CAAC;QACD,IAAI,EAAE,CACJ,CAAmB,EACnB,EAAoB,EACpB,CAAmB,EACnB,MAAM,EACY,EAAE;YACpB,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,WAAW,CACtB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAChB,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EACjB,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CACnE,CAAC;YACF,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC;QAC9B,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,qBAAqB;QACvB,CAAC;KACe,CAAC;AACrB,CAAC,CAAC;AAEJ,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CACnC,CAAC,CAAC,EAAE,CAAC;AACN,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CACnC,CAAC,CAAC,EAAE,CAAC;AAEN;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,eAAe,CAAC,CAAC,GAAG,EAAE,CAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC"}