@po-ui/ng-components 18.6.0 → 18.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,7 @@ function PoMenuComponent_div_7_Template(rf, ctx) { if (rf & 1) {
31
31
  } if (rf & 2) {
32
32
  const ctx_r1 = i0.ɵɵnextContext();
33
33
  i0.ɵɵadvance();
34
- i0.ɵɵproperty("p-class", ctx_r1.enableCollapse ? "po-menu-short-logo" : "po-menu-logo")("p-logo", ctx_r1.enableCollapse ? ctx_r1.shortLogo || ctx_r1.logo : ctx_r1.logo)("p-logo-alt", ctx_r1.logoAlt);
34
+ i0.ɵɵproperty("p-class", ctx_r1.enableCollapse ? "po-menu-short-logo" : "po-menu-logo")("p-logo", ctx_r1.enableCollapse ? ctx_r1.shortLogo || ctx_r1.logo : ctx_r1.logo)("p-logo-alt", ctx_r1.logoAlt)("p-link", ctx_r1.logoLink);
35
35
  } }
36
36
  function PoMenuComponent_div_8_ng_container_1_Template(rf, ctx) { if (rf & 1) {
37
37
  i0.ɵɵelementContainer(0);
@@ -593,7 +593,7 @@ export class PoMenuComponent extends PoMenuBaseComponent {
593
593
  } if (rf & 2) {
594
594
  let _t;
595
595
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.menuHeaderTemplate = _t.first);
596
- } }, features: [i0.ɵɵProvidersFeature([PoMenuItemsService, PoMenuService]), i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 11, consts: [["class", "po-menu-overlay", 3, "click", 4, "ngIf"], [1, "po-menu-mobile", "po-clickable", 3, "click"], ["p-icon", "ICON_MENU"], [1, "po-menu", 3, "ngClass"], [1, "po-menu-container", 3, "mouseenter", "mouseleave"], [1, "po-menu-header"], ["class", "po-menu-header-container-logo", 4, "ngIf"], ["class", "po-menu-header-template", 4, "ngIf"], [3, "p-enable-collapse", "p-loading", "p-filter", 4, "ngIf"], [1, "po-menu-body"], [1, "po-menu-outer"], [1, "po-menu-inner"], [1, "po-menu-nav"], ["role", "menu", 1, "po-menu-list"], ["class", "po-menu-list-item", "role", "presentation", 4, "ngIf"], ["class", "po-menu-list-item", "role", "presentation", 3, "po-menu-item-first", 4, "ngFor", "ngForOf"], ["class", "po-menu-footer", 4, "ngIf"], [1, "po-menu-overlay", 3, "click"], [1, "po-menu-header-container-logo"], [3, "p-class", "p-logo", "p-logo-alt"], [1, "po-menu-header-template"], [4, "ngTemplateOutlet"], [3, "p-filter", "p-enable-collapse", "p-loading"], ["role", "presentation", 1, "po-menu-list-item"], ["p-icon", "ICON_INFO", "p-type", "noData", 3, "p-level", "p-label", "p-short-label"], [3, "p-action", "p-badge-alert", "p-badge-color", "p-badge-value", "p-collapsed-menu", "p-icon", "p-id", "p-label", "p-level", "p-link", "p-short-label", "p-sub-items", "p-type"], [1, "po-menu-footer"], ["type", "button", 1, "po-menu-collapse-button-icon", 3, "click"], ["aria-hidden", "true", 4, "ngIf"], [3, "p-icon"], ["aria-hidden", "true"]], template: function PoMenuComponent_Template(rf, ctx) { if (rf & 1) {
596
+ } }, features: [i0.ɵɵProvidersFeature([PoMenuItemsService, PoMenuService]), i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 11, consts: [["class", "po-menu-overlay", 3, "click", 4, "ngIf"], [1, "po-menu-mobile", "po-clickable", 3, "click"], ["p-icon", "ICON_MENU"], [1, "po-menu", 3, "ngClass"], [1, "po-menu-container", 3, "mouseenter", "mouseleave"], [1, "po-menu-header"], ["class", "po-menu-header-container-logo", 4, "ngIf"], ["class", "po-menu-header-template", 4, "ngIf"], [3, "p-enable-collapse", "p-loading", "p-filter", 4, "ngIf"], [1, "po-menu-body"], [1, "po-menu-outer"], [1, "po-menu-inner"], [1, "po-menu-nav"], ["role", "menu", 1, "po-menu-list"], ["class", "po-menu-list-item", "role", "presentation", 4, "ngIf"], ["class", "po-menu-list-item", "role", "presentation", 3, "po-menu-item-first", 4, "ngFor", "ngForOf"], ["class", "po-menu-footer", 4, "ngIf"], [1, "po-menu-overlay", 3, "click"], [1, "po-menu-header-container-logo"], [3, "p-class", "p-logo", "p-logo-alt", "p-link"], [1, "po-menu-header-template"], [4, "ngTemplateOutlet"], [3, "p-filter", "p-enable-collapse", "p-loading"], ["role", "presentation", 1, "po-menu-list-item"], ["p-icon", "ICON_INFO", "p-type", "noData", 3, "p-level", "p-label", "p-short-label"], [3, "p-action", "p-badge-alert", "p-badge-color", "p-badge-value", "p-collapsed-menu", "p-icon", "p-id", "p-label", "p-level", "p-link", "p-short-label", "p-sub-items", "p-type"], [1, "po-menu-footer"], ["type", "button", 1, "po-menu-collapse-button-icon", 3, "click"], ["aria-hidden", "true", 4, "ngIf"], [3, "p-icon"], ["aria-hidden", "true"]], template: function PoMenuComponent_Template(rf, ctx) { if (rf & 1) {
597
597
  i0.ɵɵtemplate(0, PoMenuComponent_div_0_Template, 1, 0, "div", 0);
598
598
  i0.ɵɵelementStart(1, "div")(2, "div", 1);
599
599
  i0.ɵɵlistener("click", function PoMenuComponent_Template_div_click_2_listener() { return ctx.toggleMenuMobile(); });
@@ -602,7 +602,7 @@ export class PoMenuComponent extends PoMenuBaseComponent {
602
602
  i0.ɵɵelementStart(4, "div", 3)(5, "div", 4);
603
603
  i0.ɵɵlistener("mouseenter", function PoMenuComponent_Template_div_mouseenter_5_listener() { return ctx.onMouseEnter(); })("mouseleave", function PoMenuComponent_Template_div_mouseleave_5_listener() { return ctx.onMouseLeave(); });
604
604
  i0.ɵɵelementStart(6, "div", 5);
605
- i0.ɵɵtemplate(7, PoMenuComponent_div_7_Template, 2, 3, "div", 6)(8, PoMenuComponent_div_8_Template, 2, 1, "div", 7)(9, PoMenuComponent_po_menu_filter_9_Template, 1, 2, "po-menu-filter", 8);
605
+ i0.ɵɵtemplate(7, PoMenuComponent_div_7_Template, 2, 4, "div", 6)(8, PoMenuComponent_div_8_Template, 2, 1, "div", 7)(9, PoMenuComponent_po_menu_filter_9_Template, 1, 2, "po-menu-filter", 8);
606
606
  i0.ɵɵelementEnd();
607
607
  i0.ɵɵelementStart(10, "div", 9)(11, "div", 10)(12, "div", 11)(13, "nav", 12)(14, "ul", 13);
608
608
  i0.ɵɵtemplate(15, PoMenuComponent_li_15_Template, 2, 3, "li", 14)(16, PoMenuComponent_li_16_Template, 2, 16, "li", 15);
@@ -630,10 +630,10 @@ export class PoMenuComponent extends PoMenuBaseComponent {
630
630
  }
631
631
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoMenuComponent, [{
632
632
  type: Component,
633
- args: [{ selector: 'po-menu', providers: [PoMenuItemsService, PoMenuService], template: "<div *ngIf=\"mobileOpened\" class=\"po-menu-overlay\" (click)=\"toggleMenuMobile()\"></div>\n\n<div>\n <div class=\"po-menu-mobile po-clickable\" (click)=\"toggleMenuMobile()\">\n <po-icon p-icon=\"ICON_MENU\"></po-icon>\n </div>\n\n <div class=\"po-menu\" [attr.aria-expanded]=\"!collapsed\" [ngClass]=\"{ 'po-menu-animation': mobileOpened }\">\n <div class=\"po-menu-container\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <div class=\"po-menu-header\">\n <div *ngIf=\"logo || (shortLogo && enableCollapse)\" class=\"po-menu-header-container-logo\">\n <po-logo\n [p-class]=\"enableCollapse ? 'po-menu-short-logo' : 'po-menu-logo'\"\n [p-logo]=\"enableCollapse ? shortLogo || logo : logo\"\n [p-logo-alt]=\"logoAlt\"\n ></po-logo>\n </div>\n\n <div *ngIf=\"!enableCollapse && menuHeaderTemplate\" class=\"po-menu-header-template\">\n <ng-container *ngTemplateOutlet=\"menuHeaderTemplate.templateRef\"></ng-container>\n </div>\n\n <po-menu-filter\n *ngIf=\"filter\"\n [p-enable-collapse]=\"enableCollapse\"\n [p-loading]=\"filterLoading\"\n (p-filter)=\"debounceFilter($event)\"\n ></po-menu-filter>\n </div>\n\n <div class=\"po-menu-body\">\n <div class=\"po-menu-outer\">\n <div class=\"po-menu-inner\">\n <nav class=\"po-menu-nav\">\n <ul class=\"po-menu-list\" role=\"menu\">\n <li *ngIf=\"noData\" class=\"po-menu-list-item\" role=\"presentation\">\n <po-menu-item\n p-icon=\"ICON_INFO\"\n p-type=\"noData\"\n [p-level]=\"1\"\n [p-label]=\"literals.itemNotFound\"\n [p-short-label]=\"literals.itemNotFound\"\n ></po-menu-item>\n </li>\n <li\n *ngFor=\"let menu of filteredItems; let menuIndex = index\"\n class=\"po-menu-list-item\"\n role=\"presentation\"\n [attr.aria-level]=\"menu.level\"\n [class.po-menu-item-first]=\"menuIndex === 0\"\n >\n <po-menu-item\n [p-action]=\"menu.action\"\n [p-badge-alert]=\"menu.badgeAlert\"\n [p-badge-color]=\"menu.badge ? menu.badge.color : undefined\"\n [p-badge-value]=\"menu.badge ? menu.badge.value : undefined\"\n [p-collapsed-menu]=\"enableCollapse\"\n [p-icon]=\"allowIcons ? menu.icon : null\"\n [p-id]=\"menu.id\"\n [p-label]=\"menu.label\"\n [p-level]=\"menu.level\"\n [p-link]=\"menu.link\"\n [p-short-label]=\"menu.shortLabel\"\n [p-sub-items]=\"menu.subItems\"\n [p-type]=\"menu.type\"\n ></po-menu-item>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"hasFooter\" class=\"po-menu-footer\">\n <button\n class=\"po-menu-collapse-button-icon\"\n type=\"button\"\n [attr.aria-label]=\"enableCollapseButton ? literals.close : literals.open\"\n (click)=\"toggle()\"\n >\n <span *ngIf=\"enableCollapseButton\" aria-hidden=\"true\">{{ literals.close }}</span>\n\n <po-icon [p-icon]=\"enableCollapse ? 'ICON_MENU_OPEN' : 'ICON_MENU_CLOSE'\"></po-icon>\n </button>\n </div>\n </div>\n</div>\n" }]
633
+ args: [{ selector: 'po-menu', providers: [PoMenuItemsService, PoMenuService], template: "<div *ngIf=\"mobileOpened\" class=\"po-menu-overlay\" (click)=\"toggleMenuMobile()\"></div>\n\n<div>\n <div class=\"po-menu-mobile po-clickable\" (click)=\"toggleMenuMobile()\">\n <po-icon p-icon=\"ICON_MENU\"></po-icon>\n </div>\n\n <div class=\"po-menu\" [attr.aria-expanded]=\"!collapsed\" [ngClass]=\"{ 'po-menu-animation': mobileOpened }\">\n <div class=\"po-menu-container\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <div class=\"po-menu-header\">\n <div *ngIf=\"logo || (shortLogo && enableCollapse)\" class=\"po-menu-header-container-logo\">\n <po-logo\n [p-class]=\"enableCollapse ? 'po-menu-short-logo' : 'po-menu-logo'\"\n [p-logo]=\"enableCollapse ? shortLogo || logo : logo\"\n [p-logo-alt]=\"logoAlt\"\n [p-link]=\"logoLink\"\n ></po-logo>\n </div>\n\n <div *ngIf=\"!enableCollapse && menuHeaderTemplate\" class=\"po-menu-header-template\">\n <ng-container *ngTemplateOutlet=\"menuHeaderTemplate.templateRef\"></ng-container>\n </div>\n\n <po-menu-filter\n *ngIf=\"filter\"\n [p-enable-collapse]=\"enableCollapse\"\n [p-loading]=\"filterLoading\"\n (p-filter)=\"debounceFilter($event)\"\n ></po-menu-filter>\n </div>\n\n <div class=\"po-menu-body\">\n <div class=\"po-menu-outer\">\n <div class=\"po-menu-inner\">\n <nav class=\"po-menu-nav\">\n <ul class=\"po-menu-list\" role=\"menu\">\n <li *ngIf=\"noData\" class=\"po-menu-list-item\" role=\"presentation\">\n <po-menu-item\n p-icon=\"ICON_INFO\"\n p-type=\"noData\"\n [p-level]=\"1\"\n [p-label]=\"literals.itemNotFound\"\n [p-short-label]=\"literals.itemNotFound\"\n ></po-menu-item>\n </li>\n <li\n *ngFor=\"let menu of filteredItems; let menuIndex = index\"\n class=\"po-menu-list-item\"\n role=\"presentation\"\n [attr.aria-level]=\"menu.level\"\n [class.po-menu-item-first]=\"menuIndex === 0\"\n >\n <po-menu-item\n [p-action]=\"menu.action\"\n [p-badge-alert]=\"menu.badgeAlert\"\n [p-badge-color]=\"menu.badge ? menu.badge.color : undefined\"\n [p-badge-value]=\"menu.badge ? menu.badge.value : undefined\"\n [p-collapsed-menu]=\"enableCollapse\"\n [p-icon]=\"allowIcons ? menu.icon : null\"\n [p-id]=\"menu.id\"\n [p-label]=\"menu.label\"\n [p-level]=\"menu.level\"\n [p-link]=\"menu.link\"\n [p-short-label]=\"menu.shortLabel\"\n [p-sub-items]=\"menu.subItems\"\n [p-type]=\"menu.type\"\n ></po-menu-item>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"hasFooter\" class=\"po-menu-footer\">\n <button\n class=\"po-menu-collapse-button-icon\"\n type=\"button\"\n [attr.aria-label]=\"enableCollapseButton ? literals.close : literals.open\"\n (click)=\"toggle()\"\n >\n <span *ngIf=\"enableCollapseButton\" aria-hidden=\"true\">{{ literals.close }}</span>\n\n <po-icon [p-icon]=\"enableCollapse ? 'ICON_MENU_OPEN' : 'ICON_MENU_CLOSE'\"></po-icon>\n </button>\n </div>\n </div>\n</div>\n" }]
634
634
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.Router }, { type: i2.PoMenuItemsService }, { type: i3.PoMenuGlobalService }, { type: i4.PoMenuService }, { type: i5.PoLanguageService }], { menuHeaderTemplate: [{
635
635
  type: ContentChild,
636
636
  args: [PoMenuHeaderTemplateDirective, { static: true }]
637
637
  }] }); })();
638
638
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoMenuComponent, { className: "PoMenuComponent", filePath: "lib/components/po-menu/po-menu.component.ts", lineNumber: 120 }); })();
639
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tbWVudS9wby1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1tZW51L3BvLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBTWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRzFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBSTVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0lDMUIzRCwrQkFBK0U7SUFBN0Isd0tBQVMseUJBQWtCLEtBQUM7SUFBQyxpQkFBTTs7O0lBVTdFLCtCQUF5RjtJQUN2Riw4QkFJVztJQUNiLGlCQUFNOzs7SUFKRixjQUFrRTtJQUVsRSxBQURBLEFBREEsdUZBQWtFLGlGQUNkLDhCQUM5Qjs7O0lBS3hCLHdCQUFnRjs7O0lBRGxGLCtCQUFtRjtJQUNqRix5RkFBaUU7SUFDbkUsaUJBQU07OztJQURXLGNBQWdEO0lBQWhELHdFQUFnRDs7OztJQUdqRSww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LENBQUM7dVBBR2lCLGtCQUFrQjtrQkFBaEYsWUFBWTttQkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O2tGQURsRCxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgZ2V0Rm9ybWF0dGVkTGluaywgaXNNb2JpbGUsIG9wZW5FeHRlcm5hbExpbmssIHV1aWQgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLW1lbnUtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9NZW51SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL3BvLW1lbnUtaGVhZGVyLXRlbXBsYXRlL3BvLW1lbnUtaGVhZGVyLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQb01lbnVJdGVtIH0gZnJvbSAnLi9wby1tZW51LWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTWVudUl0ZW1GaWx0ZXJlZCB9IGZyb20gJy4vcG8tbWVudS1pdGVtL3BvLW1lbnUtaXRlbS1maWx0ZXJlZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9NZW51R2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tbWVudS1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBQb01lbnVJdGVtc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUtaXRlbXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb01lbnVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1tZW51LnNlcnZpY2UnO1xuXG5jb25zdCBwb01lbnVEZWJvdW5jZVRpbWUgPSA0MDA7XG5jb25zdCBwb01lbnVNaW5MZW5ndGggPSAzO1xuY29uc3QgcG9NZW51Um9vdExldmVsID0gMTtcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9NZW51QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEFwYXJlY2UgY29tcGxldG8gZW0gdGVsYXMgY29tIGxhcmd1cmEgbWFpb3IgcXVlIDEyMDBweCwgY2FzbyBjb250csOhcmlvIG8gbWVudSDDqSBlc2NvbmRpZG8gZSBjaGFtYWRvIHBvciBtZWlvIGRlIHVtIGJvdMOjby5cbiAqXG4gKiBPIG1lbnUgdGFtYsOpbSBwb2RlIHNlciBjb2xhcHNhZG8uIEVzc2Egb3DDp8OjbyDDqSBoYWJpbGl0YWRhIHF1YW5kbyB0b2RvcyBvcyBpdGVucyBkZSBwcmltZWlybyBuw612ZWwgcG9zc3XDrXJlbSDDrWNvbmVzIGUgdGV4dG9zIGN1cnRvcy5cbiAqIFNlIGNvbGFwc2Fkbywgc29tZW50ZSBvcyBpdGVucyBkZSBwcmltZWlybyBuw612ZWwgc2Vyw6NvIGV4aWJpZG9zIGUsIGNhc28gbyBpdGVtIHNlbGVjaW9uYWRvIHBvc3N1YSBzdWItbsOtdmVpcyxcbiAqIGVudMOjbyBvIG1lbnUgYWx0ZXJuYXLDoSBub3ZhbWVudGUgcGFyYSBvIGVzdGFkbyBhYmVydG8uXG4gKlxuICogRXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSBjdXN0b21pemFyIGEgbG9nb21hcmNhLCBxdWUgw6kgZXhpYmlkYSBuYSBwYXJ0ZSBzdXBlcmlvciBkbyBjb21wb25lbnRlLlxuICpcbiAqIEUgcGFyYSBhZGljaW9uYXIgdW0gY29udGXDumRvIHBlcnNvbmFsaXphZG8gZW50cmUgYSBsb2dvbWFyY2EgZSBvIGNhbXBvIGRlIGZpbHRybyxcbiAqIGJhc3RhIGFkaWNpb25hciBlc3RlIGNvbnRlw7pkbyBjb20gYSBkaXJldGl2YSBbKipwLW1lbnUtaGVhZGVyLXRlbXBsYXRlKipdKC9kb2N1bWVudGF0aW9uL3BvLW1lbnUtaGVhZGVyLXRlbXBsYXRlKS5cbiAqXG4gKiBDYXNvIHV0aWxpemFyIG8gZmlsdHJvIGRlIG1lbnVzLCDDqSBwb3Nzw612ZWwgcmVhbGl6YXIgYnVzY2FzIGVtIHNlcnZpw6dvLCBhcGVuYXMgaW5mb3JtYW5kbyBhIFVSTCBkbyBzZXJ2acOnbyBvdSBhIGluc3TDom5jaWEgZGVcbiAqIHVtIHNlcnZpw6dvIGN1c3RvbWl6YWRvIGltcGxlbWVudGFuZG8gYSBpbnRlcmZhY2UgYFBvTWVudUZpbHRlcmAuXG4gKlxuICogUGFyYSBvIG1lbnUgZnVuY2lvbmFyIGNvcnJldGFtZW50ZSDDqSBuZWNlc3PDoXJpbyBpbXBvcnRhciBvIGBSb3V0ZXJNb2R1bGVgIGUgYFJvdXRlc2AgZG8gbcOzZHVsbyBwcmluY2lwYWwgZGVcbiAqICBzdWEgYXBsaWNhw6fDo286XG4gKlxuICogYGBgXG4gKiBpbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4gKlxuICogLi4uXG4gKlxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogW1xuICogICAgIFJvdXRlck1vZHVsZSxcbiAqICAgICBSb3V0ZXMsXG4gKiAgICAgLi4uXG4gKiAgICAgUG9Nb2R1bGUsXG4gKiAgICAgLi4uXG4gKiAgIF0sXG4gKiAgIGRlY2xhcmF0aW9uczogW1xuICogICAgIEFwcENvbXBvbmVudFxuICogICBdLFxuICogICBwcm92aWRlcnM6IFtdLFxuICogICBib290c3RyYXA6IFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7IH1cbiAqIGBgYFxuICpcbiAqIEFsw6ltIGRpc3NvIMOpIG5lY2Vzc8OhcmlvIGNyaWFyIHVtIG3Ds2R1bG8gY29uZmlndXJhbmRvIGFzIHJvdGFzIGRhIGFwbGljYcOnw6NvLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiBpbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4gKlxuICogaW1wb3J0IHsgSGVsbG9Xb3JsZENvbXBvbmVudCB9IGZyb20gJy4vaGVsbG8td29ybGQvaGVsbG8td29ybGQuY29tcG9uZW50JztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge3BhdGg6ICdoZWxsby13b3JsZCcsIGNvbXBvbmVudDogSGVsbG9Xb3JsZENvbXBvbmVudH1cbiAqIF07XG4gKlxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JSb290KHJvdXRlcywge3VzZUhhc2g6IHRydWV9KV0sXG4gKiAgIGV4cG9ydHM6IFtSb3V0ZXJNb2R1bGVdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcFJvdXRpbmdNb2R1bGUge31cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLW1lbnUtYmFzaWNcIiB0aXRsZT1cIlBPIE1lbnUgQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWJhc2ljL3NhbXBsZS1wby1tZW51LWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWJhc2ljL3NhbXBsZS1wby1tZW51LWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLW1lbnUtbGFic1wiIHRpdGxlPVwiUE8gTWVudSBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1sYWJzL3NhbXBsZS1wby1tZW51LWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtbGFicy9zYW1wbGUtcG8tbWVudS1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzXCIgdGl0bGU9XCJQTyBNZW51IC0gSHVtYW4gUmVzb3VyY2VzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMvc2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWh1bWFuLXJlc291cmNlcy9zYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWh1bWFuLXJlc291cmNlcy9zYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1BvTWVudUl0ZW1zU2VydmljZSwgUG9NZW51U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgUG9NZW51Q29tcG9uZW50IGV4dGVuZHMgUG9NZW51QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBEb0NoZWNrIHtcbiAgQENvbnRlbnRDaGlsZChQb01lbnVIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgbWVudUhlYWRlclRlbXBsYXRlOiBQb01lbnVIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICBhY3RpdmVNZW51SXRlbTogUG9NZW51SXRlbTtcbiAgY29sbGFwc2VkTW9iaWxlOiBib29sZWFuO1xuICBmaWx0ZXJMb2FkaW5nID0gZmFsc2U7XG4gIGdyb3VwZWRNZW51SXRlbTogUG9NZW51SXRlbTtcbiAgaWQgPSB1dWlkKCk7XG4gIGxpbmtBY3RpdmU6IHN0cmluZztcbiAgbW9iaWxlT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIG5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0aW1lb3V0RmlsdGVyOiBhbnk7XG5cbiAgcHJpdmF0ZSBmaWx0ZXJpbmdJdGVtczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1lbnVJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1lbnVQcmV2aW91cyA9IG51bGw7XG4gIHByaXZhdGUgcmVzaXplTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBpdGVtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcm91dGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG1lbnVJdGVtc1NlcnZpY2U6IFBvTWVudUl0ZW1zU2VydmljZSxcbiAgICBtZW51R2xvYmFsU2VydmljZTogUG9NZW51R2xvYmFsU2VydmljZSxcbiAgICBtZW51U2VydmljZTogUG9NZW51U2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKG1lbnVHbG9iYWxTZXJ2aWNlLCBtZW51U2VydmljZSwgbGFuZ3VhZ2VTZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzQWN0aXZlSXRlbU1lbnVTdWJNZW51KCkge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZU1lbnVJdGVtWydsZXZlbCddID4gdGhpcy5ncm91cGVkTWVudUl0ZW1bJ2xldmVsJ107XG4gIH1cblxuICBnZXQgZW5hYmxlQ29sbGFwc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWQgJiYgIXRoaXMuY29sbGFwc2VkTW9iaWxlO1xuICB9XG5cbiAgZ2V0IGVuYWJsZUNvbGxhcHNlQnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLmFsbG93Q29sbGFwc2VNZW51ICYmICF0aGlzLmNvbGxhcHNlZCAmJiAhdGhpcy5tb2JpbGVPcGVuZWQ7XG4gIH1cblxuICBnZXQgaGFzRm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZUNvbGxhcHNlQnV0dG9uIHx8IHRoaXMuZW5hYmxlQ29sbGFwc2U7XG4gIH1cblxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dDb2xsYXBzZU1lbnUgJiYgdGhpcy5jb2xsYXBzZWQ7XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyaW5nSXRlbXMgJiYgdGhpcy5maWx0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51Q3VycmVudCA9IHRoaXMuc3RyaW5naWZ5KHRoaXMubWVudXMpO1xuXG4gICAgaWYgKHRoaXMubWVudVByZXZpb3VzICE9PSBtZW51Q3VycmVudCB8fCAhdGhpcy5tZW51SW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlTWVudSgpO1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbGxhcHNlQ2xhc3MoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLml0ZW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJvdXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy5yZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHRoaXMubWVudUdsb2JhbFNlcnZpY2Uuc2VuZFJlbW92ZWRBcHBsaWNhdGlvbk1lbnUodGhpcy5pZCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmliZVRvTWVudUl0ZW0oKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvUm91dGUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm1lbnVHbG9iYWxTZXJ2aWNlLnNlbmRBcHBsaWNhdGlvbk1lbnUodGhpcyk7XG4gIH1cblxuICBhY3RpdmF0ZU1lbnVCeVVybCh1cmxQYXRoOiBzdHJpbmcsIG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPikge1xuICAgIGlmIChtZW51cykge1xuICAgICAgY29uc3QgdXJsUGF0aFdpdGhvdXRMYXN0RnJhZ21lbnQgPSB1cmxQYXRoLnN1YnN0cigwLCB1cmxQYXRoLmxhc3RJbmRleE9mKCcvJykpO1xuICAgICAgcmV0dXJuIG1lbnVzLnNvbWUobWVudSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZE1lbnVMaW5rID0gZ2V0Rm9ybWF0dGVkTGluayhtZW51LmxpbmspO1xuICAgICAgICBjb25zdCBtZW51TGlua1BhdGggPSBgJHt1cmxQYXRoV2l0aG91dExhc3RGcmFnbWVudH0ke2Zvcm1hdHRlZE1lbnVMaW5rLnN1YnN0cihcbiAgICAgICAgICBmb3JtYXR0ZWRNZW51TGluay5sYXN0SW5kZXhPZignLycpXG4gICAgICAgICl9YDtcblxuICAgICAgICBpZiAobWVudUxpbmtQYXRoID09PSB1cmxQYXRoICYmIG1lbnVMaW5rUGF0aCA9PT0gZm9ybWF0dGVkTWVudUxpbmspIHtcbiAgICAgICAgICB0aGlzLmxpbmtBY3RpdmUgPSBmb3JtYXR0ZWRNZW51TGluaztcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlTWVudUl0ZW0obWVudSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVNZW51QnlVcmwodXJsUGF0aCwgbWVudS5zdWJJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQWN0aXZlTWVudUJ5VXJsKHVybFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5saW5rQWN0aXZlIHx8IHRoaXMubGlua0FjdGl2ZSAhPT0gdXJsUGF0aCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVCeVVybCh1cmxQYXRoLCB0aGlzLm1lbnVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogPGEgaWQ9XCJjb2xhcHNlTWV0aG9kXCI+PC9hPlxuICAgKlxuICAgKiAqTcOpdG9kbyBwYXJhIGNvbGFwc2FyIChyZXRyYWlyKSBvIG1lbnUuXG4gICAqL1xuICBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLnZhbGlkYXRlVG9nZ2xlTWVudSh0cnVlKTtcbiAgfVxuXG4gIGRlYm91bmNlRmlsdGVyKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dEZpbHRlcik7XG5cbiAgICB0aGlzLnRpbWVvdXRGaWx0ZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyUHJvY2VzcyhmaWx0ZXIpO1xuICAgIH0sIHBvTWVudURlYm91bmNlVGltZSk7XG4gIH1cblxuICAvKipcbiAgICogPGEgaWQ9XCJleHBhbmRNZXRob2RcIj48L2E+XG4gICAqXG4gICAqICpNw6l0b2RvIHBhcmEgZXhwYW5kaXIgKGF1bWVudGFyKSBvIG1lbnUuXG4gICAqL1xuICBleHBhbmQoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVRvZ2dsZU1lbnUoZmFsc2UpO1xuICB9XG5cbiAgc3Vic2NyaWJlVG9NZW51SXRlbSgpIHtcbiAgICB0aGlzLml0ZW1TdWJzY3JpcHRpb24gPSB0aGlzLm1lbnVJdGVtc1NlcnZpY2UucmVjZWl2ZUZyb21DaGlsZE1lbnVDbGlja2VkKCkuc3Vic2NyaWJlKChtZW51OiBQb01lbnVJdGVtKSA9PiB7XG4gICAgICB0aGlzLmNsaWNrTWVudUl0ZW0obWVudSk7XG4gICAgfSk7XG4gIH1cblxuICBzdWJzY3JpYmVUb1JvdXRlKCkge1xuICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fCB2YWwgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIGNvbnN0IHVybFJvdXRlciA9IHRoaXMuY2hlY2tpbmdSb3V0ZXJDaGlsZHJlbkZyYWdtZW50cygpO1xuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlTWVudUJ5VXJsKHVybFJvdXRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogPGEgaWQ9XCJ0b2dnbGVNZXRob2RcIj48L2E+XG4gICAqICpNw6l0b2RvIHF1ZSBjb2xhcHNhIGUgZXhwYW5kZSBvIG1lbnUgYWx0ZXJuYWRhbWVudGUuXG4gICAqXG4gICAqID4gKk9zIG3DqXRvZG9zIGFwZW5hcyB2w6NvIGNvbGFwc2FyL2V4cGFuZGlyIG8gbWVudSBzZTpcbiAgICogIC0gVG9kb3Mgb3MgaXRlbnMgZGUgbWVudSB0aXZlcmVtIHZhbG9yIG5hcyBwcm9wcmllZGFkZXMgYGljb25gIGUgYHNob3J0TGFiZWxgLlxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMudmFsaWRhdGVUb2dnbGVNZW51KCF0aGlzLmNvbGxhcHNlZCk7XG4gIH1cblxuICB0b2dnbGVNZW51TW9iaWxlKCk6IHZvaWQge1xuICAgIHRoaXMubW9iaWxlT3BlbmVkID0gIXRoaXMubW9iaWxlT3BlbmVkO1xuICAgIHRoaXMuY29sbGFwc2VkTW9iaWxlID0gdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5tb2JpbGVPcGVuZWQ7XG5cbiAgICB0aGlzLnZhbGlkYXRlQ29sbGFwc2VDbGFzcyh0aGlzLmNvbGxhcHNlZE1vYmlsZSk7XG5cbiAgICBpZiAoaXNNb2JpbGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vYmlsZU9wZW5lZCkge1xuICAgICAgdGhpcy5jcmVhdGVSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uTW91c2VFbnRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hdXRvbWF0aWNUb2dnbGUpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmFsbG93Q29sbGFwc2VIb3ZlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hbGxvd0NvbGxhcHNlSG92ZXIgJiYgdGhpcy5hdXRvbWF0aWNUb2dnbGUpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tpbmdSb3V0ZXJDaGlsZHJlbkZyYWdtZW50cygpIHtcbiAgICBjb25zdCBjaGlsZHJlblByaW1hcnkgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpLnJvb3QuY2hpbGRyZW5bJ3ByaW1hcnknXTtcblxuICAgIHJldHVybiBjaGlsZHJlblByaW1hcnkgPyBgLyR7Y2hpbGRyZW5QcmltYXJ5LnNlZ21lbnRzLm1hcChpdCA9PiBpdC5wYXRoKS5qb2luKCcvJyl9YCA6ICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQ29sbGFwc2VDbGFzcyhjb2xsYXBzZWRNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xuICAgIHRoaXMucmVuZGVyZXJbdGhpcy5pc0NvbGxhcHNlZCAmJiAhY29sbGFwc2VkTW9iaWxlID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHdyYXBwZXIsICdwby1jb2xsYXBzZWQtbWVudScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZUNvbGxhcHNlU3ViTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5jbGVhckdyb3VwTWVudUlmRmlyc3RMZXZlbCh0aGlzLmFjdGl2ZU1lbnVJdGVtKTtcblxuICAgIGlmICghdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hY3RpdmVNZW51SXRlbVsnbGV2ZWwnXSA+IHBvTWVudVJvb3RMZXZlbCAmJiB0aGlzLmlzQWN0aXZlSXRlbU1lbnVTdWJNZW51KSB7XG4gICAgICB0aGlzLm9wZW5QYXJlbnRNZW51KHRoaXMuYWN0aXZlTWVudUl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVNZW51SXRlbShtZW51OiBQb01lbnVJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9IG1lbnU7XG4gICAgdGhpcy5saW5rQWN0aXZlID0gbWVudS5saW5rO1xuXG4gICAgaWYgKHRoaXMuYWN0aXZlTWVudUl0ZW1bJ2xldmVsJ10gPiBwb01lbnVSb290TGV2ZWwpIHtcbiAgICAgIHRoaXMub3BlblBhcmVudE1lbnUodGhpcy5hY3RpdmVNZW51SXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJdGVtc1NlcnZpY2Uuc2VuZFRvQ2hpbGRNZW51Q2xpY2tlZCh7XG4gICAgICBhY3RpdmU6IHRoaXMuYWN0aXZlTWVudUl0ZW0sXG4gICAgICBncm91cGVkOiB0aGlzLmdyb3VwZWRNZW51SXRlbSxcbiAgICAgIGFjdGl2YXRlZEJ5Um91dGU6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXJlU3ViTWVudXMobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+KSB7XG4gICAgcmV0dXJuIG1lbnVzLmV2ZXJ5KG1lbnUgPT4gbWVudVsnbGV2ZWwnXSA+IHBvTWVudVJvb3RMZXZlbCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyR3JvdXBNZW51SWZGaXJzdExldmVsKGFjdGl2ZU1lbnVJdGVtOiBQb01lbnVJdGVtKSB7XG4gICAgaWYgKGFjdGl2ZU1lbnVJdGVtWydsZXZlbCddID09PSBwb01lbnVSb290TGV2ZWwpIHtcbiAgICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tNZW51SXRlbShtZW51OiBQb01lbnVJdGVtKSB7XG4gICAgaWYgKG1lbnUuYWN0aW9uKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVNZW51QWN0aW9uKG1lbnUpO1xuICAgIH1cblxuICAgIGlmIChtZW51Wyd0eXBlJ10gPT09ICdleHRlcm5hbExpbmsnKSB7XG4gICAgICBvcGVuRXh0ZXJuYWxMaW5rKG1lbnUubGluayk7XG4gICAgfSBlbHNlIGlmIChtZW51Wyd0eXBlJ10gPT09ICdpbnRlcm5hbExpbmsnKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTWVudUl0ZW0obWVudSk7XG4gICAgfSBlbHNlIGlmIChtZW51Wyd0eXBlJ10gPT09ICdzdWJJdGVtcycpIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcmluZ0l0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ncm91cE1lbnVJdGVtKG1lbnUpO1xuICAgIH1cblxuICAgIGlmIChtZW51Wyd0eXBlJ10gIT09ICdzdWJJdGVtcycpIHtcbiAgICAgIHRoaXMubW9iaWxlT3BlbmVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9NZW51SXRlbUZpbHRlcmVkKG1lbnVJdGVtOiBhbnkgPSB7IGxhYmVsOiAnJywgbGluazogJycsIGFjdGlvbjogKCkgPT4ge30gfSk6IFBvTWVudUl0ZW1GaWx0ZXJlZCB7XG4gICAgY29uc3QgeyBsYWJlbCwgbGluaywgYWN0aW9uIH0gPSBtZW51SXRlbTtcblxuICAgIGNvbnN0IG1lbnVJdGVtRmlsdGVyZWQ6IFBvTWVudUl0ZW1GaWx0ZXJlZCA9IHsgbGFiZWwsIGxpbmssIGFjdGlvbiB9O1xuXG4gICAgdGhpcy5zZXRNZW51SXRlbVByb3BlcnRpZXMobWVudUl0ZW1GaWx0ZXJlZCk7XG5cbiAgICByZXR1cm4gbWVudUl0ZW1GaWx0ZXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVzaXplTGlzdGVuZXIoKSB7XG4gICAgdGhpcy5yZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgdGhpcy50b2dnbGVSZXNpemUoKTtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZU1lbnVBY3Rpb24obWVudTogUG9NZW51SXRlbSk6IHZvaWQge1xuICAgIG1lbnUuYWN0aW9uKG1lbnUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJJdGVtcyhmaWx0ZXI6IHN0cmluZykge1xuICAgIGNvbnN0IHRyaW1GaWx0ZXIgPSBmaWx0ZXIgJiYgZmlsdGVyLnRyaW0oKTtcblxuICAgIGlmICh0cmltRmlsdGVyKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbXTtcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZVxuICAgICAgICA/IGF3YWl0IHRoaXMuZmlsdGVyT25TZXJ2aWNlKHRyaW1GaWx0ZXIpXG4gICAgICAgIDogdGhpcy5maWx0ZXJMb2NhbEl0ZW1zKHRyaW1GaWx0ZXIpO1xuICAgICAgdGhpcy5maWx0ZXJpbmdJdGVtcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLm1lbnVzXTtcbiAgICAgIHRoaXMuZmlsdGVyaW5nSXRlbXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckxvY2FsSXRlbXMoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gW107XG5cbiAgICB0aGlzLmZpbmRJdGVtcyh0aGlzLm1lbnVzLCBmaWx0ZXIudG9Mb3dlckNhc2UoKSwgZmlsdGVyZWRJdGVtcyk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyUHJvY2VzcyhmaWx0ZXI6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyTG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmZpbHRlckl0ZW1zKGZpbHRlcilcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zaG93Tm9EYXRhKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLm1lbnVJdGVtc1NlcnZpY2Uuc2VuZFRvQ2hpbGRNZW51Q2xpY2tlZCh7IGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSwgZ3JvdXBlZDogdGhpcy5ncm91cGVkTWVudUl0ZW0gfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJPblNlcnZpY2Uoc2VhcmNoOiBzdHJpbmcgPSAnJykge1xuICAgIGlmIChzZWFyY2gubGVuZ3RoID49IHBvTWVudU1pbkxlbmd0aCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZVxuICAgICAgICAuZ2V0RmlsdGVyZWREYXRhKHNlYXJjaCwgdGhpcy5wYXJhbXMpXG4gICAgICAgIC5waXBlKG1hcChtZW51SXRlbXNGaWx0ZXJlZCA9PiBtZW51SXRlbXNGaWx0ZXJlZC5tYXAobWVudUl0ZW0gPT4gdGhpcy5jb252ZXJ0VG9NZW51SXRlbUZpbHRlcmVkKG1lbnVJdGVtKSkpKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSXRlbXM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSXRlbXMobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+LCBmaWx0ZXI6IHN0cmluZywgZmlsdGVyZWRJdGVtczogQXJyYXk8YW55Pikge1xuICAgIG1lbnVzLmZvckVhY2gobWVudSA9PiB7XG4gICAgICBjb25zdCBoYXNBY3Rpb24gPSB0aGlzLnNlYXJjaFRyZWVJdGVtcyA/IHRoaXMuc2VhcmNoVHJlZUl0ZW1zIDogbWVudS5hY3Rpb24gfHwgbWVudS5saW5rO1xuICAgICAgY29uc3QgbGFiZWxIYXNGaWx0ZXIgPSBtZW51LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcblxuICAgICAgaWYgKGxhYmVsSGFzRmlsdGVyICYmIGhhc0FjdGlvbikge1xuICAgICAgICBjb25zdCBuZXdNZW51ID0geyAuLi5tZW51IH07XG5cbiAgICAgICAgaWYgKG5ld01lbnUuc3ViSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgIGlmICghdGhpcy5zZWFyY2hUcmVlSXRlbXMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdNZW51LnN1Ykl0ZW1zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdNZW51Wyd0eXBlJ10gPSB0aGlzLnNldE1lbnVUeXBlKG5ld01lbnUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyZWRJdGVtcy5wdXNoKG5ld01lbnUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVudS5zdWJJdGVtcykge1xuICAgICAgICB0aGlzLmZpbmRJdGVtcyhtZW51LnN1Ykl0ZW1zLCBmaWx0ZXIsIGZpbHRlcmVkSXRlbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50KG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPiwgbWVudUl0ZW06IFBvTWVudUl0ZW0pOiBQb01lbnVJdGVtIHtcbiAgICBjb25zdCBnZXRQYXJlbnQgPSBmdW5jdGlvbiAobWVudUl0ZW1zOiBBcnJheTxQb01lbnVJdGVtPiwgaWQpIHtcbiAgICAgIGlmIChtZW51SXRlbXMpIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1lbnVJdGVtcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBtZW51ID0gbWVudUl0ZW1zW2luZGV4XTtcbiAgICAgICAgICBpZiAobWVudS5zdWJJdGVtcyAmJiBtZW51LnN1Ykl0ZW1zLmZpbmQoc3ViSXRlbSA9PiBzdWJJdGVtWydpZCddID09PSBpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtZW51O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3VuZCA9IGdldFBhcmVudChtZW51LnN1Ykl0ZW1zLCBpZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0UGFyZW50KG1lbnVzLCBtZW51SXRlbVsnaWQnXSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRSb290UGFyZW50KG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPiwgbWVudTogUG9NZW51SXRlbSk6IFBvTWVudUl0ZW0ge1xuICAgIGNvbnN0IGZpbmRQYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQ7XG5cbiAgICBjb25zdCBnZXRSb290UGFyZW50ID0gZnVuY3Rpb24gKG1lbnVJdGVtczogQXJyYXk8UG9NZW51SXRlbT4sIG1lbnVJdGVtKTogUG9NZW51SXRlbSB7XG4gICAgICBsZXQgcGFyZW50ID0gZmluZFBhcmVudChtZW51SXRlbXMsIG1lbnVJdGVtKTtcblxuICAgICAgaWYgKHBhcmVudFsnbGV2ZWwnXSAhPT0gcG9NZW51Um9vdExldmVsKSB7XG4gICAgICAgIHBhcmVudCA9IGdldFJvb3RQYXJlbnQobWVudUl0ZW1zLCBwYXJlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuICAgIHJldHVybiBnZXRSb290UGFyZW50KG1lbnVzLCBtZW51KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlTWVudVBhcmVudChtZW51czogQXJyYXk8UG9NZW51SXRlbT4sIGFjdGl2ZU1lbnVJdGVtOiBQb01lbnVJdGVtLCBncm91cGVkTWVudUl0ZW06IFBvTWVudUl0ZW0pIHtcbiAgICBpZiAodGhpcy5hcmVTdWJNZW51cyhbZ3JvdXBlZE1lbnVJdGVtLCBhY3RpdmVNZW51SXRlbV0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5maW5kUm9vdFBhcmVudChtZW51cywgYWN0aXZlTWVudUl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBNZW51SXRlbShtZW51OiBQb01lbnVJdGVtKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICB0aGlzLnRvZ2dsZU1lbnVDb2xsYXBzZSgpO1xuICAgIH1cblxuICAgIG1lbnVbJ2lzT3BlbmVkJ10gPSAhbWVudVsnaXNPcGVuZWQnXTtcbiAgICB0aGlzLmdyb3VwZWRNZW51SXRlbSA9IG1lbnU7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmFjdGl2ZU1lbnVJdGVtICYmXG4gICAgICBtZW51Wydpc09wZW5lZCddICYmXG4gICAgICB0aGlzLmlzQWN0aXZlSXRlbU1lbnVTdWJNZW51ICYmXG4gICAgICB0aGlzLmlzUm9vdE1lbnVFcXVhbEdyb3VwZWRNZW51KHRoaXMubWVudXMsIHRoaXMuYWN0aXZlTWVudUl0ZW0sIG1lbnUpXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTWVudUl0ZW0odGhpcy5hY3RpdmVNZW51SXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5tZW51SXRlbXNTZXJ2aWNlLnNlbmRUb0NoaWxkTWVudUNsaWNrZWQoeyBhY3RpdmU6IHRoaXMuYWN0aXZlTWVudUl0ZW0sIGdyb3VwZWQ6IHRoaXMuZ3JvdXBlZE1lbnVJdGVtIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jvb3RNZW51RXF1YWxHcm91cGVkTWVudShcbiAgICBtZW51czogQXJyYXk8UG9NZW51SXRlbT4sXG4gICAgYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW0sXG4gICAgZ3JvdXBlZE1lbnVJdGVtOiBQb01lbnVJdGVtXG4gICkge1xuICAgIGNvbnN0IGFjdGl2ZU1lbnVSb290UGFyZW50ID0gdGhpcy5maW5kUm9vdFBhcmVudChtZW51cywgYWN0aXZlTWVudUl0ZW0pO1xuICAgIHJldHVybiBhY3RpdmVNZW51Um9vdFBhcmVudFsnaWQnXSA9PT0gZ3JvdXBlZE1lbnVJdGVtWydpZCddO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUGFyZW50TWVudShjaGlsZE1lbnU6IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQodGhpcy5tZW51cywgY2hpbGRNZW51KTtcbiAgICBwYXJlbnRbJ2lzT3BlbmVkJ10gPSB0cnVlO1xuICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtID0gcGFyZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93Tm9EYXRhKCkge1xuICAgIHRoaXMubm9EYXRhID0gdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPik6IHN0cmluZyB7XG4gICAgLy8gbsOjbyBmYXogbyBzdHJpbmdpZnkgZGEgcHJvcHJpZWRhZGUgaWNvbiwgcG9pcyBwb2RlIGNvbnRlciBvYmpldG8gY29tcGxleG8gZSBkaXNwYXJhciB1bSBlcnJvLlxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLm1lbnVzLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGtleSAhPT0gJ2ljb24nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlR3JvdXBlZE1lbnVJdGVtKCkge1xuICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtWydpc09wZW5lZCddID0gIXRoaXMuY29sbGFwc2VkICYmIHRoaXMuYWxsb3dDb2xsYXBzZU1lbnU7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZU1lbnVDb2xsYXBzZShjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuY29sbGFwc2VkID0gY29sbGFwc2VkO1xuXG4gICAgaWYgKHRoaXMuZ3JvdXBlZE1lbnVJdGVtICYmIHRoaXMuYWN0aXZlTWVudUl0ZW0pIHtcbiAgICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtID1cbiAgICAgICAgdGhpcy5nZXRBY3RpdmVNZW51UGFyZW50KHRoaXMubWVudXMsIHRoaXMuYWN0aXZlTWVudUl0ZW0sIHRoaXMuZ3JvdXBlZE1lbnVJdGVtKSB8fCB0aGlzLmdyb3VwZWRNZW51SXRlbTtcbiAgICAgIHRoaXMudG9nZ2xlR3JvdXBlZE1lbnVJdGVtKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlTWVudUl0ZW0pIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVDb2xsYXBzZVN1Yk1lbnVJdGVtKCk7XG4gICAgICB0aGlzLm1lbnVJdGVtc1NlcnZpY2Uuc2VuZFRvQ2hpbGRNZW51Q2xpY2tlZCh7XG4gICAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSxcbiAgICAgICAgZ3JvdXBlZDogdGhpcy5ncm91cGVkTWVudUl0ZW0sXG4gICAgICAgIGFjdGl2YXRlZEJ5Um91dGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTWVudSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVSZXNpemUoKSB7XG4gICAgaWYgKHRoaXMubW9iaWxlT3BlbmVkKSB7XG4gICAgICB0aGlzLm1vYmlsZU9wZW5lZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jb2xsYXBzZWRNb2JpbGUgPSBmYWxzZTtcbiAgICAgIHRoaXMudmFsaWRhdGVDb2xsYXBzZUNsYXNzKHRoaXMuY29sbGFwc2VkTW9iaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVG9nZ2xlTWVudShjb2xsYXBzZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuYWxsb3dDb2xsYXBzZU1lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZU1lbnVDb2xsYXBzZShjb2xsYXBzZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNZW51KCkge1xuICAgIHRoaXMubWVudUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldE1lbnVFeHRyYVByb3BlcnRpZXMoKTtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbLi4udGhpcy5tZW51c107XG4gICAgdGhpcy5tZW51UHJldmlvdXMgPSB0aGlzLnN0cmluZ2lmeSh0aGlzLm1lbnVzKTtcbiAgICB0aGlzLnZhbGlkYXRlTWVudXModGhpcy5tZW51cyk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJtb2JpbGVPcGVuZWRcIiBjbGFzcz1cInBvLW1lbnUtb3ZlcmxheVwiIChjbGljayk9XCJ0b2dnbGVNZW51TW9iaWxlKClcIj48L2Rpdj5cblxuPGRpdj5cbiAgPGRpdiBjbGFzcz1cInBvLW1lbnUtbW9iaWxlIHBvLWNsaWNrYWJsZVwiIChjbGljayk9XCJ0b2dnbGVNZW51TW9iaWxlKClcIj5cbiAgICA8cG8taWNvbiBwLWljb249XCJJQ09OX01FTlVcIj48L3BvLWljb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwby1tZW51XCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhY29sbGFwc2VkXCIgW25nQ2xhc3NdPVwieyAncG8tbWVudS1hbmltYXRpb24nOiBtb2JpbGVPcGVuZWQgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LWNvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcigpXCIgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LWhlYWRlclwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibG9nbyB8fCAoc2hvcnRMb2dvICYmIGVuYWJsZUNvbGxhcHNlKVwiIGNsYXNzPVwicG8tbWVudS1oZWFkZXItY29udGFpbmVyLWxvZ29cIj5cbiAgICAgICAgICA8cG8tbG9nb1xuICAgICAgICAgICAgW3AtY2xhc3NdPVwiZW5hYmxlQ29sbGFwc2UgPyAncG8tbWVudS1zaG9ydC1sb2dvJyA6ICdwby1tZW51LWxvZ28nXCJcbiAgICAgICAgICAgIFtwLWxvZ29dPVwiZW5hYmxlQ29sbGFwc2UgPyBzaG9ydExvZ28gfHwgbG9nbyA6IGxvZ29cIlxuICAgICAgICAgICAgW3AtbG9nby1hbHRdPVwibG9nb0FsdFwiXG4gICAgICAgICAgPjwvcG8tbG9nbz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFlbmFibGVDb2xsYXBzZSAmJiBtZW51SGVhZGVyVGVtcGxhdGVcIiBjbGFzcz1cInBvLW1lbnUtaGVhZGVyLXRlbXBsYXRlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cG8tbWVudS1maWx0ZXJcbiAgICAgICAgICAqbmdJZj1cImZpbHRlclwiXG4gICAgICAgICAgW3AtZW5hYmxlLWNvbGxhcHNlXT1cImVuYWJsZUNvbGxhcHNlXCJcbiAgICAgICAgICBbcC1sb2FkaW5nXT1cImZpbHRlckxvYWRpbmdcIlxuICAgICAgICAgIChwLWZpbHRlcik9XCJkZWJvdW5jZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgPjwvcG8tbWVudS1maWx0ZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG8tbWVudS1vdXRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LWlubmVyXCI+XG4gICAgICAgICAgICA8bmF2IGNsYXNzPVwicG8tbWVudS1uYXZcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwicG8tbWVudS1saXN0XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJub0RhdGFcIiBjbGFzcz1cInBvLW1lbnUtbGlzdC1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPHBvLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICBwLWljb249XCJJQ09OX0lORk9cIlxuICAgICAgICAgICAgICAgICAgICBwLXR5cGU9XCJub0RhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbcC1sZXZlbF09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtbGFiZWxdPVwibGl0ZXJhbHMuaXRlbU5vdEZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgW3Atc2hvcnQtbGFiZWxdPVwibGl0ZXJhbHMuaXRlbU5vdEZvdW5kXCJcbiAgICAgICAgICAgICAgICAgID48L3BvLW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1lbnUgb2YgZmlsdGVyZWRJdGVtczsgbGV0IG1lbnVJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tbWVudS1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxldmVsXT1cIm1lbnUubGV2ZWxcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnBvLW1lbnUtaXRlbS1maXJzdF09XCJtZW51SW5kZXggPT09IDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwby1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW3AtYWN0aW9uXT1cIm1lbnUuYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtYmFkZ2UtYWxlcnRdPVwibWVudS5iYWRnZUFsZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW3AtYmFkZ2UtY29sb3JdPVwibWVudS5iYWRnZSA/IG1lbnUuYmFkZ2UuY29sb3IgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcC1iYWRnZS12YWx1ZV09XCJtZW51LmJhZGdlID8gbWVudS5iYWRnZS52YWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWNvbGxhcHNlZC1tZW51XT1cImVuYWJsZUNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtaWNvbl09XCJhbGxvd0ljb25zID8gbWVudS5pY29uIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWlkXT1cIm1lbnUuaWRcIlxuICAgICAgICAgICAgICAgICAgICBbcC1sYWJlbF09XCJtZW51LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtbGV2ZWxdPVwibWVudS5sZXZlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWxpbmtdPVwibWVudS5saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW3Atc2hvcnQtbGFiZWxdPVwibWVudS5zaG9ydExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3Atc3ViLWl0ZW1zXT1cIm1lbnUuc3ViSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBbcC10eXBlXT1cIm1lbnUudHlwZVwiXG4gICAgICAgICAgICAgICAgICA+PC9wby1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImhhc0Zvb3RlclwiIGNsYXNzPVwicG8tbWVudS1mb290ZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJwby1tZW51LWNvbGxhcHNlLWJ1dHRvbi1pY29uXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZW5hYmxlQ29sbGFwc2VCdXR0b24gPyBsaXRlcmFscy5jbG9zZSA6IGxpdGVyYWxzLm9wZW5cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImVuYWJsZUNvbGxhcHNlQnV0dG9uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3sgbGl0ZXJhbHMuY2xvc2UgfX08L3NwYW4+XG5cbiAgICAgICAgPHBvLWljb24gW3AtaWNvbl09XCJlbmFibGVDb2xsYXBzZSA/ICdJQ09OX01FTlVfT1BFTicgOiAnSUNPTl9NRU5VX0NMT1NFJ1wiPjwvcG8taWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
639
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tbWVudS9wby1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1tZW51L3BvLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBTWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRzFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBSTVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0lDMUIzRCwrQkFBK0U7SUFBN0Isd0tBQVMseUJBQWtCLEtBQUM7SUFBQyxpQkFBTTs7O0lBVTdFLCtCQUF5RjtJQUN2Riw4QkFLVztJQUNiLGlCQUFNOzs7SUFMRixjQUFrRTtJQUdsRSxBQURBLEFBREEsQUFEQSx1RkFBa0UsaUZBQ2QsOEJBQzlCLDJCQUNIOzs7SUFLckIsd0JBQWdGOzs7SUFEbEYsK0JBQW1GO0lBQ2pGLHlGQUFpRTtJQUNuRSxpQkFBTTs7O0lBRFcsY0FBZ0Q7SUFBaEQsd0VBQWdE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QixFQUFFLGFBQWEsQ0FBQzt1UEFHaUIsa0JBQWtCO2tCQUFoRixZQUFZO21CQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7a0ZBRGxELGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBnZXRGb3JtYXR0ZWRMaW5rLCBpc01vYmlsZSwgb3BlbkV4dGVybmFsTGluaywgdXVpZCB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9NZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tbWVudS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb01lbnVIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tbWVudS1oZWFkZXItdGVtcGxhdGUvcG8tbWVudS1oZWFkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvTWVudUl0ZW0gfSBmcm9tICcuL3BvLW1lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9NZW51SXRlbUZpbHRlcmVkIH0gZnJvbSAnLi9wby1tZW51LWl0ZW0vcG8tbWVudS1pdGVtLWZpbHRlcmVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb01lbnVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1tZW51LWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWVudUl0ZW1zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tbWVudS1pdGVtcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWVudVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUuc2VydmljZSc7XG5cbmNvbnN0IHBvTWVudURlYm91bmNlVGltZSA9IDQwMDtcbmNvbnN0IHBvTWVudU1pbkxlbmd0aCA9IDM7XG5jb25zdCBwb01lbnVSb290TGV2ZWwgPSAxO1xuXG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb01lbnVCYXNlQ29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQXBhcmVjZSBjb21wbGV0byBlbSB0ZWxhcyBjb20gbGFyZ3VyYSBtYWlvciBxdWUgMTIwMHB4LCBjYXNvIGNvbnRyw6FyaW8gbyBtZW51IMOpIGVzY29uZGlkbyBlIGNoYW1hZG8gcG9yIG1laW8gZGUgdW0gYm90w6NvLlxuICpcbiAqIE8gbWVudSB0YW1iw6ltIHBvZGUgc2VyIGNvbGFwc2Fkby4gRXNzYSBvcMOnw6NvIMOpIGhhYmlsaXRhZGEgcXVhbmRvIHRvZG9zIG9zIGl0ZW5zIGRlIHByaW1laXJvIG7DrXZlbCBwb3NzdcOtcmVtIMOtY29uZXMgZSB0ZXh0b3MgY3VydG9zLlxuICogU2UgY29sYXBzYWRvLCBzb21lbnRlIG9zIGl0ZW5zIGRlIHByaW1laXJvIG7DrXZlbCBzZXLDo28gZXhpYmlkb3MgZSwgY2FzbyBvIGl0ZW0gc2VsZWNpb25hZG8gcG9zc3VhIHN1Yi1uw612ZWlzLFxuICogZW50w6NvIG8gbWVudSBhbHRlcm5hcsOhIG5vdmFtZW50ZSBwYXJhIG8gZXN0YWRvIGFiZXJ0by5cbiAqXG4gKiBFeGlzdGUgYSBwb3NzaWJpbGlkYWRlIGRlIGN1c3RvbWl6YXIgYSBsb2dvbWFyY2EsIHF1ZSDDqSBleGliaWRhIG5hIHBhcnRlIHN1cGVyaW9yIGRvIGNvbXBvbmVudGUuXG4gKlxuICogRSBwYXJhIGFkaWNpb25hciB1bSBjb250ZcO6ZG8gcGVyc29uYWxpemFkbyBlbnRyZSBhIGxvZ29tYXJjYSBlIG8gY2FtcG8gZGUgZmlsdHJvLFxuICogYmFzdGEgYWRpY2lvbmFyIGVzdGUgY29udGXDumRvIGNvbSBhIGRpcmV0aXZhIFsqKnAtbWVudS1oZWFkZXItdGVtcGxhdGUqKl0oL2RvY3VtZW50YXRpb24vcG8tbWVudS1oZWFkZXItdGVtcGxhdGUpLlxuICpcbiAqIENhc28gdXRpbGl6YXIgbyBmaWx0cm8gZGUgbWVudXMsIMOpIHBvc3PDrXZlbCByZWFsaXphciBidXNjYXMgZW0gc2VydmnDp28sIGFwZW5hcyBpbmZvcm1hbmRvIGEgVVJMIGRvIHNlcnZpw6dvIG91IGEgaW5zdMOibmNpYSBkZVxuICogdW0gc2VydmnDp28gY3VzdG9taXphZG8gaW1wbGVtZW50YW5kbyBhIGludGVyZmFjZSBgUG9NZW51RmlsdGVyYC5cbiAqXG4gKiBQYXJhIG8gbWVudSBmdW5jaW9uYXIgY29ycmV0YW1lbnRlIMOpIG5lY2Vzc8OhcmlvIGltcG9ydGFyIG8gYFJvdXRlck1vZHVsZWAgZSBgUm91dGVzYCBkbyBtw7NkdWxvIHByaW5jaXBhbCBkZVxuICogIHN1YSBhcGxpY2HDp8OjbzpcbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7IFJvdXRlck1vZHVsZSwgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbiAqXG4gKiAuLi5cbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgUm91dGVyTW9kdWxlLFxuICogICAgIFJvdXRlcyxcbiAqICAgICAuLi5cbiAqICAgICBQb01vZHVsZSxcbiAqICAgICAuLi5cbiAqICAgXSxcbiAqICAgZGVjbGFyYXRpb25zOiBbXG4gKiAgICAgQXBwQ29tcG9uZW50XG4gKiAgIF0sXG4gKiAgIHByb3ZpZGVyczogW10sXG4gKiAgIGJvb3RzdHJhcDogW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHsgfVxuICogYGBgXG4gKlxuICogQWzDqW0gZGlzc28gw6kgbmVjZXNzw6FyaW8gY3JpYXIgdW0gbcOzZHVsbyBjb25maWd1cmFuZG8gYXMgcm90YXMgZGEgYXBsaWNhw6fDo28uXG4gKlxuICogYGBgXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIGltcG9ydCB7IFJvdXRlck1vZHVsZSwgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbiAqXG4gKiBpbXBvcnQgeyBIZWxsb1dvcmxkQ29tcG9uZW50IH0gZnJvbSAnLi9oZWxsby13b3JsZC9oZWxsby13b3JsZC5jb21wb25lbnQnO1xuICpcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7cGF0aDogJ2hlbGxvLXdvcmxkJywgY29tcG9uZW50OiBIZWxsb1dvcmxkQ29tcG9uZW50fVxuICogXTtcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLmZvclJvb3Qocm91dGVzLCB7dXNlSGFzaDogdHJ1ZX0pXSxcbiAqICAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwUm91dGluZ01vZHVsZSB7fVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbWVudS1iYXNpY1wiIHRpdGxlPVwiUE8gTWVudSBCYXNpY1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtYmFzaWMvc2FtcGxlLXBvLW1lbnUtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtYmFzaWMvc2FtcGxlLXBvLW1lbnUtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbWVudS1sYWJzXCIgdGl0bGU9XCJQTyBNZW51IExhYnNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWxhYnMvc2FtcGxlLXBvLW1lbnUtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1sYWJzL3NhbXBsZS1wby1tZW51LWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbWVudS1odW1hbi1yZXNvdXJjZXNcIiB0aXRsZT1cIlBPIE1lbnUgLSBIdW1hbiBSZXNvdXJjZXNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWh1bWFuLXJlc291cmNlcy9zYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzL3NhbXBsZS1wby1tZW51LWh1bWFuLXJlc291cmNlcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzL3NhbXBsZS1wby1tZW51LWh1bWFuLXJlc291cmNlcy5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbUG9NZW51SXRlbXNTZXJ2aWNlLCBQb01lbnVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb01lbnVDb21wb25lbnQgZXh0ZW5kcyBQb01lbnVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQsIERvQ2hlY2sge1xuICBAQ29udGVudENoaWxkKFBvTWVudUhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBtZW51SGVhZGVyVGVtcGxhdGU6IFBvTWVudUhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gIGFjdGl2ZU1lbnVJdGVtOiBQb01lbnVJdGVtO1xuICBjb2xsYXBzZWRNb2JpbGU6IGJvb2xlYW47XG4gIGZpbHRlckxvYWRpbmcgPSBmYWxzZTtcbiAgZ3JvdXBlZE1lbnVJdGVtOiBQb01lbnVJdGVtO1xuICBpZCA9IHV1aWQoKTtcbiAgbGlua0FjdGl2ZTogc3RyaW5nO1xuICBtb2JpbGVPcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbm9EYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIHRpbWVvdXRGaWx0ZXI6IGFueTtcblxuICBwcml2YXRlIGZpbHRlcmluZ0l0ZW1zOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWVudUluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWVudVByZXZpb3VzID0gbnVsbDtcbiAgcHJpdmF0ZSByZXNpemVMaXN0ZW5lcjogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGl0ZW1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByb3V0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbWVudUl0ZW1zU2VydmljZTogUG9NZW51SXRlbXNTZXJ2aWNlLFxuICAgIG1lbnVHbG9iYWxTZXJ2aWNlOiBQb01lbnVHbG9iYWxTZXJ2aWNlLFxuICAgIG1lbnVTZXJ2aWNlOiBQb01lbnVTZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIobWVudUdsb2JhbFNlcnZpY2UsIG1lbnVTZXJ2aWNlLCBsYW5ndWFnZVNlcnZpY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNBY3RpdmVJdGVtTWVudVN1Yk1lbnUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlTWVudUl0ZW1bJ2xldmVsJ10gPiB0aGlzLmdyb3VwZWRNZW51SXRlbVsnbGV2ZWwnXTtcbiAgfVxuXG4gIGdldCBlbmFibGVDb2xsYXBzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZCAmJiAhdGhpcy5jb2xsYXBzZWRNb2JpbGU7XG4gIH1cblxuICBnZXQgZW5hYmxlQ29sbGFwc2VCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dDb2xsYXBzZU1lbnUgJiYgIXRoaXMuY29sbGFwc2VkICYmICF0aGlzLm1vYmlsZU9wZW5lZDtcbiAgfVxuXG4gIGdldCBoYXNGb290ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlQ29sbGFwc2VCdXR0b24gfHwgdGhpcy5lbmFibGVDb2xsYXBzZTtcbiAgfVxuXG4gIGdldCBpc0NvbGxhcHNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0NvbGxhcHNlTWVudSAmJiB0aGlzLmNvbGxhcHNlZDtcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJpbmdJdGVtcyAmJiB0aGlzLmZpbHRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnVDdXJyZW50ID0gdGhpcy5zdHJpbmdpZnkodGhpcy5tZW51cyk7XG5cbiAgICBpZiAodGhpcy5tZW51UHJldmlvdXMgIT09IG1lbnVDdXJyZW50IHx8ICF0aGlzLm1lbnVJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy51cGRhdGVNZW51KCk7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29sbGFwc2VDbGFzcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaXRlbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLnJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tZW51R2xvYmFsU2VydmljZS5zZW5kUmVtb3ZlZEFwcGxpY2F0aW9uTWVudSh0aGlzLmlkKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9NZW51SXRlbSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Sb3V0ZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubWVudUdsb2JhbFNlcnZpY2Uuc2VuZEFwcGxpY2F0aW9uTWVudSh0aGlzKTtcbiAgfVxuXG4gIGFjdGl2YXRlTWVudUJ5VXJsKHVybFBhdGg6IHN0cmluZywgbWVudXM6IEFycmF5PFBvTWVudUl0ZW0+KSB7XG4gICAgaWYgKG1lbnVzKSB7XG4gICAgICBjb25zdCB1cmxQYXRoV2l0aG91dExhc3RGcmFnbWVudCA9IHVybFBhdGguc3Vic3RyKDAsIHVybFBhdGgubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICByZXR1cm4gbWVudXMuc29tZShtZW51ID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkTWVudUxpbmsgPSBnZXRGb3JtYXR0ZWRMaW5rKG1lbnUubGluayk7XG4gICAgICAgIGNvbnN0IG1lbnVMaW5rUGF0aCA9IGAke3VybFBhdGhXaXRob3V0TGFzdEZyYWdtZW50fSR7Zm9ybWF0dGVkTWVudUxpbmsuc3Vic3RyKFxuICAgICAgICAgIGZvcm1hdHRlZE1lbnVMaW5rLmxhc3RJbmRleE9mKCcvJylcbiAgICAgICAgKX1gO1xuXG4gICAgICAgIGlmIChtZW51TGlua1BhdGggPT09IHVybFBhdGggJiYgbWVudUxpbmtQYXRoID09PSBmb3JtYXR0ZWRNZW51TGluaykge1xuICAgICAgICAgIHRoaXMubGlua0FjdGl2ZSA9IGZvcm1hdHRlZE1lbnVMaW5rO1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShtZW51KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZU1lbnVCeVVybCh1cmxQYXRoLCBtZW51LnN1Ykl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tBY3RpdmVNZW51QnlVcmwodXJsUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxpbmtBY3RpdmUgfHwgdGhpcy5saW5rQWN0aXZlICE9PSB1cmxQYXRoKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTWVudUJ5VXJsKHVybFBhdGgsIHRoaXMubWVudXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiA8YSBpZD1cImNvbGFwc2VNZXRob2RcIj48L2E+XG4gICAqXG4gICAqICpNw6l0b2RvIHBhcmEgY29sYXBzYXIgKHJldHJhaXIpIG8gbWVudS5cbiAgICovXG4gIGNvbGxhcHNlKCkge1xuICAgIHRoaXMudmFsaWRhdGVUb2dnbGVNZW51KHRydWUpO1xuICB9XG5cbiAgZGVib3VuY2VGaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0RmlsdGVyKTtcblxuICAgIHRoaXMudGltZW91dEZpbHRlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJQcm9jZXNzKGZpbHRlcik7XG4gICAgfSwgcG9NZW51RGVib3VuY2VUaW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiA8YSBpZD1cImV4cGFuZE1ldGhvZFwiPjwvYT5cbiAgICpcbiAgICogKk3DqXRvZG8gcGFyYSBleHBhbmRpciAoYXVtZW50YXIpIG8gbWVudS5cbiAgICovXG4gIGV4cGFuZCgpIHtcbiAgICB0aGlzLnZhbGlkYXRlVG9nZ2xlTWVudShmYWxzZSk7XG4gIH1cblxuICBzdWJzY3JpYmVUb01lbnVJdGVtKCkge1xuICAgIHRoaXMuaXRlbVN1YnNjcmlwdGlvbiA9IHRoaXMubWVudUl0ZW1zU2VydmljZS5yZWNlaXZlRnJvbUNoaWxkTWVudUNsaWNrZWQoKS5zdWJzY3JpYmUoKG1lbnU6IFBvTWVudUl0ZW0pID0+IHtcbiAgICAgIHRoaXMuY2xpY2tNZW51SXRlbShtZW51KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvUm91dGUoKSB7XG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IHZhbCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgY29uc3QgdXJsUm91dGVyID0gdGhpcy5jaGVja2luZ1JvdXRlckNoaWxkcmVuRnJhZ21lbnRzKCk7XG4gICAgICAgIHRoaXMuY2hlY2tBY3RpdmVNZW51QnlVcmwodXJsUm91dGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiA8YSBpZD1cInRvZ2dsZU1ldGhvZFwiPjwvYT5cbiAgICogKk3DqXRvZG8gcXVlIGNvbGFwc2EgZSBleHBhbmRlIG8gbWVudSBhbHRlcm5hZGFtZW50ZS5cbiAgICpcbiAgICogPiAqT3MgbcOpdG9kb3MgYXBlbmFzIHbDo28gY29sYXBzYXIvZXhwYW5kaXIgbyBtZW51IHNlOlxuICAgKiAgLSBUb2RvcyBvcyBpdGVucyBkZSBtZW51IHRpdmVyZW0gdmFsb3IgbmFzIHByb3ByaWVkYWRlcyBgaWNvbmAgZSBgc2hvcnRMYWJlbGAuXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVRvZ2dsZU1lbnUoIXRoaXMuY29sbGFwc2VkKTtcbiAgfVxuXG4gIHRvZ2dsZU1lbnVNb2JpbGUoKTogdm9pZCB7XG4gICAgdGhpcy5tb2JpbGVPcGVuZWQgPSAhdGhpcy5tb2JpbGVPcGVuZWQ7XG4gICAgdGhpcy5jb2xsYXBzZWRNb2JpbGUgPSB0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLm1vYmlsZU9wZW5lZDtcblxuICAgIHRoaXMudmFsaWRhdGVDb2xsYXBzZUNsYXNzKHRoaXMuY29sbGFwc2VkTW9iaWxlKTtcblxuICAgIGlmIChpc01vYmlsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW9iaWxlT3BlbmVkKSB7XG4gICAgICB0aGlzLmNyZWF0ZVJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmF1dG9tYXRpY1RvZ2dsZSkge1xuICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuYWxsb3dDb2xsYXBzZUhvdmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmFsbG93Q29sbGFwc2VIb3ZlciAmJiB0aGlzLmF1dG9tYXRpY1RvZ2dsZSkge1xuICAgICAgdGhpcy5jb2xsYXBzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja2luZ1JvdXRlckNoaWxkcmVuRnJhZ21lbnRzKCkge1xuICAgIGNvbnN0IGNoaWxkcmVuUHJpbWFyeSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCkucm9vdC5jaGlsZHJlblsncHJpbWFyeSddO1xuXG4gICAgcmV0dXJuIGNoaWxkcmVuUHJpbWFyeSA/IGAvJHtjaGlsZHJlblByaW1hcnkuc2VnbWVudHMubWFwKGl0ID0+IGl0LnBhdGgpLmpvaW4oJy8nKX1gIDogJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVDb2xsYXBzZUNsYXNzKGNvbGxhcHNlZE1vYmlsZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgdGhpcy5yZW5kZXJlclt0aGlzLmlzQ29sbGFwc2VkICYmICFjb2xsYXBzZWRNb2JpbGUgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10od3JhcHBlciwgJ3BvLWNvbGxhcHNlZC1tZW51Jyk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlQ29sbGFwc2VTdWJNZW51SXRlbSgpIHtcbiAgICB0aGlzLmNsZWFyR3JvdXBNZW51SWZGaXJzdExldmVsKHRoaXMuYWN0aXZlTWVudUl0ZW0pO1xuXG4gICAgaWYgKCF0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmFjdGl2ZU1lbnVJdGVtWydsZXZlbCddID4gcG9NZW51Um9vdExldmVsICYmIHRoaXMuaXNBY3RpdmVJdGVtTWVudVN1Yk1lbnUpIHtcbiAgICAgIHRoaXMub3BlblBhcmVudE1lbnUodGhpcy5hY3RpdmVNZW51SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZU1lbnVJdGVtKG1lbnU6IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZU1lbnVJdGVtID0gbWVudTtcbiAgICB0aGlzLmxpbmtBY3RpdmUgPSBtZW51Lmxpbms7XG5cbiAgICBpZiAodGhpcy5hY3RpdmVNZW51SXRlbVsnbGV2ZWwnXSA+IHBvTWVudVJvb3RMZXZlbCkge1xuICAgICAgdGhpcy5vcGVuUGFyZW50TWVudSh0aGlzLmFjdGl2ZU1lbnVJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMubWVudUl0ZW1zU2VydmljZS5zZW5kVG9DaGlsZE1lbnVDbGlja2VkKHtcbiAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSxcbiAgICAgIGdyb3VwZWQ6IHRoaXMuZ3JvdXBlZE1lbnVJdGVtLFxuICAgICAgYWN0aXZhdGVkQnlSb3V0ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVTdWJNZW51cyhtZW51czogQXJyYXk8UG9NZW51SXRlbT4pIHtcbiAgICByZXR1cm4gbWVudXMuZXZlcnkobWVudSA9PiBtZW51WydsZXZlbCddID4gcG9NZW51Um9vdExldmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJHcm91cE1lbnVJZkZpcnN0TGV2ZWwoYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW0pIHtcbiAgICBpZiAoYWN0aXZlTWVudUl0ZW1bJ2xldmVsJ10gPT09IHBvTWVudVJvb3RMZXZlbCkge1xuICAgICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja01lbnVJdGVtKG1lbnU6IFBvTWVudUl0ZW0pIHtcbiAgICBpZiAobWVudS5hY3Rpb24pIHtcbiAgICAgIHRoaXMuZXhlY3V0ZU1lbnVBY3Rpb24obWVudSk7XG4gICAgfVxuXG4gICAgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ2V4dGVybmFsTGluaycpIHtcbiAgICAgIG9wZW5FeHRlcm5hbExpbmsobWVudS5saW5rKTtcbiAgICB9IGVsc2UgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ2ludGVybmFsTGluaycpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShtZW51KTtcbiAgICB9IGVsc2UgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ3N1Ykl0ZW1zJykge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyaW5nSXRlbXMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdyb3VwTWVudUl0ZW0obWVudSk7XG4gICAgfVxuXG4gICAgaWYgKG1lbnVbJ3R5cGUnXSAhPT0gJ3N1Ykl0ZW1zJykge1xuICAgICAgdGhpcy5tb2JpbGVPcGVuZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb01lbnVJdGVtRmlsdGVyZWQobWVudUl0ZW06IGFueSA9IHsgbGFiZWw6ICcnLCBsaW5rOiAnJywgYWN0aW9uOiAoKSA9PiB7fSB9KTogUG9NZW51SXRlbUZpbHRlcmVkIHtcbiAgICBjb25zdCB7IGxhYmVsLCBsaW5rLCBhY3Rpb24gfSA9IG1lbnVJdGVtO1xuXG4gICAgY29uc3QgbWVudUl0ZW1GaWx0ZXJlZDogUG9NZW51SXRlbUZpbHRlcmVkID0geyBsYWJlbCwgbGluaywgYWN0aW9uIH07XG5cbiAgICB0aGlzLnNldE1lbnVJdGVtUHJvcGVydGllcyhtZW51SXRlbUZpbHRlcmVkKTtcblxuICAgIHJldHVybiBtZW51SXRlbUZpbHRlcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXNpemVMaXN0ZW5lcigpIHtcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnRvZ2dsZVJlc2l6ZSgpO1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlTWVudUFjdGlvbihtZW51OiBQb01lbnVJdGVtKTogdm9pZCB7XG4gICAgbWVudS5hY3Rpb24obWVudSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbHRlckl0ZW1zKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJpbUZpbHRlciA9IGZpbHRlciAmJiBmaWx0ZXIudHJpbSgpO1xuXG4gICAgaWYgKHRyaW1GaWx0ZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlXG4gICAgICAgID8gYXdhaXQgdGhpcy5maWx0ZXJPblNlcnZpY2UodHJpbUZpbHRlcilcbiAgICAgICAgOiB0aGlzLmZpbHRlckxvY2FsSXRlbXModHJpbUZpbHRlcik7XG4gICAgICB0aGlzLmZpbHRlcmluZ0l0ZW1zID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gWy4uLnRoaXMubWVudXNdO1xuICAgICAgdGhpcy5maWx0ZXJpbmdJdGVtcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyTG9jYWxJdGVtcyhmaWx0ZXI6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBbXTtcblxuICAgIHRoaXMuZmluZEl0ZW1zKHRoaXMubWVudXMsIGZpbHRlci50b0xvd2VyQ2FzZSgpLCBmaWx0ZXJlZEl0ZW1zKTtcblxuICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJQcm9jZXNzKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuZmlsdGVySXRlbXMoZmlsdGVyKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnNob3dOb0RhdGEoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zU2VydmljZS5zZW5kVG9DaGlsZE1lbnVDbGlja2VkKHsgYWN0aXZlOiB0aGlzLmFjdGl2ZU1lbnVJdGVtLCBncm91cGVkOiB0aGlzLmdyb3VwZWRNZW51SXRlbSB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbHRlck9uU2VydmljZShzZWFyY2g6IHN0cmluZyA9ICcnKSB7XG4gICAgaWYgKHNlYXJjaC5sZW5ndGggPj0gcG9NZW51TWluTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlXG4gICAgICAgIC5nZXRGaWx0ZXJlZERhdGEoc2VhcmNoLCB0aGlzLnBhcmFtcylcbiAgICAgICAgLnBpcGUobWFwKG1lbnVJdGVtc0ZpbHRlcmVkID0+IG1lbnVJdGVtc0ZpbHRlcmVkLm1hcChtZW51SXRlbSA9PiB0aGlzLmNvbnZlcnRUb01lbnVJdGVtRmlsdGVyZWQobWVudUl0ZW0pKSkpXG4gICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRJdGVtcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRJdGVtcyhtZW51czogQXJyYXk8UG9NZW51SXRlbT4sIGZpbHRlcjogc3RyaW5nLCBmaWx0ZXJlZEl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgbWVudXMuZm9yRWFjaChtZW51ID0+IHtcbiAgICAgIGNvbnN0IGhhc0FjdGlvbiA9IHRoaXMuc2VhcmNoVHJlZUl0ZW1zID8gdGhpcy5zZWFyY2hUcmVlSXRlbXMgOiBtZW51LmFjdGlvbiB8fCBtZW51Lmxpbms7XG4gICAgICBjb25zdCBsYWJlbEhhc0ZpbHRlciA9IG1lbnUubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpO1xuXG4gICAgICBpZiAobGFiZWxIYXNGaWx0ZXIgJiYgaGFzQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG5ld01lbnUgPSB7IC4uLm1lbnUgfTtcblxuICAgICAgICBpZiAobmV3TWVudS5zdWJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRyZWVJdGVtcykge1xuICAgICAgICAgICAgZGVsZXRlIG5ld01lbnUuc3ViSXRlbXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld01lbnVbJ3R5cGUnXSA9IHRoaXMuc2V0TWVudVR5cGUobmV3TWVudSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJlZEl0ZW1zLnB1c2gobmV3TWVudSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZW51LnN1Ykl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZEl0ZW1zKG1lbnUuc3ViSXRlbXMsIGZpbHRlciwgZmlsdGVyZWRJdGVtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnQobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+LCBtZW51SXRlbTogUG9NZW51SXRlbSk6IFBvTWVudUl0ZW0ge1xuICAgIGNvbnN0IGdldFBhcmVudCA9IGZ1bmN0aW9uIChtZW51SXRlbXM6IEFycmF5PFBvTWVudUl0ZW0+LCBpZCkge1xuICAgICAgaWYgKG1lbnVJdGVtcykge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWVudUl0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IG1lbnUgPSBtZW51SXRlbXNbaW5kZXhdO1xuICAgICAgICAgIGlmIChtZW51LnN1Ykl0ZW1zICYmIG1lbnUuc3ViSXRlbXMuZmluZChzdWJJdGVtID0+IHN1Ykl0ZW1bJ2lkJ10gPT09IGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZvdW5kID0gZ2V0UGFyZW50KG1lbnUuc3ViSXRlbXMsIGlkKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBnZXRQYXJlbnQobWVudXMsIG1lbnVJdGVtWydpZCddKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFJvb3RQYXJlbnQobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+LCBtZW51OiBQb01lbnVJdGVtKTogUG9NZW51SXRlbSB7XG4gICAgY29uc3QgZmluZFBhcmVudCA9IHRoaXMuZmluZFBhcmVudDtcblxuICAgIGNvbnN0IGdldFJvb3RQYXJlbnQgPSBmdW5jdGlvbiAobWVudUl0ZW1zOiBBcnJheTxQb01lbnVJdGVtPiwgbWVudUl0ZW0pOiBQb01lbnVJdGVtIHtcbiAgICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50KG1lbnVJdGVtcywgbWVudUl0ZW0pO1xuXG4gICAgICBpZiAocGFyZW50WydsZXZlbCddICE9PSBwb01lbnVSb290TGV2ZWwpIHtcbiAgICAgICAgcGFyZW50ID0gZ2V0Um9vdFBhcmVudChtZW51SXRlbXMsIHBhcmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH07XG4gICAgcmV0dXJuIGdldFJvb3RQYXJlbnQobWVudXMsIG1lbnUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVNZW51UGFyZW50KG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPiwgYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW0sIGdyb3VwZWRNZW51SXRlbTogUG9NZW51SXRlbSkge1xuICAgIGlmICh0aGlzLmFyZVN1Yk1lbnVzKFtncm91cGVkTWVudUl0ZW0sIGFjdGl2ZU1lbnVJdGVtXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRSb290UGFyZW50KG1lbnVzLCBhY3RpdmVNZW51SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBncm91cE1lbnVJdGVtKG1lbnU6IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMudG9nZ2xlTWVudUNvbGxhcHNlKCk7XG4gICAgfVxuXG4gICAgbWVudVsnaXNPcGVuZWQnXSA9ICFtZW51Wydpc09wZW5lZCddO1xuICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtID0gbWVudTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuYWN0aXZlTWVudUl0ZW0gJiZcbiAgICAgIG1lbnVbJ2lzT3BlbmVkJ10gJiZcbiAgICAgIHRoaXMuaXNBY3RpdmVJdGVtTWVudVN1Yk1lbnUgJiZcbiAgICAgIHRoaXMuaXNSb290TWVudUVxdWFsR3JvdXBlZE1lbnUodGhpcy5tZW51cywgdGhpcy5hY3RpdmVNZW51SXRlbSwgbWVudSlcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbSh0aGlzLmFjdGl2ZU1lbnVJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJdGVtc1NlcnZpY2Uuc2VuZFRvQ2hpbGRNZW51Q2xpY2tlZCh7IGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSwgZ3JvdXBlZDogdGhpcy5ncm91cGVkTWVudUl0ZW0gfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUm9vdE1lbnVFcXVhbEdyb3VwZWRNZW51KFxuICAgIG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPixcbiAgICBhY3RpdmVNZW51SXRlbTogUG9NZW51SXRlbSxcbiAgICBncm91cGVkTWVudUl0ZW06IFBvTWVudUl0ZW1cbiAgKSB7XG4gICAgY29uc3QgYWN0aXZlTWVudVJvb3RQYXJlbnQgPSB0aGlzLmZpbmRSb290UGFyZW50KG1lbnVzLCBhY3RpdmVNZW51SXRlbSk7XG4gICAgcmV0dXJuIGFjdGl2ZU1lbnVSb290UGFyZW50WydpZCddID09PSBncm91cGVkTWVudUl0ZW1bJ2lkJ107XG4gIH1cblxuICBwcml2YXRlIG9wZW5QYXJlbnRNZW51KGNoaWxkTWVudTogUG9NZW51SXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudCh0aGlzLm1lbnVzLCBjaGlsZE1lbnUpO1xuICAgIHBhcmVudFsnaXNPcGVuZWQnXSA9IHRydWU7XG4gICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPSBwYXJlbnQ7XG4gIH1cblxuICBwcml2YXRlIHNob3dOb0RhdGEoKSB7XG4gICAgdGhpcy5ub0RhdGEgPSB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+KTogc3RyaW5nIHtcbiAgICAvLyBuw6NvIGZheiBvIHN0cmluZ2lmeSBkYSBwcm9wcmllZGFkZSBpY29uLCBwb2lzIHBvZGUgY29udGVyIG9iamV0byBjb21wbGV4byBlIGRpc3BhcmFyIHVtIGVycm8uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMubWVudXMsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnaWNvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVHcm91cGVkTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5ncm91cGVkTWVudUl0ZW1bJ2lzT3BlbmVkJ10gPSAhdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hbGxvd0NvbGxhcHNlTWVudTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlTWVudUNvbGxhcHNlKGNvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5jb2xsYXBzZWQgPSBjb2xsYXBzZWQ7XG5cbiAgICBpZiAodGhpcy5ncm91cGVkTWVudUl0ZW0gJiYgdGhpcy5hY3RpdmVNZW51SXRlbSkge1xuICAgICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPVxuICAgICAgICB0aGlzLmdldEFjdGl2ZU1lbnVQYXJlbnQodGhpcy5tZW51cywgdGhpcy5hY3RpdmVNZW51SXRlbSwgdGhpcy5ncm91cGVkTWVudUl0ZW0pIHx8IHRoaXMuZ3JvdXBlZE1lbnVJdGVtO1xuICAgICAgdGhpcy50b2dnbGVHcm91cGVkTWVudUl0ZW0oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVNZW51SXRlbSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUNvbGxhcHNlU3ViTWVudUl0ZW0oKTtcbiAgICAgIHRoaXMubWVudUl0ZW1zU2VydmljZS5zZW5kVG9DaGlsZE1lbnVDbGlja2VkKHtcbiAgICAgICAgYWN0aXZlOiB0aGlzLmFjdGl2ZU1lbnVJdGVtLFxuICAgICAgICBncm91cGVkOiB0aGlzLmdyb3VwZWRNZW51SXRlbSxcbiAgICAgICAgYWN0aXZhdGVkQnlSb3V0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51KCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVJlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5tb2JpbGVPcGVuZWQpIHtcbiAgICAgIHRoaXMubW9iaWxlT3BlbmVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbGxhcHNlZE1vYmlsZSA9IGZhbHNlO1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbGxhcHNlQ2xhc3ModGhpcy5jb2xsYXBzZWRNb2JpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUb2dnbGVNZW51KGNvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5hbGxvd0NvbGxhcHNlTWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlTWVudUNvbGxhcHNlKGNvbGxhcHNlZCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnUoKSB7XG4gICAgdGhpcy5tZW51SW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0TWVudUV4dHJhUHJvcGVydGllcygpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLm1lbnVzXTtcbiAgICB0aGlzLm1lbnVQcmV2aW91cyA9IHRoaXMuc3RyaW5naWZ5KHRoaXMubWVudXMpO1xuICAgIHRoaXMudmFsaWRhdGVNZW51cyh0aGlzLm1lbnVzKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIm1vYmlsZU9wZW5lZFwiIGNsYXNzPVwicG8tbWVudS1vdmVybGF5XCIgKGNsaWNrKT1cInRvZ2dsZU1lbnVNb2JpbGUoKVwiPjwvZGl2PlxuXG48ZGl2PlxuICA8ZGl2IGNsYXNzPVwicG8tbWVudS1tb2JpbGUgcG8tY2xpY2thYmxlXCIgKGNsaWNrKT1cInRvZ2dsZU1lbnVNb2JpbGUoKVwiPlxuICAgIDxwby1pY29uIHAtaWNvbj1cIklDT05fTUVOVVwiPjwvcG8taWNvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLW1lbnVcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFjb2xsYXBzZWRcIiBbbmdDbGFzc109XCJ7ICdwby1tZW51LWFuaW1hdGlvbic6IG1vYmlsZU9wZW5lZCB9XCI+XG4gICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtY29udGFpbmVyXCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIiAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJsb2dvIHx8IChzaG9ydExvZ28gJiYgZW5hYmxlQ29sbGFwc2UpXCIgY2xhc3M9XCJwby1tZW51LWhlYWRlci1jb250YWluZXItbG9nb1wiPlxuICAgICAgICAgIDxwby1sb2dvXG4gICAgICAgICAgICBbcC1jbGFzc109XCJlbmFibGVDb2xsYXBzZSA/ICdwby1tZW51LXNob3J0LWxvZ28nIDogJ3BvLW1lbnUtbG9nbydcIlxuICAgICAgICAgICAgW3AtbG9nb109XCJlbmFibGVDb2xsYXBzZSA/IHNob3J0TG9nbyB8fCBsb2dvIDogbG9nb1wiXG4gICAgICAgICAgICBbcC1sb2dvLWFsdF09XCJsb2dvQWx0XCJcbiAgICAgICAgICAgIFtwLWxpbmtdPVwibG9nb0xpbmtcIlxuICAgICAgICAgID48L3BvLWxvZ28+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZW5hYmxlQ29sbGFwc2UgJiYgbWVudUhlYWRlclRlbXBsYXRlXCIgY2xhc3M9XCJwby1tZW51LWhlYWRlci10ZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SGVhZGVyVGVtcGxhdGUudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHBvLW1lbnUtZmlsdGVyXG4gICAgICAgICAgKm5nSWY9XCJmaWx0ZXJcIlxuICAgICAgICAgIFtwLWVuYWJsZS1jb2xsYXBzZV09XCJlbmFibGVDb2xsYXBzZVwiXG4gICAgICAgICAgW3AtbG9hZGluZ109XCJmaWx0ZXJMb2FkaW5nXCJcbiAgICAgICAgICAocC1maWx0ZXIpPVwiZGVib3VuY2VGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgID48L3BvLW1lbnUtZmlsdGVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtb3V0ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicG8tbWVudS1pbm5lclwiPlxuICAgICAgICAgICAgPG5hdiBjbGFzcz1cInBvLW1lbnUtbmF2XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cInBvLW1lbnUtbGlzdFwiIHJvbGU9XCJtZW51XCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJwby1tZW51LWxpc3QtaXRlbVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgIDxwby1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgcC1pY29uPVwiSUNPTl9JTkZPXCJcbiAgICAgICAgICAgICAgICAgICAgcC10eXBlPVwibm9EYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtbGV2ZWxdPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWxhYmVsXT1cImxpdGVyYWxzLml0ZW1Ob3RGb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIFtwLXNob3J0LWxhYmVsXT1cImxpdGVyYWxzLml0ZW1Ob3RGb3VuZFwiXG4gICAgICAgICAgICAgICAgICA+PC9wby1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtZW51IG9mIGZpbHRlcmVkSXRlbXM7IGxldCBtZW51SW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLW1lbnUtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJtZW51LmxldmVsXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5wby1tZW51LWl0ZW0tZmlyc3RdPVwibWVudUluZGV4ID09PSAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cG8tbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgIFtwLWFjdGlvbl09XCJtZW51LmFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWJhZGdlLWFsZXJ0XT1cIm1lbnUuYmFkZ2VBbGVydFwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWJhZGdlLWNvbG9yXT1cIm1lbnUuYmFkZ2UgPyBtZW51LmJhZGdlLmNvbG9yIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtYmFkZ2UtdmFsdWVdPVwibWVudS5iYWRnZSA/IG1lbnUuYmFkZ2UudmFsdWUgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcC1jb2xsYXBzZWQtbWVudV09XCJlbmFibGVDb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWljb25dPVwiYWxsb3dJY29ucyA/IG1lbnUuaWNvbiA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbcC1pZF09XCJtZW51LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtbGFiZWxdPVwibWVudS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwLWxldmVsXT1cIm1lbnUubGV2ZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcC1saW5rXT1cIm1lbnUubGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtwLXNob3J0LWxhYmVsXT1cIm1lbnUuc2hvcnRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwLXN1Yi1pdGVtc109XCJtZW51LnN1Ykl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgW3AtdHlwZV09XCJtZW51LnR5cGVcIlxuICAgICAgICAgICAgICAgICAgPjwvcG8tbWVudS1pdGVtPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJoYXNGb290ZXJcIiBjbGFzcz1cInBvLW1lbnUtZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwicG8tbWVudS1jb2xsYXBzZS1idXR0b24taWNvblwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVuYWJsZUNvbGxhcHNlQnV0dG9uID8gbGl0ZXJhbHMuY2xvc2UgOiBsaXRlcmFscy5vcGVuXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJlbmFibGVDb2xsYXBzZUJ1dHRvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7IGxpdGVyYWxzLmNsb3NlIH19PC9zcGFuPlxuXG4gICAgICAgIDxwby1pY29uIFtwLWljb25dPVwiZW5hYmxlQ29sbGFwc2UgPyAnSUNPTl9NRU5VX09QRU4nIDogJ0lDT05fTUVOVV9DTE9TRSdcIj48L3BvLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -46445,6 +46445,7 @@ function PoLogoComponent_a_0_Template(rf, ctx) { if (rf & 1) {
46445
46445
  i0.ɵɵelementEnd();
46446
46446
  } if (rf & 2) {
46447
46447
  const ctx_r0 = i0.ɵɵnextContext();
46448
+ i0.ɵɵproperty("href", ctx_r0.link === true ? "./" : ctx_r0.link, i0.ɵɵsanitizeUrl);
46448
46449
  i0.ɵɵadvance();
46449
46450
  i0.ɵɵclassMap(ctx_r0.className);
46450
46451
  i0.ɵɵproperty("alt", ctx_r0.logoAlt)("src", ctx_r0.logo, i0.ɵɵsanitizeUrl)("title", ctx_r0.logoAlt);
@@ -46476,6 +46477,7 @@ class PoLogoComponent {
46476
46477
  literals;
46477
46478
  _logo;
46478
46479
  _logoAlt;
46480
+ _link = './';
46479
46481
  /**
46480
46482
  * Define uma classe para o elemento `img` do componente.
46481
46483
  *
@@ -46485,13 +46487,20 @@ class PoLogoComponent {
46485
46487
  */
46486
46488
  className = 'po-logo';
46487
46489
  /**
46488
- * Define se o componente terá o elemento âncora para a página inicial.
46490
+ * Define se o componente terá o elemento âncora para uma rota específica.
46489
46491
  *
46490
46492
  * > Caso seja definido como false, o componente apenas renderizará o elemento `img`.
46491
- * O valor inicial é `true`.
46493
+ * > Caso seja definido como true, a rota será `./`.
46494
+ * > Caso seja definido como string, a rota será a string passada.
46492
46495
  *
46496
+ * @default `true`
46493
46497
  */
46494
- link = true;
46498
+ set link(value) {
46499
+ this._link = value !== false ? value : false;
46500
+ }
46501
+ get link() {
46502
+ return this._link;
46503
+ }
46495
46504
  /**
46496
46505
  * Definie o caminho para a imagem, que será exibida como logomarca.
46497
46506
  *
@@ -46526,16 +46535,16 @@ class PoLogoComponent {
46526
46535
  return value.length > MAX_LENGHT ? value.toString().substring(0, MAX_LENGHT) : value;
46527
46536
  }
46528
46537
  static ɵfac = function PoLogoComponent_Factory(t) { return new (t || PoLogoComponent)(i0.ɵɵdirectiveInject(PoLanguageService)); };
46529
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoLogoComponent, selectors: [["po-logo"]], inputs: { className: [0, "p-class", "className"], link: [0, "p-link", "link"], logo: [0, "p-logo", "logo"], logoAlt: [0, "p-logo-alt", "logoAlt"] }, decls: 3, vars: 2, consts: [["noLink", ""], ["href", "/", 4, "ngIf", "ngIfElse"], ["href", "/"], [3, "alt", "src", "title"]], template: function PoLogoComponent_Template(rf, ctx) { if (rf & 1) {
46530
- i0.ɵɵtemplate(0, PoLogoComponent_a_0_Template, 2, 5, "a", 1)(1, PoLogoComponent_ng_template_1_Template, 1, 5, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
46538
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoLogoComponent, selectors: [["po-logo"]], inputs: { className: [0, "p-class", "className"], link: [0, "p-link", "link"], logo: [0, "p-logo", "logo"], logoAlt: [0, "p-logo-alt", "logoAlt"] }, decls: 3, vars: 2, consts: [["noLink", ""], [3, "href", 4, "ngIf", "ngIfElse"], [3, "href"], [3, "alt", "src", "title"]], template: function PoLogoComponent_Template(rf, ctx) { if (rf & 1) {
46539
+ i0.ɵɵtemplate(0, PoLogoComponent_a_0_Template, 2, 6, "a", 1)(1, PoLogoComponent_ng_template_1_Template, 1, 5, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
46531
46540
  } if (rf & 2) {
46532
46541
  const noLink_r2 = i0.ɵɵreference(2);
46533
- i0.ɵɵproperty("ngIf", ctx.link)("ngIfElse", noLink_r2);
46542
+ i0.ɵɵproperty("ngIf", ctx.link !== false)("ngIfElse", noLink_r2);
46534
46543
  } }, dependencies: [i1.NgIf], encapsulation: 2 });
46535
46544
  }
46536
46545
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoLogoComponent, [{
46537
46546
  type: Component,
46538
- args: [{ selector: 'po-logo', template: "<a *ngIf=\"link; else noLink\" href=\"/\">\n <img [alt]=\"logoAlt\" [class]=\"className\" [src]=\"logo\" [title]=\"logoAlt\" />\n</a>\n\n<ng-template #noLink>\n <img [alt]=\"logoAlt\" [class]=\"className\" [src]=\"logo\" [title]=\"logoAlt\" />\n</ng-template>\n" }]
46547
+ args: [{ selector: 'po-logo', template: "<a *ngIf=\"link !== false; else noLink\" [href]=\"link === true ? './' : link\">\n <img [alt]=\"logoAlt\" [class]=\"className\" [src]=\"logo\" [title]=\"logoAlt\" />\n</a>\n\n<ng-template #noLink>\n <img [alt]=\"logoAlt\" [class]=\"className\" [src]=\"logo\" [title]=\"logoAlt\" />\n</ng-template>\n" }]
46539
46548
  }], () => [{ type: PoLanguageService }], { className: [{
46540
46549
  type: Input,
46541
46550
  args: ['p-class']
@@ -47718,6 +47727,7 @@ class PoMenuBaseComponent {
47718
47727
  _menus = [];
47719
47728
  _params;
47720
47729
  _service;
47730
+ _logoLink = true;
47721
47731
  /**
47722
47732
  * @optional
47723
47733
  *
@@ -47908,6 +47918,24 @@ class PoMenuBaseComponent {
47908
47918
  * - Caso não informar um valor, esta propriedade passa a assumir o valor informado na propriedade `p-logo`.
47909
47919
  */
47910
47920
  shortLogo;
47921
+ /**
47922
+ * @optional
47923
+ *
47924
+ * @description
47925
+ * Define o link para a rota ao clicar no logo do menu.
47926
+ *
47927
+ * - Se o valor for uma string, define a rota para o link informado.
47928
+ * - Se for `false`, o logo não terá link associado.
47929
+ * - Se for `true`, o logo terá a rota padrão `./`.
47930
+ *
47931
+ * @default `true`
47932
+ */
47933
+ set logoLink(value) {
47934
+ this._logoLink = value === false ? false : value || true;
47935
+ }
47936
+ get logoLink() {
47937
+ return this._logoLink;
47938
+ }
47911
47939
  constructor(menuGlobalService, menuService, languageService) {
47912
47940
  this.menuGlobalService = menuGlobalService;
47913
47941
  this.menuService = menuService;
@@ -48011,7 +48039,7 @@ class PoMenuBaseComponent {
48011
48039
  }
48012
48040
  }
48013
48041
  static ɵfac = function PoMenuBaseComponent_Factory(t) { return new (t || PoMenuBaseComponent)(i0.ɵɵdirectiveInject(PoMenuGlobalService), i0.ɵɵdirectiveInject(PoMenuService), i0.ɵɵdirectiveInject(PoLanguageService)); };
48014
- static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoMenuBaseComponent, inputs: { automaticToggle: [2, "p-automatic-toggle", "automaticToggle", convertToBoolean], collapsed: [0, "p-collapsed", "collapsed"], menus: [0, "p-menus", "menus"], filter: [0, "p-filter", "filter"], searchTreeItems: [0, "p-search-tree-items", "searchTreeItems"], service: [0, "p-service", "service"], params: [0, "p-params", "params"], logo: [0, "p-logo", "logo"], logoAlt: [0, "p-logo-alt", "logoAlt"], shortLogo: [0, "p-short-logo", "shortLogo"] }, features: [i0.ɵɵInputTransformsFeature] });
48042
+ static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoMenuBaseComponent, inputs: { automaticToggle: [2, "p-automatic-toggle", "automaticToggle", convertToBoolean], collapsed: [0, "p-collapsed", "collapsed"], menus: [0, "p-menus", "menus"], filter: [0, "p-filter", "filter"], searchTreeItems: [0, "p-search-tree-items", "searchTreeItems"], service: [0, "p-service", "service"], params: [0, "p-params", "params"], logo: [0, "p-logo", "logo"], logoAlt: [0, "p-logo-alt", "logoAlt"], shortLogo: [0, "p-short-logo", "shortLogo"], logoLink: [0, "p-logo-link", "logoLink"] }, features: [i0.ɵɵInputTransformsFeature] });
48015
48043
  }
48016
48044
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoMenuBaseComponent, [{
48017
48045
  type: Directive
@@ -48045,6 +48073,9 @@ class PoMenuBaseComponent {
48045
48073
  }], shortLogo: [{
48046
48074
  type: Input,
48047
48075
  args: ['p-short-logo']
48076
+ }], logoLink: [{
48077
+ type: Input,
48078
+ args: ['p-logo-link']
48048
48079
  }] }); })();
48049
48080
 
48050
48081
  const _c0$m = a0 => ({ "po-menu-animation": a0 });
@@ -48061,7 +48092,7 @@ function PoMenuComponent_div_7_Template(rf, ctx) { if (rf & 1) {
48061
48092
  } if (rf & 2) {
48062
48093
  const ctx_r1 = i0.ɵɵnextContext();
48063
48094
  i0.ɵɵadvance();
48064
- i0.ɵɵproperty("p-class", ctx_r1.enableCollapse ? "po-menu-short-logo" : "po-menu-logo")("p-logo", ctx_r1.enableCollapse ? ctx_r1.shortLogo || ctx_r1.logo : ctx_r1.logo)("p-logo-alt", ctx_r1.logoAlt);
48095
+ i0.ɵɵproperty("p-class", ctx_r1.enableCollapse ? "po-menu-short-logo" : "po-menu-logo")("p-logo", ctx_r1.enableCollapse ? ctx_r1.shortLogo || ctx_r1.logo : ctx_r1.logo)("p-logo-alt", ctx_r1.logoAlt)("p-link", ctx_r1.logoLink);
48065
48096
  } }
48066
48097
  function PoMenuComponent_div_8_ng_container_1_Template(rf, ctx) { if (rf & 1) {
48067
48098
  i0.ɵɵelementContainer(0);
@@ -48623,7 +48654,7 @@ class PoMenuComponent extends PoMenuBaseComponent {
48623
48654
  } if (rf & 2) {
48624
48655
  let _t;
48625
48656
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.menuHeaderTemplate = _t.first);
48626
- } }, features: [i0.ɵɵProvidersFeature([PoMenuItemsService, PoMenuService]), i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 11, consts: [["class", "po-menu-overlay", 3, "click", 4, "ngIf"], [1, "po-menu-mobile", "po-clickable", 3, "click"], ["p-icon", "ICON_MENU"], [1, "po-menu", 3, "ngClass"], [1, "po-menu-container", 3, "mouseenter", "mouseleave"], [1, "po-menu-header"], ["class", "po-menu-header-container-logo", 4, "ngIf"], ["class", "po-menu-header-template", 4, "ngIf"], [3, "p-enable-collapse", "p-loading", "p-filter", 4, "ngIf"], [1, "po-menu-body"], [1, "po-menu-outer"], [1, "po-menu-inner"], [1, "po-menu-nav"], ["role", "menu", 1, "po-menu-list"], ["class", "po-menu-list-item", "role", "presentation", 4, "ngIf"], ["class", "po-menu-list-item", "role", "presentation", 3, "po-menu-item-first", 4, "ngFor", "ngForOf"], ["class", "po-menu-footer", 4, "ngIf"], [1, "po-menu-overlay", 3, "click"], [1, "po-menu-header-container-logo"], [3, "p-class", "p-logo", "p-logo-alt"], [1, "po-menu-header-template"], [4, "ngTemplateOutlet"], [3, "p-filter", "p-enable-collapse", "p-loading"], ["role", "presentation", 1, "po-menu-list-item"], ["p-icon", "ICON_INFO", "p-type", "noData", 3, "p-level", "p-label", "p-short-label"], [3, "p-action", "p-badge-alert", "p-badge-color", "p-badge-value", "p-collapsed-menu", "p-icon", "p-id", "p-label", "p-level", "p-link", "p-short-label", "p-sub-items", "p-type"], [1, "po-menu-footer"], ["type", "button", 1, "po-menu-collapse-button-icon", 3, "click"], ["aria-hidden", "true", 4, "ngIf"], [3, "p-icon"], ["aria-hidden", "true"]], template: function PoMenuComponent_Template(rf, ctx) { if (rf & 1) {
48657
+ } }, features: [i0.ɵɵProvidersFeature([PoMenuItemsService, PoMenuService]), i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 11, consts: [["class", "po-menu-overlay", 3, "click", 4, "ngIf"], [1, "po-menu-mobile", "po-clickable", 3, "click"], ["p-icon", "ICON_MENU"], [1, "po-menu", 3, "ngClass"], [1, "po-menu-container", 3, "mouseenter", "mouseleave"], [1, "po-menu-header"], ["class", "po-menu-header-container-logo", 4, "ngIf"], ["class", "po-menu-header-template", 4, "ngIf"], [3, "p-enable-collapse", "p-loading", "p-filter", 4, "ngIf"], [1, "po-menu-body"], [1, "po-menu-outer"], [1, "po-menu-inner"], [1, "po-menu-nav"], ["role", "menu", 1, "po-menu-list"], ["class", "po-menu-list-item", "role", "presentation", 4, "ngIf"], ["class", "po-menu-list-item", "role", "presentation", 3, "po-menu-item-first", 4, "ngFor", "ngForOf"], ["class", "po-menu-footer", 4, "ngIf"], [1, "po-menu-overlay", 3, "click"], [1, "po-menu-header-container-logo"], [3, "p-class", "p-logo", "p-logo-alt", "p-link"], [1, "po-menu-header-template"], [4, "ngTemplateOutlet"], [3, "p-filter", "p-enable-collapse", "p-loading"], ["role", "presentation", 1, "po-menu-list-item"], ["p-icon", "ICON_INFO", "p-type", "noData", 3, "p-level", "p-label", "p-short-label"], [3, "p-action", "p-badge-alert", "p-badge-color", "p-badge-value", "p-collapsed-menu", "p-icon", "p-id", "p-label", "p-level", "p-link", "p-short-label", "p-sub-items", "p-type"], [1, "po-menu-footer"], ["type", "button", 1, "po-menu-collapse-button-icon", 3, "click"], ["aria-hidden", "true", 4, "ngIf"], [3, "p-icon"], ["aria-hidden", "true"]], template: function PoMenuComponent_Template(rf, ctx) { if (rf & 1) {
48627
48658
  i0.ɵɵtemplate(0, PoMenuComponent_div_0_Template, 1, 0, "div", 0);
48628
48659
  i0.ɵɵelementStart(1, "div")(2, "div", 1);
48629
48660
  i0.ɵɵlistener("click", function PoMenuComponent_Template_div_click_2_listener() { return ctx.toggleMenuMobile(); });
@@ -48632,7 +48663,7 @@ class PoMenuComponent extends PoMenuBaseComponent {
48632
48663
  i0.ɵɵelementStart(4, "div", 3)(5, "div", 4);
48633
48664
  i0.ɵɵlistener("mouseenter", function PoMenuComponent_Template_div_mouseenter_5_listener() { return ctx.onMouseEnter(); })("mouseleave", function PoMenuComponent_Template_div_mouseleave_5_listener() { return ctx.onMouseLeave(); });
48634
48665
  i0.ɵɵelementStart(6, "div", 5);
48635
- i0.ɵɵtemplate(7, PoMenuComponent_div_7_Template, 2, 3, "div", 6)(8, PoMenuComponent_div_8_Template, 2, 1, "div", 7)(9, PoMenuComponent_po_menu_filter_9_Template, 1, 2, "po-menu-filter", 8);
48666
+ i0.ɵɵtemplate(7, PoMenuComponent_div_7_Template, 2, 4, "div", 6)(8, PoMenuComponent_div_8_Template, 2, 1, "div", 7)(9, PoMenuComponent_po_menu_filter_9_Template, 1, 2, "po-menu-filter", 8);
48636
48667
  i0.ɵɵelementEnd();
48637
48668
  i0.ɵɵelementStart(10, "div", 9)(11, "div", 10)(12, "div", 11)(13, "nav", 12)(14, "ul", 13);
48638
48669
  i0.ɵɵtemplate(15, PoMenuComponent_li_15_Template, 2, 3, "li", 14)(16, PoMenuComponent_li_16_Template, 2, 16, "li", 15);
@@ -48660,7 +48691,7 @@ class PoMenuComponent extends PoMenuBaseComponent {
48660
48691
  }
48661
48692
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoMenuComponent, [{
48662
48693
  type: Component,
48663
- args: [{ selector: 'po-menu', providers: [PoMenuItemsService, PoMenuService], template: "<div *ngIf=\"mobileOpened\" class=\"po-menu-overlay\" (click)=\"toggleMenuMobile()\"></div>\n\n<div>\n <div class=\"po-menu-mobile po-clickable\" (click)=\"toggleMenuMobile()\">\n <po-icon p-icon=\"ICON_MENU\"></po-icon>\n </div>\n\n <div class=\"po-menu\" [attr.aria-expanded]=\"!collapsed\" [ngClass]=\"{ 'po-menu-animation': mobileOpened }\">\n <div class=\"po-menu-container\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <div class=\"po-menu-header\">\n <div *ngIf=\"logo || (shortLogo && enableCollapse)\" class=\"po-menu-header-container-logo\">\n <po-logo\n [p-class]=\"enableCollapse ? 'po-menu-short-logo' : 'po-menu-logo'\"\n [p-logo]=\"enableCollapse ? shortLogo || logo : logo\"\n [p-logo-alt]=\"logoAlt\"\n ></po-logo>\n </div>\n\n <div *ngIf=\"!enableCollapse && menuHeaderTemplate\" class=\"po-menu-header-template\">\n <ng-container *ngTemplateOutlet=\"menuHeaderTemplate.templateRef\"></ng-container>\n </div>\n\n <po-menu-filter\n *ngIf=\"filter\"\n [p-enable-collapse]=\"enableCollapse\"\n [p-loading]=\"filterLoading\"\n (p-filter)=\"debounceFilter($event)\"\n ></po-menu-filter>\n </div>\n\n <div class=\"po-menu-body\">\n <div class=\"po-menu-outer\">\n <div class=\"po-menu-inner\">\n <nav class=\"po-menu-nav\">\n <ul class=\"po-menu-list\" role=\"menu\">\n <li *ngIf=\"noData\" class=\"po-menu-list-item\" role=\"presentation\">\n <po-menu-item\n p-icon=\"ICON_INFO\"\n p-type=\"noData\"\n [p-level]=\"1\"\n [p-label]=\"literals.itemNotFound\"\n [p-short-label]=\"literals.itemNotFound\"\n ></po-menu-item>\n </li>\n <li\n *ngFor=\"let menu of filteredItems; let menuIndex = index\"\n class=\"po-menu-list-item\"\n role=\"presentation\"\n [attr.aria-level]=\"menu.level\"\n [class.po-menu-item-first]=\"menuIndex === 0\"\n >\n <po-menu-item\n [p-action]=\"menu.action\"\n [p-badge-alert]=\"menu.badgeAlert\"\n [p-badge-color]=\"menu.badge ? menu.badge.color : undefined\"\n [p-badge-value]=\"menu.badge ? menu.badge.value : undefined\"\n [p-collapsed-menu]=\"enableCollapse\"\n [p-icon]=\"allowIcons ? menu.icon : null\"\n [p-id]=\"menu.id\"\n [p-label]=\"menu.label\"\n [p-level]=\"menu.level\"\n [p-link]=\"menu.link\"\n [p-short-label]=\"menu.shortLabel\"\n [p-sub-items]=\"menu.subItems\"\n [p-type]=\"menu.type\"\n ></po-menu-item>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"hasFooter\" class=\"po-menu-footer\">\n <button\n class=\"po-menu-collapse-button-icon\"\n type=\"button\"\n [attr.aria-label]=\"enableCollapseButton ? literals.close : literals.open\"\n (click)=\"toggle()\"\n >\n <span *ngIf=\"enableCollapseButton\" aria-hidden=\"true\">{{ literals.close }}</span>\n\n <po-icon [p-icon]=\"enableCollapse ? 'ICON_MENU_OPEN' : 'ICON_MENU_CLOSE'\"></po-icon>\n </button>\n </div>\n </div>\n</div>\n" }]
48694
+ args: [{ selector: 'po-menu', providers: [PoMenuItemsService, PoMenuService], template: "<div *ngIf=\"mobileOpened\" class=\"po-menu-overlay\" (click)=\"toggleMenuMobile()\"></div>\n\n<div>\n <div class=\"po-menu-mobile po-clickable\" (click)=\"toggleMenuMobile()\">\n <po-icon p-icon=\"ICON_MENU\"></po-icon>\n </div>\n\n <div class=\"po-menu\" [attr.aria-expanded]=\"!collapsed\" [ngClass]=\"{ 'po-menu-animation': mobileOpened }\">\n <div class=\"po-menu-container\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <div class=\"po-menu-header\">\n <div *ngIf=\"logo || (shortLogo && enableCollapse)\" class=\"po-menu-header-container-logo\">\n <po-logo\n [p-class]=\"enableCollapse ? 'po-menu-short-logo' : 'po-menu-logo'\"\n [p-logo]=\"enableCollapse ? shortLogo || logo : logo\"\n [p-logo-alt]=\"logoAlt\"\n [p-link]=\"logoLink\"\n ></po-logo>\n </div>\n\n <div *ngIf=\"!enableCollapse && menuHeaderTemplate\" class=\"po-menu-header-template\">\n <ng-container *ngTemplateOutlet=\"menuHeaderTemplate.templateRef\"></ng-container>\n </div>\n\n <po-menu-filter\n *ngIf=\"filter\"\n [p-enable-collapse]=\"enableCollapse\"\n [p-loading]=\"filterLoading\"\n (p-filter)=\"debounceFilter($event)\"\n ></po-menu-filter>\n </div>\n\n <div class=\"po-menu-body\">\n <div class=\"po-menu-outer\">\n <div class=\"po-menu-inner\">\n <nav class=\"po-menu-nav\">\n <ul class=\"po-menu-list\" role=\"menu\">\n <li *ngIf=\"noData\" class=\"po-menu-list-item\" role=\"presentation\">\n <po-menu-item\n p-icon=\"ICON_INFO\"\n p-type=\"noData\"\n [p-level]=\"1\"\n [p-label]=\"literals.itemNotFound\"\n [p-short-label]=\"literals.itemNotFound\"\n ></po-menu-item>\n </li>\n <li\n *ngFor=\"let menu of filteredItems; let menuIndex = index\"\n class=\"po-menu-list-item\"\n role=\"presentation\"\n [attr.aria-level]=\"menu.level\"\n [class.po-menu-item-first]=\"menuIndex === 0\"\n >\n <po-menu-item\n [p-action]=\"menu.action\"\n [p-badge-alert]=\"menu.badgeAlert\"\n [p-badge-color]=\"menu.badge ? menu.badge.color : undefined\"\n [p-badge-value]=\"menu.badge ? menu.badge.value : undefined\"\n [p-collapsed-menu]=\"enableCollapse\"\n [p-icon]=\"allowIcons ? menu.icon : null\"\n [p-id]=\"menu.id\"\n [p-label]=\"menu.label\"\n [p-level]=\"menu.level\"\n [p-link]=\"menu.link\"\n [p-short-label]=\"menu.shortLabel\"\n [p-sub-items]=\"menu.subItems\"\n [p-type]=\"menu.type\"\n ></po-menu-item>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"hasFooter\" class=\"po-menu-footer\">\n <button\n class=\"po-menu-collapse-button-icon\"\n type=\"button\"\n [attr.aria-label]=\"enableCollapseButton ? literals.close : literals.open\"\n (click)=\"toggle()\"\n >\n <span *ngIf=\"enableCollapseButton\" aria-hidden=\"true\">{{ literals.close }}</span>\n\n <po-icon [p-icon]=\"enableCollapse ? 'ICON_MENU_OPEN' : 'ICON_MENU_CLOSE'\"></po-icon>\n </button>\n </div>\n </div>\n</div>\n" }]
48664
48695
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i2.Router }, { type: PoMenuItemsService }, { type: PoMenuGlobalService }, { type: PoMenuService }, { type: PoLanguageService }], { menuHeaderTemplate: [{
48665
48696
  type: ContentChild,
48666
48697
  args: [PoMenuHeaderTemplateDirective, { static: true }]