@rosoftlab/material 1.0.0-alpha-10 → 1.0.0-alpha-12
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/lib/components/generic-table/generic-table.component.mjs +8 -9
- package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +8 -9
- package/esm2022/lib/decorators/grid-layout.decorator.mjs +1 -1
- package/esm2022/lib/models/grid-layout.mjs +1 -1
- package/esm2022/lib/models/material-base-model.mjs +1 -1
- package/esm2022/lib/rsl-material-module.mjs +18 -12
- package/esm2022/lib/services/dialog.service-implementation.mjs +110 -0
- package/esm2022/lib/services/grid-layout.service.mjs +5 -5
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/rosoftlab-material.mjs +108 -101
- package/fesm2022/rosoftlab-material.mjs.map +1 -1
- package/lib/components/generic-table/generic-table.component.d.ts +2 -2
- package/lib/components/searchable-dropdown/searchable-dropdown.component.d.ts +1 -1
- package/lib/rsl-material-module.d.ts +42 -41
- package/lib/services/index.d.ts +1 -0
- package/package.json +2 -2
- package/public-api.d.ts +1 -1
- package/esm2022/services/dialog.service-implementation.mjs +0 -110
- /package/{services → lib/services}/dialog.service-implementation.d.ts +0 -0
@@ -9,11 +9,10 @@ import { BaseService, CellTextAlign, GridLayoutFormat } from '@rosoftlab/core';
|
|
9
9
|
import * as jsonLogic from 'json-logic-js/logic.js';
|
10
10
|
import { Subject, fromEvent, merge, of } from 'rxjs';
|
11
11
|
import { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';
|
12
|
-
import { DialogServiceMaterial } from '../../../services/dialog.service-implementation';
|
13
|
-
import { RSLMaterialModule } from '../../rsl-material-module';
|
14
12
|
import { GridLayoutService } from '../../services';
|
13
|
+
import { DialogServiceMaterial } from '../../services/dialog.service-implementation';
|
15
14
|
import * as i0 from "@angular/core";
|
16
|
-
import * as i1 from "
|
15
|
+
import * as i1 from "../../services/dialog.service-implementation";
|
17
16
|
import * as i2 from "@angular/router";
|
18
17
|
import * as i3 from "@angular/common";
|
19
18
|
import * as i4 from "@angular/forms";
|
@@ -365,13 +364,13 @@ export class GenericTableComponent {
|
|
365
364
|
getCellClass(model, property) {
|
366
365
|
return model.getCellClass(property);
|
367
366
|
}
|
368
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
369
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: GenericTableComponent, isStandalone: true, selector: "rsl-generic-table", inputs: { modelType: "modelType", baseService: "baseService", gridLayoutService: "gridLayoutService", editLink: "editLink", defaultSort: "defaultSort", defaultSortDirection: "defaultSortDirection", deleteDisableRule: "deleteDisableRule", deletePropertyName: "deletePropertyName", hasSearch: "hasSearch", searchFields: "searchFields", defaultFilter: "defaultFilter", allowReorderItems: "allowReorderItems", stickyColumns: "stickyColumns", editOnClick: "editOnClick", editOnDblClick: "editOnDblClick", allowEdit: "allowEdit", popupEdit: "popupEdit", customInclude: "customInclude", changeItemPosition: "changeItemPosition", infiniteScroll: "infiniteScroll" }, outputs: { selectedObject: "selectedObject", click: "click", editModel: "editModel" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ElementRef, descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "matTableRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>", styles: [".mat-column-delete{flex:0 0 90px;padding-right:30px}.mat-sort-header-button{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-column-position{flex:0 0 60px!important}.mat-table{overflow-x:auto}[hidden]{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: RSLMaterialModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { 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: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
367
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1.DialogServiceMaterial }, { token: i2.Router }, { token: i3.DatePipe }, { token: i3.DecimalPipe }, { token: i3.PercentPipe }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
368
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: GenericTableComponent, selector: "rsl-generic-table", inputs: { modelType: "modelType", baseService: "baseService", gridLayoutService: "gridLayoutService", editLink: "editLink", defaultSort: "defaultSort", defaultSortDirection: "defaultSortDirection", deleteDisableRule: "deleteDisableRule", deletePropertyName: "deletePropertyName", hasSearch: "hasSearch", searchFields: "searchFields", defaultFilter: "defaultFilter", allowReorderItems: "allowReorderItems", stickyColumns: "stickyColumns", editOnClick: "editOnClick", editOnDblClick: "editOnDblClick", allowEdit: "allowEdit", popupEdit: "popupEdit", customInclude: "customInclude", changeItemPosition: "changeItemPosition", infiniteScroll: "infiniteScroll" }, outputs: { selectedObject: "selectedObject", click: "click", editModel: "editModel" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ElementRef, descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "matTableRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>", styles: [".mat-column-delete{flex:0 0 90px;padding-right:30px}.mat-sort-header-button{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-column-position{flex:0 0 60px!important}.mat-table{overflow-x:auto}[hidden]{display:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { 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: "directive", type: i12.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
370
369
|
}
|
371
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: GenericTableComponent, decorators: [{
|
372
371
|
type: Component,
|
373
|
-
args: [{
|
374
|
-
}], ctorParameters:
|
372
|
+
args: [{ selector: 'rsl-generic-table', encapsulation: ViewEncapsulation.None, template: "<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>", styles: [".mat-column-delete{flex:0 0 90px;padding-right:30px}.mat-sort-header-button{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-column-position{flex:0 0 60px!important}.mat-table{overflow-x:auto}[hidden]{display:none!important}\n"] }]
|
373
|
+
}], ctorParameters: () => [{ type: i1.DialogServiceMaterial }, { type: i2.Router }, { type: i3.DatePipe }, { type: i3.DecimalPipe }, { type: i3.PercentPipe }, { type: i0.Renderer2 }], propDecorators: { modelType: [{
|
375
374
|
type: Input
|
376
375
|
}], baseService: [{
|
377
376
|
type: Input
|
@@ -433,4 +432,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
|
|
433
432
|
}], editModel: [{
|
434
433
|
type: Output
|
435
434
|
}] } });
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFpQixXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFRLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQWMsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0s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QUUsVUFBVSxFQUFFO2dCQUs5QixjQUFjO3NCQUF2QixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIFBlcmNlbnRQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCYXNlUXVlcnlEYXRhLCBCYXNlU2VydmljZSwgQ2VsbFRleHRBbGlnbiwgR3JpZExheW91dEZvcm1hdCwgUnVsZSB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcbmltcG9ydCAqIGFzIGpzb25Mb2dpYyBmcm9tICdqc29uLWxvZ2ljLWpzL2xvZ2ljLmpzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIG1lcmdlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlTWF0ZXJpYWwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZS1pbXBsZW1lbnRhdGlvbic7XHJcbmltcG9ydCB7IEdyaWRMYXlvdXRNb2RlbCwgTWF0ZXJpYWxCYXNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBSU0xNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uLy4uL3JzbC1tYXRlcmlhbC1tb2R1bGUnO1xyXG5pbXBvcnQgeyBHcmlkTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBzZWxlY3RvcjogJ3JzbC1nZW5lcmljLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgaW1wb3J0czogW1JTTE1hdGVyaWFsTW9kdWxlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1RhYmxlQ29tcG9uZW50PFQgZXh0ZW5kcyBNYXRlcmlhbEJhc2VNb2RlbD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgLy8gZGlzcGxheWVkQ29sdW1ucyA9IFsnY29kZSddOyAvLywgJ25hbWUnLCAnY2lmJywgJ2NpdHknLCAnYWRkcmVzcycsICdzdGF0ZScsICdwcmljZUxpc3ROYW1lJywgJ2RlbGV0ZSddO1xyXG4gIEBJbnB1dCgpIG1vZGVsVHlwZTogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcclxuICBASW5wdXQoKSBiYXNlU2VydmljZTogQmFzZVNlcnZpY2U8VD47XHJcbiAgQElucHV0KCkgZ3JpZExheW91dFNlcnZpY2U/OiBHcmlkTGF5b3V0U2VydmljZTxUPjtcclxuICBASW5wdXQoKSBlZGl0TGluazogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0OiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBkZWxldGVEaXNhYmxlUnVsZTogUnVsZVtdO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZVByb3BlcnR5TmFtZTogc3RyaW5nID0gJ25hbWUnO1xyXG4gIEBJbnB1dCgpIGhhc1NlYXJjaDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZHM6IHN0cmluZztcclxuICBASW5wdXQoKSBkZWZhdWx0RmlsdGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWxsb3dSZW9yZGVySXRlbXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc3RpY2t5Q29sdW1uczogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBlZGl0T25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRPbkRibENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWxsb3dFZGl0OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwb3B1cEVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjdXN0b21JbmNsdWRlOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGNoYW5nZUl0ZW1Qb3NpdGlvbjogKHByZXZJdGVtOiBULCBjdXJyZW50SXRlbTogVCkgPT4gYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbmZpbml0ZVNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICByZXN1bHRzTGVuZ3RoID0gMDtcclxuICBpc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICBpc1JhdGVMaW1pdFJlYWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgZmlsdGVyVmFsdWU6IHN0cmluZztcclxuICBwcml2YXRlIGZpbHRlckNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIGZpbHRlckNoYW5nZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvblxyXG5cclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoRWxlbWVudFJlZiwgeyBzdGF0aWM6IGZhbHNlIH0pIGZpbHRlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlOiBNYXRUYWJsZTxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHB1YmxpYyBtYXRUYWJsZVJlZjogRWxlbWVudFJlZjtcclxuICByZXNpemVTdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtOiBUO1xyXG4gIGdyaWRMYXlvdXQ6IEdyaWRMYXlvdXRNb2RlbFtdO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZE9iamVjdDogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG4gIEBPdXRwdXQoKSBjbGljazogRXZlbnRFbWl0dGVyPHsgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG1vZGVsOiBUIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHByb3BlcnR5TmFtZTogc3RyaW5nLCBtb2RlbDogVCB9PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0TW9kZWw6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuXHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgLy8gcnVsZUVuZ2luZVNlcnZpY2U6IFJ1bGVFbmdpbmVTZXJ2aWNlPFQ+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VNYXRlcmlhbCxcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBudW1iZXJQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcGVyY2VudFBpcGU6IFBlcmNlbnRQaXBlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmJhc2VTZXJ2aWNlICE9PSB1bmRlZmluZWQgfHwgdGhpcy5iYXNlU2VydmljZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkTGF5b3V0U2VydmljZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkTGF5b3V0ID0gdGhpcy5ncmlkTGF5b3V0U2VydmljZS5nZXRHcmlkTGF5b3V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmJhc2VTZXJ2aWNlLm5ld01vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5ncmlkTGF5b3V0ID0gbW9kZWwuZ2V0R3JpZExheW91dCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5hbGxvd1Jlb3JkZXJJdGVtcykge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKCdwb3NpdGlvbicpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2guYXBwbHkodGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB0aGlzLmdyaWRMYXlvdXQubWFwKHggPT4geC5wcm9wZXJ0eU5hbWUpKTtcclxuICAgICAgaWYgKCF0aGlzLmVkaXRPbkNsaWNrICYmICF0aGlzLmVkaXRPbkRibENsaWNrICYmIHRoaXMuYWxsb3dFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ2RlbGV0ZScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyQ2hhbmdlZFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShuZXdUZXh0ID0+IHtcclxuICAgICAgICBpZiAobmV3VGV4dC5sZW5ndGggPj0gMyB8fCBuZXdUZXh0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gbmV3VGV4dDtcclxuXHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAvLyB0aGlzLmdldEdyaWRMYXlvdXQoKTtcclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwKTtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gMTU7XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0U29ydCkge1xyXG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gdGhpcy5kZWZhdWx0U29ydDtcclxuICAgICAgaWYgKHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gJ2FzYyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICBtZXJnZSh0aGlzLnNvcnQuc29ydENoYW5nZSwgdGhpcy5wYWdpbmF0b3IucGFnZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3RhcnRXaXRoKHt9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAoZGF0YSA9PiB7XHJcbiAgICAgICAgICAvLyBGbGlwIGZsYWcgdG8gc2hvdyB0aGF0IGxvYWRpbmcgaGFzIGZpbmlzaGVkLlxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gZGF0YS5nZXRNZXRhKCkubWV0YS5jb3VudDtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0TW9kZWxzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIENhdGNoIGlmIHRoZSBHaXRIdWIgQVBJIGhhcyByZWFjaGVkIGl0cyByYXRlIGxpbWl0LiBSZXR1cm4gZW1wdHkgZGF0YS5cclxuICAgICAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgICAvLyAgIGxldCBvbGREYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEgPz8gbnVsbDtcclxuICAgICAgICAvLyAgIC8vIGlmIChvbGREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vICAgLy8gICBvbGREYXRhID0gZGF0YTtcclxuICAgICAgICAvLyAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIG9sZERhdGE9b2xkRGF0YS5jb25jYXQoZGF0YSk7XHJcbiAgICAgICAgLy8gICAvLyB9XHJcbiAgICAgICAgLy8gICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IG9sZERhdGE7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKVxyXG4gIH1cclxuICBnZXREYXRhKCk6IE9ic2VydmFibGU8QmFzZVF1ZXJ5RGF0YTxUPj4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBhZ2VJbmRleCA9ICh0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggfHwgMCkgKyAxO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCAyMDtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuXHJcbiAgICBsZXQgc29ydHMgPSAnJztcclxuICAgIGlmICh0aGlzLnNvcnQuYWN0aXZlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnQuZGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgICBzb3J0cyA9ICctJyArIHRoaXMuc29ydC5hY3RpdmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc29ydHMgPSB0aGlzLnNvcnQuYWN0aXZlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNTZWFyY2gpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXJzQXJyID0gdGhpcy5zZWFyY2hGaWVsZHMuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIC8vIGZpbHRlcnNBcnIuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAvLyAgIGZpbHRlcnMucHVzaChlbGVtZW50ICsgJ0A9KicgKyB0aGlzLmZpbHRlclZhbHVlKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBjb25zdCB5ID0gJygnICsgdGhpcy5zZWFyY2hGaWVsZHMucmVwbGFjZSgnLCcsICd8JykgKyAnKSc7XHJcbiAgICAgICAgZmlsdGVycy5wdXNoKHkgKyAnQD0qJyArIHRoaXMuZmlsdGVyVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0RmlsdGVyKSB7XHJcbiAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsdGVyc1ZhbHVlID0gZmlsdGVycy5qb2luKCcsICcpO1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVNlcnZpY2UuZ2V0QWxsKHBhZ2VJbmRleCwgcGFnZVNpemUsIHNvcnRzLCBmaWx0ZXJzVmFsdWUsIHRoaXMuY3VzdG9tSW5jbHVkZSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoRm9ybSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IGRhdGEuZ2V0TWV0YSgpLm1ldGEuY291bnQ7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhLmdldE1vZGVscygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBoaWdobGlnaHQoZWxlbWVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaGlnaGxpZ2h0ZWQgPSBlbGVtZW50LmhpZ2hsaWdodGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG4gICAgZWxlbWVudC5oaWdobGlnaHRlZCA9ICFlbGVtZW50LmhpZ2hsaWdodGVkO1xyXG4gICAgaWYgKGVsZW1lbnQuaGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlbGVtZW50O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmVtaXQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRlbGV0ZU9iamVjdChtb2RlbDogVCkge1xyXG4gICAgY29uc3QgbXNnID0gJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSAnICsgbW9kZWxbdGhpcy5kZWxldGVQcm9wZXJ0eU5hbWVdICsgJz8nO1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obXNnKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2UuZGVsZXRlKG1vZGVsLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGVtcERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QuZW1pdChudWxsKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pZCAhPT0gbW9kZWwuaWQpIHtcclxuICAgICAgICAgICAgICB0ZW1wRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGVtcERhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBlZGl0T2JqZWN0KG1vZGVsOiBUKSB7XHJcbiAgICBpZiAoIXRoaXMucG9wdXBFZGl0KSB7XHJcbiAgICAgIGNvbnN0IGlkID0gbW9kZWwuaWQ7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmVkaXRMaW5rLCBpZF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0TW9kZWwuZW1pdChtb2RlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEZsZXhTdHlsZShjb2x1bW46IEdyaWRMYXlvdXRNb2RlbCkge1xyXG4gICAgaWYgKGNvbHVtbi53aWR0aCkge1xyXG4gICAgICBjb25zdCBzdHlsZSA9IGNvbHVtbi5ncm93ICsgJyAnICsgY29sdW1uLnNocmluayArICcgJyArIGNvbHVtbi53aWR0aCArICdweCc7XHJcbiAgICAgIHJldHVybiBzdHlsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2VsbFRleHRBbGlnbihjb2x1bW46IEdyaWRMYXlvdXRNb2RlbCkge1xyXG4gICAgcmV0dXJuIGNvbHVtbi50ZXh0QWxpZ24gPz8gQ2VsbFRleHRBbGlnbi5sZWZ0O1xyXG4gIH1cclxuXHJcbiAgc2hvd1BpY3R1cmVDZWxsKGNvbHVtbjogR3JpZExheW91dE1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKGNvbHVtbj8uZm9ybWF0aW5nID8/IEdyaWRMYXlvdXRGb3JtYXQubm9uZSkgPT09IEdyaWRMYXlvdXRGb3JtYXQucGljdHVyZTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZURpc2FibGVkKG1vZGVsOiBUKSB7XHJcbiAgICBpZiAodGhpcy5kZWxldGVEaXNhYmxlUnVsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZVJ1bGUodGhpcy5kZWxldGVEaXNhYmxlUnVsZSwgbW9kZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBjZWxsQ2xpY2sobW9kZWw6IFQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNsaWNrLmVtaXQoeyBwcm9wZXJ0eU5hbWUsIG1vZGVsIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsdWF0ZVJ1bGUocnVsZXM6IFJ1bGVbXSwgbW9kZWw6IFQpOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xyXG4gICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcclxuICAgICAgbGV0IGpzb25SdWxlOiBhbnk7XHJcbiAgICAgIGlmICh0eXBlb2YgcnVsZS5ydWxlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGpzb25SdWxlID0gSlNPTi5wYXJzZShydWxlLnJ1bGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGpzb25SdWxlID0gcnVsZS5ydWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChydWxlLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gJ3snICsgcnVsZS5wYXJhbWV0ZXJzLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gJ1wiJyArIGl0ZW0gKyAnXCI6XCInICsgbW9kZWxbaXRlbV0gKyAnXCInO1xyXG4gICAgICAgIH0pLmpvaW4oJywnKSArICd9JztcclxuICAgICAgICByZXN1bHQgPSBqc29uTG9naWMuYXBwbHkoanNvblJ1bGUsIEpTT04ucGFyc2UoZGF0YSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IGpzb25Mb2dpYy5hcHBseShqc29uUnVsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgZ2V0Q2VsVmFsdWUocm93OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIGlmICghcm93KVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIC8vIGlmIChwcm9wZXJ0eU5hbWUgPT0gJ2tvbXBldGVuemVuU3RkZXYnKVxyXG4gICAgLy8gICBjb25zb2xlLmxvZyhwcm9wZXJ0eU5hbWUpO1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPT09IC0xKSB7XHJcbiAgICAgIHZhciBncmlkTGF5b3V0ID0gdGhpcy5ncmlkTGF5b3V0LmZpbmQoZiA9PiBmLnByb3BlcnR5TmFtZS5pbmRleE9mKHByb3BlcnR5TmFtZSkgPiAtMSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdGVkVmFsdWUoZ3JpZExheW91dCwgcm93W3Byb3BlcnR5TmFtZV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJvcCA9IHByb3BlcnR5TmFtZS5zcGxpdCgnLicpWzBdO1xyXG4gICAgICBjb25zdCBzdWJQcm9wID0gcHJvcGVydHlOYW1lLnJlcGxhY2UocHJvcCArICcuJywgJycpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDZWxWYWx1ZShyb3dbcHJvcF0sIHN1YlByb3ApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGdldEZvcm1hdGVkVmFsdWUoZ3JpZExheW91dDogR3JpZExheW91dE1vZGVsLCB2YWx1ZTogYW55KSB7XHJcblxyXG4gICAgaWYgKGdyaWRMYXlvdXQpIHtcclxuICAgICAgc3dpdGNoIChncmlkTGF5b3V0LmZvcm1hdGluZykge1xyXG4gICAgICAgIGNhc2UgR3JpZExheW91dEZvcm1hdC5kYXRlOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBncmlkTGF5b3V0LmZvcm1hdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEdyaWRMYXlvdXRGb3JtYXQubnVtYmVyOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyUGlwZS50cmFuc2Zvcm0odmFsdWUsIGdyaWRMYXlvdXQuZm9ybWF0KTtcclxuICAgICAgICBjYXNlIEdyaWRMYXlvdXRGb3JtYXQucGVyY2VudDpcclxuICAgICAgICAgIGNvbnN0IHZhbHVlUHJjID0gdmFsdWUgLyAxMDA7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJjZW50UGlwZS50cmFuc2Zvcm0odmFsdWVQcmMsIGdyaWRMYXlvdXQuZm9ybWF0KTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgfVxyXG4gIGRyb3BUYWJsZShldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuY2hhbmdlSXRlbVBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF07XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGFbZXZlbnQuY3VycmVudEluZGV4XTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmNoYW5nZUl0ZW1Qb3NpdGlvbihwcmV2SXRlbSwgY3VycmVudEl0ZW0pKSB7XHJcbiAgICAgICAgY29uc3QgcHJldkluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KChkKSA9PiBkID09PSBldmVudC5pdGVtLmRhdGEpO1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmRhdGFTb3VyY2UuZGF0YSwgcHJldkluZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgICAgIHRoaXMudGFibGUucmVuZGVyUm93cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzQ29sdW1uU3RpY2t5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1ucykge1xyXG4gICAgICBjb25zdCBmaWx0ZXJzQXJyID0gdGhpcy5zdGlja3lDb2x1bW5zLnNwbGl0KFwiLFwiKTtcclxuICAgICAgcmV0dXJuIGZpbHRlcnNBcnIuZmluZEluZGV4KGYgPT4gZiA9PSBuYW1lKSAhPT0gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHVwZGF0ZUVsZW1lbnQobW9kZWw6IFQpIHtcclxuICAgIC8vRmluZCBpZiBlbGVtZW50IGV4aXN0XHJcbiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGYgPT4gZi5pZCA9PT0gbW9kZWwuaWQpO1xyXG4gICAgaWYgKGN1cnJlbnRFbGVtZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IG1vZGVsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEucHVzaChtb2RlbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdEYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gbmV3RGF0YTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBmcm9tRXZlbnQodGhpcy5tYXRUYWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDcwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGU6IGFueSkgPT4gdGhpcy5vblRhYmxlU2Nyb2xsKGUpKTtcclxuICB9XHJcbiAgb25UYWJsZVNjcm9sbChlKSB7XHJcbiAgICBjb25zdCB0YWJsZVZpZXdIZWlnaHQgPSBlLnRhcmdldC5vZmZzZXRIZWlnaHQgLy8gdmlld3BvcnQ6IH41MDBweFxyXG4gICAgY29uc3QgdGFibGVTY3JvbGxIZWlnaHQgPSBlLnRhcmdldC5zY3JvbGxIZWlnaHQgLy8gbGVuZ3RoIG9mIGFsbCB0YWJsZVxyXG4gICAgY29uc3Qgc2Nyb2xsTG9jYXRpb24gPSBlLnRhcmdldC5zY3JvbGxUb3A7IC8vIGhvdyBmYXIgdXNlciBzY3JvbGxlZFxyXG5cclxuICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMjAwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxyXG4gICAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkID0gMjAwO1xyXG5cclxuICAgIGNvbnN0IHNjcm9sbFVwTGltaXQgPSBzY3JvbGxUaHJlc2hvbGQ7XHJcbiAgICBpZiAoc2Nyb2xsTG9jYXRpb24gPCBzY3JvbGxVcExpbWl0ICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDApIHtcclxuICAgICAgLy8gdGhpcy5maXJzdFBhZ2UtLTtcclxuICAgICAgY29uc29sZS5sb2coYG9uVGFibGVTY3JvbGwoKSBVUDogZmlyc3RQYWdlIGRlY3JlYXNlZCB0byAke3RoaXMucGFnaW5hdG9yLnBhZ2VJbmRleH0uIE5vdyBmZXRjaGluZyBkYXRhLi4uYCk7XHJcbiAgICAgIC8vIHRoaXMuZmV0Y2hEYXRhKCk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbFRvKHRhYmxlU2Nyb2xsSGVpZ2h0IC8gMiAtIDIgKiB0YWJsZVZpZXdIZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjcm9sbERvd25MaW1pdCA9IHRhYmxlU2Nyb2xsSGVpZ2h0IC0gdGFibGVWaWV3SGVpZ2h0IC0gc2Nyb2xsVGhyZXNob2xkO1xyXG4gICAgaWYgKHNjcm9sbExvY2F0aW9uID4gc2Nyb2xsRG93bkxpbWl0ICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA8IHRoaXMucGFnaW5hdG9yLmdldE51bWJlck9mUGFnZXMoKSkge1xyXG4gICAgICAvLyB0aGlzLmZpcnN0UGFnZSsrO1xyXG4gICAgICBjb25zb2xlLmxvZyhgb25UYWJsZVNjcm9sbCgpOiBmaXJzdFBhZ2UgaW5jcmVhc2VkIHRvICR7dGhpcy5wYWdpbmF0b3IucGFnZUluZGV4fS4gTm93IGZldGNoaW5nIGRhdGEuLi5gKTtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuICAgICAgLy8gdGhpcy5zY3JvbGxUbyh0YWJsZVNjcm9sbEhlaWdodCAvIDIgKyB0YWJsZVZpZXdIZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHNjcm9sbFRvKHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5tYXRUYWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsVG9wJywgcG9zaXRpb24pO1xyXG4gIH1cclxuICBnZXRDZWxsQ2xhc3MobW9kZWw6IFQsIHByb3BlcnR5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBtb2RlbC5nZXRDZWxsQ2xhc3MocHJvcGVydHkpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyWFwiICpuZ0lmPVwiaGFzU2VhcmNoXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCIgZnhMYXlvdXQuc209XCJjb2x1bW5cIiBmeEZsZXhGaWxsPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cclxuICAgICAgPG1hdC1sYWJlbD5GaWx0ZXI8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT0nZmlsdGVyVmFsdWUnIChuZ01vZGVsQ2hhbmdlKT0nZmlsdGVyQ2hhbmdlZC5uZXh0KCRldmVudCknICNmaWx0ZXI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiPlxyXG4gICAgPCEtLSAgI2FwcGxpY2F0aW9uc0NvbnRhaW5lciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWxvYWRpbmctc2hhZGVcIiAqbmdJZj1cImlzTG9hZGluZ1Jlc3VsdHMgfHwgaXNSYXRlTGltaXRSZWFjaGVkXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1Jlc3VsdHNcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1yYXRlLWxpbWl0LXJlYWNoZWRcIiAqbmdJZj1cImlzUmF0ZUxpbWl0UmVhY2hlZFwiPlxyXG4gICAgICAgIHt7J0dlbmVyYWwuTG9hZGluZ0RhdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPG1hdC10YWJsZSBmeEZsZXggI3RhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBpZD1cInRlbXBhbHRlLWZvcm1zLXRhYmxlXCIgbWF0U29ydCBtYXRTb3J0RGlzYWJsZUNsZWFyXHJcbiAgICAgIG1hdFNvcnREaXJlY3Rpb249XCJhc2NcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFTb3VyY2VcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BUYWJsZSgkZXZlbnQpXCI+XHJcbiAgICAgIDwhLS0gKHNjcm9sbCk9XCJvblRhYmxlU2Nyb2xsKCRldmVudClcIiAtLT5cclxuXHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCI+XHJcbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBkaXNhYmxlQ2xlYXI9XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8IS0tIHt7J0dlbmVyYWwuT3JkZXInIHwgdHJhbnNsYXRlfX0gLS0+XHJcbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgPG1hdC1jZWxsIGZ4RmxleCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+cmVvcmRlcjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyaWRMYXlvdXRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5wcm9wZXJ0eU5hbWVcIlxyXG4gICAgICAgIFtzdGlja3ldPVwiaXNDb2x1bW5TdGlja3koY29sdW1uLnByb3BlcnR5TmFtZSlcIj5cclxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsIG1hdC1zb3J0LWhlYWRlciBkaXNhYmxlQ2xlYXIgW3N0eWxlLmZsZXhdPVwiZ2V0RmxleFN0eWxlKGNvbHVtbilcIiAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7Y29sdW1uLnRyYW5zbGF0ZUtleSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgPG1hdC1jZWxsIG1hdFRvb2x0aXA9e3tnZXRDZWxWYWx1ZShyb3csY29sdW1uLnByb3BlcnR5TmFtZSl9fSBbc3R5bGUuZmxleF09XCJnZXRGbGV4U3R5bGUoY29sdW1uKVwiXHJcbiAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJnZXRDZWxsVGV4dEFsaWduKGNvbHVtbilcIiAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAgKGNsaWNrKT1cImNlbGxDbGljayhyb3csY29sdW1uLnByb3BlcnR5TmFtZSlcIj5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJvdyxjb2x1bW4ucHJvcGVydHlOYW1lKVwiICpuZ0lmPVwiIXNob3dQaWN0dXJlQ2VsbChjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgIHt7Z2V0Q2VsVmFsdWUocm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGltZyBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3Mocm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpXCIgKm5nSWY9XCJzaG93UGljdHVyZUNlbGwoY29sdW1uKVwiPlxyXG4gICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGVsZXRlXCIgc3RpY2t5RW5kICpuZ0lmPVwiIWVkaXRPbkNsaWNrICYmICFlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgZGlzYWJsZUNsZWFyPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyZWVuIGJ0bi1maWxsIGJ0bi13ZCBidG4tanVzdC1pY29uXCIgKGNsaWNrKT1cImVkaXRPYmplY3Qocm93KVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydHZW5lcmFsLkVkaXQnIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+ZWRpdDwvaT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpcHBsZS1jb250YWluZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcmVkIGJ0bi1maWxsIGJ0bi13ZCBidG4tanVzdC1pY29uXCIgKGNsaWNrKT1cImRlbGV0ZU9iamVjdChyb3cpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRlbGV0ZURpc2FibGVkKHJvdylcIiBtYXRUb29sdGlwPVwie3snR2VuZXJhbC5EZWxldGUnIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvaT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpcHBsZS1jb250YWluZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zO3N0aWNreTogdHJ1ZVwiPjwvbWF0LWhlYWRlci1yb3c+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVkaXRPbkNsaWNrICYmICFlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93O2xldCBpbmRleCA9IGRhdGFJbmRleDsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyZWQ6IHJvdy5ob3ZlcmVkLCBoaWdobGlnaHRlZDogcm93LmhpZ2hsaWdodGVkfVwiIChjbGljayk9XCJoaWdobGlnaHQocm93KVwiXHJcbiAgICAgICAgICAobW91c2VvdmVyKT1cInJvdy5ob3ZlcmVkID0gdHJ1ZVwiIChtb3VzZW91dCk9XCJyb3cuaG92ZXJlZCA9IGZhbHNlXCI+XHJcbiAgICAgICAgPC9tYXQtcm93PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0T25DbGljayAmJiAhZWRpdE9uRGJsQ2xpY2tcIj5cclxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdztsZXQgaW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwicm93XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcmVkOiByb3cuaG92ZXJlZCwgaGlnaGxpZ2h0ZWQ6IHJvdy5oaWdobGlnaHRlZH1cIiAoY2xpY2spPVwiZWRpdE9iamVjdChyb3cpXCJcclxuICAgICAgICAgIChtb3VzZW92ZXIpPVwicm93LmhvdmVyZWQgPSB0cnVlXCIgKG1vdXNlb3V0KT1cInJvdy5ob3ZlcmVkID0gZmFsc2VcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48L21hdC1yb3c+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlZGl0T25DbGljayAmJiBlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93O2xldCBpbmRleCA9IGRhdGFJbmRleDsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyZWQ6IHJvdy5ob3ZlcmVkLCBoaWdobGlnaHRlZDogcm93LmhpZ2hsaWdodGVkfVwiIChkYmxjbGljayk9XCJlZGl0T2JqZWN0KHJvdylcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImhpZ2hsaWdodChyb3cpXCIgKG1vdXNlb3Zlcik9XCJyb3cuaG92ZXJlZCA9IHRydWVcIiAobW91c2VvdXQpPVwicm93LmhvdmVyZWQgPSBmYWxzZVwiXHJcbiAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48L21hdC1yb3c+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBbbmdDbGFzc109XCJ7aG92ZXJlZDogcm93LmhvdmVyZWQsIGhpZ2hsaWdodGVkOiByb3cuaGlnaGxpZ2h0ZWR9XCJcclxuICAgICAgICAoY2xpY2spPVwiaGlnaGxpZ2h0KHJvdylcIiAobW91c2VvdmVyKT1cInJvdy5ob3ZlcmVkID0gdHJ1ZVwiIChtb3VzZW91dCk9XCJyb3cuaG92ZXJlZCA9IGZhbHNlXCIgLS0+XHJcbiAgICA8L21hdC10YWJsZT5cclxuICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgW2hpZGRlbl09XCJpbmZpbml0ZVNjcm9sbFwiIFtsZW5ndGhdPVwicmVzdWx0c0xlbmd0aFwiIFtwYWdlU2l6ZV09XCIxNVwiXHJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzE1LCAzMCwgIDEwMF1cIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFpQixXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFRLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQWMsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0s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Q0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFVcUMsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNILElBQUk7c0JBQXpDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDTSxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ3BCLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDK0IsV0FBVztzQkFBM0QsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUs5QixjQUFjO3NCQUF2QixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIFBlcmNlbnRQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCYXNlUXVlcnlEYXRhLCBCYXNlU2VydmljZSwgQ2VsbFRleHRBbGlnbiwgR3JpZExheW91dEZvcm1hdCwgUnVsZSB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcbmltcG9ydCAqIGFzIGpzb25Mb2dpYyBmcm9tICdqc29uLWxvZ2ljLWpzL2xvZ2ljLmpzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIG1lcmdlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBHcmlkTGF5b3V0TW9kZWwsIE1hdGVyaWFsQmFzZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgR3JpZExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2VNYXRlcmlhbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLWltcGxlbWVudGF0aW9uJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyc2wtZ2VuZXJpYy10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dlbmVyaWMtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1RhYmxlQ29tcG9uZW50PFQgZXh0ZW5kcyBNYXRlcmlhbEJhc2VNb2RlbD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgLy8gZGlzcGxheWVkQ29sdW1ucyA9IFsnY29kZSddOyAvLywgJ25hbWUnLCAnY2lmJywgJ2NpdHknLCAnYWRkcmVzcycsICdzdGF0ZScsICdwcmljZUxpc3ROYW1lJywgJ2RlbGV0ZSddO1xyXG4gIEBJbnB1dCgpIG1vZGVsVHlwZTogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcclxuICBASW5wdXQoKSBiYXNlU2VydmljZTogQmFzZVNlcnZpY2U8VD47XHJcbiAgQElucHV0KCkgZ3JpZExheW91dFNlcnZpY2U/OiBHcmlkTGF5b3V0U2VydmljZTxUPjtcclxuICBASW5wdXQoKSBlZGl0TGluazogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0OiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBkZWxldGVEaXNhYmxlUnVsZTogUnVsZVtdO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZVByb3BlcnR5TmFtZTogc3RyaW5nID0gJ25hbWUnO1xyXG4gIEBJbnB1dCgpIGhhc1NlYXJjaDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZHM6IHN0cmluZztcclxuICBASW5wdXQoKSBkZWZhdWx0RmlsdGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWxsb3dSZW9yZGVySXRlbXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc3RpY2t5Q29sdW1uczogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBlZGl0T25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRPbkRibENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWxsb3dFZGl0OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwb3B1cEVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjdXN0b21JbmNsdWRlOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGNoYW5nZUl0ZW1Qb3NpdGlvbjogKHByZXZJdGVtOiBULCBjdXJyZW50SXRlbTogVCkgPT4gYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbmZpbml0ZVNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICByZXN1bHRzTGVuZ3RoID0gMDtcclxuICBpc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICBpc1JhdGVMaW1pdFJlYWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgZmlsdGVyVmFsdWU6IHN0cmluZztcclxuICBwcml2YXRlIGZpbHRlckNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIGZpbHRlckNoYW5nZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvblxyXG5cclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoRWxlbWVudFJlZiwgeyBzdGF0aWM6IGZhbHNlIH0pIGZpbHRlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlOiBNYXRUYWJsZTxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHB1YmxpYyBtYXRUYWJsZVJlZjogRWxlbWVudFJlZjtcclxuICByZXNpemVTdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtOiBUO1xyXG4gIGdyaWRMYXlvdXQ6IEdyaWRMYXlvdXRNb2RlbFtdO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZE9iamVjdDogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG4gIEBPdXRwdXQoKSBjbGljazogRXZlbnRFbWl0dGVyPHsgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG1vZGVsOiBUIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHByb3BlcnR5TmFtZTogc3RyaW5nLCBtb2RlbDogVCB9PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0TW9kZWw6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuXHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgLy8gcnVsZUVuZ2luZVNlcnZpY2U6IFJ1bGVFbmdpbmVTZXJ2aWNlPFQ+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VNYXRlcmlhbCxcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBudW1iZXJQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcGVyY2VudFBpcGU6IFBlcmNlbnRQaXBlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmJhc2VTZXJ2aWNlICE9PSB1bmRlZmluZWQgfHwgdGhpcy5iYXNlU2VydmljZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkTGF5b3V0U2VydmljZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkTGF5b3V0ID0gdGhpcy5ncmlkTGF5b3V0U2VydmljZS5nZXRHcmlkTGF5b3V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmJhc2VTZXJ2aWNlLm5ld01vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5ncmlkTGF5b3V0ID0gbW9kZWwuZ2V0R3JpZExheW91dCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5hbGxvd1Jlb3JkZXJJdGVtcykge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKCdwb3NpdGlvbicpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2guYXBwbHkodGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB0aGlzLmdyaWRMYXlvdXQubWFwKHggPT4geC5wcm9wZXJ0eU5hbWUpKTtcclxuICAgICAgaWYgKCF0aGlzLmVkaXRPbkNsaWNrICYmICF0aGlzLmVkaXRPbkRibENsaWNrICYmIHRoaXMuYWxsb3dFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ2RlbGV0ZScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyQ2hhbmdlZFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShuZXdUZXh0ID0+IHtcclxuICAgICAgICBpZiAobmV3VGV4dC5sZW5ndGggPj0gMyB8fCBuZXdUZXh0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gbmV3VGV4dDtcclxuXHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAvLyB0aGlzLmdldEdyaWRMYXlvdXQoKTtcclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwKTtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gMTU7XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0U29ydCkge1xyXG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gdGhpcy5kZWZhdWx0U29ydDtcclxuICAgICAgaWYgKHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gJ2FzYyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICBtZXJnZSh0aGlzLnNvcnQuc29ydENoYW5nZSwgdGhpcy5wYWdpbmF0b3IucGFnZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3RhcnRXaXRoKHt9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAoZGF0YSA9PiB7XHJcbiAgICAgICAgICAvLyBGbGlwIGZsYWcgdG8gc2hvdyB0aGF0IGxvYWRpbmcgaGFzIGZpbmlzaGVkLlxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gZGF0YS5nZXRNZXRhKCkubWV0YS5jb3VudDtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0TW9kZWxzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIENhdGNoIGlmIHRoZSBHaXRIdWIgQVBJIGhhcyByZWFjaGVkIGl0cyByYXRlIGxpbWl0LiBSZXR1cm4gZW1wdHkgZGF0YS5cclxuICAgICAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgICAvLyAgIGxldCBvbGREYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEgPz8gbnVsbDtcclxuICAgICAgICAvLyAgIC8vIGlmIChvbGREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vICAgLy8gICBvbGREYXRhID0gZGF0YTtcclxuICAgICAgICAvLyAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIG9sZERhdGE9b2xkRGF0YS5jb25jYXQoZGF0YSk7XHJcbiAgICAgICAgLy8gICAvLyB9XHJcbiAgICAgICAgLy8gICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IG9sZERhdGE7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKVxyXG4gIH1cclxuICBnZXREYXRhKCk6IE9ic2VydmFibGU8QmFzZVF1ZXJ5RGF0YTxUPj4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBhZ2VJbmRleCA9ICh0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggfHwgMCkgKyAxO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCAyMDtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuXHJcbiAgICBsZXQgc29ydHMgPSAnJztcclxuICAgIGlmICh0aGlzLnNvcnQuYWN0aXZlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnQuZGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgICBzb3J0cyA9ICctJyArIHRoaXMuc29ydC5hY3RpdmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc29ydHMgPSB0aGlzLnNvcnQuYWN0aXZlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNTZWFyY2gpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXJzQXJyID0gdGhpcy5zZWFyY2hGaWVsZHMuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIC8vIGZpbHRlcnNBcnIuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAvLyAgIGZpbHRlcnMucHVzaChlbGVtZW50ICsgJ0A9KicgKyB0aGlzLmZpbHRlclZhbHVlKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBjb25zdCB5ID0gJygnICsgdGhpcy5zZWFyY2hGaWVsZHMucmVwbGFjZSgnLCcsICd8JykgKyAnKSc7XHJcbiAgICAgICAgZmlsdGVycy5wdXNoKHkgKyAnQD0qJyArIHRoaXMuZmlsdGVyVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0RmlsdGVyKSB7XHJcbiAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsdGVyc1ZhbHVlID0gZmlsdGVycy5qb2luKCcsICcpO1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVNlcnZpY2UuZ2V0QWxsKHBhZ2VJbmRleCwgcGFnZVNpemUsIHNvcnRzLCBmaWx0ZXJzVmFsdWUsIHRoaXMuY3VzdG9tSW5jbHVkZSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoRm9ybSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IGRhdGEuZ2V0TWV0YSgpLm1ldGEuY291bnQ7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhLmdldE1vZGVscygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBoaWdobGlnaHQoZWxlbWVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaGlnaGxpZ2h0ZWQgPSBlbGVtZW50LmhpZ2hsaWdodGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG4gICAgZWxlbWVudC5oaWdobGlnaHRlZCA9ICFlbGVtZW50LmhpZ2hsaWdodGVkO1xyXG4gICAgaWYgKGVsZW1lbnQuaGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlbGVtZW50O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmVtaXQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRlbGV0ZU9iamVjdChtb2RlbDogVCkge1xyXG4gICAgY29uc3QgbXNnID0gJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSAnICsgbW9kZWxbdGhpcy5kZWxldGVQcm9wZXJ0eU5hbWVdICsgJz8nO1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obXNnKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2UuZGVsZXRlKG1vZGVsLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGVtcERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QuZW1pdChudWxsKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pZCAhPT0gbW9kZWwuaWQpIHtcclxuICAgICAgICAgICAgICB0ZW1wRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGVtcERhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBlZGl0T2JqZWN0KG1vZGVsOiBUKSB7XHJcbiAgICBpZiAoIXRoaXMucG9wdXBFZGl0KSB7XHJcbiAgICAgIGNvbnN0IGlkID0gbW9kZWwuaWQ7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmVkaXRMaW5rLCBpZF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0TW9kZWwuZW1pdChtb2RlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEZsZXhTdHlsZShjb2x1bW46IEdyaWRMYXlvdXRNb2RlbCkge1xyXG4gICAgaWYgKGNvbHVtbi53aWR0aCkge1xyXG4gICAgICBjb25zdCBzdHlsZSA9IGNvbHVtbi5ncm93ICsgJyAnICsgY29sdW1uLnNocmluayArICcgJyArIGNvbHVtbi53aWR0aCArICdweCc7XHJcbiAgICAgIHJldHVybiBzdHlsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2VsbFRleHRBbGlnbihjb2x1bW46IEdyaWRMYXlvdXRNb2RlbCkge1xyXG4gICAgcmV0dXJuIGNvbHVtbi50ZXh0QWxpZ24gPz8gQ2VsbFRleHRBbGlnbi5sZWZ0O1xyXG4gIH1cclxuXHJcbiAgc2hvd1BpY3R1cmVDZWxsKGNvbHVtbjogR3JpZExheW91dE1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKGNvbHVtbj8uZm9ybWF0aW5nID8/IEdyaWRMYXlvdXRGb3JtYXQubm9uZSkgPT09IEdyaWRMYXlvdXRGb3JtYXQucGljdHVyZTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZURpc2FibGVkKG1vZGVsOiBUKSB7XHJcbiAgICBpZiAodGhpcy5kZWxldGVEaXNhYmxlUnVsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZVJ1bGUodGhpcy5kZWxldGVEaXNhYmxlUnVsZSwgbW9kZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBjZWxsQ2xpY2sobW9kZWw6IFQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNsaWNrLmVtaXQoeyBwcm9wZXJ0eU5hbWUsIG1vZGVsIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsdWF0ZVJ1bGUocnVsZXM6IFJ1bGVbXSwgbW9kZWw6IFQpOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xyXG4gICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcclxuICAgICAgbGV0IGpzb25SdWxlOiBhbnk7XHJcbiAgICAgIGlmICh0eXBlb2YgcnVsZS5ydWxlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGpzb25SdWxlID0gSlNPTi5wYXJzZShydWxlLnJ1bGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGpzb25SdWxlID0gcnVsZS5ydWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChydWxlLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gJ3snICsgcnVsZS5wYXJhbWV0ZXJzLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gJ1wiJyArIGl0ZW0gKyAnXCI6XCInICsgbW9kZWxbaXRlbV0gKyAnXCInO1xyXG4gICAgICAgIH0pLmpvaW4oJywnKSArICd9JztcclxuICAgICAgICByZXN1bHQgPSBqc29uTG9naWMuYXBwbHkoanNvblJ1bGUsIEpTT04ucGFyc2UoZGF0YSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IGpzb25Mb2dpYy5hcHBseShqc29uUnVsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgZ2V0Q2VsVmFsdWUocm93OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIGlmICghcm93KVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIC8vIGlmIChwcm9wZXJ0eU5hbWUgPT0gJ2tvbXBldGVuemVuU3RkZXYnKVxyXG4gICAgLy8gICBjb25zb2xlLmxvZyhwcm9wZXJ0eU5hbWUpO1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPT09IC0xKSB7XHJcbiAgICAgIHZhciBncmlkTGF5b3V0ID0gdGhpcy5ncmlkTGF5b3V0LmZpbmQoZiA9PiBmLnByb3BlcnR5TmFtZS5pbmRleE9mKHByb3BlcnR5TmFtZSkgPiAtMSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdGVkVmFsdWUoZ3JpZExheW91dCwgcm93W3Byb3BlcnR5TmFtZV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJvcCA9IHByb3BlcnR5TmFtZS5zcGxpdCgnLicpWzBdO1xyXG4gICAgICBjb25zdCBzdWJQcm9wID0gcHJvcGVydHlOYW1lLnJlcGxhY2UocHJvcCArICcuJywgJycpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDZWxWYWx1ZShyb3dbcHJvcF0sIHN1YlByb3ApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGdldEZvcm1hdGVkVmFsdWUoZ3JpZExheW91dDogR3JpZExheW91dE1vZGVsLCB2YWx1ZTogYW55KSB7XHJcblxyXG4gICAgaWYgKGdyaWRMYXlvdXQpIHtcclxuICAgICAgc3dpdGNoIChncmlkTGF5b3V0LmZvcm1hdGluZykge1xyXG4gICAgICAgIGNhc2UgR3JpZExheW91dEZvcm1hdC5kYXRlOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBncmlkTGF5b3V0LmZvcm1hdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEdyaWRMYXlvdXRGb3JtYXQubnVtYmVyOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyUGlwZS50cmFuc2Zvcm0odmFsdWUsIGdyaWRMYXlvdXQuZm9ybWF0KTtcclxuICAgICAgICBjYXNlIEdyaWRMYXlvdXRGb3JtYXQucGVyY2VudDpcclxuICAgICAgICAgIGNvbnN0IHZhbHVlUHJjID0gdmFsdWUgLyAxMDA7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJjZW50UGlwZS50cmFuc2Zvcm0odmFsdWVQcmMsIGdyaWRMYXlvdXQuZm9ybWF0KTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgfVxyXG4gIGRyb3BUYWJsZShldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuY2hhbmdlSXRlbVBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF07XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGFbZXZlbnQuY3VycmVudEluZGV4XTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmNoYW5nZUl0ZW1Qb3NpdGlvbihwcmV2SXRlbSwgY3VycmVudEl0ZW0pKSB7XHJcbiAgICAgICAgY29uc3QgcHJldkluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KChkKSA9PiBkID09PSBldmVudC5pdGVtLmRhdGEpO1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmRhdGFTb3VyY2UuZGF0YSwgcHJldkluZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgICAgIHRoaXMudGFibGUucmVuZGVyUm93cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzQ29sdW1uU3RpY2t5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1ucykge1xyXG4gICAgICBjb25zdCBmaWx0ZXJzQXJyID0gdGhpcy5zdGlja3lDb2x1bW5zLnNwbGl0KFwiLFwiKTtcclxuICAgICAgcmV0dXJuIGZpbHRlcnNBcnIuZmluZEluZGV4KGYgPT4gZiA9PSBuYW1lKSAhPT0gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHVwZGF0ZUVsZW1lbnQobW9kZWw6IFQpIHtcclxuICAgIC8vRmluZCBpZiBlbGVtZW50IGV4aXN0XHJcbiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGYgPT4gZi5pZCA9PT0gbW9kZWwuaWQpO1xyXG4gICAgaWYgKGN1cnJlbnRFbGVtZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IG1vZGVsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEucHVzaChtb2RlbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdEYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gbmV3RGF0YTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBmcm9tRXZlbnQodGhpcy5tYXRUYWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDcwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGU6IGFueSkgPT4gdGhpcy5vblRhYmxlU2Nyb2xsKGUpKTtcclxuICB9XHJcbiAgb25UYWJsZVNjcm9sbChlKSB7XHJcbiAgICBjb25zdCB0YWJsZVZpZXdIZWlnaHQgPSBlLnRhcmdldC5vZmZzZXRIZWlnaHQgLy8gdmlld3BvcnQ6IH41MDBweFxyXG4gICAgY29uc3QgdGFibGVTY3JvbGxIZWlnaHQgPSBlLnRhcmdldC5zY3JvbGxIZWlnaHQgLy8gbGVuZ3RoIG9mIGFsbCB0YWJsZVxyXG4gICAgY29uc3Qgc2Nyb2xsTG9jYXRpb24gPSBlLnRhcmdldC5zY3JvbGxUb3A7IC8vIGhvdyBmYXIgdXNlciBzY3JvbGxlZFxyXG5cclxuICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMjAwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxyXG4gICAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkID0gMjAwO1xyXG5cclxuICAgIGNvbnN0IHNjcm9sbFVwTGltaXQgPSBzY3JvbGxUaHJlc2hvbGQ7XHJcbiAgICBpZiAoc2Nyb2xsTG9jYXRpb24gPCBzY3JvbGxVcExpbWl0ICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDApIHtcclxuICAgICAgLy8gdGhpcy5maXJzdFBhZ2UtLTtcclxuICAgICAgY29uc29sZS5sb2coYG9uVGFibGVTY3JvbGwoKSBVUDogZmlyc3RQYWdlIGRlY3JlYXNlZCB0byAke3RoaXMucGFnaW5hdG9yLnBhZ2VJbmRleH0uIE5vdyBmZXRjaGluZyBkYXRhLi4uYCk7XHJcbiAgICAgIC8vIHRoaXMuZmV0Y2hEYXRhKCk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbFRvKHRhYmxlU2Nyb2xsSGVpZ2h0IC8gMiAtIDIgKiB0YWJsZVZpZXdIZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjcm9sbERvd25MaW1pdCA9IHRhYmxlU2Nyb2xsSGVpZ2h0IC0gdGFibGVWaWV3SGVpZ2h0IC0gc2Nyb2xsVGhyZXNob2xkO1xyXG4gICAgaWYgKHNjcm9sbExvY2F0aW9uID4gc2Nyb2xsRG93bkxpbWl0ICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA8IHRoaXMucGFnaW5hdG9yLmdldE51bWJlck9mUGFnZXMoKSkge1xyXG4gICAgICAvLyB0aGlzLmZpcnN0UGFnZSsrO1xyXG4gICAgICBjb25zb2xlLmxvZyhgb25UYWJsZVNjcm9sbCgpOiBmaXJzdFBhZ2UgaW5jcmVhc2VkIHRvICR7dGhpcy5wYWdpbmF0b3IucGFnZUluZGV4fS4gTm93IGZldGNoaW5nIGRhdGEuLi5gKTtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuICAgICAgLy8gdGhpcy5zY3JvbGxUbyh0YWJsZVNjcm9sbEhlaWdodCAvIDIgKyB0YWJsZVZpZXdIZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHNjcm9sbFRvKHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5tYXRUYWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsVG9wJywgcG9zaXRpb24pO1xyXG4gIH1cclxuICBnZXRDZWxsQ2xhc3MobW9kZWw6IFQsIHByb3BlcnR5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBtb2RlbC5nZXRDZWxsQ2xhc3MocHJvcGVydHkpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyWFwiICpuZ0lmPVwiaGFzU2VhcmNoXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCIgZnhMYXlvdXQuc209XCJjb2x1bW5cIiBmeEZsZXhGaWxsPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cclxuICAgICAgPG1hdC1sYWJlbD5GaWx0ZXI8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT0nZmlsdGVyVmFsdWUnIChuZ01vZGVsQ2hhbmdlKT0nZmlsdGVyQ2hhbmdlZC5uZXh0KCRldmVudCknICNmaWx0ZXI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiPlxyXG4gICAgPCEtLSAgI2FwcGxpY2F0aW9uc0NvbnRhaW5lciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWxvYWRpbmctc2hhZGVcIiAqbmdJZj1cImlzTG9hZGluZ1Jlc3VsdHMgfHwgaXNSYXRlTGltaXRSZWFjaGVkXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1Jlc3VsdHNcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1yYXRlLWxpbWl0LXJlYWNoZWRcIiAqbmdJZj1cImlzUmF0ZUxpbWl0UmVhY2hlZFwiPlxyXG4gICAgICAgIHt7J0dlbmVyYWwuTG9hZGluZ0RhdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPG1hdC10YWJsZSBmeEZsZXggI3RhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBpZD1cInRlbXBhbHRlLWZvcm1zLXRhYmxlXCIgbWF0U29ydCBtYXRTb3J0RGlzYWJsZUNsZWFyXHJcbiAgICAgIG1hdFNvcnREaXJlY3Rpb249XCJhc2NcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFTb3VyY2VcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BUYWJsZSgkZXZlbnQpXCI+XHJcbiAgICAgIDwhLS0gKHNjcm9sbCk9XCJvblRhYmxlU2Nyb2xsKCRldmVudClcIiAtLT5cclxuXHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCI+XHJcbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBkaXNhYmxlQ2xlYXI9XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8IS0tIHt7J0dlbmVyYWwuT3JkZXInIHwgdHJhbnNsYXRlfX0gLS0+XHJcbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgPG1hdC1jZWxsIGZ4RmxleCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+cmVvcmRlcjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyaWRMYXlvdXRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5wcm9wZXJ0eU5hbWVcIlxyXG4gICAgICAgIFtzdGlja3ldPVwiaXNDb2x1bW5TdGlja3koY29sdW1uLnByb3BlcnR5TmFtZSlcIj5cclxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsIG1hdC1zb3J0LWhlYWRlciBkaXNhYmxlQ2xlYXIgW3N0eWxlLmZsZXhdPVwiZ2V0RmxleFN0eWxlKGNvbHVtbilcIiAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7Y29sdW1uLnRyYW5zbGF0ZUtleSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgPG1hdC1jZWxsIG1hdFRvb2x0aXA9e3tnZXRDZWxWYWx1ZShyb3csY29sdW1uLnByb3BlcnR5TmFtZSl9fSBbc3R5bGUuZmxleF09XCJnZXRGbGV4U3R5bGUoY29sdW1uKVwiXHJcbiAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJnZXRDZWxsVGV4dEFsaWduKGNvbHVtbilcIiAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAgKGNsaWNrKT1cImNlbGxDbGljayhyb3csY29sdW1uLnByb3BlcnR5TmFtZSlcIj5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJvdyxjb2x1bW4ucHJvcGVydHlOYW1lKVwiICpuZ0lmPVwiIXNob3dQaWN0dXJlQ2VsbChjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgIHt7Z2V0Q2VsVmFsdWUocm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGltZyBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3Mocm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpXCIgKm5nSWY9XCJzaG93UGljdHVyZUNlbGwoY29sdW1uKVwiPlxyXG4gICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGVsZXRlXCIgc3RpY2t5RW5kICpuZ0lmPVwiIWVkaXRPbkNsaWNrICYmICFlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgZGlzYWJsZUNsZWFyPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyZWVuIGJ0bi1maWxsIGJ0bi13ZCBidG4tanVzdC1pY29uXCIgKGNsaWNrKT1cImVkaXRPYmplY3Qocm93KVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydHZW5lcmFsLkVkaXQnIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+ZWRpdDwvaT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpcHBsZS1jb250YWluZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcmVkIGJ0bi1maWxsIGJ0bi13ZCBidG4tanVzdC1pY29uXCIgKGNsaWNrKT1cImRlbGV0ZU9iamVjdChyb3cpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRlbGV0ZURpc2FibGVkKHJvdylcIiBtYXRUb29sdGlwPVwie3snR2VuZXJhbC5EZWxldGUnIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvaT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpcHBsZS1jb250YWluZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zO3N0aWNreTogdHJ1ZVwiPjwvbWF0LWhlYWRlci1yb3c+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVkaXRPbkNsaWNrICYmICFlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93O2xldCBpbmRleCA9IGRhdGFJbmRleDsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyZWQ6IHJvdy5ob3ZlcmVkLCBoaWdobGlnaHRlZDogcm93LmhpZ2hsaWdodGVkfVwiIChjbGljayk9XCJoaWdobGlnaHQocm93KVwiXHJcbiAgICAgICAgICAobW91c2VvdmVyKT1cInJvdy5ob3ZlcmVkID0gdHJ1ZVwiIChtb3VzZW91dCk9XCJyb3cuaG92ZXJlZCA9IGZhbHNlXCI+XHJcbiAgICAgICAgPC9tYXQtcm93PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0T25DbGljayAmJiAhZWRpdE9uRGJsQ2xpY2tcIj5cclxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdztsZXQgaW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwicm93XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcmVkOiByb3cuaG92ZXJlZCwgaGlnaGxpZ2h0ZWQ6IHJvdy5oaWdobGlnaHRlZH1cIiAoY2xpY2spPVwiZWRpdE9iamVjdChyb3cpXCJcclxuICAgICAgICAgIChtb3VzZW92ZXIpPVwicm93LmhvdmVyZWQgPSB0cnVlXCIgKG1vdXNlb3V0KT1cInJvdy5ob3ZlcmVkID0gZmFsc2VcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48L21hdC1yb3c+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlZGl0T25DbGljayAmJiBlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93O2xldCBpbmRleCA9IGRhdGFJbmRleDsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyZWQ6IHJvdy5ob3ZlcmVkLCBoaWdobGlnaHRlZDogcm93LmhpZ2hsaWdodGVkfVwiIChkYmxjbGljayk9XCJlZGl0T2JqZWN0KHJvdylcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImhpZ2hsaWdodChyb3cpXCIgKG1vdXNlb3Zlcik9XCJyb3cuaG92ZXJlZCA9IHRydWVcIiAobW91c2VvdXQpPVwicm93LmhvdmVyZWQgPSBmYWxzZVwiXHJcbiAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48L21hdC1yb3c+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBbbmdDbGFzc109XCJ7aG92ZXJlZDogcm93LmhvdmVyZWQsIGhpZ2hsaWdodGVkOiByb3cuaGlnaGxpZ2h0ZWR9XCJcclxuICAgICAgICAoY2xpY2spPVwiaGlnaGxpZ2h0KHJvdylcIiAobW91c2VvdmVyKT1cInJvdy5ob3ZlcmVkID0gdHJ1ZVwiIChtb3VzZW91dCk9XCJyb3cuaG92ZXJlZCA9IGZhbHNlXCIgLS0+XHJcbiAgICA8L21hdC10YWJsZT5cclxuICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgW2hpZGRlbl09XCJpbmZpbml0ZVNjcm9sbFwiIFtsZW5ndGhdPVwicmVzdWx0c0xlbmd0aFwiIFtwYWdlU2l6ZV09XCIxNVwiXHJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzE1LCAzMCwgIDEwMF1cIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
@@ -5,7 +5,6 @@ import { NgControl, UntypedFormControl } from '@angular/forms';
|
|
5
5
|
import { BaseService } from '@rosoftlab/core';
|
6
6
|
import { Subject } from 'rxjs';
|
7
7
|
import { debounceTime, filter, finalize, switchMap, takeUntil, tap } from 'rxjs/operators';
|
8
|
-
import { RSLMaterialModule } from '../../rsl-material-module';
|
9
8
|
import * as i0 from "@angular/core";
|
10
9
|
import * as i1 from "@angular/cdk/a11y";
|
11
10
|
import * as i2 from "@angular/forms";
|
@@ -190,21 +189,21 @@ export class SearchableDropdownComponent {
|
|
190
189
|
});
|
191
190
|
}
|
192
191
|
}
|
193
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
194
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
192
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchableDropdownComponent, deps: [{ token: i1.FocusMonitor }, { token: i0.ElementRef }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
193
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SearchableDropdownComponent, selector: "rsl-searchable-dropdown", inputs: { label: "label", fControlName: "fControlName", serviceRef: "serviceRef", searchFields: "searchFields", displayFields: "displayFields", sortFields: "sortFields", valueField: "valueField", minLengthTerm: "minLengthTerm", preloadElementsCount: "preloadElementsCount", required: "required", disabled: "disabled", value: "value" }, outputs: { modelSelected: "modelSelected" }, host: { properties: { "class.example-floating": "shouldLabelFloat", "id": "id", "attr.aria-describedby": "describedBy" } }, ngImport: i0, template: "<div class=\"form-group\">\r\n <label>{{label | translate}}</label>\r\n <mat-form-field appearance=\"outline\" fxFlex>\r\n <input matInput [matAutocomplete]=\"auto\" [formControl]=\"searchControl\">\r\n <button *ngIf=\"searchControl.value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSelection()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\"\r\n [displayWith]=\"displayWith.bind(this)\">\r\n <mat-option *ngIf=\"isLoading\">Loading...</mat-option>\r\n <mat-option *ngIf=\"!isLoading && filteredOptions.length == 0 && !showSerach\" disabled>Not found</mat-option>\r\n <mat-option *ngIf=\"showSerach\" disabled>{{getSearchText()}}</mat-option>\r\n <ng-container *ngIf=\"!isLoading && filteredOptions.length > 0\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <span><b>{{getConcatedFields(option)}}</b></span>\r\n </mat-option>\r\n </ng-container>\r\n\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n</div>", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
|
195
194
|
}
|
196
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchableDropdownComponent, decorators: [{
|
197
196
|
type: Component,
|
198
|
-
args: [{
|
197
|
+
args: [{ selector: 'rsl-searchable-dropdown', host: {
|
199
198
|
'[class.example-floating]': 'shouldLabelFloat',
|
200
199
|
'[id]': 'id',
|
201
200
|
'[attr.aria-describedby]': 'describedBy',
|
202
|
-
},
|
203
|
-
}], ctorParameters:
|
201
|
+
}, template: "<div class=\"form-group\">\r\n <label>{{label | translate}}</label>\r\n <mat-form-field appearance=\"outline\" fxFlex>\r\n <input matInput [matAutocomplete]=\"auto\" [formControl]=\"searchControl\">\r\n <button *ngIf=\"searchControl.value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSelection()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\"\r\n [displayWith]=\"displayWith.bind(this)\">\r\n <mat-option *ngIf=\"isLoading\">Loading...</mat-option>\r\n <mat-option *ngIf=\"!isLoading && filteredOptions.length == 0 && !showSerach\" disabled>Not found</mat-option>\r\n <mat-option *ngIf=\"showSerach\" disabled>{{getSearchText()}}</mat-option>\r\n <ng-container *ngIf=\"!isLoading && filteredOptions.length > 0\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <span><b>{{getConcatedFields(option)}}</b></span>\r\n </mat-option>\r\n </ng-container>\r\n\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n</div>" }]
|
202
|
+
}], ctorParameters: () => [{ type: i1.FocusMonitor }, { type: i0.ElementRef }, { type: i2.NgControl, decorators: [{
|
204
203
|
type: Optional
|
205
204
|
}, {
|
206
205
|
type: Self
|
207
|
-
}] }]
|
206
|
+
}] }], propDecorators: { label: [{
|
208
207
|
type: Input
|
209
208
|
}], fControlName: [{
|
210
209
|
type: Input
|
@@ -231,4 +230,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
|
|
231
230
|
}], value: [{
|
232
231
|
type: Input
|
233
232
|
}] } });
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUF5QyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQTRCLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7OztBQWE5RCxNQUFNLE9BQU8sMkJBQTJCO2FBQy9CLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQXNDbEIsSUFBSSxL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YUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsQ0FBQzthQUNGLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQzsrR0ExT1UsMkJBQTJCO21HQUEzQiwyQkFBMkIsNGtCQ3BCeEMsdW1DQW9CTSwyQ0RGTSxpQkFBaUI7OzRGQUVoQiwyQkFBMkI7a0JBWHZDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHlCQUF5QixRQUU3Qjt3QkFDSiwwQkFBMEIsRUFBRSxrQkFBa0I7d0JBQzlDLE1BQU0sRUFBRSxJQUFJO3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDLFdBQ1EsQ0FBQyxpQkFBaUIsQ0FBQzs7MEJBMEZ6QixRQUFROzswQkFBSSxJQUFJOzRDQTlFVixLQUFLO3NCQUFiLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFTSCxRQUFRO3NCQURYLEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQVdGLEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmFzZU1vZGVsLCBCYXNlUXVlcnlEYXRhLCBCYXNlU2VydmljZSB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSU0xNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uLy4uL3JzbC1tYXRlcmlhbC1tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBzZWxlY3RvcjogJ3JzbC1zZWFyY2hhYmxlLWRyb3Bkb3duJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5leGFtcGxlLWZsb2F0aW5nXSc6ICdzaG91bGRMYWJlbEZsb2F0JyxcclxuICAgICdbaWRdJzogJ2lkJyxcclxuICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdkZXNjcmliZWRCeScsXHJcbiAgfSxcclxuICBpbXBvcnRzOiBbUlNMTWF0ZXJpYWxNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hhYmxlRHJvcGRvd25Db21wb25lbnQ8VCBleHRlbmRzIEJhc2VNb2RlbD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGZvY3VzZWQgPSBmYWxzZTtcclxuICBlcnJvclN0YXRlID0gZmFsc2U7XHJcbiAgaWQgPSBgcnNsLXNlYXJjaGFibGUtZHJvcGRvd24tJHtTZWFyY2hhYmxlRHJvcGRvd25Db21wb25lbnQubmV4dElkKyt9YDtcclxuXHJcbiAgLy8gbGFiZWwgZm9yIHRoZSBzZWFyY2ggZHJvcGRvd25cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8vTmFtZSBvZiB0aGUgZm9ybSBjb250cm9sXHJcbiAgQElucHV0KCkgZkNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8vUmVmZXJlbmNlIG9mIHRoZSBzZXJ2aWNlXHJcbiAgQElucHV0KCkgc2VydmljZVJlZjogQmFzZVNlcnZpY2U8VD47XHJcblxyXG4gIC8vRmllbGRzIGZvciBmaWx0ZXJpbmdcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZHM6IHN0cmluZztcclxuXHJcbiAgLy9GaWVsZHMgZm9yIGRpc3BsYXkgXHJcbiAgQElucHV0KCkgZGlzcGxheUZpZWxkczogc3RyaW5nO1xyXG5cclxuICAvL0ZpZWxkcyBmb3Igc29ydGluZyB0aGUgQVBJIGRhdGFcclxuICBASW5wdXQoKSBzb3J0RmllbGRzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLy8gVGhlIHZhbHVlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIGNvbnRyb2wgdmFsdWVcclxuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAnaWQnO1xyXG5cclxuICAvLyBUaGUgbWludW11bSBjaGFyIGZvciBzZWFyY2hcclxuICBASW5wdXQoKSBtaW5MZW5ndGhUZXJtOiBudW1iZXIgPSAzO1xyXG5cclxuICAvLyBUaGUgcHJlbG9hZCB4IGVsZW1lbnRzXHJcbiAgQElucHV0KCkgcHJlbG9hZEVsZW1lbnRzQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgQE91dHB1dCgpIG1vZGVsU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxCYXNlTW9kZWw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgZ2V0IGVtcHR5KCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7IH1cclxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlZDsgfVxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZhbHVlKCk6IGFueSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuICBzZXQgdmFsdWUodmFsdWU6IGFueSB8IG51bGwpIHtcclxuICAgIGlmICh2YWx1ZSlcclxuICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubG9hZE1vZGVsKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcclxuICAvLyBTZWFyY2ggZm9ybSBjb250cm9sXHJcbiAgc2VhcmNoQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG5cclxuICBzaG93U2VyYWNoID0gdHJ1ZTtcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBvcHRpb25zID0gW107XHJcbiAgZmlsdGVyZWRPcHRpb25zID0gW107XHJcbiAgLyoqIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkLiAqL1xyXG4gIHByb3RlY3RlZCBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2xcclxuICApIHtcclxuXHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKTtcclxuICAgIF9mb2N1c01vbml0b3IubW9uaXRvcihfZWxlbWVudFJlZiwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmZvY3VzZWQgJiYgIW9yaWdpbikge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5kaXNwbGF5RmllbGRzKVxyXG4gICAgICB0aGlzLmRpc3BsYXlGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkcztcclxuXHJcbiAgICB0aGlzLmxvYWRNb2RlbCh0aGlzLm5nQ29udHJvbC52YWx1ZSlcclxuXHJcbiAgICBpZiAodGhpcy5wcmVsb2FkRWxlbWVudHNDb3VudCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2VSZWYuZ2V0QWxsKDEsIHRoaXMucHJlbG9hZEVsZW1lbnRzQ291bnQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IEJhc2VRdWVyeURhdGE8VD4pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd1NlcmFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gZGF0YS5nZXRNb2RlbHMoKTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigocmVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgIT09IG51bGwgJiYgcmVzLmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aFRlcm07XHJcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2hvd1NlcmFjaCA9ICFyZXN1bHQ7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWU6IHN0cmluZykgPT5cclxuICAgICAgICAgIHRoaXMuc2VydmljZVJlZlxyXG4gICAgICAgICAgICAuZ2V0QWxsKDEsIDEwLCB0aGlzLnNvcnRGaWVsZHMsIGAke3RoaXMuc2VhcmNoRmllbGRzLnJlcGxhY2UoJywnLCAnfCcpfUA9KiR7dmFsdWV9YClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKG9wdGlvbnM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5nZXRNb2RlbHMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkKCRldmVudCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSAkZXZlbnQub3B0aW9uLnZhbHVlO1xyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIHRoaXMubW9kZWxTZWxlY3RlZC5lbWl0KHZhbHVlKTtcclxuICAgIGlmICh0aGlzLnZhbHVlRmllbGQgaW4gdmFsdWUpIHtcclxuICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUodmFsdWVbdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBzZXRDb250cm9sVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGRpc3BsYXlXaXRoKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmdldENvbmNhdGVkRmllbGRzKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xyXG4gICAgdGhpcy5tb2RlbFNlbGVjdGVkLmVtaXQobnVsbCk7XHJcbiAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uY2F0ZWRGaWVsZHMob3B0aW9uKTogc3RyaW5nIHtcclxuICAgIGlmICghb3B0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGZpbHRlcnNBcnIgPSB0aGlzLmRpc3BsYXlGaWVsZHMuc3BsaXQoJywnKTtcclxuICAgIHJldHVybiBmaWx0ZXJzQXJyLnJlZHVjZSgoYWNjLCBjdikgPT4ge1xyXG4gICAgICByZXR1cm4gYWNjLmNvbmNhdChvcHRpb25bY3ZdICsgJyAnKTtcclxuICAgIH0sICcnKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sID0gbnVsbDtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZik7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGdldFNlYXJjaFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgRW50ZXIgJHt0aGlzLm1pbkxlbmd0aFRlcm19IGNoYXJhY3RlcnMgdG8gc3RhcnQgc2VhcmNoYDtcclxuXHJcbiAgfVxyXG4gIHdyaXRlVmFsdWUobW9kZWw6IFQgfCBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhtb2RlbCk7XHJcbiAgICB0aGlzLnZhbHVlID0gbW9kZWw7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuICBwcml2YXRlIGxvYWRNb2RlbChpZDogc3RyaW5nKSB7XHJcbiAgICAvL0xvYWQgdGhlIG1vZGVsIGZyb20gQVBJIHRvIGRpc3BsYXkgdGhlIHZhbHVlXHJcbiAgICBsZXQgbmVlZExvYWQgPSBmYWxzZTtcclxuICAgIGlmIChpZCkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZSlcclxuICAgICAgICBuZWVkTG9hZCA9IHRydWVcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZVt0aGlzLnZhbHVlRmllbGRdICE9PSBpZCkge1xyXG4gICAgICAgICAgbmVlZExvYWQgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobmVlZExvYWQpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlUmVmLmdldChpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAobW9kZWw6IFQpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG1vZGVsKTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKG1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgPGxhYmVsPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgZnhGbGV4PlxyXG4gICAgPGlucHV0IG1hdElucHV0IFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoQ29udHJvbC52YWx1ZVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIj5cclxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25TZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlXaXRoLmJpbmQodGhpcylcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJpc0xvYWRpbmdcIj5Mb2FkaW5nLi4uPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PSAwICYmICFzaG93U2VyYWNoXCIgZGlzYWJsZWQ+Tm90IGZvdW5kPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInNob3dTZXJhY2hcIiBkaXNhYmxlZD57e2dldFNlYXJjaFRleHQoKX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZyAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgPHNwYW4+PGI+e3tnZXRDb25jYXRlZEZpZWxkcyhvcHRpb24pfX08L2I+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PiJdfQ==
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUF5QyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQTRCLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQVczRixNQUFNLE9BQU8sMkJBQTJCO2FBQy9CLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQXNDbEIsSUFBSSxLQUFLO1FBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckIs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QUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7OEdBMU9VLDJCQUEyQjtrR0FBM0IsMkJBQTJCLHdqQkNqQnhDLHVtQ0FvQk07OzJGREhPLDJCQUEyQjtrQkFUdkMsU0FBUzsrQkFDRSx5QkFBeUIsUUFFN0I7d0JBQ0osMEJBQTBCLEVBQUUsa0JBQWtCO3dCQUM5QyxNQUFNLEVBQUUsSUFBSTt3QkFDWix5QkFBeUIsRUFBRSxhQUFhO3FCQUN6Qzs7MEJBMEZFLFFBQVE7OzBCQUFJLElBQUk7eUNBOUVWLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQVNILFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNlTW9kZWwsIEJhc2VRdWVyeURhdGEsIEJhc2VTZXJ2aWNlIH0gZnJvbSAnQHJvc29mdGxhYi9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JzbC1zZWFyY2hhYmxlLWRyb3Bkb3duJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5leGFtcGxlLWZsb2F0aW5nXSc6ICdzaG91bGRMYWJlbEZsb2F0JyxcclxuICAgICdbaWRdJzogJ2lkJyxcclxuICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdkZXNjcmliZWRCeScsXHJcbiAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZURyb3Bkb3duQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlTW9kZWw+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuICBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBmb2N1c2VkID0gZmFsc2U7XHJcbiAgZXJyb3JTdGF0ZSA9IGZhbHNlO1xyXG4gIGlkID0gYHJzbC1zZWFyY2hhYmxlLWRyb3Bkb3duLSR7U2VhcmNoYWJsZURyb3Bkb3duQ29tcG9uZW50Lm5leHRJZCsrfWA7XHJcblxyXG4gIC8vIGxhYmVsIGZvciB0aGUgc2VhcmNoIGRyb3Bkb3duXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvL05hbWUgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gIEBJbnB1dCgpIGZDb250cm9sTmFtZTogc3RyaW5nO1xyXG5cclxuICAvL1JlZmVyZW5jZSBvZiB0aGUgc2VydmljZVxyXG4gIEBJbnB1dCgpIHNlcnZpY2VSZWY6IEJhc2VTZXJ2aWNlPFQ+O1xyXG5cclxuICAvL0ZpZWxkcyBmb3IgZmlsdGVyaW5nXHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRzOiBzdHJpbmc7XHJcblxyXG4gIC8vRmllbGRzIGZvciBkaXNwbGF5IFxyXG4gIEBJbnB1dCgpIGRpc3BsYXlGaWVsZHM6IHN0cmluZztcclxuXHJcbiAgLy9GaWVsZHMgZm9yIHNvcnRpbmcgdGhlIEFQSSBkYXRhXHJcbiAgQElucHV0KCkgc29ydEZpZWxkczogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8vIFRoZSB2YWx1ZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBjb250cm9sIHZhbHVlXHJcbiAgQElucHV0KCkgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJztcclxuXHJcbiAgLy8gVGhlIG1pbnVtdW0gY2hhciBmb3Igc2VhcmNoXHJcbiAgQElucHV0KCkgbWluTGVuZ3RoVGVybTogbnVtYmVyID0gMztcclxuXHJcbiAgLy8gVGhlIHByZWxvYWQgeCBlbGVtZW50c1xyXG4gIEBJbnB1dCgpIHByZWxvYWRFbGVtZW50c0NvdW50OiBudW1iZXI7XHJcblxyXG4gIEBPdXRwdXQoKSBtb2RlbFNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8QmFzZU1vZGVsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIGdldCBlbXB0eSgpIHtcclxuICAgIHJldHVybiAhdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3JlcXVpcmVkOyB9XHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB2YWx1ZSgpOiBhbnkgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkgfCBudWxsKSB7XHJcbiAgICBpZiAodmFsdWUpXHJcbiAgICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmxvYWRNb2RlbCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XHJcbiAgLy8gU2VhcmNoIGZvcm0gY29udHJvbFxyXG4gIHNlYXJjaENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuXHJcbiAgc2hvd1NlcmFjaCA9IHRydWU7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgb3B0aW9ucyA9IFtdO1xyXG4gIGZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cclxuICBwcm90ZWN0ZWQgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyk7XHJcbiAgICBfZm9jdXNNb25pdG9yLm1vbml0b3IoX2VsZW1lbnRSZWYsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xyXG4gICAgICBpZiAodGhpcy5mb2N1c2VkICYmICFvcmlnaW4pIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9ICEhb3JpZ2luO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzcGxheUZpZWxkcylcclxuICAgICAgdGhpcy5kaXNwbGF5RmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHM7XHJcblxyXG4gICAgdGhpcy5sb2FkTW9kZWwodGhpcy5uZ0NvbnRyb2wudmFsdWUpXHJcblxyXG4gICAgaWYgKHRoaXMucHJlbG9hZEVsZW1lbnRzQ291bnQpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlUmVmLmdldEFsbCgxLCB0aGlzLnByZWxvYWRFbGVtZW50c0NvdW50KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhOiBCYXNlUXVlcnlEYXRhPFQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dTZXJhY2ggPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IGRhdGEuZ2V0TW9kZWxzKCk7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoKHJlcykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzICE9PSBudWxsICYmIHJlcy5sZW5ndGggPj0gdGhpcy5taW5MZW5ndGhUZXJtO1xyXG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNob3dTZXJhY2ggPSAhcmVzdWx0O1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlOiBzdHJpbmcpID0+XHJcbiAgICAgICAgICB0aGlzLnNlcnZpY2VSZWZcclxuICAgICAgICAgICAgLmdldEFsbCgxLCAxMCwgdGhpcy5zb3J0RmllbGRzLCBgJHt0aGlzLnNlYXJjaEZpZWxkcy5yZXBsYWNlKCcsJywgJ3wnKX1APSoke3ZhbHVlfWApXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChvcHRpb25zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZ2V0TW9kZWxzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZCgkZXZlbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gJGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLm1vZGVsU2VsZWN0ZWQuZW1pdCh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy52YWx1ZUZpZWxkIGluIHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKHZhbHVlW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgc2V0Q29udHJvbFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuICBkaXNwbGF5V2l0aCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDb25jYXRlZEZpZWxkcyh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjbGVhclNlbGVjdGlvbigpIHtcclxuICAgIHRoaXMubW9kZWxTZWxlY3RlZC5lbWl0KG51bGwpO1xyXG4gICAgdGhpcy5zZXRDb250cm9sVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICB9XHJcblxyXG4gIGdldENvbmNhdGVkRmllbGRzKG9wdGlvbik6IHN0cmluZyB7XHJcbiAgICBpZiAoIW9wdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBmaWx0ZXJzQXJyID0gdGhpcy5kaXNwbGF5RmllbGRzLnNwbGl0KCcsJyk7XHJcbiAgICByZXR1cm4gZmlsdGVyc0Fyci5yZWR1Y2UoKGFjYywgY3YpID0+IHtcclxuICAgICAgcmV0dXJuIGFjYy5jb25jYXQob3B0aW9uW2N2XSArICcgJyk7XHJcbiAgICB9LCAnJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc2VhcmNoQ29udHJvbCA9IG51bGw7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpO1xyXG4gICAgdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBnZXRTZWFyY2hUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYEVudGVyICR7dGhpcy5taW5MZW5ndGhUZXJtfSBjaGFyYWN0ZXJzIHRvIHN0YXJ0IHNlYXJjaGA7XHJcblxyXG4gIH1cclxuICB3cml0ZVZhbHVlKG1vZGVsOiBUIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2cobW9kZWwpO1xyXG4gICAgdGhpcy52YWx1ZSA9IG1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBsb2FkTW9kZWwoaWQ6IHN0cmluZykge1xyXG4gICAgLy9Mb2FkIHRoZSBtb2RlbCBmcm9tIEFQSSB0byBkaXNwbGF5IHRoZSB2YWx1ZVxyXG4gICAgbGV0IG5lZWRMb2FkID0gZmFsc2U7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgaWYgKCF0aGlzLnNlYXJjaENvbnRyb2wudmFsdWUpXHJcbiAgICAgICAgbmVlZExvYWQgPSB0cnVlXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVbdGhpcy52YWx1ZUZpZWxkXSAhPT0gaWQpIHtcclxuICAgICAgICAgIG5lZWRMb2FkID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG5lZWRMb2FkKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVJlZi5nZXQoaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKG1vZGVsOiBUKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChtb2RlbCk7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICAgICAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShtb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gIDxsYWJlbD57e2xhYmVsIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGZ4RmxleD5cclxuICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cInNlYXJjaENvbnRyb2wudmFsdWVcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJjbGVhclNlbGVjdGlvbigpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cIm9uU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5V2l0aC5iaW5kKHRoaXMpXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXNMb2FkaW5nXCI+TG9hZGluZy4uLjwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIhaXNMb2FkaW5nICYmIGZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT0gMCAmJiAhc2hvd1NlcmFjaFwiIGRpc2FibGVkPk5vdCBmb3VuZDwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJzaG93U2VyYWNoXCIgZGlzYWJsZWQ+e3tnZXRTZWFyY2hUZXh0KCl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj5cclxuICAgICAgICAgIDxzcGFuPjxiPnt7Z2V0Q29uY2F0ZWRGaWVsZHMob3B0aW9uKX19PC9iPjwvc3Bhbj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Rpdj4iXX0=
|
@@ -20,4 +20,4 @@ export function GridLayout(translateKey, width, grow = 0, shrink = 0, subPropert
|
|
20
20
|
Reflect.defineMetadata('GridLayout', annotations, target);
|
21
21
|
};
|
22
22
|
}
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL21hdGVyaWFsL3NyYy9saWIvZGVjb3JhdG9ycy9ncmlkLWxheW91dC5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE1BQU0sVUFBVSxVQUFVLENBQUMsWUFBb0IsRUFBRSxLQUFxQixFQUNsRSxPQUFjLENBQUMsRUFBRSxTQUFnQixDQUFDLEVBQUUsV0FBMkIsRUFDL0QsWUFBOEIsZ0JBQWdCLENBQUMsSUFBSSxFQUNuRCxTQUFpQixFQUFFLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLFlBQTJCLGFBQWEsQ0FBQyxJQUFJO0lBQ3JGLE9BQU8sQ0FBQyxNQUFXLEVBQUUsWUFBNkIsRUFBRSxFQUFFO1FBQ2xELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRSxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUE7UUFDM0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNiLFlBQVksRUFBRSxRQUFRO1lBQ3RCLFlBQVk7WUFDWixLQUFLO1lBQ0wsSUFBSTtZQUNKLE1BQU07WUFDTixTQUFTO1lBQ1QsTUFBTTtZQUNOLEtBQUs7WUFDTCxTQUFTO1NBQ1osQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZWxsVGV4dEFsaWduLCBHcmlkTGF5b3V0Rm9ybWF0IH0gZnJvbSAnQHJvc29mdGxhYi9jb3JlJztcclxuZXhwb3J0IGZ1bmN0aW9uIEdyaWRMYXlvdXQodHJhbnNsYXRlS2V5OiBzdHJpbmcsIHdpZHRoPzogbnVtYmVyIHwgbnVsbCxcclxuICAgIGdyb3c6IDAgfCAxID0gMCwgc2hyaW5rOiAwIHwgMSA9IDAsIHN1YlByb3BlcnR5Pzogc3RyaW5nIHwgbnVsbCxcclxuICAgIGZvcm1hdGluZzogR3JpZExheW91dEZvcm1hdCA9IEdyaWRMYXlvdXRGb3JtYXQubm9uZSxcclxuICAgIGZvcm1hdDogc3RyaW5nID0gJycsIG9yZGVyOiBudW1iZXIgPSAwLCB0ZXh0QWxpZ246IENlbGxUZXh0QWxpZ24gPSBDZWxsVGV4dEFsaWduLmxlZnQpIHtcclxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdHcmlkTGF5b3V0JywgdGFyZ2V0KSB8fCBbXTtcclxuICAgICAgICBsZXQgcHJvcE5hbWUgPSBwcm9wZXJ0eU5hbWVcclxuICAgICAgICBpZiAoc3ViUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wZXJ0eU5hbWUudG9TdHJpbmcoKSArICcuJyArIHN1YlByb3BlcnR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbm5vdGF0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wTmFtZSxcclxuICAgICAgICAgICAgdHJhbnNsYXRlS2V5LFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgZ3JvdyxcclxuICAgICAgICAgICAgc2hyaW5rLFxyXG4gICAgICAgICAgICBmb3JtYXRpbmcsXHJcbiAgICAgICAgICAgIGZvcm1hdCxcclxuICAgICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdHcmlkTGF5b3V0JywgYW5ub3RhdGlvbnMsIHRhcmdldCk7XHJcbiAgICB9O1xyXG59XHJcbiJdfQ==
|
@@ -15,4 +15,4 @@ export class GridLayoutModel {
|
|
15
15
|
this.textAlign = textAlign;
|
16
16
|
}
|
17
17
|
}
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9tb2RlbHMvZ3JpZC1sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLFlBQ0ksWUFBb0IsRUFBRSxlQUFvQixJQUFJLEVBQUUsUUFBYSxJQUFJLEVBQUUsT0FBYyxDQUFDLEVBQUUsU0FBZ0IsQ0FBQyxFQUNyRyxZQUE4QixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUMzRSxZQUEyQixhQUFhLENBQUMsSUFBSTtRQWdCMUMsY0FBUyxHQUFxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFFcEQsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixjQUFTLEdBQWtCLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFsQmpELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7Q0FVSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENlbGxUZXh0QWxpZ24sIEdyaWRMYXlvdXRGb3JtYXQgfSBmcm9tICdAcm9zb2Z0bGFiL2NvcmUnO1xyXG5leHBvcnQgY2xhc3MgR3JpZExheW91dE1vZGVsIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLCB0cmFuc2xhdGVLZXk6IGFueSA9IG51bGwsIHdpZHRoOiBhbnkgPSBudWxsLCBncm93OiAwIHwgMSA9IDAsIHNocmluazogMCB8IDEgPSAwLFxyXG4gICAgICAgIGZvcm1hdGluZzogR3JpZExheW91dEZvcm1hdCA9IEdyaWRMYXlvdXRGb3JtYXQubm9uZSwgZm9ybWF0ID0gJycsIG9yZGVyID0gMCxcclxuICAgICAgICB0ZXh0QWxpZ246IENlbGxUZXh0QWxpZ24gPSBDZWxsVGV4dEFsaWduLmxlZnQpIHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZUtleSA9IHRyYW5zbGF0ZUtleTtcclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5ncm93ID0gZ3JvdztcclxuICAgICAgICB0aGlzLnNocmluayA9IHNocmluaztcclxuICAgICAgICB0aGlzLmZvcm1hdGluZyA9IGZvcm1hdGluZztcclxuICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcclxuICAgICAgICB0aGlzLm9yZGVyID0gb3JkZXI7XHJcbiAgICAgICAgdGhpcy50ZXh0QWxpZ24gPSB0ZXh0QWxpZ247XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlS2V5OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBncm93OiAwIHwgMTtcclxuICAgIHB1YmxpYyBzaHJpbms6IDAgfCAxO1xyXG4gICAgcHVibGljIGZvcm1hdGluZzogR3JpZExheW91dEZvcm1hdCA9IEdyaWRMYXlvdXRGb3JtYXQubm9uZTtcclxuICAgIHB1YmxpYyBmb3JtYXQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBvcmRlcjogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyB0ZXh0QWxpZ246IENlbGxUZXh0QWxpZ24gPSBDZWxsVGV4dEFsaWduLmxlZnQ7XHJcbn1cclxuIl19
|
@@ -14,4 +14,4 @@ export class MaterialBaseModel extends BaseModel {
|
|
14
14
|
//result;
|
15
15
|
}
|
16
16
|
}
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtYmFzZS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9tYXRlcmlhbC9zcmMvbGliL21vZGVscy9tYXRlcmlhbC1iYXNlLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxTQUFTO0lBRXJDLGFBQWE7UUFDaEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFtQixDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFRLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQ3JFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxFQUN4QyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakUsU0FBUztJQUNiLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcbmltcG9ydCB7IEdyaWRMYXlvdXRNb2RlbCB9IGZyb20gJy4vZ3JpZC1sYXlvdXQnO1xyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxCYXNlTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwge1xyXG5cclxuICAgIHB1YmxpYyBnZXRHcmlkTGF5b3V0KCk6IEdyaWRMYXlvdXRNb2RlbFtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBBcnJheTxHcmlkTGF5b3V0TW9kZWw+KCk7XHJcbiAgICAgICAgY29uc3QgZ3JpZExheW91dDogYW55ID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnR3JpZExheW91dCcsIHRoaXMpO1xyXG4gICAgICAgIGlmIChncmlkTGF5b3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGF5b3V0IG9mIGdyaWRMYXlvdXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgR3JpZExheW91dE1vZGVsKGxheW91dC5wcm9wZXJ0eU5hbWUsIGxheW91dC50cmFuc2xhdGVLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LndpZHRoLCBsYXlvdXQuc2hyaW5rLCBsYXlvdXQuZ3JvdyxcclxuICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZm9ybWF0aW5nLCBsYXlvdXQuZm9ybWF0LCBsYXlvdXQub3JkZXIsIGxheW91dC50ZXh0QWxpZ24pO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLm9yZGVyIC0gYi5vcmRlcjsgfSlcclxuICAgICAgICAvL3Jlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
|