@sebbo2002/vestaboard 1.0.1 → 2.0.0-develop.2

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/dist/message.js DELETED
@@ -1,545 +0,0 @@
1
- import GraphemeSplitter from 'grapheme-splitter';
2
- import { BOARD_LINE_LENGTH, BOARD_LINES, MessageWritePosition } from './types.js';
3
- /**
4
- * Map with all supported characters plus a few emojis
5
- * mapped to corresponding characters of the Vestaboard
6
- */
7
- export const CHAR_MAP = [
8
- [' ', [0]],
9
- ['A', [1]],
10
- ['a', [1]],
11
- ['b', [2]],
12
- ['B', [2]],
13
- ['C', [3]],
14
- ['c', [3]],
15
- ['d', [4]],
16
- ['e', [5]],
17
- ['f', [6]],
18
- ['g', [7]],
19
- ['h', [8]],
20
- ['i', [9]],
21
- ['j', [10]],
22
- ['k', [11]],
23
- ['l', [12]],
24
- ['m', [13]],
25
- ['n', [14]],
26
- ['o', [15]],
27
- ['p', [16]],
28
- ['q', [17]],
29
- ['r', [18]],
30
- ['s', [19]],
31
- ['t', [20]],
32
- ['u', [21]],
33
- ['v', [22]],
34
- ['w', [23]],
35
- ['x', [24]],
36
- ['y', [25]],
37
- ['z', [26]],
38
- ['D', [4]],
39
- ['E', [5]],
40
- ['F', [6]],
41
- ['G', [7]],
42
- ['H', [8]],
43
- ['I', [9]],
44
- ['J', [10]],
45
- ['K', [11]],
46
- ['L', [12]],
47
- ['M', [13]],
48
- ['N', [14]],
49
- ['O', [15]],
50
- ['P', [16]],
51
- ['Q', [17]],
52
- ['R', [18]],
53
- ['S', [19]],
54
- ['T', [20]],
55
- ['U', [21]],
56
- ['V', [22]],
57
- ['W', [23]],
58
- ['X', [24]],
59
- ['Y', [25]],
60
- ['Z', [26]],
61
- ['1', [27]],
62
- ['2', [28]],
63
- ['3', [29]],
64
- ['4', [30]],
65
- ['5', [31]],
66
- ['6', [32]],
67
- ['7', [33]],
68
- ['8', [34]],
69
- ['9', [35]],
70
- ['0', [36]],
71
- ['!', [37]],
72
- ['@', [38]],
73
- ['#', [39]],
74
- ['$', [40]],
75
- ['(', [41]],
76
- [')', [42]],
77
- ['-', [44]],
78
- ['+', [46]],
79
- ['&', [47]],
80
- ['=', [48]],
81
- [';', [49]],
82
- [':', [50]],
83
- ['\'', [52]],
84
- ['"', [53]],
85
- ['%', [54]],
86
- [',', [55]],
87
- ['.', [56]],
88
- ['/', [59]],
89
- ['?', [60]],
90
- ['°', [62]],
91
- ['ä', [1, 5]],
92
- ['Ä', [1, 5]],
93
- ['ö', [15, 5]],
94
- ['Ö', [15, 5]],
95
- ['ü', [21, 5]],
96
- ['Ü', [21, 5]],
97
- ['ß', [19, 19]],
98
- ['🟥', [63]],
99
- ['🟧', [64]],
100
- ['🟨', [65]],
101
- ['🟩', [66]],
102
- ['🟦', [67]],
103
- ['🟪', [68]],
104
- ['⬜️', [69]],
105
- ['⬜', [69]],
106
- ['⬛️', [-2]],
107
- ['⬛', [-2]],
108
- ['﹫', [38]],
109
- ['@', [38]],
110
- ['0️⃣', [36]],
111
- ['1️⃣', [27]],
112
- ['2️⃣', [28]],
113
- ['3️⃣', [29]],
114
- ['4️⃣', [30]],
115
- ['5️⃣', [31]],
116
- ['6️⃣', [32]],
117
- ['7️⃣', [33]],
118
- ['8️⃣', [34]],
119
- ['9️⃣', [35]],
120
- ['❕', [37]],
121
- ['‼️', [37, 37]],
122
- ['❗️', [37]],
123
- ['⁉️', [37, 60]],
124
- ['#️⃣', [39]],
125
- ['💲', [40]],
126
- ['$', [40]],
127
- ['﹩', [40]],
128
- ['$', [40]],
129
- ['←', [44]],
130
- ['→', [44]],
131
- ['➡', [44]],
132
- ['⬅', [44]],
133
- ['➔', [44]],
134
- ['↔', [44]],
135
- ['–', [44]],
136
- ['➕', [46]],
137
- ['+', [46]],
138
- ['﹪', [54]],
139
- ['%', [54]],
140
- ['❓', [60]],
141
- ['❔', [60]],
142
- ['℃', [62, 3]],
143
- ['℉', [62, 6]]
144
- ];
145
- const EMPTY_BOARD = new Array(BOARD_LINES).fill(new Array(BOARD_LINE_LENGTH).fill(0));
146
- /**
147
- * You can build a message like this:
148
- *
149
- * ```javascript
150
- * import { Message } from '@sebbo2002/vestaboard';
151
- *
152
- * const myMessage = new Message('Hello World');
153
- *
154
- * // same as
155
- *
156
- * const myOtherMessage = new Message()
157
- * .write('Hello World')
158
- * .center();
159
- * ```
160
- */
161
- export default class Message {
162
- constructor(message) {
163
- this.cursor = [0, 0];
164
- if (typeof message === 'string' && message) {
165
- this.board = JSON.parse(JSON.stringify(EMPTY_BOARD));
166
- this.write(message);
167
- this.center();
168
- }
169
- else if (Array.isArray(message)) {
170
- this.board = message;
171
- }
172
- else {
173
- this.board = JSON.parse(JSON.stringify(EMPTY_BOARD));
174
- }
175
- }
176
- static string2chars(word, options = {}) {
177
- let chars = [];
178
- const singleCharStrings = Message.splitter.splitGraphemes(word);
179
- for (const char of singleCharStrings) {
180
- chars.push(...this.char2char(char));
181
- }
182
- // trim emoji words if not disabled
183
- if (options.removeUnsupportedWords !== false) {
184
- chars = Message.removeEmojisFromChars(chars);
185
- }
186
- // replace -1 with fallback char
187
- chars = chars.map(char => {
188
- if (char >= 0) {
189
- return char;
190
- }
191
- else if (char === -2) {
192
- return 0;
193
- }
194
- else if (typeof options.fallbackChar === 'number') {
195
- return options.fallbackChar;
196
- }
197
- else if (options.fallbackChar === null) {
198
- return -1;
199
- }
200
- else {
201
- return 60;
202
- }
203
- }).filter(char => char >= 0);
204
- return chars;
205
- }
206
- static char2char(char) {
207
- const fromMap = CHAR_MAP
208
- .find(([mapChar]) => char === mapChar);
209
- if (fromMap && Array.isArray(fromMap[1])) {
210
- return fromMap[1];
211
- }
212
- return [-1];
213
- }
214
- static charToString(char) {
215
- const entry = Object.values(CHAR_MAP)
216
- .filter(([name]) => name.length <= 2)
217
- .find(([, code]) => code[0] === char);
218
- if (entry) {
219
- return entry[0].toUpperCase() + (entry[0].length === 1 ? ' ' : '');
220
- }
221
- return '⚡︎ ';
222
- }
223
- static splitCharsIntoLines(chars, lineLength) {
224
- // Array with splitting char (if any) and chars of the word
225
- const words = [];
226
- for (const char of chars) {
227
- if (!words.length) {
228
- words.push([null, []]);
229
- }
230
- const currentWord = words[words.length - 1];
231
- if (char === 0) {
232
- words.push([0, []]);
233
- }
234
- else if (char === 44) {
235
- currentWord[1].push(char);
236
- words.push([null, []]);
237
- }
238
- else {
239
- currentWord[1].push(char);
240
- }
241
- }
242
- const lines = [];
243
- for (const [separator, word] of words) {
244
- if (!lines.length) {
245
- lines.push([]);
246
- }
247
- let currentLine = lines[lines.length - 1];
248
- let charsLeft = lineLength[lines.length === 1 ? 0 : 1] - currentLine.length;
249
- // start of line, word fits
250
- if (!currentLine.length && word.length <= charsLeft) {
251
- currentLine.push(...word);
252
- }
253
- // add separator and the whole word
254
- else if (separator !== null && word.length + 1 <= charsLeft) {
255
- currentLine.push(0, ...word);
256
- }
257
- else if (word.length <= charsLeft) {
258
- currentLine.push(...word);
259
- }
260
- // no space for the word, write into next line
261
- else if (word.length <= lineLength[1]) {
262
- currentLine = [...word];
263
- charsLeft = lineLength[1];
264
- lines.push(currentLine);
265
- }
266
- // word too long for one line, start in
267
- // current line and continue in next line
268
- else {
269
- if (charsLeft >= 3 && !currentLine.length) {
270
- // No space required in front of long word
271
- }
272
- else if (charsLeft >= 4 && currentLine.length) {
273
- // Add space for next word
274
- currentLine.push(0);
275
- charsLeft--;
276
- }
277
- else {
278
- // No enough space for word, go to next line
279
- currentLine = [];
280
- charsLeft = lineLength[1];
281
- lines.push(currentLine);
282
- }
283
- for (const char of word) {
284
- currentLine.push(char);
285
- charsLeft--;
286
- if (charsLeft <= 1) {
287
- currentLine.push(44);
288
- currentLine = [];
289
- charsLeft = lineLength[1];
290
- lines.push(currentLine);
291
- }
292
- }
293
- }
294
- }
295
- return lines;
296
- }
297
- static removeEmojisFromChars(chars) {
298
- const words = [];
299
- for (const char of chars) {
300
- if (!words.length) {
301
- words.push([]);
302
- }
303
- if (char === 0) {
304
- words.push([]);
305
- }
306
- else {
307
- words[words.length - 1].push(char);
308
- }
309
- }
310
- words.forEach(chars => {
311
- if (chars.length > 0 && chars[0] === -1) {
312
- while (chars[0] < 0) {
313
- chars.splice(0, 1);
314
- }
315
- }
316
- if (chars.length > 0 && chars[chars.length - 1] === -1) {
317
- while (chars.length > 0 && chars[chars.length - 1] < 0) {
318
- chars.splice(chars.length - 1, 1);
319
- }
320
- }
321
- });
322
- const result = [];
323
- words
324
- .filter(chars => chars.length > 0)
325
- .forEach(chars => {
326
- if (result.length !== 0) {
327
- result.push(0);
328
- }
329
- result.push(...chars);
330
- });
331
- return result;
332
- }
333
- static getColumnSizesFromData(rows, options = {}) {
334
- if (!rows.length) {
335
- return [];
336
- }
337
- const columns = rows[0].length;
338
- const columnDefaultSizes = [];
339
- rows.forEach((row, rowIndex) => {
340
- if (row.length !== columns) {
341
- throw new Error(`Unable to render table: Row ${rowIndex} has ${row.length} entries, but first row has ${columns}!`);
342
- }
343
- row.forEach((column, columnIndex) => {
344
- columnDefaultSizes[columnIndex] = Math.max(columnDefaultSizes[columnIndex] || 0, this.string2chars(column, options).length);
345
- });
346
- });
347
- const columnDefaultSum = columnDefaultSizes.reduce((a, b) => a + b, 0);
348
- const columnBorders = rows[0].length - 1;
349
- const factor = Math.max((BOARD_LINE_LENGTH - columnBorders) / columnDefaultSum, 1);
350
- const columnSizes = columnDefaultSizes.map(size => Math.round(size * factor));
351
- while (true) {
352
- const size = columnSizes.reduce((a, b) => a + b, 0) + columnBorders;
353
- if (size === BOARD_LINE_LENGTH) {
354
- break;
355
- }
356
- const diff = BOARD_LINE_LENGTH - size < 0 ? -1 : 1;
357
- const index = columnSizes.indexOf(diff < 0 ? Math.max(...columnSizes) : Math.min(...columnSizes));
358
- if (index < 0) {
359
- // This can actually never be achieved...
360
- throw new Error('Unable to find max value in array…');
361
- }
362
- columnSizes[index] += diff;
363
- }
364
- return columnSizes;
365
- }
366
- get isEmpty() {
367
- return !this.board.find(line => line.find(char => char !== 0));
368
- }
369
- /**
370
- * Fills the board with the passed character or text. The text
371
- * is repeated again and again until the board is completely filled.
372
- */
373
- fill(text = ' ') {
374
- let pointer = 0;
375
- const chars = Message.string2chars(text, { removeUnsupportedWords: false });
376
- this.board.forEach((line) => {
377
- line.forEach((char, charIndex) => {
378
- line[charIndex] = chars[pointer];
379
- pointer++;
380
- if (pointer > chars.length - 1) {
381
- pointer = 0;
382
- }
383
- });
384
- });
385
- return this;
386
- }
387
- /**
388
- * Write a text on your new message. If your message is not empty it will continue
389
- * where you last left off (`position: MessageWritePosition.CURRENT`). Alternatively
390
- * you can continue on the next line or give an exact position.
391
- *
392
- * @param text
393
- * @param options
394
- */
395
- write(text, options = {}) {
396
- // Cursor blow board length? Just return…
397
- if (!this.board[this.cursor[0]]) {
398
- return this;
399
- }
400
- // Add new line if NEXT_LINE is set (except it's already in the first line)
401
- if (options.position === MessageWritePosition.NEXT_LINE && (this.cursor[0] !== 0 || this.cursor[1] !== 0)) {
402
- this.cursor[0]++;
403
- this.cursor[1] = 0;
404
- }
405
- // Set cursor to given position
406
- else if (typeof options.position === 'object') {
407
- this.cursor[0] = options.position.line;
408
- this.cursor[1] = options.position.row || 0;
409
- }
410
- // Add space before text as it
411
- // will be rendered in the same line
412
- if ((options.position === undefined || options.position === MessageWritePosition.CURRENT) &&
413
- this.cursor[1] !== 0 && this.cursor[1] < BOARD_LINE_LENGTH - 1) {
414
- this.board[this.cursor[0]].splice(this.cursor[1], 1, 0);
415
- this.cursor[1] += 1;
416
- }
417
- // Figure out left indent
418
- let indent = 0;
419
- if (options.indent === true) {
420
- indent = this.cursor[1];
421
- }
422
- else if (typeof options.indent === 'number' && options.indent >= 0 && options.indent <= BOARD_LINE_LENGTH - 5) {
423
- indent = options.indent;
424
- }
425
- const linesOfText = text.split('\n');
426
- let isFirstLine = true;
427
- for (const lineOfText of linesOfText) {
428
- const chars = Message.string2chars(lineOfText, options);
429
- const charsLeftInLine = [
430
- BOARD_LINE_LENGTH - this.cursor[1],
431
- BOARD_LINE_LENGTH - indent
432
- ];
433
- if (!isFirstLine) {
434
- this.cursor[0]++;
435
- this.cursor[1] = indent;
436
- }
437
- if (typeof options.position === 'object' && options.position.width) {
438
- charsLeftInLine[0] = Math.min(charsLeftInLine[0], options.position.width);
439
- charsLeftInLine[1] = Math.min(charsLeftInLine[1], options.position.width - indent);
440
- }
441
- const linesOfChars = Message.splitCharsIntoLines(chars, charsLeftInLine);
442
- for (const chars of linesOfChars) {
443
- // Board is over, skip line…
444
- if (!this.board[this.cursor[0]]) {
445
- break;
446
- }
447
- // Add chars to current line and update cursor
448
- this.board[this.cursor[0]].splice(this.cursor[1], chars.length, ...chars);
449
- this.cursor[1] += chars.length;
450
- // Add new line (and update cursor),
451
- // if this wasn't the last line
452
- if (chars !== linesOfChars[linesOfChars.length - 1]) {
453
- this.cursor[0]++;
454
- this.cursor[1] = indent;
455
- }
456
- }
457
- isFirstLine = false;
458
- }
459
- return this;
460
- }
461
- /**
462
- * Generate a table with the given data
463
- *
464
- * @example new Message().table([
465
- * ['now', 'Daily'],
466
- * ['13:00', 'Super Secret Meeting'],
467
- * ['16:30', 'Awesome Presentation']
468
- * ])
469
- *
470
- * #==============================================#
471
- * # N O W D A I L Y #
472
- * # #
473
- * # 1 3 : 0 0 S U P E R S E C R E T #
474
- * # M E E T I N G #
475
- * # #
476
- * # 1 6 : 3 0 A W E S O M E P R E S E N T - #
477
- * #==============================================#
478
- */
479
- table(rows) {
480
- const columnWidths = Message.getColumnSizesFromData(rows);
481
- if (this.cursor[0] !== 0 || this.cursor[1] !== 0) {
482
- this.cursor[0]++;
483
- this.cursor[1] = 0;
484
- }
485
- rows.forEach(line => {
486
- const lineStart = this.cursor[0];
487
- let lineHeight = 1;
488
- line.forEach((column, columnIndex) => {
489
- const columnWidth = columnWidths[columnIndex];
490
- const indent = columnWidths
491
- .filter((width, index) => index < columnIndex)
492
- .reduce((a, b) => a + b + 1, 0);
493
- this.write(column, {
494
- position: {
495
- line: lineStart,
496
- row: indent,
497
- width: columnWidth
498
- },
499
- indent
500
- });
501
- lineHeight = Math.max(lineHeight, this.cursor[0] - lineStart + 1);
502
- });
503
- this.cursor[0] = lineStart + lineHeight + 1;
504
- this.cursor[1] = 0;
505
- });
506
- return this;
507
- }
508
- /**
509
- * Center the current message content
510
- */
511
- center() {
512
- const space = [
513
- this.board.findIndex(l => l.find(c => c !== 0)),
514
- Math.min(...this.board.map(l => l.find(c => c !== 0) ? l.slice().reverse().findIndex(c => c !== 0) : l.length)),
515
- this.board.slice().reverse().findIndex(l => l.find(c => c !== 0)),
516
- Math.min(...this.board.map(l => l.find(c => c !== 0) ? l.findIndex(c => c !== 0) : l.length)),
517
- ];
518
- const padding = [
519
- Math.floor((space[0] + space[2]) / 2),
520
- Math.floor((space[1] + space[3]) / 2)
521
- ];
522
- // Move up/down
523
- if (space[0] !== padding[0]) {
524
- const add = padding[0] - space[0];
525
- this.board.splice(add > 0 ? 0 : this.board.length, 0, ...this.board.splice(add > 0 ? this.board.length - add : 0, Math.abs(add)));
526
- }
527
- // Move left/right
528
- if (space[3] !== padding[1]) {
529
- const add = padding[1] - space[3];
530
- this.board.forEach(line => {
531
- line.splice(add > 0 ? 0 : line.length, 0, ...line.splice(add > 0 ? line.length - add : 0, Math.abs(add)));
532
- });
533
- }
534
- }
535
- toString() {
536
- return '#=' + '='.repeat(BOARD_LINE_LENGTH * 2) + '=#\n' +
537
- this.board.map(line => '# ' + line.map(char => Message.charToString(char)).join('') + ' #\n').join('') +
538
- '#=' + '='.repeat(BOARD_LINE_LENGTH * 2) + '=#\n';
539
- }
540
- toCharArray() {
541
- return JSON.parse(JSON.stringify(this.board));
542
- }
543
- }
544
- Message.splitter = new GraphemeSplitter();
545
- //# sourceMappingURL=message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAuC,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvH;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA8B;IAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACb,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACb,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACd,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACd,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACd,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACd,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACf,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACd,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,GAAmB,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAC3D,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACrB,CAAC;AAEpB;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAKxB,YAAa,OAAiC;QAFtC,WAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAGpB,IAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE;YACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;aACI,IAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;SACxB;aACI;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;SACxD;IACL,CAAC;IAED,MAAM,CAAC,YAAY,CAAE,IAAY,EAAE,UAA+B,EAAE;QAChE,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE;YAClC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SACvC;QAED,mCAAmC;QACnC,IAAI,OAAO,CAAC,sBAAsB,KAAK,KAAK,EAAE;YAC1C,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAChD;QAED,gCAAgC;QAChC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,IAAI,IAAI,CAAC,EAAE;gBACX,OAAO,IAAI,CAAC;aACf;iBAAM,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;gBACpB,OAAO,CAAC,CAAC;aACZ;iBAAM,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,EAAE;gBACjD,OAAO,OAAO,CAAC,YAAY,CAAC;aAC/B;iBAAM,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,EAAE;gBACtC,OAAO,CAAC,CAAC,CAAC;aACb;iBAAM;gBACH,OAAO,EAAE,CAAC;aACb;QACL,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAE7B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,SAAS,CAAE,IAAY;QAC1B,MAAM,OAAO,GAAG,QAAQ;aACnB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAE3C,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;SACrB;QAED,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,YAAY,CAAE,IAAY;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;aACpC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAE1C,IAAI,KAAK,EAAE;YACP,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACtE;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAE,KAAe,EAAE,UAA4B;QACrE,2DAA2D;QAC3D,MAAM,KAAK,GAAqC,EAAE,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;aAC1B;YAED,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,KAAK,CAAC,EAAE;gBACZ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACvB;iBAAM,IAAI,IAAI,KAAK,EAAE,EAAE;gBACpB,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;aAC1B;iBAAM;gBACH,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7B;SACJ;QAED,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAClB;YAED,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;YAE5E,2BAA2B;YAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;gBACjD,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;aAC7B;YAED,mCAAmC;iBAC9B,IAAI,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,EAAE;gBACzD,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;aAChC;iBAAM,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;gBACjC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;aAC7B;YAED,8CAA8C;iBACzC,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;gBACnC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxB,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAC3B;YAED,uCAAuC;YACvC,yCAAyC;iBACpC;gBACD,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;oBACvC,0CAA0C;iBAC7C;qBAAM,IAAI,SAAS,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE;oBAC7C,0BAA0B;oBAC1B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,SAAS,EAAE,CAAC;iBACf;qBAAM;oBACH,4CAA4C;oBAC5C,WAAW,GAAG,EAAE,CAAC;oBACjB,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBAC3B;gBAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;oBACrB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvB,SAAS,EAAE,CAAC;oBAEZ,IAAI,SAAS,IAAI,CAAC,EAAE;wBAChB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAErB,WAAW,GAAG,EAAE,CAAC;wBACjB,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC1B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC3B;iBACJ;aACJ;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAE,KAAe;QACzC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAClB;YAED,IAAI,IAAI,KAAK,CAAC,EAAE;gBACZ,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAClB;iBAAM;gBACH,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtC;SACJ;QAED,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;oBACjB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACtB;aACJ;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gBACpD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;oBACpD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;iBACrC;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK;aACA,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,OAAO,CAAC,KAAK,CAAC,EAAE;YACb,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClB;YAED,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEP,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,sBAAsB,CAAE,IAAqB,EAAE,UAA+B,EAAE;QACnF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,EAAE,CAAC;SACb;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/B,MAAM,kBAAkB,GAAa,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,QAAQ,GAAG,CAAC,MAAM,+BAA+B,OAAO,GAAG,CAAC,CAAC;aACvH;YACD,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;gBAChC,kBAAkB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;YAChI,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,GAAG,aAAa,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;QAE9E,OAAO,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC;YACpE,IAAI,IAAI,KAAK,iBAAiB,EAAE;gBAC5B,MAAM;aACT;YAED,MAAM,IAAI,GAAG,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;YAClG,IAAG,KAAK,GAAG,CAAC,EAAE;gBACV,yCAAyC;gBACzC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aACzD;YAED,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;SAC9B;QAGD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,IAAI,OAAO;QACP,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAChC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,IAAI,CAAE,IAAI,GAAG,GAAG;QACZ,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAC,sBAAsB,EAAE,KAAK,EAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;gBAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO,EAAE,CAAC;gBAEV,IAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC3B,OAAO,GAAG,CAAC,CAAC;iBACf;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAE,IAAY,EAAE,UAA+B,EAAE;QAElD,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC;SACf;QAED,2EAA2E;QAC3E,IAAI,OAAO,CAAC,QAAQ,KAAK,oBAAoB,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YACvG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACtB;QAED,+BAA+B;aAC1B,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;SAC9C;QAED,8BAA8B;QAC9B,oCAAoC;QACpC,IACI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,oBAAoB,CAAC,OAAO,CAAC;YACrF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,CAAC,EAChE;YACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACvB;QAED,yBAAyB;QACzB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;YACzB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC3B;aAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,iBAAiB,GAAG,CAAC,EAAE;YAC7G,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;SAC3B;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,eAAe,GAAqB;gBACtC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClC,iBAAiB,GAAG,MAAM;aAC7B,CAAC;YAEF,IAAG,CAAC,WAAW,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;aAC3B;YAED,IAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;gBAC/D,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC1E,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;aACtF;YAED,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YACzE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;gBAE9B,4BAA4B;gBAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC7B,MAAM;iBACT;gBAED,8CAA8C;gBAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;gBAC1E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;gBAE/B,oCAAoC;gBACpC,+BAA+B;gBAC/B,IAAI,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;oBACjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;iBAC3B;aACJ;YAED,WAAW,GAAG,KAAK,CAAC;SACvB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAE,IAAqB;QACxB,MAAM,YAAY,GAAG,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACtB;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;gBACjC,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,YAAY;qBACtB,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,WAAW,CAAC;qBAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEpC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACf,QAAQ,EAAE;wBACN,IAAI,EAAE,SAAS;wBACf,GAAG,EAAE,MAAM;wBACX,KAAK,EAAE,WAAW;qBACrB;oBACD,MAAM;iBACT,CAAC,CAAC;gBAEH,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM;QACF,MAAM,KAAK,GAAG;YACV,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/G,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAChG,CAAC;QAEF,MAAM,OAAO,GAAG;YACZ,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACxC,CAAC;QAEF,eAAe;QACf,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAChD,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAC7E,CAAC;SACL;QAED,kBAAkB;QAClB,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EACpC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACjE,CAAC;YACN,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,MAAM;YACpD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAC7B,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IAC1D,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;;AAjcuB,gBAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
@@ -1,8 +0,0 @@
1
- import { Boards } from './types.js';
2
- import Message from './message.js';
3
- export default class MultipleBoards {
4
- private readonly boards;
5
- constructor(boards?: Boards);
6
- push(...boards: Boards): void;
7
- postMessage(message: Message | string): Promise<void>;
8
- }
@@ -1,25 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export default class MultipleBoards {
11
- constructor(boards = []) {
12
- this.boards = boards;
13
- }
14
- push(...boards) {
15
- boards.forEach(board => this.boards.push(board));
16
- }
17
- postMessage(message) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- for (const board of this.boards) {
20
- yield board.postMessage(message);
21
- }
22
- });
23
- }
24
- }
25
- //# sourceMappingURL=multiple-boards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiple-boards.js","sourceRoot":"","sources":["../src/multiple-boards.ts"],"names":[],"mappings":";;;;;;;;;AAGA,MAAM,CAAC,OAAO,OAAO,cAAc;IAG/B,YAAa,SAAiB,EAAE;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,GAAG,MAAc;QAClB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAEK,WAAW,CAAE,OAAyB;;YACxC,KAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC5B,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;aACpC;QACL,CAAC;KAAA;CACJ"}
@@ -1,10 +0,0 @@
1
- import Message from './message.js';
2
- import type { RequestOptions } from './types.js';
3
- export default class ReadWriteAPI {
4
- private readonly key;
5
- private readonly options;
6
- constructor(key: string, options?: RequestOptions);
7
- private request;
8
- getCurrentMessage(): Promise<Message>;
9
- postMessage(message: Message | string): Promise<void>;
10
- }
@@ -1,37 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import Message from './message.js';
11
- import { request } from './tools.js';
12
- export default class ReadWriteAPI {
13
- constructor(key, options) {
14
- this.key = key;
15
- this.options = options || {};
16
- }
17
- request(path, data) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- return request(`https://rw.vestaboard.com${path}`, {
20
- 'X-Vestaboard-Read-Write-Key': this.key
21
- }, data, this.options);
22
- });
23
- }
24
- getCurrentMessage() {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- const response = yield this.request('/');
27
- return new Message(JSON.parse(response.currentMessage.layout));
28
- });
29
- }
30
- postMessage(message) {
31
- return __awaiter(this, void 0, void 0, function* () {
32
- const msgObj = typeof message === 'string' ? new Message(message) : message;
33
- yield this.request('/', JSON.stringify(msgObj.toCharArray()));
34
- });
35
- }
36
- }
37
- //# sourceMappingURL=read-write-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-write-api.js","sourceRoot":"","sources":["../src/read-write-api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,MAAM,CAAC,OAAO,OAAO,YAAY;IAI7B,YAAa,GAAW,EAAE,OAAwB;QAC9C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACjC,CAAC;IAEa,OAAO,CAAK,IAAY,EAAE,IAAa;;YACjD,OAAO,OAAO,CAAC,4BAA4B,IAAI,EAAE,EAAE;gBAC/C,6BAA6B,EAAE,IAAI,CAAC,GAAG;aAC1C,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;KAAA;IAEK,iBAAiB;;YACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAA8B,GAAG,CAAC,CAAC;YACtE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;KAAA;IAEK,WAAW,CAAE,OAAyB;;YACxC,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5E,MAAM,IAAI,CAAC,OAAO,CAAO,GAAG,EACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CACvC,CAAC;QACN,CAAC;KAAA;CACJ"}