tin-spa 2.7.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/classes/Classes.mjs +7 -1
- package/esm2020/lib/classes/TinCore.mjs +16 -2
- package/esm2020/lib/components/form/form.component.mjs +1 -1
- package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +7 -10
- package/esm2020/lib/components/option/option.component.mjs +1 -1
- package/esm2020/lib/components/select/select.component.mjs +5 -3
- package/esm2020/lib/components/select-internal/select-internal.component.mjs +4 -2
- package/esm2020/lib/components/steps/steps.component.mjs +46 -13
- package/esm2020/lib/components/table/detailsDialog.component.mjs +4 -4
- package/esm2020/lib/components/table/table.component.mjs +28 -20
- package/esm2020/lib/components/table-action/table-action.component.mjs +26 -6
- package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +4 -4
- package/esm2020/lib/components/table-internal/table-internal.component.mjs +29 -20
- package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +4 -4
- package/esm2020/lib/components/table-lite/table-lite.component.mjs +29 -20
- package/esm2020/lib/components/text/text.component.mjs +7 -4
- package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
- package/esm2020/lib/pages/approvals/approvals.component.mjs +10 -100
- package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +14 -9
- package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
- package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
- package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
- package/esm2020/lib/pages/login/login.component.mjs +6 -4
- package/esm2020/lib/pages/profile/profile.component.mjs +1 -1
- package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
- package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
- package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
- package/esm2020/lib/pages/welcome/welcome.component.mjs +1 -1
- package/esm2020/lib/services/button.service.mjs +3 -16
- package/esm2020/lib/services/datalib.service.mjs +180 -4
- package/esm2020/lib/services/dialog.service.mjs +12 -8
- package/esm2020/lib/services/notifications.service.mjs +2 -2
- package/esm2020/lib/services/table-config.service.mjs +24 -6
- package/fesm2015/tin-spa.mjs +426 -258
- package/fesm2015/tin-spa.mjs.map +1 -1
- package/fesm2020/tin-spa.mjs +445 -246
- package/fesm2020/tin-spa.mjs.map +1 -1
- package/lib/classes/Classes.d.ts +11 -1
- package/lib/components/steps/steps.component.d.ts +5 -1
- package/lib/components/table/table.component.d.ts +0 -1
- package/lib/components/table-action/table-action.component.d.ts +4 -1
- package/lib/components/table-internal/table-internal.component.d.ts +0 -1
- package/lib/components/table-lite/table-lite.component.d.ts +0 -1
- package/lib/components/text/text.component.d.ts +2 -1
- package/lib/pages/approvals/approvals.component.d.ts +3 -7
- package/lib/pages/approvals-config/approvals-config.component.d.ts +4 -0
- package/lib/services/button.service.d.ts +0 -2
- package/lib/services/datalib.service.d.ts +13 -0
- package/lib/services/dialog.service.d.ts +2 -2
- package/lib/services/table-config.service.d.ts +4 -0
- package/package.json +1 -1
|
@@ -146,7 +146,7 @@ export class DetailsDialogLite {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
openNestedDetailsDialog(button) {
|
|
149
|
-
this.dialogService.openConfiguredDetailsDialog(button
|
|
149
|
+
this.dialogService.openConfiguredDetailsDialog(button, this.details, DetailsDialogLite).subscribe(result => {
|
|
150
150
|
if (result.action === 'inputChange') {
|
|
151
151
|
this.inputChanged(result.change);
|
|
152
152
|
}
|
|
@@ -242,10 +242,10 @@ export class DetailsDialogLite {
|
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
DetailsDialogLite.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialogLite, deps: [{ token: i1.BreakpointObserver }, { token: i2.LoaderService }, { token: i3.DataServiceLib }, { token: i4.MessageService }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.ButtonService }, { token: i7.DialogService }, { token: i8.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
245
|
-
DetailsDialogLite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialogLite, selector: "spa-detailsDialog-lite", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [field]=\"field\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\"
|
|
245
|
+
DetailsDialogLite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialogLite, selector: "spa-detailsDialog-lite", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [field]=\"field\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='create' && createButton\" color=\"primary\"\r\n (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='edit' && editButton\" color=\"primary\"\r\n (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button matTooltipPosition=\"above\" [matTooltip]=\"btn.tip ?? btn.name | titlecase\" [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i14.FormComponent, selector: "spa-form", inputs: ["files", "data", "config"], outputs: ["buttonClick", "inputChange"] }, { kind: "component", type: i15.AlertComponent, selector: "spa-alert", inputs: ["alertMessages", "data"] }, { kind: "component", type: i16.SelectLiteComponent, selector: "spa-select-lite" }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i17.CamelToWordsPipe, name: "camelToWords" }] });
|
|
246
246
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialogLite, decorators: [{
|
|
247
247
|
type: Component,
|
|
248
|
-
args: [{ selector: 'spa-detailsDialog-lite', template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [field]=\"field\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\"
|
|
248
|
+
args: [{ selector: 'spa-detailsDialog-lite', template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [field]=\"field\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='create' && createButton\" color=\"primary\"\r\n (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='edit' && editButton\" color=\"primary\"\r\n (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button matTooltipPosition=\"above\" [matTooltip]=\"btn.tip ?? btn.name | titlecase\" [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n" }]
|
|
249
249
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }, { type: i2.LoaderService }, { type: i3.DataServiceLib }, { type: i4.MessageService }, { type: i5.MatDialogRef }, { type: i18.DetailsDialogConfig, decorators: [{
|
|
250
250
|
type: Inject,
|
|
251
251
|
args: [MAT_DIALOG_DATA]
|
|
@@ -253,4 +253,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
253
253
|
type: Output
|
|
254
254
|
}] } });
|
|
255
255
|
;
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPL0IsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFvQixrQkFBc0MsRUFBUyxhQUE0QixFQUFRLFdBQTJCLEVBQVMsY0FBOEIsRUFDL0osU0FBMEMsRUFBa0MsYUFBa0MsRUFBVSxhQUE0QixFQUNwSixhQUE0QixFQUFVLFdBQXdCO1FBRnBELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFRLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvSixjQUFTLEdBQVQsU0FBUyxDQUFpQztRQUFrQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNwSixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGdCQUFXLEdB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QkFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPLElBQUksU0FBUyxJQUFJLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO29CQUN4RSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN0QztnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDNUY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OEdBdlJVLGlCQUFpQix5S0FHa0MsZUFBZTtrR0FIbEUsaUJBQWlCLHVHQ2xCOUIsb3pLQWdIQTsyRkQ5RmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLHdCQUF3Qjs7MEJBT3FCLE1BQU07MkJBQUMsZUFBZTs4SEE2RW5FLFdBQVc7c0JBQXBCLE1BQU07O0FBME1SLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBGb3JtQ29uZmlnLCBGaWVsZCwgVGFibGVDb25maWcsIEJ1dHRvbiwgRGV0YWlsc0RpYWxvZ0NvbmZpZywgQWN0aW9uLCBBcGlSZXNwb25zZSwgU3RlcENvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9hZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBDb3JlLCBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UaW5Db3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWRldGFpbHNEaWFsb2ctbGl0ZScsIC8vdW5pcSB0byBsaXRlXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbHNEaWFsb2ctbGl0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbGl0ZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERldGFpbHNEaWFsb2dMaXRlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixwcml2YXRlIGxvYWRlclNlcnZpY2U6IExvYWRlclNlcnZpY2UscHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYixwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGV0YWlsc0RpYWxvZ0xpdGU+LCBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcsIHByaXZhdGUgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpXHJcbiAge1xyXG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcclxuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gdHJ1ZVxyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGNvbnN0IHsgdGFibGVDb25maWcsIHRhYmxlQ29uZmlncywgZm9ybUNvbmZpZywgc3RlcENvbmZpZywgYnV0dG9ucyB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5pbml0aWFsaXplQ29uZmlncyh0aGlzLmRldGFpbHNDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IHRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZ3MgPSB0YWJsZUNvbmZpZ3M7XHJcbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xyXG4gICAgdGhpcy5zdGVwQ29uZmlnID0gc3RlcENvbmZpZztcclxuICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbnM7XHJcblxyXG4gICAgbGV0IHJlc3AgPSBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLmhhbmRsZUZvcm1Nb2RlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5mb3JtQ29uZmlnLCk7XHJcblxyXG4gICAgaWYgKHJlc3AubG9hZEJ5QWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZEJ5QWN0aW9uID0gdHJ1ZTtcclxuICAgICAgZm9ybUNvbmZpZy5sb2FkQWN0aW9uID0gcmVzcC5hY3Rpb247XHJcbiAgICAgIHRoaXMubG9hZERhdGEocmVzcC5hY3Rpb24sIGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGV0YWlscyA9IHJlc3AuZGV0YWlscztcclxuICAgICAgRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXRIZXJvVmFsdWUodGhpcy5kZXRhaWxzQ29uZmlnLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgICB0aGlzLmxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVGaWVsZCA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0RmlsZUZpZWxkKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUHJvY2Vzc2luZyA9IHgpO1xyXG5cclxuICAgIGNvbnN0IHsgZXh0cmFCdXR0b25zLCBjcmVhdGVCdXR0b24sIGVkaXRCdXR0b24sIGRlbGV0ZUJ1dHRvbiB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXR1cEJ1dHRvbnModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmJ1dHRvbnMpO1xyXG4gICAgdGhpcy5leHRyYUJ1dHRvbnMgPSBleHRyYUJ1dHRvbnM7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbjtcclxuICAgIHRoaXMuZWRpdEJ1dHRvbiA9IGVkaXRCdXR0b247XHJcbiAgICB0aGlzLmRlbGV0ZUJ1dHRvbiA9IGRlbGV0ZUJ1dHRvbjtcclxuXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdGl0bGVBY3Rpb24gPSBcIlZpZXdcIjtcclxuICBsb2FkQnlBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgZXh0cmFCdXR0b25zOiBCdXR0b25bXTtcclxuICBidXR0b25zOiBCdXR0b25bXTtcclxuICBjcmVhdGVCdXR0b246IEJ1dHRvbjtcclxuICBlZGl0QnV0dG9uOiBCdXR0b247XHJcbiAgZGVsZXRlQnV0dG9uOiBCdXR0b247XHJcblxyXG4gIC8vIG1vZGVCdXR0b24gOiBCdXR0b25cclxuICBmaWxlRmllbGQ6IEZpZWxkO1xyXG4gIGZpbGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICB0YWJsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZ1xyXG4gIHRhYmxlQ29uZmlncyA6IFRhYmxlQ29uZmlnW11cclxuICBkZXRhaWxzOiBhbnlcclxuICBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIHN0ZXBDb25maWc6IFN0ZXBDb25maWc7XHJcbiAgc21hbGxTY3JlZW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMb2FkQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgbG9hZERhdGEoYWN0aW9uOiBBY3Rpb24sIHJlbG9hZCkge1xyXG5cclxuICAgIGlmIChhY3Rpb24gJiYgdGhpcy5sb2FkQnlBY3Rpb24pIHtcclxuXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShhY3Rpb24pLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBhcGlSZXNwb25zZS5kYXRhXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0SGVyb1ZhbHVlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5kZXRhaWxzKTtcclxuICAgICAgICAgIGlmIChyZWxvYWQpIHRoaXMudGFibGVSZWxvYWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaW5wdXRDaGFuZ2VkKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIHZhbHVlOiBldmVudC52YWx1ZSB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHNldE1vZGUobmV3TW9kZSkge1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSBuZXdNb2RlXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuICB9XHJcblxyXG4gIHNldFRpdGxlQWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5maXhlZFRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGVBY3Rpb24gPSBcIlwiO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aXRsZUFjdGlvbiA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXRUaXRsZUFjdGlvbih0aGlzLmZvcm1Db25maWcubW9kZSwgdGhpcy5idXR0b25zKTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0QnV0dG9uKHRoaXMuYnV0dG9ucywgbmFtZSk7XHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGJ1dHRvbiA/IHRoaXMuYnV0dG9uU2VydmljZS50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgdGVzdFZpc2libGUocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGJ1dHRvbiA/IHRoaXMuYnV0dG9uU2VydmljZS5pc0J1dHRvblZpc2libGUoYnV0dG9uLCByb3csIHRoaXMuaXNMb2FkQ29tcGxldGUpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXN0VmlzaWJsZVRhYih0YmxDb25maWc6IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmlzVGFiVmlzaWJsZSh0YmxDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRWaXNpYmxlRmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZy5maWVsZHM/LmZpbHRlcih4ID0+IENvcmUudGVzdFZpc2libGUodGhpcy5mb3JtQ29uZmlnLCB0aGlzLmRldGFpbHMsIHgsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpKVxyXG4gIH1cclxuXHJcblxyXG4gIGNyZWF0ZSgpIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKCdjcmVhdGUnKTtcclxuICB9XHJcblxyXG4gIGVkaXQoKSB7XHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvbkFjdGlvbignZWRpdCcpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKCkge1xyXG4gICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2RlbGV0ZScpO1xyXG4gIH1cclxuXHJcblxyXG4gIGN1c3RvbShidXR0b246IEJ1dHRvbikge1xyXG4gICAgaWYgKGJ1dHRvbi5kaWFsb2cgJiYgYnV0dG9uLmRldGFpbHNDb25maWcpIHtcclxuICAgICAgdGhpcy5vcGVuTmVzdGVkRGV0YWlsc0RpYWxvZyhidXR0b24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oYnV0dG9uLm5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuTmVzdGVkRGV0YWlsc0RpYWxvZyhidXR0b246IEJ1dHRvbik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlndXJlZERldGFpbHNEaWFsb2coYnV0dG9uLm5hbWUsIHRoaXMuZGV0YWlscywgdGhpcy5kZXRhaWxzQ29uZmlnLCBEZXRhaWxzRGlhbG9nTGl0ZSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ2lucHV0Q2hhbmdlJykge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKHJlc3VsdC5jaGFuZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiByZXN1bHQubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5sb2FkQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5mb3JtQ29uZmlnLmxvYWRBY3Rpb24sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGhhbmRsZUJ1dHRvbkFjdGlvbihidXR0b25OYW1lOiBzdHJpbmcpIHtcclxuXHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFidXR0b24uYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ2VtaXQnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZUZvcm0oKSkge1xyXG4gICAgICB0aGlzLmV4ZWN1dGVBY3Rpb24oYnV0dG9uLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IENvcmUudmFsaWRhdGVPYmplY3QodGhpcy5nZXRWaXNpYmxlRmllbGRzKCksIHRoaXMuZGV0YWlscyk7XHJcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEgJiYgdGhpcy5maWxlRmllbGQ/LnJlcXVpcmVkICYmIHRoaXMuZm9ybUNvbmZpZy5tb2RlID09PSAnY3JlYXRlJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGF0dGFjaCBmaWxlKHMpXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgY29tcG9zaXRlIGZpZWxkc1xyXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmdldFZpc2libGVGaWVsZHMoKSkge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2NvbXBvc2l0ZScpIHtcclxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gQ29yZS52YWxpZGF0ZU9iamVjdChDb3JlLmdldFZpc2libGVTdWJmaWVsZHModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmRldGFpbHMsIGZpZWxkLCB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRSb2xlU291cmNlLnZhbHVlKSwgdGhpcy5kZXRhaWxzKTtcclxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAhPT0gJycpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QodmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBY3Rpb25EYXRhKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGJ1dHRvbi5hY3Rpb24/LmlzRm9ybURhdGEpIHtcclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlJHtpfWAsIHRoaXMuZmlsZXNbaV0sIHRoaXMuZmlsZXNbaV0ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZGF0YVwiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHJldHVybiBmb3JtRGF0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGFjdGlvbkRhdGEgPSB0aGlzLnByZXBhcmVBY3Rpb25EYXRhKGJ1dHRvbiwgZGF0YSk7XHJcblxyXG4gICAgaWYgKGJ1dHRvbi5jb25maXJtKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShidXR0b24uY29uZmlybS5tZXNzYWdlKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwieWVzXCIpIHtcclxuICAgICAgICAgIHRoaXMucGVyZm9ybUFwaUNhbGwoYnV0dG9uLCBhY3Rpb25EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZXJmb3JtQXBpQ2FsbChidXR0b24sIGFjdGlvbkRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwZXJmb3JtQXBpQ2FsbChidXR0b246IEJ1dHRvbiwgZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYnV0dG9uLmFjdGlvbiwgZGF0YSkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiYXBwcm92YWxcIikgfHwgYXBpUmVzcG9uc2UubWVzc2FnZS5pbmNsdWRlcyhcImFwcHJvdmVcIikgfHwgYXBpUmVzcG9uc2UubWVzc2FnZS5pbmNsdWRlcyhcImRlY2xpbmVcIikpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChidXR0b24uYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSAhPSBcInN1Y2Nlc3NcIiAmJiBhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwiXCIpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGRhdGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHsgLi4uYXBpUmVzcG9uc2UsIGRhdGE6IHRoaXMuZGV0YWlscyB9IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn07XHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGFpbmVyXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxyXG5cclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJpc1Byb2Nlc3NpbmcgJiYgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLnByb2dyZXNzTGluZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0wXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3t0aXRsZUFjdGlvbiB8IHRpdGxlY2FzZX19IHt7Zm9ybUNvbmZpZz8udGl0bGV9fTwvaDI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlPT0ndmlldycgJiYgZWRpdEJ1dHRvbiAmJiB0ZXN0VmlzaWJsZShkZXRhaWxzLGVkaXRCdXR0b24ubmFtZSlcIiBjbGFzcz1cImNvbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwPVwiRWRpdFwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZXRNb2RlKCdlZGl0JylcIiBbZGlzYWJsZWRdPVwidGVzdERpc2FibGVkKGRldGFpbHMsZWRpdEJ1dHRvbi5uYW1lKVwiPjxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgKm5nSWY9XCJsb2FkQnlBY3Rpb25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwPVwiUmVmcmVzaFwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJsb2FkRGF0YShmb3JtQ29uZmlnLmxvYWRBY3Rpb24sIHRydWUpXCI+PG1hdC1pY29uIGNsYXNzPVwicmVmcmVzaEljb25cIj5jYWNoZWQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwibWF0LXR5cG9ncmFwaHkgZGlhbG9nLXNjcm9sbC1jb250ZW50XCI+XHJcblxyXG4gICAgICAgICAgPHNwYS1hbGVydCBbYWxlcnRNZXNzYWdlc109XCJmb3JtQ29uZmlnLmFsZXJ0TWVzc2FnZXNcIiBbZGF0YV09XCJkZXRhaWxzXCI+PC9zcGEtYWxlcnQ+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGluLWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6MTRweFwiPlxyXG5cclxuICAgICAgICAgPHAgKm5nSWY9XCJmb3JtQ29uZmlnICYmICFkZXRhaWxzXCI+PGVtPkxvYWRpbmcuLi48L2VtPjwvcD5cclxuXHJcbiAgICAgICAgPHNwYS1mb3JtICpuZ0lmPVwiZm9ybUNvbmZpZyAmJiBkZXRhaWxzXCIgW2ZpbGVzXT1cImZpbGVzXCIgW2RhdGFdPVwiZGV0YWlsc1wiIFtjb25maWddPVwiZm9ybUNvbmZpZ1wiIChpbnB1dENoYW5nZSk9XCJpbnB1dENoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkeW5hbWljU2VsZWN0IGxldC1maWVsZD1cImZpZWxkXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LXRlc3RSZWFkT25seT1cInRlc3RSZWFkT25seVwiIGxldC1zZWxlY3RDaGFuZ2VkPVwic2VsZWN0Q2hhbmdlZFwiPlxyXG4gICAgICAgICAgICA8c3BhLXNlbGVjdC1saXRlXHJcbiAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiXHJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cImZpZWxkLndpZHRoXCJcclxuICAgICAgICAgICAgICBbbnVsbGFibGVdPVwiZmllbGQubnVsbGFibGVcIlxyXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgIFttYXN0ZXJPcHRpb25zXT1cImZpZWxkLm1hc3Rlck9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgIFttYXN0ZXJGaWVsZF09XCJmaWVsZC5tYXN0ZXJGaWVsZFwiXHJcbiAgICAgICAgICAgICAgW29wdGlvbkRpc3BsYXldPVwiZmllbGQub3B0aW9uRGlzcGxheSA/PyAnbmFtZSdcIlxyXG4gICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJmaWVsZC5vcHRpb25WYWx1ZSA/PyAndmFsdWUnXCJcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCJcclxuICAgICAgICAgICAgICBbZGVmYXVsdEZpcnN0VmFsdWVdPVwiZmllbGQuZGVmYXVsdEZpcnN0VmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCJcclxuICAgICAgICAgICAgICBbaGludF09XCJmaWVsZC5oaW50XCJcclxuICAgICAgICAgICAgICBbbG9hZEFjdGlvbl09XCJmaWVsZC5sb2FkQWN0aW9uXCJcclxuICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCJcclxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2VsZWN0Q2hhbmdlZChmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC9zcGEtc2VsZWN0LWxpdGU+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvc3BhLWZvcm0+XHJcblxyXG5cclxuICAgICAgICA8IS0tIDxtYXQtdGFiLWdyb3VwICpuZ0lmPVwidGFibGVDb25maWdzXCI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGJsIG9mIHRhYmxlQ29uZmlnc1wiPlxyXG5cclxuICAgICAgICAgICAgPG1hdC10YWIgKm5nSWY9XCJ0ZXN0VmlzaWJsZVRhYih0YmwpXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3t0YmwudGl0bGUgPz8gJ1VudGl0bGVkJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGEtdGFibGUtaW50ZXJuYWwgW2NvbmZpZ109XCJ0YmxcIiBbaGlkZVRpdGxlXT1cInRydWVcIiBbcmVsb2FkXT1cInRhYmxlUmVsb2FkXCIgKGRhdGFMb2FkKT1cImxvYWREYXRhKGZvcm1Db25maWcubG9hZEFjdGlvbiwgZmFsc2UpXCI+PC9zcGEtdGFibGUtaW50ZXJuYWw+XHJcblxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDwvbWF0LXRhYi1ncm91cD4gLS0+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuXHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxyXG5cclxuICAgIDxkaXY+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J2NyZWF0ZScgJiYgY3JlYXRlQnV0dG9uXCIgKGNsaWNrKT1cImNyZWF0ZSgpXCIgY2RrRm9jdXNJbml0aWFsPnt7Y3JlYXRlQnV0dG9uLmRpc3BsYXkgPz8gJ1N1Ym1pdCd9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlPT0nZWRpdCcgJiYgZWRpdEJ1dHRvblwiIChjbGljayk9XCJlZGl0KClcIiBjZGtGb2N1c0luaXRpYWw+e3tlZGl0QnV0dG9uLmRpc3BsYXkgPz8gJ1N1Ym1pdCd9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBleHRyYUJ1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXNtYWxsU2NyZWVuICYmIHRlc3RWaXNpYmxlKGRldGFpbHMsYnRuLm5hbWUpXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmcgfHwgdGVzdERpc2FibGVkKGRldGFpbHMsYnRuLm5hbWUpXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ0biwgZGV0YWlscyl9XCIgKGNsaWNrKT1cImN1c3RvbShidG4pXCIgY2RrRm9jdXNJbml0aWFsPjxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0QnV0dG9uQ29sb3IoYnRuLCBkZXRhaWxzKX1cIj57e2J0bi5pY29uLm5hbWV9fTwvbWF0LWljb24+e3tidG4uZGlzcGxheSA/PyBidG4ubmFtZSB8IHRpdGxlY2FzZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0LWRpYWxvZy1jbG9zZT5DYW5jZWw8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgKm5nSWY9XCJzbWFsbFNjcmVlblwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgZXh0cmFCdXR0b25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInRlc3RWaXNpYmxlKGRldGFpbHMsYnRuLm5hbWUpXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgW21hdFRvb2x0aXBdPVwiYnRuLnRpcCA/PyBidG4ubmFtZSB8IHRpdGxlY2FzZVwiIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmcgfHwgdGVzdERpc2FibGVkKGRldGFpbHMsYnRuLm5hbWUpXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ0biwgZGV0YWlscyl9XCIgKGNsaWNrKT1cImN1c3RvbShidG4pXCIgY2RrRm9jdXNJbml0aWFsPjxtYXQtaWNvbj57e2J0bi5pY29uLm5hbWV9fTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwPVwiRGVsZXRlXCIgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIHN0eWxlPVwiY29sb3I6IHJlZDtcIiAoY2xpY2spPVwiZGVsZXRlKClcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZSE9J2NyZWF0ZScgICYmIGRlbGV0ZUJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuXHJcblxyXG48L2Rpdj5cclxuIl19
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPL0IsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFvQixrQkFBc0MsRUFBUyxhQUE0QixFQUFRLFdBQTJCLEVBQVMsY0FBOEIsRUFDL0osU0FBMEMsRUFBa0MsYUFBa0MsRUFBVSxhQUE0QixFQUNwSixhQUE0QixFQUFVLFdBQXdCO1FBRnBELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFRLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvSixjQUFTLEdBQVQsU0FBUyxDQUFpQztRQUFrQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNwSixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGdCQUFXLEdB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U0FBUyxJQUFJLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO29CQUN4RSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN0QztnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDNUY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OEdBdlJVLGlCQUFpQix5S0FHa0MsZUFBZTtrR0FIbEUsaUJBQWlCLHVHQ2xCOUIsMDBLQWtIQTsyRkRoR2EsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLHdCQUF3Qjs7MEJBT3FCLE1BQU07MkJBQUMsZUFBZTs4SEE2RW5FLFdBQVc7c0JBQXBCLE1BQU07O0FBME1SLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBGb3JtQ29uZmlnLCBGaWVsZCwgVGFibGVDb25maWcsIEJ1dHRvbiwgRGV0YWlsc0RpYWxvZ0NvbmZpZywgQWN0aW9uLCBBcGlSZXNwb25zZSwgU3RlcENvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9hZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBDb3JlLCBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UaW5Db3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWRldGFpbHNEaWFsb2ctbGl0ZScsIC8vdW5pcSB0byBsaXRlXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbHNEaWFsb2ctbGl0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbGl0ZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERldGFpbHNEaWFsb2dMaXRlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixwcml2YXRlIGxvYWRlclNlcnZpY2U6IExvYWRlclNlcnZpY2UscHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYixwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGV0YWlsc0RpYWxvZ0xpdGU+LCBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcsIHByaXZhdGUgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpXHJcbiAge1xyXG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcclxuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gdHJ1ZVxyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGNvbnN0IHsgdGFibGVDb25maWcsIHRhYmxlQ29uZmlncywgZm9ybUNvbmZpZywgc3RlcENvbmZpZywgYnV0dG9ucyB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5pbml0aWFsaXplQ29uZmlncyh0aGlzLmRldGFpbHNDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IHRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZ3MgPSB0YWJsZUNvbmZpZ3M7XHJcbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xyXG4gICAgdGhpcy5zdGVwQ29uZmlnID0gc3RlcENvbmZpZztcclxuICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbnM7XHJcblxyXG4gICAgbGV0IHJlc3AgPSBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLmhhbmRsZUZvcm1Nb2RlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5mb3JtQ29uZmlnLCk7XHJcblxyXG4gICAgaWYgKHJlc3AubG9hZEJ5QWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZEJ5QWN0aW9uID0gdHJ1ZTtcclxuICAgICAgZm9ybUNvbmZpZy5sb2FkQWN0aW9uID0gcmVzcC5hY3Rpb247XHJcbiAgICAgIHRoaXMubG9hZERhdGEocmVzcC5hY3Rpb24sIGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGV0YWlscyA9IHJlc3AuZGV0YWlscztcclxuICAgICAgRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXRIZXJvVmFsdWUodGhpcy5kZXRhaWxzQ29uZmlnLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgICB0aGlzLmxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVGaWVsZCA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0RmlsZUZpZWxkKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUHJvY2Vzc2luZyA9IHgpO1xyXG5cclxuICAgIGNvbnN0IHsgZXh0cmFCdXR0b25zLCBjcmVhdGVCdXR0b24sIGVkaXRCdXR0b24sIGRlbGV0ZUJ1dHRvbiB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXR1cEJ1dHRvbnModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmJ1dHRvbnMpO1xyXG4gICAgdGhpcy5leHRyYUJ1dHRvbnMgPSBleHRyYUJ1dHRvbnM7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbjtcclxuICAgIHRoaXMuZWRpdEJ1dHRvbiA9IGVkaXRCdXR0b247XHJcbiAgICB0aGlzLmRlbGV0ZUJ1dHRvbiA9IGRlbGV0ZUJ1dHRvbjtcclxuXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdGl0bGVBY3Rpb24gPSBcIlZpZXdcIjtcclxuICBsb2FkQnlBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgZXh0cmFCdXR0b25zOiBCdXR0b25bXTtcclxuICBidXR0b25zOiBCdXR0b25bXTtcclxuICBjcmVhdGVCdXR0b246IEJ1dHRvbjtcclxuICBlZGl0QnV0dG9uOiBCdXR0b247XHJcbiAgZGVsZXRlQnV0dG9uOiBCdXR0b247XHJcblxyXG4gIC8vIG1vZGVCdXR0b24gOiBCdXR0b25cclxuICBmaWxlRmllbGQ6IEZpZWxkO1xyXG4gIGZpbGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICB0YWJsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZ1xyXG4gIHRhYmxlQ29uZmlncyA6IFRhYmxlQ29uZmlnW11cclxuICBkZXRhaWxzOiBhbnlcclxuICBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIHN0ZXBDb25maWc6IFN0ZXBDb25maWc7XHJcbiAgc21hbGxTY3JlZW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMb2FkQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgbG9hZERhdGEoYWN0aW9uOiBBY3Rpb24sIHJlbG9hZCkge1xyXG5cclxuICAgIGlmIChhY3Rpb24gJiYgdGhpcy5sb2FkQnlBY3Rpb24pIHtcclxuXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShhY3Rpb24pLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBhcGlSZXNwb25zZS5kYXRhXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0SGVyb1ZhbHVlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5kZXRhaWxzKTtcclxuICAgICAgICAgIGlmIChyZWxvYWQpIHRoaXMudGFibGVSZWxvYWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaW5wdXRDaGFuZ2VkKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIHZhbHVlOiBldmVudC52YWx1ZSB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHNldE1vZGUobmV3TW9kZSkge1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSBuZXdNb2RlXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuICB9XHJcblxyXG4gIHNldFRpdGxlQWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5maXhlZFRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGVBY3Rpb24gPSBcIlwiO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aXRsZUFjdGlvbiA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXRUaXRsZUFjdGlvbih0aGlzLmZvcm1Db25maWcubW9kZSwgdGhpcy5idXR0b25zKTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0QnV0dG9uKHRoaXMuYnV0dG9ucywgbmFtZSk7XHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGJ1dHRvbiA/IHRoaXMuYnV0dG9uU2VydmljZS50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgdGVzdFZpc2libGUocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGJ1dHRvbiA/IHRoaXMuYnV0dG9uU2VydmljZS5pc0J1dHRvblZpc2libGUoYnV0dG9uLCByb3csIHRoaXMuaXNMb2FkQ29tcGxldGUpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXN0VmlzaWJsZVRhYih0YmxDb25maWc6IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmlzVGFiVmlzaWJsZSh0YmxDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRWaXNpYmxlRmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZy5maWVsZHM/LmZpbHRlcih4ID0+IENvcmUudGVzdFZpc2libGUodGhpcy5mb3JtQ29uZmlnLCB0aGlzLmRldGFpbHMsIHgsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpKVxyXG4gIH1cclxuXHJcblxyXG4gIGNyZWF0ZSgpIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKCdjcmVhdGUnKTtcclxuICB9XHJcblxyXG4gIGVkaXQoKSB7XHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvbkFjdGlvbignZWRpdCcpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKCkge1xyXG4gICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2RlbGV0ZScpO1xyXG4gIH1cclxuXHJcblxyXG4gIGN1c3RvbShidXR0b246IEJ1dHRvbikge1xyXG4gICAgaWYgKGJ1dHRvbi5kaWFsb2cgJiYgYnV0dG9uLmRldGFpbHNDb25maWcpIHtcclxuICAgICAgdGhpcy5vcGVuTmVzdGVkRGV0YWlsc0RpYWxvZyhidXR0b24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oYnV0dG9uLm5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuTmVzdGVkRGV0YWlsc0RpYWxvZyhidXR0b246IEJ1dHRvbik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlndXJlZERldGFpbHNEaWFsb2coYnV0dG9uLCB0aGlzLmRldGFpbHMsIERldGFpbHNEaWFsb2dMaXRlKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSAnaW5wdXRDaGFuZ2UnKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZWQocmVzdWx0LmNoYW5nZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ICYmIHJlc3VsdC5tZXNzYWdlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaERhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLmxvYWRBY3Rpb24pIHtcclxuICAgICAgdGhpcy5sb2FkRGF0YSh0aGlzLmZvcm1Db25maWcubG9hZEFjdGlvbiwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlQnV0dG9uQWN0aW9uKGJ1dHRvbk5hbWU6IHN0cmluZykge1xyXG5cclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgaWYgKCFidXR0b24pIHJldHVybjtcclxuXHJcbiAgICBpZiAoIWJ1dHRvbi5hY3Rpb24pIHtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnZW1pdCcsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZhbGlkYXRlRm9ybSgpKSB7XHJcbiAgICAgIHRoaXMuZXhlY3V0ZUFjdGlvbihidXR0b24sIHRoaXMuZGV0YWlscyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlRm9ybSgpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0ID0gQ29yZS52YWxpZGF0ZU9iamVjdCh0aGlzLmdldFZpc2libGVGaWVsZHMoKSwgdGhpcy5kZXRhaWxzKTtcclxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0ICE9PSAnJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KHZhbGlkYXRpb25SZXN1bHQpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoIDwgMSAmJiB0aGlzLmZpbGVGaWVsZD8ucmVxdWlyZWQgJiYgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgYXR0YWNoIGZpbGUocylcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBjb21wb3NpdGUgZmllbGRzXHJcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZ2V0VmlzaWJsZUZpZWxkcygpKSB7XHJcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY29tcG9zaXRlJykge1xyXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBDb3JlLnZhbGlkYXRlT2JqZWN0KENvcmUuZ2V0VmlzaWJsZVN1YmZpZWxkcyh0aGlzLmZvcm1Db25maWcsIHRoaXMuZGV0YWlscywgZmllbGQsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0ICE9PSAnJykge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFjdGlvbkRhdGEoYnV0dG9uOiBCdXR0b24sIGRhdGE6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoYnV0dG9uLmFjdGlvbj8uaXNGb3JtRGF0YSkge1xyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYHVwbG9hZEZpbGUke2l9YCwgdGhpcy5maWxlc1tpXSwgdGhpcy5maWxlc1tpXS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJkYXRhXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgcmV0dXJuIGZvcm1EYXRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4ZWN1dGVBY3Rpb24oYnV0dG9uOiBCdXR0b24sIGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgYWN0aW9uRGF0YSA9IHRoaXMucHJlcGFyZUFjdGlvbkRhdGEoYnV0dG9uLCBkYXRhKTtcclxuXHJcbiAgICBpZiAoYnV0dG9uLmNvbmZpcm0pIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGJ1dHRvbi5jb25maXJtLm1lc3NhZ2UpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJ5ZXNcIikge1xyXG4gICAgICAgICAgdGhpcy5wZXJmb3JtQXBpQ2FsbChidXR0b24sIGFjdGlvbkRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBlcmZvcm1BcGlDYWxsKGJ1dHRvbiwgYWN0aW9uRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBlcmZvcm1BcGlDYWxsKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShidXR0b24uYWN0aW9uLCBkYXRhKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuXHJcbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLm1lc3NhZ2UuaW5jbHVkZXMoXCJhcHByb3ZhbFwiKSB8fCBhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiYXBwcm92ZVwiKSB8fCBhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiZGVjbGluZVwiKSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwic3VjY2Vzc1wiICYmIGFwaVJlc3BvbnNlLm1lc3NhZ2UgIT0gXCJcIikge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlVwZGF0ZWRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IG1lc3NhZ2U6ICdzdWNjZXNzJywgZGF0YTogeyAuLi5hcGlSZXNwb25zZSwgZGF0YTogdGhpcy5kZXRhaWxzIH0gfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxufTtcclxuXHJcblxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZy1jb250YWluZXJcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50XCI+XHJcblxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImlzUHJvY2Vzc2luZyAmJiBkYXRhU2VydmljZS5hcHBDb25maWcucHJvZ3Jlc3NMaW5lXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTBcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT57e3RpdGxlQWN0aW9uIHwgdGl0bGVjYXNlfX0ge3tmb3JtQ29uZmlnPy50aXRsZX19PC9oMj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSd2aWV3JyAmJiBlZGl0QnV0dG9uICYmIHRlc3RWaXNpYmxlKGRldGFpbHMsZWRpdEJ1dHRvbi5uYW1lKVwiIGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJFZGl0XCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldE1vZGUoJ2VkaXQnKVwiIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQoZGV0YWlscyxlZGl0QnV0dG9uLm5hbWUpXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiAqbmdJZj1cImxvYWRCeUFjdGlvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJSZWZyZXNoXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImxvYWREYXRhKGZvcm1Db25maWcubG9hZEFjdGlvbiwgdHJ1ZSlcIj48bWF0LWljb24gY2xhc3M9XCJyZWZyZXNoSWNvblwiPmNhY2hlZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeSBkaWFsb2ctc2Nyb2xsLWNvbnRlbnRcIj5cclxuXHJcbiAgICAgICAgICA8c3BhLWFsZXJ0IFthbGVydE1lc3NhZ2VzXT1cImZvcm1Db25maWcuYWxlcnRNZXNzYWdlc1wiIFtkYXRhXT1cImRldGFpbHNcIj48L3NwYS1hbGVydD5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4XCI+XHJcblxyXG4gICAgICAgICA8cCAqbmdJZj1cImZvcm1Db25maWcgJiYgIWRldGFpbHNcIj48ZW0+TG9hZGluZy4uLjwvZW0+PC9wPlxyXG5cclxuICAgICAgICA8c3BhLWZvcm0gKm5nSWY9XCJmb3JtQ29uZmlnICYmIGRldGFpbHNcIiBbZmlsZXNdPVwiZmlsZXNcIiBbZGF0YV09XCJkZXRhaWxzXCIgW2NvbmZpZ109XCJmb3JtQ29uZmlnXCIgKGlucHV0Q2hhbmdlKT1cImlucHV0Q2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2R5bmFtaWNTZWxlY3QgbGV0LWZpZWxkPVwiZmllbGRcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQtdGVzdFJlYWRPbmx5PVwidGVzdFJlYWRPbmx5XCIgbGV0LXNlbGVjdENoYW5nZWQ9XCJzZWxlY3RDaGFuZ2VkXCI+XHJcbiAgICAgICAgICAgIDxzcGEtc2VsZWN0LWxpdGVcclxuICAgICAgICAgICAgICBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCJcclxuICAgICAgICAgICAgICBbd2lkdGhdPVwiZmllbGQud2lkdGhcIlxyXG4gICAgICAgICAgICAgIFtudWxsYWJsZV09XCJmaWVsZC5udWxsYWJsZVwiXHJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW21hc3Rlck9wdGlvbnNdPVwiZmllbGQubWFzdGVyT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW21hc3RlckZpZWxkXT1cImZpZWxkLm1hc3RlckZpZWxkXCJcclxuICAgICAgICAgICAgICBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5ID8/ICduYW1lJ1wiXHJcbiAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImZpZWxkLm9wdGlvblZhbHVlID8/ICd2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIlxyXG4gICAgICAgICAgICAgIFtkZWZhdWx0Rmlyc3RWYWx1ZV09XCJmaWVsZC5kZWZhdWx0Rmlyc3RWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtoaW50XT1cImZpZWxkLmhpbnRcIlxyXG4gICAgICAgICAgICAgIFtsb2FkQWN0aW9uXT1cImZpZWxkLmxvYWRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCJcclxuICAgICAgICAgICAgICBbY29weUNvbnRlbnRdPVwiZmllbGQuY29weUNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZWxlY3RDaGFuZ2VkKGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L3NwYS1zZWxlY3QtbGl0ZT5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9zcGEtZm9ybT5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJ0YWJsZUNvbmZpZ3NcIj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0Ymwgb2YgdGFibGVDb25maWdzXCI+XHJcblxyXG4gICAgICAgICAgICA8bWF0LXRhYiAqbmdJZj1cInRlc3RWaXNpYmxlVGFiKHRibClcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e3RibC50aXRsZSA/PyAnVW50aXRsZWQnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYS10YWJsZS1pbnRlcm5hbCBbY29uZmlnXT1cInRibFwiIFtoaWRlVGl0bGVdPVwidHJ1ZVwiIFtyZWxvYWRdPVwidGFibGVSZWxvYWRcIiAoZGF0YUxvYWQpPVwibG9hZERhdGEoZm9ybUNvbmZpZy5sb2FkQWN0aW9uLCBmYWxzZSlcIj48L3NwYS10YWJsZS1pbnRlcm5hbD5cclxuXHJcbiAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPiAtLT5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcblxyXG4gICAgPGRpdj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlPT0nY3JlYXRlJyAmJiBjcmVhdGVCdXR0b25cIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIChjbGljayk9XCJjcmVhdGUoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2NyZWF0ZUJ1dHRvbi5kaXNwbGF5ID8/ICdTdWJtaXQnfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J2VkaXQnICYmIGVkaXRCdXR0b25cIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIChjbGljayk9XCJlZGl0KClcIiBjZGtGb2N1c0luaXRpYWw+e3tlZGl0QnV0dG9uLmRpc3BsYXkgPz8gJ1N1Ym1pdCd9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBleHRyYUJ1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXNtYWxsU2NyZWVuICYmIHRlc3RWaXNpYmxlKGRldGFpbHMsYnRuLm5hbWUpXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmcgfHwgdGVzdERpc2FibGVkKGRldGFpbHMsYnRuLm5hbWUpXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ0biwgZGV0YWlscyl9XCIgKGNsaWNrKT1cImN1c3RvbShidG4pXCIgY2RrRm9jdXNJbml0aWFsPjxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0QnV0dG9uQ29sb3IoYnRuLCBkZXRhaWxzKX1cIj57e2J0bi5pY29uLm5hbWV9fTwvbWF0LWljb24+e3tidG4uZGlzcGxheSA/PyBidG4ubmFtZSB8IHRpdGxlY2FzZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0LWRpYWxvZy1jbG9zZT5DYW5jZWw8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgKm5nSWY9XCJzbWFsbFNjcmVlblwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgZXh0cmFCdXR0b25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInRlc3RWaXNpYmxlKGRldGFpbHMsYnRuLm5hbWUpXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgW21hdFRvb2x0aXBdPVwiYnRuLnRpcCA/PyBidG4ubmFtZSB8IHRpdGxlY2FzZVwiIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmcgfHwgdGVzdERpc2FibGVkKGRldGFpbHMsYnRuLm5hbWUpXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ0biwgZGV0YWlscyl9XCIgKGNsaWNrKT1cImN1c3RvbShidG4pXCIgY2RrRm9jdXNJbml0aWFsPjxtYXQtaWNvbj57e2J0bi5pY29uLm5hbWV9fTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwPVwiRGVsZXRlXCIgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIHN0eWxlPVwiY29sb3I6IHJlZDtcIiAoY2xpY2spPVwiZGVsZXRlKClcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZSE9J2NyZWF0ZScgICYmIGRlbGV0ZUJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuXHJcblxyXG48L2Rpdj5cclxuIl19
|
|
@@ -82,7 +82,7 @@ export class TableLiteComponent {
|
|
|
82
82
|
updateTableConfiguration() {
|
|
83
83
|
this.elevation = this.getElevationClass(this.config?.elevation);
|
|
84
84
|
this.displayedColumns = this.tableConfigService.setColumns(this.config, this.smallScreen);
|
|
85
|
-
this.displayedButtons = this.
|
|
85
|
+
this.displayedButtons = this.tableConfigService.getDisplayedButtons(this.config?.buttons, this.smallScreen, this.config);
|
|
86
86
|
this.actionsWidth = this.tableConfigService.getActionsWidth(this.displayedButtons, this.config);
|
|
87
87
|
if (this.config?.searchConfig) {
|
|
88
88
|
this.showFilterButton = false;
|
|
@@ -149,14 +149,6 @@ export class TableLiteComponent {
|
|
|
149
149
|
this.config.formConfig = config;
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
setColumns() {
|
|
153
|
-
this.displayedColumns = this.tableConfigService.setColumns(this.config, this.smallScreen);
|
|
154
|
-
this.displayedButtons = this.buttonService.getDisplayedButtons(this.config.buttons, this.smallScreen, this.config.minButtons);
|
|
155
|
-
this.actionsWidth = this.tableConfigService.getActionsWidth(this.displayedButtons, this.config);
|
|
156
|
-
if (this.displayedButtons.length > 0 && !this.displayedColumns.includes('action')) {
|
|
157
|
-
this.displayedColumns.push('action');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
152
|
setButtons() {
|
|
161
153
|
if (!this.config.buttons)
|
|
162
154
|
return;
|
|
@@ -247,29 +239,46 @@ export class TableLiteComponent {
|
|
|
247
239
|
//Dialog events
|
|
248
240
|
columnClicked(column, row) {
|
|
249
241
|
if (column.detailsConfig) {
|
|
250
|
-
|
|
242
|
+
const button = { name: column.name, dialog: true, detailsConfig: column.detailsConfig };
|
|
243
|
+
this.open(button, row);
|
|
251
244
|
}
|
|
252
245
|
else {
|
|
253
246
|
this.actionClickedEmit(column.name, row);
|
|
254
247
|
}
|
|
255
248
|
}
|
|
256
249
|
customModel(name, row) {
|
|
257
|
-
this.
|
|
250
|
+
const button = this.getButton(name);
|
|
251
|
+
this.open(button, row);
|
|
258
252
|
}
|
|
259
253
|
actionClickedEmit(name, row) {
|
|
260
254
|
this.actionClick.emit({ name: name, data: row });
|
|
261
255
|
}
|
|
262
256
|
viewModel(row) {
|
|
263
|
-
this.
|
|
257
|
+
const button = this.getButton('view');
|
|
258
|
+
this.open(button, row);
|
|
264
259
|
}
|
|
265
260
|
newModel() {
|
|
266
|
-
this.
|
|
261
|
+
const button = this.getButton('create');
|
|
262
|
+
this.open(button, null);
|
|
267
263
|
}
|
|
268
264
|
editModel(row) {
|
|
269
|
-
this.
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
265
|
+
const button = this.getButton('edit');
|
|
266
|
+
this.open(button, row);
|
|
267
|
+
}
|
|
268
|
+
open(button, row) {
|
|
269
|
+
const buttonName = button.name;
|
|
270
|
+
let btn = {
|
|
271
|
+
...button,
|
|
272
|
+
detailsConfig: button.detailsConfig ?? {
|
|
273
|
+
...button.detailsConfig,
|
|
274
|
+
formConfig: this.config.formConfig,
|
|
275
|
+
stepConfig: this.config.stepConfig,
|
|
276
|
+
buttons: this.config.buttons,
|
|
277
|
+
heroField: this.config.heroField,
|
|
278
|
+
heroValue: this.config.heroValue,
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
this.dialogService.openConfiguredDetailsDialog(btn, row, DetailsDialogLite).subscribe(result => {
|
|
273
282
|
if (result.action === 'doAction') {
|
|
274
283
|
this.doAction(result.name, result.row);
|
|
275
284
|
this.actionClickedEmit(result.name, result.row);
|
|
@@ -364,10 +373,10 @@ export class TableLiteComponent {
|
|
|
364
373
|
}
|
|
365
374
|
}
|
|
366
375
|
TableLiteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableLiteComponent, deps: [{ token: i1.DataServiceLib }, { token: i2.MessageService }, { token: i3.BreakpointObserver }, { token: i4.MatDialog }, { token: i5.ButtonService }, { token: i6.DialogService }, { token: i7.TableConfigService }, { token: i8.ConditionService }, { token: i9.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
367
|
-
TableLiteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableLiteComponent, selector: "spa-table-lite", inputs: { data: "data", tileData: "tileData", config: "config", reload: "reload" }, outputs: { dataLoad: "dataLoad", refreshClick: "refreshClick", searchClick: "searchClick", createClick: "createClick", actionClick: "actionClick", inputChange: "inputChange", actionResponse: "actionResponse" }, viewQueries: [{ propertyName: "tablePaginator", first: true, predicate: ["tablePaginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<ng-container *ngIf=\"hasFormAccess\">\n <!-- Search -->\n <spa-search\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" [smallScreen]=\"smallScreen\" [tableDataSource]=\"tableDataSource\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\n </spa-search>\n\n <!-- Header -->\n <app-table-header\n [config]=\"config\" [data]=\"dataSource\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [tileReload]=\"tileReload\" [lastSearch]=\"lastSearch\" [smallScreen]=\"smallScreen\"\n [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\n </app-table-header>\n\n\n <!-- Table -->\n <div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\n\n <!-- Rows -->\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\" [smallScreen]=\"smallScreen\"\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\n </app-table-row>\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n <div class=\"action-buttons-container\">\n\n <!-- Actions -->\n <app-table-action\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\n </app-table-action>\n\n </div>\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': (config.greyOut && config.greyOut(row)) || row.pendingApproval}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n </div>\n\n <div class=\"tin-center\">\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!hasFormAccess\">\n <div class=\"tin-center\">\n <p><em>Access Restricted</em></p>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i13.SearchComponent, selector: "spa-search", inputs: ["config", "smallScreen", "tableDataSource"], outputs: ["searchClick"] }, { kind: "component", type: i14.TableHeaderComponent, selector: "app-table-header", inputs: ["lastSearch", "config", "hideTitle", "tableDataSource", "tileConfig", "smallScreen", "tileReload", "showFilterButton", "data", "tileData"], outputs: ["createClick", "customClick", "refreshClick", "tileClick", "tileUnClick"] }, { kind: "component", type: i15.TableRowComponent, selector: "app-table-row", inputs: ["column", "row", "config", "smallScreen"], outputs: ["actionClick", "columnClick", "showBannerEvent"] }, { kind: "component", type: i16.TableActionComponent, selector: "app-table-action", inputs: ["displayedButtons", "config", "row"], outputs: ["actionClick"] }, { kind: "pipe", type: i17.CamelToWordsPipe, name: "camelToWords" }] });
|
|
376
|
+
TableLiteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableLiteComponent, selector: "spa-table-lite", inputs: { data: "data", tileData: "tileData", config: "config", reload: "reload" }, outputs: { dataLoad: "dataLoad", refreshClick: "refreshClick", searchClick: "searchClick", createClick: "createClick", actionClick: "actionClick", inputChange: "inputChange", actionResponse: "actionResponse" }, viewQueries: [{ propertyName: "tablePaginator", first: true, predicate: ["tablePaginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<ng-container *ngIf=\"hasFormAccess\">\n <!-- Search -->\n <spa-search\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" [smallScreen]=\"smallScreen\" [tableDataSource]=\"tableDataSource\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\n </spa-search>\n\n <!-- Header -->\n <app-table-header\n [config]=\"config\" [data]=\"dataSource\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [tileReload]=\"tileReload\" [lastSearch]=\"lastSearch\" [smallScreen]=\"smallScreen\"\n [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\n </app-table-header>\n\n\n <!-- Table -->\n <div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\n\n <!-- Rows -->\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\" [smallScreen]=\"smallScreen\"\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\n </app-table-row>\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n <div class=\"action-buttons-container\">\n\n <!-- Actions -->\n <app-table-action\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [smallScreen]=\"smallScreen\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\n </app-table-action>\n\n </div>\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': (config.greyOut && config.greyOut(row)) || row.pendingApproval}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n </div>\n\n <div class=\"tin-center\">\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!hasFormAccess\">\n <div class=\"tin-center\">\n <p><em>Access Restricted</em></p>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i13.SearchComponent, selector: "spa-search", inputs: ["config", "smallScreen", "tableDataSource"], outputs: ["searchClick"] }, { kind: "component", type: i14.TableHeaderComponent, selector: "app-table-header", inputs: ["lastSearch", "config", "hideTitle", "tableDataSource", "tileConfig", "smallScreen", "tileReload", "showFilterButton", "data", "tileData"], outputs: ["createClick", "customClick", "refreshClick", "tileClick", "tileUnClick"] }, { kind: "component", type: i15.TableRowComponent, selector: "app-table-row", inputs: ["column", "row", "config", "smallScreen"], outputs: ["actionClick", "columnClick", "showBannerEvent"] }, { kind: "component", type: i16.TableActionComponent, selector: "app-table-action", inputs: ["displayedButtons", "config", "row", "smallScreen"], outputs: ["actionClick"] }, { kind: "pipe", type: i17.CamelToWordsPipe, name: "camelToWords" }] });
|
|
368
377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableLiteComponent, decorators: [{
|
|
369
378
|
type: Component,
|
|
370
|
-
args: [{ selector: 'spa-table-lite', template: "\n<ng-container *ngIf=\"hasFormAccess\">\n <!-- Search -->\n <spa-search\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" [smallScreen]=\"smallScreen\" [tableDataSource]=\"tableDataSource\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\n </spa-search>\n\n <!-- Header -->\n <app-table-header\n [config]=\"config\" [data]=\"dataSource\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [tileReload]=\"tileReload\" [lastSearch]=\"lastSearch\" [smallScreen]=\"smallScreen\"\n [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\n </app-table-header>\n\n\n <!-- Table -->\n <div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\n\n <!-- Rows -->\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\" [smallScreen]=\"smallScreen\"\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\n </app-table-row>\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n <div class=\"action-buttons-container\">\n\n <!-- Actions -->\n <app-table-action\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\n </app-table-action>\n\n </div>\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': (config.greyOut && config.greyOut(row)) || row.pendingApproval}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n </div>\n\n <div class=\"tin-center\">\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!hasFormAccess\">\n <div class=\"tin-center\">\n <p><em>Access Restricted</em></p>\n </div>\n</ng-container>\n" }]
|
|
379
|
+
args: [{ selector: 'spa-table-lite', template: "\n<ng-container *ngIf=\"hasFormAccess\">\n <!-- Search -->\n <spa-search\n *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" [smallScreen]=\"smallScreen\" [tableDataSource]=\"tableDataSource\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\">\n </spa-search>\n\n <!-- Header -->\n <app-table-header\n [config]=\"config\" [data]=\"dataSource\" [tableDataSource]=\"tableDataSource\" [tileConfig]=\"config.tileConfig\" [tileData]=\"tileData\" [tileReload]=\"tileReload\" [lastSearch]=\"lastSearch\" [smallScreen]=\"smallScreen\"\n [showFilterButton]=\"showFilterButton\" (createClick)=\"newModel()\" (customClick)=\"customModel($event,null)\"\n (refreshClick)=\"refreshClicked()\" (tileClick)=\"tileClicked($event)\" (tileUnClick)=\"tileUnClicked($event)\">\n </app-table-header>\n\n\n <!-- Table -->\n <div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n <div *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\">\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef >{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" class=\"right-padding\" >\n\n <!-- Rows -->\n <app-table-row [column]=\"column\" [row]=\"row\" [config]=\"config\" [smallScreen]=\"smallScreen\"\n (actionClick)=\"actionClicked(column.name, row)\" (columnClick)=\"columnClicked(column, row)\" (showBannerEvent)=\"showBanner($event)\">\n </app-table-row>\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n <div class=\"action-buttons-container\">\n\n <!-- Actions -->\n <app-table-action\n [displayedButtons]=\"displayedButtons\" [config]=\"config\" [smallScreen]=\"smallScreen\" [row]=\"row\" (actionClick)=\"actionClicked($event.name, $event.row)\">\n </app-table-action>\n\n </div>\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': (config.greyOut && config.greyOut(row)) || row.pendingApproval}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator *ngIf=\"dataSource && (!smallScreen || (smallScreen && dataSource?.length > 0))\" #tablePaginator [pageSizeOptions]=\"config.pageSizes ?? [10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n </div>\n\n <div class=\"tin-center\">\n <p *ngIf=\"dataSource?.length == 0\"><em>{{config.noDataMessage ?? 'No Data'}}</em></p>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!hasFormAccess\">\n <div class=\"tin-center\">\n <p><em>Access Restricted</em></p>\n </div>\n</ng-container>\n" }]
|
|
371
380
|
}], ctorParameters: function () { return [{ type: i1.DataServiceLib }, { type: i2.MessageService }, { type: i3.BreakpointObserver }, { type: i4.MatDialog }, { type: i5.ButtonService }, { type: i6.DialogService }, { type: i7.TableConfigService }, { type: i8.ConditionService }, { type: i9.AuthService }]; }, propDecorators: { tablePaginator: [{
|
|
372
381
|
type: ViewChild,
|
|
373
382
|
args: ['tablePaginator']
|
|
@@ -394,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
394
403
|
}], actionResponse: [{
|
|
395
404
|
type: Output
|
|
396
405
|
}] } });
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbGl0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS1saXRlL3RhYmxlLWxpdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtbGl0ZS90YWJsZS1saXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBc0QsVUFBVSxFQUFrQyxNQUFNLHVCQUF1QixDQUFDO0FBTXZJLE9BQU8sRUFBRSxJQUFJLEVBQTBCLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUsvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFuRSxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFlBQW9CLFdBQTJCLEVBQVUsY0FBOEIsRUFBVSxrQkFBc0MsRUFBUyxNQUFpQixFQUN2SixhQUE0QixFQUFVLGFBQTRCLEVBQVUsa0JBQXNDLEVBQVUsZ0JBQWtDLEVBQVUsV0FBd0I7UUFEdEwsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDdkosa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFV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VSxrQkFBa0I7bUdBQWxCLGtCQUFrQixvZUN2Qi9CLHFtR0F3RUE7MkZEakRhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7NlVBcURHLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUVsQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IERhdGVQaXBlLCBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aW9uLCBCdXR0b24sIENvbG9yLCBDb2x1bW4sIERldGFpbHNEaWFsb2dDb25maWcsIEZvcm1Db25maWcsIEljb24sIFRhYmxlQ29uZmlnLCBBcGlSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlLCBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UaW5Db3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJ1dHRvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idXR0b24uc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZGl0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmRpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IERldGFpbHNEaWFsb2dMaXRlIH0gZnJvbSAnLi9kZXRhaWxzRGlhbG9nLWxpdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLXRhYmxlLWxpdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtbGl0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWxpdGUuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlTGl0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLCBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdGFibGVDb25maWdTZXJ2aWNlOiBUYWJsZUNvbmZpZ1NlcnZpY2UsIHByaXZhdGUgY29uZGl0aW9uU2VydmljZTogQ29uZGl0aW9uU2VydmljZSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHtcbiAgICAvLyBkZXRlY3Qgc2NyZWVuIHNpemUgY2hhbmdlc1xuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XG4gICAgICB0aGlzLnNtYWxsU2NyZWVuID0gcmVzdWx0Lm1hdGNoZXM7XG4gICAgICB0aGlzLnVwZGF0ZVRhYmxlQ29uZmlndXJhdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICBpZiAodGhpcy5jb25maWc/LmZvcm1Db25maWcpIHtcbiAgICAgIHRoaXMuaGFzRm9ybUFjY2VzcyA9IENvcmUuY2hlY2tGb3JtQWNjZXNzKHRoaXMuY29uZmlnLmZvcm1Db25maWcsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0Zvcm1BY2Nlc3MpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIH1cblxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmxvYWRBY3Rpb24gJiYgIXRoaXMuY29uZmlnLnNlYXJjaENvbmZpZykge1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4odGhpcy5kYXRhU291cmNlKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy50YWJsZVBhZ2luYXRvcjsgfSwgMTAwMClcbiAgfVxuXG5cbiAgZWxldmF0aW9uID0gXCJtYXQtZWxldmF0aW9uLXo1XCI7XG4gIGFjdGlvbnNXaWR0aCA9IFwiNTBweFwiO1xuICBzaG93RmlsdGVyQnV0dG9uID0gdHJ1ZTtcbiAgdGlsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgc21hbGxTY3JlZW4gPSBmYWxzZVxuICBoYXNGb3JtQWNjZXNzID0gdHJ1ZTtcblxuICAvL1RhYmxlXG4gIHRhYmxlRGF0YVNvdXJjZTtcbiAgZGF0YVNvdXJjZTogYW55W107XG4gIGRpc3BsYXllZENvbHVtbnMgPSBbXVxuICBkaXNwbGF5ZWRCdXR0b25zID0gW11cbiAgb3JpZ2luYWxUYWJsZUxvYWRBY3Rpb246IEFjdGlvblxuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlUGFnaW5hdG9yJykgdGFibGVQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgdGlsZURhdGE6IGFueSA9IFtdO1xuICBASW5wdXQoKSBjb25maWc6IFRhYmxlQ29uZmlnO1xuICBASW5wdXQoKSByZWxvYWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIEBPdXRwdXQoKSBkYXRhTG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlZnJlc2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlYXJjaENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY3JlYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWN0aW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29tcG9uZW50KCkge1xuICAgIHRoaXMudXBkYXRlVGFibGVDb25maWd1cmF0aW9uKCk7XG4gICAgdGhpcy5zZXR1cERhdGFMb2FkaW5nKCk7XG4gICAgdGhpcy5mb3JtRGVmYXVsdHMoKTtcbiAgICB0aGlzLm9yaWdpbmFsVGFibGVMb2FkQWN0aW9uID0geyAuLi50aGlzLmNvbmZpZy5sb2FkQWN0aW9uIH0gLy9Db3JlLmdldENsb25lKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24pO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55Pih0aGlzLmRhdGFTb3VyY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5lbGV2YXRpb24gPSB0aGlzLmdldEVsZXZhdGlvbkNsYXNzKHRoaXMuY29uZmlnPy5lbGV2YXRpb24pO1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLnNldENvbHVtbnModGhpcy5jb25maWcsIHRoaXMuc21hbGxTY3JlZW4pO1xuICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXREaXNwbGF5ZWRCdXR0b25zKHRoaXMuY29uZmlnPy5idXR0b25zLCB0aGlzLnNtYWxsU2NyZWVuLCB0aGlzLmNvbmZpZz8ubWluQnV0dG9ucyk7XG4gICAgdGhpcy5hY3Rpb25zV2lkdGggPSB0aGlzLnRhYmxlQ29uZmlnU2VydmljZS5nZXRBY3Rpb25zV2lkdGgodGhpcy5kaXNwbGF5ZWRCdXR0b25zLCB0aGlzLmNvbmZpZyk7XG5cbiAgICBpZiAodGhpcy5jb25maWc/LnNlYXJjaENvbmZpZykge1xuICAgICAgdGhpcy5zaG93RmlsdGVyQnV0dG9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5zaG93RmlsdGVyQnV0dG9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zaG93RmlsdGVyQnV0dG9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGlzcGxheWVkQnV0dG9ucz8ubGVuZ3RoID4gMCAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKCdhY3Rpb24nKSkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBEYXRhTG9hZGluZygpIHtcbiAgICBpZiAodGhpcy5jb25maWcubG9hZEFjdGlvbikge1xuICAgICAgdGhpcy5sb2FkRGF0YSh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uLCBcIlwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWxvYWQpIHtcbiAgICAgIHRoaXMucmVsb2FkLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgaWYgKHYgJiYgdGhpcy5jb25maWc/LmxvYWRBY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sIFwiXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsb2FkRGF0YShhY3Rpb246IEFjdGlvbiwgZGF0YTogYW55KSB7XG5cbiAgICAvL2lmIHNlYXJjaENvbmZpZyBpcyBzZXQsIHVzZSBsYXN0IHNlYXJjaFxuXG5cbiAgICBpZiAoYWN0aW9uLm1ldGhvZCA9PSAncG9zdCcpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zZWFyY2hDb25maWcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhc3RTZWFyY2gpIHJldHVybjtcbiAgICAgICAgZGF0YSA9IHRoaXMubGFzdFNlYXJjaDtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGlmIChhY3Rpb24pIHtcblxuICAgICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGFjdGlvbiwgZGF0YSkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcubG9nUmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhhcGlSZXNwb25zZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gYXBpUmVzcG9uc2UuZGF0YVxuICAgICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShhcGlSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnRhYmxlUGFnaW5hdG9yO1xuXG4gICAgICAgICAgdGhpcy5kYXRhTG9hZGVkKGFwaVJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgaWYgKGFwaVJlc3BvbnNlLm1lc3NhZ2UgIT0gXCJzdWNjZXNzXCIgJiYgYXBpUmVzcG9uc2UubWVzc2FnZSAhPSBcIlwiKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBpbnB1dENoYW5nZWQoZXZlbnQpIHtcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIHZhbHVlOiBldmVudC52YWx1ZSB9KVxuICB9XG5cbiAgZm9ybURlZmF1bHRzKCkge1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5mb3JtQ29uZmlnKSB7XG4gICAgICBsZXQgY29uZmlnID0gbmV3IEZvcm1Db25maWdcblxuICAgICAgY29uZmlnLmZpZWxkcyA9IFtdXG5cbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuXG4gICAgICAgIGxldCBmaWVsZCA9IHsgbmFtZTogY29sdW1uLm5hbWUsIHR5cGU6IGNvbHVtbi50eXBlIH1cbiAgICAgICAgY29uZmlnLmZpZWxkcy5wdXNoKGZpZWxkKVxuXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb25maWcuZm9ybUNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG4gIH1cblxuICBzZXRDb2x1bW5zKCkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLnNldENvbHVtbnModGhpcy5jb25maWcsIHRoaXMuc21hbGxTY3JlZW4pO1xuICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXREaXNwbGF5ZWRCdXR0b25zKHRoaXMuY29uZmlnLmJ1dHRvbnMsIHRoaXMuc21hbGxTY3JlZW4sIHRoaXMuY29uZmlnLm1pbkJ1dHRvbnMpO1xuICAgIHRoaXMuYWN0aW9uc1dpZHRoID0gdGhpcy50YWJsZUNvbmZpZ1NlcnZpY2UuZ2V0QWN0aW9uc1dpZHRoKHRoaXMuZGlzcGxheWVkQnV0dG9ucywgdGhpcy5jb25maWcpO1xuXG4gICAgaWYgKHRoaXMuZGlzcGxheWVkQnV0dG9ucy5sZW5ndGggPiAwICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXMoJ2FjdGlvbicpKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgnYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0QnV0dG9ucygpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJ1dHRvbnMpIHJldHVyblxuICAgIGlmICghdGhpcy5zbWFsbFNjcmVlbikge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucztcbiAgICB9XG4gIH1cblxuICBnZXRCdXR0b24obmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b24odGhpcy5jb25maWcuYnV0dG9ucywgbmFtZSk7XG4gIH1cblxuICBnZXRJY29uKGJ1dHRvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0SWNvbihidXR0b24sIHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIGdldEJ1dHRvbkNvbG9yKGJ1dHRvbjogQnV0dG9uLCByb3cpIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KTtcbiAgfVxuXG4gIGdldE9wdGlvbnMoY29sdW1uKSB7XG4gICAgbGV0IHggPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQob3B0ID0+IG9wdC5uYW1lID09PSBjb2x1bW4pO1xuICAgIHJldHVybiB4XG4gIH1cblxuICBnZXRDb2xvcih2YWx1ZTogYW55LCBvcHRpb25zOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU2VydmljZS5nZXRDb2xvcih2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICB0ZXN0SWNvbkNvbmRpdGlvbihyb3c6IGFueSwgaWNvbjogSWNvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblNlcnZpY2UudGVzdEljb25Db25kaXRpb24oaWNvbiwgcm93KTtcbiAgfVxuXG4gIHRlc3RDb2xvckNvbmRpdGlvbihyb3c6IGFueSwgY29sb3I6IENvbG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU2VydmljZS50ZXN0Q29sb3JDb25kaXRpb24oY29sb3IsIHJvdyk7XG4gIH1cblxuICBzaG93QmFubmVyKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGlmIChtZXNzYWdlICYmIG1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm8obWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdERpc2FibGVkKHJvdywgYnV0dG9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpO1xuICB9XG5cbiAgLy8gdGVzdFZpc2libGUocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcbiAgLy8gICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3RWaXNpYmxlKGJ1dHRvbiwgcm93KTtcbiAgLy8gfVxuXG5cblxuICAvL0V2ZW50c1xuICBsYXN0U2VhcmNoXG4gIHNlYXJjaENsaWNrZWQoeCkge1xuICAgIHRoaXMuc2VhcmNoQ2xpY2suZW1pdCh4KTtcbiAgICB0aGlzLmxhc3RTZWFyY2ggPSB4O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnNlYXJjaENvbmZpZy5zZWFyY2hBY3Rpb24pIHtcbiAgICAgIHRoaXMuY29uZmlnLmxvYWRBY3Rpb24gPSB7IC4uLnRoaXMuY29uZmlnLnNlYXJjaENvbmZpZy5zZWFyY2hBY3Rpb24gfS8vQ29yZS5nZXRDbG9uZSh0aGlzLmNvbmZpZy5zZWFyY2hDb25maWcuc2VhcmNoQWN0aW9uKTtcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcubG9hZEFjdGlvbiwgeCk7XG4gICAgfVxuICB9XG5cbiAgdGlsZUNsaWNrZWQodGlsZSkge1xuICAgIHRoaXMuY29uZmlnLmxvYWRBY3Rpb24gPSB7IC4uLnRpbGUuZGF0YS5hY3Rpb24gfS8vQ29yZS5nZXRDbG9uZSh0aWxlLmRhdGEuYWN0aW9uKTtcbiAgICB0aGlzLnJlZnJlc2hDbGlja2VkKCk7XG4gIH1cblxuICB0aWxlVW5DbGlja2VkKHRpbGUpIHtcbiAgICB0aGlzLmNvbmZpZy5sb2FkQWN0aW9uID0geyAuLi50aGlzLm9yaWdpbmFsVGFibGVMb2FkQWN0aW9uIH0vL0NvcmUuZ2V0Q2xvbmUodGhpcy5vcmlnaW5hbFRhYmxlTG9hZEFjdGlvbik7XG4gICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xuICB9XG5cbiAgcmVmcmVzaENsaWNrZWQoKSB7XG4gICAgdGhpcy5yZWZyZXNoQ2xpY2suZW1pdCgpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24pIHtcblxuICAgICAgdGhpcy5sb2FkRGF0YSh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uLCBcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhTG9hZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgZGF0YUxvYWRlZCh4KSB7XG4gICAgdGhpcy5kYXRhTG9hZC5lbWl0KHgpXG5cbiAgICBpZiAodGhpcy5jb25maWcudGlsZUNvbmZpZz8ubG9hZEFjdGlvbikge1xuICAgICAgdGhpcy50aWxlUmVsb2FkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgYWN0aW9uQ2xpY2tlZChuYW1lOiBzdHJpbmcsIHJvdzogYW55KSB7XG4gICAgaWYgKG5hbWUgPT09ICd2aWV3Jykge1xuICAgICAgdGhpcy52aWV3TW9kZWwocm93KTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdlZGl0Jykge1xuICAgICAgdGhpcy5lZGl0TW9kZWwocm93KTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgICB0aGlzLmRlbGV0ZU1vZGVsKHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VzdG9tTW9kZWwobmFtZSwgcm93KTtcbiAgICB9XG4gIH1cblxuXG4gIC8vRGlhbG9nIGV2ZW50c1xuICBjb2x1bW5DbGlja2VkKGNvbHVtbjogQ29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLmRldGFpbHNDb25maWcpIHtcbiAgICAgIHRoaXMub3Blbihjb2x1bW4ubmFtZSwgcm93LCBjb2x1bW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGNvbHVtbi5uYW1lLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIGN1c3RvbU1vZGVsKG5hbWUsIHJvdykge1xuICAgIHRoaXMub3BlbihuYW1lLCByb3cpO1xuICB9XG5cblxuICBhY3Rpb25DbGlja2VkRW1pdChuYW1lLCByb3cpIHtcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoeyBuYW1lOiBuYW1lLCBkYXRhOiByb3cgfSk7XG4gIH1cblxuICB2aWV3TW9kZWwocm93KSB7XG4gICAgdGhpcy5vcGVuKCd2aWV3Jywgcm93KTtcbiAgfVxuXG4gIG5ld01vZGVsKCkge1xuICAgIHRoaXMub3BlbignY3JlYXRlJywgbnVsbCk7XG4gIH1cblxuICBlZGl0TW9kZWwocm93KSB7XG4gICAgdGhpcy5vcGVuKCdlZGl0Jywgcm93KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbihidXR0b25OYW1lOiBzdHJpbmcsIHJvdzogYW55IHwgbnVsbCwgY29sdW1uPzogQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5Db25maWd1cmVkRGV0YWlsc0RpYWxvZyhidXR0b25OYW1lLCByb3csIHRoaXMuY29uZmlnLCBEZXRhaWxzRGlhbG9nTGl0ZSwgY29sdW1uKS5zdWJzY3JpYmUocmVzdWx0ID0+IHsgLy8gVW5pcXVlIHRvIGxpdGVcbiAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSAnZG9BY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuZG9BY3Rpb24ocmVzdWx0Lm5hbWUsIHJlc3VsdC5yb3cpO1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KHJlc3VsdC5uYW1lLCByZXN1bHQucm93KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ2lucHV0Q2hhbmdlJykge1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlZChyZXN1bHQuY2hhbmdlKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdzdWNjZXNzJykge1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbk5hbWUsIHJlc3VsdC5kYXRhKTtcbiAgICAgICAgdGhpcy5hY3Rpb25SZXNwb25zZS5lbWl0KHsgbmFtZTogYnV0dG9uTmFtZSwgZGF0YTogcmVzdWx0LmRhdGEgfSk7XG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdlbWl0Jykge1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbk5hbWUsIHJlc3VsdC5kYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZU1vZGVsKHJvdykge1xuXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCdkZWxldGUnKTtcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xuXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGBERUxFVEUgP2ApLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdCgnZGVsZXRlJywgcm93KVxuICAgICAgICB0aGlzLmRvQWN0aW9uKGJ1dHRvbi5uYW1lLCByb3cpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuXG4gIC8vQWN0aW9uc1xuICBkb0FjdGlvbihidXR0b25OYW1lOiBzdHJpbmcsIHJvdykge1xuXG4gICAgbGV0IGIgPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKVxuXG4gICAgaWYgKCFiKSByZXR1cm47XG4gICAgaWYgKCFiLmFjdGlvbikgcmV0dXJuO1xuXG4gICAgaWYgKGIuc2V0SGVyb0ZpZWxkICYmIHRoaXMuY29uZmlnLmhlcm9WYWx1ZSkge1xuICAgICAgcm93W3RoaXMuY29uZmlnLmhlcm9GaWVsZF0gPSB0aGlzLmNvbmZpZy5oZXJvVmFsdWU7XG4gICAgfVxuXG5cbiAgICBpZiAoYi5jb25maXJtKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYCR7Yi5jb25maXJtLm1lc3NhZ2V9YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XG4gICAgICAgICAgdGhpcy5leGVjQWN0aW9uKGIsIHJvdylcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhlY0FjdGlvbihiLCByb3cpXG4gICAgfVxuXG4gIH1cblxuICBleGVjQWN0aW9uKGJ1dHRvbjogQnV0dG9uLCByb3cpIHtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYnV0dG9uLmFjdGlvbiwgcm93KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XG5cbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XG5cbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLm1lc3NhZ2UuaW5jbHVkZXMoXCJhcHByb3ZhbFwiKSB8fCBhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiYXBwcm92ZVwiKSB8fCBhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiZGVjbGluZVwiKSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSAhPSBcInN1Y2Nlc3NcIiAmJiBhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwiXCIpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGRhdGVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFjdGlvblJlc3BvbnNlLmVtaXQoeyBuYW1lOiBidXR0b24ubmFtZSwgZGF0YTogYXBpUmVzcG9uc2UgfSk7XG4gICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuXG4gIC8vTWlzY1xuICBwcml2YXRlIGdldEVsZXZhdGlvbkNsYXNzKGVsZXZhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGlmIChlbGV2YXRpb24gPT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBcIlwiXG4gICAgfVxuICAgIGVsc2UgaWYgKGVsZXZhdGlvbiA9PSBcImxvd1wiKSB7XG4gICAgICByZXR1cm4gXCJtYXQtZWxldmF0aW9uLXoxXCJcbiAgICB9XG4gICAgZWxzZSBpZiAoZWxldmF0aW9uID09IFwibWVkaXVtXCIpIHtcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejVcIlxuICAgIH1cbiAgICBlbHNlIGlmIChlbGV2YXRpb24gPT0gXCJoaWdoXCIpIHtcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejlcIlxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejVcIlxuICAgIH1cblxuICB9XG5cbn1cbiIsIlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0Zvcm1BY2Nlc3NcIj5cbiAgPCEtLSBTZWFyY2ggLS0+XG4gIDxzcGEtc2VhcmNoXG4gICAgKm5nSWY9XCJjb25maWcuc2VhcmNoQ29uZmlnXCIgW2NvbmZpZ109XCJjb25maWcuc2VhcmNoQ29uZmlnXCIgW3NtYWxsU2NyZWVuXT1cInNtYWxsU2NyZWVuXCIgW3RhYmxlRGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7XCIgKHNlYXJjaENsaWNrKT1cInNlYXJjaENsaWNrZWQoJGV2ZW50KVwiPlxuICA8L3NwYS1zZWFyY2g+XG5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxhcHAtdGFibGUtaGVhZGVyXG4gICAgW2NvbmZpZ109XCJjb25maWdcIiBbZGF0YV09XCJkYXRhU291cmNlXCIgW3RhYmxlRGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiBbdGlsZUNvbmZpZ109XCJjb25maWcudGlsZUNvbmZpZ1wiIFt0aWxlRGF0YV09XCJ0aWxlRGF0YVwiIFt0aWxlUmVsb2FkXT1cInRpbGVSZWxvYWRcIiBbbGFzdFNlYXJjaF09XCJsYXN0U2VhcmNoXCIgW3NtYWxsU2NyZWVuXT1cInNtYWxsU2NyZWVuXCJcbiAgICBbc2hvd0ZpbHRlckJ1dHRvbl09XCJzaG93RmlsdGVyQnV0dG9uXCIgKGNyZWF0ZUNsaWNrKT1cIm5ld01vZGVsKClcIiAoY3VzdG9tQ2xpY2spPVwiY3VzdG9tTW9kZWwoJGV2ZW50LG51bGwpXCJcbiAgICAocmVmcmVzaENsaWNrKT1cInJlZnJlc2hDbGlja2VkKClcIiAodGlsZUNsaWNrKT1cInRpbGVDbGlja2VkKCRldmVudClcIiAodGlsZVVuQ2xpY2spPVwidGlsZVVuQ2xpY2tlZCgkZXZlbnQpXCI+XG4gIDwvYXBwLXRhYmxlLWhlYWRlcj5cblxuXG4gIDwhLS0gVGFibGUgLS0+XG4gIDxkaXY+XG5cbiAgICA8cCAqbmdJZj1cIiFjb25maWdcIj48ZW0+Q29uZmlndXJlIFRhYmxlPC9lbT48L3A+XG4gICAgPHAgKm5nSWY9XCIhZGF0YVNvdXJjZVwiPjxlbT5Mb2FkaW5nLi4uPC9lbT48L3A+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiAoIXNtYWxsU2NyZWVuIHx8IChzbWFsbFNjcmVlbiAmJiBkYXRhU291cmNlPy5sZW5ndGggPiAwKSlcIj5cblxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiAgW25nQ2xhc3NdPVwiZWxldmF0aW9uXCI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbmZpZy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgPnt7IGNvbHVtbi5hbGlhcyA/PyBjb2x1bW4ubmFtZSB8IGNhbWVsVG9Xb3JkcyB9fTwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztcIiBjbGFzcz1cInJpZ2h0LXBhZGRpbmdcIiA+XG5cbiAgICAgICAgICAgIDwhLS0gUm93cyAtLT5cbiAgICAgICAgICAgIDxhcHAtdGFibGUtcm93IFtjb2x1bW5dPVwiY29sdW1uXCIgW3Jvd109XCJyb3dcIiBbY29uZmlnXT1cImNvbmZpZ1wiIFtzbWFsbFNjcmVlbl09XCJzbWFsbFNjcmVlblwiXG4gICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGlja2VkKGNvbHVtbi5uYW1lLCByb3cpXCIgKGNvbHVtbkNsaWNrKT1cImNvbHVtbkNsaWNrZWQoY29sdW1uLCByb3cpXCIgKHNob3dCYW5uZXJFdmVudCk9XCJzaG93QmFubmVyKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvYXBwLXRhYmxlLXJvdz5cblxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gQWN0aW9uIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFtuZ1N0eWxlXT1cInt3aWR0aDpmYWxzZSA/ICc1MHB4JyA6IGFjdGlvbnNXaWR0aH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1jb250YWluZXJcIj5cblxuICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XG4gICAgICAgICAgICAgIDxhcHAtdGFibGUtYWN0aW9uXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXllZEJ1dHRvbnNdPVwiZGlzcGxheWVkQnV0dG9uc1wiIFtjb25maWddPVwiY29uZmlnXCIgW3Jvd109XCJyb3dcIiAoYWN0aW9uQ2xpY2spPVwiYWN0aW9uQ2xpY2tlZCgkZXZlbnQubmFtZSwgJGV2ZW50LnJvdylcIj5cbiAgICAgICAgICAgICAgPC9hcHAtdGFibGUtYWN0aW9uPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiIFtuZ0NsYXNzXT1cInsnbWFrZS1ncmF5JzogKGNvbmZpZy5ncmV5T3V0ICYmIGNvbmZpZy5ncmV5T3V0KHJvdykpIHx8IHJvdy5wZW5kaW5nQXBwcm92YWx9XCI+PC90cj5cbiAgICAgIDwvdGFibGU+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiAoIXNtYWxsU2NyZWVuIHx8IChzbWFsbFNjcmVlbiAmJiBkYXRhU291cmNlPy5sZW5ndGggPiAwKSlcIiAjdGFibGVQYWdpbmF0b3IgW3BhZ2VTaXplT3B0aW9uc109XCJjb25maWcucGFnZVNpemVzID8/IFsxMCwgMjAsIDUwXVwiIHNob3dGaXJzdExhc3RCdXR0b25zPjwvbWF0LXBhZ2luYXRvcj5cblxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidGluLWNlbnRlclwiPlxuICAgIDxwICpuZ0lmPVwiZGF0YVNvdXJjZT8ubGVuZ3RoID09IDBcIj48ZW0+e3tjb25maWcubm9EYXRhTWVzc2FnZSA/PyAnTm8gRGF0YSd9fTwvZW0+PC9wPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0Zvcm1BY2Nlc3NcIj5cbiAgPGRpdiBjbGFzcz1cInRpbi1jZW50ZXJcIj5cbiAgICA8cD48ZW0+QWNjZXNzIFJlc3RyaWN0ZWQ8L2VtPjwvcD5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbGl0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS1saXRlL3RhYmxlLWxpdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtbGl0ZS90YWJsZS1saXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBc0QsVUFBVSxFQUFrQyxNQUFNLHVCQUF1QixDQUFDO0FBTXZJLE9BQU8sRUFBRSxJQUFJLEVBQTBCLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUsvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFuRSxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFlBQW9CLFdBQTJCLEVBQVUsY0FBOEIsRUFBVSxrQkFBc0MsRUFBUyxNQUFpQixFQUN2SixhQUE0QixFQUFVLGFBQTRCLEVBQVUsa0JBQXNDLEVBQVUsZ0JBQWtDLEVBQVUsV0FBd0I7UUFEdEwsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDdkosa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFV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SUFBSSxNQUFNLEVBQUU7WUFDNUIsT0FBTyxrQkFBa0IsQ0FBQTtTQUMxQjthQUNJO1lBQ0gsT0FBTyxrQkFBa0IsQ0FBQTtTQUMxQjtJQUVILENBQUM7OytHQWpiVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixvZUN2Qi9CLG1vR0F3RUE7MkZEakRhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7NlVBcURHLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUVsQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IERhdGVQaXBlLCBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aW9uLCBCdXR0b24sIENvbG9yLCBDb2x1bW4sIERldGFpbHNEaWFsb2dDb25maWcsIEZvcm1Db25maWcsIEljb24sIFRhYmxlQ29uZmlnLCBBcGlSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlLCBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UaW5Db3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJ1dHRvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idXR0b24uc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZGl0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmRpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IERldGFpbHNEaWFsb2dMaXRlIH0gZnJvbSAnLi9kZXRhaWxzRGlhbG9nLWxpdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLXRhYmxlLWxpdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtbGl0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWxpdGUuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlTGl0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLCBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdGFibGVDb25maWdTZXJ2aWNlOiBUYWJsZUNvbmZpZ1NlcnZpY2UsIHByaXZhdGUgY29uZGl0aW9uU2VydmljZTogQ29uZGl0aW9uU2VydmljZSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHtcbiAgICAvLyBkZXRlY3Qgc2NyZWVuIHNpemUgY2hhbmdlc1xuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XG4gICAgICB0aGlzLnNtYWxsU2NyZWVuID0gcmVzdWx0Lm1hdGNoZXM7XG4gICAgICB0aGlzLnVwZGF0ZVRhYmxlQ29uZmlndXJhdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICBpZiAodGhpcy5jb25maWc/LmZvcm1Db25maWcpIHtcbiAgICAgIHRoaXMuaGFzRm9ybUFjY2VzcyA9IENvcmUuY2hlY2tGb3JtQWNjZXNzKHRoaXMuY29uZmlnLmZvcm1Db25maWcsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0Zvcm1BY2Nlc3MpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIH1cblxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmxvYWRBY3Rpb24gJiYgIXRoaXMuY29uZmlnLnNlYXJjaENvbmZpZykge1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4odGhpcy5kYXRhU291cmNlKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy50YWJsZVBhZ2luYXRvcjsgfSwgMTAwMClcbiAgfVxuXG5cbiAgZWxldmF0aW9uID0gXCJtYXQtZWxldmF0aW9uLXo1XCI7XG4gIGFjdGlvbnNXaWR0aCA9IFwiNTBweFwiO1xuICBzaG93RmlsdGVyQnV0dG9uID0gdHJ1ZTtcbiAgdGlsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgc21hbGxTY3JlZW4gPSBmYWxzZVxuICBoYXNGb3JtQWNjZXNzID0gdHJ1ZTtcblxuICAvL1RhYmxlXG4gIHRhYmxlRGF0YVNvdXJjZTtcbiAgZGF0YVNvdXJjZTogYW55W107XG4gIGRpc3BsYXllZENvbHVtbnMgPSBbXVxuICBkaXNwbGF5ZWRCdXR0b25zID0gW11cbiAgb3JpZ2luYWxUYWJsZUxvYWRBY3Rpb246IEFjdGlvblxuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlUGFnaW5hdG9yJykgdGFibGVQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgdGlsZURhdGE6IGFueSA9IFtdO1xuICBASW5wdXQoKSBjb25maWc6IFRhYmxlQ29uZmlnO1xuICBASW5wdXQoKSByZWxvYWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIEBPdXRwdXQoKSBkYXRhTG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlZnJlc2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlYXJjaENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY3JlYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWN0aW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29tcG9uZW50KCkge1xuICAgIHRoaXMudXBkYXRlVGFibGVDb25maWd1cmF0aW9uKCk7XG4gICAgdGhpcy5zZXR1cERhdGFMb2FkaW5nKCk7XG4gICAgdGhpcy5mb3JtRGVmYXVsdHMoKTtcbiAgICB0aGlzLm9yaWdpbmFsVGFibGVMb2FkQWN0aW9uID0geyAuLi50aGlzLmNvbmZpZy5sb2FkQWN0aW9uIH0gLy9Db3JlLmdldENsb25lKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24pO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55Pih0aGlzLmRhdGFTb3VyY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5lbGV2YXRpb24gPSB0aGlzLmdldEVsZXZhdGlvbkNsYXNzKHRoaXMuY29uZmlnPy5lbGV2YXRpb24pO1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLnNldENvbHVtbnModGhpcy5jb25maWcsIHRoaXMuc21hbGxTY3JlZW4pO1xuICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLmdldERpc3BsYXllZEJ1dHRvbnModGhpcy5jb25maWc/LmJ1dHRvbnMsIHRoaXMuc21hbGxTY3JlZW4sIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmFjdGlvbnNXaWR0aCA9IHRoaXMudGFibGVDb25maWdTZXJ2aWNlLmdldEFjdGlvbnNXaWR0aCh0aGlzLmRpc3BsYXllZEJ1dHRvbnMsIHRoaXMuY29uZmlnKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoQ29uZmlnKSB7XG4gICAgICB0aGlzLnNob3dGaWx0ZXJCdXR0b24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWc/LnNob3dGaWx0ZXJCdXR0b24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNob3dGaWx0ZXJCdXR0b24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRCdXR0b25zPy5sZW5ndGggPiAwICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXMoJ2FjdGlvbicpKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgnYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cERhdGFMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sIFwiXCIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbG9hZCkge1xuICAgICAgdGhpcy5yZWxvYWQuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICBpZiAodiAmJiB0aGlzLmNvbmZpZz8ubG9hZEFjdGlvbikge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcubG9hZEFjdGlvbiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvYWREYXRhKGFjdGlvbjogQWN0aW9uLCBkYXRhOiBhbnkpIHtcblxuICAgIC8vaWYgc2VhcmNoQ29uZmlnIGlzIHNldCwgdXNlIGxhc3Qgc2VhcmNoXG5cblxuICAgIGlmIChhY3Rpb24ubWV0aG9kID09ICdwb3N0Jykge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLnNlYXJjaENvbmZpZykge1xuICAgICAgICBpZiAoIXRoaXMubGFzdFNlYXJjaCkgcmV0dXJuO1xuICAgICAgICBkYXRhID0gdGhpcy5sYXN0U2VhcmNoO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgaWYgKGFjdGlvbikge1xuXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYWN0aW9uLCBkYXRhKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2dSZXNwb25zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGFwaVJlc3BvbnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBhcGlSZXNwb25zZS5kYXRhXG4gICAgICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKGFwaVJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMudGFibGVQYWdpbmF0b3I7XG5cbiAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQoYXBpUmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSAhPSBcInN1Y2Nlc3NcIiAmJiBhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIGlucHV0Q2hhbmdlZChldmVudCkge1xuICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh7IGZpZWxkOiBldmVudC5maWVsZCwgdmFsdWU6IGV2ZW50LnZhbHVlIH0pXG4gIH1cblxuICBmb3JtRGVmYXVsdHMoKSB7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmZvcm1Db25maWcpIHtcbiAgICAgIGxldCBjb25maWcgPSBuZXcgRm9ybUNvbmZpZ1xuXG4gICAgICBjb25maWcuZmllbGRzID0gW11cblxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG5cbiAgICAgICAgbGV0IGZpZWxkID0geyBuYW1lOiBjb2x1bW4ubmFtZSwgdHlwZTogY29sdW1uLnR5cGUgfVxuICAgICAgICBjb25maWcuZmllbGRzLnB1c2goZmllbGQpXG5cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvbmZpZy5mb3JtQ29uZmlnID0gY29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIHNldEJ1dHRvbnMoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5idXR0b25zKSByZXR1cm5cbiAgICBpZiAoIXRoaXMuc21hbGxTY3JlZW4pIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuY29uZmlnLmJ1dHRvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuY29uZmlnLmJ1dHRvbnM7XG4gICAgfVxuICB9XG5cbiAgZ2V0QnV0dG9uKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0QnV0dG9uKHRoaXMuY29uZmlnLmJ1dHRvbnMsIG5hbWUpO1xuICB9XG5cbiAgZ2V0SWNvbihidXR0b25OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEljb24oYnV0dG9uLCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93KSB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XG4gIH1cblxuICBnZXRPcHRpb25zKGNvbHVtbikge1xuICAgIGxldCB4ID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKG9wdCA9PiBvcHQubmFtZSA9PT0gY29sdW1uKTtcbiAgICByZXR1cm4geFxuICB9XG5cbiAgZ2V0Q29sb3IodmFsdWU6IGFueSwgb3B0aW9uczogYW55W10pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblNlcnZpY2UuZ2V0Q29sb3IodmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgdGVzdEljb25Db25kaXRpb24ocm93OiBhbnksIGljb246IEljb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TZXJ2aWNlLnRlc3RJY29uQ29uZGl0aW9uKGljb24sIHJvdyk7XG4gIH1cblxuICB0ZXN0Q29sb3JDb25kaXRpb24ocm93OiBhbnksIGNvbG9yOiBDb2xvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblNlcnZpY2UudGVzdENvbG9yQ29uZGl0aW9uKGNvbG9yLCByb3cpO1xuICB9XG5cbiAgc2hvd0Jhbm5lcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAobWVzc2FnZSAmJiBtZXNzYWdlICE9PSAnJykge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHRlc3REaXNhYmxlZChyb3csIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UudGVzdERpc2FibGVkKGJ1dHRvbiwgcm93KTtcbiAgfVxuXG4gIC8vIHRlc3RWaXNpYmxlKHJvdywgYnV0dG9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XG4gIC8vICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0VmlzaWJsZShidXR0b24sIHJvdyk7XG4gIC8vIH1cblxuXG5cbiAgLy9FdmVudHNcbiAgbGFzdFNlYXJjaFxuICBzZWFyY2hDbGlja2VkKHgpIHtcbiAgICB0aGlzLnNlYXJjaENsaWNrLmVtaXQoeCk7XG4gICAgdGhpcy5sYXN0U2VhcmNoID0geDtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZWFyY2hDb25maWcuc2VhcmNoQWN0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZy5sb2FkQWN0aW9uID0geyAuLi50aGlzLmNvbmZpZy5zZWFyY2hDb25maWcuc2VhcmNoQWN0aW9uIH0vL0NvcmUuZ2V0Q2xvbmUodGhpcy5jb25maWcuc2VhcmNoQ29uZmlnLnNlYXJjaEFjdGlvbik7XG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sIHgpO1xuICAgIH1cbiAgfVxuXG4gIHRpbGVDbGlja2VkKHRpbGUpIHtcbiAgICB0aGlzLmNvbmZpZy5sb2FkQWN0aW9uID0geyAuLi50aWxlLmRhdGEuYWN0aW9uIH0vL0NvcmUuZ2V0Q2xvbmUodGlsZS5kYXRhLmFjdGlvbik7XG4gICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xuICB9XG5cbiAgdGlsZVVuQ2xpY2tlZCh0aWxlKSB7XG4gICAgdGhpcy5jb25maWcubG9hZEFjdGlvbiA9IHsgLi4udGhpcy5vcmlnaW5hbFRhYmxlTG9hZEFjdGlvbiB9Ly9Db3JlLmdldENsb25lKHRoaXMub3JpZ2luYWxUYWJsZUxvYWRBY3Rpb24pO1xuICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcbiAgfVxuXG4gIHJlZnJlc2hDbGlja2VkKCkge1xuICAgIHRoaXMucmVmcmVzaENsaWNrLmVtaXQoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKSB7XG5cbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5jb25maWcubG9hZEFjdGlvbiwgXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YUxvYWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGFMb2FkZWQoeCkge1xuICAgIHRoaXMuZGF0YUxvYWQuZW1pdCh4KVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnRpbGVDb25maWc/LmxvYWRBY3Rpb24pIHtcbiAgICAgIHRoaXMudGlsZVJlbG9hZC5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGlvbkNsaWNrZWQobmFtZTogc3RyaW5nLCByb3c6IGFueSkge1xuICAgIGlmIChuYW1lID09PSAndmlldycpIHtcbiAgICAgIHRoaXMudmlld01vZGVsKHJvdyk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnZWRpdCcpIHtcbiAgICAgIHRoaXMuZWRpdE1vZGVsKHJvdyk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnZGVsZXRlJykge1xuICAgICAgdGhpcy5kZWxldGVNb2RlbChyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1c3RvbU1vZGVsKG5hbWUsIHJvdyk7XG4gICAgfVxuICB9XG5cblxuICAvL0RpYWxvZyBldmVudHNcbiAgY29sdW1uQ2xpY2tlZChjb2x1bW46IENvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbi5kZXRhaWxzQ29uZmlnKSB7XG4gICAgICBjb25zdCBidXR0b246IEJ1dHRvbiA9IHsgbmFtZTogY29sdW1uLm5hbWUsIGRpYWxvZzogdHJ1ZSwgZGV0YWlsc0NvbmZpZzogY29sdW1uLmRldGFpbHNDb25maWcgfVxuICAgICAgdGhpcy5vcGVuKGJ1dHRvbiwgcm93LCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoY29sdW1uLm5hbWUsIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgY3VzdG9tTW9kZWwobmFtZSwgcm93KSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24obmFtZSk7XG4gICAgdGhpcy5vcGVuKGJ1dHRvbiwgcm93KTtcbiAgfVxuXG5cbiAgYWN0aW9uQ2xpY2tlZEVtaXQobmFtZSwgcm93KSB7XG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHsgbmFtZTogbmFtZSwgZGF0YTogcm93IH0pO1xuICB9XG5cbiAgdmlld01vZGVsKHJvdykge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCd2aWV3Jyk7XG4gICAgdGhpcy5vcGVuKGJ1dHRvbiwgcm93KTtcbiAgfVxuXG4gIG5ld01vZGVsKCkge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCdjcmVhdGUnKTtcbiAgICB0aGlzLm9wZW4oYnV0dG9uLCBudWxsKTtcbiAgfVxuXG4gIGVkaXRNb2RlbChyb3cpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbignZWRpdCcpO1xuICAgIHRoaXMub3BlbihidXR0b24sIHJvdyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW4oYnV0dG9uOiBCdXR0b24sIHJvdzogYW55IHwgbnVsbCk6IHZvaWQge1xuXG4gICAgY29uc3QgYnV0dG9uTmFtZSA9IGJ1dHRvbi5uYW1lXG5cbiAgICBsZXQgYnRuOiBCdXR0b24gPSB7XG4gICAgICAuLi5idXR0b24sXG4gICAgICBkZXRhaWxzQ29uZmlnOiBidXR0b24uZGV0YWlsc0NvbmZpZyA/PyB7XG4gICAgICAgIC4uLmJ1dHRvbi5kZXRhaWxzQ29uZmlnLFxuICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmNvbmZpZy5mb3JtQ29uZmlnLFxuICAgICAgICBzdGVwQ29uZmlnOiB0aGlzLmNvbmZpZy5zdGVwQ29uZmlnLFxuICAgICAgICBidXR0b25zOiB0aGlzLmNvbmZpZy5idXR0b25zLFxuICAgICAgICBoZXJvRmllbGQ6IHRoaXMuY29uZmlnLmhlcm9GaWVsZCxcbiAgICAgICAgaGVyb1ZhbHVlOiB0aGlzLmNvbmZpZy5oZXJvVmFsdWUsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5Db25maWd1cmVkRGV0YWlsc0RpYWxvZyhidG4sIHJvdywgRGV0YWlsc0RpYWxvZ0xpdGUsKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSAnZG9BY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuZG9BY3Rpb24ocmVzdWx0Lm5hbWUsIHJlc3VsdC5yb3cpO1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KHJlc3VsdC5uYW1lLCByZXN1bHQucm93KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ2lucHV0Q2hhbmdlJykge1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlZChyZXN1bHQuY2hhbmdlKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdzdWNjZXNzJykge1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbk5hbWUsIHJlc3VsdC5kYXRhKTtcbiAgICAgICAgdGhpcy5hY3Rpb25SZXNwb25zZS5lbWl0KHsgbmFtZTogYnV0dG9uTmFtZSwgZGF0YTogcmVzdWx0LmRhdGEgfSk7XG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT09ICdlbWl0Jykge1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbk5hbWUsIHJlc3VsdC5kYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZU1vZGVsKHJvdykge1xuXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCdkZWxldGUnKTtcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xuXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGBERUxFVEUgP2ApLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdCgnZGVsZXRlJywgcm93KVxuICAgICAgICB0aGlzLmRvQWN0aW9uKGJ1dHRvbi5uYW1lLCByb3cpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuXG4gIC8vQWN0aW9uc1xuICBkb0FjdGlvbihidXR0b25OYW1lOiBzdHJpbmcsIHJvdykge1xuXG4gICAgbGV0IGIgPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKVxuXG4gICAgaWYgKCFiKSByZXR1cm47XG4gICAgaWYgKCFiLmFjdGlvbikgcmV0dXJuO1xuXG4gICAgaWYgKGIuc2V0SGVyb0ZpZWxkICYmIHRoaXMuY29uZmlnLmhlcm9WYWx1ZSkge1xuICAgICAgcm93W3RoaXMuY29uZmlnLmhlcm9GaWVsZF0gPSB0aGlzLmNvbmZpZy5oZXJvVmFsdWU7XG4gICAgfVxuXG5cbiAgICBpZiAoYi5jb25maXJtKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYCR7Yi5jb25maXJtLm1lc3NhZ2V9YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XG4gICAgICAgICAgdGhpcy5leGVjQWN0aW9uKGIsIHJvdylcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhlY0FjdGlvbihiLCByb3cpXG4gICAgfVxuXG4gIH1cblxuICBleGVjQWN0aW9uKGJ1dHRvbjogQnV0dG9uLCByb3cpIHtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYnV0dG9uLmFjdGlvbiwgcm93KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XG5cbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XG5cbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLm1lc3NhZ2UuaW5jbHVkZXMoXCJhcHByb3ZhbFwiKSB8fCBhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiYXBwcm92ZVwiKSB8fCBhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiZGVjbGluZVwiKSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSAhPSBcInN1Y2Nlc3NcIiAmJiBhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwiXCIpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGRhdGVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFjdGlvblJlc3BvbnNlLmVtaXQoeyBuYW1lOiBidXR0b24ubmFtZSwgZGF0YTogYXBpUmVzcG9uc2UgfSk7XG4gICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuXG4gIC8vTWlzY1xuICBwcml2YXRlIGdldEVsZXZhdGlvbkNsYXNzKGVsZXZhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGlmIChlbGV2YXRpb24gPT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBcIlwiXG4gICAgfVxuICAgIGVsc2UgaWYgKGVsZXZhdGlvbiA9PSBcImxvd1wiKSB7XG4gICAgICByZXR1cm4gXCJtYXQtZWxldmF0aW9uLXoxXCJcbiAgICB9XG4gICAgZWxzZSBpZiAoZWxldmF0aW9uID09IFwibWVkaXVtXCIpIHtcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejVcIlxuICAgIH1cbiAgICBlbHNlIGlmIChlbGV2YXRpb24gPT0gXCJoaWdoXCIpIHtcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejlcIlxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBcIm1hdC1lbGV2YXRpb24tejVcIlxuICAgIH1cblxuICB9XG5cbn1cbiIsIlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0Zvcm1BY2Nlc3NcIj5cbiAgPCEtLSBTZWFyY2ggLS0+XG4gIDxzcGEtc2VhcmNoXG4gICAgKm5nSWY9XCJjb25maWcuc2VhcmNoQ29uZmlnXCIgW2NvbmZpZ109XCJjb25maWcuc2VhcmNoQ29uZmlnXCIgW3NtYWxsU2NyZWVuXT1cInNtYWxsU2NyZWVuXCIgW3RhYmxlRGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7XCIgKHNlYXJjaENsaWNrKT1cInNlYXJjaENsaWNrZWQoJGV2ZW50KVwiPlxuICA8L3NwYS1zZWFyY2g+XG5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxhcHAtdGFibGUtaGVhZGVyXG4gICAgW2NvbmZpZ109XCJjb25maWdcIiBbZGF0YV09XCJkYXRhU291cmNlXCIgW3RhYmxlRGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiBbdGlsZUNvbmZpZ109XCJjb25maWcudGlsZUNvbmZpZ1wiIFt0aWxlRGF0YV09XCJ0aWxlRGF0YVwiIFt0aWxlUmVsb2FkXT1cInRpbGVSZWxvYWRcIiBbbGFzdFNlYXJjaF09XCJsYXN0U2VhcmNoXCIgW3NtYWxsU2NyZWVuXT1cInNtYWxsU2NyZWVuXCJcbiAgICBbc2hvd0ZpbHRlckJ1dHRvbl09XCJzaG93RmlsdGVyQnV0dG9uXCIgKGNyZWF0ZUNsaWNrKT1cIm5ld01vZGVsKClcIiAoY3VzdG9tQ2xpY2spPVwiY3VzdG9tTW9kZWwoJGV2ZW50LG51bGwpXCJcbiAgICAocmVmcmVzaENsaWNrKT1cInJlZnJlc2hDbGlja2VkKClcIiAodGlsZUNsaWNrKT1cInRpbGVDbGlja2VkKCRldmVudClcIiAodGlsZVVuQ2xpY2spPVwidGlsZVVuQ2xpY2tlZCgkZXZlbnQpXCI+XG4gIDwvYXBwLXRhYmxlLWhlYWRlcj5cblxuXG4gIDwhLS0gVGFibGUgLS0+XG4gIDxkaXY+XG5cbiAgICA8cCAqbmdJZj1cIiFjb25maWdcIj48ZW0+Q29uZmlndXJlIFRhYmxlPC9lbT48L3A+XG4gICAgPHAgKm5nSWY9XCIhZGF0YVNvdXJjZVwiPjxlbT5Mb2FkaW5nLi4uPC9lbT48L3A+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiAoIXNtYWxsU2NyZWVuIHx8IChzbWFsbFNjcmVlbiAmJiBkYXRhU291cmNlPy5sZW5ndGggPiAwKSlcIj5cblxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJ0YWJsZURhdGFTb3VyY2VcIiAgW25nQ2xhc3NdPVwiZWxldmF0aW9uXCI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbmZpZy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgPnt7IGNvbHVtbi5hbGlhcyA/PyBjb2x1bW4ubmFtZSB8IGNhbWVsVG9Xb3JkcyB9fTwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztcIiBjbGFzcz1cInJpZ2h0LXBhZGRpbmdcIiA+XG5cbiAgICAgICAgICAgIDwhLS0gUm93cyAtLT5cbiAgICAgICAgICAgIDxhcHAtdGFibGUtcm93IFtjb2x1bW5dPVwiY29sdW1uXCIgW3Jvd109XCJyb3dcIiBbY29uZmlnXT1cImNvbmZpZ1wiIFtzbWFsbFNjcmVlbl09XCJzbWFsbFNjcmVlblwiXG4gICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGlja2VkKGNvbHVtbi5uYW1lLCByb3cpXCIgKGNvbHVtbkNsaWNrKT1cImNvbHVtbkNsaWNrZWQoY29sdW1uLCByb3cpXCIgKHNob3dCYW5uZXJFdmVudCk9XCJzaG93QmFubmVyKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvYXBwLXRhYmxlLXJvdz5cblxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gQWN0aW9uIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFtuZ1N0eWxlXT1cInt3aWR0aDpmYWxzZSA/ICc1MHB4JyA6IGFjdGlvbnNXaWR0aH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1jb250YWluZXJcIj5cblxuICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XG4gICAgICAgICAgICAgIDxhcHAtdGFibGUtYWN0aW9uXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXllZEJ1dHRvbnNdPVwiZGlzcGxheWVkQnV0dG9uc1wiIFtjb25maWddPVwiY29uZmlnXCIgW3NtYWxsU2NyZWVuXT1cInNtYWxsU2NyZWVuXCIgW3Jvd109XCJyb3dcIiAoYWN0aW9uQ2xpY2spPVwiYWN0aW9uQ2xpY2tlZCgkZXZlbnQubmFtZSwgJGV2ZW50LnJvdylcIj5cbiAgICAgICAgICAgICAgPC9hcHAtdGFibGUtYWN0aW9uPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiIFtuZ0NsYXNzXT1cInsnbWFrZS1ncmF5JzogKGNvbmZpZy5ncmV5T3V0ICYmIGNvbmZpZy5ncmV5T3V0KHJvdykpIHx8IHJvdy5wZW5kaW5nQXBwcm92YWx9XCI+PC90cj5cbiAgICAgIDwvdGFibGU+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiAoIXNtYWxsU2NyZWVuIHx8IChzbWFsbFNjcmVlbiAmJiBkYXRhU291cmNlPy5sZW5ndGggPiAwKSlcIiAjdGFibGVQYWdpbmF0b3IgW3BhZ2VTaXplT3B0aW9uc109XCJjb25maWcucGFnZVNpemVzID8/IFsxMCwgMjAsIDUwXVwiIHNob3dGaXJzdExhc3RCdXR0b25zPjwvbWF0LXBhZ2luYXRvcj5cblxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidGluLWNlbnRlclwiPlxuICAgIDxwICpuZ0lmPVwiZGF0YVNvdXJjZT8ubGVuZ3RoID09IDBcIj48ZW0+e3tjb25maWcubm9EYXRhTWVzc2FnZSA/PyAnTm8gRGF0YSd9fTwvZW0+PC9wPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0Zvcm1BY2Nlc3NcIj5cbiAgPGRpdiBjbGFzcz1cInRpbi1jZW50ZXJcIj5cbiAgICA8cD48ZW0+QWNjZXNzIFJlc3RyaWN0ZWQ8L2VtPjwvcD5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|