@pepperi-addons/ngx-composite-lib 0.4.2-beta.77 → 0.4.2-beta.78
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.
- package/esm2020/layout-builder/hide-in/hide-in.component.mjs +5 -5
- package/esm2020/layout-builder/hide-in/hide-in.module.mjs +10 -10
- package/esm2020/layout-builder/layout-builder-editor/layout-builder-editor.component.mjs +29 -0
- package/esm2020/layout-builder/layout-builder-editor/layout-builder-editor.module.mjs +45 -0
- package/esm2020/layout-builder/layout-builder-internal.service.mjs +1 -1
- package/esm2020/layout-builder/layout-builder.component.mjs +5 -5
- package/esm2020/layout-builder/layout-builder.model.mjs +1 -5
- package/esm2020/layout-builder/layout-builder.module.mjs +23 -12
- package/esm2020/layout-builder/main-editor/main-editor.component.mjs +130 -0
- package/esm2020/layout-builder/main-editor/main-editor.module.mjs +99 -0
- package/esm2020/layout-builder/public-api.mjs +3 -2
- package/esm2020/layout-builder/section/section.component.mjs +2 -2
- package/esm2020/layout-builder/section/section.module.mjs +5 -5
- package/esm2020/layout-builder/section-block/section-block.component.mjs +3 -3
- package/esm2020/layout-builder/section-editor/section-editor.component.mjs +4 -3
- package/esm2020/layout-builder/section-editor/section-editor.module.mjs +6 -2
- package/fesm2015/pepperi-addons-ngx-composite-lib-layout-builder.mjs +139 -95
- package/fesm2015/pepperi-addons-ngx-composite-lib-layout-builder.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-composite-lib-layout-builder.mjs +137 -95
- package/fesm2020/pepperi-addons-ngx-composite-lib-layout-builder.mjs.map +1 -1
- package/layout-builder/hide-in/hide-in.component.d.ts +3 -3
- package/layout-builder/hide-in/hide-in.module.d.ts +4 -4
- package/layout-builder/layout-builder-editor/layout-builder-editor.component.d.ts +15 -0
- package/layout-builder/layout-builder-editor/layout-builder-editor.module.d.ts +14 -0
- package/layout-builder/layout-builder-internal.service.d.ts +19 -3
- package/layout-builder/layout-builder.component.d.ts +3 -3
- package/layout-builder/layout-builder.model.d.ts +11 -21
- package/layout-builder/layout-builder.module.d.ts +3 -2
- package/layout-builder/{layout-editor/layout-editor.component.d.ts → main-editor/main-editor.component.d.ts} +5 -7
- package/layout-builder/main-editor/main-editor.module.d.ts +27 -0
- package/layout-builder/public-api.d.ts +2 -0
- package/layout-builder/section/section.module.d.ts +1 -1
- package/layout-builder/section-editor/section-editor.component.d.ts +1 -1
- package/layout-builder/section-editor/section-editor.module.d.ts +3 -2
- package/package.json +1 -1
- package/esm2020/layout-builder/layout-editor/layout-editor.component.mjs +0 -156
- package/esm2020/layout-builder/layout-editor/layout-editor.module.mjs +0 -95
- package/layout-builder/layout-editor/layout-editor.module.d.ts +0 -26
|
@@ -6,7 +6,7 @@ import * as i3 from "@angular/material/menu";
|
|
|
6
6
|
import * as i4 from "@angular/material/badge";
|
|
7
7
|
import * as i5 from "@angular/material/checkbox";
|
|
8
8
|
import * as i6 from "@pepperi-addons/ngx-lib/button";
|
|
9
|
-
export class
|
|
9
|
+
export class HideInComponent {
|
|
10
10
|
constructor(translate) {
|
|
11
11
|
this.translate = translate;
|
|
12
12
|
this.hideIn = [];
|
|
@@ -37,9 +37,9 @@ export class PepHideInComponent {
|
|
|
37
37
|
this.menuClosed.emit();
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type:
|
|
40
|
+
HideInComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HideInComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
HideInComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: HideInComponent, selector: "hide-in", inputs: { hideIn: "hideIn" }, outputs: { hideInChange: "hideInChange", menuOpened: "menuOpened", menuClosed: "menuClosed" }, ngImport: i0, template: "\n<pep-button sizeType=\"xs\" iconName=\"system_view\" [matMenuTriggerFor]=\"menu\" (menuClosed)=\"onMenuClosed()\" (menuOpened)=\"onMenuOpened()\"\n class=\"badge-button\" [ngClass]=\"{ 'none': !hideIn || hideIn.length === 0}\"\n matBadge=\"{{ hideIn?.length }}\" matBadgePosition=\"after\" matBadgeSize=\"small\" \n></pep-button>\n\n<mat-menu #menu=\"matMenu\" class=\"hide-in-menu\">\n <div mat-menu-item class=\"title\" disabled>\n <span>{{('HIDE_IN.HIDE_IN_TITLE' | translate)}}</span>\n </div>\n <div mat-menu-item class=\"splitter\"></div>\n <ng-container *ngFor=\"let menuItem of menuItems\">\n <button mat-menu-item (click)=\"onItemClick($event, menuItem)\" title=\"{{ menuItem.text }}\">\n <mat-checkbox type=\"checkbox\" title=\"{{ menuItem.text }}\" class=\"md\"\n (change)=\"onItemClick($event, menuItem)\" [checked]=\"menuItem.selected\">\n <span class=\"pull-left flip title ellipsis\">{{ menuItem.text }}</span>\n </mat-checkbox>\n </button>\n </ng-container>\n</mat-menu>\n", styles: [".hide-in-menu .mat-menu-item.splitter{margin-inline:var(--pep-spacing-sm, .5rem)}.mat-menu-item ::ng-deep .mat-checkbox-layout .mat-checkbox-inner-container{margin-inline-end:var(--pep-spacing-xs, .25rem)!important}.badge-button .mat-badge-content{font-weight:var(--pep-font-weight-bold, 600);background:hsl(var(--pep-color-strong-h, 78),var(--pep-color-strong-s, 87%),var(--pep-color-strong-l, 27%));box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.08);color:hsl(var(--pep-color-system-primary-invert-h, 255),var(--pep-color-system-primary-invert-s, 100%),var(--pep-color-system-primary-invert-l, 100%));background-color:hsl(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%))!important;box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.32)}.badge-button .mat-badge-content .svg-icon{fill:hsl(var(--pep-color-system-primary-invert-h, 255),var(--pep-color-system-primary-invert-s, 100%),var(--pep-color-system-primary-invert-l, 100%))}.badge-button .mat-badge-content .svg-icon.stroke{fill:unset;stroke:hsl(var(--pep-color-system-primary-invert-h, 255),var(--pep-color-system-primary-invert-s, 100%),var(--pep-color-system-primary-invert-l, 100%))}.badge-button.none ::ng-deep .mat-badge-content{display:none}.badge-button ::ng-deep .mat-badge-content{z-index:1;right:-4px!important}\n", ".hide-in-menu .mat-menu-item.title{color:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.7)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i4.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.PepButtonComponent, selector: "pep-button", inputs: ["key", "value", "styleType", "styleStateType", "sizeType", "classNames", "disabled", "iconName", "iconPosition", "visible"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HideInComponent, decorators: [{
|
|
43
43
|
type: Component,
|
|
44
44
|
args: [{ selector: 'hide-in', template: "\n<pep-button sizeType=\"xs\" iconName=\"system_view\" [matMenuTriggerFor]=\"menu\" (menuClosed)=\"onMenuClosed()\" (menuOpened)=\"onMenuOpened()\"\n class=\"badge-button\" [ngClass]=\"{ 'none': !hideIn || hideIn.length === 0}\"\n matBadge=\"{{ hideIn?.length }}\" matBadgePosition=\"after\" matBadgeSize=\"small\" \n></pep-button>\n\n<mat-menu #menu=\"matMenu\" class=\"hide-in-menu\">\n <div mat-menu-item class=\"title\" disabled>\n <span>{{('HIDE_IN.HIDE_IN_TITLE' | translate)}}</span>\n </div>\n <div mat-menu-item class=\"splitter\"></div>\n <ng-container *ngFor=\"let menuItem of menuItems\">\n <button mat-menu-item (click)=\"onItemClick($event, menuItem)\" title=\"{{ menuItem.text }}\">\n <mat-checkbox type=\"checkbox\" title=\"{{ menuItem.text }}\" class=\"md\"\n (change)=\"onItemClick($event, menuItem)\" [checked]=\"menuItem.selected\">\n <span class=\"pull-left flip title ellipsis\">{{ menuItem.text }}</span>\n </mat-checkbox>\n </button>\n </ng-container>\n</mat-menu>\n", styles: [".hide-in-menu .mat-menu-item.splitter{margin-inline:var(--pep-spacing-sm, .5rem)}.mat-menu-item ::ng-deep .mat-checkbox-layout .mat-checkbox-inner-container{margin-inline-end:var(--pep-spacing-xs, .25rem)!important}.badge-button .mat-badge-content{font-weight:var(--pep-font-weight-bold, 600);background:hsl(var(--pep-color-strong-h, 78),var(--pep-color-strong-s, 87%),var(--pep-color-strong-l, 27%));box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.08);color:hsl(var(--pep-color-system-primary-invert-h, 255),var(--pep-color-system-primary-invert-s, 100%),var(--pep-color-system-primary-invert-l, 100%));background-color:hsl(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%))!important;box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.32)}.badge-button .mat-badge-content .svg-icon{fill:hsl(var(--pep-color-system-primary-invert-h, 255),var(--pep-color-system-primary-invert-s, 100%),var(--pep-color-system-primary-invert-l, 100%))}.badge-button .mat-badge-content .svg-icon.stroke{fill:unset;stroke:hsl(var(--pep-color-system-primary-invert-h, 255),var(--pep-color-system-primary-invert-s, 100%),var(--pep-color-system-primary-invert-l, 100%))}.badge-button.none ::ng-deep .mat-badge-content{display:none}.badge-button ::ng-deep .mat-badge-content{z-index:1;right:-4px!important}\n", ".hide-in-menu .mat-menu-item.title{color:hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.7)}\n"] }]
|
|
45
45
|
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { hideIn: [{
|
|
@@ -51,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
51
51
|
}], menuClosed: [{
|
|
52
52
|
type: Output
|
|
53
53
|
}] } });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlkZS1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9sYXlvdXQtYnVpbGRlci9oaWRlLWluL2hpZGUtaW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvaGlkZS1pbi9oaWRlLWluLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFlLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBZTVGLE1BQU0sT0FBTyxlQUFlO0lBU3hCLFlBQ1ksU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFUOUIsV0FBTSxHQUF5QixFQUFFLENBQUM7UUFFakMsaUJBQVksR0FBdUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0RSxlQUFVLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEQsZUFBVSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO0lBTTFELENBQUM7SUFFTCxLQUFLLENBQUMsUUFBUTtRQUNWLHVEQUF1RDtRQUN2RCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFcEYsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNiLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsRUFBRTtZQUN2RyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxFQUFFO1lBQ3BJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEVBQUU7U0FDekksQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVSxFQUFFLFFBQW9CO1FBQ3hDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBRXZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDOzs0R0F6Q1EsZUFBZTtnR0FBZixlQUFlLDRLQ2Y1Qiw4akNBb0JBOzJGRExhLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0ksU0FBUzt1R0FLVixNQUFNO3NCQUFkLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVZpZXdTY3JlZW5TaXplIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL3BhcGktc2RrJztcblxuaW50ZXJmYWNlIGhpZGVJbkl0ZW0ge1xuICAgIGtleTogRGF0YVZpZXdTY3JlZW5TaXplLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzZWxlY3RlZDogYm9vbGVhblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2hpZGUtaW4nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaWRlLWluLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9oaWRlLWluLmNvbXBvbmVudC5zY3NzJywgJy4vaGlkZS1pbi5jb21wb25lbnQudGhlbWUuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBIaWRlSW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10gPSBbXTtcblxuICAgIEBPdXRwdXQoKSBoaWRlSW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRhVmlld1NjcmVlblNpemVbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG1lbnVPcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbWVudUNsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgbWVudUl0ZW1zITogQXJyYXk8aGlkZUluSXRlbT47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgKSB7IH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IHRyYW5zbGF0aW9uIGZvciBsb2FkIGFsbCB0cmFuc2xhdGlvbnMuXG4gICAgICAgIGNvbnN0IGRlc2t0b3BUaXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldCgnTEFZT1VUX0JVSUxERVIuREVTS1RPUCcpLnRvUHJvbWlzZSgpO1xuXG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gW1xuICAgICAgICAgICAgeyBrZXk6ICdMYW5kc2NhcGUnLCB0ZXh0OiBkZXNrdG9wVGl0bGUsIHNlbGVjdGVkOiB0aGlzLmhpZGVJbj8uc29tZShoaWRlSW4gPT4gaGlkZUluID09PSAnTGFuZHNjYXBlJykgfSxcbiAgICAgICAgICAgIHsga2V5OiAnVGFibGV0JywgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTEFZT1VUX0JVSUxERVIuVEFCTEVUJyksIHNlbGVjdGVkOiB0aGlzLmhpZGVJbj8uc29tZShoaWRlSW4gPT4gaGlkZUluID09PSAnVGFibGV0JykgfSxcbiAgICAgICAgICAgIHsga2V5OiAnUGhhYmxldCcsIHRleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0xBWU9VVF9CVUlMREVSLk1PQklMRScpLCBzZWxlY3RlZDogdGhpcy5oaWRlSW4/LnNvbWUoaGlkZUluID0+IGhpZGVJbiA9PT0gJ1BoYWJsZXQnKSB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgb25JdGVtQ2xpY2soZXZlbnQ6IGFueSwgbWVudUl0ZW06IGhpZGVJbkl0ZW0pIHtcbiAgICAgICAgbWVudUl0ZW0uc2VsZWN0ZWQgPSAhbWVudUl0ZW0uc2VsZWN0ZWQ7XG5cbiAgICAgICAgY29uc3QgaGlkZUluID0gdGhpcy5tZW51SXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS5rZXkpO1xuICAgICAgICB0aGlzLmhpZGVJbkNoYW5nZS5lbWl0KGhpZGVJbik7XG5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25NZW51T3BlbmVkKCkge1xuICAgICAgICB0aGlzLm1lbnVPcGVuZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIG9uTWVudUNsb3NlZCgpIHtcbiAgICAgICAgdGhpcy5tZW51Q2xvc2VkLmVtaXQoKTtcbiAgICB9XG59XG4iLCJcbjxwZXAtYnV0dG9uIHNpemVUeXBlPVwieHNcIiBpY29uTmFtZT1cInN5c3RlbV92aWV3XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiAobWVudUNsb3NlZCk9XCJvbk1lbnVDbG9zZWQoKVwiIChtZW51T3BlbmVkKT1cIm9uTWVudU9wZW5lZCgpXCJcbiAgICBjbGFzcz1cImJhZGdlLWJ1dHRvblwiIFtuZ0NsYXNzXT1cInsgJ25vbmUnOiAhaGlkZUluIHx8IGhpZGVJbi5sZW5ndGggPT09IDB9XCJcbiAgICBtYXRCYWRnZT1cInt7IGhpZGVJbj8ubGVuZ3RoIH19XCIgbWF0QmFkZ2VQb3NpdGlvbj1cImFmdGVyXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBcbj48L3BlcC1idXR0b24+XG5cbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImhpZGUtaW4tbWVudVwiPlxuICAgIDxkaXYgbWF0LW1lbnUtaXRlbSBjbGFzcz1cInRpdGxlXCIgZGlzYWJsZWQ+XG4gICAgICAgIDxzcGFuPnt7KCdISURFX0lOLkhJREVfSU5fVElUTEUnIHwgdHJhbnNsYXRlKX19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgbWF0LW1lbnUtaXRlbSBjbGFzcz1cInNwbGl0dGVyXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgbWVudUl0ZW1zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LCBtZW51SXRlbSlcIiB0aXRsZT1cInt7IG1lbnVJdGVtLnRleHQgfX1cIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggdHlwZT1cImNoZWNrYm94XCIgdGl0bGU9XCJ7eyBtZW51SXRlbS50ZXh0IH19XCIgY2xhc3M9XCJtZFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIG1lbnVJdGVtKVwiIFtjaGVja2VkXT1cIm1lbnVJdGVtLnNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwdWxsLWxlZnQgZmxpcCB0aXRsZSBlbGxpcHNpc1wiPnt7IG1lbnVJdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L21hdC1tZW51PlxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import {
|
|
3
|
+
import { HideInComponent } from './hide-in.component';
|
|
4
4
|
import { MatButtonModule } from '@angular/material/button';
|
|
5
5
|
import { MatMenuModule } from '@angular/material/menu';
|
|
6
6
|
import { MatIconModule } from '@angular/material/icon';
|
|
@@ -14,7 +14,7 @@ import { PepIconModule, pepIconSystemView, } from '@pepperi-addons/ngx-lib/icon'
|
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
import * as i1 from "@pepperi-addons/ngx-lib/icon";
|
|
16
16
|
import * as i2 from "@ngx-translate/core";
|
|
17
|
-
export class
|
|
17
|
+
export class HideInModule {
|
|
18
18
|
constructor(pepIconRegistry) {
|
|
19
19
|
this.pepIconRegistry = pepIconRegistry;
|
|
20
20
|
this.pepIconRegistry.registerIcons([
|
|
@@ -22,8 +22,8 @@ export class PepHideInModule {
|
|
|
22
22
|
]);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
HideInModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HideInModule, deps: [{ token: i1.PepIconRegistry }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26
|
+
HideInModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: HideInModule, declarations: [HideInComponent], imports: [CommonModule,
|
|
27
27
|
MatButtonModule,
|
|
28
28
|
MatMenuModule,
|
|
29
29
|
MatIconModule,
|
|
@@ -31,8 +31,8 @@ PepHideInModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version
|
|
|
31
31
|
MatCheckboxModule,
|
|
32
32
|
PepButtonModule,
|
|
33
33
|
PepCheckboxModule,
|
|
34
|
-
PepIconModule, i2.TranslateModule], exports: [
|
|
35
|
-
|
|
34
|
+
PepIconModule, i2.TranslateModule], exports: [HideInComponent] });
|
|
35
|
+
HideInModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HideInModule, imports: [CommonModule,
|
|
36
36
|
MatButtonModule,
|
|
37
37
|
MatMenuModule,
|
|
38
38
|
MatIconModule,
|
|
@@ -51,10 +51,10 @@ PepHideInModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version
|
|
|
51
51
|
// }, isolate: false
|
|
52
52
|
// }),
|
|
53
53
|
] });
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type:
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HideInModule, decorators: [{
|
|
55
55
|
type: NgModule,
|
|
56
56
|
args: [{
|
|
57
|
-
declarations: [
|
|
57
|
+
declarations: [HideInComponent],
|
|
58
58
|
imports: [
|
|
59
59
|
CommonModule,
|
|
60
60
|
MatButtonModule,
|
|
@@ -75,7 +75,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
75
75
|
// }, isolate: false
|
|
76
76
|
// }),
|
|
77
77
|
],
|
|
78
|
-
exports: [
|
|
78
|
+
exports: [HideInComponent]
|
|
79
79
|
}]
|
|
80
80
|
}], ctorParameters: function () { return [{ type: i1.PepIconRegistry }]; } });
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlkZS1pbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9sYXlvdXQtYnVpbGRlci9oaWRlLWluL2hpZGUtaW4ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBbUIsZUFBZSxFQUFrQixNQUFNLHFCQUFxQixDQUFDO0FBQ3ZGLDZGQUE2RjtBQUU3RixPQUFPLEVBQ0gsYUFBYSxFQUViLGlCQUFpQixHQUNwQixNQUFNLDhCQUE4QixDQUFDOzs7O0FBMEJ0QyxNQUFNLE9BQU8sWUFBWTtJQUNyQixZQUFvQixlQUFnQztRQUFoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7WUFDL0IsaUJBQWlCO1NBQ3BCLENBQUMsQ0FBQztJQUNQLENBQUM7O3lHQUxRLFlBQVk7MEdBQVosWUFBWSxpQkF2Qk4sZUFBZSxhQUUxQixZQUFZO1FBQ1osZUFBZTtRQUNmLGFBQWE7UUFDYixhQUFhO1FBQ2IsY0FBYztRQUNkLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLGFBQWEsaUNBV1AsZUFBZTswR0FFaEIsWUFBWSxZQXJCakIsWUFBWTtRQUNaLGVBQWU7UUFDZixhQUFhO1FBQ2IsYUFBYTtRQUNiLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixhQUFhO1FBQ2IsZUFBZSxDQUFDLFFBQVEsRUFBRTtRQUMxQixLQUFLO1FBQ0wsZ0JBQWdCO1FBQ2hCLG9DQUFvQztRQUNwQywwREFBMEQ7UUFDMUQsMEdBQTBHO1FBQzFHLGtDQUFrQztRQUNsQyx3QkFBd0I7UUFDeEIsTUFBTTs7MkZBSUQsWUFBWTtrQkF4QnhCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUMvQixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsZUFBZSxDQUFDLFFBQVEsRUFBRTt3QkFDMUIsS0FBSzt3QkFDTCxnQkFBZ0I7d0JBQ2hCLG9DQUFvQzt3QkFDcEMsMERBQTBEO3dCQUMxRCwwR0FBMEc7d0JBQzFHLGtDQUFrQzt3QkFDbEMsd0JBQXdCO3dCQUN4QixNQUFNO3FCQUNUO29CQUNELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEhpZGVJbkNvbXBvbmVudCB9IGZyb20gJy4vaGlkZS1pbi5jb21wb25lbnQnXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IFBlcEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2J1dHRvbic7XG5pbXBvcnQgeyBQZXBDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2NoZWNrYm94JztcbmltcG9ydCB7IFRyYW5zbGF0ZUxvYWRlciwgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTdG9yZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuLy8gaW1wb3J0IHsgUGVwQWRkb25TZXJ2aWNlLCBQZXBGaWxlU2VydmljZSwgUGVwSHR0cFNlcnZpY2UgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5cbmltcG9ydCB7XG4gICAgUGVwSWNvbk1vZHVsZSxcbiAgICBQZXBJY29uUmVnaXN0cnksXG4gICAgcGVwSWNvblN5c3RlbVZpZXcsXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2ljb24nO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0hpZGVJbkNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0QmFkZ2VNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBQZXBCdXR0b25Nb2R1bGUsXG4gICAgICAgIFBlcENoZWNrYm94TW9kdWxlLFxuICAgICAgICBQZXBJY29uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoKVxuICAgICAgICAvLyAoe1xuICAgICAgICAvLyAgICAgbG9hZGVyOiB7XG4gICAgICAgIC8vICAgICAgICAgcHJvdmlkZTogVHJhbnNsYXRlTG9hZGVyLFxuICAgICAgICAvLyAgICAgICAgIHVzZUZhY3Rvcnk6IChhZGRvblNlcnZpY2U6IFBlcEFkZG9uU2VydmljZSkgPT4gXG4gICAgICAgIC8vICAgICAgICAgICAgIFBlcEFkZG9uU2VydmljZS5jcmVhdGVNdWx0aVRyYW5zbGF0ZUxvYWRlcihhZGRvblNlcnZpY2UsIFsnbmd4LWxpYicsICduZ3gtY29tcG9zaXRlLWxpYiddKSxcbiAgICAgICAgLy8gICAgICAgICBkZXBzOiBbUGVwQWRkb25TZXJ2aWNlXVxuICAgICAgICAvLyAgICAgfSwgaXNvbGF0ZTogZmFsc2VcbiAgICAgICAgLy8gfSksXG4gICAgXSxcbiAgICBleHBvcnRzOiBbSGlkZUluQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBIaWRlSW5Nb2R1bGUgeyBcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlcEljb25SZWdpc3RyeTogUGVwSWNvblJlZ2lzdHJ5KSB7XG4gICAgICAgIHRoaXMucGVwSWNvblJlZ2lzdHJ5LnJlZ2lzdGVySWNvbnMoW1xuICAgICAgICAgICAgcGVwSWNvblN5c3RlbVZpZXcsXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Input } from '@angular/core';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { BaseDestroyerDirective } from '@pepperi-addons/ngx-lib';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/material/tabs";
|
|
7
|
+
import * as i3 from "@ngx-translate/core";
|
|
8
|
+
export class PepLayoutBuilderEditorComponent extends BaseDestroyerDirective {
|
|
9
|
+
constructor(hostElement, renderer) {
|
|
10
|
+
super();
|
|
11
|
+
this.hostElement = hostElement;
|
|
12
|
+
this.renderer = renderer;
|
|
13
|
+
this.editorTabs = [];
|
|
14
|
+
this.renderer.addClass(this.hostElement.nativeElement, 'pep-layout-builder-editor');
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
}
|
|
18
|
+
ngAfterContentInit() {
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
PepLayoutBuilderEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutBuilderEditorComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
+
PepLayoutBuilderEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepLayoutBuilderEditorComponent, selector: "pep-layout-builder-editor", inputs: { editorTabs: "editorTabs" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"editorTabs && editorTabs.length > 0 then tabsTemplate else regularTemplate\">\n</ng-container>\n<ng-template #tabsTemplate>\n <mat-tab-group #tabGroup class=\"layout-builder-editor-tabs\" animationDuration=\"0ms\">\n <mat-tab *ngFor=\"let tab of editorTabs\" label=\"{{tab.title | translate}}\">\n <div class=\"layout-builder-editor-tab\">\n <ng-container *ngIf=\"tab.templateRef\">\n <ng-container *ngTemplateOutlet=\"tab.templateRef; context: { tabKey: tab.key }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!tab.templateRef\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n</ng-template>\n<ng-template #regularTemplate>\n <div class=\"layout-builder-editor-container\">\n <ng-content></ng-content>\n </div>\n</ng-template>", styles: [""], 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: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutBuilderEditorComponent, decorators: [{
|
|
24
|
+
type: Component,
|
|
25
|
+
args: [{ selector: 'pep-layout-builder-editor', template: "<ng-container *ngIf=\"editorTabs && editorTabs.length > 0 then tabsTemplate else regularTemplate\">\n</ng-container>\n<ng-template #tabsTemplate>\n <mat-tab-group #tabGroup class=\"layout-builder-editor-tabs\" animationDuration=\"0ms\">\n <mat-tab *ngFor=\"let tab of editorTabs\" label=\"{{tab.title | translate}}\">\n <div class=\"layout-builder-editor-tab\">\n <ng-container *ngIf=\"tab.templateRef\">\n <ng-container *ngTemplateOutlet=\"tab.templateRef; context: { tabKey: tab.key }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!tab.templateRef\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n</ng-template>\n<ng-template #regularTemplate>\n <div class=\"layout-builder-editor-container\">\n <ng-content></ng-content>\n </div>\n</ng-template>" }]
|
|
26
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editorTabs: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}] } });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXItZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC1idWlsZGVyLWVkaXRvci9sYXlvdXQtYnVpbGRlci1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvbGF5b3V0LWJ1aWxkZXItZWRpdG9yL2xheW91dC1idWlsZGVyLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdDLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQVFqRSxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsc0JBQXNCO0lBSXZFLFlBQ1ksV0FBdUIsRUFDdkIsUUFBbUI7UUFFM0IsS0FBSyxFQUFFLENBQUM7UUFIQSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBSnRCLGVBQVUsR0FBb0IsRUFBRSxDQUFDO1FBT3RDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELFFBQVE7SUFFUixDQUFDO0lBRUQsa0JBQWtCO0lBRWxCLENBQUM7OzRIQWxCUSwrQkFBK0I7Z0hBQS9CLCtCQUErQiw4SENWNUMsdTlCQXNCYzsyRkRaRCwrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0ksMkJBQTJCO3lIQU01QixVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25Jbml0LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VEZXN0cm95ZXJEaXJlY3RpdmUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBJUGVwRWRpdG9yVGFiIH0gZnJvbSAnLi4vbGF5b3V0LWJ1aWxkZXIubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1sYXlvdXQtYnVpbGRlci1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9sYXlvdXQtYnVpbGRlci1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xheW91dC1idWlsZGVyLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBMYXlvdXRCdWlsZGVyRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZURlc3Ryb3llckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgXG4gICAgQElucHV0KCkgZWRpdG9yVGFiczogSVBlcEVkaXRvclRhYltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3BlcC1sYXlvdXQtYnVpbGRlci1lZGl0b3InKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBcbiAgICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0b3JUYWJzICYmIGVkaXRvclRhYnMubGVuZ3RoID4gMCB0aGVuIHRhYnNUZW1wbGF0ZSBlbHNlIHJlZ3VsYXJUZW1wbGF0ZVwiPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI3RhYnNUZW1wbGF0ZT5cbiAgICA8bWF0LXRhYi1ncm91cCAjdGFiR3JvdXAgY2xhc3M9XCJsYXlvdXQtYnVpbGRlci1lZGl0b3ItdGFic1wiIGFuaW1hdGlvbkR1cmF0aW9uPVwiMG1zXCI+XG4gICAgICAgIDxtYXQtdGFiICpuZ0Zvcj1cImxldCB0YWIgb2YgZWRpdG9yVGFic1wiIGxhYmVsPVwie3t0YWIudGl0bGUgfCB0cmFuc2xhdGV9fVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1idWlsZGVyLWVkaXRvci10YWJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiLnRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWIudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgdGFiS2V5OiB0YWIua2V5IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWIudGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlZ3VsYXJUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWJ1aWxkZXItZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { HttpClientModule } from '@angular/common/http';
|
|
4
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
5
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
6
|
+
import { MatTabsModule } from '@angular/material/tabs';
|
|
7
|
+
import { PepNgxLibModule } from '@pepperi-addons/ngx-lib';
|
|
8
|
+
import { PepLayoutBuilderEditorComponent } from './layout-builder-editor.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@ngx-translate/core";
|
|
11
|
+
export class PepLayoutBuilderEditorModule {
|
|
12
|
+
constructor() {
|
|
13
|
+
//
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
PepLayoutBuilderEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutBuilderEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
PepLayoutBuilderEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutBuilderEditorModule, declarations: [PepLayoutBuilderEditorComponent], imports: [CommonModule,
|
|
18
|
+
HttpClientModule,
|
|
19
|
+
OverlayModule,
|
|
20
|
+
MatTabsModule,
|
|
21
|
+
PepNgxLibModule, i1.TranslateModule], exports: [PepLayoutBuilderEditorComponent] });
|
|
22
|
+
PepLayoutBuilderEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutBuilderEditorModule, imports: [CommonModule,
|
|
23
|
+
HttpClientModule,
|
|
24
|
+
OverlayModule,
|
|
25
|
+
MatTabsModule,
|
|
26
|
+
PepNgxLibModule,
|
|
27
|
+
TranslateModule.forChild()] });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutBuilderEditorModule, decorators: [{
|
|
29
|
+
type: NgModule,
|
|
30
|
+
args: [{
|
|
31
|
+
declarations: [
|
|
32
|
+
PepLayoutBuilderEditorComponent
|
|
33
|
+
],
|
|
34
|
+
imports: [
|
|
35
|
+
CommonModule,
|
|
36
|
+
HttpClientModule,
|
|
37
|
+
OverlayModule,
|
|
38
|
+
MatTabsModule,
|
|
39
|
+
PepNgxLibModule,
|
|
40
|
+
TranslateModule.forChild()
|
|
41
|
+
],
|
|
42
|
+
exports: [PepLayoutBuilderEditorComponent]
|
|
43
|
+
}]
|
|
44
|
+
}], ctorParameters: function () { return []; } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXItZWRpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC1idWlsZGVyLWVkaXRvci9sYXlvdXQtYnVpbGRlci1lZGl0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxlQUFlLEVBQUcsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBZ0JwRixNQUFNLE9BQU8sNEJBQTRCO0lBQ3JDO1FBQ0ksRUFBRTtJQUNOLENBQUM7O3lIQUhRLDRCQUE0QjswSEFBNUIsNEJBQTRCLGlCQVpqQywrQkFBK0IsYUFHL0IsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixhQUFhO1FBQ2IsYUFBYTtRQUNiLGVBQWUsaUNBR1YsK0JBQStCOzBIQUUvQiw0QkFBNEIsWUFUakMsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixhQUFhO1FBQ2IsYUFBYTtRQUNiLGVBQWU7UUFDZixlQUFlLENBQUMsUUFBUSxFQUFFOzJGQUlyQiw0QkFBNEI7a0JBZHhDLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFO3dCQUNWLCtCQUErQjtxQkFDbEM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixlQUFlLENBQUMsUUFBUSxFQUFFO3FCQUM3QjtvQkFDRCxPQUFPLEVBQUMsQ0FBQywrQkFBK0IsQ0FBQztpQkFDNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IFBlcE5neExpYk1vZHVsZSAgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5cbmltcG9ydCB7IFBlcExheW91dEJ1aWxkZXJFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1idWlsZGVyLWVkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBQZXBMYXlvdXRCdWlsZGVyRWRpdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICAgICAgT3ZlcmxheU1vZHVsZSxcbiAgICAgICAgTWF0VGFic01vZHVsZSxcbiAgICAgICAgUGVwTmd4TGliTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoKVxuICAgIF0sXG4gICAgZXhwb3J0czpbUGVwTGF5b3V0QnVpbGRlckVkaXRvckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgUGVwTGF5b3V0QnVpbGRlckVkaXRvck1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vXG4gICAgfVxufVxuIl19
|
|
@@ -617,4 +617,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
617
617
|
providedIn: 'root',
|
|
618
618
|
}]
|
|
619
619
|
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.PepDialogService }]; } });
|
|
620
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXItaW50ZXJuYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC1idWlsZGVyLWludGVybmFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQXdELGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSSxPQUFPLEVBQW1CLE9BQU8sRUFBa0IsaUJBQWlCLEVBQTBDLE1BQU0seUJBQXlCLENBQUM7QUFJOUksT0FBTyxFQUFjLGVBQWUsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFLakYsTUFBTSxPQUFPLDRCQUE0QjtJQThHckMsWUFDYyxTQUEyQixFQUMzQixhQUErQjtRQUQvQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUE1R3JDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUVsQyw2Q0FBNkM7UUFDckMsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHFDQUFnQyxHQUFHLEtBQUssQ0FBQztRQUN6QyxtQkFBYyxHQUFpQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUEsQ0FBQyxDQUFDLENBQUM7UUFPakYsdUJBQWtCLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFFdEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVMzQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUt4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aUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDdEQ7aUJBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQWE7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxVQUEwQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN0QywwQkFBMEI7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN0QztTQUNKO1FBRUQsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDOztBQXRzQmUsMERBQTZCLEdBQUcsaUJBQWtCLENBQUE7QUFDbEQsMkNBQWMsR0FBRyxNQUFPLENBQUE7eUhBRi9CLDRCQUE0Qjs2SEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07MkZBRVQsNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0LCBjb3B5QXJyYXlJdGVtLCBtb3ZlSXRlbUluQXJyYXksIHRyYW5zZmVyQXJyYXlJdGVtIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgUGVwQWRkb25TZXJ2aWNlLCBQZXBHdWlkLCBQZXBIdHRwU2VydmljZSwgUGVwU2NyZWVuU2l6ZVR5cGUsIFBlcFNlc3Npb25TZXJ2aWNlLCBQZXBVdGlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcIkBwZXBwZXJpLWFkZG9ucy9uZ3gtbGliXCI7XG5pbXBvcnQgeyBJUGVwRHJhZ2dhYmxlSXRlbSB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kcmFnZ2FibGUtaXRlbXNcIjtcbmltcG9ydCB7IERhdGFWaWV3U2NyZWVuU2l6ZSwgU2NyZWVuU2l6ZURhdGFDb25maWd1cmF0aW9uIH0gZnJvbSBcIkBwZXBwZXJpLWFkZG9ucy9wYXBpLXNka1wiO1xuaW1wb3J0IHsgUGVwU25hY2tCYXJEYXRhLCBQZXBTbmFja0JhclNlcnZpY2UgfSBmcm9tIFwiQHBlcHBlcmktYWRkb25zL25neC1saWIvc25hY2stYmFyXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExheW91dEVkaXRvclR5cGUsIElFZGl0b3IsIElQZXBMYXlvdXRCbG9ja0FkZGVkRXZlbnQsIElMYXlvdXRFZGl0b3IsIElQZXBMYXlvdXRTZWN0aW9uLCBJUGVwTGF5b3V0U2VjdGlvbkNvbHVtbiwgSVBlcExheW91dFZpZXcsIElMYXlvdXRTZWN0aW9uRWRpdG9yLCBQZXBMYXlvdXRTaXplVHlwZSwgSVBlcExheW91dEJsb2NrQ29udGFpbmVyLCBJUGVwTGF5b3V0QmxvY2tDb25maWcgfSBmcm9tIFwiLi9sYXlvdXQtYnVpbGRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUGVwRGlhbG9nRGF0YSwgUGVwRGlhbG9nU2VydmljZSB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kaWFsb2dcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IEFWQUlMQUJMRV9CTE9DS1NfQ09OVEFJTkVSX0lEID0gJ2F2YWlsYWJsZUJsb2Nrcyc7XG4gICAgc3RhdGljIHJlYWRvbmx5IE1BSU5fRURJVE9SX0lEID0gJ21haW4nO1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNlY3Rpb25UaXRsZSA9ICcnO1xuICAgIFxuICAgIC8vIFRoaXMgY29uZmlndXJhdGlvbiBpcyBmb3IgYmxvY2tzIGJlaGF2aW9yLlxuICAgIHByaXZhdGUgX2Jsb2Nrc0xpbWl0TnVtYmVyID0gMDtcbiAgICBwcml2YXRlIF9uYXZpZ2F0ZVRvRWRpdG9yQWZ0ZXJCbG9ja0FkZGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZ2V0QmxvY2tUaXRsZTogKGJsb2NrS2V5OiBzdHJpbmcpID0+IHN0cmluZyA9IChibG9ja0tleSkgPT4geyByZXR1cm4gYmxvY2tLZXkgfTtcbiAgICBzZXRCbG9ja3NDb25maWcodmFsdWU6IElQZXBMYXlvdXRCbG9ja0NvbmZpZykge1xuICAgICAgICB0aGlzLl9ibG9ja3NMaW1pdE51bWJlciA9IHZhbHVlLmJsb2Nrc0xpbWl0TnVtYmVyIHx8IDA7XG4gICAgICAgIHRoaXMuX25hdmlnYXRlVG9FZGl0b3JBZnRlckJsb2NrQWRkZWQgPSB2YWx1ZS5uYXZpZ2F0ZVRvRWRpdG9yQWZ0ZXJCbG9ja0FkZGVkID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9nZXRCbG9ja1RpdGxlID0gdmFsdWUuZ2V0QmxvY2tUaXRsZSA/IHZhbHVlLmdldEJsb2NrVGl0bGUgOiAoYmxvY2tLZXkpID0+IHsgcmV0dXJuIGJsb2NrS2V5IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWRpdG9yc0JyZWFkQ3J1bWIgPSBBcnJheTxJRWRpdG9yPigpO1xuXG4gICAgcHJpdmF0ZSBfZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBnZXQgZWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0TW9kZTtcbiAgICB9XG4gICAgc2V0RWRpdE1vZGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZWRpdE1vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRFZGl0YWJsZVN0YXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWRpdGFibGVTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGdldCBlZGl0YWJsZVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGFibGVTdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHN1YmplY3QgaXMgZm9yIHRoZSBzY3JlZW4gc2l6ZSBjaGFuZ2UgZXZlbnRzLlxuICAgIHByaXZhdGUgX3NjcmVlblNpemVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8UGVwU2NyZWVuU2l6ZVR5cGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQZXBTY3JlZW5TaXplVHlwZT4oUGVwU2NyZWVuU2l6ZVR5cGUuWEwpO1xuICAgIGdldCBzY3JlZW5TaXplQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPFBlcFNjcmVlblNpemVUeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBUaGlzIHN1YmplY3QgaXMgZm9yIGRlbW9zdHJhdGUgdGhlIGNvbnRhaW5lciBzaXplIChVc2FnZSBvbmx5IGluIGVkaXQgbW9kZSkuXG4gICAgcHJpdmF0ZSBfc2NyZWVuV2lkdGhTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignMTAwJScpO1xuICAgIGdldCBzY3JlZW5XaWR0aENoYW5nZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmVlbldpZHRoU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgbG9hZCB0aGUgY3VycmVudCBlZGl0b3IgKFVzYWdlIG9ubHkgaW4gZWRpdCBtb2RlKS5cbiAgICBwcml2YXRlIF9lZGl0b3JTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SUVkaXRvciB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRWRpdG9yIHwgbnVsbD4obnVsbCk7XG4gICAgZ2V0IGVkaXRvckNoYW5nZSQoKTogT2JzZXJ2YWJsZTxJRWRpdG9yIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdGhlIHNlY3Rpb25zIGNvbHVtbnMgZHJvcCBsaXN0IHN1YmplY3QuXG4gICAgcHJpdmF0ZSBfc2VjdGlvbnNDb2x1bW5zRHJvcExpc3RTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIGdldCBzZWN0aW9uc0NvbHVtbnNEcm9wTGlzdENoYW5nZSQoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnNDb2x1bW5zRHJvcExpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdGhlIHNlY3Rpb25zIHN1YmplY3QgKGEgcGFyZSBmcm9tIHRoZSBsYXlvdXQgdmlldyBvYmplY3QpXG4gICAgcHJpdmF0ZSBfc2VjdGlvbnNWaWV3U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PElQZXBMYXlvdXRTZWN0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0U2VjdGlvbltdPihbXSk7XG4gICAgZ2V0IHNlY3Rpb25zQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPElQZXBMYXlvdXRTZWN0aW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zVmlld1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIC8vIChwcmV2U2VjdGlvbnMsIG5leHRTZWN0aW9ucykgPT4gSlNPTi5zdHJpbmdpZnkocHJldlNlY3Rpb25zKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV4dFNlY3Rpb25zKSkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgbGF5b3V0IHZpZXcgY2hhbmdlLlxuICAgIHByaXZhdGUgX2xheW91dFZpZXdTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFZpZXcgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFZpZXcgfCBudWxsPihudWxsKTtcbiAgICBnZXQgbGF5b3V0Vmlld0NoYW5nZSQoKTogT2JzZXJ2YWJsZTxJUGVwTGF5b3V0VmlldyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKGxheW91dCA9PiAhIWxheW91dCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgZWRpdCBtb2RlIHdoZW4gYmxvY2sgaXMgZHJhZ2dpbmcgbm93IG9yIG5vdC5cbiAgICBwcml2YXRlIF9kcmFnZ2luZ0Jsb2NrS2V5OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICAgIGdldCBkcmFnZ2luZ0Jsb2NrS2V5KCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnZ2luZ0Jsb2NrS2V5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBlZGl0IG1vZGUgd2hlbiBzZWN0aW9uIGlzIGRyYWdnaW5nIG5vdyBvciBub3QuXG4gICAgcHJpdmF0ZSBfZHJhZ2dpbmdTZWN0aW9uS2V5OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICAgIGdldCBkcmFnZ2luZ1NlY3Rpb25LZXkoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWdnaW5nU2VjdGlvbktleS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgbG9jayBvciB1bmxvY2sgdGhlIHNjcmVlbiAoVXNhZ2Ugb25seSBpbiBlZGl0IG1vZGUpLlxuICAgIHByaXZhdGUgX2xvY2tTY3JlZW5TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBnZXQgbG9ja1NjcmVlbkNoYW5nZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NrU2NyZWVuU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZm9yIGNvbnRyb2wgdGhlIHByZXZpZXcgbW9kZSAoZm9yIGxvYWQgdGhlIGJsb2NrcyB3aXRoIHRoZSBDUEkgZXZlbnRzKSBcbiAgICBwcml2YXRlIF9wcmV2aWV3TW9kZVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIGdldCBwcmV2aWV3TW9kZUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmV2aWV3TW9kZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGZvciBlZGl0b3IgbW9kZSBmb3IgYmxvY2sgYWRkZWQuXG4gICAgcHJpdmF0ZSBfYmxvY2tBZGRlZEV2ZW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dEJsb2NrQWRkZWRFdmVudCB8IG51bGw+KG51bGwpO1xuICAgIGdldCBibG9ja0FkZGVkRXZlbnRTdWJqZWN0JCgpOiBPYnNlcnZhYmxlPElQZXBMYXlvdXRCbG9ja0FkZGVkRXZlbnQgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibG9ja0FkZGVkRXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICAvLyBUaGlzIGlzIGZvciBlZGl0b3IgbW9kZSBmb3IgYmxvY2tzIHJlbW92ZWQuXG4gICAgcHJpdmF0ZSBfYmxvY2tzUmVtb3ZlZEV2ZW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgICBnZXQgYmxvY2tzUmVtb3ZlZEV2ZW50U3ViamVjdCQoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmxvY2tzUmVtb3ZlZEV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHN1YmplY3QgaXMgZm9yIHNrZWxldG9uLlxuICAgIHByaXZhdGUgX3Nob3dTa2VsZXRvblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgZ2V0IHNob3dTa2VsZXRvbkNoYW5nZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93U2tlbGV0b25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogUGVwRGlhbG9nU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgLy9cbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KCdMQVlPVVRfQlVJTERFUi5TRUNUSU9OJykuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHNlY3Rpb24gbmFtZS5cbiAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRTZWN0aW9uVGl0bGUgPSByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBwcml2YXRlIHNldEVkaXRhYmxlU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuX2VkaXRhYmxlU3RhdGUgPSB0aGlzLmVkaXRNb2RlICYmICF0aGlzLl9wcmV2aWV3TW9kZVN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlld1RvVXBkYXRlOiBJUGVwTGF5b3V0VmlldyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGxheW91dFZpZXdUb1VwZGF0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dEVkaXRvclByb3BlcnRpZXMobGF5b3V0Vmlld1RvVXBkYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsYXlvdXQgZm9yIHRoZSB2aWV3LlxuICAgICAgICAgICAgdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QubmV4dChsYXlvdXRWaWV3VG9VcGRhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNlY3Rpb25zIGZvciB0aGUgdmlldy5cbiAgICAgICAgICAgIHRoaXMuX3NlY3Rpb25zVmlld1N1YmplY3QubmV4dChsYXlvdXRWaWV3VG9VcGRhdGU/LkxheW91dC5TZWN0aW9ucyB8fCBbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUJsb2NrQWRkZWQoYmxvY2tBZGRlZEV2ZW50RGF0YTogSVBlcExheW91dEJsb2NrQWRkZWRFdmVudCkge1xuICAgICAgICAvLyBOb3RpZnkgdGhhdCB0aGUgYmxvY2sgaXMgYWRkZWQgKHRvIHJhaXNlIHRoZSBldmVudCBmb3IgdGhlIGNsaWVudCkuXG4gICAgICAgIHRoaXMuX2Jsb2NrQWRkZWRFdmVudFN1YmplY3QubmV4dChibG9ja0FkZGVkRXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUJsb2Nrc1JlbW92ZWQoa2V5czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGtleXMpIHtcbiAgICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IHRoZSBibG9ja3MgYXJlIHJlbW92ZWQgKHRvIHJhaXNlIHRoZSBldmVudCBmb3IgdGhlIGNsaWVudCkuXG4gICAgICAgICAgICB0aGlzLl9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0Lm5leHQoa2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUVkaXRvckNoYW5nZShlZGl0b3I6IElFZGl0b3IgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRvclN1YmplY3QubmV4dChlZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5UHJldmlld01vZGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcHJldmlld01vZGVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgICB0aGlzLnNldEVkaXRhYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUxvY2tTY3JlZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbG9ja1NjcmVlblN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlTZWN0aW9uc0NvbHVtbnNEcm9wTGlzdENoYW5nZShzZWN0aW9uc0NvbHVtbnNEcm9wTGlzdDogYW55W10pIHtcbiAgICAgICAgdGhpcy5fc2VjdGlvbnNDb2x1bW5zRHJvcExpc3RTdWJqZWN0Lm5leHQoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyhsYXlvdXRWaWV3OiBJUGVwTGF5b3V0Vmlldykge1xuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWJbMF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dEVkaXRvcjogSUxheW91dEVkaXRvciA9IHtcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogbGF5b3V0Vmlldz8uTGF5b3V0Lk1heFdpZHRoIHx8IDAsXG4gICAgICAgICAgICAgICAgdmVydGljYWxTcGFjaW5nOiBsYXlvdXRWaWV3Py5MYXlvdXQuVmVydGljYWxTcGFjaW5nLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTcGFjaW5nOiBsYXlvdXRWaWV3Py5MYXlvdXQuSG9yaXpvbnRhbFNwYWNpbmcsXG4gICAgICAgICAgICAgICAgc2VjdGlvbnNHYXA6IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9uc0dhcCxcbiAgICAgICAgICAgICAgICBjb2x1bW5zR2FwOiBsYXlvdXRWaWV3Py5MYXlvdXQuQ29sdW1uc0dhcCxcbiAgICAgICAgICAgICAgICAvLyByb3VuZGVkQ29ybmVyczogbGF5b3V0Vmlldz8uTGF5b3V0LlJvdW5kZWRDb3JuZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlswXS5ob3N0T2JqZWN0ID0gbGF5b3V0RWRpdG9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRGVmYXVsdEVkaXRvcihsYXlvdXRWaWV3OiBJUGVwTGF5b3V0Vmlldykge1xuICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYiA9IG5ldyBBcnJheTxJRWRpdG9yPigpO1xuXG4gICAgICAgIGlmIChsYXlvdXRWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0xBWU9VVF9CVUlMREVSLkRFRkFVTFRfVElUTEUnKS5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UuTUFJTl9FRElUT1JfSUQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbGF5b3V0LWJ1aWxkZXInLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvc3RPYmplY3Q6IHt9IC8vIFVwZGF0ZXMgaW4gdXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyBmdW5jdGlvbiBhYm92ZS5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyhsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUVkaXRvckNoYW5nZSh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlswXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5RWRpdG9yQ2hhbmdlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXJyZW50RWRpdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlFZGl0b3JDaGFuZ2UodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWJbdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFZGl0b3JCeVR5cGUoZWRpdG9yVHlwZTogTGF5b3V0RWRpdG9yVHlwZSwgaWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyA9ICcnKTogSUVkaXRvciB8IG51bGwge1xuICAgICAgICAvLyBCdWlsZCBlZGl0b3Igb2JqZWN0LlxuICAgICAgICBsZXQgZWRpdG9yOiBJRWRpdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKGVkaXRvclR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgICAgICAgZWRpdG9yID0gdGhpcy5nZXRTZWN0aW9uRWRpdG9yKGlkLCB0aXRsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWRpdG9yVHlwZSA9PT0gJ2Jsb2NrJykge1xuICAgICAgICAgICAgZWRpdG9yID0gdGhpcy5nZXRCbG9ja0VkaXRvcihpZCwgdGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2NrRWRpdG9yKGJsb2NrS2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBJRWRpdG9yIHtcbiAgICAgICAgLy8gR2V0IGJsb2NrIGVkaXRvciB0aXRsZS5cbiAgICAgICAgY29uc3QgYmxvY2tUaXRsZSA9IHRpdGxlIHx8IHRoaXMuZ2V0QmxvY2tUaXRsZShibG9ja0tleSk7IFxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogYmxvY2tLZXksXG4gICAgICAgICAgICB0eXBlOiAnYmxvY2snLFxuICAgICAgICAgICAgdGl0bGU6IGJsb2NrVGl0bGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VjdGlvbkVkaXRvclRpdGxlKHNlY3Rpb246IElQZXBMYXlvdXRTZWN0aW9uLCBzZWN0aW9uSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzZWN0aW9uLk5hbWUgfHwgYCR7dGhpcy5fZGVmYXVsdFNlY3Rpb25UaXRsZX0gJHtzZWN0aW9uSW5kZXggKyAxfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWN0aW9uRWRpdG9yKHNlY3Rpb25JZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogSUVkaXRvciB8IG51bGwge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbGV0IHNlY3Rpb24gPSBzZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkVkaXRvcjogSUxheW91dFNlY3Rpb25FZGl0b3IgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHNlY3Rpb24uS2V5LFxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiBzZWN0aW9uLk5hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgc3BsaXQ6IHNlY3Rpb24uU3BsaXQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2VjdGlvbi5IZWlnaHQgfHwgMCxcbiAgICAgICAgICAgICAgICBjb2xsYXBzZU9uVGFibGV0OiBzZWN0aW9uLkNvbGxhcHNlT25UYWJsZXQgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgZmlsbEhlaWdodDogc2VjdGlvbi5GaWxsSGVpZ2h0ID8/IGZhbHNlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IHNlY3Rpb25JZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VjdGlvbicsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHRoaXMuZ2V0U2VjdGlvbkVkaXRvclRpdGxlKHNlY3Rpb24sIHNlY3Rpb25JbmRleCksXG4gICAgICAgICAgICAgICAgaG9zdE9iamVjdDogc2VjdGlvbkVkaXRvclxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlY3Rpb25Db2x1bW5CeUlkRm9yRWRpdG9yKHNlY3Rpb25Db2x1bW5JZDogc3RyaW5nKTogSVBlcExheW91dFNlY3Rpb25Db2x1bW4gfCBudWxsIHtcbiAgICAgICAgbGV0IGN1cnJlbnRDb2x1bW4gPSBudWxsO1xuXG4gICAgICAgIC8vIEdldCB0aGUgc2VjdGlvbiBhbmQgY29sdW1uIGFycmF5IGJ5IHRoZSBwYXR0ZXJuIG9mIHRoZSBzZWN0aW9uIGNvbHVtbiBrZXkuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25Db2x1bW5QYXR0ZXJuU2VwYXJhdG9yID0gdGhpcy5nZXRTZWN0aW9uQ29sdW1uS2V5KCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25Db2x1bW5BcnIgPSBzZWN0aW9uQ29sdW1uSWQuc3BsaXQoc2VjdGlvbkNvbHVtblBhdHRlcm5TZXBhcmF0b3IpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uQ29sdW1uQXJyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzZWN0aW9uIGlkIHRvIGdldCB0aGUgc2VjdGlvbiBpbmRleC5cbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JZCA9IHNlY3Rpb25Db2x1bW5BcnJbMF07XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSBzZWN0aW9ucy5maW5kSW5kZXgoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgY29sdW1uIGluZGV4LlxuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5kZXggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShzZWN0aW9uQ29sdW1uQXJyWzFdLCAtMSk7XG4gICAgICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID49IDAgJiYgY29sdW1uSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDb2x1bW4gPSBzZWN0aW9uc1tzZWN0aW9uSW5kZXhdLkNvbHVtbnNbY29sdW1uSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2x1bW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDc3NTY3JlZW5XaWRoKHNjcmVlblR5cGU6IERhdGFWaWV3U2NyZWVuU2l6ZSk6IHN0cmluZyB7XG4gICAgICAgIGxldCB3aWR0aFRvU2V0ID0gJzEwMCUnO1xuXG4gICAgICAgIGlmIChzY3JlZW5UeXBlID09PSAnVGFibGV0Jykge1xuICAgICAgICAgICAgd2lkdGhUb1NldCA9ICc3MjAnO1xuICAgICAgICB9IGVsc2UgaWYgKHNjcmVlblR5cGUgPT09ICdQaGFibGV0Jykge1xuICAgICAgICAgICAgd2lkdGhUb1NldCA9ICczNjAnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpZHRoVG9TZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja3NOdW1iZXIoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGJsb2Nrc051bWJlciA9IDA7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKT8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzZWN0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uc1tpbmRleF07XG4gICAgICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IHNlY3Rpb24uQ29sdW1ucy5sZW5ndGg7IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBzZWN0aW9uLkNvbHVtbnNbY29sdW1uSW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uQmxvY2tDb250YWluZXIgJiYgY29sdW1uLkJsb2NrQ29udGFpbmVyLkJsb2NrS2V5Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2Nrc051bWJlcisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBibG9ja3NOdW1iZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXJzb3JPbkRyYWdTdGFydCgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdpbmhlcml0Q3Vyc29ycycpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXJzb3JPbkRyYWdFbmQoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnaW5oZXJpdEN1cnNvcnMnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAndW5zZXQnO1xuICAgIH1cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWMgZnVuY3Rpb25zXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgZ2V0QmxvY2tUaXRsZShibG9ja0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEJsb2NrVGl0bGUoYmxvY2tLZXkpIHx8IGJsb2NrS2V5O1xuICAgIH1cblxuICAgIHNldFNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0Q2hhbmdlKHNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0OiBhbnlbXSkge1xuICAgICAgICB0aGlzLm5vdGlmeVNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0Q2hhbmdlKHNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VQcmV2aWV3TW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLm5vdGlmeVByZXZpZXdNb2RlQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50U2NyZWVuVHlwZSgpOiBEYXRhVmlld1NjcmVlblNpemUge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTY3JlZW5UeXBlKHRoaXMuX3NjcmVlblNpemVTdWJqZWN0LmdldFZhbHVlKCkpO1xuICAgIH1cblxuICAgIGdldFNjcmVlblR5cGUoc2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGUpOiBEYXRhVmlld1NjcmVlblNpemUge1xuICAgICAgICBjb25zdCBzY3JlZW5UeXBlOiBEYXRhVmlld1NjcmVlblNpemUgPVxuICAgICAgICAgICAgc2l6ZSA8IFBlcFNjcmVlblNpemVUeXBlLk1EID8gJ0xhbmRzY2FwZScgOlxuICAgICAgICAgICAgKHNpemUgPT09IFBlcFNjcmVlblNpemVUeXBlLk1EIHx8IHNpemUgPT09IFBlcFNjcmVlblNpemVUeXBlLlNNID8gJ1RhYmxldCcgOiAnUGhhYmxldCcpO1xuXG4gICAgICAgIHJldHVybiBzY3JlZW5UeXBlO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb25Db2x1bW5LZXkoc2VjdGlvbktleTogc3RyaW5nID0gJycsIGluZGV4OiBzdHJpbmcgPSAnJykge1xuICAgICAgICByZXR1cm4gYCR7c2VjdGlvbktleX1fY29sdW1uXyR7aW5kZXh9YDtcbiAgICB9XG5cbiAgICBnZXRJc0hpZGRlbihoaWRlSW46IERhdGFWaWV3U2NyZWVuU2l6ZVtdIHwgdW5kZWZpbmVkLCBjdXJyZW50U2NyZWVuVHlwZTogRGF0YVZpZXdTY3JlZW5TaXplKSB7XG4gICAgICAgIHJldHVybiAoaGlkZUluICYmIGhpZGVJbj8ubGVuZ3RoID4gMCkgPyBoaWRlSW4uc29tZShoaSA9PiBoaSA9PT0gY3VycmVudFNjcmVlblR5cGUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVUb0VkaXRvcihlZGl0b3JUeXBlOiBMYXlvdXRFZGl0b3JUeXBlLCBpZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gJycpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAvLyBDYW5ub3QgbmF2aWdhdGUgaW50byAnbGF5b3V0LWJ1aWxkZXInIGJlY2F1c2UgdGhpcyBpcyBmaXJzdCBhbmQgY29uc3QgaW4gdGhlIGVkaXRvcnNCcmVhZENydW1icy5cbiAgICAgICAgaWYgKGVkaXRvclR5cGUgIT09ICdsYXlvdXQtYnVpbGRlcicgJiYgaWQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIENoZWNrIHdoaWNoIGVkaXRvciB3ZSBoYXZlIG5vd1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuX2VkaXRvcnNCcmVhZENydW1iW3RoaXMuX2VkaXRvcnNCcmVhZENydW1iLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAvLyBPbmx5IGlmIGl0J3MgYW5vdGhlciBlZGl0b3IuXG4gICAgICAgICAgICBpZihjdXJyZW50RWRpdG9yLmlkICE9PSBpZCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWRpdG9yLnR5cGUgIT09ICdsYXlvdXQtYnVpbGRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHBvcCB0aGUgbGFzdCBhbmQgaW5zZXJ0IHRoZSBjdXJyZW50LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZWRpdG9yID0gdGhpcy5nZXRFZGl0b3JCeVR5cGUoZWRpdG9yVHlwZSwgaWQsIHRpdGxlKTtcblxuICAgICAgICAgICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIucHVzaChlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnJlbnRFZGl0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cblxuICAgIG5hdmlnYXRlQmFja0Zyb21FZGl0b3IoKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGxheW91dCBidWlsZGVyIGVkaXRvci5cbiAgICAgICAgaWYgKHRoaXMuX2VkaXRvcnNCcmVhZENydW1iLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIC8vIE1heWJlIHdlIHdhbnQgdG8gY29tcGFyZSB0aGUgbGFzdCBlZGl0b3IgZm9yIHZhbGlkYXRpb24gP1xuICAgICAgICAgICAgY29uc3QgbGFzdEVkaXRvciA9IHRoaXMuX2VkaXRvcnNCcmVhZENydW1iLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDdXJyZW50RWRpdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVMYXlvdXRGcm9tRWRpdG9yKGVkaXRvckRhdGE6IElMYXlvdXRFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG5cbiAgICAgICAgaWYgKGxheW91dFZpZXcpIHtcbiAgICAgICAgICAgIGxheW91dFZpZXcuTGF5b3V0Lk1heFdpZHRoID0gZWRpdG9yRGF0YS5tYXhXaWR0aDtcbiAgICAgICAgICAgIGxheW91dFZpZXcuTGF5b3V0Lkhvcml6b250YWxTcGFjaW5nID0gZWRpdG9yRGF0YS5ob3Jpem9udGFsU3BhY2luZztcbiAgICAgICAgICAgIGxheW91dFZpZXcuTGF5b3V0LlZlcnRpY2FsU3BhY2luZyA9IGVkaXRvckRhdGEudmVydGljYWxTcGFjaW5nO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuU2VjdGlvbnNHYXAgPSBlZGl0b3JEYXRhLnNlY3Rpb25zR2FwO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuQ29sdW1uc0dhcCA9IGVkaXRvckRhdGEuY29sdW1uc0dhcDtcbiAgICAgICAgICAgIC8vIGxheW91dFZpZXcuTGF5b3V0LlJvdW5kZWRDb3JuZXJzID0gZWRpdG9yRGF0YS5yb3VuZGVkQ29ybmVycztcblxuICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHVwZGF0ZVNlY3Rpb25Gcm9tRWRpdG9yKHNlY3Rpb25EYXRhOiBJTGF5b3V0U2VjdGlvbkVkaXRvcikge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uRGF0YS5pZCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHNlY3Rpb24gZGV0YWlscy5cbiAgICAgICAgaWYgKHNlY3Rpb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBibG9ja3NJZHNUb1JlbW92ZSA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbiA9IHNlY3Rpb25zW3NlY3Rpb25JbmRleF07XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5OYW1lID0gc2VjdGlvbkRhdGEuc2VjdGlvbk5hbWU7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5TcGxpdCA9IHNlY3Rpb25EYXRhLnNwbGl0O1xuICAgICAgICAgICAgY3VycmVudFNlY3Rpb24uSGVpZ2h0ID0gc2VjdGlvbkRhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgY3VycmVudFNlY3Rpb24uQ29sbGFwc2VPblRhYmxldCA9IHNlY3Rpb25EYXRhLmNvbGxhcHNlT25UYWJsZXQ7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5GaWxsSGVpZ2h0ID0gc2VjdGlvbkRhdGEuZmlsbEhlaWdodDtcblxuICAgICAgICAgICAgLy8gR2V0IHRoZSBuZXcgY29sdW1ucyBudW1iZXIgZnJvbSBjdXJyZW50U2VjdGlvbi5TcGxpdCwgaWYgaXRzIHVuZGVmaW5lZCBwdXQgYSBkZWZhdWx0IDEuXG4gICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zTGVuZ3RoID0gY3VycmVudFNlY3Rpb24uU3BsaXQ/LnNwbGl0KCcgJykubGVuZ3RoIHx8IDE7XG4gICAgICAgICAgICBpZiAobmV3Q29sdW1uc0xlbmd0aCA+IGN1cnJlbnRTZWN0aW9uLkNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG5ld0NvbHVtbnNMZW5ndGggPiBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLnB1c2goe30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3Q29sdW1uc0xlbmd0aCA8IGN1cnJlbnRTZWN0aW9uLkNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG5ld0NvbHVtbnNMZW5ndGggPCBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bm0gPSBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBibG9jayBpbiB0aGlzIGNvbHVtbiBkZWxldGUgaXQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bm0gJiYgY29sdW5tLkJsb2NrQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3NJZHNUb1JlbW92ZS5wdXNoKGNvbHVubS5CbG9ja0NvbnRhaW5lci5CbG9ja0tleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBlZGl0b3IgdGl0bGVcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLl9lZGl0b3JTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEVkaXRvciAmJiBjdXJyZW50RWRpdG9yLnR5cGUgPT09ICdzZWN0aW9uJyAmJiBjdXJyZW50RWRpdG9yLmlkID09PSBjdXJyZW50U2VjdGlvbi5LZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuZ2V0U2VjdGlvbkVkaXRvclRpdGxlKGN1cnJlbnRTZWN0aW9uLCBzZWN0aW9uSW5kZXgpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFZGl0b3IudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUVkaXRvckNoYW5nZShjdXJyZW50RWRpdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlY3Rpb25zIGNoYW5nZS5cbiAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGJsb2NrcyB0byByZW1vdmUsIG5vdGlmeSB0aGUgYmxvY2tzIHJlbW92ZWQuXG4gICAgICAgICAgICBpZiAoYmxvY2tzSWRzVG9SZW1vdmUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5QmxvY2tzUmVtb3ZlZChibG9ja3NJZHNUb1JlbW92ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRTZWN0aW9uKHNlY3Rpb246IElQZXBMYXlvdXRTZWN0aW9uIHwgbnVsbCA9IG51bGwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBzZWN0aW9uXG4gICAgICAgIGlmICghc2VjdGlvbikge1xuICAgICAgICAgICAgc2VjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBLZXk6IFBlcEd1aWQubmV3R3VpZCgpLFxuICAgICAgICAgICAgICAgIENvbHVtbnM6IFt7fV0sIC8vIEFkZCBlbXB0eSBzZWN0aW9uIGNvbHVtblxuICAgICAgICAgICAgICAgIEhpZGU6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIG5ldyBzZWN0aW9uIHRvIGxheW91dCB2aWV3LlxuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIHNlY3Rpb25zLnB1c2goc2VjdGlvbik7XG4gICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICB9XG5cbiAgICByZW1vdmVTZWN0aW9uKHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzZWN0aW9ucy5maW5kSW5kZXgoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgYmxvY2tzIGlkJ3MgdG8gcmVtb3ZlLlxuICAgICAgICAgICAgY29uc3QgYmxvY2tzSWRzVG9SZW1vdmU6IGFueSA9IHNlY3Rpb25zW2luZGV4XS5Db2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uPy5CbG9ja0NvbnRhaW5lcj8uQmxvY2tLZXkpO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgc2VjdGlvbi5cbiAgICAgICAgICAgIHNlY3Rpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBibG9ja3MgdG8gcmVtb3ZlLCBub3RpZnkgdGhlIGJsb2NrcyByZW1vdmVkLlxuICAgICAgICAgICAgaWYgKGJsb2Nrc0lkc1RvUmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUJsb2Nrc1JlbW92ZWQoYmxvY2tzSWRzVG9SZW1vdmUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlU2VjdGlvbihzZWN0aW9uSWQ6IHN0cmluZywgaGlkZUluOiBEYXRhVmlld1NjcmVlblNpemVbXSkge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25JZCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZWN0aW9uc1tpbmRleF0uSGlkZSA9IGhpZGVJbjtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VjdGlvbkRyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShzZWN0aW9ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgIH1cblxuICAgIG9uU2VjdGlvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yT25EcmFnU3RhcnQoKTtcbiAgICAgICAgdGhpcy5fZHJhZ2dpbmdTZWN0aW9uS2V5Lm5leHQoZXZlbnQuc291cmNlLmRhdGEpO1xuICAgIH1cblxuICAgIG9uU2VjdGlvbkRyYWdFbmQoZXZlbnQ6IENka0RyYWdFbmQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3JPbkRyYWdFbmQoKTtcbiAgICAgICAgdGhpcy5fZHJhZ2dpbmdTZWN0aW9uS2V5Lm5leHQoJycpO1xuICAgIH1cblxuICAgIHJlbW92ZUJsb2NrRnJvbVNlY3Rpb24oYmxvY2tJZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBibG9ja1JlbW92ZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhlIGJsb2NrIGZyb20gc2VjdGlvbiBjb2x1bW4uXG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IHNlY3Rpb25JbmRleCA9IDA7IHNlY3Rpb25JbmRleCA8IHNlY3Rpb25zLmxlbmd0aDsgc2VjdGlvbkluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGJsb2NrIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gc2VjdGlvbi5Db2x1bW5zLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLkJsb2NrQ29udGFpbmVyPy5CbG9ja0tleSA9PT0gYmxvY2tJZCk7XG4gICAgICAgICAgICBpZiAoY29sdW1uSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWN0aW9uLkNvbHVtbnNbY29sdW1uSW5kZXhdLkJsb2NrQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICBibG9ja1JlbW92ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgYmxvY2sgd2FzIHJlbW92ZWQsIG5vdGlmeSB0aGUgYmxvY2sgcmVtb3ZlZC5cbiAgICAgICAgaWYgKGJsb2NrUmVtb3ZlZCkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlCbG9ja3NSZW1vdmVkKFtibG9ja0lkXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlQmxvY2soc2VjdGlvbklkOiBzdHJpbmcsIGJsb2NrSWQ6IHN0cmluZywgaGlkZUluOiBEYXRhVmlld1NjcmVlblNpemVbXSkge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIFxuICAgICAgICBjb25zdCBpbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5kZXggPSBzZWN0aW9uc1tpbmRleF0uQ29sdW1ucy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5CbG9ja0NvbnRhaW5lcj8uQmxvY2tLZXkgPT09IGJsb2NrSWQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0NvbnRhaW5lciA9IHNlY3Rpb25zW2luZGV4XS5Db2x1bW5zW2NvbHVtbkluZGV4XS5CbG9ja0NvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tDb250YWluZXIuSGlkZSA9IGhpZGVJbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmxvY2tEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxJUGVwTGF5b3V0U2VjdGlvbkNvbHVtbiwgYW55LCBhbnk+LCBzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcblxuICAgICAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgPT09IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UuQVZBSUxBQkxFX0JMT0NLU19DT05UQUlORVJfSUQpIHtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGlmIGJsb2NrcyBudW1iZXIgYWxsb3cuXG4gICAgICAgICAgICBpZiAodGhpcy5fYmxvY2tzTGltaXROdW1iZXIgPiAwICYmIHRoaXMuZ2V0QmxvY2tzTnVtYmVyKCkgPj0gdGhpcy5fYmxvY2tzTGltaXROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IFBlcERpYWxvZ0RhdGEoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTUVTU0FHRVMuRElBTE9HX05PVElDRV9USVRMRScpLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdMQVlPVVRfQlVJTERFUi5CTE9DS1NfQ09VTlRfTElNSVRfTUVTU0FHRScpLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5EZWZhdWx0RGlhbG9nKGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGJsb2NrIHJlbGF0aW9uIChwcmV2aW91c0NvbnRhaW5lci5kYXRhIGlzIElQZXBEcmFnZ2FibGVJdGVtIGFuZCBpbnNpZGUgd2UgaGF2ZSBBdmFpbGFibGVCbG9jayBvYmplY3QpLlxuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWdnYWJsZUl0ZW06IElQZXBEcmFnZ2FibGVJdGVtID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YVtldmVudC5wcmV2aW91c0luZGV4XSBhcyBJUGVwRHJhZ2dhYmxlSXRlbTtcblxuICAgICAgICAgICAgICAgIGlmIChkcmFnZ2FibGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxvY2sgdGhlIHNjcmVlbiB1bnRpbGwgdGhlIGVkaXRvciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fbG9ja1NjcmVlblN1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGNvbHVtbi5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3IoZXZlbnQuY29udGFpbmVyLmlkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGJsb2NrIGtleSBpbiB0aGUgc2VjdGlvbiBibG9jayBvbmx5IGlmIHRoZXJlIGlzIGEgYmxhbmsgY29sdW1uLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbiAmJiAhY3VycmVudENvbHVtbi5CbG9ja0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGJsb2NrIHV1aWQuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0tleSA9IFBlcEd1aWQubmV3R3VpZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29sdW1uLkJsb2NrQ29udGFpbmVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrS2V5OiBibG9ja0tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgd2UgdXBkYXRlIHRoZSBsYXlvdXQgdmlldyBjYXVzZSB0aGUgbGF5b3V0IGlzIHVwZGF0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhaXNlIGJsb2NrIGFkZGVkIGV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tBZGRlZEV2ZW50RGF0YTogSVBlcExheW91dEJsb2NrQWRkZWRFdmVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0tleTogYmxvY2tLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhZ2dhYmxlSXRlbTogZHJhZ2dhYmxlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlCbG9ja0FkZGVkKGJsb2NrQWRkZWRFdmVudERhdGEpOyAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9uYXZpZ2F0ZVRvRWRpdG9yQWZ0ZXJCbG9ja0FkZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGJsb2NrIGVkaXRvci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9FZGl0b3IoJ2Jsb2NrJywgYmxvY2tLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkcmFnZ2FibGVJdGVtIGlzIG5vdCBhIElQZXBEcmFnZ2FibGVJdGVtIHR5cGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGJsb2NrIG1vdmVkIGJldHdlZW4gY29sdW1ucyBpbiB0aGUgc2FtZSBzZWN0aW9uIG9yIGJldHdlZW4gZGlmZmVyZW50IHNlY3Rpb25zIGJ1dCBub3QgaW4gdGhlIHNhbWUgY29sdW1uLlxuICAgICAgICAgICAgaWYgKGV2ZW50LmNvbnRhaW5lci5pZCAhPT0gZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gdGhpcy5nZXRTZWN0aW9uQ29sdW1uQnlJZEZvckVkaXRvcihldmVudC5jb250YWluZXIuaWQpO1xuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgcHJldmlvdXMgY29sdW1uLlxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpdW9zQ29sdW1uID0gdGhpcy5nZXRTZWN0aW9uQ29sdW1uQnlJZEZvckVkaXRvcihldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbiAmJiBwcmV2aXVvc0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29sdW1uLkJsb2NrQ29udGFpbmVyID0gcHJldml1b3NDb2x1bW4uQmxvY2tDb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcmV2aXVvc0NvbHVtbi5CbG9ja0NvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmxvY2tEcmFnU3RhcnQoZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvck9uRHJhZ1N0YXJ0KCk7XG4gICAgICAgIC8vIFRha2UgdGhlIGJsb2NrIGtleSBpZiBleGlzdCwgZWxzZSB0YWtlIHRoZSBhdmFpbGFibGUgYmxvY2sga2V5IChyZWxhdGlvbiBrZXkpLlxuICAgICAgICBjb25zdCBibG9ja0tleSA9IGV2ZW50LnNvdXJjZS5kYXRhPy5CbG9ja0tleSB8fCBldmVudC5zb3VyY2UuZGF0YT8uS2V5O1xuICAgICAgICB0aGlzLl9kcmFnZ2luZ0Jsb2NrS2V5Lm5leHQoYmxvY2tLZXkpO1xuICAgIH1cblxuICAgIG9uQmxvY2tEcmFnRW5kKGV2ZW50OiBDZGtEcmFnRW5kKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yT25EcmFnRW5kKCk7XG4gICAgICAgIHRoaXMuX2RyYWdnaW5nQmxvY2tLZXkubmV4dCgnJyk7XG4gICAgfVxuICAgIFxuICAgIGRvZXNDb2x1bW5Db250YWluQmxvY2soc2VjdGlvbklkOiBzdHJpbmcsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucy5maW5kKHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25JZCk7XG5cbiAgICAgICAgaWYgKHNlY3Rpb24gJiYgY29sdW1uSW5kZXggPj0gMCAmJiBzZWN0aW9uLkNvbHVtbnMubGVuZ3RoID4gY29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgIHJlcyA9ICEhc2VjdGlvbi5Db2x1bW5zW2NvbHVtbkluZGV4XS5CbG9ja0NvbnRhaW5lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgc2V0U2NyZWVuV2lkdGgoc2NyZWVuVHlwZTogRGF0YVZpZXdTY3JlZW5TaXplKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDc3NTY3JlZW5XaWRoKHNjcmVlblR5cGUpXG5cbiAgICAgICAgbGV0IHdpZHRoID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NjcmVlbldpZHRoU3ViamVjdC5uZXh0KCcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5uZXh0KFBlcFNjcmVlblNpemVUeXBlLlhMKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NjcmVlbldpZHRoU3ViamVjdC5uZXh0KGAke3dpZHRofXB4YCk7XG5cbiAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgc2l6ZSBhY2NvcmRpbmcgdGhlIHdpZHRoLlxuICAgICAgICAgICAgaWYgKHdpZHRoID49IDE5MjApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5uZXh0KFBlcFNjcmVlblNpemVUeXBlLlhMKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPj0gMTI4MCAmJiB3aWR0aCA8IDE5MjApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5uZXh0KFBlcFNjcmVlblNpemVUeXBlLkxHKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPj0gOTYwICYmIHdpZHRoIDwgMTI4MCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0Lm5leHQoUGVwU2NyZWVuU2l6ZVR5cGUuTUQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA+PSA2MDAgJiYgd2lkdGggPCA5NjApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5uZXh0KFBlcFNjcmVlblNpemVUeXBlLlNNKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPCA2MDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5uZXh0KFBlcFNjcmVlblNpemVUeXBlLlhTKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dTa2VsZXRvbihzaG93OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dTa2VsZXRvblN1YmplY3QubmV4dChzaG93KTtcbiAgICB9XG4gICAgXG4gICAgbG9ja1NjcmVlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLm5vdGlmeUxvY2tTY3JlZW4odmFsdWUpO1xuICAgIH1cblxuICAgIGxvYWRMYXlvdXRCdWlsZGVyKGxheW91dFZpZXc6IElQZXBMYXlvdXRWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9hZCB0aGUgbGF5b3V0IGVkaXRvci5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREZWZhdWx0RWRpdG9yKGxheW91dFZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9hZCBvbmx5IHRoZSBsYXlvdXQgdmlldy5cbiAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgIH1cbn1cbiJdfQ==
|
|
620
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXItaW50ZXJuYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC1idWlsZGVyLWludGVybmFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQXdELGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSSxPQUFPLEVBQW1CLE9BQU8sRUFBa0IsaUJBQWlCLEVBQTBDLE1BQU0seUJBQXlCLENBQUM7QUFHOUksT0FBTyxFQUFjLGVBQWUsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUF3QmpGLE1BQU0sT0FBTyw0QkFBNEI7SUE4R3JDLFlBQ2MsU0FBMkIsRUFDM0IsYUFBK0I7UUFEL0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBNUdyQyx5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFFbEMsNkNBQTZDO1FBQ3JDLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2QixxQ0FBZ0MsR0FBRyxLQUFLLENBQUM7UUFDekMsbUJBQWMsR0FBaUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLE9BQU8sUUFBUSxDQUFBLENBQUMsQ0FBQyxDQUFDO1FBT2pGLHVCQUFrQixHQUFHLEtBQUssRUFBVyxDQUFDO1FBRXRDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFTM0IsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFL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LGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3REO2lCQUFNLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN0RDtTQUNKO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFhO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFjO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsVUFBMEI7UUFDeEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdEMsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdEM7U0FDSjtRQUVELDZCQUE2QjtRQUM3QixJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7QUF0c0JlLDBEQUE2QixHQUFHLGlCQUFrQixDQUFBO0FBQ2xELDJDQUFjLEdBQUcsTUFBTyxDQUFBO3lIQUYvQiw0QkFBNEI7NkhBQTVCLDRCQUE0QixjQUZ6QixNQUFNOzJGQUVULDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCwgY29weUFycmF5SXRlbSwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IFBlcEFkZG9uU2VydmljZSwgUGVwR3VpZCwgUGVwSHR0cFNlcnZpY2UsIFBlcFNjcmVlblNpemVUeXBlLCBQZXBTZXNzaW9uU2VydmljZSwgUGVwVXRpbGl0aWVzU2VydmljZSB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYlwiO1xuaW1wb3J0IHsgSVBlcERyYWdnYWJsZUl0ZW0gfSBmcm9tIFwiQHBlcHBlcmktYWRkb25zL25neC1saWIvZHJhZ2dhYmxlLWl0ZW1zXCI7XG5pbXBvcnQgeyBEYXRhVmlld1NjcmVlblNpemUsIFNwbGl0VHlwZSB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvcGFwaS1zZGtcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUGVwTGF5b3V0RWRpdG9yVHlwZSwgSVBlcExheW91dEJsb2NrQWRkZWRFdmVudCwgSVBlcExheW91dFNlY3Rpb24sIElQZXBMYXlvdXRTZWN0aW9uQ29sdW1uLCBJUGVwTGF5b3V0VmlldywgSVBlcExheW91dEJsb2NrQ29uZmlnLCBQZXBMYXlvdXRTaXplVHlwZSwgSUVkaXRvciB9IGZyb20gXCIuL2xheW91dC1idWlsZGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBQZXBEaWFsb2dEYXRhLCBQZXBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkBwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2RpYWxvZ1wiO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxheW91dEVkaXRvciB7XG4gICAgbWF4V2lkdGg6IG51bWJlcixcbiAgICBob3Jpem9udGFsU3BhY2luZz86IFBlcExheW91dFNpemVUeXBlLFxuICAgIHZlcnRpY2FsU3BhY2luZz86IFBlcExheW91dFNpemVUeXBlLFxuICAgIHNlY3Rpb25zR2FwPzogUGVwTGF5b3V0U2l6ZVR5cGUsXG4gICAgY29sdW1uc0dhcD86IFBlcExheW91dFNpemVUeXBlLFxuICAgIHJvdW5kZWRDb3JuZXJzPzogUGVwTGF5b3V0U2l6ZVR5cGUsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxheW91dFNlY3Rpb25FZGl0b3Ige1xuICAgIGlkOiBzdHJpbmcsXG4gICAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgICBzcGxpdDogU3BsaXRUeXBlIHwgdW5kZWZpbmVkLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGNvbGxhcHNlT25UYWJsZXQ6IGJvb2xlYW4sXG4gICAgZmlsbEhlaWdodDogYm9vbGVhblxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgQVZBSUxBQkxFX0JMT0NLU19DT05UQUlORVJfSUQgPSAnYXZhaWxhYmxlQmxvY2tzJztcbiAgICBzdGF0aWMgcmVhZG9ubHkgTUFJTl9FRElUT1JfSUQgPSAnbWFpbic7XG5cbiAgICBwcml2YXRlIF9kZWZhdWx0U2VjdGlvblRpdGxlID0gJyc7XG4gICAgXG4gICAgLy8gVGhpcyBjb25maWd1cmF0aW9uIGlzIGZvciBibG9ja3MgYmVoYXZpb3IuXG4gICAgcHJpdmF0ZSBfYmxvY2tzTGltaXROdW1iZXIgPSAwO1xuICAgIHByaXZhdGUgX25hdmlnYXRlVG9FZGl0b3JBZnRlckJsb2NrQWRkZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9nZXRCbG9ja1RpdGxlOiAoYmxvY2tLZXk6IHN0cmluZykgPT4gc3RyaW5nID0gKGJsb2NrS2V5KSA9PiB7IHJldHVybiBibG9ja0tleSB9O1xuICAgIHNldEJsb2Nrc0NvbmZpZyh2YWx1ZTogSVBlcExheW91dEJsb2NrQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2Jsb2Nrc0xpbWl0TnVtYmVyID0gdmFsdWUuYmxvY2tzTGltaXROdW1iZXIgfHwgMDtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGVUb0VkaXRvckFmdGVyQmxvY2tBZGRlZCA9IHZhbHVlLm5hdmlnYXRlVG9FZGl0b3JBZnRlckJsb2NrQWRkZWQgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuX2dldEJsb2NrVGl0bGUgPSB2YWx1ZS5nZXRCbG9ja1RpdGxlID8gdmFsdWUuZ2V0QmxvY2tUaXRsZSA6IChibG9ja0tleSkgPT4geyByZXR1cm4gYmxvY2tLZXkgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lZGl0b3JzQnJlYWRDcnVtYiA9IEFycmF5PElFZGl0b3I+KCk7XG5cbiAgICBwcml2YXRlIF9lZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGdldCBlZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRNb2RlO1xuICAgIH1cbiAgICBzZXRFZGl0TW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9lZGl0TW9kZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEVkaXRhYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lZGl0YWJsZVN0YXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgZ2V0IGVkaXRhYmxlU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZVN0YXRlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgdGhlIHNjcmVlbiBzaXplIGNoYW5nZSBldmVudHMuXG4gICAgcHJpdmF0ZSBfc2NyZWVuU2l6ZVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxQZXBTY3JlZW5TaXplVHlwZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBlcFNjcmVlblNpemVUeXBlPihQZXBTY3JlZW5TaXplVHlwZS5YTCk7XG4gICAgZ2V0IHNjcmVlblNpemVDaGFuZ2UkKCk6IE9ic2VydmFibGU8UGVwU2NyZWVuU2l6ZVR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgZGVtb3N0cmF0ZSB0aGUgY29udGFpbmVyIHNpemUgKFVzYWdlIG9ubHkgaW4gZWRpdCBtb2RlKS5cbiAgICBwcml2YXRlIF9zY3JlZW5XaWR0aFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcxMDAlJyk7XG4gICAgZ2V0IHNjcmVlbldpZHRoQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NyZWVuV2lkdGhTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsb2FkIHRoZSBjdXJyZW50IGVkaXRvciAoVXNhZ2Ugb25seSBpbiBlZGl0IG1vZGUpLlxuICAgIHByaXZhdGUgX2VkaXRvclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJRWRpdG9yIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElFZGl0b3IgfCBudWxsPihudWxsKTtcbiAgICBnZXQgZWRpdG9yQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPElFZGl0b3IgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VjdGlvbnMgY29sdW1ucyBkcm9wIGxpc3Qgc3ViamVjdC5cbiAgICBwcml2YXRlIF9zZWN0aW9uc0NvbHVtbnNEcm9wTGlzdFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gICAgZ2V0IHNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWN0aW9uc0NvbHVtbnNEcm9wTGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VjdGlvbnMgc3ViamVjdCAoYSBwYXJlIGZyb20gdGhlIGxheW91dCB2aWV3IG9iamVjdClcbiAgICBwcml2YXRlIF9zZWN0aW9uc1ZpZXdTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFNlY3Rpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQZXBMYXlvdXRTZWN0aW9uW10+KFtdKTtcbiAgICBnZXQgc2VjdGlvbnNDaGFuZ2UkKCk6IE9ic2VydmFibGU8SVBlcExheW91dFNlY3Rpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnNWaWV3U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgLy8gKHByZXZTZWN0aW9ucywgbmV4dFNlY3Rpb25zKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2U2VjdGlvbnMpID09PSBKU09OLnN0cmluZ2lmeShuZXh0U2VjdGlvbnMpKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsYXlvdXQgdmlldyBjaGFuZ2UuXG4gICAgcHJpdmF0ZSBfbGF5b3V0Vmlld1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0VmlldyB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0VmlldyB8IG51bGw+KG51bGwpO1xuICAgIGdldCBsYXlvdXRWaWV3Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPElQZXBMYXlvdXRWaWV3IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShmaWx0ZXIobGF5b3V0ID0+ICEhbGF5b3V0KSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBlZGl0IG1vZGUgd2hlbiBibG9jayBpcyBkcmFnZ2luZyBub3cgb3Igbm90LlxuICAgIHByaXZhdGUgX2RyYWdnaW5nQmxvY2tLZXk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gICAgZ2V0IGRyYWdnaW5nQmxvY2tLZXkoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWdnaW5nQmxvY2tLZXkuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHN1YmplY3QgaXMgZm9yIGVkaXQgbW9kZSB3aGVuIHNlY3Rpb24gaXMgZHJhZ2dpbmcgbm93IG9yIG5vdC5cbiAgICBwcml2YXRlIF9kcmFnZ2luZ1NlY3Rpb25LZXk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gICAgZ2V0IGRyYWdnaW5nU2VjdGlvbktleSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dpbmdTZWN0aW9uS2V5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsb2NrIG9yIHVubG9jayB0aGUgc2NyZWVuIChVc2FnZSBvbmx5IGluIGVkaXQgbW9kZSkuXG4gICAgcHJpdmF0ZSBfbG9ja1NjcmVlblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIGdldCBsb2NrU2NyZWVuQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2tTY3JlZW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBmb3IgY29udHJvbCB0aGUgcHJldmlldyBtb2RlIChmb3IgbG9hZCB0aGUgYmxvY2tzIHdpdGggdGhlIENQSSBldmVudHMpIFxuICAgIHByaXZhdGUgX3ByZXZpZXdNb2RlU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgZ2V0IHByZXZpZXdNb2RlQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpZXdNb2RlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZm9yIGVkaXRvciBtb2RlIGZvciBibG9jayBhZGRlZC5cbiAgICBwcml2YXRlIF9ibG9ja0FkZGVkRXZlbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0QmxvY2tBZGRlZEV2ZW50IHwgbnVsbD4obnVsbCk7XG4gICAgZ2V0IGJsb2NrQWRkZWRFdmVudFN1YmplY3QkKCk6IE9ic2VydmFibGU8SVBlcExheW91dEJsb2NrQWRkZWRFdmVudCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb2NrQWRkZWRFdmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIC8vIFRoaXMgaXMgZm9yIGVkaXRvciBtb2RlIGZvciBibG9ja3MgcmVtb3ZlZC5cbiAgICBwcml2YXRlIF9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICAgIGdldCBibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0JCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3Igc2tlbGV0b24uXG4gICAgcHJpdmF0ZSBfc2hvd1NrZWxldG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICBnZXQgc2hvd1NrZWxldG9uQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dTa2VsZXRvblN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBQZXBEaWFsb2dTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICAvL1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0xBWU9VVF9CVUlMREVSLlNFQ1RJT04nKS5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgc2VjdGlvbiBuYW1lLlxuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFNlY3Rpb25UaXRsZSA9IHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHByaXZhdGUgc2V0RWRpdGFibGVTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5fZWRpdGFibGVTdGF0ZSA9IHRoaXMuZWRpdE1vZGUgJiYgIXRoaXMuX3ByZXZpZXdNb2RlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3VG9VcGRhdGU6IElQZXBMYXlvdXRWaWV3IHwgbnVsbCkge1xuICAgICAgICBpZiAobGF5b3V0Vmlld1RvVXBkYXRlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyhsYXlvdXRWaWV3VG9VcGRhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGxheW91dCBmb3IgdGhlIHZpZXcuXG4gICAgICAgICAgICB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5uZXh0KGxheW91dFZpZXdUb1VwZGF0ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc2VjdGlvbnMgZm9yIHRoZSB2aWV3LlxuICAgICAgICAgICAgdGhpcy5fc2VjdGlvbnNWaWV3U3ViamVjdC5uZXh0KGxheW91dFZpZXdUb1VwZGF0ZT8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5QmxvY2tBZGRlZChibG9ja0FkZGVkRXZlbnREYXRhOiBJUGVwTGF5b3V0QmxvY2tBZGRlZEV2ZW50KSB7XG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IHRoZSBibG9jayBpcyBhZGRlZCAodG8gcmFpc2UgdGhlIGV2ZW50IGZvciB0aGUgY2xpZW50KS5cbiAgICAgICAgdGhpcy5fYmxvY2tBZGRlZEV2ZW50U3ViamVjdC5uZXh0KGJsb2NrQWRkZWRFdmVudERhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5QmxvY2tzUmVtb3ZlZChrZXlzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoa2V5cykge1xuICAgICAgICAgICAgLy8gTm90aWZ5IHRoYXQgdGhlIGJsb2NrcyBhcmUgcmVtb3ZlZCAodG8gcmFpc2UgdGhlIGV2ZW50IGZvciB0aGUgY2xpZW50KS5cbiAgICAgICAgICAgIHRoaXMuX2Jsb2Nrc1JlbW92ZWRFdmVudFN1YmplY3QubmV4dChrZXlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5RWRpdG9yQ2hhbmdlKGVkaXRvcjogSUVkaXRvciB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yU3ViamVjdC5uZXh0KGVkaXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlQcmV2aWV3TW9kZUNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9wcmV2aWV3TW9kZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0RWRpdGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5TG9ja1NjcmVlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9sb2NrU2NyZWVuU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeVNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0Q2hhbmdlKHNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0OiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9zZWN0aW9uc0NvbHVtbnNEcm9wTGlzdFN1YmplY3QubmV4dChzZWN0aW9uc0NvbHVtbnNEcm9wTGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMYXlvdXRFZGl0b3JQcm9wZXJ0aWVzKGxheW91dFZpZXc6IElQZXBMYXlvdXRWaWV3KSB7XG4gICAgICAgIGlmICh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlswXSkge1xuICAgICAgICAgICAgY29uc3QgbGF5b3V0RWRpdG9yOiBJTGF5b3V0RWRpdG9yID0ge1xuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBsYXlvdXRWaWV3Py5MYXlvdXQuTWF4V2lkdGggfHwgMCxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNwYWNpbmc6IGxheW91dFZpZXc/LkxheW91dC5WZXJ0aWNhbFNwYWNpbmcsXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNwYWNpbmc6IGxheW91dFZpZXc/LkxheW91dC5Ib3Jpem9udGFsU3BhY2luZyxcbiAgICAgICAgICAgICAgICBzZWN0aW9uc0dhcDogbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zR2FwLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNHYXA6IGxheW91dFZpZXc/LkxheW91dC5Db2x1bW5zR2FwLFxuICAgICAgICAgICAgICAgIC8vIHJvdW5kZWRDb3JuZXJzOiBsYXlvdXRWaWV3Py5MYXlvdXQuUm91bmRlZENvcm5lcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX2VkaXRvcnNCcmVhZENydW1iWzBdLmhvc3RPYmplY3QgPSBsYXlvdXRFZGl0b3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWREZWZhdWx0RWRpdG9yKGxheW91dFZpZXc6IElQZXBMYXlvdXRWaWV3KSB7XG4gICAgICAgIHRoaXMuX2VkaXRvcnNCcmVhZENydW1iID0gbmV3IEFycmF5PElFZGl0b3I+KCk7XG5cbiAgICAgICAgaWYgKGxheW91dFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmdldCgnTEFZT1VUX0JVSUxERVIuREVGQVVMVF9USVRMRScpLnN1YnNjcmliZSgodGl0bGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvcnNCcmVhZENydW1iLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpZDogTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZS5NQUlOX0VESVRPUl9JRCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICdsYXlvdXQtYnVpbGRlcicsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaG9zdE9iamVjdDoge30gLy8gVXBkYXRlcyBpbiB1cGRhdGVMYXlvdXRFZGl0b3JQcm9wZXJ0aWVzIGZ1bmN0aW9uIGFib3ZlLlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXRFZGl0b3JQcm9wZXJ0aWVzKGxheW91dFZpZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5RWRpdG9yQ2hhbmdlKHRoaXMuX2VkaXRvcnNCcmVhZENydW1iWzBdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlFZGl0b3JDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUN1cnJlbnRFZGl0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUVkaXRvckNoYW5nZSh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlt0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5sZW5ndGggLSAxXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVkaXRvckJ5VHlwZShlZGl0b3JUeXBlOiBQZXBMYXlvdXRFZGl0b3JUeXBlLCBpZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gJycpOiBJRWRpdG9yIHwgbnVsbCB7XG4gICAgICAgIC8vIEJ1aWxkIGVkaXRvciBvYmplY3QuXG4gICAgICAgIGxldCBlZGl0b3I6IElFZGl0b3IgfCBudWxsID0gbnVsbDtcblxuICAgICAgICBpZiAoZWRpdG9yVHlwZSA9PT0gJ3NlY3Rpb24nKSB7XG4gICAgICAgICAgICBlZGl0b3IgPSB0aGlzLmdldFNlY3Rpb25FZGl0b3IoaWQsIHRpdGxlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlZGl0b3JUeXBlID09PSAnYmxvY2snKSB7XG4gICAgICAgICAgICBlZGl0b3IgPSB0aGlzLmdldEJsb2NrRWRpdG9yKGlkLCB0aXRsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmxvY2tFZGl0b3IoYmxvY2tLZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IElFZGl0b3Ige1xuICAgICAgICAvLyBHZXQgYmxvY2sgZWRpdG9yIHRpdGxlLlxuICAgICAgICBjb25zdCBibG9ja1RpdGxlID0gdGl0bGUgfHwgdGhpcy5nZXRCbG9ja1RpdGxlKGJsb2NrS2V5KTsgXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBibG9ja0tleSxcbiAgICAgICAgICAgIHR5cGU6ICdibG9jaycsXG4gICAgICAgICAgICB0aXRsZTogYmxvY2tUaXRsZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWN0aW9uRWRpdG9yVGl0bGUoc2VjdGlvbjogSVBlcExheW91dFNlY3Rpb24sIHNlY3Rpb25JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHNlY3Rpb24uTmFtZSB8fCBgJHt0aGlzLl9kZWZhdWx0U2VjdGlvblRpdGxlfSAke3NlY3Rpb25JbmRleCArIDF9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlY3Rpb25FZGl0b3Ioc2VjdGlvbklkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBJRWRpdG9yIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25JZCk7XG5cbiAgICAgICAgaWYgKHNlY3Rpb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBsZXQgc2VjdGlvbiA9IHNlY3Rpb25zW3NlY3Rpb25JbmRleF07XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uRWRpdG9yOiBJTGF5b3V0U2VjdGlvbkVkaXRvciA9IHtcbiAgICAgICAgICAgICAgICBpZDogc2VjdGlvbi5LZXksXG4gICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6IHNlY3Rpb24uTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICBzcGxpdDogc2VjdGlvbi5TcGxpdCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzZWN0aW9uLkhlaWdodCB8fCAwLFxuICAgICAgICAgICAgICAgIGNvbGxhcHNlT25UYWJsZXQ6IHNlY3Rpb24uQ29sbGFwc2VPblRhYmxldCA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWxsSGVpZ2h0OiBzZWN0aW9uLkZpbGxIZWlnaHQgPz8gZmFsc2VcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogc2VjdGlvbklkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgdGhpcy5nZXRTZWN0aW9uRWRpdG9yVGl0bGUoc2VjdGlvbiwgc2VjdGlvbkluZGV4KSxcbiAgICAgICAgICAgICAgICBob3N0T2JqZWN0OiBzZWN0aW9uRWRpdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3Ioc2VjdGlvbkNvbHVtbklkOiBzdHJpbmcpOiBJUGVwTGF5b3V0U2VjdGlvbkNvbHVtbiB8IG51bGwge1xuICAgICAgICBsZXQgY3VycmVudENvbHVtbiA9IG51bGw7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBzZWN0aW9uIGFuZCBjb2x1bW4gYXJyYXkgYnkgdGhlIHBhdHRlcm4gb2YgdGhlIHNlY3Rpb24gY29sdW1uIGtleS5cbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvbHVtblBhdHRlcm5TZXBhcmF0b3IgPSB0aGlzLmdldFNlY3Rpb25Db2x1bW5LZXkoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvbHVtbkFyciA9IHNlY3Rpb25Db2x1bW5JZC5zcGxpdChzZWN0aW9uQ29sdW1uUGF0dGVyblNlcGFyYXRvcik7XG5cbiAgICAgICAgaWYgKHNlY3Rpb25Db2x1bW5BcnIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHNlY3Rpb24gaWQgdG8gZ2V0IHRoZSBzZWN0aW9uIGluZGV4LlxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbklkID0gc2VjdGlvbkNvbHVtbkFyclswXTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBjb2x1bW4gaW5kZXguXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHNlY3Rpb25Db2x1bW5BcnJbMV0sIC0xKTtcbiAgICAgICAgICAgIGlmIChzZWN0aW9uSW5kZXggPj0gMCAmJiBjb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudENvbHVtbiA9IHNlY3Rpb25zW3NlY3Rpb25JbmRleF0uQ29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudENvbHVtbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc1NjcmVlbldpZGgoc2NyZWVuVHlwZTogRGF0YVZpZXdTY3JlZW5TaXplKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdpZHRoVG9TZXQgPSAnMTAwJSc7XG5cbiAgICAgICAgaWYgKHNjcmVlblR5cGUgPT09ICdUYWJsZXQnKSB7XG4gICAgICAgICAgICB3aWR0aFRvU2V0ID0gJzcyMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuVHlwZSA9PT0gJ1BoYWJsZXQnKSB7XG4gICAgICAgICAgICB3aWR0aFRvU2V0ID0gJzM2MCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2lkdGhUb1NldDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2Nrc051bWJlcigpOiBudW1iZXIge1xuICAgICAgICBsZXQgYmxvY2tzTnVtYmVyID0gMDtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpPy5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNlY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2luZGV4XTtcbiAgICAgICAgXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgc2VjdGlvbi5Db2x1bW5zLmxlbmd0aDsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHNlY3Rpb24uQ29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5CbG9ja0NvbnRhaW5lciAmJiBjb2x1bW4uQmxvY2tDb250YWluZXIuQmxvY2tLZXk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzTnVtYmVyKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJsb2Nrc051bWJlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvck9uRHJhZ1N0YXJ0KCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2luaGVyaXRDdXJzb3JzJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvck9uRHJhZ0VuZCgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdpbmhlcml0Q3Vyc29ycycpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICd1bnNldCc7XG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpYyBmdW5jdGlvbnNcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBnZXRCbG9ja1RpdGxlKGJsb2NrS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QmxvY2tUaXRsZShibG9ja0tleSkgfHwgYmxvY2tLZXk7XG4gICAgfVxuXG4gICAgc2V0U2VjdGlvbnNDb2x1bW5zRHJvcExpc3RDaGFuZ2Uoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3Q6IGFueVtdKSB7XG4gICAgICAgIHRoaXMubm90aWZ5U2VjdGlvbnNDb2x1bW5zRHJvcExpc3RDaGFuZ2Uoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3QpO1xuICAgIH1cblxuICAgIGNoYW5nZVByZXZpZXdNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UHJldmlld01vZGVDaGFuZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRTY3JlZW5UeXBlKCk6IERhdGFWaWV3U2NyZWVuU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjcmVlblR5cGUodGhpcy5fc2NyZWVuU2l6ZVN1YmplY3QuZ2V0VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgZ2V0U2NyZWVuVHlwZShzaXplOiBQZXBTY3JlZW5TaXplVHlwZSk6IERhdGFWaWV3U2NyZWVuU2l6ZSB7XG4gICAgICAgIGNvbnN0IHNjcmVlblR5cGU6IERhdGFWaWV3U2NyZWVuU2l6ZSA9XG4gICAgICAgICAgICBzaXplIDwgUGVwU2NyZWVuU2l6ZVR5cGUuTUQgPyAnTGFuZHNjYXBlJyA6XG4gICAgICAgICAgICAoc2l6ZSA9PT0gUGVwU2NyZWVuU2l6ZVR5cGUuTUQgfHwgc2l6ZSA9PT0gUGVwU2NyZWVuU2l6ZVR5cGUuU00gPyAnVGFibGV0JyA6ICdQaGFibGV0Jyk7XG5cbiAgICAgICAgcmV0dXJuIHNjcmVlblR5cGU7XG4gICAgfVxuXG4gICAgZ2V0U2VjdGlvbkNvbHVtbktleShzZWN0aW9uS2V5OiBzdHJpbmcgPSAnJywgaW5kZXg6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIHJldHVybiBgJHtzZWN0aW9uS2V5fV9jb2x1bW5fJHtpbmRleH1gO1xuICAgIH1cblxuICAgIGdldElzSGlkZGVuKGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10gfCB1bmRlZmluZWQsIGN1cnJlbnRTY3JlZW5UeXBlOiBEYXRhVmlld1NjcmVlblNpemUpIHtcbiAgICAgICAgcmV0dXJuIChoaWRlSW4gJiYgaGlkZUluPy5sZW5ndGggPiAwKSA/IGhpZGVJbi5zb21lKGhpID0+IGhpID09PSBjdXJyZW50U2NyZWVuVHlwZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvRWRpdG9yKGVkaXRvclR5cGU6IFBlcExheW91dEVkaXRvclR5cGUsIGlkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSAnJyk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENhbm5vdCBuYXZpZ2F0ZSBpbnRvICdsYXlvdXQtYnVpbGRlcicgYmVjYXVzZSB0aGlzIGlzIGZpcnN0IGFuZCBjb25zdCBpbiB0aGUgZWRpdG9yc0JyZWFkQ3J1bWJzLlxuICAgICAgICBpZiAoZWRpdG9yVHlwZSAhPT0gJ2xheW91dC1idWlsZGVyJyAmJiBpZD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgd2hpY2ggZWRpdG9yIHdlIGhhdmUgbm93XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdG9yID0gdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWJbdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgIC8vIE9ubHkgaWYgaXQncyBhbm90aGVyIGVkaXRvci5cbiAgICAgICAgICAgIGlmKGN1cnJlbnRFZGl0b3IuaWQgIT09IGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFZGl0b3IudHlwZSAhPT0gJ2xheW91dC1idWlsZGVyJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgcG9wIHRoZSBsYXN0IGFuZCBpbnNlcnQgdGhlIGN1cnJlbnQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvcnNCcmVhZENydW1iLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvckJ5VHlwZShlZGl0b3JUeXBlLCBpZCwgdGl0bGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wdXNoKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3VycmVudEVkaXRvcigpO1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVCYWNrRnJvbUVkaXRvcigpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgbGF5b3V0IGJ1aWxkZXIgZWRpdG9yLlxuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gTWF5YmUgd2Ugd2FudCB0byBjb21wYXJlIHRoZSBsYXN0IGVkaXRvciBmb3IgdmFsaWRhdGlvbiA/XG4gICAgICAgICAgICBjb25zdCBsYXN0RWRpdG9yID0gdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIucG9wKCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnJlbnRFZGl0b3IoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUxheW91dEZyb21FZGl0b3IoZWRpdG9yRGF0YTogSUxheW91dEVkaXRvcikge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcblxuICAgICAgICBpZiAobGF5b3V0Vmlldykge1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuTWF4V2lkdGggPSBlZGl0b3JEYXRhLm1heFdpZHRoO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuSG9yaXpvbnRhbFNwYWNpbmcgPSBlZGl0b3JEYXRhLmhvcml6b250YWxTcGFjaW5nO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuVmVydGljYWxTcGFjaW5nID0gZWRpdG9yRGF0YS52ZXJ0aWNhbFNwYWNpbmc7XG4gICAgICAgICAgICBsYXlvdXRWaWV3LkxheW91dC5TZWN0aW9uc0dhcCA9IGVkaXRvckRhdGEuc2VjdGlvbnNHYXA7XG4gICAgICAgICAgICBsYXlvdXRWaWV3LkxheW91dC5Db2x1bW5zR2FwID0gZWRpdG9yRGF0YS5jb2x1bW5zR2FwO1xuICAgICAgICAgICAgLy8gbGF5b3V0Vmlldy5MYXlvdXQuUm91bmRlZENvcm5lcnMgPSBlZGl0b3JEYXRhLnJvdW5kZWRDb3JuZXJzO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdXBkYXRlU2VjdGlvbkZyb21FZGl0b3Ioc2VjdGlvbkRhdGE6IElMYXlvdXRTZWN0aW9uRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25EYXRhLmlkKTtcblxuICAgICAgICAvLyBVcGRhdGUgc2VjdGlvbiBkZXRhaWxzLlxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2Nrc0lkc1RvUmVtb3ZlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLk5hbWUgPSBzZWN0aW9uRGF0YS5zZWN0aW9uTmFtZTtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLlNwbGl0ID0gc2VjdGlvbkRhdGEuc3BsaXQ7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5IZWlnaHQgPSBzZWN0aW9uRGF0YS5oZWlnaHQ7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5Db2xsYXBzZU9uVGFibGV0ID0gc2VjdGlvbkRhdGEuY29sbGFwc2VPblRhYmxldDtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLkZpbGxIZWlnaHQgPSBzZWN0aW9uRGF0YS5maWxsSGVpZ2h0O1xuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIG5ldyBjb2x1bW5zIG51bWJlciBmcm9tIGN1cnJlbnRTZWN0aW9uLlNwbGl0LCBpZiBpdHMgdW5kZWZpbmVkIHB1dCBhIGRlZmF1bHQgMS5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnNMZW5ndGggPSBjdXJyZW50U2VjdGlvbi5TcGxpdD8uc3BsaXQoJyAnKS5sZW5ndGggfHwgMTtcbiAgICAgICAgICAgIGlmIChuZXdDb2x1bW5zTGVuZ3RoID4gY3VycmVudFNlY3Rpb24uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAobmV3Q29sdW1uc0xlbmd0aCA+IGN1cnJlbnRTZWN0aW9uLkNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLkNvbHVtbnMucHVzaCh7fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdDb2x1bW5zTGVuZ3RoIDwgY3VycmVudFNlY3Rpb24uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAobmV3Q29sdW1uc0xlbmd0aCA8IGN1cnJlbnRTZWN0aW9uLkNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVubSA9IGN1cnJlbnRTZWN0aW9uLkNvbHVtbnMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGJsb2NrIGluIHRoaXMgY29sdW1uIGRlbGV0ZSBpdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVubSAmJiBjb2x1bm0uQmxvY2tDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrc0lkc1RvUmVtb3ZlLnB1c2goY29sdW5tLkJsb2NrQ29udGFpbmVyLkJsb2NrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIGVkaXRvciB0aXRsZVxuICAgICAgICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuX2VkaXRvclN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RWRpdG9yICYmIGN1cnJlbnRFZGl0b3IudHlwZSA9PT0gJ3NlY3Rpb24nICYmIGN1cnJlbnRFZGl0b3IuaWQgPT09IGN1cnJlbnRTZWN0aW9uLktleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRTZWN0aW9uRWRpdG9yVGl0bGUoY3VycmVudFNlY3Rpb24sIHNlY3Rpb25JbmRleCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVkaXRvci50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5RWRpdG9yQ2hhbmdlKGN1cnJlbnRFZGl0b3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgc2VjdGlvbnMgY2hhbmdlLlxuICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYmxvY2tzIHRvIHJlbW92ZSwgbm90aWZ5IHRoZSBibG9ja3MgcmVtb3ZlZC5cbiAgICAgICAgICAgIGlmIChibG9ja3NJZHNUb1JlbW92ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlCbG9ja3NSZW1vdmVkKGJsb2Nrc0lkc1RvUmVtb3ZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFNlY3Rpb24oc2VjdGlvbjogSVBlcExheW91dFNlY3Rpb24gfCBudWxsID0gbnVsbCkge1xuICAgICAgICAvLyBDcmVhdGUgbmV3IHNlY3Rpb25cbiAgICAgICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICAgICAgICBzZWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIEtleTogUGVwR3VpZC5uZXdHdWlkKCksXG4gICAgICAgICAgICAgICAgQ29sdW1uczogW3t9XSwgLy8gQWRkIGVtcHR5IHNlY3Rpb24gY29sdW1uXG4gICAgICAgICAgICAgICAgSGlkZTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCB0aGUgbmV3IHNlY3Rpb24gdG8gbGF5b3V0IHZpZXcuXG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgc2VjdGlvbnMucHVzaChzZWN0aW9uKTtcbiAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgIH1cblxuICAgIHJlbW92ZVNlY3Rpb24oc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBibG9ja3MgaWQncyB0byByZW1vdmUuXG4gICAgICAgICAgICBjb25zdCBibG9ja3NJZHNUb1JlbW92ZTogYW55ID0gc2VjdGlvbnNbaW5kZXhdLkNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4/LkJsb2NrQ29udGFpbmVyPy5CbG9ja0tleSk7XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSBzZWN0aW9uLlxuICAgICAgICAgICAgc2VjdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGJsb2NrcyB0byByZW1vdmUsIG5vdGlmeSB0aGUgYmxvY2tzIHJlbW92ZWQuXG4gICAgICAgICAgICBpZiAoYmxvY2tzSWRzVG9SZW1vdmUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5QmxvY2tzUmVtb3ZlZChibG9ja3NJZHNUb1JlbW92ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVTZWN0aW9uKHNlY3Rpb25JZDogc3RyaW5nLCBoaWRlSW46IERhdGFWaWV3U2NyZWVuU2l6ZVtdKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzZWN0aW9ucy5maW5kSW5kZXgoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHNlY3Rpb25zW2luZGV4XS5IaWRlID0gaGlkZUluO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWN0aW9uRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHNlY3Rpb25zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgfVxuXG4gICAgb25TZWN0aW9uRHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3JPbkRyYWdTdGFydCgpO1xuICAgICAgICB0aGlzLl9kcmFnZ2luZ1NlY3Rpb25LZXkubmV4dChldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgfVxuXG4gICAgb25TZWN0aW9uRHJhZ0VuZChldmVudDogQ2RrRHJhZ0VuZCkge1xuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvck9uRHJhZ0VuZCgpO1xuICAgICAgICB0aGlzLl9kcmFnZ2luZ1NlY3Rpb25LZXkubmV4dCgnJyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQmxvY2tGcm9tU2VjdGlvbihibG9ja0lkOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGJsb2NrUmVtb3ZlZCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgYmxvY2sgZnJvbSBzZWN0aW9uIGNvbHVtbi5cbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgc2VjdGlvbkluZGV4ID0gMDsgc2VjdGlvbkluZGV4IDwgc2VjdGlvbnMubGVuZ3RoOyBzZWN0aW9uSW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYmxvY2sgY29udGFpbmVyLlxuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5kZXggPSBzZWN0aW9uLkNvbHVtbnMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uQmxvY2tDb250YWluZXI/LkJsb2NrS2V5ID09PSBibG9ja0lkKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlY3Rpb24uQ29sdW1uc1tjb2x1bW5JbmRleF0uQmxvY2tDb250YWluZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuICAgICAgICAgICAgICAgIGJsb2NrUmVtb3ZlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBibG9jayB3YXMgcmVtb3ZlZCwgbm90aWZ5IHRoZSBibG9jayByZW1vdmVkLlxuICAgICAgICBpZiAoYmxvY2tSZW1vdmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUJsb2Nrc1JlbW92ZWQoW2Jsb2NrSWRdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVCbG9jayhzZWN0aW9uSWQ6IHN0cmluZywgYmxvY2tJZDogc3RyaW5nLCBoaWRlSW46IERhdGFWaWV3U2NyZWVuU2l6ZVtdKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25JZCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHNlY3Rpb25zW2luZGV4XS5Db2x1bW5zLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLkJsb2NrQ29udGFpbmVyPy5CbG9ja0tleSA9PT0gYmxvY2tJZCk7XG4gICAgICAgICAgICBpZiAoY29sdW1uSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQ29udGFpbmVyID0gc2VjdGlvbnNbaW5kZXhdLkNvbHVtbnNbY29sdW1uSW5kZXhdLkJsb2NrQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgIGlmIChibG9ja0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICBibG9ja0NvbnRhaW5lci5IaWRlID0gaGlkZUluO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CbG9ja0Ryb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPElQZXBMYXlvdXRTZWN0aW9uQ29sdW1uLCBhbnksIGFueT4sIHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuXG4gICAgICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZCA9PT0gTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZS5BVkFJTEFCTEVfQkxPQ0tTX0NPTlRBSU5FUl9JRCkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgaWYgYmxvY2tzIG51bWJlciBhbGxvdy5cbiAgICAgICAgICAgIGlmICh0aGlzLl9ibG9ja3NMaW1pdE51bWJlciA+IDAgJiYgdGhpcy5nZXRCbG9ja3NOdW1iZXIoKSA+PSB0aGlzLl9ibG9ja3NMaW1pdE51bWJlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgUGVwRGlhbG9nRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdNRVNTQUdFUy5ESUFMT0dfTk9USUNFX1RJVExFJyksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0xBWU9VVF9CVUlMREVSLkJMT0NLU19DT1VOVF9MSU1JVF9NRVNTQUdFJyksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkRlZmF1bHREaWFsb2coZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYmxvY2sgcmVsYXRpb24gKHByZXZpb3VzQ29udGFpbmVyLmRhdGEgaXMgSVBlcERyYWdnYWJsZUl0ZW0gYW5kIGluc2lkZSB3ZSBoYXZlIEF2YWlsYWJsZUJsb2NrIG9iamVjdCkuXG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlSXRlbTogSVBlcERyYWdnYWJsZUl0ZW0gPSBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhW2V2ZW50LnByZXZpb3VzSW5kZXhdIGFzIElQZXBEcmFnZ2FibGVJdGVtO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRyYWdnYWJsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9jayB0aGUgc2NyZWVuIHVudGlsbCB0aGUgZWRpdG9yIHdpbGwgYmUgbG9hZGVkLlxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl9sb2NrU2NyZWVuU3ViamVjdC5uZXh0KHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY29sdW1uLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gdGhpcy5nZXRTZWN0aW9uQ29sdW1uQnlJZEZvckVkaXRvcihldmVudC5jb250YWluZXIuaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgYmxvY2sga2V5IGluIHRoZSBzZWN0aW9uIGJsb2NrIG9ubHkgaWYgdGhlcmUgaXMgYSBibGFuayBjb2x1bW4uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uICYmICFjdXJyZW50Q29sdW1uLkJsb2NrQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgYmxvY2sgdXVpZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrS2V5ID0gUGVwR3VpZC5uZXdHdWlkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb2x1bW4uQmxvY2tDb250YWluZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tLZXk6IGJsb2NrS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSB1cGRhdGUgdGhlIGxheW91dCB2aWV3IGNhdXNlIHRoZSBsYXlvdXQgaXMgdXBkYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFpc2UgYmxvY2sgYWRkZWQgZXZlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0FkZGVkRXZlbnREYXRhOiBJUGVwTGF5b3V0QmxvY2tBZGRlZEV2ZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrS2V5OiBibG9ja0tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmFnZ2FibGVJdGVtOiBkcmFnZ2FibGVJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUJsb2NrQWRkZWQoYmxvY2tBZGRlZEV2ZW50RGF0YSk7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX25hdmlnYXRlVG9FZGl0b3JBZnRlckJsb2NrQWRkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgYmxvY2sgZWRpdG9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0VkaXRvcignYmxvY2snLCBibG9ja0tleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImRyYWdnYWJsZUl0ZW0gaXMgbm90IGEgSVBlcERyYWdnYWJsZUl0ZW0gdHlwZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYmxvY2sgbW92ZWQgYmV0d2VlbiBjb2x1bW5zIGluIHRoZSBzYW1lIHNlY3Rpb24gb3IgYmV0d2VlbiBkaWZmZXJlbnQgc2VjdGlvbnMgYnV0IG5vdCBpbiB0aGUgc2FtZSBjb2x1bW4uXG4gICAgICAgICAgICBpZiAoZXZlbnQuY29udGFpbmVyLmlkICE9PSBldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZCkge1xuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY29sdW1uLlxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmdldFNlY3Rpb25Db2x1bW5CeUlkRm9yRWRpdG9yKGV2ZW50LmNvbnRhaW5lci5pZCk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBwcmV2aW91cyBjb2x1bW4uXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldml1b3NDb2x1bW4gPSB0aGlzLmdldFNlY3Rpb25Db2x1bW5CeUlkRm9yRWRpdG9yKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uICYmIHByZXZpdW9zQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb2x1bW4uQmxvY2tDb250YWluZXIgPSBwcmV2aXVvc0NvbHVtbi5CbG9ja0NvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHByZXZpdW9zQ29sdW1uLkJsb2NrQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CbG9ja0RyYWdTdGFydChldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yT25EcmFnU3RhcnQoKTtcbiAgICAgICAgLy8gVGFrZSB0aGUgYmxvY2sga2V5IGlmIGV4aXN0LCBlbHNlIHRha2UgdGhlIGF2YWlsYWJsZSBibG9jayBrZXkgKHJlbGF0aW9uIGtleSkuXG4gICAgICAgIGNvbnN0IGJsb2NrS2V5ID0gZXZlbnQuc291cmNlLmRhdGE/LkJsb2NrS2V5IHx8IGV2ZW50LnNvdXJjZS5kYXRhPy5LZXk7XG4gICAgICAgIHRoaXMuX2RyYWdnaW5nQmxvY2tLZXkubmV4dChibG9ja0tleSk7XG4gICAgfVxuXG4gICAgb25CbG9ja0RyYWdFbmQoZXZlbnQ6IENka0RyYWdFbmQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3JPbkRyYWdFbmQoKTtcbiAgICAgICAgdGhpcy5fZHJhZ2dpbmdCbG9ja0tleS5uZXh0KCcnKTtcbiAgICB9XG4gICAgXG4gICAgZG9lc0NvbHVtbkNvbnRhaW5CbG9jayhzZWN0aW9uSWQ6IHN0cmluZywgY29sdW1uSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9uID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zLmZpbmQoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcblxuICAgICAgICBpZiAoc2VjdGlvbiAmJiBjb2x1bW5JbmRleCA+PSAwICYmIHNlY3Rpb24uQ29sdW1ucy5sZW5ndGggPiBjb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgcmVzID0gISFzZWN0aW9uLkNvbHVtbnNbY29sdW1uSW5kZXhdLkJsb2NrQ29udGFpbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBzZXRTY3JlZW5XaWR0aChzY3JlZW5UeXBlOiBEYXRhVmlld1NjcmVlblNpemUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldENzc1NjcmVlbldpZGgoc2NyZWVuVHlwZSlcblxuICAgICAgICBsZXQgd2lkdGggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgMCk7XG4gICAgICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2NyZWVuV2lkdGhTdWJqZWN0Lm5leHQoJzEwMCUnKTtcbiAgICAgICAgICAgIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0Lm5leHQoUGVwU2NyZWVuU2l6ZVR5cGUuWEwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2NyZWVuV2lkdGhTdWJqZWN0Lm5leHQoYCR7d2lkdGh9cHhgKTtcblxuICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBzaXplIGFjY29yZGluZyB0aGUgd2lkdGguXG4gICAgICAgICAgICBpZiAod2lkdGggPj0gMTkyMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0Lm5leHQoUGVwU2NyZWVuU2l6ZVR5cGUuWEwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA+PSAxMjgwICYmIHdpZHRoIDwgMTkyMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0Lm5leHQoUGVwU2NyZWVuU2l6ZVR5cGUuTEcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA+PSA5NjAgJiYgd2lkdGggPCAxMjgwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2NyZWVuU2l6ZVN1YmplY3QubmV4dChQZXBTY3JlZW5TaXplVHlwZS5NRCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID49IDYwMCAmJiB3aWR0aCA8IDk2MCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0Lm5leHQoUGVwU2NyZWVuU2l6ZVR5cGUuU00pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0Lm5leHQoUGVwU2NyZWVuU2l6ZVR5cGUuWFMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd1NrZWxldG9uKHNob3c6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd1NrZWxldG9uU3ViamVjdC5uZXh0KHNob3cpO1xuICAgIH1cbiAgICBcbiAgICBsb2NrU2NyZWVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubm90aWZ5TG9ja1NjcmVlbih2YWx1ZSk7XG4gICAgfVxuXG4gICAgbG9hZExheW91dEJ1aWxkZXIobGF5b3V0VmlldzogSVBlcExheW91dFZpZXcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBsYXlvdXQgZWRpdG9yLlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRFZGl0b3IobGF5b3V0Vmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2FkIG9ubHkgdGhlIGxheW91dCB2aWV3LlxuICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgfVxufVxuIl19
|