render-tag 0.1.6 → 0.1.8

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.
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Minimal SVG path 'd' attribute parser + arc-length tabulation.
3
+ * Supports: M m L l H h V v C c S s Q q T t A a Z z.
4
+ *
5
+ * Curves are sampled uniformly in parameter space and the cumulative
6
+ * arc-length is tabulated. `getPointAtLength` binary-searches that table
7
+ * and lerps between adjacent samples. Accuracy is "good enough for visual
8
+ * rendering" — not for hit-testing or precise length math.
9
+ */
10
+ // ─── Tokenizer ─────────────────────────────────────────────────────────
11
+ const COMMAND_RE = /[MmLlHhVvCcSsQqTtAaZz]/;
12
+ const NUMBER_RE = /-?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-+]?\d+)?/g;
13
+ /** Split a path string into a sequence of (command, args) tuples. */
14
+ function tokenize(d) {
15
+ const out = [];
16
+ let i = 0;
17
+ while (i < d.length) {
18
+ const c = d[i];
19
+ if (COMMAND_RE.test(c)) {
20
+ // Slice until the next command
21
+ let j = i + 1;
22
+ while (j < d.length && !COMMAND_RE.test(d[j]))
23
+ j++;
24
+ const argString = d.slice(i + 1, j);
25
+ const args = [];
26
+ let m;
27
+ NUMBER_RE.lastIndex = 0;
28
+ while ((m = NUMBER_RE.exec(argString)))
29
+ args.push(Number(m[0]));
30
+ out.push({ cmd: c, args });
31
+ i = j;
32
+ }
33
+ else {
34
+ i++;
35
+ }
36
+ }
37
+ return out;
38
+ }
39
+ // ─── Normalize to absolute segments ───────────────────────────────────
40
+ /**
41
+ * Parse path data into an array of normalized absolute-coordinate segments.
42
+ * Drops moveTo commands (they don't draw); inserts a closing line for Z.
43
+ */
44
+ export function parsePathData(d) {
45
+ const tokens = tokenize(d);
46
+ const segs = [];
47
+ let cx = 0, cy = 0; // current point
48
+ let sx = 0, sy = 0; // subpath start
49
+ // Last cubic control reflection point (for S/s)
50
+ let lastCubicCtrl = null;
51
+ // Last quadratic control reflection point (for T/t)
52
+ let lastQuadCtrl = null;
53
+ for (const tok of tokens) {
54
+ const cmd = tok.cmd;
55
+ const upper = cmd.toUpperCase();
56
+ const rel = cmd !== upper;
57
+ const a = tok.args;
58
+ // Helpers
59
+ const ax = (v) => (rel ? cx + v : v);
60
+ const ay = (v) => (rel ? cy + v : v);
61
+ let resetCubic = true;
62
+ let resetQuad = true;
63
+ switch (upper) {
64
+ case 'M': {
65
+ // M arglist: first pair = moveto, subsequent pairs = lineto
66
+ for (let i = 0; i < a.length; i += 2) {
67
+ const x = rel && i > 0 ? cx + a[i] : ax(a[i]);
68
+ const y = rel && i > 0 ? cy + a[i + 1] : ay(a[i + 1]);
69
+ if (i === 0) {
70
+ cx = x;
71
+ cy = y;
72
+ sx = x;
73
+ sy = y;
74
+ }
75
+ else {
76
+ segs.push({ type: 'L', x0: cx, y0: cy, x1: x, y1: y });
77
+ cx = x;
78
+ cy = y;
79
+ }
80
+ }
81
+ break;
82
+ }
83
+ case 'L': {
84
+ for (let i = 0; i < a.length; i += 2) {
85
+ const x = ax(a[i]);
86
+ const y = ay(a[i + 1]);
87
+ segs.push({ type: 'L', x0: cx, y0: cy, x1: x, y1: y });
88
+ cx = x;
89
+ cy = y;
90
+ }
91
+ break;
92
+ }
93
+ case 'H': {
94
+ for (let i = 0; i < a.length; i++) {
95
+ const x = rel ? cx + a[i] : a[i];
96
+ segs.push({ type: 'L', x0: cx, y0: cy, x1: x, y1: cy });
97
+ cx = x;
98
+ }
99
+ break;
100
+ }
101
+ case 'V': {
102
+ for (let i = 0; i < a.length; i++) {
103
+ const y = rel ? cy + a[i] : a[i];
104
+ segs.push({ type: 'L', x0: cx, y0: cy, x1: cx, y1: y });
105
+ cy = y;
106
+ }
107
+ break;
108
+ }
109
+ case 'C': {
110
+ for (let i = 0; i < a.length; i += 6) {
111
+ const c1x = ax(a[i]);
112
+ const c1y = ay(a[i + 1]);
113
+ const c2x = ax(a[i + 2]);
114
+ const c2y = ay(a[i + 3]);
115
+ const x = ax(a[i + 4]);
116
+ const y = ay(a[i + 5]);
117
+ segs.push({ type: 'C', x0: cx, y0: cy, c1x, c1y, c2x, c2y, x1: x, y1: y });
118
+ lastCubicCtrl = { x: c2x, y: c2y };
119
+ cx = x;
120
+ cy = y;
121
+ }
122
+ resetCubic = false;
123
+ break;
124
+ }
125
+ case 'S': {
126
+ for (let i = 0; i < a.length; i += 4) {
127
+ // Reflect previous cubic c2 about current point. If previous was not C/S, use cx,cy.
128
+ const c1x = lastCubicCtrl ? 2 * cx - lastCubicCtrl.x : cx;
129
+ const c1y = lastCubicCtrl ? 2 * cy - lastCubicCtrl.y : cy;
130
+ const c2x = ax(a[i]);
131
+ const c2y = ay(a[i + 1]);
132
+ const x = ax(a[i + 2]);
133
+ const y = ay(a[i + 3]);
134
+ segs.push({ type: 'C', x0: cx, y0: cy, c1x, c1y, c2x, c2y, x1: x, y1: y });
135
+ lastCubicCtrl = { x: c2x, y: c2y };
136
+ cx = x;
137
+ cy = y;
138
+ }
139
+ resetCubic = false;
140
+ break;
141
+ }
142
+ case 'Q': {
143
+ for (let i = 0; i < a.length; i += 4) {
144
+ const ctlx = ax(a[i]);
145
+ const ctly = ay(a[i + 1]);
146
+ const x = ax(a[i + 2]);
147
+ const y = ay(a[i + 3]);
148
+ segs.push({ type: 'Q', x0: cx, y0: cy, cx: ctlx, cy: ctly, x1: x, y1: y });
149
+ lastQuadCtrl = { x: ctlx, y: ctly };
150
+ cx = x;
151
+ cy = y;
152
+ }
153
+ resetQuad = false;
154
+ break;
155
+ }
156
+ case 'T': {
157
+ for (let i = 0; i < a.length; i += 2) {
158
+ const ctlx = lastQuadCtrl ? 2 * cx - lastQuadCtrl.x : cx;
159
+ const ctly = lastQuadCtrl ? 2 * cy - lastQuadCtrl.y : cy;
160
+ const x = ax(a[i]);
161
+ const y = ay(a[i + 1]);
162
+ segs.push({ type: 'Q', x0: cx, y0: cy, cx: ctlx, cy: ctly, x1: x, y1: y });
163
+ lastQuadCtrl = { x: ctlx, y: ctly };
164
+ cx = x;
165
+ cy = y;
166
+ }
167
+ resetQuad = false;
168
+ break;
169
+ }
170
+ case 'A': {
171
+ for (let i = 0; i < a.length; i += 7) {
172
+ const rx = a[i];
173
+ const ry = a[i + 1];
174
+ const xAxisRotation = a[i + 2];
175
+ const largeArc = a[i + 3] !== 0;
176
+ const sweep = a[i + 4] !== 0;
177
+ const x = ax(a[i + 5]);
178
+ const y = ay(a[i + 6]);
179
+ // SVG spec §B.2.5: arcs with rx=0 or ry=0 degenerate to a straight
180
+ // line, and arcs whose endpoints coincide are not rendered at all
181
+ // (skip emitting a segment). Without these guards arcToCenter
182
+ // produces NaN sample points, poisoning the entire path.
183
+ if (rx === 0 || ry === 0) {
184
+ if (cx !== x || cy !== y) {
185
+ segs.push({ type: 'L', x0: cx, y0: cy, x1: x, y1: y });
186
+ }
187
+ }
188
+ else if (cx === x && cy === y) {
189
+ // identical endpoints — skip
190
+ }
191
+ else {
192
+ segs.push({
193
+ type: 'A', x0: cx, y0: cy, rx, ry, xAxisRotation, largeArc, sweep,
194
+ x1: x, y1: y,
195
+ });
196
+ }
197
+ cx = x;
198
+ cy = y;
199
+ }
200
+ break;
201
+ }
202
+ case 'Z': {
203
+ if (cx !== sx || cy !== sy) {
204
+ segs.push({ type: 'L', x0: cx, y0: cy, x1: sx, y1: sy });
205
+ }
206
+ cx = sx;
207
+ cy = sy;
208
+ break;
209
+ }
210
+ default:
211
+ break;
212
+ }
213
+ if (resetCubic)
214
+ lastCubicCtrl = null;
215
+ if (resetQuad)
216
+ lastQuadCtrl = null;
217
+ }
218
+ return segs;
219
+ }
220
+ // ─── Curve evaluation + length tabulation ─────────────────────────────
221
+ function evalCubic(s, t) {
222
+ const mt = 1 - t;
223
+ const mt2 = mt * mt;
224
+ const t2 = t * t;
225
+ return {
226
+ x: mt * mt2 * s.x0 + 3 * mt2 * t * s.c1x + 3 * mt * t2 * s.c2x + t2 * t * s.x1,
227
+ y: mt * mt2 * s.y0 + 3 * mt2 * t * s.c1y + 3 * mt * t2 * s.c2y + t2 * t * s.y1,
228
+ };
229
+ }
230
+ function evalQuadratic(s, t) {
231
+ const mt = 1 - t;
232
+ return {
233
+ x: mt * mt * s.x0 + 2 * mt * t * s.cx + t * t * s.x1,
234
+ y: mt * mt * s.y0 + 2 * mt * t * s.cy + t * t * s.y1,
235
+ };
236
+ }
237
+ /**
238
+ * Endpoint-to-center arc conversion (SVG spec).
239
+ * Returns { cx, cy, theta1, deltaTheta } in the rotated frame.
240
+ */
241
+ function arcToCenter(s) {
242
+ let rx = Math.abs(s.rx);
243
+ let ry = Math.abs(s.ry);
244
+ const phi = (s.xAxisRotation * Math.PI) / 180;
245
+ const cosPhi = Math.cos(phi);
246
+ const sinPhi = Math.sin(phi);
247
+ const dx = (s.x0 - s.x1) / 2;
248
+ const dy = (s.y0 - s.y1) / 2;
249
+ const x1p = cosPhi * dx + sinPhi * dy;
250
+ const y1p = -sinPhi * dx + cosPhi * dy;
251
+ // Ensure radii are large enough
252
+ const lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);
253
+ if (lambda > 1) {
254
+ const s2 = Math.sqrt(lambda);
255
+ rx *= s2;
256
+ ry *= s2;
257
+ }
258
+ const sign = s.largeArc === s.sweep ? -1 : 1;
259
+ const num = rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p;
260
+ const den = rx * rx * y1p * y1p + ry * ry * x1p * x1p;
261
+ const factor = Math.sqrt(Math.max(0, num / den));
262
+ const cxp = sign * factor * ((rx * y1p) / ry);
263
+ const cyp = sign * factor * (-(ry * x1p) / rx);
264
+ const cx = cosPhi * cxp - sinPhi * cyp + (s.x0 + s.x1) / 2;
265
+ const cy = sinPhi * cxp + cosPhi * cyp + (s.y0 + s.y1) / 2;
266
+ const angle = (ux, uy, vx, vy) => {
267
+ const dot = ux * vx + uy * vy;
268
+ const len = Math.sqrt((ux * ux + uy * uy) * (vx * vx + vy * vy));
269
+ let ang = Math.acos(Math.min(1, Math.max(-1, dot / len)));
270
+ if (ux * vy - uy * vx < 0)
271
+ ang = -ang;
272
+ return ang;
273
+ };
274
+ const theta1 = angle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);
275
+ let deltaTheta = angle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry);
276
+ deltaTheta = deltaTheta % (2 * Math.PI);
277
+ if (!s.sweep && deltaTheta > 0)
278
+ deltaTheta -= 2 * Math.PI;
279
+ else if (s.sweep && deltaTheta < 0)
280
+ deltaTheta += 2 * Math.PI;
281
+ return { cx, cy, rx, ry, phi, theta1, deltaTheta, cosPhi, sinPhi };
282
+ }
283
+ function evalArc(s, t) {
284
+ const { cx, cy, rx, ry, cosPhi, sinPhi, theta1, deltaTheta } = arcToCenter(s);
285
+ const theta = theta1 + t * deltaTheta;
286
+ const px = rx * Math.cos(theta);
287
+ const py = ry * Math.sin(theta);
288
+ return {
289
+ x: cosPhi * px - sinPhi * py + cx,
290
+ y: sinPhi * px + cosPhi * py + cy,
291
+ };
292
+ }
293
+ const CURVE_SAMPLES = 40;
294
+ /**
295
+ * Build a PathLike interface from normalized segments.
296
+ * Tabulates cumulative arc-length per segment for O(log N) length-to-point lookup.
297
+ */
298
+ export function buildPathLike(segs) {
299
+ const entries = [];
300
+ let totalLen = 0;
301
+ for (const seg of segs) {
302
+ if (seg.type === 'L') {
303
+ const len = Math.hypot(seg.x1 - seg.x0, seg.y1 - seg.y0);
304
+ entries.push({ startLen: totalLen, length: len, seg });
305
+ totalLen += len;
306
+ continue;
307
+ }
308
+ // Sample CURVE_SAMPLES + 1 points and accumulate cumulative arc length.
309
+ const samples = [];
310
+ let cumLen = 0;
311
+ let prev;
312
+ if (seg.type === 'C')
313
+ prev = { x: seg.x0, y: seg.y0 };
314
+ else if (seg.type === 'Q')
315
+ prev = { x: seg.x0, y: seg.y0 };
316
+ else
317
+ prev = evalArc(seg, 0);
318
+ samples.push({ t: 0, len: 0 });
319
+ for (let i = 1; i <= CURVE_SAMPLES; i++) {
320
+ const t = i / CURVE_SAMPLES;
321
+ let p;
322
+ if (seg.type === 'C')
323
+ p = evalCubic(seg, t);
324
+ else if (seg.type === 'Q')
325
+ p = evalQuadratic(seg, t);
326
+ else
327
+ p = evalArc(seg, t);
328
+ cumLen += Math.hypot(p.x - prev.x, p.y - prev.y);
329
+ samples.push({ t, len: cumLen });
330
+ prev = p;
331
+ }
332
+ entries.push({ startLen: totalLen, length: cumLen, seg, samples });
333
+ totalLen += cumLen;
334
+ }
335
+ function getPointAtLength(t) {
336
+ // Reject NaN / Infinity — `t < 0` etc. silently pass NaN through.
337
+ if (!Number.isFinite(t))
338
+ return null;
339
+ if (t < 0 || t > totalLen + 1e-6)
340
+ return null;
341
+ if (t === 0 && entries.length > 0) {
342
+ const first = entries[0].seg;
343
+ if (first.type === 'L' || first.type === 'C' || first.type === 'Q') {
344
+ return { x: first.x0, y: first.y0 };
345
+ }
346
+ return evalArc(first, 0);
347
+ }
348
+ // Find the segment via linear scan (segment count is usually small).
349
+ // Could binary-search for very large paths.
350
+ for (let i = 0; i < entries.length; i++) {
351
+ const e = entries[i];
352
+ if (t > e.startLen + e.length + 1e-6)
353
+ continue;
354
+ const local = t - e.startLen;
355
+ if (e.seg.type === 'L') {
356
+ const frac = e.length === 0 ? 0 : Math.max(0, Math.min(1, local / e.length));
357
+ return {
358
+ x: e.seg.x0 + (e.seg.x1 - e.seg.x0) * frac,
359
+ y: e.seg.y0 + (e.seg.y1 - e.seg.y0) * frac,
360
+ };
361
+ }
362
+ // Binary search the sample table for the bracketing pair.
363
+ const samples = e.samples;
364
+ let lo = 0, hi = samples.length - 1;
365
+ while (hi - lo > 1) {
366
+ const mid = (lo + hi) >> 1;
367
+ if (samples[mid].len <= local)
368
+ lo = mid;
369
+ else
370
+ hi = mid;
371
+ }
372
+ const a = samples[lo];
373
+ const b = samples[hi];
374
+ const span = b.len - a.len;
375
+ const frac = span === 0 ? 0 : (local - a.len) / span;
376
+ // Clamp to [0, 1] — float drift in the polyline-sum vs true arc length
377
+ // can push frac past 1.0 when t lands just past the last sample.
378
+ const tt = Math.max(0, Math.min(1, a.t + (b.t - a.t) * frac));
379
+ if (e.seg.type === 'C')
380
+ return evalCubic(e.seg, tt);
381
+ if (e.seg.type === 'Q')
382
+ return evalQuadratic(e.seg, tt);
383
+ return evalArc(e.seg, tt);
384
+ }
385
+ return null;
386
+ }
387
+ return { length: totalLen, getPointAtLength };
388
+ }
389
+ /** Convenience: parse a path string and build a PathLike in one call. */
390
+ export function pathFromString(d) {
391
+ return buildPathLike(parsePathData(d));
392
+ }
393
+ //# sourceMappingURL=svg-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-path.js","sourceRoot":"","sources":["../../src/path/svg-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsCH,0EAA0E;AAE1E,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAC5C,MAAM,SAAS,GAAG,kDAAkD,CAAC;AAErE,qEAAqE;AACrE,SAAS,QAAQ,CAAC,CAAS;IACzB,MAAM,GAAG,GAAsC,EAAE,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,+BAA+B;YAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,CAAC,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,CAAyB,CAAC;YAC9B,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3B,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACN,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yEAAyE;AAEzE;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAU,EAAE,CAAC;IAEvB,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB;IACpC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB;IACpC,gDAAgD;IAChD,IAAI,aAAa,GAAoC,IAAI,CAAC;IAC1D,oDAAoD;IACpD,IAAI,YAAY,GAAoC,IAAI,CAAC;IAEzD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,KAAK,KAAK,CAAC;QAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;QAEnB,UAAU;QACV,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,4DAA4D;gBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9C,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACtD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBACZ,EAAE,GAAG,CAAC,CAAC;wBAAC,EAAE,GAAG,CAAC,CAAC;wBACf,EAAE,GAAG,CAAC,CAAC;wBAAC,EAAE,GAAG,CAAC,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;wBACvD,EAAE,GAAG,CAAC,CAAC;wBAAC,EAAE,GAAG,CAAC,CAAC;oBACjB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvD,EAAE,GAAG,CAAC,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxD,EAAE,GAAG,CAAC,CAAC;gBACT,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBACxD,EAAE,GAAG,CAAC,CAAC;gBACT,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC3E,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;oBACnC,EAAE,GAAG,CAAC,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,qFAAqF;oBACrF,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC3E,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;oBACnC,EAAE,GAAG,CAAC,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC3E,YAAY,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;oBACpC,EAAE,GAAG,CAAC,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC3E,YAAY,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;oBACpC,EAAE,GAAG,CAAC,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpB,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;oBAChC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvB,mEAAmE;oBACnE,kEAAkE;oBAClE,8DAA8D;oBAC9D,yDAAyD;oBACzD,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;wBACzB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;4BACzB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;wBACzD,CAAC;oBACH,CAAC;yBAAM,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;wBAChC,6BAA6B;oBAC/B,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK;4BACjE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;yBACb,CAAC,CAAC;oBACL,CAAC;oBACD,EAAE,GAAG,CAAC,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,EAAE,GAAG,EAAE,CAAC;gBAAC,EAAE,GAAG,EAAE,CAAC;gBACjB,MAAM;YACR,CAAC;YACD;gBACE,MAAM;QACV,CAAC;QAED,IAAI,UAAU;YAAE,aAAa,GAAG,IAAI,CAAC;QACrC,IAAI,SAAS;YAAE,YAAY,GAAG,IAAI,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yEAAyE;AAEzE,SAAS,SAAS,CAAC,CAA8B,EAAE,CAAS;IAC1D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO;QACL,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;QAC9E,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;KAC/E,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,CAA8B,EAAE,CAAS;IAC9D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO;QACL,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;QACpD,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;KACrD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,CAA8B;IACjD,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxB,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,GAAG,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;IAEvC,gCAAgC;IAChC,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,EAAE,IAAI,EAAE,CAAC;QACT,EAAE,IAAI,EAAE,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1E,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAE/C,MAAM,EAAE,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE;QAC/D,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,GAAG,GAAG,CAAC,GAAG,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/D,IAAI,UAAU,GAAG,KAAK,CACpB,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,EAClC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CACrC,CAAC;IACF,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC;QAAE,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;SACrD,IAAI,CAAC,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC;QAAE,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAE9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,OAAO,CAAC,CAA8B,EAAE,CAAS;IACxD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC;IACtC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO;QACL,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE;QACjC,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,EAAE,CAAC;AAYzB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAW;IACvC,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,QAAQ,IAAI,GAAG,CAAC;YAChB,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,MAAM,OAAO,GAAiC,EAAE,CAAC;QACjD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAW,CAAC;QAChB,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;YAAE,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;aACjD,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;YAAE,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;;YACtD,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;YAC5B,IAAI,CAAQ,CAAC;YACb,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;gBAAE,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBACvC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;gBAAE,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;gBAChD,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACjC,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,QAAQ,IAAI,MAAM,CAAC;IACrB,CAAC;IAED,SAAS,gBAAgB,CAAC,CAAS;QACjC,kEAAkE;QAClE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACnE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YACtC,CAAC;YACD,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,qEAAqE;QACrE,4CAA4C;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;gBAAE,SAAS;YAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7E,OAAO;oBACL,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;oBAC1C,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;iBAC3C,CAAC;YACJ,CAAC;YACD,0DAA0D;YAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,OAAQ,CAAC;YAC3B,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACpC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK;oBAAE,EAAE,GAAG,GAAG,CAAC;;oBACnC,EAAE,GAAG,GAAG,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACrD,uEAAuE;YACvE,iEAAiE;YACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG;gBAAE,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG;gBAAE,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AAChD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}