angular-odata 0.124.0 → 0.126.0

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.
Files changed (71) hide show
  1. package/README.md +2 -2
  2. package/esm2022/lib/api.mjs +3 -2
  3. package/esm2022/lib/cache/storage.mjs +3 -3
  4. package/esm2022/lib/client.mjs +3 -3
  5. package/esm2022/lib/constants.mjs +2 -1
  6. package/esm2022/lib/helper.mjs +2 -2
  7. package/esm2022/lib/models/collection.mjs +147 -193
  8. package/esm2022/lib/models/model.mjs +141 -119
  9. package/esm2022/lib/models/options.mjs +115 -88
  10. package/esm2022/lib/resources/path/segments.mjs +13 -7
  11. package/esm2022/lib/resources/query/expressions/base.mjs +8 -3
  12. package/esm2022/lib/resources/query/expressions/compute.mjs +19 -4
  13. package/esm2022/lib/resources/query/expressions/count.mjs +24 -7
  14. package/esm2022/lib/resources/query/expressions/expand.mjs +30 -8
  15. package/esm2022/lib/resources/query/expressions/filter.mjs +29 -12
  16. package/esm2022/lib/resources/query/expressions/orderby.mjs +31 -8
  17. package/esm2022/lib/resources/query/expressions/search.mjs +30 -11
  18. package/esm2022/lib/resources/query/expressions/select.mjs +16 -4
  19. package/esm2022/lib/resources/query/expressions/syntax.mjs +185 -31
  20. package/esm2022/lib/resources/query/handlers.mjs +2 -2
  21. package/esm2022/lib/resources/query/index.mjs +2 -1
  22. package/esm2022/lib/resources/query/options.mjs +22 -12
  23. package/esm2022/lib/resources/request.mjs +4 -3
  24. package/esm2022/lib/resources/resource.mjs +39 -15
  25. package/esm2022/lib/resources/responses/annotations.mjs +1 -1
  26. package/esm2022/lib/resources/responses/response.mjs +3 -3
  27. package/esm2022/lib/resources/types/batch.mjs +2 -2
  28. package/esm2022/lib/resources/types/count.mjs +7 -4
  29. package/esm2022/lib/resources/types/entity-set.mjs +2 -1
  30. package/esm2022/lib/resources/types/entity.mjs +5 -5
  31. package/esm2022/lib/resources/types/function.mjs +1 -9
  32. package/esm2022/lib/resources/types/navigation-property.mjs +3 -2
  33. package/esm2022/lib/resources/types/options.mjs +1 -1
  34. package/esm2022/lib/resources/types/property.mjs +11 -3
  35. package/esm2022/lib/schema/parsers/structured-type.mjs +5 -4
  36. package/esm2022/lib/schema/structured-type.mjs +13 -2
  37. package/esm2022/lib/utils/enums.mjs +1 -1
  38. package/fesm2022/angular-odata.mjs +3873 -3536
  39. package/fesm2022/angular-odata.mjs.map +1 -1
  40. package/lib/api.d.ts +2 -2
  41. package/lib/client.d.ts +1 -1
  42. package/lib/constants.d.ts +1 -0
  43. package/lib/helper.d.ts +10 -10
  44. package/lib/models/collection.d.ts +18 -20
  45. package/lib/models/model.d.ts +14 -13
  46. package/lib/models/options.d.ts +38 -13
  47. package/lib/resources/path/segments.d.ts +8 -11
  48. package/lib/resources/query/expressions/base.d.ts +6 -3
  49. package/lib/resources/query/expressions/compute.d.ts +13 -2
  50. package/lib/resources/query/expressions/count.d.ts +15 -4
  51. package/lib/resources/query/expressions/expand.d.ts +15 -4
  52. package/lib/resources/query/expressions/filter.d.ts +15 -4
  53. package/lib/resources/query/expressions/orderby.d.ts +16 -4
  54. package/lib/resources/query/expressions/search.d.ts +14 -5
  55. package/lib/resources/query/expressions/select.d.ts +11 -2
  56. package/lib/resources/query/expressions/syntax.d.ts +65 -16
  57. package/lib/resources/query/handlers.d.ts +1 -1
  58. package/lib/resources/query/index.d.ts +1 -0
  59. package/lib/resources/query/options.d.ts +4 -3
  60. package/lib/resources/request.d.ts +3 -2
  61. package/lib/resources/resource.d.ts +10 -5
  62. package/lib/resources/responses/annotations.d.ts +9 -9
  63. package/lib/resources/responses/response.d.ts +2 -2
  64. package/lib/resources/types/count.d.ts +5 -1
  65. package/lib/resources/types/function.d.ts +0 -3
  66. package/lib/resources/types/options.d.ts +2 -1
  67. package/lib/resources/types/property.d.ts +2 -0
  68. package/lib/schema/parsers/structured-type.d.ts +1 -0
  69. package/lib/schema/structured-type.d.ts +2 -1
  70. package/lib/utils/enums.d.ts +7 -7
  71. package/package.json +1 -1
@@ -1,10 +1,24 @@
1
+ import { ODataStructuredTypeFieldParser } from '../../../schema';
1
2
  import { Objects, Types } from '../../../utils';
2
3
  import { normalizeValue } from '../builder';
4
+ import { ComputeExpression } from './compute';
5
+ import { CountExpression } from './count';
6
+ import { ExpandExpression } from './expand';
7
+ import { FilterExpression } from './filter';
8
+ import { OrderByExpression } from './orderby';
9
+ import { SearchExpression } from './search';
10
+ import { SelectExpression } from './select';
3
11
  export const FieldFactory = (names = []) => new Proxy({ _names: names }, {
4
12
  get(target, key) {
5
13
  let names = target['_names'];
6
14
  if (key === 'render') {
7
- return ({ prefix }) => prefix ? `${prefix}/${names.join('/')}` : names.join('/');
15
+ return ({ aliases, escape, prefix, parser, options, }) => {
16
+ let values = names.map((n) => render(n, { aliases, escape, prefix, parser, options }));
17
+ if (prefix && (names.length === 0 || typeof names[0] === 'string')) {
18
+ values = [prefix, ...values];
19
+ }
20
+ return values.join('/');
21
+ };
8
22
  }
9
23
  else if (key === 'clone') {
10
24
  return () => FieldFactory([...names]);
@@ -12,24 +26,61 @@ export const FieldFactory = (names = []) => new Proxy({ _names: names }, {
12
26
  else if (key === 'isField') {
13
27
  return () => true;
14
28
  }
15
- else if (key === 'toJSON') {
29
+ else if (key === 'toJson') {
16
30
  return () => ({
17
31
  $type: 'Field',
18
32
  names: names,
19
33
  });
20
34
  }
21
35
  else if (key === 'resolve') {
22
- return (parser) => names.reduce((acc, name) => acc.field(name), parser);
36
+ return (parser) => names.reduce((acc, name) => typeof name === 'string'
37
+ ? acc?.field(name)
38
+ : name?.resolve(parser), parser);
23
39
  }
24
40
  else {
25
41
  return FieldFactory([...names, key]);
26
42
  }
27
43
  },
28
44
  has(target, key) {
29
- return (['toJSON', 'isField', 'clone', 'render', 'resolve'].includes(key) ||
45
+ return (['toJson', 'isField', 'clone', 'render', 'resolve'].includes(key) ||
30
46
  key in target);
31
47
  },
32
48
  });
49
+ export const RenderableFactory = (value) => {
50
+ if (Types.isPlainObject(value) && '$type' in value) {
51
+ switch (value.$type) {
52
+ case 'SelectExpression':
53
+ return SelectExpression.fromJson(value);
54
+ case 'ExpandExpression':
55
+ return ExpandExpression.fromJson(value);
56
+ case 'ComputeExpression':
57
+ return ComputeExpression.fromJson(value);
58
+ case 'FilterExpression':
59
+ return FilterExpression.fromJson(value);
60
+ case 'OrderByExpression':
61
+ return OrderByExpression.fromJson(value);
62
+ case 'SearchExpression':
63
+ return SearchExpression.fromJson(value);
64
+ case 'CountExpression':
65
+ return CountExpression.fromJson(value);
66
+ case 'Function':
67
+ return Function.fromJson(value);
68
+ case 'Operator':
69
+ return Operator.fromJson(value);
70
+ case 'Grouping':
71
+ return Grouping.fromJson(value);
72
+ case 'Lambda':
73
+ return Lambda.fromJson(value);
74
+ case 'Type':
75
+ return Type.fromJson(value);
76
+ case 'Field':
77
+ return FieldFactory(value['names']);
78
+ default:
79
+ return value;
80
+ }
81
+ }
82
+ return value;
83
+ };
33
84
  function applyMixins(derivedCtor, constructors) {
34
85
  constructors.forEach((baseCtor) => {
35
86
  Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
@@ -38,17 +89,24 @@ function applyMixins(derivedCtor, constructors) {
38
89
  });
39
90
  });
40
91
  }
41
- export function render(value, { aliases, normalize, escape, prefix, parser, } = {}) {
92
+ export function render(value, { aliases, normalize, escape, prefix, parser, options, } = {}) {
42
93
  if (Types.isFunction(value)) {
43
- return render(value(syntax), { aliases, normalize, prefix, parser });
94
+ return render(value(syntax), {
95
+ aliases,
96
+ normalize,
97
+ prefix,
98
+ parser,
99
+ options,
100
+ });
44
101
  }
45
102
  if (Types.isObject(value) && 'render' in value) {
46
- return render(value.render({ aliases, escape, prefix, parser }), {
103
+ return render(value.render({ aliases, escape, prefix, parser, options }), {
47
104
  aliases,
48
105
  normalize,
49
106
  escape,
50
107
  prefix,
51
108
  parser,
109
+ options,
52
110
  });
53
111
  }
54
112
  return normalize ? normalizeValue(value, { aliases, escape }) : value;
@@ -62,9 +120,20 @@ export function resolve(values, parser) {
62
120
  }
63
121
  return parser;
64
122
  }
65
- export function encode(values, parser) {
123
+ export function encode(values, parser, options) {
66
124
  if (parser !== undefined) {
67
- return values.map((v) => Types.isObject(v) || v === null ? v : parser?.encode(v));
125
+ return values.map((v) => {
126
+ if (Types.isArray(v))
127
+ return encode(v, parser, options);
128
+ if (Types.isObject(v) || v == null)
129
+ return v;
130
+ try {
131
+ return parser.encode(v, options);
132
+ }
133
+ catch {
134
+ return v;
135
+ }
136
+ });
68
137
  }
69
138
  return values;
70
139
  }
@@ -78,23 +147,27 @@ export class Function {
78
147
  get [Symbol.toStringTag]() {
79
148
  return 'Function';
80
149
  }
81
- toJSON() {
150
+ toJson() {
82
151
  return {
83
152
  $type: Types.rawType(this),
84
153
  name: this.name,
85
- values: this.values.map((v) => Types.isObject(v) && 'toJSON' in v ? v.toJSON() : v),
154
+ values: this.values.map((v) => Types.isObject(v) && 'toJson' in v ? v.toJson() : v),
86
155
  normalize: this.normalize,
87
156
  };
88
157
  }
89
- render({ aliases, escape, prefix, parser, }) {
158
+ static fromJson(json) {
159
+ return new Function(json['name'], json['values'].map((v) => RenderableFactory(v)), json['normalize'], json['escape']);
160
+ }
161
+ render({ aliases, escape, prefix, parser, options, }) {
90
162
  parser = resolve(this.values, parser);
91
- let [left, ...values] = encode(this.values, parser);
163
+ let [left, ...values] = encode(this.values, parser, options);
92
164
  left = render(left, {
93
165
  aliases,
94
166
  escape,
95
167
  prefix,
96
168
  parser,
97
169
  normalize: this.normalize === 'all' || this.normalize === 'left',
170
+ options,
98
171
  });
99
172
  const params = [
100
173
  left,
@@ -104,6 +177,7 @@ export class Function {
104
177
  prefix,
105
178
  parser,
106
179
  normalize: this.normalize === 'all' || this.normalize === 'right',
180
+ options,
107
181
  })),
108
182
  ];
109
183
  return `${this.name}(${params.join(', ')})`;
@@ -111,6 +185,9 @@ export class Function {
111
185
  clone() {
112
186
  return new Function(this.name, this.values.map((v) => Objects.clone(v)), this.normalize, this.escape);
113
187
  }
188
+ resolve(parser) {
189
+ return parser;
190
+ }
114
191
  }
115
192
  export class StringAndCollectionFunctions {
116
193
  concat(left, right, normalize = 'right') {
@@ -217,11 +294,17 @@ export class ArithmeticFunctions {
217
294
  }
218
295
  }
219
296
  export class TypeFunctions {
220
- cast(left, right, normalize = 'right') {
221
- return new Function('cast', [left, right], normalize);
222
- }
223
- isof(left, right, normalize = 'right') {
224
- return new Function('isof', [left, right], normalize);
297
+ cast(left, type) {
298
+ return FieldFactory([
299
+ type !== undefined
300
+ ? new Type('cast', type, left)
301
+ : new Type('cast', left),
302
+ ]);
303
+ }
304
+ isof(left, type) {
305
+ return type !== undefined
306
+ ? new Type('isof', type, left)
307
+ : new Type('isof', left);
225
308
  }
226
309
  }
227
310
  export class GeoFunctions {
@@ -249,23 +332,27 @@ export class Operator {
249
332
  get [Symbol.toStringTag]() {
250
333
  return 'Operator';
251
334
  }
252
- toJSON() {
335
+ toJson() {
253
336
  return {
254
337
  $type: Types.rawType(this),
255
338
  op: this.op,
256
- values: this.values.map((v) => Types.isObject(v) && 'toJSON' in v ? v.toJSON() : v),
339
+ values: this.values.map((v) => Types.isObject(v) && 'toJson' in v ? v.toJson() : v),
257
340
  normalize: this.normalize,
258
341
  };
259
342
  }
260
- render({ aliases, escape, prefix, parser, }) {
343
+ static fromJson(json) {
344
+ return new Operator(json['op'], json['values'].map((v) => RenderableFactory(v)), json['normalize']);
345
+ }
346
+ render({ aliases, escape, prefix, parser, options, }) {
261
347
  parser = resolve(this.values, parser);
262
- let [left, right] = encode(this.values, parser);
348
+ let [left, right] = encode(this.values, parser, options);
263
349
  left = render(left, {
264
350
  aliases,
265
351
  escape,
266
352
  prefix,
267
353
  parser,
268
354
  normalize: this.normalize === 'all' || this.normalize === 'left',
355
+ options,
269
356
  });
270
357
  if (right !== undefined) {
271
358
  right = Array.isArray(right)
@@ -276,6 +363,7 @@ export class Operator {
276
363
  prefix,
277
364
  parser,
278
365
  normalize: this.normalize === 'all' || this.normalize === 'right',
366
+ options,
279
367
  }))
280
368
  .join(',')})`
281
369
  : render(right, {
@@ -284,6 +372,7 @@ export class Operator {
284
372
  prefix,
285
373
  parser,
286
374
  normalize: this.normalize === 'all' || this.normalize === 'right',
375
+ options,
287
376
  });
288
377
  return `${left} ${this.op} ${right}`;
289
378
  }
@@ -292,6 +381,9 @@ export class Operator {
292
381
  clone() {
293
382
  return new Operator(this.op, this.values.map((v) => Objects.clone(v)), this.normalize);
294
383
  }
384
+ resolve(parser) {
385
+ return parser;
386
+ }
295
387
  }
296
388
  export class LogicalOperators {
297
389
  eq(left, right, normalize = 'right') {
@@ -357,18 +449,73 @@ export class Grouping {
357
449
  get [Symbol.toStringTag]() {
358
450
  return 'Grouping';
359
451
  }
360
- toJSON() {
452
+ toJson() {
361
453
  return {
362
454
  $type: Types.rawType(this),
363
- group: this.group.toJSON(),
455
+ group: this.group.toJson(),
364
456
  };
365
457
  }
366
- render({ aliases, escape, prefix, parser, }) {
367
- return `(${render(this.group, { aliases, escape, prefix, parser })})`;
458
+ static fromJson(json) {
459
+ return new Grouping(json['group'].map((v) => RenderableFactory(v)));
460
+ }
461
+ render({ aliases, escape, prefix, parser, options, }) {
462
+ return `(${render(this.group, {
463
+ aliases,
464
+ escape,
465
+ prefix,
466
+ parser,
467
+ options,
468
+ })})`;
368
469
  }
369
470
  clone() {
370
471
  return new Grouping(Objects.clone(this.group));
371
472
  }
473
+ resolve(parser) {
474
+ return parser;
475
+ }
476
+ }
477
+ export class Type {
478
+ constructor(name, type, value) {
479
+ this.name = name;
480
+ this.type = type;
481
+ this.value = value;
482
+ }
483
+ get [Symbol.toStringTag]() {
484
+ return 'Type';
485
+ }
486
+ toJson() {
487
+ return {
488
+ $type: Types.rawType(this),
489
+ name: this.name,
490
+ type: this.type,
491
+ value: this.value,
492
+ };
493
+ }
494
+ static fromJson(json) {
495
+ return new Type(json['name'], json['type'], RenderableFactory(json['value']));
496
+ }
497
+ render({ aliases, escape, prefix, parser, options, }) {
498
+ if (this.value) {
499
+ parser = resolve([this.value], parser);
500
+ let [left, right] = encode([this.value], parser, options);
501
+ left = render(left, { aliases, escape, prefix, parser, options });
502
+ return `${this.name}(${left}, '${this.type}')`;
503
+ }
504
+ else {
505
+ return `${this.name}('${this.type}')`;
506
+ }
507
+ }
508
+ clone() {
509
+ return new Type(this.name, this.type, Objects.clone(this.value));
510
+ }
511
+ resolve(parser) {
512
+ parser =
513
+ parser instanceof ODataStructuredTypeFieldParser &&
514
+ parser.isStructuredType()
515
+ ? parser.structured()
516
+ : parser;
517
+ return parser?.findChildParser((p) => p.isTypeOf(this.type));
518
+ }
372
519
  }
373
520
  export class Lambda {
374
521
  constructor(op, values, alias) {
@@ -379,17 +526,20 @@ export class Lambda {
379
526
  get [Symbol.toStringTag]() {
380
527
  return 'Lambda';
381
528
  }
382
- toJSON() {
529
+ toJson() {
383
530
  return {
384
531
  $type: Types.rawType(this),
385
532
  op: this.op,
386
- values: this.values.map((v) => Types.isObject(v) && 'toJSON' in v ? v.toJSON() : v),
533
+ values: this.values.map((v) => Types.isObject(v) && 'toJson' in v ? v.toJson() : v),
387
534
  alias: this.alias,
388
535
  };
389
536
  }
390
- render({ aliases, escape, prefix, parser, }) {
537
+ static fromJson(json) {
538
+ return new Lambda(json['op'], json['values'].map((v) => RenderableFactory(v)), json['alias']);
539
+ }
540
+ render({ aliases, escape, prefix, parser, options, }) {
391
541
  parser = resolve(this.values, parser);
392
- let [left, right] = encode(this.values, parser);
542
+ let [left, right] = encode(this.values, parser, options);
393
543
  left = render(left, { aliases, escape, prefix, parser });
394
544
  if (right) {
395
545
  let alias = this.alias || left.split('/').pop().toLowerCase()[0];
@@ -397,6 +547,7 @@ export class Lambda {
397
547
  aliases,
398
548
  escape,
399
549
  prefix: alias,
550
+ options,
400
551
  parser,
401
552
  })})`;
402
553
  }
@@ -407,6 +558,9 @@ export class Lambda {
407
558
  clone() {
408
559
  return new Lambda(this.op, this.values.map((v) => Objects.clone(v)), this.alias);
409
560
  }
561
+ resolve(parser) {
562
+ return parser;
563
+ }
410
564
  }
411
565
  export class LambdaOperators {
412
566
  any(left, right, alias) {
@@ -441,4 +595,4 @@ export class ODataSyntax {
441
595
  }
442
596
  applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
443
597
  export const syntax = new ODataSyntax();
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBcUI1QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBbUIsUUFBa0IsRUFBRSxFQUFPLEVBQUUsQ0FDMUUsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFPLEVBQUU7SUFDaEMsR0FBRyxDQUFDLE1BQVMsRUFBRSxHQUFvQjtRQUNqQyxJQUFJLEtBQUssR0FBSSxNQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBdUIsRUFBRSxFQUFFLENBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdEO2FBQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ25CO2FBQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDWixLQUFLLEVBQUUsT0FBTztnQkFDZCxLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztTQUNKO2FBQU0sSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUNyQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyRTthQUFNO1lBQ0wsT0FBTyxZQUFZLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELEdBQUcsQ0FBQyxNQUFTLEVBQUUsR0FBVztRQUN4QixPQUFPLENBQ0wsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUNqRSxHQUFHLElBQUksTUFBTSxDQUNkLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBRUwsU0FBUyxXQUFXLENBQUMsV0FBZ0IsRUFBRSxZQUFtQjtJQUN4RCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM5RCxNQUFNLENBQUMsY0FBYyxDQUNuQixXQUFXLENBQUMsU0FBUyxFQUNyQixJQUFJLEVBQ0osTUFBTSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO2dCQUN2RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUN0QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUNwQixLQUFVLEVBQ1YsRUFDRSxPQUFPLEVBQ1AsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxNQU9KLEVBQUU7SUFFTixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDM0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUN0RTtJQUNELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFO1FBQzlDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQy9ELE9BQU87WUFDUCxTQUFTO1lBQ1QsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBVyxFQUFFLE1BQW9CO0lBQ3ZELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtRQUN4QixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUN4QixDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FDL0QsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLElBQUksTUFBTSxFQUFFO1lBQ3RFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBVyxFQUFFLE1BQW9CO0lBQ3RELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtRQUN4QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUMzQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDeEQsQ0FBQztLQUNIO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFlBQ1ksSUFBWSxFQUNaLE1BQWEsRUFDYixTQUFvQixFQUNwQixTQUFrQixLQUFLO1FBSHZCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2IsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtJQUNoQyxDQUFDO0lBRUosSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BEO1lBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxHQU1QO1FBQ0MsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwRCxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNsQixPQUFPO1lBQ1AsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTTtTQUNqRSxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRztZQUNiLElBQUk7WUFDSixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUN2QixNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUNSLE9BQU87Z0JBQ1AsTUFBTTtnQkFDTixNQUFNO2dCQUNOLE1BQU07Z0JBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTzthQUNsRSxDQUFDLENBQ0g7U0FDRixDQUFDO1FBQ0YsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLFFBQVEsQ0FDakIsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN4QyxJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyw0QkFBNEI7SUFDdkMsTUFBTSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUMxRCxPQUFPLElBQUksUUFBUSxDQUFJLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUM1RCxPQUFPLElBQUksUUFBUSxDQUFJLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUM1RCxPQUFPLElBQUksUUFBUSxDQUFJLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUMzRCxPQUFPLElBQUksUUFBUSxDQUFJLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVMsRUFBRSxZQUF1QixPQUFPO1FBQzlDLE9BQU8sSUFBSSxRQUFRLENBQUksUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFlBQXVCLE9BQU87UUFDOUQsT0FBTyxJQUFJLFFBQVEsQ0FBSSxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELFNBQVMsQ0FDUCxJQUFTLEVBQ1QsS0FBYSxFQUNiLE1BQWUsRUFDZixZQUF1QixNQUFNO1FBRTdCLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxJQUFJLFFBQVEsQ0FBSSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsU0FBUyxDQUFDLElBQU8sRUFBRSxLQUFVLEVBQUUsWUFBdUIsTUFBTTtRQUMxRCxPQUFPLElBQUksUUFBUSxDQUFJLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsY0FBYyxDQUFDLElBQU8sRUFBRSxLQUFVLEVBQUUsWUFBdUIsTUFBTTtRQUMvRCxPQUFPLElBQUksUUFBUSxDQUFJLGdCQUFnQixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxlQUFlO0lBQzFCLGNBQWMsQ0FDWixJQUFrQixFQUNsQixPQUFlLEVBQ2YsWUFBdUIsTUFBTTtRQUU3QixPQUFPLElBQUksUUFBUSxDQUFJLGdCQUFnQixFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLENBQUMsSUFBUyxFQUFFLFlBQXVCLE1BQU07UUFDOUMsT0FBTyxJQUFJLFFBQVEsQ0FBSSxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQVMsRUFBRSxZQUF1QixNQUFNO1FBQzlDLE9BQU8sSUFBSSxRQUFRLENBQUksU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUMzQyxPQUFPLElBQUksUUFBUSxDQUFJLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsSUFBSSxDQUFDLElBQVMsRUFBRSxZQUF1QixNQUFNO1FBQzNDLE9BQU8sSUFBSSxRQUFRLENBQUksTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELEdBQUcsQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUMxQyxPQUFPLElBQUksUUFBUSxDQUFJLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUN4RCxPQUFPLElBQUksUUFBUSxDQUFJLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUMzQyxPQUFPLElBQUksUUFBUSxDQUFJLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxXQUFXLENBQUMsSUFBUyxFQUFFLFlBQXVCLE1BQU07UUFDbEQsT0FBTyxJQUFJLFFBQVEsQ0FBSSxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQVMsRUFBRSxZQUF1QixNQUFNO1FBQ2xELE9BQU8sSUFBSSxRQUFRLENBQUksYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUM3QyxPQUFPLElBQUksUUFBUSxDQUFJLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxLQUFLLENBQUMsSUFBUyxFQUFFLFlBQXVCLE1BQU07UUFDNUMsT0FBTyxJQUFJLFFBQVEsQ0FBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsR0FBRztRQUNELE9BQU8sSUFBSSxRQUFRLENBQUksS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQVMsRUFBRSxZQUF1QixNQUFNO1FBQzdDLE9BQU8sSUFBSSxRQUFRLENBQUksUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUMzQyxPQUFPLElBQUksUUFBUSxDQUFJLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUN6RCxPQUFPLElBQUksUUFBUSxDQUFJLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELFlBQVksQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUNuRCxPQUFPLElBQUksUUFBUSxDQUFJLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLENBQUMsSUFBUyxFQUFFLFlBQXVCLE1BQU07UUFDM0MsT0FBTyxJQUFJLFFBQVEsQ0FBSSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLE9BQU8sQ0FBQyxJQUFnQixFQUFFLFlBQXVCLE1BQU07UUFDckQsT0FBTyxJQUFJLFFBQVEsQ0FBSSxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQWdCLEVBQUUsWUFBdUIsTUFBTTtRQUNuRCxPQUFPLElBQUksUUFBUSxDQUFJLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxLQUFLLENBQUMsSUFBZ0IsRUFBRSxZQUF1QixNQUFNO1FBQ25ELE9BQU8sSUFBSSxRQUFRLENBQUksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFDeEIsSUFBSSxDQUFDLElBQWdCLEVBQUUsS0FBYyxFQUFFLFlBQXVCLE9BQU87UUFDbkUsT0FBTyxJQUFJLFFBQVEsQ0FBSSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFnQixFQUFFLEtBQWMsRUFBRSxZQUF1QixPQUFPO1FBQ25FLE9BQU8sSUFBSSxRQUFRLENBQUksTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFdBQVcsQ0FBQyxJQUFPLEVBQUUsS0FBYSxFQUFFLFlBQXVCLE9BQU87UUFDaEUsT0FBTyxJQUFJLFFBQVEsQ0FBSSxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFPLEVBQUUsS0FBYSxFQUFFLFlBQXVCLE9BQU87UUFDbEUsT0FBTyxJQUFJLFFBQVEsQ0FBSSxnQkFBZ0IsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsU0FBUyxDQUFDLElBQU8sRUFBRSxZQUF1QixNQUFNO1FBQzlDLE9BQU8sSUFBSSxRQUFRLENBQUksWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixJQUFJLENBQUMsSUFBZ0IsRUFBRSxLQUFVLEVBQUUsWUFBdUIsTUFBTTtRQUM5RCxPQUFPLElBQUksUUFBUSxDQUFJLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sUUFBUTtJQUNuQixZQUNZLEVBQVUsRUFDVixNQUFhLEVBQ2IsU0FBb0I7UUFGcEIsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUNWLFdBQU0sR0FBTixNQUFNLENBQU87UUFDYixjQUFTLEdBQVQsU0FBUyxDQUFXO0lBQzdCLENBQUM7SUFFSixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDMUIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDcEQ7WUFDRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEdBTVA7UUFDQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVoRCxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNsQixPQUFPO1lBQ1AsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTTtTQUNqRSxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUMxQixDQUFDLENBQUMsSUFBSSxLQUFLO3FCQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1QsTUFBTSxDQUFDLENBQUMsRUFBRTtvQkFDUixPQUFPO29CQUNQLE1BQU07b0JBQ04sTUFBTTtvQkFDTixNQUFNO29CQUNOLFNBQVMsRUFDUCxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU87aUJBQ3pELENBQUMsQ0FDSDtxQkFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUc7Z0JBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUNaLE9BQU87b0JBQ1AsTUFBTTtvQkFDTixNQUFNO29CQUNOLE1BQU07b0JBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTztpQkFDbEUsQ0FBQyxDQUFDO1lBQ1AsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksUUFBUSxDQUNqQixJQUFJLENBQUMsRUFBRSxFQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN0RCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN0RCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN0RCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN0RCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN0RCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN0RCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0Q7Ozs7Ozs7TUFPRTtJQUNGLEdBQUcsQ0FBQyxJQUFTLEVBQUUsWUFBdUIsTUFBTTtRQUMxQyxPQUFPLElBQUksUUFBUSxDQUFJLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxHQUFHLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxZQUF1QixPQUFPO1FBQ3ZELE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxFQUFFLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxZQUF1QixPQUFPO1FBQ3RELE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN2RCxPQUFPLElBQUksUUFBUSxDQUFJLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN2RCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN2RCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN2RCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsWUFBdUIsT0FBTztRQUN2RCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsR0FBRyxDQUFDLEtBQVUsRUFBRSxZQUF1QixPQUFPO1FBQzVDLE9BQU8sSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFDbkIsWUFBc0IsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtJQUFHLENBQUM7SUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUNMLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sR0FNUDtRQUNDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUN4RSxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sTUFBTTtJQUNqQixZQUNZLEVBQVUsRUFDVixNQUFhLEVBQ2IsS0FBYztRQUZkLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBUztJQUN2QixDQUFDO0lBRUosSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzFCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BEO1lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxHQU1QO1FBQ0MsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFaEQsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDbEQsT0FBTztnQkFDUCxNQUFNO2dCQUNOLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU07YUFDUCxDQUFDLEdBQUcsQ0FBQztTQUNQO2FBQU07WUFDTCxPQUFPLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLE1BQU0sQ0FDZixJQUFJLENBQUMsRUFBRSxFQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxlQUFlO0lBQzFCLEdBQUcsQ0FBQyxJQUFPLEVBQUUsS0FBVSxFQUFFLEtBQWM7UUFDckMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFPLEVBQUUsS0FBVSxFQUFFLEtBQWM7UUFDckMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWM7Q0FBTTtBQU1qQyxXQUFXLENBQUMsY0FBYyxFQUFFO0lBQzFCLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsZUFBZTtDQUNoQixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXdCLElBQUksY0FBYyxFQUFPLENBQUM7QUFFeEUsTUFBTSxPQUFPLGNBQWM7Q0FBTTtBQVdqQyxXQUFXLENBQUMsY0FBYyxFQUFFO0lBQzFCLDRCQUE0QjtJQUM1QixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLFlBQVk7SUFDWixvQkFBb0I7Q0FDckIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUF3QixJQUFJLGNBQWMsRUFBTyxDQUFDO0FBRXhFLE1BQU0sT0FBTyxXQUFXO0NBQU07QUFFOUIsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBcUIsSUFBSSxXQUFXLEVBQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhcnNlciB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9iamVjdHMsIFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBRdWVyeUN1c3RvbVR5cGUgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZVZhbHVlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5cbmV4cG9ydCB0eXBlIE5vcm1hbGl6ZSA9ICdhbGwnIHwgJ3JpZ2h0JyB8ICdsZWZ0JyB8ICdub25lJztcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJhYmxlIHtcbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gICAgcGFyc2VyLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxhbnk+O1xuICB9KTogc3RyaW5nO1xuICB0b1N0cmluZygpOiBzdHJpbmc7XG4gIHRvSlNPTigpOiBhbnk7XG4gIGNsb25lKCk6IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpZWxkRmFjdG9yeSA9IDxUIGV4dGVuZHMgb2JqZWN0PihuYW1lczogc3RyaW5nW10gPSBbXSk6IGFueSA9PlxuICBuZXcgUHJveHkoeyBfbmFtZXM6IG5hbWVzIH0gYXMgVCwge1xuICAgIGdldCh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgICBsZXQgbmFtZXMgPSAodGFyZ2V0IGFzIGFueSlbJ19uYW1lcyddO1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbmRlcicpIHtcbiAgICAgICAgcmV0dXJuICh7IHByZWZpeCB9OiB7IHByZWZpeD86IHN0cmluZyB9KSA9PlxuICAgICAgICAgIHByZWZpeCA/IGAke3ByZWZpeH0vJHtuYW1lcy5qb2luKCcvJyl9YCA6IG5hbWVzLmpvaW4oJy8nKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY2xvbmUnKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiBGaWVsZEZhY3RvcnkoWy4uLm5hbWVzXSk7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2lzRmllbGQnKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICd0b0pTT04nKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiAoe1xuICAgICAgICAgICR0eXBlOiAnRmllbGQnLFxuICAgICAgICAgIG5hbWVzOiBuYW1lcyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3Jlc29sdmUnKSB7XG4gICAgICAgIHJldHVybiAocGFyc2VyOiBhbnkpID0+XG4gICAgICAgICAgbmFtZXMucmVkdWNlKChhY2M6IGFueSwgbmFtZTogc3RyaW5nKSA9PiBhY2MuZmllbGQobmFtZSksIHBhcnNlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRmllbGRGYWN0b3J5KFsuLi5uYW1lcywga2V5XSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhcyh0YXJnZXQ6IFQsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsndG9KU09OJywgJ2lzRmllbGQnLCAnY2xvbmUnLCAncmVuZGVyJywgJ3Jlc29sdmUnXS5pbmNsdWRlcyhrZXkpIHx8XG4gICAgICAgIGtleSBpbiB0YXJnZXRcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG5cbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yOiBhbnksIGNvbnN0cnVjdG9yczogYW55W10pIHtcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZUN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlQ3Rvci5wcm90b3R5cGUsIG5hbWUpIHx8XG4gICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKFxuICB2YWx1ZTogYW55LFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBub3JtYWxpemUsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgICBwYXJzZXIsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICBwYXJzZXI/OiBQYXJzZXI8YW55PjtcbiAgfSA9IHt9LFxuKTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwge1xuICBpZiAoVHlwZXMuaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlKHN5bnRheCksIHsgYWxpYXNlcywgbm9ybWFsaXplLCBwcmVmaXgsIHBhcnNlciB9KTtcbiAgfVxuICBpZiAoVHlwZXMuaXNPYmplY3QodmFsdWUpICYmICdyZW5kZXInIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHJlbmRlcih2YWx1ZS5yZW5kZXIoeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgcGFyc2VyIH0pLCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgbm9ybWFsaXplLFxuICAgICAgZXNjYXBlLFxuICAgICAgcHJlZml4LFxuICAgICAgcGFyc2VyLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemUgPyBub3JtYWxpemVWYWx1ZSh2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSkgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUodmFsdWVzOiBhbnksIHBhcnNlcj86IFBhcnNlcjxhbnk+KSB7XG4gIGlmIChwYXJzZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBmaWVsZHMgPSB2YWx1ZXMuZmlsdGVyKFxuICAgICAgKHY6IGFueSkgPT4gVHlwZXMuaXNPYmplY3QodikgJiYgJ2lzRmllbGQnIGluIHYgJiYgdi5pc0ZpZWxkKCksXG4gICAgKTtcbiAgICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMSAmJiBUeXBlcy5pc09iamVjdChwYXJzZXIpICYmICdmaWVsZCcgaW4gcGFyc2VyKSB7XG4gICAgICByZXR1cm4gZmllbGRzWzBdLnJlc29sdmUocGFyc2VyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZSh2YWx1ZXM6IGFueSwgcGFyc2VyPzogUGFyc2VyPGFueT4pIHtcbiAgaWYgKHBhcnNlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5tYXAoKHY6IGFueSkgPT5cbiAgICAgIFR5cGVzLmlzT2JqZWN0KHYpIHx8IHYgPT09IG51bGwgPyB2IDogcGFyc2VyPy5lbmNvZGUodiksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb248VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBOb3JtYWxpemUsXG4gICAgcHJvdGVjdGVkIGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlLFxuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnRnVuY3Rpb24nO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMubWFwKCh2KSA9PlxuICAgICAgICBUeXBlcy5pc09iamVjdCh2KSAmJiAndG9KU09OJyBpbiB2ID8gdi50b0pTT04oKSA6IHYsXG4gICAgICApLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gICAgcGFyc2VyLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxUPjtcbiAgfSk6IHN0cmluZyB7XG4gICAgcGFyc2VyID0gcmVzb2x2ZSh0aGlzLnZhbHVlcywgcGFyc2VyKTtcbiAgICBsZXQgW2xlZnQsIC4uLnZhbHVlc10gPSBlbmNvZGUodGhpcy52YWx1ZXMsIHBhcnNlcik7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXgsXG4gICAgICBwYXJzZXIsXG4gICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplID09PSAnYWxsJyB8fCB0aGlzLm5vcm1hbGl6ZSA9PT0gJ2xlZnQnLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgIGxlZnQsXG4gICAgICAuLi52YWx1ZXMubWFwKCh2OiBhbnkpID0+XG4gICAgICAgIHJlbmRlcih2LCB7XG4gICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgcHJlZml4LFxuICAgICAgICAgIHBhcnNlcixcbiAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplID09PSAnYWxsJyB8fCB0aGlzLm5vcm1hbGl6ZSA9PT0gJ3JpZ2h0JyxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0oJHtwYXJhbXMuam9pbignLCAnKX0pYDtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IE9iamVjdHMuY2xvbmUodikpLFxuICAgICAgdGhpcy5ub3JtYWxpemUsXG4gICAgICB0aGlzLmVzY2FwZSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+IHtcbiAgY29uY2F0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29uY2F0JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGNvbnRhaW5zKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29udGFpbnMnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgZW5kc1dpdGgobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdlbmRzd2l0aCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBpbmRleE9mKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaW5kZXhvZicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBsZW5ndGgobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdsZW5ndGgnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBzdGFydHNXaXRoKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc3RhcnRzd2l0aCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBzdWJTdHJpbmcoXG4gICAgbGVmdDogYW55LFxuICAgIHJpZ2h0OiBudW1iZXIsXG4gICAgbGVuZ3RoPzogbnVtYmVyLFxuICAgIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnLFxuICApIHtcbiAgICBsZXQgdmFsdWVzID0gW2xlZnQsIHJpZ2h0XTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N1YnN0cmluZycsIHZhbHVlcywgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGhhc1N1YnNldChsZWZ0OiBULCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hhc3N1YnNldCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaGFzU3Vic2VxdWVuY2UobGVmdDogVCwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXF1ZW5jZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0Z1bmN0aW9uczxUPiB7XG4gIG1hdGNoZXNQYXR0ZXJuKFxuICAgIGxlZnQ6IGFueSB8IHN0cmluZyxcbiAgICBwYXR0ZXJuOiBzdHJpbmcsXG4gICAgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScsXG4gICkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21hdGNoZXNQYXR0ZXJuJywgW2xlZnQsIHBhdHRlcm5dLCBub3JtYWxpemUpO1xuICB9XG4gIHRvTG93ZXIobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvbG93ZXInLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgdG9VcHBlcihsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG91cHBlcicsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICB0cmltKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0cmltJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPiB7XG4gIGRhdGUobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RhdGUnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZGF5KGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdkYXknLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZnJhY3Rpb25hbHNlY29uZHMobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2ZyYWN0aW9uYWxzZWNvbmRzJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG4gIGhvdXIobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hvdXInLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbWF4ZGF0ZXRpbWUobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21heGRhdGV0aW1lJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1pbmRhdGV0aW1lKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtaW5kYXRldGltZScsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBtaW51dGUobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbnV0ZScsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBtb250aChsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbW9udGgnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbm93KCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ25vdycsIFtdLCAnbm9uZScpO1xuICB9XG4gIHNlY29uZChsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc2Vjb25kJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG4gIHRpbWUobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RpbWUnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgdG90YWxvZmZzZXRtaW51dGVzKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbG9mZnNldG1pbnV0ZXMnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgdG90YWxzZWNvbmRzKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbHNlY29uZHMnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgeWVhcihsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigneWVhcicsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY0Z1bmN0aW9uczxUPiB7XG4gIGNlaWxpbmcobGVmdDogVCB8IHN0cmluZywgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjZWlsaW5nJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG4gIGZsb29yKGxlZnQ6IFQgfCBzdHJpbmcsIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZmxvb3InLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgcm91bmQobGVmdDogVCB8IHN0cmluZywgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdyb3VuZCcsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZUZ1bmN0aW9uczxUPiB7XG4gIGNhc3QobGVmdDogVCB8IHN0cmluZywgcmlnaHQ/OiBzdHJpbmcsIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc3QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgaXNvZihsZWZ0OiBUIHwgc3RyaW5nLCByaWdodD86IHN0cmluZywgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaXNvZicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0Z1bmN0aW9uczxUPiB7XG4gIGdlb0Rpc3RhbmNlKGxlZnQ6IFQsIHJpZ2h0OiBzdHJpbmcsIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5kaXN0YW5jZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2VvSW50ZXJzZWN0cyhsZWZ0OiBULCByaWdodDogc3RyaW5nLCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdnZW8uaW50ZXJzZWN0cycsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2VvTGVuZ3RoKGxlZnQ6IFQsIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmxlbmd0aCcsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge1xuICBjYXNlKGxlZnQ6IFQgfCBzdHJpbmcsIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY2FzZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhdG9yPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBub3JtYWxpemU6IE5vcm1hbGl6ZSxcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ09wZXJhdG9yJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMubWFwKCh2KSA9PlxuICAgICAgICBUeXBlcy5pc09iamVjdCh2KSAmJiAndG9KU09OJyBpbiB2ID8gdi50b0pTT04oKSA6IHYsXG4gICAgICApLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gICAgcGFyc2VyLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxUPjtcbiAgfSk6IHN0cmluZyB7XG4gICAgcGFyc2VyID0gcmVzb2x2ZSh0aGlzLnZhbHVlcywgcGFyc2VyKTtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IGVuY29kZSh0aGlzLnZhbHVlcywgcGFyc2VyKTtcblxuICAgIGxlZnQgPSByZW5kZXIobGVmdCwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICAgIHByZWZpeCxcbiAgICAgIHBhcnNlcixcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgPT09ICdhbGwnIHx8IHRoaXMubm9ybWFsaXplID09PSAnbGVmdCcsXG4gICAgfSk7XG4gICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJpZ2h0ID0gQXJyYXkuaXNBcnJheShyaWdodClcbiAgICAgICAgPyBgKCR7cmlnaHRcbiAgICAgICAgICAgIC5tYXAoKHYpID0+XG4gICAgICAgICAgICAgIHJlbmRlcih2LCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgICAgIHBhcnNlcixcbiAgICAgICAgICAgICAgICBub3JtYWxpemU6XG4gICAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZSA9PT0gJ2FsbCcgfHwgdGhpcy5ub3JtYWxpemUgPT09ICdyaWdodCcsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJywnKX0pYFxuICAgICAgICA6IHJlbmRlcihyaWdodCwge1xuICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHBhcnNlcixcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgPT09ICdhbGwnIHx8IHRoaXMubm9ybWFsaXplID09PSAncmlnaHQnLFxuICAgICAgICAgIH0pO1xuICAgICAgcmV0dXJuIGAke2xlZnR9ICR7dGhpcy5vcH0gJHtyaWdodH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5vcH0oJHtsZWZ0fSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcihcbiAgICAgIHRoaXMub3AsXG4gICAgICB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IE9iamVjdHMuY2xvbmUodikpLFxuICAgICAgdGhpcy5ub3JtYWxpemUsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbE9wZXJhdG9yczxUPiB7XG4gIGVxKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZXEnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbmUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGd0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZ3QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZ2UnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGx0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbHQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGxlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbGUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIC8qXG4gIGFuZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2FuZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgb3IobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdvcicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgKi9cbiAgbm90KGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdub3QnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaGFzKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignaGFzJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBpbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2luJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY09wZXJhdG9yczxUPiB7XG4gIGFkZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ2FkZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgc3ViKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignc3ViJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBtdWwobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtdWwnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGRpdihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2RpdicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbW9kKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbW9kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBuZWcodmFsdWU6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignLScsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwaW5nPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBncm91cDogUmVuZGVyYWJsZSkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdHcm91cGluZyc7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICAgIHBhcnNlcixcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICBwYXJzZXI/OiBQYXJzZXI8VD47XG4gIH0pOiBzdHJpbmcge1xuICAgIHJldHVybiBgKCR7cmVuZGVyKHRoaXMuZ3JvdXAsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXgsIHBhcnNlciB9KX0pYDtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgR3JvdXBpbmcoT2JqZWN0cy5jbG9uZSh0aGlzLmdyb3VwKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYTxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3A6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgYWxpYXM/OiBzdHJpbmcsXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdMYW1iZGEnO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcy5tYXAoKHYpID0+XG4gICAgICAgIFR5cGVzLmlzT2JqZWN0KHYpICYmICd0b0pTT04nIGluIHYgPyB2LnRvSlNPTigpIDogdixcbiAgICAgICksXG4gICAgICBhbGlhczogdGhpcy5hbGlhcyxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gICAgcGFyc2VyLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxUPjtcbiAgfSk6IHN0cmluZyB7XG4gICAgcGFyc2VyID0gcmVzb2x2ZSh0aGlzLnZhbHVlcywgcGFyc2VyKTtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IGVuY29kZSh0aGlzLnZhbHVlcywgcGFyc2VyKTtcblxuICAgIGxlZnQgPSByZW5kZXIobGVmdCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgcGFyc2VyIH0pO1xuICAgIGlmIChyaWdodCkge1xuICAgICAgbGV0IGFsaWFzID0gdGhpcy5hbGlhcyB8fCBsZWZ0LnNwbGl0KCcvJykucG9wKCkudG9Mb3dlckNhc2UoKVswXTtcbiAgICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KCR7YWxpYXN9OiR7cmVuZGVyKHJpZ2h0LCB7XG4gICAgICAgIGFsaWFzZXMsXG4gICAgICAgIGVzY2FwZSxcbiAgICAgICAgcHJlZml4OiBhbGlhcyxcbiAgICAgICAgcGFyc2VyLFxuICAgICAgfSl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KClgO1xuICAgIH1cbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKFxuICAgICAgdGhpcy5vcCxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLmFsaWFzLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYU9wZXJhdG9yczxUPiB7XG4gIGFueShsZWZ0OiBULCByaWdodDogYW55LCBhbGlhcz86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKCdhbnknLCBbbGVmdCwgcmlnaHRdLCBhbGlhcyk7XG4gIH1cblxuICBhbGwobGVmdDogVCwgcmlnaHQ6IGFueSwgYWxpYXM/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYSgnYWxsJywgW2xlZnQsIHJpZ2h0XSwgYWxpYXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU9wZXJhdG9yczxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YU9wZXJhdG9yczxUPlxuICBleHRlbmRzIExvZ2ljYWxPcGVyYXRvcnM8VD4sXG4gICAgQXJpdGhtZXRpY09wZXJhdG9yczxUPixcbiAgICBMYW1iZGFPcGVyYXRvcnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFPcGVyYXRvcnMsIFtcbiAgTG9naWNhbE9wZXJhdG9ycyxcbiAgQXJpdGhtZXRpY09wZXJhdG9ycyxcbiAgTGFtYmRhT3BlcmF0b3JzLFxuXSk7XG5leHBvcnQgY29uc3Qgb3BlcmF0b3JzOiBPRGF0YU9wZXJhdG9yczxhbnk+ID0gbmV3IE9EYXRhT3BlcmF0b3JzPGFueT4oKTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhRnVuY3Rpb25zPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhRnVuY3Rpb25zPFQ+XG4gIGV4dGVuZHMgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPixcbiAgICBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIFN0cmluZ0Z1bmN0aW9uczxUPixcbiAgICBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPixcbiAgICBBcml0aG1ldGljRnVuY3Rpb25zPFQ+LFxuICAgIFR5cGVGdW5jdGlvbnM8VD4sXG4gICAgR2VvRnVuY3Rpb25zPFQ+LFxuICAgIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHt9XG5cbmFwcGx5TWl4aW5zKE9EYXRhRnVuY3Rpb25zLCBbXG4gIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIFN0cmluZ0Z1bmN0aW9ucyxcbiAgRGF0ZUFuZFRpbWVGdW5jdGlvbnMsXG4gIEFyaXRobWV0aWNGdW5jdGlvbnMsXG4gIFR5cGVGdW5jdGlvbnMsXG4gIEdlb0Z1bmN0aW9ucyxcbiAgQ29uZGl0aW9uYWxGdW5jdGlvbnMsXG5dKTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvbnM6IE9EYXRhRnVuY3Rpb25zPGFueT4gPSBuZXcgT0RhdGFGdW5jdGlvbnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFTeW50YXg8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFTeW50YXg8VD4gZXh0ZW5kcyBPRGF0YU9wZXJhdG9yczxUPiwgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmFwcGx5TWl4aW5zKE9EYXRhU3ludGF4LCBbT0RhdGFPcGVyYXRvcnMsIE9EYXRhRnVuY3Rpb25zXSk7XG5cbmV4cG9ydCBjb25zdCBzeW50YXg6IE9EYXRhU3ludGF4PGFueT4gPSBuZXcgT0RhdGFTeW50YXg8YW55PigpO1xuIl19
598
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUF3QjVDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUMxQixRQUFpQyxFQUFFLEVBQzlCLEVBQUUsQ0FDUCxJQUFJLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQU8sRUFBRTtJQUNoQyxHQUFHLENBQUMsTUFBUyxFQUFFLEdBQW9CO1FBQ2pDLElBQUksS0FBSyxHQUFJLE1BQWMsQ0FBQyxRQUFRLENBQTRCLENBQUM7UUFDakUsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxFQUNOLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixPQUFPLEdB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QUFXO0NBQU07QUFFOUIsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBcUIsSUFBSSxXQUFXLEVBQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGVGaWVsZFBhcnNlciB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYSc7XG5pbXBvcnQgeyBQYXJzZXIsIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBub3JtYWxpemVWYWx1ZSB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tcHV0ZUV4cHJlc3Npb24gfSBmcm9tICcuL2NvbXB1dGUnO1xuaW1wb3J0IHsgQ291bnRFeHByZXNzaW9uIH0gZnJvbSAnLi9jb3VudCc7XG5pbXBvcnQgeyBFeHBhbmRFeHByZXNzaW9uIH0gZnJvbSAnLi9leHBhbmQnO1xuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbiB9IGZyb20gJy4vZmlsdGVyJztcbmltcG9ydCB7IE9yZGVyQnlFeHByZXNzaW9uIH0gZnJvbSAnLi9vcmRlcmJ5JztcbmltcG9ydCB7IFNlYXJjaEV4cHJlc3Npb24gfSBmcm9tICcuL3NlYXJjaCc7XG5pbXBvcnQgeyBTZWxlY3RFeHByZXNzaW9uIH0gZnJvbSAnLi9zZWxlY3QnO1xuXG5leHBvcnQgdHlwZSBOb3JtYWxpemUgPSAnYWxsJyB8ICdyaWdodCcgfCAnbGVmdCcgfCAnbm9uZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyYWJsZSB7XG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICAgIHBhcnNlcixcbiAgICBvcHRpb25zLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxhbnk+O1xuICAgIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zO1xuICB9KTogc3RyaW5nO1xuICB0b1N0cmluZygpOiBzdHJpbmc7XG4gIHRvSnNvbigpOiBhbnk7XG4gIGNsb25lKCk6IGFueTtcbiAgcmVzb2x2ZShwYXJzZXI6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpZWxkRmFjdG9yeSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgbmFtZXM6IChzdHJpbmcgfCBSZW5kZXJhYmxlKVtdID0gW11cbik6IGFueSA9PlxuICBuZXcgUHJveHkoeyBfbmFtZXM6IG5hbWVzIH0gYXMgVCwge1xuICAgIGdldCh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgICBsZXQgbmFtZXMgPSAodGFyZ2V0IGFzIGFueSlbJ19uYW1lcyddIGFzIChzdHJpbmcgfCBSZW5kZXJhYmxlKVtdO1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbmRlcicpIHtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgcHJlZml4LFxuICAgICAgICAgIHBhcnNlcixcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9OiB7XG4gICAgICAgICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgICAgICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgICAgICAgcHJlZml4Pzogc3RyaW5nO1xuICAgICAgICAgIHBhcnNlcj86IFBhcnNlcjxUPjtcbiAgICAgICAgICBvcHRpb25zPzogUGFyc2VyT3B0aW9ucztcbiAgICAgICAgfSkgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZXMgPSBuYW1lcy5tYXAoKG46IGFueSkgPT5cbiAgICAgICAgICAgIHJlbmRlcihuLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4LCBwYXJzZXIsIG9wdGlvbnMgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwcmVmaXggJiYgKG5hbWVzLmxlbmd0aCA9PT0gMCB8fCB0eXBlb2YgbmFtZXNbMF0gPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgdmFsdWVzID0gW3ByZWZpeCwgLi4udmFsdWVzXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKCcvJyk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Nsb25lJykge1xuICAgICAgICByZXR1cm4gKCkgPT4gRmllbGRGYWN0b3J5KFsuLi5uYW1lc10pO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpc0ZpZWxkJykge1xuICAgICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9Kc29uJykge1xuICAgICAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgICAgICAkdHlwZTogJ0ZpZWxkJyxcbiAgICAgICAgICBuYW1lczogbmFtZXMsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdyZXNvbHZlJykge1xuICAgICAgICByZXR1cm4gKHBhcnNlcjogYW55KSA9PlxuICAgICAgICAgIG5hbWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2M6IGFueSwgbmFtZTogc3RyaW5nIHwgUmVuZGVyYWJsZSkgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBhY2M/LmZpZWxkKG5hbWUpXG4gICAgICAgICAgICAgICAgOiBuYW1lPy5yZXNvbHZlKHBhcnNlciksXG4gICAgICAgICAgICBwYXJzZXJcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEZpZWxkRmFjdG9yeShbLi4ubmFtZXMsIGtleSBhcyBzdHJpbmddKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFzKHRhcmdldDogVCwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgWyd0b0pzb24nLCAnaXNGaWVsZCcsICdjbG9uZScsICdyZW5kZXInLCAncmVzb2x2ZSddLmluY2x1ZGVzKGtleSkgfHxcbiAgICAgICAga2V5IGluIHRhcmdldFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcblxuZXhwb3J0IGNvbnN0IFJlbmRlcmFibGVGYWN0b3J5ID0gKHZhbHVlOiBhbnkpOiBSZW5kZXJhYmxlID0+IHtcbiAgaWYgKFR5cGVzLmlzUGxhaW5PYmplY3QodmFsdWUpICYmICckdHlwZScgaW4gdmFsdWUpIHtcbiAgICBzd2l0Y2ggKHZhbHVlLiR0eXBlKSB7XG4gICAgICBjYXNlICdTZWxlY3RFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIFNlbGVjdEV4cHJlc3Npb24uZnJvbUpzb24odmFsdWUpO1xuICAgICAgY2FzZSAnRXhwYW5kRXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiBFeHBhbmRFeHByZXNzaW9uLmZyb21Kc29uKHZhbHVlKTtcbiAgICAgIGNhc2UgJ0NvbXB1dGVFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIENvbXB1dGVFeHByZXNzaW9uLmZyb21Kc29uKHZhbHVlKTtcbiAgICAgIGNhc2UgJ0ZpbHRlckV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gRmlsdGVyRXhwcmVzc2lvbi5mcm9tSnNvbih2YWx1ZSk7XG4gICAgICBjYXNlICdPcmRlckJ5RXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiBPcmRlckJ5RXhwcmVzc2lvbi5mcm9tSnNvbih2YWx1ZSk7XG4gICAgICBjYXNlICdTZWFyY2hFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIFNlYXJjaEV4cHJlc3Npb24uZnJvbUpzb24odmFsdWUpO1xuICAgICAgY2FzZSAnQ291bnRFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIENvdW50RXhwcmVzc2lvbi5mcm9tSnNvbih2YWx1ZSk7XG4gICAgICBjYXNlICdGdW5jdGlvbic6XG4gICAgICAgIHJldHVybiBGdW5jdGlvbi5mcm9tSnNvbih2YWx1ZSk7XG4gICAgICBjYXNlICdPcGVyYXRvcic6XG4gICAgICAgIHJldHVybiBPcGVyYXRvci5mcm9tSnNvbih2YWx1ZSk7XG4gICAgICBjYXNlICdHcm91cGluZyc6XG4gICAgICAgIHJldHVybiBHcm91cGluZy5mcm9tSnNvbih2YWx1ZSk7XG4gICAgICBjYXNlICdMYW1iZGEnOlxuICAgICAgICByZXR1cm4gTGFtYmRhLmZyb21Kc29uKHZhbHVlKTtcbiAgICAgIGNhc2UgJ1R5cGUnOlxuICAgICAgICByZXR1cm4gVHlwZS5mcm9tSnNvbih2YWx1ZSk7XG4gICAgICBjYXNlICdGaWVsZCc6XG4gICAgICAgIHJldHVybiBGaWVsZEZhY3RvcnkodmFsdWVbJ25hbWVzJ10pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5mdW5jdGlvbiBhcHBseU1peGlucyhkZXJpdmVkQ3RvcjogYW55LCBjb25zdHJ1Y3RvcnM6IGFueVtdKSB7XG4gIGNvbnN0cnVjdG9ycy5mb3JFYWNoKChiYXNlQ3RvcikgPT4ge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGJhc2VDdG9yLnByb3RvdHlwZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICBkZXJpdmVkQ3Rvci5wcm90b3R5cGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZUN0b3IucHJvdG90eXBlLCBuYW1lKSB8fFxuICAgICAgICAgIE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKFxuICB2YWx1ZTogYW55LFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBub3JtYWxpemUsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgICBwYXJzZXIsXG4gICAgb3B0aW9ucyxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBub3JtYWxpemU/OiBib29sZWFuO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxhbnk+O1xuICAgIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zO1xuICB9ID0ge31cbik6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHtcbiAgaWYgKFR5cGVzLmlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgcmV0dXJuIHJlbmRlcih2YWx1ZShzeW50YXgpLCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgbm9ybWFsaXplLFxuICAgICAgcHJlZml4LFxuICAgICAgcGFyc2VyLFxuICAgICAgb3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBpZiAoVHlwZXMuaXNPYmplY3QodmFsdWUpICYmICdyZW5kZXInIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHJlbmRlcih2YWx1ZS5yZW5kZXIoeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgcGFyc2VyLCBvcHRpb25zIH0pLCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgbm9ybWFsaXplLFxuICAgICAgZXNjYXBlLFxuICAgICAgcHJlZml4LFxuICAgICAgcGFyc2VyLFxuICAgICAgb3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplID8gbm9ybWFsaXplVmFsdWUodmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pIDogdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKHZhbHVlczogYW55LCBwYXJzZXI/OiBQYXJzZXI8YW55Pikge1xuICBpZiAocGFyc2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgZmllbGRzID0gdmFsdWVzLmZpbHRlcihcbiAgICAgICh2OiBhbnkpID0+IFR5cGVzLmlzT2JqZWN0KHYpICYmICdpc0ZpZWxkJyBpbiB2ICYmIHYuaXNGaWVsZCgpXG4gICAgKTtcbiAgICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMSAmJiBUeXBlcy5pc09iamVjdChwYXJzZXIpICYmICdmaWVsZCcgaW4gcGFyc2VyKSB7XG4gICAgICByZXR1cm4gZmllbGRzWzBdLnJlc29sdmUocGFyc2VyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShcbiAgdmFsdWVzOiBhbnksXG4gIHBhcnNlcj86IFBhcnNlcjxhbnk+LFxuICBvcHRpb25zPzogUGFyc2VyT3B0aW9uc1xuKSB7XG4gIGlmIChwYXJzZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKCh2OiBhbnkpID0+IHtcbiAgICAgIGlmIChUeXBlcy5pc0FycmF5KHYpKSByZXR1cm4gZW5jb2RlKHYsIHBhcnNlciwgb3B0aW9ucyk7XG4gICAgICBpZiAoVHlwZXMuaXNPYmplY3QodikgfHwgdiA9PSBudWxsKSByZXR1cm4gdjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwYXJzZXIuZW5jb2RlKHYsIG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbjxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBub3JtYWxpemU6IE5vcm1hbGl6ZSxcbiAgICBwcm90ZWN0ZWQgZXNjYXBlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLm1hcCgodikgPT5cbiAgICAgICAgVHlwZXMuaXNPYmplY3QodikgJiYgJ3RvSnNvbicgaW4gdiA/IHYudG9Kc29uKCkgOiB2XG4gICAgICApLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uPFQ+KGpzb246IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogRnVuY3Rpb248VD4ge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oXG4gICAgICBqc29uWyduYW1lJ10sXG4gICAgICBqc29uWyd2YWx1ZXMnXS5tYXAoKHY6IGFueSkgPT4gUmVuZGVyYWJsZUZhY3RvcnkodikpLFxuICAgICAganNvblsnbm9ybWFsaXplJ10sXG4gICAgICBqc29uWydlc2NhcGUnXVxuICAgICk7XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgICBwYXJzZXIsXG4gICAgb3B0aW9ucyxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICBwYXJzZXI/OiBQYXJzZXI8VD47XG4gICAgb3B0aW9ucz86IFBhcnNlck9wdGlvbnM7XG4gIH0pOiBzdHJpbmcge1xuICAgIHBhcnNlciA9IHJlc29sdmUodGhpcy52YWx1ZXMsIHBhcnNlcik7XG4gICAgbGV0IFtsZWZ0LCAuLi52YWx1ZXNdID0gZW5jb2RlKHRoaXMudmFsdWVzLCBwYXJzZXIsIG9wdGlvbnMpO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgZXNjYXBlLFxuICAgICAgcHJlZml4LFxuICAgICAgcGFyc2VyLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSA9PT0gJ2FsbCcgfHwgdGhpcy5ub3JtYWxpemUgPT09ICdsZWZ0JyxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSk7XG4gICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgbGVmdCxcbiAgICAgIC4uLnZhbHVlcy5tYXAoKHY6IGFueSkgPT5cbiAgICAgICAgcmVuZGVyKHYsIHtcbiAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgcGFyc2VyLFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgPT09ICdhbGwnIHx8IHRoaXMubm9ybWFsaXplID09PSAncmlnaHQnLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0oJHtwYXJhbXMuam9pbignLCAnKX0pYDtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IE9iamVjdHMuY2xvbmUodikpLFxuICAgICAgdGhpcy5ub3JtYWxpemUsXG4gICAgICB0aGlzLmVzY2FwZVxuICAgICk7XG4gIH1cblxuICByZXNvbHZlKHBhcnNlcjogYW55KSB7XG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGNvbmNhdChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbmNhdCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBjb250YWlucyhsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbnRhaW5zJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGVuZHNXaXRoKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZW5kc3dpdGgnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgaW5kZXhPZihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2luZGV4b2YnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgbGVuZ3RoKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbGVuZ3RoJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3RhcnRzV2l0aChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N0YXJ0c3dpdGgnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3ViU3RyaW5nKFxuICAgIGxlZnQ6IGFueSxcbiAgICByaWdodDogbnVtYmVyLFxuICAgIGxlbmd0aD86IG51bWJlcixcbiAgICBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJ1xuICApIHtcbiAgICBsZXQgdmFsdWVzID0gW2xlZnQsIHJpZ2h0XTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N1YnN0cmluZycsIHZhbHVlcywgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGhhc1N1YnNldChsZWZ0OiBULCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hhc3N1YnNldCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaGFzU3Vic2VxdWVuY2UobGVmdDogVCwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXF1ZW5jZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0Z1bmN0aW9uczxUPiB7XG4gIG1hdGNoZXNQYXR0ZXJuKFxuICAgIGxlZnQ6IGFueSB8IHN0cmluZyxcbiAgICBwYXR0ZXJuOiBzdHJpbmcsXG4gICAgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZSdcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF0Y2hlc1BhdHRlcm4nLCBbbGVmdCwgcGF0dGVybl0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgdG9Mb3dlcihsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG9sb3dlcicsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICB0b1VwcGVyKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3VwcGVyJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG4gIHRyaW0obGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RyaW0nLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+IHtcbiAgZGF0ZShsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF0ZScsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBkYXkobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RheScsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBmcmFjdGlvbmFsc2Vjb25kcyhsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZnJhY3Rpb25hbHNlY29uZHMnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaG91cihsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaG91cicsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBtYXhkYXRldGltZShsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF4ZGF0ZXRpbWUnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbWluZGF0ZXRpbWUobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbmRhdGV0aW1lJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1pbnV0ZShsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWludXRlJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1vbnRoKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtb250aCcsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBub3coKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbm93JywgW10sICdub25lJyk7XG4gIH1cbiAgc2Vjb25kKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzZWNvbmQnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgdGltZShsZWZ0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndGltZScsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICB0b3RhbG9mZnNldG1pbnV0ZXMobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsb2Zmc2V0bWludXRlcycsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICB0b3RhbHNlY29uZHMobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsc2Vjb25kcycsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICB5ZWFyKGxlZnQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd5ZWFyJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljRnVuY3Rpb25zPFQ+IHtcbiAgY2VpbGluZyhsZWZ0OiBUIHwgc3RyaW5nLCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NlaWxpbmcnLCBbbGVmdF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZmxvb3IobGVmdDogVCB8IHN0cmluZywgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmbG9vcicsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICByb3VuZChsZWZ0OiBUIHwgc3RyaW5nLCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3JvdW5kJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlRnVuY3Rpb25zPFQ+IHtcbiAgY2FzdDxOPihsZWZ0OiBUIHwgc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogTiB7XG4gICAgcmV0dXJuIEZpZWxkRmFjdG9yeTxSZWFkb25seTxSZXF1aXJlZDxOPj4+KFtcbiAgICAgIHR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG5ldyBUeXBlPFQ+KCdjYXN0JywgdHlwZSwgbGVmdClcbiAgICAgICAgOiBuZXcgVHlwZTxUPignY2FzdCcsIGxlZnQgYXMgc3RyaW5nKSxcbiAgICBdKTtcbiAgfVxuXG4gIGlzb2YobGVmdDogVCB8IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHJldHVybiB0eXBlICE9PSB1bmRlZmluZWRcbiAgICAgID8gbmV3IFR5cGU8VD4oJ2lzb2YnLCB0eXBlLCBsZWZ0KVxuICAgICAgOiBuZXcgVHlwZTxUPignaXNvZicsIGxlZnQgYXMgc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2VvRnVuY3Rpb25zPFQ+IHtcbiAgZ2VvRGlzdGFuY2UobGVmdDogVCwgcmlnaHQ6IHN0cmluZywgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmRpc3RhbmNlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZW9JbnRlcnNlY3RzKGxlZnQ6IFQsIHJpZ2h0OiBzdHJpbmcsIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5pbnRlcnNlY3RzJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZW9MZW5ndGgobGVmdDogVCwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdnZW8ubGVuZ3RoJywgW2xlZnRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbEZ1bmN0aW9uczxUPiB7XG4gIGNhc2UobGVmdDogVCB8IHN0cmluZywgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAnbm9uZScpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXNlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmF0b3I8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG9wOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogTm9ybWFsaXplXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdPcGVyYXRvcic7XG4gIH1cblxuICB0b0pzb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLm1hcCgodikgPT5cbiAgICAgICAgVHlwZXMuaXNPYmplY3QodikgJiYgJ3RvSnNvbicgaW4gdiA/IHYudG9Kc29uKCkgOiB2XG4gICAgICApLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uPFQ+KGpzb246IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogT3BlcmF0b3I8VD4ge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oXG4gICAgICBqc29uWydvcCddLFxuICAgICAganNvblsndmFsdWVzJ10ubWFwKCh2OiBhbnkpID0+IFJlbmRlcmFibGVGYWN0b3J5KHYpKSxcbiAgICAgIGpzb25bJ25vcm1hbGl6ZSddXG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICAgIHBhcnNlcixcbiAgICBvcHRpb25zLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxUPjtcbiAgICBvcHRpb25zPzogUGFyc2VyT3B0aW9ucztcbiAgfSk6IHN0cmluZyB7XG4gICAgcGFyc2VyID0gcmVzb2x2ZSh0aGlzLnZhbHVlcywgcGFyc2VyKTtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IGVuY29kZSh0aGlzLnZhbHVlcywgcGFyc2VyLCBvcHRpb25zKTtcblxuICAgIGxlZnQgPSByZW5kZXIobGVmdCwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICAgIHByZWZpeCxcbiAgICAgIHBhcnNlcixcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgPT09ICdhbGwnIHx8IHRoaXMubm9ybWFsaXplID09PSAnbGVmdCcsXG4gICAgICBvcHRpb25zLFxuICAgIH0pO1xuICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByaWdodCA9IEFycmF5LmlzQXJyYXkocmlnaHQpXG4gICAgICAgID8gYCgke3JpZ2h0XG4gICAgICAgICAgICAubWFwKCh2KSA9PlxuICAgICAgICAgICAgICByZW5kZXIodiwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgICAgICBwYXJzZXIsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplOlxuICAgICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxpemUgPT09ICdhbGwnIHx8IHRoaXMubm9ybWFsaXplID09PSAncmlnaHQnLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignLCcpfSlgXG4gICAgICAgIDogcmVuZGVyKHJpZ2h0LCB7XG4gICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgcGFyc2VyLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSA9PT0gJ2FsbCcgfHwgdGhpcy5ub3JtYWxpemUgPT09ICdyaWdodCcsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgcmV0dXJuIGAke2xlZnR9ICR7dGhpcy5vcH0gJHtyaWdodH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5vcH0oJHtsZWZ0fSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcihcbiAgICAgIHRoaXMub3AsXG4gICAgICB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IE9iamVjdHMuY2xvbmUodikpLFxuICAgICAgdGhpcy5ub3JtYWxpemVcbiAgICApO1xuICB9XG4gIHJlc29sdmUocGFyc2VyOiBhbnkpIHtcbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dpY2FsT3BlcmF0b3JzPFQ+IHtcbiAgZXEobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdlcScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCduZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ3QobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdndCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2UobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdnZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbHQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdsdCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbGUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdsZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgLypcbiAgYW5kKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignYW5kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBvcihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ29yJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICAqL1xuICBub3QobGVmdDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdub25lJykge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ25vdCcsIFtsZWZ0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBoYXMobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdoYXMnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGluKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignaW4nLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljT3BlcmF0b3JzPFQ+IHtcbiAgYWRkKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcjxUPignYWRkJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBzdWIobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdzdWInLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG11bChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ211bCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZGl2KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZGl2JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBtb2QobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtb2QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lZyh2YWx1ZTogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCctJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JvdXBpbmc8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGdyb3VwOiBSZW5kZXJhYmxlKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0dyb3VwaW5nJztcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBncm91cDogdGhpcy5ncm91cC50b0pzb24oKSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uPFQ+KGpzb246IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogR3JvdXBpbmc8VD4ge1xuICAgIHJldHVybiBuZXcgR3JvdXBpbmc8VD4oanNvblsnZ3JvdXAnXS5tYXAoKHY6IGFueSkgPT4gUmVuZGVyYWJsZUZhY3RvcnkodikpKTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICAgIHBhcnNlcixcbiAgICBvcHRpb25zLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxUPjtcbiAgICBvcHRpb25zPzogUGFyc2VyT3B0aW9ucztcbiAgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAoJHtyZW5kZXIodGhpcy5ncm91cCwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICAgIHByZWZpeCxcbiAgICAgIHBhcnNlcixcbiAgICAgIG9wdGlvbnMsXG4gICAgfSl9KWA7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IEdyb3VwaW5nKE9iamVjdHMuY2xvbmUodGhpcy5ncm91cCkpO1xuICB9XG4gIHJlc29sdmUocGFyc2VyOiBhbnkpIHtcbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHR5cGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWU/OiBhbnlcbiAgKSB7fVxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdUeXBlJztcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uPFQ+KGpzb246IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogVHlwZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBUeXBlPFQ+KFxuICAgICAganNvblsnbmFtZSddLFxuICAgICAganNvblsndHlwZSddLFxuICAgICAgUmVuZGVyYWJsZUZhY3RvcnkoanNvblsndmFsdWUnXSlcbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gICAgcGFyc2VyLFxuICAgIG9wdGlvbnMsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgcGFyc2VyPzogUGFyc2VyPFQ+O1xuICAgIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zO1xuICB9KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgcGFyc2VyID0gcmVzb2x2ZShbdGhpcy52YWx1ZV0sIHBhcnNlcik7XG4gICAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IGVuY29kZShbdGhpcy52YWx1ZV0sIHBhcnNlciwgb3B0aW9ucyk7XG5cbiAgICAgIGxlZnQgPSByZW5kZXIobGVmdCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgcGFyc2VyLCBvcHRpb25zIH0pO1xuICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0oJHtsZWZ0fSwgJyR7dGhpcy50eXBlfScpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0oJyR7dGhpcy50eXBlfScpYDtcbiAgICB9XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IFR5cGUodGhpcy5uYW1lLCB0aGlzLnR5cGUsIE9iamVjdHMuY2xvbmUodGhpcy52YWx1ZSkpO1xuICB9XG5cbiAgcmVzb2x2ZShwYXJzZXI6IGFueSkge1xuICAgIHBhcnNlciA9XG4gICAgICBwYXJzZXIgaW5zdGFuY2VvZiBPRGF0YVN0cnVjdHVyZWRUeXBlRmllbGRQYXJzZXIgJiZcbiAgICAgIHBhcnNlci5pc1N0cnVjdHVyZWRUeXBlKClcbiAgICAgICAgPyBwYXJzZXIuc3RydWN0dXJlZCgpXG4gICAgICAgIDogcGFyc2VyO1xuICAgIHJldHVybiBwYXJzZXI/LmZpbmRDaGlsZFBhcnNlcigocDogYW55KSA9PiBwLmlzVHlwZU9mKHRoaXMudHlwZSkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGE8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG9wOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIGFsaWFzPzogc3RyaW5nXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdMYW1iZGEnO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcy5tYXAoKHYpID0+XG4gICAgICAgIFR5cGVzLmlzT2JqZWN0KHYpICYmICd0b0pzb24nIGluIHYgPyB2LnRvSnNvbigpIDogdlxuICAgICAgKSxcbiAgICAgIGFsaWFzOiB0aGlzLmFsaWFzLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbUpzb248VD4oanNvbjogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBMYW1iZGE8VD4ge1xuICAgIHJldHVybiBuZXcgTGFtYmRhPFQ+KFxuICAgICAganNvblsnb3AnXSxcbiAgICAgIGpzb25bJ3ZhbHVlcyddLm1hcCgodjogYW55KSA9PiBSZW5kZXJhYmxlRmFjdG9yeSh2KSksXG4gICAgICBqc29uWydhbGlhcyddXG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICAgIHBhcnNlcixcbiAgICBvcHRpb25zLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHBhcnNlcj86IFBhcnNlcjxUPjtcbiAgICBvcHRpb25zPzogUGFyc2VyT3B0aW9ucztcbiAgfSk6IHN0cmluZyB7XG4gICAgcGFyc2VyID0gcmVzb2x2ZSh0aGlzLnZhbHVlcywgcGFyc2VyKTtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IGVuY29kZSh0aGlzLnZhbHVlcywgcGFyc2VyLCBvcHRpb25zKTtcblxuICAgIGxlZnQgPSByZW5kZXIobGVmdCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgcGFyc2VyIH0pO1xuICAgIGlmIChyaWdodCkge1xuICAgICAgbGV0IGFsaWFzID0gdGhpcy5hbGlhcyB8fCBsZWZ0LnNwbGl0KCcvJykucG9wKCkudG9Mb3dlckNhc2UoKVswXTtcbiAgICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KCR7YWxpYXN9OiR7cmVuZGVyKHJpZ2h0LCB7XG4gICAgICAgIGFsaWFzZXMsXG4gICAgICAgIGVzY2FwZSxcbiAgICAgICAgcHJlZml4OiBhbGlhcyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcGFyc2VyLFxuICAgICAgfSl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KClgO1xuICAgIH1cbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKFxuICAgICAgdGhpcy5vcCxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLmFsaWFzXG4gICAgKTtcbiAgfVxuICByZXNvbHZlKHBhcnNlcjogYW55KSB7XG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhT3BlcmF0b3JzPFQ+IHtcbiAgYW55KGxlZnQ6IFQsIHJpZ2h0OiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FueScsIFtsZWZ0LCByaWdodF0sIGFsaWFzKTtcbiAgfVxuXG4gIGFsbChsZWZ0OiBULCByaWdodDogYW55LCBhbGlhcz86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKCdhbGwnLCBbbGVmdCwgcmlnaHRdLCBhbGlhcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhT3BlcmF0b3JzPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhT3BlcmF0b3JzPFQ+XG4gIGV4dGVuZHMgTG9naWNhbE9wZXJhdG9yczxUPixcbiAgICBBcml0aG1ldGljT3BlcmF0b3JzPFQ+LFxuICAgIExhbWJkYU9wZXJhdG9yczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YU9wZXJhdG9ycywgW1xuICBMb2dpY2FsT3BlcmF0b3JzLFxuICBBcml0aG1ldGljT3BlcmF0b3JzLFxuICBMYW1iZGFPcGVyYXRvcnMsXG5dKTtcbmV4cG9ydCBjb25zdCBvcGVyYXRvcnM6IE9EYXRhT3BlcmF0b3JzPGFueT4gPSBuZXcgT0RhdGFPcGVyYXRvcnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFGdW5jdGlvbnM8VD5cbiAgZXh0ZW5kcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4sXG4gICAgU3RyaW5nRnVuY3Rpb25zPFQ+LFxuICAgIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+LFxuICAgIEFyaXRobWV0aWNGdW5jdGlvbnM8VD4sXG4gICAgVHlwZUZ1bmN0aW9uczxUPixcbiAgICBHZW9GdW5jdGlvbnM8VD4sXG4gICAgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFGdW5jdGlvbnMsIFtcbiAgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgU3RyaW5nRnVuY3Rpb25zLFxuICBEYXRlQW5kVGltZUZ1bmN0aW9ucyxcbiAgQXJpdGhtZXRpY0Z1bmN0aW9ucyxcbiAgVHlwZUZ1bmN0aW9ucyxcbiAgR2VvRnVuY3Rpb25zLFxuICBDb25kaXRpb25hbEZ1bmN0aW9ucyxcbl0pO1xuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uczogT0RhdGFGdW5jdGlvbnM8YW55PiA9IG5ldyBPRGF0YUZ1bmN0aW9uczxhbnk+KCk7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVN5bnRheDxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YVN5bnRheDxUPiBleHRlbmRzIE9EYXRhT3BlcmF0b3JzPFQ+LCBPRGF0YUZ1bmN0aW9uczxUPiB7fVxuYXBwbHlNaXhpbnMoT0RhdGFTeW50YXgsIFtPRGF0YU9wZXJhdG9ycywgT0RhdGFGdW5jdGlvbnNdKTtcblxuZXhwb3J0IGNvbnN0IHN5bnRheDogT0RhdGFTeW50YXg8YW55PiA9IG5ldyBPRGF0YVN5bnRheDxhbnk+KCk7XG4iXX0=