@one-paragon/angular-utilities 0.1.32-beta.2 → 0.1.32-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,7 +30,6 @@ export class GenericTableComponent {
30
30
  this.IndexColumn = false;
31
31
  this.SelectionColumn = false;
32
32
  this.isSticky = false;
33
- this.vsViewportHeight = '100vh';
34
33
  this.keys = [];
35
34
  this.rowDefArr = [];
36
35
  this.columns = [];
@@ -163,10 +162,10 @@ export class GenericTableComponent {
163
162
  }
164
163
  }
165
164
  GenericTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1.MatSort }, { token: i2.TableStore }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
166
- GenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: GenericTableComponent, selector: "tb-generic-table", inputs: { data$: "data$", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", rows: "rows", isSticky: "isSticky", columnBuilders: "columnBuilders", columnInfos: "columnInfos", groupHeaderTemplate: "groupHeaderTemplate", vsViewportHeight: "vsViewportHeight", disableSort: "disableSort" }, outputs: { selection$: "selection$" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<cdk-virtual-scroll-viewport tvsItemSize [style.height]=\"vsViewportHeight\">\n\n<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n>\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"showHeader$ | async\">\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n </ng-container>\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n</cdk-virtual-scroll-viewport>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell,:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i4.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i4.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.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: i10.StylerDirective, selector: "[styler]", inputs: ["styler"] }, { kind: "component", type: i11.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i12.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "component", type: i13.PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
165
+ GenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: GenericTableComponent, selector: "tb-generic-table", inputs: { data$: "data$", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", rows: "rows", isSticky: "isSticky", columnBuilders: "columnBuilders", columnInfos: "columnInfos", groupHeaderTemplate: "groupHeaderTemplate", disableSort: "disableSort" }, outputs: { selection$: "selection$" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<cdk-virtual-scroll-viewport tvsItemSize class=\"tb-virtual-scroll-viewport\">\n\n<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n>\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"showHeader$ | async\">\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n </ng-container>\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n</cdk-virtual-scroll-viewport>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell,:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i4.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i4.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.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: i10.StylerDirective, selector: "[styler]", inputs: ["styler"] }, { kind: "component", type: i11.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i12.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "component", type: i13.PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
167
166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GenericTableComponent, decorators: [{
168
167
  type: Component,
169
- args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport tvsItemSize [style.height]=\"vsViewportHeight\">\n\n<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n>\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"showHeader$ | async\">\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n </ng-container>\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n</cdk-virtual-scroll-viewport>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell,:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
168
+ args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport tvsItemSize class=\"tb-virtual-scroll-viewport\">\n\n<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n>\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"showHeader$ | async\">\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n </ng-container>\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n</cdk-virtual-scroll-viewport>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell,:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
170
169
  }], ctorParameters: function () { return [{ type: i1.MatSort }, { type: i2.TableStore }, { type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { data$: [{
171
170
  type: Input
172
171
  }], IndexColumn: [{
@@ -185,8 +184,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
185
184
  type: Input
186
185
  }], groupHeaderTemplate: [{
187
186
  type: Input
188
- }], vsViewportHeight: [{
189
- type: Input
190
187
  }], disableSort: [{
191
188
  type: Input
192
189
  }], table: [{
@@ -204,4 +201,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
204
201
  }], selection$: [{
205
202
  type: Output
206
203
  }] } });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFLTixVQUFVLEVBQ1YsUUFBUSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRM0QsTUFBTSxPQUFPLHFCQUFxQjtJQThDaEMsWUFDVSxJQUFhLEVB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QUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7O2tIQXhLVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixzY0FpQ3JCLFFBQVEseUZBQ1IsV0FBVywrSEFDSyxVQUFVLGtFQUMxQixrQkFBa0IscUVDeEUvQixxdkdBZ0ZBOzJGRDVDYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07NktBU3RDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBY2lDLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0EsVUFBVTtzQkFBakQsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQUNQLGtCQUFrQjtzQkFBaEQsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBcUhuQixVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFJvd0RlZiwgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XG5pbXBvcnQgeyB0YXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbHVtbkJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW4tYnVpbGRlci9jb2x1bW4tYnVpbGRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBHZW5lcmljVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9HZW5lcmljVGFibGVEYXRhU291cmNlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XG5pbXBvcnQgeyBwcmV2aW91c0FuZEN1cnJlbnQgfSBmcm9tICcuLi8uLi8uLi9yeGpzL3J4anMtb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0NvbHVtbkluZm8nO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIENka0Ryb3BMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVTdGF0ZSc7XG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuL3BhZ2luYXRvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Yi1nZW5lcmljLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmljLXRhYmxlLmNvbXBvbmVudC5zY3NzJywnLi4vLi4vc3R5bGVzL2NvbGxhcHNlci5zdHlsZXMuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xuICAgIHRoaXMuc3RhdGUuc2V0VXNlckRlZmluZWRPcmRlcih7bmV3T3JkZXI6ZXZlbnQuY3VycmVudEluZGV4LG9sZE9yZGVyOmV2ZW50LnByZXZpb3VzSW5kZXh9KVxuICB9XG5cbiAgQElucHV0KCkgZGF0YSQhOiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgQElucHV0KCkgSW5kZXhDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgU2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRyYWNrQnkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJvd3MhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPGFueT4+O1xuICBASW5wdXQoKSBpc1N0aWNreSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5CdWlsZGVycyE6IENvbHVtbkJ1aWxkZXJDb21wb25lbnRbXTtcbiAgQElucHV0KCkgY29sdW1uSW5mb3MhOiBPYnNlcnZhYmxlPENvbHVtbkluZm9bXT47XG4gIEBJbnB1dCgpIGdyb3VwSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSB2c1ZpZXdwb3J0SGVpZ2h0OiBzdHJpbmcgPSAnMTAwdmgnO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVTb3J0ITogYm9vbGVhbjtcbiAgQElucHV0KCkgc2V0IGRpc2FibGVTb3J0KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVTb3J0ID0gdmFsO1xuICAgIGlmICh2YWwpIHtcbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2U/LnNvcnQpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlICYmICF0aGlzLmRhdGFTb3VyY2Uuc29ydCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGRpc2FibGVTb3J0KCkgeyByZXR1cm4gdGhpcy5fZGlzYWJsZVNvcnQ7IH1cblxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZSE6IE1hdFRhYmxlPGFueT47XG4gIEBWaWV3Q2hpbGQoQ2RrRHJvcExpc3QsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3BMaXN0ITogQ2RrRHJvcExpc3Q7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywge3JlYWQ6IEVsZW1lbnRSZWZ9KSB0YWJsZUVsUmVmITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChQYWdpbmF0b3JDb21wb25lbnQpIHBhZ2luYXRvckNvbXBvbmVudCE6IFBhZ2luYXRvckNvbXBvbmVudDtcbiAgY3VycmVudENvbHVtbnMhOiBzdHJpbmdbXTtcbiAgZGF0YVNvdXJjZSE6IEdlbmVyaWNUYWJsZURhdGFTb3VyY2U8YW55PjtcbiAga2V5czogc3RyaW5nIFtdID0gW107XG4gIGluamVjdG9yOiBJbmplY3RvcjtcbiAgcm93RGVmQXJyIDpNYXRSb3dEZWY8YW55PltdPSBbXTtcbiAgY29sdW1uczpzdHJpbmcgW10gPSBbXTtcbiAgbXlDb2x1bW5zOiBEaWN0aW9uYXJ5PENvbHVtbkJ1aWxkZXJDb21wb25lbnQ+ID0ge307XG4gIHNob3dIZWFkZXIkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNvcnQ6IE1hdFNvcnQsXG4gICAgcHVibGljIHN0YXRlOiBUYWJsZVN0b3JlLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgKSB7XG5cbiAgICB0aGlzLmluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbXG4gICAgICB7cHJvdmlkZTogTWF0VGFibGUsIHVzZUZhY3Rvcnk6ICgpPT4ge3JldHVybiB0aGlzLnRhYmxlfSB9LFxuICAgICAge3Byb3ZpZGU6IENka0Ryb3BMaXN0LCB1c2VGYWN0b3J5OiAoKT0+IHtyZXR1cm4gdGhpcy5kcm9wTGlzdH0gfSxcbiAgICBdLCBwYXJlbnQ6IGluamVjdG9yfSk7XG4gIH1cblxuICB0cmFja0J5RnVuY3Rpb24gPSAoaW5kZXg6bnVtYmVyLCBpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFja0J5KSB7XG4gICAgICByZXR1cm4gaXRlbVt0aGlzLnRyYWNrQnldO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5yb3dzICYmIHRoaXMucm93cyAmJiB0aGlzLm15Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJvd0RlZnMoWy4uLnRoaXMucm93c10pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLlNlbGVjdGlvbkNvbHVtbikge1xuICAgICAgdGhpcy5jb2x1bW5zLnB1c2goJ3NlbGVjdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLkluZGV4Q29sdW1uKSB7XG4gICAgIHRoaXMuY29sdW1ucy5wdXNoKCdpbmRleCcpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlRGF0YVNvdXJjZSgpO1xuXG4gICAgdGhpcy5zdGF0ZS5vbih0aGlzLmNvbHVtbkluZm9zLCBjb2x1bW5zID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjaSA9PiB0aGlzLmFkZE1ldGFEYXRhKGNpKSlcbiAgICB9KTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZVJvd0RlZnMoWy4uLnRoaXMucm93c10pO1xuXG4gICAgdGhpcy5zdGF0ZS5vbih0aGlzLnN0YXRlLmRpc3BsYXllZENvbHVtbnMkLCBrZXlzID0+IHtcbiAgICAgIHRoaXMua2V5cyA9IFsuLi50aGlzLmNvbHVtbnMsIC4uLmtleXNdO1xuICAgICAgdGhpcy5yb3dEZWZBcnI/LmZvckVhY2gocm93ID0+IHJvdy5jb2x1bW5zID0gdGhpcy5rZXlzKVxuICAgIH0pO1xuXG4gICAgdGhpcy5zaG93SGVhZGVyJCA9IHRoaXMuc3RhdGUudGFibGVTZXR0aW5ncyQucGlwZShtYXAoc2V0dGluZ3MgPT4gIShzZXR0aW5ncy5oaWRlQ29sdW1uSGVhZGVyKSkpO1xuICB9XG5cbiAgY3JlYXRlRGF0YVNvdXJjZSgpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR2VuZXJpY1RhYmxlRGF0YVNvdXJjZShcbiAgICAgIHRoaXMuZGF0YSQucGlwZSh0YXAoKGQpID0+IHRoaXMuc2VsZWN0aW9uLmNsZWFyKCkgKSlcbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVTb3J0KSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICB9XG4gIH1cblxuICBpc0dyb3VwSGVhZGVyKF86IG51bWJlciwgcm93OiB7IGlzR3JvdXBIZWFkZXI6IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiByb3cuaXNHcm91cEhlYWRlcjtcbiAgfVxuXG4gIGlzR3JvdXBGb290ZXIoXzogbnVtYmVyLCByb3c6IHsgaXNHcm91cEZvb3RlcjogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHJvdy5pc0dyb3VwRm9vdGVyO1xuICB9XG5cbiAgdXBkYXRlR3JvdXAoZ3JvdXA6IEdyb3VwKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGVHcm91cCh7XG4gICAgICAuLi5ncm91cCxcbiAgICAgIGlzRXhwYW5kZWQ6ICFncm91cC5pc0V4cGFuZGVkXG4gICAgfSk7XG4gIH1cblxuICBhZGRNZXRhRGF0YShjb2x1bW46IENvbHVtbkluZm8pIHtcbiAgICBsZXQgY29sdW1uQnVpbGRlciA9IHRoaXMubXlDb2x1bW5zW2NvbHVtbi5tZXRhRGF0YS5rZXldO1xuICAgIGlmKGNvbHVtbkJ1aWxkZXIpIHtcbiAgICAgIGNvbHVtbkJ1aWxkZXIubWV0YURhdGEgPSBjb2x1bW4ubWV0YURhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoQ29sdW1uQnVpbGRlckNvbXBvbmVudCwge1xuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3JcbiAgICAgIH0pO1xuICAgICAgY29tcG9uZW50Lmluc3RhbmNlLmN1c3RvbUNlbGwgPSBjb2x1bW4uY3VzdG9tQ2VsbDtcbiAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5tZXRhRGF0YSA9IGNvbHVtbi5tZXRhRGF0YTtcbiAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5kYXRhJCA9IHRoaXMuZGF0YSQ7XG4gICAgICB0aGlzLm15Q29sdW1uc1tjb2x1bW4ubWV0YURhdGEua2V5XSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXplUm93RGVmcyA9IChkZWZzOk1hdFJvd0RlZjxhbnk+W10pPT57XG4gICAgdGhpcy5yb3dEZWZBcnIuZm9yRWFjaChyPT50aGlzLnRhYmxlLnJlbW92ZVJvd0RlZihyKSk7XG4gICAgdGhpcy5yb3dEZWZBcnIgPSBkZWZzO1xuICAgIGRlZnMuZm9yRWFjaChyID0+IHtcbiAgICAgIHIuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5jb25jYXQoT2JqZWN0LnZhbHVlcyh0aGlzLm15Q29sdW1ucykuZmlsdGVyKGMgPT4gYy5tZXRhRGF0YS5maWVsZFR5cGUgIT09IEZpZWxkVHlwZS5IaWRkZW4pLm1hcChjID0+IGMubWV0YURhdGEua2V5KSk7XG4gICAgICBpZiAodGhpcy50YWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlLmFkZFJvd0RlZihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdGlvbiA6IFNlbGVjdGlvbk1vZGVsPGFueT4gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb24kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkO1xuICBtYXN0ZXJUb2dnbGVDaGVja2VkJCA9IHRoaXMuc2VsZWN0aW9uJC5waXBlKG1hcCgoKT0+dGhpcy5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiB0aGlzLmlzQWxsU2VsZWN0ZWQoKSkpO1xuICBtYXN0ZXJUb2dnbGVJbmRldGVybWluYXRlJCA9IHRoaXMuc2VsZWN0aW9uJC5waXBlKG1hcCgoKT0+dGhpcy5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhdGhpcy5pc0FsbFNlbGVjdGVkKCkpKTtcblxuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICB9XG5cbiAgLyoqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cbiAgbWFzdGVyVG9nZ2xlKCkge1xuICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID9cbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCkgOlxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgfVxuXG4gIHRhYmxlV2lkdGggPSB0aGlzLnN0YXRlLmdldFVzZXJEZWZpbmVkVGFibGVTaXplJC5waXBlKFxuICAgIHByZXZpb3VzQW5kQ3VycmVudDxudW1iZXIgfCB1bmRlZmluZWQ+KDApLFxuICAgIG1hcCgoW3ByZXZpb3VzVXNlckRlZmluZWRXaWR0aCwgY3VycmVudFVzZXJEZWZpbmVkV2lkdGhdKSA9PiB7XG4gICAgICBpZiggY3VycmVudFVzZXJEZWZpbmVkV2lkdGgpe1xuICAgICAgICByZXR1cm4gKHt3aWR0aDpgJHtjdXJyZW50VXNlckRlZmluZWRXaWR0aH1weGB9KTtcbiAgICAgIH0gaWYoIHdhc1Jlc2V0KCkgKXtcbiAgICAgICAgcmV0dXJuICh7d2lkdGg6J2luaXRpYWwnfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHt9KTtcblxuICAgICAgZnVuY3Rpb24gd2FzUmVzZXQoKXtcbiAgICAgICAgcmV0dXJuIChwcmV2aW91c1VzZXJEZWZpbmVkV2lkdGggPz8gMCkgPj0wICYmIGN1cnJlbnRVc2VyRGVmaW5lZFdpZHRoID09IG51bGw7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcblxuICBjb2xsYXBzZUZvb3RlciQgPSB0aGlzLnN0YXRlLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5wZXJzaXN0ZWRUYWJsZVNldHRpbmdzLmNvbGxhcHNlRm9vdGVyKSk7XG59XG4iLCI8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IHR2c0l0ZW1TaXplIFtzdHlsZS5oZWlnaHRdPVwidnNWaWV3cG9ydEhlaWdodFwiPlxuXG48bWF0LXRhYmxlXG4gIGNka0Ryb3BMaXN0XG4gIGNka0Ryb3BMaXN0TG9ja0F4aXM9J3gnXG4gIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxuICBjbGFzcz1cInRhYmxlLWRyYWctbGlzdFwiXG4gICN0YWJsZVxuICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgW3RyYWNrQnldPSd0cmFja0J5RnVuY3Rpb24nXG4gIFtzdHlsZXJdPVwidGFibGVXaWR0aCB8IGFzeW5jXCJcbj5cblxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImYtbWF0LWhlYWRlci1jZWxsXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhIShtYXN0ZXJUb2dnbGVDaGVja2VkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJtYXN0ZXJUb2dnbGVJbmRldGVybWluYXRlJCB8IGFzeW5jXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuXG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiIXJvdy5pc0dyb3VwRm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKHJvdykgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9tYXQtY2VsbD5cblxuICAgICAgICA8bWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgIHt7IHNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggfX1cbiAgICAgICAgPC9tYXQtZm9vdGVyLWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpbmRleFwiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJmLW1hdC1oZWFkZXItY2VsbFwiID4jPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGkgPSBpbmRleDtcIj4ge3sgKHRiUGFnaW5hdG9yLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0YlBhZ2luYXRvci5wYWdpbmF0b3IucGFnZVNpemUpICsgIGkgKyAxIH19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgPG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L21hdC1mb290ZXItY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImdyb3VwSGVhZGVyXCI+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8ZGl2IFtzdHlsZS5wYWRkaW5nTGVmdF09XCJyb3cucGFkZGluZyArICdweCAhaW1wb3J0YW50J1wiID5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ1cGRhdGVHcm91cChyb3cpO1wiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhcm93LmlzRXhwYW5kZWRcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwicm93LmlzRXhwYW5kZWRcIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIHt7cm93Lmdyb3VwSGVhZGVyTmFtZX19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXgtZ3JvdzogMVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwSGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgZWxlbWVudDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93SGVhZGVyJCB8IGFzeW5jXCI+XG4gICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJrZXlzOyBzdGlja3k6IGlzU3RpY2t5XCI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBrZXlzOyBsZXQgaSA9IGluZGV4XCI+PC9tYXQtcm93PlxuICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydncm91cEhlYWRlciddOyB3aGVuOiBpc0dyb3VwSGVhZGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIj48L21hdC1yb3c+XG4gIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBrZXlzOyB3aGVuOiBpc0dyb3VwRm9vdGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZXNtb2tlO1wiPjwvbWF0LXJvdz5cbiAgPG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJrZXlzXCI+PC9tYXQtZm9vdGVyLXJvdz5cblxuPC9tYXQtdGFibGU+XG5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG48ZGl2IGNsYXNzPVwiZmx4LXJvdy1lbmQgc3RpY2t5XCI+XG4gIDx0Yi1wYWdpbmF0b3IgI3RiUGFnaW5hdG9yXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgW3RhYmxlRWxSZWZdPVwidGFibGVFbFJlZlwiXG4gICAgW2RhdGEkXT1cImRhdGEkXCI+XG4gIDwvdGItcGFnaW5hdG9yPlxuXG4gIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCIoY29sbGFwc2VGb290ZXIkIHwgYXN5bmMpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnXCIgY2xhc3M9XCJjb2xsYXBzZS1pY29uIGZvb3RlclwiIChjbGljayk9XCJzdGF0ZS50b2dnbGVDb2xsYXBzZUZvb3RlcigpXCI+XG4gICAge3soY29sbGFwc2VGb290ZXIkIHwgYXN5bmMpID8gJ2V4cGFuZF9tb3JlJyA6ICdleHBhbmRfbGVzcyd9fVxuICA8L21hdC1pY29uPlxuPC9kaXY+XG4iXX0=
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFLTixVQUFVLEVBQ1YsUUFBUSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRM0QsTUFBTSxPQUFPLHFCQUFxQjtJQTZDaEMsWUFDVSxJQUFhLEVB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LElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7a0hBdktVLHFCQUFxQjtzR0FBckIscUJBQXFCLGdhQWdDckIsUUFBUSx5RkFDUixXQUFXLCtIQUNLLFVBQVUsa0VBQzFCLGtCQUFrQixxRUN2RS9CLHN2R0FnRkE7MkZENUNhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTs2S0FTdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHTyxXQUFXO3NCQUF2QixLQUFLO2dCQWNpQyxLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0ssUUFBUTtzQkFBakQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNBLFVBQVU7c0JBQWpELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQztnQkFDUCxrQkFBa0I7c0JBQWhELFNBQVM7dUJBQUMsa0JBQWtCO2dCQXFIbkIsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBJbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRSb3dEZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuaW1wb3J0IHsgdGFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb2x1bW5CdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1uLWJ1aWxkZXIvY29sdW1uLWJ1aWxkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xuaW1wb3J0IHsgR2VuZXJpY1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvR2VuZXJpY1RhYmxlRGF0YVNvdXJjZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xuaW1wb3J0IHsgcHJldmlvdXNBbmRDdXJyZW50IH0gZnJvbSAnLi4vLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Db2x1bW5JbmZvJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xuaW1wb3J0IHsgUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0b3IuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGItZ2VuZXJpYy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2NzcycsJy4uLy4uL3N0eWxlcy9jb2xsYXBzZXIuc3R5bGVzLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICB0aGlzLnN0YXRlLnNldFVzZXJEZWZpbmVkT3JkZXIoe25ld09yZGVyOmV2ZW50LmN1cnJlbnRJbmRleCxvbGRPcmRlcjpldmVudC5wcmV2aW91c0luZGV4fSlcbiAgfVxuXG4gIEBJbnB1dCgpIGRhdGEkITogT2JzZXJ2YWJsZTxhbnlbXT47XG4gIEBJbnB1dCgpIEluZGV4Q29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIFNlbGVjdGlvbkNvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0cmFja0J5ITogc3RyaW5nO1xuICBASW5wdXQoKSByb3dzITogUXVlcnlMaXN0PE1hdFJvd0RlZjxhbnk+PjtcbiAgQElucHV0KCkgaXNTdGlja3kgPSBmYWxzZTtcbiAgQElucHV0KCkgY29sdW1uQnVpbGRlcnMhOiBDb2x1bW5CdWlsZGVyQ29tcG9uZW50W107XG4gIEBJbnB1dCgpIGNvbHVtbkluZm9zITogT2JzZXJ2YWJsZTxDb2x1bW5JbmZvW10+O1xuICBASW5wdXQoKSBncm91cEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIF9kaXNhYmxlU29ydCE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlU29ydCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlU29ydCA9IHZhbDtcbiAgICBpZiAodmFsKSB7XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlPy5zb3J0KSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAmJiAhdGhpcy5kYXRhU291cmNlLnNvcnQpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBkaXNhYmxlU29ydCgpIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVTb3J0OyB9XG5cbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGUhOiBNYXRUYWJsZTxhbnk+O1xuICBAVmlld0NoaWxkKENka0Ryb3BMaXN0LCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wTGlzdCE6IENka0Ryb3BMaXN0O1xuICBAVmlld0NoaWxkKCd0YWJsZScsIHtyZWFkOiBFbGVtZW50UmVmfSkgdGFibGVFbFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoUGFnaW5hdG9yQ29tcG9uZW50KSBwYWdpbmF0b3JDb21wb25lbnQhOiBQYWdpbmF0b3JDb21wb25lbnQ7XG4gIGN1cnJlbnRDb2x1bW5zITogc3RyaW5nW107XG4gIGRhdGFTb3VyY2UhOiBHZW5lcmljVGFibGVEYXRhU291cmNlPGFueT47XG4gIGtleXM6IHN0cmluZyBbXSA9IFtdO1xuICBpbmplY3RvcjogSW5qZWN0b3I7XG4gIHJvd0RlZkFyciA6TWF0Um93RGVmPGFueT5bXT0gW107XG4gIGNvbHVtbnM6c3RyaW5nIFtdID0gW107XG4gIG15Q29sdW1uczogRGljdGlvbmFyeTxDb2x1bW5CdWlsZGVyQ29tcG9uZW50PiA9IHt9O1xuICBzaG93SGVhZGVyJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzb3J0OiBNYXRTb3J0LFxuICAgIHB1YmxpYyBzdGF0ZTogVGFibGVTdG9yZSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuXG4gICAgdGhpcy5pbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7IHByb3ZpZGVyczogW1xuICAgICAge3Byb3ZpZGU6IE1hdFRhYmxlLCB1c2VGYWN0b3J5OiAoKT0+IHtyZXR1cm4gdGhpcy50YWJsZX0gfSxcbiAgICAgIHtwcm92aWRlOiBDZGtEcm9wTGlzdCwgdXNlRmFjdG9yeTogKCk9PiB7cmV0dXJuIHRoaXMuZHJvcExpc3R9IH0sXG4gICAgXSwgcGFyZW50OiBpbmplY3Rvcn0pO1xuICB9XG5cbiAgdHJhY2tCeUZ1bmN0aW9uID0gKGluZGV4Om51bWJlciwgaXRlbTogYW55KSA9PiB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhY2tCeSkge1xuICAgICAgcmV0dXJuIGl0ZW1bdGhpcy50cmFja0J5XTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMucm93cyAmJiB0aGlzLnJvd3MgJiYgdGhpcy5teUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSb3dEZWZzKFsuLi50aGlzLnJvd3NdKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5TZWxlY3Rpb25Db2x1bW4pIHtcbiAgICAgIHRoaXMuY29sdW1ucy5wdXNoKCdzZWxlY3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5JbmRleENvbHVtbikge1xuICAgICB0aGlzLmNvbHVtbnMucHVzaCgnaW5kZXgnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZURhdGFTb3VyY2UoKTtcblxuICAgIHRoaXMuc3RhdGUub24odGhpcy5jb2x1bW5JbmZvcywgY29sdW1ucyA9PiB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goY2kgPT4gdGhpcy5hZGRNZXRhRGF0YShjaSkpXG4gICAgfSk7XG5cbiAgICB0aGlzLmluaXRpYWxpemVSb3dEZWZzKFsuLi50aGlzLnJvd3NdKTtcblxuICAgIHRoaXMuc3RhdGUub24odGhpcy5zdGF0ZS5kaXNwbGF5ZWRDb2x1bW5zJCwga2V5cyA9PiB7XG4gICAgICB0aGlzLmtleXMgPSBbLi4udGhpcy5jb2x1bW5zLCAuLi5rZXlzXTtcbiAgICAgIHRoaXMucm93RGVmQXJyPy5mb3JFYWNoKHJvdyA9PiByb3cuY29sdW1ucyA9IHRoaXMua2V5cylcbiAgICB9KTtcblxuICAgIHRoaXMuc2hvd0hlYWRlciQgPSB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MkLnBpcGUobWFwKHNldHRpbmdzID0+ICEoc2V0dGluZ3MuaGlkZUNvbHVtbkhlYWRlcikpKTtcbiAgfVxuXG4gIGNyZWF0ZURhdGFTb3VyY2UoKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IEdlbmVyaWNUYWJsZURhdGFTb3VyY2UoXG4gICAgICB0aGlzLmRhdGEkLnBpcGUodGFwKChkKSA9PiB0aGlzLnNlbGVjdGlvbi5jbGVhcigpICkpXG4gICAgKTtcblxuICAgIGlmICghdGhpcy5kaXNhYmxlU29ydCkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgfVxuICB9XG5cbiAgaXNHcm91cEhlYWRlcihfOiBudW1iZXIsIHJvdzogeyBpc0dyb3VwSGVhZGVyOiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gcm93LmlzR3JvdXBIZWFkZXI7XG4gIH1cblxuICBpc0dyb3VwRm9vdGVyKF86IG51bWJlciwgcm93OiB7IGlzR3JvdXBGb290ZXI6IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiByb3cuaXNHcm91cEZvb3RlcjtcbiAgfVxuXG4gIHVwZGF0ZUdyb3VwKGdyb3VwOiBHcm91cCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlR3JvdXAoe1xuICAgICAgLi4uZ3JvdXAsXG4gICAgICBpc0V4cGFuZGVkOiAhZ3JvdXAuaXNFeHBhbmRlZFxuICAgIH0pO1xuICB9XG5cbiAgYWRkTWV0YURhdGEoY29sdW1uOiBDb2x1bW5JbmZvKSB7XG4gICAgbGV0IGNvbHVtbkJ1aWxkZXIgPSB0aGlzLm15Q29sdW1uc1tjb2x1bW4ubWV0YURhdGEua2V5XTtcbiAgICBpZihjb2x1bW5CdWlsZGVyKSB7XG4gICAgICBjb2x1bW5CdWlsZGVyLm1ldGFEYXRhID0gY29sdW1uLm1ldGFEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KENvbHVtbkJ1aWxkZXJDb21wb25lbnQsIHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5jdXN0b21DZWxsID0gY29sdW1uLmN1c3RvbUNlbGw7XG4gICAgICBjb21wb25lbnQuaW5zdGFuY2UubWV0YURhdGEgPSBjb2x1bW4ubWV0YURhdGE7XG4gICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YSQgPSB0aGlzLmRhdGEkO1xuICAgICAgdGhpcy5teUNvbHVtbnNbY29sdW1uLm1ldGFEYXRhLmtleV0gPSBjb21wb25lbnQuaW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZVJvd0RlZnMgPSAoZGVmczpNYXRSb3dEZWY8YW55PltdKT0+e1xuICAgIHRoaXMucm93RGVmQXJyLmZvckVhY2gocj0+dGhpcy50YWJsZS5yZW1vdmVSb3dEZWYocikpO1xuICAgIHRoaXMucm93RGVmQXJyID0gZGVmcztcbiAgICBkZWZzLmZvckVhY2gociA9PiB7XG4gICAgICByLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuY29uY2F0KE9iamVjdC52YWx1ZXModGhpcy5teUNvbHVtbnMpLmZpbHRlcihjID0+IGMubWV0YURhdGEuZmllbGRUeXBlICE9PSBGaWVsZFR5cGUuSGlkZGVuKS5tYXAoYyA9PiBjLm1ldGFEYXRhLmtleSkpO1xuICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgdGhpcy50YWJsZS5hZGRSb3dEZWYocik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3Rpb24gOiBTZWxlY3Rpb25Nb2RlbDxhbnk+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zZWxlY3Rpb24uY2hhbmdlZDtcbiAgbWFzdGVyVG9nZ2xlQ2hlY2tlZCQgPSB0aGlzLnNlbGVjdGlvbiQucGlwZShtYXAoKCk9PnRoaXMuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgdGhpcy5pc0FsbFNlbGVjdGVkKCkpKTtcbiAgbWFzdGVyVG9nZ2xlSW5kZXRlcm1pbmF0ZSQgPSB0aGlzLnNlbGVjdGlvbiQucGlwZShtYXAoKCk9PnRoaXMuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIXRoaXMuaXNBbGxTZWxlY3RlZCgpKSk7XG5cbiAgaXNBbGxTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIC8qKiBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXG4gIG1hc3RlclRvZ2dsZSgpIHtcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDpcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gIH1cblxuICB0YWJsZVdpZHRoID0gdGhpcy5zdGF0ZS5nZXRVc2VyRGVmaW5lZFRhYmxlU2l6ZSQucGlwZShcbiAgICBwcmV2aW91c0FuZEN1cnJlbnQ8bnVtYmVyIHwgdW5kZWZpbmVkPigwKSxcbiAgICBtYXAoKFtwcmV2aW91c1VzZXJEZWZpbmVkV2lkdGgsIGN1cnJlbnRVc2VyRGVmaW5lZFdpZHRoXSkgPT4ge1xuICAgICAgaWYoIGN1cnJlbnRVc2VyRGVmaW5lZFdpZHRoKXtcbiAgICAgICAgcmV0dXJuICh7d2lkdGg6YCR7Y3VycmVudFVzZXJEZWZpbmVkV2lkdGh9cHhgfSk7XG4gICAgICB9IGlmKCB3YXNSZXNldCgpICl7XG4gICAgICAgIHJldHVybiAoe3dpZHRoOidpbml0aWFsJ30pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh7fSk7XG5cbiAgICAgIGZ1bmN0aW9uIHdhc1Jlc2V0KCl7XG4gICAgICAgIHJldHVybiAocHJldmlvdXNVc2VyRGVmaW5lZFdpZHRoID8/IDApID49MCAmJiBjdXJyZW50VXNlckRlZmluZWRXaWR0aCA9PSBudWxsO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgY29sbGFwc2VGb290ZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUZvb3RlcikpO1xufVxuIiwiPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCB0dnNJdGVtU2l6ZSBjbGFzcz1cInRiLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XCI+XG5cbjxtYXQtdGFibGVcbiAgY2RrRHJvcExpc3RcbiAgY2RrRHJvcExpc3RMb2NrQXhpcz0neCdcbiAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4gIGNsYXNzPVwidGFibGUtZHJhZy1saXN0XCJcbiAgI3RhYmxlXG4gIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICBbdHJhY2tCeV09J3RyYWNrQnlGdW5jdGlvbidcbiAgW3N0eWxlcl09XCJ0YWJsZVdpZHRoIHwgYXN5bmNcIlxuPlxuXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cblxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZi1tYXQtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwiJGV2ZW50ID8gbWFzdGVyVG9nZ2xlKCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhKG1hc3RlclRvZ2dsZUNoZWNrZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm1hc3RlclRvZ2dsZUluZGV0ZXJtaW5hdGUkIHwgYXN5bmNcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCIhcm93LmlzR3JvdXBGb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUocm93KSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L21hdC1jZWxsPlxuXG4gICAgICAgIDxtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgICAge3sgc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCB9fVxuICAgICAgICA8L21hdC1mb290ZXItY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImluZGV4XCI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImYtbWF0LWhlYWRlci1jZWxsXCIgPiM8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaSA9IGluZGV4O1wiPiB7eyAodGJQYWdpbmF0b3IucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRiUGFnaW5hdG9yLnBhZ2luYXRvci5wYWdlU2l6ZSkgKyAgaSArIDEgfX0gPC9tYXQtY2VsbD5cbiAgICAgICAgICA8bWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvbWF0LWZvb3Rlci1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZ3JvdXBIZWFkZXJcIj5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIDxkaXYgW3N0eWxlLnBhZGRpbmdMZWZ0XT1cInJvdy5wYWRkaW5nICsgJ3B4ICFpbXBvcnRhbnQnXCIgPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInVwZGF0ZUdyb3VwKHJvdyk7XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFyb3cuaXNFeHBhbmRlZFwiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJyb3cuaXNFeHBhbmRlZFwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAge3tyb3cuZ3JvdXBIZWFkZXJOYW1lfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyBlbGVtZW50OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dIZWFkZXIkIHwgYXN5bmNcIj5cbiAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImtleXM7IHN0aWNreTogaXNTdGlja3lcIj48L21hdC1oZWFkZXItcm93PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGtleXM7IGxldCBpID0gaW5kZXhcIj48L21hdC1yb3c+XG4gIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2dyb3VwSGVhZGVyJ107IHdoZW46IGlzR3JvdXBIZWFkZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiPjwvbWF0LXJvdz5cbiAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGtleXM7IHdoZW46IGlzR3JvdXBGb290ZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlc21va2U7XCI+PC9tYXQtcm93PlxuICA8bWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImtleXNcIj48L21hdC1mb290ZXItcm93PlxuXG48L21hdC10YWJsZT5cblxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbjxkaXYgY2xhc3M9XCJmbHgtcm93LWVuZCBzdGlja3lcIj5cbiAgPHRiLXBhZ2luYXRvciAjdGJQYWdpbmF0b3JcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICBbdGFibGVFbFJlZl09XCJ0YWJsZUVsUmVmXCJcbiAgICBbZGF0YSRdPVwiZGF0YSRcIj5cbiAgPC90Yi1wYWdpbmF0b3I+XG5cbiAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cIihjb2xsYXBzZUZvb3RlciQgfCBhc3luYykgPyAnZXhwYW5kJyA6ICdjb2xsYXBzZSdcIiBjbGFzcz1cImNvbGxhcHNlLWljb24gZm9vdGVyXCIgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlRm9vdGVyKClcIj5cbiAgICB7eyhjb2xsYXBzZUZvb3RlciQgfCBhc3luYykgPyAnZXhwYW5kX21vcmUnIDogJ2V4cGFuZF9sZXNzJ319XG4gIDwvbWF0LWljb24+XG48L2Rpdj5cbiJdfQ==
@@ -266,10 +266,10 @@ export class TableContainerComponent {
266
266
  }
267
267
  }
268
268
  TableContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TableContainerComponent, deps: [{ token: i1.TableStore }, { token: i2.ExportToCsvService }, { token: TableBuilderConfigToken }, { token: i3.Store }, { token: i4.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
269
- TableContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: TableContainerComponent, selector: "tb-table-container", inputs: { tableId: "tableId", tableBuilder: "tableBuilder", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", isSticky: "isSticky", pageSize: "pageSize", inputFilters: "inputFilters", groupHeaderTemplate: "groupHeaderTemplate", vsViewportHeight: "vsViewportHeight" }, outputs: { selection$: "selection$", data: "data", OnStateReset: "OnStateReset", OnSaveState: "OnSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], viewQueries: [{ propertyName: "genericTableComponent", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </ng-container>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [vsViewportHeight]=\"vsViewportHeight\">\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <ng-container *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </ng-container>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i9.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: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i13.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: i14.ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: i15.DialogDirective, selector: "[opDialog]", inputs: ["add_opDialog_Class", "opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "component", type: i16.GenericTableComponent, selector: "tb-generic-table", inputs: ["data$", "IndexColumn", "SelectionColumn", "trackBy", "rows", "isSticky", "columnBuilders", "columnInfos", "groupHeaderTemplate", "vsViewportHeight", "disableSort"], outputs: ["selection$"] }, { kind: "component", type: i17.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i18.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "directive", type: i19.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i20.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i21.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i22.GroupByListComponent, selector: "group-by-list" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
269
+ TableContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: TableContainerComponent, selector: "tb-table-container", inputs: { tableId: "tableId", tableBuilder: "tableBuilder", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", isSticky: "isSticky", pageSize: "pageSize", inputFilters: "inputFilters", groupHeaderTemplate: "groupHeaderTemplate" }, outputs: { selection$: "selection$", data: "data", OnStateReset: "OnStateReset", OnSaveState: "OnSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], viewQueries: [{ propertyName: "genericTableComponent", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </ng-container>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\">\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <ng-container *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </ng-container>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i9.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: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i13.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: i14.ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: i15.DialogDirective, selector: "[opDialog]", inputs: ["add_opDialog_Class", "opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "component", type: i16.GenericTableComponent, selector: "tb-generic-table", inputs: ["data$", "IndexColumn", "SelectionColumn", "trackBy", "rows", "isSticky", "columnBuilders", "columnInfos", "groupHeaderTemplate", "disableSort"], outputs: ["selection$"] }, { kind: "component", type: i17.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i18.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "directive", type: i19.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i20.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i21.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i22.GroupByListComponent, selector: "group-by-list" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
270
270
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TableContainerComponent, decorators: [{
271
271
  type: Component,
272
- args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </ng-container>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [vsViewportHeight]=\"vsViewportHeight\">\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <ng-container *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </ng-container>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
272
+ args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </ng-container>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\">\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <ng-container *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </ng-container>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
273
273
  }], ctorParameters: function () { return [{ type: i1.TableStore }, { type: i2.ExportToCsvService }, { type: undefined, decorators: [{
274
274
  type: Inject,
275
275
  args: [TableBuilderConfigToken]
@@ -302,8 +302,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
302
302
  type: Input
303
303
  }], groupHeaderTemplate: [{
304
304
  type: Input
305
- }], vsViewportHeight: [{
306
- type: Input
307
305
  }], selection$: [{
308
306
  type: Output
309
307
  }], data: [{
@@ -321,4 +319,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
321
319
  }], state$: [{
322
320
  type: Output
323
321
  }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFFTixRQUFRLEVBRVIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFtQixTQUFTLEVBQVksTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFB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O2dCQUNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsSUFBSTtzQkFBYixNQUFNO2dCQUtxQixVQUFVO3NCQUFyQyxlQUFlO3VCQUFDLFNBQVM7Z0JBRVksV0FBVztzQkFBaEQsZUFBZTt1QkFBQyxtQkFBbUI7Z0JBQzFCLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBJbmplY3QsXG4gIFByZWRpY2F0ZSxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmcm9tLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFycmF5QWRkaXRpb25hbCwgRmllbGRUeXBlLCBNZXRhRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XG5pbXBvcnQgeyBmaXJzdCwgbGFzdCwgbWFwLCBzd2l0Y2hNYXAsIHRhcCwgd2l0aExhdGVzdEZyb20sIG1lcmdlQWxsLCBzY2FuIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFibGVCdWlsZGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1idWlsZGVyJztcbmltcG9ydCB7IE1hdFJvd0RlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEN1c3RvbUNlbGxEaXJlY3RpdmUsIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCBUYWJsZUZpbHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgIHN0YXRlSXMsIFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcbmltcG9ydCB7IERhdGFGaWx0ZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtZmlsdGVyJztcbmltcG9ydCB7IGNvbWJpbmVBcnJheXMsIG1hcEFycmF5LCBub3ROdWxsIH0gZnJvbSAnLi4vLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XG5pbXBvcnQgeyBFeHBvcnRUb0NzdlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQtdG8tY3N2LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJyYXlEZWZhdWx0cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdFNldHRpbmdzJztcbmltcG9ydCB7IFRhYmxlQnVpbGRlckNvbmZpZywgVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4gfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XG5pbXBvcnQgKiBhcyBzZWxlY3RvcnMgZnJvbSAnLi4vLi4vbmdyeC9zZWxlY3RvcnMnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGRlbGV0ZUxvY2FsUHJvZmlsZXNTdGF0ZSwgc2V0TG9jYWxQcm9maWxlLCBzZXRMb2NhbFByb2ZpbGVzU3RhdGUgfSBmcm9tICcuLi8uLi9uZ3J4L2FjdGlvbnMnO1xuaW1wb3J0IHsgR3JvdXAsIEluaXRpYWxpemF0aW9uU3RhdGUsIFBlcnNpc3RlZFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xuaW1wb3J0IHsgc29ydERhdGEgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvc29ydC1kYXRhLWZ1bmN0aW9uJztcbmltcG9ydCB7IFdyYXBwZXJGaWx0ZXJTdG9yZSB9IGZyb20gJy4uL3RhYmxlLWNvbnRhaW5lci1maWx0ZXIvdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBncm91cEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0NvbHVtbkluZm8nO1xuaW1wb3J0IHsgZGVmYXVsdFNoYXJlUmVwbGF5IH0gZnJvbSAnLi4vLi4vLi4vcnhqcyc7XG5pbXBvcnQgeyBmbGF0dGVuRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJGdW5jLCBpc0N1c3RvbUZpbHRlciwgaXNGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kaWN0aW9uYXJ5JztcbmltcG9ydCB7IFRhYmxlV3JhcHBlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGFibGUtd3JhcHBlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgY3JlYXRlTGlua0NyZWF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saW5rLWNyZWF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9nZW5lcmljLXRhYmxlL2dlbmVyaWMtdGFibGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGItdGFibGUtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWNvbnRhaW5lci5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29udGFpbmVyLmNzcycsJy4uLy4uL3N0eWxlcy9jb2xsYXBzZXIuc3R5bGVzLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1RhYmxlU3RvcmUsRXhwb3J0VG9Dc3ZTZXJ2aWNlLFdyYXBwZXJGaWx0ZXJTdG9yZV1cbn0pIGV4cG9ydCBjbGFzcyBUYWJsZUNvbnRhaW5lckNvbXBvbmVudDxUID0gYW55PiB7XG5cbiAgQFZpZXdDaGlsZChHZW5lcmljVGFibGVDb21wb25lbnQpIHByaXZhdGUgZ2VuZXJpY1RhYmxlQ29tcG9uZW50ITogR2VuZXJpY1RhYmxlQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGN1c3RvbUZpbHRlcnMhOiBRdWVyeUxpc3Q8VGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKFRhYmxlRmlsdGVyRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJzITogUXVlcnlMaXN0PFRhYmxlRmlsdGVyRGlyZWN0aXZlPjtcblxuICBASW5wdXQoKSB0YWJsZUlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJsZUJ1aWxkZXIhOiBUYWJsZUJ1aWxkZXI7XG4gIEBJbnB1dCgpIEluZGV4Q29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIFNlbGVjdGlvbkNvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0cmFja0J5ITogc3RyaW5nO1xuICBASW5wdXQoKSBpc1N0aWNreSA9IHRydWU7XG4gIEBJbnB1dCgpIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5zdGF0ZS5zZXRQYWdlU2l6ZSh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgaW5wdXRGaWx0ZXJzPzogT2JzZXJ2YWJsZTxBcnJheTxQcmVkaWNhdGU8VD4+PjtcbiAgQElucHV0KCkgZ3JvdXBIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHZzVmlld3BvcnRIZWlnaHQhOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb24kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBkYXRhU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PE9ic2VydmFibGU8VFtdPj4oMSk7XG4gIEBPdXRwdXQoKSBkYXRhID0gdGhpcy5kYXRhU3ViamVjdC5waXBlKFxuICAgIHN3aXRjaE1hcCggZCA9PiBkKSxcbiAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcbiAgKTtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZikgY3VzdG9tUm93cyE6IFF1ZXJ5TGlzdDxNYXRSb3dEZWY8YW55Pj47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDdXN0b21DZWxsRGlyZWN0aXZlKSBjdXN0b21DZWxscyE6IFF1ZXJ5TGlzdDxDdXN0b21DZWxsRGlyZWN0aXZlPjtcbiAgQE91dHB1dCgpIE9uU3RhdGVSZXNldCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIE9uU2F2ZVN0YXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc3RhdGUkIDogT2JzZXJ2YWJsZTxQZXJzaXN0ZWRUYWJsZVN0YXRlPjtcblxuICBteUNvbHVtbnMkITogT2JzZXJ2YWJsZTxDb2x1bW5JbmZvW10+O1xuXG4gIHN0YXRlS2V5cyQ/OiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgbnVsbD47XG4gIGN1cnJlbnRTdGF0ZUtleSQ/OiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgZGlzYWJsZVNvcnQhOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0ZTogVGFibGVTdG9yZSxcbiAgICBwdWJsaWMgZXhwb3J0VG9Dc3ZTZXJ2aWNlOiBFeHBvcnRUb0NzdlNlcnZpY2U8VD4sXG4gICAgQEluamVjdChUYWJsZUJ1aWxkZXJDb25maWdUb2tlbikgcHJpdmF0ZSBjb25maWc6IFRhYmxlQnVpbGRlckNvbmZpZyxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgd3JhcHBlcjogVGFibGVXcmFwcGVyRGlyZWN0aXZlLFxuICApIHtcbiAgICAgdGhpcy5zdGF0ZS5vbiggdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKGxhc3QoKSksIGZpbmFsU3RhdGUgPT4ge1xuICAgICAgaWYodGhpcy50YWJsZUlkKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0TG9jYWxQcm9maWxlKHtrZXk6dGhpcy50YWJsZUlkLHZhbHVlOiBmaW5hbFN0YXRlfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKFxuICAgICAgbWFwKHN0YXRlID0+IGNsb25lRGVlcChzdGF0ZSkpLFxuICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXG4gICAgKTtcbiAgfVxuXG4gIGZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyaWNUYWJsZUNvbXBvbmVudD8ucGFnaW5hdG9yQ29tcG9uZW50Py5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICB9XG5cbiAgbGFzdFBhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5nZW5lcmljVGFibGVDb21wb25lbnQ/LnBhZ2luYXRvckNvbXBvbmVudD8ucGFnaW5hdG9yPy5sYXN0UGFnZSgpO1xuICB9XG5cbiAgcmVzZXRTdGF0ZSgpIHtcbiAgICB0aGlzLmN1c3RvbUZpbHRlcnMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSk7XG4gICAgdGhpcy5maWx0ZXJzLmZvckVhY2goIGNmID0+IGNmLnJlc2V0KCkgKTtcbiAgICB0aGlzLnN0YXRlLnJlc2V0U3RhdGUoKTtcbiAgICB0aGlzLk9uU3RhdGVSZXNldC5uZXh0KG51bGwpXG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgdGhpcy5zdGF0ZS5zZXRUYWJsZVNldHRpbmdzKHRoaXMudGFibGVCdWlsZGVyLnNldHRpbmdzKTtcbiAgICB0aGlzLnN0YXRlLnJ1bk9uY2VXaGVuKHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5NZXRhRGF0YUxvYWRlZCksIHN0YXRlID0+IHtcbiAgICAgIGlmKHRoaXMudGFibGVJZCkge1xuICAgICAgICBjb25zdCBwZXJzaXN0ZWRTdGF0ZSQgPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICAgICAgc2VsZWN0KHNlbGVjdG9ycy5zZWxlY3RMb2NhbFByb2ZpbGVTdGF0ZTxhbnk+KHRoaXMudGFibGVJZCkgKSxcbiAgICAgICAgICB0YXAoIHBlcnNpc3RlZFN0YXRlID0+IHtcbiAgICAgICAgICAgIGlmKCFwZXJzaXN0ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNldEludGlhbGl6YXRpb25TdGF0ZShJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90TnVsbCgpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlRnJvbVBlcnNpc3RlZFN0YXRlKHBlcnNpc3RlZFN0YXRlJCk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0SW50aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjdXN0b21GaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlZGljYXRlPGFueT5bXT4oW10pO1xuICBpbml0aWFsaXplRGF0YSgpIHtcblxuXG4gICAgdmFyIGFsbEZpbHRlcnMgPSB0aGlzLmlucHV0RmlsdGVycyA/IGNvbWJpbmVBcnJheXMoW1xuICAgICAgdGhpcy5jdXN0b21GaWx0ZXJzJCxcbiAgICAgIHRoaXMuaW5wdXRGaWx0ZXJzXG4gICAgXSkgOiB0aGlzLmN1c3RvbUZpbHRlcnMkO1xuXG4gICAgY29uc3QgZmlsdGVycyQgPSB0aGlzLnN0YXRlLmZpbHRlcnMkLnBpcGUobWFwKCBmaWx0ZXJzID0+IE9iamVjdC52YWx1ZXMoZmlsdGVycykgKSlcblxuICAgIGNvbnN0IGRhdGEgPSBuZXcgRGF0YUZpbHRlcihhbGxGaWx0ZXJzKVxuICAgICAgLmFwcGVuZEZpbHRlcnMoZmlsdGVycyQpXG4gICAgICAuZmlsdGVyRGF0YSh0aGlzLnRhYmxlQnVpbGRlci5nZXREYXRhJCgpKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiB0aGlzLnN0YXRlLmdyb3VwQnlLZXlzJC5waXBlKFxuICAgICAgICAgIG1hcChncm91cEJ5ID0+IHRoaXMuZ2V0RGF0YShkYXRhLCBncm91cEJ5KSksXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiB0aGlzLnN0YXRlLmdyb3VwcyQucGlwZShcbiAgICAgICAgICAgIG1hcChncm91cHMgPT4gdGhpcy5zZXREaXNwbGF5KGRhdGEsIGdyb3VwcykpXG4gICAgICAgICAgKSlcbiAgICAgICAgKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVTdGF0ZSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcblxuICAgIGlmKHRoaXMudGFibGVJZCkge1xuICAgICAgdGhpcy5zdGF0ZUtleXMkID0gdGhpcy5zdG9yZS5zZWxlY3Qoc2VsZWN0b3JzLnNlbGVjdExvY2FsUHJvZmlsZUtleXModGhpcy50YWJsZUlkKSk7XG4gICAgICB0aGlzLmN1cnJlbnRTdGF0ZUtleSQgPSB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RvcnMuc2VsZWN0TG9jYWxQcm9maWxlQ3VycmVudEtleSh0aGlzLnRhYmxlSWQpKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRUb0NzdigpOiB2b2lkIHtcbiAgICBjb25zdCBzb3J0ZWQgPSB0aGlzLmRhdGEucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RhdGUuc29ydGVkJCksXG4gICAgICBtYXAoKFtkYXRhLCBzb3J0ZWRdKSA9PiBzb3J0RGF0YShkYXRhLCBzb3J0ZWQpKVxuICAgICk7XG4gICAgdGhpcy5leHBvcnRUb0NzdlNlcnZpY2UuZXhwb3J0VG9Dc3Yoc29ydGVkKTtcbiAgfVxuXG4gIHNhdmVTdGF0ZSgpIHtcbiAgICB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXG4gICAgICBmaXJzdCgpXG4gICAgKS5zdWJzY3JpYmUoIHRhYmxlU3RhdGUgPT4ge1xuICAgICAgdGhpcy5PblNhdmVTdGF0ZS5uZXh0KG51bGwpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZXRMb2NhbFByb2ZpbGUoeyBrZXk6IHRoaXMudGFibGVJZCwgdmFsdWU6dGFibGVTdGF0ZSwgcGVyc2lzdDogdHJ1ZX0gKSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRQcm9maWxlU3RhdGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNldExvY2FsUHJvZmlsZXNTdGF0ZSh7a2V5OnRoaXMudGFibGVJZCwgY3VycmVudDogdmFsfSkpO1xuICB9XG5cbiAgZGVsZXRlUHJvZmlsZVN0YXRlKHN0YXRlS2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGRlbGV0ZUxvY2FsUHJvZmlsZXNTdGF0ZSh7a2V5OnRoaXMudGFibGVJZCwgc3RhdGVLZXl9KSk7XG4gIH1cblxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLkluaXRpYWxpemVDb2x1bW5zKCk7XG5cbiAgICB0aGlzLnN0YXRlLnJ1bk9uY2VXaGVuKHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpLCBzdGF0ZSA9PiB7XG5cbiAgICAgIHZhciBhbGxGaWx0ZXJzID0gWy4uLnRoaXMuZmlsdGVycywgLi4udGhpcy5jdXN0b21GaWx0ZXJzXTtcbiAgICAgIGlmKHRoaXMud3JhcHBlcikge1xuICAgICAgICBhbGxGaWx0ZXJzID0gWy4uLmFsbEZpbHRlcnMsIC4uLnRoaXMud3JhcHBlci5jdXN0b21GaWx0ZXJzLCAuLi50aGlzLndyYXBwZXIuZmlsdGVycywgLi4udGhpcy53cmFwcGVyLnJlZ2lzdGVyYXRpb25zXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1c3RvbUZpbHRlcnM6IChUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZXxUYWJsZUZpbHRlckRpcmVjdGl2ZSApW10gPSBbXTtcblxuICAgICAgYWxsRmlsdGVycy5maWx0ZXIoIGYgPT4gIWYudXNlZCkuZm9yRWFjaCggZiA9PiB7XG4gICAgICAgIGYudXNlZCA9IHRydWU7XG4gICAgICAgIGlmKGYuc2F2YWJsZSkge1xuICAgICAgICAgIHZhciBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2YuZmlsdGVySWRdO1xuICAgICAgICAgIGlmKGlzRmlsdGVySW5mbyhmaWx0ZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXJlY3RpdmU6IFRhYmxlRmlsdGVyRGlyZWN0aXZlID0gZiBhcyBUYWJsZUZpbHRlckRpcmVjdGl2ZTtcbiAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWVsZFR5cGUgPSBmaWx0ZXIuZmllbGRUeXBlO1xuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmZpbHRlclR5cGUgPSBmaWx0ZXIuZmlsdGVyVHlwZTtcbiAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5zZXRGaWx0ZXJWYWx1ZShmaWx0ZXIuZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmtleSA9IGZpbHRlci5rZXk7XG4gICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUudXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGlzQ3VzdG9tRmlsdGVyKGZpbHRlcikpIHtcbiAgICAgICAgICAgIGYuYWN0aXZlID0gZmlsdGVyLmFjdGl2ZSA/PyBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGF0ZS5hZGRGaWx0ZXIoZi5maWx0ZXIkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXN0b21GaWx0ZXJzLnB1c2goZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaWx0ZXJzJCA9ICBmcm9tKCBjdXN0b21GaWx0ZXJzLm1hcCggY2YgPT4gY2YuZmlsdGVyJCAgKSkucGlwZShcbiAgICAgICAgbWVyZ2VBbGwoKSxcbiAgICAgICAgc2NhbiggKGEsYik9PiB7XG4gICAgICAgICAgICBpZihiLmFjdGl2ZSkge1xuICAgICAgICAgICAgICBhW2IuZmlsdGVySWRdID0gaXNDdXN0b21GaWx0ZXIoYikgPyBiLnByZWRpY2F0ZSA6IGNyZWF0ZUZpbHRlckZ1bmMoYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgYVtiLmZpbHRlcklkXSA7XG4gICAgICAgICAgICB9XG4gICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSwge30gYXMgRGljdGlvbmFyeTxQcmVkaWNhdGU8YW55Pj4pLFxuICAgICAgICBtYXAoIGYgPT4gT2JqZWN0LnZhbHVlcyhmKSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0YXRlLm9uKGZpbHRlcnMkLCAoZikgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbUZpbHRlcnMkLm5leHQoZik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoe2luaXRpYWxpemF0aW9uU3RhdGU6IEluaXRpYWxpemF0aW9uU3RhdGUuUmVhZHl9KTtcbiAgICB9KTtcblxuICB9XG5cbiAgSW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgY3VzdG9tQ2VsbE1hcCA9IG5ldyBNYXAodGhpcy5jdXN0b21DZWxscy5tYXAoY2MgPT4gW2NjLmN1c3RvbUNlbGwsY2NdKSk7XG4gICAgdGhpcy5zdGF0ZS5zZXRNZXRhRGF0YSh0aGlzLnRhYmxlQnVpbGRlci5tZXRhRGF0YSQhLnBpcGUoXG4gICAgICBtYXAoKG1kcykgPT4ge1xuICAgICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwTWV0YURhdGFzKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5tZHMsXG4gICAgICAgICAgLi4udGhpcy5jdXN0b21DZWxscy5tYXAoIGNjID0+IGNjLmdldE1ldGFEYXRhKG1kcy5maW5kKCBpdGVtID0+IGl0ZW0ua2V5ID09PSBjYy5jdXN0b21DZWxsICkpIClcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApKTtcbiAgICB0aGlzLnN0YXRlLnNldExpbmtNYXBzKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcbiAgICAgIG1hcCgobWRzKSA9PiB7XG4gICAgICAgIHJldHVybiBtZHMucmVkdWNlKChhY2MsIG1kKSA9PiB7XG4gICAgICAgICAgaWYobWQuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuTGluayl7IGFjY1ttZC5rZXldPSBjcmVhdGVMaW5rQ3JlYXRvcihtZCl9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSx7fSlcbiAgICAgIH0pXG4gICAgKSlcblxuICAgIHRoaXMubXlDb2x1bW5zJCA9IHRoaXMuc3RhdGUubWV0YURhdGFBcnJheSQucGlwZShcbiAgICAgIG1hcEFycmF5KCBtZXRhRGF0YSA9PiAoe21ldGFEYXRhLCBjdXN0b21DZWxsOiBjdXN0b21DZWxsTWFwLmdldChtZXRhRGF0YS5rZXkpIX0pKVxuICAgICk7XG4gIH1cbiAgbWFwTWV0YURhdGFzID0gKG1ldGEgOiBNZXRhRGF0YTxUPikgPT4ge1xuICAgIGlmKG1ldGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkpe1xuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IHsuLi5tZXRhLmFkZGl0aW9uYWx9IGFzIEFycmF5QWRkaXRpb25hbDtcbiAgICAgIGFkZGl0aW9uYWwuYXJyYXlTdHlsZSA9IGFkZGl0aW9uYWw/LmFycmF5U3R5bGUgPz8gQXJyYXlEZWZhdWx0cy5hcnJheVN0eWxlO1xuICAgICAgYWRkaXRpb25hbC5saW1pdCA9IGFkZGl0aW9uYWwubGltaXQgPz8gdGhpcy5jb25maWcuYXJyYXlJbmZvPy5saW1pdCA/PyBBcnJheURlZmF1bHRzLmxpbWl0O1xuICAgICAgcmV0dXJuIHsuLi5tZXRhLGFkZGl0aW9uYWx9XG4gICAgfVxuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgY29sbGFwc2VIZWFkZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUhlYWRlcikpO1xuXG4gIGdldERhdGEoZGF0YTogYW55W10sIGdyb3VwQnlLZXlzOiBzdHJpbmdbXSk6IGFueVtdIHtcbiAgICBpZiAoIWdyb3VwQnlLZXlzLmxlbmd0aCkge1xuICAgICAgdGhpcy5kaXNhYmxlU29ydCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVNvcnQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLnRiR3JvdXBCeShkYXRhLCBncm91cEJ5S2V5cyk7XG4gIH1cblxuICB0Ykdyb3VwQnkgPSAoZGF0YTogYW55W10sIGdyb3VwQnlLZXlzOiBzdHJpbmdbXSwgcGFyZW50R3JvdXBOYW1lPzogYW55KTogYW55W10gPT4ge1xuICAgIGxldCByZXMgPSB7fTtcbiAgICByZXMgPSBncm91cEJ5KGRhdGEsIGdyb3VwQnlLZXlzWzBdKTtcbiAgICBjb25zdCByZW1haW5pbmdHcm91cEJ5S2V5cyA9IGdyb3VwQnlLZXlzLnNsaWNlKDEpO1xuICAgIGlmIChyZW1haW5pbmdHcm91cEJ5S2V5cy5sZW5ndGgpIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlcykuZm9yRWFjaChrZXkgPT4gcmVzW2tleV0gPSB0aGlzLnRiR3JvdXBCeShyZXNba2V5XSwgcmVtYWluaW5nR3JvdXBCeUtleXMsIGtleSkpXG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuRGVlcChPYmplY3Qua2V5cyhyZXMpLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgY29uc3QgdW5pcU5hbWUgPSBwYXJlbnRHcm91cE5hbWUgPyBgJHtwYXJlbnRHcm91cE5hbWV9LSR7Z3JvdXBOYW1lfWAgOiBgJHtncm91cE5hbWV9YDtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpc0dyb3VwSGVhZGVyOiB0cnVlLFxuICAgICAgICAgIGdyb3VwSGVhZGVyTmFtZTogYCR7Z3JvdXBOYW1lfSAoJHtyZXNbZ3JvdXBOYW1lXT8uZmlsdGVyKHJvdyA9PiAhcm93LmlzR3JvdXBIZWFkZXIpPy5sZW5ndGh9KWAsXG4gICAgICAgICAgZGF0YTogcmVzW2dyb3VwTmFtZV0sXG4gICAgICAgICAgZ3JvdXBOYW1lOiB1bmlxTmFtZSxcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIH0sXG4gICAgICAgIChyZXNbZ3JvdXBOYW1lXSBhcyBhbnlbXSk/Lm1hcChkID0+ICh7IC4uLmQsIHBhcmVudEdyb3VwTmFtZTogZC5wYXJlbnRHcm91cE5hbWUgfHwgdW5pcU5hbWUgfSkpXG4gICAgICBdO1xuICAgIH0pKS5tYXAodGhpcy5hZGRJbmRlbnRhdGlvbik7XG4gIH1cblxuICBhZGRJbmRlbnRhdGlvbiA9IChkOiBhbnkpID0+IHtcbiAgICBpZiAoZC5pc0dyb3VwSGVhZGVyKSB7XG4gICAgICBpZiAoZC5wYWRkaW5nKSB7XG4gICAgICAgIGQucGFkZGluZyArPSAyMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQucGFkZGluZyA9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkO1xuICB9XG5cbiAgc2V0RGlzcGxheSA9IChkYXRhOiBhbnlbXSwgZ3JvdXBzOiBHcm91cFtdKTogYW55W10gPT4gZGF0YVxuICAgIC5tYXAoZCA9PiAoe1xuICAgICAgLi4uZCxcbiAgICAgIHNob3VsZERpc3BsYXk6ICFkLnBhcmVudEdyb3VwTmFtZSB8fCB0aGlzLnNob3VsZERpc3BsYXkoZ3JvdXBzLmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PSBkLnBhcmVudEdyb3VwTmFtZSksIGdyb3VwcyksXG4gICAgICBpc0V4cGFuZGVkOiBncm91cHMuZmluZChnID0+IGcuZ3JvdXBOYW1lID09IGQuZ3JvdXBOYW1lKT8uaXNFeHBhbmRlZFxuICAgIH0pKVxuICAgIC5maWx0ZXIoZCA9PiBkLnNob3VsZERpc3BsYXkpO1xuXG5cbiAgc2hvdWxkRGlzcGxheSA9IChjdXJyZW50R3JvdXA/OiBHcm91cCwgZ3JvdXBzPzogR3JvdXBbXSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghY3VycmVudEdyb3VwPy5pc0V4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50R3JvdXAgPSBncm91cHM/LmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PSBjdXJyZW50R3JvdXAucGFyZW50R3JvdXBOYW1lKTtcblxuICAgIGlmIChwYXJlbnRHcm91cCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkRGlzcGxheShwYXJlbnRHcm91cCwgZ3JvdXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JlZm9yZV1cIiA+XG48L25nLWNvbnRlbnQ+XG5cbjxuZy1jb250YWluZXIgbXVsdGlTb3J0IFttYXRTb3J0RGlzYWJsZWRdPVwiZGlzYWJsZVNvcnRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdyeExldD1cInN0YXRlLnRhYmxlU2V0dGluZ3MkIGFzIHRhYmxlU2V0dGluZ3NcIj5cblxuXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRiLWhlYWRlci10aXRsZVwiXG4gICAgICAgICAgKm5nSWY9XCIoIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYykpIHx8IHRhYmxlU2V0dGluZ3Muc2hvd1RpdGxlV2hlbkhlYWRlckNvbGxhcHNlZFwiPlxuXG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICAgICAgPGdyb3VwLWJ5LWxpc3Q+PC9ncm91cC1ieS1saXN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmx4LXJvdy1lbmRcIj5cbiAgICAgICAgPGxpYi1maWx0ZXItbGlzdD48L2xpYi1maWx0ZXItbGlzdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVIZWFkZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYyk7IGVsc2UgYWxsTWVudVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPSdwcmltYXJ5JyBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZsYXQtbWVudSc6KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKX1cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdtb3JlX2hvcml6JyA6ICdtb3JlX3ZlcnQnfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2FsbE1lbnU+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj0ncHJpbWFyeScgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmbGF0LW1lbnUnOihjb2xsYXBzZUhlYWRlciQgfCBhc3luYyl9XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57eyhjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnbW9yZV9ob3JpeicgOiAnbW9yZV92ZXJ0J319PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT0nbWF0TWVudSc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudUV4dHJhXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cIihjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnZXhwYW5kJyA6ICdjb2xsYXBzZSdcIiBjbGFzcz1cImNvbGxhcHNlLWljb24gaGVhZGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzdGF0ZS50b2dnbGVDb2xsYXBzZUhlYWRlcigpXCI+XG4gICAgICAgICAgICB7eyhjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJ319XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj5cbiAgICAgIDx0Yi1nZW5lcmljLXRhYmxlIFtyb3dzXT0nY3VzdG9tUm93cycgW2RhdGEkXT1cImRhdGFcIiBbSW5kZXhDb2x1bW5dPSdJbmRleENvbHVtbidcbiAgICAgICAgW1NlbGVjdGlvbkNvbHVtbl09J1NlbGVjdGlvbkNvbHVtbicgKHNlbGVjdGlvbiQpPSdzZWxlY3Rpb24kLmVtaXQoJGV2ZW50KScgW3RyYWNrQnldPSd0cmFja0J5J1xuICAgICAgICBbaXNTdGlja3ldPSdpc1N0aWNreScgW2NvbHVtbkluZm9zXT0nbXlDb2x1bW5zJCcgW2Rpc2FibGVTb3J0XT1cImRpc2FibGVTb3J0XCIgW2dyb3VwSGVhZGVyVGVtcGxhdGVdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgIFt2c1ZpZXdwb3J0SGVpZ2h0XT1cInZzVmlld3BvcnRIZWlnaHRcIj5cbiAgICAgIDwvdGItZ2VuZXJpYy10YWJsZT5cbiAgICA8L2Rpdj5cblxuXG5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlck1lbnU+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICA8dGItZmlsdGVyLWRpc3BsYXllciAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVGaWx0ZXJcIj5cbiAgICAgICAgPC90Yi1maWx0ZXItZGlzcGxheWVyPlxuICAgICAgICA8dGItY29sLWRpc3BsYXllciAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVDb2x1bW5TZXR0aW5nc1wiPjwvdGItY29sLWRpc3BsYXllcj5cbiAgICAgICAgPHRiLXNvcnQtbWVudSAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVTb3J0XCI+PC90Yi1zb3J0LW1lbnU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudUV4dHJhPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJyZXNldFN0YXRlKClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuPlJlc2V0IHRhYmxlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cG9ydFRvQ3N2KClcIiAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVFeHBvcnRcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj5FeHBvcnQgVGFibGU8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RhdGVLZXkkIHwgYXN5bmMgYXMgY3VycmVudEtleVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJ0YWJsZUlkXCIgKGNsaWNrKT1cInNhdmVTdGF0ZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnNhdmU8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPlNhdmUgdG8ge3tjdXJyZW50S2V5fX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPSd0YWJsZUlkJyBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJzYXZlZE5hbWVzXCI+XG4gICAgICAgICAgPHNwYW4+Q2hvb3NlIFByb2ZpbGU8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxtYXQtbWVudSAjc2F2ZWROYW1lcz0nbWF0TWVudScgcGFuZWxDbGFzcz0nd2lkZS1tZW51Jz5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsaWNrRW1pdHRlciAgI2FkZD0nY2xpY2tFbWl0dGVyJz5cbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj5OZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj0nbGV0IGtleSBvZiBzdGF0ZUtleXMkIHwgYXN5bmMnPlxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPSdzZXRQcm9maWxlU3RhdGUoa2V5KSc+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPSdkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Jz5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9J2Rpc3BsYXk6ZmxleDsnPnt7a2V5fX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSdkaXNwbGF5OmZsZXg7Jz5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiAxMjBweDtcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPSd3YXJuJyAoY2xpY2spPSdkZWxldGVQcm9maWxlU3RhdGUoa2V5KScgc3RvcC1wcm9wYWdhdGlvbj5kZWxldGVfZm9yZXZlcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LW1lbnU+XG4gICAgICA8bmctY29udGFpbmVyICpvcERpYWxvZz0nYWRkJz5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxpbnB1dCBzdHlsZT0nd2lkdGg6OTAlJyBtYXRJbnB1dCAjYWRkZWRLZXkgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9J3NldFByb2ZpbGVTdGF0ZShhZGRlZEtleS52YWx1ZSk7IGFkZC5uZXh0KGZhbHNlKTsnXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFhZGRlZEtleS52YWx1ZVwiPkFkZDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uZy1jb250YWluZXI+XG4iXX0=
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFFTixRQUFRLEVBRVIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFtQixTQUFTLEVBQVksTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFB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O2dCQUNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxJQUFJO3NCQUFiLE1BQU07Z0JBS3FCLFVBQVU7c0JBQXJDLGVBQWU7dUJBQUMsU0FBUztnQkFFWSxXQUFXO3NCQUFoRCxlQUFlO3VCQUFDLG1CQUFtQjtnQkFDMUIsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEluamVjdCxcbiAgUHJlZGljYXRlLFxuICBPcHRpb25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZyb20sIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXJyYXlBZGRpdGlvbmFsLCBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcbmltcG9ydCB7IGZpcnN0LCBsYXN0LCBtYXAsIHN3aXRjaE1hcCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSwgbWVyZ2VBbGwsIHNjYW4gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLWJ1aWxkZXInO1xuaW1wb3J0IHsgTWF0Um93RGVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgQ3VzdG9tQ2VsbERpcmVjdGl2ZSwgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIFRhYmxlRmlsdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyAgc3RhdGVJcywgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuaW1wb3J0IHsgRGF0YUZpbHRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZGF0YS1maWx0ZXInO1xuaW1wb3J0IHsgY29tYmluZUFycmF5cywgbWFwQXJyYXksIG5vdE51bGwgfSBmcm9tICcuLi8uLi8uLi9yeGpzL3J4anMtb3BlcmF0b3JzJztcbmltcG9ydCB7IEV4cG9ydFRvQ3N2U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC10by1jc3Yuc2VydmljZSc7XG5pbXBvcnQgeyBBcnJheURlZmF1bHRzIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9EZWZhdWx0U2V0dGluZ3MnO1xuaW1wb3J0IHsgVGFibGVCdWlsZGVyQ29uZmlnLCBUYWJsZUJ1aWxkZXJDb25maWdUb2tlbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVCdWlsZGVyQ29uZmlnJztcbmltcG9ydCAqIGFzIHNlbGVjdG9ycyBmcm9tICcuLi8uLi9uZ3J4L3NlbGVjdG9ycyc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgZGVsZXRlTG9jYWxQcm9maWxlc1N0YXRlLCBzZXRMb2NhbFByb2ZpbGUsIHNldExvY2FsUHJvZmlsZXNTdGF0ZSB9IGZyb20gJy4uLy4uL25ncngvYWN0aW9ucyc7XG5pbXBvcnQgeyBHcm91cCwgSW5pdGlhbGl6YXRpb25TdGF0ZSwgUGVyc2lzdGVkVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVTdGF0ZSc7XG5pbXBvcnQgeyBzb3J0RGF0YSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9zb3J0LWRhdGEtZnVuY3Rpb24nO1xuaW1wb3J0IHsgV3JhcHBlckZpbHRlclN0b3JlIH0gZnJvbSAnLi4vdGFibGUtY29udGFpbmVyLWZpbHRlci90YWJsZS13cmFwcGVyLWZpbHRlci1zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdyb3VwQnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQ29sdW1uSW5mbyc7XG5pbXBvcnQgeyBkZWZhdWx0U2hhcmVSZXBsYXkgfSBmcm9tICcuLi8uLi8uLi9yeGpzJztcbmltcG9ydCB7IGZsYXR0ZW5EZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNyZWF0ZUZpbHRlckZ1bmMsIGlzQ3VzdG9tRmlsdGVyLCBpc0ZpbHRlckluZm8gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2ZpbHRlci1pbmZvJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xuaW1wb3J0IHsgVGFibGVXcmFwcGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90YWJsZS13cmFwcGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBjcmVhdGVMaW5rQ3JlYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpbmstY3JlYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEdlbmVyaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Yi10YWJsZS1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29udGFpbmVyLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1jb250YWluZXIuY3NzJywnLi4vLi4vc3R5bGVzL2NvbGxhcHNlci5zdHlsZXMuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbVGFibGVTdG9yZSxFeHBvcnRUb0NzdlNlcnZpY2UsV3JhcHBlckZpbHRlclN0b3JlXVxufSkgZXhwb3J0IGNsYXNzIFRhYmxlQ29udGFpbmVyQ29tcG9uZW50PFQgPSBhbnk+IHtcblxuICBAVmlld0NoaWxkKEdlbmVyaWNUYWJsZUNvbXBvbmVudCkgcHJpdmF0ZSBnZW5lcmljVGFibGVDb21wb25lbnQhOiBHZW5lcmljVGFibGVDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgY3VzdG9tRmlsdGVycyE6IFF1ZXJ5TGlzdDxUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZT47XG4gIEBDb250ZW50Q2hpbGRyZW4oVGFibGVGaWx0ZXJEaXJlY3RpdmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGZpbHRlcnMhOiBRdWVyeUxpc3Q8VGFibGVGaWx0ZXJEaXJlY3RpdmU+O1xuXG4gIEBJbnB1dCgpIHRhYmxlSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRhYmxlQnVpbGRlciE6IFRhYmxlQnVpbGRlcjtcbiAgQElucHV0KCkgSW5kZXhDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgU2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRyYWNrQnkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzU3RpY2t5ID0gdHJ1ZTtcbiAgQElucHV0KCkgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnN0YXRlLnNldFBhZ2VTaXplKHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBpbnB1dEZpbHRlcnM/OiBPYnNlcnZhYmxlPEFycmF5PFByZWRpY2F0ZTxUPj4+O1xuICBASW5wdXQoKSBncm91cEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbiQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGRhdGFTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxUW10+PigxKTtcbiAgQE91dHB1dCgpIGRhdGEgPSB0aGlzLmRhdGFTdWJqZWN0LnBpcGUoXG4gICAgc3dpdGNoTWFwKCBkID0+IGQpLFxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxuICApO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0Um93RGVmKSBjdXN0b21Sb3dzITogUXVlcnlMaXN0PE1hdFJvd0RlZjxhbnk+PjtcblxuICBAQ29udGVudENoaWxkcmVuKEN1c3RvbUNlbGxEaXJlY3RpdmUpIGN1c3RvbUNlbGxzITogUXVlcnlMaXN0PEN1c3RvbUNlbGxEaXJlY3RpdmU+O1xuICBAT3V0cHV0KCkgT25TdGF0ZVJlc2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgT25TYXZlU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzdGF0ZSQgOiBPYnNlcnZhYmxlPFBlcnNpc3RlZFRhYmxlU3RhdGU+O1xuXG4gIG15Q29sdW1ucyQhOiBPYnNlcnZhYmxlPENvbHVtbkluZm9bXT47XG5cbiAgc3RhdGVLZXlzJD86IE9ic2VydmFibGU8c3RyaW5nW10gfCBudWxsPjtcbiAgY3VycmVudFN0YXRlS2V5JD86IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBkaXNhYmxlU29ydCE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlOiBUYWJsZVN0b3JlLFxuICAgIHB1YmxpYyBleHBvcnRUb0NzdlNlcnZpY2U6IEV4cG9ydFRvQ3N2U2VydmljZTxUPixcbiAgICBASW5qZWN0KFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuKSBwcml2YXRlIGNvbmZpZzogVGFibGVCdWlsZGVyQ29uZmlnLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB3cmFwcGVyOiBUYWJsZVdyYXBwZXJEaXJlY3RpdmUsXG4gICkge1xuICAgICB0aGlzLnN0YXRlLm9uKCB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUobGFzdCgpKSwgZmluYWxTdGF0ZSA9PiB7XG4gICAgICBpZih0aGlzLnRhYmxlSWQpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZXRMb2NhbFByb2ZpbGUoe2tleTp0aGlzLnRhYmxlSWQsdmFsdWU6IGZpbmFsU3RhdGV9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXG4gICAgICBtYXAoc3RhdGUgPT4gY2xvbmVEZWVwKHN0YXRlKSksXG4gICAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcbiAgICApO1xuICB9XG5cbiAgZmlyc3RQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuZ2VuZXJpY1RhYmxlQ29tcG9uZW50Py5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XG4gIH1cblxuICBsYXN0UGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyaWNUYWJsZUNvbXBvbmVudD8ucGFnaW5hdG9yQ29tcG9uZW50Py5wYWdpbmF0b3I/Lmxhc3RQYWdlKCk7XG4gIH1cblxuICByZXNldFN0YXRlKCkge1xuICAgIHRoaXMuY3VzdG9tRmlsdGVycy5mb3JFYWNoKCBjZiA9PiBjZi5yZXNldCgpKTtcbiAgICB0aGlzLmZpbHRlcnMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSApO1xuICAgIHRoaXMuc3RhdGUucmVzZXRTdGF0ZSgpO1xuICAgIHRoaXMuT25TdGF0ZVJlc2V0Lm5leHQobnVsbClcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICB0aGlzLnN0YXRlLnNldFRhYmxlU2V0dGluZ3ModGhpcy50YWJsZUJ1aWxkZXIuc2V0dGluZ3MpO1xuICAgIHRoaXMuc3RhdGUucnVuT25jZVdoZW4oc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkKSwgc3RhdGUgPT4ge1xuICAgICAgaWYodGhpcy50YWJsZUlkKSB7XG4gICAgICAgIGNvbnN0IHBlcnNpc3RlZFN0YXRlJCA9IHRoaXMuc3RvcmUucGlwZShcbiAgICAgICAgICBzZWxlY3Qoc2VsZWN0b3JzLnNlbGVjdExvY2FsUHJvZmlsZVN0YXRlPGFueT4odGhpcy50YWJsZUlkKSApLFxuICAgICAgICAgIHRhcCggcGVyc2lzdGVkU3RhdGUgPT4ge1xuICAgICAgICAgICAgaWYoIXBlcnNpc3RlZFN0YXRlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuc2V0SW50aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3ROdWxsKCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGVGcm9tUGVyc2lzdGVkU3RhdGUocGVyc2lzdGVkU3RhdGUkKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXRJbnRpYWxpemF0aW9uU3RhdGUoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGN1c3RvbUZpbHRlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcmVkaWNhdGU8YW55PltdPihbXSk7XG4gIGluaXRpYWxpemVEYXRhKCkge1xuXG5cbiAgICB2YXIgYWxsRmlsdGVycyA9IHRoaXMuaW5wdXRGaWx0ZXJzID8gY29tYmluZUFycmF5cyhbXG4gICAgICB0aGlzLmN1c3RvbUZpbHRlcnMkLFxuICAgICAgdGhpcy5pbnB1dEZpbHRlcnNcbiAgICBdKSA6IHRoaXMuY3VzdG9tRmlsdGVycyQ7XG5cbiAgICBjb25zdCBmaWx0ZXJzJCA9IHRoaXMuc3RhdGUuZmlsdGVycyQucGlwZShtYXAoIGZpbHRlcnMgPT4gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzKSApKVxuXG4gICAgY29uc3QgZGF0YSA9IG5ldyBEYXRhRmlsdGVyKGFsbEZpbHRlcnMpXG4gICAgICAuYXBwZW5kRmlsdGVycyhmaWx0ZXJzJClcbiAgICAgIC5maWx0ZXJEYXRhKHRoaXMudGFibGVCdWlsZGVyLmdldERhdGEkKCkpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChkYXRhID0+IHRoaXMuc3RhdGUuZ3JvdXBCeUtleXMkLnBpcGUoXG4gICAgICAgICAgbWFwKGdyb3VwQnkgPT4gdGhpcy5nZXREYXRhKGRhdGEsIGdyb3VwQnkpKSxcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChkYXRhID0+IHRoaXMuc3RhdGUuZ3JvdXBzJC5waXBlKFxuICAgICAgICAgICAgbWFwKGdyb3VwcyA9PiB0aGlzLnNldERpc3BsYXkoZGF0YSwgZ3JvdXBzKSlcbiAgICAgICAgICApKVxuICAgICAgICApKVxuICAgICAgKTtcblxuICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dChkYXRhKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVN0YXRlKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0YSgpO1xuXG4gICAgaWYodGhpcy50YWJsZUlkKSB7XG4gICAgICB0aGlzLnN0YXRlS2V5cyQgPSB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RvcnMuc2VsZWN0TG9jYWxQcm9maWxlS2V5cyh0aGlzLnRhYmxlSWQpKTtcbiAgICAgIHRoaXMuY3VycmVudFN0YXRlS2V5JCA9IHRoaXMuc3RvcmUuc2VsZWN0KHNlbGVjdG9ycy5zZWxlY3RMb2NhbFByb2ZpbGVDdXJyZW50S2V5KHRoaXMudGFibGVJZCkpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydFRvQ3N2KCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuZGF0YS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdGF0ZS5zb3J0ZWQkKSxcbiAgICAgIG1hcCgoW2RhdGEsIHNvcnRlZF0pID0+IHNvcnREYXRhKGRhdGEsIHNvcnRlZCkpXG4gICAgKTtcbiAgICB0aGlzLmV4cG9ydFRvQ3N2U2VydmljZS5leHBvcnRUb0Nzdihzb3J0ZWQpO1xuICB9XG5cbiAgc2F2ZVN0YXRlKCkge1xuICAgIHRoaXMuc3RhdGUuZ2V0U2F2YWJsZVN0YXRlKCkucGlwZShcbiAgICAgIGZpcnN0KClcbiAgICApLnN1YnNjcmliZSggdGFibGVTdGF0ZSA9PiB7XG4gICAgICB0aGlzLk9uU2F2ZVN0YXRlLm5leHQobnVsbCk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNldExvY2FsUHJvZmlsZSh7IGtleTogdGhpcy50YWJsZUlkLCB2YWx1ZTp0YWJsZVN0YXRlLCBwZXJzaXN0OiB0cnVlfSApKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFByb2ZpbGVTdGF0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0TG9jYWxQcm9maWxlc1N0YXRlKHtrZXk6dGhpcy50YWJsZUlkLCBjdXJyZW50OiB2YWx9KSk7XG4gIH1cblxuICBkZWxldGVQcm9maWxlU3RhdGUoc3RhdGVLZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goZGVsZXRlTG9jYWxQcm9maWxlc1N0YXRlKHtrZXk6dGhpcy50YWJsZUlkLCBzdGF0ZUtleX0pKTtcbiAgfVxuXG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuSW5pdGlhbGl6ZUNvbHVtbnMoKTtcblxuICAgIHRoaXMuc3RhdGUucnVuT25jZVdoZW4oc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSksIHN0YXRlID0+IHtcblxuICAgICAgdmFyIGFsbEZpbHRlcnMgPSBbLi4udGhpcy5maWx0ZXJzLCAuLi50aGlzLmN1c3RvbUZpbHRlcnNdO1xuICAgICAgaWYodGhpcy53cmFwcGVyKSB7XG4gICAgICAgIGFsbEZpbHRlcnMgPSBbLi4uYWxsRmlsdGVycywgLi4udGhpcy53cmFwcGVyLmN1c3RvbUZpbHRlcnMsIC4uLnRoaXMud3JhcHBlci5maWx0ZXJzLCAuLi50aGlzLndyYXBwZXIucmVnaXN0ZXJhdGlvbnNdO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VzdG9tRmlsdGVyczogKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlfFRhYmxlRmlsdGVyRGlyZWN0aXZlIClbXSA9IFtdO1xuXG4gICAgICBhbGxGaWx0ZXJzLmZpbHRlciggZiA9PiAhZi51c2VkKS5mb3JFYWNoKCBmID0+IHtcbiAgICAgICAgZi51c2VkID0gdHJ1ZTtcbiAgICAgICAgaWYoZi5zYXZhYmxlKSB7XG4gICAgICAgICAgdmFyIGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZi5maWx0ZXJJZF07XG4gICAgICAgICAgaWYoaXNGaWx0ZXJJbmZvKGZpbHRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckRpcmVjdGl2ZTogVGFibGVGaWx0ZXJEaXJlY3RpdmUgPSBmIGFzIFRhYmxlRmlsdGVyRGlyZWN0aXZlO1xuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmZpZWxkVHlwZSA9IGZpbHRlci5maWVsZFR5cGU7XG4gICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuZmlsdGVyVHlwZSA9IGZpbHRlci5maWx0ZXJUeXBlO1xuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLnNldEZpbHRlclZhbHVlKGZpbHRlci5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUua2V5ID0gZmlsdGVyLmtleTtcbiAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS51cGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoaXNDdXN0b21GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgICAgICAgZi5hY3RpdmUgPSBmaWx0ZXIuYWN0aXZlID8/IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnN0YXRlLmFkZEZpbHRlcihmLmZpbHRlciQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1c3RvbUZpbHRlcnMucHVzaChmKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpbHRlcnMkID0gIGZyb20oIGN1c3RvbUZpbHRlcnMubWFwKCBjZiA9PiBjZi5maWx0ZXIkICApKS5waXBlKFxuICAgICAgICBtZXJnZUFsbCgpLFxuICAgICAgICBzY2FuKCAoYSxiKT0+IHtcbiAgICAgICAgICAgIGlmKGIuYWN0aXZlKSB7XG4gICAgICAgICAgICAgIGFbYi5maWx0ZXJJZF0gPSBpc0N1c3RvbUZpbHRlcihiKSA/IGIucHJlZGljYXRlIDogY3JlYXRlRmlsdGVyRnVuYyhiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBhW2IuZmlsdGVySWRdIDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9LCB7fSBhcyBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxhbnk+PiksXG4gICAgICAgIG1hcCggZiA9PiBPYmplY3QudmFsdWVzKGYpKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc3RhdGUub24oZmlsdGVycyQsIChmKSA9PiB7XG4gICAgICAgIHRoaXMuY3VzdG9tRmlsdGVycyQubmV4dChmKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZSh7aW5pdGlhbGl6YXRpb25TdGF0ZTogSW5pdGlhbGl6YXRpb25TdGF0ZS5SZWFkeX0pO1xuICAgIH0pO1xuXG4gIH1cblxuICBJbml0aWFsaXplQ29sdW1ucygpIHtcbiAgICBjb25zdCBjdXN0b21DZWxsTWFwID0gbmV3IE1hcCh0aGlzLmN1c3RvbUNlbGxzLm1hcChjYyA9PiBbY2MuY3VzdG9tQ2VsbCxjY10pKTtcbiAgICB0aGlzLnN0YXRlLnNldE1ldGFEYXRhKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcbiAgICAgIG1hcCgobWRzKSA9PiB7XG4gICAgICAgIG1kcyA9IG1kcy5tYXAodGhpcy5tYXBNZXRhRGF0YXMpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLm1kcyxcbiAgICAgICAgICAuLi50aGlzLmN1c3RvbUNlbGxzLm1hcCggY2MgPT4gY2MuZ2V0TWV0YURhdGEobWRzLmZpbmQoIGl0ZW0gPT4gaXRlbS5rZXkgPT09IGNjLmN1c3RvbUNlbGwgKSkgKVxuICAgICAgICBdXG4gICAgICB9KVxuICAgICkpO1xuICAgIHRoaXMuc3RhdGUuc2V0TGlua01hcHModGhpcy50YWJsZUJ1aWxkZXIubWV0YURhdGEkIS5waXBlKFxuICAgICAgbWFwKChtZHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG1kcy5yZWR1Y2UoKGFjYywgbWQpID0+IHtcbiAgICAgICAgICBpZihtZC5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5MaW5rKXsgYWNjW21kLmtleV09IGNyZWF0ZUxpbmtDcmVhdG9yKG1kKX1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LHt9KVxuICAgICAgfSlcbiAgICApKVxuXG4gICAgdGhpcy5teUNvbHVtbnMkID0gdGhpcy5zdGF0ZS5tZXRhRGF0YUFycmF5JC5waXBlKFxuICAgICAgbWFwQXJyYXkoIG1ldGFEYXRhID0+ICh7bWV0YURhdGEsIGN1c3RvbUNlbGw6IGN1c3RvbUNlbGxNYXAuZ2V0KG1ldGFEYXRhLmtleSkhfSkpXG4gICAgKTtcbiAgfVxuICBtYXBNZXRhRGF0YXMgPSAobWV0YSA6IE1ldGFEYXRhPFQ+KSA9PiB7XG4gICAgaWYobWV0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5BcnJheSl7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsID0gey4uLm1ldGEuYWRkaXRpb25hbH0gYXMgQXJyYXlBZGRpdGlvbmFsO1xuICAgICAgYWRkaXRpb25hbC5hcnJheVN0eWxlID0gYWRkaXRpb25hbD8uYXJyYXlTdHlsZSA/PyBBcnJheURlZmF1bHRzLmFycmF5U3R5bGU7XG4gICAgICBhZGRpdGlvbmFsLmxpbWl0ID0gYWRkaXRpb25hbC5saW1pdCA/PyB0aGlzLmNvbmZpZy5hcnJheUluZm8/LmxpbWl0ID8/IEFycmF5RGVmYXVsdHMubGltaXQ7XG4gICAgICByZXR1cm4gey4uLm1ldGEsYWRkaXRpb25hbH1cbiAgICB9XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBjb2xsYXBzZUhlYWRlciQgPSB0aGlzLnN0YXRlLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5wZXJzaXN0ZWRUYWJsZVNldHRpbmdzLmNvbGxhcHNlSGVhZGVyKSk7XG5cbiAgZ2V0RGF0YShkYXRhOiBhbnlbXSwgZ3JvdXBCeUtleXM6IHN0cmluZ1tdKTogYW55W10ge1xuICAgIGlmICghZ3JvdXBCeUtleXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRpc2FibGVTb3J0ID0gZmFsc2U7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxlU29ydCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMudGJHcm91cEJ5KGRhdGEsIGdyb3VwQnlLZXlzKTtcbiAgfVxuXG4gIHRiR3JvdXBCeSA9IChkYXRhOiBhbnlbXSwgZ3JvdXBCeUtleXM6IHN0cmluZ1tdLCBwYXJlbnRHcm91cE5hbWU/OiBhbnkpOiBhbnlbXSA9PiB7XG4gICAgbGV0IHJlcyA9IHt9O1xuICAgIHJlcyA9IGdyb3VwQnkoZGF0YSwgZ3JvdXBCeUtleXNbMF0pO1xuICAgIGNvbnN0IHJlbWFpbmluZ0dyb3VwQnlLZXlzID0gZ3JvdXBCeUtleXMuc2xpY2UoMSk7XG4gICAgaWYgKHJlbWFpbmluZ0dyb3VwQnlLZXlzLmxlbmd0aCkge1xuICAgICAgT2JqZWN0LmtleXMocmVzKS5mb3JFYWNoKGtleSA9PiByZXNba2V5XSA9IHRoaXMudGJHcm91cEJ5KHJlc1trZXldLCByZW1haW5pbmdHcm91cEJ5S2V5cywga2V5KSlcbiAgICB9XG4gICAgcmV0dXJuIGZsYXR0ZW5EZWVwKE9iamVjdC5rZXlzKHJlcykubWFwKGdyb3VwTmFtZSA9PiB7XG4gICAgICBjb25zdCB1bmlxTmFtZSA9IHBhcmVudEdyb3VwTmFtZSA/IGAke3BhcmVudEdyb3VwTmFtZX0tJHtncm91cE5hbWV9YCA6IGAke2dyb3VwTmFtZX1gO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGlzR3JvdXBIZWFkZXI6IHRydWUsXG4gICAgICAgICAgZ3JvdXBIZWFkZXJOYW1lOiBgJHtncm91cE5hbWV9ICgke3Jlc1tncm91cE5hbWVdPy5maWx0ZXIocm93ID0+ICFyb3cuaXNHcm91cEhlYWRlcik/Lmxlbmd0aH0pYCxcbiAgICAgICAgICBkYXRhOiByZXNbZ3JvdXBOYW1lXSxcbiAgICAgICAgICBncm91cE5hbWU6IHVuaXFOYW1lLFxuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc1tncm91cE5hbWVdIGFzIGFueVtdKT8ubWFwKGQgPT4gKHsgLi4uZCwgcGFyZW50R3JvdXBOYW1lOiBkLnBhcmVudEdyb3VwTmFtZSB8fCB1bmlxTmFtZSB9KSlcbiAgICAgIF07XG4gICAgfSkpLm1hcCh0aGlzLmFkZEluZGVudGF0aW9uKTtcbiAgfVxuXG4gIGFkZEluZGVudGF0aW9uID0gKGQ6IGFueSkgPT4ge1xuICAgIGlmIChkLmlzR3JvdXBIZWFkZXIpIHtcbiAgICAgIGlmIChkLnBhZGRpbmcpIHtcbiAgICAgICAgZC5wYWRkaW5nICs9IDIwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZC5wYWRkaW5nID0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBzZXREaXNwbGF5ID0gKGRhdGE6IGFueVtdLCBncm91cHM6IEdyb3VwW10pOiBhbnlbXSA9PiBkYXRhXG4gICAgLm1hcChkID0+ICh7XG4gICAgICAuLi5kLFxuICAgICAgc2hvdWxkRGlzcGxheTogIWQucGFyZW50R3JvdXBOYW1lIHx8IHRoaXMuc2hvdWxkRGlzcGxheShncm91cHMuZmluZChnID0+IGcuZ3JvdXBOYW1lID09IGQucGFyZW50R3JvdXBOYW1lKSwgZ3JvdXBzKSxcbiAgICAgIGlzRXhwYW5kZWQ6IGdyb3Vwcy5maW5kKGcgPT4gZy5ncm91cE5hbWUgPT0gZC5ncm91cE5hbWUpPy5pc0V4cGFuZGVkXG4gICAgfSkpXG4gICAgLmZpbHRlcihkID0+IGQuc2hvdWxkRGlzcGxheSk7XG5cblxuICBzaG91bGREaXNwbGF5ID0gKGN1cnJlbnRHcm91cD86IEdyb3VwLCBncm91cHM/OiBHcm91cFtdKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFjdXJyZW50R3JvdXA/LmlzRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRHcm91cCA9IGdyb3Vwcz8uZmluZChnID0+IGcuZ3JvdXBOYW1lID09IGN1cnJlbnRHcm91cC5wYXJlbnRHcm91cE5hbWUpO1xuXG4gICAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG91bGREaXNwbGF5KHBhcmVudEdyb3VwLCBncm91cHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbYmVmb3JlXVwiID5cbjwvbmctY29udGVudD5cblxuPG5nLWNvbnRhaW5lciBtdWx0aVNvcnQgW21hdFNvcnREaXNhYmxlZF09XCJkaXNhYmxlU29ydFwiPlxuICA8bmctY29udGFpbmVyICpuZ3J4TGV0PVwic3RhdGUudGFibGVTZXR0aW5ncyQgYXMgdGFibGVTZXR0aW5nc1wiPlxuXG5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGItaGVhZGVyLXRpdGxlXCJcbiAgICAgICAgICAqbmdJZj1cIighKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSkgfHwgdGFibGVTZXR0aW5ncy5zaG93VGl0bGVXaGVuSGVhZGVyQ29sbGFwc2VkXCI+XG5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgICAgICA8Z3JvdXAtYnktbGlzdD48L2dyb3VwLWJ5LWxpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbHgtcm93LWVuZFwiPlxuICAgICAgICA8bGliLWZpbHRlci1saXN0PjwvbGliLWZpbHRlci1saXN0PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlU2V0dGluZ3MuaGlkZUhlYWRlclwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKTsgZWxzZSBhbGxNZW51XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9J3ByaW1hcnknIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZmxhdC1tZW51JzooY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpfVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+e3soY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpID8gJ21vcmVfaG9yaXonIDogJ21vcmVfdmVydCd9fTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU9J21hdE1lbnUnPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudUV4dHJhXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWxsTWVudT5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPSdwcmltYXJ5JyBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZsYXQtbWVudSc6KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKX1cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdtb3JlX2hvcml6JyA6ICdtb3JlX3ZlcnQnfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51RXh0cmFcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bWF0LWljb24gW21hdFRvb2x0aXBdPVwiKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmQnIDogJ2NvbGxhcHNlJ1wiIGNsYXNzPVwiY29sbGFwc2UtaWNvbiBoZWFkZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlSGVhZGVyKClcIj5cbiAgICAgICAgICAgIHt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBzdHlsZT1cImNsZWFyOiBib3RoO1wiPlxuICAgICAgPHRiLWdlbmVyaWMtdGFibGUgW3Jvd3NdPSdjdXN0b21Sb3dzJyBbZGF0YSRdPVwiZGF0YVwiIFtJbmRleENvbHVtbl09J0luZGV4Q29sdW1uJ1xuICAgICAgICBbU2VsZWN0aW9uQ29sdW1uXT0nU2VsZWN0aW9uQ29sdW1uJyAoc2VsZWN0aW9uJCk9J3NlbGVjdGlvbiQuZW1pdCgkZXZlbnQpJyBbdHJhY2tCeV09J3RyYWNrQnknXG4gICAgICAgIFtpc1N0aWNreV09J2lzU3RpY2t5JyBbY29sdW1uSW5mb3NdPSdteUNvbHVtbnMkJyBbZGlzYWJsZVNvcnRdPVwiZGlzYWJsZVNvcnRcIiBbZ3JvdXBIZWFkZXJUZW1wbGF0ZV09XCJncm91cEhlYWRlclRlbXBsYXRlXCI+XG4gICAgICA8L3RiLWdlbmVyaWMtdGFibGU+XG4gICAgPC9kaXY+XG5cblxuXG4gICAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPHRiLWZpbHRlci1kaXNwbGF5ZXIgKm5nSWY9XCIhdGFibGVTZXR0aW5ncy5oaWRlRmlsdGVyXCI+XG4gICAgICAgIDwvdGItZmlsdGVyLWRpc3BsYXllcj5cbiAgICAgICAgPHRiLWNvbC1kaXNwbGF5ZXIgKm5nSWY9XCIhdGFibGVTZXR0aW5ncy5oaWRlQ29sdW1uU2V0dGluZ3NcIj48L3RiLWNvbC1kaXNwbGF5ZXI+XG4gICAgICAgIDx0Yi1zb3J0LW1lbnUgKm5nSWY9XCIhdGFibGVTZXR0aW5ncy5oaWRlU29ydFwiPjwvdGItc29ydC1tZW51PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlck1lbnVFeHRyYT5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVzZXRTdGF0ZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5hdXRvcmVuZXc8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj5SZXNldCB0YWJsZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHBvcnRUb0NzdigpXCIgKm5nSWY9XCIhdGFibGVTZXR0aW5ncy5oaWRlRXhwb3J0XCI+XG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+RXhwb3J0IFRhYmxlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0YXRlS2V5JCB8IGFzeW5jIGFzIGN1cnJlbnRLZXlcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwidGFibGVJZFwiIChjbGljayk9XCJzYXZlU3RhdGUoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5zYXZlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj5TYXZlIHRvIHt7Y3VycmVudEtleX19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj0ndGFibGVJZCcgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwic2F2ZWROYW1lc1wiPlxuICAgICAgICAgIDxzcGFuPkNob29zZSBQcm9maWxlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bWF0LW1lbnUgI3NhdmVkTmFtZXM9J21hdE1lbnUnIHBhbmVsQ2xhc3M9J3dpZGUtbWVudSc+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGlja0VtaXR0ZXIgICNhZGQ9J2NsaWNrRW1pdHRlcic+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+TmV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9J2xldCBrZXkgb2Ygc3RhdGVLZXlzJCB8IGFzeW5jJz5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT0nc2V0UHJvZmlsZVN0YXRlKGtleSknPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT0nZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyc+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSdkaXNwbGF5OmZsZXg7Jz57e2tleX19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0nZGlzcGxheTpmbGV4Oyc+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDogMTIwcHg7XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj0nd2FybicgKGNsaWNrKT0nZGVsZXRlUHJvZmlsZVN0YXRlKGtleSknIHN0b3AtcHJvcGFnYXRpb24+ZGVsZXRlX2ZvcmV2ZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L21hdC1tZW51PlxuICAgICAgPG5nLWNvbnRhaW5lciAqb3BEaWFsb2c9J2FkZCc+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8aW5wdXQgc3R5bGU9J3dpZHRoOjkwJScgbWF0SW5wdXQgI2FkZGVkS2V5IC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPSdzZXRQcm9maWxlU3RhdGUoYWRkZWRLZXkudmFsdWUpOyBhZGQubmV4dChmYWxzZSk7J1xuICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWRkZWRLZXkudmFsdWVcIj5BZGQ8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgPC9uZy1jb250YWluZXI+XG5cbjwvbmctY29udGFpbmVyPlxuIl19