@xterm/addon-image 0.7.0-beta.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.
@@ -0,0 +1,552 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) 2020 The xterm.js authors. All rights reserved.
4
+ * @license MIT
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ImageStorage = exports.CELL_SIZE_DEFAULT = void 0;
8
+ const ImageRenderer_1 = require("./ImageRenderer");
9
+ // fallback default cell size
10
+ exports.CELL_SIZE_DEFAULT = {
11
+ width: 7,
12
+ height: 14
13
+ };
14
+ /**
15
+ * Extend extended attribute to also hold image tile information.
16
+ *
17
+ * Object definition is copied from base repo to fully mimick its behavior.
18
+ * Image data is added as additional public properties `imageId` and `tileId`.
19
+ */
20
+ class ExtendedAttrsImage {
21
+ get ext() {
22
+ if (this._urlId) {
23
+ return ((this._ext & ~469762048 /* ExtFlags.UNDERLINE_STYLE */) |
24
+ (this.underlineStyle << 26));
25
+ }
26
+ return this._ext;
27
+ }
28
+ set ext(value) { this._ext = value; }
29
+ get underlineStyle() {
30
+ // Always return the URL style if it has one
31
+ if (this._urlId) {
32
+ return 5 /* UnderlineStyle.DASHED */;
33
+ }
34
+ return (this._ext & 469762048 /* ExtFlags.UNDERLINE_STYLE */) >> 26;
35
+ }
36
+ set underlineStyle(value) {
37
+ this._ext &= ~469762048 /* ExtFlags.UNDERLINE_STYLE */;
38
+ this._ext |= (value << 26) & 469762048 /* ExtFlags.UNDERLINE_STYLE */;
39
+ }
40
+ get underlineColor() {
41
+ return this._ext & (50331648 /* Attributes.CM_MASK */ | 16777215 /* Attributes.RGB_MASK */);
42
+ }
43
+ set underlineColor(value) {
44
+ this._ext &= ~(50331648 /* Attributes.CM_MASK */ | 16777215 /* Attributes.RGB_MASK */);
45
+ this._ext |= value & (50331648 /* Attributes.CM_MASK */ | 16777215 /* Attributes.RGB_MASK */);
46
+ }
47
+ get urlId() {
48
+ return this._urlId;
49
+ }
50
+ set urlId(value) {
51
+ this._urlId = value;
52
+ }
53
+ constructor(ext = 0, urlId = 0, imageId = -1, tileId = -1) {
54
+ this.imageId = imageId;
55
+ this.tileId = tileId;
56
+ this._ext = 0;
57
+ this._urlId = 0;
58
+ this._ext = ext;
59
+ this._urlId = urlId;
60
+ }
61
+ clone() {
62
+ /**
63
+ * Technically we dont need a clone variant of ExtendedAttrsImage,
64
+ * as we never clone a cell holding image data.
65
+ * Note: Clone is only meant to be used by the InputHandler for
66
+ * sticky attributes, which is never the case for image data.
67
+ * We still provide a proper clone method to reflect the full ext attr
68
+ * state in case there are future use cases for clone.
69
+ */
70
+ return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);
71
+ }
72
+ isEmpty() {
73
+ return this.underlineStyle === 0 /* UnderlineStyle.NONE */ && this._urlId === 0 && this.imageId === -1;
74
+ }
75
+ }
76
+ const EMPTY_ATTRS = new ExtendedAttrsImage();
77
+ /**
78
+ * ImageStorage - extension of CoreTerminal:
79
+ * - hold image data
80
+ * - write/read image data to/from buffer
81
+ *
82
+ * TODO: image composition for overwrites
83
+ */
84
+ class ImageStorage {
85
+ constructor(_terminal, _renderer, _opts) {
86
+ this._terminal = _terminal;
87
+ this._renderer = _renderer;
88
+ this._opts = _opts;
89
+ // storage
90
+ this._images = new Map();
91
+ // last used id
92
+ this._lastId = 0;
93
+ // last evicted id
94
+ this._lowestId = 0;
95
+ // whether a full clear happened before
96
+ this._fullyCleared = false;
97
+ // whether render should do a full clear
98
+ this._needsFullClear = false;
99
+ // hard limit of stored pixels (fallback limit of 10 MB)
100
+ this._pixelLimit = 2500000;
101
+ try {
102
+ this.setLimit(this._opts.storageLimit);
103
+ }
104
+ catch (e) {
105
+ console.error(e.message);
106
+ console.warn(`storageLimit is set to ${this.getLimit()} MB`);
107
+ }
108
+ this._viewportMetrics = {
109
+ cols: this._terminal.cols,
110
+ rows: this._terminal.rows
111
+ };
112
+ }
113
+ dispose() {
114
+ this.reset();
115
+ }
116
+ reset() {
117
+ var _a;
118
+ for (const spec of this._images.values()) {
119
+ (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
120
+ }
121
+ // NOTE: marker.dispose above already calls ImageBitmap.close
122
+ // therefore we can just wipe the map here
123
+ this._images.clear();
124
+ this._renderer.clearAll();
125
+ }
126
+ getLimit() {
127
+ return this._pixelLimit * 4 / 1000000;
128
+ }
129
+ setLimit(value) {
130
+ if (value < 0.5 || value > 1000) {
131
+ throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');
132
+ }
133
+ this._pixelLimit = (value / 4 * 1000000) >>> 0;
134
+ this._evictOldest(0);
135
+ }
136
+ getUsage() {
137
+ return this._getStoredPixels() * 4 / 1000000;
138
+ }
139
+ _getStoredPixels() {
140
+ let storedPixels = 0;
141
+ for (const spec of this._images.values()) {
142
+ if (spec.orig) {
143
+ storedPixels += spec.orig.width * spec.orig.height;
144
+ if (spec.actual && spec.actual !== spec.orig) {
145
+ storedPixels += spec.actual.width * spec.actual.height;
146
+ }
147
+ }
148
+ }
149
+ return storedPixels;
150
+ }
151
+ _delImg(id) {
152
+ const spec = this._images.get(id);
153
+ this._images.delete(id);
154
+ // FIXME: really ugly workaround to get bitmaps deallocated :(
155
+ if (spec && window.ImageBitmap && spec.orig instanceof ImageBitmap) {
156
+ spec.orig.close();
157
+ }
158
+ }
159
+ /**
160
+ * Wipe canvas and images on alternate buffer.
161
+ */
162
+ wipeAlternate() {
163
+ var _a;
164
+ // remove all alternate tagged images
165
+ const zero = [];
166
+ for (const [id, spec] of this._images.entries()) {
167
+ if (spec.bufferType === 'alternate') {
168
+ (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
169
+ zero.push(id);
170
+ }
171
+ }
172
+ for (const id of zero) {
173
+ this._delImg(id);
174
+ }
175
+ // mark canvas to be wiped on next render
176
+ this._needsFullClear = true;
177
+ this._fullyCleared = false;
178
+ }
179
+ /**
180
+ * Only advance text cursor.
181
+ * This is an edge case from empty sixels carrying only a height but no pixels.
182
+ * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.
183
+ */
184
+ advanceCursor(height) {
185
+ if (this._opts.sixelScrolling) {
186
+ let cellSize = this._renderer.cellSize;
187
+ if (cellSize.width === -1 || cellSize.height === -1) {
188
+ cellSize = exports.CELL_SIZE_DEFAULT;
189
+ }
190
+ const rows = Math.ceil(height / cellSize.height);
191
+ for (let i = 1; i < rows; ++i) {
192
+ this._terminal._core._inputHandler.lineFeed();
193
+ }
194
+ }
195
+ }
196
+ /**
197
+ * Method to add an image to the storage.
198
+ */
199
+ addImage(img) {
200
+ var _a;
201
+ // never allow storage to exceed memory limit
202
+ this._evictOldest(img.width * img.height);
203
+ // calc rows x cols needed to display the image
204
+ let cellSize = this._renderer.cellSize;
205
+ if (cellSize.width === -1 || cellSize.height === -1) {
206
+ cellSize = exports.CELL_SIZE_DEFAULT;
207
+ }
208
+ const cols = Math.ceil(img.width / cellSize.width);
209
+ const rows = Math.ceil(img.height / cellSize.height);
210
+ const imageId = ++this._lastId;
211
+ const buffer = this._terminal._core.buffer;
212
+ const termCols = this._terminal.cols;
213
+ const termRows = this._terminal.rows;
214
+ const originX = buffer.x;
215
+ const originY = buffer.y;
216
+ let offset = originX;
217
+ let tileCount = 0;
218
+ if (!this._opts.sixelScrolling) {
219
+ buffer.x = 0;
220
+ buffer.y = 0;
221
+ offset = 0;
222
+ }
223
+ this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);
224
+ for (let row = 0; row < rows; ++row) {
225
+ const line = buffer.lines.get(buffer.y + buffer.ybase);
226
+ for (let col = 0; col < cols; ++col) {
227
+ if (offset + col >= termCols)
228
+ break;
229
+ this._writeToCell(line, offset + col, imageId, row * cols + col);
230
+ tileCount++;
231
+ }
232
+ if (this._opts.sixelScrolling) {
233
+ if (row < rows - 1)
234
+ this._terminal._core._inputHandler.lineFeed();
235
+ }
236
+ else {
237
+ if (++buffer.y >= termRows)
238
+ break;
239
+ }
240
+ buffer.x = offset;
241
+ }
242
+ this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);
243
+ // cursor positioning modes
244
+ if (this._opts.sixelScrolling) {
245
+ buffer.x = offset;
246
+ }
247
+ else {
248
+ buffer.x = originX;
249
+ buffer.y = originY;
250
+ }
251
+ // deleted images with zero tile count
252
+ const zero = [];
253
+ for (const [id, spec] of this._images.entries()) {
254
+ if (spec.tileCount < 1) {
255
+ (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
256
+ zero.push(id);
257
+ }
258
+ }
259
+ for (const id of zero) {
260
+ this._delImg(id);
261
+ }
262
+ // eviction marker:
263
+ // delete the image when the marker gets disposed
264
+ const endMarker = this._terminal.registerMarker(0);
265
+ endMarker === null || endMarker === void 0 ? void 0 : endMarker.onDispose(() => {
266
+ const spec = this._images.get(imageId);
267
+ if (spec) {
268
+ this._delImg(imageId);
269
+ }
270
+ });
271
+ // since markers do not work on alternate for some reason,
272
+ // we evict images here manually
273
+ if (this._terminal.buffer.active.type === 'alternate') {
274
+ this._evictOnAlternate();
275
+ }
276
+ // create storage entry
277
+ const imgSpec = {
278
+ orig: img,
279
+ origCellSize: cellSize,
280
+ actual: img,
281
+ actualCellSize: Object.assign({}, cellSize),
282
+ marker: endMarker || undefined,
283
+ tileCount,
284
+ bufferType: this._terminal.buffer.active.type
285
+ };
286
+ // finally add the image
287
+ this._images.set(imageId, imgSpec);
288
+ }
289
+ /**
290
+ * Render method. Collects buffer information and triggers
291
+ * canvas updates.
292
+ */
293
+ // TODO: Should we move this to the ImageRenderer?
294
+ render(range) {
295
+ // setup image canvas in case we have none yet, but have images in store
296
+ if (!this._renderer.canvas && this._images.size) {
297
+ this._renderer.insertLayerToDom();
298
+ // safety measure - in case we cannot spawn a canvas at all, just exit
299
+ if (!this._renderer.canvas) {
300
+ return;
301
+ }
302
+ }
303
+ // rescale if needed
304
+ this._renderer.rescaleCanvas();
305
+ // exit early if we dont have any images to test for
306
+ if (!this._images.size) {
307
+ if (!this._fullyCleared) {
308
+ this._renderer.clearAll();
309
+ this._fullyCleared = true;
310
+ this._needsFullClear = false;
311
+ }
312
+ if (this._renderer.canvas) {
313
+ this._renderer.removeLayerFromDom();
314
+ }
315
+ return;
316
+ }
317
+ // buffer switches force a full clear
318
+ if (this._needsFullClear) {
319
+ this._renderer.clearAll();
320
+ this._fullyCleared = true;
321
+ this._needsFullClear = false;
322
+ }
323
+ const { start, end } = range;
324
+ const buffer = this._terminal._core.buffer;
325
+ const cols = this._terminal._core.cols;
326
+ // clear drawing area
327
+ this._renderer.clearLines(start, end);
328
+ // walk all cells in viewport and draw tiles found
329
+ for (let row = start; row <= end; ++row) {
330
+ const line = buffer.lines.get(row + buffer.ydisp);
331
+ if (!line)
332
+ return;
333
+ for (let col = 0; col < cols; ++col) {
334
+ if (line.getBg(col) & 268435456 /* BgFlags.HAS_EXTENDED */) {
335
+ let e = line._extendedAttrs[col] || EMPTY_ATTRS;
336
+ const imageId = e.imageId;
337
+ if (imageId === undefined || imageId === -1) {
338
+ continue;
339
+ }
340
+ const imgSpec = this._images.get(imageId);
341
+ if (e.tileId !== -1) {
342
+ const startTile = e.tileId;
343
+ const startCol = col;
344
+ let count = 1;
345
+ /**
346
+ * merge tiles to the right into a single draw call, if:
347
+ * - not at end of line
348
+ * - cell has same image id
349
+ * - cell has consecutive tile id
350
+ */
351
+ while (++col < cols
352
+ && (line.getBg(col) & 268435456 /* BgFlags.HAS_EXTENDED */)
353
+ && (e = line._extendedAttrs[col] || EMPTY_ATTRS)
354
+ && (e.imageId === imageId)
355
+ && (e.tileId === startTile + count)) {
356
+ count++;
357
+ }
358
+ col--;
359
+ if (imgSpec) {
360
+ if (imgSpec.actual) {
361
+ this._renderer.draw(imgSpec, startTile, startCol, row, count);
362
+ }
363
+ }
364
+ else if (this._opts.showPlaceholder) {
365
+ this._renderer.drawPlaceholder(startCol, row, count);
366
+ }
367
+ this._fullyCleared = false;
368
+ }
369
+ }
370
+ }
371
+ }
372
+ }
373
+ viewportResize(metrics) {
374
+ var _a;
375
+ // exit early if we have nothing in storage
376
+ if (!this._images.size) {
377
+ this._viewportMetrics = metrics;
378
+ return;
379
+ }
380
+ // handle only viewport width enlargements, exit all other cases
381
+ // TODO: needs patch for tile counter
382
+ if (this._viewportMetrics.cols >= metrics.cols) {
383
+ this._viewportMetrics = metrics;
384
+ return;
385
+ }
386
+ // walk scrollbuffer at old col width to find all possible expansion matches
387
+ const buffer = this._terminal._core.buffer;
388
+ const rows = buffer.lines.length;
389
+ const oldCol = this._viewportMetrics.cols - 1;
390
+ for (let row = 0; row < rows; ++row) {
391
+ const line = buffer.lines.get(row);
392
+ if (line.getBg(oldCol) & 268435456 /* BgFlags.HAS_EXTENDED */) {
393
+ const e = line._extendedAttrs[oldCol] || EMPTY_ATTRS;
394
+ const imageId = e.imageId;
395
+ if (imageId === undefined || imageId === -1) {
396
+ continue;
397
+ }
398
+ const imgSpec = this._images.get(imageId);
399
+ if (!imgSpec) {
400
+ continue;
401
+ }
402
+ // found an image tile at oldCol, check if it qualifies for right exapansion
403
+ const tilesPerRow = Math.ceil((((_a = imgSpec.actual) === null || _a === void 0 ? void 0 : _a.width) || 0) / imgSpec.actualCellSize.width);
404
+ if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {
405
+ continue;
406
+ }
407
+ // expand only if right side is empty (nothing got wrapped from below)
408
+ let hasData = false;
409
+ for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {
410
+ if (line._data[rightCol * 3 /* Cell.SIZE */ + 0 /* Cell.CONTENT */] & 4194303 /* Content.HAS_CONTENT_MASK */) {
411
+ hasData = true;
412
+ break;
413
+ }
414
+ }
415
+ if (hasData) {
416
+ continue;
417
+ }
418
+ // do right expansion on terminal buffer
419
+ const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);
420
+ let lastTile = e.tileId;
421
+ for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {
422
+ this._writeToCell(line, expandCol, imageId, ++lastTile);
423
+ imgSpec.tileCount++;
424
+ }
425
+ }
426
+ }
427
+ // store new viewport metrics
428
+ this._viewportMetrics = metrics;
429
+ }
430
+ /**
431
+ * Retrieve original canvas at buffer position.
432
+ */
433
+ getImageAtBufferCell(x, y) {
434
+ var _a, _b;
435
+ const buffer = this._terminal._core.buffer;
436
+ const line = buffer.lines.get(y);
437
+ if (line && line.getBg(x) & 268435456 /* BgFlags.HAS_EXTENDED */) {
438
+ const e = line._extendedAttrs[x] || EMPTY_ATTRS;
439
+ if (e.imageId && e.imageId !== -1) {
440
+ const orig = (_a = this._images.get(e.imageId)) === null || _a === void 0 ? void 0 : _a.orig;
441
+ if (window.ImageBitmap && orig instanceof ImageBitmap) {
442
+ const canvas = ImageRenderer_1.ImageRenderer.createCanvas(window.document, orig.width, orig.height);
443
+ (_b = canvas.getContext('2d')) === null || _b === void 0 ? void 0 : _b.drawImage(orig, 0, 0, orig.width, orig.height);
444
+ return canvas;
445
+ }
446
+ return orig;
447
+ }
448
+ }
449
+ }
450
+ /**
451
+ * Extract active single tile at buffer position.
452
+ */
453
+ extractTileAtBufferCell(x, y) {
454
+ const buffer = this._terminal._core.buffer;
455
+ const line = buffer.lines.get(y);
456
+ if (line && line.getBg(x) & 268435456 /* BgFlags.HAS_EXTENDED */) {
457
+ const e = line._extendedAttrs[x] || EMPTY_ATTRS;
458
+ if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {
459
+ const spec = this._images.get(e.imageId);
460
+ if (spec) {
461
+ return this._renderer.extractTile(spec, e.tileId);
462
+ }
463
+ }
464
+ }
465
+ }
466
+ // TODO: Do we need some blob offloading tricks here to avoid early eviction?
467
+ // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size
468
+ _evictOldest(room) {
469
+ var _a;
470
+ const used = this._getStoredPixels();
471
+ let current = used;
472
+ while (this._pixelLimit < current + room && this._images.size) {
473
+ const spec = this._images.get(++this._lowestId);
474
+ if (spec && spec.orig) {
475
+ current -= spec.orig.width * spec.orig.height;
476
+ if (spec.actual && spec.orig !== spec.actual) {
477
+ current -= spec.actual.width * spec.actual.height;
478
+ }
479
+ (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
480
+ this._delImg(this._lowestId);
481
+ }
482
+ }
483
+ return used - current;
484
+ }
485
+ _writeToCell(line, x, imageId, tileId) {
486
+ if (line._data[x * 3 /* Cell.SIZE */ + 2 /* Cell.BG */] & 268435456 /* BgFlags.HAS_EXTENDED */) {
487
+ const old = line._extendedAttrs[x];
488
+ if (old) {
489
+ if (old.imageId !== undefined) {
490
+ // found an old ExtendedAttrsImage, since we know that
491
+ // they are always isolated instances (single cell usage),
492
+ // we can re-use it and just update their id entries
493
+ const oldSpec = this._images.get(old.imageId);
494
+ if (oldSpec) {
495
+ // early eviction for in-viewport overwrites
496
+ oldSpec.tileCount--;
497
+ }
498
+ old.imageId = imageId;
499
+ old.tileId = tileId;
500
+ return;
501
+ }
502
+ // found a plain ExtendedAttrs instance, clone it to new entry
503
+ line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);
504
+ return;
505
+ }
506
+ }
507
+ // fall-through: always create new ExtendedAttrsImage entry
508
+ line._data[x * 3 /* Cell.SIZE */ + 2 /* Cell.BG */] |= 268435456 /* BgFlags.HAS_EXTENDED */;
509
+ line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);
510
+ }
511
+ _evictOnAlternate() {
512
+ var _a, _b;
513
+ // nullify tile count of all images on alternate buffer
514
+ for (const spec of this._images.values()) {
515
+ if (spec.bufferType === 'alternate') {
516
+ spec.tileCount = 0;
517
+ }
518
+ }
519
+ // re-count tiles on whole buffer
520
+ const buffer = this._terminal._core.buffer;
521
+ for (let y = 0; y < this._terminal.rows; ++y) {
522
+ const line = buffer.lines.get(y);
523
+ if (!line) {
524
+ continue;
525
+ }
526
+ for (let x = 0; x < this._terminal.cols; ++x) {
527
+ if (line._data[x * 3 /* Cell.SIZE */ + 2 /* Cell.BG */] & 268435456 /* BgFlags.HAS_EXTENDED */) {
528
+ const imgId = (_a = line._extendedAttrs[x]) === null || _a === void 0 ? void 0 : _a.imageId;
529
+ if (imgId) {
530
+ const spec = this._images.get(imgId);
531
+ if (spec) {
532
+ spec.tileCount++;
533
+ }
534
+ }
535
+ }
536
+ }
537
+ }
538
+ // deleted images with zero tile count
539
+ const zero = [];
540
+ for (const [id, spec] of this._images.entries()) {
541
+ if (spec.bufferType === 'alternate' && !spec.tileCount) {
542
+ (_b = spec.marker) === null || _b === void 0 ? void 0 : _b.dispose();
543
+ zero.push(id);
544
+ }
545
+ }
546
+ for (const id of zero) {
547
+ this._delImg(id);
548
+ }
549
+ }
550
+ }
551
+ exports.ImageStorage = ImageStorage;
552
+ //# sourceMappingURL=ImageStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageStorage.js","sourceRoot":"","sources":["../src/ImageStorage.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,mDAAgD;AAIhD,6BAA6B;AAChB,QAAA,iBAAiB,GAAc;IAC1C,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,EAAE;CACX,CAAC;AAEF;;;;;GAKG;AACH,MAAM,kBAAkB;IAEtB,IAAW,GAAG;QACZ,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,GAAG,yCAAyB,CAAC;gBACvC,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAC5B,CAAC;SACH;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAW,GAAG,CAAC,KAAa,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IAEpD,IAAW,cAAc;QACvB,4CAA4C;QAC5C,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,qCAA6B;SAC9B;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,2CAA2B,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,IAAW,cAAc,CAAC,KAAqB;QAC7C,IAAI,CAAC,IAAI,IAAI,yCAAyB,CAAC;QACvC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,2CAA2B,CAAC;IACxD,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,sEAAwC,CAAC,CAAC;IAChE,CAAC;IACD,IAAW,cAAc,CAAC,KAAa;QACrC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,sEAAwC,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,sEAAwC,CAAC,CAAC;IAClE,CAAC;IAGD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAW,KAAK,CAAC,KAAa;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,YACE,MAAc,CAAC,EACf,QAAgB,CAAC,EACV,UAAU,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC;QADX,YAAO,GAAP,OAAO,CAAK;QACZ,WAAM,GAAN,MAAM,CAAK;QA5CZ,SAAI,GAAW,CAAC,CAAC;QAgCjB,WAAM,GAAW,CAAC,CAAC;QAczB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEM,KAAK;QACV;;;;;;;WAOG;QACH,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnF,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,cAAc,gCAAwB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;IACjG,CAAC;CACF;AACD,MAAM,WAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAG7C;;;;;;GAMG;AACH,MAAa,YAAY;IAgBvB,YACU,SAAuB,EACvB,SAAwB,EACxB,KAAyB;QAFzB,cAAS,GAAT,SAAS,CAAc;QACvB,cAAS,GAAT,SAAS,CAAe;QACxB,UAAK,GAAL,KAAK,CAAoB;QAlBnC,UAAU;QACF,YAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;QACrD,eAAe;QACP,YAAO,GAAG,CAAC,CAAC;QACpB,kBAAkB;QACV,cAAS,GAAG,CAAC,CAAC;QACtB,uCAAuC;QAC/B,kBAAa,GAAG,KAAK,CAAC;QAC9B,wCAAwC;QAChC,oBAAe,GAAG,KAAK,CAAC;QAChC,wDAAwD;QAChD,gBAAW,GAAW,OAAO,CAAC;QASpC,IAAI;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SACxC;QAAC,OAAO,CAAM,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC9D;QACD,IAAI,CAAC,gBAAgB,GAAG;YACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YACzB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SAC1B,CAAC;IACJ,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEM,KAAK;;QACV,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YACxC,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;SACxB;QACD,6DAA6D;QAC7D,0CAA0C;QAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC;IACxC,CAAC;IAEM,QAAQ,CAAC,KAAa;QAC3B,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE;YAC/B,MAAM,UAAU,CAAC,mEAAmE,CAAC,CAAC;SACvF;QACD,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;IAC/C,CAAC;IAEO,gBAAgB;QACtB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE;oBAC5C,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;iBACxD;aACF;SACF;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,OAAO,CAAC,EAAU;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,8DAA8D;QAC9D,IAAI,IAAI,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,YAAY,WAAW,EAAE;YAClE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACnB;IACH,CAAC;IAED;;OAEG;IACI,aAAa;;QAClB,qCAAqC;QACrC,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;gBACnC,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACf;SACF;QACD,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAClB;QACD,yCAAyC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,MAAc;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACvC,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;gBACnD,QAAQ,GAAG,yBAAiB,CAAC;aAC9B;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE;gBAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;aAC/C;SACF;IACH,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,GAAoC;;QAClD,6CAA6C;QAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1C,+CAA+C;QAC/C,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;QACvC,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;YACnD,QAAQ,GAAG,yBAAiB,CAAC;SAC9B;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;QACzB,IAAI,MAAM,GAAG,OAAO,CAAC;QACrB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAC9B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,GAAG,CAAC,CAAC;SACZ;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACvD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE;gBACnC,IAAI,MAAM,GAAG,GAAG,IAAI,QAAQ;oBAAE,MAAM;gBACpC,IAAI,CAAC,YAAY,CAAC,IAAsB,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;gBACnF,SAAS,EAAE,CAAC;aACb;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;gBAC7B,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;oBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;aACnE;iBAAM;gBACL,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,QAAQ;oBAAE,MAAM;aACnC;YACD,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;SACnB;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAExE,2BAA2B;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAC7B,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;SACnB;aAAM;YACL,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC;YACnB,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC;SACpB;QAED,sCAAsC;QACtC,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;gBACtB,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACf;SACF;QACD,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAClB;QAED,mBAAmB;QACnB,iDAAiD;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACnD,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,CAAC,GAAG,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;QAEH,0DAA0D;QAC1D,gCAAgC;QAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;YACrD,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAe;YAC1B,IAAI,EAAE,GAAG;YACT,YAAY,EAAE,QAAQ;YACtB,MAAM,EAAE,GAAG;YACX,cAAc,oBAAO,QAAQ,CAAE;YAC/B,MAAM,EAAE,SAAS,IAAI,SAAS;YAC9B,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;SAC9C,CAAC;QAEF,wBAAwB;QACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAGD;;;OAGG;IACH,kDAAkD;IAC3C,MAAM,CAAC,KAAqC;QACjD,wEAAwE;QACxE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC/C,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAClC,sEAAsE;YACtE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBAC1B,OAAO;aACR;SACF;QACD,oBAAoB;QACpB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QAC/B,oDAAoD;QACpD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;aAC9B;YACD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;aACrC;YACD,OAAO;SACR;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;SAC9B;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QAEvC,qBAAqB;QACrB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEtC,kDAAkD;QAClD,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAmB,CAAC;YACpE,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE;gBACnC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuB,EAAE;oBAC1C,IAAI,CAAC,GAAwB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;oBACrE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;oBAC1B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;wBAC3C,SAAS;qBACV;oBACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;wBACnB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;wBAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC;wBACrB,IAAI,KAAK,GAAG,CAAC,CAAC;wBACd;;;;;2BAKG;wBACH,OACE,EAAE,GAAG,GAAG,IAAI;+BACT,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuB,CAAC;+BACxC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;+BAC7C,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;+BACvB,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,GAAG,KAAK,CAAC,EACnC;4BACA,KAAK,EAAE,CAAC;yBACT;wBACD,GAAG,EAAE,CAAC;wBACN,IAAI,OAAO,EAAE;4BACX,IAAI,OAAO,CAAC,MAAM,EAAE;gCAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;6BAC/D;yBACF;6BAAM,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;4BACrC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;yBACtD;wBACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;qBAC5B;iBACF;aACF;SACF;IACH,CAAC;IAEM,cAAc,CAAC,OAAuC;;QAC3D,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACtB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;YAChC,OAAO;SACR;QAED,gEAAgE;QAChE,qCAAqC;QACrC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;YAC9C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;YAChC,OAAO;SACR;QAED,4EAA4E;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAmB,CAAC;YACrD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuB,EAAE;gBAC7C,MAAM,CAAC,GAAwB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;gBAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;gBAC1B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;oBAC3C,SAAS;iBACV;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO,EAAE;oBACZ,SAAS;iBACV;gBACD,4EAA4E;gBAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,KAAK,KAAI,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3F,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE;oBAC/C,SAAS;iBACV;gBACD,sEAAsE;gBACtE,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,KAAK,IAAI,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE;oBACnE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,oBAAY,uBAAe,CAAC,yCAA2B,EAAE;wBAC9E,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;qBACP;iBACF;gBACD,IAAI,OAAO,EAAE;oBACX,SAAS;iBACV;gBACD,wCAAwC;gBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC;gBACpF,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;gBACxB,KAAK,IAAI,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,EAAE,SAAS,EAAE;oBAC7D,IAAI,CAAC,YAAY,CAAC,IAAsB,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;oBAC1E,OAAO,CAAC,SAAS,EAAE,CAAC;iBACrB;aACF;SACF;QACD,6BAA6B;QAC7B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,CAAS,EAAE,CAAS;;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACnD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,uCAAuB,EAAE;YAChD,MAAM,CAAC,GAAwB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;YACrE,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE;gBACjC,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,0CAAE,IAAI,CAAC;gBAC/C,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,YAAY,WAAW,EAAE;oBACrD,MAAM,MAAM,GAAG,6BAAa,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpF,MAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,0CAAE,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBACxE,OAAO,MAAM,CAAC;iBACf;gBACD,OAAO,IAAyB,CAAC;aAClC;SACF;IACH,CAAC;IAED;;OAEG;IACI,uBAAuB,CAAC,CAAS,EAAE,CAAS;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACnD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,uCAAuB,EAAE;YAChD,MAAM,CAAC,GAAwB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;YACrE,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;gBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,IAAI,EAAE;oBACR,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;iBACnD;aACF;SACF;IACH,CAAC;IAED,6EAA6E;IAC7E,4GAA4G;IACpG,YAAY,CAAC,IAAY;;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC,WAAW,GAAG,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;gBACrB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC9C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;oBAC5C,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;iBACnD;gBACD,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC9B;SACF;QACD,OAAO,IAAI,GAAG,OAAO,CAAC;IACxB,CAAC;IAEO,YAAY,CAAC,IAAoB,EAAE,CAAS,EAAE,OAAe,EAAE,MAAc;QACnF,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAY,kBAAU,CAAC,uCAAuB,EAAE;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,GAAG,EAAE;gBACP,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;oBAC7B,sDAAsD;oBACtD,0DAA0D;oBAC1D,oDAAoD;oBACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC9C,IAAI,OAAO,EAAE;wBACX,4CAA4C;wBAC5C,OAAO,CAAC,SAAS,EAAE,CAAC;qBACrB;oBACD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;oBACtB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;oBACpB,OAAO;iBACR;gBACD,8DAA8D;gBAC9D,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACrF,OAAO;aACR;SACF;QACD,2DAA2D;QAC3D,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAY,kBAAU,CAAC,wCAAwB,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAEO,iBAAiB;;QACvB,uDAAuD;QACvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;gBACnC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;aACpB;SACF;QACD,iCAAiC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;YACnD,IAAI,CAAC,IAAI,EAAE;gBACT,SAAS;aACV;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;gBAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAY,kBAAU,CAAC,uCAAuB,EAAE;oBAC9D,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC;oBAC9C,IAAI,KAAK,EAAE;wBACT,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,EAAE;4BACR,IAAI,CAAC,SAAS,EAAE,CAAC;yBAClB;qBACF;iBACF;aACF;SACF;QACD,sCAAsC;QACtC,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACtD,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACf;SACF;QACD,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAClB;IACH,CAAC;CACF;AA5eD,oCA4eC"}