@worktile/theia 14.3.14 → 14.3.15

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.
@@ -16,6 +16,7 @@ export declare class TheContextMenuComponent implements OnInit {
16
16
  itemMouseleave(event: MouseEvent, entity: MenuEntity): void;
17
17
  itemMouseenter(event: MouseEvent, entity: MenuEntity): void;
18
18
  inputNumberFocus(e: Event): void;
19
+ itemEnterHandle(e: MouseEvent, entity: MenuEntity): void;
19
20
  constructor(elementRef: ElementRef, thyPopoverRef: ThyPopoverRef<TheContextMenuComponent>);
20
21
  ngOnInit(): void;
21
22
  static ɵfac: i0.ɵɵFactoryDeclaration<TheContextMenuComponent, never>;
@@ -39,13 +39,19 @@ export class TheContextMenuComponent {
39
39
  inputNumberFocus(e) {
40
40
  e.target.focus();
41
41
  }
42
+ itemEnterHandle(e, entity) {
43
+ e.preventDefault();
44
+ e.stopPropagation();
45
+ this.actionHandle(entity);
46
+ this.thyPopoverRef.close();
47
+ }
42
48
  ngOnInit() { }
43
49
  }
44
50
  TheContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TheContextMenuComponent, deps: [{ token: i0.ElementRef }, { token: i1.ThyPopoverRef }], target: i0.ɵɵFactoryTarget.Component });
45
- TheContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TheContextMenuComponent, selector: "the-contextmenu", inputs: { menuEntities: "menuEntities", actionHandle: "actionHandle", activeHandle: "activeHandle", deactivateHandle: "deactivateHandle" }, host: { listeners: { "document: mousedown": "handleDocumentMouseDown($event)", "mousedown": "handleMouseDown($event)" }, properties: { "class.the-overlay-menu-wrap": "this.wrap" } }, ngImport: i0, template: "<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon\n *ngIf=\"item?.backgroundColor; else elseIcon\"\n [thyIconName]=\"item.icon\"\n thyIconType=\"twotone\"\n [thyTwotoneColor]=\"item.backgroundColor\"\n ></thy-icon>\n <ng-template #elseIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </ng-template>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemMousedown($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: i5.ThyEnterDirective, selector: "[thyEnter]", outputs: ["thyEnter"] }, { kind: "directive", type: i5.ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: i6.ThyDropdownMenuDividerComponent, selector: "thy-dropdown-menu-divider" }, { kind: "directive", type: i6.ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: i6.ThyDropdownMenuItemNameDirective, selector: "[thyDropdownMenuItemName]" }, { kind: "directive", type: i6.ThyDropdownMenuItemIconDirective, selector: "[thyDropdownMenuItemIcon]" }, { kind: "directive", type: i6.ThyDropdownMenuItemExtendIconDirective, selector: "[thyDropdownMenuItemExtendIcon]" }, { kind: "component", type: i7.ThyInputNumberComponent, selector: "thy-input-number", inputs: ["thyAutoFocus", "thyPlaceholder", "thyDisabled", "thyMax", "thyMin", "thyStep", "thySize", "thyPrecision", "thySuffix"], outputs: ["thyBlur", "thyFocus"] }] });
51
+ TheContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TheContextMenuComponent, selector: "the-contextmenu", inputs: { menuEntities: "menuEntities", actionHandle: "actionHandle", activeHandle: "activeHandle", deactivateHandle: "deactivateHandle" }, host: { listeners: { "document: mousedown": "handleDocumentMouseDown($event)", "mousedown": "handleMouseDown($event)" }, properties: { "class.the-overlay-menu-wrap": "this.wrap" } }, ngImport: i0, template: "<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon\n *ngIf=\"item?.backgroundColor; else elseIcon\"\n [thyIconName]=\"item.icon\"\n thyIconType=\"twotone\"\n [thyTwotoneColor]=\"item.backgroundColor\"\n ></thy-icon>\n <ng-template #elseIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </ng-template>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemEnterHandle($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: i5.ThyEnterDirective, selector: "[thyEnter]", outputs: ["thyEnter"] }, { kind: "directive", type: i5.ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: i6.ThyDropdownMenuDividerComponent, selector: "thy-dropdown-menu-divider" }, { kind: "directive", type: i6.ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: i6.ThyDropdownMenuItemNameDirective, selector: "[thyDropdownMenuItemName]" }, { kind: "directive", type: i6.ThyDropdownMenuItemIconDirective, selector: "[thyDropdownMenuItemIcon]" }, { kind: "directive", type: i6.ThyDropdownMenuItemExtendIconDirective, selector: "[thyDropdownMenuItemExtendIcon]" }, { kind: "component", type: i7.ThyInputNumberComponent, selector: "thy-input-number", inputs: ["thyAutoFocus", "thyPlaceholder", "thyDisabled", "thyMax", "thyMin", "thyStep", "thySize", "thyPrecision", "thySuffix"], outputs: ["thyBlur", "thyFocus"] }] });
46
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TheContextMenuComponent, decorators: [{
47
53
  type: Component,
48
- args: [{ selector: 'the-contextmenu', template: "<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon\n *ngIf=\"item?.backgroundColor; else elseIcon\"\n [thyIconName]=\"item.icon\"\n thyIconType=\"twotone\"\n [thyTwotoneColor]=\"item.backgroundColor\"\n ></thy-icon>\n <ng-template #elseIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </ng-template>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemMousedown($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n" }]
54
+ args: [{ selector: 'the-contextmenu', template: "<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon\n *ngIf=\"item?.backgroundColor; else elseIcon\"\n [thyIconName]=\"item.icon\"\n thyIconType=\"twotone\"\n [thyTwotoneColor]=\"item.backgroundColor\"\n ></thy-icon>\n <ng-template #elseIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </ng-template>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemEnterHandle($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n" }]
49
55
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ThyPopoverRef }]; }, propDecorators: { menuEntities: [{
50
56
  type: Input
51
57
  }], actionHandle: [{
@@ -64,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
64
70
  type: HostListener,
65
71
  args: ['mousedown', ['$event']]
66
72
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dG1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBUWhHLE1BQU0sT0FBTyx1QkFBdUI7SUFpRGhDLFlBQW1CLFVBQXNCLEVBQVUsYUFBcUQ7UUFBckYsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUF3QztRQS9DeEcsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBWWhDLFNBQUksR0FBRyxJQUFJLENBQUM7SUFtQytGLENBQUM7SUFoQzVHLHVCQUF1QixDQUFDLEtBQWlCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUdELGVBQWUsQ0FBQyxLQUFpQjtRQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBaUIsRUFBRSxNQUFrQjtRQUMvQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBaUIsRUFBRSxNQUFrQjtRQUNoRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWlCLEVBQUUsTUFBa0I7UUFDaEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFRO1FBQ3BCLENBQUMsQ0FBQyxNQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFJRCxRQUFRLEtBQUksQ0FBQzs7cUhBbkRKLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLDBYQ1JwQyxvakZBNERBOzRGRHBEYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksaUJBQWlCOzZIQUszQixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixJQUFJO3NCQURILFdBQVc7dUJBQUMsNkJBQTZCO2dCQUkxQyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUS9DLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgTWVudUVudGl0eSB9IGZyb20gJy4uLy4uL3BsdWdpbnMvdGFibGUvdGFibGUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS1jb250ZXh0bWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICdjb250ZXh0bWVudS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGhlQ29udGV4dE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpXG4gICAgbWVudUVudGl0aWVzOiBNZW51RW50aXR5W10gPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uSGFuZGxlOiAoZW50aXR5OiBNZW51RW50aXR5KSA9PiB2b2lkO1xuXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVIYW5kbGU6IChldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSA9PiB2b2lkO1xuXG4gICAgQElucHV0KClcbiAgICBkZWFjdGl2YXRlSGFuZGxlOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVudGl0eTogTWVudUVudGl0eSkgPT4gdm9pZDtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGhlLW92ZXJsYXktbWVudS13cmFwJylcbiAgICB3cmFwID0gdHJ1ZTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OiBtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZURvY3VtZW50TW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSAmJiBldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMudGh5UG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaXRlbU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aW9uSGFuZGxlKGVudGl0eSk7XG4gICAgICAgIHRoaXMudGh5UG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGl0ZW1Nb3VzZWxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlSGFuZGxlKGV2ZW50LCBlbnRpdHkpO1xuICAgIH1cblxuICAgIGl0ZW1Nb3VzZWVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVIYW5kbGUoZXZlbnQsIGVudGl0eSk7XG4gICAgfVxuXG4gICAgaW5wdXROdW1iZXJGb2N1cyhlOiBFdmVudCkge1xuICAgICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgdGh5UG9wb3ZlclJlZjogVGh5UG9wb3ZlclJlZjxUaGVDb250ZXh0TWVudUNvbXBvbmVudD4pIHt9XG5cbiAgICBuZ09uSW5pdCgpIHt9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGh5LWRyb3Bkb3duLW1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBtZW51RW50aXRpZXNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnVJdGVtLnZpc2liaWxpdHkgJiYgIW1lbnVJdGVtPy5pc0lucHV0TnVtYmVyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGVmYXVsdE1lbnVUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbWVudUl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW0udmlzaWJpbGl0eSAmJiBtZW51SXRlbT8uaXNJbnB1dE51bWJlclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImlucHV0TnVtYmVyTWVudVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBtZW51SXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0aHktZHJvcGRvd24tbWVudS1kaXZpZGVyICpuZ0lmPVwibWVudUl0ZW0uZGl2aWRlciAmJiBtZW51SXRlbS52aXNpYmlsaXR5XCI+PC90aHktZHJvcGRvd24tbWVudS1kaXZpZGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lbnVUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICA8YVxuICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgICAgICAobW91c2Vkb3duKT1cIml0ZW1Nb3VzZWRvd24oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIml0ZW1Nb3VzZWVudGVyKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJpdGVtTW91c2VsZWF2ZSgkZXZlbnQsIGl0ZW0pXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1JY29uPlxuICAgICAgICAgICAgPHRoeS1pY29uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5iYWNrZ3JvdW5kQ29sb3I7IGVsc2UgZWxzZUljb25cIlxuICAgICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICAgIHRoeUljb25UeXBlPVwidHdvdG9uZVwiXG4gICAgICAgICAgICAgICAgW3RoeVR3b3RvbmVDb2xvcl09XCJpdGVtLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICA+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUljb24+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJpdGVtLmljb25cIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiB0aHlEcm9wZG93bk1lbnVJdGVtTmFtZT57eyBpdGVtLm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5leHRlbmRJY29uXCIgdGh5RHJvcGRvd25NZW51SXRlbUV4dGVuZEljb24+XG4gICAgICAgICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJ7eyBpdGVtLmV4dGVuZEljb24gfX1cIj48L3RoeS1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dE51bWJlck1lbnVUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJ0aGUtaW5wdXQtbnVtYmVyLW1lbnVcIiB0aHlEcm9wZG93bk1lbnVJdGVtIChjbGljayk9XCJpdGVtTW91c2Vkb3duKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbUljb24+XG4gICAgICAgICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cIml0ZW0uaWNvblwiPjwvdGh5LWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbU5hbWUgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgIDx0aHktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgICAgI2lucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJteC0yXCJcbiAgICAgICAgICAgICAgICB0aHlTaXplPVwic21cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5jb3VudFwiXG4gICAgICAgICAgICAgICAgW3RoeVN0ZXBdPVwiMVwiXG4gICAgICAgICAgICAgICAgW3RoeU1pbl09XCIxXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5wdXROdW1iZXJGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAodGh5RW50ZXIpPVwiaXRlbU1vdXNlZG93bigkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICB0aHlTdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgID48L3RoeS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICB7eyBpdGVtLm5hbWVTdWZmaXggfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dG1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBUWhHLE1BQU0sT0FBTyx1QkFBdUI7SUF3RGhDLFlBQW1CLFVBQXNCLEVBQVUsYUFBcUQ7UUFBckYsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUF3QztRQXREeEcsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBWWhDLFNBQUksR0FBRyxJQUFJLENBQUM7SUEwQytGLENBQUM7SUF2QzVHLHVCQUF1QixDQUFDLEtBQWlCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUdELGVBQWUsQ0FBQyxLQUFpQjtRQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBaUIsRUFBRSxNQUFrQjtRQUMvQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBaUIsRUFBRSxNQUFrQjtRQUNoRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWlCLEVBQUUsTUFBa0I7UUFDaEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFRO1FBQ3BCLENBQUMsQ0FBQyxNQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBYSxFQUFFLE1BQWtCO1FBQzdDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFJRCxRQUFRLEtBQUksQ0FBQzs7cUhBMURKLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLDBYQ1JwQyxzakZBNERBOzRGRHBEYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksaUJBQWlCOzZIQUszQixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixJQUFJO3NCQURILFdBQVc7dUJBQUMsNkJBQTZCO2dCQUkxQyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUS9DLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgTWVudUVudGl0eSB9IGZyb20gJy4uLy4uL3BsdWdpbnMvdGFibGUvdGFibGUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS1jb250ZXh0bWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICdjb250ZXh0bWVudS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGhlQ29udGV4dE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpXG4gICAgbWVudUVudGl0aWVzOiBNZW51RW50aXR5W10gPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uSGFuZGxlOiAoZW50aXR5OiBNZW51RW50aXR5KSA9PiB2b2lkO1xuXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVIYW5kbGU6IChldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSA9PiB2b2lkO1xuXG4gICAgQElucHV0KClcbiAgICBkZWFjdGl2YXRlSGFuZGxlOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVudGl0eTogTWVudUVudGl0eSkgPT4gdm9pZDtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGhlLW92ZXJsYXktbWVudS13cmFwJylcbiAgICB3cmFwID0gdHJ1ZTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OiBtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZURvY3VtZW50TW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSAmJiBldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMudGh5UG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaXRlbU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aW9uSGFuZGxlKGVudGl0eSk7XG4gICAgICAgIHRoaXMudGh5UG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGl0ZW1Nb3VzZWxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlSGFuZGxlKGV2ZW50LCBlbnRpdHkpO1xuICAgIH1cblxuICAgIGl0ZW1Nb3VzZWVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVIYW5kbGUoZXZlbnQsIGVudGl0eSk7XG4gICAgfVxuXG4gICAgaW5wdXROdW1iZXJGb2N1cyhlOiBFdmVudCkge1xuICAgICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaXRlbUVudGVySGFuZGxlKGU6IE1vdXNlRXZlbnQsIGVudGl0eTogTWVudUVudGl0eSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuYWN0aW9uSGFuZGxlKGVudGl0eSk7XG4gICAgICAgIHRoaXMudGh5UG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHRoeVBvcG92ZXJSZWY6IFRoeVBvcG92ZXJSZWY8VGhlQ29udGV4dE1lbnVDb21wb25lbnQ+KSB7fVxuXG4gICAgbmdPbkluaXQoKSB7fVxufVxuIiwiPGRpdiBjbGFzcz1cInRoeS1kcm9wZG93bi1tZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgbWVudUVudGl0aWVzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZW51SXRlbS52aXNpYmlsaXR5ICYmICFtZW51SXRlbT8uaXNJbnB1dE51bWJlclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRlZmF1bHRNZW51VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG1lbnVJdGVtIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnVJdGVtLnZpc2liaWxpdHkgJiYgbWVudUl0ZW0/LmlzSW5wdXROdW1iZXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dE51bWJlck1lbnVUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbWVudUl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8dGh5LWRyb3Bkb3duLW1lbnUtZGl2aWRlciAqbmdJZj1cIm1lbnVJdGVtLmRpdmlkZXIgJiYgbWVudUl0ZW0udmlzaWJpbGl0eVwiPjwvdGh5LWRyb3Bkb3duLW1lbnUtZGl2aWRlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRNZW51VGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgPGFcbiAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICAgIHRoeURyb3Bkb3duTWVudUl0ZW1cbiAgICAgICAgKG1vdXNlZG93bik9XCJpdGVtTW91c2Vkb3duKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJpdGVtTW91c2VlbnRlcigkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiaXRlbU1vdXNlbGVhdmUoJGV2ZW50LCBpdGVtKVwiXG4gICAgPlxuICAgICAgICA8c3BhbiB0aHlEcm9wZG93bk1lbnVJdGVtSWNvbj5cbiAgICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uYmFja2dyb3VuZENvbG9yOyBlbHNlIGVsc2VJY29uXCJcbiAgICAgICAgICAgICAgICBbdGh5SWNvbk5hbWVdPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICB0aHlJY29uVHlwZT1cInR3b3RvbmVcIlxuICAgICAgICAgICAgICAgIFt0aHlUd290b25lQ29sb3JdPVwiaXRlbS5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgPjwvdGh5LWljb24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VJY29uPlxuICAgICAgICAgICAgICAgIDx0aHktaWNvbiBbdGh5SWNvbk5hbWVdPVwiaXRlbS5pY29uXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbU5hbWU+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uZXh0ZW5kSWNvblwiIHRoeURyb3Bkb3duTWVudUl0ZW1FeHRlbmRJY29uPlxuICAgICAgICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwie3sgaXRlbS5leHRlbmRJY29uIH19XCI+PC90aHktaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXROdW1iZXJNZW51VGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwidGhlLWlucHV0LW51bWJlci1tZW51XCIgdGh5RHJvcGRvd25NZW51SXRlbSAoY2xpY2spPVwiaXRlbU1vdXNlZG93bigkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1JY29uPlxuICAgICAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJpdGVtLmljb25cIj48L3RoeS1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1OYW1lIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICA8dGh5LWlucHV0LW51bWJlclxuICAgICAgICAgICAgICAgICNpbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMlwiXG4gICAgICAgICAgICAgICAgdGh5U2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uY291bnRcIlxuICAgICAgICAgICAgICAgIFt0aHlTdGVwXT1cIjFcIlxuICAgICAgICAgICAgICAgIFt0aHlNaW5dPVwiMVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0TnVtYmVyRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHRoeUVudGVyKT1cIml0ZW1FbnRlckhhbmRsZSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICB0aHlTdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgID48L3RoeS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICB7eyBpdGVtLm5hbWVTdWZmaXggfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=