@pepperi-addons/ngx-lib 0.4.2-beta.14 → 0.4.2-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/bread-crumbs/bread-crumbs.component.mjs +3 -3
- package/esm2020/form/internal-list.component.mjs +3 -3
- package/esm2020/list/list.component.mjs +3 -3
- package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +3 -3
- package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +3 -3
- package/esm2020/top-bar/top-bar.component.mjs +3 -3
- package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +4 -4
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +4 -4
- package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
- package/package.json +1 -1
- package/src/core/style/base/typography.scss +15 -63
|
@@ -66,11 +66,11 @@ export class PepBreadCrumbsComponent {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
PepBreadCrumbsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepBreadCrumbsComponent, deps: [{ token: i1.PepLayoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
69
|
-
PepBreadCrumbsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: { items: "items", displayType: "displayType", addSpacing: "addSpacing" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\"> {{ charSeparator }} </span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-
|
|
69
|
+
PepBreadCrumbsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: { items: "items", displayType: "displayType", addSpacing: "addSpacing" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\"> {{ charSeparator }} </span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-md ellipsis current color-main\" title=\"{{ items[items.length - 1]?.text }}\">\n <span>{{ items[items.length - 1]?.text }}</span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemsTemplate>\n <ul *ngIf=\"items?.length > 0\" class=\"bread-crumbs-items body-sm ellipsis\">\n <ng-container *ngIf=\"shrinkItems; then shrinkTemplate; else regularTemplate\">\n </ng-container>\n\n <ng-template #shrinkTemplate>\n <li>\n <a class=\"color-link\" [matMenuTriggerFor]=\"menu\" href=\"javascript:void(0)\">...</a>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let menuItem of items; let isLast = last\">\n <button mat-menu-item *ngIf=\"!isLast\" (click)=\"onBreadCrumbItemClick(menuItem)\"\n [title]=\"menuItem.title || menuItem.text\" [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ disabled: menuItem.disabled }\">\n <span>\n {{ menuItem.text }}\n </span>\n </button>\n </ng-container>\n </mat-menu>\n </li>\n <li>\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n <li>\n <span [title]=\"items[items.length - 1]?.title || items[items.length - 1]?.text\">\n {{ items[items.length - 1]?.text }}\n </span>\n </li>\n </ng-template>\n <ng-template #regularTemplate>\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <li>\n <a *ngIf=\"!item.disabled\" [title]=\"item.title || item.text\" href=\"javascript:void(0)\"\n class=\" color-link\" (click)=\"onBreadCrumbItemClick(item)\">{{ item.text }}</a>\n <span *ngIf=\"item.disabled\" [title]=\"item.title || item.text\">{{ item.text }}</span>\n </li>\n <li *ngIf=\"!isLast\">\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n </ng-container>\n </ng-template>\n </ul>\n</ng-template>", styles: [":host{display:grid}.bread-crumbs-label{height:calc(var(--pep-top-bar-spacing-bottom, .5rem) + var(--pep-top-bar-field-height, 2.5rem));display:flex;flex-flow:wrap;align-items:center}ul.bread-crumbs-items{padding:0;margin:0;list-style-type:none;display:flex;align-items:center}ul.bread-crumbs-items li{display:inline-flex}ul.bread-crumbs-items li .separator{height:1rem;width:1rem}ul.bread-crumbs-items li a{text-decoration:unset}\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: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }] });
|
|
70
70
|
PepBreadCrumbsComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepBreadCrumbsComponent });
|
|
71
71
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepBreadCrumbsComponent, decorators: [{
|
|
72
72
|
type: Component,
|
|
73
|
-
args: [{ selector: 'pep-bread-crumbs', template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\"> {{ charSeparator }} </span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-
|
|
73
|
+
args: [{ selector: 'pep-bread-crumbs', template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\"> {{ charSeparator }} </span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-md ellipsis current color-main\" title=\"{{ items[items.length - 1]?.text }}\">\n <span>{{ items[items.length - 1]?.text }}</span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemsTemplate>\n <ul *ngIf=\"items?.length > 0\" class=\"bread-crumbs-items body-sm ellipsis\">\n <ng-container *ngIf=\"shrinkItems; then shrinkTemplate; else regularTemplate\">\n </ng-container>\n\n <ng-template #shrinkTemplate>\n <li>\n <a class=\"color-link\" [matMenuTriggerFor]=\"menu\" href=\"javascript:void(0)\">...</a>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let menuItem of items; let isLast = last\">\n <button mat-menu-item *ngIf=\"!isLast\" (click)=\"onBreadCrumbItemClick(menuItem)\"\n [title]=\"menuItem.title || menuItem.text\" [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ disabled: menuItem.disabled }\">\n <span>\n {{ menuItem.text }}\n </span>\n </button>\n </ng-container>\n </mat-menu>\n </li>\n <li>\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n <li>\n <span [title]=\"items[items.length - 1]?.title || items[items.length - 1]?.text\">\n {{ items[items.length - 1]?.text }}\n </span>\n </li>\n </ng-template>\n <ng-template #regularTemplate>\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <li>\n <a *ngIf=\"!item.disabled\" [title]=\"item.title || item.text\" href=\"javascript:void(0)\"\n class=\" color-link\" (click)=\"onBreadCrumbItemClick(item)\">{{ item.text }}</a>\n <span *ngIf=\"item.disabled\" [title]=\"item.title || item.text\">{{ item.text }}</span>\n </li>\n <li *ngIf=\"!isLast\">\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n </ng-container>\n </ng-template>\n </ul>\n</ng-template>", styles: [":host{display:grid}.bread-crumbs-label{height:calc(var(--pep-top-bar-spacing-bottom, .5rem) + var(--pep-top-bar-field-height, 2.5rem));display:flex;flex-flow:wrap;align-items:center}ul.bread-crumbs-items{padding:0;margin:0;list-style-type:none;display:flex;align-items:center}ul.bread-crumbs-items li{display:inline-flex}ul.bread-crumbs-items li .separator{height:1rem;width:1rem}ul.bread-crumbs-items li a{text-decoration:unset}\n"] }]
|
|
74
74
|
}, {
|
|
75
75
|
type: Injectable
|
|
76
76
|
}], ctorParameters: function () { return [{ type: i1.PepLayoutService }]; }, propDecorators: { items: [{
|
|
@@ -82,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
82
82
|
}], itemClick: [{
|
|
83
83
|
type: Output
|
|
84
84
|
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2JyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBRUwsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlFLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ3BCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFPdEMsTUFBTSxPQUFPLHVCQUF1QjtJQStCaEMsWUFBb0IsYUFBK0I7UUFBL0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBOUIzQyxXQUFNLEdBQTZCLEVBQUUsQ0FBQztRQVV0QyxpQkFBWSxHQUE4QixPQUFPLENBQUM7UUFVakQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUc1QixjQUFTLEdBQStDLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBRXpHLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQVcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBR21DLENBQUM7SUE3QnhELElBQ0ksS0FBSyxDQUFDLEtBQStCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUdELElBQ0ksV0FBVyxDQUFDLEtBQWdDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQWNELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNwRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDWCxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztxQkFDcEM7b0JBRUQsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUN4QzthQUNKO1NBQ0o7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBdUI7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOztvSEF2RVEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsK0tDeEJwQywrckdBaUVjO3dIRHpDRCx1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxrQkFBa0I7O2tCQUkvQixVQUFVO3VHQUlILEtBQUs7c0JBRFIsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBU0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTixTQUFTO3NCQURSLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBlcExheW91dFNlcnZpY2UsIFBlcFNjcmVlblNpemVUeXBlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHtcbiAgICBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50LFxuICAgIFBlcEJyZWFkQ3J1bWJJdGVtLFxuICAgIFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUsXG59IGZyb20gJy4vYnJlYWQtY3J1bWJzLm1vZGVsJztcbmltcG9ydCB7XG4gICAgcGVwSWNvbkFycm93TGVmdCxcbiAgICBwZXBJY29uQXJyb3dSaWdodCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvaWNvbic7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1icmVhZC1jcnVtYnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JyZWFkLWNydW1icy5jb21wb25lbnQuc2NzcycsICcuL2JyZWFkLWNydW1icy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXBCcmVhZENydW1ic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfaXRlbXM6IEFycmF5PFBlcEJyZWFkQ3J1bWJJdGVtPiA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4pIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXR1cFNocmlua0l0ZW1zKCk7XG4gICAgfVxuICAgIGdldCBpdGVtcygpOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVR5cGU6IFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUgPSAnbGFiZWwnO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc3BsYXlUeXBlKHZhbHVlOiBQZXBCcmVhZENydW1ic0Rpc3BsYXlUeXBlKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlUeXBlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgIH1cbiAgICBnZXQgZGlzcGxheVR5cGUoKTogUGVwQnJlYWRDcnVtYnNEaXNwbGF5VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhZGRTcGFjaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEJyZWFkQ3J1bWJJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIGNoYXJTZXBhcmF0b3IgPSAnIC8gJztcbiAgICBpY29uU2VwYXJhdG9yOiBzdHJpbmcgPSBwZXBJY29uQXJyb3dSaWdodC5uYW1lO1xuICAgIHNocmlua0l0ZW1zID0gZmFsc2U7XG4gICAgc2NyZWVuU2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSgpLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JlZW5TaXplID0gc2l6ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzUnRsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclNlcGFyYXRvciA9ICcgXFxcXCAnO1xuICAgICAgICAgICAgdGhpcy5pY29uU2VwYXJhdG9yID0gcGVwSWNvbkFycm93TGVmdC5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFNocmlua0l0ZW1zKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VHlwZSA9PT0gJ2l0ZW1zJyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2hyaW5rSXRlbXMgPSB0aGlzLnNjcmVlblNpemUgPiBQZXBTY3JlZW5TaXplVHlwZS5TTTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExhYmVsVGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGxhYmVsVGl0bGUgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRpdGxlICs9IHRoaXMuY2hhclNlcGFyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVGl0bGUgKz0gdGhpcy5pdGVtc1tpbmRleF0udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFiZWxUaXRsZTtcbiAgICB9XG5cbiAgICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogUGVwQnJlYWRDcnVtYkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh7IHNvdXJjZTogaXRlbSB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdsYWJlbCc7IHRoZW4gbGFiZWxUZW1wbGF0ZTsgZWxzZSBpdGVtc1RlbXBsYXRlXCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImJyZWFkLWNydW1icy1sYWJlbCBjb2xvci1kaW1tZWQgZWxsaXBzaXNcIiBbbmdDbGFzc109XCJ7ICdwZXAtc3BhY2luZy1lbGVtZW50JzogYWRkU3BhY2luZyB9XCJcbiAgICAgICAgW3RpdGxlXT1cImdldExhYmVsVGl0bGUoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keS14cyBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0ZpcnN0ICYmICFpc0xhc3RcIj4mbmJzcDt7eyBjaGFyU2VwYXJhdG9yIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTGFzdFwiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIiB0aXRsZS0yeHMgZWxsaXBzaXMgY3VycmVudCBjb2xvci1tYWluXCIgdGl0bGU9XCJ7eyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXT8udGV4dCB9fVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRleHQgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtc1RlbXBsYXRlPlxuICAgIDx1bCAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJicmVhZC1jcnVtYnMtaXRlbXMgYm9keS1zbSBlbGxpcHNpc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hyaW5rSXRlbXM7IHRoZW4gc2hyaW5rVGVtcGxhdGU7IGVsc2UgcmVndWxhclRlbXBsYXRlXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hyaW5rVGVtcGxhdGU+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjb2xvci1saW5rXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+Li4uPC9hPlxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgaXRlbXM7IGxldCBpc0xhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCIhaXNMYXN0XCIgKGNsaWNrKT1cIm9uQnJlYWRDcnVtYkl0ZW1DbGljayhtZW51SXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJtZW51SXRlbS50aXRsZSB8fCBtZW51SXRlbS50ZXh0XCIgW2Rpc2FibGVkXT1cIm1lbnVJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBtZW51SXRlbS5kaXNhYmxlZCB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbnVJdGVtLnRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VwYXJhdG9yIHBlcC1zcGFjaW5nLWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImljb25TZXBhcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRpdGxlIHx8IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdPy50ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdPy50ZXh0IH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFyVGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaXNGaXJzdCA9IGZpcnN0OyBsZXQgaXNMYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhaXRlbS5kaXNhYmxlZFwiIFt0aXRsZV09XCJpdGVtLnRpdGxlIHx8IGl0ZW0udGV4dFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgY29sb3ItbGlua1wiIChjbGljayk9XCJvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbSlcIj57eyBpdGVtLnRleHQgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5kaXNhYmxlZFwiIFt0aXRsZV09XCJpdGVtLnRpdGxlIHx8IGl0ZW0udGV4dFwiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cIiFpc0xhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VwYXJhdG9yIHBlcC1zcGFjaW5nLWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBbbmFtZV09XCJpY29uU2VwYXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2JyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBRUwsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlFLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ3BCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFPdEMsTUFBTSxPQUFPLHVCQUF1QjtJQStCaEMsWUFBb0IsYUFBK0I7UUFBL0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBOUIzQyxXQUFNLEdBQTZCLEVBQUUsQ0FBQztRQVV0QyxpQkFBWSxHQUE4QixPQUFPLENBQUM7UUFVakQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUc1QixjQUFTLEdBQStDLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBRXpHLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQVcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBR21DLENBQUM7SUE3QnhELElBQ0ksS0FBSyxDQUFDLEtBQStCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUdELElBQ0ksV0FBVyxDQUFDLEtBQWdDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQWNELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNwRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDWCxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztxQkFDcEM7b0JBRUQsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUN4QzthQUNKO1NBQ0o7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBdUI7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOztvSEF2RVEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsK0tDeEJwQyw4ckdBaUVjO3dIRHpDRCx1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxrQkFBa0I7O2tCQUkvQixVQUFVO3VHQUlILEtBQUs7c0JBRFIsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBU0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTixTQUFTO3NCQURSLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBlcExheW91dFNlcnZpY2UsIFBlcFNjcmVlblNpemVUeXBlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHtcbiAgICBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50LFxuICAgIFBlcEJyZWFkQ3J1bWJJdGVtLFxuICAgIFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUsXG59IGZyb20gJy4vYnJlYWQtY3J1bWJzLm1vZGVsJztcbmltcG9ydCB7XG4gICAgcGVwSWNvbkFycm93TGVmdCxcbiAgICBwZXBJY29uQXJyb3dSaWdodCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvaWNvbic7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1icmVhZC1jcnVtYnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JyZWFkLWNydW1icy5jb21wb25lbnQuc2NzcycsICcuL2JyZWFkLWNydW1icy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXBCcmVhZENydW1ic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfaXRlbXM6IEFycmF5PFBlcEJyZWFkQ3J1bWJJdGVtPiA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4pIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXR1cFNocmlua0l0ZW1zKCk7XG4gICAgfVxuICAgIGdldCBpdGVtcygpOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVR5cGU6IFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUgPSAnbGFiZWwnO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc3BsYXlUeXBlKHZhbHVlOiBQZXBCcmVhZENydW1ic0Rpc3BsYXlUeXBlKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlUeXBlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgIH1cbiAgICBnZXQgZGlzcGxheVR5cGUoKTogUGVwQnJlYWRDcnVtYnNEaXNwbGF5VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhZGRTcGFjaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEJyZWFkQ3J1bWJJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIGNoYXJTZXBhcmF0b3IgPSAnIC8gJztcbiAgICBpY29uU2VwYXJhdG9yOiBzdHJpbmcgPSBwZXBJY29uQXJyb3dSaWdodC5uYW1lO1xuICAgIHNocmlua0l0ZW1zID0gZmFsc2U7XG4gICAgc2NyZWVuU2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSgpLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JlZW5TaXplID0gc2l6ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzUnRsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclNlcGFyYXRvciA9ICcgXFxcXCAnO1xuICAgICAgICAgICAgdGhpcy5pY29uU2VwYXJhdG9yID0gcGVwSWNvbkFycm93TGVmdC5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFNocmlua0l0ZW1zKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VHlwZSA9PT0gJ2l0ZW1zJyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2hyaW5rSXRlbXMgPSB0aGlzLnNjcmVlblNpemUgPiBQZXBTY3JlZW5TaXplVHlwZS5TTTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExhYmVsVGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGxhYmVsVGl0bGUgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRpdGxlICs9IHRoaXMuY2hhclNlcGFyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVGl0bGUgKz0gdGhpcy5pdGVtc1tpbmRleF0udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFiZWxUaXRsZTtcbiAgICB9XG5cbiAgICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogUGVwQnJlYWRDcnVtYkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh7IHNvdXJjZTogaXRlbSB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdsYWJlbCc7IHRoZW4gbGFiZWxUZW1wbGF0ZTsgZWxzZSBpdGVtc1RlbXBsYXRlXCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImJyZWFkLWNydW1icy1sYWJlbCBjb2xvci1kaW1tZWQgZWxsaXBzaXNcIiBbbmdDbGFzc109XCJ7ICdwZXAtc3BhY2luZy1lbGVtZW50JzogYWRkU3BhY2luZyB9XCJcbiAgICAgICAgW3RpdGxlXT1cImdldExhYmVsVGl0bGUoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keS14cyBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0ZpcnN0ICYmICFpc0xhc3RcIj4mbmJzcDt7eyBjaGFyU2VwYXJhdG9yIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTGFzdFwiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIiB0aXRsZS1tZCBlbGxpcHNpcyBjdXJyZW50IGNvbG9yLW1haW5cIiB0aXRsZT1cInt7IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdPy50ZXh0IH19XCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXT8udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1zVGVtcGxhdGU+XG4gICAgPHVsICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImJyZWFkLWNydW1icy1pdGVtcyBib2R5LXNtIGVsbGlwc2lzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaHJpbmtJdGVtczsgdGhlbiBzaHJpbmtUZW1wbGF0ZTsgZWxzZSByZWd1bGFyVGVtcGxhdGVcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaHJpbmtUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImNvbG9yLWxpbmtcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj4uLi48L2E+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBpdGVtczsgbGV0IGlzTGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cIiFpc0xhc3RcIiAoY2xpY2spPVwib25CcmVhZENydW1iSXRlbUNsaWNrKG1lbnVJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm1lbnVJdGVtLnRpdGxlIHx8IG1lbnVJdGVtLnRleHRcIiBbZGlzYWJsZWRdPVwibWVudUl0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IG1lbnVJdGVtLmRpc2FibGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVudUl0ZW0udGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZXBhcmF0b3IgcGVwLXNwYWNpbmctZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGVwLWljb24gW25hbWVdPVwiaWNvblNlcGFyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtc1tpdGVtcy5sZW5ndGggLSAxXT8udGl0bGUgfHwgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpc0ZpcnN0ID0gZmlyc3Q7IGxldCBpc0xhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLmRpc2FibGVkXCIgW3RpdGxlXT1cIml0ZW0udGl0bGUgfHwgaXRlbS50ZXh0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBjb2xvci1saW5rXCIgKGNsaWNrKT1cIm9uQnJlYWRDcnVtYkl0ZW1DbGljayhpdGVtKVwiPnt7IGl0ZW0udGV4dCB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmRpc2FibGVkXCIgW3RpdGxlXT1cIml0ZW0udGl0bGUgfHwgaXRlbS50ZXh0XCI+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiIWlzTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZXBhcmF0b3IgcGVwLXNwYWNpbmctZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImljb25TZXBhcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGVwLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -466,12 +466,12 @@ export class PepInternalListComponent {
|
|
|
466
466
|
}
|
|
467
467
|
}
|
|
468
468
|
PepInternalListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepInternalListComponent, deps: [{ token: i0.ElementRef }, { token: i1.PepLayoutService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
469
|
-
PepInternalListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepInternalListComponent, selector: "pep-internal-list", inputs: { noDataFoundMsg: "noDataFoundMsg", hideAllSelectionInMulti: "hideAllSelectionInMulti", top: "top", objectId: "objectId", parentId: "parentId", searchCode: "searchCode", supportResizing: "supportResizing", parentScroll: "parentScroll", disabled: "disabled", disableEvents: "disableEvents", disableSelectionItems: "disableSelectionItems", totalsRow: "totalsRow" }, outputs: { fieldClick: "fieldClick", valueChange: "valueChange" }, host: { listeners: { "window:resize": "winResize($event)" } }, viewQueries: [{ propertyName: "noVirtualScrollCont", first: true, predicate: ["noVirtualScrollCont"], descendants: true }, { propertyName: "tableHeader", first: true, predicate: ["tableHeader"], descendants: true }, { propertyName: "selectAllCB", first: true, predicate: ["selectAllCB"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalRows == 0\">\n <div class=\"pep-border-bottom\">\n <p class=\"title-
|
|
469
|
+
PepInternalListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepInternalListComponent, selector: "pep-internal-list", inputs: { noDataFoundMsg: "noDataFoundMsg", hideAllSelectionInMulti: "hideAllSelectionInMulti", top: "top", objectId: "objectId", parentId: "parentId", searchCode: "searchCode", supportResizing: "supportResizing", parentScroll: "parentScroll", disabled: "disabled", disableEvents: "disableEvents", disableSelectionItems: "disableSelectionItems", totalsRow: "totalsRow" }, outputs: { fieldClick: "fieldClick", valueChange: "valueChange" }, host: { listeners: { "window:resize": "winResize($event)" } }, viewQueries: [{ propertyName: "noVirtualScrollCont", first: true, predicate: ["noVirtualScrollCont"], descendants: true }, { propertyName: "tableHeader", first: true, predicate: ["tableHeader"], descendants: true }, { propertyName: "selectAllCB", first: true, predicate: ["selectAllCB"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalRows == 0\">\n <div class=\"pep-border-bottom\">\n <p class=\"title-xl no-data\">\n {{ (noDataFoundMsg ? noDataFoundMsg : 'LIST.NO_DATA_FOUND') | translate}}\n </p>\n </div>\n <div class=\"no-data-suggestions\">\n <p class=\"suggestions-title title-lg\">\n {{ 'LIST.NO_DATA_FOUND_SUGGESTIONS_TITLE' | translate}}\n </p>\n <ul class=\"suggestions-list body-lg\" [innerHtml]=\"'LIST.NO_DATA_FOUND_SUGGESTIONS_LIST' | translate\"></ul>\n </div>\n</ng-container>\n<ng-container *ngIf=\"totalRows > 0\">\n <div *ngIf=\"isTable\" #tableHeader class=\"table-header\" (mouseup)=\"onListResizeEnd($event)\"\n (mouseenter)=\"onListHeaderMouseEnter($event)\" (mouseleave)=\"onListHeaderMouseLeave($event)\"\n (mousemove)=\"onListResize($event)\">\n\n <div class=\"table-header-padding-top\"></div>\n <fieldset class=\"table-header-fieldset\">\n <fieldset>\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"header-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\" [ngClass]=\"{\n 'is-resizing': field.ApiName === pressedColumn,\n 'is-first': j === 0,\n 'is-last': j === uiControl?.ControlFields?.length - 1\n }\">\n <label *ngIf=\"field.Title != ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip text-align-{{ field.Layout.XAlignment }}\"\n title=\"{{ field.Title }}\">\n {{ field.Title }}\n </label>\n <label *ngIf=\"field.Title == ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip\"> </label>\n\n <div *ngIf=\"supportResizing\" class=\"resize-box pull-right flip\"\n (mousedown)=\"onListResizeStart($event, field.ApiName)\">\n <div class=\"splitter\"></div>\n </div>\n </div>\n </fieldset>\n </fieldset>\n </div>\n\n <div #noVirtualScrollCont [ngClass]=\"{ 'table-body': isTable, 'cards-body': !isTable }\">\n <ng-container *ngTemplateOutlet=\"listData\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"listTotals\"></ng-container>\n</ng-container>\n\n<ng-template #listData>\n <ng-container *ngFor=\"let item of scrollItems; let i = index; let isFirst = first; trackBy: trackByFunc\">\n <ng-container *ngIf=\"isTable\">\n <div class=\"table-row\" (mouseenter)=\"onTableRowMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onTableRowMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId\n }\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <fieldset class=\"table-row-fieldset\" [ngStyle]=\"{ 'background-color': item?.BackgroundColor }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\"objectId\" [parentId]=\"parentId\"\n [searchCode]=\"searchCode\" [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'table'\"\n [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </fieldset>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!isTable\">\n <div [class]=\"itemClass\" (mouseenter)=\"onCardMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onCardMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId,\n 'card-view': viewType === 'cards',\n 'line-view': viewType === 'lines'\n }\" class=\"pull-left flip\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\" objectId\" [parentId]=\"parentId\" [searchCode]=\"searchCode\"\n [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'card'\" [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #listTotals>\n <div *ngIf=\"totalsRow?.length > 0 && totalsRow.length <= uiControl?.ControlFields.length\" class=\"table-total\">\n <fieldset class=\"table-header-fieldset\">\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"total-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\">\n <label class=\"total-label body-sm text-align-{{ field.Layout.XAlignment }}\">\n {{ totalsRow[j] }}\n </label>\n </div>\n </fieldset>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:grid}.no-data{margin:var(--pep-spacing-2xl, 2rem) 0}.no-data-suggestions .suggestions-title{margin:var(--pep-spacing-lg, 1rem) 0 var(--pep-spacing-sm, .5rem)}.no-data-suggestions .suggestions-list{margin:0;padding:0;padding-inline-start:var(--pep-spacing-2xl, 2rem)}.table-header{top:0}\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: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.PepInternalFormComponent, selector: "pep-internal-form", inputs: ["isInternal", "isReport", "layout", "lockEvents", "canEditObject", "data", "lockFields", "isActive", "layoutType", "objectId", "parentId", "searchCode", "showTitle", "firstFieldAsLink", "checkForChanges"], outputs: ["valueChange", "formValidationChange", "fieldClick"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
|
|
470
470
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepInternalListComponent, decorators: [{
|
|
471
471
|
type: Component,
|
|
472
472
|
args: [{ selector: 'pep-internal-list', host: {
|
|
473
473
|
'(window:resize)': 'winResize($event)',
|
|
474
|
-
}, template: "<ng-container *ngIf=\"totalRows == 0\">\n <div class=\"pep-border-bottom\">\n <p class=\"title-
|
|
474
|
+
}, template: "<ng-container *ngIf=\"totalRows == 0\">\n <div class=\"pep-border-bottom\">\n <p class=\"title-xl no-data\">\n {{ (noDataFoundMsg ? noDataFoundMsg : 'LIST.NO_DATA_FOUND') | translate}}\n </p>\n </div>\n <div class=\"no-data-suggestions\">\n <p class=\"suggestions-title title-lg\">\n {{ 'LIST.NO_DATA_FOUND_SUGGESTIONS_TITLE' | translate}}\n </p>\n <ul class=\"suggestions-list body-lg\" [innerHtml]=\"'LIST.NO_DATA_FOUND_SUGGESTIONS_LIST' | translate\"></ul>\n </div>\n</ng-container>\n<ng-container *ngIf=\"totalRows > 0\">\n <div *ngIf=\"isTable\" #tableHeader class=\"table-header\" (mouseup)=\"onListResizeEnd($event)\"\n (mouseenter)=\"onListHeaderMouseEnter($event)\" (mouseleave)=\"onListHeaderMouseLeave($event)\"\n (mousemove)=\"onListResize($event)\">\n\n <div class=\"table-header-padding-top\"></div>\n <fieldset class=\"table-header-fieldset\">\n <fieldset>\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"header-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\" [ngClass]=\"{\n 'is-resizing': field.ApiName === pressedColumn,\n 'is-first': j === 0,\n 'is-last': j === uiControl?.ControlFields?.length - 1\n }\">\n <label *ngIf=\"field.Title != ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip text-align-{{ field.Layout.XAlignment }}\"\n title=\"{{ field.Title }}\">\n {{ field.Title }}\n </label>\n <label *ngIf=\"field.Title == ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip\"> </label>\n\n <div *ngIf=\"supportResizing\" class=\"resize-box pull-right flip\"\n (mousedown)=\"onListResizeStart($event, field.ApiName)\">\n <div class=\"splitter\"></div>\n </div>\n </div>\n </fieldset>\n </fieldset>\n </div>\n\n <div #noVirtualScrollCont [ngClass]=\"{ 'table-body': isTable, 'cards-body': !isTable }\">\n <ng-container *ngTemplateOutlet=\"listData\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"listTotals\"></ng-container>\n</ng-container>\n\n<ng-template #listData>\n <ng-container *ngFor=\"let item of scrollItems; let i = index; let isFirst = first; trackBy: trackByFunc\">\n <ng-container *ngIf=\"isTable\">\n <div class=\"table-row\" (mouseenter)=\"onTableRowMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onTableRowMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId\n }\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <fieldset class=\"table-row-fieldset\" [ngStyle]=\"{ 'background-color': item?.BackgroundColor }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\"objectId\" [parentId]=\"parentId\"\n [searchCode]=\"searchCode\" [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'table'\"\n [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </fieldset>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!isTable\">\n <div [class]=\"itemClass\" (mouseenter)=\"onCardMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onCardMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId,\n 'card-view': viewType === 'cards',\n 'line-view': viewType === 'lines'\n }\" class=\"pull-left flip\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\" objectId\" [parentId]=\"parentId\" [searchCode]=\"searchCode\"\n [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'card'\" [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #listTotals>\n <div *ngIf=\"totalsRow?.length > 0 && totalsRow.length <= uiControl?.ControlFields.length\" class=\"table-total\">\n <fieldset class=\"table-header-fieldset\">\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"total-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\">\n <label class=\"total-label body-sm text-align-{{ field.Layout.XAlignment }}\">\n {{ totalsRow[j] }}\n </label>\n </div>\n </fieldset>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:grid}.no-data{margin:var(--pep-spacing-2xl, 2rem) 0}.no-data-suggestions .suggestions-title{margin:var(--pep-spacing-lg, 1rem) 0 var(--pep-spacing-sm, .5rem)}.no-data-suggestions .suggestions-list{margin:0;padding:0;padding-inline-start:var(--pep-spacing-2xl, 2rem)}.table-header{top:0}\n"] }]
|
|
475
475
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PepLayoutService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { noDataFoundMsg: [{
|
|
476
476
|
type: Input
|
|
477
477
|
}], hideAllSelectionInMulti: [{
|
|
@@ -510,4 +510,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
510
510
|
type: ViewChild,
|
|
511
511
|
args: ['selectAllCB']
|
|
512
512
|
}] } });
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFNBQVMsR0FLWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBSUgsVUFBVSxHQUViLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQWdCakMsTUFBTSxPQUFPLHdCQUF3QjtJQXFFakMsWUFDWSxPQUFtQixFQUNuQixhQUErQixFQUMvQixFQUFxQixFQUNyQixRQUFtQjtRQUhuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBeEV0QixtQkFBYyxHQUFHLGlCQUFpQixDQUFDO1FBQ25DLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVoQyxRQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDVCxhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNmLGVBQVUsR0FBRyxHQUFHLENBQUM7UUFDMUIsa0NBQWtDO1FBQ3pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQXFCLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXhCLFlBQVk7UUFDWixnR0FB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Z0JBQ0UsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIFBlcExheW91dFNlcnZpY2UsXG4gICAgVUlDb250cm9sLFxuICAgIFVJQ29udHJvbEZpZWxkLFxuICAgIEZJRUxEX1RZUEUsXG4gICAgT2JqZWN0c0RhdGFSb3csXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7XG4gICAgSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQsXG4gICAgSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQsXG59IGZyb20gJy4vZm9ybS5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIFBlcExpc3RWaWV3VHlwZSA9ICdjYXJkcycgfCAnbGluZXMnIHwgJ3RhYmxlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtaW50ZXJuYWwtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ludGVybmFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ludGVybmFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcod2luZG93OnJlc2l6ZSknOiAnd2luUmVzaXplKCRldmVudCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcEludGVybmFsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIG5vRGF0YUZvdW5kTXNnID0gJ0l0ZW1zIG5vdCBmb3VuZCc7XG4gICAgQElucHV0KCkgaGlkZUFsbFNlbGVjdGlvbkluTXVsdGkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRvcCA9IC0xO1xuICAgIEBJbnB1dCgpIG9iamVjdElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHBhcmVudElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHNlYXJjaENvZGUgPSAnMCc7XG4gICAgLy8gQElucHV0KCkgc2hvd1RvcEJvcmRlciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHN1cHBvcnRSZXNpemluZyA9IHRydWU7XG4gICAgQElucHV0KCkgcGFyZW50U2Nyb2xsOiBFbGVtZW50IHwgV2luZG93ID0gbnVsbDtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVFdmVudHMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlU2VsZWN0aW9uSXRlbXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB0b3RhbHNSb3cgPSBbXTtcblxuICAgIC8vIEBPdXRwdXQoKVxuICAgIC8vIGl0ZW1DbGljazogRXZlbnRFbWl0dGVyPElQZXBMaXN0SXRlbUNsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwTGlzdEl0ZW1DbGlja0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKVxuICAgIGZpZWxkQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudD4oKTtcbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdub1ZpcnR1YWxTY3JvbGxDb250Jykgbm9WaXJ0dWFsU2Nyb2xsQ29udDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCd0YWJsZUhlYWRlcicpIHRhYmxlSGVhZGVyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbENCJykgc2VsZWN0QWxsQ0I6IGFueTtcblxuICAgIHB1YmxpYyB1aUNvbnRyb2w6IFVJQ29udHJvbCA9IG51bGw7XG4gICAgcHVibGljIHRvdGFsUm93cyA9IC0xO1xuICAgIGl0ZW1DbGFzczogc3RyaW5nO1xuICAgIGlzVGFibGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9pdGVtczogQXJyYXk8T2JqZWN0c0RhdGFSb3c+ID0gbnVsbDtcbiAgICBnZXQgaXRlbXMoKTogQXJyYXk8T2JqZWN0c0RhdGFSb3c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cblxuICAgIC8vIGlzQ2FyZFZpZXcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGl0ZW1zQ291bnRlciA9IDA7XG4gICAgc2hvd0l0ZW1zID0gdHJ1ZTtcbiAgICB2aWV3VHlwZTogUGVwTGlzdFZpZXdUeXBlO1xuICAgIHNjcm9sbEl0ZW1zOiBBcnJheTxPYmplY3RzRGF0YVJvdz47XG5cbiAgICBwdWJsaWMgU0VQQVJBVE9SID0gJywnO1xuXG4gICAgbmF0aXZlV2luZG93OiBhbnkgPSBudWxsO1xuXG4gICAgc2VsZWN0ZWRJdGVtSWQgPSAnJztcbiAgICBob3ZlcmVkSXRlbUlkID0gJyc7XG5cbiAgICBwcml2YXRlIGxvY2tFdmVudHMgPSBmYWxzZTtcbiAgICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gMDtcblxuICAgIGRldmljZUhhc01vdXNlID0gZmFsc2U7XG5cbiAgICAvLyBoZWFkZXJJc0luRm9jdXMgPSBmYWxzZTtcblxuICAgIC8vIEZvciByZXNpemVcbiAgICBwcmVzc2VkQ29sdW1uID0gJyc7XG4gICAgc3RhcnRYID0gMDtcbiAgICBzdGFydFdpZHRoID0gMDtcbiAgICB0YWJsZVN0YXJ0V2lkdGggPSAwO1xuXG4gICAgaXNVc2VyU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBjaGVja0ZvckNoYW5nZXM6IGFueSA9IG51bGw7XG4gICAgdXNlVmlydHVhbFNjcm9sbCA9IHRydWU7XG4gICAgY2FsY3VsYXRlZE9iamVjdEhlaWdodDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7XG4gICAgICAgIHRoaXMubmF0aXZlV2luZG93ID0gd2luZG93O1xuICAgICAgICB0aGlzLmRldmljZUhhc01vdXNlID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmdldERldmljZUhhc01vdXNlKCk7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vbk1vdXNlT3ZlciQuc3Vic2NyaWJlKChkZXZpY2VIYXNNb3VzZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXZpY2VIYXNNb3VzZSA9IGRldmljZUhhc01vdXNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IDA7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXJXaWR0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMudmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgLy8gICAgIHRoaXMudmFsdWVDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAodGhpcy5pdGVtQ2xpY2spIHtcbiAgICAgICAgLy8gICAgIHRoaXMuaXRlbUNsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHRoaXMuZmllbGRDbGljaykge1xuICAgICAgICAvLyAgICAgdGhpcy5maWVsZENsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBzZXRDb250YWluZXJXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGVja0JveFdpZHRoID0gMDtcblxuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSA0MDsgLy8gdGhlIHRhYmxlIHJvdyBoZWlnaHQgKDIuNXJlbSAqIDE2Zm9udC1zaXplKS5cbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgY29udGFpbmVyLWZsdWlkIGNsYXNzIHBhZGRpbmcgbGVmdCArIHJpZ2h0ICsgYm9yZGVyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckZsdWlkU3BhY2luZyA9XG4gICAgICAgICAgICBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCwgMTApICsgcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0LCAxMCk7XG5cbiAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID1cbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCA+IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICAgIDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgaWYgdmVydGljYWwgc2Nyb2xsIHNob3VsZCBhcHBlYXIsIGlmIHNvIHNldCB0aGUgc2Nyb2xsIHdpZHRoLiAodGhpcy50b3RhbFJvd3MgKyAxKSArIDEgaXMgZm9yIHRoZSBoZWFkZXIgcm93LlxuICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9XG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIuY2xpZW50SGVpZ2h0IDwgcm93SGVpZ2h0ICogKHRoaXMudG90YWxSb3dzICsgMSlcbiAgICAgICAgICAgICAgICA/IDE4XG4gICAgICAgICAgICAgICAgOiAwOyAvLyAxOCBpcyB0aGUgZGVmYXVsdCBzY3JvbGwgd2lkdGguXG5cbiAgICAgICAgLy8gVGhlIHNlbGVjdGlvbkNoZWNrQm94V2lkdGggd2lkdGggKyBjb250YWluZXJGbHVpZFNwYWNpbmcgKyBzY3JvbGxXaWR0aC5cbiAgICAgICAgY29uc3Qgcm93SGVhZGVyV2lkdGhUb1N1YiA9XG4gICAgICAgICAgICBjb250YWluZXJGbHVpZFNwYWNpbmcgKyBzZWxlY3Rpb25DaGVja0JveFdpZHRoICsgc2Nyb2xsV2lkdGg7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBwYXJlbnRDb250YWluZXIub2Zmc2V0V2lkdGggLSByb3dIZWFkZXJXaWR0aFRvU3ViO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFuSXRlbXMoKTtcbiAgICAgICAgdGhpcy51aUNvbnRyb2wgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlSXRlbXMoaXNWaXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0l0ZW1zID0gaXNWaXNpYmxlO1xuICAgICAgICB0aGlzLmxvY2tFdmVudHMgPSAhaXNWaXNpYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsSXRlbXMoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGxvYWRJbkNodW5rcyA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIH1cblxuICAgIGdldFVuaXFJdGVtSWQoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlID0gJycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbUlkICsgdGhpcy5TRVBBUkFUT1IgKyBpdGVtVHlwZTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID09PSAwIHx8XG4gICAgICAgICAgICAhdGhpcy51aUNvbnRyb2wgfHxcbiAgICAgICAgICAgICF0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzIHx8XG4gICAgICAgICAgICB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudWlDb250cm9sLkNvbnRyb2xGaWVsZHMuZm9yRWFjaCgoY2YpID0+IHtcbiAgICAgICAgICAgIGlmIChjZi5Db2x1bW5XaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNmLkNvbHVtbldpZHRoID0gMTA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGFibGUgJiZcbiAgICAgICAgICAgICAgICAoY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLkltYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbmRpY2F0b3JzIHx8ID8/P1xuICAgICAgICAgICAgICAgICAgICBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuU2lnbmF0dXJlIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbFF1YW50aXR5U2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlckludGVnZXJGb3JNYXRyaXggfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlclJlYWxGb3JNYXRyaXggfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLlBhY2thZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuQXBpTmFtZSA9PT0gJ1VuaXRzUXVhbnRpdHknIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkFwaU5hbWUgPT09ICdRdWFudGl0eVNlbGVjdG9yJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNmLkxheW91dC5YQWxpZ25tZW50ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNkWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIGNvbHVtbnMgd2lkdGguXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcldpZHRoIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGFpbmVyV2lkdGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY0NvbHVtbnNXaWR0aCgpO1xuICAgICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY0NvbHVtbnNXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZml4ZWRNdWx0aXBsZSA9IDMuNzg7IC8vIGZvciBjb252ZXJ0aW5nIGVtIHRvIHBpeGVsLlxuICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hlY2tCb3hXaWR0aCA9IDA7XG5cbiAgICAgICAgLy8gSXMgdGFibGUgQU5EIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gb2Ygd2lkdGggdHlwZSBvZiBwZXJjZW50YWdlLlxuICAgICAgICBpZiAodGhpcy5pc1RhYmxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51aUNvbnRyb2wgJiYgdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2YpID0+IGNmLkNvbHVtbldpZHRoVHlwZSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICApLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBjb2x1bW5zIHNpemUgaXMgZml4ZWQgYW5kIHRoZSB0b3RhbCBpcyBzbWFsbCB0aGVuIHRoZSBjb250YWluZXIgY2hhbmdlIGl0IHRvIHBlcmNlbnRhZ2UuXG4gICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW5XaWR0aE9mVHlwZVBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsRml4ZWRDb2xzV2lkdGggPSB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLm1hcChcbiAgICAgICAgICAgICAgICAoY2YpID0+IGNmLkNvbHVtbldpZHRoICogZml4ZWRNdWx0aXBsZVxuICAgICAgICAgICAgKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCk7XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IHRvdGFsRml4ZWRDb2xzV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdG90YWxDYWxjQ29sc1dpZHRoID0gMDtcblxuICAgICAgICAvLyBDYWxjIGJ5IHBlcmNlbnRhZ2VcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbENvbHNXaWR0aDogbnVtYmVyID0gdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5tYXAoXG4gICAgICAgICAgICAgICAgKGNmKSA9PiBjZi5Db2x1bW5XaWR0aFxuICAgICAgICAgICAgKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1aUNvbnRyb2xGaWVsZDogVUlDb250cm9sRmllbGQgPSB0aGlzLnVpQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAuQ29udHJvbEZpZWxkc1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsY0NvbHVtbldpZHRoUGVyY2VudGFnZSA9XG4gICAgICAgICAgICAgICAgICAgICgxMDAgLyB0b3RhbENvbHNXaWR0aCkgKiB1aUNvbnRyb2xGaWVsZC5Db2x1bW5XaWR0aDtcblxuICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbnRhaW5lcldpZHRoICogY2FsY0NvbHVtbldpZHRoUGVyY2VudGFnZSkgLyAxMDBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICdjYWxjKDEwMCUgLSAnICsgdG90YWxDYWxjQ29sc1dpZHRoICsgJ3B4KSc7IC8vIEZvciAxMDAlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPSB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDYWxjQ29sc1dpZHRoICs9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAnaW5oZXJpdCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdWlDb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkID0gdGhpcy51aUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgLkNvbnRyb2xGaWVsZHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaXhlZFdpZHRoID0gTWF0aC5mbG9vcihcbiAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuQ29sdW1uV2lkdGggKiBmaXhlZE11bHRpcGxlXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rml4ZWRXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rml4ZWRXaWR0aCAtIDQgKyAncHgnOyAvLyAtNCBmb3IgdGhlIHJvdyBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXhlZFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0b3RhbENhbGNDb2xzV2lkdGggKz0gY3VycmVudEZpeGVkV2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICB0b3RhbENhbGNDb2xzV2lkdGggKyBzZWxlY3Rpb25DaGVja0JveFdpZHRoICsgJ3B4J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFJlc2l6ZURhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhcnRYID0gMDtcbiAgICAgICAgdGhpcy5zdGFydFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy50YWJsZVN0YXJ0V2lkdGggPSAwO1xuICAgICAgICB0aGlzLnByZXNzZWRDb2x1bW4gPSAnJztcbiAgICB9XG5cbiAgICBvbkxpc3RSZXNpemVTdGFydChldmVudCwgY29sdW1uS2V5KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJlc3NlZENvbHVtbiA9IGNvbHVtbktleTtcbiAgICAgICAgdGhpcy5zdGFydFggPSBldmVudC54O1xuICAgICAgICB0aGlzLnN0YXJ0V2lkdGggPSBldmVudC50YXJnZXQuY2xvc2VzdCgnLmhlYWRlci1jb2x1bW4nKS5vZmZzZXRXaWR0aDtcbiAgICAgICAgLy8gU2V0IHRoZSB0YWJsZVN0YXJ0V2lkdGggdG8gdGhlIGNvbnRhaW5lciBvZmZzZXRXaWR0aFxuICAgICAgICB0aGlzLnRhYmxlU3RhcnRXaWR0aCA9IHRoaXMubm9WaXJ0dWFsU2Nyb2xsQ29udC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cblxuICAgIG9uTGlzdFJlc2l6ZShldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcmVzc2VkQ29sdW1uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoVG9BZGQgPSB0aGlzLmxheW91dFNlcnZpY2UuaXNSdGwoKVxuICAgICAgICAgICAgICAgID8gdGhpcy5zdGFydFggLSBldmVudC54XG4gICAgICAgICAgICAgICAgOiBldmVudC54IC0gdGhpcy5zdGFydFg7XG5cbiAgICAgICAgICAgIC8vIFNldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBhbmQgdGhlIGNvbnRhaW5lciBvZiB0aGUgd2hvbGUgY29sdW1ucy5cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0V2lkdGggKyB3aWR0aFRvQWRkID49IDQ4IHx8IHdpZHRoVG9BZGQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsQ2FsY0NvbHNXaWR0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCA9IHRoaXMudWlDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29udHJvbEZpZWxkc1tpbmRleF07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjIHRoZSBsYXN0IGNvbHVtbiBvbmx5IGluIHBlcmNlbnRhZ2UgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbGMoMTAwJSAtICcgKyB0b3RhbENhbGNDb2xzV2lkdGggKyAncHgpJzsgLy8gRm9yIDEwMCVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVpQ29udHJvbEZpZWxkLkFwaU5hbWUgPT09IHRoaXMucHJlc3NlZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpZHRoICsgd2lkdGhUb0FkZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCAtIDQgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1aUNvbnRyb2xGaWVsZC5BcGlOYW1lID09PSB0aGlzLnByZXNzZWRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpZHRoICsgd2lkdGhUb0FkZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdG90YWxDYWxjQ29sc1dpZHRoICs9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0YXJ0V2lkdGggKyB3aWR0aFRvQWRkICsgJ3B4J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tGb3JDaGFuZ2VzID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYXJlbnQoZWwsIHBhcmVudFNlbGVjdG9yKTogYW55IHtcbiAgICAgICAgLy8gSWYgbm8gcGFyZW50U2VsZWN0b3IgZGVmaW5lZCB3aWxsIGJ1YmJsZSB1cCBhbGwgdGhlIHdheSB0byAqZG9jdW1lbnQqXG4gICAgICAgIGlmIChwYXJlbnRTZWxlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IGRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IFtdO1xuICAgICAgICBsZXQgcCA9IGVsLnBhcmVudE5vZGU7XG5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgcCAmJlxuICAgICAgICAgICAgcC5jbGFzc05hbWUgIT09ICcnICYmXG4gICAgICAgICAgICBwLmNsYXNzTmFtZS5pbmRleE9mKHBhcmVudFNlbGVjdG9yKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yICE9PSBkb2N1bWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG8gPSBwO1xuICAgICAgICAgICAgcCA9IG8ucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocC5jbGFzc05hbWUuaW5kZXhPZihwYXJlbnRTZWxlY3RvcikgPiAtMSkge1xuICAgICAgICAgICAgcGFyZW50LnB1c2gocCk7IC8vIFB1c2ggdGhhdCBwYXJlbnRTZWxlY3RvciB5b3Ugd2FudGVkIHRvIHN0b3AgYXRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIG9uTGlzdFJlc2l6ZUVuZChldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcmVzc2VkQ29sdW1uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50KGV2ZW50LnNyY0VsZW1lbnQsICdyZXNpemUtYm94JykubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UmVzaXplRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UmVzaXplRGF0YSgpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25MaXN0SGVhZGVyTW91c2VFbnRlcihldmVudCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLmhlYWRlcklzSW5Gb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25MaXN0SGVhZGVyTW91c2VMZWF2ZShldmVudCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLmhlYWRlcklzSW5Gb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uTGlzdFJlc2l6ZUVuZChldmVudCk7XG4gICAgICAgIHRoaXMuaW5pdFJlc2l6ZURhdGEoKTtcbiAgICB9XG5cbiAgICBvbkxpc3RDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlRXZlbnRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3Igb3RoZXIgZXZlbnRzIGRvIG5vdGhpbmcuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBldmVudC5zdGFydCA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgICAgIHR5cGVvZiBldmVudC5lbmQgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkT2JqZWN0SGVpZ2h0ID0gZXZlbnQuY2FsY3VsYXRlZENoaWxkSGVpZ2h0ICsgJ3B4JztcblxuICAgICAgICBpZiAoIXRoaXMubG9ja0V2ZW50cykge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVJdGVtcyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEl0ZW1zKGV2ZW50LnN0YXJ0LCBldmVudC5lbmQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlSXRlbXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYXJlbnRDb250YWluZXIoKTogRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFNjcm9sbCA/IHRoaXMucGFyZW50U2Nyb2xsIDogd2luZG93O1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2VkKHZhbHVlQ2hhbmdlOiBJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBvbkN1c3RvbWl6ZUZpZWxkQ2xpY2soXG4gICAgICAgIGN1c3RvbWl6ZUZpZWxkQ2xpY2tlZERhdGE6IElQZXBGb3JtRmllbGRDbGlja0V2ZW50XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpZWxkQ2xpY2suZW1pdChjdXN0b21pemVGaWVsZENsaWNrZWREYXRhKTtcbiAgICB9XG5cbiAgICBnZXRJc0Rpc2FibGVkKGl0ZW06IE9iamVjdHNEYXRhUm93KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVTZWxlY3Rpb25JdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBJc05vdFNlbGVjdGFibGVGb3JBY3Rpb25zID1cbiAgICAgICAgICAgICAgICBpdGVtICYmICFpdGVtLklzU2VsZWN0YWJsZUZvckFjdGlvbnM7XG4gICAgICAgICAgICByZXR1cm4gSXNOb3RTZWxlY3RhYmxlRm9yQWN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldElzSXRlbVNlbGVjdGVkKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZSA9ICcnKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpc1NlbGVjdGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdW5pcUl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcbiAgICAgICAgaXNTZWxlY3RlZCA9IHVuaXFJdGVtSWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVtSWQ7XG5cbiAgICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJdGVtQ2xpY2tlZChcbiAgICAgICAgaXRlbUlkLFxuICAgICAgICBpc1NlbGVjdGFibGVGb3JBY3Rpb25zOiBib29sZWFuLFxuICAgICAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgICAgICBpc0NoZWNrZWQ6IGJvb2xlYW5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdW5pcUl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcblxuICAgICAgICAvLyBzZWxlY3QgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIC8vIFNldCBzZWxldGVkIGl0ZW1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSB1bmlxSXRlbUlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSWQgPT09IHVuaXFJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtQ2xpY2tlZChlOiBhbnksIGl0ZW06IE9iamVjdHNEYXRhUm93KTogdm9pZCB7XG4gICAgICAgIC8vIFNldCBzZWxldGVkIGl0ZW1cbiAgICAgICAgY29uc3QgaXRlbUlkID0gaXRlbS5VSUQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBpdGVtLlR5cGUudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0uSXNTZWxlY3RhYmxlRm9yQWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcbiAgICAgICAgICAgIGlzQ2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEl0ZW1DbGlja2VkKFxuICAgICAgICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICAgICAgICBpdGVtLklzU2VsZWN0YWJsZUZvckFjdGlvbnMsXG4gICAgICAgICAgICAgICAgaXRlbVR5cGUsXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5pdGVtQ2xpY2suZW1pdCh7IHNvdXJjZTogaXRlbSwgdmlld1R5cGU6IHRoaXMudmlld1R5cGUgfSk7XG4gICAgfVxuXG4gICAgb25UYWJsZVJvd01vdXNlRW50ZXIoZXZlbnQ6IGFueSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZUhhc01vdXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxSXRlbUlkID0gdGhpcy5nZXRVbmlxSXRlbUlkKGl0ZW1JZCwgaXRlbVR5cGUpO1xuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtSWQgPSB1bmlxSXRlbUlkO1xuICAgIH1cblxuICAgIG9uVGFibGVSb3dNb3VzZUxlYXZlKGV2ZW50OiBhbnksIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG92ZXJlZEl0ZW1JZCA9ICcnO1xuICAgIH1cblxuICAgIG9uQ2FyZE1vdXNlRW50ZXIoZXZlbnQ6IGFueSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZUhhc01vdXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxSXRlbUlkID0gdGhpcy5nZXRVbmlxSXRlbUlkKGl0ZW1JZCwgaXRlbVR5cGUpO1xuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtSWQgPSB1bmlxSXRlbUlkO1xuICAgIH1cblxuICAgIG9uQ2FyZE1vdXNlTGVhdmUoZXZlbnQ6IGFueSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbUlkID0gJyc7XG4gICAgfVxuXG4gICAgLy8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHJlc2l6ZSArIGFuaW1hdGlvbiBlbmRcbiAgICB3aW5SZXNpemUoZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gMDtcbiAgICAgICAgdGhpcy5zZXRMYXlvdXQoKTtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuYyhpbmRleDogbnVtYmVyLCBpdGVtOiBPYmplY3RzRGF0YVJvdyk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtICYmIGl0ZW0uVUlEID8gaXRlbS5VSUQgOiBpbmRleDtcbiAgICB9XG5cbiAgICBjbGVhbkl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zQ291bnRlciA9IDA7XG4gICAgICAgIHRoaXMuX2l0ZW1zID1cbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID4gMCA/IEFycmF5PE9iamVjdHNEYXRhUm93Pih0aGlzLnRvdGFsUm93cykgOiBbXTtcbiAgICAgICAgdGhpcy5zY3JvbGxJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPYmplY3RIZWlnaHQgPSAnJztcbiAgICB9XG5cbiAgICBnZXRVSUNvbnRyb2woKTogVUlDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWlDb250cm9sO1xuICAgIH1cblxuICAgIGluaXRMaXN0RGF0YShcbiAgICAgICAgdWlDb250cm9sOiBVSUNvbnRyb2wsXG4gICAgICAgIHRvdGFsUm93czogbnVtYmVyLFxuICAgICAgICBpdGVtczogT2JqZWN0c0RhdGFSb3dbXSxcbiAgICAgICAgdmlld1R5cGU6IFBlcExpc3RWaWV3VHlwZSA9ICd0YWJsZScsXG4gICAgICAgIGl0ZW1DbGFzcyA9ICcnXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcbiAgICAgICAgdGhpcy5pc1RhYmxlID0gdmlld1R5cGUgPT09ICd0YWJsZSc7XG4gICAgICAgIC8vIHRoaXMuaXNDYXJkVmlldyA9IHZpZXdUeXBlID09PSAnY2FyZHMnO1xuICAgICAgICB0aGlzLnVpQ29udHJvbCA9IHVpQ29udHJvbDtcbiAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSBpdGVtQ2xhc3M7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSAnJztcbiAgICAgICAgdGhpcy50b3RhbFJvd3MgPSB0b3RhbFJvd3M7XG5cbiAgICAgICAgLy8gZml4IGJ1ZyBmb3IgdGhlIHNjcm9sbFRvIHRoYXQgZG9lc24ndCB3b3JrIG9uIGVkZ2UgZGl2ICwgbm90IHdpbmRvd1xuICAgICAgICAvLyBjb25zdCBzY3JvbGxpbmdFbGVtZW50ID0gdGhpcy5nZXRQYXJlbnRDb250YWluZXIoKTtcbiAgICAgICAgLy8gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUbygwLCAwKTtcblxuICAgICAgICB0aGlzLmNsZWFuSXRlbXMoKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zKGl0ZW1zKTtcblxuICAgICAgICB0aGlzLnNldExheW91dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSXRlbXMoaXRlbXM6IE9iamVjdHNEYXRhUm93W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJdGVtcyA9IHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgICAgIHRoaXMuaXRlbXNDb3VudGVyID0gaXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHVwZGF0ZUl0ZW0oZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgLy8gVXBkYXRlIGl0ZW1zIGxpc3RcbiAgICAgICAgaW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaSAmJiBpLlVJRCA9PT0gZGF0YS5VSUQpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zW2luZGV4XSA9IGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgc2Nyb2xsSXRlbXMgbGlzdFxuICAgICAgICBpbmRleCA9IHRoaXMuc2Nyb2xsSXRlbXMuZmluZEluZGV4KChpKSA9PiBpICYmIGkuVUlEID09PSBkYXRhLlVJRCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnNjcm9sbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxJdGVtc1tpbmRleF0gPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNoYW5nZXMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldElzSXRlbUVkaXRhYmxlKHVpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbHRlcigoeCkgPT4geC5VSUQudG9TdHJpbmcoKSA9PT0gdWlkKTtcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bMF0uSXNFZGl0YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEl0ZW1EYXRhQnlJRCh1aWQ6IHN0cmluZyk6IE9iamVjdHNEYXRhUm93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5VSUQudG9TdHJpbmcoKSA9PT0gdWlkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidG90YWxSb3dzID09IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicGVwLWJvcmRlci1ib3R0b21cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZS1tcyBuby1kYXRhXCI+XG4gICAgICAgICAgICB7eyAobm9EYXRhRm91bmRNc2cgPyBub0RhdGFGb3VuZE1zZyA6ICdMSVNULk5PX0RBVEFfRk9VTkQnKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibm8tZGF0YS1zdWdnZXN0aW9uc1wiPlxuICAgICAgICA8cCBjbGFzcz1cInN1Z2dlc3Rpb25zLXRpdGxlIHRpdGxlLXhzXCI+XG4gICAgICAgICAgICB7eyAnTElTVC5OT19EQVRBX0ZPVU5EX1NVR0dFU1RJT05TX1RJVExFJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwic3VnZ2VzdGlvbnMtbGlzdCBib2R5LWxnXCIgW2lubmVySHRtbF09XCInTElTVC5OT19EQVRBX0ZPVU5EX1NVR0dFU1RJT05TX0xJU1QnIHwgdHJhbnNsYXRlXCI+PC91bD5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUm93cyA+IDBcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNUYWJsZVwiICN0YWJsZUhlYWRlciBjbGFzcz1cInRhYmxlLWhlYWRlclwiIChtb3VzZXVwKT1cIm9uTGlzdFJlc2l6ZUVuZCgkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25MaXN0SGVhZGVyTW91c2VFbnRlcigkZXZlbnQpXCIgKG1vdXNlbGVhdmUpPVwib25MaXN0SGVhZGVyTW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlbW92ZSk9XCJvbkxpc3RSZXNpemUoJGV2ZW50KVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXItcGFkZGluZy10b3BcIj48L2Rpdj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwidGFibGUtaGVhZGVyLWZpZWxkc2V0XCI+XG4gICAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdWlDb250cm9sPy5Db250cm9sRmllbGRzOyBsZXQgaiA9IGluZGV4XCIgY2xhc3M9XCJoZWFkZXItY29sdW1uIHB1bGwtbGVmdCBmbGlwXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogZmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgfVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtcmVzaXppbmcnOiBmaWVsZC5BcGlOYW1lID09PSBwcmVzc2VkQ29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1maXJzdCc6IGogPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWxhc3QnOiBqID09PSB1aUNvbnRyb2w/LkNvbnRyb2xGaWVsZHM/Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiZmllbGQuVGl0bGUgIT0gJydcIiBpZD1cInt7IGZpZWxkLkFwaU5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItbGFiZWwgYm9keS1zbSBwdWxsLWxlZnQgZmxpcCB0ZXh0LWFsaWduLXt7IGZpZWxkLkxheW91dC5YQWxpZ25tZW50IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZmllbGQuVGl0bGUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLlRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImZpZWxkLlRpdGxlID09ICcnXCIgaWQ9XCJ7eyBmaWVsZC5BcGlOYW1lIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWxhYmVsIGJvZHktc20gcHVsbC1sZWZ0IGZsaXBcIj4mbmJzcDs8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdXBwb3J0UmVzaXppbmdcIiBjbGFzcz1cInJlc2l6ZS1ib3ggcHVsbC1yaWdodCBmbGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25MaXN0UmVzaXplU3RhcnQoJGV2ZW50LCBmaWVsZC5BcGlOYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwbGl0dGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgI25vVmlydHVhbFNjcm9sbENvbnQgW25nQ2xhc3NdPVwieyAndGFibGUtYm9keSc6IGlzVGFibGUsICdjYXJkcy1ib2R5JzogIWlzVGFibGUgfVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdERhdGFcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFRvdGFsc1wiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdERhdGE+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzY3JvbGxJdGVtczsgbGV0IGkgPSBpbmRleDsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgdHJhY2tCeTogdHJhY2tCeUZ1bmNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGFibGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIiAobW91c2VlbnRlcik9XCJvblRhYmxlUm93TW91c2VFbnRlcigkZXZlbnQsIGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSlcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uVGFibGVSb3dNb3VzZUxlYXZlKCRldmVudCwgaXRlbT8uVUlELCBpdGVtPy5UeXBlKVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBnZXRJc0l0ZW1TZWxlY3RlZChpdGVtPy5VSUQsIGl0ZW0/LlR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IHNlbGVjdGVkSXRlbUlkXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBjYWxjdWxhdGVkT2JqZWN0SGVpZ2h0LCB2aXNpYmlsaXR5OiBzaG93SXRlbXMgfHwgaXRlbSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nIH1cIj5cbiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJ0YWJsZS1yb3ctZmllbGRzZXRcIiBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogaXRlbT8uQmFja2dyb3VuZENvbG9yIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBbY2FuRWRpdE9iamVjdF09XCIhZGlzYWJsZWQgJiYgaXRlbT8uSXNFZGl0YWJsZVwiIC0tPlxuICAgICAgICAgICAgICAgICAgICA8cGVwLWludGVybmFsLWZvcm0gW2NoZWNrRm9yQ2hhbmdlc109XCJjaGVja0ZvckNoYW5nZXNcIiBbbGF5b3V0XT1cInVpQ29udHJvbFwiIFtkYXRhXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkVkaXRPYmplY3RdPVwiIWRpc2FibGVkXCIgW29iamVjdElkXT1cIm9iamVjdElkXCIgW3BhcmVudElkXT1cInBhcmVudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hDb2RlXT1cInNlYXJjaENvZGVcIiBbbG9ja0V2ZW50c109XCJkaXNhYmxlU2VsZWN0aW9uSXRlbXNcIiBbbGF5b3V0VHlwZV09XCIndGFibGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IHNlbGVjdGVkSXRlbUlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IGhvdmVyZWRJdGVtSWQpICYmIGRldmljZUhhc01vdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZmllbGRDbGljayk9XCJvbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbUNsaWNrZWQoJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3BlcC1pbnRlcm5hbC1mb3JtPlxuICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RhYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJpdGVtQ2xhc3NcIiAobW91c2VlbnRlcik9XCJvbkNhcmRNb3VzZUVudGVyKCRldmVudCwgaXRlbT8uVUlELCBpdGVtPy5UeXBlKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DYXJkTW91c2VMZWF2ZSgkZXZlbnQsIGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSlcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZ2V0SXNJdGVtU2VsZWN0ZWQoaXRlbT8uVUlELCBpdGVtPy5UeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkOiBpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBzZWxlY3RlZEl0ZW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYXJkLXZpZXcnOiB2aWV3VHlwZSA9PT0gJ2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lLXZpZXcnOiB2aWV3VHlwZSA9PT0gJ2xpbmVzJ1xuICAgICAgICAgICAgICAgICAgICB9XCIgY2xhc3M9XCJwdWxsLWxlZnQgZmxpcFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGNhbGN1bGF0ZWRPYmplY3RIZWlnaHQsIHZpc2liaWxpdHk6IHNob3dJdGVtcyB8fCBpdGVtID8gJ3Zpc2libGUnIDogJ2hpZGRlbicgfVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gW2NhbkVkaXRPYmplY3RdPVwiIWRpc2FibGVkICYmIGl0ZW0/LklzRWRpdGFibGVcIiAtLT5cbiAgICAgICAgICAgICAgICA8cGVwLWludGVybmFsLWZvcm0gW2NoZWNrRm9yQ2hhbmdlc109XCJjaGVja0ZvckNoYW5nZXNcIiBbbGF5b3V0XT1cInVpQ29udHJvbFwiIFtkYXRhXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbY2FuRWRpdE9iamVjdF09XCIhZGlzYWJsZWRcIiBbb2JqZWN0SWRdPVwiIG9iamVjdElkXCIgW3BhcmVudElkXT1cInBhcmVudElkXCIgW3NlYXJjaENvZGVdPVwic2VhcmNoQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2NrRXZlbnRzXT1cImRpc2FibGVTZWxlY3Rpb25JdGVtc1wiIFtsYXlvdXRUeXBlXT1cIidjYXJkJ1wiIFtpc0FjdGl2ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbT8uVUlEICsgU0VQQVJBVE9SICsgaXRlbT8uVHlwZSA9PT0gc2VsZWN0ZWRJdGVtSWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBob3ZlcmVkSXRlbUlkKSAmJiBkZXZpY2VIYXNNb3VzZVxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZmllbGRDbGljayk9XCJvbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtQ2xpY2tlZCgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgPC9wZXAtaW50ZXJuYWwtZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdFRvdGFscz5cbiAgICA8ZGl2ICpuZ0lmPVwidG90YWxzUm93Py5sZW5ndGggPiAwICYmIHRvdGFsc1Jvdy5sZW5ndGggPD0gdWlDb250cm9sPy5Db250cm9sRmllbGRzLmxlbmd0aFwiIGNsYXNzPVwidGFibGUtdG90YWxcIj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwidGFibGUtaGVhZGVyLWZpZWxkc2V0XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB1aUNvbnRyb2w/LkNvbnRyb2xGaWVsZHM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInRvdGFsLWNvbHVtbiBwdWxsLWxlZnQgZmxpcFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogZmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgfVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRvdGFsLWxhYmVsIGJvZHktc20gdGV4dC1hbGlnbi17eyBmaWVsZC5MYXlvdXQuWEFsaWdubWVudCB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB0b3RhbHNSb3dbal0gfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
513
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFNBQVMsR0FLWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBSUgsVUFBVSxHQUViLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQWdCakMsTUFBTSxPQUFPLHdCQUF3QjtJQXFFakMsWUFDWSxPQUFtQixFQUNuQixhQUErQixFQUMvQixFQUFxQixFQUNyQixRQUFtQjtRQUhuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBeEV0QixtQkFBYyxHQUFHLGlCQUFpQixDQUFDO1FBQ25DLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVoQyxRQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDVCxhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNmLGVBQVUsR0FBRyxHQUFHLENBQUM7UUFDMUIsa0NBQWtDO1FBQ3pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQXFCLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXhCLFlBQVk7UUFDWixnR0FB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Z0JBQ0UsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIFBlcExheW91dFNlcnZpY2UsXG4gICAgVUlDb250cm9sLFxuICAgIFVJQ29udHJvbEZpZWxkLFxuICAgIEZJRUxEX1RZUEUsXG4gICAgT2JqZWN0c0RhdGFSb3csXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7XG4gICAgSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQsXG4gICAgSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQsXG59IGZyb20gJy4vZm9ybS5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIFBlcExpc3RWaWV3VHlwZSA9ICdjYXJkcycgfCAnbGluZXMnIHwgJ3RhYmxlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtaW50ZXJuYWwtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ludGVybmFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ludGVybmFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcod2luZG93OnJlc2l6ZSknOiAnd2luUmVzaXplKCRldmVudCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcEludGVybmFsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIG5vRGF0YUZvdW5kTXNnID0gJ0l0ZW1zIG5vdCBmb3VuZCc7XG4gICAgQElucHV0KCkgaGlkZUFsbFNlbGVjdGlvbkluTXVsdGkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRvcCA9IC0xO1xuICAgIEBJbnB1dCgpIG9iamVjdElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHBhcmVudElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHNlYXJjaENvZGUgPSAnMCc7XG4gICAgLy8gQElucHV0KCkgc2hvd1RvcEJvcmRlciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHN1cHBvcnRSZXNpemluZyA9IHRydWU7XG4gICAgQElucHV0KCkgcGFyZW50U2Nyb2xsOiBFbGVtZW50IHwgV2luZG93ID0gbnVsbDtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVFdmVudHMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlU2VsZWN0aW9uSXRlbXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB0b3RhbHNSb3cgPSBbXTtcblxuICAgIC8vIEBPdXRwdXQoKVxuICAgIC8vIGl0ZW1DbGljazogRXZlbnRFbWl0dGVyPElQZXBMaXN0SXRlbUNsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwTGlzdEl0ZW1DbGlja0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKVxuICAgIGZpZWxkQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudD4oKTtcbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdub1ZpcnR1YWxTY3JvbGxDb250Jykgbm9WaXJ0dWFsU2Nyb2xsQ29udDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCd0YWJsZUhlYWRlcicpIHRhYmxlSGVhZGVyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbENCJykgc2VsZWN0QWxsQ0I6IGFueTtcblxuICAgIHB1YmxpYyB1aUNvbnRyb2w6IFVJQ29udHJvbCA9IG51bGw7XG4gICAgcHVibGljIHRvdGFsUm93cyA9IC0xO1xuICAgIGl0ZW1DbGFzczogc3RyaW5nO1xuICAgIGlzVGFibGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9pdGVtczogQXJyYXk8T2JqZWN0c0RhdGFSb3c+ID0gbnVsbDtcbiAgICBnZXQgaXRlbXMoKTogQXJyYXk8T2JqZWN0c0RhdGFSb3c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cblxuICAgIC8vIGlzQ2FyZFZpZXcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGl0ZW1zQ291bnRlciA9IDA7XG4gICAgc2hvd0l0ZW1zID0gdHJ1ZTtcbiAgICB2aWV3VHlwZTogUGVwTGlzdFZpZXdUeXBlO1xuICAgIHNjcm9sbEl0ZW1zOiBBcnJheTxPYmplY3RzRGF0YVJvdz47XG5cbiAgICBwdWJsaWMgU0VQQVJBVE9SID0gJywnO1xuXG4gICAgbmF0aXZlV2luZG93OiBhbnkgPSBudWxsO1xuXG4gICAgc2VsZWN0ZWRJdGVtSWQgPSAnJztcbiAgICBob3ZlcmVkSXRlbUlkID0gJyc7XG5cbiAgICBwcml2YXRlIGxvY2tFdmVudHMgPSBmYWxzZTtcbiAgICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gMDtcblxuICAgIGRldmljZUhhc01vdXNlID0gZmFsc2U7XG5cbiAgICAvLyBoZWFkZXJJc0luRm9jdXMgPSBmYWxzZTtcblxuICAgIC8vIEZvciByZXNpemVcbiAgICBwcmVzc2VkQ29sdW1uID0gJyc7XG4gICAgc3RhcnRYID0gMDtcbiAgICBzdGFydFdpZHRoID0gMDtcbiAgICB0YWJsZVN0YXJ0V2lkdGggPSAwO1xuXG4gICAgaXNVc2VyU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBjaGVja0ZvckNoYW5nZXM6IGFueSA9IG51bGw7XG4gICAgdXNlVmlydHVhbFNjcm9sbCA9IHRydWU7XG4gICAgY2FsY3VsYXRlZE9iamVjdEhlaWdodDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7XG4gICAgICAgIHRoaXMubmF0aXZlV2luZG93ID0gd2luZG93O1xuICAgICAgICB0aGlzLmRldmljZUhhc01vdXNlID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmdldERldmljZUhhc01vdXNlKCk7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vbk1vdXNlT3ZlciQuc3Vic2NyaWJlKChkZXZpY2VIYXNNb3VzZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXZpY2VIYXNNb3VzZSA9IGRldmljZUhhc01vdXNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IDA7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXJXaWR0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMudmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgLy8gICAgIHRoaXMudmFsdWVDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAodGhpcy5pdGVtQ2xpY2spIHtcbiAgICAgICAgLy8gICAgIHRoaXMuaXRlbUNsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHRoaXMuZmllbGRDbGljaykge1xuICAgICAgICAvLyAgICAgdGhpcy5maWVsZENsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBzZXRDb250YWluZXJXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGVja0JveFdpZHRoID0gMDtcblxuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSA0MDsgLy8gdGhlIHRhYmxlIHJvdyBoZWlnaHQgKDIuNXJlbSAqIDE2Zm9udC1zaXplKS5cbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgY29udGFpbmVyLWZsdWlkIGNsYXNzIHBhZGRpbmcgbGVmdCArIHJpZ2h0ICsgYm9yZGVyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckZsdWlkU3BhY2luZyA9XG4gICAgICAgICAgICBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCwgMTApICsgcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0LCAxMCk7XG5cbiAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID1cbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCA+IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICAgIDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgaWYgdmVydGljYWwgc2Nyb2xsIHNob3VsZCBhcHBlYXIsIGlmIHNvIHNldCB0aGUgc2Nyb2xsIHdpZHRoLiAodGhpcy50b3RhbFJvd3MgKyAxKSArIDEgaXMgZm9yIHRoZSBoZWFkZXIgcm93LlxuICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9XG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIuY2xpZW50SGVpZ2h0IDwgcm93SGVpZ2h0ICogKHRoaXMudG90YWxSb3dzICsgMSlcbiAgICAgICAgICAgICAgICA/IDE4XG4gICAgICAgICAgICAgICAgOiAwOyAvLyAxOCBpcyB0aGUgZGVmYXVsdCBzY3JvbGwgd2lkdGguXG5cbiAgICAgICAgLy8gVGhlIHNlbGVjdGlvbkNoZWNrQm94V2lkdGggd2lkdGggKyBjb250YWluZXJGbHVpZFNwYWNpbmcgKyBzY3JvbGxXaWR0aC5cbiAgICAgICAgY29uc3Qgcm93SGVhZGVyV2lkdGhUb1N1YiA9XG4gICAgICAgICAgICBjb250YWluZXJGbHVpZFNwYWNpbmcgKyBzZWxlY3Rpb25DaGVja0JveFdpZHRoICsgc2Nyb2xsV2lkdGg7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBwYXJlbnRDb250YWluZXIub2Zmc2V0V2lkdGggLSByb3dIZWFkZXJXaWR0aFRvU3ViO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFuSXRlbXMoKTtcbiAgICAgICAgdGhpcy51aUNvbnRyb2wgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlSXRlbXMoaXNWaXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0l0ZW1zID0gaXNWaXNpYmxlO1xuICAgICAgICB0aGlzLmxvY2tFdmVudHMgPSAhaXNWaXNpYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsSXRlbXMoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGxvYWRJbkNodW5rcyA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIH1cblxuICAgIGdldFVuaXFJdGVtSWQoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlID0gJycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbUlkICsgdGhpcy5TRVBBUkFUT1IgKyBpdGVtVHlwZTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID09PSAwIHx8XG4gICAgICAgICAgICAhdGhpcy51aUNvbnRyb2wgfHxcbiAgICAgICAgICAgICF0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzIHx8XG4gICAgICAgICAgICB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudWlDb250cm9sLkNvbnRyb2xGaWVsZHMuZm9yRWFjaCgoY2YpID0+IHtcbiAgICAgICAgICAgIGlmIChjZi5Db2x1bW5XaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNmLkNvbHVtbldpZHRoID0gMTA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGFibGUgJiZcbiAgICAgICAgICAgICAgICAoY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLkltYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbmRpY2F0b3JzIHx8ID8/P1xuICAgICAgICAgICAgICAgICAgICBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuU2lnbmF0dXJlIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbFF1YW50aXR5U2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlckludGVnZXJGb3JNYXRyaXggfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlclJlYWxGb3JNYXRyaXggfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLlBhY2thZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuQXBpTmFtZSA9PT0gJ1VuaXRzUXVhbnRpdHknIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkFwaU5hbWUgPT09ICdRdWFudGl0eVNlbGVjdG9yJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNmLkxheW91dC5YQWxpZ25tZW50ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNkWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIGNvbHVtbnMgd2lkdGguXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcldpZHRoIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGFpbmVyV2lkdGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY0NvbHVtbnNXaWR0aCgpO1xuICAgICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY0NvbHVtbnNXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZml4ZWRNdWx0aXBsZSA9IDMuNzg7IC8vIGZvciBjb252ZXJ0aW5nIGVtIHRvIHBpeGVsLlxuICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hlY2tCb3hXaWR0aCA9IDA7XG5cbiAgICAgICAgLy8gSXMgdGFibGUgQU5EIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gb2Ygd2lkdGggdHlwZSBvZiBwZXJjZW50YWdlLlxuICAgICAgICBpZiAodGhpcy5pc1RhYmxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51aUNvbnRyb2wgJiYgdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2YpID0+IGNmLkNvbHVtbldpZHRoVHlwZSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICApLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBjb2x1bW5zIHNpemUgaXMgZml4ZWQgYW5kIHRoZSB0b3RhbCBpcyBzbWFsbCB0aGVuIHRoZSBjb250YWluZXIgY2hhbmdlIGl0IHRvIHBlcmNlbnRhZ2UuXG4gICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW5XaWR0aE9mVHlwZVBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsRml4ZWRDb2xzV2lkdGggPSB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLm1hcChcbiAgICAgICAgICAgICAgICAoY2YpID0+IGNmLkNvbHVtbldpZHRoICogZml4ZWRNdWx0aXBsZVxuICAgICAgICAgICAgKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCk7XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IHRvdGFsRml4ZWRDb2xzV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdG90YWxDYWxjQ29sc1dpZHRoID0gMDtcblxuICAgICAgICAvLyBDYWxjIGJ5IHBlcmNlbnRhZ2VcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbENvbHNXaWR0aDogbnVtYmVyID0gdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5tYXAoXG4gICAgICAgICAgICAgICAgKGNmKSA9PiBjZi5Db2x1bW5XaWR0aFxuICAgICAgICAgICAgKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1aUNvbnRyb2xGaWVsZDogVUlDb250cm9sRmllbGQgPSB0aGlzLnVpQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAuQ29udHJvbEZpZWxkc1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsY0NvbHVtbldpZHRoUGVyY2VudGFnZSA9XG4gICAgICAgICAgICAgICAgICAgICgxMDAgLyB0b3RhbENvbHNXaWR0aCkgKiB1aUNvbnRyb2xGaWVsZC5Db2x1bW5XaWR0aDtcblxuICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbnRhaW5lcldpZHRoICogY2FsY0NvbHVtbldpZHRoUGVyY2VudGFnZSkgLyAxMDBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICdjYWxjKDEwMCUgLSAnICsgdG90YWxDYWxjQ29sc1dpZHRoICsgJ3B4KSc7IC8vIEZvciAxMDAlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPSB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDYWxjQ29sc1dpZHRoICs9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAnaW5oZXJpdCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdWlDb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkID0gdGhpcy51aUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgLkNvbnRyb2xGaWVsZHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaXhlZFdpZHRoID0gTWF0aC5mbG9vcihcbiAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuQ29sdW1uV2lkdGggKiBmaXhlZE11bHRpcGxlXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rml4ZWRXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rml4ZWRXaWR0aCAtIDQgKyAncHgnOyAvLyAtNCBmb3IgdGhlIHJvdyBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXhlZFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0b3RhbENhbGNDb2xzV2lkdGggKz0gY3VycmVudEZpeGVkV2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICB0b3RhbENhbGNDb2xzV2lkdGggKyBzZWxlY3Rpb25DaGVja0JveFdpZHRoICsgJ3B4J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFJlc2l6ZURhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhcnRYID0gMDtcbiAgICAgICAgdGhpcy5zdGFydFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy50YWJsZVN0YXJ0V2lkdGggPSAwO1xuICAgICAgICB0aGlzLnByZXNzZWRDb2x1bW4gPSAnJztcbiAgICB9XG5cbiAgICBvbkxpc3RSZXNpemVTdGFydChldmVudCwgY29sdW1uS2V5KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJlc3NlZENvbHVtbiA9IGNvbHVtbktleTtcbiAgICAgICAgdGhpcy5zdGFydFggPSBldmVudC54O1xuICAgICAgICB0aGlzLnN0YXJ0V2lkdGggPSBldmVudC50YXJnZXQuY2xvc2VzdCgnLmhlYWRlci1jb2x1bW4nKS5vZmZzZXRXaWR0aDtcbiAgICAgICAgLy8gU2V0IHRoZSB0YWJsZVN0YXJ0V2lkdGggdG8gdGhlIGNvbnRhaW5lciBvZmZzZXRXaWR0aFxuICAgICAgICB0aGlzLnRhYmxlU3RhcnRXaWR0aCA9IHRoaXMubm9WaXJ0dWFsU2Nyb2xsQ29udC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cblxuICAgIG9uTGlzdFJlc2l6ZShldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcmVzc2VkQ29sdW1uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoVG9BZGQgPSB0aGlzLmxheW91dFNlcnZpY2UuaXNSdGwoKVxuICAgICAgICAgICAgICAgID8gdGhpcy5zdGFydFggLSBldmVudC54XG4gICAgICAgICAgICAgICAgOiBldmVudC54IC0gdGhpcy5zdGFydFg7XG5cbiAgICAgICAgICAgIC8vIFNldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBhbmQgdGhlIGNvbnRhaW5lciBvZiB0aGUgd2hvbGUgY29sdW1ucy5cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0V2lkdGggKyB3aWR0aFRvQWRkID49IDQ4IHx8IHdpZHRoVG9BZGQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsQ2FsY0NvbHNXaWR0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCA9IHRoaXMudWlDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29udHJvbEZpZWxkc1tpbmRleF07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjIHRoZSBsYXN0IGNvbHVtbiBvbmx5IGluIHBlcmNlbnRhZ2UgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbGMoMTAwJSAtICcgKyB0b3RhbENhbGNDb2xzV2lkdGggKyAncHgpJzsgLy8gRm9yIDEwMCVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVpQ29udHJvbEZpZWxkLkFwaU5hbWUgPT09IHRoaXMucHJlc3NlZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpZHRoICsgd2lkdGhUb0FkZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCAtIDQgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1aUNvbnRyb2xGaWVsZC5BcGlOYW1lID09PSB0aGlzLnByZXNzZWRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFdpZHRoICsgd2lkdGhUb0FkZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdG90YWxDYWxjQ29sc1dpZHRoICs9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0YXJ0V2lkdGggKyB3aWR0aFRvQWRkICsgJ3B4J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tGb3JDaGFuZ2VzID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYXJlbnQoZWwsIHBhcmVudFNlbGVjdG9yKTogYW55IHtcbiAgICAgICAgLy8gSWYgbm8gcGFyZW50U2VsZWN0b3IgZGVmaW5lZCB3aWxsIGJ1YmJsZSB1cCBhbGwgdGhlIHdheSB0byAqZG9jdW1lbnQqXG4gICAgICAgIGlmIChwYXJlbnRTZWxlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IGRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IFtdO1xuICAgICAgICBsZXQgcCA9IGVsLnBhcmVudE5vZGU7XG5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgcCAmJlxuICAgICAgICAgICAgcC5jbGFzc05hbWUgIT09ICcnICYmXG4gICAgICAgICAgICBwLmNsYXNzTmFtZS5pbmRleE9mKHBhcmVudFNlbGVjdG9yKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yICE9PSBkb2N1bWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG8gPSBwO1xuICAgICAgICAgICAgcCA9IG8ucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocC5jbGFzc05hbWUuaW5kZXhPZihwYXJlbnRTZWxlY3RvcikgPiAtMSkge1xuICAgICAgICAgICAgcGFyZW50LnB1c2gocCk7IC8vIFB1c2ggdGhhdCBwYXJlbnRTZWxlY3RvciB5b3Ugd2FudGVkIHRvIHN0b3AgYXRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIG9uTGlzdFJlc2l6ZUVuZChldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcmVzc2VkQ29sdW1uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50KGV2ZW50LnNyY0VsZW1lbnQsICdyZXNpemUtYm94JykubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UmVzaXplRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UmVzaXplRGF0YSgpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25MaXN0SGVhZGVyTW91c2VFbnRlcihldmVudCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLmhlYWRlcklzSW5Gb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25MaXN0SGVhZGVyTW91c2VMZWF2ZShldmVudCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLmhlYWRlcklzSW5Gb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uTGlzdFJlc2l6ZUVuZChldmVudCk7XG4gICAgICAgIHRoaXMuaW5pdFJlc2l6ZURhdGEoKTtcbiAgICB9XG5cbiAgICBvbkxpc3RDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlRXZlbnRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3Igb3RoZXIgZXZlbnRzIGRvIG5vdGhpbmcuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBldmVudC5zdGFydCA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgICAgIHR5cGVvZiBldmVudC5lbmQgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkT2JqZWN0SGVpZ2h0ID0gZXZlbnQuY2FsY3VsYXRlZENoaWxkSGVpZ2h0ICsgJ3B4JztcblxuICAgICAgICBpZiAoIXRoaXMubG9ja0V2ZW50cykge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVJdGVtcyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEl0ZW1zKGV2ZW50LnN0YXJ0LCBldmVudC5lbmQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlSXRlbXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYXJlbnRDb250YWluZXIoKTogRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFNjcm9sbCA/IHRoaXMucGFyZW50U2Nyb2xsIDogd2luZG93O1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2VkKHZhbHVlQ2hhbmdlOiBJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBvbkN1c3RvbWl6ZUZpZWxkQ2xpY2soXG4gICAgICAgIGN1c3RvbWl6ZUZpZWxkQ2xpY2tlZERhdGE6IElQZXBGb3JtRmllbGRDbGlja0V2ZW50XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpZWxkQ2xpY2suZW1pdChjdXN0b21pemVGaWVsZENsaWNrZWREYXRhKTtcbiAgICB9XG5cbiAgICBnZXRJc0Rpc2FibGVkKGl0ZW06IE9iamVjdHNEYXRhUm93KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVTZWxlY3Rpb25JdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBJc05vdFNlbGVjdGFibGVGb3JBY3Rpb25zID1cbiAgICAgICAgICAgICAgICBpdGVtICYmICFpdGVtLklzU2VsZWN0YWJsZUZvckFjdGlvbnM7XG4gICAgICAgICAgICByZXR1cm4gSXNOb3RTZWxlY3RhYmxlRm9yQWN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldElzSXRlbVNlbGVjdGVkKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZSA9ICcnKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpc1NlbGVjdGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdW5pcUl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcbiAgICAgICAgaXNTZWxlY3RlZCA9IHVuaXFJdGVtSWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVtSWQ7XG5cbiAgICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJdGVtQ2xpY2tlZChcbiAgICAgICAgaXRlbUlkLFxuICAgICAgICBpc1NlbGVjdGFibGVGb3JBY3Rpb25zOiBib29sZWFuLFxuICAgICAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgICAgICBpc0NoZWNrZWQ6IGJvb2xlYW5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdW5pcUl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcblxuICAgICAgICAvLyBzZWxlY3QgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIC8vIFNldCBzZWxldGVkIGl0ZW1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSB1bmlxSXRlbUlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSWQgPT09IHVuaXFJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtQ2xpY2tlZChlOiBhbnksIGl0ZW06IE9iamVjdHNEYXRhUm93KTogdm9pZCB7XG4gICAgICAgIC8vIFNldCBzZWxldGVkIGl0ZW1cbiAgICAgICAgY29uc3QgaXRlbUlkID0gaXRlbS5VSUQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBpdGVtLlR5cGUudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0uSXNTZWxlY3RhYmxlRm9yQWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcbiAgICAgICAgICAgIGlzQ2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEl0ZW1DbGlja2VkKFxuICAgICAgICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICAgICAgICBpdGVtLklzU2VsZWN0YWJsZUZvckFjdGlvbnMsXG4gICAgICAgICAgICAgICAgaXRlbVR5cGUsXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5pdGVtQ2xpY2suZW1pdCh7IHNvdXJjZTogaXRlbSwgdmlld1R5cGU6IHRoaXMudmlld1R5cGUgfSk7XG4gICAgfVxuXG4gICAgb25UYWJsZVJvd01vdXNlRW50ZXIoZXZlbnQ6IGFueSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZUhhc01vdXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxSXRlbUlkID0gdGhpcy5nZXRVbmlxSXRlbUlkKGl0ZW1JZCwgaXRlbVR5cGUpO1xuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtSWQgPSB1bmlxSXRlbUlkO1xuICAgIH1cblxuICAgIG9uVGFibGVSb3dNb3VzZUxlYXZlKGV2ZW50OiBhbnksIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG92ZXJlZEl0ZW1JZCA9ICcnO1xuICAgIH1cblxuICAgIG9uQ2FyZE1vdXNlRW50ZXIoZXZlbnQ6IGFueSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZUhhc01vdXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxSXRlbUlkID0gdGhpcy5nZXRVbmlxSXRlbUlkKGl0ZW1JZCwgaXRlbVR5cGUpO1xuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtSWQgPSB1bmlxSXRlbUlkO1xuICAgIH1cblxuICAgIG9uQ2FyZE1vdXNlTGVhdmUoZXZlbnQ6IGFueSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbUlkID0gJyc7XG4gICAgfVxuXG4gICAgLy8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHJlc2l6ZSArIGFuaW1hdGlvbiBlbmRcbiAgICB3aW5SZXNpemUoZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gMDtcbiAgICAgICAgdGhpcy5zZXRMYXlvdXQoKTtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuYyhpbmRleDogbnVtYmVyLCBpdGVtOiBPYmplY3RzRGF0YVJvdyk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtICYmIGl0ZW0uVUlEID8gaXRlbS5VSUQgOiBpbmRleDtcbiAgICB9XG5cbiAgICBjbGVhbkl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zQ291bnRlciA9IDA7XG4gICAgICAgIHRoaXMuX2l0ZW1zID1cbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID4gMCA/IEFycmF5PE9iamVjdHNEYXRhUm93Pih0aGlzLnRvdGFsUm93cykgOiBbXTtcbiAgICAgICAgdGhpcy5zY3JvbGxJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPYmplY3RIZWlnaHQgPSAnJztcbiAgICB9XG5cbiAgICBnZXRVSUNvbnRyb2woKTogVUlDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWlDb250cm9sO1xuICAgIH1cblxuICAgIGluaXRMaXN0RGF0YShcbiAgICAgICAgdWlDb250cm9sOiBVSUNvbnRyb2wsXG4gICAgICAgIHRvdGFsUm93czogbnVtYmVyLFxuICAgICAgICBpdGVtczogT2JqZWN0c0RhdGFSb3dbXSxcbiAgICAgICAgdmlld1R5cGU6IFBlcExpc3RWaWV3VHlwZSA9ICd0YWJsZScsXG4gICAgICAgIGl0ZW1DbGFzcyA9ICcnXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB2aWV3VHlwZTtcbiAgICAgICAgdGhpcy5pc1RhYmxlID0gdmlld1R5cGUgPT09ICd0YWJsZSc7XG4gICAgICAgIC8vIHRoaXMuaXNDYXJkVmlldyA9IHZpZXdUeXBlID09PSAnY2FyZHMnO1xuICAgICAgICB0aGlzLnVpQ29udHJvbCA9IHVpQ29udHJvbDtcbiAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSBpdGVtQ2xhc3M7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSAnJztcbiAgICAgICAgdGhpcy50b3RhbFJvd3MgPSB0b3RhbFJvd3M7XG5cbiAgICAgICAgLy8gZml4IGJ1ZyBmb3IgdGhlIHNjcm9sbFRvIHRoYXQgZG9lc24ndCB3b3JrIG9uIGVkZ2UgZGl2ICwgbm90IHdpbmRvd1xuICAgICAgICAvLyBjb25zdCBzY3JvbGxpbmdFbGVtZW50ID0gdGhpcy5nZXRQYXJlbnRDb250YWluZXIoKTtcbiAgICAgICAgLy8gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUbygwLCAwKTtcblxuICAgICAgICB0aGlzLmNsZWFuSXRlbXMoKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zKGl0ZW1zKTtcblxuICAgICAgICB0aGlzLnNldExheW91dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSXRlbXMoaXRlbXM6IE9iamVjdHNEYXRhUm93W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJdGVtcyA9IHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgICAgIHRoaXMuaXRlbXNDb3VudGVyID0gaXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHVwZGF0ZUl0ZW0oZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgLy8gVXBkYXRlIGl0ZW1zIGxpc3RcbiAgICAgICAgaW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaSAmJiBpLlVJRCA9PT0gZGF0YS5VSUQpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zW2luZGV4XSA9IGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgc2Nyb2xsSXRlbXMgbGlzdFxuICAgICAgICBpbmRleCA9IHRoaXMuc2Nyb2xsSXRlbXMuZmluZEluZGV4KChpKSA9PiBpICYmIGkuVUlEID09PSBkYXRhLlVJRCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnNjcm9sbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxJdGVtc1tpbmRleF0gPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNoYW5nZXMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldElzSXRlbUVkaXRhYmxlKHVpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbHRlcigoeCkgPT4geC5VSUQudG9TdHJpbmcoKSA9PT0gdWlkKTtcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bMF0uSXNFZGl0YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEl0ZW1EYXRhQnlJRCh1aWQ6IHN0cmluZyk6IE9iamVjdHNEYXRhUm93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5VSUQudG9TdHJpbmcoKSA9PT0gdWlkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidG90YWxSb3dzID09IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicGVwLWJvcmRlci1ib3R0b21cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZS14bCBuby1kYXRhXCI+XG4gICAgICAgICAgICB7eyAobm9EYXRhRm91bmRNc2cgPyBub0RhdGFGb3VuZE1zZyA6ICdMSVNULk5PX0RBVEFfRk9VTkQnKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibm8tZGF0YS1zdWdnZXN0aW9uc1wiPlxuICAgICAgICA8cCBjbGFzcz1cInN1Z2dlc3Rpb25zLXRpdGxlIHRpdGxlLWxnXCI+XG4gICAgICAgICAgICB7eyAnTElTVC5OT19EQVRBX0ZPVU5EX1NVR0dFU1RJT05TX1RJVExFJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwic3VnZ2VzdGlvbnMtbGlzdCBib2R5LWxnXCIgW2lubmVySHRtbF09XCInTElTVC5OT19EQVRBX0ZPVU5EX1NVR0dFU1RJT05TX0xJU1QnIHwgdHJhbnNsYXRlXCI+PC91bD5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUm93cyA+IDBcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNUYWJsZVwiICN0YWJsZUhlYWRlciBjbGFzcz1cInRhYmxlLWhlYWRlclwiIChtb3VzZXVwKT1cIm9uTGlzdFJlc2l6ZUVuZCgkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25MaXN0SGVhZGVyTW91c2VFbnRlcigkZXZlbnQpXCIgKG1vdXNlbGVhdmUpPVwib25MaXN0SGVhZGVyTW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlbW92ZSk9XCJvbkxpc3RSZXNpemUoJGV2ZW50KVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXItcGFkZGluZy10b3BcIj48L2Rpdj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwidGFibGUtaGVhZGVyLWZpZWxkc2V0XCI+XG4gICAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdWlDb250cm9sPy5Db250cm9sRmllbGRzOyBsZXQgaiA9IGluZGV4XCIgY2xhc3M9XCJoZWFkZXItY29sdW1uIHB1bGwtbGVmdCBmbGlwXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogZmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgfVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtcmVzaXppbmcnOiBmaWVsZC5BcGlOYW1lID09PSBwcmVzc2VkQ29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1maXJzdCc6IGogPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWxhc3QnOiBqID09PSB1aUNvbnRyb2w/LkNvbnRyb2xGaWVsZHM/Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiZmllbGQuVGl0bGUgIT0gJydcIiBpZD1cInt7IGZpZWxkLkFwaU5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItbGFiZWwgYm9keS1zbSBwdWxsLWxlZnQgZmxpcCB0ZXh0LWFsaWduLXt7IGZpZWxkLkxheW91dC5YQWxpZ25tZW50IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZmllbGQuVGl0bGUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLlRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImZpZWxkLlRpdGxlID09ICcnXCIgaWQ9XCJ7eyBmaWVsZC5BcGlOYW1lIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWxhYmVsIGJvZHktc20gcHVsbC1sZWZ0IGZsaXBcIj4mbmJzcDs8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdXBwb3J0UmVzaXppbmdcIiBjbGFzcz1cInJlc2l6ZS1ib3ggcHVsbC1yaWdodCBmbGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25MaXN0UmVzaXplU3RhcnQoJGV2ZW50LCBmaWVsZC5BcGlOYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwbGl0dGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgI25vVmlydHVhbFNjcm9sbENvbnQgW25nQ2xhc3NdPVwieyAndGFibGUtYm9keSc6IGlzVGFibGUsICdjYXJkcy1ib2R5JzogIWlzVGFibGUgfVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdERhdGFcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFRvdGFsc1wiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdERhdGE+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzY3JvbGxJdGVtczsgbGV0IGkgPSBpbmRleDsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgdHJhY2tCeTogdHJhY2tCeUZ1bmNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGFibGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIiAobW91c2VlbnRlcik9XCJvblRhYmxlUm93TW91c2VFbnRlcigkZXZlbnQsIGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSlcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uVGFibGVSb3dNb3VzZUxlYXZlKCRldmVudCwgaXRlbT8uVUlELCBpdGVtPy5UeXBlKVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBnZXRJc0l0ZW1TZWxlY3RlZChpdGVtPy5VSUQsIGl0ZW0/LlR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IHNlbGVjdGVkSXRlbUlkXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBjYWxjdWxhdGVkT2JqZWN0SGVpZ2h0LCB2aXNpYmlsaXR5OiBzaG93SXRlbXMgfHwgaXRlbSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nIH1cIj5cbiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJ0YWJsZS1yb3ctZmllbGRzZXRcIiBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogaXRlbT8uQmFja2dyb3VuZENvbG9yIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBbY2FuRWRpdE9iamVjdF09XCIhZGlzYWJsZWQgJiYgaXRlbT8uSXNFZGl0YWJsZVwiIC0tPlxuICAgICAgICAgICAgICAgICAgICA8cGVwLWludGVybmFsLWZvcm0gW2NoZWNrRm9yQ2hhbmdlc109XCJjaGVja0ZvckNoYW5nZXNcIiBbbGF5b3V0XT1cInVpQ29udHJvbFwiIFtkYXRhXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkVkaXRPYmplY3RdPVwiIWRpc2FibGVkXCIgW29iamVjdElkXT1cIm9iamVjdElkXCIgW3BhcmVudElkXT1cInBhcmVudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hDb2RlXT1cInNlYXJjaENvZGVcIiBbbG9ja0V2ZW50c109XCJkaXNhYmxlU2VsZWN0aW9uSXRlbXNcIiBbbGF5b3V0VHlwZV09XCIndGFibGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IHNlbGVjdGVkSXRlbUlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IGhvdmVyZWRJdGVtSWQpICYmIGRldmljZUhhc01vdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZmllbGRDbGljayk9XCJvbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbUNsaWNrZWQoJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3BlcC1pbnRlcm5hbC1mb3JtPlxuICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RhYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJpdGVtQ2xhc3NcIiAobW91c2VlbnRlcik9XCJvbkNhcmRNb3VzZUVudGVyKCRldmVudCwgaXRlbT8uVUlELCBpdGVtPy5UeXBlKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DYXJkTW91c2VMZWF2ZSgkZXZlbnQsIGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSlcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZ2V0SXNJdGVtU2VsZWN0ZWQoaXRlbT8uVUlELCBpdGVtPy5UeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkOiBpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBzZWxlY3RlZEl0ZW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYXJkLXZpZXcnOiB2aWV3VHlwZSA9PT0gJ2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lLXZpZXcnOiB2aWV3VHlwZSA9PT0gJ2xpbmVzJ1xuICAgICAgICAgICAgICAgICAgICB9XCIgY2xhc3M9XCJwdWxsLWxlZnQgZmxpcFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGNhbGN1bGF0ZWRPYmplY3RIZWlnaHQsIHZpc2liaWxpdHk6IHNob3dJdGVtcyB8fCBpdGVtID8gJ3Zpc2libGUnIDogJ2hpZGRlbicgfVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gW2NhbkVkaXRPYmplY3RdPVwiIWRpc2FibGVkICYmIGl0ZW0/LklzRWRpdGFibGVcIiAtLT5cbiAgICAgICAgICAgICAgICA8cGVwLWludGVybmFsLWZvcm0gW2NoZWNrRm9yQ2hhbmdlc109XCJjaGVja0ZvckNoYW5nZXNcIiBbbGF5b3V0XT1cInVpQ29udHJvbFwiIFtkYXRhXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbY2FuRWRpdE9iamVjdF09XCIhZGlzYWJsZWRcIiBbb2JqZWN0SWRdPVwiIG9iamVjdElkXCIgW3BhcmVudElkXT1cInBhcmVudElkXCIgW3NlYXJjaENvZGVdPVwic2VhcmNoQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2NrRXZlbnRzXT1cImRpc2FibGVTZWxlY3Rpb25JdGVtc1wiIFtsYXlvdXRUeXBlXT1cIidjYXJkJ1wiIFtpc0FjdGl2ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbT8uVUlEICsgU0VQQVJBVE9SICsgaXRlbT8uVHlwZSA9PT0gc2VsZWN0ZWRJdGVtSWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBob3ZlcmVkSXRlbUlkKSAmJiBkZXZpY2VIYXNNb3VzZVxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZmllbGRDbGljayk9XCJvbkN1c3RvbWl6ZUZpZWxkQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtQ2xpY2tlZCgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgPC9wZXAtaW50ZXJuYWwtZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdFRvdGFscz5cbiAgICA8ZGl2ICpuZ0lmPVwidG90YWxzUm93Py5sZW5ndGggPiAwICYmIHRvdGFsc1Jvdy5sZW5ndGggPD0gdWlDb250cm9sPy5Db250cm9sRmllbGRzLmxlbmd0aFwiIGNsYXNzPVwidGFibGUtdG90YWxcIj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwidGFibGUtaGVhZGVyLWZpZWxkc2V0XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB1aUNvbnRyb2w/LkNvbnRyb2xGaWVsZHM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInRvdGFsLWNvbHVtbiBwdWxsLWxlZnQgZmxpcFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogZmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgfVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRvdGFsLWxhYmVsIGJvZHktc20gdGV4dC1hbGlnbi17eyBmaWVsZC5MYXlvdXQuWEFsaWdubWVudCB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB0b3RhbHNSb3dbal0gfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|