@firestitch/list 18.0.38 → 18.0.40

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.
@@ -214,7 +214,7 @@ export class FsListComponent {
214
214
  */
215
215
  columnVisibility(name, show) {
216
216
  this.columnsVisibility([{ name, show }]);
217
- this.filterRef.updateSortings(this.list.sorting.makeSortingList());
217
+ // this.filterRef.updateSortings(this.list.sorting.makeSortingList());
218
218
  }
219
219
  /**
220
220
  * Update visibility for list of specific columns
@@ -348,7 +348,7 @@ export class FsListComponent {
348
348
  GroupExpandNotifierService,
349
349
  PersistanceController,
350
350
  ReorderController,
351
- ], queries: [{ propertyName: "headingTemplate", first: true, predicate: FsListHeadingDirective, descendants: true, read: TemplateRef }, { propertyName: "headingContainerTemplate", first: true, predicate: FsListHeadingContainerDirective, descendants: true, read: TemplateRef }, { propertyName: "subheadingTemplate", first: true, predicate: FsListSubheadingDirective, descendants: true, read: TemplateRef }, { propertyName: "_emptyStateTemplate", first: true, predicate: FsListEmptyStateDirective, descendants: true, read: TemplateRef }, { propertyName: "columnTemplates", predicate: FsListColumnDirective }], viewQueries: [{ propertyName: "body", first: true, predicate: FsBodyComponent, descendants: true }, { propertyName: "filterReference", first: true, predicate: FilterComponent, descendants: true }], ngImport: i0, template: "<div\n class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'has-row-actions-hover': list.rowActionsHover,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n @if (list.filterConfig) {\n <fs-filter\n class=\"fs-list-filter\"\n [filter]=\"list.filterConfig\"\n [showSortBy]=\"!list.status\"\n (ready)=\"filterReady()\">\n <ng-template fsFilterStatusBar>\n <ng-container *ngIf=\"hasStatus\">\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [list]=\"list\"\n [firstLoad]=\"firstLoad\">\n </fs-list-status>\n </ng-container>\n </ng-template>\n </fs-filter>\n }\n </div>\n </div>\n <ng-content select=\"[fs-list-content]\"></ng-content>\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table\n class=\"fs-list-table\"\n role=\"grid\"\n [fsListContentInit]=\"list.afterContentInit\"\n [ngClass]=\"{\n 'style-card': list.style === 'card',\n 'style-basic': list.style === 'basic',\n 'style-line': (list.style || 'line') === 'line'\n }\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </thead>\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\">\n </tbody>\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n <fs-list-pagination\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}:host{display:block;width:100%}:host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}:host ::ng-deep .multiple-selection{background-color:#2196f380}:host ::ng-deep .multiple-selection ::ng-deep .fs-list-col{background-color:#2196f380}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading .fs-list-head,.fs-list-container.loading .fs-list-footer,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading ::ng-deep fs-filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load .fs-list-head,.fs-list-container.first-load .fs-list-footer,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load ::ng-deep fs-filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}@media screen and (min-width: 800px){.fs-list-container.has-row-actions-hover ::ng-deep .actions-col{width:0px;position:relative;overflow:visible;padding:0}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions{display:none;position:absolute;border-radius:5px;top:50%;right:5px;transform:translateY(-50%)}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions .mat-mdc-button-base{background:#fefefe;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.fs-list-container.has-row-actions-hover ::ng-deep tr:hover fs-list-row-actions{display:flex}}.fs-list-container .fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-container .fs-list-header .heading{margin:0}.fs-list-container .fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-container .fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-container .fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-container .fs-list-table-container{width:100%;overflow-x:auto;overflow-y:hidden}::ng-deep .fs-list-preview-block{position:fixed;height:30px;width:200px;background:gray;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}:host(.fs-list-row-highlight) ::ng-deep tbody .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FilterComponent, selector: "fs-filter", inputs: ["config", "filter", "showSortBy"], outputs: ["closed", "opened", "ready"] }, { kind: "directive", type: FilterStatusBarDirective, selector: "[fsFilterStatusBar]" }, { kind: "component", type: FsStatusComponent, selector: "fs-list-status", inputs: ["list", "rows", "firstLoad"] }, { kind: "directive", type: FsListContentInitDirective, selector: "[fsListContentInit]", inputs: ["fsListContentInit"] }, { kind: "component", type: FsHeadComponent, selector: "[fs-list-head]", inputs: ["sorting", "columns", "hasRowActions", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { kind: "component", type: FsBodyComponent, selector: "[fs-list-body]", inputs: ["rows", "columns", "hasFooter", "rowActionsRaw", "groupActionsRaw", "rowEvents", "rowClass", "hasRowActions", "selection", "restoreMode", "rowRemoved", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy", "reorderMultiple"] }, { kind: "directive", type: FsListDraggableListDirective, selector: "[fsListDraggableList]", inputs: ["rows"] }, { kind: "component", type: FsFooterComponent, selector: "[fs-list-footer]", inputs: ["hasRowActions", "columns", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { kind: "directive", type: FsListFooterDirective, selector: "[fs-list-footer]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: FsListLoaderComponent, selector: "fs-list-loader", inputs: ["columns", "loaderLines"] }, { kind: "component", type: FsPaginationComponent, selector: "fs-list-pagination", inputs: ["pagination", "rows"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
351
+ ], queries: [{ propertyName: "headingTemplate", first: true, predicate: FsListHeadingDirective, descendants: true, read: TemplateRef }, { propertyName: "headingContainerTemplate", first: true, predicate: FsListHeadingContainerDirective, descendants: true, read: TemplateRef }, { propertyName: "subheadingTemplate", first: true, predicate: FsListSubheadingDirective, descendants: true, read: TemplateRef }, { propertyName: "_emptyStateTemplate", first: true, predicate: FsListEmptyStateDirective, descendants: true, read: TemplateRef }, { propertyName: "columnTemplates", predicate: FsListColumnDirective }], viewQueries: [{ propertyName: "body", first: true, predicate: FsBodyComponent, descendants: true }, { propertyName: "filterReference", first: true, predicate: FilterComponent, descendants: true }], ngImport: i0, template: "<div\n class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'has-row-actions-hover': list.rowActionsHover,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n @if (list.filterConfig) {\n <fs-filter\n class=\"fs-list-filter\"\n [config]=\"list.filterConfig\">\n <ng-container *ngIf=\"hasStatus\">\n <ng-template fsFilterStatusBar>\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [list]=\"list\"\n [firstLoad]=\"firstLoad\">\n </fs-list-status>\n </ng-template>\n </ng-container>\n </fs-filter>\n }\n </div>\n </div>\n <ng-content select=\"[fs-list-content]\"></ng-content>\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table\n class=\"fs-list-table\"\n role=\"grid\"\n [fsListContentInit]=\"list.afterContentInit\"\n [ngClass]=\"{\n 'style-card': list.style === 'card',\n 'style-basic': list.style === 'basic',\n 'style-line': (list.style || 'line') === 'line'\n }\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </thead>\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\">\n </tbody>\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n <fs-list-pagination\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}:host{display:block;width:100%}:host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}:host ::ng-deep .multiple-selection{background-color:#2196f380}:host ::ng-deep .multiple-selection ::ng-deep .fs-list-col{background-color:#2196f380}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading .fs-list-head,.fs-list-container.loading .fs-list-footer,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading ::ng-deep fs-filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load .fs-list-head,.fs-list-container.first-load .fs-list-footer,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load ::ng-deep fs-filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}@media screen and (min-width: 800px){.fs-list-container.has-row-actions-hover ::ng-deep .actions-col{width:0px;position:relative;overflow:visible;padding:0}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions{display:none;position:absolute;border-radius:5px;top:50%;right:5px;transform:translateY(-50%)}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions .mat-mdc-button-base{background:#fefefe;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.fs-list-container.has-row-actions-hover ::ng-deep tr:hover fs-list-row-actions{display:flex}}.fs-list-container .fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-container .fs-list-header .heading{margin:0}.fs-list-container .fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-container .fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-container .fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-container .fs-list-table-container{width:100%;overflow-x:auto;overflow-y:hidden}::ng-deep .fs-list-preview-block{position:fixed;height:30px;width:200px;background:gray;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}:host(.fs-list-row-highlight) ::ng-deep tbody .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FilterComponent, selector: "fs-filter", inputs: ["filterConfig", "config"], outputs: ["closed", "opened", "ready"] }, { kind: "directive", type: FilterStatusBarDirective, selector: "[fsFilterStatusBar]" }, { kind: "component", type: FsStatusComponent, selector: "fs-list-status", inputs: ["list", "rows", "firstLoad"] }, { kind: "directive", type: FsListContentInitDirective, selector: "[fsListContentInit]", inputs: ["fsListContentInit"] }, { kind: "component", type: FsHeadComponent, selector: "[fs-list-head]", inputs: ["sorting", "columns", "hasRowActions", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { kind: "component", type: FsBodyComponent, selector: "[fs-list-body]", inputs: ["rows", "columns", "hasFooter", "rowActionsRaw", "groupActionsRaw", "rowEvents", "rowClass", "hasRowActions", "selection", "restoreMode", "rowRemoved", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy", "reorderMultiple"] }, { kind: "directive", type: FsListDraggableListDirective, selector: "[fsListDraggableList]", inputs: ["rows"] }, { kind: "component", type: FsFooterComponent, selector: "[fs-list-footer]", inputs: ["hasRowActions", "columns", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { kind: "directive", type: FsListFooterDirective, selector: "[fs-list-footer]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: FsListLoaderComponent, selector: "fs-list-loader", inputs: ["columns", "loaderLines"] }, { kind: "component", type: FsPaginationComponent, selector: "fs-list-pagination", inputs: ["pagination", "rows"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
352
352
  }
353
353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsListComponent, decorators: [{
354
354
  type: Component,
@@ -372,7 +372,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
372
372
  FsListLoaderComponent,
373
373
  FsPaginationComponent,
374
374
  AsyncPipe,
375
- ], template: "<div\n class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'has-row-actions-hover': list.rowActionsHover,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n @if (list.filterConfig) {\n <fs-filter\n class=\"fs-list-filter\"\n [filter]=\"list.filterConfig\"\n [showSortBy]=\"!list.status\"\n (ready)=\"filterReady()\">\n <ng-template fsFilterStatusBar>\n <ng-container *ngIf=\"hasStatus\">\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [list]=\"list\"\n [firstLoad]=\"firstLoad\">\n </fs-list-status>\n </ng-container>\n </ng-template>\n </fs-filter>\n }\n </div>\n </div>\n <ng-content select=\"[fs-list-content]\"></ng-content>\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table\n class=\"fs-list-table\"\n role=\"grid\"\n [fsListContentInit]=\"list.afterContentInit\"\n [ngClass]=\"{\n 'style-card': list.style === 'card',\n 'style-basic': list.style === 'basic',\n 'style-line': (list.style || 'line') === 'line'\n }\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </thead>\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\">\n </tbody>\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n <fs-list-pagination\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}:host{display:block;width:100%}:host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}:host ::ng-deep .multiple-selection{background-color:#2196f380}:host ::ng-deep .multiple-selection ::ng-deep .fs-list-col{background-color:#2196f380}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading .fs-list-head,.fs-list-container.loading .fs-list-footer,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading ::ng-deep fs-filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load .fs-list-head,.fs-list-container.first-load .fs-list-footer,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load ::ng-deep fs-filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}@media screen and (min-width: 800px){.fs-list-container.has-row-actions-hover ::ng-deep .actions-col{width:0px;position:relative;overflow:visible;padding:0}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions{display:none;position:absolute;border-radius:5px;top:50%;right:5px;transform:translateY(-50%)}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions .mat-mdc-button-base{background:#fefefe;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.fs-list-container.has-row-actions-hover ::ng-deep tr:hover fs-list-row-actions{display:flex}}.fs-list-container .fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-container .fs-list-header .heading{margin:0}.fs-list-container .fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-container .fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-container .fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-container .fs-list-table-container{width:100%;overflow-x:auto;overflow-y:hidden}::ng-deep .fs-list-preview-block{position:fixed;height:30px;width:200px;background:gray;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}:host(.fs-list-row-highlight) ::ng-deep tbody .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}\n"] }]
375
+ ], template: "<div\n class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'has-row-actions-hover': list.rowActionsHover,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n @if (list.filterConfig) {\n <fs-filter\n class=\"fs-list-filter\"\n [config]=\"list.filterConfig\">\n <ng-container *ngIf=\"hasStatus\">\n <ng-template fsFilterStatusBar>\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [list]=\"list\"\n [firstLoad]=\"firstLoad\">\n </fs-list-status>\n </ng-template>\n </ng-container>\n </fs-filter>\n }\n </div>\n </div>\n <ng-content select=\"[fs-list-content]\"></ng-content>\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table\n class=\"fs-list-table\"\n role=\"grid\"\n [fsListContentInit]=\"list.afterContentInit\"\n [ngClass]=\"{\n 'style-card': list.style === 'card',\n 'style-basic': list.style === 'basic',\n 'style-line': (list.style || 'line') === 'line'\n }\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </thead>\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\">\n </tbody>\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n <fs-list-pagination\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}:host{display:block;width:100%}:host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}:host ::ng-deep .multiple-selection{background-color:#2196f380}:host ::ng-deep .multiple-selection ::ng-deep .fs-list-col{background-color:#2196f380}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading .fs-list-head,.fs-list-container.loading .fs-list-footer,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading ::ng-deep fs-filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load .fs-list-head,.fs-list-container.first-load .fs-list-footer,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load ::ng-deep fs-filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}@media screen and (min-width: 800px){.fs-list-container.has-row-actions-hover ::ng-deep .actions-col{width:0px;position:relative;overflow:visible;padding:0}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions{display:none;position:absolute;border-radius:5px;top:50%;right:5px;transform:translateY(-50%)}.fs-list-container.has-row-actions-hover ::ng-deep .actions-col fs-list-row-actions .mat-mdc-button-base{background:#fefefe;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.fs-list-container.has-row-actions-hover ::ng-deep tr:hover fs-list-row-actions{display:flex}}.fs-list-container .fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-container .fs-list-header .heading{margin:0}.fs-list-container .fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-container .fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-container .fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-container .fs-list-table-container{width:100%;overflow-x:auto;overflow-y:hidden}::ng-deep .fs-list-preview-block{position:fixed;height:30px;width:200px;background:gray;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}:host(.fs-list-row-highlight) ::ng-deep tbody .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}\n"] }]
376
376
  }], ctorParameters: () => [{ type: i1.ReorderController }, { type: undefined, decorators: [{
377
377
  type: Optional
378
378
  }, {
@@ -413,4 +413,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
413
413
  type: ContentChild,
414
414
  args: [FsListEmptyStateDirective, { read: TemplateRef }]
415
415
  }] } });
416
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUVMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqRCxP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QkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUl2RCxJQUFJO3NCQURWLFNBQVM7dUJBQUMsZUFBZTtnQkFnQmYsZUFBZTtzQkFEekIsU0FBUzt1QkFBQyxlQUFlO2dCQVlmLGVBQWU7c0JBRHpCLGVBQWU7dUJBQUMscUJBQXFCO2dCQVMxQixtQkFBbUI7c0JBRDlCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRHJhd2VyUmVmIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZHJhd2VyJztcbmltcG9ydCB7IEZpbHRlckNvbXBvbmVudCwgRmlsdGVyU3RhdHVzQmFyRGlyZWN0aXZlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IFNlbGVjdGlvbkRpYWxvZyB9IGZyb20gJ0BmaXJlc3RpdGNoL3NlbGVjdGlvbic7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc2tpcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBjbG9uZURlZXAsIG1lcmdlV2l0aCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2xpc3QtY29udHJvbGxlcic7XG5pbXBvcnQgeyBQZXJzaXN0YW5jZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3BlcnNpc3RhbmNlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgUmVvcmRlckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3Jlb3JkZXItY29udHJvbGxlcic7XG5pbXBvcnQge1xuICBGc0xpc3RIZWFkaW5nQ29udGFpbmVyRGlyZWN0aXZlLCBGc0xpc3RIZWFkaW5nRGlyZWN0aXZlLCBGc0xpc3RTdWJoZWFkaW5nRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEZzTGlzdENvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29sdW1uL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNMaXN0Q29udGVudEluaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NvbnRlbnQtaW5pdC9jb250ZW50LWluaXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzTGlzdERyYWdnYWJsZUxpc3REaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2RyYWdnYWJsZS1saXN0L2RyYWdnYWJsZS1saXN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc0xpc3RFbXB0eVN0YXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNMaXN0Rm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb290ZXIvZm9vdGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9lbnVtcy9wYWdpbmF0aW9uLXN0cmF0ZWd5LmVudW0nO1xuaW1wb3J0IHsgRlNfTElTVF9DT05GSUcgfSBmcm9tICcuLi8uLi9mcy1saXN0LnByb3ZpZGVycyc7XG5pbXBvcnQge1xuICBGc0xpc3RBYnN0cmFjdFJvdyxcbiAgRnNMaXN0QWN0aW9uLFxuICBGc0xpc3RDb25maWcsIEZzTGlzdFBlcnNpdGFuY2UsIEZzTGlzdFNlbGVjdGlvbkNvbmZpZyxcbiAgRnNMaXN0VHJhY2tCeUZuLFxuICBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4sXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSVBhZ2luYXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGFnaW5hdGlvbi1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cC1leHBhbmQtbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGc0JvZHlDb21wb25lbnQgfSBmcm9tICcuLi9ib2R5L2JvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbWl6ZUNvbHNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b21pemUtY29scy9jdXN0b21pemUtY29scy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnNGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi9mb290ZXIvZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGc0hlYWRDb21wb25lbnQgfSBmcm9tICcuLi9oZWFkL2hlYWQuY29tcG9uZW50JztcbmltcG9ydCB7IEZzTGlzdExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZzUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnNTdGF0dXNDb21wb25lbnQgfSBmcm9tICcuLi9zdGF0dXMvc3RhdHVzLmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UsXG4gICAgUGVyc2lzdGFuY2VDb250cm9sbGVyLFxuICAgIFJlb3JkZXJDb250cm9sbGVyLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nSWYsXG4gICAgRmlsdGVyQ29tcG9uZW50LFxuICAgIEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZSxcbiAgICBGc1N0YXR1c0NvbXBvbmVudCxcbiAgICBGc0xpc3RDb250ZW50SW5pdERpcmVjdGl2ZSxcbiAgICBGc0hlYWRDb21wb25lbnQsXG4gICAgRnNCb2R5Q29tcG9uZW50LFxuICAgIEZzTGlzdERyYWdnYWJsZUxpc3REaXJlY3RpdmUsXG4gICAgRnNGb290ZXJDb21wb25lbnQsXG4gICAgRnNMaXN0Rm9vdGVyRGlyZWN0aXZlLFxuICAgIEZzTGlzdExvYWRlckNvbXBvbmVudCxcbiAgICBGc1BhZ2luYXRpb25Db21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mcy1saXN0JykgcHVibGljIGNsYXNzRnNMaXN0ID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWxpc3Qtcm93LWhpZ2hsaWdodCcpXG4gIHB1YmxpYyByb3dIb3ZlckhpZ2hsaWdodDogYm9vbGVhbjtcblxuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgY29uZmlnKGNvbmZpZzogRnNMaXN0Q29uZmlnKSB7XG4gICAgdGhpcy5faW5pdFdpdGhDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2FkZXJMaW5lcyA9IDM7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWx0ZXJzUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RIZWFkaW5nRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBoZWFkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RIZWFkaW5nQ29udGFpbmVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBoZWFkaW5nQ29udGFpbmVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RTdWJoZWFkaW5nRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBzdWJoZWFkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZChGc0JvZHlDb21wb25lbnQpXG4gIHB1YmxpYyBib2R5OiBGc0JvZHlDb21wb25lbnQ7XG5cbiAgcHVibGljIGxpc3Q6IExpc3Q7XG5cbiAgLy8gRXZlbnQgd2lsbCBmaXJlZCBpZiBhY3Rpb24gcmVtb3ZlOiB0cnVlIHdpbGwgY2xpY2tlZFxuICBwdWJsaWMgcm93UmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGZpcnN0TG9hZCA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfbGlzdENvbHVtbkRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxGc0xpc3RDb2x1bW5EaXJlY3RpdmU+O1xuICBwcml2YXRlIF9maWx0ZXJSZWY6IEZpbHRlckNvbXBvbmVudDtcbiAgcHJpdmF0ZSBfZmlsdGVyUGFyYW1zUmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgXG4gIEBWaWV3Q2hpbGQoRmlsdGVyQ29tcG9uZW50KVxuICBwdWJsaWMgc2V0IGZpbHRlclJlZmVyZW5jZShjb21wb25lbnQpIHtcbiAgICB0aGlzLl9maWx0ZXJSZWYgPSBjb21wb25lbnQ7XG4gICAgdGhpcy5saXN0LmFjdGlvbnMuc2V0RmlsdGVyUmVmKGNvbXBvbmVudCk7XG4gICAgdGhpcy5fZW1pdEZpbHRlcnNSZWFkeUV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvbHVtbnMgdG8gY29uZmlnXG4gICAqIENyZWF0ZSBDb2x1bW4gTW9kZWwgaW5zdGFuY2VzXG4gICAqL1xuICBAQ29udGVudENoaWxkcmVuKEZzTGlzdENvbHVtbkRpcmVjdGl2ZSlcbiAgcHVibGljIHNldCBjb2x1bW5UZW1wbGF0ZXMobGlzdENvbHVtbkRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxGc0xpc3RDb2x1bW5EaXJlY3RpdmU+KSB7XG4gICAgdGhpcy5fbGlzdENvbHVtbkRpcmVjdGl2ZXMgPSBsaXN0Q29sdW1uRGlyZWN0aXZlcztcbiAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICB0aGlzLmxpc3QudHJhbmZvcm1UZW1wbGF0ZXNUb0NvbHVtbnMobGlzdENvbHVtbkRpcmVjdGl2ZXMpO1xuICAgIH1cbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoRnNMaXN0RW1wdHlTdGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHNldCBfZW1wdHlTdGF0ZVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0LmVtcHR5U3RhdGVUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgfVxuICBcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfZHJhd2VyUmVmID0gaW5qZWN0KERyYXdlclJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTsgIFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZW9yZGVyQ29udHJvbGxlcjogUmVvcmRlckNvbnRyb2xsZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19MSVNUX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0xpc3RDb25maWcsXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uRGlhbG9nOiBTZWxlY3Rpb25EaWFsb2csXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2dyb3VwRXhwYW5kTm90aWZpZXI6IEdyb3VwRXhwYW5kTm90aWZpZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9wZXJzaXN0YW5jZTogUGVyc2lzdGFuY2VDb250cm9sbGVyLFxuICApIHsgXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHJlZmVyZW5jZSBmb3IgZmlsdGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZpbHRlclJlZigpOiBGaWx0ZXJDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJSZWY7XG4gIH1cblxuICBwdWJsaWMgc2V0IGdyb3VwRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGlzdC5ncm91cEVuYWJsZWQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBncm91cEVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5ncm91cEVuYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc1N0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LnN0YXR1cyAmJlxuICAgICAgKHRoaXMubGlzdC5zb3J0aW5nLmlzRGVmaW5lZCB8fCB0aGlzLmxpc3QucGFnaW5nLmVuYWJsZWQpICYmXG4gICAgICAoXG4gICAgICAgICF0aGlzLnJlb3JkZXJDb250cm9sbGVyLmVuYWJsZWQgfHxcbiAgICAgICAgKHRoaXMucmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCAmJiB0aGlzLnJlb3JkZXJDb250cm9sbGVyLnN0YXR1cylcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2luYXRvclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5wYWdpbmcuZW5hYmxlZFxuICAgICAgJiYgIXRoaXMuZmlyc3RMb2FkXG4gICAgICAmJiAhdGhpcy5saXN0LmVtcHR5U3RhdGVFbmFibGVkXG4gICAgICAmJiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NDb3VudCA+IDBcbiAgICAgICYmIHRoaXMubGlzdC5wYWdpbmcucGFnZXMgPiAxO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJzUXVlcnkoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZmlsdGVyc1F1ZXJ5O1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdpbmdTdGF0ZSgpOiBJUGFnaW5hdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LnBhZ2luZy5zdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGlzdC5hZnRlckluaXQpIHtcbiAgICAgIHRoaXMubGlzdC5hZnRlckluaXQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmliZVRvUmVtb3ZlUm93KCk7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9Hcm91cEV4cGFuZFN0YXR1c0NoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMubGlzdC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0UGFnZSgpIHtcbiAgICB0aGlzLmxpc3QucGFnaW5nLmdvTmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHByZXZQYWdlKCkge1xuICAgIHRoaXMubGlzdC5wYWdpbmcuZ29QcmV2KCk7XG4gIH1cblxuICBwdWJsaWMgZmlyc3RQYWdlKCkge1xuICAgIHRoaXMubGlzdC5wYWdpbmcuZ29GaXJzdCgpO1xuICB9XG5cbiAgcHVibGljIGxhc3RQYWdlKCkge1xuICAgIHRoaXMubGlzdC5wYWdpbmcuZ29MYXN0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhKHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5Rm4pIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldERhdGEodHJhY2tCeSk7XG4gIH1cblxuICBwdWJsaWMgaGFzRGF0YSh0cmFja0J5OiBGc0xpc3RUcmFja0J5Rm4pIHtcbiAgICByZXR1cm4gdGhpcy5saXN0Lmhhc0RhdGEodHJhY2tCeSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRGF0YShcbiAgICByb3dzOiBGc0xpc3RBYnN0cmFjdFJvdyB8IEZzTGlzdEFic3RyYWN0Um93W10sXG4gICAgdHJhY2tCeT86IEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbixcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci51cGRhdGVEYXRhKHJvd3MsIHRyYWNrQnkpO1xuICB9XG5cbiAgcHVibGljIHJlcGxhY2VSb3coXG4gICAgcm93OiBGc0xpc3RBYnN0cmFjdFJvdyxcbiAgICB0cmFja0J5PzogRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuLFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnJlcGxhY2VEYXRhKHJvdywgdHJhY2tCeSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2VsZWN0aW9uQ29uZmlnKGNvbmZpZzogRnNMaXN0U2VsZWN0aW9uQ29uZmlnKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi51cGRhdGVDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFNlbGVjdGlvbkFjdGlvbnMoKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi5yZXNldEFjdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi5lbmFibGVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlU2VsZWN0aW9uKCkge1xuICAgIHRoaXMubGlzdC5zZWxlY3Rpb24uZGlzYWJsZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZURhdGEoZGF0YTogRnNMaXN0QWJzdHJhY3RSb3cgfCBGc0xpc3RBYnN0cmFjdFJvd1tdIHwgRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5yZW1vdmVEYXRhKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIHNldEhlYWRpbmcoaGVhZGluZzogc3RyaW5nKSB7XG4gICAgdGhpcy5saXN0LmhlYWRpbmcgPSBoZWFkaW5nO1xuICB9XG5cbiAgcHVibGljIHNldFN1YmhlYWRpbmcoc3ViaGVhZGluZzogc3RyaW5nKSB7XG4gICAgdGhpcy5saXN0LnN1YmhlYWRpbmcgPSBzdWJoZWFkaW5nO1xuICB9XG5cbiAgcHVibGljIHJlb3JkZXJTdGFydCgpIHtcbiAgICB0aGlzLnJlb3JkZXJDb250cm9sbGVyLmVuYWJsZVJlb3JkZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW9yZGVyRmluaXNoKCkge1xuICAgIHRoaXMucmVvcmRlckNvbnRyb2xsZXIuZGlzYWJsZVJlb3JkZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25zKGFjdGlvbnM6IEZzTGlzdEFjdGlvbltdKSB7XG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgIHRoaXMubGlzdC5hY3Rpb25zLmNsZWFyQWN0aW9ucygpO1xuICAgICAgdGhpcy5saXN0LmFjdGlvbnMuc2V0QWN0aW9ucyhhY3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVhZHkoKSB7XG4gICAgdGhpcy5saXN0LmZpbHRlcnNSZWFkeSgpO1xuICAgIHRoaXMuX2ZpbHRlclBhcmFtc1JlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9lbWl0RmlsdGVyc1JlYWR5RXZlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdmlzaWJpbGl0eSBmb3Igc3BlY2lmaWMgY29sdW1uXG4gICAqL1xuICBwdWJsaWMgY29sdW1uVmlzaWJpbGl0eShuYW1lOiBzdHJpbmcsIHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5KFt7IG5hbWUsIHNob3cgfV0pO1xuICAgIHRoaXMuZmlsdGVyUmVmLnVwZGF0ZVNvcnRpbmdzKHRoaXMubGlzdC5zb3J0aW5nLm1ha2VTb3J0aW5nTGlzdCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdmlzaWJpbGl0eSBmb3IgbGlzdCBvZiBzcGVjaWZpYyBjb2x1bW5zXG4gICAqL1xuICBwdWJsaWMgY29sdW1uc1Zpc2liaWxpdHkoY29sdW1uczogeyBuYW1lOiBzdHJpbmc7IHNob3c6IGJvb2xlYW4gfVtdKSB7XG4gICAgdGhpcy5saXN0LmNvbHVtbnMudXBkYXRlVmlzaWJpbGl0eUZvckNvbHMoY29sdW1ucyk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0RmlsdGVyc1JlYWR5RXZlbnQoKTogdm9pZCB7XG4gICAgaWYgKCEhdGhpcy5maWx0ZXJSZWYgJiYgdGhpcy5fZmlsdGVyUGFyYW1zUmVhZHkpIHtcbiAgICAgIHRoaXMuZmlsdGVyc1JlYWR5LmVtaXQoKTtcbiAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5EaWFsb2coKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fZGlhbG9nUmVmIHx8ICEhdGhpcy5fZHJhd2VyUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgY29uZmlnIGZvciBsaXN0XG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgX2luaXRXaXRoQ29uZmlnKGNvbmZpZzogRnNMaXN0Q29uZmlnKSB7XG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnOiBGc0xpc3RDb25maWcgPSB7XG4gICAgICBxdWVyeVBhcmFtOiB0cnVlLFxuICAgICAgY2hpcHM6IHRydWUsXG4gICAgICBwYWdpbmc6IHtcbiAgICAgICAgc3RyYXRlZ3k6IFBhZ2luYXRpb25TdHJhdGVneS5PZmZzZXQsXG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgIH0sXG4gICAgICBub1Jlc3VsdHM6IHtcbiAgICAgICAgbWVzc2FnZTogJ05vIFJlc3VsdHMgRm91bmQnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGNsb25lRGVlcCh0aGlzLl9jb25maWcgfHwge30pO1xuICAgIGNvbnN0IGxpc3RDb25maWcgPSBtZXJnZVdpdGgoZGVmYXVsdENvbmZpZywgZ2xvYmFsQ29uZmlnLCBjb25maWcsIHRoaXMuX2NvbmZpZ01lcmdlQ3VzdG9taXplcik7XG5cbiAgICBpZiAobGlzdENvbmZpZy5wZXJzaXN0ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcmVzdG9yZVBlcnNpc3RhbmNlKGxpc3RDb25maWcucGVyc2lzdCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ3VzdG9taXplQWN0aW9uKGxpc3RDb25maWcuYWN0aW9ucyk7XG5cbiAgICB0aGlzLmxpc3QgPSBuZXcgTGlzdChcbiAgICAgIHRoaXMuX2VsLFxuICAgICAgbGlzdENvbmZpZyxcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkRpYWxvZyxcbiAgICAgIHRoaXMuX3JvdXRlLFxuICAgICAgdGhpcy5fcGVyc2lzdGFuY2UsXG4gICAgICB0aGlzLmluRGlhbG9nLFxuICAgICk7XG5cbiAgICB0aGlzLnJvd0hvdmVySGlnaGxpZ2h0ID0gdGhpcy5saXN0LnJvd0hvdmVySGlnaGxpZ2h0O1xuXG4gICAgdGhpcy5fd2FpdEZpcnN0TG9hZCgpO1xuXG4gICAgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5pbml0V2l0aENvbmZpZyhcbiAgICAgIGNvbmZpZy5yZW9yZGVyLFxuICAgICAgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLFxuICAgICAgdGhpcy5saXN0LmFjdGlvbnMsXG4gICAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5fbGlzdENvbHVtbkRpcmVjdGl2ZXMpIHtcbiAgICAgIHRoaXMubGlzdC50cmFuZm9ybVRlbXBsYXRlc1RvQ29sdW1ucyh0aGlzLl9saXN0Q29sdW1uRGlyZWN0aXZlcyk7XG4gICAgfVxuICAgIHRoaXMuX2xpc3RlblNvcnRpbmdDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFjdGlvbiB3aXRoIGN1c3RvbWl6ZSBmbGFnIGFuZCByZS1kZWNsYXJlIGNsaWNrIGZ1bmN0aW9uIGZvciBDdXN0b21pemVDb2xzRGlhbG9nXG4gICAqXG4gICAqIEBwYXJhbSBhY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVDdXN0b21pemVBY3Rpb24oYWN0aW9uczogRnNMaXN0QWN0aW9uW10pIHtcbiAgICBjb25zdCBjdXN0b21pemVBY3Rpb24gPSBhY3Rpb25zPy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi5jdXN0b21pemUpO1xuXG4gICAgaWYgKGN1c3RvbWl6ZUFjdGlvbikge1xuICAgICAgY29uc3QgYWN0aW9uQ2xpY2tGbiA9IGN1c3RvbWl6ZUFjdGlvbi5jbGljaztcblxuICAgICAgY3VzdG9taXplQWN0aW9uLmNsaWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAoYWN0aW9uQ2xpY2tGbikge1xuICAgICAgICAgIGFjdGlvbkNsaWNrRm4obnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kaWFsb2cub3BlbihDdXN0b21pemVDb2xzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICBpbmplY3RvcjogdGhpcy5faW5qZWN0b3IsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgY29sdW1uczogdGhpcy5saXN0LmNvbHVtbnMuY29sdW1uc0ZvckRpYWxvZyxcbiAgICAgICAgICAgIGNoYW5nZUZuOiB0aGlzLmxpc3QuY29sdW1ucy5jaGFuZ2VGbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5saXN0LmRlc3Ryb3kkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0LmNvbHVtbnMudXBkYXRlVmlzaWJpbGl0eUZvckNvbHMoZGF0YSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc29ydGluZyBpbiBmaWx0ZXJcbiAgICovXG4gIHByaXZhdGUgX2xpc3RlblNvcnRpbmdDaGFuZ2UoKSB7XG4gICAgdGhpcy5saXN0LnNvcnRpbmdcbiAgICAgIC5zb3J0aW5nQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5saXN0LmRlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc29ydCkgPT4ge1xuICAgICAgICB0aGlzLl9maWx0ZXJSZWYudXBkYXRlU29ydChzb3J0KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9SZW1vdmVSb3coKSB7XG4gICAgdGhpcy5yb3dSZW1vdmVkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKChyb3cpID0+IHtcbiAgICAgICAgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnJlbW92ZURhdGEocm93KTtcbiAgICAgICAgdGhpcy5ib2R5LnJvd3NcbiAgICAgICAgICAuZm9yRWFjaCgoYm9keVJvdykgPT4gYm9keVJvdy5hY3Rpb25zVXBkYXRlKCkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb0dyb3VwRXhwYW5kU3RhdHVzQ2hhbmdlKCkge1xuICAgIGlmICh0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIuaGFzR3JvdXBzKSB7XG4gICAgICB0aGlzLl9ncm91cEV4cGFuZE5vdGlmaWVyLmV4cGFuZFN0YXR1c0NoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJvdykgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci50b2dnbGVSb3dHcm91cChyb3cpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF93YWl0Rmlyc3RMb2FkKCkge1xuICAgIHRoaXMubGlzdC5sb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+ICF2YWx1ZSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmxpc3QuZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ01lcmdlQ3VzdG9taXplcihvYmpWYWx1ZTogYW55KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICByZXR1cm4gb2JqVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdG9yZVBlcnNpc3RhbmNlKHBlcnNpc3RDb25maWc6IEZzTGlzdFBlcnNpdGFuY2UpIHtcbiAgICB0aGlzLl9wZXJzaXN0YW5jZS5pbml0KHBlcnNpc3RDb25maWcsIHRoaXMuaW5EaWFsb2cpO1xuICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmcy1saXN0LWNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2hhcy1maWx0ZXJzJzogbGlzdC5maWx0ZXJDb25maWc/Lml0ZW1zLmxlbmd0aCxcbiAgICAgICdoYXMtaGVhZGluZyc6IGxpc3QuaGVhZGluZyB8fCBoZWFkaW5nVGVtcGxhdGUsXG4gICAgICAnaGFzLXN0YXR1cyc6IGhhc1N0YXR1cyxcbiAgICAgICdoYXMtY2hpcHMnOiBsaXN0LmNoaXBzLFxuICAgICAgJ2hhcy1hY3Rpb25zJzogbGlzdC5hY3Rpb25zLmhhc0FjdGlvbnMsXG4gICAgICAnaGFzLXJvdy1hY3Rpb25zLWhvdmVyJzogbGlzdC5yb3dBY3Rpb25zSG92ZXIsXG4gICAgICAnZmlyc3QtbG9hZCc6IGZpcnN0TG9hZCxcbiAgICAgICdsb2FkaW5nJzogbGlzdC5sb2FkaW5nJCB8IGFzeW5jXG4gICAgfVwiPlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdENvbnRhaW5lckNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2xpc3RDb250YWluZXJDb250ZW50PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdC5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93cyQgfCBhc3luYyBhcyBsaXN0RGF0YVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1saXN0LWhlYWRlci1jb250YWluZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtaGVhZGVyXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICduby13cmFwJzogcmVvcmRlckNvbnRyb2xsZXIubWFudWFsUmVvcmRlckFjdGl2YXRlZCB8fCAhbGlzdC5maWx0ZXJDb25maWc/Lml0ZW1zLmxlbmd0aCB9XCI+XG4gICAgICAgIEBpZiAobGlzdC5maWx0ZXJDb25maWcpIHtcbiAgICAgICAgICA8ZnMtZmlsdGVyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1maWx0ZXJcIlxuICAgICAgICAgICAgICBbZmlsdGVyXT1cImxpc3QuZmlsdGVyQ29uZmlnXCJcbiAgICAgICAgICAgICAgW3Nob3dTb3J0QnldPVwiIWxpc3Quc3RhdHVzXCJcbiAgICAgICAgICAgICAgKHJlYWR5KT1cImZpbHRlclJlYWR5KClcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmc0ZpbHRlclN0YXR1c0Jhcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1N0YXR1c1wiPlxuICAgICAgICAgICAgICAgIDxmcy1saXN0LXN0YXR1c1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LXN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoaWRkZW4tbW9iaWxlJzogIWxpc3Quc3RhdHVzIH1cIlxuICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICAgICAgW2xpc3RdPVwibGlzdFwiXG4gICAgICAgICAgICAgICAgICBbZmlyc3RMb2FkXT1cImZpcnN0TG9hZFwiPlxuICAgICAgICAgICAgICAgIDwvZnMtbGlzdC1zdGF0dXM+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2ZzLWZpbHRlcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZzLWxpc3QtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPCEtLSBUYWJsZSBpbXBsZW1lbnRhdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZnMtbGlzdC10YWJsZS1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlyc3RMb2FkICYmIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgIWxpc3QuZW1wdHlTdGF0ZUVuYWJsZWRcIj5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtdGFibGVcIlxuICAgICAgICAgICAgcm9sZT1cImdyaWRcIlxuICAgICAgICAgICAgW2ZzTGlzdENvbnRlbnRJbml0XT1cImxpc3QuYWZ0ZXJDb250ZW50SW5pdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdzdHlsZS1jYXJkJzogbGlzdC5zdHlsZSA9PT0gJ2NhcmQnLFxuICAgICAgICAgICAgICAnc3R5bGUtYmFzaWMnOiBsaXN0LnN0eWxlID09PSAnYmFzaWMnLFxuICAgICAgICAgICAgICAnc3R5bGUtbGluZSc6IChsaXN0LnN0eWxlIHx8ICdsaW5lJykgPT09ICdsaW5lJ1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIDx0aGVhZFxuICAgICAgICAgICAgZnMtbGlzdC1oZWFkXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtaGVhZFwiXG4gICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCJsaXN0LmNvbHVtbnMuaGFzSGVhZGVyXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImxpc3QuY29sdW1ucy50aGVhZENsYXNzXCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImxpc3QuY29sdW1ucy52aXNpYmxlQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbc29ydGluZ109XCJsaXN0LnNvcnRpbmdcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJsaXN0LnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaGFzUm93QWN0aW9uc109XCJsaXN0Lmhhc1Jvd0FjdGlvbnNcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keVxuICAgICAgICAgICAgZnMtbGlzdC1ib2R5XG4gICAgICAgICAgICBmc0xpc3REcmFnZ2FibGVMaXN0XG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtYm9keVwiXG4gICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiEhKHJlb3JkZXJDb250cm9sbGVyLnJlb3JkZXJEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgW3Jvd3NdPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgW3Jvd0FjdGlvbnNSYXddPVwibGlzdC5yb3dBY3Rpb25zUmF3XCJcbiAgICAgICAgICAgIFtncm91cEFjdGlvbnNSYXddPVwibGlzdC5ncm91cEFjdGlvbnNSYXdcIlxuICAgICAgICAgICAgW2hhc1Jvd0FjdGlvbnNdPVwibGlzdC5oYXNSb3dBY3Rpb25zXCJcbiAgICAgICAgICAgIFtyb3dFdmVudHNdPVwibGlzdC5yb3dFdmVudHNcIlxuICAgICAgICAgICAgW3Jvd0NsYXNzXT1cImxpc3Qucm93Q2xhc3NcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwibGlzdC5jb2x1bW5zLnZpc2libGVDb2x1bW5zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZXN0b3JlTW9kZV09XCJsaXN0LnJlc3RvcmVNb2RlXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwibGlzdC5zZWxlY3Rpb25cIlxuICAgICAgICAgICAgW3Jvd1JlbW92ZWRdPVwicm93UmVtb3ZlZFwiXG4gICAgICAgICAgICBbYWN0aXZlRmlsdGVyc0NvdW50XT1cImxpc3QuYWN0aXZlRmlsdGVyc0NvdW50JCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyRW5hYmxlZF09XCJyZW9yZGVyQ29udHJvbGxlci5lbmFibGVkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyUG9zaXRpb25dPVwicmVvcmRlckNvbnRyb2xsZXIucG9zaXRpb24kIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJTdHJhdGVneV09XCJyZW9yZGVyQ29udHJvbGxlci5zdHJhdGVneSQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlck11bHRpcGxlXT1cInJlb3JkZXJDb250cm9sbGVyLm11bHRpcGxlXCI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8dGZvb3RcbiAgICAgICAgICAgIGZzLWxpc3QtZm9vdGVyXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtZm9vdGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5jb2x1bW5zLmhhc0Zvb3RlclwiXG4gICAgICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMudmlzaWJsZUNvbHVtbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJsaXN0LnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaGFzUm93QWN0aW9uc109XCJsaXN0Lmhhc1Jvd0FjdGlvbnNcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIj5cbiAgICAgICAgICA8L3Rmb290PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZnMtbGlzdC1sb2FkZXJcbiAgICAgICAgKm5nSWY9XCJmaXJzdExvYWRcIlxuICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMuY29sdW1uc1wiXG4gICAgICAgIFtsb2FkZXJMaW5lc109XCJsb2FkZXJMaW5lc1wiPlxuICAgICAgPC9mcy1saXN0LWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZnMtbGlzdC1wYWdpbmF0aW9uXG4gICAgICBjbGFzcz1cImZzLWxpc3QtcGFnaW5hdGlvblwiXG4gICAgICBbcm93c109XCJsaXN0RGF0YVwiXG4gICAgICBbcGFnaW5hdGlvbl09XCJsaXN0LnBhZ2luZ1wiPlxuICAgIDwvZnMtbGlzdC1wYWdpbmF0aW9uPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlyc3RMb2FkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJsaXN0RGF0YS5sZW5ndGggPT09IDBcIlxuICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1uby1yZXN1bHRzLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImxpc3Qubm9SZXN1bHRzPy5tZXNzYWdlICYmICFsaXN0LmVtcHR5U3RhdGVFbmFibGVkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1uby1yZXN1bHRzXCI+XG4gICAgICAgICAge3sgbGlzdC5ub1Jlc3VsdHM/Lm1lc3NhZ2UgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0LmVtcHR5U3RhdGVFbmFibGVkXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3QuZW1wdHlTdGF0ZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUVMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqRCxP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c0JBRFYsU0FBUzt1QkFBQyxlQUFlO2dCQWdCZixlQUFlO3NCQUR6QixTQUFTO3VCQUFDLGVBQWU7Z0JBWWYsZUFBZTtzQkFEekIsZUFBZTt1QkFBQyxxQkFBcUI7Z0JBUzFCLG1CQUFtQjtzQkFEOUIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuaW1wb3J0IHsgRmlsdGVyQ29tcG9uZW50LCBGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgU2VsZWN0aW9uRGlhbG9nIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2VsZWN0aW9uJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBza2lwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGNsb25lRGVlcCwgbWVyZ2VXaXRoIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvbGlzdC1jb250cm9sbGVyJztcbmltcG9ydCB7IFBlcnNpc3RhbmNlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvcGVyc2lzdGFuY2UtY29udHJvbGxlcic7XG5pbXBvcnQgeyBSZW9yZGVyQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvcmVvcmRlci1jb250cm9sbGVyJztcbmltcG9ydCB7XG4gIEZzTGlzdEhlYWRpbmdDb250YWluZXJEaXJlY3RpdmUsIEZzTGlzdEhlYWRpbmdEaXJlY3RpdmUsIEZzTGlzdFN1YmhlYWRpbmdEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRnNMaXN0Q29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb2x1bW4vY29sdW1uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc0xpc3RDb250ZW50SW5pdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29udGVudC1pbml0L2NvbnRlbnQtaW5pdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNMaXN0RHJhZ2dhYmxlTGlzdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZHJhZ2dhYmxlLWxpc3QvZHJhZ2dhYmxlLWxpc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzTGlzdEVtcHR5U3RhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc0xpc3RGb290ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvb3Rlci9mb290ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBhZ2luYXRpb25TdHJhdGVneSB9IGZyb20gJy4uLy4uL2VudW1zL3BhZ2luYXRpb24tc3RyYXRlZ3kuZW51bSc7XG5pbXBvcnQgeyBGU19MSVNUX0NPTkZJRyB9IGZyb20gJy4uLy4uL2ZzLWxpc3QucHJvdmlkZXJzJztcbmltcG9ydCB7XG4gIEZzTGlzdEFic3RyYWN0Um93LFxuICBGc0xpc3RBY3Rpb24sXG4gIEZzTGlzdENvbmZpZywgRnNMaXN0UGVyc2l0YW5jZSwgRnNMaXN0U2VsZWN0aW9uQ29uZmlnLFxuICBGc0xpc3RUcmFja0J5Rm4sXG4gIEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbixcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJUGFnaW5hdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wYWdpbmF0aW9uLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcm91cEV4cGFuZE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3VwLWV4cGFuZC1ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IEZzQm9keUNvbXBvbmVudCB9IGZyb20gJy4uL2JvZHkvYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9taXplQ29sc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2N1c3RvbWl6ZS1jb2xzL2N1c3RvbWl6ZS1jb2xzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGc0Zvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZzSGVhZENvbXBvbmVudCB9IGZyb20gJy4uL2hlYWQvaGVhZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnNMaXN0TG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnNQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGc1N0YXR1c0NvbXBvbmVudCB9IGZyb20gJy4uL3N0YXR1cy9zdGF0dXMuY29tcG9uZW50JztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBHcm91cEV4cGFuZE5vdGlmaWVyU2VydmljZSxcbiAgICBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICAgUmVvcmRlckNvbnRyb2xsZXIsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTmdJZixcbiAgICBGaWx0ZXJDb21wb25lbnQsXG4gICAgRmlsdGVyU3RhdHVzQmFyRGlyZWN0aXZlLFxuICAgIEZzU3RhdHVzQ29tcG9uZW50LFxuICAgIEZzTGlzdENvbnRlbnRJbml0RGlyZWN0aXZlLFxuICAgIEZzSGVhZENvbXBvbmVudCxcbiAgICBGc0JvZHlDb21wb25lbnQsXG4gICAgRnNMaXN0RHJhZ2dhYmxlTGlzdERpcmVjdGl2ZSxcbiAgICBGc0Zvb3RlckNvbXBvbmVudCxcbiAgICBGc0xpc3RGb290ZXJEaXJlY3RpdmUsXG4gICAgRnNMaXN0TG9hZGVyQ29tcG9uZW50LFxuICAgIEZzUGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICBBc3luY1BpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWxpc3QnKSBwdWJsaWMgY2xhc3NGc0xpc3QgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnMtbGlzdC1yb3ctaGlnaGxpZ2h0JylcbiAgcHVibGljIHJvd0hvdmVySGlnaGxpZ2h0OiBib29sZWFuO1xuXG4gIEBJbnB1dCgnY29uZmlnJylcbiAgcHVibGljIHNldCBjb25maWcoY29uZmlnOiBGc0xpc3RDb25maWcpIHtcbiAgICB0aGlzLl9pbml0V2l0aENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxvYWRlckxpbmVzID0gMztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGZpbHRlcnNSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAQ29udGVudENoaWxkKEZzTGlzdEhlYWRpbmdEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIGhlYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKEZzTGlzdEhlYWRpbmdDb250YWluZXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIGhlYWRpbmdDb250YWluZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKEZzTGlzdFN1YmhlYWRpbmdEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIHN1YmhlYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKEZzQm9keUNvbXBvbmVudClcbiAgcHVibGljIGJvZHk6IEZzQm9keUNvbXBvbmVudDtcblxuICBwdWJsaWMgbGlzdDogTGlzdDtcblxuICAvLyBFdmVudCB3aWxsIGZpcmVkIGlmIGFjdGlvbiByZW1vdmU6IHRydWUgd2lsbCBjbGlja2VkXG4gIHB1YmxpYyByb3dSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgZmlyc3RMb2FkID0gdHJ1ZTtcblxuICBwcml2YXRlIF9saXN0Q29sdW1uRGlyZWN0aXZlczogUXVlcnlMaXN0PEZzTGlzdENvbHVtbkRpcmVjdGl2ZT47XG4gIHByaXZhdGUgX2ZpbHRlclJlZjogRmlsdGVyQ29tcG9uZW50O1xuICBwcml2YXRlIF9maWx0ZXJQYXJhbXNSZWFkeSA9IGZhbHNlO1xuICBwcml2YXRlIF9kZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBcbiAgQFZpZXdDaGlsZChGaWx0ZXJDb21wb25lbnQpXG4gIHB1YmxpYyBzZXQgZmlsdGVyUmVmZXJlbmNlKGNvbXBvbmVudCkge1xuICAgIHRoaXMuX2ZpbHRlclJlZiA9IGNvbXBvbmVudDtcbiAgICB0aGlzLmxpc3QuYWN0aW9ucy5zZXRGaWx0ZXJSZWYoY29tcG9uZW50KTtcbiAgICB0aGlzLl9lbWl0RmlsdGVyc1JlYWR5RXZlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29sdW1ucyB0byBjb25maWdcbiAgICogQ3JlYXRlIENvbHVtbiBNb2RlbCBpbnN0YW5jZXNcbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRnNMaXN0Q29sdW1uRGlyZWN0aXZlKVxuICBwdWJsaWMgc2V0IGNvbHVtblRlbXBsYXRlcyhsaXN0Q29sdW1uRGlyZWN0aXZlczogUXVlcnlMaXN0PEZzTGlzdENvbHVtbkRpcmVjdGl2ZT4pIHtcbiAgICB0aGlzLl9saXN0Q29sdW1uRGlyZWN0aXZlcyA9IGxpc3RDb2x1bW5EaXJlY3RpdmVzO1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMubGlzdC50cmFuZm9ybVRlbXBsYXRlc1RvQ29sdW1ucyhsaXN0Q29sdW1uRGlyZWN0aXZlcyk7XG4gICAgfVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RFbXB0eVN0YXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgc2V0IF9lbXB0eVN0YXRlVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICB0aGlzLmxpc3QuZW1wdHlTdGF0ZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIF9kaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF9kcmF3ZXJSZWYgPSBpbmplY3QoRHJhd2VyUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pOyAgXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlb3JkZXJDb250cm9sbGVyOiBSZW9yZGVyQ29udHJvbGxlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZTX0xJU1RfQ09ORklHKSBwcml2YXRlIF9jb25maWc6IEZzTGlzdENvbmZpZyxcbiAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25EaWFsb2c6IFNlbGVjdGlvbkRpYWxvZyxcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZ3JvdXBFeHBhbmROb3RpZmllcjogR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgX3BlcnNpc3RhbmNlOiBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICkgeyBcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gcmVmZXJlbmNlIGZvciBmaWx0ZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgZmlsdGVyUmVmKCk6IEZpbHRlckNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclJlZjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZ3JvdXBFbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5saXN0Lmdyb3VwRW5hYmxlZCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdyb3VwRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLmdyb3VwRW5hYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3Quc3RhdHVzICYmXG4gICAgICAodGhpcy5saXN0LnNvcnRpbmcuaXNEZWZpbmVkIHx8IHRoaXMubGlzdC5wYWdpbmcuZW5hYmxlZCkgJiZcbiAgICAgIChcbiAgICAgICAgIXRoaXMucmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCB8fFxuICAgICAgICAodGhpcy5yZW9yZGVyQ29udHJvbGxlci5lbmFibGVkICYmIHRoaXMucmVvcmRlckNvbnRyb2xsZXIuc3RhdHVzKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnaW5hdG9yVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LnBhZ2luZy5lbmFibGVkXG4gICAgICAmJiAhdGhpcy5maXJzdExvYWRcbiAgICAgICYmICF0aGlzLmxpc3QuZW1wdHlTdGF0ZUVuYWJsZWRcbiAgICAgICYmIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0NvdW50ID4gMFxuICAgICAgJiYgdGhpcy5saXN0LnBhZ2luZy5wYWdlcyA+IDE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcnNRdWVyeSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5maWx0ZXJzUXVlcnk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2luZ1N0YXRlKCk6IElQYWdpbmF0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmxpc3QucGFnaW5nLnN0YXRlO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5saXN0LmFmdGVySW5pdCkge1xuICAgICAgdGhpcy5saXN0LmFmdGVySW5pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9SZW1vdmVSb3coKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb0dyb3VwRXhwYW5kU3RhdHVzQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXN0cm95Lm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG5leHRQYWdlKCkge1xuICAgIHRoaXMubGlzdC5wYWdpbmcuZ29OZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgcHJldlBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb1ByZXYoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaXJzdFBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb0ZpcnN0KCk7XG4gIH1cblxuICBwdWJsaWMgbGFzdFBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb0xhc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5saXN0LnJlbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGdldERhdGEodHJhY2tCeT86IEZzTGlzdFRyYWNrQnlGbikge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0RGF0YSh0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNEYXRhKHRyYWNrQnk6IEZzTGlzdFRyYWNrQnlGbikge1xuICAgIHJldHVybiB0aGlzLmxpc3QuaGFzRGF0YSh0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEYXRhKFxuICAgIHJvd3M6IEZzTGlzdEFic3RyYWN0Um93IHwgRnNMaXN0QWJzdHJhY3RSb3dbXSxcbiAgICB0cmFja0J5PzogRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuLFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnVwZGF0ZURhdGEocm93cywgdHJhY2tCeSk7XG4gIH1cblxuICBwdWJsaWMgcmVwbGFjZVJvdyhcbiAgICByb3c6IEZzTGlzdEFic3RyYWN0Um93LFxuICAgIHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4sXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIucmVwbGFjZURhdGEocm93LCB0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb25Db25maWcoY29uZmlnOiBGc0xpc3RTZWxlY3Rpb25Db25maWcpIHtcbiAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0U2VsZWN0aW9uQWN0aW9ucygpIHtcbiAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLnJlc2V0QWN0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZVNlbGVjdGlvbigpIHtcbiAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLmVuYWJsZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGVTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi5kaXNhYmxlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRGF0YShkYXRhOiBGc0xpc3RBYnN0cmFjdFJvdyB8IEZzTGlzdEFic3RyYWN0Um93W10gfCBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnJlbW92ZURhdGEoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SGVhZGluZyhoZWFkaW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxpc3QuaGVhZGluZyA9IGhlYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgc2V0U3ViaGVhZGluZyhzdWJoZWFkaW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxpc3Quc3ViaGVhZGluZyA9IHN1YmhlYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgcmVvcmRlclN0YXJ0KCkge1xuICAgIHRoaXMucmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlUmVvcmRlcigpO1xuICB9XG5cbiAgcHVibGljIHJlb3JkZXJGaW5pc2goKSB7XG4gICAgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5kaXNhYmxlUmVvcmRlcigpO1xuICB9XG5cbiAgcHVibGljIHNldEFjdGlvbnMoYWN0aW9uczogRnNMaXN0QWN0aW9uW10pIHtcbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgdGhpcy5saXN0LmFjdGlvbnMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB0aGlzLmxpc3QuYWN0aW9ucy5zZXRBY3Rpb25zKGFjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJSZWFkeSgpIHtcbiAgICB0aGlzLmxpc3QuZmlsdGVyc1JlYWR5KCk7XG4gICAgdGhpcy5fZmlsdGVyUGFyYW1zUmVhZHkgPSB0cnVlO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGZvciBzcGVjaWZpYyBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBjb2x1bW5WaXNpYmlsaXR5KG5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHkoW3sgbmFtZSwgc2hvdyB9XSk7XG4gICAgLy8gdGhpcy5maWx0ZXJSZWYudXBkYXRlU29ydGluZ3ModGhpcy5saXN0LnNvcnRpbmcubWFrZVNvcnRpbmdMaXN0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGZvciBsaXN0IG9mIHNwZWNpZmljIGNvbHVtbnNcbiAgICovXG4gIHB1YmxpYyBjb2x1bW5zVmlzaWJpbGl0eShjb2x1bW5zOiB7IG5hbWU6IHN0cmluZzsgc2hvdzogYm9vbGVhbiB9W10pIHtcbiAgICB0aGlzLmxpc3QuY29sdW1ucy51cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhjb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpOiB2b2lkIHtcbiAgICBpZiAoISF0aGlzLmZpbHRlclJlZiAmJiB0aGlzLl9maWx0ZXJQYXJhbXNSZWFkeSkge1xuICAgICAgdGhpcy5maWx0ZXJzUmVhZHkuZW1pdCgpO1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpbkRpYWxvZygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9kaWFsb2dSZWYgfHwgISF0aGlzLl9kcmF3ZXJSZWY7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBjb25maWcgZm9yIGxpc3RcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFdpdGhDb25maWcoY29uZmlnOiBGc0xpc3RDb25maWcpIHtcbiAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICB0aGlzLmxpc3QuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRDb25maWc6IEZzTGlzdENvbmZpZyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW06IHRydWUsXG4gICAgICBjaGlwczogdHJ1ZSxcbiAgICAgIHBhZ2luZzoge1xuICAgICAgICBzdHJhdGVneTogUGFnaW5hdGlvblN0cmF0ZWd5Lk9mZnNldCxcbiAgICAgICAgbGltaXQ6IDI1LFxuICAgICAgfSxcbiAgICAgIG5vUmVzdWx0czoge1xuICAgICAgICBtZXNzYWdlOiAnTm8gUmVzdWx0cyBGb3VuZCcsXG4gICAgICB9LFxuICAgIH07XG4gICAgXG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gY2xvbmVEZWVwKHRoaXMuX2NvbmZpZyB8fCB7fSk7XG4gICAgY29uc3QgbGlzdENvbmZpZyA9IG1lcmdlV2l0aChkZWZhdWx0Q29uZmlnLCBnbG9iYWxDb25maWcsIGNvbmZpZywgdGhpcy5fY29uZmlnTWVyZ2VDdXN0b21pemVyKTtcblxuICAgIGlmIChsaXN0Q29uZmlnLnBlcnNpc3QgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZXN0b3JlUGVyc2lzdGFuY2UobGlzdENvbmZpZy5wZXJzaXN0KTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDdXN0b21pemVBY3Rpb24obGlzdENvbmZpZy5hY3Rpb25zKTtcblxuICAgIHRoaXMubGlzdCA9IG5ldyBMaXN0KFxuICAgICAgdGhpcy5fZWwsXG4gICAgICBsaXN0Q29uZmlnLFxuICAgICAgdGhpcy5fc2VsZWN0aW9uRGlhbG9nLFxuICAgICAgdGhpcy5fcm91dGUsXG4gICAgICB0aGlzLl9wZXJzaXN0YW5jZSxcbiAgICAgIHRoaXMuaW5EaWFsb2csXG4gICAgKTtcblxuICAgIHRoaXMucm93SG92ZXJIaWdobGlnaHQgPSB0aGlzLmxpc3Qucm93SG92ZXJIaWdobGlnaHQ7XG5cbiAgICB0aGlzLl93YWl0Rmlyc3RMb2FkKCk7XG5cbiAgICB0aGlzLnJlb3JkZXJDb250cm9sbGVyLmluaXRXaXRoQ29uZmlnKFxuICAgICAgY29uZmlnLnJlb3JkZXIsXG4gICAgICB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIsXG4gICAgICB0aGlzLmxpc3QuYWN0aW9ucyxcbiAgICAgIHRoaXMubGlzdC5zZWxlY3Rpb24sXG4gICAgKTtcblxuICAgIGlmICh0aGlzLl9saXN0Q29sdW1uRGlyZWN0aXZlcykge1xuICAgICAgdGhpcy5saXN0LnRyYW5mb3JtVGVtcGxhdGVzVG9Db2x1bW5zKHRoaXMuX2xpc3RDb2x1bW5EaXJlY3RpdmVzKTtcbiAgICB9XG4gICAgdGhpcy5fbGlzdGVuU29ydGluZ0NoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYWN0aW9uIHdpdGggY3VzdG9taXplIGZsYWcgYW5kIHJlLWRlY2xhcmUgY2xpY2sgZnVuY3Rpb24gZm9yIEN1c3RvbWl6ZUNvbHNEaWFsb2dcbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUN1c3RvbWl6ZUFjdGlvbihhY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSkge1xuICAgIGNvbnN0IGN1c3RvbWl6ZUFjdGlvbiA9IGFjdGlvbnM/LmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLmN1c3RvbWl6ZSk7XG5cbiAgICBpZiAoY3VzdG9taXplQWN0aW9uKSB7XG4gICAgICBjb25zdCBhY3Rpb25DbGlja0ZuID0gY3VzdG9taXplQWN0aW9uLmNsaWNrO1xuXG4gICAgICBjdXN0b21pemVBY3Rpb24uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb25DbGlja0ZuKSB7XG4gICAgICAgICAgYWN0aW9uQ2xpY2tGbihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RpYWxvZy5vcGVuKEN1c3RvbWl6ZUNvbHNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgIGluamVjdG9yOiB0aGlzLl9pbmplY3RvcixcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmxpc3QuY29sdW1ucy5jb2x1bW5zRm9yRGlhbG9nLFxuICAgICAgICAgICAgY2hhbmdlRm46IHRoaXMubGlzdC5jb2x1bW5zLmNoYW5nZUZuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmxpc3QuZGVzdHJveSQpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLmxpc3QuY29sdW1ucy51cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhkYXRhKTtcblxuICAgICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzb3J0aW5nIGluIGZpbHRlclxuICAgKi9cbiAgcHJpdmF0ZSBfbGlzdGVuU29ydGluZ0NoYW5nZSgpIHtcbiAgICB0aGlzLmxpc3Quc29ydGluZ1xuICAgICAgLnNvcnRpbmdDaGFuZ2VkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmxpc3QuZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzb3J0KSA9PiB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclJlZi51cGRhdGVTb3J0KHNvcnQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb1JlbW92ZVJvdygpIHtcbiAgICB0aGlzLnJvd1JlbW92ZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUoKHJvdykgPT4ge1xuICAgICAgICB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIucmVtb3ZlRGF0YShyb3cpO1xuICAgICAgICB0aGlzLmJvZHkucm93c1xuICAgICAgICAgIC5mb3JFYWNoKChib2R5Um93KSA9PiBib2R5Um93LmFjdGlvbnNVcGRhdGUoKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvR3JvdXBFeHBhbmRTdGF0dXNDaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5oYXNHcm91cHMpIHtcbiAgICAgIHRoaXMuX2dyb3VwRXhwYW5kTm90aWZpZXIuZXhwYW5kU3RhdHVzQ2hhbmdlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocm93KSA9PiB7XG4gICAgICAgICAgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnRvZ2dsZVJvd0dyb3VwKHJvdyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3dhaXRGaXJzdExvYWQoKSB7XG4gICAgdGhpcy5saXN0LmxvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gIXZhbHVlKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubGlzdC5kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlnTWVyZ2VDdXN0b21pemVyKG9ialZhbHVlOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXN0b3JlUGVyc2lzdGFuY2UocGVyc2lzdENvbmZpZzogRnNMaXN0UGVyc2l0YW5jZSkge1xuICAgIHRoaXMuX3BlcnNpc3RhbmNlLmluaXQocGVyc2lzdENvbmZpZywgdGhpcy5pbkRpYWxvZyk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZzLWxpc3QtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnaGFzLWZpbHRlcnMnOiBsaXN0LmZpbHRlckNvbmZpZz8uaXRlbXMubGVuZ3RoLFxuICAgICAgJ2hhcy1oZWFkaW5nJzogbGlzdC5oZWFkaW5nIHx8IGhlYWRpbmdUZW1wbGF0ZSxcbiAgICAgICdoYXMtc3RhdHVzJzogaGFzU3RhdHVzLFxuICAgICAgJ2hhcy1jaGlwcyc6IGxpc3QuY2hpcHMsXG4gICAgICAnaGFzLWFjdGlvbnMnOiBsaXN0LmFjdGlvbnMuaGFzQWN0aW9ucyxcbiAgICAgICdoYXMtcm93LWFjdGlvbnMtaG92ZXInOiBsaXN0LnJvd0FjdGlvbnNIb3ZlcixcbiAgICAgICdmaXJzdC1sb2FkJzogZmlyc3RMb2FkLFxuICAgICAgJ2xvYWRpbmcnOiBsaXN0LmxvYWRpbmckIHwgYXN5bmNcbiAgICB9XCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0Q29udGFpbmVyQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbGlzdENvbnRhaW5lckNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0LmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzJCB8IGFzeW5jIGFzIGxpc3REYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cImZzLWxpc3QtaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1oZWFkZXJcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ25vLXdyYXAnOiByZW9yZGVyQ29udHJvbGxlci5tYW51YWxSZW9yZGVyQWN0aXZhdGVkIHx8ICFsaXN0LmZpbHRlckNvbmZpZz8uaXRlbXMubGVuZ3RoIH1cIj5cbiAgICAgICAgQGlmIChsaXN0LmZpbHRlckNvbmZpZykge1xuICAgICAgICAgIDxmcy1maWx0ZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LWZpbHRlclwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwibGlzdC5maWx0ZXJDb25maWdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNTdGF0dXNcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzRmlsdGVyU3RhdHVzQmFyPlxuICAgICAgICAgICAgICAgIDxmcy1saXN0LXN0YXR1c1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LXN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoaWRkZW4tbW9iaWxlJzogIWxpc3Quc3RhdHVzIH1cIlxuICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICAgICAgW2xpc3RdPVwibGlzdFwiXG4gICAgICAgICAgICAgICAgICBbZmlyc3RMb2FkXT1cImZpcnN0TG9hZFwiPlxuICAgICAgICAgICAgICAgIDwvZnMtbGlzdC1zdGF0dXM+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2ZzLWZpbHRlcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZzLWxpc3QtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPCEtLSBUYWJsZSBpbXBsZW1lbnRhdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZnMtbGlzdC10YWJsZS1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlyc3RMb2FkICYmIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgIWxpc3QuZW1wdHlTdGF0ZUVuYWJsZWRcIj5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtdGFibGVcIlxuICAgICAgICAgICAgcm9sZT1cImdyaWRcIlxuICAgICAgICAgICAgW2ZzTGlzdENvbnRlbnRJbml0XT1cImxpc3QuYWZ0ZXJDb250ZW50SW5pdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdzdHlsZS1jYXJkJzogbGlzdC5zdHlsZSA9PT0gJ2NhcmQnLFxuICAgICAgICAgICAgICAnc3R5bGUtYmFzaWMnOiBsaXN0LnN0eWxlID09PSAnYmFzaWMnLFxuICAgICAgICAgICAgICAnc3R5bGUtbGluZSc6IChsaXN0LnN0eWxlIHx8ICdsaW5lJykgPT09ICdsaW5lJ1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIDx0aGVhZFxuICAgICAgICAgICAgZnMtbGlzdC1oZWFkXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtaGVhZFwiXG4gICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCJsaXN0LmNvbHVtbnMuaGFzSGVhZGVyXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImxpc3QuY29sdW1ucy50aGVhZENsYXNzXCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImxpc3QuY29sdW1ucy52aXNpYmxlQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbc29ydGluZ109XCJsaXN0LnNvcnRpbmdcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJsaXN0LnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaGFzUm93QWN0aW9uc109XCJsaXN0Lmhhc1Jvd0FjdGlvbnNcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keVxuICAgICAgICAgICAgZnMtbGlzdC1ib2R5XG4gICAgICAgICAgICBmc0xpc3REcmFnZ2FibGVMaXN0XG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtYm9keVwiXG4gICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiEhKHJlb3JkZXJDb250cm9sbGVyLnJlb3JkZXJEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgW3Jvd3NdPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgW3Jvd0FjdGlvbnNSYXddPVwibGlzdC5yb3dBY3Rpb25zUmF3XCJcbiAgICAgICAgICAgIFtncm91cEFjdGlvbnNSYXddPVwibGlzdC5ncm91cEFjdGlvbnNSYXdcIlxuICAgICAgICAgICAgW2hhc1Jvd0FjdGlvbnNdPVwibGlzdC5oYXNSb3dBY3Rpb25zXCJcbiAgICAgICAgICAgIFtyb3dFdmVudHNdPVwibGlzdC5yb3dFdmVudHNcIlxuICAgICAgICAgICAgW3Jvd0NsYXNzXT1cImxpc3Qucm93Q2xhc3NcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwibGlzdC5jb2x1bW5zLnZpc2libGVDb2x1bW5zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZXN0b3JlTW9kZV09XCJsaXN0LnJlc3RvcmVNb2RlXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwibGlzdC5zZWxlY3Rpb25cIlxuICAgICAgICAgICAgW3Jvd1JlbW92ZWRdPVwicm93UmVtb3ZlZFwiXG4gICAgICAgICAgICBbYWN0aXZlRmlsdGVyc0NvdW50XT1cImxpc3QuYWN0aXZlRmlsdGVyc0NvdW50JCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyRW5hYmxlZF09XCJyZW9yZGVyQ29udHJvbGxlci5lbmFibGVkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyUG9zaXRpb25dPVwicmVvcmRlckNvbnRyb2xsZXIucG9zaXRpb24kIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJTdHJhdGVneV09XCJyZW9yZGVyQ29udHJvbGxlci5zdHJhdGVneSQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlck11bHRpcGxlXT1cInJlb3JkZXJDb250cm9sbGVyLm11bHRpcGxlXCI+XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8dGZvb3RcbiAgICAgICAgICAgIGZzLWxpc3QtZm9vdGVyXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtZm9vdGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5jb2x1bW5zLmhhc0Zvb3RlclwiXG4gICAgICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMudmlzaWJsZUNvbHVtbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJsaXN0LnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaGFzUm93QWN0aW9uc109XCJsaXN0Lmhhc1Jvd0FjdGlvbnNcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIj5cbiAgICAgICAgICA8L3Rmb290PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZnMtbGlzdC1sb2FkZXJcbiAgICAgICAgKm5nSWY9XCJmaXJzdExvYWRcIlxuICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMuY29sdW1uc1wiXG4gICAgICAgIFtsb2FkZXJMaW5lc109XCJsb2FkZXJMaW5lc1wiPlxuICAgICAgPC9mcy1saXN0LWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZnMtbGlzdC1wYWdpbmF0aW9uXG4gICAgICBjbGFzcz1cImZzLWxpc3QtcGFnaW5hdGlvblwiXG4gICAgICBbcm93c109XCJsaXN0RGF0YVwiXG4gICAgICBbcGFnaW5hdGlvbl09XCJsaXN0LnBhZ2luZ1wiPlxuICAgIDwvZnMtbGlzdC1wYWdpbmF0aW9uPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlyc3RMb2FkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJsaXN0RGF0YS5sZW5ndGggPT09IDBcIlxuICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1uby1yZXN1bHRzLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImxpc3Qubm9SZXN1bHRzPy5tZXNzYWdlICYmICFsaXN0LmVtcHR5U3RhdGVFbmFibGVkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1uby1yZXN1bHRzXCI+XG4gICAgICAgICAge3sgbGlzdC5ub1Jlc3VsdHM/Lm1lc3NhZ2UgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0LmVtcHR5U3RhdGVFbmFibGVkXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3QuZW1wdHlTdGF0ZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -79,7 +79,7 @@ export class FsStatusComponent {
79
79
  this.paging.setLimit(limit);
80
80
  }
81
81
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
82
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsStatusComponent, isStandalone: true, selector: "fs-list-status", inputs: { list: "list", rows: "rows", firstLoad: "firstLoad" }, host: { properties: { "class.first-load": "this.firstLoad", "class.fs-skeleton-placeholder": "this.firstLoad" } }, ngImport: i0, template: "<div class=\"status\">\n <small>\n @if (paging.enabled) {\n Showing\n @if (paging.hasManyStrategy) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of\n @if (many.status === 'many') {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Calculate number of results'\">\n many\n </a>\n } @else {\n @if (many.status === 'loading') {\n <mat-spinner\n [diameter]=\"15\"\n [strokeWidth]=\"2\">\n </mat-spinner>\n } @else {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Recalculate number of results'\">\n {{ many.count | number:'1.0':'en-US' }}\n </a>\n }\n }\n } @else {\n @if (paging.records) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of \n {{ paging.records | number:'1.0':'en-US' }}\n } @else {\n 0\n }\n }\n results\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n }\n <ng-container *ngIf=\"(!paging.enabled) && paging.pageRecords > 0\">\n Showing\n <span *ngIf=\"paging.pageRecords === 1\">\n {{ paging.pageRecords }} result\n </span>\n <span *ngIf=\"paging.pageRecords > 1\">\n {{ paging.pageRecords | number:'1.0':'en-US' }} results\n </span>\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n </ng-container>\n <fs-menu\n [hidden]=\"!sorting.sortingColumn || paging.pageRecords === 0\"\n #orderColumnsMenu>\n <!-- Real sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.sortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n <ng-container *ngIf=\"column.title; else sortByTemplate\">\n {{ column.title }}\n </ng-container>\n <ng-template #sortByTemplate>\n <ng-template [ngTemplateOutlet]=\"column.headerTemplate\"></ng-template>\n </ng-template>\n </ng-template>\n </ng-template>\n <!-- Fake sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.fakeSortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n {{ column.title }}\n </ng-template>\n </ng-template>\n </fs-menu>\n <ng-template #sortedBy>\n <ng-container *ngIf=\"sorting.sortingColumn\">\n sorted by\n <ng-container *ngIf=\"sorting.sortingColumn.title; else sortByTemplate\">\n <a\n class=\"order-toggle\"\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n {{ sorting.sortingColumn.title }}\n </a>\n ,\n </ng-container>\n <ng-template #sortByTemplate>\n <a\n class=\"order-toggle\"\n r\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n <ng-template [ngTemplateOutlet]=\"sorting.sortingColumn.headerTemplate\"></ng-template>\n </a>\n ,\n </ng-template>\n <a\n class=\"order-toggle\"\n (click)=\"toggleDirection()\">\n {{ sorting.sortingColumn.fullNameDirection }}\n </a>\n </ng-container>\n </ng-template>\n </small>\n</div>\n<ng-template #limitMenu>\n <a [fsMenuTriggerFor]=\"limitsMenuTrigger\">\n {{ paging.statusLabel }}\n </a>\n <fs-menu #limitsMenuTrigger>\n <ng-template\n ngFor\n let-limit\n [ngForOf]=\"paging.limits\">\n <ng-template\n fs-menu-item\n (click)=\"setLimit(limit)\">\n {{ limit }}\n </ng-template>\n </ng-template>\n </fs-menu>\n</ng-template>", styles: [":host.hidden-mobile{display:none!important}:host.first-load .status{visibility:hidden}.order-toggle{white-space:nowrap}a{cursor:pointer}mat-spinner{display:inline-block;margin:0 2px;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FsMenuModule }, { kind: "component", type: i1.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i1.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { kind: "directive", type: i1.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsStatusComponent, isStandalone: true, selector: "fs-list-status", inputs: { list: "list", rows: "rows", firstLoad: "firstLoad" }, host: { properties: { "class.first-load": "this.firstLoad", "class.fs-skeleton-placeholder": "this.firstLoad" } }, ngImport: i0, template: "<div class=\"status\">\n <small>\n @if (paging.enabled) {\n Showing\n @if (paging.hasManyStrategy) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of\n @if (many.status === 'many') {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Calculate number of results'\">\n many\n </a>\n } @else {\n @if (many.status === 'loading') {\n <mat-spinner\n [diameter]=\"15\"\n [strokeWidth]=\"2\">\n </mat-spinner>\n } @else {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Recalculate number of results'\">\n {{ many.count | number:'1.0':'en-US' }}\n </a>\n }\n }\n } @else {\n @if (paging.records) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of \n {{ paging.records | number:'1.0':'en-US' }}\n } @else {\n 0\n }\n }\n results\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n }\n <ng-container *ngIf=\"(!paging.enabled) && paging.pageRecords > 0\">\n Showing\n <span *ngIf=\"paging.pageRecords === 1\">\n {{ paging.pageRecords }} result\n </span>\n <span *ngIf=\"paging.pageRecords > 1\">\n {{ paging.pageRecords | number:'1.0':'en-US' }} results\n </span>\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n </ng-container>\n <fs-menu\n [hidden]=\"!sorting.sortingColumn || paging.pageRecords === 0\"\n #orderColumnsMenu>\n <!-- Real sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.sortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n <ng-container *ngIf=\"column.title; else sortByTemplate\">\n {{ column.title }}\n </ng-container>\n <ng-template #sortByTemplate>\n <ng-template [ngTemplateOutlet]=\"column.headerTemplate\"></ng-template>\n </ng-template>\n </ng-template>\n </ng-template>\n <!-- Fake sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.fakeSortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n {{ column.title }}\n </ng-template>\n </ng-template>\n </fs-menu>\n <ng-template #sortedBy>\n <ng-container *ngIf=\"sorting.sortingColumn\">\n sorted by\n <ng-container *ngIf=\"sorting.sortingColumn.title; else sortByTemplate\">\n <a\n class=\"order-toggle\"\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n {{ sorting.sortingColumn.title }}\n </a>\n ,\n </ng-container>\n <ng-template #sortByTemplate>\n <a\n class=\"order-toggle\"\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n <ng-template [ngTemplateOutlet]=\"sorting.sortingColumn.headerTemplate\"></ng-template>\n </a>\n ,\n </ng-template>\n <a\n class=\"order-toggle\"\n (click)=\"toggleDirection()\">\n {{ sorting.sortingColumn.fullNameDirection }}\n </a>\n </ng-container>\n </ng-template>\n </small>\n</div>\n<ng-template #limitMenu>\n <a [fsMenuTriggerFor]=\"limitsMenuTrigger\">\n {{ paging.statusLabel }}\n </a>\n <fs-menu #limitsMenuTrigger>\n <ng-template\n ngFor\n let-limit\n [ngForOf]=\"paging.limits\">\n <ng-template\n fs-menu-item\n (click)=\"setLimit(limit)\">\n {{ limit }}\n </ng-template>\n </ng-template>\n </fs-menu>\n</ng-template>", styles: [":host.hidden-mobile{display:none!important}:host.first-load .status{visibility:hidden}.order-toggle{white-space:nowrap}a{cursor:pointer}mat-spinner{display:inline-block;margin:0 2px;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FsMenuModule }, { kind: "component", type: i1.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i1.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { kind: "directive", type: i1.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
83
83
  }
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsStatusComponent, decorators: [{
85
85
  type: Component,
@@ -91,7 +91,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
91
91
  FsMenuModule,
92
92
  NgFor,
93
93
  DecimalPipe,
94
- ], template: "<div class=\"status\">\n <small>\n @if (paging.enabled) {\n Showing\n @if (paging.hasManyStrategy) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of\n @if (many.status === 'many') {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Calculate number of results'\">\n many\n </a>\n } @else {\n @if (many.status === 'loading') {\n <mat-spinner\n [diameter]=\"15\"\n [strokeWidth]=\"2\">\n </mat-spinner>\n } @else {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Recalculate number of results'\">\n {{ many.count | number:'1.0':'en-US' }}\n </a>\n }\n }\n } @else {\n @if (paging.records) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of \n {{ paging.records | number:'1.0':'en-US' }}\n } @else {\n 0\n }\n }\n results\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n }\n <ng-container *ngIf=\"(!paging.enabled) && paging.pageRecords > 0\">\n Showing\n <span *ngIf=\"paging.pageRecords === 1\">\n {{ paging.pageRecords }} result\n </span>\n <span *ngIf=\"paging.pageRecords > 1\">\n {{ paging.pageRecords | number:'1.0':'en-US' }} results\n </span>\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n </ng-container>\n <fs-menu\n [hidden]=\"!sorting.sortingColumn || paging.pageRecords === 0\"\n #orderColumnsMenu>\n <!-- Real sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.sortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n <ng-container *ngIf=\"column.title; else sortByTemplate\">\n {{ column.title }}\n </ng-container>\n <ng-template #sortByTemplate>\n <ng-template [ngTemplateOutlet]=\"column.headerTemplate\"></ng-template>\n </ng-template>\n </ng-template>\n </ng-template>\n <!-- Fake sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.fakeSortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n {{ column.title }}\n </ng-template>\n </ng-template>\n </fs-menu>\n <ng-template #sortedBy>\n <ng-container *ngIf=\"sorting.sortingColumn\">\n sorted by\n <ng-container *ngIf=\"sorting.sortingColumn.title; else sortByTemplate\">\n <a\n class=\"order-toggle\"\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n {{ sorting.sortingColumn.title }}\n </a>\n ,\n </ng-container>\n <ng-template #sortByTemplate>\n <a\n class=\"order-toggle\"\n r\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n <ng-template [ngTemplateOutlet]=\"sorting.sortingColumn.headerTemplate\"></ng-template>\n </a>\n ,\n </ng-template>\n <a\n class=\"order-toggle\"\n (click)=\"toggleDirection()\">\n {{ sorting.sortingColumn.fullNameDirection }}\n </a>\n </ng-container>\n </ng-template>\n </small>\n</div>\n<ng-template #limitMenu>\n <a [fsMenuTriggerFor]=\"limitsMenuTrigger\">\n {{ paging.statusLabel }}\n </a>\n <fs-menu #limitsMenuTrigger>\n <ng-template\n ngFor\n let-limit\n [ngForOf]=\"paging.limits\">\n <ng-template\n fs-menu-item\n (click)=\"setLimit(limit)\">\n {{ limit }}\n </ng-template>\n </ng-template>\n </fs-menu>\n</ng-template>", styles: [":host.hidden-mobile{display:none!important}:host.first-load .status{visibility:hidden}.order-toggle{white-space:nowrap}a{cursor:pointer}mat-spinner{display:inline-block;margin:0 2px;vertical-align:middle}\n"] }]
94
+ ], template: "<div class=\"status\">\n <small>\n @if (paging.enabled) {\n Showing\n @if (paging.hasManyStrategy) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of\n @if (many.status === 'many') {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Calculate number of results'\">\n many\n </a>\n } @else {\n @if (many.status === 'loading') {\n <mat-spinner\n [diameter]=\"15\"\n [strokeWidth]=\"2\">\n </mat-spinner>\n } @else {\n <a\n (click)=\"manyClick()\"\n [matTooltip]=\"'Recalculate number of results'\">\n {{ many.count | number:'1.0':'en-US' }}\n </a>\n }\n }\n } @else {\n @if (paging.records) {\n <ng-container [ngTemplateOutlet]=\"limitMenu\"></ng-container>\n of \n {{ paging.records | number:'1.0':'en-US' }}\n } @else {\n 0\n }\n }\n results\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n }\n <ng-container *ngIf=\"(!paging.enabled) && paging.pageRecords > 0\">\n Showing\n <span *ngIf=\"paging.pageRecords === 1\">\n {{ paging.pageRecords }} result\n </span>\n <span *ngIf=\"paging.pageRecords > 1\">\n {{ paging.pageRecords | number:'1.0':'en-US' }} results\n </span>\n <ng-container *ngTemplateOutlet=\"sortedBy\"></ng-container>\n </ng-container>\n <fs-menu\n [hidden]=\"!sorting.sortingColumn || paging.pageRecords === 0\"\n #orderColumnsMenu>\n <!-- Real sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.sortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n <ng-container *ngIf=\"column.title; else sortByTemplate\">\n {{ column.title }}\n </ng-container>\n <ng-template #sortByTemplate>\n <ng-template [ngTemplateOutlet]=\"column.headerTemplate\"></ng-template>\n </ng-template>\n </ng-template>\n </ng-template>\n <!-- Fake sorting columns -->\n <ng-template\n ngFor\n let-column\n [ngForOf]=\"sorting.fakeSortingColumns\">\n <ng-template\n fs-menu-item\n (click)=\"setSortableColumn(column)\">\n {{ column.title }}\n </ng-template>\n </ng-template>\n </fs-menu>\n <ng-template #sortedBy>\n <ng-container *ngIf=\"sorting.sortingColumn\">\n sorted by\n <ng-container *ngIf=\"sorting.sortingColumn.title; else sortByTemplate\">\n <a\n class=\"order-toggle\"\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n {{ sorting.sortingColumn.title }}\n </a>\n ,\n </ng-container>\n <ng-template #sortByTemplate>\n <a\n class=\"order-toggle\"\n [fsMenuTriggerFor]=\"orderColumnsMenu\">\n <ng-template [ngTemplateOutlet]=\"sorting.sortingColumn.headerTemplate\"></ng-template>\n </a>\n ,\n </ng-template>\n <a\n class=\"order-toggle\"\n (click)=\"toggleDirection()\">\n {{ sorting.sortingColumn.fullNameDirection }}\n </a>\n </ng-container>\n </ng-template>\n </small>\n</div>\n<ng-template #limitMenu>\n <a [fsMenuTriggerFor]=\"limitsMenuTrigger\">\n {{ paging.statusLabel }}\n </a>\n <fs-menu #limitsMenuTrigger>\n <ng-template\n ngFor\n let-limit\n [ngForOf]=\"paging.limits\">\n <ng-template\n fs-menu-item\n (click)=\"setLimit(limit)\">\n {{ limit }}\n </ng-template>\n </ng-template>\n </fs-menu>\n</ng-template>", styles: [":host.hidden-mobile{display:none!important}:host.first-load .status{visibility:hidden}.order-toggle{white-space:nowrap}a{cursor:pointer}mat-spinner{display:inline-block;margin:0 2px;vertical-align:middle}\n"] }]
95
95
  }], propDecorators: { list: [{
96
96
  type: Input
97
97
  }], rows: [{
@@ -105,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
105
105
  type: HostBinding,
106
106
  args: ['class.fs-skeleton-placeholder']
107
107
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9zdGF0dXMvc3RhdHVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9zdGF0dXMvc3RhdHVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQW9CaEQsTUFBTSxPQUFPLGlCQUFpQjtJQUVaLElBQUksQ0FBTztJQUNYLElBQUksQ0FBQztJQUtkLFNBQVMsQ0FBVTtJQUVuQixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUN4QyxNQUFNLENBQXVCO0lBQzdCLE9BQU8sQ0FB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QU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFTSxRQUFRLENBQUMsS0FBSztRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO3VHQTVGVSxpQkFBaUI7MkZBQWpCLGlCQUFpQiw2UEMxQzlCLDIySEE2SGMsd1FENUZOLGdCQUFnQixvSkFDaEIsVUFBVSxpUkFDVixrQkFBa0IsK0tBQ2xCLElBQUksNEZBQ0osWUFBWSx3WkFDWixLQUFLLDhHQUNMLFdBQVc7OzJGQUdOLGlCQUFpQjtrQkFqQjdCLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0sdUJBQzFCLElBQUksY0FDYixJQUFJLFdBQ1A7d0JBQ0wsZ0JBQWdCO3dCQUNoQixVQUFVO3dCQUNWLGtCQUFrQjt3QkFDbEIsSUFBSTt3QkFDSixZQUFZO3dCQUNaLEtBQUs7d0JBQ0wsV0FBVztxQkFDZDs4QkFJYSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBS0MsU0FBUztzQkFIZixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQjs7c0JBQzlCLFdBQVc7dUJBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvbGlzdC1jb250cm9sbGVyJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9wYWdpbmF0aW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgU29ydGluZ0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3NvcnRpbmctY29udHJvbGxlcic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0ZvciwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLWxpc3Qtc3RhdHVzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RhdHVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdGF0dXMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiB0cnVlLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBNYXRUb29sdGlwLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXIsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEZzTWVudU1vZHVsZSxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIERlY2ltYWxQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzU3RhdHVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBsaXN0OiBMaXN0O1xuICBASW5wdXQoKSBwdWJsaWMgcm93cztcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpcnN0LWxvYWQnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLXNrZWxldG9uLXBsYWNlaG9sZGVyJylcbiAgcHVibGljIGZpcnN0TG9hZDogYm9vbGVhbjtcbiAgXG4gIHB1YmxpYyBQYWdpbmF0aW9uU3RyYXRlZ3kgPSBQYWdpbmF0aW9uU3RyYXRlZ3k7XG4gIHB1YmxpYyBwYWdpbmc6IFBhZ2luYXRpb25Db250cm9sbGVyO1xuICBwdWJsaWMgc29ydGluZzogU29ydGluZ0NvbnRyb2xsZXI7XG4gIHB1YmxpYyBtYW55OiB7XG4gICAgc3RhdHVzOiAnbWFueScgfCAnbG9hZGluZycgfCAnbG9hZGVkJztcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIH0gPSB7IFxuICAgICAgc3RhdHVzOiAnbWFueScsXG4gICAgICBjb3VudDogMCxcbiAgICB9O1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhZ2luZyA9IHRoaXMubGlzdC5wYWdpbmc7XG4gICAgdGhpcy5zb3J0aW5nID0gdGhpcy5saXN0LnNvcnRpbmc7XG4gICAgdGhpcy5zb3J0aW5nLnNvcnRpbmdDaGFuZ2VkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMubGlzdC5maWx0ZXJzUXVlcnkkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ21hbnknO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1hbnlDbGljaygpIHtcbiAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgIHRoaXMubGlzdC5mZXRjaFJlbW90ZSh7XG4gICAgICAuLi50aGlzLmxpc3QuZmlsdGVyc1F1ZXJ5LFxuICAgICAgb2Zmc2V0OiAwLFxuICAgICAgbGltaXQ6IDAsXG4gICAgICByZWNvcmRDb3VudDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLm1hbnkuY291bnQgPSByZXNwb25zZS5wYWdpbmc/LnJlY29yZHMgfHwgMDtcbiAgICAgICAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ2xvYWRlZCc7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ21hbnknO1xuICAgICAgICAgIHRoaXMubWFueS5jb3VudCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4uZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnREaXJlY3Rpb24oU29ydGluZ0RpcmVjdGlvbi5kZXNjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnREaXJlY3Rpb24oU29ydGluZ0RpcmVjdGlvbi5hc2MpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTb3J0YWJsZUNvbHVtbihjb2x1bW4pIHtcbiAgICBpZiAodGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4gIT09IGNvbHVtbikge1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnRCeShjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRMaW1pdChsaW1pdCkge1xuICAgIHRoaXMucGFnaW5nLnNldExpbWl0KGxpbWl0KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInN0YXR1c1wiPlxuICA8c21hbGw+XG4gICAgQGlmIChwYWdpbmcuZW5hYmxlZCkge1xuICAgICAgU2hvd2luZ1xuICAgICAgQGlmIChwYWdpbmcuaGFzTWFueVN0cmF0ZWd5KSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGltaXRNZW51XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIG9mXG4gICAgICAgIEBpZiAobWFueS5zdGF0dXMgPT09ICdtYW55Jykge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIChjbGljayk9XCJtYW55Q2xpY2soKVwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidDYWxjdWxhdGUgbnVtYmVyIG9mIHJlc3VsdHMnXCI+XG4gICAgICAgICAgICBtYW55XG4gICAgICAgICAgPC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKG1hbnkuc3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMTVcIlxuICAgICAgICAgICAgICBbc3Ryb2tlV2lkdGhdPVwiMlwiPlxuICAgICAgICAgICAgPC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1hbnlDbGljaygpXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInUmVjYWxjdWxhdGUgbnVtYmVyIG9mIHJlc3VsdHMnXCI+XG4gICAgICAgICAgICAgIHt7IG1hbnkuY291bnQgfCBudW1iZXI6JzEuMCc6J2VuLVVTJyB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAocGFnaW5nLnJlY29yZHMpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpbWl0TWVudVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIG9mICAgICAgXG4gICAgICAgICAge3sgcGFnaW5nLnJlY29yZHMgfCBudW1iZXI6JzEuMCc6J2VuLVVTJyB9fVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdHNcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0ZWRCeVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFwYWdpbmcuZW5hYmxlZCkgJiYgcGFnaW5nLnBhZ2VSZWNvcmRzID4gMFwiPlxuICAgICAgU2hvd2luZ1xuICAgICAgPHNwYW4gKm5nSWY9XCJwYWdpbmcucGFnZVJlY29yZHMgPT09IDFcIj5cbiAgICAgICAge3sgcGFnaW5nLnBhZ2VSZWNvcmRzIH19IHJlc3VsdFxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJwYWdpbmcucGFnZVJlY29yZHMgPiAxXCI+XG4gICAgICAgIHt7IHBhZ2luZy5wYWdlUmVjb3JkcyB8IG51bWJlcjonMS4wJzonZW4tVVMnIH19IHJlc3VsdHNcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0ZWRCeVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxmcy1tZW51XG4gICAgICAgIFtoaWRkZW5dPVwiIXNvcnRpbmcuc29ydGluZ0NvbHVtbiB8fCBwYWdpbmcucGFnZVJlY29yZHMgPT09IDBcIlxuICAgICAgICAjb3JkZXJDb2x1bW5zTWVudT5cbiAgICAgIDwhLS0gUmVhbCBzb3J0aW5nIGNvbHVtbnMgLS0+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBuZ0ZvclxuICAgICAgICAgIGxldC1jb2x1bW5cbiAgICAgICAgICBbbmdGb3JPZl09XCJzb3J0aW5nLnNvcnRpbmdDb2x1bW5zXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0U29ydGFibGVDb2x1bW4oY29sdW1uKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udGl0bGU7IGVsc2Ugc29ydEJ5VGVtcGxhdGVcIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29ydEJ5VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwhLS0gRmFrZSBzb3J0aW5nIGNvbHVtbnMgLS0+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBuZ0ZvclxuICAgICAgICAgIGxldC1jb2x1bW5cbiAgICAgICAgICBbbmdGb3JPZl09XCJzb3J0aW5nLmZha2VTb3J0aW5nQ29sdW1uc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cInNldFNvcnRhYmxlQ29sdW1uKGNvbHVtbilcIj5cbiAgICAgICAgICB7eyBjb2x1bW4udGl0bGUgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9mcy1tZW51PlxuICAgIDxuZy10ZW1wbGF0ZSAjc29ydGVkQnk+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydGluZy5zb3J0aW5nQ29sdW1uXCI+XG4gICAgICAgIHNvcnRlZCBieVxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydGluZy5zb3J0aW5nQ29sdW1uLnRpdGxlOyBlbHNlIHNvcnRCeVRlbXBsYXRlXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJvcmRlci10b2dnbGVcIlxuICAgICAgICAgICAgICBbZnNNZW51VHJpZ2dlckZvcl09XCJvcmRlckNvbHVtbnNNZW51XCI+XG4gICAgICAgICAgICB7eyBzb3J0aW5nLnNvcnRpbmdDb2x1bW4udGl0bGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgLFxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzb3J0QnlUZW1wbGF0ZT5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cIm9yZGVyLXRvZ2dsZVwiXG4gICAgICAgICAgICAgIHJcbiAgICAgICAgICAgICAgW2ZzTWVudVRyaWdnZXJGb3JdPVwib3JkZXJDb2x1bW5zTWVudVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNvcnRpbmcuc29ydGluZ0NvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgICxcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwib3JkZXItdG9nZ2xlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEaXJlY3Rpb24oKVwiPlxuICAgICAgICAgIHt7IHNvcnRpbmcuc29ydGluZ0NvbHVtbi5mdWxsTmFtZURpcmVjdGlvbiB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3NtYWxsPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2xpbWl0TWVudT5cbiAgPGEgW2ZzTWVudVRyaWdnZXJGb3JdPVwibGltaXRzTWVudVRyaWdnZXJcIj5cbiAgICB7eyBwYWdpbmcuc3RhdHVzTGFiZWwgfX1cbiAgPC9hPlxuICA8ZnMtbWVudSAjbGltaXRzTWVudVRyaWdnZXI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIG5nRm9yXG4gICAgICAgIGxldC1saW1pdFxuICAgICAgICBbbmdGb3JPZl09XCJwYWdpbmcubGltaXRzXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAoY2xpY2spPVwic2V0TGltaXQobGltaXQpXCI+XG4gICAgICAgIHt7IGxpbWl0IH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbWVudT5cbjwvbmctdGVtcGxhdGU+Il19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9zdGF0dXMvc3RhdHVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9zdGF0dXMvc3RhdHVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQW9CaEQsTUFBTSxPQUFPLGlCQUFpQjtJQUVaLElBQUksQ0FBTztJQUNYLElBQUksQ0FBQztJQUtkLFNBQVMsQ0FBVTtJQUVuQixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUN4QyxNQUFNLENBQXVCO0lBQzdCLE9BQU8sQ0FB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QU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFTSxRQUFRLENBQUMsS0FBSztRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO3VHQTVGVSxpQkFBaUI7MkZBQWpCLGlCQUFpQiw2UEMxQzlCLDAxSEE0SGMsd1FEM0ZOLGdCQUFnQixvSkFDaEIsVUFBVSxpUkFDVixrQkFBa0IsK0tBQ2xCLElBQUksNEZBQ0osWUFBWSx3WkFDWixLQUFLLDhHQUNMLFdBQVc7OzJGQUdOLGlCQUFpQjtrQkFqQjdCLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0sdUJBQzFCLElBQUksY0FDYixJQUFJLFdBQ1A7d0JBQ0wsZ0JBQWdCO3dCQUNoQixVQUFVO3dCQUNWLGtCQUFrQjt3QkFDbEIsSUFBSTt3QkFDSixZQUFZO3dCQUNaLEtBQUs7d0JBQ0wsV0FBVztxQkFDZDs4QkFJYSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBS0MsU0FBUztzQkFIZixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQjs7c0JBQzlCLFdBQVc7dUJBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvbGlzdC1jb250cm9sbGVyJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9wYWdpbmF0aW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgU29ydGluZ0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3NvcnRpbmctY29udHJvbGxlcic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0ZvciwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLWxpc3Qtc3RhdHVzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RhdHVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdGF0dXMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiB0cnVlLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBNYXRUb29sdGlwLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXIsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEZzTWVudU1vZHVsZSxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIERlY2ltYWxQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzU3RhdHVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBsaXN0OiBMaXN0O1xuICBASW5wdXQoKSBwdWJsaWMgcm93cztcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpcnN0LWxvYWQnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLXNrZWxldG9uLXBsYWNlaG9sZGVyJylcbiAgcHVibGljIGZpcnN0TG9hZDogYm9vbGVhbjtcbiAgXG4gIHB1YmxpYyBQYWdpbmF0aW9uU3RyYXRlZ3kgPSBQYWdpbmF0aW9uU3RyYXRlZ3k7XG4gIHB1YmxpYyBwYWdpbmc6IFBhZ2luYXRpb25Db250cm9sbGVyO1xuICBwdWJsaWMgc29ydGluZzogU29ydGluZ0NvbnRyb2xsZXI7XG4gIHB1YmxpYyBtYW55OiB7XG4gICAgc3RhdHVzOiAnbWFueScgfCAnbG9hZGluZycgfCAnbG9hZGVkJztcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIH0gPSB7IFxuICAgICAgc3RhdHVzOiAnbWFueScsXG4gICAgICBjb3VudDogMCxcbiAgICB9O1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhZ2luZyA9IHRoaXMubGlzdC5wYWdpbmc7XG4gICAgdGhpcy5zb3J0aW5nID0gdGhpcy5saXN0LnNvcnRpbmc7XG4gICAgdGhpcy5zb3J0aW5nLnNvcnRpbmdDaGFuZ2VkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMubGlzdC5maWx0ZXJzUXVlcnkkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ21hbnknO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1hbnlDbGljaygpIHtcbiAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgIHRoaXMubGlzdC5mZXRjaFJlbW90ZSh7XG4gICAgICAuLi50aGlzLmxpc3QuZmlsdGVyc1F1ZXJ5LFxuICAgICAgb2Zmc2V0OiAwLFxuICAgICAgbGltaXQ6IDAsXG4gICAgICByZWNvcmRDb3VudDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLm1hbnkuY291bnQgPSByZXNwb25zZS5wYWdpbmc/LnJlY29yZHMgfHwgMDtcbiAgICAgICAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ2xvYWRlZCc7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hbnkuc3RhdHVzID0gJ21hbnknO1xuICAgICAgICAgIHRoaXMubWFueS5jb3VudCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4uZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnREaXJlY3Rpb24oU29ydGluZ0RpcmVjdGlvbi5kZXNjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnREaXJlY3Rpb24oU29ydGluZ0RpcmVjdGlvbi5hc2MpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTb3J0YWJsZUNvbHVtbihjb2x1bW4pIHtcbiAgICBpZiAodGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4gIT09IGNvbHVtbikge1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnRCeShjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRMaW1pdChsaW1pdCkge1xuICAgIHRoaXMucGFnaW5nLnNldExpbWl0KGxpbWl0KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInN0YXR1c1wiPlxuICA8c21hbGw+XG4gICAgQGlmIChwYWdpbmcuZW5hYmxlZCkge1xuICAgICAgU2hvd2luZ1xuICAgICAgQGlmIChwYWdpbmcuaGFzTWFueVN0cmF0ZWd5KSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGltaXRNZW51XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIG9mXG4gICAgICAgIEBpZiAobWFueS5zdGF0dXMgPT09ICdtYW55Jykge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIChjbGljayk9XCJtYW55Q2xpY2soKVwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidDYWxjdWxhdGUgbnVtYmVyIG9mIHJlc3VsdHMnXCI+XG4gICAgICAgICAgICBtYW55XG4gICAgICAgICAgPC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKG1hbnkuc3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMTVcIlxuICAgICAgICAgICAgICBbc3Ryb2tlV2lkdGhdPVwiMlwiPlxuICAgICAgICAgICAgPC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1hbnlDbGljaygpXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInUmVjYWxjdWxhdGUgbnVtYmVyIG9mIHJlc3VsdHMnXCI+XG4gICAgICAgICAgICAgIHt7IG1hbnkuY291bnQgfCBudW1iZXI6JzEuMCc6J2VuLVVTJyB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAocGFnaW5nLnJlY29yZHMpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpbWl0TWVudVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIG9mICAgICAgXG4gICAgICAgICAge3sgcGFnaW5nLnJlY29yZHMgfCBudW1iZXI6JzEuMCc6J2VuLVVTJyB9fVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdHNcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0ZWRCeVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFwYWdpbmcuZW5hYmxlZCkgJiYgcGFnaW5nLnBhZ2VSZWNvcmRzID4gMFwiPlxuICAgICAgU2hvd2luZ1xuICAgICAgPHNwYW4gKm5nSWY9XCJwYWdpbmcucGFnZVJlY29yZHMgPT09IDFcIj5cbiAgICAgICAge3sgcGFnaW5nLnBhZ2VSZWNvcmRzIH19IHJlc3VsdFxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJwYWdpbmcucGFnZVJlY29yZHMgPiAxXCI+XG4gICAgICAgIHt7IHBhZ2luZy5wYWdlUmVjb3JkcyB8IG51bWJlcjonMS4wJzonZW4tVVMnIH19IHJlc3VsdHNcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0ZWRCeVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxmcy1tZW51XG4gICAgICAgIFtoaWRkZW5dPVwiIXNvcnRpbmcuc29ydGluZ0NvbHVtbiB8fCBwYWdpbmcucGFnZVJlY29yZHMgPT09IDBcIlxuICAgICAgICAjb3JkZXJDb2x1bW5zTWVudT5cbiAgICAgIDwhLS0gUmVhbCBzb3J0aW5nIGNvbHVtbnMgLS0+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBuZ0ZvclxuICAgICAgICAgIGxldC1jb2x1bW5cbiAgICAgICAgICBbbmdGb3JPZl09XCJzb3J0aW5nLnNvcnRpbmdDb2x1bW5zXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0U29ydGFibGVDb2x1bW4oY29sdW1uKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udGl0bGU7IGVsc2Ugc29ydEJ5VGVtcGxhdGVcIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29ydEJ5VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwhLS0gRmFrZSBzb3J0aW5nIGNvbHVtbnMgLS0+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBuZ0ZvclxuICAgICAgICAgIGxldC1jb2x1bW5cbiAgICAgICAgICBbbmdGb3JPZl09XCJzb3J0aW5nLmZha2VTb3J0aW5nQ29sdW1uc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cInNldFNvcnRhYmxlQ29sdW1uKGNvbHVtbilcIj5cbiAgICAgICAgICB7eyBjb2x1bW4udGl0bGUgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9mcy1tZW51PlxuICAgIDxuZy10ZW1wbGF0ZSAjc29ydGVkQnk+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydGluZy5zb3J0aW5nQ29sdW1uXCI+XG4gICAgICAgIHNvcnRlZCBieVxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydGluZy5zb3J0aW5nQ29sdW1uLnRpdGxlOyBlbHNlIHNvcnRCeVRlbXBsYXRlXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJvcmRlci10b2dnbGVcIlxuICAgICAgICAgICAgICBbZnNNZW51VHJpZ2dlckZvcl09XCJvcmRlckNvbHVtbnNNZW51XCI+XG4gICAgICAgICAgICB7eyBzb3J0aW5nLnNvcnRpbmdDb2x1bW4udGl0bGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgLFxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzb3J0QnlUZW1wbGF0ZT5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cIm9yZGVyLXRvZ2dsZVwiXG4gICAgICAgICAgICAgIFtmc01lbnVUcmlnZ2VyRm9yXT1cIm9yZGVyQ29sdW1uc01lbnVcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzb3J0aW5nLnNvcnRpbmdDb2x1bW4uaGVhZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICAsXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIm9yZGVyLXRvZ2dsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGlyZWN0aW9uKClcIj5cbiAgICAgICAgICB7eyBzb3J0aW5nLnNvcnRpbmdDb2x1bW4uZnVsbE5hbWVEaXJlY3Rpb24gfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9zbWFsbD5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsaW1pdE1lbnU+XG4gIDxhIFtmc01lbnVUcmlnZ2VyRm9yXT1cImxpbWl0c01lbnVUcmlnZ2VyXCI+XG4gICAge3sgcGFnaW5nLnN0YXR1c0xhYmVsIH19XG4gIDwvYT5cbiAgPGZzLW1lbnUgI2xpbWl0c01lbnVUcmlnZ2VyPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBuZ0ZvclxuICAgICAgICBsZXQtbGltaXRcbiAgICAgICAgW25nRm9yT2ZdPVwicGFnaW5nLmxpbWl0c1wiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cInNldExpbWl0KGxpbWl0KVwiPlxuICAgICAgICB7eyBsaW1pdCB9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLW1lbnU+XG48L25nLXRlbXBsYXRlPiJdfQ==