@onecx/angular-accelerator 5.22.2 → 5.23.1

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.
Files changed (34) hide show
  1. package/assets/i18n/de.json +22 -0
  2. package/assets/i18n/en.json +22 -0
  3. package/esm2022/index.mjs +4 -1
  4. package/esm2022/lib/angular-accelerator-primeng.module.mjs +22 -1
  5. package/esm2022/lib/angular-accelerator.module.mjs +8 -3
  6. package/esm2022/lib/components/data-table/data-table.component.mjs +8 -15
  7. package/esm2022/lib/components/data-view/data-view.component.mjs +1 -1
  8. package/esm2022/lib/components/filter-view/filter-view.component.mjs +252 -0
  9. package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +25 -3
  10. package/esm2022/lib/directives/if-breakpoint.directive.mjs +12 -4
  11. package/esm2022/lib/model/filter.model.mjs +1 -1
  12. package/esm2022/lib/utils/filter.utils.mjs +6 -0
  13. package/esm2022/lib/utils/template.utils.mjs +11 -0
  14. package/esm2022/testing/data-table.harness.mjs +8 -2
  15. package/esm2022/testing/filter-view.harness.mjs +18 -0
  16. package/esm2022/testing/index.mjs +2 -1
  17. package/fesm2022/onecx-angular-accelerator-testing.mjs +23 -2
  18. package/fesm2022/onecx-angular-accelerator-testing.mjs.map +1 -1
  19. package/fesm2022/onecx-angular-accelerator.mjs +328 -33
  20. package/fesm2022/onecx-angular-accelerator.mjs.map +1 -1
  21. package/index.d.ts +3 -0
  22. package/lib/angular-accelerator-primeng.module.d.ts +19 -16
  23. package/lib/angular-accelerator.module.d.ts +8 -7
  24. package/lib/components/data-table/data-table.component.d.ts +4 -2
  25. package/lib/components/filter-view/filter-view.component.d.ts +81 -0
  26. package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +14 -2
  27. package/lib/directives/if-breakpoint.directive.d.ts +3 -1
  28. package/lib/model/filter.model.d.ts +3 -0
  29. package/lib/utils/filter.utils.d.ts +2 -0
  30. package/lib/utils/template.utils.d.ts +2 -0
  31. package/package.json +1 -1
  32. package/testing/data-table.harness.d.ts +6 -1
  33. package/testing/filter-view.harness.d.ts +12 -0
  34. package/testing/index.d.ts +1 -0
@@ -4,6 +4,7 @@ import { orderAndMergeValuesByTimestamp } from '../../utils/rxjs-utils';
4
4
  import { PrimeTemplate } from 'primeng/api';
5
5
  import { SlotService } from '@onecx/angular-remote-components';
6
6
  import { DataViewComponent } from '../data-view/data-view.component';
7
+ import { limit } from '../../utils/filter.utils';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@onecx/angular-remote-components";
9
10
  import * as i2 from "@angular/common";
@@ -14,6 +15,7 @@ import * as i6 from "../data-layout-selection/data-layout-selection.component";
14
15
  import * as i7 from "../data-list-grid-sorting/data-list-grid-sorting.component";
15
16
  import * as i8 from "../data-view/data-view.component";
16
17
  import * as i9 from "../../directives/if-permission.directive";
18
+ import * as i10 from "../filter-view/filter-view.component";
17
19
  export class InteractiveDataViewComponent {
18
20
  set dataView(ref) {
19
21
  this._dataViewComponent = ref;
@@ -152,6 +154,7 @@ export class InteractiveDataViewComponent {
152
154
  this.dataLayoutComponentState$ = new ReplaySubject(1);
153
155
  this.dataListGridSortingComponentState$ = new ReplaySubject(1);
154
156
  this.dataViewComponentState$ = new ReplaySubject(1);
157
+ this.filterViewComponentState$ = new ReplaySubject(1);
155
158
  this.tableAllowSelectAll = true;
156
159
  this.name = 'Data';
157
160
  this.subtitleLineIds = [];
@@ -178,6 +181,12 @@ export class InteractiveDataViewComponent {
178
181
  this.additionalActions = [];
179
182
  this.listGridPaginator = true;
180
183
  this.tablePaginator = true;
184
+ this.disableFilterView = true;
185
+ this.filterViewDisplayMode = 'button';
186
+ this.filterViewChipStyleClass = '';
187
+ this.filterViewTableStyle = { 'max-height': '50vh' };
188
+ this.filterViewPanelStyle = { 'max-width': '90%' };
189
+ this.selectDisplayedChips = (filters) => limit(filters, 3, { reverse: true });
181
190
  this.page = 0;
182
191
  this.selectedRows = [];
183
192
  this.displayedColumnKeys$ = new BehaviorSubject([]);
@@ -275,6 +284,7 @@ export class InteractiveDataViewComponent {
275
284
  this.dataLayoutComponentState$.pipe(timestamp()),
276
285
  dataListGridSortingComponentState$.pipe(timestamp()),
277
286
  this.dataViewComponentState$.pipe(timestamp()),
287
+ this.filterViewComponentState$.pipe(timestamp()),
278
288
  ])
279
289
  .pipe(map((componentStates) => {
280
290
  return orderAndMergeValuesByTimestamp(componentStates);
@@ -477,11 +487,11 @@ export class InteractiveDataViewComponent {
477
487
  this.pageSizeChanged.emit(event);
478
488
  }
479
489
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: InteractiveDataViewComponent, deps: [{ token: i1.SlotService }], target: i0.ɵɵFactoryTarget.Component }); }
480
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: InteractiveDataViewComponent, selector: "ocx-interactive-data-view", inputs: { searchConfigPermission: "searchConfigPermission", deletePermission: "deletePermission", editPermission: "editPermission", viewPermission: "viewPermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", tableSelectionEnabledField: "tableSelectionEnabledField", tableAllowSelectAll: "tableAllowSelectAll", name: "name", titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", supportedViewLayouts: "supportedViewLayouts", columns: "columns", emptyResultsMessage: "emptyResultsMessage", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", fallbackImage: "fallbackImage", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", totalRecordsOnServer: "totalRecordsOnServer", layout: "layout", defaultGroupKey: "defaultGroupKey", customGroupKey: "customGroupKey", groupSelectionNoGroupSelectedKey: "groupSelectionNoGroupSelectedKey", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", additionalActions: "additionalActions", listGridPaginator: "listGridPaginator", tablePaginator: "tablePaginator", page: "page", selectedRows: "selectedRows", displayedColumnKeys: "displayedColumnKeys", displayedColumns: "displayedColumns", frozenActionColumn: "frozenActionColumn", actionColumnPosition: "actionColumnPosition", paginator: "paginator", data: "data" }, outputs: { filtered: "filtered", sorted: "sorted", deleteItem: "deleteItem", viewItem: "viewItem", editItem: "editItem", dataViewLayoutChange: "dataViewLayoutChange", displayedColumnsChange: "displayedColumnsChange", displayedColumnKeysChange: "displayedColumnKeysChange", selectionChanged: "selectionChanged", pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", componentStateChanged: "componentStateChanged" }, providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], queries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true }, { propertyName: "tableDateCell", first: true, predicate: ["tableDateCell"], descendants: true }, { propertyName: "dateTableCell", first: true, predicate: ["dateTableCell"], descendants: true }, { propertyName: "tableRelativeDateCell", first: true, predicate: ["tableRelativeDateCell"], descendants: true }, { propertyName: "relativeDateTableCell", first: true, predicate: ["relativeDateTableCell"], descendants: true }, { propertyName: "tableTranslationKeyCell", first: true, predicate: ["tableTranslationKeyCell"], descendants: true }, { propertyName: "translationKeyTableCell", first: true, predicate: ["translationKeyTableCell"], descendants: true }, { propertyName: "gridItemSubtitleLines", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLines", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "stringTableCell", first: true, predicate: ["stringTableCell"], descendants: true }, { propertyName: "numberTableCell", first: true, predicate: ["numberTableCell"], descendants: true }, { propertyName: "customTableCell", first: true, predicate: ["customTableCell"], descendants: true }, { propertyName: "gridItem", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "topCenter", first: true, predicate: ["topCenter"], descendants: true }, { propertyName: "listValue", first: true, predicate: ["listValue"], descendants: true }, { propertyName: "translationKeyListValue", first: true, predicate: ["translationKeyListValue"], descendants: true }, { propertyName: "numberListValue", first: true, predicate: ["numberListValue"], descendants: true }, { propertyName: "relativeDateListValue", first: true, predicate: ["relativeDateListValue"], descendants: true }, { propertyName: "customListValue", first: true, predicate: ["customListValue"], descendants: true }, { propertyName: "stringListValue", first: true, predicate: ["stringListValue"], descendants: true }, { propertyName: "dateListValue", first: true, predicate: ["dateListValue"], descendants: true }, { propertyName: "tableFilterCell", first: true, predicate: ["tableFilterCell"], descendants: true }, { propertyName: "dateTableFilterCell", first: true, predicate: ["dateTableFilterCell"], descendants: true }, { propertyName: "relativeDateTableFilterCell", first: true, predicate: ["relativeDateTableFilterCell"], descendants: true }, { propertyName: "translationKeyTableFilterCell", first: true, predicate: ["translationKeyTableFilterCell"], descendants: true }, { propertyName: "stringTableFilterCell", first: true, predicate: ["stringTableFilterCell"], descendants: true }, { propertyName: "numberTableFilterCell", first: true, predicate: ["numberTableFilterCell"], descendants: true }, { propertyName: "customTableFilterCell", first: true, predicate: ["customTableFilterCell"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "dataView", first: true, predicate: DataViewComponent, descendants: true }], ngImport: i0, template: "<div class=\"p-3 border-bottom-1 surface-border\">\n <div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <ocx-data-layout-selection\n [supportedViewLayouts]=\"supportedViewLayouts\"\n [layout]=\"layout\"\n (dataViewLayoutChange)=\"onDataViewLayoutChange($event)\"\n (componentStateChanged)=\"dataLayoutComponentState$.next($event)\"\n ></ocx-data-layout-selection>\n\n <div *ngIf=\"topCenter\">\n <ng-container [ngTemplateOutlet]=\"topCenter\"> </ng-container>\n </div>\n\n <div *ngIf=\"layout !== 'table'\" class=\"flex align-items-center gap-2\">\n <ocx-data-list-grid-sorting\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n (sortChange)=\"onSortChange($event)\"\n (sortDirectionChange)=\"onSortDirectionChange($event)\"\n (componentStateChanged)=\"dataListGridSortingComponentState$.next($event)\"\n ></ocx-data-list-grid-sorting>\n </div>\n\n <div\n [ngStyle]=\"layout !== 'table' ? {\n 'position': 'absolute'\n } : {}\"\n class=\"flex flex-wrap justify-content-between align-items-center gap-2\"\n >\n <ng-container *ngIf=\"isColumnGroupSelectionComponentDefined$ | async; else defaultColumnGroupSelectionComponent\">\n <ng-container *ngIf=\"displayedColumnKeys$ | async as displayedColumnKeys\">\n <ocx-slot\n [ngStyle]=\"layout !== 'table' ? {'display' : 'none'} : {}\"\n *ocxIfPermission=\"searchConfigPermission; elseTemplate: defaultColumnGroupSelectionComponent\"\n name=\"{{columnGroupSlotName}}\"\n [inputs]=\"{ placeholderKey: groupSelectionNoGroupSelectedKey, defaultGroupKey: defaultGroupKey, customGroupKey: customGroupKey, columns: columns, selectedGroupKey: selectedGroupKey, layout: layout, displayedColumnsIds: displayedColumnKeys }\"\n [outputs]=\"{ groupSelectionChanged: groupSelectionChangedSlotEmitter }\"\n >\n <ng-template #skeleton>\n <div class=\"flex\">\n <p-skeleton width=\"18rem\" height=\"3rem\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </ng-container>\n </ng-container>\n\n <ocx-custom-group-column-selector\n *ngIf=\"layout === 'table'\"\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n [customGroupKey]=\"customGroupKey\"\n (columnSelectionChanged)=\"onColumnSelectionChange($event)\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n (actionColumnConfigChanged)=\"onActionColumnConfigChange($event)\"\n (componentStateChanged)=\"customGroupColumnSelectorComponentState$.next($event)\"\n ></ocx-custom-group-column-selector>\n </div>\n </div>\n</div>\n<div class=\"p-3\">\n <ocx-data-view\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n [sortField]=\"sortField\"\n [filters]=\"filters\"\n [data]=\"data\"\n [sortDirection]=\"sortDirection\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"clientSideSorting\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [listGridPaginator]=\"listGridPaginator\"\n [tablePaginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [stringTableCellTemplate]=\"_stringTableCell ? stringTableCell : undefined\"\n [numberTableCellTemplate]=\"_numberTableCell ? numberTableCell : undefined\"\n [customTableCellTemplate]=\"_customTableCell ? customTableCell : undefined\"\n [dateTableCellTemplate]=\"_dateTableCell ? dateTableCell : _tableDateCell ? tableDateCell : undefined\"\n [relativeDateTableCellTemplate]=\"_relativeDateTableCell ? relativeDateTableCell : _tableRelativeDateCell ? tableRelativeDateCell : undefined\"\n [tableCellTemplate]=\"_tableCell ? tableCell : undefined\"\n [translationKeyTableCellTemplate]=\"_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [listValueTemplate]=\"_listValue ? listValue : undefined\"\n [translationKeyListValueTemplate]=\"_translationKeyListValue ? translationKeyListValue : undefined\"\n [numberListValueTemplate]=\"_numberListValue ? numberListValue : undefined\"\n [relativeDateListValueTemplate]=\"_relativeDateListValue ? relativeDateListValue : undefined\"\n [customListValueTemplate]=\"_customListValue ? customListValue : undefined\"\n [stringListValueTemplate]=\"_stringListValue ? stringListValue : undefined\"\n [dateListValueTemplate]=\"_dateListValue ? dateListValue : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [tableFilterCellTemplate]=\"_tableFilterCell ? tableFilterCell : undefined\"\n [dateTableFilterCellTemplate]=\"_dateTableFilterCell ? dateTableFilterCell : undefined\"\n [customTableFilterCellTemplate]=\"_customTableFilterCell ? customTableFilterCell : undefined\"\n [numberTableFilterCellTemplate]=\"_numberTableFilterCell ? numberTableFilterCell : undefined\"\n [stringTableFilterCellTemplate]=\"_stringTableFilterCell ? stringTableFilterCell : undefined\"\n [relativeDateTableFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined\"\n [translationKeyTableFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n (componentStateChanged)=\"dataViewComponentState$.next($event)\"\n [parentTemplates]=\"templates$ | async\"\n [tableAllowSelectAll]=\"tableAllowSelectAll\"\n [tableSelectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-view>\n</div>\n\n<ng-template #defaultColumnGroupSelectionComponent>\n <ocx-column-group-selection\n *ngIf=\"layout === 'table'\"\n [selectedGroupKey]=\"selectedGroupKey ?? defaultGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey !== customGroupKey ? defaultGroupKey : ''\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n</ng-template>\n\n<ng-template #stringTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableCell\"\n [ngTemplateOutlet]=\"_dateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableRelativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableCell\"\n [ngTemplateOutlet]=\"_relativeDateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableTranslationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableCell\"\n [ngTemplateOutlet]=\"_translationKeyTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container>\n</ng-template>\n<ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_listValue\"\n [ngTemplateOutlet]=\"_listValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyListValue\"\n [ngTemplateOutlet]=\"_translationKeyListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberListValue\"\n [ngTemplateOutlet]=\"_numberListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateListValue\"\n [ngTemplateOutlet]=\"_relativeDateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customListValue\"\n [ngTemplateOutlet]=\"_customListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #stringListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringListValue\"\n [ngTemplateOutlet]=\"_stringListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateListValue\"\n [ngTemplateOutlet]=\"_dateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n\n<ng-template #stringTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableFilterCell\"\n [ngTemplateOutlet]=\"_stringTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableFilterCell\"\n [ngTemplateOutlet]=\"_numberTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableFilterCell\"\n [ngTemplateOutlet]=\"_customTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableFilterCell\"\n [ngTemplateOutlet]=\"_dateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableFilterCell\"\n [ngTemplateOutlet]=\"_relativeDateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableFilterCell\"\n [ngTemplateOutlet]=\"_translationKeyTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i1.SlotComponent, selector: "ocx-slot[name]", inputs: ["name", "inputs", "outputs"] }, { kind: "component", type: i4.ColumnGroupSelectionComponent, selector: "ocx-column-group-selection", inputs: ["selectedGroupKey", "columns", "placeholderKey", "defaultGroupKey", "customGroupKey"], outputs: ["groupSelectionChanged", "componentStateChanged"] }, { kind: "component", type: i5.CustomGroupColumnSelectorComponent, selector: "ocx-custom-group-column-selector", inputs: ["columns", "displayedColumns", "customGroupKey", "dialogTitle", "dialogTitleKey", "openButtonTitle", "openButtonTitleKey", "openButtonAriaLabel", "openButtonAriaLabelKey", "saveButtonLabel", "saveButtonLabelKey", "saveButtonAriaLabel", "saveButtonAriaLabelKey", "cancelButtonLabel", "cancelButtonLabelKey", "cancelButtonAriaLabel", "cancelButtonAriaLabelKey", "activeColumnsLabel", "activeColumnsLabelKey", "inactiveColumnsLabel", "inactiveColumnsLabelKey", "frozenActionColumn", "actionColumnPosition"], outputs: ["columnSelectionChanged", "actionColumnConfigChanged", "componentStateChanged"] }, { kind: "component", type: i6.DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: ["supportedViewLayouts", "layout"], outputs: ["dataViewLayoutChange", "componentStateChanged"] }, { kind: "component", type: i7.DataListGridSortingComponent, selector: "ocx-data-list-grid-sorting", inputs: ["columns", "sortStates", "sortDirection", "sortField"], outputs: ["sortChange", "sortDirectionChange", "componentStateChanged", "columnsChange"] }, { kind: "component", type: i8.DataViewComponent, selector: "ocx-data-view", inputs: ["deletePermission", "editPermission", "viewPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "tableSelectionEnabledField", "tableAllowSelectAll", "data", "name", "titleLineId", "subtitleLineIds", "layout", "columns", "emptyResultsMessage", "clientSideSorting", "clientSideFiltering", "fallbackImage", "filters", "sortField", "sortDirection", "listGridPaginator", "tablePaginator", "page", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "selectedRows", "frozenActionColumn", "actionColumnPosition", "paginator", "sortStates", "pageSizes", "pageSize", "stringTableCellTemplate", "numberTableCellTemplate", "customTableCellTemplate", "dateTableCellTemplate", "tableDateCellTemplate", "tableCellTemplate", "translationKeyTableCellTemplate", "tableTranslationKeyCellTemplate", "gridItemSubtitleLinesTemplate", "listItemSubtitleLinesTemplate", "gridItemTemplate", "listItemTemplate", "relativeDateTableCellTemplate", "tableRelativeDateCellTemplate", "listValueTemplate", "translationKeyListValueTemplate", "numberListValueTemplate", "relativeDateListValueTemplate", "customListValueTemplate", "stringListValueTemplate", "dateListValueTemplate", "tableFilterCellTemplate", "dateTableFilterCellTemplate", "relativeDateTableFilterCellTemplate", "translationKeyTableFilterCellTemplate", "stringTableFilterCellTemplate", "numberTableFilterCellTemplate", "customTableFilterCellTemplate", "additionalActions", "parentTemplates"], outputs: ["filtered", "sorted", "deleteItem", "viewItem", "editItem", "selectionChanged", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "directive", type: i9.IfPermissionDirective, selector: "[ocxIfPermission], [ocxIfNotPermission]", inputs: ["ocxIfPermission", "ocxIfNotPermission", "onMissingPermission", "ocxIfPermissionPermissions", "ocxIfNotPermissionPermissions", "ocxIfPermissionElseTemplate", "ocxIfNotPermissionElseTemplate"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
490
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: InteractiveDataViewComponent, selector: "ocx-interactive-data-view", inputs: { searchConfigPermission: "searchConfigPermission", deletePermission: "deletePermission", editPermission: "editPermission", viewPermission: "viewPermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", tableSelectionEnabledField: "tableSelectionEnabledField", tableAllowSelectAll: "tableAllowSelectAll", name: "name", titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", supportedViewLayouts: "supportedViewLayouts", columns: "columns", emptyResultsMessage: "emptyResultsMessage", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", fallbackImage: "fallbackImage", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", totalRecordsOnServer: "totalRecordsOnServer", layout: "layout", defaultGroupKey: "defaultGroupKey", customGroupKey: "customGroupKey", groupSelectionNoGroupSelectedKey: "groupSelectionNoGroupSelectedKey", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", additionalActions: "additionalActions", listGridPaginator: "listGridPaginator", tablePaginator: "tablePaginator", disableFilterView: "disableFilterView", filterViewDisplayMode: "filterViewDisplayMode", filterViewChipStyleClass: "filterViewChipStyleClass", filterViewTableStyle: "filterViewTableStyle", filterViewPanelStyle: "filterViewPanelStyle", selectDisplayedChips: "selectDisplayedChips", page: "page", selectedRows: "selectedRows", displayedColumnKeys: "displayedColumnKeys", displayedColumns: "displayedColumns", frozenActionColumn: "frozenActionColumn", actionColumnPosition: "actionColumnPosition", paginator: "paginator", data: "data" }, outputs: { filtered: "filtered", sorted: "sorted", deleteItem: "deleteItem", viewItem: "viewItem", editItem: "editItem", dataViewLayoutChange: "dataViewLayoutChange", displayedColumnsChange: "displayedColumnsChange", displayedColumnKeysChange: "displayedColumnKeysChange", selectionChanged: "selectionChanged", pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", componentStateChanged: "componentStateChanged" }, providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], queries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true }, { propertyName: "tableDateCell", first: true, predicate: ["tableDateCell"], descendants: true }, { propertyName: "dateTableCell", first: true, predicate: ["dateTableCell"], descendants: true }, { propertyName: "tableRelativeDateCell", first: true, predicate: ["tableRelativeDateCell"], descendants: true }, { propertyName: "relativeDateTableCell", first: true, predicate: ["relativeDateTableCell"], descendants: true }, { propertyName: "tableTranslationKeyCell", first: true, predicate: ["tableTranslationKeyCell"], descendants: true }, { propertyName: "translationKeyTableCell", first: true, predicate: ["translationKeyTableCell"], descendants: true }, { propertyName: "gridItemSubtitleLines", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLines", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "stringTableCell", first: true, predicate: ["stringTableCell"], descendants: true }, { propertyName: "numberTableCell", first: true, predicate: ["numberTableCell"], descendants: true }, { propertyName: "customTableCell", first: true, predicate: ["customTableCell"], descendants: true }, { propertyName: "gridItem", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "topCenter", first: true, predicate: ["topCenter"], descendants: true }, { propertyName: "listValue", first: true, predicate: ["listValue"], descendants: true }, { propertyName: "translationKeyListValue", first: true, predicate: ["translationKeyListValue"], descendants: true }, { propertyName: "numberListValue", first: true, predicate: ["numberListValue"], descendants: true }, { propertyName: "relativeDateListValue", first: true, predicate: ["relativeDateListValue"], descendants: true }, { propertyName: "customListValue", first: true, predicate: ["customListValue"], descendants: true }, { propertyName: "stringListValue", first: true, predicate: ["stringListValue"], descendants: true }, { propertyName: "dateListValue", first: true, predicate: ["dateListValue"], descendants: true }, { propertyName: "tableFilterCell", first: true, predicate: ["tableFilterCell"], descendants: true }, { propertyName: "dateTableFilterCell", first: true, predicate: ["dateTableFilterCell"], descendants: true }, { propertyName: "relativeDateTableFilterCell", first: true, predicate: ["relativeDateTableFilterCell"], descendants: true }, { propertyName: "translationKeyTableFilterCell", first: true, predicate: ["translationKeyTableFilterCell"], descendants: true }, { propertyName: "stringTableFilterCell", first: true, predicate: ["stringTableFilterCell"], descendants: true }, { propertyName: "numberTableFilterCell", first: true, predicate: ["numberTableFilterCell"], descendants: true }, { propertyName: "customTableFilterCell", first: true, predicate: ["customTableFilterCell"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "dataView", first: true, predicate: DataViewComponent, descendants: true }], ngImport: i0, template: "<div class=\"p-3 border-bottom-1 surface-border\">\n <div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <div class=\"flex flex-wrap justify-content-start align-items-center gap-2\">\n <ocx-data-layout-selection\n [supportedViewLayouts]=\"supportedViewLayouts\"\n [layout]=\"layout\"\n (dataViewLayoutChange)=\"onDataViewLayoutChange($event)\"\n (componentStateChanged)=\"dataLayoutComponentState$.next($event)\"\n ></ocx-data-layout-selection>\n <ocx-filter-view\n *ngIf=\"!disableFilterView\"\n [filters]=\"filters\"\n [columns]=\"columns\"\n [templates]=\"templates$ | async\"\n [displayMode]=\"filterViewDisplayMode\"\n [selectDisplayedChips]=\"selectDisplayedChips\"\n [chipStyleClass]=\"filterViewChipStyleClass\"\n [tableStyle]=\"filterViewTableStyle\"\n (filtered)=\"filtering($event)\"\n (componentStateChanged)=\"filterViewComponentState$.next($event)\"\n ></ocx-filter-view>\n </div>\n\n <div *ngIf=\"topCenter\">\n <ng-container [ngTemplateOutlet]=\"topCenter\"> </ng-container>\n </div>\n\n <div *ngIf=\"layout !== 'table'\" class=\"flex align-items-center gap-2\">\n <ocx-data-list-grid-sorting\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n (sortChange)=\"onSortChange($event)\"\n (sortDirectionChange)=\"onSortDirectionChange($event)\"\n (componentStateChanged)=\"dataListGridSortingComponentState$.next($event)\"\n ></ocx-data-list-grid-sorting>\n </div>\n\n <div\n [ngStyle]=\"layout !== 'table' ? {\n 'position': 'absolute'\n } : {}\"\n class=\"flex flex-wrap justify-content-between align-items-center gap-2\"\n >\n <ng-container *ngIf=\"isColumnGroupSelectionComponentDefined$ | async; else defaultColumnGroupSelectionComponent\">\n <ng-container *ngIf=\"displayedColumnKeys$ | async as displayedColumnKeys\">\n <ocx-slot\n [ngStyle]=\"layout !== 'table' ? {'display' : 'none'} : {}\"\n *ocxIfPermission=\"searchConfigPermission; elseTemplate: defaultColumnGroupSelectionComponent\"\n name=\"{{columnGroupSlotName}}\"\n [inputs]=\"{ placeholderKey: groupSelectionNoGroupSelectedKey, defaultGroupKey: defaultGroupKey, customGroupKey: customGroupKey, columns: columns, selectedGroupKey: selectedGroupKey, layout: layout, displayedColumnsIds: displayedColumnKeys }\"\n [outputs]=\"{ groupSelectionChanged: groupSelectionChangedSlotEmitter }\"\n >\n <ng-template #skeleton>\n <div class=\"flex\">\n <p-skeleton width=\"18rem\" height=\"3rem\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </ng-container>\n </ng-container>\n\n <ocx-custom-group-column-selector\n *ngIf=\"layout === 'table'\"\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n [customGroupKey]=\"customGroupKey\"\n (columnSelectionChanged)=\"onColumnSelectionChange($event)\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n (actionColumnConfigChanged)=\"onActionColumnConfigChange($event)\"\n (componentStateChanged)=\"customGroupColumnSelectorComponentState$.next($event)\"\n ></ocx-custom-group-column-selector>\n </div>\n </div>\n</div>\n<div class=\"p-3\">\n <ocx-data-view\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n [sortField]=\"sortField\"\n [filters]=\"filters\"\n [data]=\"data\"\n [sortDirection]=\"sortDirection\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"clientSideSorting\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [listGridPaginator]=\"listGridPaginator\"\n [tablePaginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [stringTableCellTemplate]=\"_stringTableCell ? stringTableCell : undefined\"\n [numberTableCellTemplate]=\"_numberTableCell ? numberTableCell : undefined\"\n [customTableCellTemplate]=\"_customTableCell ? customTableCell : undefined\"\n [dateTableCellTemplate]=\"_dateTableCell ? dateTableCell : _tableDateCell ? tableDateCell : undefined\"\n [relativeDateTableCellTemplate]=\"_relativeDateTableCell ? relativeDateTableCell : _tableRelativeDateCell ? tableRelativeDateCell : undefined\"\n [tableCellTemplate]=\"_tableCell ? tableCell : undefined\"\n [translationKeyTableCellTemplate]=\"_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [listValueTemplate]=\"_listValue ? listValue : undefined\"\n [translationKeyListValueTemplate]=\"_translationKeyListValue ? translationKeyListValue : undefined\"\n [numberListValueTemplate]=\"_numberListValue ? numberListValue : undefined\"\n [relativeDateListValueTemplate]=\"_relativeDateListValue ? relativeDateListValue : undefined\"\n [customListValueTemplate]=\"_customListValue ? customListValue : undefined\"\n [stringListValueTemplate]=\"_stringListValue ? stringListValue : undefined\"\n [dateListValueTemplate]=\"_dateListValue ? dateListValue : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [tableFilterCellTemplate]=\"_tableFilterCell ? tableFilterCell : undefined\"\n [dateTableFilterCellTemplate]=\"_dateTableFilterCell ? dateTableFilterCell : undefined\"\n [customTableFilterCellTemplate]=\"_customTableFilterCell ? customTableFilterCell : undefined\"\n [numberTableFilterCellTemplate]=\"_numberTableFilterCell ? numberTableFilterCell : undefined\"\n [stringTableFilterCellTemplate]=\"_stringTableFilterCell ? stringTableFilterCell : undefined\"\n [relativeDateTableFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined\"\n [translationKeyTableFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n (componentStateChanged)=\"dataViewComponentState$.next($event)\"\n [parentTemplates]=\"templates$ | async\"\n [tableAllowSelectAll]=\"tableAllowSelectAll\"\n [tableSelectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-view>\n</div>\n\n<ng-template #defaultColumnGroupSelectionComponent>\n <ocx-column-group-selection\n *ngIf=\"layout === 'table'\"\n [selectedGroupKey]=\"selectedGroupKey ?? defaultGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey !== customGroupKey ? defaultGroupKey : ''\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n</ng-template>\n\n<ng-template #stringTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableCell\"\n [ngTemplateOutlet]=\"_dateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableRelativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableCell\"\n [ngTemplateOutlet]=\"_relativeDateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableTranslationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableCell\"\n [ngTemplateOutlet]=\"_translationKeyTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container>\n</ng-template>\n<ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_listValue\"\n [ngTemplateOutlet]=\"_listValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyListValue\"\n [ngTemplateOutlet]=\"_translationKeyListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberListValue\"\n [ngTemplateOutlet]=\"_numberListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateListValue\"\n [ngTemplateOutlet]=\"_relativeDateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customListValue\"\n [ngTemplateOutlet]=\"_customListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #stringListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringListValue\"\n [ngTemplateOutlet]=\"_stringListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateListValue\"\n [ngTemplateOutlet]=\"_dateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n\n<ng-template #stringTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableFilterCell\"\n [ngTemplateOutlet]=\"_stringTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableFilterCell\"\n [ngTemplateOutlet]=\"_numberTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableFilterCell\"\n [ngTemplateOutlet]=\"_customTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableFilterCell\"\n [ngTemplateOutlet]=\"_dateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableFilterCell\"\n [ngTemplateOutlet]=\"_relativeDateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableFilterCell\"\n [ngTemplateOutlet]=\"_translationKeyTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i1.SlotComponent, selector: "ocx-slot[name]", inputs: ["name", "inputs", "outputs"] }, { kind: "component", type: i4.ColumnGroupSelectionComponent, selector: "ocx-column-group-selection", inputs: ["selectedGroupKey", "columns", "placeholderKey", "defaultGroupKey", "customGroupKey"], outputs: ["groupSelectionChanged", "componentStateChanged"] }, { kind: "component", type: i5.CustomGroupColumnSelectorComponent, selector: "ocx-custom-group-column-selector", inputs: ["columns", "displayedColumns", "customGroupKey", "dialogTitle", "dialogTitleKey", "openButtonTitle", "openButtonTitleKey", "openButtonAriaLabel", "openButtonAriaLabelKey", "saveButtonLabel", "saveButtonLabelKey", "saveButtonAriaLabel", "saveButtonAriaLabelKey", "cancelButtonLabel", "cancelButtonLabelKey", "cancelButtonAriaLabel", "cancelButtonAriaLabelKey", "activeColumnsLabel", "activeColumnsLabelKey", "inactiveColumnsLabel", "inactiveColumnsLabelKey", "frozenActionColumn", "actionColumnPosition"], outputs: ["columnSelectionChanged", "actionColumnConfigChanged", "componentStateChanged"] }, { kind: "component", type: i6.DataLayoutSelectionComponent, selector: "ocx-data-layout-selection", inputs: ["supportedViewLayouts", "layout"], outputs: ["dataViewLayoutChange", "componentStateChanged"] }, { kind: "component", type: i7.DataListGridSortingComponent, selector: "ocx-data-list-grid-sorting", inputs: ["columns", "sortStates", "sortDirection", "sortField"], outputs: ["sortChange", "sortDirectionChange", "componentStateChanged", "columnsChange"] }, { kind: "component", type: i8.DataViewComponent, selector: "ocx-data-view", inputs: ["deletePermission", "editPermission", "viewPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "tableSelectionEnabledField", "tableAllowSelectAll", "data", "name", "titleLineId", "subtitleLineIds", "layout", "columns", "emptyResultsMessage", "clientSideSorting", "clientSideFiltering", "fallbackImage", "filters", "sortField", "sortDirection", "listGridPaginator", "tablePaginator", "page", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "selectedRows", "frozenActionColumn", "actionColumnPosition", "paginator", "sortStates", "pageSizes", "pageSize", "stringTableCellTemplate", "numberTableCellTemplate", "customTableCellTemplate", "dateTableCellTemplate", "tableDateCellTemplate", "tableCellTemplate", "translationKeyTableCellTemplate", "tableTranslationKeyCellTemplate", "gridItemSubtitleLinesTemplate", "listItemSubtitleLinesTemplate", "gridItemTemplate", "listItemTemplate", "relativeDateTableCellTemplate", "tableRelativeDateCellTemplate", "listValueTemplate", "translationKeyListValueTemplate", "numberListValueTemplate", "relativeDateListValueTemplate", "customListValueTemplate", "stringListValueTemplate", "dateListValueTemplate", "tableFilterCellTemplate", "dateTableFilterCellTemplate", "relativeDateTableFilterCellTemplate", "translationKeyTableFilterCellTemplate", "stringTableFilterCellTemplate", "numberTableFilterCellTemplate", "customTableFilterCellTemplate", "additionalActions", "parentTemplates"], outputs: ["filtered", "sorted", "deleteItem", "viewItem", "editItem", "selectionChanged", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "directive", type: i9.IfPermissionDirective, selector: "[ocxIfPermission], [ocxIfNotPermission]", inputs: ["ocxIfPermission", "ocxIfNotPermission", "onMissingPermission", "ocxIfPermissionPermissions", "ocxIfNotPermissionPermissions", "ocxIfPermissionElseTemplate", "ocxIfNotPermissionElseTemplate"] }, { kind: "component", type: i10.FilterViewComponent, selector: "ocx-filter-view", inputs: ["filters", "columns", "displayMode", "selectDisplayedChips", "chipStyleClass", "tableStyle", "panelStyle", "templates"], outputs: ["filtered", "componentStateChanged"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
481
491
  }
482
492
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: InteractiveDataViewComponent, decorators: [{
483
493
  type: Component,
484
- args: [{ selector: 'ocx-interactive-data-view', providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], template: "<div class=\"p-3 border-bottom-1 surface-border\">\n <div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <ocx-data-layout-selection\n [supportedViewLayouts]=\"supportedViewLayouts\"\n [layout]=\"layout\"\n (dataViewLayoutChange)=\"onDataViewLayoutChange($event)\"\n (componentStateChanged)=\"dataLayoutComponentState$.next($event)\"\n ></ocx-data-layout-selection>\n\n <div *ngIf=\"topCenter\">\n <ng-container [ngTemplateOutlet]=\"topCenter\"> </ng-container>\n </div>\n\n <div *ngIf=\"layout !== 'table'\" class=\"flex align-items-center gap-2\">\n <ocx-data-list-grid-sorting\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n (sortChange)=\"onSortChange($event)\"\n (sortDirectionChange)=\"onSortDirectionChange($event)\"\n (componentStateChanged)=\"dataListGridSortingComponentState$.next($event)\"\n ></ocx-data-list-grid-sorting>\n </div>\n\n <div\n [ngStyle]=\"layout !== 'table' ? {\n 'position': 'absolute'\n } : {}\"\n class=\"flex flex-wrap justify-content-between align-items-center gap-2\"\n >\n <ng-container *ngIf=\"isColumnGroupSelectionComponentDefined$ | async; else defaultColumnGroupSelectionComponent\">\n <ng-container *ngIf=\"displayedColumnKeys$ | async as displayedColumnKeys\">\n <ocx-slot\n [ngStyle]=\"layout !== 'table' ? {'display' : 'none'} : {}\"\n *ocxIfPermission=\"searchConfigPermission; elseTemplate: defaultColumnGroupSelectionComponent\"\n name=\"{{columnGroupSlotName}}\"\n [inputs]=\"{ placeholderKey: groupSelectionNoGroupSelectedKey, defaultGroupKey: defaultGroupKey, customGroupKey: customGroupKey, columns: columns, selectedGroupKey: selectedGroupKey, layout: layout, displayedColumnsIds: displayedColumnKeys }\"\n [outputs]=\"{ groupSelectionChanged: groupSelectionChangedSlotEmitter }\"\n >\n <ng-template #skeleton>\n <div class=\"flex\">\n <p-skeleton width=\"18rem\" height=\"3rem\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </ng-container>\n </ng-container>\n\n <ocx-custom-group-column-selector\n *ngIf=\"layout === 'table'\"\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n [customGroupKey]=\"customGroupKey\"\n (columnSelectionChanged)=\"onColumnSelectionChange($event)\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n (actionColumnConfigChanged)=\"onActionColumnConfigChange($event)\"\n (componentStateChanged)=\"customGroupColumnSelectorComponentState$.next($event)\"\n ></ocx-custom-group-column-selector>\n </div>\n </div>\n</div>\n<div class=\"p-3\">\n <ocx-data-view\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n [sortField]=\"sortField\"\n [filters]=\"filters\"\n [data]=\"data\"\n [sortDirection]=\"sortDirection\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"clientSideSorting\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [listGridPaginator]=\"listGridPaginator\"\n [tablePaginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [stringTableCellTemplate]=\"_stringTableCell ? stringTableCell : undefined\"\n [numberTableCellTemplate]=\"_numberTableCell ? numberTableCell : undefined\"\n [customTableCellTemplate]=\"_customTableCell ? customTableCell : undefined\"\n [dateTableCellTemplate]=\"_dateTableCell ? dateTableCell : _tableDateCell ? tableDateCell : undefined\"\n [relativeDateTableCellTemplate]=\"_relativeDateTableCell ? relativeDateTableCell : _tableRelativeDateCell ? tableRelativeDateCell : undefined\"\n [tableCellTemplate]=\"_tableCell ? tableCell : undefined\"\n [translationKeyTableCellTemplate]=\"_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [listValueTemplate]=\"_listValue ? listValue : undefined\"\n [translationKeyListValueTemplate]=\"_translationKeyListValue ? translationKeyListValue : undefined\"\n [numberListValueTemplate]=\"_numberListValue ? numberListValue : undefined\"\n [relativeDateListValueTemplate]=\"_relativeDateListValue ? relativeDateListValue : undefined\"\n [customListValueTemplate]=\"_customListValue ? customListValue : undefined\"\n [stringListValueTemplate]=\"_stringListValue ? stringListValue : undefined\"\n [dateListValueTemplate]=\"_dateListValue ? dateListValue : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [tableFilterCellTemplate]=\"_tableFilterCell ? tableFilterCell : undefined\"\n [dateTableFilterCellTemplate]=\"_dateTableFilterCell ? dateTableFilterCell : undefined\"\n [customTableFilterCellTemplate]=\"_customTableFilterCell ? customTableFilterCell : undefined\"\n [numberTableFilterCellTemplate]=\"_numberTableFilterCell ? numberTableFilterCell : undefined\"\n [stringTableFilterCellTemplate]=\"_stringTableFilterCell ? stringTableFilterCell : undefined\"\n [relativeDateTableFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined\"\n [translationKeyTableFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n (componentStateChanged)=\"dataViewComponentState$.next($event)\"\n [parentTemplates]=\"templates$ | async\"\n [tableAllowSelectAll]=\"tableAllowSelectAll\"\n [tableSelectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-view>\n</div>\n\n<ng-template #defaultColumnGroupSelectionComponent>\n <ocx-column-group-selection\n *ngIf=\"layout === 'table'\"\n [selectedGroupKey]=\"selectedGroupKey ?? defaultGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey !== customGroupKey ? defaultGroupKey : ''\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n</ng-template>\n\n<ng-template #stringTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableCell\"\n [ngTemplateOutlet]=\"_dateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableRelativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableCell\"\n [ngTemplateOutlet]=\"_relativeDateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableTranslationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableCell\"\n [ngTemplateOutlet]=\"_translationKeyTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container>\n</ng-template>\n<ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_listValue\"\n [ngTemplateOutlet]=\"_listValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyListValue\"\n [ngTemplateOutlet]=\"_translationKeyListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberListValue\"\n [ngTemplateOutlet]=\"_numberListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateListValue\"\n [ngTemplateOutlet]=\"_relativeDateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customListValue\"\n [ngTemplateOutlet]=\"_customListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #stringListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringListValue\"\n [ngTemplateOutlet]=\"_stringListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateListValue\"\n [ngTemplateOutlet]=\"_dateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n\n<ng-template #stringTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableFilterCell\"\n [ngTemplateOutlet]=\"_stringTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableFilterCell\"\n [ngTemplateOutlet]=\"_numberTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableFilterCell\"\n [ngTemplateOutlet]=\"_customTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableFilterCell\"\n [ngTemplateOutlet]=\"_dateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableFilterCell\"\n [ngTemplateOutlet]=\"_relativeDateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableFilterCell\"\n [ngTemplateOutlet]=\"_translationKeyTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n" }]
494
+ args: [{ selector: 'ocx-interactive-data-view', providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], template: "<div class=\"p-3 border-bottom-1 surface-border\">\n <div class=\"flex flex-wrap justify-content-between align-items-center py-1 gap-2\">\n <div class=\"flex flex-wrap justify-content-start align-items-center gap-2\">\n <ocx-data-layout-selection\n [supportedViewLayouts]=\"supportedViewLayouts\"\n [layout]=\"layout\"\n (dataViewLayoutChange)=\"onDataViewLayoutChange($event)\"\n (componentStateChanged)=\"dataLayoutComponentState$.next($event)\"\n ></ocx-data-layout-selection>\n <ocx-filter-view\n *ngIf=\"!disableFilterView\"\n [filters]=\"filters\"\n [columns]=\"columns\"\n [templates]=\"templates$ | async\"\n [displayMode]=\"filterViewDisplayMode\"\n [selectDisplayedChips]=\"selectDisplayedChips\"\n [chipStyleClass]=\"filterViewChipStyleClass\"\n [tableStyle]=\"filterViewTableStyle\"\n (filtered)=\"filtering($event)\"\n (componentStateChanged)=\"filterViewComponentState$.next($event)\"\n ></ocx-filter-view>\n </div>\n\n <div *ngIf=\"topCenter\">\n <ng-container [ngTemplateOutlet]=\"topCenter\"> </ng-container>\n </div>\n\n <div *ngIf=\"layout !== 'table'\" class=\"flex align-items-center gap-2\">\n <ocx-data-list-grid-sorting\n [sortDirection]=\"sortDirection\"\n [sortField]=\"sortField\"\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n (sortChange)=\"onSortChange($event)\"\n (sortDirectionChange)=\"onSortDirectionChange($event)\"\n (componentStateChanged)=\"dataListGridSortingComponentState$.next($event)\"\n ></ocx-data-list-grid-sorting>\n </div>\n\n <div\n [ngStyle]=\"layout !== 'table' ? {\n 'position': 'absolute'\n } : {}\"\n class=\"flex flex-wrap justify-content-between align-items-center gap-2\"\n >\n <ng-container *ngIf=\"isColumnGroupSelectionComponentDefined$ | async; else defaultColumnGroupSelectionComponent\">\n <ng-container *ngIf=\"displayedColumnKeys$ | async as displayedColumnKeys\">\n <ocx-slot\n [ngStyle]=\"layout !== 'table' ? {'display' : 'none'} : {}\"\n *ocxIfPermission=\"searchConfigPermission; elseTemplate: defaultColumnGroupSelectionComponent\"\n name=\"{{columnGroupSlotName}}\"\n [inputs]=\"{ placeholderKey: groupSelectionNoGroupSelectedKey, defaultGroupKey: defaultGroupKey, customGroupKey: customGroupKey, columns: columns, selectedGroupKey: selectedGroupKey, layout: layout, displayedColumnsIds: displayedColumnKeys }\"\n [outputs]=\"{ groupSelectionChanged: groupSelectionChangedSlotEmitter }\"\n >\n <ng-template #skeleton>\n <div class=\"flex\">\n <p-skeleton width=\"18rem\" height=\"3rem\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </ng-container>\n </ng-container>\n\n <ocx-custom-group-column-selector\n *ngIf=\"layout === 'table'\"\n [columns]=\"columns\"\n [displayedColumns]=\"(displayedColumns$ | async) ?? []\"\n [customGroupKey]=\"customGroupKey\"\n (columnSelectionChanged)=\"onColumnSelectionChange($event)\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n (actionColumnConfigChanged)=\"onActionColumnConfigChange($event)\"\n (componentStateChanged)=\"customGroupColumnSelectorComponentState$.next($event)\"\n ></ocx-custom-group-column-selector>\n </div>\n </div>\n</div>\n<div class=\"p-3\">\n <ocx-data-view\n [columns]=\"(displayedColumns$ | async) ?? []\"\n [sortStates]=\"sortStates\"\n [sortField]=\"sortField\"\n [filters]=\"filters\"\n [data]=\"data\"\n [sortDirection]=\"sortDirection\"\n [titleLineId]=\"titleLineId\"\n [subtitleLineIds]=\"subtitleLineIds\"\n [clientSideSorting]=\"clientSideSorting\"\n [clientSideFiltering]=\"clientSideFiltering\"\n [pageSizes]=\"pageSizes\"\n [pageSize]=\"pageSize\"\n [emptyResultsMessage]=\"emptyResultsMessage\"\n [layout]=\"layout\"\n [name]=\"name\"\n [deletePermission]=\"deletePermission\"\n [editPermission]=\"editPermission\"\n [viewPermission]=\"viewPermission\"\n [deleteActionEnabledField]=\"deleteActionEnabledField\"\n [deleteActionVisibleField]=\"deleteActionVisibleField\"\n [editActionEnabledField]=\"editActionEnabledField\"\n [editActionVisibleField]=\"editActionVisibleField\"\n [viewActionEnabledField]=\"viewActionEnabledField\"\n [viewActionVisibleField]=\"viewActionVisibleField\"\n [additionalActions]=\"additionalActions\"\n [listGridPaginator]=\"listGridPaginator\"\n [tablePaginator]=\"tablePaginator\"\n [page]=\"page\"\n (pageChanged)=\"onPageChange($event)\"\n (pageSizeChanged)=\"onPageSizeChange($event)\"\n [selectedRows]=\"selectedRows\"\n [frozenActionColumn]=\"frozenActionColumn\"\n [actionColumnPosition]=\"actionColumnPosition\"\n [stringTableCellTemplate]=\"_stringTableCell ? stringTableCell : undefined\"\n [numberTableCellTemplate]=\"_numberTableCell ? numberTableCell : undefined\"\n [customTableCellTemplate]=\"_customTableCell ? customTableCell : undefined\"\n [dateTableCellTemplate]=\"_dateTableCell ? dateTableCell : _tableDateCell ? tableDateCell : undefined\"\n [relativeDateTableCellTemplate]=\"_relativeDateTableCell ? relativeDateTableCell : _tableRelativeDateCell ? tableRelativeDateCell : undefined\"\n [tableCellTemplate]=\"_tableCell ? tableCell : undefined\"\n [translationKeyTableCellTemplate]=\"_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined\"\n [gridItemSubtitleLinesTemplate]=\"_gridItemSubtitleLines ? gridItemSubtitleLines : undefined\"\n [listItemSubtitleLinesTemplate]=\"_listItemSubtitleLines ? listItemSubtitleLines : undefined\"\n [listItemTemplate]=\"_listItem ? listItem : undefined\"\n [listValueTemplate]=\"_listValue ? listValue : undefined\"\n [translationKeyListValueTemplate]=\"_translationKeyListValue ? translationKeyListValue : undefined\"\n [numberListValueTemplate]=\"_numberListValue ? numberListValue : undefined\"\n [relativeDateListValueTemplate]=\"_relativeDateListValue ? relativeDateListValue : undefined\"\n [customListValueTemplate]=\"_customListValue ? customListValue : undefined\"\n [stringListValueTemplate]=\"_stringListValue ? stringListValue : undefined\"\n [dateListValueTemplate]=\"_dateListValue ? dateListValue : undefined\"\n [gridItemTemplate]=\"_gridItem ? gridItem : undefined\"\n [tableFilterCellTemplate]=\"_tableFilterCell ? tableFilterCell : undefined\"\n [dateTableFilterCellTemplate]=\"_dateTableFilterCell ? dateTableFilterCell : undefined\"\n [customTableFilterCellTemplate]=\"_customTableFilterCell ? customTableFilterCell : undefined\"\n [numberTableFilterCellTemplate]=\"_numberTableFilterCell ? numberTableFilterCell : undefined\"\n [stringTableFilterCellTemplate]=\"_stringTableFilterCell ? stringTableFilterCell : undefined\"\n [relativeDateTableFilterCellTemplate]=\"_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined\"\n [translationKeyTableFilterCellTemplate]=\"_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined\"\n (sorted)=\"sorting($event)\"\n (filtered)=\"filtering($event)\"\n [totalRecordsOnServer]=\"totalRecordsOnServer\"\n [currentPageShowingKey]=\"currentPageShowingKey\"\n [currentPageShowingWithTotalOnServerKey]=\"currentPageShowingWithTotalOnServerKey\"\n (componentStateChanged)=\"dataViewComponentState$.next($event)\"\n [parentTemplates]=\"templates$ | async\"\n [tableAllowSelectAll]=\"tableAllowSelectAll\"\n [tableSelectionEnabledField]=\"tableSelectionEnabledField\"\n >\n </ocx-data-view>\n</div>\n\n<ng-template #defaultColumnGroupSelectionComponent>\n <ocx-column-group-selection\n *ngIf=\"layout === 'table'\"\n [selectedGroupKey]=\"selectedGroupKey ?? defaultGroupKey\"\n [columns]=\"columns\"\n [defaultGroupKey]=\"defaultGroupKey !== customGroupKey ? defaultGroupKey : ''\"\n [customGroupKey]=\"customGroupKey\"\n [placeholderKey]=\"groupSelectionNoGroupSelectedKey\"\n (groupSelectionChanged)=\"onColumnGroupSelectionChange($event)\"\n (componentStateChanged)=\"columnGroupSelectionComponentState$.next($event)\"\n ></ocx-column-group-selection>\n</ng-template>\n\n<ng-template #stringTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableCell\"\n [ngTemplateOutlet]=\"_stringTableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableDateCell\"\n [ngTemplateOutlet]=\"_tableDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableCell\"\n [ngTemplateOutlet]=\"_dateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableRelativeDateCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableRelativeDateCell\"\n [ngTemplateOutlet]=\"_tableRelativeDateCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableCell\"\n [ngTemplateOutlet]=\"_relativeDateTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableCell\"\n [ngTemplateOutlet]=\"_tableCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #tableTranslationKeyCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_tableTranslationKeyCell\"\n [ngTemplateOutlet]=\"_tableTranslationKeyCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableCell\"\n [ngTemplateOutlet]=\"_translationKeyTableCell\"\n [ngTemplateOutletContext]=\"{rowObject:rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_gridItemSubtitleLines\"\n [ngTemplateOutlet]=\"_gridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container>\n</ng-template>\n<ng-template #listItemSubtitleLines let-item>\n <ng-container\n *ngIf=\"_listItemSubtitleLines\"\n [ngTemplateOutlet]=\"_listItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n >\n </ng-container\n></ng-template>\n<ng-template #gridItem let-item>\n <ng-container *ngIf=\"_gridItem\" [ngTemplateOutlet]=\"_gridItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listItem let-item>\n <ng-container *ngIf=\"_listItem\" [ngTemplateOutlet]=\"_listItem\" [ngTemplateOutletContext]=\"{$implicit:item}\">\n </ng-container\n></ng-template>\n<ng-template #listValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_listValue\"\n [ngTemplateOutlet]=\"_listValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyListValue\"\n [ngTemplateOutlet]=\"_translationKeyListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberListValue\"\n [ngTemplateOutlet]=\"_numberListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateListValue\"\n [ngTemplateOutlet]=\"_relativeDateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customListValue\"\n [ngTemplateOutlet]=\"_customListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #stringListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringListValue\"\n [ngTemplateOutlet]=\"_stringListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateListValue let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateListValue\"\n [ngTemplateOutlet]=\"_dateListValue\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n\n<ng-template #stringTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_stringTableFilterCell\"\n [ngTemplateOutlet]=\"_stringTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #numberTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_numberTableFilterCell\"\n [ngTemplateOutlet]=\"_numberTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #customTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_customTableFilterCell\"\n [ngTemplateOutlet]=\"_customTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #dateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_dateTableFilterCell\"\n [ngTemplateOutlet]=\"_dateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #relativeDateTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_relativeDateTableFilterCell\"\n [ngTemplateOutlet]=\"_relativeDateTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n<ng-template #translationKeyTableFilterCell let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"_translationKeyTableFilterCell\"\n [ngTemplateOutlet]=\"_translationKeyTableFilterCell\"\n [ngTemplateOutletContext]=\"{rowObject: rowObject, column:column}\"\n >\n </ng-container\n></ng-template>\n" }]
485
495
  }], ctorParameters: () => [{ type: i1.SlotService }], propDecorators: { dataView: [{
486
496
  type: ViewChild,
487
497
  args: [DataViewComponent]
@@ -559,6 +569,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
559
569
  type: Input
560
570
  }], tablePaginator: [{
561
571
  type: Input
572
+ }], disableFilterView: [{
573
+ type: Input
574
+ }], filterViewDisplayMode: [{
575
+ type: Input
576
+ }], filterViewChipStyleClass: [{
577
+ type: Input
578
+ }], filterViewTableStyle: [{
579
+ type: Input
580
+ }], filterViewPanelStyle: [{
581
+ type: Input
582
+ }], selectDisplayedChips: [{
583
+ type: Input
562
584
  }], page: [{
563
585
  type: Input
564
586
  }], selectedRows: [{
@@ -690,4 +712,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
690
712
  }], data: [{
691
713
  type: Input
692
714
  }] } });
693
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtZGF0YS12aWV3L2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ludGVyYWN0aXZlLWRhdGEtdmlldy9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFDYixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLE1BQU0sQ0FBQTtBQUliLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBS3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFNM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBSTlELE9BQU8sRUFBRSxpQkFBaUIsRUFBMkMsTUFBTSxrQ0FBa0MsQ0FBQTs7Ozs7Ozs7Ozs7QUFtQjdHLE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsSUFBa0MsUUFBUSxDQUFDLEdBQWtDO1FBQzNFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUE7UUFDN0IsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUE7SUFDekMsQ0FBQztJQUNELElBQUks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RixJQUFJO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBzdGFydFdpdGgsXG4gIHRpbWVzdGFtcCxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBEYXRhQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1hY3Rpb24nXG5pbXBvcnQgeyBEYXRhU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtc29ydC1kaXJlY3Rpb24nXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcbmltcG9ydCB7IG9yZGVyQW5kTWVyZ2VWYWx1ZXNCeVRpbWVzdGFtcCB9IGZyb20gJy4uLy4uL3V0aWxzL3J4anMtdXRpbHMnXG5pbXBvcnQge1xuICBDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlLFxuICBHcm91cFNlbGVjdGlvbkNoYW5nZWRFdmVudCxcbn0gZnJvbSAnLi4vY29sdW1uLWdyb3VwLXNlbGVjdGlvbi9jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uLmNvbXBvbmVudCdcbmltcG9ydCB7IFByaW1lVGVtcGxhdGUgfSBmcm9tICdwcmltZW5nL2FwaSdcbmltcG9ydCB7XG4gIEFjdGlvbkNvbHVtbkNoYW5nZWRFdmVudCxcbiAgQ29sdW1uU2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICBDdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUsXG59IGZyb20gJy4uL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IvY3VzdG9tLWdyb3VwLWNvbHVtbi1zZWxlY3Rvci5jb21wb25lbnQnXG5pbXBvcnQgeyBTbG90U2VydmljZSB9IGZyb20gJ0BvbmVjeC9hbmd1bGFyLXJlbW90ZS1jb21wb25lbnRzJ1xuaW1wb3J0IHsgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1sYXlvdXQtc2VsZWN0aW9uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUgfSBmcm9tICcuLi9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nL2RhdGEtbGlzdC1ncmlkLXNvcnRpbmcuY29tcG9uZW50J1xuaW1wb3J0IHsgUm93LCBTb3J0IH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFWaWV3Q29tcG9uZW50LCBEYXRhVmlld0NvbXBvbmVudFN0YXRlLCBSb3dMaXN0R3JpZERhdGEgfSBmcm9tICcuLi9kYXRhLXZpZXcvZGF0YS12aWV3LmNvbXBvbmVudCdcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVsL2ZpbHRlci5tb2RlbCdcblxuZXhwb3J0IHR5cGUgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudFN0YXRlID0gQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSAmXG4gIEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSAmXG4gIERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSAmXG4gIERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSAmXG4gIERhdGFWaWV3Q29tcG9uZW50U3RhdGVcblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5Hcm91cERhdGEge1xuICBhY3RpdmVDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXVxuICBncm91cEtleTogc3RyaW5nXG59XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtaW50ZXJhY3RpdmUtZGF0YS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogJ0ludGVyYWN0aXZlRGF0YVZpZXdDb21wb25lbnQnLCB1c2VFeGlzdGluZzogSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIF9kYXRhVmlld0NvbXBvbmVudDogRGF0YVZpZXdDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgQFZpZXdDaGlsZChEYXRhVmlld0NvbXBvbmVudCkgc2V0IGRhdGFWaWV3KHJlZjogRGF0YVZpZXdDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudCA9IHJlZlxuICAgIHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVyRm9yRGF0YVZpZXcoKVxuICB9XG4gIGdldCBkYXRhVmlldygpOiBEYXRhVmlld0NvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50XG4gIH1cblxuICBjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGU+KDEpXG4gIGN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxDdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGU+KDEpXG4gIGRhdGFMYXlvdXRDb21wb25lbnRTdGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRhTGF5b3V0U2VsZWN0aW9uQ29tcG9uZW50U3RhdGU+KDEpXG4gIGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGU+KDEpXG4gIGRhdGFWaWV3Q29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YVZpZXdDb21wb25lbnRTdGF0ZT4oMSlcblxuICBASW5wdXQoKSBzZWFyY2hDb25maWdQZXJtaXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlUGVybWlzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRQZXJtaXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld1Blcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB0YWJsZUFsbG93U2VsZWN0QWxsID0gdHJ1ZVxuICBASW5wdXQoKSBuYW1lID0gJ0RhdGEnXG4gIEBJbnB1dCgpIHRpdGxlTGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc3VidGl0bGVMaW5lSWRzOiBzdHJpbmdbXSA9IFtdXG4gIEBJbnB1dCgpIHN1cHBvcnRlZFZpZXdMYXlvdXRzOiAoJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJylbXSA9IFsnZ3JpZCcsICdsaXN0JywgJ3RhYmxlJ11cbiAgQElucHV0KCkgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10gPSBbXVxuICBASW5wdXQoKSBlbXB0eVJlc3VsdHNNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgY2xpZW50U2lkZVNvcnRpbmcgPSB0cnVlXG4gIEBJbnB1dCgpIGNsaWVudFNpZGVGaWx0ZXJpbmcgPSB0cnVlXG4gIEBJbnB1dCgpIGZhbGxiYWNrSW1hZ2UgPSAncGxhY2Vob2xkZXIucG5nJ1xuICBASW5wdXQoKSBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdXG4gIEBJbnB1dCgpIHNvcnREaXJlY3Rpb246IERhdGFTb3J0RGlyZWN0aW9uID0gRGF0YVNvcnREaXJlY3Rpb24uTk9ORVxuICBASW5wdXQoKSBzb3J0RmllbGQ6IGFueSA9ICcnXG4gIEBJbnB1dCgpIHNvcnRTdGF0ZXM6IERhdGFTb3J0RGlyZWN0aW9uW10gPSBbXG4gICAgRGF0YVNvcnREaXJlY3Rpb24uQVNDRU5ESU5HLFxuICAgIERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkcsXG4gICAgRGF0YVNvcnREaXJlY3Rpb24uTk9ORSxcbiAgXVxuICBASW5wdXQoKSBwYWdlU2l6ZXM6IG51bWJlcltdID0gWzEwLCAyNSwgNTBdXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzT25TZXJ2ZXI6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBsYXlvdXQ6ICdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZScgPSAndGFibGUnXG4gIEBJbnB1dCgpIGRlZmF1bHRHcm91cEtleSA9ICcnXG4gIEBJbnB1dCgpIGN1c3RvbUdyb3VwS2V5ID0gJ09DWF9JTlRFUkFDVElWRV9EQVRBX1ZJRVcuQ1VTVE9NX0dST1VQJ1xuICBASW5wdXQoKSBncm91cFNlbGVjdGlvbk5vR3JvdXBTZWxlY3RlZEtleSA9ICdPQ1hfSU5URVJBQ1RJVkVfREFUQV9WSUVXLk5PX0dST1VQX1NFTEVDVEVEJ1xuICBASW5wdXQoKSBjdXJyZW50UGFnZVNob3dpbmdLZXkgPSAnT0NYX0RBVEFfVEFCTEUuU0hPV0lORydcbiAgQElucHV0KCkgY3VycmVudFBhZ2VTaG93aW5nV2l0aFRvdGFsT25TZXJ2ZXJLZXkgPSAnT0NYX0RBVEFfVEFCTEUuU0hPV0lOR19XSVRIX1RPVEFMX09OX1NFUlZFUidcbiAgQElucHV0KCkgYWRkaXRpb25hbEFjdGlvbnM6IERhdGFBY3Rpb25bXSA9IFtdXG4gIEBJbnB1dCgpIGxpc3RHcmlkUGFnaW5hdG9yID0gdHJ1ZVxuICBASW5wdXQoKSB0YWJsZVBhZ2luYXRvciA9IHRydWVcbiAgQElucHV0KCkgcGFnZSA9IDBcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBSb3dbXSA9IFtdXG4gIGRpc3BsYXllZENvbHVtbktleXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pXG4gIGRpc3BsYXllZENvbHVtbnMkOiBPYnNlcnZhYmxlPERhdGFUYWJsZUNvbHVtbltdPiB8IHVuZGVmaW5lZFxuICBASW5wdXQoKVxuICBnZXQgZGlzcGxheWVkQ29sdW1uS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBkaXNwbGF5ZWRDb2x1bW5LZXlzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyQubmV4dCh2YWx1ZSlcbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBkaXNwbGF5ZWRDb2x1bW5LZXlzYCBhbmQgcGFzcyBpbiBjb2x1bW4gaWRzIGluc3RlYWQgb2YgYERhdGFUYWJsZUNvbHVtbmAgb2JqZWN0c1xuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc3BsYXllZENvbHVtbnMoKTogRGF0YVRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzXG4gICAgICAgIC5tYXAoKGQpID0+IHRoaXMuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBkKSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gZCkgYXMgRGF0YVRhYmxlQ29sdW1uW10pID8/IFtdXG4gICAgKVxuICB9XG4gIHNldCBkaXNwbGF5ZWRDb2x1bW5zKHZhbHVlOiBEYXRhVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyQubmV4dCh2YWx1ZS5tYXAoKGQpID0+IGQuaWQpKVxuICB9XG4gIEBJbnB1dCgpIGZyb3plbkFjdGlvbkNvbHVtbiA9IGZhbHNlXG4gIEBJbnB1dCgpIGFjdGlvbkNvbHVtblBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnID0gJ3JpZ2h0J1xuICBAQ29udGVudENoaWxkKCd0YWJsZUNlbGwnKSB0YWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgZGF0ZVRhYmxlQ2VsbFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgndGFibGVEYXRlQ2VsbCcpIHRhYmxlRGF0ZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZGF0ZVRhYmxlQ2VsbCcpIGRhdGVUYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZXBsYWNlZCBieSByZWxhdGl2ZURhdGVUYWJsZUNlbGxcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlUmVsYXRpdmVEYXRlQ2VsbCcpIHRhYmxlUmVsYXRpdmVEYXRlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdyZWxhdGl2ZURhdGVUYWJsZUNlbGwnKSByZWxhdGl2ZURhdGVUYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZXBsYWNlZCBieSB0cmFuc2xhdGlvbktleVRhYmxlQ2VsbFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgndGFibGVUcmFuc2xhdGlvbktleUNlbGwnKSB0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleVRhYmxlQ2VsbCcpIHRyYW5zbGF0aW9uS2V5VGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG5cbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzJykgZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RJdGVtU3VidGl0bGVMaW5lcycpIGxpc3RJdGVtU3VidGl0bGVMaW5lczogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdUYWJsZUNlbGwnKSBzdHJpbmdUYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbnVtYmVyVGFibGVDZWxsJykgbnVtYmVyVGFibGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtblxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRUYWJsZUNlbGxcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgaW4gRGF0YVRhYmxlIHVzZSBwVGVtcGxhdGU9XCJzdGF0dXNJZFRhYmxlQ2VsbFwiXG4gICAqL1xuICBAQ29udGVudENoaWxkKCdjdXN0b21UYWJsZUNlbGwnKSBjdXN0b21UYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW0nKSBncmlkSXRlbTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbScpIGxpc3RJdGVtOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RvcENlbnRlcicpIHRvcENlbnRlcjogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0VmFsdWUnKSBsaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndHJhbnNsYXRpb25LZXlMaXN0VmFsdWUnKSB0cmFuc2xhdGlvbktleUxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdudW1iZXJMaXN0VmFsdWUnKSBudW1iZXJMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgncmVsYXRpdmVEYXRlTGlzdFZhbHVlJykgcmVsYXRpdmVEYXRlTGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtblxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRMaXN0VmFsdWVcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgRGF0YUxpc3RHcmlkIHVzZSBwVGVtcGxhdGU9XCJzdGF0dXNJZExpc3RWYWx1ZVwiXG4gICAqL1xuICBAQ29udGVudENoaWxkKCdjdXN0b21MaXN0VmFsdWUnKSBjdXN0b21MaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnc3RyaW5nTGlzdFZhbHVlJykgc3RyaW5nTGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVMaXN0VmFsdWUnKSBkYXRlTGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlRmlsdGVyQ2VsbCcpIHRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdkYXRlVGFibGVGaWx0ZXJDZWxsJykgZGF0ZVRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwnKSByZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwnKSB0cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdUYWJsZUZpbHRlckNlbGwnKSBzdHJpbmdUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbnVtYmVyVGFibGVGaWx0ZXJDZWxsJykgbnVtYmVyVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtbiBmaWx0ZXJcbiAgICogdXNlIHRoZSBuZXcgYXBwcm9hY2ggaW5zdGVhZCBieSBmb2xsb3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIGNvbHVtbiBpZCArIElkVGFibGVGaWx0ZXJDZWxsXG4gICAqIGUuZy4gZm9yIGEgY29sdW1uIHdpdGggdGhlIGlkICdzdGF0dXMnIGluIERhdGFUYWJsZSB1c2UgcFRlbXBsYXRlPVwic3RhdHVzSWRUYWJsZUZpbHRlckNlbGxcIlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnY3VzdG9tVGFibGVGaWx0ZXJDZWxsJykgY3VzdG9tVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG5cbiAgdGVtcGxhdGVzJDogQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZClcbiAgQENvbnRlbnRDaGlsZHJlbihQcmltZVRlbXBsYXRlKVxuICBzZXQgdGVtcGxhdGVzKHZhbHVlOiBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRlbXBsYXRlcyQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIEBPdXRwdXQoKSBmaWx0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyW10+KClcbiAgQE91dHB1dCgpIHNvcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKVxuICBAT3V0cHV0KCkgZGVsZXRlSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8Um93TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSB2aWV3SXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8Um93TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSBlZGl0SXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8Um93TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSBkYXRhVmlld0xheW91dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJz4oKVxuICAvLyBUT0RPOiBSZW1vdmUgZm9sbG93aW5nIGxpbmUgb25jZSBkaXNwbGF5ZWRDb2x1bW5zIChkZXByZWNhdGVkKSBoYXMgYmVlbiByZW1vdmVkXG4gIEBPdXRwdXQoKSBkaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVDb2x1bW5bXT4oKVxuICBAT3V0cHV0KCkgZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KClcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxSb3dbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKVxuXG4gIEBPdXRwdXQoKSBjb21wb25lbnRTdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEludGVyYWN0aXZlRGF0YVZpZXdDb21wb25lbnRTdGF0ZT4oKVxuXG4gIHNlbGVjdGVkR3JvdXBLZXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KCcnKVxuICBnZXQgc2VsZWN0ZWRHcm91cEtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkR3JvdXBLZXkkLmdldFZhbHVlKClcbiAgfVxuICBzZXQgc2VsZWN0ZWRHcm91cEtleSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5JC5uZXh0KHZhbHVlKVxuICB9XG4gIGlzRGVsZXRlSXRlbU9ic2VydmVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGlzVmlld0l0ZW1PYnNlcnZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBpc0VkaXRJdGVtT2JzZXJ2ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgZmlyc3RDb2x1bW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgQElucHV0KClcbiAgZ2V0IHBhZ2luYXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0R3JpZFBhZ2luYXRvciAmJiB0aGlzLnRhYmxlUGFnaW5hdG9yXG4gIH1cbiAgc2V0IHBhZ2luYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGlzdEdyaWRQYWdpbmF0b3IgPSB2YWx1ZVxuICAgIHRoaXMudGFibGVQYWdpbmF0b3IgPSB2YWx1ZVxuICB9XG5cbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzXG4gIH1cbiAgZ2V0IF9saXN0SXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXG4gIH1cbiAgZ2V0IF90YWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9zdHJpbmdUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9udW1iZXJUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9jdXN0b21UYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVGFibGVDZWxsXG4gIH1cbiAgZ2V0IF90YWJsZURhdGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVUYWJsZUNlbGwgPz8gdGhpcy50YWJsZURhdGVDZWxsXG4gIH1cbiAgZ2V0IF9kYXRlVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVUYWJsZUNlbGxcbiAgfVxuICBnZXQgX3RhYmxlUmVsYXRpdmVEYXRlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPz8gdGhpcy50YWJsZVJlbGF0aXZlRGF0ZUNlbGxcbiAgfVxuICBnZXQgX3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGxcbiAgfVxuICBnZXQgX3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVDZWxsID8/IHRoaXMudGFibGVUcmFuc2xhdGlvbktleUNlbGxcbiAgfVxuICBnZXQgX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVDZWxsXG4gIH1cbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVxuICB9XG4gIGdldCBfbGlzdEl0ZW0oKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1cbiAgfVxuICBnZXQgX2xpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0VmFsdWVcbiAgfVxuICBnZXQgX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9udW1iZXJMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9yZWxhdGl2ZURhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9jdXN0b21MaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9zdHJpbmdMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nTGlzdFZhbHVlXG4gIH1cbiAgZ2V0IF9kYXRlTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGVMaXN0VmFsdWVcbiAgfVxuICBnZXQgX3RhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX2RhdGVUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX251bWJlclRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJUYWJsZUZpbHRlckNlbGxcbiAgfVxuICBnZXQgX2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21UYWJsZUZpbHRlckNlbGxcbiAgfVxuXG4gIF9kYXRhOiBSb3dMaXN0R3JpZERhdGFbXSA9IFtdXG4gIEBJbnB1dCgpXG4gIGdldCBkYXRhKCk6IFJvd0xpc3RHcmlkRGF0YVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVxuICB9XG4gIHNldCBkYXRhKHZhbHVlOiBSb3dMaXN0R3JpZERhdGFbXSkge1xuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZVxuICB9XG5cbiAgY29sdW1uR3JvdXBTbG90TmFtZSA9ICdvbmVjeC1jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uJ1xuICBpc0NvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50RGVmaW5lZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cbiAgZ3JvdXBTZWxlY3Rpb25DaGFuZ2VkU2xvdEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtbkdyb3VwRGF0YSB8IHVuZGVmaW5lZD4oKVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2xvdFNlcnZpY2U6IFNsb3RTZXJ2aWNlKSB7XG4gICAgdGhpcy5pc0NvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50RGVmaW5lZCQgPSB0aGlzLnNsb3RTZXJ2aWNlXG4gICAgICAuaXNTb21lQ29tcG9uZW50RGVmaW5lZEZvclNsb3QodGhpcy5jb2x1bW5Hcm91cFNsb3ROYW1lKVxuICAgICAgLnBpcGUoc3RhcnRXaXRoKHRydWUpKVxuXG4gICAgdGhpcy5ncm91cFNlbGVjdGlvbkNoYW5nZWRTbG90RW1pdHRlci5zdWJzY3JpYmUoKGV2ZW50OiBDb2x1bW5Hcm91cERhdGEgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV2ZW50ID0ge1xuICAgICAgICAgIGFjdGl2ZUNvbHVtbnM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucyxcbiAgICAgICAgICBncm91cEtleTogdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID8/IHRoaXMuZGVmYXVsdEdyb3VwS2V5LFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMkLm5leHQoZXZlbnQuYWN0aXZlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmlkKSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSQubmV4dChldmVudC5ncm91cEtleSlcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uc0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1ucylcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cylcbiAgICAgIHRoaXMuY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQubmV4dCh7XG4gICAgICAgIGFjdGl2ZUNvbHVtbkdyb3VwS2V5OiBldmVudC5ncm91cEtleSxcbiAgICAgICAgZGlzcGxheWVkQ29sdW1uczogZXZlbnQuYWN0aXZlQ29sdW1ucyxcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHRoaXMuZGF0YVZpZXdMYXlvdXRDaGFuZ2VcbiAgICAgIC5waXBlKHdpdGhMYXRlc3RGcm9tKHRoaXMuaXNDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudERlZmluZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtfLCBjb2x1bW5Hcm91cENvbXBvbmVudERlZmluZWRdKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW5Hcm91cENvbXBvbmVudERlZmluZWQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lS2V5ID09PSB0aGlzLnNlbGVjdGVkR3JvdXBLZXkpIHx8XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9PT0gdGhpcy5jdXN0b21Hcm91cEtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5JC5uZXh0KHVuZGVmaW5lZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBLZXkgPSB0aGlzLmRlZmF1bHRHcm91cEtleVxuICAgIGlmICghdGhpcy5kaXNwbGF5ZWRDb2x1bW5zIHx8IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKVxuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0R3JvdXBLZXkgJiYgdGhpcy5kZWZhdWx0R3JvdXBLZXkgIT09IHRoaXMuY3VzdG9tR3JvdXBLZXkpIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyA9IHRoaXMuY29sdW1uc1xuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5wcmVkZWZpbmVkR3JvdXBLZXlzPy5pbmNsdWRlcyh0aGlzLmRlZmF1bHRHcm91cEtleSkpXG4gICAgICAgIC5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKVxuICAgIH1cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMkID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHByZXYubGVuZ3RoID09PSBjdXJyLmxlbmd0aCAmJiBwcmV2LmV2ZXJ5KCh2KSA9PiBjdXJyLmluY2x1ZGVzKHYpKSksXG4gICAgICBtYXAoXG4gICAgICAgIChjb2x1bW5LZXlzKSA9PlxuICAgICAgICAgIChjb2x1bW5LZXlzLm1hcCgoa2V5KSA9PiB0aGlzLmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuaWQgPT09IGtleSkpLmZpbHRlcigoZCkgPT4gZCkgYXMgRGF0YVRhYmxlQ29sdW1uW10pID8/XG4gICAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cylcbiAgICBpZiAoIXRoaXMuZ3JvdXBTZWxlY3Rpb25Ob0dyb3VwU2VsZWN0ZWRLZXkpIHtcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25Ob0dyb3VwU2VsZWN0ZWRLZXkgPSAnT0NYX0lOVEVSQUNUSVZFX0RBVEFfVklFVy5OT19HUk9VUF9TRUxFQ1RFRCdcbiAgICB9XG4gICAgdGhpcy5maXJzdENvbHVtbklkID0gdGhpcy5jb2x1bW5zWzBdPy5pZFxuXG4gICAgbGV0IGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQ6IE9ic2VydmFibGU8RGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+PiA9XG4gICAgICB0aGlzLmRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSRcbiAgICBsZXQgY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQ6IE9ic2VydmFibGU8Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPj4gPVxuICAgICAgdGhpcy5jb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJFxuICAgIGxldCBjdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUkOiBPYnNlcnZhYmxlPFxuICAgICAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+XG4gICAgPiA9IHRoaXMuY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJFxuXG4gICAgaWYgKHRoaXMubGF5b3V0ID09PSAndGFibGUnKSB7XG4gICAgICBkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkID0gZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJC5waXBlKHN0YXJ0V2l0aCh7fSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkID0gY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHtcbiAgICAgICAgICBhY3RpdmVDb2x1bW5Hcm91cEtleTogdGhpcy5zZWxlY3RlZEdyb3VwS2V5LFxuICAgICAgICAgIGRpc3BsYXllZENvbHVtbnM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQgPSBjdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh7XG4gICAgICAgICAgYWN0aW9uQ29sdW1uQ29uZmlnOiB7XG4gICAgICAgICAgICBmcm96ZW46IHRoaXMuZnJvemVuQWN0aW9uQ29sdW1uLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuYWN0aW9uQ29sdW1uUG9zaXRpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNwbGF5ZWRDb2x1bW5zOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsXG4gICAgICAgICAgYWN0aXZlQ29sdW1uR3JvdXBLZXk6IHRoaXMuc2VsZWN0ZWRHcm91cEtleSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgICAgY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICAgIHRoaXMuZGF0YUxheW91dENvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICAgIGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICB0aGlzLmRhdGFWaWV3Q29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChjb21wb25lbnRTdGF0ZXMpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JkZXJBbmRNZXJnZVZhbHVlc0J5VGltZXN0YW1wKGNvbXBvbmVudFN0YXRlcylcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBvbmVudFN0YXRlQ2hhbmdlZC5lbWl0KHZhbClcbiAgICAgIH0pXG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXMkLnZhbHVlPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgJ3RhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVEYXRlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZURhdGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZVJlbGF0aXZlRGF0ZUNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVSZWxhdGl2ZURhdGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndGFibGVUcmFuc2xhdGlvbktleUNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVUcmFuc2xhdGlvbktleUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndHJhbnNsYXRpb25LZXlUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzJzpcbiAgICAgICAgICB0aGlzLmdyaWRJdGVtU3VidGl0bGVMaW5lcyA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsaXN0SXRlbVN1YnRpdGxlTGluZXMnOlxuICAgICAgICAgIHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ1RhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdUYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyVGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLm51bWJlclRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21UYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tVGFibGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2dyaWRJdGVtJzpcbiAgICAgICAgICB0aGlzLmdyaWRJdGVtID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xpc3RJdGVtJzpcbiAgICAgICAgICB0aGlzLmxpc3RJdGVtID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RvcENlbnRlcic6XG4gICAgICAgICAgdGhpcy50b3BDZW50ZXIgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubnVtYmVyTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVMaXN0VmFsdWUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnY3VzdG9tTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmN1c3RvbUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzdHJpbmdMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuc3RyaW5nTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVMaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuZGF0ZUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMudGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RhdGVUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMuZGF0ZVRhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMucmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdUYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyVGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLm51bWJlclRhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21UYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZpbHRlcmluZyhldmVudDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJzID0gZXZlbnRcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZXZlbnQpXG4gIH1cblxuICBzb3J0aW5nKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBldmVudC5zb3J0RGlyZWN0aW9uXG4gICAgdGhpcy5zb3J0RmllbGQgPSBldmVudC5zb3J0Q29sdW1uXG4gICAgdGhpcy5zb3J0ZWQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uRGVsZXRlRWxlbWVudChlbGVtZW50OiBSb3dMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAodGhpcy5pc0RlbGV0ZUl0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy5kZWxldGVJdGVtLmVtaXQoZWxlbWVudClcbiAgICB9XG4gIH1cblxuICBvblZpZXdFbGVtZW50KGVsZW1lbnQ6IFJvd0xpc3RHcmlkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy52aWV3SXRlbS5lbWl0KGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgb25FZGl0RWxlbWVudChlbGVtZW50OiBSb3dMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAodGhpcy5pc0VkaXRJdGVtT2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuZWRpdEl0ZW0uZW1pdChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YVZpZXdMYXlvdXRDaGFuZ2UobGF5b3V0OiAnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnKSB7XG4gICAgdGhpcy5sYXlvdXQgPSBsYXlvdXRcbiAgICB0aGlzLmRhdGFWaWV3TGF5b3V0Q2hhbmdlLmVtaXQobGF5b3V0KVxuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0RmllbGQgPSAkZXZlbnRcbiAgICB0aGlzLnNvcnRlZC5lbWl0KHsgc29ydENvbHVtbjogdGhpcy5zb3J0RmllbGQsIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvbiB9KVxuICB9XG5cbiAgb25Tb3J0RGlyZWN0aW9uQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJGV2ZW50XG4gICAgdGhpcy5zb3J0ZWQuZW1pdCh7IHNvcnRDb2x1bW46IHRoaXMuc29ydEZpZWxkLCBzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb24gfSlcbiAgfVxuXG4gIG9uQ29sdW1uR3JvdXBTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEdyb3VwU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gZXZlbnQuYWN0aXZlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmlkKVxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9IGV2ZW50Lmdyb3VwS2V5XG4gICAgLy8gVE9ETzogUmVtb3ZlIGZvbGxvd2luZyBsaW5lIG9uY2UgZGlzcGxheWVkQ29sdW1ucyAoZGVwcmVjYXRlZCkgaGFzIGJlZW4gcmVtb3ZlZFxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uc0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1ucylcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbktleXMpXG4gIH1cblxuICByZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVmlldygpIHtcbiAgICBpZiAodGhpcy5kZWxldGVJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzRGVsZXRlSXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZGVsZXRlSXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZGVsZXRlSXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnQoZXZlbnQpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzVmlld0l0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgIGlmICghdGhpcy5fZGF0YVZpZXdDb21wb25lbnQ/LnZpZXdJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py52aWV3SXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vblZpZXdFbGVtZW50KGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0SXRlbS5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5pc0VkaXRJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICBpZiAoIXRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5lZGl0SXRlbS5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uZWRpdEl0ZW0uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMub25FZGl0RWxlbWVudChldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgICB0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8uc2VsZWN0aW9uQ2hhbmdlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZShldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdGlvbkNoYW5nZShldmVudDogQ29sdW1uU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gZXZlbnQuYWN0aXZlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmlkKVxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9IHRoaXMuY3VzdG9tR3JvdXBLZXlcbiAgICAvLyBUT0RPOiBSZW1vdmUgZm9sbG93aW5nIGxpbmUgb25jZSBkaXNwbGF5ZWRDb2x1bW5zIChkZXByZWNhdGVkKSBoYXMgYmVlbiByZW1vdmVkXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cylcbiAgfVxuXG4gIG9uQWN0aW9uQ29sdW1uQ29uZmlnQ2hhbmdlKGV2ZW50OiBBY3Rpb25Db2x1bW5DaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmZyb3plbkFjdGlvbkNvbHVtbiA9IGV2ZW50LmZyb3plbkFjdGlvbkNvbHVtblxuICAgIHRoaXMuYWN0aW9uQ29sdW1uUG9zaXRpb24gPSBldmVudC5hY3Rpb25Db2x1bW5Qb3NpdGlvblxuICB9XG5cbiAgb25Sb3dTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFJvd1tdKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2UgPSBldmVudFxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUgPSBldmVudFxuICAgIHRoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQoZXZlbnQpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTMgYm9yZGVyLWJvdHRvbS0xIHN1cmZhY2UtYm9yZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMSBnYXAtMlwiPlxuICAgIDxvY3gtZGF0YS1sYXlvdXQtc2VsZWN0aW9uXG4gICAgICBbc3VwcG9ydGVkVmlld0xheW91dHNdPVwic3VwcG9ydGVkVmlld0xheW91dHNcIlxuICAgICAgW2xheW91dF09XCJsYXlvdXRcIlxuICAgICAgKGRhdGFWaWV3TGF5b3V0Q2hhbmdlKT1cIm9uRGF0YVZpZXdMYXlvdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImRhdGFMYXlvdXRDb21wb25lbnRTdGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICA+PC9vY3gtZGF0YS1sYXlvdXQtc2VsZWN0aW9uPlxuXG4gICAgPGRpdiAqbmdJZj1cInRvcENlbnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0b3BDZW50ZXJcIj4gPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibGF5b3V0ICE9PSAndGFibGUnXCIgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPG9jeC1kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nXG4gICAgICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgICAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXG4gICAgICAgIFtjb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgIFtzb3J0U3RhdGVzXT1cInNvcnRTdGF0ZXNcIlxuICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0RGlyZWN0aW9uQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gICAgICA+PC9vY3gtZGF0YS1saXN0LWdyaWQtc29ydGluZz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtuZ1N0eWxlXT1cImxheW91dCAhPT0gJ3RhYmxlJyA/IHtcbiAgICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZSdcbiAgICB9IDoge31cIlxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50RGVmaW5lZCQgfCBhc3luYzsgZWxzZSBkZWZhdWx0Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXllZENvbHVtbktleXMkIHwgYXN5bmMgYXMgZGlzcGxheWVkQ29sdW1uS2V5c1wiPlxuICAgICAgICAgIDxvY3gtc2xvdFxuICAgICAgICAgICAgW25nU3R5bGVdPVwibGF5b3V0ICE9PSAndGFibGUnID8geydkaXNwbGF5JyA6ICdub25lJ30gIDoge31cIlxuICAgICAgICAgICAgKm9jeElmUGVybWlzc2lvbj1cInNlYXJjaENvbmZpZ1Blcm1pc3Npb247IGVsc2VUZW1wbGF0ZTogZGVmYXVsdENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgIG5hbWU9XCJ7e2NvbHVtbkdyb3VwU2xvdE5hbWV9fVwiXG4gICAgICAgICAgICBbaW5wdXRzXT1cInsgcGxhY2Vob2xkZXJLZXk6IGdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5LCBkZWZhdWx0R3JvdXBLZXk6IGRlZmF1bHRHcm91cEtleSwgY3VzdG9tR3JvdXBLZXk6IGN1c3RvbUdyb3VwS2V5LCBjb2x1bW5zOiBjb2x1bW5zLCBzZWxlY3RlZEdyb3VwS2V5OiBzZWxlY3RlZEdyb3VwS2V5LCBsYXlvdXQ6IGxheW91dCwgZGlzcGxheWVkQ29sdW1uc0lkczogZGlzcGxheWVkQ29sdW1uS2V5cyB9XCJcbiAgICAgICAgICAgIFtvdXRwdXRzXT1cInsgZ3JvdXBTZWxlY3Rpb25DaGFuZ2VkOiBncm91cFNlbGVjdGlvbkNoYW5nZWRTbG90RW1pdHRlciB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NrZWxldG9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMThyZW1cIiBoZWlnaHQ9XCIzcmVtXCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9vY3gtc2xvdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG9jeC1jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yXG4gICAgICAgICpuZ0lmPVwibGF5b3V0ID09PSAndGFibGUnXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgIFtjdXN0b21Hcm91cEtleV09XCJjdXN0b21Hcm91cEtleVwiXG4gICAgICAgIChjb2x1bW5TZWxlY3Rpb25DaGFuZ2VkKT1cIm9uQ29sdW1uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZnJvemVuQWN0aW9uQ29sdW1uXT1cImZyb3plbkFjdGlvbkNvbHVtblwiXG4gICAgICAgIFthY3Rpb25Db2x1bW5Qb3NpdGlvbl09XCJhY3Rpb25Db2x1bW5Qb3NpdGlvblwiXG4gICAgICAgIChhY3Rpb25Db2x1bW5Db25maWdDaGFuZ2VkKT1cIm9uQWN0aW9uQ29sdW1uQ29uZmlnQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgID48L29jeC1jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInAtM1wiPlxuICA8b2N4LWRhdGEtdmlld1xuICAgIFtjb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW3NvcnRTdGF0ZXNdPVwic29ydFN0YXRlc1wiXG4gICAgW3NvcnRGaWVsZF09XCJzb3J0RmllbGRcIlxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgIFt0aXRsZUxpbmVJZF09XCJ0aXRsZUxpbmVJZFwiXG4gICAgW3N1YnRpdGxlTGluZUlkc109XCJzdWJ0aXRsZUxpbmVJZHNcIlxuICAgIFtjbGllbnRTaWRlU29ydGluZ109XCJjbGllbnRTaWRlU29ydGluZ1wiXG4gICAgW2NsaWVudFNpZGVGaWx0ZXJpbmddPVwiY2xpZW50U2lkZUZpbHRlcmluZ1wiXG4gICAgW3BhZ2VTaXplc109XCJwYWdlU2l6ZXNcIlxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgW2VtcHR5UmVzdWx0c01lc3NhZ2VdPVwiZW1wdHlSZXN1bHRzTWVzc2FnZVwiXG4gICAgW2xheW91dF09XCJsYXlvdXRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtkZWxldGVQZXJtaXNzaW9uXT1cImRlbGV0ZVBlcm1pc3Npb25cIlxuICAgIFtlZGl0UGVybWlzc2lvbl09XCJlZGl0UGVybWlzc2lvblwiXG4gICAgW3ZpZXdQZXJtaXNzaW9uXT1cInZpZXdQZXJtaXNzaW9uXCJcbiAgICBbZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXT1cImRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2RlbGV0ZUFjdGlvblZpc2libGVGaWVsZF09XCJkZWxldGVBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uRW5hYmxlZEZpZWxkXT1cImVkaXRBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uVmlzaWJsZUZpZWxkXT1cImVkaXRBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uRW5hYmxlZEZpZWxkXT1cInZpZXdBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uVmlzaWJsZUZpZWxkXT1cInZpZXdBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFthZGRpdGlvbmFsQWN0aW9uc109XCJhZGRpdGlvbmFsQWN0aW9uc1wiXG4gICAgW2xpc3RHcmlkUGFnaW5hdG9yXT1cImxpc3RHcmlkUGFnaW5hdG9yXCJcbiAgICBbdGFibGVQYWdpbmF0b3JdPVwidGFibGVQYWdpbmF0b3JcIlxuICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzXCJcbiAgICBbZnJvemVuQWN0aW9uQ29sdW1uXT1cImZyb3plbkFjdGlvbkNvbHVtblwiXG4gICAgW2FjdGlvbkNvbHVtblBvc2l0aW9uXT1cImFjdGlvbkNvbHVtblBvc2l0aW9uXCJcbiAgICBbc3RyaW5nVGFibGVDZWxsVGVtcGxhdGVdPVwiX3N0cmluZ1RhYmxlQ2VsbCA/IHN0cmluZ1RhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlclRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUNlbGwgPyBudW1iZXJUYWJsZUNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21UYWJsZUNlbGxUZW1wbGF0ZV09XCJfY3VzdG9tVGFibGVDZWxsID8gY3VzdG9tVGFibGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZGF0ZVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9kYXRlVGFibGVDZWxsID8gZGF0ZVRhYmxlQ2VsbCA6IF90YWJsZURhdGVDZWxsID8gdGFibGVEYXRlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPyByZWxhdGl2ZURhdGVUYWJsZUNlbGwgOiBfdGFibGVSZWxhdGl2ZURhdGVDZWxsID8gdGFibGVSZWxhdGl2ZURhdGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdGFibGVDZWxsVGVtcGxhdGVdPVwiX3RhYmxlQ2VsbCA/IHRhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsID8gdHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgOiBfdGFibGVUcmFuc2xhdGlvbktleUNlbGwgPyB0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2dyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlXT1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXMgPyBncmlkSXRlbVN1YnRpdGxlTGluZXMgOiB1bmRlZmluZWRcIlxuICAgIFtsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZV09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzID8gbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIDogdW5kZWZpbmVkXCJcbiAgICBbbGlzdEl0ZW1UZW1wbGF0ZV09XCJfbGlzdEl0ZW0gPyBsaXN0SXRlbSA6IHVuZGVmaW5lZFwiXG4gICAgW2xpc3RWYWx1ZVRlbXBsYXRlXT1cIl9saXN0VmFsdWUgPyBsaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFt0cmFuc2xhdGlvbktleUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA/IHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyTGlzdFZhbHVlVGVtcGxhdGVdPVwiX251bWJlckxpc3RWYWx1ZSA/IG51bWJlckxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVMaXN0VmFsdWUgPyByZWxhdGl2ZURhdGVMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21MaXN0VmFsdWVUZW1wbGF0ZV09XCJfY3VzdG9tTGlzdFZhbHVlID8gY3VzdG9tTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbc3RyaW5nTGlzdFZhbHVlVGVtcGxhdGVdPVwiX3N0cmluZ0xpc3RWYWx1ZSA/IHN0cmluZ0xpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2RhdGVMaXN0VmFsdWVUZW1wbGF0ZV09XCJfZGF0ZUxpc3RWYWx1ZSA/IGRhdGVMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtncmlkSXRlbVRlbXBsYXRlXT1cIl9ncmlkSXRlbSA/IGdyaWRJdGVtICA6IHVuZGVmaW5lZFwiXG4gICAgW3RhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl90YWJsZUZpbHRlckNlbGwgPyB0YWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtkYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX2RhdGVUYWJsZUZpbHRlckNlbGwgPyBkYXRlVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbY3VzdG9tVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCA/IGN1c3RvbVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlclRhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUZpbHRlckNlbGwgPyBudW1iZXJUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtzdHJpbmdUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsID8gc3RyaW5nVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCA/IHJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsID8gdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIChzb3J0ZWQpPVwic29ydGluZygkZXZlbnQpXCJcbiAgICAoZmlsdGVyZWQpPVwiZmlsdGVyaW5nKCRldmVudClcIlxuICAgIFt0b3RhbFJlY29yZHNPblNlcnZlcl09XCJ0b3RhbFJlY29yZHNPblNlcnZlclwiXG4gICAgW2N1cnJlbnRQYWdlU2hvd2luZ0tleV09XCJjdXJyZW50UGFnZVNob3dpbmdLZXlcIlxuICAgIFtjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleV09XCJjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleVwiXG4gICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJkYXRhVmlld0NvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgIFtwYXJlbnRUZW1wbGF0ZXNdPVwidGVtcGxhdGVzJCB8IGFzeW5jXCJcbiAgICBbdGFibGVBbGxvd1NlbGVjdEFsbF09XCJ0YWJsZUFsbG93U2VsZWN0QWxsXCJcbiAgICBbdGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGRdPVwidGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGRcIlxuICA+XG4gIDwvb2N4LWRhdGEtdmlldz5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudD5cbiAgPG9jeC1jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uXG4gICAgKm5nSWY9XCJsYXlvdXQgPT09ICd0YWJsZSdcIlxuICAgIFtzZWxlY3RlZEdyb3VwS2V5XT1cInNlbGVjdGVkR3JvdXBLZXkgPz8gZGVmYXVsdEdyb3VwS2V5XCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZGVmYXVsdEdyb3VwS2V5XT1cImRlZmF1bHRHcm91cEtleSAhPT0gY3VzdG9tR3JvdXBLZXkgPyBkZWZhdWx0R3JvdXBLZXkgOiAnJ1wiXG4gICAgW2N1c3RvbUdyb3VwS2V5XT1cImN1c3RvbUdyb3VwS2V5XCJcbiAgICBbcGxhY2Vob2xkZXJLZXldPVwiZ3JvdXBTZWxlY3Rpb25Ob0dyb3VwU2VsZWN0ZWRLZXlcIlxuICAgIChncm91cFNlbGVjdGlvbkNoYW5nZWQpPVwib25Db2x1bW5Hcm91cFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gID48L29jeC1jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdHJpbmdUYWJsZUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVEYXRlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdGFibGVEYXRlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVRhYmxlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfZGF0ZVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2RhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVSZWxhdGl2ZURhdGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVsYXRpdmVEYXRlVGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90cmFuc2xhdGlvbktleVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2dyaWRJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNncmlkSXRlbSBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCI+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LWl0ZW0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbnVtYmVyTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc3RyaW5nTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVMaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNudW1iZXJUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tVGFibGVGaWx0ZXJDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG4iXX0=
715
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1hY2NlbGVyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtZGF0YS12aWV3L2ludGVyYWN0aXZlLWRhdGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ludGVyYWN0aXZlLWRhdGEtdmlldy9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFDYixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLE1BQU0sQ0FBQTtBQUliLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBS3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFNM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBSTlELE9BQU8sRUFBRSxpQkFBaUIsRUFBMkMsTUFBTSxrQ0FBa0MsQ0FBQTtBQUU3RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEJBQTBCLENBQUE7Ozs7Ozs7Ozs7OztBQW9CaEQsTUFBTSxPQUFPLDRCQUE0QjtJQUV2QyxJQUFrQyxRQUFRLENBQUMsR0FBa0M7UUFDM0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQTtRQUM3QixJQUFJ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O3VCQUFDLGlCQUFpQjtnQkFDTSxtQkFBbUI7c0JBQXZELFlBQVk7dUJBQUMscUJBQXFCO2dCQUNVLDJCQUEyQjtzQkFBdkUsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBQ0ksNkJBQTZCO3NCQUEzRSxZQUFZO3VCQUFDLCtCQUErQjtnQkFDTixxQkFBcUI7c0JBQTNELFlBQVk7dUJBQUMsdUJBQXVCO2dCQUNFLHFCQUFxQjtzQkFBM0QsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBTUUscUJBQXFCO3NCQUEzRCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFNakMsU0FBUztzQkFEWixlQUFlO3VCQUFDLGFBQWE7Z0JBS3BCLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQWVILFNBQVM7c0JBRFosS0FBSztnQkFnR0YsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc3RhcnRXaXRoLFxuICB0aW1lc3RhbXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgRGF0YUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtYWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXNvcnQtZGlyZWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS10YWJsZS1jb2x1bW4ubW9kZWwnXG5pbXBvcnQgeyBvcmRlckFuZE1lcmdlVmFsdWVzQnlUaW1lc3RhbXAgfSBmcm9tICcuLi8uLi91dGlscy9yeGpzLXV0aWxzJ1xuaW1wb3J0IHtcbiAgQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSxcbiAgR3JvdXBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG59IGZyb20gJy4uL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24vY29sdW1uLWdyb3VwLXNlbGVjdGlvbi5jb21wb25lbnQnXG5pbXBvcnQgeyBQcmltZVRlbXBsYXRlIH0gZnJvbSAncHJpbWVuZy9hcGknXG5pbXBvcnQge1xuICBBY3Rpb25Db2x1bW5DaGFuZ2VkRXZlbnQsXG4gIENvbHVtblNlbGVjdGlvbkNoYW5nZWRFdmVudCxcbiAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlLFxufSBmcm9tICcuLi9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50J1xuaW1wb3J0IHsgU2xvdFNlcnZpY2UgfSBmcm9tICdAb25lY3gvYW5ndWxhci1yZW1vdGUtY29tcG9uZW50cydcbmltcG9ydCB7IERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSB9IGZyb20gJy4uL2RhdGEtbGF5b3V0LXNlbGVjdGlvbi9kYXRhLWxheW91dC1zZWxlY3Rpb24uY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1saXN0LWdyaWQtc29ydGluZy9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nLmNvbXBvbmVudCdcbmltcG9ydCB7IFJvdywgU29ydCB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhVmlld0NvbXBvbmVudCwgRGF0YVZpZXdDb21wb25lbnRTdGF0ZSwgUm93TGlzdEdyaWREYXRhIH0gZnJvbSAnLi4vZGF0YS12aWV3L2RhdGEtdmlldy5jb21wb25lbnQnXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9maWx0ZXIubW9kZWwnXG5pbXBvcnQgeyBsaW1pdCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbHRlci51dGlscydcbmltcG9ydCB7IEZpbHRlclZpZXdDb21wb25lbnRTdGF0ZSwgRmlsdGVyVmlld0Rpc3BsYXlNb2RlIH0gZnJvbSAnLi4vZmlsdGVyLXZpZXcvZmlsdGVyLXZpZXcuY29tcG9uZW50J1xuXG5leHBvcnQgdHlwZSBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50U3RhdGUgPSBDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlICZcbiAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlICZcbiAgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlICZcbiAgRGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlICZcbiAgRGF0YVZpZXdDb21wb25lbnRTdGF0ZSAmXG4gIEZpbHRlclZpZXdDb21wb25lbnRTdGF0ZVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkdyb3VwRGF0YSB7XG4gIGFjdGl2ZUNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdXG4gIGdyb3VwS2V5OiBzdHJpbmdcbn1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29jeC1pbnRlcmFjdGl2ZS1kYXRhLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiAnSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCcsIHVzZUV4aXN0aW5nOiBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZURhdGFWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgX2RhdGFWaWV3Q29tcG9uZW50OiBEYXRhVmlld0NvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBAVmlld0NoaWxkKERhdGFWaWV3Q29tcG9uZW50KSBzZXQgZGF0YVZpZXcocmVmOiBEYXRhVmlld0NvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50ID0gcmVmXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJGb3JEYXRhVmlldygpXG4gIH1cbiAgZ2V0IGRhdGFWaWV3KCk6IERhdGFWaWV3Q29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVZpZXdDb21wb25lbnRcbiAgfVxuXG4gIGNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZT4oMSlcbiAgY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YUxheW91dENvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFMYXlvdXRTZWxlY3Rpb25Db21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZT4oMSlcbiAgZGF0YVZpZXdDb21wb25lbnRTdGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRhVmlld0NvbXBvbmVudFN0YXRlPigxKVxuICBmaWx0ZXJWaWV3Q29tcG9uZW50U3RhdGUkID0gbmV3IFJlcGxheVN1YmplY3Q8RmlsdGVyVmlld0NvbXBvbmVudFN0YXRlPigxKVxuXG4gIEBJbnB1dCgpIHNlYXJjaENvbmZpZ1Blcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVQZXJtaXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdFBlcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3UGVybWlzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRlbGV0ZUFjdGlvblZpc2libGVGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3QWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdEFjdGlvblZpc2libGVGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB0YWJsZVNlbGVjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHRhYmxlQWxsb3dTZWxlY3RBbGwgPSB0cnVlXG4gIEBJbnB1dCgpIG5hbWUgPSAnRGF0YSdcbiAgQElucHV0KCkgdGl0bGVMaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBzdWJ0aXRsZUxpbmVJZHM6IHN0cmluZ1tdID0gW11cbiAgQElucHV0KCkgc3VwcG9ydGVkVmlld0xheW91dHM6ICgnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnKVtdID0gWydncmlkJywgJ2xpc3QnLCAndGFibGUnXVxuICBASW5wdXQoKSBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtdXG4gIEBJbnB1dCgpIGVtcHR5UmVzdWx0c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBjbGllbnRTaWRlU29ydGluZyA9IHRydWVcbiAgQElucHV0KCkgY2xpZW50U2lkZUZpbHRlcmluZyA9IHRydWVcbiAgQElucHV0KCkgZmFsbGJhY2tJbWFnZSA9ICdwbGFjZWhvbGRlci5wbmcnXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEZpbHRlcltdID0gW11cbiAgQElucHV0KCkgc29ydERpcmVjdGlvbjogRGF0YVNvcnREaXJlY3Rpb24gPSBEYXRhU29ydERpcmVjdGlvbi5OT05FXG4gIEBJbnB1dCgpIHNvcnRGaWVsZDogYW55ID0gJydcbiAgQElucHV0KCkgc29ydFN0YXRlczogRGF0YVNvcnREaXJlY3Rpb25bXSA9IFtcbiAgICBEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcsXG4gICAgRGF0YVNvcnREaXJlY3Rpb24uREVTQ0VORElORyxcbiAgICBEYXRhU29ydERpcmVjdGlvbi5OT05FLFxuICBdXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDI1LCA1MF1cbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB0b3RhbFJlY29yZHNPblNlcnZlcjogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGxheW91dDogJ2dyaWQnIHwgJ2xpc3QnIHwgJ3RhYmxlJyA9ICd0YWJsZSdcbiAgQElucHV0KCkgZGVmYXVsdEdyb3VwS2V5ID0gJydcbiAgQElucHV0KCkgY3VzdG9tR3JvdXBLZXkgPSAnT0NYX0lOVEVSQUNUSVZFX0RBVEFfVklFVy5DVVNUT01fR1JPVVAnXG4gIEBJbnB1dCgpIGdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5ID0gJ09DWF9JTlRFUkFDVElWRV9EQVRBX1ZJRVcuTk9fR1JPVVBfU0VMRUNURUQnXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ0tleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HJ1xuICBASW5wdXQoKSBjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleSA9ICdPQ1hfREFUQV9UQUJMRS5TSE9XSU5HX1dJVEhfVE9UQUxfT05fU0VSVkVSJ1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQWN0aW9uczogRGF0YUFjdGlvbltdID0gW11cbiAgQElucHV0KCkgbGlzdEdyaWRQYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIHRhYmxlUGFnaW5hdG9yID0gdHJ1ZVxuICBASW5wdXQoKSBkaXNhYmxlRmlsdGVyVmlldyA9IHRydWVcbiAgQElucHV0KCkgZmlsdGVyVmlld0Rpc3BsYXlNb2RlOiBGaWx0ZXJWaWV3RGlzcGxheU1vZGUgPSAnYnV0dG9uJ1xuICBASW5wdXQoKSBmaWx0ZXJWaWV3Q2hpcFN0eWxlQ2xhc3MgPSAnJ1xuICBASW5wdXQoKSBmaWx0ZXJWaWV3VGFibGVTdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9ID0geyAnbWF4LWhlaWdodCc6ICc1MHZoJyB9XG4gIEBJbnB1dCgpIGZpbHRlclZpZXdQYW5lbFN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gPSB7ICdtYXgtd2lkdGgnOiAnOTAlJyB9XG4gIEBJbnB1dCgpIHNlbGVjdERpc3BsYXllZENoaXBzOiAoZmlsdGVyczogRmlsdGVyW10sIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdKSA9PiBGaWx0ZXJbXSA9IChmaWx0ZXJzKSA9PlxuICAgIGxpbWl0KGZpbHRlcnMsIDMsIHsgcmV2ZXJzZTogdHJ1ZSB9KVxuICBASW5wdXQoKSBwYWdlID0gMFxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFJvd1tdID0gW11cbiAgZGlzcGxheWVkQ29sdW1uS2V5cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSlcbiAgZGlzcGxheWVkQ29sdW1ucyQ6IE9ic2VydmFibGU8RGF0YVRhYmxlQ29sdW1uW10+IHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNwbGF5ZWRDb2x1bW5LZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGRpc3BsYXllZENvbHVtbktleXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5uZXh0KHZhbHVlKVxuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGRpc3BsYXllZENvbHVtbktleXNgIGFuZCBwYXNzIGluIGNvbHVtbiBpZHMgaW5zdGVhZCBvZiBgRGF0YVRhYmxlQ29sdW1uYCBvYmplY3RzXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzcGxheWVkQ29sdW1ucygpOiBEYXRhVGFibGVDb2x1bW5bXSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmRpc3BsYXllZENvbHVtbktleXNcbiAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT09IGQpKVxuICAgICAgICAuZmlsdGVyKChkKSA9PiBkKSBhcyBEYXRhVGFibGVDb2x1bW5bXSkgPz8gW11cbiAgICApXG4gIH1cbiAgc2V0IGRpc3BsYXllZENvbHVtbnModmFsdWU6IERhdGFUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzJC5uZXh0KHZhbHVlLm1hcCgoZCkgPT4gZC5pZCkpXG4gIH1cbiAgQElucHV0KCkgZnJvemVuQWN0aW9uQ29sdW1uID0gZmFsc2VcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1uUG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlQ2VsbCcpIHRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZXBsYWNlZCBieSBkYXRlVGFibGVDZWxsXG4gICAqL1xuICBAQ29udGVudENoaWxkKCd0YWJsZURhdGVDZWxsJykgdGFibGVEYXRlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdkYXRlVGFibGVDZWxsJykgZGF0ZVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2VkIGJ5IHJlbGF0aXZlRGF0ZVRhYmxlQ2VsbFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgndGFibGVSZWxhdGl2ZURhdGVDZWxsJykgdGFibGVSZWxhdGl2ZURhdGVDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCcpIHJlbGF0aXZlRGF0ZVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlcGxhY2VkIGJ5IHRyYW5zbGF0aW9uS2V5VGFibGVDZWxsXG4gICAqL1xuICBAQ29udGVudENoaWxkKCd0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCcpIHRhYmxlVHJhbnNsYXRpb25LZXlDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsJykgdHJhbnNsYXRpb25LZXlUYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcblxuICBAQ29udGVudENoaWxkKCdncmlkSXRlbVN1YnRpdGxlTGluZXMnKSBncmlkSXRlbVN1YnRpdGxlTGluZXM6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzJykgbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3N0cmluZ1RhYmxlQ2VsbCcpIHN0cmluZ1RhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdudW1iZXJUYWJsZUNlbGwnKSBudW1iZXJUYWJsZUNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZFRhYmxlQ2VsbFxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBpbiBEYXRhVGFibGUgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkVGFibGVDZWxsXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVRhYmxlQ2VsbCcpIGN1c3RvbVRhYmxlQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdncmlkSXRlbScpIGdyaWRJdGVtOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RJdGVtJykgbGlzdEl0ZW06IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndG9wQ2VudGVyJykgdG9wQ2VudGVyOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2xpc3RWYWx1ZScpIGxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZScpIHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlckxpc3RWYWx1ZScpIG51bWJlckxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdyZWxhdGl2ZURhdGVMaXN0VmFsdWUnKSByZWxhdGl2ZURhdGVMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uXG4gICAqIHVzZSB0aGUgbmV3IGFwcHJvYWNoIGluc3RlYWQgYnkgZm9sbG93aW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb2x1bW4gaWQgKyBJZExpc3RWYWx1ZVxuICAgKiBlLmcuIGZvciBhIGNvbHVtbiB3aXRoIHRoZSBpZCAnc3RhdHVzJyBEYXRhTGlzdEdyaWQgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkTGlzdFZhbHVlXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbUxpc3RWYWx1ZScpIGN1c3RvbUxpc3RWYWx1ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdMaXN0VmFsdWUnKSBzdHJpbmdMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZGF0ZUxpc3RWYWx1ZScpIGRhdGVMaXN0VmFsdWU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgndGFibGVGaWx0ZXJDZWxsJykgdGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVUYWJsZUZpbHRlckNlbGwnKSBkYXRlVGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCcpIHJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCcpIHRyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCcpIHN0cmluZ1RhYmxlRmlsdGVyQ2VsbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdudW1iZXJUYWJsZUZpbHRlckNlbGwnKSBudW1iZXJUYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBhbmQgaW5zdGVhZCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIG9mIGEgc3BlY2lmaWMgY29sdW1uIGZpbHRlclxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRUYWJsZUZpbHRlckNlbGxcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgaW4gRGF0YVRhYmxlIHVzZSBwVGVtcGxhdGU9XCJzdGF0dXNJZFRhYmxlRmlsdGVyQ2VsbFwiXG4gICAqL1xuICBAQ29udGVudENoaWxkKCdjdXN0b21UYWJsZUZpbHRlckNlbGwnKSBjdXN0b21UYWJsZUZpbHRlckNlbGw6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcblxuICB0ZW1wbGF0ZXMkOiBCZWhhdmlvclN1YmplY3Q8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKVxuICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpXG4gIHNldCB0ZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgQE91dHB1dCgpIGZpbHRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJbXT4oKVxuICBAT3V0cHV0KCkgc29ydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpXG4gIEBPdXRwdXQoKSBkZWxldGVJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIHZpZXdJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGVkaXRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGRhdGFWaWV3TGF5b3V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjwnZ3JpZCcgfCAnbGlzdCcgfCAndGFibGUnPigpXG4gIC8vIFRPRE86IFJlbW92ZSBmb2xsb3dpbmcgbGluZSBvbmNlIGRpc3BsYXllZENvbHVtbnMgKGRlcHJlY2F0ZWQpIGhhcyBiZWVuIHJlbW92ZWRcbiAgQE91dHB1dCgpIGRpc3BsYXllZENvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUNvbHVtbltdPigpXG4gIEBPdXRwdXQoKSBkaXNwbGF5ZWRDb2x1bW5LZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFJvd1tdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpXG5cbiAgQE91dHB1dCgpIGNvbXBvbmVudFN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudFN0YXRlPigpXG5cbiAgc2VsZWN0ZWRHcm91cEtleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4oJycpXG4gIGdldCBzZWxlY3RlZEdyb3VwS2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRHcm91cEtleSQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBzZWxlY3RlZEdyb3VwS2V5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBLZXkkLm5leHQodmFsdWUpXG4gIH1cbiAgaXNEZWxldGVJdGVtT2JzZXJ2ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgaXNWaWV3SXRlbU9ic2VydmVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGlzRWRpdEl0ZW1PYnNlcnZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBmaXJzdENvbHVtbklkOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBASW5wdXQoKVxuICBnZXQgcGFnaW5hdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3RHcmlkUGFnaW5hdG9yICYmIHRoaXMudGFibGVQYWdpbmF0b3JcbiAgfVxuICBzZXQgcGFnaW5hdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5saXN0R3JpZFBhZ2luYXRvciA9IHZhbHVlXG4gICAgdGhpcy50YWJsZVBhZ2luYXRvciA9IHZhbHVlXG4gIH1cblxuICBnZXQgX2dyaWRJdGVtU3VidGl0bGVMaW5lcygpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNcbiAgfVxuICBnZXQgX2xpc3RJdGVtU3VidGl0bGVMaW5lcygpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbVN1YnRpdGxlTGluZXNcbiAgfVxuICBnZXQgX3RhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUNlbGxcbiAgfVxuICBnZXQgX3N0cmluZ1RhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdUYWJsZUNlbGxcbiAgfVxuICBnZXQgX251bWJlclRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJUYWJsZUNlbGxcbiAgfVxuICBnZXQgX2N1c3RvbVRhYmxlQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21UYWJsZUNlbGxcbiAgfVxuICBnZXQgX3RhYmxlRGF0ZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRhYmxlQ2VsbCA/PyB0aGlzLnRhYmxlRGF0ZUNlbGxcbiAgfVxuICBnZXQgX2RhdGVUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVRhYmxlQ2VsbFxuICB9XG4gIGdldCBfdGFibGVSZWxhdGl2ZURhdGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA/PyB0aGlzLnRhYmxlUmVsYXRpdmVEYXRlQ2VsbFxuICB9XG4gIGdldCBfcmVsYXRpdmVEYXRlVGFibGVDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbFxuICB9XG4gIGdldCBfdGFibGVUcmFuc2xhdGlvbktleUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgPz8gdGhpcy50YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFxuICB9XG4gIGdldCBfdHJhbnNsYXRpb25LZXlUYWJsZUNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUNlbGxcbiAgfVxuICBnZXQgX2dyaWRJdGVtKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdyaWRJdGVtXG4gIH1cbiAgZ2V0IF9saXN0SXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbVxuICB9XG4gIGdldCBfbGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RWYWx1ZVxuICB9XG4gIGdldCBfdHJhbnNsYXRpb25LZXlMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcbiAgfVxuICBnZXQgX251bWJlckxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXJMaXN0VmFsdWVcbiAgfVxuICBnZXQgX3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZURhdGVMaXN0VmFsdWVcbiAgfVxuICBnZXQgX2N1c3RvbUxpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21MaXN0VmFsdWVcbiAgfVxuICBnZXQgX3N0cmluZ0xpc3RWYWx1ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdMaXN0VmFsdWVcbiAgfVxuICBnZXQgX2RhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUxpc3RWYWx1ZVxuICB9XG4gIGdldCBfdGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfZGF0ZVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF9yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsXG4gIH1cbiAgZ2V0IF90cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfc3RyaW5nVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfbnVtYmVyVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm51bWJlclRhYmxlRmlsdGVyQ2VsbFxuICB9XG4gIGdldCBfY3VzdG9tVGFibGVGaWx0ZXJDZWxsKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVRhYmxlRmlsdGVyQ2VsbFxuICB9XG5cbiAgX2RhdGE6IFJvd0xpc3RHcmlkRGF0YVtdID0gW11cbiAgQElucHV0KClcbiAgZ2V0IGRhdGEoKTogUm93TGlzdEdyaWREYXRhW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhXG4gIH1cbiAgc2V0IGRhdGEodmFsdWU6IFJvd0xpc3RHcmlkRGF0YVtdKSB7XG4gICAgdGhpcy5fZGF0YSA9IHZhbHVlXG4gIH1cblxuICBjb2x1bW5Hcm91cFNsb3ROYW1lID0gJ29uZWN4LWNvbHVtbi1ncm91cC1zZWxlY3Rpb24nXG4gIGlzQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnREZWZpbmVkJDogT2JzZXJ2YWJsZTxib29sZWFuPlxuICBncm91cFNlbGVjdGlvbkNoYW5nZWRTbG90RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uR3JvdXBEYXRhIHwgdW5kZWZpbmVkPigpXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzbG90U2VydmljZTogU2xvdFNlcnZpY2UpIHtcbiAgICB0aGlzLmlzQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnREZWZpbmVkJCA9IHRoaXMuc2xvdFNlcnZpY2VcbiAgICAgIC5pc1NvbWVDb21wb25lbnREZWZpbmVkRm9yU2xvdCh0aGlzLmNvbHVtbkdyb3VwU2xvdE5hbWUpXG4gICAgICAucGlwZShzdGFydFdpdGgodHJ1ZSkpXG5cbiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uQ2hhbmdlZFNsb3RFbWl0dGVyLnN1YnNjcmliZSgoZXZlbnQ6IENvbHVtbkdyb3VwRGF0YSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgYWN0aXZlQ29sdW1uczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLFxuICAgICAgICAgIGdyb3VwS2V5OiB0aGlzLnNlbGVjdGVkR3JvdXBLZXkgPz8gdGhpcy5kZWZhdWx0R3JvdXBLZXksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cyQubmV4dChldmVudC5hY3RpdmVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuaWQpKVxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5JC5uZXh0KGV2ZW50Lmdyb3VwS2V5KVxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzKVxuICAgICAgdGhpcy5jb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJC5uZXh0KHtcbiAgICAgICAgYWN0aXZlQ29sdW1uR3JvdXBLZXk6IGV2ZW50Lmdyb3VwS2V5LFxuICAgICAgICBkaXNwbGF5ZWRDb2x1bW5zOiBldmVudC5hY3RpdmVDb2x1bW5zLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgdGhpcy5kYXRhVmlld0xheW91dENoYW5nZVxuICAgICAgLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy5pc0NvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50RGVmaW5lZCQpKVxuICAgICAgLnN1YnNjcmliZSgoW18sIGNvbHVtbkdyb3VwQ29tcG9uZW50RGVmaW5lZF0pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbkdyb3VwQ29tcG9uZW50RGVmaW5lZCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWVLZXkgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEtleSkgfHxcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID09PSB0aGlzLmN1c3RvbUdyb3VwS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBLZXkkLm5leHQodW5kZWZpbmVkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEtleSA9IHRoaXMuZGVmYXVsdEdyb3VwS2V5XG4gICAgaWYgKCF0aGlzLmRpc3BsYXllZENvbHVtbnMgfHwgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpXG4gICAgfVxuICAgIGlmICh0aGlzLmRlZmF1bHRHcm91cEtleSAmJiB0aGlzLmRlZmF1bHRHcm91cEtleSAhPT0gdGhpcy5jdXN0b21Hcm91cEtleSkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzID0gdGhpcy5jb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnByZWRlZmluZWRHcm91cEtleXM/LmluY2x1ZGVzKHRoaXMuZGVmYXVsdEdyb3VwS2V5KSlcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpXG4gICAgfVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyQgPSB0aGlzLmRpc3BsYXllZENvbHVtbktleXMkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gcHJldi5sZW5ndGggPT09IGN1cnIubGVuZ3RoICYmIHByZXYuZXZlcnkoKHYpID0+IGN1cnIuaW5jbHVkZXModikpKSxcbiAgICAgIG1hcChcbiAgICAgICAgKGNvbHVtbktleXMpID0+XG4gICAgICAgICAgKGNvbHVtbktleXMubWFwKChrZXkpID0+IHRoaXMuY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0ga2V5KSkuZmlsdGVyKChkKSA9PiBkKSBhcyBEYXRhVGFibGVDb2x1bW5bXSkgPz9cbiAgICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbnMpXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzKVxuICAgIGlmICghdGhpcy5ncm91cFNlbGVjdGlvbk5vR3JvdXBTZWxlY3RlZEtleSkge1xuICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbk5vR3JvdXBTZWxlY3RlZEtleSA9ICdPQ1hfSU5URVJBQ1RJVkVfREFUQV9WSUVXLk5PX0dST1VQX1NFTEVDVEVEJ1xuICAgIH1cbiAgICB0aGlzLmZpcnN0Q29sdW1uSWQgPSB0aGlzLmNvbHVtbnNbMF0/LmlkXG5cbiAgICBsZXQgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJDogT2JzZXJ2YWJsZTxEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4+ID1cbiAgICAgIHRoaXMuZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJFxuICAgIGxldCBjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJDogT2JzZXJ2YWJsZTxDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+PiA9XG4gICAgICB0aGlzLmNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkXG4gICAgbGV0IGN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQ6IE9ic2VydmFibGU8XG4gICAgICBDdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj5cbiAgICA+ID0gdGhpcy5jdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUkXG5cbiAgICBpZiAodGhpcy5sYXlvdXQgPT09ICd0YWJsZScpIHtcbiAgICAgIGRhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnRTdGF0ZSQgPSBkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkLnBpcGUoc3RhcnRXaXRoKHt9KSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQgPSBjb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudFN0YXRlJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoe1xuICAgICAgICAgIGFjdGl2ZUNvbHVtbkdyb3VwS2V5OiB0aGlzLnNlbGVjdGVkR3JvdXBLZXksXG4gICAgICAgICAgZGlzcGxheWVkQ29sdW1uczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgY3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFN0YXRlJCA9IGN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHtcbiAgICAgICAgICBhY3Rpb25Db2x1bW5Db25maWc6IHtcbiAgICAgICAgICAgIGZyb3plbjogdGhpcy5mcm96ZW5BY3Rpb25Db2x1bW4sXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5hY3Rpb25Db2x1bW5Qb3NpdGlvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc3BsYXllZENvbHVtbnM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucyxcbiAgICAgICAgICBhY3RpdmVDb2x1bW5Hcm91cEtleTogdGhpcy5zZWxlY3RlZEdyb3VwS2V5LFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgY29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICBjdXN0b21Hcm91cENvbHVtblNlbGVjdG9yQ29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgICAgdGhpcy5kYXRhTGF5b3V0Q29tcG9uZW50U3RhdGUkLnBpcGUodGltZXN0YW1wKCkpLFxuICAgICAgZGF0YUxpc3RHcmlkU29ydGluZ0NvbXBvbmVudFN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcbiAgICAgIHRoaXMuZGF0YVZpZXdDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgICB0aGlzLmZpbHRlclZpZXdDb21wb25lbnRTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGNvbXBvbmVudFN0YXRlcykgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmRlckFuZE1lcmdlVmFsdWVzQnlUaW1lc3RhbXAoY29tcG9uZW50U3RhdGVzKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50U3RhdGVDaGFuZ2VkLmVtaXQodmFsKVxuICAgICAgfSlcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnRlbXBsYXRlcyQudmFsdWU/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgY2FzZSAndGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZURhdGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0ZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5kYXRlVGFibGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RhYmxlUmVsYXRpdmVEYXRlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZVJlbGF0aXZlRGF0ZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmVsYXRpdmVEYXRlVGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnJlbGF0aXZlRGF0ZVRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0cmFuc2xhdGlvbktleVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbktleVRhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdncmlkSXRlbVN1YnRpdGxlTGluZXMnOlxuICAgICAgICAgIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xpc3RJdGVtU3VidGl0bGVMaW5lcyc6XG4gICAgICAgICAgdGhpcy5saXN0SXRlbVN1YnRpdGxlTGluZXMgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3RyaW5nVGFibGVDZWxsJzpcbiAgICAgICAgICB0aGlzLnN0cmluZ1RhYmxlQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJUYWJsZUNlbGwnOlxuICAgICAgICAgIHRoaXMubnVtYmVyVGFibGVDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2N1c3RvbVRhYmxlQ2VsbCc6XG4gICAgICAgICAgdGhpcy5jdXN0b21UYWJsZUNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZ3JpZEl0ZW0nOlxuICAgICAgICAgIHRoaXMuZ3JpZEl0ZW0gPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGlzdEl0ZW0nOlxuICAgICAgICAgIHRoaXMubGlzdEl0ZW0gPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndG9wQ2VudGVyJzpcbiAgICAgICAgICB0aGlzLnRvcENlbnRlciA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ251bWJlckxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5udW1iZXJMaXN0VmFsdWUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmVsYXRpdmVEYXRlTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnJlbGF0aXZlRGF0ZUxpc3RWYWx1ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdjdXN0b21MaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMuY3VzdG9tTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N0cmluZ0xpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5zdHJpbmdMaXN0VmFsdWUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5kYXRlTGlzdFZhbHVlID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3RhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy50YWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZVRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5kYXRlVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5yZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAndHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3RyaW5nVGFibGVGaWx0ZXJDZWxsJzpcbiAgICAgICAgICB0aGlzLnN0cmluZ1RhYmxlRmlsdGVyQ2VsbCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdudW1iZXJUYWJsZUZpbHRlckNlbGwnOlxuICAgICAgICAgIHRoaXMubnVtYmVyVGFibGVGaWx0ZXJDZWxsID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCc6XG4gICAgICAgICAgdGhpcy5jdXN0b21UYWJsZUZpbHRlckNlbGwgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZmlsdGVyaW5nKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBldmVudFxuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChldmVudClcbiAgfVxuXG4gIHNvcnRpbmcoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IGV2ZW50LnNvcnREaXJlY3Rpb25cbiAgICB0aGlzLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRDb2x1bW5cbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgb25EZWxldGVFbGVtZW50KGVsZW1lbnQ6IFJvd0xpc3RHcmlkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzRGVsZXRlSXRlbU9ic2VydmVkKSB7XG4gICAgICB0aGlzLmRlbGV0ZUl0ZW0uZW1pdChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIG9uVmlld0VsZW1lbnQoZWxlbWVudDogUm93TGlzdEdyaWREYXRhKSB7XG4gICAgaWYgKHRoaXMuaXNWaWV3SXRlbU9ic2VydmVkKSB7XG4gICAgICB0aGlzLnZpZXdJdGVtLmVtaXQoZWxlbWVudClcbiAgICB9XG4gIH1cblxuICBvbkVkaXRFbGVtZW50KGVsZW1lbnQ6IFJvd0xpc3RHcmlkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzRWRpdEl0ZW1PYnNlcnZlZCkge1xuICAgICAgdGhpcy5lZGl0SXRlbS5lbWl0KGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhVmlld0xheW91dENoYW5nZShsYXlvdXQ6ICdncmlkJyB8ICdsaXN0JyB8ICd0YWJsZScpIHtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dFxuICAgIHRoaXMuZGF0YVZpZXdMYXlvdXRDaGFuZ2UuZW1pdChsYXlvdXQpXG4gIH1cblxuICBvblNvcnRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRGaWVsZCA9ICRldmVudFxuICAgIHRoaXMuc29ydGVkLmVtaXQoeyBzb3J0Q29sdW1uOiB0aGlzLnNvcnRGaWVsZCwgc29ydERpcmVjdGlvbjogdGhpcy5zb3J0RGlyZWN0aW9uIH0pXG4gIH1cblxuICBvblNvcnREaXJlY3Rpb25DaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAkZXZlbnRcbiAgICB0aGlzLnNvcnRlZC5lbWl0KHsgc29ydENvbHVtbjogdGhpcy5zb3J0RmllbGQsIHNvcnREaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvbiB9KVxuICB9XG5cbiAgb25Db2x1bW5Hcm91cFNlbGVjdGlvbkNoYW5nZShldmVudDogR3JvdXBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMgPSBldmVudC5hY3RpdmVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuaWQpXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID0gZXZlbnQuZ3JvdXBLZXlcbiAgICAvLyBUT0RPOiBSZW1vdmUgZm9sbG93aW5nIGxpbmUgb25jZSBkaXNwbGF5ZWRDb2x1bW5zIChkZXByZWNhdGVkKSBoYXMgYmVlbiByZW1vdmVkXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKVxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5c0NoYW5nZS5lbWl0KHRoaXMuZGlzcGxheWVkQ29sdW1uS2V5cylcbiAgfVxuXG4gIHJlZ2lzdGVyRXZlbnRMaXN0ZW5lckZvckRhdGFWaWV3KCkge1xuICAgIGlmICh0aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuaXNEZWxldGVJdGVtT2JzZXJ2ZWQgPSB0cnVlXG4gICAgICBpZiAoIXRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5kZWxldGVJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5kZWxldGVJdGVtLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9uRGVsZXRlRWxlbWVudChldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuaXNWaWV3SXRlbU9ic2VydmVkID0gdHJ1ZVxuICAgICAgaWYgKCF0aGlzLl9kYXRhVmlld0NvbXBvbmVudD8udmlld0l0ZW0ub2JzZXJ2ZWQpIHtcbiAgICAgICAgdGhpcy5fZGF0YVZpZXdDb21wb25lbnQ/LnZpZXdJdGVtLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9uVmlld0VsZW1lbnQoZXZlbnQpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLmlzRWRpdEl0ZW1PYnNlcnZlZCA9IHRydWVcbiAgICAgIGlmICghdGhpcy5fZGF0YVZpZXdDb21wb25lbnQ/LmVkaXRJdGVtLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5lZGl0SXRlbS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkVkaXRFbGVtZW50KGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkLm9ic2VydmVkKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5zZWxlY3Rpb25DaGFuZ2VkLm9ic2VydmVkKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3Q29tcG9uZW50Py5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9uUm93U2VsZWN0aW9uQ2hhbmdlKGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29sdW1uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBDb2x1bW5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbktleXMgPSBldmVudC5hY3RpdmVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuaWQpXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwS2V5ID0gdGhpcy5jdXN0b21Hcm91cEtleVxuICAgIC8vIFRPRE86IFJlbW92ZSBmb2xsb3dpbmcgbGluZSBvbmNlIGRpc3BsYXllZENvbHVtbnMgKGRlcHJlY2F0ZWQpIGhhcyBiZWVuIHJlbW92ZWRcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnNDaGFuZ2UuZW1pdCh0aGlzLmRpc3BsYXllZENvbHVtbnMpXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzQ2hhbmdlLmVtaXQodGhpcy5kaXNwbGF5ZWRDb2x1bW5LZXlzKVxuICB9XG5cbiAgb25BY3Rpb25Db2x1bW5Db25maWdDaGFuZ2UoZXZlbnQ6IEFjdGlvbkNvbHVtbkNoYW5nZWRFdmVudCkge1xuICAgIHRoaXMuZnJvemVuQWN0aW9uQ29sdW1uID0gZXZlbnQuZnJvemVuQWN0aW9uQ29sdW1uXG4gICAgdGhpcy5hY3Rpb25Db2x1bW5Qb3NpdGlvbiA9IGV2ZW50LmFjdGlvbkNvbHVtblBvc2l0aW9uXG4gIH1cblxuICBvblJvd1NlbGVjdGlvbkNoYW5nZShldmVudDogUm93W10pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkLm9ic2VydmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChldmVudClcbiAgICB9XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IGV2ZW50XG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50XG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdChldmVudClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtMyBib3JkZXItYm90dG9tLTEgc3VyZmFjZS1ib3JkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweS0xIGdhcC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxvY3gtZGF0YS1sYXlvdXQtc2VsZWN0aW9uXG4gICAgICAgIFtzdXBwb3J0ZWRWaWV3TGF5b3V0c109XCJzdXBwb3J0ZWRWaWV3TGF5b3V0c1wiXG4gICAgICAgIFtsYXlvdXRdPVwibGF5b3V0XCJcbiAgICAgICAgKGRhdGFWaWV3TGF5b3V0Q2hhbmdlKT1cIm9uRGF0YVZpZXdMYXlvdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiZGF0YUxheW91dENvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWRhdGEtbGF5b3V0LXNlbGVjdGlvbj5cbiAgICAgIDxvY3gtZmlsdGVyLXZpZXdcbiAgICAgICAgKm5nSWY9XCIhZGlzYWJsZUZpbHRlclZpZXdcIlxuICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgIFt0ZW1wbGF0ZXNdPVwidGVtcGxhdGVzJCB8IGFzeW5jXCJcbiAgICAgICAgW2Rpc3BsYXlNb2RlXT1cImZpbHRlclZpZXdEaXNwbGF5TW9kZVwiXG4gICAgICAgIFtzZWxlY3REaXNwbGF5ZWRDaGlwc109XCJzZWxlY3REaXNwbGF5ZWRDaGlwc1wiXG4gICAgICAgIFtjaGlwU3R5bGVDbGFzc109XCJmaWx0ZXJWaWV3Q2hpcFN0eWxlQ2xhc3NcIlxuICAgICAgICBbdGFibGVTdHlsZV09XCJmaWx0ZXJWaWV3VGFibGVTdHlsZVwiXG4gICAgICAgIChmaWx0ZXJlZCk9XCJmaWx0ZXJpbmcoJGV2ZW50KVwiXG4gICAgICAgIChjb21wb25lbnRTdGF0ZUNoYW5nZWQpPVwiZmlsdGVyVmlld0NvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgPjwvb2N4LWZpbHRlci12aWV3PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInRvcENlbnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0b3BDZW50ZXJcIj4gPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibGF5b3V0ICE9PSAndGFibGUnXCIgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPG9jeC1kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nXG4gICAgICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgICAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXG4gICAgICAgIFtjb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgIFtzb3J0U3RhdGVzXT1cInNvcnRTdGF0ZXNcIlxuICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0RGlyZWN0aW9uQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJkYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gICAgICA+PC9vY3gtZGF0YS1saXN0LWdyaWQtc29ydGluZz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtuZ1N0eWxlXT1cImxheW91dCAhPT0gJ3RhYmxlJyA/IHtcbiAgICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZSdcbiAgICB9IDoge31cIlxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50RGVmaW5lZCQgfCBhc3luYzsgZWxzZSBkZWZhdWx0Q29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXllZENvbHVtbktleXMkIHwgYXN5bmMgYXMgZGlzcGxheWVkQ29sdW1uS2V5c1wiPlxuICAgICAgICAgIDxvY3gtc2xvdFxuICAgICAgICAgICAgW25nU3R5bGVdPVwibGF5b3V0ICE9PSAndGFibGUnID8geydkaXNwbGF5JyA6ICdub25lJ30gIDoge31cIlxuICAgICAgICAgICAgKm9jeElmUGVybWlzc2lvbj1cInNlYXJjaENvbmZpZ1Blcm1pc3Npb247IGVsc2VUZW1wbGF0ZTogZGVmYXVsdENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgIG5hbWU9XCJ7e2NvbHVtbkdyb3VwU2xvdE5hbWV9fVwiXG4gICAgICAgICAgICBbaW5wdXRzXT1cInsgcGxhY2Vob2xkZXJLZXk6IGdyb3VwU2VsZWN0aW9uTm9Hcm91cFNlbGVjdGVkS2V5LCBkZWZhdWx0R3JvdXBLZXk6IGRlZmF1bHRHcm91cEtleSwgY3VzdG9tR3JvdXBLZXk6IGN1c3RvbUdyb3VwS2V5LCBjb2x1bW5zOiBjb2x1bW5zLCBzZWxlY3RlZEdyb3VwS2V5OiBzZWxlY3RlZEdyb3VwS2V5LCBsYXlvdXQ6IGxheW91dCwgZGlzcGxheWVkQ29sdW1uc0lkczogZGlzcGxheWVkQ29sdW1uS2V5cyB9XCJcbiAgICAgICAgICAgIFtvdXRwdXRzXT1cInsgZ3JvdXBTZWxlY3Rpb25DaGFuZ2VkOiBncm91cFNlbGVjdGlvbkNoYW5nZWRTbG90RW1pdHRlciB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NrZWxldG9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMThyZW1cIiBoZWlnaHQ9XCIzcmVtXCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9vY3gtc2xvdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG9jeC1jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yXG4gICAgICAgICpuZ0lmPVwibGF5b3V0ID09PSAndGFibGUnXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgIFtjdXN0b21Hcm91cEtleV09XCJjdXN0b21Hcm91cEtleVwiXG4gICAgICAgIChjb2x1bW5TZWxlY3Rpb25DaGFuZ2VkKT1cIm9uQ29sdW1uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZnJvemVuQWN0aW9uQ29sdW1uXT1cImZyb3plbkFjdGlvbkNvbHVtblwiXG4gICAgICAgIFthY3Rpb25Db2x1bW5Qb3NpdGlvbl09XCJhY3Rpb25Db2x1bW5Qb3NpdGlvblwiXG4gICAgICAgIChhY3Rpb25Db2x1bW5Db25maWdDaGFuZ2VkKT1cIm9uQWN0aW9uQ29sdW1uQ29uZmlnQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnRTdGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgID48L29jeC1jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInAtM1wiPlxuICA8b2N4LWRhdGEtdmlld1xuICAgIFtjb2x1bW5zXT1cIihkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW3NvcnRTdGF0ZXNdPVwic29ydFN0YXRlc1wiXG4gICAgW3NvcnRGaWVsZF09XCJzb3J0RmllbGRcIlxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFtzb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgIFt0aXRsZUxpbmVJZF09XCJ0aXRsZUxpbmVJZFwiXG4gICAgW3N1YnRpdGxlTGluZUlkc109XCJzdWJ0aXRsZUxpbmVJZHNcIlxuICAgIFtjbGllbnRTaWRlU29ydGluZ109XCJjbGllbnRTaWRlU29ydGluZ1wiXG4gICAgW2NsaWVudFNpZGVGaWx0ZXJpbmddPVwiY2xpZW50U2lkZUZpbHRlcmluZ1wiXG4gICAgW3BhZ2VTaXplc109XCJwYWdlU2l6ZXNcIlxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgW2VtcHR5UmVzdWx0c01lc3NhZ2VdPVwiZW1wdHlSZXN1bHRzTWVzc2FnZVwiXG4gICAgW2xheW91dF09XCJsYXlvdXRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtkZWxldGVQZXJtaXNzaW9uXT1cImRlbGV0ZVBlcm1pc3Npb25cIlxuICAgIFtlZGl0UGVybWlzc2lvbl09XCJlZGl0UGVybWlzc2lvblwiXG4gICAgW3ZpZXdQZXJtaXNzaW9uXT1cInZpZXdQZXJtaXNzaW9uXCJcbiAgICBbZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkXT1cImRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZFwiXG4gICAgW2RlbGV0ZUFjdGlvblZpc2libGVGaWVsZF09XCJkZWxldGVBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uRW5hYmxlZEZpZWxkXT1cImVkaXRBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFtlZGl0QWN0aW9uVmlzaWJsZUZpZWxkXT1cImVkaXRBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uRW5hYmxlZEZpZWxkXT1cInZpZXdBY3Rpb25FbmFibGVkRmllbGRcIlxuICAgIFt2aWV3QWN0aW9uVmlzaWJsZUZpZWxkXT1cInZpZXdBY3Rpb25WaXNpYmxlRmllbGRcIlxuICAgIFthZGRpdGlvbmFsQWN0aW9uc109XCJhZGRpdGlvbmFsQWN0aW9uc1wiXG4gICAgW2xpc3RHcmlkUGFnaW5hdG9yXT1cImxpc3RHcmlkUGFnaW5hdG9yXCJcbiAgICBbdGFibGVQYWdpbmF0b3JdPVwidGFibGVQYWdpbmF0b3JcIlxuICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzXCJcbiAgICBbZnJvemVuQWN0aW9uQ29sdW1uXT1cImZyb3plbkFjdGlvbkNvbHVtblwiXG4gICAgW2FjdGlvbkNvbHVtblBvc2l0aW9uXT1cImFjdGlvbkNvbHVtblBvc2l0aW9uXCJcbiAgICBbc3RyaW5nVGFibGVDZWxsVGVtcGxhdGVdPVwiX3N0cmluZ1RhYmxlQ2VsbCA/IHN0cmluZ1RhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlclRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUNlbGwgPyBudW1iZXJUYWJsZUNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21UYWJsZUNlbGxUZW1wbGF0ZV09XCJfY3VzdG9tVGFibGVDZWxsID8gY3VzdG9tVGFibGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbZGF0ZVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9kYXRlVGFibGVDZWxsID8gZGF0ZVRhYmxlQ2VsbCA6IF90YWJsZURhdGVDZWxsID8gdGFibGVEYXRlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbFRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGwgPyByZWxhdGl2ZURhdGVUYWJsZUNlbGwgOiBfdGFibGVSZWxhdGl2ZURhdGVDZWxsID8gdGFibGVSZWxhdGl2ZURhdGVDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbdGFibGVDZWxsVGVtcGxhdGVdPVwiX3RhYmxlQ2VsbCA/IHRhYmxlQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsID8gdHJhbnNsYXRpb25LZXlUYWJsZUNlbGwgOiBfdGFibGVUcmFuc2xhdGlvbktleUNlbGwgPyB0YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW2dyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlXT1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXMgPyBncmlkSXRlbVN1YnRpdGxlTGluZXMgOiB1bmRlZmluZWRcIlxuICAgIFtsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZV09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzID8gbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIDogdW5kZWZpbmVkXCJcbiAgICBbbGlzdEl0ZW1UZW1wbGF0ZV09XCJfbGlzdEl0ZW0gPyBsaXN0SXRlbSA6IHVuZGVmaW5lZFwiXG4gICAgW2xpc3RWYWx1ZVRlbXBsYXRlXT1cIl9saXN0VmFsdWUgPyBsaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFt0cmFuc2xhdGlvbktleUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA/IHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbbnVtYmVyTGlzdFZhbHVlVGVtcGxhdGVdPVwiX251bWJlckxpc3RWYWx1ZSA/IG51bWJlckxpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZVRlbXBsYXRlXT1cIl9yZWxhdGl2ZURhdGVMaXN0VmFsdWUgPyByZWxhdGl2ZURhdGVMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtjdXN0b21MaXN0VmFsdWVUZW1wbGF0ZV09XCJfY3VzdG9tTGlzdFZhbHVlID8gY3VzdG9tTGlzdFZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICBbc3RyaW5nTGlzdFZhbHVlVGVtcGxhdGVdPVwiX3N0cmluZ0xpc3RWYWx1ZSA/IHN0cmluZ0xpc3RWYWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2RhdGVMaXN0VmFsdWVUZW1wbGF0ZV09XCJfZGF0ZUxpc3RWYWx1ZSA/IGRhdGVMaXN0VmFsdWUgOiB1bmRlZmluZWRcIlxuICAgIFtncmlkSXRlbVRlbXBsYXRlXT1cIl9ncmlkSXRlbSA/IGdyaWRJdGVtICA6IHVuZGVmaW5lZFwiXG4gICAgW3RhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl90YWJsZUZpbHRlckNlbGwgPyB0YWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtkYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX2RhdGVUYWJsZUZpbHRlckNlbGwgPyBkYXRlVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbY3VzdG9tVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCA/IGN1c3RvbVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW251bWJlclRhYmxlRmlsdGVyQ2VsbFRlbXBsYXRlXT1cIl9udW1iZXJUYWJsZUZpbHRlckNlbGwgPyBudW1iZXJUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIFtzdHJpbmdUYWJsZUZpbHRlckNlbGxUZW1wbGF0ZV09XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsID8gc3RyaW5nVGFibGVGaWx0ZXJDZWxsIDogdW5kZWZpbmVkXCJcbiAgICBbcmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCA/IHJlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCA6IHVuZGVmaW5lZFwiXG4gICAgW3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsVGVtcGxhdGVdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsID8gdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgOiB1bmRlZmluZWRcIlxuICAgIChzb3J0ZWQpPVwic29ydGluZygkZXZlbnQpXCJcbiAgICAoZmlsdGVyZWQpPVwiZmlsdGVyaW5nKCRldmVudClcIlxuICAgIFt0b3RhbFJlY29yZHNPblNlcnZlcl09XCJ0b3RhbFJlY29yZHNPblNlcnZlclwiXG4gICAgW2N1cnJlbnRQYWdlU2hvd2luZ0tleV09XCJjdXJyZW50UGFnZVNob3dpbmdLZXlcIlxuICAgIFtjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleV09XCJjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleVwiXG4gICAgKGNvbXBvbmVudFN0YXRlQ2hhbmdlZCk9XCJkYXRhVmlld0NvbXBvbmVudFN0YXRlJC5uZXh0KCRldmVudClcIlxuICAgIFtwYXJlbnRUZW1wbGF0ZXNdPVwidGVtcGxhdGVzJCB8IGFzeW5jXCJcbiAgICBbdGFibGVBbGxvd1NlbGVjdEFsbF09XCJ0YWJsZUFsbG93U2VsZWN0QWxsXCJcbiAgICBbdGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGRdPVwidGFibGVTZWxlY3Rpb25FbmFibGVkRmllbGRcIlxuICA+XG4gIDwvb2N4LWRhdGEtdmlldz5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudD5cbiAgPG9jeC1jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uXG4gICAgKm5nSWY9XCJsYXlvdXQgPT09ICd0YWJsZSdcIlxuICAgIFtzZWxlY3RlZEdyb3VwS2V5XT1cInNlbGVjdGVkR3JvdXBLZXkgPz8gZGVmYXVsdEdyb3VwS2V5XCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbZGVmYXVsdEdyb3VwS2V5XT1cImRlZmF1bHRHcm91cEtleSAhPT0gY3VzdG9tR3JvdXBLZXkgPyBkZWZhdWx0R3JvdXBLZXkgOiAnJ1wiXG4gICAgW2N1c3RvbUdyb3VwS2V5XT1cImN1c3RvbUdyb3VwS2V5XCJcbiAgICBbcGxhY2Vob2xkZXJLZXldPVwiZ3JvdXBTZWxlY3Rpb25Ob0dyb3VwU2VsZWN0ZWRLZXlcIlxuICAgIChncm91cFNlbGVjdGlvbkNoYW5nZWQpPVwib25Db2x1bW5Hcm91cFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAoY29tcG9uZW50U3RhdGVDaGFuZ2VkKT1cImNvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50U3RhdGUkLm5leHQoJGV2ZW50KVwiXG4gID48L29jeC1jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdHJpbmdUYWJsZUNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3N0cmluZ1RhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVEYXRlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdGFibGVEYXRlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVRhYmxlQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfZGF0ZVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2RhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVSZWxhdGl2ZURhdGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZVJlbGF0aXZlRGF0ZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVsYXRpdmVEYXRlVGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9yZWxhdGl2ZURhdGVUYWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OnJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90YWJsZUNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90YWJsZVRyYW5zbGF0aW9uS2V5Q2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RhYmxlVHJhbnNsYXRpb25LZXlDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl90cmFuc2xhdGlvbktleVRhYmxlQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDpyb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2dyaWRJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2dyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNncmlkSXRlbSBsZXQtaXRlbT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCI+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LWl0ZW0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW1cIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbnVtYmVyTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9udW1iZXJMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfcmVsYXRpdmVEYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2N1c3RvbUxpc3RWYWx1ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc3RyaW5nTGlzdFZhbHVlIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9zdHJpbmdMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVMaXN0VmFsdWUgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVMaXN0VmFsdWVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlTGlzdFZhbHVlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfc3RyaW5nVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNudW1iZXJUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX251bWJlclRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tVGFibGVGaWx0ZXJDZWxsIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9jdXN0b21UYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX2RhdGVUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9kYXRlVGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3Jvd09iamVjdDogcm93T2JqZWN0LCBjb2x1bW46Y29sdW1ufVwiXG4gID5cbiAgPC9uZy1jb250YWluZXJcbj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3dPYmplY3Q6IHJvd09iamVjdCwgY29sdW1uOmNvbHVtbn1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyXG4+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiX3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfdHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGxcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93T2JqZWN0OiByb3dPYmplY3QsIGNvbHVtbjpjb2x1bW59XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lclxuPjwvbmctdGVtcGxhdGU+XG4iXX0=