igniteui-angular 13.2.10 → 13.2.11

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.
@@ -381,10 +381,10 @@ export class IgxPageNavigationComponent {
381
381
  }
382
382
  }
383
383
  IgxPageNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPageNavigationComponent, deps: [{ token: IgxPaginatorComponent, host: true }], target: i0.ɵɵFactoryTarget.Component });
384
- IgxPageNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPageNavigationComponent, selector: "igx-page-nav", inputs: { role: "role" }, host: { properties: { "class.igx-page-nav": "this.cssClass", "attr.role": "this.role" } }, ngImport: i0, template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n", components: [{ type: i6.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i7.IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i8.IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
384
+ IgxPageNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPageNavigationComponent, selector: "igx-page-nav", inputs: { role: "role" }, host: { properties: { "class.igx-page-nav": "this.cssClass", "attr.role": "this.role" } }, ngImport: i0, template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n", components: [{ type: i6.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i7.IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i8.IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
385
385
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPageNavigationComponent, decorators: [{
386
386
  type: Component,
387
- args: [{ selector: 'igx-page-nav', template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n" }]
387
+ args: [{ selector: 'igx-page-nav', template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n" }]
388
388
  }], ctorParameters: function () { return [{ type: IgxPaginatorComponent, decorators: [{
389
389
  type: Host
390
390
  }] }]; }, propDecorators: { cssClass: [{
@@ -396,4 +396,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
396
396
  }, {
397
397
  type: Input
398
398
  }] } });
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3BhZ2luYXRvci9wYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvcGFnaW5hdG9yL3BhZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFFVCxZQUFZLEVBQ1osSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQU16SCxNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBRUk7OztXQUdHO1FBRUksYUFBUSxHQUFHLHVCQUF1QixDQUFDO0tBQzdDOzswSEFQWSw2QkFBNkI7OEdBQTdCLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUR6QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDZDQUE2QyxFQUFFOzhCQU8zRCxRQUFRO3NCQURkLFdBQVc7dUJBQUMsNkJBQTZCOztBQU85QyxN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R0ksU0FBSSxHQUFHLFlBQVksQ0FBQztJQUVvQyxDQUFDOzt1SEFmdkQsMEJBQTBCLGtCQWVHLHFCQUFxQjsyR0FmbEQsMEJBQTBCLHlLR2hZdkMsNnREQXNEQTsyRkgwVWEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNJLGNBQWM7MERBa0JjLHFCQUFxQjswQkFBOUMsSUFBSTs0Q0FUVixRQUFRO3NCQURkLFdBQVc7dUJBQUMsb0JBQW9CO2dCQVExQixJQUFJO3NCQUZWLFdBQVc7dUJBQUMsV0FBVzs7c0JBQ3ZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJRGlzcGxheURlbnNpdHlPcHRpb25zLCBEaXNwbGF5RGVuc2l0eVRva2VuLCBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJUGFnZUNhbmNlbGxhYmxlRXZlbnRBcmdzLCBJUGFnZUV2ZW50QXJncyB9IGZyb20gJy4vcGFnaW5hdG9yLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgSVBhZ2luYXRvclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9wYWdpbmF0b3ItcmVzb3VyY2VzJztcbmltcG9ydCB7IE92ZXJsYXlTZXR0aW5ncyB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2lneFBhZ2luYXRvckNvbnRlbnRdLGlneC1wYWdpbmF0b3ItY29udGVudCcgfSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdpbmF0b3JUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2luYXRvci1jb250ZW50JylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXBhZ2luYXRvci1jb250ZW50Jztcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2luYXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICdwYWdpbmF0b3IuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdpbmF0b3JDb21wb25lbnQgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2Uge1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4UGFnaW5hdG9yVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHVibGljIGN1c3RvbUNvbnRlbnQ6IElneFBhZ2luYXRvclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGBwZXJQYWdlYCBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgcGFnaW5hdG9yIGlzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBhZ2luYXRvciAocGVyUGFnZUNoYW5nZSk9XCJvblBlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LXBhZ2luYXRvcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9uUGVyUGFnZUNoYW5nZShwZXJQYWdlOiBudW1iZXIpIHtcbiAgICAgKiAgIHRoaXMucGVyUGFnZSA9IHBlclBhZ2U7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwZXJQYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBjdXJyZW50IHBhZ2UgaXMgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgb25QYWdlQ2hhbmdlKHBhZ2U6IG51bWJlcikge1xuICAgICAqICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSBwYWdpbmcgaXMgcGVyZm9ybWVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBjdXJyZW50IGFuZCBuZXh0IHBhZ2VzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwYWdpbmcpPVwicGFnaW5nSGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElQYWdlQ2FuY2VsbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHBhZ2luZyBpcyBwZXJmb3JtZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHBhZ2VzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwYWdpbmdEb25lKT1cInBhZ2luZ0RvbmUoJGV2ZW50KVwiPjwvaWd4LXBhZ2luYXRvcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFnaW5nRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVBhZ2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUb3RhbCBwYWdlcyBjYWxjdWxhdGVkIGZyb20gdG90YWxSZWNvcmRzIGFuZCBwZXJQYWdlXG4gICAgICovXG4gICAgcHVibGljIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX3BhZ2UgPSAwO1xuICAgIHByb3RlY3RlZCBfdG90YWxSZWNvcmRzOiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9zZWxlY3RPcHRpb25zID0gWzUsIDEwLCAxNSwgMjUsIDUwLCAxMDAsIDUwMF07XG4gICAgcHJvdGVjdGVkIF9wZXJQYWdlID0gMTU7XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlBhZ2luYXRvclJlc1N0cmluZ3M7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7fTtcbiAgICBwcml2YXRlIGRlZmF1bHRTZWxlY3RWYWx1ZXMgPSBbNSwgMTAsIDE1LCAyNSwgNTAsIDEwMCwgNTAwXTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNsYXNzIG9mIHRoZSBJZ3hQYWdpbmF0b3JDb21wb25lbnQgYmFzZWRcbiAgICAgKiBvbiB0aGUgcHJvdmlkZWQgZGlzcGxheURlbnNpdHkuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnaW5hdG9yLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGNsYXNzQ29zeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvc3k7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnaW5hdG9yLS1jb21wYWN0JylcbiAgICBwdWJsaWMgZ2V0IGNsYXNzQ29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnaW5hdG9yJylcbiAgICBwdWJsaWMgZ2V0IGNsYXNzQ29tZm9ydGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21mb3J0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHksIHNldHMgY3VycmVudCBwYWdlIG9mIHRoZSBgSWd4UGFnaW5hdG9yQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcGFnZSA9IHRoaXMucGFnaW5hdG9yLnBhZ2U7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlID09PSB2YWx1ZSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5jZWxFdmVudEFyZ3M6IElQYWdlQ2FuY2VsbGFibGVFdmVudEFyZ3MgPSB7IGN1cnJlbnQ6IHRoaXMuX3BhZ2UsIG5leHQ6IHZhbHVlLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSVBhZ2VFdmVudEFyZ3MgPSB7IHByZXZpb3VzOiB0aGlzLl9wYWdlLCBjdXJyZW50OiB2YWx1ZSB9O1xuXG4gICAgICAgIHRoaXMucGFnaW5nLmVtaXQoY2FuY2VsRXZlbnRBcmdzKTtcbiAgICAgICAgaWYgKGNhbmNlbEV2ZW50QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYWdlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHRoaXMuX3BhZ2UpO1xuXG4gICAgICAgIHRoaXMucGFnaW5nRG9uZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5LCBzZXRzIG51bWJlciBvZiB2aXNpYmxlIGl0ZW1zIHBlciBwYWdlIGluIHRoZSBgSWd4UGFnaW5hdG9yQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAxNS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGl0ZW1zUGVyUGFnZSA9IHRoaXMucGFnaW5hdG9yLnBlclBhZ2U7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBlclBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZXJQYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdGhpcy5wZXJQYWdlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlclBhZ2UgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICB0aGlzLnBlclBhZ2VDaGFuZ2UuZW1pdCh0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0T3B0aW9ucyA9IHRoaXMuc29ydFVuaXF1ZU9wdGlvbnModGhpcy5kZWZhdWx0U2VsZWN0VmFsdWVzLCB0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWxSZWNvcmRzIC8gdGhpcy5fcGVyUGFnZSk7XG4gICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgIT09IDAgJiYgdGhpcy5wYWdlID49IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy50b3RhbFBhZ2VzIC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHRvdGFsIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0b3RhbFJlY29yZHMgPSB0aGlzLnBhZ2luYXRvci50b3RhbFJlY29yZHM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHRvdGFsUmVjb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsUmVjb3JkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHRvdGFsUmVjb3Jkcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RvdGFsUmVjb3JkcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyB0aGlzLnBlclBhZ2UpO1xuICAgICAgICBpZiAodGhpcy5wYWdlID4gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGN1c3RvbSBvcHRpb25zIGluIHRoZSBzZWxlY3Qgb2YgdGhlIHBhZ2luYXRvclxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgb3B0aW9ucyA9IHRoaXMucGFnaW5hdG9yLnNlbGVjdE9wdGlvbnM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RPcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2VsZWN0T3B0aW9ucyh2YWx1ZTogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICB0aGlzLl9zZWxlY3RPcHRpb25zID0gdGhpcy5zb3J0VW5pcXVlT3B0aW9ucyh2YWx1ZSwgdGhpcy5fcGVyUGFnZSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdFZhbHVlcyA9IFsuLi52YWx1ZV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyBjdXN0b20gT3ZlcmxheVNldHRpbmdzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBhZ2luYXRvciBbb3ZlcmxheVNldHRpbmdzXSA9IFwiY3VzdG9tT3ZlcmxheVNldHRpbmdzXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBvdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXlTZXR0aW5ncztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG92ZXJsYXlTZXR0aW5ncyh2YWx1ZTogT3ZlcmxheVNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX292ZXJsYXlTZXR0aW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElQYWdpbmF0b3JSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElQYWdpbmF0b3JSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdG9yLmlzTGFzdFBhZ2U7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBwYWdlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdG9yLmlzRmlyc3RQYWdlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UgPT09IDA7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBmaXJzdCBwYWdlciBidXR0b25zIHNob3VsZCBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNGaXJzdFBhZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaXJzdFBhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgbGFzdCBwYWdlciBidXR0b25zIHNob3VsZCBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNMYXN0UGFnZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xhc3RQYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgRGlzcGxheURlbnNpdHkgZm9yIHRoZSA8c2VsZWN0PiBpbnNpZGUgdGhlIHBhZ2luYXRvclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFnaW5hdG9yU2VsZWN0RGlzcGxheURlbnNpdHkoKTogRGlzcGxheURlbnNpdHkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29tZm9ydGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBEaXNwbGF5RGVuc2l0eS5jb3N5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLCBpZiB0aGUgcGFnaW5hdG9yIGlzIG5vdCBhbHJlYWR5IGF0IHRoZSBsYXN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgYElneFBhZ2luYXRvckNvbXBvbmVudGAsIGlmIHRoZSBwYWdpbmF0b3IgaXMgbm90IGFscmVhZHkgYXQgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgZGVzaXJlZCBwYWdlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZSgxKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRlKHZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHRoaXMudG90YWxQYWdlcyAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2UgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0VW5pcXVlT3B0aW9ucyh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIG5ld09wdGlvbjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXMsIG5ld09wdGlvbl0pKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2Utc2l6ZScsXG4gICAgdGVtcGxhdGVVcmw6ICdwYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdlU2l6ZVNlbGVjdG9yQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnZS1zaXplJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXBhZ2Utc2l6ZSc7XG5cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIHB1YmxpYyBwYWdpbmF0b3I6IElneFBhZ2luYXRvckNvbXBvbmVudCkgeyB9XG59XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtcGFnZS1uYXYnLFxuICAgIHRlbXBsYXRlVXJsOiAncGFnZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdlTmF2aWdhdGlvbkNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2UtbmF2JylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXBhZ2UtbmF2JztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvbGUgPSAnbmF2aWdhdGlvbic7XG5cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIHB1YmxpYyBwYWdpbmF0b3I6IElneFBhZ2luYXRvckNvbXBvbmVudCkgeyB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4UGFnaW5hdG9yQ29udGVudF0saWd4LXBhZ2luYXRvci1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuXG48aWd4LXBhZ2Utc2l6ZSAqbmdJZj1cIiFjdXN0b21Db250ZW50XCI+PC9pZ3gtcGFnZS1zaXplPlxuPGlneC1wYWdlLW5hdiAqbmdJZj1cIiFjdXN0b21Db250ZW50XCI+PC9pZ3gtcGFnZS1uYXY+XG4iLCI8bGFiZWwgY2xhc3M9XCJpZ3gtcGFnZS1zaXplX19sYWJlbFwiPnt7IHBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9sYWJlbCB9fTwvbGFiZWw+XG48ZGl2IGNsYXNzPVwiaWd4LXBhZ2Utc2l6ZV9fc2VsZWN0XCI+XG4gICAgPGlneC1zZWxlY3QgW292ZXJsYXlTZXR0aW5nc109XCJwYWdpbmF0b3Iub3ZlcmxheVNldHRpbmdzXCIgWyhuZ01vZGVsKV09XCJwYWdpbmF0b3IucGVyUGFnZVwiXG4gICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJwYWdpbmF0b3IucGFnaW5hdG9yU2VsZWN0RGlzcGxheURlbnNpdHlcIiB0eXBlPVwiYm9yZGVyXCI+XG4gICAgICAgIDxsYWJlbCBpZ3hMYWJlbCBbaGlkZGVuXT1cInRydWVcIj57eyBwYWdpbmF0b3IucmVzb3VyY2VTdHJpbmdzLmlneF9wYWdpbmF0b3JfbGFiZWwgfX08L2xhYmVsPlxuICAgICAgICA8aWd4LXNlbGVjdC1pdGVtIFt2YWx1ZV09XCJ2YWxcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIHBhZ2luYXRvci5zZWxlY3RPcHRpb25zXCI+XG4gICAgICAgICAgICB7eyB2YWwgfX1cbiAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgPC9pZ3gtc2VsZWN0PlxuPC9kaXY+XG4iLCI8YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9maXJzdF9wYWdlX2J1dHRvbl90ZXh0XCJcbiAgICBbZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IucGFnaW5hdGUoMClcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgIGlneFJpcHBsZVxuICAgIFtpZ3hSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCJcbj5cbiAgICA8aWd4LWljb24+Zmlyc3RfcGFnZTwvaWd4LWljb24+XG48L2J1dHRvbj5cbjxidXR0b25cbiAgICBbdGl0bGVdPVwicGFnaW5hdG9yLnJlc291cmNlU3RyaW5ncy5pZ3hfcGFnaW5hdG9yX3ByZXZpb3VzX3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInBhZ2luYXRvci5wcmV2aW91c1BhZ2UoKVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuPlxuICAgIDxpZ3gtaWNvbj5jaGV2cm9uX2xlZnQ8L2lneC1pY29uPlxuPC9idXR0b24+XG48ZGl2IGNsYXNzPVwiaWd4LXBhZ2UtbmF2X190ZXh0XCIgYXJpYS1jdXJyZW50PVwicGFnZVwiPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci5wYWdlICsgMSB9fTwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgICA+Jm5ic3A7e3tcbiAgICAgICAgICAgIHBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9wYWdlcl90ZXh0XG4gICAgICAgIH19Jm5ic3A7PC9zcGFuXG4gICAgPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci50b3RhbFBhZ2VzIH19PC9zcGFuPlxuPC9kaXY+XG48YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9uZXh0X3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNMYXN0UGFnZURpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInBhZ2luYXRvci5pc0xhc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IubmV4dFBhZ2UoKVwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuPlxuICAgIDxpZ3gtaWNvbj5jaGV2cm9uX3JpZ2h0PC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuPGJ1dHRvblxuICAgIFt0aXRsZV09XCJwYWdpbmF0b3IucmVzb3VyY2VTdHJpbmdzLmlneF9wYWdpbmF0b3JfbGFzdF9wYWdlX2J1dHRvbl90ZXh0XCJcbiAgICBbZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzTGFzdFBhZ2VEaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNMYXN0UGFnZURpc2FibGVkXCJcbiAgICAoY2xpY2spPVwicGFnaW5hdG9yLnBhZ2luYXRlKHBhZ2luYXRvci50b3RhbFBhZ2VzIC0gMSlcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgIGlneFJpcHBsZVxuICAgIFtpZ3hSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCJcbj5cbiAgICA8aWd4LWljb24+bGFzdF9wYWdlPC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuXG4iXX0=
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3BhZ2luYXRvci9wYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvcGFnaW5hdG9yL3BhZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFFVCxZQUFZLEVBQ1osSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQU16SCxNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBRUk7OztXQUdHO1FBRUksYUFBUSxHQUFHLHVCQUF1QixDQUFDO0tBQzdDOzswSEFQWSw2QkFBNkI7OEdBQTdCLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUR6QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDZDQUE2QyxFQUFFOzhCQU8zRCxRQUFRO3NCQURkLFdBQVc7dUJBQUMsNkJBQTZCOztBQU85QyxN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R0ksU0FBSSxHQUFHLFlBQVksQ0FBQztJQUVvQyxDQUFDOzt1SEFmdkQsMEJBQTBCLGtCQWVHLHFCQUFxQjsyR0FmbEQsMEJBQTBCLHlLR2hZdkMsaXpEQTBEQTsyRkhzVWEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNJLGNBQWM7MERBa0JjLHFCQUFxQjswQkFBOUMsSUFBSTs0Q0FUVixRQUFRO3NCQURkLFdBQVc7dUJBQUMsb0JBQW9CO2dCQVExQixJQUFJO3NCQUZWLFdBQVc7dUJBQUMsV0FBVzs7c0JBQ3ZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJRGlzcGxheURlbnNpdHlPcHRpb25zLCBEaXNwbGF5RGVuc2l0eVRva2VuLCBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJUGFnZUNhbmNlbGxhYmxlRXZlbnRBcmdzLCBJUGFnZUV2ZW50QXJncyB9IGZyb20gJy4vcGFnaW5hdG9yLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgSVBhZ2luYXRvclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9wYWdpbmF0b3ItcmVzb3VyY2VzJztcbmltcG9ydCB7IE92ZXJsYXlTZXR0aW5ncyB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2lneFBhZ2luYXRvckNvbnRlbnRdLGlneC1wYWdpbmF0b3ItY29udGVudCcgfSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdpbmF0b3JUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2luYXRvci1jb250ZW50JylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXBhZ2luYXRvci1jb250ZW50Jztcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2luYXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICdwYWdpbmF0b3IuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdpbmF0b3JDb21wb25lbnQgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2Uge1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4UGFnaW5hdG9yVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHVibGljIGN1c3RvbUNvbnRlbnQ6IElneFBhZ2luYXRvclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGBwZXJQYWdlYCBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgcGFnaW5hdG9yIGlzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBhZ2luYXRvciAocGVyUGFnZUNoYW5nZSk9XCJvblBlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LXBhZ2luYXRvcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9uUGVyUGFnZUNoYW5nZShwZXJQYWdlOiBudW1iZXIpIHtcbiAgICAgKiAgIHRoaXMucGVyUGFnZSA9IHBlclBhZ2U7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwZXJQYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBjdXJyZW50IHBhZ2UgaXMgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgb25QYWdlQ2hhbmdlKHBhZ2U6IG51bWJlcikge1xuICAgICAqICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSBwYWdpbmcgaXMgcGVyZm9ybWVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBjdXJyZW50IGFuZCBuZXh0IHBhZ2VzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwYWdpbmcpPVwicGFnaW5nSGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElQYWdlQ2FuY2VsbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHBhZ2luZyBpcyBwZXJmb3JtZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHBhZ2VzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGFnaW5hdG9yIChwYWdpbmdEb25lKT1cInBhZ2luZ0RvbmUoJGV2ZW50KVwiPjwvaWd4LXBhZ2luYXRvcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFnaW5nRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVBhZ2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUb3RhbCBwYWdlcyBjYWxjdWxhdGVkIGZyb20gdG90YWxSZWNvcmRzIGFuZCBwZXJQYWdlXG4gICAgICovXG4gICAgcHVibGljIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX3BhZ2UgPSAwO1xuICAgIHByb3RlY3RlZCBfdG90YWxSZWNvcmRzOiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9zZWxlY3RPcHRpb25zID0gWzUsIDEwLCAxNSwgMjUsIDUwLCAxMDAsIDUwMF07XG4gICAgcHJvdGVjdGVkIF9wZXJQYWdlID0gMTU7XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlBhZ2luYXRvclJlc1N0cmluZ3M7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7fTtcbiAgICBwcml2YXRlIGRlZmF1bHRTZWxlY3RWYWx1ZXMgPSBbNSwgMTAsIDE1LCAyNSwgNTAsIDEwMCwgNTAwXTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNsYXNzIG9mIHRoZSBJZ3hQYWdpbmF0b3JDb21wb25lbnQgYmFzZWRcbiAgICAgKiBvbiB0aGUgcHJvdmlkZWQgZGlzcGxheURlbnNpdHkuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnaW5hdG9yLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGNsYXNzQ29zeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvc3k7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnaW5hdG9yLS1jb21wYWN0JylcbiAgICBwdWJsaWMgZ2V0IGNsYXNzQ29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnaW5hdG9yJylcbiAgICBwdWJsaWMgZ2V0IGNsYXNzQ29tZm9ydGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21mb3J0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHksIHNldHMgY3VycmVudCBwYWdlIG9mIHRoZSBgSWd4UGFnaW5hdG9yQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcGFnZSA9IHRoaXMucGFnaW5hdG9yLnBhZ2U7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlID09PSB2YWx1ZSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5jZWxFdmVudEFyZ3M6IElQYWdlQ2FuY2VsbGFibGVFdmVudEFyZ3MgPSB7IGN1cnJlbnQ6IHRoaXMuX3BhZ2UsIG5leHQ6IHZhbHVlLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSVBhZ2VFdmVudEFyZ3MgPSB7IHByZXZpb3VzOiB0aGlzLl9wYWdlLCBjdXJyZW50OiB2YWx1ZSB9O1xuXG4gICAgICAgIHRoaXMucGFnaW5nLmVtaXQoY2FuY2VsRXZlbnRBcmdzKTtcbiAgICAgICAgaWYgKGNhbmNlbEV2ZW50QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYWdlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHRoaXMuX3BhZ2UpO1xuXG4gICAgICAgIHRoaXMucGFnaW5nRG9uZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5LCBzZXRzIG51bWJlciBvZiB2aXNpYmxlIGl0ZW1zIHBlciBwYWdlIGluIHRoZSBgSWd4UGFnaW5hdG9yQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAxNS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGl0ZW1zUGVyUGFnZSA9IHRoaXMucGFnaW5hdG9yLnBlclBhZ2U7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBlclBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZXJQYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdGhpcy5wZXJQYWdlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlclBhZ2UgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICB0aGlzLnBlclBhZ2VDaGFuZ2UuZW1pdCh0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0T3B0aW9ucyA9IHRoaXMuc29ydFVuaXF1ZU9wdGlvbnModGhpcy5kZWZhdWx0U2VsZWN0VmFsdWVzLCB0aGlzLl9wZXJQYWdlKTtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWxSZWNvcmRzIC8gdGhpcy5fcGVyUGFnZSk7XG4gICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgIT09IDAgJiYgdGhpcy5wYWdlID49IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy50b3RhbFBhZ2VzIC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHRvdGFsIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0b3RhbFJlY29yZHMgPSB0aGlzLnBhZ2luYXRvci50b3RhbFJlY29yZHM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHRvdGFsUmVjb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsUmVjb3JkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHRvdGFsUmVjb3Jkcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RvdGFsUmVjb3JkcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyB0aGlzLnBlclBhZ2UpO1xuICAgICAgICBpZiAodGhpcy5wYWdlID4gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGN1c3RvbSBvcHRpb25zIGluIHRoZSBzZWxlY3Qgb2YgdGhlIHBhZ2luYXRvclxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgb3B0aW9ucyA9IHRoaXMucGFnaW5hdG9yLnNlbGVjdE9wdGlvbnM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RPcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2VsZWN0T3B0aW9ucyh2YWx1ZTogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICB0aGlzLl9zZWxlY3RPcHRpb25zID0gdGhpcy5zb3J0VW5pcXVlT3B0aW9ucyh2YWx1ZSwgdGhpcy5fcGVyUGFnZSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdFZhbHVlcyA9IFsuLi52YWx1ZV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyBjdXN0b20gT3ZlcmxheVNldHRpbmdzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBhZ2luYXRvciBbb3ZlcmxheVNldHRpbmdzXSA9IFwiY3VzdG9tT3ZlcmxheVNldHRpbmdzXCI+PC9pZ3gtcGFnaW5hdG9yPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBvdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXlTZXR0aW5ncztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG92ZXJsYXlTZXR0aW5ncyh2YWx1ZTogT3ZlcmxheVNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX292ZXJsYXlTZXR0aW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElQYWdpbmF0b3JSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElQYWdpbmF0b3JSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdG9yLmlzTGFzdFBhZ2U7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBwYWdlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdG9yLmlzRmlyc3RQYWdlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UgPT09IDA7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBmaXJzdCBwYWdlciBidXR0b25zIHNob3VsZCBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNGaXJzdFBhZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaXJzdFBhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgbGFzdCBwYWdlciBidXR0b25zIHNob3VsZCBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNMYXN0UGFnZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xhc3RQYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgRGlzcGxheURlbnNpdHkgZm9yIHRoZSA8c2VsZWN0PiBpbnNpZGUgdGhlIHBhZ2luYXRvclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFnaW5hdG9yU2VsZWN0RGlzcGxheURlbnNpdHkoKTogRGlzcGxheURlbnNpdHkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29tZm9ydGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBEaXNwbGF5RGVuc2l0eS5jb3N5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIGBJZ3hQYWdpbmF0b3JDb21wb25lbnRgLCBpZiB0aGUgcGFnaW5hdG9yIGlzIG5vdCBhbHJlYWR5IGF0IHRoZSBsYXN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgYElneFBhZ2luYXRvckNvbXBvbmVudGAsIGlmIHRoZSBwYWdpbmF0b3IgaXMgbm90IGFscmVhZHkgYXQgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFBhZ2luYXRvckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR29lcyB0byB0aGUgZGVzaXJlZCBwYWdlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZSgxKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKiBAbWVtYmVyb2YgSWd4UGFnaW5hdG9yQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRlKHZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHRoaXMudG90YWxQYWdlcyAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2UgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0VW5pcXVlT3B0aW9ucyh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIG5ld09wdGlvbjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXMsIG5ld09wdGlvbl0pKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXBhZ2Utc2l6ZScsXG4gICAgdGVtcGxhdGVVcmw6ICdwYWdlLXNpemUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdlU2l6ZVNlbGVjdG9yQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcGFnZS1zaXplJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXBhZ2Utc2l6ZSc7XG5cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIHB1YmxpYyBwYWdpbmF0b3I6IElneFBhZ2luYXRvckNvbXBvbmVudCkgeyB9XG59XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtcGFnZS1uYXYnLFxuICAgIHRlbXBsYXRlVXJsOiAncGFnZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQYWdlTmF2aWdhdGlvbkNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXBhZ2UtbmF2JylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXBhZ2UtbmF2JztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvbGUgPSAnbmF2aWdhdGlvbic7XG5cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIHB1YmxpYyBwYWdpbmF0b3I6IElneFBhZ2luYXRvckNvbXBvbmVudCkgeyB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4UGFnaW5hdG9yQ29udGVudF0saWd4LXBhZ2luYXRvci1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuXG48aWd4LXBhZ2Utc2l6ZSAqbmdJZj1cIiFjdXN0b21Db250ZW50XCI+PC9pZ3gtcGFnZS1zaXplPlxuPGlneC1wYWdlLW5hdiAqbmdJZj1cIiFjdXN0b21Db250ZW50XCI+PC9pZ3gtcGFnZS1uYXY+XG4iLCI8bGFiZWwgY2xhc3M9XCJpZ3gtcGFnZS1zaXplX19sYWJlbFwiPnt7IHBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9sYWJlbCB9fTwvbGFiZWw+XG48ZGl2IGNsYXNzPVwiaWd4LXBhZ2Utc2l6ZV9fc2VsZWN0XCI+XG4gICAgPGlneC1zZWxlY3QgW292ZXJsYXlTZXR0aW5nc109XCJwYWdpbmF0b3Iub3ZlcmxheVNldHRpbmdzXCIgWyhuZ01vZGVsKV09XCJwYWdpbmF0b3IucGVyUGFnZVwiXG4gICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJwYWdpbmF0b3IucGFnaW5hdG9yU2VsZWN0RGlzcGxheURlbnNpdHlcIiB0eXBlPVwiYm9yZGVyXCI+XG4gICAgICAgIDxsYWJlbCBpZ3hMYWJlbCBbaGlkZGVuXT1cInRydWVcIj57eyBwYWdpbmF0b3IucmVzb3VyY2VTdHJpbmdzLmlneF9wYWdpbmF0b3JfbGFiZWwgfX08L2xhYmVsPlxuICAgICAgICA8aWd4LXNlbGVjdC1pdGVtIFt2YWx1ZV09XCJ2YWxcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIHBhZ2luYXRvci5zZWxlY3RPcHRpb25zXCI+XG4gICAgICAgICAgICB7eyB2YWwgfX1cbiAgICAgICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gICAgPC9pZ3gtc2VsZWN0PlxuPC9kaXY+XG4iLCI8YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9maXJzdF9wYWdlX2J1dHRvbl90ZXh0XCJcbiAgICBbZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzRmlyc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IucGFnaW5hdGUoMClcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgIGlneFJpcHBsZVxuICAgIFtpZ3hSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbj5cbiAgICA8aWd4LWljb24+Zmlyc3RfcGFnZTwvaWd4LWljb24+XG48L2J1dHRvbj5cbjxidXR0b25cbiAgICBbdGl0bGVdPVwicGFnaW5hdG9yLnJlc291cmNlU3RyaW5ncy5pZ3hfcGFnaW5hdG9yX3ByZXZpb3VzX3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNGaXJzdFBhZ2VEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInBhZ2luYXRvci5wcmV2aW91c1BhZ2UoKVwiXG4gICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuPlxuICAgIDxpZ3gtaWNvbj5jaGV2cm9uX2xlZnQ8L2lneC1pY29uPlxuPC9idXR0b24+XG48ZGl2IGNsYXNzPVwiaWd4LXBhZ2UtbmF2X190ZXh0XCIgYXJpYS1jdXJyZW50PVwicGFnZVwiPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci5wYWdlICsgMSB9fTwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgICA+Jm5ic3A7e3tcbiAgICAgICAgICAgIHBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9wYWdlcl90ZXh0XG4gICAgICAgIH19Jm5ic3A7PC9zcGFuXG4gICAgPlxuICAgIDxzcGFuPnt7IHBhZ2luYXRvci50b3RhbFBhZ2VzIH19PC9zcGFuPlxuPC9kaXY+XG48YnV0dG9uXG4gICAgW3RpdGxlXT1cInBhZ2luYXRvci5yZXNvdXJjZVN0cmluZ3MuaWd4X3BhZ2luYXRvcl9uZXh0X3BhZ2VfYnV0dG9uX3RleHRcIlxuICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNMYXN0UGFnZURpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInBhZ2luYXRvci5pc0xhc3RQYWdlRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwYWdpbmF0b3IubmV4dFBhZ2UoKVwiXG4gICAgaWd4UmlwcGxlXG4gICAgW2lneFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuPlxuICAgIDxpZ3gtaWNvbj5jaGV2cm9uX3JpZ2h0PC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuPGJ1dHRvblxuICAgIFt0aXRsZV09XCJwYWdpbmF0b3IucmVzb3VyY2VTdHJpbmdzLmlneF9wYWdpbmF0b3JfbGFzdF9wYWdlX2J1dHRvbl90ZXh0XCJcbiAgICBbZGlzYWJsZWRdPVwicGFnaW5hdG9yLmlzTGFzdFBhZ2VEaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJwYWdpbmF0b3IuaXNMYXN0UGFnZURpc2FibGVkXCJcbiAgICAoY2xpY2spPVwicGFnaW5hdG9yLnBhZ2luYXRlKHBhZ2luYXRvci50b3RhbFBhZ2VzIC0gMSlcIlxuICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgIGlneFJpcHBsZVxuICAgIFtpZ3hSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbj5cbiAgICA8aWd4LWljb24+bGFzdF9wYWdlPC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuXG4iXX0=
@@ -524,6 +524,9 @@ export class IgxTreeNodeComponent extends ToggleAnimationPlayer {
524
524
  * ```
525
525
  */
526
526
  expand() {
527
+ if (this.expanded && !this.treeService.collapsingNodes.has(this)) {
528
+ return;
529
+ }
527
530
  const args = {
528
531
  owner: this.tree,
529
532
  node: this,
@@ -552,6 +555,9 @@ export class IgxTreeNodeComponent extends ToggleAnimationPlayer {
552
555
  * ```
553
556
  */
554
557
  collapse() {
558
+ if (!this.expanded || this.treeService.collapsingNodes.has(this)) {
559
+ return;
560
+ }
555
561
  const args = {
556
562
  owner: this.tree,
557
563
  node: this,
@@ -642,4 +648,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
642
648
  }], expanded: [{
643
649
  type: Input
644
650
  }] } });
645
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsU0FBUyxFQUNFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBYSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFDaEcsV0FBVyxFQUNYLFVBQVUsRUFFVixNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUE4QixvQkFBb0IsRUFDNUUsTUFBTSxXQUFXLENBQUM7QUFLbkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7O0FBRTNELHFDQUFxQztBQUNyQzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBMENqQyxZQUNRLElBQXNCLEVBQ2xCLFVBQW9DLEVBQ3JDLFVBQXNCO1FBRnpCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQ3JDLGVBQVUsR0FBVixVQUFVLENBQVk7UUExQzFCLFNBQUksR0FBRyxVQUFV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QURqQixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBc0J2RixNQUFNO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsK0JBQStCO3NCQUR0QyxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkxRCxpQkFBaUI7c0JBRHhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQThGekMsUUFBUTtzQkFEbEIsS0FBSztnQkFvQ0ssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvbkJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LCBPbkluaXQsXG4gICAgT25EZXN0cm95LCBJbnB1dCwgSW5qZWN0LCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmLCBRdWVyeUxpc3QsIENvbnRlbnRDaGlsZHJlbiwgT3B0aW9uYWwsIFNraXBTZWxmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBEaXJlY3RpdmUsXG4gICAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uUGxheWVyLCBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIElHWF9UUkVFX0NPTVBPTkVOVCwgSWd4VHJlZSwgSWd4VHJlZU5vZGUsXG4gICAgSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsIElUcmVlTm9kZVRvZ2dsaW5nRXZlbnRBcmdzLCBJZ3hUcmVlU2VsZWN0aW9uVHlwZVxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmVlLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyZWUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IElUcmVlUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL3RyZWUtcmVzb3VyY2VzJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5cbi8vIFRPRE86IEltcGxlbWVudCBhcmlhIGZ1bmN0aW9uYWxpdHlcbi8qKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqIFVzZWQgZm9yIGxpbmtzIChgYWAgdGFncykgaW4gdGhlIGJvZHkgb2YgYW4gYGlneC10cmVlLW5vZGVgLiBIYW5kbGVzIGFyaWEgYW5kIGV2ZW50IGRpc3BhdGNoLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogYFtpZ3hUcmVlTm9kZUxpbmtdYFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ3RyZWVpdGVtJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBub2RlJ3MgcGFyZW50LiBTaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gdGhlIGxpbmsgaXMgZGVmaW5lZFxuICAgICAqIGluIGA8bmctdGVtcGxhdGU+YCB0YWcgb3V0c2lkZSBvZiBpdHMgcGFyZW50LCBhcyBBbmd1bGFyIERJIHdpbGwgbm90IHByb3Blcmx5IHByb3ZpZGUgYSByZWZlcmVuY2VcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgIDxpZ3gtdHJlZS1ub2RlICNteU5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtkYXRhXT1cIm5vZGVcIj5cbiAgICAgKiAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGRhdGEsIHBhcmVudE5vZGU6IG15Tm9kZSB9XCI+XG4gICAgICogICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogICAgIC4uLlxuICAgICAqICAgICA8IS0tIG5vZGUgdGVtcGxhdGUgaXMgZGVmaW5lZCB1bmRlciB0cmVlIHRvIGFjY2VzcyByZWxhdGVkIHNlcnZpY2VzIC0tPlxuICAgICAqICAgICA8bmctdGVtcGxhdGUgI25vZGVUZW1wbGF0ZSBsZXQtZGF0YSBsZXQtbm9kZT1cInBhcmVudE5vZGVcIj5cbiAgICAgKiAgICAgICAgIDxhIFtpZ3hUcmVlTm9kZUxpbmtdPVwibm9kZVwiPnt7IGRhdGEubGFiZWwgfX08L2E+XG4gICAgICogICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneFRyZWVOb2RlTGluaycpXG4gICAgcHVibGljIHNldCBwYXJlbnROb2RlKHZhbDogYW55KSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudE5vZGUgPSB2YWw7XG4gICAgICAgICAgICAodGhpcy5fcGFyZW50Tm9kZSBhcyBhbnkpLmFkZExpbmtDaGlsZCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFyZW50Tm9kZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICAvKiogQSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgbm9kZSAqL1xuICAgIHByaXZhdGUgZ2V0IHRhcmdldCgpOiBJZ3hUcmVlTm9kZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZSB8fCB0aGlzLnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyZW50Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9UUkVFX05PREVfQ09NUE9ORU5UKVxuICAgIHByaXZhdGUgbm9kZTogSWd4VHJlZU5vZGU8YW55PixcbiAgICAgICAgcHJpdmF0ZSBuYXZTZXJ2aWNlOiBJZ3hUcmVlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IHRoaXMudGFyZ2V0ID8gKHRoaXMudGFyZ2V0Py5kaXNhYmxlZCA/IC0xIDogMCkgOiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIENsZWFyIHRoZSBub2RlJ3MgZm9jdXNlZCBzdGF0ZVxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHB1YmxpYyBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLnRhcmdldC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFNldCB0aGUgbm9kZSBhcyBmb2N1c2VkXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHB1YmxpYyBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0ICYmICF0aGlzLnRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSAhPT0gdGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPSB0aGlzLnRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpbmtDaGlsZCh0aGlzKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIFRoZSB0cmVlIG5vZGUgY29tcG9uZW50IHJlcHJlc2VudHMgYSBjaGlsZCBub2RlIG9mIHRoZSB0cmVlIGNvbXBvbmVudCBvciBhbm90aGVyIHRyZWUgbm9kZS5cbiAqIFVzYWdlOlxuICpcbiAqIGBgYGh0bWxcbiAqICA8aWd4LXRyZWU+XG4gKiAgLi4uXG4gKiAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJkYXRhXCIgW3NlbGVjdGVkXT1cInNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQoZGF0YS5LZXkpXCIgW2V4cGFuZGVkXT1cInNlcnZpY2UuaXNOb2RlRXhwYW5kZWQoZGF0YS5LZXkpXCI+XG4gKiAgICAgIHt7IGRhdGEuRmlyc3ROYW1lIH19IHt7IGRhdGEuTGFzdE5hbWUgfX1cbiAqICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAqICAuLi5cbiAqICA8L2lneC10cmVlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXRyZWUtbm9kZScsXG4gICAgdGVtcGxhdGVVcmw6ICd0cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4VHJlZU5vZGVDb21wb25lbnQgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVDb21wb25lbnQ8VD4gZXh0ZW5kcyBUb2dnbGVBbmltYXRpb25QbGF5ZXIgaW1wbGVtZW50cyBJZ3hUcmVlTm9kZTxUPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGVudHJ5IHRoYXQgdGhlIG5vZGUgaXMgdmlzdWFsaXppbmcuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVkIGZvciBzZWFyY2hpbmcgdGhyb3VnaCBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXRyZWU+XG4gICAgICogIC4uLlxuICAgICAqICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImRhdGFcIj5cbiAgICAgKiAgICAgIHt7IGRhdGEuRmlyc3ROYW1lIH19IHt7IGRhdGEuTGFzdE5hbWUgfX1cbiAgICAgKiAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogIC4uLlxuICAgICAqICA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGE6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSB1c2VkIGZvciBsb2FkLW9uLWRlbWFuZCBzY2VuYXJpb3MgaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBub2RlIGlzIGxvYWRpbmcgZGF0YS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogTG9hZGluZyBub2RlcyBkbyBub3QgcmVuZGVyIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8vIFRPIERPOiByZXR1cm4gZGlmZmVyZW50IHRhYiBpbmRleCBkZXBlbmRpbmcgb24gYW5jaG9yIGNoaWxkXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3RhYkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gLTEgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/IC0xIDogdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuYW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEVOIHJlc291cmNlcyBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElUcmVlUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJVHJlZVJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlRyZWVSZXNTdHJpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnRyZWUuYWN0aXZlTm9kZUJpbmRpbmdDaGFuZ2UuZW1pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmFjdGl2ZU5vZGUgPT09IHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBub2RlJ3MgYHNlbGVjdGVkYCBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCIgWyhzZWxlY3RlZCldPVwibm9kZS5zZWxlY3RlZFwiPlxuICAgICAqICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbm9kZS5zZWxlY3RlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIk5vZGUgc2VsZWN0aW9uIGNoYW5nZWQgdG8gXCIsIGUpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbm9kZSdzIGBleHBhbmRlZGAgcHJvcGVydHkgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2RhdGFdPVwibm9kZVwiIFsoZXhwYW5kZWQpXT1cIm5vZGUuZXhwYW5kZWRcIj5cbiAgICAgKiAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG5vZGUuZXhwYW5kZWRDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTogYm9vbGVhbikgPT4gY29uc29sZS5sb2coXCJOb2RlIGV4cGFuc2lvbiBzdGF0ZSBjaGFuZ2VkIHRvIFwiLCBlKSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9jdXNlZCAmJlxuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBub2RlIGluY3VkaW5nIGl0c2VsZlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IHBhdGg6IElneFRyZWVOb2RlPGFueT5bXSA9IG5vZGUucGF0aDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhdGgoKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZT8ucGF0aCA/IFsuLi50aGlzLnBhcmVudE5vZGUucGF0aCwgdGhpc10gOiBbdGhpc107XG4gICAgfVxuXG4gICAgLy8gVE9ETzogYmluZCB0byBkaXNhYmxlZCBzdGF0ZSB3aGVuIG5vZGUgaXMgZHJhZ2dlZFxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5kaXNhYmxlZENoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXRyZWUtbm9kZSc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIGdldCByb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAnbm9uZScgOiAndHJlZWl0ZW0nO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHVibGljIGxpbmtDaGlsZHJlbjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgeyByZWFkOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCB9KVxuICAgIHB1YmxpYyBfY2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZTxhbnk+PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsIHsgcmVhZDogSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsIGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHVibGljIGFsbENoaWxkcmVuOiBRdWVyeUxpc3Q8SWd4VHJlZU5vZGU8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBub2RlIChpZiBhbnkpXG4gICAgICpcbiAgICAgKiBAcmVtYXJrXG4gICAgICogUmV0dXJucyBgbnVsbGAgaWYgbm9kZSBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBjb25zdCBjaGlsZHJlbjogSWd4VHJlZU5vZGU8YW55PltdID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IElneFRyZWVOb2RlPGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbj8ubGVuZ3RoID8gdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpIDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB3aWxsIGJlIHVzZWQgaW4gRHJhZyBhbmQgRHJvcCBpbXBsZW1lbnRhdGlvblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dob3N0VGVtcGxhdGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgaGVhZGVyOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEluZGljYXRvcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgX2RlZmF1bHRFeHBhbmRJbmRpY2F0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2NoaWxkcmVuQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgZ2V0IGhhc0xpbmtDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlua0NoaWxkcmVuPy5sZW5ndGggPiAwIHx8IHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29tcGFjdDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGlzQ29zeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZT8uZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvc3k7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGlzRm9jdXNlZDogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3RlcmVkQ2hpbGRyZW46IElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlRyZWVSZXNTdHJpbmdzO1xuXG4gICAgcHJpdmF0ZSBfdGFiSW5kZXggPSBudWxsO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJR1hfVFJFRV9DT01QT05FTlQpIHB1YmxpYyB0cmVlOiBJZ3hUcmVlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VsZWN0aW9uU2VydmljZTogSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCB0cmVlU2VydmljZTogSWd4VHJlZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBuYXZTZXJ2aWNlOiBJZ3hUcmVlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgYnVpbGRlcjogQW5pbWF0aW9uQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEluamVjdChJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCkgcHVibGljIHBhcmVudE5vZGU6IElneFRyZWVOb2RlPGFueT5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoYnVpbGRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dTZWxlY3RvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuc2VsZWN0aW9uICE9PSBJZ3hUcmVlU2VsZWN0aW9uVHlwZS5Ob25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZUluZGV0ZXJtaW5hdGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBkZXB0aCBvZiB0aGUgbm9kZSwgcmVsYXRpdmUgdG8gdGhlIHJvb3RcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogIC4uLlxuICAgICAqICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5cbiAgICAgKiAgICAgIE15IGxldmVsIGlzIHt7IG5vZGUubGV2ZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVsxMl0pWzBdO1xuICAgICAqIGNvbnN0IGxldmVsOiBudW1iZXIgPSBub2RlLmxldmVsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZSA/IHRoaXMucGFyZW50Tm9kZS5sZXZlbCArIDEgOiAwO1xuICAgIH1cblxuICAgIC8qKiBHZXQvc2V0IHdoZXRoZXIgdGhlIG5vZGUgaXMgc2VsZWN0ZWQuIFN1cHBvcnN0IHR3by13YXkgYmluZGluZy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogIC4uLlxuICAgICAqICA8aWd4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgWyhzZWxlY3RlZCldPVwibm9kZS5zZWxlY3RlZFwiPlxuICAgICAqICAgICAge3sgbm9kZS5sYWJlbCB9fVxuICAgICAqICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBjb25zdCBzZWxlY3RlZCA9IG5vZGUuc2VsZWN0ZWQ7XG4gICAgICogbm9kZS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghKHRoaXMudHJlZT8ubm9kZXMgJiYgdGhpcy50cmVlLm5vZGVzLmZpbmQoKGUpID0+IGUgPT09IHRoaXMpKSAmJiB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZS5mb3JjZVNlbGVjdC5wdXNoKHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgJiYgIXRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoW3RoaXNdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbCAmJiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoW3RoaXNdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBHZXQvc2V0IHdoZXRoZXIgdGhlIG5vZGUgaXMgZXhwYW5kZWRcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogIC4uLlxuICAgICAqICA8aWd4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2V4cGFuZGVkXT1cIm5vZGUubmFtZSA9PT0gdGhpcy5leHBhbmRlZE5vZGVcIj5cbiAgICAgKiAgICAgIHt7IG5vZGUubGFiZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3QgZXhwYW5kZWQgPSBub2RlLmV4cGFuZGVkO1xuICAgICAqIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2UuaXNFeHBhbmRlZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmV4cGFuZCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNlKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBleHBhbmRJbmRpY2F0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZT8uZXhwYW5kSW5kaWNhdG9yID8gdGhpcy50cmVlLmV4cGFuZEluZGljYXRvciA6IHRoaXMuX2RlZmF1bHRFeHBhbmRJbmRpY2F0b3JUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmF0aXZlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgbm9kZS4gQ291bGQgYmUgbnVsbCBpbiBjZXJ0YWluIGVudmlyb25tZW50cy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIG5hdGl2ZUVsZW1lbnQgb2YgdGhlIHNlY29uZCBub2RlXG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGUgPSB0aGlzLnRyZWUubm9kZXMuZmlyc3QoKTtcbiAgICAgKiBjb25zdCBub2RlRWxlbWVudDogSFRNTEVsZW1lbnQgPSBub2RlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm9wZW5BbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVFeHBhbmRlZC5lbWl0KHsgb3duZXI6IHRoaXMudHJlZSwgbm9kZTogdGhpcyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jbG9zZUFuaW1hdGlvbkRvbmUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyZWUubm9kZUNvbGxhcHNlZC5lbWl0KHsgb3duZXI6IHRoaXMudHJlZSwgbm9kZTogdGhpcyB9KTtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2UodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBTZXRzIHRoZSBmb2N1cyB0byB0aGUgbm9kZSdzIDxhPiBjaGlsZCwgaWYgcHJlc2VudFxuICAgICAqIFNldHMgdGhlIG5vZGUgYXMgdGhlIHRyZWUgc2VydmljZSdzIGZvY3VzZWROb2RlXG4gICAgICogTWFya3MgdGhlIG5vZGUgYXMgdGhlIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSAhPT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmxpbmtDaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtDaGlsZHJlbi5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW5bMF0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIENsZWFyIHRoZSBub2RlJ3MgZm9jdXNlZCBzdGF0dXNcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblNlbGVjdG9yQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgLy8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIC8vIHRoaXMubmF2U2VydmljZS5oYW5kbGVGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0TXVsdGlwbGVOb2Rlcyh0aGlzLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdE5vZGUodGhpcywgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE5vZGUodGhpcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgbm9kZSBleHBhbnNpb24gc3RhdGUsIHRyaWdnZXJpbmcgYW5pbWF0aW9uXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICAgPGlneC10cmVlLW5vZGUgI25vZGU+TXkgTm9kZTwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIDxidXR0b24gaWd4QnV0dG9uIChjbGljayk9XCJub2RlLnRvZ2dsZSgpXCI+VG9nZ2xlIE5vZGU8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteU5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG15Tm9kZS50b2dnbGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBpbmRpY2F0b3JDbGljaygpIHtcbiAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLnNldEZvY3VzZWRBbmRBY3RpdmVOb2RlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUG9pbnRlckRvd24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5lbnN1cmVTdGF0ZU9uTm9kZURlbGV0ZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzIHRoZSBub2RlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS5leHBhbmQoKVwiPkV4cGFuZCBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUuZXhwYW5kKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZCgpIHtcbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUV4cGFuZGluZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoIWFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmV4cGFuZCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucGxheU9wZW5BbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbGxhcHNlcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuY29sbGFwc2UoKVwiPkNvbGxhcHNlIE5vZGU8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteU5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG15Tm9kZS5jb2xsYXBzZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUNvbGxhcHNpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhZGRMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnB1c2gobGluayk7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZW1vdmVMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4uaW5kZXhPZihsaW5rKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbm9EcmFnVGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBXaWxsIHN3aXRjaCB0ZW1wbGF0ZXMgZGVwZW5kaW5nIG9uIGRyYWdEcm9wIC0tPlxuPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9EcmFnVGVtcGxhdGVcIj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgI2NoaWxkcmVuQ29udGFpbmVyXG4gICAgKm5nSWY9XCJleHBhbmRlZCAmJiAhbG9hZGluZ1wiXG4gICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19ncm91cFwiXG4gICAgcm9sZT1cImdyb3VwXCJcbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtdHJlZS1ub2RlXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5kaWNhdG9yPlxuICAgIDxpZ3gtaWNvbiBbYXR0ci5hcmlhLWxhYmVsXT1cImV4cGFuZGVkID8gcmVzb3VyY2VTdHJpbmdzLmlneF9jb2xsYXBzZSA6IHJlc291cmNlU3RyaW5ncy5pZ3hfZXhwYW5kXCI+XG4gICAgICAgIHt7IGV4cGFuZGVkID8gXCJrZXlib2FyZF9hcnJvd19kb3duXCIgOiBcImtleWJvYXJkX2Fycm93X3JpZ2h0XCIgfX1cbiAgICA8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBzZXBhcmF0ZWQgaW4gYSB0ZW1wbGF0ZSBpbiBjYXNlIHRoaXMgZXZlciBuZWVkcyB0byBiZSB0ZW1wbGF0YWJsZSAtLT5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0TWFya2VyVGVtcGxhdGU+XG4gICAgPGlneC1jaGVja2JveCBbY2hlY2tlZF09XCJzZWxlY3RlZFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiIFt0YWJpbmRleF09XCItMVwiPlxuICAgIDwvaWd4LWNoZWNrYm94PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgICA8ZGl2ICNnaG9zdFRlbXBsYXRlIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fd3JhcHBlclwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1jb3N5JzogaXNDb3N5LFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWNvbXBhY3QnOiBpc0NvbXBhY3QsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1hY3RpdmUnIDogdGhpcy5hY3RpdmUsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tZm9jdXNlZCcgOiB0aGlzLmZvY3VzZWQsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tZGlzYWJsZWQnIDogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCJcbiAgICAgICAgKGJsdXIpPVwiY2xlYXJGb2N1cygpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3RvcihsZXZlbClcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zcGFjZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBFeHBhbmQvQ29sbGFwc2UgaW5kaWNhdG9yIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uLS1oaWRkZW4nOiAhX2NoaWxkcmVuPy5sZW5ndGggfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5kaWNhdG9yQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbmRJbmRpY2F0b3JUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IGV4cGFuZGVkIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgIFx0PGlneC1jaXJjdWxhci1iYXJcbiAgICAgICAgICAgIFx0W2FuaW1hdGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgXHRbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFx0W3RleHRWaXNpYmlsaXR5XT1cImZhbHNlXCJcbiAgICAgICAgXHQ+XG4gICAgICAgIFx0PC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJdGVtIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZWxlY3RvcnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zZWxlY3RcIlxuICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdG9yQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdE1hcmtlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gR2hvc3QgY29udGVudCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tICBCdWZmZXIgZWxlbWVudCBmb3IgJ21vdmUgYWZ0ZXInIHdoZW4gRCZEIGlzIGltcGxlbWVudGVkLS0+XG4gICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2Ryb3AtaW5kaWNhdG9yXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fc3BhY2VyXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IobGV2ZWwpXCI+PC9zcGFuPlxuICAgICAgICA8IS0tIHN0eWxlIHJ1bGVzIHRhcmdldCB0aGlzIGRpdiwgZG8gbm90IGRlbGV0ZSBpdCAtLT5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJhZ1RlbXBsYXRlPlxuICAgIDwhLS0gRHJhZyBkcm9wIGdvZXMgaGVyZVxuICAgICAgICBpZ3hEcm9wXG4gICAgICAgICNkcm9wUmVmPVwiZHJvcFwiXG4gICAgICAgIFtpZ3hOb2RlRHJhZ109XCJ0aGlzXCJcbiAgICAgICAgKGRyYWdTdGFydCk9XCJsb2dEcm9wKGRyb3BSZWYpXCJcbiAgICAgICAgKGxlYXZlKT1cImVtaXRMZWF2ZSgpXCJcbiAgICAgICAgKGVudGVyKT1cImVtaXRFbnRlcigpXCIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2RyYWctd3JhcHBlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
651
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsU0FBUyxFQUNFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBYSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFDaEcsV0FBVyxFQUNYLFVBQVUsRUFFVixNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUE4QixvQkFBb0IsRUFDNUUsTUFBTSxXQUFXLENBQUM7QUFLbkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7O0FBRTNELHFDQUFxQztBQUNyQzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBMENqQyxZQUNRLElBQXNCLEVBQ2xCLFVBQW9DLEVBQ3JDLFVBQXNCO1FBRnpCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQ3JDLGVBQVUsR0FBVixVQUFVLENBQVk7UUExQzFCLFNBQUksR0FBRyxVQUFV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UUFBUTtzQkFEZCxXQUFXO3VCQUFDLHFCQUFxQjtnQkFLdkIsSUFBSTtzQkFEZCxXQUFXO3VCQUFDLFdBQVc7Z0JBT2pCLFlBQVk7c0JBRGxCLGVBQWU7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUt4RCxTQUFTO3NCQURmLGVBQWU7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUU7Z0JBS3BFLFdBQVc7c0JBRGpCLGVBQWU7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFzQnZGLE1BQU07c0JBRFosU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl4QywrQkFBK0I7c0JBRHRDLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTFELGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBOEZ6QyxRQUFRO3NCQURsQixLQUFLO2dCQW9DSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksIElucHV0LCBJbmplY3QsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYsIFF1ZXJ5TGlzdCwgQ29udGVudENoaWxkcmVuLCBPcHRpb25hbCwgU2tpcFNlbGYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIERpcmVjdGl2ZSxcbiAgICBIb3N0TGlzdGVuZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUb2dnbGVBbmltYXRpb25QbGF5ZXIsIFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vLi4vZXhwYW5zaW9uLXBhbmVsL3RvZ2dsZS1hbmltYXRpb24tY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgSUdYX1RSRUVfQ09NUE9ORU5ULCBJZ3hUcmVlLCBJZ3hUcmVlTm9kZSxcbiAgICBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MsIElneFRyZWVTZWxlY3Rpb25UeXBlXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZVNlcnZpY2UgfSBmcm9tICcuLi90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVRyZWVSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vdHJlZS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2Rpc3BsYXlEZW5zaXR5JztcblxuLy8gVE9ETzogSW1wbGVtZW50IGFyaWEgZnVuY3Rpb25hbGl0eVxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICogVXNlZCBmb3IgbGlua3MgKGBhYCB0YWdzKSBpbiB0aGUgYm9keSBvZiBhbiBgaWd4LXRyZWUtbm9kZWAuIEhhbmRsZXMgYXJpYSBhbmQgZXZlbnQgZGlzcGF0Y2guXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBgW2lneFRyZWVOb2RlTGlua11gXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAndHJlZWl0ZW0nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5vZGUncyBwYXJlbnQuIFNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgbGluayBpcyBkZWZpbmVkXG4gICAgICogaW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyBvdXRzaWRlIG9mIGl0cyBwYXJlbnQsIGFzIEFuZ3VsYXIgREkgd2lsbCBub3QgcHJvcGVybHkgcHJvdmlkZSBhIHJlZmVyZW5jZVxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgPGlneC10cmVlLW5vZGUgI215Tm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2RhdGFdPVwibm9kZVwiPlxuICAgICAqICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZGF0YSwgcGFyZW50Tm9kZTogbXlOb2RlIH1cIj5cbiAgICAgKiAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiAgICAgLi4uXG4gICAgICogICAgIDwhLS0gbm9kZSB0ZW1wbGF0ZSBpcyBkZWZpbmVkIHVuZGVyIHRyZWUgdG8gYWNjZXNzIHJlbGF0ZWQgc2VydmljZXMgLS0+XG4gICAgICogICAgIDxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlIGxldC1kYXRhIGxldC1ub2RlPVwicGFyZW50Tm9kZVwiPlxuICAgICAqICAgICAgICAgPGEgW2lneFRyZWVOb2RlTGlua109XCJub2RlXCI+e3sgZGF0YS5sYWJlbCB9fTwvYT5cbiAgICAgKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4VHJlZU5vZGVMaW5rJylcbiAgICBwdWJsaWMgc2V0IHBhcmVudE5vZGUodmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50Tm9kZSA9IHZhbDtcbiAgICAgICAgICAgICh0aGlzLl9wYXJlbnROb2RlIGFzIGFueSkuYWRkTGlua0NoaWxkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnROb2RlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIC8qKiBBIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBub2RlICovXG4gICAgcHJpdmF0ZSBnZXQgdGFyZ2V0KCk6IElneFRyZWVOb2RlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlIHx8IHRoaXMucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpXG4gICAgcHJpdmF0ZSBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+LFxuICAgICAgICBwcml2YXRlIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9PT0gdGhpcy50YXJnZXQgPyAodGhpcy50YXJnZXQ/LmRpc2FibGVkID8gLTEgOiAwKSA6IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogQ2xlYXIgdGhlIG5vZGUncyBmb2N1c2VkIHN0YXRlXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gICAgcHVibGljIGhhbmRsZUJsdXIoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0IHRoZSBub2RlIGFzIGZvY3VzZWRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQgJiYgIXRoaXMudGFyZ2V0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlICE9PSB0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXMudGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YXJnZXQuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50YXJnZXQucmVtb3ZlTGlua0NoaWxkKHRoaXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogVGhlIHRyZWUgbm9kZSBjb21wb25lbnQgcmVwcmVzZW50cyBhIGNoaWxkIG5vZGUgb2YgdGhlIHRyZWUgY29tcG9uZW50IG9yIGFub3RoZXIgdHJlZSBub2RlLlxuICogVXNhZ2U6XG4gKlxuICogYGBgaHRtbFxuICogIDxpZ3gtdHJlZT5cbiAqICAuLi5cbiAqICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImRhdGFcIiBbc2VsZWN0ZWRdPVwic2VydmljZS5pc05vZGVTZWxlY3RlZChkYXRhLktleSlcIiBbZXhwYW5kZWRdPVwic2VydmljZS5pc05vZGVFeHBhbmRlZChkYXRhLktleSlcIj5cbiAqICAgICAge3sgZGF0YS5GaXJzdE5hbWUgfX0ge3sgZGF0YS5MYXN0TmFtZSB9fVxuICogICAgPC9pZ3gtdHJlZS1ub2RlPlxuICogIC4uLlxuICogIDwvaWd4LXRyZWU+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtdHJlZS1ub2RlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBJZ3hUcmVlTm9kZUNvbXBvbmVudCB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlTm9kZUNvbXBvbmVudDxUPiBleHRlbmRzIFRvZ2dsZUFuaW1hdGlvblBsYXllciBpbXBsZW1lbnRzIElneFRyZWVOb2RlPFQ+LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZW50cnkgdGhhdCB0aGUgbm9kZSBpcyB2aXN1YWxpemluZy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZWQgZm9yIHNlYXJjaGluZyB0aHJvdWdoIG5vZGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtdHJlZT5cbiAgICAgKiAgLi4uXG4gICAgICogICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiZGF0YVwiPlxuICAgICAqICAgICAge3sgZGF0YS5GaXJzdE5hbWUgfX0ge3sgZGF0YS5MYXN0TmFtZSB9fVxuICAgICAqICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiAgLi4uXG4gICAgICogIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0YTogVDtcblxuICAgIC8qKlxuICAgICAqIFRvIGJlIHVzZWQgZm9yIGxvYWQtb24tZGVtYW5kIHNjZW5hcmlvcyBpbiBvcmRlciB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIG5vZGUgaXMgbG9hZGluZyBkYXRhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBMb2FkaW5nIG5vZGVzIGRvIG5vdCByZW5kZXIgY2hpbGRyZW4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLy8gVE8gRE86IHJldHVybiBkaWZmZXJlbnQgdGFiIGluZGV4IGRlcGVuZGluZyBvbiBhbmNob3IgY2hpbGRcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IHRhYkluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fdGFiSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAtMSA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gLTEgOiB0aGlzLl90YWJJbmRleDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGFuaW1hdGlvblNldHRpbmdzKCk6IFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZS5hbmltYXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZXMgRU4gcmVzb3VyY2VzIGJ5IGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSVRyZWVSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElUcmVlUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlOiBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5hY3RpdmVOb2RlID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMudHJlZS5hY3RpdmVOb2RlQmluZGluZ0NoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSA9PT0gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIG5vZGUncyBgc2VsZWN0ZWRgIHByb3BlcnR5IGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtkYXRhXT1cIm5vZGVcIiBbKHNlbGVjdGVkKV09XCJub2RlLnNlbGVjdGVkXCI+XG4gICAgICogICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBub2RlLnNlbGVjdGVkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6IGJvb2xlYW4pID0+IGNvbnNvbGUubG9nKFwiTm9kZSBzZWxlY3Rpb24gY2hhbmdlZCB0byBcIiwgZSkpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBub2RlJ3MgYGV4cGFuZGVkYCBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCIgWyhleHBhbmRlZCldPVwibm9kZS5leHBhbmRlZFwiPlxuICAgICAqICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbm9kZS5leHBhbmRlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIk5vZGUgZXhwYW5zaW9uIHN0YXRlIGNoYW5nZWQgdG8gXCIsIGUpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2VkICYmXG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIG5vZGUgaW5jdWRpbmcgaXRzZWxmXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3QgcGF0aDogSWd4VHJlZU5vZGU8YW55PltdID0gbm9kZS5wYXRoO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGF0aCgpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlPy5wYXRoID8gWy4uLnRoaXMucGFyZW50Tm9kZS5wYXRoLCB0aGlzXSA6IFt0aGlzXTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBiaW5kIHRvIGRpc2FibGVkIHN0YXRlIHdoZW4gbm9kZSBpcyBkcmFnZ2VkXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlOiBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10cmVlLW5vZGUtLWRpc2FibGVkJylcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmVlLmRpc2FibGVkQ2hhbmdlLmVtaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10cmVlLW5vZGUnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtdHJlZS1ub2RlJztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgZ2V0IHJvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/ICdub25lJyA6ICd0cmVlaXRlbSc7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgbGlua0NoaWxkcmVuOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB7IHJlYWQ6IElHWF9UUkVFX05PREVfQ09NUE9ORU5UIH0pXG4gICAgcHVibGljIF9jaGlsZHJlbjogUXVlcnlMaXN0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgeyByZWFkOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgYWxsQ2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZTxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIG5vZGUgKGlmIGFueSlcbiAgICAgKlxuICAgICAqIEByZW1hcmtcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBpZiBub2RlIGRvZXMgbm90IGhhdmUgY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGNoaWxkcmVuOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBub2RlLmNoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuPy5sZW5ndGggPyB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHdpbGwgYmUgdXNlZCBpbiBEcmFnIGFuZCBEcm9wIGltcGxlbWVudGF0aW9uXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnZ2hvc3RUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0SW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEV4cGFuZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpbGRyZW5Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIGNoaWxkcmVuQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBnZXQgaGFzTGlua0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyZWRDaGlsZHJlbjogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG5cbiAgICBwcml2YXRlIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9UUkVFX0NPTVBPTkVOVCkgcHVibGljIHRyZWU6IElneFRyZWUsXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBidWlsZGVyOiBBbmltYXRpb25CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASW5qZWN0KElHWF9UUkVFX05PREVfQ09NUE9ORU5UKSBwdWJsaWMgcGFyZW50Tm9kZTogSWd4VHJlZU5vZGU8YW55PlxuICAgICkge1xuICAgICAgICBzdXBlcihidWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd1NlbGVjdG9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZS5zZWxlY3Rpb24gIT09IElneFRyZWVTZWxlY3Rpb25UeXBlLk5vbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGluZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlSW5kZXRlcm1pbmF0ZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGRlcHRoIG9mIHRoZSBub2RlLCByZWxhdGl2ZSB0byB0aGUgcm9vdFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgLi4uXG4gICAgICogIDxpZ3gtdHJlZS1ub2RlICNub2RlPlxuICAgICAqICAgICAgTXkgbGV2ZWwgaXMge3sgbm9kZS5sZXZlbCB9fVxuICAgICAqICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzEyXSlbMF07XG4gICAgICogY29uc3QgbGV2ZWw6IG51bWJlciA9IG5vZGUubGV2ZWw7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlID8gdGhpcy5wYXJlbnROb2RlLmxldmVsICsgMSA6IDA7XG4gICAgfVxuXG4gICAgLyoqIEdldC9zZXQgd2hldGhlciB0aGUgbm9kZSBpcyBzZWxlY3RlZC4gU3VwcG9yc3QgdHdvLXdheSBiaW5kaW5nLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgLi4uXG4gICAgICogIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbKHNlbGVjdGVkKV09XCJub2RlLnNlbGVjdGVkXCI+XG4gICAgICogICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IHNlbGVjdGVkID0gbm9kZS5zZWxlY3RlZDtcbiAgICAgKiBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCEodGhpcy50cmVlPy5ub2RlcyAmJiB0aGlzLnRyZWUubm9kZXMuZmluZCgoZSkgPT4gZSA9PT0gdGhpcykpICYmIHZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlLmZvcmNlU2VsZWN0LnB1c2godGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCAmJiAhdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChbdGhpc10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsICYmIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChbdGhpc10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldC9zZXQgd2hldGhlciB0aGUgbm9kZSBpcyBleHBhbmRlZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgLi4uXG4gICAgICogIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZXhwYW5kZWRdPVwibm9kZS5uYW1lID09PSB0aGlzLmV4cGFuZGVkTm9kZVwiPlxuICAgICAqICAgICAge3sgbm9kZS5sYWJlbCB9fVxuICAgICAqICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBjb25zdCBleHBhbmRlZCA9IG5vZGUuZXhwYW5kZWQ7XG4gICAgICogbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5pc0V4cGFuZGVkKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZXhwYW5kZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2UodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZEluZGljYXRvclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5leHBhbmRJbmRpY2F0b3IgPyB0aGlzLnRyZWUuZXhwYW5kSW5kaWNhdG9yIDogdGhpcy5fZGVmYXVsdEV4cGFuZEluZGljYXRvclRlbXBsYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBuYXRpdmUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBub2RlLiBDb3VsZCBiZSBudWxsIGluIGNlcnRhaW4gZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgbmF0aXZlRWxlbWVudCBvZiB0aGUgc2Vjb25kIG5vZGVcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZSA9IHRoaXMudHJlZS5ub2Rlcy5maXJzdCgpO1xuICAgICAqIGNvbnN0IG5vZGVFbGVtZW50OiBIVE1MRWxlbWVudCA9IG5vZGUubmF0aXZlRWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMub3BlbkFuaW1hdGlvbkRvbmUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWUubm9kZUV4cGFuZGVkLmVtaXQoeyBvd25lcjogdGhpcy50cmVlLCBub2RlOiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNsb3NlQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZS5ub2RlQ29sbGFwc2VkLmVtaXQoeyBvd25lcjogdGhpcy50cmVlLCBub2RlOiB0aGlzIH0pO1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFNldHMgdGhlIGZvY3VzIHRvIHRoZSBub2RlJ3MgPGE+IGNoaWxkLCBpZiBwcmVzZW50XG4gICAgICogU2V0cyB0aGUgbm9kZSBhcyB0aGUgdHJlZSBzZXJ2aWNlJ3MgZm9jdXNlZE5vZGVcbiAgICAgKiBNYXJrcyB0aGUgbm9kZSBhcyB0aGUgY3VycmVudCBhY3RpdmUgZWxlbWVudFxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlICE9PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMubGlua0NoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0NoaWxkcmVuLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlblswXS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogQ2xlYXIgdGhlIG5vZGUncyBmb2N1c2VkIHN0YXR1c1xuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0b3JDbGljayhldmVudCkge1xuICAgICAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgLy8gdGhpcy5uYXZTZXJ2aWNlLmhhbmRsZUZvY3VzZWRBbmRBY3RpdmVOb2RlKHRoaXMpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RNdWx0aXBsZU5vZGVzKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Tm9kZSh0aGlzLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Tm9kZSh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBub2RlIGV4cGFuc2lvbiBzdGF0ZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUudG9nZ2xlKClcIj5Ub2dnbGUgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLnRvZ2dsZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGluZGljYXRvckNsaWNrKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2Uuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Qb2ludGVyRG93bihldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLnNldEZvY3VzZWRBbmRBY3RpdmVOb2RlKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmVuc3VyZVN0YXRlT25Ob2RlRGVsZXRlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIG5vZGUsIHRyaWdnZXJpbmcgYW5pbWF0aW9uXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICAgPGlneC10cmVlLW5vZGUgI25vZGU+TXkgTm9kZTwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIDxidXR0b24gaWd4QnV0dG9uIChjbGljayk9XCJub2RlLmV4cGFuZCgpXCI+RXhwYW5kIE5vZGU8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteU5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG15Tm9kZS5leHBhbmQoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kKCkge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRlZCAmJiAhdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nTm9kZXMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUV4cGFuZGluZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoIWFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmV4cGFuZCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucGxheU9wZW5BbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbGxhcHNlcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuY29sbGFwc2UoKVwiPkNvbGxhcHNlIE5vZGU8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteU5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG15Tm9kZS5jb2xsYXBzZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkIHx8IHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2luZ05vZGVzLmhhcyh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVRvZ2dsaW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMudHJlZSxcbiAgICAgICAgICAgIG5vZGU6IHRoaXMsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG5cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2luZyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucGxheUNsb3NlQW5pbWF0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5Db250YWluZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgYWRkTGlua0NoaWxkKGxpbms6IElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5wdXNoKGxpbmspO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVtb3ZlTGlua0NoaWxkKGxpbms6IElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLmluZGV4T2YobGluayk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI25vRHJhZ1RlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gV2lsbCBzd2l0Y2ggdGVtcGxhdGVzIGRlcGVuZGluZyBvbiBkcmFnRHJvcCAtLT5cbjxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIm5vRHJhZ1RlbXBsYXRlXCI+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2ICNjaGlsZHJlbkNvbnRhaW5lclxuICAgICpuZ0lmPVwiZXhwYW5kZWQgJiYgIWxvYWRpbmdcIlxuICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZ3JvdXBcIlxuICAgIHJvbGU9XCJncm91cFwiXG4+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXRyZWUtbm9kZVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEluZGljYXRvcj5cbiAgICA8aWd4LWljb24gW2F0dHIuYXJpYS1sYWJlbF09XCJleHBhbmRlZCA/IHJlc291cmNlU3RyaW5ncy5pZ3hfY29sbGFwc2UgOiByZXNvdXJjZVN0cmluZ3MuaWd4X2V4cGFuZFwiPlxuICAgICAgICB7eyBleHBhbmRlZCA/IFwia2V5Ym9hcmRfYXJyb3dfZG93blwiIDogXCJrZXlib2FyZF9hcnJvd19yaWdodFwiIH19XG4gICAgPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gc2VwYXJhdGVkIGluIGEgdGVtcGxhdGUgaW4gY2FzZSB0aGlzIGV2ZXIgbmVlZHMgdG8gYmUgdGVtcGxhdGFibGUgLS0+XG48bmctdGVtcGxhdGUgI3NlbGVjdE1hcmtlclRlbXBsYXRlPlxuICAgIDxpZ3gtY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0ZWRcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIiBbdGFiaW5kZXhdPVwiLTFcIj5cbiAgICA8L2lneC1jaGVja2JveD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gICAgPGRpdiAjZ2hvc3RUZW1wbGF0ZSBjbGFzcz1cImlneC10cmVlLW5vZGVfX3dyYXBwZXJcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tY29zeSc6IGlzQ29zeSxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1jb21wYWN0JzogaXNDb21wYWN0LFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLXNlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tYWN0aXZlJyA6IHRoaXMuYWN0aXZlLFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWZvY3VzZWQnIDogdGhpcy5mb2N1c2VkLFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWRpc2FibGVkJyA6IHRoaXMuZGlzYWJsZWRcbiAgICAgICAgfVwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoKVwiXG4gICAgICAgIChibHVyKT1cImNsZWFyRm9jdXMoKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IobGV2ZWwpXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fc3BhY2VyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRXhwYW5kL0NvbGxhcHNlIGluZGljYXRvciAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvbi0taGlkZGVuJzogIV9jaGlsZHJlbj8ubGVuZ3RoIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImluZGljYXRvckNsaWNrKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUsIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBleHBhbmRlZCB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICBcdDxpZ3gtY2lyY3VsYXItYmFyXG4gICAgICAgICAgICBcdFthbmltYXRlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFx0W2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBcdFt0ZXh0VmlzaWJpbGl0eV09XCJmYWxzZVwiXG4gICAgICAgIFx0PlxuICAgICAgICBcdDwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gSXRlbSBzZWxlY3Rpb24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93U2VsZWN0b3JzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fc2VsZWN0XCJcbiAgICAgICAgICAgIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RvckNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RNYXJrZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19jb250ZW50XCI+XG4gICAgICAgICAgICA8IS0tIEdob3N0IGNvbnRlbnQgLS0+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSAgQnVmZmVyIGVsZW1lbnQgZm9yICdtb3ZlIGFmdGVyJyB3aGVuIEQmRCBpcyBpbXBsZW1lbnRlZC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19kcm9wLWluZGljYXRvclwiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NwYWNlclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtdLmNvbnN0cnVjdG9yKGxldmVsKVwiPjwvc3Bhbj5cbiAgICAgICAgPCEtLSBzdHlsZSBydWxlcyB0YXJnZXQgdGhpcyBkaXYsIGRvIG5vdCBkZWxldGUgaXQgLS0+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RyYWdUZW1wbGF0ZT5cbiAgICA8IS0tIERyYWcgZHJvcCBnb2VzIGhlcmVcbiAgICAgICAgaWd4RHJvcFxuICAgICAgICAjZHJvcFJlZj1cImRyb3BcIlxuICAgICAgICBbaWd4Tm9kZURyYWddPVwidGhpc1wiXG4gICAgICAgIChkcmFnU3RhcnQpPVwibG9nRHJvcChkcm9wUmVmKVwiXG4gICAgICAgIChsZWF2ZSk9XCJlbWl0TGVhdmUoKVwiXG4gICAgICAgIChlbnRlcik9XCJlbWl0RW50ZXIoKVwiIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19kcmFnLXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1610,11 +1610,11 @@ const verticalAnimations = [
1610
1610
  swingOutBottomBck,
1611
1611
  ];
1612
1612
  /**
1613
- * Similar to Angular's formatDate. However it will not throw on `undefined | null` instead
1613
+ * Similar to Angular's formatDate. However it will not throw on `undefined | null | ''` instead
1614
1614
  * coalescing to an empty string.
1615
1615
  */
1616
1616
  const formatDate = (value, format, locale, timezone) => {
1617
- if (value === null || value === undefined) {
1617
+ if (value === null || value === undefined || value === '') {
1618
1618
  return '';
1619
1619
  }
1620
1620
  return formatDate$1(value, format, locale, timezone);
@@ -15412,7 +15412,7 @@ class IgxDragDirective {
15412
15412
  // Check for shadowRoot instance and use it if present
15413
15413
  for (const elFromPoint of elementsFromPoint) {
15414
15414
  if (!!(elFromPoint === null || elFromPoint === void 0 ? void 0 : elFromPoint.shadowRoot)) {
15415
- targetElements = targetElements.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY));
15415
+ targetElements = targetElements.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));
15416
15416
  }
15417
15417
  else if (targetElements.indexOf(elFromPoint) === -1) {
15418
15418
  targetElements.push(elFromPoint);
@@ -15446,13 +15446,15 @@ class IgxDragDirective {
15446
15446
  * @hidden
15447
15447
  * Traverse shadow dom in depth.
15448
15448
  */
15449
- getFromShadowRoot(elem, pageX, pageY) {
15449
+ getFromShadowRoot(elem, pageX, pageY, parentDomElems) {
15450
15450
  const elementsFromPoint = elem.shadowRoot.elementsFromPoint(pageX, pageY);
15451
- let res = elementsFromPoint;
15452
- for (const elFromPoint of elementsFromPoint) {
15451
+ const shadowElements = elementsFromPoint.filter(cur => parentDomElems.indexOf(cur) === -1);
15452
+ let res = [];
15453
+ for (const elFromPoint of shadowElements) {
15453
15454
  if (!!(elFromPoint === null || elFromPoint === void 0 ? void 0 : elFromPoint.shadowRoot) && elFromPoint.shadowRoot !== elem.shadowRoot) {
15454
- res = res.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY));
15455
+ res = res.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));
15455
15456
  }
15457
+ res.push(elFromPoint);
15456
15458
  }
15457
15459
  return res;
15458
15460
  }
@@ -45859,6 +45861,9 @@ class IgxTreeNodeComponent extends ToggleAnimationPlayer {
45859
45861
  * ```
45860
45862
  */
45861
45863
  expand() {
45864
+ if (this.expanded && !this.treeService.collapsingNodes.has(this)) {
45865
+ return;
45866
+ }
45862
45867
  const args = {
45863
45868
  owner: this.tree,
45864
45869
  node: this,
@@ -45887,6 +45892,9 @@ class IgxTreeNodeComponent extends ToggleAnimationPlayer {
45887
45892
  * ```
45888
45893
  */
45889
45894
  collapse() {
45895
+ if (!this.expanded || this.treeService.collapsingNodes.has(this)) {
45896
+ return;
45897
+ }
45890
45898
  const args = {
45891
45899
  owner: this.tree,
45892
45900
  node: this,
@@ -55702,10 +55710,10 @@ class IgxPageNavigationComponent {
55702
55710
  }
55703
55711
  }
55704
55712
  IgxPageNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPageNavigationComponent, deps: [{ token: IgxPaginatorComponent, host: true }], target: i0.ɵɵFactoryTarget.Component });
55705
- IgxPageNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPageNavigationComponent, selector: "igx-page-nav", inputs: { role: "role" }, host: { properties: { "class.igx-page-nav": "this.cssClass", "attr.role": "this.role" } }, ngImport: i0, template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n", components: [{ type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
55713
+ IgxPageNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPageNavigationComponent, selector: "igx-page-nav", inputs: { role: "role" }, host: { properties: { "class.igx-page-nav": "this.cssClass", "attr.role": "this.role" } }, ngImport: i0, template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n", components: [{ type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
55706
55714
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPageNavigationComponent, decorators: [{
55707
55715
  type: Component,
55708
- args: [{ selector: 'igx-page-nav', template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n" }]
55716
+ args: [{ selector: 'igx-page-nav', template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n" }]
55709
55717
  }], ctorParameters: function () {
55710
55718
  return [{ type: IgxPaginatorComponent, decorators: [{
55711
55719
  type: Host
@@ -68679,7 +68687,6 @@ class IgxGridComponent extends IgxGridBaseDirective {
68679
68687
  if (this.groupTemplate) {
68680
68688
  this._groupRowTemplate = this.groupTemplate.template;
68681
68689
  }
68682
- this.detailTemplate.changes.subscribe(() => this.trackChanges = (_, rec) => ((rec === null || rec === void 0 ? void 0 : rec.detailsData) !== undefined ? rec.detailsData : rec));
68683
68690
  if (this.hideGroupedColumns && this._columns && this.groupingExpressions) {
68684
68691
  this._setGroupColsVisibility(this.hideGroupedColumns);
68685
68692
  }
@@ -68718,6 +68725,7 @@ class IgxGridComponent extends IgxGridBaseDirective {
68718
68725
  */
68719
68726
  ngOnInit() {
68720
68727
  super.ngOnInit();
68728
+ this.trackChanges = (_, rec) => ((rec === null || rec === void 0 ? void 0 : rec.detailsData) !== undefined ? rec.detailsData : rec);
68721
68729
  this.onGroupingDone.pipe(takeUntil(this.destroy$)).subscribe((args) => {
68722
68730
  this.crudService.endEdit(false);
68723
68731
  this.summaryService.updateSummaryCache(args);