@ngrdt/menu 0.0.7 → 0.0.8

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.
@@ -522,11 +522,11 @@ export class RdtMenuOverlayComponent {
522
522
  .subscribe((event) => this.onTabKeyPress(event));
523
523
  }
524
524
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
525
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: { item: "item", level: "level", preferredHorizontalDir: "preferredHorizontalDir", preferredVerticalDir: "preferredVerticalDir", expanded: "expanded", autofocusItem: "autofocusItem", anchorElement: "anchorElement" }, host: { listeners: { "window:focusout": "checkActiveElement($event)" }, properties: { "class.expanded": "this.expanded", "attr.role": "this.roleAttr", "attr.tabindex": "this.tabindexAttr", "style.z-index": "this.zIndex" } }, viewQueries: [{ propertyName: "menuItemContainer", first: true, predicate: ["menuItemContainer"], descendants: true }, { propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <vnsh-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <vnsh-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">&gt;</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <vnsh-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--vnsh-menu-min-width);box-shadow:var(--vnsh-menu-box-shadow);border-radius:var(--vnsh-menu-border-radius);max-height:calc(100vh - var(--vnsh-menu-margin-top, 0px) - var(--vnsh-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--vnsh-menu-padding-horizontal-padding) 0;border-radius:var(--vnsh-menu-border-radius);background-color:var(--vnsh-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--vnsh-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--vnsh-menu-item-padding);width:100%;background-color:var(--vnsh-menu-item-background);color:var(--vnsh-menu-item-text-color)}.menu-item-content:hover{background-color:var(--vnsh-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--vnsh-menu-item-background-focus);outline:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["anyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
525
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: { item: "item", level: "level", preferredHorizontalDir: "preferredHorizontalDir", preferredVerticalDir: "preferredVerticalDir", expanded: "expanded", autofocusItem: "autofocusItem", anchorElement: "anchorElement" }, host: { listeners: { "window:focusout": "checkActiveElement($event)" }, properties: { "class.expanded": "this.expanded", "attr.role": "this.roleAttr", "attr.tabindex": "this.tabindexAttr", "style.z-index": "this.zIndex" } }, viewQueries: [{ propertyName: "menuItemContainer", first: true, predicate: ["menuItemContainer"], descendants: true }, { propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">&gt;</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["anyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
526
526
  }
527
527
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuOverlayComponent, decorators: [{
528
528
  type: Component,
529
- args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <vnsh-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <vnsh-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">&gt;</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <vnsh-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--vnsh-menu-min-width);box-shadow:var(--vnsh-menu-box-shadow);border-radius:var(--vnsh-menu-border-radius);max-height:calc(100vh - var(--vnsh-menu-margin-top, 0px) - var(--vnsh-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--vnsh-menu-padding-horizontal-padding) 0;border-radius:var(--vnsh-menu-border-radius);background-color:var(--vnsh-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--vnsh-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--vnsh-menu-item-padding);width:100%;background-color:var(--vnsh-menu-item-background);color:var(--vnsh-menu-item-text-color)}.menu-item-content:hover{background-color:var(--vnsh-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--vnsh-menu-item-background-focus);outline:none}\n"] }]
529
+ args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">&gt;</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"] }]
530
530
  }], propDecorators: { children: [{
531
531
  type: ViewChildren,
532
532
  args: [RdtMenuOverlayComponent]
@@ -566,4 +566,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
566
566
  type: HostListener,
567
567
  args: ['window:focusout', ['$event']]
568
568
  }] } });
569
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFFUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsR0FDMUIsTUFBTSxXQUFXLENBQUM7QUFLbkIsT0FBTyxFQUNMLGFBQWEsRUFHYixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxN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SztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sYUFBYTtzQkFEWixLQUFLO2dCQUlFLFFBQVE7c0JBRGYsV0FBVzt1QkFBQyxXQUFXO2dCQUloQixZQUFZO3NCQURuQixXQUFXO3VCQUFDLGVBQWU7Z0JBSXhCLE1BQU07c0JBRFQsV0FBVzt1QkFBQyxlQUFlO2dCQW9YcEIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgUmR0U2hvcnRjdXQsXHJcbiAgUmR0U2hvcnRjdXRFdmVudCxcclxuICBSZHRTaG9ydGN1dFNlcnZpY2UsXHJcbn0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdE9iamVjdFV0aWxzLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaXJzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4sXHJcbn0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEZPQ1VTX1ZJU0lCTEUsXHJcbiAgSG9yRGlyV2l0aE9mZnNldCxcclxuICBWZXJ0RGlyV2l0aE9mZnNldCxcclxuICBhcmVIb3JEaXJzRXF1YWwsXHJcbiAgYXJlVmVydERpcnNFcXVhbCxcclxuICBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4LFxyXG4gIG1lbnVJdGVtSGFzQ2hpbGRyZW4sXHJcbiAgbWVudUl0ZW1IYXNSb3V0ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuLy8gVE9ETzogU3BsaXQgcG9zaXRpb25pbmcgYW5kIHNob3J0Y3V0L2ZvY3VzIG1hbmFnZW1lbnQgaW4gc2VwYXJhdGUgY2xhc3Nlc1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JkdC1tZW51LW92ZXJsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51T3ZlcmxheUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcclxue1xyXG4gIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XHJcbiAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdG9wTGV2ZWxNZW51ID0gaW5qZWN0KFJkdE1lbnVCYXNlQ29tcG9uZW50KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudE1lbnUgPSBpbmplY3QoUmR0TWVudU92ZXJsYXlDb21wb25lbnQsIHtcclxuICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgc2tpcFNlbGY6IHRydWUsXHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNob3J0Y3V0U2VydmljZSA9IGluamVjdChSZHRTaG9ydGN1dFNlcnZpY2UpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFJkdE1lbnVPdmVybGF5Q29tcG9uZW50KVxyXG4gIHByaXZhdGUgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcml2YXRlIGZvY3VzYWJsZUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51SXRlbUNvbnRhaW5lcicpXHJcbiAgcHJpdmF0ZSBtZW51SXRlbUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaXRlbSE6IFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGxldmVsITogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uID0gREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5leHBhbmRlZCcpXHJcbiAgQElucHV0KClcclxuICBleHBhbmRlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGF1dG9mb2N1c0l0ZW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gRWxlbWVudCB1c2VkIHRvIHJlbGF0aXZlbHkgcG9zaXRpb24gbWVudSxcclxuICAvLyB0eXBpY2FsbHkgcGFyZW50IGVsZW1lbnQuXHJcbiAgLy8gSWYgbm90IHNwZWNpZmllZCwgcGFyZW50IGVsZW1lbnQgaXMgdXNlZC5cclxuICBASW5wdXQoKVxyXG4gIGFuY2hvckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxyXG4gIHByaXZhdGUgcm9sZUF0dHIgPSAnbWVudSc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXHJcbiAgcHJpdmF0ZSB0YWJpbmRleEF0dHIgPSAnLTEnO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxyXG4gIGdldCB6SW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sZXZlbCArIDEwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUm9vdExldmVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgPT09IDA7XHJcbiAgfVxyXG5cclxuICAvLyBCb3VuZGluZyBib3ggb2YgdGhpcyBleGNsdWRpbmcgYW55IGV4dHJhIG9mZnNldC5cclxuICBwcml2YXRlIF9ib3ghOiBET01SZWN0O1xyXG4gIGdldCBib3goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm94O1xyXG4gIH1cclxuXHJcbiAgLy8gQm91bmRpbmcgYm94IG9mIHBhcmVudCBlbGVtZW50LlxyXG4gIHByaXZhdGUgX2FuY2hvckJveCE6IERPTVJlY3Q7XHJcbiAgcHJpdmF0ZSBfY29udGFpbmVyUGFkZGluZyA9IHsgdG9wOiAwLCBib3R0b206IDAgfTtcclxuXHJcbiAgLy8gUmVjYWxjdWxhdGUgY2hpbGQgY29tcG9uZW50cyBvbmx5IGFmdGVyIHRoZXkgYXJlIGluaXRpYWxpemVkLlxyXG4gIHByaXZhdGUgX3ZpZXdXYXNJbml0ID0gZmFsc2U7XHJcblxyXG4gIC8vIEN1cnJlbnRseSBhcHBsaWVkIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGRpcmVjdGlvbnMuXHJcbiAgcHJvdGVjdGVkIHZlcnRpY2FsRGlyOiBWZXJ0RGlyV2l0aE9mZnNldCB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBob3Jpem9udGFsRGlyOiBIb3JEaXJXaXRoT2Zmc2V0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBleHBhbmRlZENoaWxkOiBQYXJzZWRSZHRNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBhdXRvZm9jdXNTdWJtZW51SXRlbTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgPSBudWxsO1xyXG5cclxuICByZWFkb25seSBrZXlBY3Rpb25zID0ge1xyXG4gICAgW0tCX0NPREUuQVJST1cuVVBdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c1ByZXZJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkRPV05dOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c05leHRJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlJJR0hUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdmaXJzdCcpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuTEVGVF06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5IT01FXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0oMCksXHJcbiAgICBbS0JfQ09ERS5FTkRdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSh0aGlzLml0ZW0uaXRlbXMubGVuZ3RoIC0gMSksXHJcbiAgICBbS0JfQ09ERS5FU0NBUEVdOiAoKSA9PiB0aGlzLmNsb3NlU2VsZigpLFxyXG4gICAgW0tCX0NPREUuRU5URVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICAgIFtLQl9DT0RFLlNQQUNFQkFSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldENsYXNzZXMoKTtcclxuICAgIHRoaXMubGlzdGVuVGFiS2V5UHJlc3MoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlY2FsY1RyaWdnZXJzID0gW1xyXG4gICAgICAncHJlZmVycmVkSG9yaXpvbnRhbERpcicsXHJcbiAgICAgICdwcmVmZXJyZWRWZXJ0aWNhbERpcicsXHJcbiAgICAgICdleHBhbmRlZCcsXHJcbiAgICBdO1xyXG4gICAgaWYgKHJlY2FsY1RyaWdnZXJzLnNvbWUoKGtleSkgPT4ga2V5IGluIGNoYW5nZXMpICYmIHRoaXMuX3ZpZXdXYXNJbml0KSB7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIsXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpclxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgnZXhwYW5kZWQnIGluIGNoYW5nZXMgJiYgdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICAvLyBXYWl0IGZvciBBbmd1bGFyIHRvIHNldCAuZXhwYW5kZWQgY2xhc3MsXHJcbiAgICAgIC8vIGJlY2F1c2UgaW52aXNpYmxlIGVsZW1lbnRzIGNhbm5vdCBiZSBmb2N1c2VkLlxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuYXV0b2ZvY3VzSXRlbSkge1xyXG4gICAgICAgICAgY2FzZSBudWxsOlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzSXRlbSgwLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnZmlyc3QnOlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzSXRlbSgwLCB0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdsYXN0JzpcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0odGhpcy5pdGVtLml0ZW1zLmxlbmd0aCAtIDEsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVDb250YWluZXJQYWRkaW5nKCk7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgIHRoaXMucHJlZmVycmVkSG9yaXpvbnRhbERpcixcclxuICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpclxyXG4gICAgKTtcclxuICAgIHRoaXMuX3ZpZXdXYXNJbml0ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWluT2Zmc2V0TGVmdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1heE9mZnNldExlZnQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgdGhpcy5fYm94LndpZHRoIC1cclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWluT2Zmc2V0VG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4udG9wO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhPZmZzZXRUb3AoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCAtXHJcbiAgICAgIHRoaXMuX2JveC5oZWlnaHQgLVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmJvdHRvbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gICAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uXHJcbiAgKSB7XHJcbiAgICAvLyBNYWtlIG1lbnUgaW52aXNpYmxlIHNvIHRoZSBtZW51IGRvZXMgbm90IG1vdmUgYXJvdW5kIGluIGNhc2Ugb2Ygc2xvdyBjb21wdXRlci5cclxuICAgIHRoaXMubWVhc3VyZUJvdW5kaW5nUmVjdCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fYm94IHx8ICF0aGlzLl9hbmNob3JCb3gpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld0hvckRpciA9IHRoaXMuZ2V0UmVhbEhvcml6b250YWxEaXIocHJlZmVycmVkSG9yaXpvbnRhbERpcik7XHJcbiAgICBjb25zdCBuZXdWZXJ0RGlyID0gdGhpcy5nZXRSZWFsVmVydGljYWxEaXIocHJlZmVycmVkVmVydGljYWxEaXIpO1xyXG5cclxuICAgIC8vIEhvcml6b250YWwgZGlyZWN0aW9uXHJcbiAgICBpZiAobmV3SG9yRGlyLmRpciA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gubGVmdDtcclxuICAgICAgaWYgKCF0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5ld0hvckRpci5kaXIgPT09ICdsZWZ0Jykge1xyXG4gICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gubGVmdCAtIHRoaXMuX2JveC53aWR0aDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdHJpY3Rpb25zIGZyb20gbGVmdCBtZW51IGFuZCByaWdodCBtZW51XHJcbiAgICBuZXdIb3JEaXIubGVmdCA9IE1hdGgubWluKFxyXG4gICAgICBNYXRoLm1heCh0aGlzLmdldE1pbk9mZnNldExlZnQoKSwgbmV3SG9yRGlyLmxlZnQpLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldExlZnQoKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBWZXJ0aWNhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdWZXJ0RGlyLmRpciA9PT0gJ2Rvd24nKSB7XHJcbiAgICAgIG5ld1ZlcnREaXIudG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcDtcclxuICAgICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCArPSB0aGlzLl9hbmNob3JCb3guaGVpZ2h0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wIC09IHRoaXMuX2NvbnRhaW5lclBhZGRpbmcudG9wO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5ld1ZlcnREaXIuZGlyID09PSAndXAnKSB7XHJcbiAgICAgIG5ld1ZlcnREaXIudG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICAgIGlmICghdGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wICs9IHRoaXMuX2FuY2hvckJveC5oZWlnaHQgKyB0aGlzLl9jb250YWluZXJQYWRkaW5nLnRvcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RyaWN0aW9ucyBmcm9tIGhlYWRlciBhbmQgZm9vdGVyXHJcbiAgICBuZXdWZXJ0RGlyLnRvcCA9IE1hdGgubWluKFxyXG4gICAgICBNYXRoLm1heCh0aGlzLmdldE1pbk9mZnNldFRvcCgpLCBuZXdWZXJ0RGlyLnRvcCksXHJcbiAgICAgIHRoaXMuZ2V0TWF4T2Zmc2V0VG9wKClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhYXJlSG9yRGlyc0VxdWFsKHRoaXMuaG9yaXpvbnRhbERpciwgbmV3SG9yRGlyKSB8fFxyXG4gICAgICAhYXJlVmVydERpcnNFcXVhbCh0aGlzLnZlcnRpY2FsRGlyLCBuZXdWZXJ0RGlyKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaG9yaXpvbnRhbERpciA9IG5ld0hvckRpcjtcclxuICAgICAgdGhpcy52ZXJ0aWNhbERpciA9IG5ld1ZlcnREaXI7XHJcbiAgICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xyXG4gICAgICB0aGlzLm1lYXN1cmVCb3VuZGluZ1JlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSk7XHJcbiAgICBpZiAoaGFzQ2hpbGRyZW4gJiYgdGhpcy5leHBhbmRlZENoaWxkICE9PSBpdGVtKSB7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIENvdWxkIGFsc28gbGlzdGVuIHRvIHJvdXRlciBldmVudHMsIGJ1dCBtaWdodCBiZSB0cmlnZ2VyZWQgYnlcclxuICAgIC8vIGNoaWxkIHJvdXRlciBuYXZpZ2F0aW9uLlxyXG4gICAgaWYgKCFoYXNDaGlsZHJlbikge1xyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGl0ZW0uY29tbWFuZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpdGVtLmNvbW1hbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGludm9rZUl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKG1lbnVJdGVtSGFzUm91dGUoaXRlbSkgJiYgaXRlbS5yb3V0ZXJMaW5rKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKGl0ZW0ucm91dGVyTGluayk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrKGl0ZW0pO1xyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9ICdmaXJzdCc7XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZFJvdXRlcyhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmdldENoaWxkUm91dGVzKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkID0gZmFsc2UpIHtcclxuICAgIGlmIChmb2N1c0V4cGFuZGVkICYmIHRoaXMuZXhwYW5kZWRDaGlsZCkge1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0l0ZW1SZWN1cnNpdmVseShwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5wYXRoXTtcclxuICAgIGNvbnN0IHRoaXNJdGVtID0gY2hpbGRyZW4uc2hpZnQoKSE7XHJcblxyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICB0aGlzLmF1dG9mb2N1c0l0ZW0gPSBudWxsO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQW5kR2V0Q2hpbGQodGhpc0l0ZW0pXHJcbiAgICAgICAgLnBpcGUoZGVsYXkoMSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgob3ZlcmxheSkgPT4ge1xyXG4gICAgICAgICAgb3ZlcmxheS5mb2N1c0l0ZW1SZWN1cnNpdmVseShjaGlsZHJlbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGaXJzdCBmb2N1cyB0aGUgY29ycmVjdCBpdGVtIGJlY2F1c2Ugc3VibWVudSBtaWdodCBoYXZlIGZvY3VzIG9uIGl0LlxyXG4gICAgICAvLyBSZW1vdmluZyBmb2N1c2VkIGVsZW1lbnQgZnJvbSBET00gcmVzdWx0cyBpbiB3aW5kb3c6Zm9jdXNvdXQgZXZlbnRcclxuICAgICAgLy8gYW5kIHRoYXQgY2xvc2VzIGFsbCBtZW51c1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSk7XHJcbiAgICAgIC8vIE5vdyBjbG9zZSBzdWJtZW51cyBhbmQgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gRE9NXHJcbiAgICAgIHRoaXMuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgICAvLyBXYWl0IHVudGlsIHRoZXkgYXJlIHJlbW92ZWQgYW5kIGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYWdhaW5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRBbmRHZXRDaGlsZChpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKHRoaXMuaXRlbS5pdGVtcy5pbmRleE9mKGl0ZW0pIDwgMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0F0dGVtcHRpbmcgdG8gZXhwYW5kIGl0ZW0gdGhhdCBpcyBub3QgY2hpbGQgaXRlbSBvZiB0aGlzLml0ZW0nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pO1xyXG4gICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgIHJldHVybiBvZihjaGlsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pKSxcclxuICAgICAgICBmaXJzdChSZHRPYmplY3RVdGlscy5ub3ROdWxsR3VhcmQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGl0ZW1JbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgaGFzQWN0aW9uID0gZXZlbnQuY29kZSBpbiB0aGlzLmtleUFjdGlvbnM7XHJcbiAgICBjb25zdCBpc0xldHRlciA9XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzQWxwaGFiZXRDaGFyYWN0ZXIoZXZlbnQua2V5KSB8fFxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc051bWVyaWNDaGFyYWN0ZXIoZXZlbnQua2V5KTtcclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uIHx8IGlzTGV0dGVyKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgdGhpcy5rZXlBY3Rpb25zW2V2ZW50LmNvZGVdKGl0ZW1JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4KFxyXG4gICAgICAgIHRoaXMuaXRlbS5pdGVtcyxcclxuICAgICAgICBpdGVtSW5kZXgsXHJcbiAgICAgICAgZXZlbnQua2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UYWJLZXlQcmVzcyhldmVudDogUmR0U2hvcnRjdXRFdmVudCkge1xyXG4gICAgLy8gRG8gbm90IHByZXZlbnQgZGVmYXVsdCB0byBjb3JyZWN0bHkgc3dpdGNoIHRvIHByZXZpb3VzIGVsZW1lbnRcclxuICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyBXYWl0IGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIHN3aXRjaCB0byBuZXcgZWxlbWVudFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcclxuICAgICAgICB0aGlzLmNsb3NlU2VsZihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VJdGVtQ2xpY2tCeUluZGV4KGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnZva2VJdGVtQ2xpY2soaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzSXRlbShpdGVtOiBudW1iZXIgfCBQYXJzZWRSZHRNZW51SXRlbSwgdmlzaWJsZUZvY3VzID0gdHJ1ZSkge1xyXG4gICAgbGV0IGl0ZW1JbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgaXRlbUluZGV4ID0gaXRlbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IHRoaXMuaXRlbS5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmJsdXJBbGxGb2N1c2FibGUoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXgsIHZpc2libGVGb2N1cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJsdXJBbGxGb2N1c2FibGUoKSB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsKSA9PlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZ2V0KGl0ZW1JbmRleCk7XHJcbiAgICBpZiAoZWxSZWYpIHtcclxuICAgICAgaWYgKHZpc2libGVGb2N1cykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c05leHRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBuZXh0ID0gKGl0ZW1JbmRleCArIDEpICUgdGhpcy5pdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c1ByZXZJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBwcmV2ID1cclxuICAgICAgKGl0ZW1JbmRleCAtIDEgKyB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoKSAlIHRoaXMuaXRlbS5pdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShwcmV2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlblN1Ym1lbnUoaXRlbUluZGV4OiBudW1iZXIsIHZpc2libGVGb2N1czogJ2ZpcnN0JyB8ICdsYXN0Jykge1xyXG4gICAgaWYgKFxyXG4gICAgICBpdGVtSW5kZXggPCB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4odGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF0pXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gdGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSB2aXNpYmxlRm9jdXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlU2VsZihmb2N1c0V4cGFuZGVkID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMucGFyZW50TWVudSkge1xyXG4gICAgICB0aGlzLnBhcmVudE1lbnUuY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6Zm9jdXNvdXQnLCBbJyRldmVudCddKVxyXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVFbGVtZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICBpZiAodGhpcy50b3BMZXZlbE1lbnUuY2xvc2VPbkZvY3VzT3V0KSB7XHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGF0ZXMgZGlyZWN0aW9uIG9mIHRoaXMgbWVudSBhbmQgb2Zmc2V0IGluIGNhc2VcclxuICAvLyBtZW51IHdvbid0IGZpdCBpbiBsZWZ0IG5vciByaWdodCBvZiBwYXJlbnQgbWVudS5cclxuICBwcml2YXRlIGdldFJlYWxIb3Jpem9udGFsRGlyKFxyXG4gICAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvblxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcclxuICAgIGxldCByaWdodDogbnVtYmVyO1xyXG4gICAgLy8gVGhpcyBtZW51IGlzIGRpcmVjdGx5IHVuZGVyIG1lbnViYXJcclxuICAgIGlmICh0aGlzLmxldmVsID09PSAwKSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gucmlnaHQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICAgIHJpZ2h0ID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgICAodGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTWVudSBpcyBuZXN0ZWRcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gucmlnaHQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgICBsZWZ0ID0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGVmdCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICByaWdodCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIGlmIChwcmVmZXJyZWRIb3Jpem9udGFsRGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIC8vIFdlIHVzZSBwcmVmZXJyZWQgaWYgcG9zc2libGUuXHJcbiAgICAgIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gVGhlbiB0aGUgb3RoZXIgb25lLlxyXG4gICAgICB9IGVsc2UgaWYgKGxlZnQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gRWRnZSBjYXNlIGlmIG5laXRoZXIgZGlyZWN0aW9uIGNhbiBiZSB1c2VkICh1bHRyYSBuYXJyb3cgc2NyZWVuKS5cclxuICAgICAgICAvLyBDaG9vc2UgZGlyZWN0aW9uIHRoYXQgY292ZXJzIGxlYXN0IG9mIHBhcmVudCBtZW51LlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIobGVmdCwgcmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZpbmRzIG91dCB3aGVyZSB0byBwdXQgbWVudSBpbiBjYXNlIHNjcmVlbiBpcyB0b28gbmFycm93IGZvciB0d28gbWVudXNcclxuICAvLyB0byBmaXQgbmV4dCB0byBlYWNoIG90aGVyLiBNaW5pbWl6ZXMgYXJlYSBvZiBwYXJlbnQgbWVudSBjb3ZlcmVkIGJ5IHRoaXMuXHJcbiAgcHJpdmF0ZSBnZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgcmlnaHQ6IG51bWJlclxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgY29uc3Qgc2NyZWVuU3RhcnQgPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICBjb25zdCBzY3JlZW5FbmQgPVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IHNjcmVlbkNlbnRlciA9IChzY3JlZW5TdGFydCAtIHNjcmVlbkVuZCkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGxlZnRTdGFydCA9IE1hdGgubWF4KHRoaXMuX2FuY2hvckJveC5sZWZ0LCBzY3JlZW5TdGFydCk7XHJcbiAgICBjb25zdCBsZWZ0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5DZW50ZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdGFydCA9IE1hdGgubWF4KHNjcmVlbkNlbnRlciwgbGVmdEVuZCk7XHJcbiAgICBjb25zdCByaWdodEVuZCA9IE1hdGgubWluKFxyXG4gICAgICB0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2FuY2hvckJveC53aWR0aCxcclxuICAgICAgc2NyZWVuRW5kXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsZWZ0RW5kIC0gbGVmdFN0YXJ0ID4gcmlnaHRFbmQgLSByaWdodFN0YXJ0KSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogcmlnaHQgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAtbGVmdCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsVmVydGljYWxEaXIoXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApOiBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZXQgdG9wOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDApIHtcclxuICAgICAgYm90dG9tID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCArXHJcbiAgICAgICAgdGhpcy5fYW5jaG9yQm94LmJvdHRvbSAtXHJcbiAgICAgICAgdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgdG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgICB0aGlzLl9hbmNob3JCb3gudG9wIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3guYm90dG9tIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0b3AgLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgICBib3R0b20gLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5ib3R0b207XHJcblxyXG4gICAgaWYgKHByZWZlcnJlZFZlcnRpY2FsRGlyID09PSAnZG93bicpIHtcclxuICAgICAgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChib3R0b20gPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2Rvd24nLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWVhc3VyZXMgYm91bmRpbmcgcmVjdCBvZiB0aGlzIGFuZCBvZmZzZXQgY29udGFpbmVyXHJcbiAgLy8gU2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYWZ0ZXIgcGFyZW50IG1lbnUgaGFzIGFscmVhZHkgYmVlbiBtZWFzdXJlZC5cclxuICBwcml2YXRlIG1lYXN1cmVCb3VuZGluZ1JlY3QoKSB7XHJcbiAgICB0aGlzLl9ib3ggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBhbmNob3IgPVxyXG4gICAgICB0aGlzLmFuY2hvckVsZW1lbnQgPz8gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQhO1xyXG4gICAgdGhpcy5fYW5jaG9yQm94ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZWFzdXJlQ29udGFpbmVyUGFkZGluZygpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShcclxuICAgICAgdGhpcy5tZW51SXRlbUNvbnRhaW5lci5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMucGFkZGluZ1RvcCk7XHJcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nQm90dG9tKTtcclxuICAgIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogcGFkZGluZ1RvcCwgYm90dG9tOiBwYWRkaW5nQm90dG9tIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRlZCAmJiB0aGlzLmhvcml6b250YWxEaXIgJiYgdGhpcy52ZXJ0aWNhbERpcikge1xyXG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgICB0aGlzLmhvcml6b250YWxEaXIhLmRpcixcclxuICAgICAgICAgIHRoaXMudmVydGljYWxEaXIhLmRpclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3NlcygpIHtcclxuICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyKSB7XHJcbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyLmRpciA9PT0gJ3VwJykge1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0T2Zmc2V0KCd0b3AnLCB0aGlzLnZlcnRpY2FsRGlyLnRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbERpcikge1xyXG4gICAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ2xlZnQnLCB0aGlzLmhvcml6b250YWxEaXIubGVmdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXJvb3QnKTtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtc3ViJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRPZmZzZXQoZGlyZWN0aW9uOiAndG9wJyB8ICdsZWZ0JywgdmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGRpcmVjdGlvbiwgYCR7dmFsdWV9cHhgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuVGFiS2V5UHJlc3MoKSB7XHJcbiAgICBjb25zdCBzaGlmdFRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgnc2hpZnQnLCAndGFiJyk7XHJcbiAgICBjb25zdCB0YWIgPSBSZHRTaG9ydGN1dC5jcmVhdGVVbnNhZmUoJ3RhYicpO1xyXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2VcclxuICAgICAgLmxpc3RlbihbdGFiLCBzaGlmdFRhYl0sIHtcclxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25UYWJLZXlQcmVzcyhldmVudCkpO1xyXG4gIH1cclxufVxyXG4iLCI8dWwgY2xhc3M9XCJtZW51LWl0ZW0tY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiICNtZW51SXRlbUNvbnRhaW5lcj5cclxuICA8bGlcclxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW0uaXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgICNhbmNob3JFbFxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLmV4dGVybmFsTGlua1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLml0ZW1zID8gJ21lbnUnIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICAgIDx2bnNoLWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zXCJcclxuICAgICAgICAgICAgbmFtZT1cImNoZXZyb25fcmlnaHRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8dm5zaC1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0taWNvblwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIC0tPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0taWNvblwiICpuZ0lmPVwiaXRlbS5pdGVtc1wiPiZndDs8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNsaW5rQm9keSBsZXQtaXRlbT5cclxuICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnNob3J0Y3V0XCIgY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPCEtLSBUT0RPOlxyXG4gICAgICAgIDx2bnNoLWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ucm91dGVyTGlua1wiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0tY29udGVudFwiXHJcbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXHJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHRlcm5hbExpbmtcIj5cclxuICAgICAgPGFcclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gQ2hpbGQgbWVudXMgZXhpc3Qgb25seSBpZiB0aGlzIG1lbnUgaXMgZXhwYW5kZWQuIC0tPlxyXG4gICAgPCEtLSBPbmx5IG9uZSBpbnZpc2libGUgbGV2ZWwgaXMgYWx3YXlzIGF0dGFjaGVkIHRvIERPTSwgdGhlIHJlc3QgZG9lcyBub3QgZXhpc3QuIC0tPlxyXG4gICAgPHJkdC1tZW51LW92ZXJsYXlcclxuICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zICYmIGV4cGFuZGVkXCJcclxuICAgICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXHJcbiAgICAgIFtleHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJob3Jpem9udGFsRGlyPy5kaXIhXCJcclxuICAgICAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInZlcnRpY2FsRGlyPy5kaXIhXCJcclxuICAgICAgW2xldmVsXT1cImxldmVsICsgMVwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgPC9saT5cclxuPC91bD5cclxuIl19
569
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFFUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsR0FDMUIsTUFBTSxXQUFXLENBQUM7QUFLbkIsT0FBTyxFQUNMLGFBQWEsRUFHYixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxN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SztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sYUFBYTtzQkFEWixLQUFLO2dCQUlFLFFBQVE7c0JBRGYsV0FBVzt1QkFBQyxXQUFXO2dCQUloQixZQUFZO3NCQURuQixXQUFXO3VCQUFDLGVBQWU7Z0JBSXhCLE1BQU07c0JBRFQsV0FBVzt1QkFBQyxlQUFlO2dCQW9YcEIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgUmR0U2hvcnRjdXQsXHJcbiAgUmR0U2hvcnRjdXRFdmVudCxcclxuICBSZHRTaG9ydGN1dFNlcnZpY2UsXHJcbn0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdE9iamVjdFV0aWxzLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaXJzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4sXHJcbn0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEZPQ1VTX1ZJU0lCTEUsXHJcbiAgSG9yRGlyV2l0aE9mZnNldCxcclxuICBWZXJ0RGlyV2l0aE9mZnNldCxcclxuICBhcmVIb3JEaXJzRXF1YWwsXHJcbiAgYXJlVmVydERpcnNFcXVhbCxcclxuICBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4LFxyXG4gIG1lbnVJdGVtSGFzQ2hpbGRyZW4sXHJcbiAgbWVudUl0ZW1IYXNSb3V0ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuLy8gVE9ETzogU3BsaXQgcG9zaXRpb25pbmcgYW5kIHNob3J0Y3V0L2ZvY3VzIG1hbmFnZW1lbnQgaW4gc2VwYXJhdGUgY2xhc3Nlc1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JkdC1tZW51LW92ZXJsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51T3ZlcmxheUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcclxue1xyXG4gIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XHJcbiAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdG9wTGV2ZWxNZW51ID0gaW5qZWN0KFJkdE1lbnVCYXNlQ29tcG9uZW50KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudE1lbnUgPSBpbmplY3QoUmR0TWVudU92ZXJsYXlDb21wb25lbnQsIHtcclxuICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgc2tpcFNlbGY6IHRydWUsXHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNob3J0Y3V0U2VydmljZSA9IGluamVjdChSZHRTaG9ydGN1dFNlcnZpY2UpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFJkdE1lbnVPdmVybGF5Q29tcG9uZW50KVxyXG4gIHByaXZhdGUgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcml2YXRlIGZvY3VzYWJsZUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51SXRlbUNvbnRhaW5lcicpXHJcbiAgcHJpdmF0ZSBtZW51SXRlbUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaXRlbSE6IFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGxldmVsITogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uID0gREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5leHBhbmRlZCcpXHJcbiAgQElucHV0KClcclxuICBleHBhbmRlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGF1dG9mb2N1c0l0ZW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gRWxlbWVudCB1c2VkIHRvIHJlbGF0aXZlbHkgcG9zaXRpb24gbWVudSxcclxuICAvLyB0eXBpY2FsbHkgcGFyZW50IGVsZW1lbnQuXHJcbiAgLy8gSWYgbm90IHNwZWNpZmllZCwgcGFyZW50IGVsZW1lbnQgaXMgdXNlZC5cclxuICBASW5wdXQoKVxyXG4gIGFuY2hvckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxyXG4gIHByaXZhdGUgcm9sZUF0dHIgPSAnbWVudSc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXHJcbiAgcHJpdmF0ZSB0YWJpbmRleEF0dHIgPSAnLTEnO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxyXG4gIGdldCB6SW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sZXZlbCArIDEwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUm9vdExldmVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgPT09IDA7XHJcbiAgfVxyXG5cclxuICAvLyBCb3VuZGluZyBib3ggb2YgdGhpcyBleGNsdWRpbmcgYW55IGV4dHJhIG9mZnNldC5cclxuICBwcml2YXRlIF9ib3ghOiBET01SZWN0O1xyXG4gIGdldCBib3goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm94O1xyXG4gIH1cclxuXHJcbiAgLy8gQm91bmRpbmcgYm94IG9mIHBhcmVudCBlbGVtZW50LlxyXG4gIHByaXZhdGUgX2FuY2hvckJveCE6IERPTVJlY3Q7XHJcbiAgcHJpdmF0ZSBfY29udGFpbmVyUGFkZGluZyA9IHsgdG9wOiAwLCBib3R0b206IDAgfTtcclxuXHJcbiAgLy8gUmVjYWxjdWxhdGUgY2hpbGQgY29tcG9uZW50cyBvbmx5IGFmdGVyIHRoZXkgYXJlIGluaXRpYWxpemVkLlxyXG4gIHByaXZhdGUgX3ZpZXdXYXNJbml0ID0gZmFsc2U7XHJcblxyXG4gIC8vIEN1cnJlbnRseSBhcHBsaWVkIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGRpcmVjdGlvbnMuXHJcbiAgcHJvdGVjdGVkIHZlcnRpY2FsRGlyOiBWZXJ0RGlyV2l0aE9mZnNldCB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBob3Jpem9udGFsRGlyOiBIb3JEaXJXaXRoT2Zmc2V0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBleHBhbmRlZENoaWxkOiBQYXJzZWRSZHRNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBhdXRvZm9jdXNTdWJtZW51SXRlbTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgPSBudWxsO1xyXG5cclxuICByZWFkb25seSBrZXlBY3Rpb25zID0ge1xyXG4gICAgW0tCX0NPREUuQVJST1cuVVBdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c1ByZXZJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkRPV05dOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c05leHRJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlJJR0hUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdmaXJzdCcpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuTEVGVF06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5IT01FXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0oMCksXHJcbiAgICBbS0JfQ09ERS5FTkRdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSh0aGlzLml0ZW0uaXRlbXMubGVuZ3RoIC0gMSksXHJcbiAgICBbS0JfQ09ERS5FU0NBUEVdOiAoKSA9PiB0aGlzLmNsb3NlU2VsZigpLFxyXG4gICAgW0tCX0NPREUuRU5URVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICAgIFtLQl9DT0RFLlNQQUNFQkFSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldENsYXNzZXMoKTtcclxuICAgIHRoaXMubGlzdGVuVGFiS2V5UHJlc3MoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlY2FsY1RyaWdnZXJzID0gW1xyXG4gICAgICAncHJlZmVycmVkSG9yaXpvbnRhbERpcicsXHJcbiAgICAgICdwcmVmZXJyZWRWZXJ0aWNhbERpcicsXHJcbiAgICAgICdleHBhbmRlZCcsXHJcbiAgICBdO1xyXG4gICAgaWYgKHJlY2FsY1RyaWdnZXJzLnNvbWUoKGtleSkgPT4ga2V5IGluIGNoYW5nZXMpICYmIHRoaXMuX3ZpZXdXYXNJbml0KSB7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIsXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpclxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgnZXhwYW5kZWQnIGluIGNoYW5nZXMgJiYgdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICAvLyBXYWl0IGZvciBBbmd1bGFyIHRvIHNldCAuZXhwYW5kZWQgY2xhc3MsXHJcbiAgICAgIC8vIGJlY2F1c2UgaW52aXNpYmxlIGVsZW1lbnRzIGNhbm5vdCBiZSBmb2N1c2VkLlxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuYXV0b2ZvY3VzSXRlbSkge1xyXG4gICAgICAgICAgY2FzZSBudWxsOlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzSXRlbSgwLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnZmlyc3QnOlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzSXRlbSgwLCB0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdsYXN0JzpcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0odGhpcy5pdGVtLml0ZW1zLmxlbmd0aCAtIDEsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVDb250YWluZXJQYWRkaW5nKCk7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgIHRoaXMucHJlZmVycmVkSG9yaXpvbnRhbERpcixcclxuICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpclxyXG4gICAgKTtcclxuICAgIHRoaXMuX3ZpZXdXYXNJbml0ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWluT2Zmc2V0TGVmdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1heE9mZnNldExlZnQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgdGhpcy5fYm94LndpZHRoIC1cclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWluT2Zmc2V0VG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4udG9wO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhPZmZzZXRUb3AoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCAtXHJcbiAgICAgIHRoaXMuX2JveC5oZWlnaHQgLVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmJvdHRvbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gICAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uXHJcbiAgKSB7XHJcbiAgICAvLyBNYWtlIG1lbnUgaW52aXNpYmxlIHNvIHRoZSBtZW51IGRvZXMgbm90IG1vdmUgYXJvdW5kIGluIGNhc2Ugb2Ygc2xvdyBjb21wdXRlci5cclxuICAgIHRoaXMubWVhc3VyZUJvdW5kaW5nUmVjdCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fYm94IHx8ICF0aGlzLl9hbmNob3JCb3gpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld0hvckRpciA9IHRoaXMuZ2V0UmVhbEhvcml6b250YWxEaXIocHJlZmVycmVkSG9yaXpvbnRhbERpcik7XHJcbiAgICBjb25zdCBuZXdWZXJ0RGlyID0gdGhpcy5nZXRSZWFsVmVydGljYWxEaXIocHJlZmVycmVkVmVydGljYWxEaXIpO1xyXG5cclxuICAgIC8vIEhvcml6b250YWwgZGlyZWN0aW9uXHJcbiAgICBpZiAobmV3SG9yRGlyLmRpciA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gubGVmdDtcclxuICAgICAgaWYgKCF0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5ld0hvckRpci5kaXIgPT09ICdsZWZ0Jykge1xyXG4gICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gubGVmdCAtIHRoaXMuX2JveC53aWR0aDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdHJpY3Rpb25zIGZyb20gbGVmdCBtZW51IGFuZCByaWdodCBtZW51XHJcbiAgICBuZXdIb3JEaXIubGVmdCA9IE1hdGgubWluKFxyXG4gICAgICBNYXRoLm1heCh0aGlzLmdldE1pbk9mZnNldExlZnQoKSwgbmV3SG9yRGlyLmxlZnQpLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldExlZnQoKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBWZXJ0aWNhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdWZXJ0RGlyLmRpciA9PT0gJ2Rvd24nKSB7XHJcbiAgICAgIG5ld1ZlcnREaXIudG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcDtcclxuICAgICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCArPSB0aGlzLl9hbmNob3JCb3guaGVpZ2h0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wIC09IHRoaXMuX2NvbnRhaW5lclBhZGRpbmcudG9wO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5ld1ZlcnREaXIuZGlyID09PSAndXAnKSB7XHJcbiAgICAgIG5ld1ZlcnREaXIudG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICAgIGlmICghdGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wICs9IHRoaXMuX2FuY2hvckJveC5oZWlnaHQgKyB0aGlzLl9jb250YWluZXJQYWRkaW5nLnRvcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RyaWN0aW9ucyBmcm9tIGhlYWRlciBhbmQgZm9vdGVyXHJcbiAgICBuZXdWZXJ0RGlyLnRvcCA9IE1hdGgubWluKFxyXG4gICAgICBNYXRoLm1heCh0aGlzLmdldE1pbk9mZnNldFRvcCgpLCBuZXdWZXJ0RGlyLnRvcCksXHJcbiAgICAgIHRoaXMuZ2V0TWF4T2Zmc2V0VG9wKClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhYXJlSG9yRGlyc0VxdWFsKHRoaXMuaG9yaXpvbnRhbERpciwgbmV3SG9yRGlyKSB8fFxyXG4gICAgICAhYXJlVmVydERpcnNFcXVhbCh0aGlzLnZlcnRpY2FsRGlyLCBuZXdWZXJ0RGlyKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaG9yaXpvbnRhbERpciA9IG5ld0hvckRpcjtcclxuICAgICAgdGhpcy52ZXJ0aWNhbERpciA9IG5ld1ZlcnREaXI7XHJcbiAgICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xyXG4gICAgICB0aGlzLm1lYXN1cmVCb3VuZGluZ1JlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSk7XHJcbiAgICBpZiAoaGFzQ2hpbGRyZW4gJiYgdGhpcy5leHBhbmRlZENoaWxkICE9PSBpdGVtKSB7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIENvdWxkIGFsc28gbGlzdGVuIHRvIHJvdXRlciBldmVudHMsIGJ1dCBtaWdodCBiZSB0cmlnZ2VyZWQgYnlcclxuICAgIC8vIGNoaWxkIHJvdXRlciBuYXZpZ2F0aW9uLlxyXG4gICAgaWYgKCFoYXNDaGlsZHJlbikge1xyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGl0ZW0uY29tbWFuZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpdGVtLmNvbW1hbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGludm9rZUl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKG1lbnVJdGVtSGFzUm91dGUoaXRlbSkgJiYgaXRlbS5yb3V0ZXJMaW5rKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKGl0ZW0ucm91dGVyTGluayk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrKGl0ZW0pO1xyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9ICdmaXJzdCc7XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZFJvdXRlcyhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmdldENoaWxkUm91dGVzKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkID0gZmFsc2UpIHtcclxuICAgIGlmIChmb2N1c0V4cGFuZGVkICYmIHRoaXMuZXhwYW5kZWRDaGlsZCkge1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0l0ZW1SZWN1cnNpdmVseShwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5wYXRoXTtcclxuICAgIGNvbnN0IHRoaXNJdGVtID0gY2hpbGRyZW4uc2hpZnQoKSE7XHJcblxyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICB0aGlzLmF1dG9mb2N1c0l0ZW0gPSBudWxsO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQW5kR2V0Q2hpbGQodGhpc0l0ZW0pXHJcbiAgICAgICAgLnBpcGUoZGVsYXkoMSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgob3ZlcmxheSkgPT4ge1xyXG4gICAgICAgICAgb3ZlcmxheS5mb2N1c0l0ZW1SZWN1cnNpdmVseShjaGlsZHJlbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGaXJzdCBmb2N1cyB0aGUgY29ycmVjdCBpdGVtIGJlY2F1c2Ugc3VibWVudSBtaWdodCBoYXZlIGZvY3VzIG9uIGl0LlxyXG4gICAgICAvLyBSZW1vdmluZyBmb2N1c2VkIGVsZW1lbnQgZnJvbSBET00gcmVzdWx0cyBpbiB3aW5kb3c6Zm9jdXNvdXQgZXZlbnRcclxuICAgICAgLy8gYW5kIHRoYXQgY2xvc2VzIGFsbCBtZW51c1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSk7XHJcbiAgICAgIC8vIE5vdyBjbG9zZSBzdWJtZW51cyBhbmQgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gRE9NXHJcbiAgICAgIHRoaXMuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgICAvLyBXYWl0IHVudGlsIHRoZXkgYXJlIHJlbW92ZWQgYW5kIGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYWdhaW5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRBbmRHZXRDaGlsZChpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKHRoaXMuaXRlbS5pdGVtcy5pbmRleE9mKGl0ZW0pIDwgMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0F0dGVtcHRpbmcgdG8gZXhwYW5kIGl0ZW0gdGhhdCBpcyBub3QgY2hpbGQgaXRlbSBvZiB0aGlzLml0ZW0nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pO1xyXG4gICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgIHJldHVybiBvZihjaGlsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pKSxcclxuICAgICAgICBmaXJzdChSZHRPYmplY3RVdGlscy5ub3ROdWxsR3VhcmQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGl0ZW1JbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgaGFzQWN0aW9uID0gZXZlbnQuY29kZSBpbiB0aGlzLmtleUFjdGlvbnM7XHJcbiAgICBjb25zdCBpc0xldHRlciA9XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzQWxwaGFiZXRDaGFyYWN0ZXIoZXZlbnQua2V5KSB8fFxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc051bWVyaWNDaGFyYWN0ZXIoZXZlbnQua2V5KTtcclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uIHx8IGlzTGV0dGVyKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgdGhpcy5rZXlBY3Rpb25zW2V2ZW50LmNvZGVdKGl0ZW1JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4KFxyXG4gICAgICAgIHRoaXMuaXRlbS5pdGVtcyxcclxuICAgICAgICBpdGVtSW5kZXgsXHJcbiAgICAgICAgZXZlbnQua2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UYWJLZXlQcmVzcyhldmVudDogUmR0U2hvcnRjdXRFdmVudCkge1xyXG4gICAgLy8gRG8gbm90IHByZXZlbnQgZGVmYXVsdCB0byBjb3JyZWN0bHkgc3dpdGNoIHRvIHByZXZpb3VzIGVsZW1lbnRcclxuICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyBXYWl0IGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIHN3aXRjaCB0byBuZXcgZWxlbWVudFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcclxuICAgICAgICB0aGlzLmNsb3NlU2VsZihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VJdGVtQ2xpY2tCeUluZGV4KGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnZva2VJdGVtQ2xpY2soaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzSXRlbShpdGVtOiBudW1iZXIgfCBQYXJzZWRSZHRNZW51SXRlbSwgdmlzaWJsZUZvY3VzID0gdHJ1ZSkge1xyXG4gICAgbGV0IGl0ZW1JbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgaXRlbUluZGV4ID0gaXRlbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IHRoaXMuaXRlbS5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmJsdXJBbGxGb2N1c2FibGUoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXgsIHZpc2libGVGb2N1cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJsdXJBbGxGb2N1c2FibGUoKSB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsKSA9PlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZ2V0KGl0ZW1JbmRleCk7XHJcbiAgICBpZiAoZWxSZWYpIHtcclxuICAgICAgaWYgKHZpc2libGVGb2N1cykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c05leHRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBuZXh0ID0gKGl0ZW1JbmRleCArIDEpICUgdGhpcy5pdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c1ByZXZJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBwcmV2ID1cclxuICAgICAgKGl0ZW1JbmRleCAtIDEgKyB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoKSAlIHRoaXMuaXRlbS5pdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShwcmV2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlblN1Ym1lbnUoaXRlbUluZGV4OiBudW1iZXIsIHZpc2libGVGb2N1czogJ2ZpcnN0JyB8ICdsYXN0Jykge1xyXG4gICAgaWYgKFxyXG4gICAgICBpdGVtSW5kZXggPCB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4odGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF0pXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gdGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSB2aXNpYmxlRm9jdXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlU2VsZihmb2N1c0V4cGFuZGVkID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMucGFyZW50TWVudSkge1xyXG4gICAgICB0aGlzLnBhcmVudE1lbnUuY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6Zm9jdXNvdXQnLCBbJyRldmVudCddKVxyXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVFbGVtZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICBpZiAodGhpcy50b3BMZXZlbE1lbnUuY2xvc2VPbkZvY3VzT3V0KSB7XHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGF0ZXMgZGlyZWN0aW9uIG9mIHRoaXMgbWVudSBhbmQgb2Zmc2V0IGluIGNhc2VcclxuICAvLyBtZW51IHdvbid0IGZpdCBpbiBsZWZ0IG5vciByaWdodCBvZiBwYXJlbnQgbWVudS5cclxuICBwcml2YXRlIGdldFJlYWxIb3Jpem9udGFsRGlyKFxyXG4gICAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvblxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcclxuICAgIGxldCByaWdodDogbnVtYmVyO1xyXG4gICAgLy8gVGhpcyBtZW51IGlzIGRpcmVjdGx5IHVuZGVyIG1lbnViYXJcclxuICAgIGlmICh0aGlzLmxldmVsID09PSAwKSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gucmlnaHQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICAgIHJpZ2h0ID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgICAodGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTWVudSBpcyBuZXN0ZWRcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gucmlnaHQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgICBsZWZ0ID0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGVmdCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICByaWdodCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIGlmIChwcmVmZXJyZWRIb3Jpem9udGFsRGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIC8vIFdlIHVzZSBwcmVmZXJyZWQgaWYgcG9zc2libGUuXHJcbiAgICAgIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gVGhlbiB0aGUgb3RoZXIgb25lLlxyXG4gICAgICB9IGVsc2UgaWYgKGxlZnQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gRWRnZSBjYXNlIGlmIG5laXRoZXIgZGlyZWN0aW9uIGNhbiBiZSB1c2VkICh1bHRyYSBuYXJyb3cgc2NyZWVuKS5cclxuICAgICAgICAvLyBDaG9vc2UgZGlyZWN0aW9uIHRoYXQgY292ZXJzIGxlYXN0IG9mIHBhcmVudCBtZW51LlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIobGVmdCwgcmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZpbmRzIG91dCB3aGVyZSB0byBwdXQgbWVudSBpbiBjYXNlIHNjcmVlbiBpcyB0b28gbmFycm93IGZvciB0d28gbWVudXNcclxuICAvLyB0byBmaXQgbmV4dCB0byBlYWNoIG90aGVyLiBNaW5pbWl6ZXMgYXJlYSBvZiBwYXJlbnQgbWVudSBjb3ZlcmVkIGJ5IHRoaXMuXHJcbiAgcHJpdmF0ZSBnZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgcmlnaHQ6IG51bWJlclxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgY29uc3Qgc2NyZWVuU3RhcnQgPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICBjb25zdCBzY3JlZW5FbmQgPVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IHNjcmVlbkNlbnRlciA9IChzY3JlZW5TdGFydCAtIHNjcmVlbkVuZCkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGxlZnRTdGFydCA9IE1hdGgubWF4KHRoaXMuX2FuY2hvckJveC5sZWZ0LCBzY3JlZW5TdGFydCk7XHJcbiAgICBjb25zdCBsZWZ0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5DZW50ZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdGFydCA9IE1hdGgubWF4KHNjcmVlbkNlbnRlciwgbGVmdEVuZCk7XHJcbiAgICBjb25zdCByaWdodEVuZCA9IE1hdGgubWluKFxyXG4gICAgICB0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2FuY2hvckJveC53aWR0aCxcclxuICAgICAgc2NyZWVuRW5kXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsZWZ0RW5kIC0gbGVmdFN0YXJ0ID4gcmlnaHRFbmQgLSByaWdodFN0YXJ0KSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogcmlnaHQgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAtbGVmdCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsVmVydGljYWxEaXIoXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApOiBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZXQgdG9wOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDApIHtcclxuICAgICAgYm90dG9tID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCArXHJcbiAgICAgICAgdGhpcy5fYW5jaG9yQm94LmJvdHRvbSAtXHJcbiAgICAgICAgdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgdG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgICB0aGlzLl9hbmNob3JCb3gudG9wIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3guYm90dG9tIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0b3AgLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgICBib3R0b20gLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5ib3R0b207XHJcblxyXG4gICAgaWYgKHByZWZlcnJlZFZlcnRpY2FsRGlyID09PSAnZG93bicpIHtcclxuICAgICAgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChib3R0b20gPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2Rvd24nLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWVhc3VyZXMgYm91bmRpbmcgcmVjdCBvZiB0aGlzIGFuZCBvZmZzZXQgY29udGFpbmVyXHJcbiAgLy8gU2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYWZ0ZXIgcGFyZW50IG1lbnUgaGFzIGFscmVhZHkgYmVlbiBtZWFzdXJlZC5cclxuICBwcml2YXRlIG1lYXN1cmVCb3VuZGluZ1JlY3QoKSB7XHJcbiAgICB0aGlzLl9ib3ggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBhbmNob3IgPVxyXG4gICAgICB0aGlzLmFuY2hvckVsZW1lbnQgPz8gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQhO1xyXG4gICAgdGhpcy5fYW5jaG9yQm94ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZWFzdXJlQ29udGFpbmVyUGFkZGluZygpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShcclxuICAgICAgdGhpcy5tZW51SXRlbUNvbnRhaW5lci5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMucGFkZGluZ1RvcCk7XHJcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nQm90dG9tKTtcclxuICAgIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogcGFkZGluZ1RvcCwgYm90dG9tOiBwYWRkaW5nQm90dG9tIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRlZCAmJiB0aGlzLmhvcml6b250YWxEaXIgJiYgdGhpcy52ZXJ0aWNhbERpcikge1xyXG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgICB0aGlzLmhvcml6b250YWxEaXIhLmRpcixcclxuICAgICAgICAgIHRoaXMudmVydGljYWxEaXIhLmRpclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3NlcygpIHtcclxuICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyKSB7XHJcbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyLmRpciA9PT0gJ3VwJykge1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0T2Zmc2V0KCd0b3AnLCB0aGlzLnZlcnRpY2FsRGlyLnRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbERpcikge1xyXG4gICAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ2xlZnQnLCB0aGlzLmhvcml6b250YWxEaXIubGVmdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXJvb3QnKTtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtc3ViJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRPZmZzZXQoZGlyZWN0aW9uOiAndG9wJyB8ICdsZWZ0JywgdmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGRpcmVjdGlvbiwgYCR7dmFsdWV9cHhgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuVGFiS2V5UHJlc3MoKSB7XHJcbiAgICBjb25zdCBzaGlmdFRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgnc2hpZnQnLCAndGFiJyk7XHJcbiAgICBjb25zdCB0YWIgPSBSZHRTaG9ydGN1dC5jcmVhdGVVbnNhZmUoJ3RhYicpO1xyXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2VcclxuICAgICAgLmxpc3RlbihbdGFiLCBzaGlmdFRhYl0sIHtcclxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25UYWJLZXlQcmVzcyhldmVudCkpO1xyXG4gIH1cclxufVxyXG4iLCI8dWwgY2xhc3M9XCJtZW51LWl0ZW0tY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiICNtZW51SXRlbUNvbnRhaW5lcj5cclxuICA8bGlcclxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW0uaXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgICNhbmNob3JFbFxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLmV4dGVybmFsTGlua1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLml0ZW1zID8gJ21lbnUnIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxyXG4gICAgICAgICAgICBuYW1lPVwiY2hldnJvbl9yaWdodFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAtLT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLWljb25cIiAqbmdJZj1cIml0ZW0uaXRlbXNcIj4mZ3Q7PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ucm91dGVyTGlua1wiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0tY29udGVudFwiXHJcbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXHJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHRlcm5hbExpbmtcIj5cclxuICAgICAgPGFcclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gQ2hpbGQgbWVudXMgZXhpc3Qgb25seSBpZiB0aGlzIG1lbnUgaXMgZXhwYW5kZWQuIC0tPlxyXG4gICAgPCEtLSBPbmx5IG9uZSBpbnZpc2libGUgbGV2ZWwgaXMgYWx3YXlzIGF0dGFjaGVkIHRvIERPTSwgdGhlIHJlc3QgZG9lcyBub3QgZXhpc3QuIC0tPlxyXG4gICAgPHJkdC1tZW51LW92ZXJsYXlcclxuICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zICYmIGV4cGFuZGVkXCJcclxuICAgICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXHJcbiAgICAgIFtleHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJob3Jpem9udGFsRGlyPy5kaXIhXCJcclxuICAgICAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInZlcnRpY2FsRGlyPy5kaXIhXCJcclxuICAgICAgW2xldmVsXT1cImxldmVsICsgMVwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgPC9saT5cclxuPC91bD5cclxuIl19
@@ -6,6 +6,7 @@ import { RdtKeyListenerDirective } from '@ngrdt/shortcuts';
6
6
  import { RdtAnyRouteActiveDirective } from '@ngrdt/router';
7
7
  import { RdtMenuComponent } from './menu/rdt-menu.component';
8
8
  import { RdtMenuBarComponent } from './menu-bar/rdt-menu-bar.component';
9
+ import { RdtButtonOutletDirective } from '@ngrdt/button';
9
10
  import * as i0 from "@angular/core";
10
11
  export class RdtMenuModule {
11
12
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -14,7 +15,8 @@ export class RdtMenuModule {
14
15
  RdtMenuBarComponent], imports: [CommonModule,
15
16
  RouterModule,
16
17
  RdtAnyRouteActiveDirective,
17
- RdtKeyListenerDirective], exports: [RdtMenuComponent, RdtMenuBarComponent] });
18
+ RdtKeyListenerDirective,
19
+ RdtButtonOutletDirective], exports: [RdtMenuComponent, RdtMenuBarComponent] });
18
20
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuModule, imports: [CommonModule,
19
21
  RouterModule] });
20
22
  }
@@ -26,6 +28,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
26
28
  RouterModule,
27
29
  RdtAnyRouteActiveDirective,
28
30
  RdtKeyListenerDirective,
31
+ RdtButtonOutletDirective,
29
32
  ],
30
33
  declarations: [
31
34
  RdtMenuOverlayComponent,
@@ -35,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
35
38
  exports: [RdtMenuComponent, RdtMenuBarComponent],
36
39
  }]
37
40
  }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9yZHQtbWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFnQnhFLE1BQU0sT0FBTyxhQUFhO3VHQUFiLGFBQWE7d0dBQWIsYUFBYSxpQkFOdEIsdUJBQXVCO1lBQ3ZCLGdCQUFnQjtZQUNoQixtQkFBbUIsYUFSbkIsWUFBWTtZQUNaLFlBQVk7WUFDWiwwQkFBMEI7WUFDMUIsdUJBQXVCLGFBT2YsZ0JBQWdCLEVBQUUsbUJBQW1CO3dHQUVwQyxhQUFhLFlBWnRCLFlBQVk7WUFDWixZQUFZOzsyRkFXSCxhQUFhO2tCQWR6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osMEJBQTBCO3dCQUMxQix1QkFBdUI7cUJBQ3hCO29CQUNELFlBQVksRUFBRTt3QkFDWix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQztpQkFDakQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRNZW51T3ZlcmxheUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0S2V5TGlzdGVuZXJEaXJlY3RpdmUgfSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHsgUmR0QW55Um91dGVBY3RpdmVEaXJlY3RpdmUgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS9yZHQtbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWJhci9yZHQtbWVudS1iYXIuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgUmR0QW55Um91dGVBY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSxcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUmR0TWVudU92ZXJsYXlDb21wb25lbnQsXHJcbiAgICBSZHRNZW51Q29tcG9uZW50LFxyXG4gICAgUmR0TWVudUJhckNvbXBvbmVudCxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtSZHRNZW51Q29tcG9uZW50LCBSZHRNZW51QmFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVNb2R1bGUge31cclxuIl19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9yZHQtbWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBaUJ6RCxNQUFNLE9BQU8sYUFBYTt1R0FBYixhQUFhO3dHQUFiLGFBQWEsaUJBTnRCLHVCQUF1QjtZQUN2QixnQkFBZ0I7WUFDaEIsbUJBQW1CLGFBVG5CLFlBQVk7WUFDWixZQUFZO1lBQ1osMEJBQTBCO1lBQzFCLHVCQUF1QjtZQUN2Qix3QkFBd0IsYUFPaEIsZ0JBQWdCLEVBQUUsbUJBQW1CO3dHQUVwQyxhQUFhLFlBYnRCLFlBQVk7WUFDWixZQUFZOzsyRkFZSCxhQUFhO2tCQWZ6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLHdCQUF3QjtxQkFDekI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2lCQUNqRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdE1lbnVPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi9tZW51LW92ZXJsYXkvcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQgeyBSZHRBbnlSb3V0ZUFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9tZW51L3JkdC1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXJDb21wb25lbnQgfSBmcm9tICcuL21lbnUtYmFyL3JkdC1tZW51LWJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZHRCdXR0b25PdXRsZXREaXJlY3RpdmUgfSBmcm9tICdAbmdyZHQvYnV0dG9uJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgUmR0QW55Um91dGVBY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSxcclxuICAgIFJkdEJ1dHRvbk91dGxldERpcmVjdGl2ZSxcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUmR0TWVudU92ZXJsYXlDb21wb25lbnQsXHJcbiAgICBSZHRNZW51Q29tcG9uZW50LFxyXG4gICAgUmR0TWVudUJhckNvbXBvbmVudCxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtSZHRNZW51Q29tcG9uZW50LCBSZHRNZW51QmFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVNb2R1bGUge31cclxuIl19