@sd-angular/core 1.3.220 → 1.3.222

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 (36) hide show
  1. package/assets/scss/core/form.scss +30 -3
  2. package/bundles/sd-angular-core-common.umd.js +23 -0
  3. package/bundles/sd-angular-core-common.umd.js.map +1 -1
  4. package/bundles/sd-angular-core-common.umd.min.js +1 -1
  5. package/bundles/sd-angular-core-common.umd.min.js.map +1 -1
  6. package/bundles/sd-angular-core-select.umd.js +7 -3
  7. package/bundles/sd-angular-core-select.umd.js.map +1 -1
  8. package/bundles/sd-angular-core-select.umd.min.js +1 -1
  9. package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
  10. package/bundles/sd-angular-core-table.umd.js +188 -181
  11. package/bundles/sd-angular-core-table.umd.js.map +1 -1
  12. package/bundles/sd-angular-core-table.umd.min.js +1 -1
  13. package/bundles/sd-angular-core-table.umd.min.js.map +1 -1
  14. package/common/sd-angular-core-common.metadata.json +1 -1
  15. package/common/src/lib/directives/sd-suffix-icon.directive.d.ts +5 -0
  16. package/common/src/public-api.d.ts +1 -0
  17. package/esm2015/common/src/lib/common.module.js +4 -1
  18. package/esm2015/common/src/lib/directives/sd-suffix-icon.directive.js +18 -0
  19. package/esm2015/common/src/public-api.js +2 -1
  20. package/esm2015/select/src/lib/select.component.js +9 -4
  21. package/esm2015/table/src/lib/models/table-configuration.model.js +1 -1
  22. package/esm2015/table/src/lib/services/table-filter/table-filter.service.js +3 -3
  23. package/esm2015/table/src/lib/table.component.js +23 -16
  24. package/fesm2015/sd-angular-core-common.js +20 -1
  25. package/fesm2015/sd-angular-core-common.js.map +1 -1
  26. package/fesm2015/sd-angular-core-select.js +8 -4
  27. package/fesm2015/sd-angular-core-select.js.map +1 -1
  28. package/fesm2015/sd-angular-core-table.js +24 -17
  29. package/fesm2015/sd-angular-core-table.js.map +1 -1
  30. package/package.json +1 -1
  31. package/{sd-angular-core-1.3.220.tgz → sd-angular-core-1.3.222.tgz} +0 -0
  32. package/select/sd-angular-core-select.metadata.json +1 -1
  33. package/select/src/lib/select.component.d.ts +2 -0
  34. package/table/sd-angular-core-table.metadata.json +1 -1
  35. package/table/src/lib/models/table-configuration.model.d.ts +4 -1
  36. package/table/src/lib/services/table-filter/table-filter.service.d.ts +2 -1
@@ -82,6 +82,7 @@ export class SdTable {
82
82
  }
83
83
  });
84
84
  _initFooterDef.set(this, () => {
85
+ // NOTE: ContentChildren nên subcribe trong AfterViewInit
85
86
  this.footerDef = {};
86
87
  this.hasFooter = false;
87
88
  for (const footerDef of this.sdFooterDefs) {
@@ -107,7 +108,7 @@ export class SdTable {
107
108
  };
108
109
  });
109
110
  _initConfiguration.set(this, (option) => {
110
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
111
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11;
111
112
  // Init pagination
112
113
  option.paginate = {
113
114
  hidden: (_a = option === null || option === void 0 ? void 0 : option.paginate) === null || _a === void 0 ? void 0 : _a.hidden,
@@ -116,19 +117,22 @@ export class SdTable {
116
117
  showFirstLastButtons: (_q = (_p = option === null || option === void 0 ? void 0 : option.paginate) === null || _p === void 0 ? void 0 : _p.showFirstLastButtons) !== null && _q !== void 0 ? _q : false,
117
118
  };
118
119
  for (const column of option.columns || []) {
119
- if (((_s = (_r = column.filter) === null || _r === void 0 ? void 0 : _r.operator) === null || _s === void 0 ? void 0 : _s.enable) && !((_v = (_u = (_t = column.filter) === null || _t === void 0 ? void 0 : _t.operator) === null || _u === void 0 ? void 0 : _u.list) === null || _v === void 0 ? void 0 : _v.length)) {
120
- if (column.type === 'string') {
121
- column.filter.operator.list = ((_y = (_x = (_w = this.tableConfiguration) === null || _w === void 0 ? void 0 : _w.filter) === null || _x === void 0 ? void 0 : _x.operator) === null || _y === void 0 ? void 0 : _y.defaultListString) || [];
122
- }
123
- if (column.type === 'number') {
124
- column.filter.operator.list = ((_1 = (_0 = (_z = this.tableConfiguration) === null || _z === void 0 ? void 0 : _z.filter) === null || _0 === void 0 ? void 0 : _0.operator) === null || _1 === void 0 ? void 0 : _1.defaultListNumber) || [];
125
- }
126
- if (column.type === 'values' || column.type === 'lazy-values') {
127
- column.filter.operator.list = ((_4 = (_3 = (_2 = this.tableConfiguration) === null || _2 === void 0 ? void 0 : _2.filter) === null || _3 === void 0 ? void 0 : _3.operator) === null || _4 === void 0 ? void 0 : _4.defaultListValues) || [];
128
- }
129
- if (column.type === 'date' || column.type === 'datetime') {
130
- column.filter.operator.list = ((_7 = (_6 = (_5 = this.tableConfiguration) === null || _5 === void 0 ? void 0 : _5.filter) === null || _6 === void 0 ? void 0 : _6.operator) === null || _7 === void 0 ? void 0 : _7.defaultListDate) || [];
120
+ if ((_s = (_r = column.filter) === null || _r === void 0 ? void 0 : _r.operator) === null || _s === void 0 ? void 0 : _s.enable) {
121
+ if (!((_v = (_u = (_t = column.filter) === null || _t === void 0 ? void 0 : _t.operator) === null || _u === void 0 ? void 0 : _u.list) === null || _v === void 0 ? void 0 : _v.length)) {
122
+ if (column.type === 'string') {
123
+ column.filter.operator.list = ((_y = (_x = (_w = this.tableConfiguration) === null || _w === void 0 ? void 0 : _w.filter) === null || _x === void 0 ? void 0 : _x.operator) === null || _y === void 0 ? void 0 : _y.defaultListString) || [];
124
+ }
125
+ if (column.type === 'number') {
126
+ column.filter.operator.list = ((_1 = (_0 = (_z = this.tableConfiguration) === null || _z === void 0 ? void 0 : _z.filter) === null || _0 === void 0 ? void 0 : _0.operator) === null || _1 === void 0 ? void 0 : _1.defaultListNumber) || [];
127
+ }
128
+ if (column.type === 'values' || column.type === 'lazy-values') {
129
+ column.filter.operator.list = ((_4 = (_3 = (_2 = this.tableConfiguration) === null || _2 === void 0 ? void 0 : _2.filter) === null || _3 === void 0 ? void 0 : _3.operator) === null || _4 === void 0 ? void 0 : _4.defaultListValues) || [];
130
+ }
131
+ if (column.type === 'date' || column.type === 'datetime') {
132
+ column.filter.operator.list = ((_7 = (_6 = (_5 = this.tableConfiguration) === null || _5 === void 0 ? void 0 : _5.filter) === null || _6 === void 0 ? void 0 : _6.operator) === null || _7 === void 0 ? void 0 : _7.defaultListDate) || [];
133
+ }
131
134
  }
135
+ this.columnOperator[column.field] = ((_11 = (_10 = (_9 = (_8 = this.tableConfiguration) === null || _8 === void 0 ? void 0 : _8.filter) === null || _9 === void 0 ? void 0 : _9.operator) === null || _10 === void 0 ? void 0 : _10.defaultOperator) === null || _11 === void 0 ? void 0 : _11[column.type]) || undefined;
132
136
  if (column.filter.operator.default && column.filter.operator.list.some(el => el === column.filter.operator.default)) {
133
137
  this.columnOperator[column.field] = column.filter.operator.default;
134
138
  }
@@ -146,6 +150,7 @@ export class SdTable {
146
150
  columns: (_b = this.tableOption) === null || _b === void 0 ? void 0 : _b.columns,
147
151
  externalFilters: (_d = (_c = this.tableOption) === null || _c === void 0 ? void 0 : _c.filter) === null || _d === void 0 ? void 0 : _d.externalFilters,
148
152
  filterDefs: this.filterDefs,
153
+ columnOperator: this.columnOperator,
149
154
  });
150
155
  __classPrivateFieldGet(this, _subscription).add(this.filterRegister.value.observer
151
156
  .pipe(debounceTime(500), map(filterValue => {
@@ -537,11 +542,13 @@ export class SdTable {
537
542
  if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {
538
543
  const val = column.option.mapValue(value, item);
539
544
  const vals = (Array.isArray(val) ? val : [val]).filter(e => !!(e === null || e === void 0 ? void 0 : e.toString()));
540
- obj[column.field] = (_y = vals.map(val => { var _a, _b; return ((_b = (_a = __classPrivateFieldGet(this, _cacheObjValues)[column.field]) === null || _a === void 0 ? void 0 : _a[val]) === null || _b === void 0 ? void 0 : _b[column.option.displayField]) || val; })) === null || _y === void 0 ? void 0 : _y.join(', ');
545
+ obj[column.field] = (_y = vals
546
+ .map(val => { var _a, _b; return ((_b = (_a = __classPrivateFieldGet(this, _cacheObjValues)[column.field]) === null || _a === void 0 ? void 0 : _a[val]) === null || _b === void 0 ? void 0 : _b[column.option.displayField]) || val; })) === null || _y === void 0 ? void 0 : _y.join(', ');
541
547
  }
542
548
  else {
543
549
  const vals = (Array.isArray(value) ? value : [value]).filter(e => !!(e === null || e === void 0 ? void 0 : e.toString()));
544
- obj[column.field] = (_z = vals.map(val => { var _a, _b; return ((_b = (_a = __classPrivateFieldGet(this, _cacheObjValues)[column.field]) === null || _a === void 0 ? void 0 : _a[val]) === null || _b === void 0 ? void 0 : _b[column.option.displayField]) || val; })) === null || _z === void 0 ? void 0 : _z.join(', ');
550
+ obj[column.field] = (_z = vals
551
+ .map(val => { var _a, _b; return ((_b = (_a = __classPrivateFieldGet(this, _cacheObjValues)[column.field]) === null || _a === void 0 ? void 0 : _a[val]) === null || _b === void 0 ? void 0 : _b[column.option.displayField]) || val; })) === null || _z === void 0 ? void 0 : _z.join(', ');
545
552
  }
546
553
  }
547
554
  else {
@@ -1065,4 +1072,4 @@ SdTable.propDecorators = {
1065
1072
  sdFooterDefs: [{ type: ContentChildren, args: [SdMaterialFooterDefDirective,] }],
1066
1073
  sdFilterDefs: [{ type: ContentChildren, args: [SdTableFilterDefDirective,] }]
1067
1074
  };
1068
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS90YWJsZS8iLCJzb3VyY2VzIjpbInNyYy9saWIvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBR1QsWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQXlCLE1BQU0sb0NBQW9DLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxr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QUU7b0JBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTt3QkFDdEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7d0JBQ2hGLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzt3QkFDaEUsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO3FCQUN0RixDQUFDO2lCQUNIOzthQUNGOzs7WUFoREMsaUJBQWlCO1lBa0NWLGdCQUFnQjs0Q0EySnBCLE1BQU0sU0FBQyxZQUFZLGNBQ25CLFFBQVE7WUFuS0osMkJBQTJCO1lBRlgsZUFBZTtZQVIvQixlQUFlO1lBZWYsb0JBQW9COzs7b0JBa0IxQixTQUFTLFNBQUMsUUFBUTtpQ0FDbEIsU0FBUyxTQUFDLG9CQUFvQjt1QkFFOUIsU0FBUyxTQUFDLGlCQUFpQjswQkFHM0IsU0FBUyxTQUFDLGFBQWE7MEJBQ3ZCLFNBQVMsU0FBQyxhQUFhO3FCQUd2QixLQUFLO3dCQXVETCxTQUFTLFNBQUMsWUFBWTttQkFtQnRCLFNBQVMsU0FBQyxPQUFPOytCQWtCakIsWUFBWSxTQUFDLG9DQUFvQzt5QkFJakQsZUFBZSxTQUFDLHVCQUF1QjsyQkFNdkMsZUFBZSxTQUFDLDRCQUE0QjsyQkFPNUMsZUFBZSxTQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIEluamVjdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgU2RUYWJsZUZpbHRlclJlZ2lzdGVyLCBTZFRhYmxlRmlsdGVyUmVxdWVzdCB9IGZyb20gJy4vc2VydmljZXMvdGFibGUtZmlsdGVyL3RhYmxlLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCB7IFNkVGFibGVPcHRpb24gfSBmcm9tICcuL21vZGVscy90YWJsZS1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBUQUJMRV9DT05GSUcsIERFRkFVTFRfVEFCTEVfQ09ORklHLCBJU2RUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL21vZGVscy90YWJsZS1jb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2ROb3RpZnlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5pbXBvcnQgeyBTZEZpbHRlck9wZXJhdG9yLCBTZFRhYmxlQ29sdW1uLCBTZFRhYmxlQ29sdW1uTGF6eVZhbHVlcywgU2RUYWJsZUNvbHVtblZhbHVlcyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkVGFiZWxDZWxsRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLXRhYmxlLWNlbGwtZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2RUYWJsZUZpbHRlciB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1maWx0ZXIvdGFibGUtZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkVGFibGVGaWx0ZXJEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtdGFibGUtZmlsdGVyLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtdGFibGUtZXhwYW5kLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLXRhYmxlLWZvb3Rlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RFeHBvcnRDb2x1bW4sIFNkRXhwb3J0U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhwb3J0JztcclxuaW1wb3J0IHsgU2RUYWJsZUNvbmZpZ3VyYXRpb25SZXN1bHQgfSBmcm9tICcuL21vZGVscy90YWJsZS1vcHRpb24tY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2RUYWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90YWJsZS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZFRhYmxlT3B0aW9uRXhwb3J0Q29sdW1uIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtb3B0aW9uLWV4cG9ydC5tb2RlbCc7XHJcbmltcG9ydCB7IFNkUXVpY2tBY3Rpb24gfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3F1aWNrLWFjdGlvbic7XHJcbmltcG9ydCB7IE1hcFRvU2RUYWJsZUl0ZW0sIFNkVGFibGVJdGVtIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFNkU2Nyb2xsRGlyZWN0aXZlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jb21tb24nO1xyXG5pbXBvcnQgeyBTZFRhYmxlRmlsdGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGFibGUtZmlsdGVyL3RhYmxlLWZpbHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2RQb3B1cENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2NvbXBvbmVudHMvcG9wdXAtY29uZmlndXJhdGlvbi9wb3B1cC1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2xvYWRpbmcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMCcsIG1pbkhlaWdodDogJzAnLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSksXHJcbiAgICBdKSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RUYWJsZTxUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKE1hdFRhYmxlKSB0YWJsZTogTWF0VGFibGU8YW55PjtcclxuICBAVmlld0NoaWxkKFNkUG9wdXBDb25maWd1cmF0aW9uKSBwb3B1cENvbmZpZ3VyYXRpb246IFNkUG9wdXBDb25maWd1cmF0aW9uO1xyXG4gICNncmlkSWQgPSB1dWlkLnY0KCk7XHJcbiAgQFZpZXdDaGlsZChTZFNjcm9sbERpcmVjdGl2ZSkgc2RTY3JvbGw6IFNkU2Nyb2xsRGlyZWN0aXZlO1xyXG4gIGZpbHRlclJlZ2lzdGVyOiBTZFRhYmxlRmlsdGVyUmVnaXN0ZXI7XHJcbiAga2V5ID0gdXVpZC52NCgpO1xyXG4gIEBWaWV3Q2hpbGQoU2RRdWlja0FjdGlvbikgcXVpY2tBY3Rpb246IFNkUXVpY2tBY3Rpb247XHJcbiAgQFZpZXdDaGlsZChTZFRhYmxlRmlsdGVyKSB0YWJsZUZpbHRlcjogU2RUYWJsZUZpbHRlcjtcclxuICB0YWJsZU9wdGlvbjogU2RUYWJsZU9wdGlvbjxUPjtcclxuICBjb25maWd1cmF0aW9uOiBTZFRhYmxlQ29uZmlndXJhdGlvblJlc3VsdDtcclxuICBASW5wdXQoKSBzZXQgb3B0aW9uKG9wdGlvbjogU2RUYWJsZU9wdGlvbikge1xyXG4gICAgaWYgKG9wdGlvbikge1xyXG4gICAgICBvcHRpb24gPSB0aGlzLiNpbml0Q29uZmlndXJhdGlvbihvcHRpb24pO1xyXG4gICAgICB0aGlzLnRhYmxlT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgICB0aGlzLiNsb2FkQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UuaW5pdCh0aGlzLnRhYmxlT3B0aW9uKTtcclxuICAgICAgaWYgKHNldHRpbmcpIHtcclxuICAgICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICAgICAgc2V0dGluZy5vYnNlcnZlci5waXBlKHN0YXJ0V2l0aChzZXR0aW5nLnN1YmplY3QuZ2V0VmFsdWUoKSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25SZXN1bHQgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UubG9hZENvbmZpZ3VyYXRpb25SZXN1bHQodGhpcy50YWJsZU9wdGlvbiwgc2V0dGluZy5nZXQoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlDb2x1bW5zID0gY29uZmlndXJhdGlvblJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zIHx8IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy4jbG9hZFZhbHVlcyh0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBkaXNwbGF5Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uZmllbGQpKSlcclxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5uZXh0KHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uU2VydmljZS5sb2FkQ29uZmlndXJhdGlvbih0aGlzLnRhYmxlT3B0aW9uKTtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uUmVzdWx0ID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmxvYWRDb25maWd1cmF0aW9uUmVzdWx0KHRoaXMudGFibGVPcHRpb24sIGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlDb2x1bW5zID0gY29uZmlndXJhdGlvblJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zIHx8IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy4jbG9hZFZhbHVlcyh0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBkaXNwbGF5Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uZmllbGQpKSlcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5uZXh0KHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gICNvcHRpb25DaGFuZ2VzID0gbmV3IFN1YmplY3Q8U2RUYWJsZU9wdGlvbj4oKTtcclxuXHJcbiAgI2xvY2FsSXRlbXM6IFNkVGFibGVJdGVtPFQ+W10gPSBbXTtcclxuICBpdGVtczogU2RUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkVGFibGVJdGVtczogU2RUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gIHRvdGFsOiBudW1iZXI7XHJcblxyXG4gIC8vIExvYWRpbmdcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gUGFnaW5hdGVcclxuICBpc0hpZGRlblBhZ2luYXRvciA9IGZhbHNlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgcGFnaW5hdG9yLnBhZ2VcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIGZvcmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU29ydGluZ1xyXG4gICNzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc2V0IHNvcnQoc29ydDogTWF0U29ydCkge1xyXG4gICAgaWYgKHNvcnQgJiYgdGhpcy4jc29ydCAhPT0gc29ydCkge1xyXG4gICAgICB0aGlzLiNzb3J0ID0gc29ydDtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICBzb3J0LnNvcnRDaGFuZ2VcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIGZvcmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU3ViIEluZm9ybWF0aW9uXHJcbiAgQENvbnRlbnRDaGlsZChTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmUpXHJcbiAgc2RTdWJJbmZvcm1hdGlvbjogU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlO1xyXG5cclxuICAvLyBDZWxsIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RUYWJlbENlbGxEZWZEaXJlY3RpdmUpIHNkQ2VsbERlZnMgPSBuZXcgUXVlcnlMaXN0PFNkVGFiZWxDZWxsRGVmRGlyZWN0aXZlPigpO1xyXG4gIGNlbGxEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkVGFiZWxDZWxsRGVmRGlyZWN0aXZlO1xyXG4gIH0gPSB7fTtcclxuXHJcbiAgLy8gRm9vdGVyIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZSkgc2RGb290ZXJEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlPigpO1xyXG4gIGZvb3RlckRlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZTtcclxuICB9ID0ge307XHJcbiAgaGFzRm9vdGVyID0gZmFsc2U7XHJcblxyXG4gIC8vIEZpbHRlciBEZWZcclxuICBAQ29udGVudENoaWxkcmVuKFNkVGFibGVGaWx0ZXJEZWZEaXJlY3RpdmUpIHNkRmlsdGVyRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RUYWJsZUZpbHRlckRlZkRpcmVjdGl2ZT4oKTtcclxuICBmaWx0ZXJEZWZzOiBTZFRhYmxlRmlsdGVyRGVmRGlyZWN0aXZlW10gPSBbXTtcclxuXHJcbiAgLy8gRmlsdGVyXHJcbiAgY29sdW1uT3BlcmF0b3I6IFJlY29yZDxzdHJpbmcsIFNkRmlsdGVyT3BlcmF0b3I+ID0ge307XHJcbiAgY29sdW1uRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgLy8gU3ViY3JpcHRpb25cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICNyZWxvYWQgPSBuZXcgU3ViamVjdDx7XHJcbiAgICBmb3JjZTogYm9vbGVhbjtcclxuICB9PigpO1xyXG4gIGlzRXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgaXNTZWxlY3RBbGwgPSBmYWxzZTtcclxuICBleHBvcnRUaXRsZSA9ICdFeHBvcnQnO1xyXG4gICNsb2FkQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgY2FjaGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG4gICNjYWNoZU9ialZhbHVlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbG9hZGluZ1NlcnZpY2U6IFNkTG9hZGluZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KFRBQkxFX0NPTkZJRylcclxuICAgIEBPcHRpb25hbCgpXHJcbiAgICBwdWJsaWMgdGFibGVDb25maWd1cmF0aW9uOiBJU2RUYWJsZUNvbmZpZ3VyYXRpb24sXHJcbiAgICBwcml2YXRlIHRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2U6IFNkVGFibGVDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogU2RFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdyaWRGaWx0ZXJTZXJ2aWNlOiBTZFRhYmxlRmlsdGVyU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy4jaW5pdENlbGxEZWYoKTtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy4jcmVsb2FkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyBkYXRhID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVySW5mbyA9IHRoaXMuI2dldEZpbHRlcigpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLiNsb2FkKGZpbHRlckluZm8sICF0aGlzLiNsb2FkQ29tcGxldGVkIHx8IGRhdGEuZm9yY2UpO1xyXG4gICAgICAgICAgICB0aGlzLiNsb2FkQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50YWJsZT8udXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCk7IFxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy4jcmVuZGVyKVxyXG4gICAgKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZENlbGxEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUodGhpcy4jaW5pdENlbGxEZWYpKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZEZvb3RlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0Rm9vdGVyRGVmKSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuc2RGaWx0ZXJEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUodGhpcy4jaW5pdEZpbHRlckRlZikpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnRhYmxlT3B0aW9uKSksXHJcbiAgICAgICAgdGhpcy5zZEZpbHRlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZpbHRlckRlZnMpKSxcclxuICAgICAgXSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLiNsb2FkRmlsdGVyUmVnaXN0ZXIoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLiNvcHRpb25DaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUmVnaXN0ZXIpIHtcclxuICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgZm9yY2U6IHRydWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gICNpbml0Q2VsbERlZiA9ICgpID0+IHtcclxuICAgIHRoaXMuY2VsbERlZiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBjZWxsRGVmIG9mIHRoaXMuc2RDZWxsRGVmcyB8fCBbXSkge1xyXG4gICAgICBpZiAoY2VsbERlZi5zZFRhYmxlQ2VsbERlZikge1xyXG4gICAgICAgIHRoaXMuY2VsbERlZltjZWxsRGVmLnNkVGFibGVDZWxsRGVmXSA9IGNlbGxEZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjaW5pdEZpbHRlckRlZiA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyRGVmcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBmaWx0ZXJEZWYgb2YgdGhpcy5zZEZpbHRlckRlZnMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJEZWZzLnB1c2goZmlsdGVyRGVmKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjaW5pdEZvb3RlckRlZiA9ICgpID0+IHtcclxuICAgIHRoaXMuZm9vdGVyRGVmID0ge307XHJcbiAgICB0aGlzLmhhc0Zvb3RlciA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBmb290ZXJEZWYgb2YgdGhpcy5zZEZvb3RlckRlZnMpIHtcclxuICAgICAgaWYgKGZvb3RlckRlZi5zZFRhYmxlRm9vdGVyRGVmKSB7XHJcbiAgICAgICAgdGhpcy5oYXNGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9vdGVyRGVmW2Zvb3RlckRlZi5zZFRhYmxlRm9vdGVyRGVmXSA9IGZvb3RlckRlZjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNmaWx0ZXJFeHBvcnRJbmZvID0gKHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFNkVGFibGVGaWx0ZXJSZXF1ZXN0ID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1uT3BlcmF0b3IsIGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gdGhpcy5maWx0ZXJSZWdpc3Rlci52YWx1ZS5nZXQoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbHVtbk9wZXJhdG9yOiBjb2x1bW5PcGVyYXRvciB8fCB7fSxcclxuICAgICAgcmF3Q29sdW1uRmlsdGVyOiBjb2x1bW5GaWx0ZXIgfHwge30sXHJcbiAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiBleHRlcm5hbEZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RmlsdGVyRGVmOiBmaWx0ZXJEZWYgfHwge30sXHJcbiAgICAgIG9yZGVyQnk6IHRoaXMuI3NvcnQ/LmFjdGl2ZSB8fCAnJyxcclxuICAgICAgb3JkZXJEaXJlY3Rpb246IHRoaXMuI3NvcnQ/LmRpcmVjdGlvbiB8fCAnJyxcclxuICAgICAgcGFnZU51bWJlcixcclxuICAgICAgcGFnZVNpemUsXHJcbiAgICAgIGlzRXhwb3J0ZWQ6IHRydWUsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNpbml0Q29uZmlndXJhdGlvbiA9IChvcHRpb246IFNkVGFibGVPcHRpb24pID0+IHtcclxuICAgIC8vIEluaXQgcGFnaW5hdGlvblxyXG4gICAgb3B0aW9uLnBhZ2luYXRlID0ge1xyXG4gICAgICBoaWRkZW46IG9wdGlvbj8ucGFnaW5hdGU/LmhpZGRlbixcclxuICAgICAgcGFnZVNpemU6IG9wdGlvbj8ucGFnaW5hdGU/LnBhZ2VTaXplID8/IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgPz8gREVGQVVMVF9UQUJMRV9DT05GSUcucGFnaW5hdGU/LnBhZ2VTaXplLFxyXG4gICAgICBwYWdlczogb3B0aW9uPy5wYWdpbmF0ZT8ucGFnZXMgPz8gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LnBhZ2luYXRlPy5wYWdlcyA/PyBERUZBVUxUX1RBQkxFX0NPTkZJRy5wYWdpbmF0ZT8ucGFnZXMsXHJcbiAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zOiBvcHRpb24/LnBhZ2luYXRlPy5zaG93Rmlyc3RMYXN0QnV0dG9ucyA/PyBmYWxzZSxcclxuICAgIH07XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBvcHRpb24uY29sdW1ucyB8fCBbXSkge1xyXG4gICAgICBpZiAoY29sdW1uLmZpbHRlcj8ub3BlcmF0b3I/LmVuYWJsZSAmJiAhY29sdW1uLmZpbHRlcj8ub3BlcmF0b3I/Lmxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXIub3BlcmF0b3IubGlzdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yPy5kZWZhdWx0TGlzdFN0cmluZyB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlci5vcGVyYXRvci5saXN0ID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LmZpbHRlcj8ub3BlcmF0b3I/LmRlZmF1bHRMaXN0TnVtYmVyIHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnIHx8IGNvbHVtbi50eXBlID09PSAnbGF6eS12YWx1ZXMnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyLm9wZXJhdG9yLmxpc3QgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5vcGVyYXRvcj8uZGVmYXVsdExpc3RWYWx1ZXMgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyLm9wZXJhdG9yLmxpc3QgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5vcGVyYXRvcj8uZGVmYXVsdExpc3REYXRlIHx8IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIub3BlcmF0b3IuZGVmYXVsdCAmJiBjb2x1bW4uZmlsdGVyLm9wZXJhdG9yLmxpc3Quc29tZSggZWwgPT4gZWwgPT09IGNvbHVtbi5maWx0ZXIub3BlcmF0b3IuZGVmYXVsdCkpe1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5PcGVyYXRvcltjb2x1bW4uZmllbGRdID0gY29sdW1uLmZpbHRlci5vcGVyYXRvci5kZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdGlvbjtcclxuICB9O1xyXG5cclxuICAjbG9hZEZpbHRlclJlZ2lzdGVyID0gKCkgPT4ge1xyXG4gICAgLy8gSW5pdCBmaWx0ZXJcclxuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9uKSB7XHJcbiAgICAgIGlmICghdGhpcy5maWx0ZXJSZWdpc3Rlcikge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIgPSB0aGlzLmdyaWRGaWx0ZXJTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMudGFibGVPcHRpb24/LmZpbHRlciwge1xyXG4gICAgICAgICAgaWQ6IHRoaXMuI2dyaWRJZCxcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMudGFibGVPcHRpb24/LmNvbHVtbnMsXHJcbiAgICAgICAgICBleHRlcm5hbEZpbHRlcnM6IHRoaXMudGFibGVPcHRpb24/LmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzLFxyXG4gICAgICAgICAgZmlsdGVyRGVmczogdGhpcy5maWx0ZXJEZWZzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclJlZ2lzdGVyLnZhbHVlLm9ic2VydmVyXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgICAgIG1hcChmaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvbHVtbk9wZXJhdG9yLCBjb2x1bW5GaWx0ZXIsIG5vdFJlbG9hZCB9ID0gZmlsdGVyVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbk9wZXJhdG9yID0gY29sdW1uT3BlcmF0b3IgfHwge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZpbHRlciA9IGNvbHVtbkZpbHRlcjtcclxuICAgICAgICAgICAgICAgIGlmICghbm90UmVsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNwYWdpbmF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNwYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLiNyZWxvYWQubmV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjZmlsdGVyTG9jYWwgPSAobG9jYWxJdGVtczogU2RUYWJsZUl0ZW08VD5bXSwgZmlsdGVySW5mbzogU2RUYWJsZUZpbHRlclJlcXVlc3QpID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy50YWJsZU9wdGlvbjtcclxuICAgIGNvbnN0IHsgcmF3Q29sdW1uRmlsdGVyLCBvcmRlckJ5LCBvcmRlckRpcmVjdGlvbiwgcGFnZVNpemUsIHBhZ2VOdW1iZXIgfSA9IGZpbHRlckluZm87XHJcbiAgICBjb25zdCBpdGVtcyA9IGxvY2FsSXRlbXMuZmlsdGVyKHRhYmxlSXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0YWJsZUl0ZW0uZGF0YTtcclxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAgIGNvbnN0IHsgZmllbGQsIHR5cGUgfSA9IGNvbHVtbjtcclxuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZTogc3RyaW5nID0gKHJhd0NvbHVtbkZpbHRlcltmaWVsZCBhcyBzdHJpbmddIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IGNvbHVtblZhbHVlOiBzdHJpbmcgPSAoaXRlbVtmaWVsZF0gfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoIWNvbHVtblZhbHVlICYmIHR5cGUgIT09ICdkYXRldGltZScgJiYgdHlwZSAhPT0gJ2RhdGUnICYmIHR5cGUgIT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtblZhbHVlLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmFsdWVzJyB8fCB0eXBlID09PSAnbGF6eS12YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW4gYXMgU2RUYWJsZUNvbHVtblZhbHVlczxUPiB8IFNkVGFibGVDb2x1bW5MYXp5VmFsdWVzPFQ+O1xyXG4gICAgICAgICAgICBjb25zdCBpc011bHRpcGxlID0gWydNVUxUSVBMRSddLmluY2x1ZGVzKGNvbHVtblR5cGUub3B0aW9uLnNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uVmFsdWVzOiBzdHJpbmdbXT0gKGl0ZW1bZmllbGRdIGFzIGFueSkubWFwKGkgPT4gKGlbY29sdW1uVHlwZS5vcHRpb24udmFsdWVGaWVsZF0gPz8gJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkpID8/IFtdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlczogc3RyaW5nW10gPSByYXdDb2x1bW5GaWx0ZXJbZmllbGQgYXMgc3RyaW5nXT8ubWFwKHYgPT4gKHYgPz8gJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZXM/Lmxlbmd0aCAmJiBmaWx0ZXJWYWx1ZXMuZXZlcnkoZnYgPT4gIWNvbHVtblZhbHVlcy5pbmNsdWRlcyhmdikpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW5WYWx1ZSAhPT0gZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZlZhbHVlID0gK2ZpbHRlclZhbHVlLnJlcGxhY2UoJz49JywgJycpLnJlcGxhY2UoJzw9JywgJycpLnJlcGxhY2UoJz4nLCAnJykucmVwbGFjZSgnPCcsICcnKTtcclxuICAgICAgICAgICAgY29uc3QgY1ZhbHVlID0gK2NvbHVtblZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoZlZhbHVlIHx8IGZWYWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmICghY1ZhbHVlICYmIGNWYWx1ZSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPj0nKSA+IC0xICYmIGNWYWx1ZSA8IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPD0nKSA+IC0xICYmIGNWYWx1ZSA+IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPCcpID4gLTEgJiYgY1ZhbHVlID49IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPicpID4gLTEgJiYgY1ZhbHVlIDw9IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY1ZhbHVlICE9PSBmVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZSA9PT0gJzEnICYmIGNvbHVtblZhbHVlICE9PSAnMScgJiYgY29sdW1uVmFsdWUgIT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZSA9PT0gJzAnICYmIGNvbHVtblZhbHVlICE9PSAnMCcgJiYgY29sdW1uVmFsdWUgIT09ICdmYWxzZScpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCB0eXBlID09PSAnZGF0ZScgfHwgdHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSByYXdDb2x1bW5GaWx0ZXJbZmllbGRdPy5mcm9tID8/IHJhd0NvbHVtbkZpbHRlcltmaWVsZF07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvID0gcmF3Q29sdW1uRmlsdGVyW2ZpZWxkXT8udG8gPz8gcmF3Q29sdW1uRmlsdGVyW2ZpZWxkXTtcclxuICAgICAgICAgICAgY29uc3QgZnJvbURhdGUgPSBEYXRlLmJlZ2luKGZyb20pO1xyXG4gICAgICAgICAgICBjb25zdCB0b0RhdGUgPSBEYXRlLmVuZCh0byk7XHJcbiAgICAgICAgICAgIGlmIChmcm9tRGF0ZSB8fCB0b0RhdGUpIHtcclxuICAgICAgICAgICAgICBpZiAoIWNvbHVtblZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5UaW1lID0gbmV3IERhdGUoY29sdW1uVmFsdWUpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICBjb25zdCBmcm9tRGF0ZVRpbWUgPSBmcm9tRGF0ZT8uZ2V0VGltZSgpIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG9EYXRlVGltZSA9IHRvRGF0ZT8uZ2V0VGltZSgpIHx8IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmcm9tRGF0ZVRpbWUgJiYgZnJvbURhdGVUaW1lID4gY29sdW1uVGltZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodG9EYXRlVGltZSAmJiBjb2x1bW5UaW1lID4gdG9EYXRlVGltZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgLy8gU29ydFxyXG4gICAgaWYgKG9yZGVyQnkgJiYgb3JkZXJEaXJlY3Rpb24pIHtcclxuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gb3JkZXJCeSk7XHJcbiAgICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIGZpZWxkIH0gPSBjb2x1bW47XHJcbiAgICAgICAgaXRlbXMuc29ydCgodGFibGVJdGVtQ3VycmVudCwgdGFibGVJdGVtTmV4dCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRhYmxlSXRlbUN1cnJlbnQuZGF0YTtcclxuICAgICAgICAgIGNvbnN0IG5leHQgPSB0YWJsZUl0ZW1OZXh0LmRhdGE7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChkYXRhW2ZpZWxkIGFzIHN0cmluZ10gfHwgMCkgLSAobmV4dFtmaWVsZCBhcyBzdHJpbmddIHx8IDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdkYXRlJyB8fCB0eXBlID09PSAnZGF0ZXRpbWUnIHx8IHR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICBjb25zdCBkMSA9IG5ldyBEYXRlKGRhdGFbZmllbGQgYXMgc3RyaW5nXSB8fCAnJykuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBkMiA9IG5ldyBEYXRlKGRhdGFbZmllbGQgYXMgc3RyaW5nXSB8fCAnJykuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZDEgLSBkMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHMxID0gKGRhdGFbZmllbGRdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgY29uc3QgczIgPSAobmV4dFtmaWVsZF0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoczEgPiBzMikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzMSA8IHMyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChvcmRlckRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpdGVtczogaXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA+PSBwYWdlTnVtYmVyICogcGFnZVNpemUgJiYgaW5kZXggPCAocGFnZU51bWJlciArIDEpICogcGFnZVNpemU7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0b3RhbDogaXRlbXMubGVuZ3RoLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjZ2V0RmlsdGVyID0gKCk6IFNkVGFibGVGaWx0ZXJSZXF1ZXN0ID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1uT3BlcmF0b3IsIGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gdGhpcy5maWx0ZXJSZWdpc3Rlci52YWx1ZS5nZXQoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbHVtbk9wZXJhdG9yOiBjb2x1bW5PcGVyYXRvciB8fCB7fSxcclxuICAgICAgcmF3Q29sdW1uRmlsdGVyOiBjb2x1bW5GaWx0ZXIgfHwge30sXHJcbiAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiBleHRlcm5hbEZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RmlsdGVyRGVmOiBmaWx0ZXJEZWYgfHwge30sXHJcbiAgICAgIG9yZGVyQnk6IHRoaXMuI3NvcnQ/LmFjdGl2ZSB8fCAnJyxcclxuICAgICAgb3JkZXJEaXJlY3Rpb246IHRoaXMuI3NvcnQ/LmRpcmVjdGlvbiB8fCAnJyxcclxuICAgICAgcGFnZU51bWJlcjogdGhpcy4jcGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMCxcclxuICAgICAgcGFnZVNpemU6IHRoaXMuI3BhZ2luYXRvcj8ucGFnZVNpemUgfHwgdGhpcy50YWJsZU9wdGlvbj8ucGFnaW5hdGU/LnBhZ2VTaXplIHx8IDUwLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjbG9hZCA9IGFzeW5jIChmaWx0ZXJSZXE6IFNkVGFibGVGaWx0ZXJSZXF1ZXN0LCBmb3JjZTogYm9vbGVhbiA9IHRydWUpID0+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9uLnR5cGUgPT09ICdzZXJ2ZXInKSB7XHJcbiAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHRoaXMudGFibGVPcHRpb247XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBpdGVtcyhmaWx0ZXJSZXEpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEnKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGl0ZW1zOiBbXSBhcyBUW10sXHJcbiAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpdGVtczogYXdhaXQgdGhpcy4jZm9ybWF0KGRhdGE/Lml0ZW1zLCB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMpLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0b3RhbDogZGF0YT8udG90YWwgfHwgMCxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChmb3JjZSkge1xyXG4gICAgICBjb25zdCB7IGl0ZW1zIH0gPSB0aGlzLnRhYmxlT3B0aW9uO1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gaXRlbXMoKTtcclxuICAgICAgbGV0IGRhdGE6IFRbXSA9IFtdO1xyXG4gICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICBkYXRhID0gYXdhaXQgcmVzdWx0cy5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEnKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhID0gcmVzdWx0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoJ0Thu68gbGnhu4d1IGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IG3huqNuZycpO1xyXG4gICAgICAgIGRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLiNsb2NhbEl0ZW1zID0gYXdhaXQgdGhpcy4jZm9ybWF0KGRhdGEsIHRoaXMudGFibGVPcHRpb24uY29sdW1ucyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIHRoaXMuI2ZpbHRlckxvY2FsKHRoaXMuI2xvY2FsSXRlbXMsIGZpbHRlclJlcSk7XHJcbiAgfTtcclxuXHJcbiAgI3JlbmRlciA9IGFzeW5jIChhcmdzOiB7IGl0ZW1zOiBTZFRhYmxlSXRlbTxUPltdOyB0b3RhbDogbnVtYmVyIH0pID0+IHtcclxuICAgIHRoaXMuc2RTY3JvbGw/LnNjcm9sbFRvcCgpO1xyXG4gICAgdGhpcy5pdGVtcyA9IGFyZ3M/Lml0ZW1zIHx8IFtdO1xyXG4gICAgdGhpcy50b3RhbCA9IGFyZ3M/LnRvdGFsIHx8IDA7XHJcbiAgICBhd2FpdCB0aGlzLnRhYmxlT3B0aW9uPy5yZWxvYWQ/Lm9uUmVsb2FkPy4odGhpcy5pdGVtcyk7XHJcbiAgICB0aGlzLmlzU2VsZWN0QWxsID0gdGhpcy5pdGVtcy5ldmVyeShlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKTtcclxuICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICB9O1xyXG5cclxuICByZWxvYWQgPSBhc3luYyAoZm9yY2U6IGJvb2xlYW4gPSB0cnVlKSA9PiB7XHJcbiAgICB0aGlzLnRhYmxlRmlsdGVyPy51cGRhdGVGaWx0ZXI/LigpO1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuI2xvYWQodGhpcy4jZ2V0RmlsdGVyKCksIGZvcmNlKTtcclxuICAgIHRoaXMuI3JlbmRlcihkYXRhKTtcclxuICB9O1xyXG5cclxuICAjZXhwb3J0ZWRJdGVtcyA9IGFzeW5jIChwYWdlTnVtYmVyOiBudW1iZXIgPSAwLCBwYWdlU2l6ZTogbnVtYmVyID0gMTAwMDApID0+IHtcclxuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uaXRlbXMpIHtcclxuICAgICAgLy8gY29uc3QgZXhwb3J0ZWRJdGVtcyA9IHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lml0ZW1zKHRoaXMuI2ZpbHRlckV4cG9ydEluZm8ocGFnZU51bWJlciwgcGFnZVNpemUpKTtcclxuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudGFibGVPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLiNmaWx0ZXJFeHBvcnRJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09ic2VydmFibGU8YW55W10+KHJlc3VsdCkpIHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQudG9Qcm9taXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzT2JzZXJ2YWJsZTx7IGl0ZW1zOiBhbnlbXTsgdG90YWw6IG51bWJlciB9PihyZXN1bHQpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmaWx0ZXJJbmZvID0gdGhpcy4jZmlsdGVyRXhwb3J0SW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSk7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlT3B0aW9uLnR5cGUgPT09ICdzZXJ2ZXInKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudGFibGVPcHRpb24uaXRlbXMoZmlsdGVySW5mbyk7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZXhwb3J0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFibGVPcHRpb24uaXRlbXMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zKCk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgZXhwb3J0ZWRJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleHBvcnRlZEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXhwb3J0ZWRJdGVtcyA9IHRoaXMudGFibGVPcHRpb24uaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJMb2NhbChleHBvcnRlZEl0ZW1zLCBmaWx0ZXJJbmZvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNhbGxDb2x1bW5zID0gKCk6IFNkVGFibGVDb2x1bW5bXSA9PiB7XHJcbiAgICBjb25zdCBjb2x1bW5zOiBTZFRhYmxlQ29sdW1uW10gPSBbXTtcclxuICAgIHRoaXMudGFibGVPcHRpb24uY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZClcclxuICAgICAgLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICAgIGNvbHVtbi5jaGlsZHJlblxyXG4gICAgICAgICAgICA/LmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfTtcclxuXHJcbiAgI2FsbEV4cG9ydGVkQ29sdW1ucyA9ICgpOiBTZFRhYmxlT3B0aW9uRXhwb3J0Q29sdW1uW10gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVPcHRpb24uZXhwb3J0Py5jb2x1bW5zPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKSB8fCBbXTtcclxuICB9O1xyXG5cclxuICAjb25FeHBvcnQgPSBhc3luYyAoaXNDU1Y/OiBib29sZWFuKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgY29sdW1ucyA9IHRoaXMuI2dldEV4cG9ydENvbHVtbnMoKTtcclxuICAgICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnRhYmxlT3B0aW9uPy5leHBvcnQ/Lm1heEl0ZW1zUGVyUmVxdWVzdCB8fCAxMDAwO1xyXG4gICAgICBjb25zdCBiYXRjaCA9IHRoaXMudGFibGVPcHRpb24/LmV4cG9ydD8uYmF0Y2ggfHwgMTtcclxuICAgICAgbGV0IHRvdGFsID0gdGhpcy50b3RhbDtcclxuICAgICAgbGV0IHBhZ2VOdW1iZXIgPSAwO1xyXG4gICAgICBsZXQgZXhwb3J0SXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5pc0V4cG9ydGluZyA9IHRydWU7XHJcbiAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgICBsZXQgcHJvbWlzZXM6IFByb21pc2U8XHJcbiAgICAgICAgfCBhbnlbXVxyXG4gICAgICAgIHwge1xyXG4gICAgICAgICAgICBpdGVtczogYW55W107XHJcbiAgICAgICAgICAgIHRvdGFsOiBudW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgID5bXSA9IFtdO1xyXG4gICAgICBjb25zdCBoYW5kbGVEYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICAgICAgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBleHBvcnRJdGVtcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgIGlmICgnaXRlbXMnIGluIHJlc3VsdCkge1xyXG4gICAgICAgICAgICBleHBvcnRJdGVtcyA9IFsuLi5leHBvcnRJdGVtcywgLi4ucmVzdWx0Lml0ZW1zXTtcclxuICAgICAgICAgICAgdG90YWwgPSByZXN1bHQudG90YWw7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleHBvcnRJdGVtcyA9IFsuLi5leHBvcnRJdGVtcywgLi4ucmVzdWx0XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVPcHRpb24uZXhwb3J0Py5tYXBwaW5nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy50YWJsZU9wdGlvbi5leHBvcnQubWFwcGluZyhleHBvcnRJdGVtcyk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBhd2FpdCByZXN1bHRzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0b3RhbFBhZ2UgPSB0b3RhbCAvIHBhZ2VTaXplO1xyXG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSBNYXRoLnJvdW5kKCgocGFnZU51bWJlciAtIDEpICogMTAwLjApIC8gdG90YWxQYWdlKTtcclxuICAgICAgICB0aGlzLmV4cG9ydFRpdGxlID0gYEV4cG9ydGluZy4uLiR7cGVyY2VudH0lYDtcclxuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy4jYWxsQ29sdW1ucygpO1xyXG4gICAgICAgIGNvbnN0IGFsbEV4cG9ydGVkQ29sdW1ucyA9IHRoaXMuI2FsbEV4cG9ydGVkQ29sdW1ucygpO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHBvcnRJdGVtcykge1xyXG4gICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGFzeW5jIChleHBvcnRDb2x1bW46IFNkRXhwb3J0Q29sdW1uKSA9PiB7XHJcbiAgICAgICAgICAgIG9ialtleHBvcnRDb2x1bW4uZmllbGRdID0gaXRlbVtleHBvcnRDb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoZSA9PiBlLmZpZWxkID09PSBleHBvcnRDb2x1bW4uZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCBleHBvcnRlZENvbHVtbiA9IGFsbEV4cG9ydGVkQ29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gZXhwb3J0Q29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKGV4cG9ydGVkQ29sdW1uPy50cmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICBvYmpbZXhwb3J0ZWRDb2x1bW4uZmllbGRdID0gZXhwb3J0ZWRDb2x1bW4udHJhbnNmb3JtKGl0ZW1bZXhwb3J0ZWRDb2x1bW4uZmllbGRdLCBpdGVtKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjb2x1bW4pIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uPy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IGhhbmRsZShjaGlsZENvbHVtbikpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWNvbHVtbnMuc29tZShlID0+IGUuZmllbGQgPT09IGNvbHVtbi5maWVsZCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50cmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBjb2x1bW4udHJhbnNmb3JtKGl0ZW1bY29sdW1uLmZpZWxkXSwgaXRlbSwge1xyXG4gICAgICAgICAgICAgICAgaXNFeHBvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gYXdhaXQgdHJhbnNmb3JtO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRyYW5zZm9ybTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBvYmpbY29sdW1uLmZpZWxkXSA/PyAnJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSAnJykge1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gJyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnIHx8IGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGNlbGwgbMOgIHN0cmluZyBob+G6t2MgbnVtYmVyIHRow6wgZ8OhbiBi4bqxbmcgY2jDrW5oIG7Ds1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgYm9vbCB0aMOsIGfDoW4gYuG6sW5nIGdpw6EgdHLhu4sgdHJ1ZVZhbHVlIHbDoCBmYWxzZVZhbHVlIChu4bq/dSBjw7MpLCBt4bq3YyDEkeG7i25oIGzDoCBUUlVFL0ZBTFNFXHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4ub3B0aW9uPy5kaXNwbGF5T25UcnVlIHx8ICdUcnVlJztcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9ialtjb2x1bW4uZmllbGRdICE9PSB1bmRlZmluZWQgJiYgb2JqW2NvbHVtbi5maWVsZF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLm9wdGlvbj8uZGlzcGxheU9uRmFsc2UgfHwgJ0ZhbHNlJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRlID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCBkYXRlIHRow6wgY29udmVydCB0aGVvIMSRw7puZyBmb3JtYXRcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IERhdGUudG9Gb3JtYXQoZGF0ZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRlID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCBkYXRldGltZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdkZC9NTS95eXl5IEhIOm1tJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRlID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCB0aW1lIHRow6wgY29udmVydCB0aGVvIMSRw7puZyBmb3JtYXRcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IERhdGUudG9Gb3JtYXQoZGF0ZSwgJ0hIOm1tJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnIHx8IGNvbHVtbi50eXBlID09PSAnbGF6eS12YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnbGF6eS12YWx1ZXMnICYmIHR5cGVvZiBjb2x1bW4ub3B0aW9uLm1hcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2x1bW4ub3B0aW9uLm1hcFZhbHVlKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHMgPSAoQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF0pLmZpbHRlcihlID0+ICEhZT8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHZhbHMubWFwKHZhbD0+IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2NvbHVtbi5maWVsZF0/Llt2YWxdPy5bY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdIHx8IHZhbCk/LmpvaW4oJywgJyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHMgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pLmZpbHRlcihlID0+ICEhZT8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHZhbHMubWFwKHZhbD0+IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2NvbHVtbi5maWVsZF0/Llt2YWxdPy5bY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdIHx8IHZhbCk/LmpvaW4oJywgJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBleHBvcnRDb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBoYW5kbGUoZXhwb3J0Q29sdW1uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW1zLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHdoaWxlIChwYWdlTnVtYmVyICogcGFnZVNpemUgPCB0b3RhbCkge1xyXG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy4jZXhwb3J0ZWRJdGVtcyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICAgIHBhZ2VOdW1iZXIrKztcclxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoIDwgYmF0Y2gpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBoYW5kbGVEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhd2FpdCBoYW5kbGVEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzQ1NWKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydENTVih7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICBmaWxlTmFtZTogdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5maWxlTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICAgIGl0ZW1zOiBhbnlbXTtcclxuICAgICAgICBmaWVsZHM6IHN0cmluZ1tdO1xyXG4gICAgICB9W10gPSBbXTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5zaGVldHMpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydC5zaGVldHMpIHtcclxuICAgICAgICAgIGlmIChzaGVldC5uYW1lICYmIHNoZWV0Lml0ZW1zICYmIHNoZWV0LmZpZWxkcykge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHMsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHMsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydCh7XHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBpdGVtcyxcclxuICAgICAgICBmaWxlTmFtZTogdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5maWxlTmFtZSxcclxuICAgICAgICBzaGVldHMsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmlzRXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZXhwb3J0VGl0bGUgPSBgRXhwb3J0YDtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNnZXRFeHBvcnRDb2x1bW5zID0gKCkgPT4ge1xyXG4gICAgbGV0IGdyaWRDb2x1bW5zOiBTZEV4cG9ydENvbHVtbltdID0gW107XHJcbiAgICB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpXHJcbiAgICAgIC5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uY2hpbGRyZW5cclxuICAgICAgICAgICAgPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgICAgZ3JpZENvbHVtbnMucHVzaChjaGlsZENvbHVtbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBncmlkQ29sdW1ucy5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjb2x1bW5zID0gWy4uLmdyaWRDb2x1bW5zXTtcclxuICAgICAgY29uc3QgeyBmaXJzdENvbHVtbnMsIHNlY29uZENvbHVtbnMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnM6IFNkVGFibGVDb2x1bW5bXSA9IFsuLi5maXJzdENvbHVtbnMsIC4uLnNlY29uZENvbHVtbnNdLnJlZHVjZSgoZmlyc3QsIG5leHQpID0+IHtcclxuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IG5leHQuZmllbGQpO1xyXG4gICAgICAgIGlmICghY29sdW1uKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmlyc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSAhPT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgICAgcmV0dXJuIFsuLi5maXJzdCwgY29sdW1uXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjb2x1bW4uY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIFsuLi5maXJzdCwgLi4uY2hpbGRyZW5dO1xyXG4gICAgICB9LCBbXSk7XHJcbiAgICAgIGdyaWRDb2x1bW5zID0gZGlzcGxheUNvbHVtbnNcclxuICAgICAgICAubWFwKGUgPT4gKHtcclxuICAgICAgICAgIC4uLmUsXHJcbiAgICAgICAgICBkYXRhOiBjb2x1bW5zLmZpbmQoZTEgPT4gZTEuZmllbGQgPT09IGUuZmllbGQpLFxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoZSA9PiAhIWUuZGF0YSlcclxuICAgICAgICAubWFwKGUgPT4gZS5kYXRhKTtcclxuICAgIH1cclxuICAgIHJldHVybiBbLi4uZ3JpZENvbHVtbnMsIC4uLih0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uY29sdW1ucz8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkgfHwgW10pXTtcclxuICB9O1xyXG5cclxuICBleHBvcnRFeGNlbCA9ICgpID0+IHtcclxuICAgIHRoaXMuI29uRXhwb3J0KCk7XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0Q1NWID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jb25FeHBvcnQodHJ1ZSk7XHJcbiAgfTtcclxuXHJcbiAgb25GaWx0ZXJDaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnRhYmxlRmlsdGVyPy51cGRhdGVGaWx0ZXI/LigpO1xyXG4gICAgdGhpcy5maWx0ZXJSZWdpc3Rlci52YWx1ZS5zZXQoe1xyXG4gICAgICBjb2x1bW5PcGVyYXRvcjogdGhpcy5jb2x1bW5PcGVyYXRvciB8fCB7fSxcclxuICAgICAgY29sdW1uRmlsdGVyOiB0aGlzLmNvbHVtbkZpbHRlcixcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIG9uRXhwYW5kID0gYXN5bmMgKHJvd0RhdGE6IFNkVGFibGVJdGVtPFQ+KSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5leHBhbmQ/LmFsd2F5cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy50YWJsZU9wdGlvbj8uZXhwYW5kPy5vbkV4cGFuZD8uKHJvd0RhdGEuZGF0YSk7XHJcbiAgICBpZiAoIXRoaXMudGFibGVPcHRpb24uZXhwYW5kPy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiAoaXRlbS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZyA9IGl0ZW0ubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZyA9IHRydWU7XHJcbiAgICAgIGRhdGFcclxuICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5kYXRhID0gcmVzO1xyXG4gICAgICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5maW5hbGx5KCgpID0+IChyb3dEYXRhLm1ldGEuZXhwYW5kLmlzRXhwYW5kaW5nID0gZmFsc2UpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuZGF0YSA9IGRhdGE7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgb25TZWxlY3QgPSAocm93RGF0YTogU2RUYWJsZUl0ZW08VD4pID0+IHtcclxuICAgIGlmIChyb3dEYXRhLm1ldGEuZ3JvdXA/Lml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgcm93RGF0YS5tZXRhLmdyb3VwLml0ZW1zLmZvckVhY2goZSA9PiAoZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQgPSByb3dEYXRhLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCkpO1xyXG4gICAgICB0aGlzLnRhYmxlT3B0aW9uLnNlbGVjdG9yPy5vblNlbGVjdD8uKFxyXG4gICAgICAgIHJvd0RhdGEuZGF0YSxcclxuICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKS5tYXAoZSA9PiBlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0aGlzLml0ZW1zLmV2ZXJ5KGUgPT4gZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5zZWxlY3Rvcj8uc2luZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlICE9PSByb3dEYXRhKS5mb3JFYWNoKGUgPT4gKGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkID0gZmFsc2UpKTtcclxuICAgICAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFibGVPcHRpb24uc2VsZWN0b3I/Lm9uU2VsZWN0Py4oXHJcbiAgICAgICAgcm93RGF0YS5kYXRhLFxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpLm1hcChlID0+IGUuZGF0YSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRoaXMuaXRlbXMuZXZlcnkoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCk7XHJcbiAgICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBvblNlbGVjdEFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuaXRlbXM/LmZvckVhY2goZSA9PiB7XHJcbiAgICAgIGlmIChlLm1ldGEuc2VsZWN0b3Iuc2VsZWN0YWJsZSAmJiAoIXRoaXMudGFibGVPcHRpb24/LnNlbGVjdG9yPy5hY3Rpb25zPy5sZW5ndGggfHwgZS5tZXRhLnNlbGVjdG9yLmFjdGlvbnM/Lmxlbmd0aCkpIHtcclxuICAgICAgICBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RBbGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50YWJsZU9wdGlvbi5zZWxlY3Rvcj8ub25TZWxlY3RBbGw/Lih0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKS5tYXAoZSA9PiBlLmRhdGEpKTtcclxuICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICB9O1xyXG5cclxuICBvbkNsZWFyU2VsZWN0aW9uID0gKGl0ZW1zPzogU2RUYWJsZUl0ZW08VD5bXSkgPT4ge1xyXG4gICAgaXRlbXMgPSBpdGVtcyB8fCB0aGlzLml0ZW1zO1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgaXRlbXM/LmZvckVhY2goZSA9PiAoZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy4jdXBkYXRlU2VsZWN0ZWRJdGVtcygpO1xyXG4gIH07XHJcblxyXG4gICN1cGRhdGVTZWxlY3RlZEl0ZW1zID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBjbGVhckZpbHRlciA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUucmVtb3ZlKCk7XHJcbiAgfTtcclxuXHJcbiAgc2V0RmlsdGVyID0gKGFyZ3M6IHsgY29sdW1uRmlsdGVyPzogUmVjb3JkPHN0cmluZywgYW55PjsgZXh0ZXJuYWxGaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBmaWx0ZXJEZWY/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1uRmlsdGVyLCBleHRlcm5hbEZpbHRlciwgZmlsdGVyRGVmIH0gPSBhcmdzIHx8IHt9O1xyXG4gICAgaWYgKGNvbHVtbkZpbHRlcikge1xyXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciA9IGNvbHVtbkZpbHRlcjtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUuc2V0KHtcclxuICAgICAgY29sdW1uRmlsdGVyLFxyXG4gICAgICBleHRlcm5hbEZpbHRlcixcclxuICAgICAgZmlsdGVyRGVmLFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0IGRhdGFJdGVtcygpOiBUW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYmxlSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGRldGVjdENoYW5nZXMgPSAoKSA9PiB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICNsb2FkVmFsdWVzID0gYXN5bmMgKGNvbHVtbnM6IFNkVGFibGVDb2x1bW5bXSkgPT4ge1xyXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8e1xyXG4gICAgICBrZXk6IHN0cmluZztcclxuICAgICAgdmFsdWVGaWVsZDogc3RyaW5nO1xyXG4gICAgICBkaXNwbGF5RmllbGQ6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55W107XHJcbiAgICB9PltdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycgJiYgIXRoaXMuY2FjaGVWYWx1ZXNbY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uLm9wdGlvbi5pdGVtcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgY29sdW1uLm9wdGlvblxyXG4gICAgICAgICAgICAgIC5pdGVtcygpXHJcbiAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiAoe1xyXG4gICAgICAgICAgICAgICAga2V5OiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbXSxcclxuICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVZhbHVlc1tjb2x1bW4uZmllbGRdID0gY29sdW1uLm9wdGlvbi5pdGVtcy5tYXAoZSA9PiAoe1xyXG4gICAgICAgICAgICBbY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXTogZT8uW2NvbHVtbi5vcHRpb24udmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICAgIFtjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF06IGU/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0sXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLiNjYWNoZU9ialZhbHVlc1tjb2x1bW4uZmllbGRdID0gQXJyYXkudG9PYmplY3QodGhpcy5jYWNoZVZhbHVlc1tjb2x1bW4uZmllbGRdLCBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZVZhbHVlc1tyZXN1bHQua2V5XSA9IHJlc3VsdC5kYXRhLm1hcChlID0+ICh7XHJcbiAgICAgICAgICBbcmVzdWx0LnZhbHVlRmllbGRdOiBlPy5bcmVzdWx0LnZhbHVlRmllbGRdLFxyXG4gICAgICAgICAgW3Jlc3VsdC5kaXNwbGF5RmllbGRdOiBlPy5bcmVzdWx0LmRpc3BsYXlGaWVsZF0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlT2JqVmFsdWVzW3Jlc3VsdC5rZXldID0gQXJyYXkudG9PYmplY3QodGhpcy5jYWNoZVZhbHVlc1tyZXN1bHQua2V5XSwgcmVzdWx0LnZhbHVlRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgI2Zvcm1hdCA9IGFzeW5jIDxUID0gYW55PihyYXdJdGVtczogVFtdLCBjb2x1bW5zOiBTZFRhYmxlQ29sdW1uW10pID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gcmF3SXRlbXMubWFwKE1hcFRvU2RUYWJsZUl0ZW0pO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAvLyBDbGlja2FibGVcclxuICAgICAgY29uc3QgeyBmaWVsZCwgY2VsbFN0eWxlLCBjbGljaywgdG9vbHRpcCwgaHRtbFRlbXBsYXRlLCB0cmFuc2Zvcm0gfSA9IGNvbHVtbjtcclxuICAgICAgaWYgKCF0cmFuc2Zvcm0gJiYgIWh0bWxUZW1wbGF0ZSAmJiBjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJyAmJiB0eXBlb2YgY29sdW1uLm9wdGlvbi52aWV3cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgIG9wdGlvbjogeyB2aWV3cywgbWFwVmFsdWUgfSxcclxuICAgICAgICB9ID0gY29sdW1uO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSA9IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSB8fCB7fTtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBpdGVtc1xyXG4gICAgICAgICAgLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXBWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShpdGVtLmRhdGE/LltmaWVsZF0sIGl0ZW0uZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YT8uW2ZpZWxkXTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKHZhbCA9PiAhIXZhbD8udG9TdHJpbmcoKSlcclxuICAgICAgICAgIC5yZWR1Y2U8c3RyaW5nW10+KChjdXJyZW50LCBuZXh0KSA9PiBbLi4uY3VycmVudCwgLi4uKEFycmF5LmlzQXJyYXkobmV4dCkgPyBuZXh0IDogW25leHRdKV0sIFtdKVxyXG4gICAgICAgICAgLmZpbHRlcih2YWwgPT4gIU9iamVjdC5rZXlzKHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSkuaW5jbHVkZXModmFsKSlcclxuICAgICAgICAgIC51bmlvbigpO1xyXG5cclxuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgbGF6eUl0ZW1zOiBhbnlbXSA9IChcclxuICAgICAgICAgICAgYXdhaXQgdmlld3ModmFsdWVzKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiB2YWx1ZXMuaW5jbHVkZXMoaXRlbT8uW2NvbHVtbi5vcHRpb24udmFsdWVGaWVsZF0pKVxyXG4gICAgICAgICAgICAubWFwKGUgPT4gKHtcclxuICAgICAgICAgICAgICBbY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXTogZT8uW2NvbHVtbi5vcHRpb24udmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICAgICAgW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXTogZT8uW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXSxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLiNjYWNoZU9ialZhbHVlc1tmaWVsZF0sIEFycmF5LnRvT2JqZWN0KGxhenlJdGVtcywgY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkKSB8fCB7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSBpdGVtLmRhdGE7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dEYXRhPy5bZmllbGRdO1xyXG4gICAgICAgIGl0ZW0ubWV0YS5kaXNwbGF5W2ZpZWxkXSA9IHtcclxuICAgICAgICAgIGJhZGdlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBjZWxsU3R5bGU6IGNvbHVtbi50eXBlID09PSAnbnVtYmVyJyA/IHsgJ3RleHQtYWxpZ24nOiAncmlnaHQhaW1wb3J0YW50JyB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGF0YTogdmFsdWUsXHJcbiAgICAgICAgICBpc0h0bWw6IGZhbHNlLFxyXG4gICAgICAgICAgdG9vbHRpcDogdHlwZW9mIHRvb2x0aXAgPT09ICdmdW5jdGlvbicgPyB0b29sdGlwKHZhbHVlLCByb3dEYXRhKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGNsaWNrOiB0eXBlb2YgY2xpY2sgPT09ICdmdW5jdGlvbicgPyAoKSA9PiBjbGljayh2YWx1ZSwgcm93RGF0YSkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkaXNwbGF5ID0gaXRlbS5tZXRhLmRpc3BsYXlbZmllbGRdO1xyXG4gICAgICAgIC8vIERpc3BsYXlcclxuICAgICAgICBpZiAodHlwZW9mIGh0bWxUZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgZGlzcGxheS5pc0h0bWwgPSB0cnVlO1xyXG4gICAgICAgICAgZGlzcGxheS5kYXRhID0gaHRtbFRlbXBsYXRlKHZhbHVlLCByb3dEYXRhKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdHJhbnNmb3JtKHZhbHVlLCByb3dEYXRhKTtcclxuICAgICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gYXdhaXQgbmV3VmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScgfHwgY29sdW1uLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gRGF0ZS50b0Zvcm1hdCh2YWx1ZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICAgICAgbGV0IHRpbWUgPSBEYXRlLnRvRm9ybWF0KHZhbHVlLCAnSEg6bW06c3MnKTtcclxuICAgICAgICAgICAgaWYgKHRpbWU/LmVuZHNXaXRoKCcwMCcpKSB7XHJcbiAgICAgICAgICAgICAgdGltZSA9IERhdGUudG9Gb3JtYXQodmFsdWUsICdISDptbScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5LmlzSHRtbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBgPHNwYW4gY2xhc3M9XCJkLWJsb2NrIFQxNFIgdGV4dC1ibGFjazQwMFwiPiR7dGltZX08L3NwYW4+PHNwYW4gY2xhc3M9XCJkLWJsb2NrIFQxNFJcIj4ke2RhdGV9PC9zcGFuPmA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IGRhdGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gdGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdsYXp5LXZhbHVlcycgJiYgdHlwZW9mIGNvbHVtbi5vcHRpb24ubWFwVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2x1bW4ub3B0aW9uLm1hcFZhbHVlKHZhbHVlLCByb3dEYXRhKTtcclxuICAgICAgICAgICAgICBjb25zdCB2YWxzID0gKEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdKS5maWx0ZXIoZSA9PiAhIWU/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IHZhbHMubWFwKHZhbD0+IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXT8uW3ZhbF0/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0gfHwgdmFsKT8uam9pbignLCAnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWxzID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKS5maWx0ZXIoZSA9PiAhIWU/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IHZhbHMubWFwKHZhbD0+IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXT8uW3ZhbF0/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0gfHwgdmFsKT8uam9pbignLCAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNOdW1iZXIodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IE51bWJlci50b1ZOQ3VycmVuY3kodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBvcHRpb24gfSA9IGNvbHVtbjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gdmFsdWUgPT09IHRydWUgPyBvcHRpb24/LmRpc3BsYXlPblRydWUgfHwgJ1RydWUnIDogb3B0aW9uPy5kaXNwbGF5T25GYWxzZSB8fCAnRmFsc2UnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEJhZGdlXHJcbiAgICAgICAgICBpZiAoKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgfHwgY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSAmJiBjb2x1bW4uYmFkZ2UpIHtcclxuICAgICAgICAgICAgZGlzcGxheS5iYWRnZSA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiAhY29sdW1uPy5iYWRnZVR5cGUgPyAnaWNvbicgOiBjb2x1bW4uYmFkZ2VUeXBlLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBjb2x1bW4uYmFkZ2UodmFsdWUsIHJvd0RhdGEpLFxyXG4gICAgICAgICAgICAgIGljb246IGNvbHVtbi5iYWRnZUljb24/Lih2YWx1ZSwgcm93RGF0YSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgZGlzcGxheS5iYWRnZSA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnY2lyY2xlJyxcclxuICAgICAgICAgICAgICBjb2xvcjogISF2YWx1ZSA/ICdzdWNjZXNzJyA6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgIGljb246IG51bGwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfTtcclxuXHJcbiAgb25PcGVyYXRvckNoYW5nZSA9IChjb2x1bW46IFNkVGFibGVDb2x1bW4sIG9wZXJhdG9yOiBTZEZpbHRlck9wZXJhdG9yKSA9PiB7XHJcbiAgICB0aGlzLnRhYmxlT3B0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yQ2hhbmdlPy4oY29sdW1uLCBvcGVyYXRvcik7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFNkVGFibGVJdGVtKSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbS5tZXRhLmlkO1xyXG4gIH07XHJcbn1cclxuIl19
1075
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS90YWJsZS8iLCJzb3VyY2VzIjpbInNyYy9saWIvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBR1QsWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQXlCLE1BQU0sb0NBQW9DLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxr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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgSW5qZWN0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBTZFRhYmxlRmlsdGVyUmVnaXN0ZXIsIFNkVGFibGVGaWx0ZXJSZXF1ZXN0IH0gZnJvbSAnLi9zZXJ2aWNlcy90YWJsZS1maWx0ZXIvdGFibGUtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgU2RUYWJsZU9wdGlvbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFRBQkxFX0NPTkZJRywgREVGQVVMVF9UQUJMRV9DT05GSUcsIElTZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGlzT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7IFNkRmlsdGVyT3BlcmF0b3IsIFNkVGFibGVDb2x1bW4sIFNkVGFibGVDb2x1bW5MYXp5VmFsdWVzLCBTZFRhYmxlQ29sdW1uVmFsdWVzIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgU2RUYWJlbENlbGxEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtdGFibGUtY2VsbC1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZFRhYmxlRmlsdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWZpbHRlci90YWJsZS1maWx0ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2RUYWJsZUZpbHRlckRlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC10YWJsZS1maWx0ZXItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxTdWJJbmZvcm1hdGlvbkRlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC10YWJsZS1leHBhbmQtZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxGb290ZXJEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtdGFibGUtZm9vdGVyLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydENvbHVtbiwgU2RFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leHBvcnQnO1xyXG5pbXBvcnQgeyBTZFRhYmxlQ29uZmlndXJhdGlvblJlc3VsdCB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW9wdGlvbi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RhYmxlLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNkVGFibGVPcHRpb25FeHBvcnRDb2x1bW4gfSBmcm9tICcuL21vZGVscy90YWJsZS1vcHRpb24tZXhwb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2RRdWlja0FjdGlvbiB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvcXVpY2stYWN0aW9uJztcclxuaW1wb3J0IHsgTWFwVG9TZFRhYmxlSXRlbSwgU2RUYWJsZUl0ZW0gfSBmcm9tICcuL21vZGVscy90YWJsZS1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgU2RTY3JvbGxEaXJlY3RpdmUgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbmltcG9ydCB7IFNkVGFibGVGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90YWJsZS1maWx0ZXIvdGFibGUtZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZFBvcHVwQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy9wb3B1cC1jb25maWd1cmF0aW9uL3BvcHVwLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2RMb2FkaW5nU2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbG9hZGluZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NkLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwJywgbWluSGVpZ2h0OiAnMCcsIHZpc2liaWxpdHk6ICdoaWRkZW4nIH0pKSxcclxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJywgdmlzaWJpbGl0eTogJ3Zpc2libGUnIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFRhYmxlPFQgPSBhbnk+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUpIHRhYmxlOiBNYXRUYWJsZTxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoU2RQb3B1cENvbmZpZ3VyYXRpb24pIHBvcHVwQ29uZmlndXJhdGlvbjogU2RQb3B1cENvbmZpZ3VyYXRpb247XHJcbiAgI2dyaWRJZCA9IHV1aWQudjQoKTtcclxuICBAVmlld0NoaWxkKFNkU2Nyb2xsRGlyZWN0aXZlKSBzZFNjcm9sbDogU2RTY3JvbGxEaXJlY3RpdmU7XHJcbiAgZmlsdGVyUmVnaXN0ZXI6IFNkVGFibGVGaWx0ZXJSZWdpc3RlcjtcclxuICBrZXkgPSB1dWlkLnY0KCk7XHJcbiAgQFZpZXdDaGlsZChTZFF1aWNrQWN0aW9uKSBxdWlja0FjdGlvbjogU2RRdWlja0FjdGlvbjtcclxuICBAVmlld0NoaWxkKFNkVGFibGVGaWx0ZXIpIHRhYmxlRmlsdGVyOiBTZFRhYmxlRmlsdGVyO1xyXG4gIHRhYmxlT3B0aW9uOiBTZFRhYmxlT3B0aW9uPFQ+O1xyXG4gIGNvbmZpZ3VyYXRpb246IFNkVGFibGVDb25maWd1cmF0aW9uUmVzdWx0O1xyXG4gIEBJbnB1dCgpIHNldCBvcHRpb24ob3B0aW9uOiBTZFRhYmxlT3B0aW9uKSB7XHJcbiAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgIG9wdGlvbiA9IHRoaXMuI2luaXRDb25maWd1cmF0aW9uKG9wdGlvbik7XHJcbiAgICAgIHRoaXMudGFibGVPcHRpb24gPSBvcHRpb247XHJcbiAgICAgIHRoaXMuI2xvYWRDb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgY29uc3Qgc2V0dGluZyA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uU2VydmljZS5pbml0KHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICBpZiAoc2V0dGluZykge1xyXG4gICAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICBzZXR0aW5nLm9ic2VydmVyLnBpcGUoc3RhcnRXaXRoKHNldHRpbmcuc3ViamVjdC5nZXRWYWx1ZSgpKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvblJlc3VsdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uU2VydmljZS5sb2FkQ29uZmlndXJhdGlvblJlc3VsdCh0aGlzLnRhYmxlT3B0aW9uLCBzZXR0aW5nLmdldCgpKTtcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBjb25maWd1cmF0aW9uUmVzdWx0LmRpc3BsYXllZENvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLiNsb2FkVmFsdWVzKHRoaXMudGFibGVPcHRpb24uY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGRpc3BsYXlDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5maWVsZCkpKVxyXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25SZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNvcHRpb25DaGFuZ2VzLm5leHQodGhpcy50YWJsZU9wdGlvbik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmxvYWRDb25maWd1cmF0aW9uKHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25SZXN1bHQgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UubG9hZENvbmZpZ3VyYXRpb25SZXN1bHQodGhpcy50YWJsZU9wdGlvbiwgY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBjb25maWd1cmF0aW9uUmVzdWx0LmRpc3BsYXllZENvbHVtbnMgfHwgW107XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLiNsb2FkVmFsdWVzKHRoaXMudGFibGVPcHRpb24uY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGRpc3BsYXlDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5maWVsZCkpKVxyXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLiNvcHRpb25DaGFuZ2VzLm5leHQodGhpcy50YWJsZU9wdGlvbik7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoKTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgI29wdGlvbkNoYW5nZXMgPSBuZXcgU3ViamVjdDxTZFRhYmxlT3B0aW9uPigpO1xyXG5cclxuICAjbG9jYWxJdGVtczogU2RUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gIGl0ZW1zOiBTZFRhYmxlSXRlbTxUPltdID0gW107XHJcbiAgc2VsZWN0ZWRUYWJsZUl0ZW1zOiBTZFRhYmxlSXRlbTxUPltdID0gW107XHJcbiAgdG90YWw6IG51bWJlcjtcclxuXHJcbiAgLy8gTG9hZGluZ1xyXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvLyBQYWdpbmF0ZVxyXG4gIGlzSGlkZGVuUGFnaW5hdG9yID0gZmFsc2U7XHJcbiAgI3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBzZXQgcGFnaW5hdG9yKHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICBpZiAocGFnaW5hdG9yICYmIHRoaXMuI3BhZ2luYXRvciAhPT0gcGFnaW5hdG9yKSB7XHJcbiAgICAgIHRoaXMuI3BhZ2luYXRvciA9IHBhZ2luYXRvcjtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICBwYWdpbmF0b3IucGFnZVxyXG4gICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy4jcmVsb2FkLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgZm9yY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTb3J0aW5nXHJcbiAgI3NvcnQ6IE1hdFNvcnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzZXQgc29ydChzb3J0OiBNYXRTb3J0KSB7XHJcbiAgICBpZiAoc29ydCAmJiB0aGlzLiNzb3J0ICE9PSBzb3J0KSB7XHJcbiAgICAgIHRoaXMuI3NvcnQgPSBzb3J0O1xyXG4gICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICAgIHNvcnQuc29ydENoYW5nZVxyXG4gICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy4jcmVsb2FkLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgZm9yY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTdWIgSW5mb3JtYXRpb25cclxuICBAQ29udGVudENoaWxkKFNkTWF0ZXJpYWxTdWJJbmZvcm1hdGlvbkRlZkRpcmVjdGl2ZSlcclxuICBzZFN1YkluZm9ybWF0aW9uOiBTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmU7XHJcblxyXG4gIC8vIENlbGwgRGVmXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZFRhYmVsQ2VsbERlZkRpcmVjdGl2ZSkgc2RDZWxsRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RUYWJlbENlbGxEZWZEaXJlY3RpdmU+KCk7XHJcbiAgY2VsbERlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RUYWJlbENlbGxEZWZEaXJlY3RpdmU7XHJcbiAgfSA9IHt9O1xyXG5cclxuICAvLyBGb290ZXIgRGVmXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlKSBzZEZvb3RlckRlZnMgPSBuZXcgUXVlcnlMaXN0PFNkTWF0ZXJpYWxGb290ZXJEZWZEaXJlY3RpdmU+KCk7XHJcbiAgZm9vdGVyRGVmOiB7XHJcbiAgICBbY29sdW1uOiBzdHJpbmddOiBTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlO1xyXG4gIH0gPSB7fTtcclxuICBoYXNGb290ZXIgPSBmYWxzZTtcclxuXHJcbiAgLy8gRmlsdGVyIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RUYWJsZUZpbHRlckRlZkRpcmVjdGl2ZSkgc2RGaWx0ZXJEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZFRhYmxlRmlsdGVyRGVmRGlyZWN0aXZlPigpO1xyXG4gIGZpbHRlckRlZnM6IFNkVGFibGVGaWx0ZXJEZWZEaXJlY3RpdmVbXSA9IFtdO1xyXG5cclxuICAvLyBGaWx0ZXJcclxuICBjb2x1bW5PcGVyYXRvcjogUmVjb3JkPHN0cmluZywgU2RGaWx0ZXJPcGVyYXRvcj4gPSB7fTtcclxuICBjb2x1bW5GaWx0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAvLyBTdWJjcmlwdGlvblxyXG4gICNzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgI3JlbG9hZCA9IG5ldyBTdWJqZWN0PHtcclxuICAgIGZvcmNlOiBib29sZWFuO1xyXG4gIH0+KCk7XHJcbiAgaXNFeHBvcnRpbmcgPSBmYWxzZTtcclxuICBpc1NlbGVjdEFsbCA9IGZhbHNlO1xyXG4gIGV4cG9ydFRpdGxlID0gJ0V4cG9ydCc7XHJcbiAgI2xvYWRDb21wbGV0ZWQgPSBmYWxzZTtcclxuICBjYWNoZVZhbHVlczogUmVjb3JkPHN0cmluZywgYW55W10+ID0ge307XHJcbiAgI2NhY2hlT2JqVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSxcclxuICAgIEBJbmplY3QoVEFCTEVfQ09ORklHKVxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIHB1YmxpYyB0YWJsZUNvbmZpZ3VyYXRpb246IElTZFRhYmxlQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgdGFibGVDb25maWd1cmF0aW9uU2VydmljZTogU2RUYWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZ3JpZEZpbHRlclNlcnZpY2U6IFNkVGFibGVGaWx0ZXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuI2luaXRDZWxsRGVmKCk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuI3JlbG9hZFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckluZm8gPSB0aGlzLiNnZXRGaWx0ZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jbG9hZChmaWx0ZXJJbmZvLCAhdGhpcy4jbG9hZENvbXBsZXRlZCB8fCBkYXRhLmZvcmNlKTtcclxuICAgICAgICAgICAgdGhpcy4jbG9hZENvbXBsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGU/LnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy4jcmVuZGVyKVxyXG4gICAgKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZENlbGxEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUodGhpcy4jaW5pdENlbGxEZWYpKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZEZvb3RlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0Rm9vdGVyRGVmKSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuc2RGaWx0ZXJEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUodGhpcy4jaW5pdEZpbHRlckRlZikpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnRhYmxlT3B0aW9uKSksXHJcbiAgICAgICAgdGhpcy5zZEZpbHRlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZpbHRlckRlZnMpKSxcclxuICAgICAgXSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLiNsb2FkRmlsdGVyUmVnaXN0ZXIoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLiNvcHRpb25DaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUmVnaXN0ZXIpIHtcclxuICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgZm9yY2U6IHRydWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gICNpbml0Q2VsbERlZiA9ICgpID0+IHtcclxuICAgIHRoaXMuY2VsbERlZiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBjZWxsRGVmIG9mIHRoaXMuc2RDZWxsRGVmcyB8fCBbXSkge1xyXG4gICAgICBpZiAoY2VsbERlZi5zZFRhYmxlQ2VsbERlZikge1xyXG4gICAgICAgIHRoaXMuY2VsbERlZltjZWxsRGVmLnNkVGFibGVDZWxsRGVmXSA9IGNlbGxEZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjaW5pdEZpbHRlckRlZiA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyRGVmcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBmaWx0ZXJEZWYgb2YgdGhpcy5zZEZpbHRlckRlZnMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJEZWZzLnB1c2goZmlsdGVyRGVmKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjaW5pdEZvb3RlckRlZiA9ICgpID0+IHtcclxuICAgIC8vIE5PVEU6IENvbnRlbnRDaGlsZHJlbiBuw6puIHN1YmNyaWJlIHRyb25nIEFmdGVyVmlld0luaXRcclxuICAgIHRoaXMuZm9vdGVyRGVmID0ge307XHJcbiAgICB0aGlzLmhhc0Zvb3RlciA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBmb290ZXJEZWYgb2YgdGhpcy5zZEZvb3RlckRlZnMpIHtcclxuICAgICAgaWYgKGZvb3RlckRlZi5zZFRhYmxlRm9vdGVyRGVmKSB7XHJcbiAgICAgICAgdGhpcy5oYXNGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9vdGVyRGVmW2Zvb3RlckRlZi5zZFRhYmxlRm9vdGVyRGVmXSA9IGZvb3RlckRlZjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNmaWx0ZXJFeHBvcnRJbmZvID0gKHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFNkVGFibGVGaWx0ZXJSZXF1ZXN0ID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1uT3BlcmF0b3IsIGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gdGhpcy5maWx0ZXJSZWdpc3Rlci52YWx1ZS5nZXQoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbHVtbk9wZXJhdG9yOiBjb2x1bW5PcGVyYXRvciB8fCB7fSxcclxuICAgICAgcmF3Q29sdW1uRmlsdGVyOiBjb2x1bW5GaWx0ZXIgfHwge30sXHJcbiAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiBleHRlcm5hbEZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RmlsdGVyRGVmOiBmaWx0ZXJEZWYgfHwge30sXHJcbiAgICAgIG9yZGVyQnk6IHRoaXMuI3NvcnQ/LmFjdGl2ZSB8fCAnJyxcclxuICAgICAgb3JkZXJEaXJlY3Rpb246IHRoaXMuI3NvcnQ/LmRpcmVjdGlvbiB8fCAnJyxcclxuICAgICAgcGFnZU51bWJlcixcclxuICAgICAgcGFnZVNpemUsXHJcbiAgICAgIGlzRXhwb3J0ZWQ6IHRydWUsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNpbml0Q29uZmlndXJhdGlvbiA9IChvcHRpb246IFNkVGFibGVPcHRpb24pID0+IHtcclxuICAgIC8vIEluaXQgcGFnaW5hdGlvblxyXG4gICAgb3B0aW9uLnBhZ2luYXRlID0ge1xyXG4gICAgICBoaWRkZW46IG9wdGlvbj8ucGFnaW5hdGU/LmhpZGRlbixcclxuICAgICAgcGFnZVNpemU6IG9wdGlvbj8ucGFnaW5hdGU/LnBhZ2VTaXplID8/IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgPz8gREVGQVVMVF9UQUJMRV9DT05GSUcucGFnaW5hdGU/LnBhZ2VTaXplLFxyXG4gICAgICBwYWdlczogb3B0aW9uPy5wYWdpbmF0ZT8ucGFnZXMgPz8gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LnBhZ2luYXRlPy5wYWdlcyA/PyBERUZBVUxUX1RBQkxFX0NPTkZJRy5wYWdpbmF0ZT8ucGFnZXMsXHJcbiAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zOiBvcHRpb24/LnBhZ2luYXRlPy5zaG93Rmlyc3RMYXN0QnV0dG9ucyA/PyBmYWxzZSxcclxuICAgIH07XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBvcHRpb24uY29sdW1ucyB8fCBbXSkge1xyXG4gICAgICBpZiAoY29sdW1uLmZpbHRlcj8ub3BlcmF0b3I/LmVuYWJsZSkge1xyXG4gICAgICAgIGlmICghY29sdW1uLmZpbHRlcj8ub3BlcmF0b3I/Lmxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyLm9wZXJhdG9yLmxpc3QgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5vcGVyYXRvcj8uZGVmYXVsdExpc3RTdHJpbmcgfHwgW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIub3BlcmF0b3IubGlzdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yPy5kZWZhdWx0TGlzdE51bWJlciB8fCBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycgfHwgY29sdW1uLnR5cGUgPT09ICdsYXp5LXZhbHVlcycpIHtcclxuICAgICAgICAgICAgY29sdW1uLmZpbHRlci5vcGVyYXRvci5saXN0ID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LmZpbHRlcj8ub3BlcmF0b3I/LmRlZmF1bHRMaXN0VmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgY29sdW1uLmZpbHRlci5vcGVyYXRvci5saXN0ID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LmZpbHRlcj8ub3BlcmF0b3I/LmRlZmF1bHRMaXN0RGF0ZSB8fCBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29sdW1uT3BlcmF0b3JbY29sdW1uLmZpZWxkXSA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yPy5kZWZhdWx0T3BlcmF0b3I/Lltjb2x1bW4udHlwZV0gfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmlsdGVyLm9wZXJhdG9yLmRlZmF1bHQgJiYgY29sdW1uLmZpbHRlci5vcGVyYXRvci5saXN0LnNvbWUoZWwgPT4gZWwgPT09IGNvbHVtbi5maWx0ZXIub3BlcmF0b3IuZGVmYXVsdCkpIHtcclxuICAgICAgICAgIHRoaXMuY29sdW1uT3BlcmF0b3JbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5maWx0ZXIub3BlcmF0b3IuZGVmYXVsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb247XHJcbiAgfTtcclxuXHJcbiAgI2xvYWRGaWx0ZXJSZWdpc3RlciA9ICgpID0+IHtcclxuICAgIC8vIEluaXQgZmlsdGVyXHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbikge1xyXG4gICAgICBpZiAoIXRoaXMuZmlsdGVyUmVnaXN0ZXIpIHtcclxuICAgICAgICB0aGlzLmZpbHRlclJlZ2lzdGVyID0gdGhpcy5ncmlkRmlsdGVyU2VydmljZS5yZWdpc3Rlcih0aGlzLnRhYmxlT3B0aW9uPy5maWx0ZXIsIHtcclxuICAgICAgICAgIGlkOiB0aGlzLiNncmlkSWQsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlT3B0aW9uPy5jb2x1bW5zLFxyXG4gICAgICAgICAgZXh0ZXJuYWxGaWx0ZXJzOiB0aGlzLnRhYmxlT3B0aW9uPy5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyxcclxuICAgICAgICAgIGZpbHRlckRlZnM6IHRoaXMuZmlsdGVyRGVmcyxcclxuICAgICAgICAgIGNvbHVtbk9wZXJhdG9yOnRoaXMuY29sdW1uT3BlcmF0b3IsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUub2JzZXJ2ZXJcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICAgICAgbWFwKGZpbHRlclZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29sdW1uT3BlcmF0b3IsIGNvbHVtbkZpbHRlciwgbm90UmVsb2FkIH0gPSBmaWx0ZXJWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uT3BlcmF0b3IgPSBjb2x1bW5PcGVyYXRvciB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyID0gY29sdW1uRmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub3RSZWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI3BhZ2luYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNmaWx0ZXJMb2NhbCA9IChsb2NhbEl0ZW1zOiBTZFRhYmxlSXRlbTxUPltdLCBmaWx0ZXJJbmZvOiBTZFRhYmxlRmlsdGVyUmVxdWVzdCkgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0aGlzLnRhYmxlT3B0aW9uO1xyXG4gICAgY29uc3QgeyByYXdDb2x1bW5GaWx0ZXIsIG9yZGVyQnksIG9yZGVyRGlyZWN0aW9uLCBwYWdlU2l6ZSwgcGFnZU51bWJlciB9ID0gZmlsdGVySW5mbztcclxuICAgIGNvbnN0IGl0ZW1zID0gbG9jYWxJdGVtcy5maWx0ZXIodGFibGVJdGVtID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRhYmxlSXRlbS5kYXRhO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgdHlwZSB9ID0gY29sdW1uO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlOiBzdHJpbmcgPSAocmF3Q29sdW1uRmlsdGVyW2ZpZWxkIGFzIHN0cmluZ10gfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWU6IHN0cmluZyA9IChpdGVtW2ZpZWxkXSB8fCAnJykudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAgIGlmICghY29sdW1uVmFsdWUgJiYgdHlwZSAhPT0gJ2RhdGV0aW1lJyAmJiB0eXBlICE9PSAnZGF0ZScgJiYgdHlwZSAhPT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uVmFsdWUuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2YWx1ZXMnIHx8IHR5cGUgPT09ICdsYXp5LXZhbHVlcycpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbiBhcyBTZFRhYmxlQ29sdW1uVmFsdWVzPFQ+IHwgU2RUYWJsZUNvbHVtbkxhenlWYWx1ZXM8VD47XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBbJ01VTFRJUExFJ10uaW5jbHVkZXMoY29sdW1uVHlwZS5vcHRpb24uc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXM6IHN0cmluZ1tdID1cclxuICAgICAgICAgICAgICAgIChpdGVtW2ZpZWxkXSBhcyBhbnkpLm1hcChpID0+IChpW2NvbHVtblR5cGUub3B0aW9uLnZhbHVlRmllbGRdID8/ICcnKS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSA/PyBbXTtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZXM6IHN0cmluZ1tdID0gcmF3Q29sdW1uRmlsdGVyW2ZpZWxkIGFzIHN0cmluZ10/Lm1hcCh2ID0+ICh2ID8/ICcnKS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWVzPy5sZW5ndGggJiYgZmlsdGVyVmFsdWVzLmV2ZXJ5KGZ2ID0+ICFjb2x1bW5WYWx1ZXMuaW5jbHVkZXMoZnYpKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uVmFsdWUgIT09IGZpbHRlclZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZWYWx1ZSA9ICtmaWx0ZXJWYWx1ZS5yZXBsYWNlKCc+PScsICcnKS5yZXBsYWNlKCc8PScsICcnKS5yZXBsYWNlKCc+JywgJycpLnJlcGxhY2UoJzwnLCAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNWYWx1ZSA9ICtjb2x1bW5WYWx1ZTtcclxuICAgICAgICAgICAgaWYgKGZWYWx1ZSB8fCBmVmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgICBpZiAoIWNWYWx1ZSAmJiBjVmFsdWUgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmluZGV4T2YoJz49JykgPiAtMSAmJiBjVmFsdWUgPCBmVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclZhbHVlLmluZGV4T2YoJzw9JykgPiAtMSAmJiBjVmFsdWUgPiBmVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclZhbHVlLmluZGV4T2YoJzwnKSA+IC0xICYmIGNWYWx1ZSA+PSBmVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclZhbHVlLmluZGV4T2YoJz4nKSA+IC0xICYmIGNWYWx1ZSA8PSBmVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNWYWx1ZSAhPT0gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUgPT09ICcxJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJzEnICYmIGNvbHVtblZhbHVlICE9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUgPT09ICcwJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJzAnICYmIGNvbHVtblZhbHVlICE9PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkYXRldGltZScgfHwgdHlwZSA9PT0gJ2RhdGUnIHx8IHR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICBjb25zdCBmcm9tID0gcmF3Q29sdW1uRmlsdGVyW2ZpZWxkXT8uZnJvbSA/PyByYXdDb2x1bW5GaWx0ZXJbZmllbGRdO1xyXG4gICAgICAgICAgICBjb25zdCB0byA9IHJhd0NvbHVtbkZpbHRlcltmaWVsZF0/LnRvID8/IHJhd0NvbHVtbkZpbHRlcltmaWVsZF07XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlID0gRGF0ZS5iZWdpbihmcm9tKTtcclxuICAgICAgICAgICAgY29uc3QgdG9EYXRlID0gRGF0ZS5lbmQodG8pO1xyXG4gICAgICAgICAgICBpZiAoZnJvbURhdGUgfHwgdG9EYXRlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFjb2x1bW5WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uVGltZSA9IG5ldyBEYXRlKGNvbHVtblZhbHVlKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgY29uc3QgZnJvbURhdGVUaW1lID0gZnJvbURhdGU/LmdldFRpbWUoKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRvRGF0ZVRpbWUgPSB0b0RhdGU/LmdldFRpbWUoKSB8fCBudWxsO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZnJvbURhdGVUaW1lICYmIGZyb21EYXRlVGltZSA+IGNvbHVtblRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRvRGF0ZVRpbWUgJiYgY29sdW1uVGltZSA+IHRvRGF0ZVRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuICAgIC8vIFNvcnRcclxuICAgIGlmIChvcmRlckJ5ICYmIG9yZGVyRGlyZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IG9yZGVyQnkpO1xyXG4gICAgICBpZiAoY29sdW1uKSB7XHJcbiAgICAgICAgY29uc3QgeyB0eXBlLCBmaWVsZCB9ID0gY29sdW1uO1xyXG4gICAgICAgIGl0ZW1zLnNvcnQoKHRhYmxlSXRlbUN1cnJlbnQsIHRhYmxlSXRlbU5leHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0YWJsZUl0ZW1DdXJyZW50LmRhdGE7XHJcbiAgICAgICAgICBjb25zdCBuZXh0ID0gdGFibGVJdGVtTmV4dC5kYXRhO1xyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZGF0YVtmaWVsZCBhcyBzdHJpbmddIHx8IDApIC0gKG5leHRbZmllbGQgYXMgc3RyaW5nXSB8fCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScgfHwgdHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCB0eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgY29uc3QgZDEgPSBuZXcgRGF0ZShkYXRhW2ZpZWxkIGFzIHN0cmluZ10gfHwgJycpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgY29uc3QgZDIgPSBuZXcgRGF0ZShkYXRhW2ZpZWxkIGFzIHN0cmluZ10gfHwgJycpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGQxIC0gZDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBzMSA9IChkYXRhW2ZpZWxkXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNvbnN0IHMyID0gKG5leHRbZmllbGRdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYgKHMxID4gczIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoczEgPCBzMikge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAob3JkZXJEaXJlY3Rpb24gPT09ICdkZXNjJykge1xyXG4gICAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXRlbXM6IGl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICByZXR1cm4gaW5kZXggPj0gcGFnZU51bWJlciAqIHBhZ2VTaXplICYmIGluZGV4IDwgKHBhZ2VOdW1iZXIgKyAxKSAqIHBhZ2VTaXplO1xyXG4gICAgICB9KSxcclxuICAgICAgdG90YWw6IGl0ZW1zLmxlbmd0aCxcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2dldEZpbHRlciA9ICgpOiBTZFRhYmxlRmlsdGVyUmVxdWVzdCA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbk9wZXJhdG9yLCBjb2x1bW5GaWx0ZXIsIGV4dGVybmFsRmlsdGVyLCBmaWx0ZXJEZWYgfSA9IHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUuZ2V0KCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb2x1bW5PcGVyYXRvcjogY29sdW1uT3BlcmF0b3IgfHwge30sXHJcbiAgICAgIHJhd0NvbHVtbkZpbHRlcjogY29sdW1uRmlsdGVyIHx8IHt9LFxyXG4gICAgICByYXdFeHRlcm5hbEZpbHRlcjogZXh0ZXJuYWxGaWx0ZXIgfHwge30sXHJcbiAgICAgIHJhd0ZpbHRlckRlZjogZmlsdGVyRGVmIHx8IHt9LFxyXG4gICAgICBvcmRlckJ5OiB0aGlzLiNzb3J0Py5hY3RpdmUgfHwgJycsXHJcbiAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLiNzb3J0Py5kaXJlY3Rpb24gfHwgJycsXHJcbiAgICAgIHBhZ2VOdW1iZXI6IHRoaXMuI3BhZ2luYXRvcj8ucGFnZUluZGV4IHx8IDAsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VTaXplIHx8IHRoaXMudGFibGVPcHRpb24/LnBhZ2luYXRlPy5wYWdlU2l6ZSB8fCA1MCxcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2xvYWQgPSBhc3luYyAoZmlsdGVyUmVxOiBTZFRhYmxlRmlsdGVyUmVxdWVzdCwgZm9yY2U6IGJvb2xlYW4gPSB0cnVlKSA9PiB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbi50eXBlID09PSAnc2VydmVyJykge1xyXG4gICAgICBjb25zdCB7IGl0ZW1zIH0gPSB0aGlzLnRhYmxlT3B0aW9uO1xyXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgaXRlbXMoZmlsdGVyUmVxKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBpdGVtczogW10gYXMgVFtdLFxyXG4gICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXRlbXM6IGF3YWl0IHRoaXMuI2Zvcm1hdChkYXRhPy5pdGVtcywgdGhpcy50YWJsZU9wdGlvbi5jb2x1bW5zKS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdG90YWw6IGRhdGE/LnRvdGFsIHx8IDAsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gdGhpcy50YWJsZU9wdGlvbjtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGl0ZW1zKCk7XHJcbiAgICAgIGxldCBkYXRhOiBUW10gPSBbXTtcclxuICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3VsdHMuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YSA9IHJlc3VsdHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKCdE4buvIGxp4buHdSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBt4bqjbmcnKTtcclxuICAgICAgICBkYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jbG9jYWxJdGVtcyA9IGF3YWl0IHRoaXMuI2Zvcm1hdChkYXRhLCB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB0aGlzLiNmaWx0ZXJMb2NhbCh0aGlzLiNsb2NhbEl0ZW1zLCBmaWx0ZXJSZXEpO1xyXG4gIH07XHJcblxyXG4gICNyZW5kZXIgPSBhc3luYyAoYXJnczogeyBpdGVtczogU2RUYWJsZUl0ZW08VD5bXTsgdG90YWw6IG51bWJlciB9KSA9PiB7XHJcbiAgICB0aGlzLnNkU2Nyb2xsPy5zY3JvbGxUb3AoKTtcclxuICAgIHRoaXMuaXRlbXMgPSBhcmdzPy5pdGVtcyB8fCBbXTtcclxuICAgIHRoaXMudG90YWwgPSBhcmdzPy50b3RhbCB8fCAwO1xyXG4gICAgYXdhaXQgdGhpcy50YWJsZU9wdGlvbj8ucmVsb2FkPy5vblJlbG9hZD8uKHRoaXMuaXRlbXMpO1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRoaXMuaXRlbXMuZXZlcnkoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCk7XHJcbiAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfTtcclxuXHJcbiAgcmVsb2FkID0gYXN5bmMgKGZvcmNlOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xyXG4gICAgdGhpcy50YWJsZUZpbHRlcj8udXBkYXRlRmlsdGVyPy4oKTtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLiNsb2FkKHRoaXMuI2dldEZpbHRlcigpLCBmb3JjZSk7XHJcbiAgICB0aGlzLiNyZW5kZXIoZGF0YSk7XHJcbiAgfTtcclxuXHJcbiAgI2V4cG9ydGVkSXRlbXMgPSBhc3luYyAocGFnZU51bWJlcjogbnVtYmVyID0gMCwgcGFnZVNpemU6IG51bWJlciA9IDEwMDAwKSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5leHBvcnQ/Lml0ZW1zKSB7XHJcbiAgICAgIC8vIGNvbnN0IGV4cG9ydGVkSXRlbXMgPSB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLiNmaWx0ZXJFeHBvcnRJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSk7XHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy4jZmlsdGVyRXhwb3J0SW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlPGFueVtdPihyZXN1bHQpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09ic2VydmFibGU8eyBpdGVtczogYW55W107IHRvdGFsOiBudW1iZXIgfT4ocmVzdWx0KSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b1Byb21pc2UoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVySW5mbyA9IHRoaXMuI2ZpbHRlckV4cG9ydEluZm8ocGFnZU51bWJlciwgcGFnZVNpemUpO1xyXG4gICAgICBpZiAodGhpcy50YWJsZU9wdGlvbi50eXBlID09PSAnc2VydmVyJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zKGZpbHRlckluZm8pO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGV4cG9ydGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy50YWJsZU9wdGlvbi5pdGVtcygpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydGVkSXRlbXMgPSBhd2FpdCByZXN1bHRzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0ZWRJdGVtcyA9IHJlc3VsdHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4cG9ydGVkSXRlbXMgPSB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4jZmlsdGVyTG9jYWwoZXhwb3J0ZWRJdGVtcywgZmlsdGVySW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjYWxsQ29sdW1ucyA9ICgpOiBTZFRhYmxlQ29sdW1uW10gPT4ge1xyXG4gICAgY29uc3QgY29sdW1uczogU2RUYWJsZUNvbHVtbltdID0gW107XHJcbiAgICB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpXHJcbiAgICAgIC5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uY2hpbGRyZW5cclxuICAgICAgICAgICAgPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH07XHJcblxyXG4gICNhbGxFeHBvcnRlZENvbHVtbnMgPSAoKTogU2RUYWJsZU9wdGlvbkV4cG9ydENvbHVtbltdID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uY29sdW1ucz8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkgfHwgW107XHJcbiAgfTtcclxuXHJcbiAgI29uRXhwb3J0ID0gYXN5bmMgKGlzQ1NWPzogYm9vbGVhbikgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGNvbHVtbnMgPSB0aGlzLiNnZXRFeHBvcnRDb2x1bW5zKCk7XHJcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5tYXhJdGVtc1BlclJlcXVlc3QgfHwgMTAwMDtcclxuICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLnRhYmxlT3B0aW9uPy5leHBvcnQ/LmJhdGNoIHx8IDE7XHJcbiAgICAgIGxldCB0b3RhbCA9IHRoaXMudG90YWw7XHJcbiAgICAgIGxldCBwYWdlTnVtYmVyID0gMDtcclxuICAgICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuaXNFeHBvcnRpbmcgPSB0cnVlO1xyXG4gICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuICAgICAgbGV0IHByb21pc2VzOiBQcm9taXNlPFxyXG4gICAgICAgIHwgYW55W11cclxuICAgICAgICB8IHtcclxuICAgICAgICAgICAgaXRlbXM6IGFueVtdO1xyXG4gICAgICAgICAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICA+W10gPSBbXTtcclxuICAgICAgY29uc3QgaGFuZGxlRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIHByb21pc2VzID0gW107XHJcbiAgICAgICAgZXhwb3J0SXRlbXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICBpZiAoJ2l0ZW1zJyBpbiByZXN1bHQpIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBbLi4uZXhwb3J0SXRlbXMsIC4uLnJlc3VsdC5pdGVtc107XHJcbiAgICAgICAgICAgIHRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBbLi4uZXhwb3J0SXRlbXMsIC4uLnJlc3VsdF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8ubWFwcGluZykge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMudGFibGVPcHRpb24uZXhwb3J0Lm1hcHBpbmcoZXhwb3J0SXRlbXMpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG90YWxQYWdlID0gdG90YWwgLyBwYWdlU2l6ZTtcclxuICAgICAgICBjb25zdCBwZXJjZW50ID0gTWF0aC5yb3VuZCgoKHBhZ2VOdW1iZXIgLSAxKSAqIDEwMC4wKSAvIHRvdGFsUGFnZSk7XHJcbiAgICAgICAgdGhpcy5leHBvcnRUaXRsZSA9IGBFeHBvcnRpbmcuLi4ke3BlcmNlbnR9JWA7XHJcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuI2FsbENvbHVtbnMoKTtcclxuICAgICAgICBjb25zdCBhbGxFeHBvcnRlZENvbHVtbnMgPSB0aGlzLiNhbGxFeHBvcnRlZENvbHVtbnMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXhwb3J0SXRlbXMpIHtcclxuICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhc3luYyAoZXhwb3J0Q29sdW1uOiBTZEV4cG9ydENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICBvYmpbZXhwb3J0Q29sdW1uLmZpZWxkXSA9IGl0ZW1bZXhwb3J0Q29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gYWxsQ29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gZXhwb3J0Q29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgZXhwb3J0ZWRDb2x1bW4gPSBhbGxFeHBvcnRlZENvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IGV4cG9ydENvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChleHBvcnRlZENvbHVtbj8udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgb2JqW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSA9IGV4cG9ydGVkQ29sdW1uLnRyYW5zZm9ybShpdGVtW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgICAgICAgIGNvbHVtbj8uY2hpbGRyZW4uZm9yRWFjaChjaGlsZENvbHVtbiA9PiBoYW5kbGUoY2hpbGRDb2x1bW4pKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjb2x1bW5zLnNvbWUoZSA9PiBlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gY29sdW1uLnRyYW5zZm9ybShpdGVtW2NvbHVtbi5maWVsZF0sIGl0ZW0sIHtcclxuICAgICAgICAgICAgICAgIGlzRXhwb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0cmFuc2Zvcm07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gb2JqW2NvbHVtbi5maWVsZF0gPz8gJyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBjZWxsIGzDoCBzdHJpbmcgaG/hurdjIG51bWJlciB0aMOsIGfDoW4gYuG6sW5nIGNow61uaCBuw7NcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGJvb2wgdGjDrCBnw6FuIGLhurFuZyBnacOhIHRy4buLIHRydWVWYWx1ZSB2w6AgZmFsc2VWYWx1ZSAobuG6v3UgY8OzKSwgbeG6t2MgxJHhu4tuaCBsw6AgVFJVRS9GQUxTRVxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLm9wdGlvbj8uZGlzcGxheU9uVHJ1ZSB8fCAnVHJ1ZSc7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmpbY29sdW1uLmZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIG9ialtjb2x1bW4uZmllbGRdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5vcHRpb24/LmRpc3BsYXlPbkZhbHNlIHx8ICdGYWxzZSc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gRGF0ZS50b0Zvcm1hdChkYXRlLCAnZGQvTU0veXl5eSBISDptbScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgdGltZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdISDptbScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJyAmJiB0eXBlb2YgY29sdW1uLm9wdGlvbi5tYXBWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sdW1uLm9wdGlvbi5tYXBWYWx1ZSh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxzID0gKEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdKS5maWx0ZXIoZSA9PiAhIWU/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB2YWxzXHJcbiAgICAgICAgICAgICAgICAgIC5tYXAodmFsID0+IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2NvbHVtbi5maWVsZF0/Llt2YWxdPy5bY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdIHx8IHZhbClcclxuICAgICAgICAgICAgICAgICAgPy5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxzID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKS5maWx0ZXIoZSA9PiAhIWU/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB2YWxzXHJcbiAgICAgICAgICAgICAgICAgIC5tYXAodmFsID0+IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2NvbHVtbi5maWVsZF0/Llt2YWxdPy5bY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdIHx8IHZhbClcclxuICAgICAgICAgICAgICAgICAgPy5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIC8vIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZvckVhY2goaGFuZGxlKTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZXhwb3J0Q29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgICAgICAgYXdhaXQgaGFuZGxlKGV4cG9ydENvbHVtbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpdGVtcy5wdXNoKG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICB3aGlsZSAocGFnZU51bWJlciAqIHBhZ2VTaXplIDwgdG90YWwpIHtcclxuICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuI2V4cG9ydGVkSXRlbXMocGFnZU51bWJlciwgcGFnZVNpemUpKTtcclxuICAgICAgICBwYWdlTnVtYmVyKys7XHJcbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA8IGJhdGNoKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgaGFuZGxlRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgYXdhaXQgaGFuZGxlRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc0NTVikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRDU1Yoe1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIGl0ZW1zLFxyXG4gICAgICAgICAgZmlsZU5hbWU6IHRoaXMudGFibGVPcHRpb24/LmV4cG9ydD8uZmlsZU5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNoZWV0czoge1xyXG4gICAgICAgIG5hbWU6IHN0cmluZztcclxuICAgICAgICBpdGVtczogYW55W107XHJcbiAgICAgICAgZmllbGRzOiBzdHJpbmdbXTtcclxuICAgICAgfVtdID0gW107XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudGFibGVPcHRpb24/LmV4cG9ydD8uc2hlZXRzKSkge1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy50YWJsZU9wdGlvbi5leHBvcnQuc2hlZXRzKSB7XHJcbiAgICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBzaGVldC5pdGVtcyAmJiBzaGVldC5maWVsZHMpIHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2hlZXQuaXRlbXMpKSB7XHJcbiAgICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBzaGVldC5pdGVtcyxcclxuICAgICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICBpdGVtczogYXdhaXQgc2hlZXQuaXRlbXMoKSxcclxuICAgICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnQoe1xyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMudGFibGVPcHRpb24/LmV4cG9ydD8uZmlsZU5hbWUsXHJcbiAgICAgICAgc2hlZXRzLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0V4cG9ydGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmV4cG9ydFRpdGxlID0gYEV4cG9ydGA7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjZ2V0RXhwb3J0Q29sdW1ucyA9ICgpID0+IHtcclxuICAgIGxldCBncmlkQ29sdW1uczogU2RFeHBvcnRDb2x1bW5bXSA9IFtdO1xyXG4gICAgdGhpcy50YWJsZU9wdGlvbi5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKVxyXG4gICAgICAuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgICAgY29sdW1uLmNoaWxkcmVuXHJcbiAgICAgICAgICAgID8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZClcclxuICAgICAgICAgICAgLmZvckVhY2goY2hpbGRDb2x1bW4gPT4ge1xyXG4gICAgICAgICAgICAgIGdyaWRDb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JpZENvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IFsuLi5ncmlkQ29sdW1uc107XHJcbiAgICAgIGNvbnN0IHsgZmlyc3RDb2x1bW5zLCBzZWNvbmRDb2x1bW5zIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICAgIGNvbnN0IGRpc3BsYXlDb2x1bW5zOiBTZFRhYmxlQ29sdW1uW10gPSBbLi4uZmlyc3RDb2x1bW5zLCAuLi5zZWNvbmRDb2x1bW5zXS5yZWR1Y2UoKGZpcnN0LCBuZXh0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy50YWJsZU9wdGlvbi5jb2x1bW5zLmZpbmQoZSA9PiBlLmZpZWxkID09PSBuZXh0LmZpZWxkKTtcclxuICAgICAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICAgICAgcmV0dXJuIGZpcnN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgIT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICAgIHJldHVybiBbLi4uZmlyc3QsIGNvbHVtbl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY29sdW1uLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBbLi4uZmlyc3QsIC4uLmNoaWxkcmVuXTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICBncmlkQ29sdW1ucyA9IGRpc3BsYXlDb2x1bW5zXHJcbiAgICAgICAgLm1hcChlID0+ICh7XHJcbiAgICAgICAgICAuLi5lLFxyXG4gICAgICAgICAgZGF0YTogY29sdW1ucy5maW5kKGUxID0+IGUxLmZpZWxkID09PSBlLmZpZWxkKSxcclxuICAgICAgICB9KSlcclxuICAgICAgICAuZmlsdGVyKGUgPT4gISFlLmRhdGEpXHJcbiAgICAgICAgLm1hcChlID0+IGUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gWy4uLmdyaWRDb2x1bW5zLCAuLi4odGhpcy50YWJsZU9wdGlvbi5leHBvcnQ/LmNvbHVtbnM/LmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpIHx8IFtdKV07XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0RXhjZWwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLiNvbkV4cG9ydCgpO1xyXG4gIH07XHJcblxyXG4gIGV4cG9ydENTViA9ICgpID0+IHtcclxuICAgIHRoaXMuI29uRXhwb3J0KHRydWUpO1xyXG4gIH07XHJcblxyXG4gIG9uRmlsdGVyQ2hhbmdlID0gKCkgPT4ge1xyXG4gICAgdGhpcy50YWJsZUZpbHRlcj8udXBkYXRlRmlsdGVyPy4oKTtcclxuICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUuc2V0KHtcclxuICAgICAgY29sdW1uT3BlcmF0b3I6IHRoaXMuY29sdW1uT3BlcmF0b3IgfHwge30sXHJcbiAgICAgIGNvbHVtbkZpbHRlcjogdGhpcy5jb2x1bW5GaWx0ZXIsXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBvbkV4cGFuZCA9IGFzeW5jIChyb3dEYXRhOiBTZFRhYmxlSXRlbTxUPikgPT4ge1xyXG4gICAgaWYgKHRoaXMudGFibGVPcHRpb24uZXhwYW5kPy5hbHdheXMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCkge1xyXG4gICAgICByb3dEYXRhLm1ldGEuZXhwYW5kLmlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMudGFibGVPcHRpb24/LmV4cGFuZD8ub25FeHBhbmQ/Lihyb3dEYXRhLmRhdGEpO1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlT3B0aW9uLmV4cGFuZD8ubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0ubWV0YS5leHBhbmQuaXNFeHBhbmRpbmcgPSBpdGVtLm1ldGEuZXhwYW5kLmlzRXhwYW5kZWQgPSBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRpbmcgPSB0cnVlO1xyXG4gICAgICBkYXRhXHJcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuZGF0YSA9IHJlcztcclxuICAgICAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmluYWxseSgoKSA9PiAocm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZyA9IGZhbHNlKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb3dEYXRhLm1ldGEuZXhwYW5kLmRhdGEgPSBkYXRhO1xyXG4gICAgICByb3dEYXRhLm1ldGEuZXhwYW5kLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIG9uU2VsZWN0ID0gKHJvd0RhdGE6IFNkVGFibGVJdGVtPFQ+KSA9PiB7XHJcbiAgICBpZiAocm93RGF0YS5tZXRhLmdyb3VwPy5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5ncm91cC5pdGVtcy5mb3JFYWNoKGUgPT4gKGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkID0gcm93RGF0YS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpKTtcclxuICAgICAgdGhpcy50YWJsZU9wdGlvbi5zZWxlY3Rvcj8ub25TZWxlY3Q/LihcclxuICAgICAgICByb3dEYXRhLmRhdGEsXHJcbiAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCkubWFwKGUgPT4gZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmlzU2VsZWN0QWxsID0gdGhpcy5pdGVtcy5ldmVyeShlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKTtcclxuICAgICAgdGhpcy4jdXBkYXRlU2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudGFibGVPcHRpb24uc2VsZWN0b3I/LnNpbmdsZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZSAhPT0gcm93RGF0YSkuZm9yRWFjaChlID0+IChlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCA9IGZhbHNlKSk7XHJcbiAgICAgICAgdGhpcy4jdXBkYXRlU2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRhYmxlT3B0aW9uLnNlbGVjdG9yPy5vblNlbGVjdD8uKFxyXG4gICAgICAgIHJvd0RhdGEuZGF0YSxcclxuICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKS5tYXAoZSA9PiBlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0aGlzLml0ZW1zLmV2ZXJ5KGUgPT4gZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgb25TZWxlY3RBbGwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1zPy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICBpZiAoZS5tZXRhLnNlbGVjdG9yLnNlbGVjdGFibGUgJiYgKCF0aGlzLnRhYmxlT3B0aW9uPy5zZWxlY3Rvcj8uYWN0aW9ucz8ubGVuZ3RoIHx8IGUubWV0YS5zZWxlY3Rvci5hY3Rpb25zPy5sZW5ndGgpKSB7XHJcbiAgICAgICAgZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQgPSB0aGlzLmlzU2VsZWN0QWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMudGFibGVPcHRpb24uc2VsZWN0b3I/Lm9uU2VsZWN0QWxsPy4odGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCkubWFwKGUgPT4gZS5kYXRhKSk7XHJcbiAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfTtcclxuXHJcbiAgb25DbGVhclNlbGVjdGlvbiA9IChpdGVtcz86IFNkVGFibGVJdGVtPFQ+W10pID0+IHtcclxuICAgIGl0ZW1zID0gaXRlbXMgfHwgdGhpcy5pdGVtcztcclxuICAgIHRoaXMuaXNTZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIGl0ZW1zPy5mb3JFYWNoKGUgPT4gKGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkID0gZmFsc2UpKTtcclxuICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICB9O1xyXG5cclxuICAjdXBkYXRlU2VsZWN0ZWRJdGVtcyA9ICgpID0+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfTtcclxuXHJcbiAgY2xlYXJGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZpbHRlclJlZ2lzdGVyLnZhbHVlLnJlbW92ZSgpO1xyXG4gIH07XHJcblxyXG4gIHNldEZpbHRlciA9IChhcmdzOiB7IGNvbHVtbkZpbHRlcj86IFJlY29yZDxzdHJpbmcsIGFueT47IGV4dGVybmFsRmlsdGVyPzogUmVjb3JkPHN0cmluZywgYW55PjsgZmlsdGVyRGVmPzogUmVjb3JkPHN0cmluZywgYW55PiB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gYXJncyB8fCB7fTtcclxuICAgIGlmIChjb2x1bW5GaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIgPSBjb2x1bW5GaWx0ZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbHRlclJlZ2lzdGVyLnZhbHVlLnNldCh7XHJcbiAgICAgIGNvbHVtbkZpbHRlcixcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIGZpbHRlckRlZixcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGdldCBkYXRhSXRlbXMoKTogVFtdIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zLm1hcChpdGVtID0+IGl0ZW0uZGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRJdGVtcygpOiBUW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWJsZUl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uZGF0YSk7XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzID0gKCkgPT4gdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAjbG9hZFZhbHVlcyA9IGFzeW5jIChjb2x1bW5zOiBTZFRhYmxlQ29sdW1uW10pID0+IHtcclxuICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHtcclxuICAgICAga2V5OiBzdHJpbmc7XHJcbiAgICAgIHZhbHVlRmllbGQ6IHN0cmluZztcclxuICAgICAgZGlzcGxheUZpZWxkOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueVtdO1xyXG4gICAgfT5bXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnICYmICF0aGlzLmNhY2hlVmFsdWVzW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbHVtbi5vcHRpb24uaXRlbXMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHByb21pc2VzLnB1c2goXHJcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25cclxuICAgICAgICAgICAgICAuaXRlbXMoKVxyXG4gICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4gKHtcclxuICAgICAgICAgICAgICAgIGtleTogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW10sXHJcbiAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICBrZXk6IGNvbHVtbi5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBbXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2FjaGVWYWx1ZXNbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5vcHRpb24uaXRlbXMubWFwKGUgPT4gKHtcclxuICAgICAgICAgICAgW2NvbHVtbi5vcHRpb24udmFsdWVGaWVsZF06IGU/Lltjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGRdLFxyXG4gICAgICAgICAgICBbY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdOiBlPy5bY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgdGhpcy4jY2FjaGVPYmpWYWx1ZXNbY29sdW1uLmZpZWxkXSA9IEFycmF5LnRvT2JqZWN0KHRoaXMuY2FjaGVWYWx1ZXNbY29sdW1uLmZpZWxkXSwgY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwcm9taXNlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcclxuICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xyXG4gICAgICAgIHRoaXMuY2FjaGVWYWx1ZXNbcmVzdWx0LmtleV0gPSByZXN1bHQuZGF0YS5tYXAoZSA9PiAoe1xyXG4gICAgICAgICAgW3Jlc3VsdC52YWx1ZUZpZWxkXTogZT8uW3Jlc3VsdC52YWx1ZUZpZWxkXSxcclxuICAgICAgICAgIFtyZXN1bHQuZGlzcGxheUZpZWxkXTogZT8uW3Jlc3VsdC5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLiNjYWNoZU9ialZhbHVlc1tyZXN1bHQua2V5XSA9IEFycmF5LnRvT2JqZWN0KHRoaXMuY2FjaGVWYWx1ZXNbcmVzdWx0LmtleV0sIHJlc3VsdC52YWx1ZUZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNmb3JtYXQgPSBhc3luYyA8VCA9IGFueT4ocmF3SXRlbXM6IFRbXSwgY29sdW1uczogU2RUYWJsZUNvbHVtbltdKSA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHJhd0l0ZW1zLm1hcChNYXBUb1NkVGFibGVJdGVtKTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgLy8gQ2xpY2thYmxlXHJcbiAgICAgIGNvbnN0IHsgZmllbGQsIGNlbGxTdHlsZSwgY2xpY2ssIHRvb2x0aXAsIGh0bWxUZW1wbGF0ZSwgdHJhbnNmb3JtIH0gPSBjb2x1bW47XHJcbiAgICAgIGlmICghdHJhbnNmb3JtICYmICFodG1sVGVtcGxhdGUgJiYgY29sdW1uLnR5cGUgPT09ICdsYXp5LXZhbHVlcycgJiYgdHlwZW9mIGNvbHVtbi5vcHRpb24udmlld3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICBvcHRpb246IHsgdmlld3MsIG1hcFZhbHVlIH0sXHJcbiAgICAgICAgfSA9IGNvbHVtbjtcclxuICAgICAgICB0aGlzLiNjYWNoZU9ialZhbHVlc1tmaWVsZF0gPSB0aGlzLiNjYWNoZU9ialZhbHVlc1tmaWVsZF0gfHwge307XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gaXRlbXNcclxuICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWFwVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoaXRlbS5kYXRhPy5bZmllbGRdLCBpdGVtLmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGE/LltmaWVsZF07XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmZpbHRlcih2YWwgPT4gISF2YWw/LnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAucmVkdWNlPHN0cmluZ1tdPigoY3VycmVudCwgbmV4dCkgPT4gWy4uLmN1cnJlbnQsIC4uLihBcnJheS5pc0FycmF5KG5leHQpID8gbmV4dCA6IFtuZXh0XSldLCBbXSlcclxuICAgICAgICAgIC5maWx0ZXIodmFsID0+ICFPYmplY3Qua2V5cyh0aGlzLiNjYWNoZU9ialZhbHVlc1tmaWVsZF0pLmluY2x1ZGVzKHZhbCkpXHJcbiAgICAgICAgICAudW5pb24oKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGxhenlJdGVtczogYW55W10gPSAoXHJcbiAgICAgICAgICAgIGF3YWl0IHZpZXdzKHZhbHVlcykuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gdmFsdWVzLmluY2x1ZGVzKGl0ZW0/Lltjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGRdKSlcclxuICAgICAgICAgICAgLm1hcChlID0+ICh7XHJcbiAgICAgICAgICAgICAgW2NvbHVtbi5vcHRpb24udmFsdWVGaWVsZF06IGU/Lltjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGRdLFxyXG4gICAgICAgICAgICAgIFtjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF06IGU/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0sXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy4jY2FjaGVPYmpWYWx1ZXNbZmllbGRdLCBBcnJheS50b09iamVjdChsYXp5SXRlbXMsIGNvbHVtbi5vcHRpb24udmFsdWVGaWVsZCkgfHwge30pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgICBjb25zdCByb3dEYXRhID0gaXRlbS5kYXRhO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93RGF0YT8uW2ZpZWxkXTtcclxuICAgICAgICBpdGVtLm1ldGEuZGlzcGxheVtmaWVsZF0gPSB7XHJcbiAgICAgICAgICBiYWRnZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgY2VsbFN0eWxlOiBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgPyB7ICd0ZXh0LWFsaWduJzogJ3JpZ2h0IWltcG9ydGFudCcgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGRhdGE6IHZhbHVlLFxyXG4gICAgICAgICAgaXNIdG1sOiBmYWxzZSxcclxuICAgICAgICAgIHRvb2x0aXA6IHR5cGVvZiB0b29sdGlwID09PSAnZnVuY3Rpb24nID8gdG9vbHRpcCh2YWx1ZSwgcm93RGF0YSkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBjbGljazogdHlwZW9mIGNsaWNrID09PSAnZnVuY3Rpb24nID8gKCkgPT4gY2xpY2sodmFsdWUsIHJvd0RhdGEpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZGlzcGxheSA9IGl0ZW0ubWV0YS5kaXNwbGF5W2ZpZWxkXTtcclxuICAgICAgICAvLyBEaXNwbGF5XHJcbiAgICAgICAgaWYgKHR5cGVvZiBodG1sVGVtcGxhdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIGRpc3BsYXkuaXNIdG1sID0gdHJ1ZTtcclxuICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IGh0bWxUZW1wbGF0ZSh2YWx1ZSwgcm93RGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgcm93RGF0YSk7XHJcbiAgICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IGF3YWl0IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnIHx8IGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUudG9Gb3JtYXQodmFsdWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgICAgIGxldCB0aW1lID0gRGF0ZS50b0Zvcm1hdCh2YWx1ZSwgJ0hIOm1tOnNzJyk7XHJcbiAgICAgICAgICAgIGlmICh0aW1lPy5lbmRzV2l0aCgnMDAnKSkge1xyXG4gICAgICAgICAgICAgIHRpbWUgPSBEYXRlLnRvRm9ybWF0KHZhbHVlLCAnSEg6bW0nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheS5pc0h0bWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gYDxzcGFuIGNsYXNzPVwiZC1ibG9jayBUMTRSIHRleHQtYmxhY2s0MDBcIj4ke3RpbWV9PC9zcGFuPjxzcGFuIGNsYXNzPVwiZC1ibG9jayBUMTRSXCI+JHtkYXRlfTwvc3Bhbj5gO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBkYXRlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IHRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycgfHwgY29sdW1uLnR5cGUgPT09ICdsYXp5LXZhbHVlcycpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnbGF6eS12YWx1ZXMnICYmIHR5cGVvZiBjb2x1bW4ub3B0aW9uLm1hcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sdW1uLm9wdGlvbi5tYXBWYWx1ZSh2YWx1ZSwgcm93RGF0YSk7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFscyA9IChBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXSkuZmlsdGVyKGUgPT4gISFlPy50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSB2YWxzLm1hcCh2YWwgPT4gdGhpcy4jY2FjaGVPYmpWYWx1ZXNbZmllbGRdPy5bdmFsXT8uW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXSB8fCB2YWwpPy5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbHMgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pLmZpbHRlcihlID0+ICEhZT8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gdmFscy5tYXAodmFsID0+IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXT8uW3ZhbF0/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0gfHwgdmFsKT8uam9pbignLCAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNOdW1iZXIodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IE51bWJlci50b1ZOQ3VycmVuY3kodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBvcHRpb24gfSA9IGNvbHVtbjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gdmFsdWUgPT09IHRydWUgPyBvcHRpb24/LmRpc3BsYXlPblRydWUgfHwgJ1RydWUnIDogb3B0aW9uPy5kaXNwbGF5T25GYWxzZSB8fCAnRmFsc2UnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEJhZGdlXHJcbiAgICAgICAgICBpZiAoKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgfHwgY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSAmJiBjb2x1bW4uYmFkZ2UpIHtcclxuICAgICAgICAgICAgZGlzcGxheS5iYWRnZSA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiAhY29sdW1uPy5iYWRnZVR5cGUgPyAnaWNvbicgOiBjb2x1bW4uYmFkZ2VUeXBlLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBjb2x1bW4uYmFkZ2UodmFsdWUsIHJvd0RhdGEpLFxyXG4gICAgICAgICAgICAgIGljb246IGNvbHVtbi5iYWRnZUljb24/Lih2YWx1ZSwgcm93RGF0YSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgZGlzcGxheS5iYWRnZSA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnY2lyY2xlJyxcclxuICAgICAgICAgICAgICBjb2xvcjogISF2YWx1ZSA/ICdzdWNjZXNzJyA6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgIGljb246IG51bGwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfTtcclxuXHJcbiAgb25PcGVyYXRvckNoYW5nZSA9IChjb2x1bW46IFNkVGFibGVDb2x1bW4sIG9wZXJhdG9yOiBTZEZpbHRlck9wZXJhdG9yKSA9PiB7XHJcbiAgICB0aGlzLnRhYmxlT3B0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yQ2hhbmdlPy4oY29sdW1uLCBvcGVyYXRvcik7XHJcbiAgfTtcclxuXHJcbiAgdHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBTZFRhYmxlSXRlbSkgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW0ubWV0YS5pZDtcclxuICB9O1xyXG59XHJcbiJdfQ==