@po-ui/ng-components 16.5.0 → 16.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -66,6 +66,7 @@ function PoListBoxComponent_ng_container_4_li_4_Template(rf, ctx) { if (rf & 1)
66
66
  } if (rf & 2) {
67
67
  const item_r19 = ctx.$implicit;
68
68
  const ctx_r15 = i0.ɵɵnextContext(2);
69
+ i0.ɵɵclassProp("po-listbox-item", ctx_r15.visible);
69
70
  i0.ɵɵproperty("cdkOption", item_r19[ctx_r15.fieldLabel])("cdkOptionDisabled", ctx_r15.returnBooleanValue(item_r19, "disabled") || ctx_r15.returnBooleanValue(item_r19, "visible") === false || item_r19.options);
70
71
  i0.ɵɵattribute("aria-selected", ctx_r15.isSelectedItem(item_r19) || item_r19.selected);
71
72
  i0.ɵɵadvance(1);
@@ -77,7 +78,7 @@ function PoListBoxComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
77
78
  i0.ɵɵelementContainerStart(0);
78
79
  i0.ɵɵelementStart(1, "ul", 10, 11);
79
80
  i0.ɵɵtemplate(3, PoListBoxComponent_ng_container_4_li_3_Template, 2, 4, "li", 12);
80
- i0.ɵɵtemplate(4, PoListBoxComponent_ng_container_4_li_4_Template, 3, 5, "li", 13);
81
+ i0.ɵɵtemplate(4, PoListBoxComponent_ng_container_4_li_4_Template, 3, 7, "li", 13);
81
82
  i0.ɵɵelementEnd();
82
83
  i0.ɵɵelementContainerEnd();
83
84
  } if (rf & 2) {
@@ -292,7 +293,7 @@ export class PoListBoxComponent extends PoListBoxBaseComponent {
292
293
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listbox = _t.first);
293
294
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listboxItemList = _t.first);
294
295
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchElement = _t.first);
295
- } }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c4, decls: 12, vars: 8, consts: [[1, "po-listbox", 3, "hidden"], ["listbox", ""], [3, "p-literals", "p-field-value", "p-placeholder", "p-change", 4, "ngIf"], [4, "ngIf", "ngIfElse"], ["class", "po-text-center", 4, "ngIf"], ["scrollLoadingTemplate", ""], ["defaultLoadingTemplate", ""], ["noDataTemplate", ""], [3, "p-literals", "p-field-value", "p-placeholder", "p-change"], ["searchElement", ""], ["cdkListbox", "", 1, "po-listbox-list", 3, "cdkListboxMultiple"], ["listboxItemList", ""], ["cdkOption", "selectAll", 3, "click", "keydown", 4, "ngIf"], ["class", "po-listbox-item", 3, "cdkOption", "cdkOptionDisabled", "click", "keydown", 4, "ngFor", "ngForOf"], ["cdkOption", "selectAll", 3, "click", "keydown"], ["p-type", "check", "p-value", "selectAll", 3, "p-selected", "p-label", "p-checkbox-value"], [1, "po-listbox-item", 3, "cdkOption", "cdkOptionDisabled", "click", "keydown"], ["class", "po-combo-item-title", 4, "ngIf"], [3, "p-disabled", "p-visible", "p-checkbox-value", "p-label", "p-value", "p-selected", "p-separator", "p-danger", "p-icon", "p-type", "p-item", "p-field-value", "p-field-label", "p-template", "p-template-context", "p-search-value", "p-filter-mode", "p-filtering", "p-should-mark-letter", "p-compare-cache", "p-combo-service", "p-selectcheckbox-item", "p-selectcombo-item", "p-select-item", 4, "ngIf"], [1, "po-combo-item-title"], [3, "p-disabled", "p-visible", "p-checkbox-value", "p-label", "p-value", "p-selected", "p-separator", "p-danger", "p-icon", "p-type", "p-item", "p-field-value", "p-field-label", "p-template", "p-template-context", "p-search-value", "p-filter-mode", "p-filtering", "p-should-mark-letter", "p-compare-cache", "p-combo-service", "p-selectcheckbox-item", "p-selectcombo-item", "p-select-item"], [1, "po-text-center"], [4, "ngIf", "ngIfThen", "ngIfElse"], [1, "po-listbox-container-loading-scroll"], [1, "po-listbox-container-loading-default"], ["class", "po-listbox-container-no-data po-text-center", 4, "ngIf"], [1, "po-listbox-container-no-data", "po-text-center"]], template: function PoListBoxComponent_Template(rf, ctx) { if (rf & 1) {
296
+ } }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c4, decls: 12, vars: 8, consts: [[1, "po-listbox", 3, "hidden"], ["listbox", ""], [3, "p-literals", "p-field-value", "p-placeholder", "p-change", 4, "ngIf"], [4, "ngIf", "ngIfElse"], ["class", "po-text-center", 4, "ngIf"], ["scrollLoadingTemplate", ""], ["defaultLoadingTemplate", ""], ["noDataTemplate", ""], [3, "p-literals", "p-field-value", "p-placeholder", "p-change"], ["searchElement", ""], ["cdkListbox", "", 1, "po-listbox-list", 3, "cdkListboxMultiple"], ["listboxItemList", ""], ["cdkOption", "selectAll", 3, "click", "keydown", 4, "ngIf"], [3, "po-listbox-item", "cdkOption", "cdkOptionDisabled", "click", "keydown", 4, "ngFor", "ngForOf"], ["cdkOption", "selectAll", 3, "click", "keydown"], ["p-type", "check", "p-value", "selectAll", 3, "p-selected", "p-label", "p-checkbox-value"], [3, "cdkOption", "cdkOptionDisabled", "click", "keydown"], ["class", "po-combo-item-title", 4, "ngIf"], [3, "p-disabled", "p-visible", "p-checkbox-value", "p-label", "p-value", "p-selected", "p-separator", "p-danger", "p-icon", "p-type", "p-item", "p-field-value", "p-field-label", "p-template", "p-template-context", "p-search-value", "p-filter-mode", "p-filtering", "p-should-mark-letter", "p-compare-cache", "p-combo-service", "p-selectcheckbox-item", "p-selectcombo-item", "p-select-item", 4, "ngIf"], [1, "po-combo-item-title"], [3, "p-disabled", "p-visible", "p-checkbox-value", "p-label", "p-value", "p-selected", "p-separator", "p-danger", "p-icon", "p-type", "p-item", "p-field-value", "p-field-label", "p-template", "p-template-context", "p-search-value", "p-filter-mode", "p-filtering", "p-should-mark-letter", "p-compare-cache", "p-combo-service", "p-selectcheckbox-item", "p-selectcombo-item", "p-select-item"], [1, "po-text-center"], [4, "ngIf", "ngIfThen", "ngIfElse"], [1, "po-listbox-container-loading-scroll"], [1, "po-listbox-container-loading-default"], ["class", "po-listbox-container-no-data po-text-center", 4, "ngIf"], [1, "po-listbox-container-no-data", "po-text-center"]], template: function PoListBoxComponent_Template(rf, ctx) { if (rf & 1) {
296
297
  i0.ɵɵprojectionDef(_c3);
297
298
  i0.ɵɵelementStart(0, "div", 0, 1);
298
299
  i0.ɵɵprojection(2);
@@ -318,7 +319,7 @@ export class PoListBoxComponent extends PoListBoxBaseComponent {
318
319
  }
319
320
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoListBoxComponent, [{
320
321
  type: Component,
321
- args: [{ selector: 'po-listbox', template: "<div\n #listbox\n class=\"po-listbox\"\n [class.po-listbox-check]=\"type === 'check' || type === 'option'\"\n [attr.data-type]=\"type\"\n [hidden]=\"visible\"\n>\n <ng-content select=\"[p-popup-header-template]\"></ng-content>\n\n <po-search-list\n #searchElement\n *ngIf=\"!hideSearch && type === 'check'\"\n (p-change)=\"callChangeSearch($event)\"\n [p-literals]=\"literalSearch\"\n [p-field-value]=\"fieldValueSearch\"\n [p-placeholder]=\"placeholderSearch\"\n ></po-search-list>\n\n <ng-container *ngIf=\"checkTemplate(); else noDataTemplate\">\n <ul #listboxItemList cdkListbox [cdkListboxMultiple]=\"type === 'check'\" class=\"po-listbox-list\">\n <li\n cdkOption=\"selectAll\"\n *ngIf=\"type === 'check' && items.length && !searchElement?.inputValue && !hideSelectAll\"\n [attr.aria-checked]=\"checkboxAllValue === null ? 'mixed' : checkboxAllValue\"\n (click)=\"changeAll.emit()\"\n (keydown)=\"changeAllEmit($event)\"\n >\n <po-item-list\n [p-selected]=\"checkboxAllValue\"\n p-type=\"check\"\n [p-label]=\"literals.selectAll\"\n p-value=\"selectAll\"\n [p-checkbox-value]=\"checkboxAllValue\"\n >\n </po-item-list>\n </li>\n <li\n class=\"po-listbox-item\"\n *ngFor=\"let item of items\"\n [cdkOption]=\"item[fieldLabel]\"\n [cdkOptionDisabled]=\"\n returnBooleanValue(item, 'disabled') || returnBooleanValue(item, 'visible') === false || item.options\n \"\n [attr.aria-selected]=\"isSelectedItem(item) || item.selected\"\n (click)=\"onSelectItem(item)\"\n (keydown)=\"onKeyDown(item, $event)\"\n >\n <label *ngIf=\"item.options\" class=\"po-combo-item-title\">\n {{ item.label }}\n </label>\n <po-item-list\n *ngIf=\"returnBooleanValue(item, 'visible') !== false && !item.options\"\n [p-disabled]=\"returnBooleanValue(item, 'disabled')\"\n [p-visible]=\"returnBooleanValue(item, 'visible')\"\n [p-checkbox-value]=\"isSelectedItem(item)\"\n [attr.data-item-list]=\"item | json\"\n [p-label]=\"item[fieldLabel]\"\n [p-value]=\"item[fieldValue]\"\n [p-selected]=\"isSelectedItem(item) || item.selected\"\n [p-separator]=\"item.separator\"\n [p-danger]=\"item.danger || item.type === 'danger'\"\n [p-icon]=\"item.icon\"\n [p-type]=\"type\"\n [p-item]=\"item\"\n [p-field-value]=\"fieldValue\"\n [p-field-label]=\"fieldLabel\"\n [p-template]=\"template\"\n [p-template-context]=\"item\"\n (p-selectcheckbox-item)=\"checkboxClicked($event)\"\n (p-selectcombo-item)=\"optionClicked($event)\"\n (p-select-item)=\"onSelectCheckBoxItem(item)\"\n [p-search-value]=\"searchValue\"\n [p-filter-mode]=\"filterMode\"\n [p-filtering]=\"isFiltering\"\n [p-should-mark-letter]=\"shouldMarkLetters\"\n [p-compare-cache]=\"compareCache\"\n [p-combo-service]=\"comboService\"\n ></po-item-list>\n </li>\n </ul>\n </ng-container>\n\n <div *ngIf=\"isServerSearching && type !== 'action'\" class=\"po-text-center\">\n <ng-container *ngIf=\"infiniteLoading; then scrollLoadingTemplate; else defaultLoadingTemplate\"></ng-container>\n </div>\n\n <ng-template #scrollLoadingTemplate>\n <po-loading-overlay class=\"po-listbox-container-loading-scroll\"></po-loading-overlay>\n </ng-template>\n\n <ng-template #defaultLoadingTemplate>\n <po-loading class=\"po-listbox-container-loading-default\"></po-loading>\n </ng-template>\n\n <ng-template #noDataTemplate>\n <div\n *ngIf=\"!items.length && !isServerSearching && type !== 'action'\"\n class=\"po-listbox-container-no-data po-text-center\"\n >\n <span> {{ literals.noItems }}</span>\n </div>\n </ng-template>\n</div>\n" }]
322
+ args: [{ selector: 'po-listbox', template: "<div\n #listbox\n class=\"po-listbox\"\n [class.po-listbox-check]=\"type === 'check' || type === 'option'\"\n [attr.data-type]=\"type\"\n [hidden]=\"visible\"\n>\n <ng-content select=\"[p-popup-header-template]\"></ng-content>\n\n <po-search-list\n #searchElement\n *ngIf=\"!hideSearch && type === 'check'\"\n (p-change)=\"callChangeSearch($event)\"\n [p-literals]=\"literalSearch\"\n [p-field-value]=\"fieldValueSearch\"\n [p-placeholder]=\"placeholderSearch\"\n ></po-search-list>\n\n <ng-container *ngIf=\"checkTemplate(); else noDataTemplate\">\n <ul #listboxItemList cdkListbox [cdkListboxMultiple]=\"type === 'check'\" class=\"po-listbox-list\">\n <li\n cdkOption=\"selectAll\"\n *ngIf=\"type === 'check' && items.length && !searchElement?.inputValue && !hideSelectAll\"\n [attr.aria-checked]=\"checkboxAllValue === null ? 'mixed' : checkboxAllValue\"\n (click)=\"changeAll.emit()\"\n (keydown)=\"changeAllEmit($event)\"\n >\n <po-item-list\n [p-selected]=\"checkboxAllValue\"\n p-type=\"check\"\n [p-label]=\"literals.selectAll\"\n p-value=\"selectAll\"\n [p-checkbox-value]=\"checkboxAllValue\"\n >\n </po-item-list>\n </li>\n <li\n [class.po-listbox-item]=\"visible\"\n *ngFor=\"let item of items\"\n [cdkOption]=\"item[fieldLabel]\"\n [cdkOptionDisabled]=\"\n returnBooleanValue(item, 'disabled') || returnBooleanValue(item, 'visible') === false || item.options\n \"\n [attr.aria-selected]=\"isSelectedItem(item) || item.selected\"\n (click)=\"onSelectItem(item)\"\n (keydown)=\"onKeyDown(item, $event)\"\n >\n <label *ngIf=\"item.options\" class=\"po-combo-item-title\">\n {{ item.label }}\n </label>\n <po-item-list\n *ngIf=\"returnBooleanValue(item, 'visible') !== false && !item.options\"\n [p-disabled]=\"returnBooleanValue(item, 'disabled')\"\n [p-visible]=\"returnBooleanValue(item, 'visible')\"\n [p-checkbox-value]=\"isSelectedItem(item)\"\n [attr.data-item-list]=\"item | json\"\n [p-label]=\"item[fieldLabel]\"\n [p-value]=\"item[fieldValue]\"\n [p-selected]=\"isSelectedItem(item) || item.selected\"\n [p-separator]=\"item.separator\"\n [p-danger]=\"item.danger || item.type === 'danger'\"\n [p-icon]=\"item.icon\"\n [p-type]=\"type\"\n [p-item]=\"item\"\n [p-field-value]=\"fieldValue\"\n [p-field-label]=\"fieldLabel\"\n [p-template]=\"template\"\n [p-template-context]=\"item\"\n (p-selectcheckbox-item)=\"checkboxClicked($event)\"\n (p-selectcombo-item)=\"optionClicked($event)\"\n (p-select-item)=\"onSelectCheckBoxItem(item)\"\n [p-search-value]=\"searchValue\"\n [p-filter-mode]=\"filterMode\"\n [p-filtering]=\"isFiltering\"\n [p-should-mark-letter]=\"shouldMarkLetters\"\n [p-compare-cache]=\"compareCache\"\n [p-combo-service]=\"comboService\"\n ></po-item-list>\n </li>\n </ul>\n </ng-container>\n\n <div *ngIf=\"isServerSearching && type !== 'action'\" class=\"po-text-center\">\n <ng-container *ngIf=\"infiniteLoading; then scrollLoadingTemplate; else defaultLoadingTemplate\"></ng-container>\n </div>\n\n <ng-template #scrollLoadingTemplate>\n <po-loading-overlay class=\"po-listbox-container-loading-scroll\"></po-loading-overlay>\n </ng-template>\n\n <ng-template #defaultLoadingTemplate>\n <po-loading class=\"po-listbox-container-loading-default\"></po-loading>\n </ng-template>\n\n <ng-template #noDataTemplate>\n <div\n *ngIf=\"!items.length && !isServerSearching && type !== 'action'\"\n class=\"po-listbox-container-no-data po-text-center\"\n >\n <span> {{ literals.noItems }}</span>\n </div>\n </ng-template>\n</div>\n" }]
322
323
  }], function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.PoLanguageService }, { type: i2.Router }, { type: i0.ChangeDetectorRef }]; }, { listbox: [{
323
324
  type: ViewChild,
324
325
  args: ['listbox', { static: true }]
@@ -329,4 +330,4 @@ export class PoListBoxComponent extends PoListBoxBaseComponent {
329
330
  type: ViewChild,
330
331
  args: ['searchElement']
331
332
  }] }); })();
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbGlzdGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tbGlzdGJveC9wby1saXN0Ym94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1saXN0Ym94L3BvLWxpc3Rib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFNVCxTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQTRCLFlBQVksRUFBRSxTQUFTLEVBQVMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ2I5RSw0Q0FPQztJQUpDLGdNQUFZLGVBQUEsZ0NBQXdCLENBQUEsSUFBQztJQUl0QyxpQkFBaUI7OztJQUhoQixpREFBNEIsMENBQUEsMkNBQUE7Ozs7SUFPMUIsOEJBTUM7SUFGQyw0S0FBUyxlQUFBLHdCQUFnQixDQUFBLElBQUMseUtBQ2YsZUFBQSw2QkFBcUIsQ0FBQSxJQUROO0lBRzFCLG1DQU9lO0lBQ2pCLGlCQUFLOzs7SUFaSCxzR0FBNEU7SUFLMUUsZUFBK0I7SUFBL0IscURBQStCLHVDQUFBLDhDQUFBOzs7SUFtQmpDLGlDQUF3RDtJQUN0RCxZQUNGO0lBQUEsaUJBQVE7OztJQUROLGVBQ0Y7SUFERSwrQ0FDRjs7OztJQUNBLHdDQTJCQztJQVRDLDJPQUF5QixlQUFBLCtCQUF1QixDQUFBLElBQUMsd05BQzNCLGVBQUEsNkJBQXFCLENBQUEsSUFETSx1UEFFaEMsZUFBQSxzQ0FBMEIsQ0FBQSxJQUZN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bkIsYUFBYTtrQkFBeEMsU0FBUzttQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IFBvTGlzdEJveEJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLWxpc3Rib3gtYmFzZS5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBQb0l0ZW1MaXN0T3B0aW9uR3JvdXAgfSBmcm9tICcuL3BvLWl0ZW0tbGlzdC9pbnRlcmZhY2VzL3BvLWl0ZW0tbGlzdC1vcHRpb24tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvSXRlbUxpc3RPcHRpb24gfSBmcm9tICcuL3BvLWl0ZW0tbGlzdC9pbnRlcmZhY2VzL3BvLWl0ZW0tbGlzdC1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc0V4dGVybmFsTGluaywgaXNUeXBlb2YsIG9wZW5FeHRlcm5hbExpbmsgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvU2VhcmNoTGlzdENvbXBvbmVudCB9IGZyb20gJy4vcG8tc2VhcmNoLWxpc3QvcG8tc2VhcmNoLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWxpc3Rib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tbGlzdGJveC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUG9MaXN0Qm94Q29tcG9uZW50IGV4dGVuZHMgUG9MaXN0Qm94QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbGlzdGJveCcsIHsgc3RhdGljOiB0cnVlIH0pIGxpc3Rib3g6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xpc3Rib3hJdGVtTGlzdCcsIHsgc3RhdGljOiBmYWxzZSB9KSBsaXN0Ym94SXRlbUxpc3Q6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBQb1NlYXJjaExpc3RDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBzY3JvbGxFdmVudCQ6IE9ic2VydmFibGU8YW55PjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25TY3JvbGxFdmVudDogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIobGFuZ3VhZ2VTZXJ2aWNlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldExpc3RCb3hNYXhIZWlnaHQoKTtcbiAgICB0aGlzLmxpc3Rib3hJdGVtTGlzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlcz86IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcz8uaXRlbXMpIHtcbiAgICAgIHRoaXMuc2V0TGlzdEJveE1heEhlaWdodCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5jaGVja0luZmluaXRlU2Nyb2xsKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQgJiYgdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudC51bnN1YnNjcmliZSkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VsZWN0SXRlbShpdGVtTGlzdEFjdGlvbjogUG9JdGVtTGlzdE9wdGlvbiB8IFBvSXRlbUxpc3RPcHRpb25Hcm91cCB8IGFueSkge1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPVxuICAgICAgaXRlbUxpc3RBY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiZcbiAgICAgIGl0ZW1MaXN0QWN0aW9uLmRpc2FibGVkICE9PSBudWxsICYmXG4gICAgICBpdGVtTGlzdEFjdGlvbi5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5yZXR1cm5Cb29sZWFuVmFsdWUoaXRlbUxpc3RBY3Rpb24sICdkaXNhYmxlZCcpXG4gICAgICAgIDogZmFsc2U7XG4gICAgY29uc3QgaXNWaXNpYmxlID1cbiAgICAgIGl0ZW1MaXN0QWN0aW9uLmhhc093blByb3BlcnR5KCd2aXNpYmxlJykgJiZcbiAgICAgIGl0ZW1MaXN0QWN0aW9uLnZpc2libGUgIT09IG51bGwgJiZcbiAgICAgIGl0ZW1MaXN0QWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMucmV0dXJuQm9vbGVhblZhbHVlKGl0ZW1MaXN0QWN0aW9uLCAndmlzaWJsZScpXG4gICAgICAgIDogdHJ1ZTtcblxuICAgIGlmIChpdGVtTGlzdEFjdGlvbiAmJiBpdGVtTGlzdEFjdGlvbi5hY3Rpb24gJiYgIWlzRGlzYWJsZWQgJiYgaXNWaXNpYmxlKSB7XG4gICAgICBpdGVtTGlzdEFjdGlvbi5hY3Rpb24odGhpcy5wYXJhbSB8fCBpdGVtTGlzdEFjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1MaXN0QWN0aW9uICYmIGl0ZW1MaXN0QWN0aW9uLnVybCAmJiAhaXNEaXNhYmxlZCAmJiBpc1Zpc2libGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wZW5VcmwoaXRlbUxpc3RBY3Rpb24udXJsKTtcbiAgICB9XG4gIH1cblxuICBvbktleURvd24oaXRlbUxpc3RBY3Rpb246IFBvSXRlbUxpc3RPcHRpb24gfCBQb0l0ZW1MaXN0T3B0aW9uR3JvdXAgfCBhbnksIGV2ZW50PzogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoKGV2ZW50ICYmIGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHx8IGV2ZW50LmNvZGUgPT09ICdTcGFjZScpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NoZWNrJzpcbiAgICAgICAgICB0aGlzLm9uU2VsZWN0Q2hlY2tCb3hJdGVtKGl0ZW1MaXN0QWN0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgICB0aGlzLm9wdGlvbkNsaWNrZWQoaXRlbUxpc3RBY3Rpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhY3Rpb24nOlxuICAgICAgICAgIHRoaXMub25TZWxlY3RJdGVtKGl0ZW1MaXN0QWN0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50ICYmIGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnKSB8fCBldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBjaGVja2JveENsaWNrZWQoeyBvcHRpb24sIHNlbGVjdGVkIH0pIHtcbiAgICBpZiAodGhpcy50eXBlID09PSAnY2hlY2snKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHsgc2VsZWN0ZWQsIG9wdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBvcHRpb25DbGlja2VkKG9wdGlvbjogYW55KSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ29wdGlvbicpIHtcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgaXRlbVt0aGlzLmZpZWxkVmFsdWVdID09PSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSA/IChpdGVtWydzZWxlY3RlZCddID0gdHJ1ZSkgOiAoaXRlbVsnc2VsZWN0ZWQnXSA9IGZhbHNlKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0Q29tYm8uZW1pdCh7IC4uLm9wdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBvblNlbGVjdENoZWNrQm94SXRlbShvcHRpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9ICF0aGlzLmlzU2VsZWN0ZWRJdGVtKG9wdGlvbik7XG4gICAgdGhpcy5jaGVja2JveENsaWNrZWQoeyBvcHRpb24sIHNlbGVjdGVkIH0pO1xuICB9XG5cbiAgaXNTZWxlY3RlZEl0ZW0ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNvbWUoc2VsZWN0ZWRJdGVtID0+IHNlbGVjdGVkSXRlbVt0aGlzLmZpZWxkVmFsdWVdID09PSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSk7XG4gIH1cblxuICBjaGFuZ2VBbGxFbWl0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKChldmVudCAmJiBldmVudC5jb2RlID09PSAnRW50ZXInKSB8fCBldmVudC5jb2RlID09PSAnU3BhY2UnKSB7XG4gICAgICB0aGlzLmNoYW5nZUFsbC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgY2FsbENoYW5nZVNlYXJjaChldmVudCkge1xuICAgIHRoaXMuY2hhbmdlU2VhcmNoLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc2hvd01vcmVJbmZpbml0ZVNjcm9sbCh7IHRhcmdldCB9KTogdm9pZCB7XG4gICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSB0YXJnZXQub2Zmc2V0SGVpZ2h0ICsgdGFyZ2V0LnNjcm9sbFRvcDtcbiAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPj0gdGFyZ2V0LnNjcm9sbEhlaWdodCAqICh0aGlzLmluZmluaXRlU2Nyb2xsRGlzdGFuY2UgLyAxMTApKSB7XG4gICAgICB0aGlzLlVwZGF0ZUluZmluaXRlU2Nyb2xsLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxMaXN0ZW5lcihjb21wb25lbnRMaXN0bmVyOiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGZyb21FdmVudChjb21wb25lbnRMaXN0bmVyLCAnc2Nyb2xsJykucGlwZShkZWJvdW5jZVRpbWUoMTAwKSk7XG4gIH1cblxuICBzZXRGb2N1cygpIHtcbiAgICB0aGlzLmxpc3Rib3hJdGVtTGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNJbmZpbml0ZVNjcm9sbCgpKSB7XG4gICAgICB0aGlzLmluY2x1ZGVJbmZpbml0ZVNjcm9sbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzSW5maW5pdGVTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIHRoaXMuaW5maW5pdGVTY3JvbGwgJiYgdGhpcy5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgY2hlY2tUZW1wbGF0ZSgpIHtcbiAgICBpZiAodGhpcy5jYWNoZSB8fCB0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc1NlcnZlclNlYXJjaGluZyAmJiB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluY2x1ZGVJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbEV2ZW50JCA9IHRoaXMuc2Nyb2xsTGlzdGVuZXIodGhpcy5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudCA9IHRoaXMuc2Nyb2xsRXZlbnQkLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICB0aGlzLnNob3dNb3JlSW5maW5pdGVTY3JvbGwoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJldHVybkJvb2xlYW5WYWx1ZShpdGVtTGlzdEFjdGlvbjogYW55LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGlzVHlwZW9mKGl0ZW1MaXN0QWN0aW9uW3Byb3BlcnR5XSwgJ2Z1bmN0aW9uJylcbiAgICAgID8gaXRlbUxpc3RBY3Rpb25bcHJvcGVydHldKHRoaXMucGFyYW0gfHwgaXRlbUxpc3RBY3Rpb24pXG4gICAgICA6IGl0ZW1MaXN0QWN0aW9uW3Byb3BlcnR5XTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TGlzdEJveE1heEhlaWdodCgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtc0xlbmd0aCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgIGlmIChpdGVtc0xlbmd0aCA+IDYpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjaGVjaycgJiYgIXRoaXMuaGlkZVNlYXJjaCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMubGlzdGJveC5uYXRpdmVFbGVtZW50LCAnbWF4SGVpZ2h0JywgYCR7NDQgKiA2IC0gNDQgLyAzICsgNjB9cHhgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5saXN0Ym94Lm5hdGl2ZUVsZW1lbnQsICdtYXhIZWlnaHQnLCBgJHs0NCAqIDYgLSA0NCAvIDN9cHhgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5VcmwodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAoaXNFeHRlcm5hbExpbmsodXJsKSkge1xuICAgICAgcmV0dXJuIG9wZW5FeHRlcm5hbExpbmsodXJsKTtcbiAgICB9XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAjbGlzdGJveFxuICBjbGFzcz1cInBvLWxpc3Rib3hcIlxuICBbY2xhc3MucG8tbGlzdGJveC1jaGVja109XCJ0eXBlID09PSAnY2hlY2snIHx8IHR5cGUgPT09ICdvcHRpb24nXCJcbiAgW2F0dHIuZGF0YS10eXBlXT1cInR5cGVcIlxuICBbaGlkZGVuXT1cInZpc2libGVcIlxuPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbcC1wb3B1cC1oZWFkZXItdGVtcGxhdGVdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxwby1zZWFyY2gtbGlzdFxuICAgICNzZWFyY2hFbGVtZW50XG4gICAgKm5nSWY9XCIhaGlkZVNlYXJjaCAmJiB0eXBlID09PSAnY2hlY2snXCJcbiAgICAocC1jaGFuZ2UpPVwiY2FsbENoYW5nZVNlYXJjaCgkZXZlbnQpXCJcbiAgICBbcC1saXRlcmFsc109XCJsaXRlcmFsU2VhcmNoXCJcbiAgICBbcC1maWVsZC12YWx1ZV09XCJmaWVsZFZhbHVlU2VhcmNoXCJcbiAgICBbcC1wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclNlYXJjaFwiXG4gID48L3BvLXNlYXJjaC1saXN0PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja1RlbXBsYXRlKCk7IGVsc2Ugbm9EYXRhVGVtcGxhdGVcIj5cbiAgICA8dWwgI2xpc3Rib3hJdGVtTGlzdCBjZGtMaXN0Ym94IFtjZGtMaXN0Ym94TXVsdGlwbGVdPVwidHlwZSA9PT0gJ2NoZWNrJ1wiIGNsYXNzPVwicG8tbGlzdGJveC1saXN0XCI+XG4gICAgICA8bGlcbiAgICAgICAgY2RrT3B0aW9uPVwic2VsZWN0QWxsXCJcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnY2hlY2snICYmIGl0ZW1zLmxlbmd0aCAmJiAhc2VhcmNoRWxlbWVudD8uaW5wdXRWYWx1ZSAmJiAhaGlkZVNlbGVjdEFsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJjaGVja2JveEFsbFZhbHVlID09PSBudWxsID8gJ21peGVkJyA6IGNoZWNrYm94QWxsVmFsdWVcIlxuICAgICAgICAoY2xpY2spPVwiY2hhbmdlQWxsLmVtaXQoKVwiXG4gICAgICAgIChrZXlkb3duKT1cImNoYW5nZUFsbEVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxwby1pdGVtLWxpc3RcbiAgICAgICAgICBbcC1zZWxlY3RlZF09XCJjaGVja2JveEFsbFZhbHVlXCJcbiAgICAgICAgICBwLXR5cGU9XCJjaGVja1wiXG4gICAgICAgICAgW3AtbGFiZWxdPVwibGl0ZXJhbHMuc2VsZWN0QWxsXCJcbiAgICAgICAgICBwLXZhbHVlPVwic2VsZWN0QWxsXCJcbiAgICAgICAgICBbcC1jaGVja2JveC12YWx1ZV09XCJjaGVja2JveEFsbFZhbHVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L3BvLWl0ZW0tbGlzdD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGlcbiAgICAgICAgY2xhc3M9XCJwby1saXN0Ym94LWl0ZW1cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiXG4gICAgICAgIFtjZGtPcHRpb25dPVwiaXRlbVtmaWVsZExhYmVsXVwiXG4gICAgICAgIFtjZGtPcHRpb25EaXNhYmxlZF09XCJcbiAgICAgICAgICByZXR1cm5Cb29sZWFuVmFsdWUoaXRlbSwgJ2Rpc2FibGVkJykgfHwgcmV0dXJuQm9vbGVhblZhbHVlKGl0ZW0sICd2aXNpYmxlJykgPT09IGZhbHNlIHx8IGl0ZW0ub3B0aW9uc1xuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWRJdGVtKGl0ZW0pIHx8IGl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAoY2xpY2spPVwib25TZWxlY3RJdGVtKGl0ZW0pXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKGl0ZW0sICRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgKm5nSWY9XCJpdGVtLm9wdGlvbnNcIiBjbGFzcz1cInBvLWNvbWJvLWl0ZW0tdGl0bGVcIj5cbiAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxwby1pdGVtLWxpc3RcbiAgICAgICAgICAqbmdJZj1cInJldHVybkJvb2xlYW5WYWx1ZShpdGVtLCAndmlzaWJsZScpICE9PSBmYWxzZSAmJiAhaXRlbS5vcHRpb25zXCJcbiAgICAgICAgICBbcC1kaXNhYmxlZF09XCJyZXR1cm5Cb29sZWFuVmFsdWUoaXRlbSwgJ2Rpc2FibGVkJylcIlxuICAgICAgICAgIFtwLXZpc2libGVdPVwicmV0dXJuQm9vbGVhblZhbHVlKGl0ZW0sICd2aXNpYmxlJylcIlxuICAgICAgICAgIFtwLWNoZWNrYm94LXZhbHVlXT1cImlzU2VsZWN0ZWRJdGVtKGl0ZW0pXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWl0ZW0tbGlzdF09XCJpdGVtIHwganNvblwiXG4gICAgICAgICAgW3AtbGFiZWxdPVwiaXRlbVtmaWVsZExhYmVsXVwiXG4gICAgICAgICAgW3AtdmFsdWVdPVwiaXRlbVtmaWVsZFZhbHVlXVwiXG4gICAgICAgICAgW3Atc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZEl0ZW0oaXRlbSkgfHwgaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgW3Atc2VwYXJhdG9yXT1cIml0ZW0uc2VwYXJhdG9yXCJcbiAgICAgICAgICBbcC1kYW5nZXJdPVwiaXRlbS5kYW5nZXIgfHwgaXRlbS50eXBlID09PSAnZGFuZ2VyJ1wiXG4gICAgICAgICAgW3AtaWNvbl09XCJpdGVtLmljb25cIlxuICAgICAgICAgIFtwLXR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgW3AtaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICBbcC1maWVsZC12YWx1ZV09XCJmaWVsZFZhbHVlXCJcbiAgICAgICAgICBbcC1maWVsZC1sYWJlbF09XCJmaWVsZExhYmVsXCJcbiAgICAgICAgICBbcC10ZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiXG4gICAgICAgICAgW3AtdGVtcGxhdGUtY29udGV4dF09XCJpdGVtXCJcbiAgICAgICAgICAocC1zZWxlY3RjaGVja2JveC1pdGVtKT1cImNoZWNrYm94Q2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAocC1zZWxlY3Rjb21iby1pdGVtKT1cIm9wdGlvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKHAtc2VsZWN0LWl0ZW0pPVwib25TZWxlY3RDaGVja0JveEl0ZW0oaXRlbSlcIlxuICAgICAgICAgIFtwLXNlYXJjaC12YWx1ZV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgW3AtZmlsdGVyLW1vZGVdPVwiZmlsdGVyTW9kZVwiXG4gICAgICAgICAgW3AtZmlsdGVyaW5nXT1cImlzRmlsdGVyaW5nXCJcbiAgICAgICAgICBbcC1zaG91bGQtbWFyay1sZXR0ZXJdPVwic2hvdWxkTWFya0xldHRlcnNcIlxuICAgICAgICAgIFtwLWNvbXBhcmUtY2FjaGVdPVwiY29tcGFyZUNhY2hlXCJcbiAgICAgICAgICBbcC1jb21iby1zZXJ2aWNlXT1cImNvbWJvU2VydmljZVwiXG4gICAgICAgID48L3BvLWl0ZW0tbGlzdD5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiAqbmdJZj1cImlzU2VydmVyU2VhcmNoaW5nICYmIHR5cGUgIT09ICdhY3Rpb24nXCIgY2xhc3M9XCJwby10ZXh0LWNlbnRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmZpbml0ZUxvYWRpbmc7IHRoZW4gc2Nyb2xsTG9hZGluZ1RlbXBsYXRlOyBlbHNlIGRlZmF1bHRMb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlICNzY3JvbGxMb2FkaW5nVGVtcGxhdGU+XG4gICAgPHBvLWxvYWRpbmctb3ZlcmxheSBjbGFzcz1cInBvLWxpc3Rib3gtY29udGFpbmVyLWxvYWRpbmctc2Nyb2xsXCI+PC9wby1sb2FkaW5nLW92ZXJsYXk+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9hZGluZ1RlbXBsYXRlPlxuICAgIDxwby1sb2FkaW5nIGNsYXNzPVwicG8tbGlzdGJveC1jb250YWluZXItbG9hZGluZy1kZWZhdWx0XCI+PC9wby1sb2FkaW5nPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCIhaXRlbXMubGVuZ3RoICYmICFpc1NlcnZlclNlYXJjaGluZyAmJiB0eXBlICE9PSAnYWN0aW9uJ1wiXG4gICAgICBjbGFzcz1cInBvLWxpc3Rib3gtY29udGFpbmVyLW5vLWRhdGEgcG8tdGV4dC1jZW50ZXJcIlxuICAgID5cbiAgICAgIDxzcGFuPiB7eyBsaXRlcmFscy5ub0l0ZW1zIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbGlzdGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tbGlzdGJveC9wby1saXN0Ym94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1saXN0Ym94L3BvLWxpc3Rib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFNVCxTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQTRCLFlBQVksRUFBRSxTQUFTLEVBQVMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ2I5RSw0Q0FPQztJQUpDLGdNQUFZLGVBQUEsZ0NBQXdCLENBQUEsSUFBQztJQUl0QyxpQkFBaUI7OztJQUhoQixpREFBNEIsMENBQUEsMkNBQUE7Ozs7SUFPMUIsOEJBTUM7SUFGQyw0S0FBUyxlQUFBLHdCQUFnQixDQUFBLElBQUMseUtBQ2YsZUFBQSw2QkFBcUIsQ0FBQSxJQUROO0lBRzFCLG1DQU9lO0lBQ2pCLGlCQUFLOzs7SUFaSCxzR0FBNEU7SUFLMUUsZUFBK0I7SUFBL0IscURBQStCLHVDQUFBLDhDQUFBOzs7SUFtQmpDLGlDQUF3RDtJQUN0RCxZQUNGO0lBQUEsaUJBQVE7OztJQUROLGVBQ0Y7SUFERSwrQ0FDRjs7OztJQUNBLHdDQTJCQztJQVRDLDJPQUF5QixlQUFBLCtCQUF1QixDQUFBLElBQUMsd05BQzNCLGVBQUEsNkJBQXFCLENBQUEsSUFETSx1UEFFaEMsZUFBQSxzQ0FBMEIsQ0FBQSxJQUZN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S0FBSyxFQUFFO1lBQ25CLGFBQWE7a0JBQXhDLFNBQVM7bUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBQb0xpc3RCb3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9wby1saXN0Ym94LWJhc2UuY29tcG9uZW50JztcblxuaW1wb3J0IHsgUG9JdGVtTGlzdE9wdGlvbkdyb3VwIH0gZnJvbSAnLi9wby1pdGVtLWxpc3QvaW50ZXJmYWNlcy9wby1pdGVtLWxpc3Qtb3B0aW9uLWdyb3VwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0l0ZW1MaXN0T3B0aW9uIH0gZnJvbSAnLi9wby1pdGVtLWxpc3QvaW50ZXJmYWNlcy9wby1pdGVtLWxpc3Qtb3B0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFeHRlcm5hbExpbmssIGlzVHlwZW9mLCBvcGVuRXh0ZXJuYWxMaW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb1NlYXJjaExpc3RDb21wb25lbnQgfSBmcm9tICcuL3BvLXNlYXJjaC1saXN0L3BvLXNlYXJjaC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1saXN0Ym94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWxpc3Rib3guY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBvTGlzdEJveENvbXBvbmVudCBleHRlbmRzIFBvTGlzdEJveEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2xpc3Rib3gnLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXN0Ym94OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsaXN0Ym94SXRlbUxpc3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgbGlzdGJveEl0ZW1MaXN0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWFyY2hFbGVtZW50Jykgc2VhcmNoRWxlbWVudDogUG9TZWFyY2hMaXN0Q29tcG9uZW50O1xuXG4gIHByaXZhdGUgc2Nyb2xsRXZlbnQkOiBPYnNlcnZhYmxlPGFueT47XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQ6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGxhbmd1YWdlU2VydmljZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRMaXN0Qm94TWF4SGVpZ2h0KCk7XG4gICAgdGhpcy5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXM/Lml0ZW1zKSB7XG4gICAgICB0aGlzLnNldExpc3RCb3hNYXhIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXNpYmxlICYmIHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIHRoaXMuY2hlY2tJbmZpbml0ZVNjcm9sbCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50ICYmIHRoaXMuc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQudW5zdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvblNlbGVjdEl0ZW0oaXRlbUxpc3RBY3Rpb246IFBvSXRlbUxpc3RPcHRpb24gfCBQb0l0ZW1MaXN0T3B0aW9uR3JvdXAgfCBhbnkpIHtcbiAgICBjb25zdCBpc0Rpc2FibGVkID1cbiAgICAgIGl0ZW1MaXN0QWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmXG4gICAgICBpdGVtTGlzdEFjdGlvbi5kaXNhYmxlZCAhPT0gbnVsbCAmJlxuICAgICAgaXRlbUxpc3RBY3Rpb24uZGlzYWJsZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMucmV0dXJuQm9vbGVhblZhbHVlKGl0ZW1MaXN0QWN0aW9uLCAnZGlzYWJsZWQnKVxuICAgICAgICA6IGZhbHNlO1xuICAgIGNvbnN0IGlzVmlzaWJsZSA9XG4gICAgICBpdGVtTGlzdEFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZScpICYmXG4gICAgICBpdGVtTGlzdEFjdGlvbi52aXNpYmxlICE9PSBudWxsICYmXG4gICAgICBpdGVtTGlzdEFjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLnJldHVybkJvb2xlYW5WYWx1ZShpdGVtTGlzdEFjdGlvbiwgJ3Zpc2libGUnKVxuICAgICAgICA6IHRydWU7XG5cbiAgICBpZiAoaXRlbUxpc3RBY3Rpb24gJiYgaXRlbUxpc3RBY3Rpb24uYWN0aW9uICYmICFpc0Rpc2FibGVkICYmIGlzVmlzaWJsZSkge1xuICAgICAgaXRlbUxpc3RBY3Rpb24uYWN0aW9uKHRoaXMucGFyYW0gfHwgaXRlbUxpc3RBY3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChpdGVtTGlzdEFjdGlvbiAmJiBpdGVtTGlzdEFjdGlvbi51cmwgJiYgIWlzRGlzYWJsZWQgJiYgaXNWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcGVuVXJsKGl0ZW1MaXN0QWN0aW9uLnVybCk7XG4gICAgfVxuICB9XG5cbiAgb25LZXlEb3duKGl0ZW1MaXN0QWN0aW9uOiBQb0l0ZW1MaXN0T3B0aW9uIHwgUG9JdGVtTGlzdE9wdGlvbkdyb3VwIHwgYW55LCBldmVudD86IEtleWJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKChldmVudCAmJiBldmVudC5jb2RlID09PSAnRW50ZXInKSB8fCBldmVudC5jb2RlID09PSAnU3BhY2UnKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICBjYXNlICdjaGVjayc6XG4gICAgICAgICAgdGhpcy5vblNlbGVjdENoZWNrQm94SXRlbShpdGVtTGlzdEFjdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgICAgdGhpcy5vcHRpb25DbGlja2VkKGl0ZW1MaXN0QWN0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgICB0aGlzLm9uU2VsZWN0SXRlbShpdGVtTGlzdEFjdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKChldmVudCAmJiBldmVudC5jb2RlID09PSAnRXNjYXBlJykgfHwgZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tib3hDbGlja2VkKHsgb3B0aW9uLCBzZWxlY3RlZCB9KSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NoZWNrJykge1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh7IHNlbGVjdGVkLCBvcHRpb24gfSk7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9uQ2xpY2tlZChvcHRpb246IGFueSkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdvcHRpb24nKSB7XG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW1bdGhpcy5maWVsZFZhbHVlXSA9PT0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0gPyAoaXRlbVsnc2VsZWN0ZWQnXSA9IHRydWUpIDogKGl0ZW1bJ3NlbGVjdGVkJ10gPSBmYWxzZSlcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdENvbWJvLmVtaXQoeyAuLi5vcHRpb24gfSk7XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3RDaGVja0JveEl0ZW0ob3B0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSAhdGhpcy5pc1NlbGVjdGVkSXRlbShvcHRpb24pO1xuICAgIHRoaXMuY2hlY2tib3hDbGlja2VkKHsgb3B0aW9uLCBzZWxlY3RlZCB9KTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWRJdGVtKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5zb21lKHNlbGVjdGVkSXRlbSA9PiBzZWxlY3RlZEl0ZW1bdGhpcy5maWVsZFZhbHVlXSA9PT0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0pO1xuICB9XG5cbiAgY2hhbmdlQWxsRW1pdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICgoZXZlbnQgJiYgZXZlbnQuY29kZSA9PT0gJ0VudGVyJykgfHwgZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgdGhpcy5jaGFuZ2VBbGwuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxDaGFuZ2VTZWFyY2goZXZlbnQpIHtcbiAgICB0aGlzLmNoYW5nZVNlYXJjaC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHNob3dNb3JlSW5maW5pdGVTY3JvbGwoeyB0YXJnZXQgfSk6IHZvaWQge1xuICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gdGFyZ2V0Lm9mZnNldEhlaWdodCArIHRhcmdldC5zY3JvbGxUb3A7XG4gICAgaWYgKHNjcm9sbFBvc2l0aW9uID49IHRhcmdldC5zY3JvbGxIZWlnaHQgKiAodGhpcy5pbmZpbml0ZVNjcm9sbERpc3RhbmNlIC8gMTEwKSkge1xuICAgICAgdGhpcy5VcGRhdGVJbmZpbml0ZVNjcm9sbC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsTGlzdGVuZXIoY29tcG9uZW50TGlzdG5lcjogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBmcm9tRXZlbnQoY29tcG9uZW50TGlzdG5lciwgJ3Njcm9sbCcpLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpO1xuICB9XG5cbiAgc2V0Rm9jdXMoKSB7XG4gICAgdGhpcy5saXN0Ym94SXRlbUxpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrSW5maW5pdGVTY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzSW5maW5pdGVTY3JvbGwoKSkge1xuICAgICAgdGhpcy5pbmNsdWRlSW5maW5pdGVTY3JvbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc0luZmluaXRlU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsICYmIHRoaXMubGlzdGJveEl0ZW1MaXN0Py5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgfVxuXG4gIGNoZWNrVGVtcGxhdGUoKSB7XG4gICAgaWYgKHRoaXMuY2FjaGUgfHwgdGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgJiYgdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbmNsdWRlSW5maW5pdGVTY3JvbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxFdmVudCQgPSB0aGlzLnNjcm9sbExpc3RlbmVyKHRoaXMubGlzdGJveEl0ZW1MaXN0Py5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQgPSB0aGlzLnNjcm9sbEV2ZW50JC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgdGhpcy5zaG93TW9yZUluZmluaXRlU2Nyb2xsKGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXR1cm5Cb29sZWFuVmFsdWUoaXRlbUxpc3RBY3Rpb246IGFueSwgcHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBpc1R5cGVvZihpdGVtTGlzdEFjdGlvbltwcm9wZXJ0eV0sICdmdW5jdGlvbicpXG4gICAgICA/IGl0ZW1MaXN0QWN0aW9uW3Byb3BlcnR5XSh0aGlzLnBhcmFtIHx8IGl0ZW1MaXN0QWN0aW9uKVxuICAgICAgOiBpdGVtTGlzdEFjdGlvbltwcm9wZXJ0eV07XG4gIH1cblxuICBwcml2YXRlIHNldExpc3RCb3hNYXhIZWlnaHQoKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXNMZW5ndGggPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICBpZiAoaXRlbXNMZW5ndGggPiA2KSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnY2hlY2snICYmICF0aGlzLmhpZGVTZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxpc3Rib3gubmF0aXZlRWxlbWVudCwgJ21heEhlaWdodCcsIGAkezQ0ICogNiAtIDQ0IC8gMyArIDYwfXB4YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMubGlzdGJveC5uYXRpdmVFbGVtZW50LCAnbWF4SGVpZ2h0JywgYCR7NDQgKiA2IC0gNDQgLyAzfXB4YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVXJsKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKGlzRXh0ZXJuYWxMaW5rKHVybCkpIHtcbiAgICAgIHJldHVybiBvcGVuRXh0ZXJuYWxMaW5rKHVybCk7XG4gICAgfVxuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2xpc3Rib3hcbiAgY2xhc3M9XCJwby1saXN0Ym94XCJcbiAgW2NsYXNzLnBvLWxpc3Rib3gtY2hlY2tdPVwidHlwZSA9PT0gJ2NoZWNrJyB8fCB0eXBlID09PSAnb3B0aW9uJ1wiXG4gIFthdHRyLmRhdGEtdHlwZV09XCJ0eXBlXCJcbiAgW2hpZGRlbl09XCJ2aXNpYmxlXCJcbj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3AtcG9wdXAtaGVhZGVyLXRlbXBsYXRlXVwiPjwvbmctY29udGVudD5cblxuICA8cG8tc2VhcmNoLWxpc3RcbiAgICAjc2VhcmNoRWxlbWVudFxuICAgICpuZ0lmPVwiIWhpZGVTZWFyY2ggJiYgdHlwZSA9PT0gJ2NoZWNrJ1wiXG4gICAgKHAtY2hhbmdlKT1cImNhbGxDaGFuZ2VTZWFyY2goJGV2ZW50KVwiXG4gICAgW3AtbGl0ZXJhbHNdPVwibGl0ZXJhbFNlYXJjaFwiXG4gICAgW3AtZmllbGQtdmFsdWVdPVwiZmllbGRWYWx1ZVNlYXJjaFwiXG4gICAgW3AtcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJTZWFyY2hcIlxuICA+PC9wby1zZWFyY2gtbGlzdD5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tUZW1wbGF0ZSgpOyBlbHNlIG5vRGF0YVRlbXBsYXRlXCI+XG4gICAgPHVsICNsaXN0Ym94SXRlbUxpc3QgY2RrTGlzdGJveCBbY2RrTGlzdGJveE11bHRpcGxlXT1cInR5cGUgPT09ICdjaGVjaydcIiBjbGFzcz1cInBvLWxpc3Rib3gtbGlzdFwiPlxuICAgICAgPGxpXG4gICAgICAgIGNka09wdGlvbj1cInNlbGVjdEFsbFwiXG4gICAgICAgICpuZ0lmPVwidHlwZSA9PT0gJ2NoZWNrJyAmJiBpdGVtcy5sZW5ndGggJiYgIXNlYXJjaEVsZW1lbnQ/LmlucHV0VmFsdWUgJiYgIWhpZGVTZWxlY3RBbGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiY2hlY2tib3hBbGxWYWx1ZSA9PT0gbnVsbCA/ICdtaXhlZCcgOiBjaGVja2JveEFsbFZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImNoYW5nZUFsbC5lbWl0KClcIlxuICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VBbGxFbWl0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8cG8taXRlbS1saXN0XG4gICAgICAgICAgW3Atc2VsZWN0ZWRdPVwiY2hlY2tib3hBbGxWYWx1ZVwiXG4gICAgICAgICAgcC10eXBlPVwiY2hlY2tcIlxuICAgICAgICAgIFtwLWxhYmVsXT1cImxpdGVyYWxzLnNlbGVjdEFsbFwiXG4gICAgICAgICAgcC12YWx1ZT1cInNlbGVjdEFsbFwiXG4gICAgICAgICAgW3AtY2hlY2tib3gtdmFsdWVdPVwiY2hlY2tib3hBbGxWYWx1ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9wby1pdGVtLWxpc3Q+XG4gICAgICA8L2xpPlxuICAgICAgPGxpXG4gICAgICAgIFtjbGFzcy5wby1saXN0Ym94LWl0ZW1dPVwidmlzaWJsZVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCJcbiAgICAgICAgW2Nka09wdGlvbl09XCJpdGVtW2ZpZWxkTGFiZWxdXCJcbiAgICAgICAgW2Nka09wdGlvbkRpc2FibGVkXT1cIlxuICAgICAgICAgIHJldHVybkJvb2xlYW5WYWx1ZShpdGVtLCAnZGlzYWJsZWQnKSB8fCByZXR1cm5Cb29sZWFuVmFsdWUoaXRlbSwgJ3Zpc2libGUnKSA9PT0gZmFsc2UgfHwgaXRlbS5vcHRpb25zXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZEl0ZW0oaXRlbSkgfHwgaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgIChjbGljayk9XCJvblNlbGVjdEl0ZW0oaXRlbSlcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oaXRlbSwgJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cIml0ZW0ub3B0aW9uc1wiIGNsYXNzPVwicG8tY29tYm8taXRlbS10aXRsZVwiPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHBvLWl0ZW0tbGlzdFxuICAgICAgICAgICpuZ0lmPVwicmV0dXJuQm9vbGVhblZhbHVlKGl0ZW0sICd2aXNpYmxlJykgIT09IGZhbHNlICYmICFpdGVtLm9wdGlvbnNcIlxuICAgICAgICAgIFtwLWRpc2FibGVkXT1cInJldHVybkJvb2xlYW5WYWx1ZShpdGVtLCAnZGlzYWJsZWQnKVwiXG4gICAgICAgICAgW3AtdmlzaWJsZV09XCJyZXR1cm5Cb29sZWFuVmFsdWUoaXRlbSwgJ3Zpc2libGUnKVwiXG4gICAgICAgICAgW3AtY2hlY2tib3gtdmFsdWVdPVwiaXNTZWxlY3RlZEl0ZW0oaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmRhdGEtaXRlbS1saXN0XT1cIml0ZW0gfCBqc29uXCJcbiAgICAgICAgICBbcC1sYWJlbF09XCJpdGVtW2ZpZWxkTGFiZWxdXCJcbiAgICAgICAgICBbcC12YWx1ZV09XCJpdGVtW2ZpZWxkVmFsdWVdXCJcbiAgICAgICAgICBbcC1zZWxlY3RlZF09XCJpc1NlbGVjdGVkSXRlbShpdGVtKSB8fCBpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICBbcC1zZXBhcmF0b3JdPVwiaXRlbS5zZXBhcmF0b3JcIlxuICAgICAgICAgIFtwLWRhbmdlcl09XCJpdGVtLmRhbmdlciB8fCBpdGVtLnR5cGUgPT09ICdkYW5nZXInXCJcbiAgICAgICAgICBbcC1pY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgW3AtdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICBbcC1pdGVtXT1cIml0ZW1cIlxuICAgICAgICAgIFtwLWZpZWxkLXZhbHVlXT1cImZpZWxkVmFsdWVcIlxuICAgICAgICAgIFtwLWZpZWxkLWxhYmVsXT1cImZpZWxkTGFiZWxcIlxuICAgICAgICAgIFtwLXRlbXBsYXRlXT1cInRlbXBsYXRlXCJcbiAgICAgICAgICBbcC10ZW1wbGF0ZS1jb250ZXh0XT1cIml0ZW1cIlxuICAgICAgICAgIChwLXNlbGVjdGNoZWNrYm94LWl0ZW0pPVwiY2hlY2tib3hDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgIChwLXNlbGVjdGNvbWJvLWl0ZW0pPVwib3B0aW9uQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAocC1zZWxlY3QtaXRlbSk9XCJvblNlbGVjdENoZWNrQm94SXRlbShpdGVtKVwiXG4gICAgICAgICAgW3Atc2VhcmNoLXZhbHVlXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgICBbcC1maWx0ZXItbW9kZV09XCJmaWx0ZXJNb2RlXCJcbiAgICAgICAgICBbcC1maWx0ZXJpbmddPVwiaXNGaWx0ZXJpbmdcIlxuICAgICAgICAgIFtwLXNob3VsZC1tYXJrLWxldHRlcl09XCJzaG91bGRNYXJrTGV0dGVyc1wiXG4gICAgICAgICAgW3AtY29tcGFyZS1jYWNoZV09XCJjb21wYXJlQ2FjaGVcIlxuICAgICAgICAgIFtwLWNvbWJvLXNlcnZpY2VdPVwiY29tYm9TZXJ2aWNlXCJcbiAgICAgICAgPjwvcG8taXRlbS1saXN0PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2ICpuZ0lmPVwiaXNTZXJ2ZXJTZWFyY2hpbmcgJiYgdHlwZSAhPT0gJ2FjdGlvbidcIiBjbGFzcz1cInBvLXRleHQtY2VudGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZmluaXRlTG9hZGluZzsgdGhlbiBzY3JvbGxMb2FkaW5nVGVtcGxhdGU7IGVsc2UgZGVmYXVsdExvYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgI3Njcm9sbExvYWRpbmdUZW1wbGF0ZT5cbiAgICA8cG8tbG9hZGluZy1vdmVybGF5IGNsYXNzPVwicG8tbGlzdGJveC1jb250YWluZXItbG9hZGluZy1zY3JvbGxcIj48L3BvLWxvYWRpbmctb3ZlcmxheT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nVGVtcGxhdGU+XG4gICAgPHBvLWxvYWRpbmcgY2xhc3M9XCJwby1saXN0Ym94LWNvbnRhaW5lci1sb2FkaW5nLWRlZmF1bHRcIj48L3BvLWxvYWRpbmc+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNub0RhdGFUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIiFpdGVtcy5sZW5ndGggJiYgIWlzU2VydmVyU2VhcmNoaW5nICYmIHR5cGUgIT09ICdhY3Rpb24nXCJcbiAgICAgIGNsYXNzPVwicG8tbGlzdGJveC1jb250YWluZXItbm8tZGF0YSBwby10ZXh0LWNlbnRlclwiXG4gICAgPlxuICAgICAgPHNwYW4+IHt7IGxpdGVyYWxzLm5vSXRlbXMgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==